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:
Kamron Batman 2022-03-18 12:56:42 -07:00 • committed by GitHub
parent 1e5b1a11a8
commit 89f3a0522c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 76 additions and 73 deletions

View file

@ -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"
]
}
]

View file

@ -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;

View file

@ -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;

View file

@ -13,6 +13,7 @@ namespace Server.Engines.Quests.Necro
{
m_Necromancer = necromancer;
SetSpeed(0.3, 1.0);
InitStats(45, 30, 5);
Title = "the Paladin";

View file

@ -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();

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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";

View file

@ -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;

View file

@ -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);

View file

@ -11,6 +11,7 @@ namespace Server.Mobiles
public BaseTalismanSummon() : base(AIType.AI_Melee, FightMode.None)
{
SetSpeed(0.3, 1.0);
// TODO: Stats/skills
}

View file

@ -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;

View file

@ -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)

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -19,6 +19,7 @@ namespace Server.Mobiles
{
Body = 0x117;
SetSpeed(0.3, 1.0);
SetStr(41, 48);
SetDex(55);
SetInt(75);

View file

@ -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);

View file

@ -7,6 +7,7 @@ namespace Server.Mobiles
{
Body = 0x116;
SetSpeed(0.3, 1.0);
SetStr(44, 50);
SetDex(35);
SetInt(5);

View file

@ -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;

View file

@ -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);

View file

@ -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.
{

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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";

View file

@ -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();

View file

@ -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);

View file

@ -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();

View file

@ -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);

View file

@ -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();

View file

@ -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;

View file

@ -9,6 +9,7 @@ namespace Server.Mobiles
Body = 128;
BaseSoundID = 0x467;
SetSpeed(0.3, 1.0);
SetStr(20);
SetDex(150);
SetInt(125);

View file

@ -8,6 +8,7 @@ namespace Server.Mobiles
Body = 74;
BaseSoundID = 422;
SetSpeed(0.3, 1.0);
SetStr(55);
SetDex(40);
SetInt(60);

View file

@ -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);