diff options
author | megamage <none@none> | 2009-05-28 18:29:59 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-28 18:29:59 -0500 |
commit | 451471d438e234698a91f15d63b17df3ec3327f4 (patch) | |
tree | 15b987eab348e2adef11e9a729b84405f58df5da /src | |
parent | cfa2e223c03b2b6fbc7bce39ba942ebbecd95c5a (diff) |
[7904] Change creature damage calculation formula. Author: Seizerkiller
* Add new creature_template field `dmg_multiplier`
* Make attackpower include in creature damage not dependent from attack speed.
NOTE: included in sql update recalculation for creature damage related fields only make
temporary possible usable values. Real values need revisited by DB devs for correctness.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Creature.h | 1 | ||||
-rw-r--r-- | src/game/StatSystem.cpp | 10 | ||||
-rw-r--r-- | src/shared/Database/SQLStorage.cpp | 4 |
3 files changed, 7 insertions, 8 deletions
diff --git a/src/game/Creature.h b/src/game/Creature.h index 9c94fa64423..eaf76942e58 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -200,6 +200,7 @@ struct CreatureInfo float maxdmg; uint32 dmgschool; uint32 attackpower; + float dmg_multiplier; uint32 baseattacktime; uint32 rangeattacktime; uint32 unit_flags; // enum UnitFlags mask values diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index 4cf93760957..87bd8a46825 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -842,16 +842,14 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType) 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_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType); float base_pct = GetModifierValue(unitMod, BASE_PCT); float total_value = GetModifierValue(unitMod, TOTAL_VALUE); float total_pct = GetModifierValue(unitMod, TOTAL_PCT); + float dmg_multiplier = GetCreatureInfo()->dmg_multiplier; if(!CanUseAttackType(attType)) { @@ -859,8 +857,8 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType) 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 ; + float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct * dmg_multiplier; + float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct * dmg_multiplier; switch(attType) { diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index 67091174c77..8274ccb0cd9 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -27,8 +27,8 @@ extern DatabasePostgre WorldDatabase; extern DatabaseMysql WorldDatabase; #endif -const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiis"; -const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiii"; +const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiis"; +const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiii"; const char CreatureDataAddonInfofmt[]="iiiiiiis"; const char CreatureModelfmt[]="iffbi"; const char CreatureInfoAddonInfofmt[]="iiiiiiis"; |