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

@ -169,9 +169,9 @@ namespace Server
if (m_Table == null)
LoadTable();
m_Table.TryGetValue(obj.GetType(), out SpeedInfo sp);
;
return sp != null;
return m_Table.ContainsKey(obj.GetType());
}
public static bool GetSpeeds(object obj, ref double activeSpeed, ref double passiveSpeed)
@ -182,9 +182,7 @@ namespace Server
if (m_Table == null)
LoadTable();
m_Table.TryGetValue(obj.GetType(), out SpeedInfo sp);
if (sp == null)
if (!m_Table.TryGetValue(obj.GetType(), out SpeedInfo sp))
return false;
activeSpeed = sp.ActiveSpeed;
@ -207,4 +205,4 @@ namespace Server
}
}
}
}
}

View file

@ -167,39 +167,37 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble())
{
/* Grasping Claw
if (0.1 <= Utility.RandomDouble())
return;
/* Grasping Claw
* Start cliloc: 1070836
* Effect: Physical resistance -15% for 5 seconds
* End cliloc: 1070838
* Effect: Type: "3" - From: "0x57D4F5B" (player) - To: "0x0" - ItemId: "0x37B9" - ItemIdName: "glow" - FromLocation: "(1149 808, 32)" - ToLocation: "(1149 808, 32)" - Speed: "10" - Duration: "5" - FixedDirection: "True" - Explode: "False"
*/
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;
if (m_Table.TryGetValue(defender, out ExpireTimer 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

@ -161,39 +161,37 @@ namespace Server.Mobiles
{
base.OnGaveMeleeAttack(defender);
if (0.1 > Utility.RandomDouble())
{
/* Grasping Claw
if (0.1 <= Utility.RandomDouble())
return;
/* Grasping Claw
* Start cliloc: 1070836
* Effect: Physical resistance -15% for 5 seconds
* End cliloc: 1070838
* Effect: Type: "3" - From: "0x57D4F5B" (player) - To: "0x0" - ItemId: "0x37B9" - ItemIdName: "glow" - FromLocation: "(1149 808, 32)" - ToLocation: "(1149 808, 32)" - Speed: "10" - Duration: "5" - FixedDirection: "True" - Explode: "False"
*/
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;
if (m_Table.TryGetValue(defender, out ExpireTimer 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

@ -415,7 +415,10 @@ namespace Server.Mobiles
}
}
public virtual bool IsNecroFamiliar => Summoned && m_ControlMaster != null && SummonFamiliarSpell.Table[m_ControlMaster] == this;
public virtual bool IsNecroFamiliar => Summoned && m_ControlMaster != null &&
SummonFamiliarSpell.Table.TryGetValue(m_ControlMaster, out BaseCreature bc) &&
bc == this;
public virtual bool DeleteCorpseOnDeath => !Core.AOS && m_bSummoned;
[CommandProperty(AccessLevel.GameMaster)]
@ -2317,7 +2320,7 @@ namespace Server.Mobiles
}
if (DeathAdderCharmable && from.CanBeHarmful(this, false))
if (SummonFamiliarSpell.Table[from] is DeathAdder da && !da.Deleted)
if (SummonFamiliarSpell.Table.TryGetValue(from, out BaseCreature bc) && (bc as DeathAdder)?.Deleted == false)
{
from.SendAsciiMessage("You charm the snake. Select a target to attack.");
from.Target = new DeathAdderCharmTarget(this);
@ -2345,7 +2348,7 @@ namespace Server.Mobiles
list.Add(1080078); // guarding
}
if (Summoned && !IsAnimatedDead && !IsNecroFamiliar && !(this is Clone))
if (Summoned && !(IsAnimatedDead || IsNecroFamiliar || this is Clone))
{
list.Add(1049646); // (summoned)
}
@ -3296,7 +3299,7 @@ namespace Server.Mobiles
if (!m_Charmed.DeathAdderCharmable || m_Charmed.Combatant != null || !from.CanBeHarmful(m_Charmed, false))
return;
if (!(SummonFamiliarSpell.Table[from] is DeathAdder da) || da.Deleted)
if (!(SummonFamiliarSpell.Table.TryGetValue(from, out BaseCreature bc) && (bc as DeathAdder)?.Deleted == false))
return;
if (!(targeted is Mobile targ && from.CanBeHarmful(targ, false)))

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)

View file

@ -2139,12 +2139,10 @@ namespace Server.Mobiles
if (obj == null || m_AntiMacroTable == null || AccessLevel != AccessLevel.Player)
return true;
Dictionary<object, CountAndTimeStamp> tbl = m_AntiMacroTable[skill];
if (tbl == null)
if (!m_AntiMacroTable.TryGetValue(skill, out Dictionary<object, CountAndTimeStamp> tbl))
m_AntiMacroTable[skill] = tbl = new Dictionary<object, CountAndTimeStamp>();
CountAndTimeStamp count = tbl[obj];
if (count != null)
if (tbl.TryGetValue(obj, out CountAndTimeStamp count))
{
if (count.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.UtcNow)
{
@ -4738,10 +4736,8 @@ namespace Server.Mobiles
public virtual bool HasRecipe(int recipeID)
{
if (m_AcquiredRecipes != null && m_AcquiredRecipes.ContainsKey(recipeID))
return m_AcquiredRecipes[recipeID];
return false;
m_AcquiredRecipes?.TryGetValue(recipeID, out bool value);
return value;
}
public virtual void AcquireRecipe(Recipe r)
@ -4764,16 +4760,7 @@ namespace Server.Mobiles
}
[CommandProperty(AccessLevel.GameMaster)]
public int KnownRecipes
{
get
{
if (m_AcquiredRecipes == null)
return 0;
return m_AcquiredRecipes.Count;
}
}
public int KnownRecipes => m_AcquiredRecipes?.Count ?? 0;
#endregion
@ -4784,11 +4771,9 @@ namespace Server.Mobiles
if (!BuffInfo.Enabled || m_BuffTable == null)
return;
NetState state = NetState;
if (state != null && state.BuffIcon)
if (NetState?.BuffIcon == true)
foreach (BuffInfo info in m_BuffTable.Values)
state.Send(new AddBuffPacket(this, info));
NetState.Send(new AddBuffPacket(this, info));
}
private Dictionary<BuffIcon, BuffInfo> m_BuffTable;
@ -4805,9 +4790,8 @@ namespace Server.Mobiles
m_BuffTable.Add(b.ID, b);
NetState state = NetState;
if (state != null && state.BuffIcon) state.Send(new AddBuffPacket(this, b));
if (NetState?.BuffIcon == true)
NetState.Send(new AddBuffPacket(this, b));
}
public void RemoveBuff(BuffInfo b)
@ -4830,9 +4814,8 @@ namespace Server.Mobiles
m_BuffTable.Remove(b);
NetState state = NetState;
if (state != null && state.BuffIcon) state.Send(new RemoveBuffPacket(this, b));
if (NetState?.BuffIcon == true)
NetState.Send(new RemoveBuffPacket(this, b));
if (m_BuffTable.Count <= 0)
m_BuffTable = null;

View file

@ -391,10 +391,7 @@ namespace Server.Mobiles
if (from == null || !from.Player)
return;
if (m_DamageEntries.ContainsKey(from))
m_DamageEntries[from] += amount;
else
m_DamageEntries.Add(from, amount);
m_DamageEntries[from] = amount + (m_DamageEntries.TryGetValue(from, out int value) ? value : 0);
from.SendMessage($"Total Damage: {m_DamageEntries[from]}");
}

View file

@ -258,14 +258,10 @@ namespace Server.Mobiles
if (dest == null)
return false;
Mobile escorter = GetEscorter();
if (escorter != null || !m.Alive)
if (GetEscorter() != null || !m.Alive)
return false;
BaseEscortable escortable = EscortTable[m];
if (escortable?.Deleted == false && escortable.GetEscorter() == m)
if (EscortTable.TryGetValue(m, out BaseEscortable escortable) && escortable?.Deleted == false && escortable.GetEscorter() == m)
{
Say("I see you already have an escort.");
return false;
@ -693,7 +689,8 @@ namespace Server.Mobiles
if (name == null || m_Table == null)
return null;
return m_Table[name];
m_Table.TryGetValue(name, out EscortDestinationInfo info);
return info;
}
}

