Exemplo n.º 1
0
        public virtual uint CalculateSkillDamage(Entity _target, DbMagicType _spell, bool _canDodge = false)
        {
            if (_spell == null)
            {
                return(1);
            }
            var dmg = (CombatStats.MagicDamage + _spell.Power) * (200 + CombatStats.PhoenixGemPct) / 180;

            if (_target is Monster)
            {
                dmg *= GetLevelBonusDamageFactor(Level, _target.Level);
            }
            dmg  = dmg * (100 - _target.CombatStats.MagicResistance) / 100;
            dmg -= _target.CombatStats.MagicDefense;
            if (dmg < 0)
            {
                dmg = 1;
            }
            if (_target is Monster && dmg > _target.MaximumLife * 600)
            {
                dmg = (int)_target.MaximumLife * 600;
            }
            if (_canDodge && !Common.PercentSuccess(_spell.Percent))
            {
                dmg = 0;
            }
            return((uint)dmg);
        }
Exemplo n.º 2
0
        public SpawnManager(Entity player, DbMagicType skill)
        {
            PetOwner = player;
            var magictype = ServerDatabase.Context.MagicType.GetById((uint)skill.ID + skill.Level);

            BaseType     = ServerDatabase.Context.Monstertype.GetById((uint)magictype.Power);
            DropRules    = ServerDatabase.Context.DropRules.GetRulesByMonsterType((uint)magictype.Power).ToList();
            TopLeft      = new Point(player.X, player.Y);
            BottomRight  = new Point(player.X, player.Y);
            Map          = player.Map;
            DeadMembers  = new Queue <Monster>();
            DyingMembers = new ConcurrentDictionary <uint, Monster>();
            AliveMembers = new ConcurrentDictionary <uint, Monster>();
            DeadMembers.Enqueue(new Monster(BaseType, this, player));
        }
Exemplo n.º 3
0
        public virtual uint CalculateBowDamage(Entity _target, DbMagicType _spell, bool _canDodge = false)
        {
            var dmg = Common.Random.Next(CombatStats.MinimumDamage, CombatStats.MaximumDamage) * (CombatStats.BonusAttackPct + CombatStats.DragonGemPct) / 200;

            if (_target is Player)
            {
                dmg /= 3;
            }
            else if (_target is Monster)
            {
                dmg *= GetLevelBonusDamageFactor(Level, _target.Level);
            }
            if (_spell != null)
            {
                dmg = dmg * (_spell.Power % 1000) / 100;
            }
            if (HasEffect(ClientEffect.Superman))
            {
                if (_target is Monster)
                {
                    dmg *= 10;
                }
                else
                {
                    dmg *= 2;
                }
            }
            dmg = dmg * (100 - _target.CombatStats.BlessPct) / 100;
            dmg = dmg * (100 - _target.CombatStats.TortGemPct) / 100;
            dmg = dmg * (100 - _target.CombatStats.Dodge) / 100;
            if (dmg < 1)
            {
                dmg = 1;
            }
            if (_target is Monster && dmg > _target.MaximumLife * 600)
            {
                dmg = (int)_target.MaximumLife * 600;
            }
            if (_canDodge && !Common.PercentSuccess(70 - _target.CombatStats.Dodge + CombatStats.Accuracy))
            {
                dmg = 0;
            }
            return((uint)dmg);
        }
Exemplo n.º 4
0
        public virtual uint CalculatePhysicalDamage(Entity _target, DbMagicType _spell, bool _canDodge = false)
        {
            var dmg = Common.Random.Next(CombatStats.MinimumDamage, CombatStats.MaximumDamage) * (CombatStats.BonusAttackPct + CombatStats.DragonGemPct) / 100;

            if (_target is Monster)
            {
                dmg *= GetLevelBonusDamageFactor(Level, _target.Level);
            }
            if (_spell != null && _spell.Power > 0)
            {
                dmg = (int)((double)dmg * (double)(_spell.Power % 1000) / (double)100);
            }
            if (HasEffect(ClientEffect.Superman))
            {
                if (_target is Monster)
                {
                    dmg *= 10;
                }
                else
                {
                    dmg *= 2;
                }
            }
            dmg  = dmg * (100 - _target.CombatStats.BlessPct) / 100;
            dmg  = dmg * (100 - _target.CombatStats.TortGemPct) / 100;
            dmg -= _target.CombatStats.Defense * CombatStats.BonusDefensePct / 100;
            if (dmg < 1)
            {
                dmg = 1;
            }
            if (_canDodge && !Common.PercentSuccess(Math.Max(40, 90 - _target.CombatStats.Dodge + CombatStats.Accuracy)))
            {
                dmg = 0;
            }

            return((uint)dmg);
        }