コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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));
        }