fix: Adds name support for all mods (#1128)
This commit is contained in:
parent
b1cf95f810
commit
ffdc08259f
33 changed files with 404 additions and 343 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue