private static bool CheckSlays(SlayerName slayer, Mobile target) { if (slayer == SlayerName.None) { return(false); } SlayerEntry entry = SlayerGroup.GetEntryByName(slayer); return(entry != null && entry.Slays(target)); }
public double GetDifficultyFor(Mobile targ) { double val = GetBaseDifficulty(targ); if (m_Quality == InstrumentQuality.Exceptional) { val -= 5.0; // 10% } if (targ is BaseCreature) { if (((BaseCreature)targ).BardImmune) { val += 15.0; // -30% } } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } if (m_Slayer2 != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } return(val); }
public override bool OnMoveOver(Mobile m) { SlayerEntry demon = SlayerGroup.GetEntryByName(SlayerName.Exorcism); if (m is BaseCreature) { if (demon.Slays(m) && ((BaseCreature)m).ControlMaster != m) { m.Mana = 0; return(false); } } return(true); }
public bool OppositionSuperSlays(Mobile m) { for (int i = 0; i < this.Opposition.Length; i++) { if (this.Opposition[i].Super.Slays(m)) { return(true); } } if (m_Super.Name == SlayerName.Eodon && !m_Super.Slays(m)) { return(true); } return(false); }
public double GetDifficultyFor(Mobile targ) { double val = GetBaseDifficulty(targ); if (m_Exceptional) { val -= 5.0; // 10% } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } if (m_Slayer2 != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } Utility.FixMax(ref val, 160); return(val); }
public double GetDifficultyFor(Mobile targ) { double val = GetBaseDifficulty(targ); if (m_Quality == InstrumentQuality.Exceptional) { val -= 10.0; } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 25.0; } else if (entry.Group.OppositionSuperSlays(targ)) { val += 25.0; } } } if (m_Slayer2 != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2); if (entry != null) { if (entry.Slays(targ)) { val -= 25.0; } else if (entry.Group.OppositionSuperSlays(targ)) { val += 25.0; } } } return(val); }
public double GetDifficultyFor(Mobile targ) { if (!(targ is BaseCreature)) { return(0.0); } BaseCreature bc = (BaseCreature)targ; double val = GetCreatureDifficulty(bc); // Instrument specific modifications if (m_Quality == InstrumentQuality.Exceptional) { val -= 5.0; // 10% } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.Opposition.Super.Slays(targ)) { val += 10.0; // -20% } } } return(val); }
public double GetDifficultyFor(Mobile targ) { double val = GetBaseDifficulty(targ); if (m_Quality == ItemQuality.Exceptional) { val -= 5.0; // 10% } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } if (m_Slayer2 != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } if (m_Slayer == SlayerName.None && m_Slayer2 == SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(SlayerSocket.GetSlayer(this)); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } return(val); }
public double GetDifficultyFor(Mobile targ) { /* Difficulty TODO: Add another 100 points for each of the following abilities: * - Radiation or Aura Damage (Heat, Cold etc.) * - Summoning Undead */ double val = targ.Hits + targ.Stam + targ.Mana; for (int i = 0; i < targ.Skills.Length; i++) { val += targ.Skills[i].Base; } if (val > 700) { val = 700 + ((val - 700) / 3.66667); } BaseCreature bc = targ as BaseCreature; if (IsMageryCreature(bc)) { val += 100; } if (IsFireBreathingCreature(bc)) { val += 100; } if (IsPoisonImmune(bc)) { val += 100; } if (targ is VampireBat || targ is VampireBatFamiliar) { val += 100; } val += GetPoisonLevel(bc) * 20; val /= 10; if (bc != null && bc.IsParagon) { val += 40.0; } if (m_Quality == InstrumentQuality.Exceptional) { val -= 5.0; // 10% } if (m_Slayer != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } if (m_Slayer2 != SlayerName.None) { SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2); if (entry != null) { if (entry.Slays(targ)) { val -= 10.0; // 20% } else if (entry.Group.OppositionSuperSlays(targ)) { val += 10.0; // -20% } } } return(val); }
public override bool OnMoveOver(Mobile m) { bool hurts = true; if (m.Blessed) { hurts = false; } if (!m.Alive) { hurts = false; } if (owner is BaseCreature && m is BaseCreature) { BaseCreature bc = (BaseCreature)m; if (!bc.Controlled) { hurts = false; } } if (hurts) { SlayerEntry SilverSlayer = SlayerGroup.GetEntryByName(SlayerName.Silver); SlayerEntry ExorcismSlayer = SlayerGroup.GetEntryByName(SlayerName.Exorcism); if (m is PlayerMobile && Spells.Research.ResearchAirWalk.UnderEffect(m)) { Point3D air = new Point3D((m.X + 1), (m.Y + 1), (m.Z + 5)); Effects.SendLocationParticles(EffectItem.Create(air, m.Map, EffectItem.DefaultDuration), 0x2007, 9, 32, Server.Items.CharacterDatabase.GetMySpellHue(m, 0), 0, 5022, 0); m.PlaySound(0x014); } else if (this.Name == "hot magma" && !(m is MagmaElemental)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3709, 10, 30, 5052); Effects.PlaySound(m.Location, m.Map, 0x225); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 100, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "quick silver") { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 0, 50); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "holy water" && (SilverSlayer.Slays(m) || ExorcismSlayer.Slays(m))) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3709, 10, 30, 5052); Effects.PlaySound(m.Location, m.Map, 0x225); AOS.Damage(m, owner, Hurt(owner, 40, 60), 20, 20, 20, 20, 20); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "glowing goo" && !(m is GlowBeetle) && !(m is GlowBeetleRiding)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 63, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 50, 50); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "scorching ooze" && !(m is Lavapede)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 63, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 100, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "blue slime" && !(m is SlimeDevil)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "swamp muck" && !(m is SwampThing)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poisonous slime" && !(m is AbyssCrawler)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poison spit" && !(m is Neptar) && !(m is NeptarWizard)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poison spittle" && !(m is Lurker)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "fungal slime" && !(m is Fungal) && !(m is FungalMage) && !(m is CreepingFungus)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "spider ooze" && !(m is ZombieSpider)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "acidic slime" && !(m is ToxicElemental)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x231); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "acidic ichor" && !(m is AntaurKing) && !(m is AntaurProgenitor) && !(m is AntaurSoldier) && !(m is AntaurWorker)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x231); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "thick blood" && !(m is BloodElemental) && !(m is BloodDemon)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "infected blood" && !(m is Infected)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "alien blood" && !(m is Xenomorph) && !(m is Xenomutant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 20, 20, 20, 20, 20); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "green blood" && !(m is ZombieGiant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 20, 0, 0, 80, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "toxic blood" && !(m is Mutant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "freezing water" && !(m is WaterElemental) && !(m is WaterWeird) && !(m is DeepWaterElemental) && !(m is Dagon)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 20, 40), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "deep water" && !(m is WaterElemental) && !(m is WaterWeird) && !(m is DeepWaterElemental) && !(m is Dagon)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 40, 60), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "lesser poison potion" || this.Name == "poison potion" || this.Name == "greater poison potion" | this.Name == "deadly poison potion" || this.Name == "lethal poison potion") { int pSkill = (int)(owner.Skills[SkillName.Poisoning].Value / 50); int tSkill = (int)(owner.Skills[SkillName.TasteID].Value / 33); int aSkill = (int)(owner.Skills[SkillName.Alchemy].Value / 33); int pMin = pSkill + tSkill + aSkill; int pMax = pMin * 2; Poison pois = Poison.Lesser; if (this.Name == "poison potion") { pMin = pMin + 2; pMax = pMax + 2; pois = Poison.Regular; } else if (this.Name == "greater poison potion") { pMin = pMin + 3; pMax = pMax + 3; pois = Poison.Greater; } else if (this.Name == "deadly poison potion") { pMin = pMin + 4; pMax = pMax + 4; pois = Poison.Deadly; } else if (this.Name == "lethal poison potion") { pMin = pMin + 5; pMax = pMax + 5; pois = Poison.Lethal; } if (pMin >= Utility.RandomMinMax(1, 16)) { m.ApplyPoison(owner, pois); } owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, pMin, pMax), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid fire") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x3709, 30, 10); m.PlaySound(0x208); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 80, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid goo") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, Utility.RandomList(0x3967, 0x3979), 30, 10); m.PlaySound(0x5C3); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 0, 0, 80); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid ice") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x1A84, 30, 10, 0x9C1, 0); m.PlaySound(0x10B); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 80, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid rot") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x3400, 60); Effects.PlaySound(m.Location, m.Map, 0x108); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 0, 80, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid pain") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); m.FixedParticles(0x37C4, 1, 8, 9916, 39, 3, EffectLayer.Head); m.FixedParticles(0x37C4, 1, 8, 9502, 39, 4, EffectLayer.Head); m.PlaySound(0x210); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 80, 5, 5, 5, 5); // Ph, Fr, Cd, Ps, Eg } } return(true); }