#W# New: Working on adding new mobs.

This commit is contained in:
WarrentyExpired 2026-10-29 18:52:00 -04:00
parent ec8264feb0
commit 5bdc30d7ea
17 changed files with 382 additions and 68 deletions

View file

@ -52,7 +52,8 @@
"homeRange": 4, "homeRange": 4,
"walkingRange": -1, "walkingRange": -1,
"entries": [ "entries": [
{ "name": "nightmare", "probability": 100, "maxCount": 1 } { "name": "nightmare", "probability": 98, "maxCount": 1 },
{ "name": "hellishnightmare", "probability": 2, "maxCount": 1}
] ]
}, },
{ {

62
Info/NewAnimationIds.txt Normal file
View file

@ -0,0 +1,62 @@
anim2.mul
<ID> <Name>
1072 Ogre - Added
1073 Ogre Lord - Added
1074 Ogre King
1075 Ettin - Added
1076 Ettin Lord
1077 Ratman - Added
1078 Ratman Archer - Added
1079 Ratman Mage - Added
1080 Skeleton - Added
1081 Skeleton Warrior - Added
1082 Skeletal Mage Flying -Added
1083 Orcish Mage - Added
1084 Corpser - Added
1085 Large Corpser
1086 Elder Gazer - Added
1087 Evil Mage - Added
1088 Evil Mage Lord - Added
1089 Ancient Lich - Added
1090 Shambler
1091-1095 Balrons
1096 Ent
1097 Larger Ent
1098 Ancient Ent
1099 Dragon Turtle
1100 Large Crab Monster Thing
1101 Daemon Knight
1102 Earth Elemental - Added
1103 Fire Elemental Human - Added
1104 Ice Elemental - Added
1105 Poison/Blood/Acid/Water Elemental Add Hue - Added
1106 Air Elemenatal - Added
1107 Moss Elemental
1108 Rock Monster Elemental?
1109 Crystal Giant
1110 Fire Giant
1111 Fire God/Daemon
1112 Ice Giant
1113 Water Giant
1114 Very Large Daemon
1115 Very Large Daemon with Skull for Head
1117 Giant Black Dragon
1118 Giant Ice Dragon
1119 - 1125 Different Color Wyrms
1126 Black Knight
1127 Exodus
1128 Fire Lion - Added Smoldering Lion
1129 Hell Beast
1130 Large Winged Huminod Beast
#anim5.mul
1131 Fire Nightmare - Added Hellish Nightmare
1132 Dark Lion - Added Dark Lion
1133 Skeletal Lion
1134 Fire Unicorn
1135 Hell Steed
1136 Griffon
1137 Hippogriffon
1139 Skeleton Archer - Added
1140 - 1143 Clydesdale Horse - Added
1144 - 1147 Clydesdale Horse with Saddles - Added

View file

@ -1,57 +1,3 @@
anim2.mul Hellish Nightmare
<ID> <Name> Smoldering Lion
1072 Ogre Dark Lion
1073 Ogre Lord
1074 Ogre King
1075 Ettin
1076 Ettin Lord
1077 Ratman
1078 Ratman Archer
1079 Ratman Mage
1080 Skeleton
1081 Skeleton Warrior
1082 Skeletal Mage Flying
1083 Orcish Mage
1084 Corpser
1085 Large Corpser
1086 Elder Gazer
1087 Evil Mage
1088 Evil Mage Lord
1089 Ancient Lich
1090 Shambler
1091-1095 Balrons
1096 Ent
1097 Larger Ent
1098 Ancient Ent
1099 Dragon Turtle
1100 Large Crab Monster Thing
1101 Daemon Knight
1102 Earth Elemental
1103 Fire Elemental Human
1104 Ice Elemental
1105 Poison/Blood/Acid/Water Elemental Add Hue
1106 Air Elemenatal?
1107 Moss Elemental
1108 Rock Monster Elemental?
1109 Crystal Giant
1110 Fire Giant
1111 Fire God/Daemon
1112 Ice Giant
1113 Water Giant
1114 Very Large Daemon
1115 Very Large Daemon with Skull for Head
1117 Giant Black Dragon
1118 Giant Ice Dragon
1119 - 1125 Different Color Wyrms
1126 Black Knight
1127 Exodus
1128 Fire Lion
1129 Hell Beast
1130 Large Winged Huminod Beast
#anim5.mul
1131 Fire Nightmare
1132 Dark Lion
1133 Skeletal Lion
1134 Fire Unicorn
1135 Hell Stee

View file

@ -0,0 +1,66 @@
using ModernUO.Serialization;
namespace Server.Mobiles
{
/*[TypeAlias(
"Server.Mobiles.BrownHorse",
"Server.Mobiles.DirtyHorse",
"Server.Mobiles.GrayHorse",
"Server.Mobiles.TanHorse"
)]*/
[SerializationGenerator(0, false)]
public partial class ClydesdaleHorse : BaseMount
{
private static readonly int[] m_IDs =
{
1140, 1144,
1141, 1145,
1142, 1146,
1143, 1147
};
public override string DefaultName => "a clydesdale";
[Constructible]
public ClydesdaleHorse() : base(1140, 1143, AIType.AI_Animal, FightMode.Aggressor)
{
var random = Utility.Random(4);
Body = m_IDs[random * 2];
ItemID = m_IDs[random * 2 + 1];
//Body = 1140;
//ItemID = 1144;
BaseSoundID = 0xA8;
SetStr(22, 98);
SetDex(56, 75);
SetInt(6, 10);
SetHits(28, 45);
SetMana(0);
SetDamage(3, 4);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 15, 20);
SetSkill(SkillName.MagicResist, 25.1, 30.0);
SetSkill(SkillName.Tactics, 29.3, 44.0);
SetSkill(SkillName.Wrestling, 29.3, 44.0);
Fame = 300;
Karma = 300;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 29.1;
}
public override string CorpseName => "a horse corpse";
public override int Meat => 3;
public override int Hides => 10;
public override FoodType FavoriteFood => FoodType.FruitsAndVeggies | FoodType.GrainsAndHay;
}
}

View file

@ -0,0 +1,68 @@
using ModernUO.Serialization;
using Server.Engines.Plants;
using Server.Items;
namespace Server.Mobiles
{
[SerializationGenerator(0, false)]
public partial class DarkLion : BaseMount
{
public override string DefaultName => "a dark lion";
[Constructible]
public DarkLion() : base(1132, 1132, AIType.AI_Melee)
{
SetStr(801, 1010);
SetDex(171, 270);
SetInt(301, 325);
SetHits(901, 1100);
SetMana(60);
SetDamage(15, 25);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Energy, 50);
SetResistance(ResistanceType.Physical, 55, 70);
SetResistance(ResistanceType.Fire, 30, 40);
SetResistance(ResistanceType.Cold, 15, 25);
SetResistance(ResistanceType.Poison, 40, 50);
SetResistance(ResistanceType.Energy, 60, 70);
SetSkill(SkillName.Anatomy, 75.1, 80.0);
SetSkill(SkillName.MagicResist, 85.1, 100.0);
SetSkill(SkillName.Tactics, 100.1, 110.0);
SetSkill(SkillName.Wrestling, 100.1, 120.0);
Fame = 18000;
Karma = -18000;
Tamable = true;
ControlSlots = 4;
MinTameSkill = 98.7;
}
public override string CorpseName => "a dark lion corpse";
public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using per landed hit */
public override bool StatLossAfterTame => true;
public override int TreasureMapLevel => 5;
public override int Meat => 16;
public override int Hides => 60;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
private static MonsterAbility[] _abilities = { MonsterAbilities.BloodBathAttack };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 3);
AddLoot(LootPack.Gems, 4);
}
}
}

