aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-08-09 15:11:04 -0500
committermegamage <none@none>2009-08-09 15:11:04 -0500
commitc033cfc39afda3ce711d90176f95d7cc7195dc72 (patch)
treed88dc8c79f3cb418ab4035d5a21a50111f13d471 /src
parent2ce88f44aa47757b542d23e1f97101227073fcfd (diff)
Backed out changeset: 43d0f185abe2
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/StatSystem.cpp58
1 files changed, 48 insertions, 10 deletions
diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp
index bd283c81fc5..bb7b1273ac0 100644
--- a/src/game/StatSystem.cpp
+++ b/src/game/StatSystem.cpp
@@ -851,32 +851,70 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
//automatically update weapon damage after attack power modification
if(ranged)
- return;
- //automatically update weapon damage after attack power modification
- UpdateDamagePhysical(BASE_ATTACK);
+ UpdateDamagePhysical(RANGED_ATTACK);
+ else
+ {
+ UpdateDamagePhysical(BASE_ATTACK);
+ UpdateDamagePhysical(OFF_ATTACK);
+ }
}
void Creature::UpdateDamagePhysical(WeaponAttackType attType)
{
- if(attType > BASE_ATTACK)
- return;
+ UnitMods unitMod;
+ switch(attType)
+ {
+ case BASE_ATTACK:
+ default:
+ unitMod = UNIT_MOD_DAMAGE_MAINHAND;
+ break;
+ case OFF_ATTACK:
+ unitMod = UNIT_MOD_DAMAGE_OFFHAND;
+ break;
+ case RANGED_ATTACK:
+ unitMod = UNIT_MOD_DAMAGE_RANGED;
+ break;
+ }
- UnitMods unitMod = UNIT_MOD_DAMAGE_MAINHAND;
+ //float att_speed = float(GetAttackTime(attType))/1000.0f;
+ float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE);
+ float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE);
+
+ //float base_value = GetModifierValue(unitMod, BASE_VALUE)
+ // + (weapon_mindamage + weapon_maxdamage)
+ // * GetTotalAttackPowerValue(attType) / (getLevel() * 30);
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;
- float weapon_mindamage = GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE);
- float weapon_maxdamage = GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE);
+ if(!CanUseAttackType(attType))
+ {
+ weapon_mindamage = 0;
+ weapon_maxdamage = 0;
+ }
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;
- SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage);
- SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage);
+ switch(attType)
+ {
+ case BASE_ATTACK:
+ default:
+ SetStatFloatValue(UNIT_FIELD_MINDAMAGE,mindamage);
+ SetStatFloatValue(UNIT_FIELD_MAXDAMAGE,maxdamage);
+ break;
+ case OFF_ATTACK:
+ SetStatFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE,mindamage);
+ SetStatFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE,maxdamage);
+ break;
+ case RANGED_ATTACK:
+ SetStatFloatValue(UNIT_FIELD_MINRANGEDDAMAGE,mindamage);
+ SetStatFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE,maxdamage);
+ break;
+ }
}
/*#######################################