Fixes dictionary uses (#7)
This commit is contained in:
parent
d4a52344f2
commit
916d404c51
161 changed files with 1211 additions and 1722 deletions
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]}");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue