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); }
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)); }
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); }
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); }