fix: Adds name support for all mods (#1128)

This commit is contained in:
Kamron Batman 2022-10-15 10:46:31 -07:00 • committed by GitHub
parent b1cf95f810
commit ffdc08259f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 404 additions and 343 deletions

View file

@ -44,7 +44,7 @@ public class GraspingClaw : MonsterAbility
*/
var effect = -(target.PhysicalResistance * 15 / 100);
var mod = new ResistanceMod(ResistanceType.Physical, effect);
var mod = new ResistanceMod(ResistanceType.Physical, "GraspingClaw", effect);
target.FixedEffect(0x37B9, 10, 5);
target.AddResistanceMod(mod);

View file

@ -78,18 +78,17 @@ namespace Server.Mobiles
return;
}
if (m_Table.TryGetValue(defender, out var timer))
if (m_Table.Remove(defender, out var timer))
{
timer.DoExpire();
}
defender.FixedParticles(0x3709, 10, 30, 5052, EffectLayer.LeftFoot);
defender.PlaySound(0x208);
defender.SendLocalizedMessage(
1070833
); // The creature fans you with fire, reducing your resistance to fire attacks.
// The creature fans you with fire, reducing your resistance to fire attacks.
defender.SendLocalizedMessage(1070833);
var mod = new ResistanceMod(ResistanceType.Fire, -10);
var mod = new ResistanceMod(ResistanceType.Fire, "FireResistFanningFire", -10);
defender.AddResistanceMod(mod);
m_Table[defender] = timer = new ExpireTimer(defender, mod);
@ -127,13 +126,13 @@ namespace Server.Mobiles
m_Mobile.RemoveResistanceMod(m_Mod);
Stop();
m_Table.Remove(m_Mobile);
}
protected override void OnTick()
{
m_Mobile.SendLocalizedMessage(1070834); // Your resistance to fire attacks has returned.
DoExpire();
m_Table.Remove(m_Mobile);
}
}
}

View file

@ -126,7 +126,7 @@ namespace Server.Mobiles
{
var s = target.Skills[i];
target.AddSkillMod(new TimedSkillMod(s.SkillName, true, s.Base * -0.28, delay));
target.AddSkillMod(new TimedSkillMod(s.SkillName, $"{s.Name}Satyr", true, s.Base * -0.28, delay));
}
var count = (int)Math.Round(delay.TotalSeconds / 1.25);

View file

@ -105,21 +105,20 @@ namespace Server.Mobiles
return;
}
if (m_Table.TryGetValue(defender, out var timer))
if (m_Table.Remove(defender, out var timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070837); // The creature lands another blow in your weakened state.
}
else
{
defender.SendLocalizedMessage(
1070836
); // The blow from the creature's claws has made you more susceptible to physical attacks.
// The blow from the creature's claws has made you more susceptible to physical attacks.
defender.SendLocalizedMessage(1070836);
}
var effect = -(defender.PhysicalResistance * 15 / 100);
var mod = new ResistanceMod(ResistanceType.Physical, effect);
var mod = new ResistanceMod(ResistanceType.Physical, "PhysicalResistGraspingClaw", effect);
defender.FixedEffect(0x37B9, 10, 5);
defender.AddResistanceMod(mod);
@ -159,13 +158,13 @@ namespace Server.Mobiles
{
m_Mobile.RemoveResistanceMod(m_Mod);
Stop();
m_Table.Remove(m_Mobile);
}
protected override void OnTick()
{
m_Mobile.SendLocalizedMessage(1070838); // Your resistance to physical attacks has returned.
DoExpire();
m_Table.Remove(m_Mobile);
}
}
}

View file

