Thanks for your reply. I added 2 lines to the script, not sure if this is how you were trying to explain things but this is what I did. I found the current code:
Code:
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;
}
And I added the following lines:
Code:
if (_target is Monster && dmg > _target.MaximumLife * 600)
dmg = (int)_target.MaximumLife * 600;
So it currently looks like:
Code:
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 (_target is Monster && dmg > _target.MaximumLife * 600)
dmg = (int)_target.MaximumLife * 600;
if (_canDodge && !Common.PercentSuccess(Math.Max(40, 90 - _target.CombatStats.Dodge + CombatStats.Accuracy)))
dmg = 0;
return (uint)dmg;
}
Not sure if this is what you were recommending, but it seems to work perfectly fine. If there's a better way of doing this, I would like a tip or two. Thanks again.