public virtual double GetDamageScalar(Mobile target, double damageBonus) { PlayerMobile pm_Caster = m_Caster as PlayerMobile; BaseCreature bc_Caster = m_Caster as BaseCreature; PlayerMobile pm_Target = target as PlayerMobile; BaseCreature bc_Target = target as BaseCreature; bool PlayerCaster = false; bool PlayerTarget = false; bool CreatureCaster = false; bool CreatureTarget = false; bool TamedCaster = false; bool TamedTarget = false; if (pm_Caster != null) { PlayerCaster = true; } if (bc_Caster != null) { CreatureCaster = true; } if (pm_Target != null) { PlayerTarget = true; } if (bc_Target != null) { CreatureTarget = true; } if (CreatureCaster) { if (bc_Caster.Controlled && bc_Caster.ControlMaster != null) { if (bc_Caster.ControlMaster is PlayerMobile) { TamedCaster = true; } } } if (CreatureTarget) { if (bc_Target.Controlled && bc_Target.ControlMaster != null) { if (bc_Target.ControlMaster is PlayerMobile) { TamedTarget = true; } } } AspectArmorProfile casterAspectArmorProfile = AspectGear.GetAspectArmorProfile(m_Caster); AspectArmorProfile targetAspectArmorProfile = AspectGear.GetAspectArmorProfile(target); double damageScalar = SpellHelper.BaseDamageScalar; double evalIntBonus = (m_Caster.Skills[SkillName.EvalInt].Value / 100) * SpellHelper.BaseEvalIntDamageBonus; double spiritSpeakBonus = (m_Caster.Skills[SkillName.SpiritSpeak].Value / 100) * SpellHelper.BaseSpiritSpeakDamageBonus; double inscriptionBonus = (m_Caster.Skills[SkillName.Inscribe].Value / 100) * SpellHelper.BaseInscriptionDamageBonus; double slayerBonus = GetSlayerDamageBonus(target); double spellDamageInflictedBonus = 0; double spellDamageReceivedBonus = 0; m_Caster.CheckSkill(SkillName.SpiritSpeak, 0.0, 120.0, 1.0); double targetMagicResist = target.Skills[SkillName.MagicResist].Value; double magicResistBonus = target.GetSpecialAbilityEntryValue(SpecialAbilityEffect.MagicResist); //Player vs Player if (m_Caster is PlayerMobile && target is PlayerMobile) { evalIntBonus *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar; spiritSpeakBonus *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar; inscriptionBonus *= SpellHelper.PlayerVsPlayerSkillDamageBonusScalar; slayerBonus = 0; spellDamageInflictedBonus = 0; damageBonus = 0; spellDamageReceivedBonus = 0; magicResistBonus = 0; } damageScalar += evalIntBonus + spiritSpeakBonus + inscriptionBonus + slayerBonus + spellDamageInflictedBonus + damageBonus - spellDamageReceivedBonus; targetMagicResist += magicResistBonus; //Player Caster if (PlayerCaster) { //Player Target if (PlayerTarget) { damageScalar *= 1.0; } //Tamed Target else if (TamedTarget) { damageScalar *= 2.0; } //Creature Target else { damageScalar *= 2.0; } } //Tamed Creature Casting else if (TamedCaster) { //Player Target if (PlayerTarget) { damageScalar *= 1.0; } //Tamed Target else if (TamedTarget) { damageScalar *= 2.0; } //Creature Target else { damageScalar *= 2.0; } } else //Normal Creature Casting { //Player Target if (PlayerTarget) { damageScalar *= 1; } //Tamed Target else if (TamedTarget) { damageScalar *= 2.0; } //Creature Target else { damageScalar *= 2.0; } } if (CreatureTarget) { bc_Target.AlterDamageScalarFrom(m_Caster, ref damageScalar); } if (CreatureCaster) { bc_Caster.AlterDamageScalarTo(target, ref damageScalar); } target.Region.SpellDamageScalar(m_Caster, target, ref damageScalar); //Magic Resist double minDamageReduction = (targetMagicResist / 100) * SpellHelper.MagicResistMinDamageReductionScalar; double maxDamageReduction = (targetMagicResist / 100) * SpellHelper.MagicResistMaxDamageReductionScalar; double magicResistScalar = 1 - (minDamageReduction + ((maxDamageReduction - minDamageReduction) * Utility.RandomDouble())); damageScalar *= magicResistScalar; if (damageScalar < 0) { damageScalar = 0; } return(damageScalar); }