/// <summary> /// Gets the damage between two entities using ranged attack calculations. /// </summary> /// <param name="attacker">The attacker.</param> /// <param name="attacked">The attacked.</param> /// <returns>The amount of damage dealt.</returns> public static uint GetDamage(IAttackableEntity attacker, IAttackableEntity attacked) { double damage = 0; var attackerPlayer = attacker as Player; if (attackerPlayer != null) { var attackedPlayer = attacked as Player; var attackedMonster = attacked as Monster; damage = Drivers.Repositories.Safe.Random.Next(attackerPlayer.MinAttack, attackerPlayer.MaxAttack); if (attackedPlayer != null) { Player_Player(attackerPlayer, attackedPlayer, ref damage); } else if (attackedMonster != null) { Player_Monster(attackerPlayer, attackedMonster, ref damage); } } SharedDamageCalculations.CalculateLevelExtraDamage(attacker.Level, attacked.Level, ref damage); SharedDamageCalculations.CalculateRebornExtraDamage(attacker.Reborns, ref damage); return((uint)Math.Max((int)damage, (int)1)); }
/// <summary> /// Gets the damage between two entities using magic attack calculations. /// </summary> /// <param name="attacker">The attacker.</param> /// <param name="attacked">The attacked.</param> /// <param name="spellInfo">The spell info.</param> /// <returns>The amount of damage dealt.</returns> public static uint GetDamage(IAttackableEntity attacker, IAttackableEntity attacked, SpellInfo spellInfo) { double damage = 0; var attackerPlayer = attacker as Player; var attackerMonster = attacker as Monster; var attackedPlayer = attacked as Player; var attackedMonster = attacked as Monster; if (attackerPlayer != null) { damage = (double)attackerPlayer.MagicAttack; if (attackedPlayer != null) { Player_Player(attackerPlayer, attackedPlayer, spellInfo, ref damage); } else if (attackedMonster != null) { Player_Monster(attackerPlayer, attackedMonster, spellInfo, ref damage); } } else if (attackerMonster != null) { damage = Drivers.Repositories.Safe.Random.Next(attackerMonster.MinAttack, attackerMonster.MaxAttack); if (attackedPlayer != null) { Monster_Player(attackerMonster, attackedPlayer, spellInfo, ref damage); } else if (attackedMonster != null) { Monster_Monster(attackerMonster, attackedMonster, spellInfo, ref damage); } } if (attackerMonster == null || attackerMonster != null && attackerMonster.Behaviour != Enums.MonsterBehaviour.DeathGuard) { SharedDamageCalculations.CalculateLevelExtraDamage(attacker.Level, attacked.Level, ref damage); SharedDamageCalculations.CalculateRebornExtraDamage(attacker.Reborns, ref damage); } return((uint)Math.Max((int)damage, (int)1)); }