Fixes dictionary uses (#7)

This commit is contained in:
Kamron Batman 2018-11-02 08:16:42 -07:00 • committed by GitHub
parent d4a52344f2
commit 916d404c51
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
161 changed files with 1211 additions and 1722 deletions

View file

@ -165,9 +165,7 @@ namespace Server.Mobiles
public static void StopEffect(Mobile m, bool message)
{
Timer timer = m_Table[m];
if (timer != null)
if (m_Table.TryGetValue(m, out Timer timer))
{
if (message)
m.PublicOverheadMessage(MessageType.Emote, m.SpeechHue, true,
@ -181,15 +179,11 @@ namespace Server.Mobiles
public void DoEffect(Mobile m, int count)
{
if (!m.Alive)
{
StopEffect(m, false);
}
else
{
if (m.FindItemOnLayer(Layer.TwoHanded) is Torch torch && torch.Burning)
{
StopEffect(m, true);
}
else
{
if (count % 4 == 0)

View file

@ -73,22 +73,22 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (Utility.RandomDouble() < 0.1)
{
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
timer.DoExpire();
if (Utility.RandomDouble() >= 0.1)
return;
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.
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
timer.DoExpire();
ResistanceMod mod = new ResistanceMod(ResistanceType.Fire, -10);
defender.AddResistanceMod(mod);
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.
m_Table[defender] = timer = new ExpireTimer(defender, mod);
timer.Start();
}
ResistanceMod mod = new ResistanceMod(ResistanceType.Fire, -10);
defender.AddResistanceMod(mod);
m_Table[defender] = timer = new ExpireTimer(defender, mod);
timer.Start();
}
public override void Serialize(GenericWriter writer)
@ -133,4 +133,4 @@ namespace Server.Mobiles
}
}
}
}
}

View file

@ -140,7 +140,10 @@ namespace Server.Mobiles
public static void SuppressRemove(Mobile target)
{
if (target != null && m_Suppressed[target] is Timer t)
if (target == null)
return;
if (m_Suppressed.TryGetValue(target, out Timer t))
{
if (t.Running)
t.Stop();
@ -199,7 +202,7 @@ namespace Server.Mobiles
{
Item item = m.FindItemOnLayer(layer);
if (item != null && item.Movable)
if (item?.Movable == true)
m.PlaceInBackpack(item);
}
@ -235,4 +238,4 @@ namespace Server.Mobiles
#endregion
}
}
}

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
{
public class Ilhenir : BaseChampion
{
private static Dictionary<Mobile, Timer> m_Table = new Dictionary<Mobile, Timer>();
private static HashSet<Mobile> m_Table = new HashSet<Mobile>();
[Constructible]
public Ilhenir()
@ -230,13 +230,14 @@ namespace Server.Mobiles
public virtual void CacophonicAttack(Mobile to)
{
if (to.Alive && to.Player && !m_Table.ContainsKey(to))
if (to.Alive && to.Player && !UnderCacophonicAttack(to))
{
to.Send(SpeedControl.WalkSpeed);
to.SendLocalizedMessage(1072069); // A cacophonic sound lambastes you, suppressing your ability to move.
to.PlaySound(0x584);
m_Table[to] = Timer.DelayCall(TimeSpan.FromSeconds(30), CacophonicEnd, to);
m_Table.Add(to);
Timer.DelayCall(TimeSpan.FromSeconds(30), CacophonicEnd, to);
}
}
@ -248,7 +249,7 @@ namespace Server.Mobiles
public static bool UnderCacophonicAttack(Mobile from)
{
return m_Table.ContainsKey(from);
return m_Table.Contains(from);
}
public virtual void DropOoze()

View file

@ -101,32 +101,30 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble())
if (0.1 <= Utility.RandomDouble())
return;
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
{
ExpireTimer timer = m_Table[defender];
if (timer != null)
{
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.
}
int effect = -(defender.PhysicalResistance * 15 / 100);
ResistanceMod mod = new ResistanceMod(ResistanceType.Physical, effect);
defender.FixedEffect(0x37B9, 10, 5);
defender.AddResistanceMod(mod);
timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(5.0));
timer.Start();
m_Table[defender] = 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.
}
int effect = -(defender.PhysicalResistance * 15 / 100);
ResistanceMod mod = new ResistanceMod(ResistanceType.Physical, effect);
defender.FixedEffect(0x37B9, 10, 5);
defender.AddResistanceMod(mod);
timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(5.0));
timer.Start();
m_Table[defender] = timer;
}
public override void Serialize(GenericWriter writer)

View file

@ -89,7 +89,7 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (!(0.1 > Utility.RandomDouble()))
if (0.1 <= Utility.RandomDouble())
return;
/* Blood Bath
@ -100,9 +100,7 @@ namespace Server.Mobiles
* End cliloc: 1070824
*/
ExpireTimer timer = m_Table[defender];
if (timer != null)
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070825); // The creature continues to rage!
@ -254,7 +252,6 @@ namespace Server.Mobiles
AddItem(new Robe(Utility.RandomNondyedHue()));
m_DisguiseTimer = null;
m_DisguiseTimer = Timer.DelayCall(TimeSpan.FromSeconds(75), RemoveDisguise);
}
@ -280,9 +277,7 @@ namespace Server.Mobiles
public void DeleteItemOnLayer(Layer layer)
{
Item item = FindItemOnLayer(layer);
item?.Delete();
FindItemOnLayer(layer)?.Delete();
}
#endregion

View file

@ -9,7 +9,7 @@ namespace Server.Mobiles
{
public class FanDancer : BaseCreature
{
private static Dictionary<Mobile, ExpireTimer> m_Table = new Dictionary<Mobile, ExpireTimer>();
private static HashSet<Mobile> m_Table = new HashSet<Mobile>();
[Constructible]
public FanDancer() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
@ -143,13 +143,13 @@ namespace Server.Mobiles
ExpireTimer timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(10.0));
timer.Start();
m_Table[defender] = timer;
m_Table.Add(defender);
}
}
public bool IsFanned(Mobile m)
{
return m_Table.ContainsKey(m);
return m_Table.Contains(m);
}
public override void Serialize(GenericWriter writer)

View file

