diff options
Diffstat (limited to 'src/game/StatSystem.cpp')
-rw-r--r-- | src/game/StatSystem.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index 3533c5c8a02..64bad232994 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -737,15 +737,27 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType) break; } - float att_speed = float(GetAttackTime(attType))/1000.0f; + //float att_speed = float(GetAttackTime(attType))/1000.0f; - float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed; + float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE); + float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE); + + //This formula is not correct + //The correct one is (Damage_from_AttackPower + Base_Weapon_Damage) * Multiplier + //We do not know the multiplier, so we assume attack power is about 25% damage + //float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed; + float base_value = GetModifierValue(unitMod, BASE_VALUE) + + (weapon_mindamage + weapon_maxdamage) / 6 + / GetTotalAttackPowerValue(attType) * getLevel() * 5; float base_pct = GetModifierValue(unitMod, BASE_PCT); float total_value = GetModifierValue(unitMod, TOTAL_VALUE); float total_pct = GetModifierValue(unitMod, TOTAL_PCT); - float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE); - float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE); + if(attType == BASE_ATTACK && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED)) + { + weapon_mindamage = 0; + weapon_maxdamage = 0; + } float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct ; float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct ; |