View file

@ -924,27 +924,25 @@ namespace Server.Mobiles
IShopSellInfo[] info = GetSellInfo();
Dictionary<Item, SellItemState> table = new Dictionary<Item, SellItemState>();
List<SellItemState> list = new List<SellItemState>();
foreach (IShopSellInfo ssi in info)
{
Item[] items = pack.FindItemsByType(ssi.Types);
foreach (Item item in items)
foreach (Item item in pack.FindItemsByType(ssi.Types))
{
if (item is Container container && container.Items.Count != 0)
continue;
if (item.IsStandardLoot() && item.Movable && ssi.IsSellable(item))
table[item] = new SellItemState(item, ssi.GetSellPriceFor(item), ssi.GetNameFor(item));
list.Add(new SellItemState(item, ssi.GetSellPriceFor(item), ssi.GetNameFor(item)));
}
}
if (table.Count > 0)
if (list.Count > 0)
{
SendPacksTo(from);
from.Send(new VendorSellList(this, table.Values));
from.Send(new VendorSellList(this, list));
}
else
{

View file

@ -9,10 +9,6 @@ namespace Server.Mobiles
private Dictionary<Type, int> m_Table = new Dictionary<Type, int>();
private Type[] m_Types;
public GenericSellInfo()
{
}
public void Add( Type type, int price )
{
m_Table[type] = price;

View file

@ -351,7 +351,8 @@ namespace Server.Mobiles
if (BaseHouse.NewVendorSystem) return ChargePerRealWorldDay / 12;
long total = 0;
foreach (VendorItem vi in m_SellItems.Values) total += vi.Price;
foreach (VendorItem vi in m_SellItems.Values)
total += vi.Price;
total -= 500;
@ -369,7 +370,8 @@ namespace Server.Mobiles
if (BaseHouse.NewVendorSystem)
{
long total = 0;
foreach (VendorItem vi in m_SellItems.Values) total += vi.Price;
foreach (VendorItem vi in m_SellItems.Values)
total += vi.Price;
return (int)(60 + total / 500 * 3);
}