public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage) { if (_Table == null) { _Table = new Dictionary <Mobile, ExpireTimer>(); } ExpireTimer timer = null; if (_Table.ContainsKey(defender)) { timer = _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.FixedParticles(0x373A, 10, 15, 5018, EffectLayer.Waist); defender.AddResistanceMod(mod); timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(5.0)); timer.Start(); _Table[defender] = timer; }
// TODO: Put this attack shared with Hiryu and Lesser Hiryu in one place public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.1 > Utility.RandomDouble()) { ExpireTimer timer = (ExpireTimer)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; } }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.1 > Utility.RandomDouble()) { /* 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 = (ExpireTimer)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; } }
public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage) { ExpireTimer timer = null; if (_Table == null) { _Table = new Dictionary <Mobile, ExpireTimer>(); } if (_Table.ContainsKey(defender)) { timer = _Table[defender]; } if (timer != null) { timer.DoExpire(); defender.SendLocalizedMessage(1070828); // The creature continues to hinder your energy resistance! } else { defender.SendLocalizedMessage(1070827); // The creature's attack has made you more susceptible to energy attacks! } int effect = -(defender.EnergyResistance / 2); ResistanceMod mod = new ResistanceMod(ResistanceType.Energy, effect); defender.FixedEffect(0x37B9, 10, 5); defender.AddResistanceMod(mod); timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(10.0)); timer.Start(); _Table[defender] = timer; }
public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage) { ExpireTimer timer = null; if (_Table == null) { _Table = new Dictionary <Mobile, ExpireTimer>(); } if (_Table.ContainsKey(defender)) { timer = _Table[defender]; } if (timer != null) { 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! } 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(10.0)); timer.Start(); _Table[defender] = timer; }
public override void OnHit(Mobile attacker, Mobile defender, int damage) { if (!Validate(attacker) || !CheckMana(attacker, true)) { return; } if (attacker.Map == null || attacker.Map == Map.Internal) { return; } ExpireTimer timer = null; if (m_Table.ContainsKey(defender)) { 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, attacker); timer.Start(); m_Table[defender] = timer; }
public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage) { if (_Table == null) { _Table = new Dictionary <Mobile, ExpireTimer>(); } ExpireTimer timer = null; if (_Table.ContainsKey(defender)) { timer = _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, creature); timer.Start(); _Table[defender] = timer; }
public void Target(Mobile m) { if (CheckHSequence(m)) { SpellHelper.Turn(Caster, m); /* Transmogrifies the flesh of the target creature or player to resemble rotted corpse flesh, * making them more vulnerable to Fire and Poison damage, * but increasing their resistance to Physical and Cold damage. * * The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 25 ) + 40 seconds. * * NOTE: Algorithm above is fixed point, should be: * ((ss-mr)/2.5) + 40 * * NOTE: Resistance is not checked if targeting yourself */ ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } else { m.SendLocalizedMessage(1061689); // Your skin turns dry and corpselike. } m.FixedParticles(0x373A, 1, 15, 9913, 67, 7, EffectLayer.Head); m.PlaySound(0x1BB); double ss = GetDamageSkill(Caster); double mr = (Caster == m ? 0.0 : GetResistSkill(m)); m.CheckSkill(SkillName.MagicResist, 0.0, 120.0); //Skill check for gain TimeSpan duration = TimeSpan.FromSeconds(((ss - mr) / 2.5) + 40.0); ResistanceMod[] mods = new ResistanceMod[4] { new ResistanceMod(ResistanceType.Fire, -15), new ResistanceMod(ResistanceType.Poison, -15), new ResistanceMod(ResistanceType.Cold, +10), new ResistanceMod(ResistanceType.Physical, +10) }; timer = new ExpireTimer(m, mods, duration); timer.Start(); BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.CorpseSkin, 1075663, duration, m)); m_Table[m] = timer; for (int i = 0; i < mods.Length; ++i) { m.AddResistanceMod(mods[i]); } } FinishSequence(); }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.1 > Utility.RandomDouble()) { /* Blood Bath * Start cliloc 1070826 * Sound: 0x52B * 2-3 blood spots * Damage: 2 hps per second for 5 seconds * End cliloc: 1070824 */ ExpireTimer timer = (ExpireTimer)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; } }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); // TODO: Taken from "Lady of the snow". Check real ability at OSI. if (0.1 > Utility.RandomDouble()) { ExpireTimer timer = (ExpireTimer)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; } }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.1 > Utility.RandomDouble()) { ExpireTimer timer = (ExpireTimer)m_Table[defender]; if (timer != null) { timer.DoExpire(); defender.SendMessage("The spiders fangs pour more venom into your already weakend body."); } else { defender.SendMessage("The spider sinks it's fangs into your flesh, releasing it's toxic venom!"); } 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; } }
// TODO: Snowball public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.1 > Utility.RandomDouble()) { /* 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 = (ExpireTimer)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; } }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.15 > Utility.RandomDouble()) { /* Blood Bath * Start cliloc 1070826 * Sound: 0x52B * 2-3 blood spots * Damage: 1 hps per second for 600 seconds * End cliloc: 1070824 */ ExpireTimer timer = (ExpireTimer)m_Table[defender]; if (timer != null) { timer.DoExpire(); defender.SendMessage("The mound of maggot continues inflicting bleeding damage!"); } else { defender.SendMessage("The mound of maggot goes into a rage, inflicting continuous bleeding damage!"); } timer = new ExpireTimer(defender, this); timer.Start(); m_Table[defender] = timer; } }
public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage) { if (_Table == null) { _Table = new Dictionary <Mobile, ExpireTimer>(); } ExpireTimer timer = null; if (_Table.ContainsKey(defender)) { timer = _Table[defender]; } if (timer != null) { timer.DoExpire(); } defender.SendLocalizedMessage(1070833); // The creature fans you with fire, reducing your resistance to fire attacks. int effect = -(defender.FireResistance / 4); ResistanceMod mod = new ResistanceMod(ResistanceType.Fire, effect); Effects.SendLocationParticles(defender, 0x3709, 10, 30, 5052); Effects.PlaySound(defender.Location, defender.Map, 0x208); timer = new ExpireTimer(defender, mod, TimeSpan.FromSeconds(5.0)); timer.Start(); _Table[defender] = timer; }
public void Target(Mobile m) { if (this.Caster == m || !(m is PlayerMobile || m is BaseCreature)) // only PlayerMobile and BaseCreature implement blood oath checking { this.Caster.SendLocalizedMessage(1080194); // You can't curse that. } else if (m_PlagueTable.Contains(this.Caster)) { this.Caster.SendLocalizedMessage(1061607); // You are already bonded in a Blood Oath. } else if (m_PlagueTable.Contains(m)) { this.Caster.SendLocalizedMessage(1080195); // That player is already bonded in a Blood Oath. // That creature is already bonded in a Blood Oath. } else if (this.CheckHSequence(m)) { SpellHelper.Turn(this.Caster, m); /* Temporarily creates a dark pact between the caster and the target. * Any damage dealt by the target to the caster is increased, but the target receives the same amount of damage. * The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 80 ) + 8 seconds. * * NOTE: The above algorithm must be fixed point, it should be: * ((ss-rm)/8)+8 */ ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } m_PlagueTable[this.Caster] = this.Caster; m_PlagueTable[m] = this.Caster; this.Caster.PlaySound(0x659); this.Caster.FixedParticles(0x375A, 1, 17, 9919, 1161, 7, EffectLayer.Waist); this.Caster.FixedParticles(0x3728, 1, 13, 9502, 1161, 7, (EffectLayer)255); m.FixedParticles(0x375A, 1, 17, 9919, 1161, 7, EffectLayer.Waist); m.FixedParticles(0x3728, 1, 13, 9502, 1161, 7, (EffectLayer)255); TimeSpan duration = TimeSpan.FromSeconds(((this.GetDamageSkill(this.Caster) - this.GetResistSkill(m)) / 8) + 8); m.CheckSkill(SkillName.MagicResist, 0.0, 120.0); //Skill check for gain timer = new ExpireTimer(this.Caster, m, duration); timer.Start(); BuffInfo.AddBuff(this.Caster, new BuffInfo(BuffIcon.SpellPlague, 1075659, duration, this.Caster, m.Name.ToString())); BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.SpellPlague, 1075661, duration, m, this.Caster.Name.ToString())); m_Table[m] = timer; } this.FinishSequence(); }
public static bool RemoveCurse(Mobile m) { ExpireTimer t = (ExpireTimer)m_Table[m]; if (t == null) return false; t.DoExpire(); return true; }
public void Target(Mobile m) { if (!Caster.CanSee(m)) { Caster.SendLocalizedMessage(500237); // Target can not be seen. } if (m_Table.Contains(m)) { Caster.LocalOverheadMessage(MessageType.Regular, 0x481, false, "That target is under the effect of that spell already."); } if (CheckBSequence(m)) { SpellHelper.Turn(Caster, m); ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } else { m.SendMessage("You feel hatred shielding you from physical harm."); } m.PlaySound(0x5C0); m.FixedParticles(0x376A, 1, 29, 9961, 1152, 0, EffectLayer.Waist); TimeSpan duration = TimeSpan.FromSeconds(GetKarmaPower(Caster)); ResistanceMod[] mods = new ResistanceMod[4] { new ResistanceMod(ResistanceType.Fire, +0), new ResistanceMod(ResistanceType.Poison, +0), new ResistanceMod(ResistanceType.Cold, +0), new ResistanceMod(ResistanceType.Physical, +100) }; timer = new ExpireTimer(m, mods, duration); timer.Start(); BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.ReactiveArmor, 1044120, 1044118, duration, m)); m_Table[m] = timer; for (int i = 0; i < mods.Length; ++i) { m.AddResistanceMod(mods[i]); } } FinishSequence(); }
public static bool RemoveCurse( Mobile m ) { ExpireTimer t = (ExpireTimer)m_Table[m]; if ( t == null ) return false; m.SendMessage( "The shield around you dissipates..." ); m.PlaySound( 488 ); t.DoExpire(); return true; }
public static bool RemoveCurse(Mobile m) { ExpireTimer t = (ExpireTimer)m_Table[m]; if (t == null) { return(false); } t.DoExpire(); return(true); }
public static bool RemoveCurse(Mobile m) { ExpireTimer t = (ExpireTimer)m_Table[m]; if (t == null) { return(false); } m.SendLocalizedMessage(1061688); // Your skin returns to normal. t.DoExpire(); return(true); }
public void Target(Mobile m) { if (CheckHSequence(m)) { SpellHelper.Turn(Caster, m); ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } else { m.SendLocalizedMessage(1061689); // Your skin turns dry and corpselike. } Effects.SendTargetParticles(m, 0x373A, 1, 15, 9913, 67, 7, EffectLayer.Head); m.PlaySound(0x1BB); double ss = Caster.Skills[DamageSkill].Value; double mr = 0; double value = Caster.Skills[DamageSkill].Value / 2.5; value = SpellHelper.AdjustValue(Caster, value); if (value > 40) { value = 40; } double duration = ((ss - mr) / 2.5) + 30.0; duration = SpellHelper.AdjustValue(Caster, duration); if (duration > 90) { duration = 90; } m.VirtualArmorMod -= (int)value; timer = new ExpireTimer(m, (int)value, TimeSpan.FromSeconds(duration)); timer.Start(); m_Table[m] = timer; } FinishSequence(); }
public static bool RemoveCurse(Mobile m) { ExpireTimer t = (ExpireTimer)m_Table[m]; if (t == null) { return(false); } m.SendMessage("The effects of the pirate curse have been removed"); t.DoExpire(); return(true); }
public static void CursePlayer(Mobile m) { if (IsCursed(m)) { return; } if (!UnEquipPlayer(m)) { return; } ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } else { m.SendMessage("You feel yourself transform into a cursed pirate"); } Effects.SendLocationEffect(m.Location, m.Map, 0x3709, 28, 10, 0x1D3, 5); TimeSpan duration = TimeSpan.FromSeconds(240.0); ResistanceMod[] mods = new ResistanceMod[4] { new ResistanceMod(ResistanceType.Fire, -10), new ResistanceMod(ResistanceType.Poison, -10), new ResistanceMod(ResistanceType.Cold, +10), new ResistanceMod(ResistanceType.Physical, +10) }; timer = new ExpireTimer(m, mods, duration); timer.Start(); m_Table[m] = timer; for (int i = 0; i < mods.Length; ++i) { m.AddResistanceMod(mods[i]); } m.ApplyPoison(m, Poison.Greater); m.Criminal = true; }
public void DoBurn(Mobile from, int duration) { ExpireTimer timer = (ExpireTimer)m_Table[from]; if (timer != null) { timer.DoExpire(); } Effects.SendTargetEffect(from, 0x19AB, 12); from.PlaySound(0x5CA); timer = new ExpireTimer(from, this, duration); timer.Start(); m_Table[from] = timer; }
public void DoFreeze(Mobile from, int duration) { ExpireTimer timer = (ExpireTimer)m_Table[from]; if (timer != null) { timer.DoExpire(); from.SendLocalizedMessage(1070831); // The freezing wind continues to blow! } else { from.SendLocalizedMessage(1070832); // An icy wind surrounds you, freezing your lungs as you breathe! } timer = new ExpireTimer(from, this, duration); timer.Start(); m_Table[from] = timer; }
public void ApplyEffects(Mobile m, double strength = 1.0) { /* Temporarily creates a dark pact between the caster and the target. * Any damage dealt by the target to the caster is increased, but the target receives the same amount of damage. * The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 80 ) + 8 seconds. * * NOTE: The above algorithm must be fixed point, it should be: * ((ss-rm)/8)+8 */ ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } m_OathTable[this.Caster] = this.Caster; m_OathTable[m] = this.Caster; if (m.Spell != null) { m.Spell.OnCasterHurt(); } this.Caster.PlaySound(0x175); this.Caster.FixedParticles(0x375A, 1, 17, 9919, 33, 7, EffectLayer.Waist); this.Caster.FixedParticles(0x3728, 1, 13, 9502, 33, 7, (EffectLayer)255); m.FixedParticles(0x375A, 1, 17, 9919, 33, 7, EffectLayer.Waist); m.FixedParticles(0x3728, 1, 13, 9502, 33, 7, (EffectLayer)255); TimeSpan duration = TimeSpan.FromSeconds((((GetDamageSkill(Caster) - GetResistSkill(m)) / 8) + 8) * strength); m.CheckSkill(SkillName.MagicResist, 0.0, 120.0); //Skill check for gain timer = new ExpireTimer(this.Caster, m, duration); timer.Start(); BuffInfo.AddBuff(this.Caster, new BuffInfo(BuffIcon.BloodOathCaster, 1075659, duration, this.Caster, m.Name.ToString())); BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.BloodOathCurse, 1075661, duration, m, this.Caster.Name.ToString())); m_Table[m] = timer; this.HarmfulSpell(m); }
public override void OnMovement(Mobile sucka, Point3D oldLocation) { if (InRange(sucka, 15) && InLOS(sucka) && !sucka.Hidden) { ExpireTimer timer = (ExpireTimer)m_Table[sucka]; if (timer != null) { timer.DoExpire(); sucka.SendMessage("The turdy ss bastard continues annoying the hell out of you!"); } else { sucka.SendMessage("The turdy ss bastard goes into a spastic fit, reducing you to sheer insanity!"); } timer = new ExpireTimer(sucka, this); timer.Start(); m_Table[sucka] = timer; } }
public void Target(Mobile m) { if (CheckBSequence(m)) { SpellHelper.Turn(Caster, m); ExpireTimer timer = (ExpireTimer)m_Table[m]; if (timer != null) { timer.DoExpire(); } else { m.SendLocalizedMessage(1061689); // Your skin turns dry and corpselike. } Effects.SendTargetParticles(m, 0x373A, 1, 15, 9913, 67, 7, EffectLayer.Head); m.PlaySound(0x1BB); double ss = Caster.Skills[CastSkill].Value; double mr = Caster.Skills[DamageSkill].Value; double value = 3 + 10 * ((ss + mr) / 225);//5 à 18 value = SpellHelper.AdjustValue(Caster, value); TimeSpan duration = TimeSpan.FromSeconds(0); m.VirtualArmorMod += (int)value; timer = new ExpireTimer(m, (int)value, duration); timer.Start(); m_Table[m] = timer; } FinishSequence(); }
//////////////////////////////////////////// Begin Insanity Attack Sequence public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.25 > Utility.RandomDouble()) { ExpireTimer timer = (ExpireTimer)m_Table[defender]; if (timer != null) { timer.DoExpire(); defender.SendMessage("The turdy f**k continues annoying the hell out of you!"); } else { defender.SendMessage("The turdy f**k goes into a spastic fit, reducing you to sheer insanity!"); } timer = new ExpireTimer(defender, this); timer.Start(); m_Table[defender] = timer; } }
public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.05 > Utility.RandomDouble()) { /* 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 = (ExpireTimer)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; } }
public override void OnResponse(NetState state, RelayInfo info) { Mobile m = state.Mobile; BaseWeapon weapon = m.Weapon as BaseWeapon; TimeSpan duration = TimeSpan.FromSeconds((m.Skills[SkillName.Mysticism].Value / 1.2) + 1.0);//needs work, just a base formula. switch (info.ButtonID) { case 0: { m.CloseGump(typeof(EnchantGump)); break; } case 1: { ExpireTimer t = (ExpireTimer)m_Table[weapon]; if (t != null) t.DoExpire(); m.SendMessage("You added Hit Dispel to your weapon"); weapon.WeaponAttributes.HitDispel += 30; m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head); m.FixedParticles(0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head); if (weapon.Name == null) this.m_Name = weapon.GetType().Name; else this.m_Name = weapon.Name; weapon.Name = this.m_Name + " [Enchanted]"; m_Table[weapon] = t = new ExpireTimer(weapon, AosWeaponAttribute.HitDispel, m, duration); t.Start(); m.CloseGump(typeof(EnchantGump)); EnchantSpell.AddEffects(m, weapon); break; } case 2: { ExpireTimer t = (ExpireTimer)m_Table[weapon]; if (t != null) t.DoExpire(); m.SendMessage("You added Hit Fireball to your weapon"); weapon.WeaponAttributes.HitFireball += 30; m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head); m.FixedParticles(0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head); if (weapon.Name == null) this.m_Name = weapon.GetType().Name; else this.m_Name = weapon.Name; weapon.Name = this.m_Name + " [Enchanted]"; m_Table[weapon] = t = new ExpireTimer(weapon, AosWeaponAttribute.HitFireball, m, duration); t.Start(); m.CloseGump(typeof(EnchantGump)); EnchantSpell.AddEffects(m, weapon); break; } case 3: { ExpireTimer t = (ExpireTimer)m_Table[weapon]; if (t != null) t.DoExpire(); m.SendMessage("You added Hit Harm to your weapon"); weapon.WeaponAttributes.HitHarm += 30; m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head); m.FixedParticles(0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head); if (weapon.Name == null) this.m_Name = weapon.GetType().Name; else this.m_Name = weapon.Name; weapon.Name = this.m_Name + " [Enchanted]"; m_Table[weapon] = t = new ExpireTimer(weapon, AosWeaponAttribute.HitHarm, m, duration); t.Start(); m.CloseGump(typeof(EnchantGump)); EnchantSpell.AddEffects(m, weapon); break; } case 4: { ExpireTimer t = (ExpireTimer)m_Table[weapon]; if (t != null) t.DoExpire(); m.SendMessage("You added Hit Lightning to your weapon"); weapon.WeaponAttributes.HitLightning += 30; m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head); m.FixedParticles(0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head); if (weapon.Name == null) this.m_Name = weapon.GetType().Name; else this.m_Name = weapon.Name; weapon.Name = this.m_Name + " [Enchanted]"; m_Table[weapon] = t = new ExpireTimer(weapon, AosWeaponAttribute.HitLightning, m, duration); t.Start(); m.CloseGump(typeof(EnchantGump)); EnchantSpell.AddEffects(m, weapon); break; } case 5: { ExpireTimer t = (ExpireTimer)m_Table[weapon]; if (t != null) t.DoExpire(); m.SendMessage("You added Hit Magic Arrow to your weapon"); weapon.WeaponAttributes.HitMagicArrow += 30; m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head); m.FixedParticles(0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head); if (weapon.Name == null) this.m_Name = weapon.GetType().Name; else this.m_Name = weapon.Name; weapon.Name = this.m_Name + " [Enchanted]"; m_Table[weapon] = t = new ExpireTimer(weapon, AosWeaponAttribute.HitMagicArrow, m, duration); t.Start(); m.CloseGump(typeof(EnchantGump)); EnchantSpell.AddEffects(m, weapon); break; } } }