View file

@ -0,0 +1,102 @@
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[SerializationGenerator(0, false)]
public partial class HellishNightmare : BaseMount
{
public override string DefaultName => "a hellish nightmare";
[Constructible]
public HellishNightmare() : base(1131, 1131, AIType.AI_Mage)
{
BaseSoundID = Core.AOS ? 0xA8 : 0x16A;
// Publish 97
if (Core.TOL)
{
if (Utility.RandomDouble() < 0.3)
{
SetStr(296, 315);
ControlSlots = 2;
}
else
{
SetStr(496, 525);
ControlSlots = 3;
}
}
else
{
SetStr(696, 725);
ControlSlots = 3;
}
SetDex(116, 145);
SetInt(116, 145);
SetHits(498, 715);
SetDamage(16, 22);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Fire, 65);
SetDamageType(ResistanceType.Energy, 30);
SetResistance(ResistanceType.Physical, 55, 65);
SetResistance(ResistanceType.Fire, 60, 70);
SetResistance(ResistanceType.Cold, 60, 70);
SetResistance(ResistanceType.Poison, 30, 40);
SetResistance(ResistanceType.Energy, 20, 30);
SetSkill(SkillName.EvalInt, 40.4, 90.0);
SetSkill(SkillName.Magery, 40.4, 90.0);
SetSkill(SkillName.MagicResist, 85.3, 100.0);
SetSkill(SkillName.Tactics, 97.6, 100.0);
SetSkill(SkillName.Wrestling, 80.5, 92.5);
Fame = 18000;
Karma = -18000;
VirtualArmor = 60;
Tamable = true;
MinTameSkill = 100.1;
Body = 1131;
ItemID = 1131;
PackItem(new SulfurousAsh(Utility.RandomMinMax(3, 5)));
}
public override int StepsMax => 6400;
public override string CorpseName => "a hellish nightmare corpse";
public override int Meat => 5;
public override int Hides => 10;
public override HideType HideType => HideType.Barbed;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Average);
AddLoot(LootPack.LowScrolls);
AddLoot(LootPack.Potions);
}
public override int GetAngerSound()
{
if (!Controlled)
{
return 0x16A;
}
return base.GetAngerSound();
}
}
}

