fix: Round 3 of speed updates for NPCs (#963)
- [X] Fixes mobs having 0 speed. - [X] Fixes mobs missing legacy speeds.
This commit is contained in:
parent
1e5b1a11a8
commit
89f3a0522c
40 changed files with 76 additions and 73 deletions
|
|
@ -2,7 +2,7 @@
|
|||
{
|
||||
"name": "Slow",
|
||||
"active": 0.6,
|
||||
"passive": 1.2,
|
||||
"passive": 1.4,
|
||||
"types": [
|
||||
"AntLion", "ArcticOgreLord", "BogThing",
|
||||
"Bogle", "BoneKnight", "EarthElemental",
|
||||
|
|
@ -14,13 +14,14 @@
|
|||
"SewerRat", "Skeleton", "Slime",
|
||||
"Zombie", "Walrus", "RestlessSoul",
|
||||
"CrystalElemental", "DarknightCreeper", "MoundOfMaggots",
|
||||
"Juggernaut", "Yamandon", "Serado"
|
||||
"Juggernaut", "Yamandon", "Serado",
|
||||
"GreaterDragon", "PlagueBeastLord"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Fast",
|
||||
"active": 0.4,
|
||||
"passive": 0.8,
|
||||
"active": 0.3,
|
||||
"passive": 1.0,
|
||||
"types": [
|
||||
"LordOaks", "Silvani", "AirElemental",
|
||||
"AncientWyrm", "Balron", "BladeSpirits",
|
||||
|
|
@ -39,12 +40,18 @@
|
|||
"Grobu", "Gnaw", "Guile",
|
||||
"Irk", "Spite", "LadyLissith",
|
||||
"LadySabrix", "Malefic", "Silk",
|
||||
"Virulent", "SeaHorse"
|
||||
"Virulent", "SeaHorse", "UnholyFamiliar",
|
||||
"HolyFamiliar", "GiantIceWorm", "Phoenix",
|
||||
"Succubus", "EnragedRabbit", "EnragedHind",
|
||||
"EnragedHart", "EnragedBlackBear", "EnragedEagle",
|
||||
"RagingGrizzlyBear", "CorrosiveSlime", "DarkWisp",
|
||||
"DarkGuardian", "HarrowerTentacles", "ServantOfSemidar",
|
||||
"Ninja", "Samurai"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Very Fast",
|
||||
"active": 0.35,
|
||||
"active": 0.25,
|
||||
"passive": 0.7,
|
||||
"types": [
|
||||
"Barracoon", "Mephitis", "Neira",
|
||||
|
|
@ -61,7 +68,7 @@
|
|||
{
|
||||
"name": "Medium",
|
||||
"active": 0.5,
|
||||
"passive": 1.0,
|
||||
"passive": 1.2,
|
||||
"types": [
|
||||
"AcidElemental", "AgapiteElemental", "Alligator",
|
||||
"AncientLich", "Betrayer", "Bird",
|
||||
|
|
@ -133,7 +140,9 @@
|
|||
"Kappa", "KazeKemono", "DeathwatchBeetle",
|
||||
"TsukiWolf", "YomotsuElder", "YomotsuPriest",
|
||||
"YomotsuWarrior", "RevenantLion", "Oni",
|
||||
"Gaman", "Crane", "Beetle"
|
||||
"Gaman", "Crane", "Beetle",
|
||||
"Parrot", "ElfBrigand", "GreaterMongbat",
|
||||
"AnimatedWeapon", "Reaper", "Corpser"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ namespace Server.Mobiles
|
|||
public class UnholyFamiliar : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public UnholyFamiliar()
|
||||
: base(AIType.AI_Melee)
|
||||
public UnholyFamiliar() : base(AIType.AI_Melee)
|
||||
{
|
||||
Body = 99;
|
||||
BaseSoundID = 0xE5;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ namespace Server.Factions
|
|||
|
||||
public BaseFactionGuard(string title) : base(AIType.AI_Melee)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
Orders = new Orders(this);
|
||||
Title = title;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ namespace Server.Engines.Quests.Necro
|
|||
{
|
||||
m_Necromancer = necromancer;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
InitStats(45, 30, 5);
|
||||
Title = "the Paladin";
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Server.Engines.Quests.Ninja
|
|||
[Constructible]
|
||||
public Henchman() : base(AIType.AI_Melee, FightMode.Aggressor)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
InitStats(45, 30, 5);
|
||||
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
Body = 3;
|
||||
BaseSoundID = 471;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(20, 40);
|
||||
SetDex(40, 60);
|
||||
SetInt(15, 25);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
BaseSoundID = 422;
|
||||
Hue = 0x66A;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(91, 115);
|
||||
SetDex(61, 80);
|
||||
SetInt(86, 105);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
Hue = Utility.RandomAnimalHue();
|
||||
BaseSoundID = 0x69;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(9);
|
||||
SetDex(35);
|
||||
SetInt(5);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
Body = 103;
|
||||
BaseSoundID = 362;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(6000, 6020);
|
||||
SetDex(0);
|
||||
SetInt(850, 870);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
|
||||
Hue = Utility.RandomAnimalHue();
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(10, 20);
|
||||
SetDex(45, 65);
|
||||
SetInt(10, 15);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
[Constructible]
|
||||
public YoungNinja() : base(AIType.AI_Melee, FightMode.Aggressor)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
InitStats(45, 30, 5);
|
||||
SetHits(20, 30);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Server.Engines.Quests.Samurai
|
|||
[Constructible]
|
||||
public YoungRonin() : base(AIType.AI_Melee, FightMode.Aggressor)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
InitStats(45, 30, 5);
|
||||
SetHits(10, 20);
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace Server.Engines.Quests.Haven
|
|||
[Constructible]
|
||||
public MilitiaFighter() : base(AIType.AI_Melee)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
InitStats(40, 30, 5);
|
||||
Title = "the Militia Fighter";
|
||||
|
||||
|
|
|
|||
|
|
@ -275,9 +275,9 @@ namespace Server.Engines.Events
|
|||
|
||||
private readonly Mobile m_From;
|
||||
|
||||
public NaughtyTwin(Mobile from)
|
||||
: base(AIType.AI_Melee, FightMode.None)
|
||||
public NaughtyTwin(Mobile from) : base(AIType.AI_Melee, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
if (TrickOrTreat.CheckMobile(from))
|
||||
{
|
||||
Body = from.Body;
|
||||
|
|
|
|||
|
|
@ -145,8 +145,7 @@ namespace Server.Engines.Events
|
|||
public partial class PlayerBones : BaseContainer
|
||||
{
|
||||
[Constructible]
|
||||
public PlayerBones(string name)
|
||||
: base(Utility.RandomMinMax(0x0ECA, 0x0ED2))
|
||||
public PlayerBones(string name) : base(Utility.RandomMinMax(0x0ECA, 0x0ED2))
|
||||
{
|
||||
Name = $"{name}'s bones";
|
||||
|
||||
|
|
@ -168,14 +167,14 @@ namespace Server.Engines.Events
|
|||
|
||||
public override string DefaultName => _deadPlayer != null ? $"{_deadPlayer.Name}'s Zombie Skeleton" : "Zombie Skeleton";
|
||||
|
||||
public ZombieSkeleton(PlayerMobile player = null)
|
||||
: base(AIType.AI_Melee)
|
||||
public ZombieSkeleton(PlayerMobile player = null) : base(AIType.AI_Melee)
|
||||
{
|
||||
_deadPlayer = player;
|
||||
|
||||
Body = 0x93;
|
||||
BaseSoundID = 0x1c3;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(500);
|
||||
SetDex(500);
|
||||
SetInt(500);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace Server.Mobiles
|
|||
|
||||
public BaseTalismanSummon() : base(AIType.AI_Melee, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
// TODO: Stats/skills
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -321,9 +321,6 @@ namespace Server.Mobiles
|
|||
FightMode mode = FightMode.Closest,
|
||||
int iRangePerception = 10,
|
||||
int iRangeFight = 1
|
||||
// ,
|
||||
// double activeSpeed = 0,
|
||||
// double passiveSpeed = 0
|
||||
)
|
||||
{
|
||||
if (iRangePerception == OldRangePerception)
|
||||
|
|
@ -341,16 +338,12 @@ namespace Server.Mobiles
|
|||
|
||||
FightMode = mode;
|
||||
|
||||
// if (activeSpeed > 0 && passiveSpeed > 0)
|
||||
// {
|
||||
// ActiveSpeed = activeSpeed;
|
||||
// PassiveSpeed = passiveSpeed;
|
||||
// CurrentSpeed = passiveSpeed;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// CurrentSpeed = SpeedInfo.MaxMonsterDelay * 2;
|
||||
// }
|
||||
if (LegacySpeedInfo.Enabled && LegacySpeedInfo.GetSpeeds(GetType(), out var activeSpeed, out var passiveSpeed))
|
||||
{
|
||||
ActiveSpeed = activeSpeed;
|
||||
PassiveSpeed = passiveSpeed;
|
||||
CurrentSpeed = passiveSpeed;
|
||||
}
|
||||
|
||||
m_Team = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ namespace Server.Mobiles
|
|||
{
|
||||
private bool m_LastHidden;
|
||||
|
||||
public BaseFamiliar()
|
||||
: base(AIType.AI_Melee)
|
||||
public BaseFamiliar() : base(AIType.AI_Melee)
|
||||
{
|
||||
SetSpeed(0.1, 0.1);
|
||||
}
|
||||
|
||||
public BaseFamiliar(Serial serial) : base(serial)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace Server.Mobiles
|
|||
Body = 0x190;
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.25, 0.55);
|
||||
SetSpeed(0.25, 1.0);
|
||||
|
||||
SetStr(176, 225);
|
||||
SetDex(81, 95);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace Server.Mobiles
|
|||
Body = 0x190;
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.25, 0.55);
|
||||
SetSpeed(0.25, 1.0);
|
||||
|
||||
SetStr(276, 350);
|
||||
SetDex(66, 90);
|
||||
|
|
|
|||
|
|
@ -150,29 +150,18 @@ namespace Server.Mobiles
|
|||
|
||||
public class BaseEnraged : BaseCreature
|
||||
{
|
||||
public BaseEnraged(Mobile summoner)
|
||||
: base(AIType.AI_Melee)
|
||||
public BaseEnraged(Mobile summoner) : base(AIType.AI_Melee)
|
||||
{
|
||||
SetStr(50, 200);
|
||||
SetDex(50, 200);
|
||||
SetHits(50, 200);
|
||||
SetStam(50, 200);
|
||||
|
||||
/*
|
||||
On OSI, all stats are random 50-200, but
|
||||
str is never less than hits, and dex is never
|
||||
less than stam.
|
||||
* On OSI, all stats are random 50-200, but
|
||||
* str is never less than hits, and dex is never
|
||||
* less than stam.
|
||||
*/
|
||||
|
||||
if (Str < Hits)
|
||||
{
|
||||
Str = Hits;
|
||||
}
|
||||
|
||||
if (Dex < Stam)
|
||||
{
|
||||
Dex = Stam;
|
||||
}
|
||||
SetHits(50, Str);
|
||||
SetStam(50, Dex);
|
||||
|
||||
Karma = -1000;
|
||||
Tamable = false;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ namespace Server.Mobiles
|
|||
{
|
||||
Body = 0x117;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(41, 48);
|
||||
SetDex(55);
|
||||
SetInt(75);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Server.Mobiles
|
|||
Body = 212;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(1251, 1550);
|
||||
SetDex(801, 1050);
|
||||
SetInt(151, 400);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ namespace Server.Mobiles
|
|||
{
|
||||
Body = 0x116;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(44, 50);
|
||||
SetDex(35);
|
||||
SetInt(5);
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ namespace Server.Mobiles
|
|||
public class Hydra : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Hydra()
|
||||
: base(AIType.AI_Melee)
|
||||
public Hydra() : base(AIType.AI_Melee)
|
||||
{
|
||||
Body = 0x109;
|
||||
BaseSoundID = 0x16A;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace Server.Mobiles
|
|||
{
|
||||
Body = 574;
|
||||
|
||||
SetSpeed(0.6, 1.25);
|
||||
SetSpeed(0.5, 1.2);
|
||||
SetStr(150);
|
||||
SetDex(150);
|
||||
SetInt(100);
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ namespace Server.Mobiles
|
|||
public class EnergyVortex : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public EnergyVortex()
|
||||
: base(AIType.AI_Melee)
|
||||
public EnergyVortex() : base(AIType.AI_Melee)
|
||||
{
|
||||
if (Core.SE && Utility.RandomDouble() < 0.002) // Per OSI FoF, it's a 1/500 chance.
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,12 +7,10 @@ namespace Server.Mobiles
|
|||
{
|
||||
private static readonly Dictionary<Mobile, ExpireTimer> m_FlurryOfTwigsTable = new();
|
||||
|
||||
private static readonly Dictionary<Mobile, ExpireTimer> m_ChlorophylBlastTable =
|
||||
new();
|
||||
private static readonly Dictionary<Mobile, ExpireTimer> m_ChlorophylBlastTable = new();
|
||||
|
||||
[Constructible]
|
||||
public KazeKemono()
|
||||
: base(AIType.AI_Mage)
|
||||
public KazeKemono() : base(AIType.AI_Mage)
|
||||
{
|
||||
Body = 196;
|
||||
BaseSoundID = 655;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,7 @@ namespace Server.Mobiles
|
|||
private static readonly Dictionary<Mobile, ExpireTimer> m_Table = new();
|
||||
|
||||
[Constructible]
|
||||
public LadyOfTheSnow()
|
||||
: base(AIType.AI_Mage)
|
||||
public LadyOfTheSnow() : base(AIType.AI_Mage)
|
||||
{
|
||||
Body = 252;
|
||||
BaseSoundID = 0x482;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,7 @@ namespace Server.Mobiles
|
|||
private static readonly Dictionary<Mobile, ExpireTimer> m_Table = new();
|
||||
|
||||
[Constructible]
|
||||
public TsukiWolf()
|
||||
: base(AIType.AI_Melee)
|
||||
public TsukiWolf() : base(AIType.AI_Melee)
|
||||
{
|
||||
Body = 250;
|
||||
Hue = Utility.Random(3) == 0 ? Utility.RandomNeutralHue() : 0;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ namespace Server.Mobiles
|
|||
{
|
||||
public BaseShieldGuard() : base(AIType.AI_Melee, FightMode.Aggressor, 14)
|
||||
{
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(1000, 1000, 1000);
|
||||
Title = "the guard";
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ namespace Server.Mobiles
|
|||
[Constructible]
|
||||
public Actor() : base(AIType.AI_Animal, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.6, 1.2);
|
||||
InitStats(31, 41, 51);
|
||||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ namespace Server.Mobiles
|
|||
public class Artist : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Artist()
|
||||
: base(AIType.AI_Animal, FightMode.None)
|
||||
public Artist() : base(AIType.AI_Animal, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.6, 1.2);
|
||||
InitStats(31, 41, 51);
|
||||
|
||||
SetSkill(SkillName.Healing, 36, 68);
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ namespace Server.Mobiles
|
|||
public class Gypsy : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Gypsy()
|
||||
: base(AIType.AI_Animal, FightMode.None)
|
||||
public Gypsy() : base(AIType.AI_Animal, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.6, 1.2);
|
||||
InitStats(31, 41, 51);
|
||||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ namespace Server.Mobiles
|
|||
public class HarborMaster : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public HarborMaster()
|
||||
: base(AIType.AI_Animal, FightMode.None)
|
||||
public HarborMaster() : base(AIType.AI_Animal, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.6, 1.2);
|
||||
InitStats(31, 41, 51);
|
||||
|
||||
SetSkill(SkillName.Mining, 36, 68);
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ namespace Server.Mobiles
|
|||
public class Sculptor : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Sculptor()
|
||||
: base(AIType.AI_Animal, FightMode.None)
|
||||
public Sculptor() : base(AIType.AI_Animal, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.6, 1.2);
|
||||
InitStats(31, 41, 51);
|
||||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ namespace Server.Mobiles
|
|||
|
||||
public Clone(Mobile caster) : base(AIType.AI_Melee, FightMode.None)
|
||||
{
|
||||
SetSpeed(0.3, 1.0);
|
||||
m_Caster = caster;
|
||||
|
||||
Body = caster.Body;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ namespace Server.Mobiles
|
|||
Body = 128;
|
||||
BaseSoundID = 0x467;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(20);
|
||||
SetDex(150);
|
||||
SetInt(125);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Server.Mobiles
|
|||
Body = 74;
|
||||
BaseSoundID = 422;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(55);
|
||||
SetDex(40);
|
||||
SetInt(60);
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ namespace Server.Mobiles
|
|||
public class NatureFury : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public NatureFury()
|
||||
: base(AIType.AI_Melee)
|
||||
public NatureFury() : base(AIType.AI_Melee)
|
||||
{
|
||||
Body = 0x33;
|
||||
Hue = 0x4001;
|
||||
|
||||
SetSpeed(0.3, 1.0);
|
||||
SetStr(150);
|
||||
SetDex(150);
|
||||
SetInt(100);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue