* Update creature damage calculation by synchronising Creature::UpdateAttackPowerAndDamage and Creature::UpdateDamagePhysical with MaNGOS.

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2009-06-22 23:53:37 +02:00
parent 8533946ac1
commit 2ce88f44aa

View File

@@ -851,70 +851,32 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
//automatically update weapon damage after attack power modification
if(ranged)
UpdateDamagePhysical(RANGED_ATTACK);
else
{
UpdateDamagePhysical(BASE_ATTACK);
UpdateDamagePhysical(OFF_ATTACK);
}
return;
//automatically update weapon damage after attack power modification
UpdateDamagePhysical(BASE_ATTACK);
}
void Creature::UpdateDamagePhysical(WeaponAttackType attType)
{
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;
}
if(attType > BASE_ATTACK)
return;
//float att_speed = float(GetAttackTime(attType))/1000.0f;
UnitMods unitMod = UNIT_MOD_DAMAGE_MAINHAND;
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;
if(!CanUseAttackType(attType))
{
weapon_mindamage = 0;
weapon_maxdamage = 0;
}
float weapon_mindamage = GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE);
float weapon_maxdamage = GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE);
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)
{
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;
}
SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage);
SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage);
}
/*#######################################