View file

@ -0,0 +1,65 @@
using System;
using ModernUO.Serialization;
using Server.Items;
namespace Server.Mobiles
{
[SerializationGenerator(0, false)]
public partial class SmolderingLion : BaseCreature
{
public override string DefaultName => "a smoldering lion";
[Constructible]
public SmolderingLion() : base(AIType.AI_Melee, FightMode.Closest)
{
Body = 1128;
BaseSoundID = 0x69;
SetStr(250, 300);
SetDex(100, 150);
SetInt(50, 100);
SetHits(150, 2000);
SetDamage(8, 14);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Fire, 50);
SetResistance(ResistanceType.Physical, 35, 45);
SetResistance(ResistanceType.Fire, 60, 70);
SetResistance(ResistanceType.Cold, 20, 30);
SetResistance(ResistanceType.Poison, 10, 20);
SetResistance(ResistanceType.Energy, 20, 30);
SetSkill(SkillName.MagicResist, 50.0, 70.0);
SetSkill(SkillName.Tactics, 60.0, 80.0);
SetSkill(SkillName.Wrestling, 60.0, 80.0);
Fame = 3500;
Karma = -3500;
Tamable = true;
ControlSlots = 2;
MinTameSkill = 75.1;
PackItem(new SulfurousAsh(Utility.RandomMinMax(2, 4)));
}
public override string CorpseName => "a smoldering lion corpse";
public override bool ReacquireOnMovement => true;
public override int Meat => 2;
public override int Hides => 10;
public override HideType HideType => HideType.Spined;
public override FoodType FavoriteFood => FoodType.Meat;
public override PackInstinct PackInstinct => PackInstinct.Feline;
private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath };
public override MonsterAbility[] GetMonsterAbilities() => _abilities;
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
AddLoot(LootPack.Meager);
}
}
}

View file

