public void FinalPrep(Mobile from) { if (!from.Alive) { from.Resurrect(); } from.CurePoison(from); from.Blessed = false; from.Frozen = false; from.StatMods.Clear(); from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; Targeting.Target.Cancel(from); from.MagicDamageAbsorb = 0; from.MeleeDamageAbsorb = 0; ProtectionSpell.Registry.Remove(from); DefensiveSpell.Nullify(from); from.Combatant = null; from.Delta(MobileDelta.Noto); //Update notoriety }
public override int AbsorbDamage(Mobile attacker, Mobile defender, int damage) { damage = base.AbsorbDamage(attacker, defender, damage); int absorb = defender.MeleeDamageAbsorb; if (absorb > 0) { if (absorb > damage) { int react = damage / 5; if (react <= 0) { react = 1; } defender.MeleeDamageAbsorb -= damage; damage = 0; defender.Damage(react, attacker); attacker.PlaySound(0x1F1); attacker.FixedEffect(0x374A, 10, 16); } else { defender.MeleeDamageAbsorb = 0; defender.SendLocalizedMessage(1005556); // Your reactive armor spell has been nullified. DefensiveSpell.Nullify(defender); } } return(damage); }
protected override void OnTick() { if (!m_Registry.ContainsKey(m_Mobile)) { if (m_Item.Uses > 0 && m_Item.Parent == m_Mobile) { m_Item.RedoProtection(m_Mobile, m_Item); } else { m_Registry.Remove(m_Mobile); DefensiveSpell.Nullify(m_Mobile); } } else { if (m_Item.Parent == m_Mobile) { m_Item.RedoProtection(m_Mobile, m_Item); } else { m_Registry.Remove(m_Mobile); DefensiveSpell.Nullify(m_Mobile); } } }
protected override void OnTarget(Mobile from, object o) { if (o is Item) { m_Owner.Target((Item)o); } else { if (o != null && o == m_Owner.Caster) { //remove RA or Magic Reflect if (m_Owner.Caster.MagicDamageAbsorb > 0) { m_Owner.Caster.MagicDamageAbsorb = 0; m_Owner.Caster.SendMessage("You let your magic reflection dissipate."); DefensiveSpell.Nullify(m_Owner.Caster); } else if (m_Owner.Caster.MeleeDamageAbsorb > 0) { m_Owner.Caster.MeleeDamageAbsorb = 0; m_Owner.Caster.SendMessage("You let your reactive armor dissipate."); DefensiveSpell.Nullify(m_Owner.Caster); } else { m_Owner.Caster.SendLocalizedMessage(1005049); // That cannot be dispelled. } } else { m_Owner.Caster.SendLocalizedMessage(1005049); // That cannot be dispelled. } } }
private void CleanPlayer(Mobile pm) { pm.CurePoison(pm); pm.Hits = pm.HitsMax; pm.Mana = pm.ManaMax; pm.Stam = pm.StamMax; Targeting.Target.Cancel(pm); pm.MagicDamageAbsorb = 0; pm.MeleeDamageAbsorb = 0; Spells.Second.ProtectionSpell.Registry.Remove(pm); Spells.Fourth.CurseSpell.RemoveEffect(pm); Server.Spells.Necromancy.CorpseSkinSpell.RemoveCurse(pm); Server.Spells.Necromancy.BloodOathSpell.RemoveCurse(pm); Server.Spells.Necromancy.StrangleSpell.RemoveCurse(pm); pm.Blessed = false; pm.Paralyzed = false; pm.Hidden = false; DefensiveSpell.Nullify(pm); pm.Combatant = null; pm.Warmode = false; pm.Criminal = false; pm.Blessed = false; pm.Aggressed.Clear(); pm.Aggressors.Clear(); pm.Delta(MobileDelta.Noto); pm.InvalidateProperties(); }
private void PrepFighter(Mobile from) { if (!from.Alive) { from.Resurrect(); } if (from.Mount != null) { from.Mount.Rider = null; } from.CurePoison(from); from.Blessed = true; from.Frozen = true; from.StatMods.Clear(); from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; Targeting.Target.Cancel(from); from.MagicDamageAbsorb = 0; from.MeleeDamageAbsorb = 0; ProtectionSpell.Registry.Remove(from); DefensiveSpell.Nullify(from); from.Combatant = null; from.Delta(MobileDelta.Noto); //Update notoriety from.SendMessage("The fight will begin in ten seconds."); }
public void nocheat(Mobile who) { Targeting.Target.Cancel(who); who.MagicDamageAbsorb = 0; who.MeleeDamageAbsorb = 0; ProtectionSpell.Registry.Remove(who); DefensiveSpell.Nullify(who); }
private void HandleMatchEnd(Mobile from, bool kick) { if (!from.Alive) { from.Resurrect(); if (from.Corpse != null && from.Corpse is Corpse) { Corpse c = (Corpse)from.Corpse; for (int i = 0; i < c.Items.Count; ++i) { Item item = c.Items[i]; c.SetRestoreInfo(item, item.Location); } c.Open(from, true); c.Delete(); } } from.Criminal = false; from.Blessed = false; from.Frozen = false; from.CurePoison(from); from.StatMods.Clear(); from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; Targeting.Target.Cancel(from); from.MagicDamageAbsorb = 0; from.MeleeDamageAbsorb = 0; ProtectionSpell.Registry.Remove(from); DefensiveSpell.Nullify(from); from.Combatant = null; from.Delta(MobileDelta.Noto); //Update notoriety from.Location = m_SpectatorDest; if (kick && from.NetState == null) { Match m = FindMatch(from); if (m.Attackers.Contains(from)) { m.Attackers.Remove(from); } else if (m.Defenders.Contains(from)) { m.Defenders.Remove(from); } } }
public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target) { if (target.MagicDamageAbsorb > 0) { ++circle; target.MagicDamageAbsorb -= circle; // This order isn't very intuitive, but you have to nullify reflect before target gets switched bool reflect = (target.MagicDamageAbsorb >= 0); if (target is BaseCreature) { ((BaseCreature)target).CheckReflect(caster, ref reflect); } if (target.MagicDamageAbsorb <= 0) { target.MagicDamageAbsorb = 0; DefensiveSpell.Nullify(target); } if (reflect) { target.MagicDamageAbsorb = 0; DefensiveSpell.Nullify(target); target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; } } else if (target is BaseCreature) { bool reflect = false; ((BaseCreature)target).CheckReflect(caster, ref reflect); if (reflect) { target.MagicDamageAbsorb = 0; DefensiveSpell.Nullify(target); target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; } } }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////CLEAN PLAYERS FOR EVENT///////////////////////////////////////////////////////////////////////////////////////////////////////// public void CleanPlayer(Mobile pm) { //Cure Poison pm.CurePoison(pm); //Reset Hit Points pm.Hits = pm.HitsMax; //Rest Mana pm.Mana = pm.ManaMax; //Reset Stam pm.Stam = pm.StamMax; //Cancel any targeting Targeting.Target.Cancel(pm); //remove abosorption for magic pm.MagicDamageAbsorb = 0; //remove absorption for melee pm.MeleeDamageAbsorb = 0; //clear protection spell Spells.Second.ProtectionSpell.Registry.Remove(pm); //clear curse effect Spells.Fourth.CurseSpell.RemoveEffect(pm); //clear corpseskin Server.Spells.Necromancy.CorpseSkinSpell.RemoveCurse(pm); //clear blodd oath Server.Spells.Necromancy.BloodOathSpell.RemoveCurse(pm); //clear evil omen //Server.Spells.Necromancy.EvilOmenSpell.RemoveCurse(pm); //remove strangle Server.Spells.Necromancy.StrangleSpell.RemoveCurse(pm); //clear Paralyzed pm.Paralyzed = false; //clear defensive spell DefensiveSpell.Nullify(pm); //remove any combatant pm.Combatant = null; //remove war mode pm.Warmode = false; //remove criminal pm.Criminal = false; //clear agressed list pm.Aggressed.Clear(); //clear agressor list pm.Aggressors.Clear(); //clear delta notoriety pm.Delta(MobileDelta.Noto); //invalidate any properties due to the previous changes pm.InvalidateProperties(); }
public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target) { if (target.MagicDamageAbsorb > 0) { bool reflect = true; if (target is BaseCreature) { ((BaseCreature)target).CheckReflect(caster, ref reflect); } target.MagicDamageAbsorb = 0; DefensiveSpell.Nullify(target); if (reflect) { target.FixedParticles(0x373A, 10, 15, 5016, EffectLayer.Waist); //target.FixedEffect( 0x37B9, 10, 5 ); Mobile temp = caster; caster = target; target = temp; } } else if (target is BaseCreature) { bool reflect = false; ((BaseCreature)target).CheckReflect(caster, ref reflect); if (reflect) { target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; } } }
public virtual void RefreshPlayer(Mobile from) { if (from == null) { return; } if (!from.Alive) { from.Resurrect(); } Container pack = from.Backpack; Item holding = from.Holding; if (holding != null && pack != null) { pack.DropItem(holding); } from.RevealingAction(); from.Poison = null; from.StatMods.Clear(); Factions.Faction.ClearSkillLoss(from); from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; Targeting.Target.Cancel(from); from.MagicDamageAbsorb = 0; from.MeleeDamageAbsorb = 0; Spells.Second.ProtectionSpell.Registry.Remove(from); DefensiveSpell.Nullify(from); from.Combatant = null; from.Delta(MobileDelta.Noto); //Update notoriety }
protected override void OnTick() { ProtectionSpell.Registry.Remove(m_Caster); DefensiveSpell.Nullify(m_Caster); }
public static void CheckReflect(int circle, ref Mobile caster, ref Mobile target) { if (target.FindItemOnLayer(Layer.OuterTorso) is RobeOfReflection && (caster != target) && target.CheckSkill(SkillName.Magery, caster.Skills.Magery.Value * 0.5, caster.Skills.Magery.Value * 1.5)) { RobeOfReflection ror = (RobeOfReflection)target.FindItemOnLayer(Layer.OuterTorso); if (ror.IsArcane && ror.CurArcaneCharges >= 0) { target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; ror.CurArcaneCharges--; return; } } if (target.MagicDamageAbsorb > 0) { ++circle; target.MagicDamageAbsorb -= circle; // This order isn't very intuitive, but you have to nullify reflect before target gets switched bool reflect = (target.MagicDamageAbsorb >= 0); if (target is BaseCreature) { ((BaseCreature)target).CheckReflect(caster, ref reflect); } if (target.MagicDamageAbsorb <= 0) { target.MagicDamageAbsorb = 0; DefensiveSpell.Nullify(target); } if (reflect) { target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; } } else if (target is BaseCreature) { bool reflect = false; ((BaseCreature)target).CheckReflect(caster, ref reflect); if (reflect) { target.FixedEffect(0x37B9, 10, 5); Mobile temp = caster; caster = target; target = temp; } } }
public static void PrepareFighter(Mobile from, Duel duel) { if (!from.Alive) { from.Resurrect(); } Container pack = from.Backpack; BankBox bank = from.BankBox; Item holding = from.Holding; if (holding != null && pack != null) { pack.DropItem(holding); } from.CurePoison(from); from.StatMods.Clear(); from.Hits = from.HitsMax; from.Mana = from.ManaMax; from.Stam = from.StamMax; Targeting.Target.Cancel(from); from.MagicDamageAbsorb = 0; from.MeleeDamageAbsorb = 0; Spells.Second.ProtectionSpell.Registry.Remove(from); DefensiveSpell.Nullify(from); from.Combatant = null; from.Delta(MobileDelta.Noto); //Update notoriety List <Item> items = new List <Item>(); if (pack != null) { if (!duel.MagicWeapons) { for (int i = 0; i < EquipmentLayers.Length; ++i) { Item item = from.FindItemOnLayer(EquipmentLayers[i]); if (item != null && item is BaseWeapon) { BaseWeapon weapon = (BaseWeapon)item; if (weapon.AccuracyLevel > 0 || weapon.DamageLevel > 0 || weapon.DurabilityLevel > 0) { items.Add(item); } } } } if (!duel.MagicArmor) { for (int i = 0; i < EquipmentLayers.Length; ++i) { Item item = from.FindItemOnLayer(EquipmentLayers[i]); if (item != null && item is BaseArmor) { BaseArmor armor = (BaseArmor)item; if (armor.Durability > 0 || armor.ProtectionLevel > 0) { items.Add(item); } } } } for (int i = 0; i < pack.Items.Count; ++i) { Item item = pack.Items[i]; if (item != null) { if (!duel.MagicWeapons && item is BaseWeapon) { BaseWeapon weapon = (BaseWeapon)item; if (weapon.AccuracyLevel > 0 || weapon.DamageLevel > 0 || weapon.DurabilityLevel > 0) { items.Add(item); } } else if (!duel.MagicArmor && item is BaseArmor) { BaseArmor armor = (BaseArmor)item; if (armor.Durability > 0 || armor.ProtectionLevel > 0) { items.Add(item); } } //else if ( !duel.Potions && item is BasePotion ) //items.Add( item ); else if (!duel.Bandages && item is Bandage) { items.Add(item); } } } } if (!duel.Mounts) { if (from.Mount != null) { IMount mount = from.Mount; mount.Rider = null; if (mount is BaseCreature) { ((BaseCreature)mount).ControlOrder = OrderType.Stay; } } } if (items.Count > 0) { foreach (Item item in items) { bank.DropItem(item); } from.SendMessage("Some equipment has been moved to your bankbox due to restrictions on this duel."); } }
public void Target(Mobile m) { Type t = m.GetType(); bool dispellable = false; if (m is BaseCreature) { dispellable = ((BaseCreature)m).Summoned && !((BaseCreature)m).IsAnimatedDead; } else if (m == Caster) { dispellable = true; } if (!Caster.CanSee(m)) { Caster.SendLocalizedMessage(500237); // Target can not be seen. } else if (!dispellable) { Caster.SendLocalizedMessage(1005049); // That cannot be dispelled. } else if (CheckHSequence(m)) { if (m == Caster) { //2010.05.24 - Pix - New functionality - if caster casts dispel on himself, void all // magic effects. //Protection if (ProtectionSpell.Registry.Contains(Caster)) { ProtectionSpell.Registry.Remove(Caster); } //Reactive Armor Caster.MeleeDamageAbsorb = 0; //Reflect Caster.MagicDamageAbsorb = 0; //restart defensivespell "timer" DefensiveSpell.Nullify(Caster); //NightSight if (!Caster.CanBeginAction(typeof(LightCycle))) { Caster.EndAction(typeof(LightCycle)); Caster.LightLevel = 0; } //Strength string name = String.Format("[Magic] {0} Offset", StatType.Str); StatMod mod = Caster.GetStatMod(name); if (mod != null /*&& mod.Offset > 0*/) { Caster.RemoveStatMod(name); } //Agility name = String.Format("[Magic] {0} Offset", StatType.Dex); mod = Caster.GetStatMod(name); if (mod != null /*&& mod.Offset > 0*/) { Caster.RemoveStatMod(name); } //Cunning name = String.Format("[Magic] {0} Offset", StatType.Int); mod = Caster.GetStatMod(name); if (mod != null /*&& mod.Offset > 0*/) { Caster.RemoveStatMod(name); } //Bless - handled by above three //Incognito if (!Caster.CanBeginAction(typeof(IncognitoSpell))) { if (Caster is PlayerMobile) { ((PlayerMobile)Caster).SetHairMods(-1, -1); } Caster.BodyMod = 0; Caster.HueMod = -1; Caster.NameMod = null; Caster.EndAction(typeof(IncognitoSpell)); BaseArmor.ValidateMobile(Caster); } //ArchProtection if (!Caster.CanBeginAction(typeof(ArchProtectionSpell))) { Caster.VirtualArmorMod = 0; Caster.EndAction(typeof(ArchProtectionSpell)); } //Polymorph if (!Caster.CanBeginAction(typeof(PolymorphSpell))) { Caster.BodyMod = 0; Caster.HueMod = -1; Caster.EndAction(typeof(PolymorphSpell)); BaseArmor.ValidateMobile(Caster); } //Invisibility (shouldn't ever happen, but what the f**k, might as well put it in!) if (Caster.AccessLevel <= AccessLevel.Player) //make sure if we're staff, don't reveal { Caster.Hidden = false; } Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042); Effects.PlaySound(m, m.Map, 0x201); Caster.SendMessage("All beneficial magic effects have been stripped from you."); } else //Normal dispel dispellable creature stuff: { SpellHelper.Turn(Caster, m); BaseCreature bc = m as BaseCreature; double dispelChance = 0; if (bc != null) { // players don't have trouble dispelling the summons of a summoner (magery+spirit speak) if (Caster is PlayerMobile || bc.ControlMaster == null) { dispelChance = (50.0 + ((100 * (Caster.Skills.Magery.Value - bc.DispelDifficulty)) / (bc.DispelFocus * 2))) / 100; } else { double difficulty = bc.DispelDifficulty + bc.ControlMaster.Skills.SpiritSpeak.Value / 2.0; if (difficulty > 125) { difficulty = 125; } dispelChance = (50.0 + ((100 * (Caster.Skills.Magery.Value - difficulty)) / (bc.DispelFocus * 2))) / 100; } } if (dispelChance > Utility.RandomDouble()) { Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3728, 8, 20, 5042); Effects.PlaySound(m, m.Map, 0x201); bc.OnBeforeDispel(Caster); m.Delete(); } else { m.FixedEffect(0x3779, 10, 20); Caster.SendLocalizedMessage(1010084); // The creature resisted the attempt to dispel it! } } } FinishSequence(); }
public static void Damage(Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage, int phys, int fire, int cold, int pois, int nrgy, DFAlgorithm dfa) { int iDamage = (int)damage; #region Taran: Spell damage is based on armor difference /* * double newDamage = damage; * * if (target is PlayerMobile && from is PlayerMobile) * { * World.Broadcast(25, true, "Old damage is: " + iDamage); * * double defar = ((PlayerMobile) target).BaseArmorRatingSpells; * double attar = ((PlayerMobile) from).BaseArmorRatingSpells; * * double diff = defar - attar; * * World.Broadcast(50, true, "Difference in armor rating is: " + diff); * * if (defar - attar > 0) * newDamage = iDamage*(1.00 - ((diff * 1.6) / 100)); * * if (newDamage / iDamage < 0.6) //Don't deal less than 60% damage * newDamage = iDamage*0.6; * * iDamage = (int) newDamage; * * World.Broadcast(25, true, "New damage is: " + iDamage); * } */ #endregion //Maka); if (target == from && from.MagicDamageAbsorb > 0) { from.FixedEffect(0x37B9, 10, 5); from.MagicDamageAbsorb = 0; iDamage = 0; DefensiveSpell.Nullify(from); } if (Evasion.CheckSpellEvasion(target)) { iDamage = 0; } if (delay == TimeSpan.Zero) { if (from is BaseCreature) { ((BaseCreature)from).AlterSpellDamageTo(target, ref iDamage); } if (target is BaseCreature) { ((BaseCreature)target).AlterSpellDamageFrom(from, ref iDamage); } //WeightOverloading.DFA = dfa; int damageGiven = AOS.Damage(target, from, iDamage, phys, fire, cold, pois, nrgy); DoLeech(damageGiven, from, target); //WeightOverloading.DFA = DFAlgorithm.Standard; } else { new SpellDamageTimerAOS(spell, target, from, iDamage, phys, fire, cold, pois, nrgy, delay, dfa).Start(); } if (target is BaseCreature && from != null && delay == TimeSpan.Zero) { BaseCreature c = (BaseCreature)target; c.OnHarmfulSpell(from); c.OnDamagedBySpell(from); } }