@ -114,7 +114,7 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender, damage);
if (!IsFanned(defender) && Utility.RandomDouble() < 0.05)
if (m_Table.Add(defender) && Utility.RandomDouble() < 0.05)
{
/* Fanning Fire
* Graphic: Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x3709" ItemIdName: "fire column" FromLocation: "(994 325, 16)" ToLocation: "(994 325, 16)" Speed: "10" Duration: "30" FixedDirection: "True" Explode: "False" Hue: "0x0" RenderMode: "0x0" Effect: "0x34" ExplodeEffect: "0x1" ExplodeSound: "0x0" Serial: "0x57D4F5B" Layer: "5" Unknown: "0x0"
@ -131,7 +131,7 @@ namespace Server.Mobiles
var effect = -(defender.FireResistance / 10);
var mod = new ResistanceMod(ResistanceType.Fire, effect);
var mod = new ResistanceMod(ResistanceType.Fire, "FireResistFanningFire", effect);
defender.FixedParticles(0x37B9, 10, 30, 0x34, EffectLayer.RightFoot);
defender.PlaySound(0x208);
@ -143,11 +143,10 @@ namespace Server.Mobiles
var timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(10.0));
timer.Start();
m_Table.Add(defender);
}
}
public bool IsFanned(Mobile m) => m_Table.Contains(m);
public static bool IsFanned(Mobile m) => m_Table.Contains(m);
public override void Serialize(IGenericWriter writer)
{

View file

@ -72,21 +72,20 @@ namespace Server.Mobiles
* Effect: Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x37B9" ItemIdName: "glow" FromLocation: "(1048 779, 6)" ToLocation: "(1048 779, 6)" Speed: "10" Duration: "5" FixedDirection: "True" Explode: "False"
*/
if (m_FlurryOfTwigsTable.TryGetValue(defender, out var timer))
if (m_FlurryOfTwigsTable.Remove(defender, out var timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070851); // The creature lands another blow in your weakened state.
}
else
{
defender.SendLocalizedMessage(
1070850
); // The creature's flurry of twigs has made you more susceptible to physical attacks!
// The creature's flurry of twigs has made you more susceptible to physical attacks!
defender.SendLocalizedMessage(1070850);
}
var effect = -(defender.PhysicalResistance * 15 / 100);
var mod = new ResistanceMod(ResistanceType.Physical, effect);
var mod = new ResistanceMod(ResistanceType.Physical, "PhysicalResistFlurryOfTwigs", effect);
defender.FixedEffect(0x37B9, 10, 5);
defender.AddResistanceMod(mod);
@ -99,7 +98,7 @@ namespace Server.Mobiles
if (Utility.RandomDouble() < 0.05)
{
/* Chlorophyl Blast
/* Chlorophyll Blast
* Start cliloc: 1070827
* Effect: Energy resistance -50% for 10 seconds
* End cliloc: 1070829
@ -113,14 +112,13 @@ namespace Server.Mobiles
}
else
{
defender.SendLocalizedMessage(
1070827
); // The creature's attack has made you more susceptible to energy attacks!
// The creature's attack has made you more susceptible to energy attacks!
defender.SendLocalizedMessage(1070827);
}
var effect = -(defender.EnergyResistance / 2);
var mod = new ResistanceMod(ResistanceType.Energy, effect);
var mod = new ResistanceMod(ResistanceType.Energy, "EnergyResistChlorophyllBlast", effect);
defender.FixedEffect(0x37B9, 10, 5);
defender.AddResistanceMod(mod);
@ -161,7 +159,6 @@ namespace Server.Mobiles
{
m_Mobile.RemoveResistanceMod(m_Mod);
Stop();
m_Table.Remove(m_Mobile);
}
protected override void OnTick()
@ -176,6 +173,7 @@ namespace Server.Mobiles
}
DoExpire();
m_Table.Remove(m_Mobile);
}
}
}

View file

@ -110,7 +110,7 @@ namespace Server.Mobiles
* End ASCII: "The corruption of your armor has worn off"
*/
if (m_Table.TryGetValue(defender, out var timer))
if (m_Table.Remove(defender, out var timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070845); // The creature continues to corrupt your armor!
@ -120,42 +120,59 @@ namespace Server.Mobiles
defender.SendLocalizedMessage(1070846); // The creature magically corrupts your armor!
}
var mods = new List<ResistanceMod>();
if (Core.ML)
{
if (defender.PhysicalResistance > 0)
{
mods.Add(new ResistanceMod(ResistanceType.Physical, -(defender.PhysicalResistance / 2)));
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Physical,
"RuneCorruption",
-(defender.PhysicalResistance / 2)
)
);
}
if (defender.FireResistance > 0)
{
mods.Add(new ResistanceMod(ResistanceType.Fire, -(defender.FireResistance / 2)));
defender.AddResistanceMod(new ResistanceMod(ResistanceType.Fire, "RuneCorruption", -(defender.FireResistance / 2)));
}
if (defender.ColdResistance > 0)
{
mods.Add(new ResistanceMod(ResistanceType.Cold, -(defender.ColdResistance / 2)));
defender.AddResistanceMod(new ResistanceMod(ResistanceType.Cold, "RuneCorruption", -(defender.ColdResistance / 2)));
}
if (defender.PoisonResistance > 0)
{
mods.Add(new ResistanceMod(ResistanceType.Poison, -(defender.PoisonResistance / 2)));
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Poison,
"RuneCorruption",
-(defender.PoisonResistance / 2)
)
);
}
if (defender.EnergyResistance > 0)
{
mods.Add(new ResistanceMod(ResistanceType.Energy, -(defender.EnergyResistance / 2)));
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Energy,
"RuneCorruption",
-(defender.EnergyResistance / 2)
)
);
}
}
else
{
if (defender.PhysicalResistance > 0)
{
mods.Add(
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Physical,
"RuneCorruption",
defender.PhysicalResistance > 70 ? -70 : -defender.PhysicalResistance
)
);
@ -163,9 +180,10 @@ namespace Server.Mobiles
if (defender.FireResistance > 0)
{
mods.Add(
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Fire,
"RuneCorruption",
defender.FireResistance > 70 ? -70 : -defender.FireResistance
)
);
@ -173,9 +191,10 @@ namespace Server.Mobiles
if (defender.ColdResistance > 0)
{
mods.Add(
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Cold,
"RuneCorruption",
defender.ColdResistance > 70 ? -70 : -defender.ColdResistance
)
);
@ -183,9 +202,10 @@ namespace Server.Mobiles
if (defender.PoisonResistance > 0)
{
mods.Add(
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Poison,
"RuneCorruption",
defender.PoisonResistance > 70 ? -70 : -defender.PoisonResistance
)
);
@ -193,23 +213,19 @@ namespace Server.Mobiles
if (defender.EnergyResistance > 0)
{
mods.Add(
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Energy,
"RuneCorruption",
defender.EnergyResistance > 70 ? -70 : -defender.EnergyResistance
)
);
}
}
for (var i = 0; i < mods.Count; ++i)
{
defender.AddResistanceMod(mods[i]);
}
defender.FixedEffect(0x37B9, 10, 5);
timer = new ExpireTimer(defender, mods, TimeSpan.FromSeconds(5.0));
timer = new ExpireTimer(defender, TimeSpan.FromSeconds(5.0));
timer.Start();
m_Table[defender] = timer;
}
@ -229,11 +245,12 @@ namespace Server.Mobiles
{
for (var i = 0; i < Skills.Length; ++i)
{
Skills[i].Cap = Math.Max(100.0, Skills[i].Cap * 0.9);
var skill = Skills[i];
skill.Cap = Math.Max(100.0, skill.Cap * 0.9);
if (Skills[i].Base > Skills[i].Cap)
if (skill.Base > skill.Cap)
{
Skills[i].Base = Skills[i].Cap;
skill.Base = skill.Cap;
}
}
}
@ -242,29 +259,20 @@ namespace Server.Mobiles
private class ExpireTimer : Timer
{
private readonly Mobile m_Mobile;
private readonly List<ResistanceMod> m_Mods;
public ExpireTimer(Mobile m, List<ResistanceMod> mods, TimeSpan delay) : base(delay)
{
m_Mobile = m;
m_Mods = mods;
}
public ExpireTimer(Mobile m, TimeSpan delay) : base(delay) => m_Mobile = m;
public void DoExpire()
{
for (var i = 0; i < m_Mods.Count; ++i)
{
m_Mobile.RemoveResistanceMod(m_Mods[i]);
}
m_Mobile.RemoveResistanceMod("RuneCorruption");
Stop();
m_Table.Remove(m_Mobile);
}
protected override void OnTick()
{
m_Mobile.SendMessage("The corruption of your armor has worn off");
DoExpire();
m_Table.Remove(m_Mobile);
}
}
}