@ -9,8 +9,9 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public AcidElemental() : base(AIType.AI_Mage) public AcidElemental() : base(AIType.AI_Mage)
{ {
Body = 0x9E; Body = 1105; //0x9E;
BaseSoundID = 278; BaseSoundID = 278;
Hue = 58;
SetStr(326, 355); SetStr(326, 355);
SetDex(66, 85); SetDex(66, 85);

View file

@ -8,7 +8,7 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public AirElemental() : base(AIType.AI_Mage) public AirElemental() : base(AIType.AI_Mage)
{ {
Body = 13; Body = 1106; //13;
Hue = 0x4001; Hue = 0x4001;
BaseSoundID = 655; BaseSoundID = 655;

View file

@ -8,8 +8,9 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public BloodElemental() : base(AIType.AI_Mage) public BloodElemental() : base(AIType.AI_Mage)
{ {
Body = 159; Body = 1105; //159;
BaseSoundID = 278; BaseSoundID = 278;
Hue = 33;
SetStr(526, 615); SetStr(526, 615);
SetDex(66, 85); SetDex(66, 85);

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public FireElemental() : base(AIType.AI_Mage) public FireElemental() : base(AIType.AI_Mage)
{ {
Body = 15; Body = 1103; //15;
BaseSoundID = 838; BaseSoundID = 838;
SetStr(126, 155); SetStr(126, 155);
@ -49,7 +49,7 @@ namespace Server.Mobiles
public override string DefaultName => "a fire elemental"; public override string DefaultName => "a fire elemental";
public override bool BleedImmune => true; public override bool BleedImmune => true;
public override int TreasureMapLevel => 2; public override int TreasureMapLevel => 2;
public override void GenerateLoot() public override void GenerateLoot()

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public IceElemental() : base(AIType.AI_Mage) public IceElemental() : base(AIType.AI_Mage)
{ {
Body = 161; Body = 1104; //161;
BaseSoundID = 268; BaseSoundID = 268;
SetStr(156, 185); SetStr(156, 185);

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public PoisonElemental() : base(AIType.AI_Mage) public PoisonElemental() : base(AIType.AI_Mage)
{ {
Body = 162; Body = 1105; //162;
BaseSoundID = 263; BaseSoundID = 263;
SetStr(426, 515); SetStr(426, 515);

View file

@ -14,8 +14,9 @@ namespace Server.Mobiles
public WaterElemental() : base(AIType.AI_Mage) public WaterElemental() : base(AIType.AI_Mage)
{ {
_hasDecanter = true; _hasDecanter = true;
Body = 16; Body = 1105; //16;
BaseSoundID = 278; BaseSoundID = 278;
Hue = 88;
SetStr(126, 155); SetStr(126, 155);
SetDex(66, 85); SetDex(66, 85);

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
[Constructible] [Constructible]
public EarthElemental() : base(AIType.AI_Melee) public EarthElemental() : base(AIType.AI_Melee)
{ {
Body = 14; Body = 1102; //14;
BaseSoundID = 268; BaseSoundID = 268;
SetStr(126, 155); SetStr(126, 155);

View file

@ -18,6 +18,7 @@ namespace Server.Mobiles
Add(new AnimalBuyInfo(1, "a pack horse", typeof(PackHorse), 631, 10, 291, 0)); Add(new AnimalBuyInfo(1, "a pack horse", typeof(PackHorse), 631, 10, 291, 0));
Add(new AnimalBuyInfo(1, "a pack llama", typeof(PackLlama), 565, 10, 292, 0)); Add(new AnimalBuyInfo(1, "a pack llama", typeof(PackLlama), 565, 10, 292, 0));
Add(new AnimalBuyInfo(1, "a rabbit", typeof(Rabbit), 106, 10, 205, 0)); Add(new AnimalBuyInfo(1, "a rabbit", typeof(Rabbit), 106, 10, 205, 0));
Add(new AnimalBuyInfo(1, "a clydesdale", typeof(ClydesdaleHorse), 1520, 10, 1140, 0));
if (!Core.AOS) if (!Core.AOS)
{ {

2
Run.sh
View file

@ -9,5 +9,5 @@ else
echo "________________________________" echo "________________________________"
echo "| Starting Server...." echo "| Starting Server...."
echo "--------------------------------" echo "--------------------------------"
dotnet ./Distribution/ModernUO.dll dotnet publish Projects/Application/Application.csproj -c Release -r linux-x64 --self-contained=false && dotnet ./Distribution/ModernUO.dll
fi fi