@ -116,8 +116,7 @@ namespace Server.Mobiles
public static void BeginLifeDrain(Mobile m, Mobile from)
{
InternalTimer timer = m_Table[m];
m_Table.TryGetValue(m, out InternalTimer timer);
timer?.Stop();
m_Table[m] = timer = new InternalTimer(from, m);
@ -139,12 +138,12 @@ namespace Server.Mobiles
public static void EndLifeDrain(Mobile m)
{
Timer timer = m_Table[m];
timer?.Stop();
m_Table.Remove(m);
m.SendLocalizedMessage(1070849); // The drain on your life force is gone.
if (m_Table.TryGetValue(m, out InternalTimer timer))
{
timer?.Stop();
m_Table.Remove(m);
m.SendLocalizedMessage(1070849); // The drain on your life force is gone.
}
}
public override void OnDamage(int amount, Mobile from, bool willKill)

View file

@ -74,9 +74,7 @@ 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"
*/
ExpireTimer timer = m_FlurryOfTwigsTable[defender];
if (timer != null)
if (m_FlurryOfTwigsTable.TryGetValue(defender, out ExpireTimer timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070851); // The creature lands another blow in your weakened state.
@ -97,8 +95,10 @@ namespace Server.Mobiles
timer = new ExpireTimer(defender, mod, m_FlurryOfTwigsTable, TimeSpan.FromSeconds(5.0));
timer.Start();
m_FlurryOfTwigsTable[defender] = timer;
return;
}
else if (0.05 > Utility.RandomDouble())
if (0.05 > Utility.RandomDouble())
{
/* Chlorophyl Blast
* Start cliloc: 1070827
@ -107,9 +107,7 @@ 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"
*/
ExpireTimer timer = m_ChlorophylBlastTable[defender];
if (timer != null)
if (m_ChlorophylBlastTable.TryGetValue(defender, out ExpireTimer timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070828); // The creature continues to hinder your energy resistance!

View file

@ -81,32 +81,30 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble())
if (0.1 <= Utility.RandomDouble())
return;
/* Cold Wind
* Graphics: Message - Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x37B9" ItemIdName: "glow" FromLocation: "(928 164, 34)" ToLocation: "(928 164, 34)" Speed: "10" Duration: "5" FixedDirection: "True" Explode: "False"
* Start cliloc: 1070832
* Damage: 1hp per second for 5 seconds
* End cliloc: 1070830
* Reset cliloc: 1070831
*/
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
{
/* Cold Wind
* Graphics: Message - Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x37B9" ItemIdName: "glow" FromLocation: "(928 164, 34)" ToLocation: "(928 164, 34)" Speed: "10" Duration: "5" FixedDirection: "True" Explode: "False"
* Start cliloc: 1070832
* Damage: 1hp per second for 5 seconds
* End cliloc: 1070830
* Reset cliloc: 1070831
*/
ExpireTimer timer = m_Table[defender];
if (timer != null)
{
timer.DoExpire();
defender.SendLocalizedMessage(1070831); // The freezing wind continues to blow!
}
else
{
defender.SendLocalizedMessage(1070832); // An icy wind surrounds you, freezing your lungs as you breathe!
}
timer = new ExpireTimer(defender, this);
timer.Start();
m_Table[defender] = timer;
timer.DoExpire();
defender.SendLocalizedMessage(1070831); // The freezing wind continues to blow!
}
else
{
defender.SendLocalizedMessage(1070832); // An icy wind surrounds you, freezing your lungs as you breathe!
}
timer = new ExpireTimer(defender, this);
timer.Start();
m_Table[defender] = timer;
}
public override void Serialize(GenericWriter writer)

View file

@ -6,7 +6,7 @@ namespace Server.Mobiles
{
public class RaiJu : BaseCreature
{
private static Dictionary<Mobile, ExpireTimer> m_Table = new Dictionary<Mobile, ExpireTimer>();
private static HashSet<Mobile> m_Table = new HashSet<Mobile>();
[Constructible]
public RaiJu() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
@ -61,33 +61,28 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble() && !IsStunned(defender))
{
/* Lightning Fist
* Cliloc: 1070839
* Effect: Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x37B9" ItemIdName: "glow" FromLocation: "(884 715, 10)" ToLocation: "(884 715, 10)" Speed: "10" Duration: "5" FixedDirection: "True" Explode: "False"
* Damage: 35-65, 100% energy, resistable
* Freezes for 4 seconds
* Effect cannot stack
*/
if (0.1 <= Utility.RandomDouble() || m_Table.Contains(defender))
return;
defender.FixedEffect(0x37B9, 10, 5);
defender.SendLocalizedMessage(1070839); // The creature attacks with stunning force!
/* Lightning Fist
* Cliloc: 1070839
* Effect: Type: "3" From: "0x57D4F5B" To: "0x0" ItemId: "0x37B9" ItemIdName: "glow" FromLocation: "(884 715, 10)" ToLocation: "(884 715, 10)" Speed: "10" Duration: "5" FixedDirection: "True" Explode: "False"
* Damage: 35-65, 100% energy, resistable
* Freezes for 4 seconds
* Effect cannot stack
*/
// This should be done in place of the normal attack damage.
//AOS.Damage( defender, this, Utility.RandomMinMax( 35, 65 ), 0, 0, 0, 0, 100 );
defender.FixedEffect(0x37B9, 10, 5);
defender.SendLocalizedMessage(1070839); // The creature attacks with stunning force!
defender.Frozen = true;
// This should be done in place of the normal attack damage.
//AOS.Damage( defender, this, Utility.RandomMinMax( 35, 65 ), 0, 0, 0, 0, 100 );
ExpireTimer timer = new ExpireTimer(defender, TimeSpan.FromSeconds(4.0));
timer.Start();
m_Table[defender] = timer;
}
}
defender.Frozen = true;
public bool IsStunned(Mobile m)
{
return m_Table.ContainsKey(m);
ExpireTimer timer = new ExpireTimer(defender, TimeSpan.FromSeconds(4.0));
timer.Start();
m_Table.Add(defender);
}
public override void Serialize(GenericWriter writer)

View file

@ -138,77 +138,75 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.05 > Utility.RandomDouble())
if (0.05 <= Utility.RandomDouble())
return;
/* Rune Corruption
* Start cliloc: 1070846 "The creature magically corrupts your armor!"
* Effect: All resistances -70 (lowest 0) for 5 seconds
* End ASCII: "The corruption of your armor has worn off"
*/
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
{
/* Rune Corruption
* Start cliloc: 1070846 "The creature magically corrupts your armor!"
* Effect: All resistances -70 (lowest 0) for 5 seconds
* End ASCII: "The corruption of your armor has worn off"
*/
ExpireTimer timer = m_Table[defender];
if (timer != null)
{
timer.DoExpire();
defender.SendLocalizedMessage(1070845); // The creature continues to corrupt your armor!
}
else
{
defender.SendLocalizedMessage(1070846); // The creature magically corrupts your armor!
}
List<ResistanceMod> mods = new List<ResistanceMod>();
if (Core.ML)
{
if (defender.PhysicalResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Physical, -(defender.PhysicalResistance / 2)));
if (defender.FireResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Fire, -(defender.FireResistance / 2)));
if (defender.ColdResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Cold, -(defender.ColdResistance / 2)));
if (defender.PoisonResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Poison, -(defender.PoisonResistance / 2)));
if (defender.EnergyResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Energy, -(defender.EnergyResistance / 2)));
}
else
{
if (defender.PhysicalResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Physical,
defender.PhysicalResistance > 70 ? -70 : -defender.PhysicalResistance));
if (defender.FireResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Fire,
defender.FireResistance > 70 ? -70 : -defender.FireResistance));
if (defender.ColdResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Cold,
defender.ColdResistance > 70 ? -70 : -defender.ColdResistance));
if (defender.PoisonResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Poison,
defender.PoisonResistance > 70 ? -70 : -defender.PoisonResistance));
if (defender.EnergyResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Energy,
defender.EnergyResistance > 70 ? -70 : -defender.EnergyResistance));
}
for (int 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.Start();
m_Table[defender] = timer;
timer.DoExpire();
defender.SendLocalizedMessage(1070845); // The creature continues to corrupt your armor!
}
else
{
defender.SendLocalizedMessage(1070846); // The creature magically corrupts your armor!
}
List<ResistanceMod> mods = new List<ResistanceMod>();
if (Core.ML)
{
if (defender.PhysicalResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Physical, -(defender.PhysicalResistance / 2)));
if (defender.FireResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Fire, -(defender.FireResistance / 2)));
if (defender.ColdResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Cold, -(defender.ColdResistance / 2)));
if (defender.PoisonResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Poison, -(defender.PoisonResistance / 2)));
if (defender.EnergyResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Energy, -(defender.EnergyResistance / 2)));
}
else
{
if (defender.PhysicalResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Physical,
defender.PhysicalResistance > 70 ? -70 : -defender.PhysicalResistance));
if (defender.FireResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Fire,
defender.FireResistance > 70 ? -70 : -defender.FireResistance));
if (defender.ColdResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Cold,
defender.ColdResistance > 70 ? -70 : -defender.ColdResistance));
if (defender.PoisonResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Poison,
defender.PoisonResistance > 70 ? -70 : -defender.PoisonResistance));
if (defender.EnergyResistance > 0)
mods.Add(new ResistanceMod(ResistanceType.Energy,
defender.EnergyResistance > 70 ? -70 : -defender.EnergyResistance));
}
for (int 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.Start();
m_Table[defender] = timer;
}
public override void Serialize(GenericWriter writer)

View file

@ -103,9 +103,10 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble())
{
/* Blood Bath
if (0.1 <= Utility.RandomDouble())
return;
/* Blood Bath
* Start cliloc 1070826
* Sound: 0x52B
* 2-3 blood spots
@ -113,22 +114,19 @@ namespace Server.Mobiles
* End cliloc: 1070824
*/
ExpireTimer timer = m_Table[defender];
if (timer != null)
{
timer.DoExpire();
defender.SendLocalizedMessage(1070825); // The creature continues to rage!
}
else
{
defender.SendLocalizedMessage(1070826); // The creature goes into a rage, inflicting heavy damage!
}
timer = new ExpireTimer(defender, this);
timer.Start();
m_Table[defender] = timer;
if (m_Table.TryGetValue(defender, out ExpireTimer timer))
{
timer.DoExpire();
defender.SendLocalizedMessage(1070825); // The creature continues to rage!
}
else
{
defender.SendLocalizedMessage(1070826); // The creature goes into a rage, inflicting heavy damage!
}
timer = new ExpireTimer(defender, this);
timer.Start();
m_Table[defender] = timer;
}
public override void Serialize(GenericWriter writer)