diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-08-17 00:24:50 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-08-17 00:24:50 +0200 |
commit | 1acb3b4f1d38a4b246c7b41c1d0f3df71033394b (patch) | |
tree | 6cc55881b1d2ce39c3e380e8e3f5b34f6461412b | |
parent | 00e81cd98a2bd75fa0de58963c05c1c584225ca1 (diff) |
Core/Spells: Fixed a mistake in obtaining class for scaling, also fixed crash in feral damage calculations
-rwxr-xr-x | src/server/game/Entities/Unit/StatSystem.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Tools/PlayerDump.cpp | 3 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 75e82235611..9021523db24 100755 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -416,7 +416,7 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo float att_speed = GetAPMultiplier(attType, normalized); - float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed; + float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType) / 14.0f * att_speed; float base_pct = GetModifierValue(unitMod, BASE_PCT); float total_value = GetModifierValue(unitMod, TOTAL_VALUE); float total_pct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f; @@ -426,15 +426,19 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo if (IsInFeralForm()) //check if player is druid and in cat or bear forms { + float weaponSpeed = BASE_ATTACK_TIME / 1000.f; + if (Item* weapon = GetWeaponForAttack(BASE_ATTACK, true)) + weaponSpeed = weapon->GetTemplate()->Delay / 1000; + if (GetShapeshiftForm() == FORM_CAT) { - weapon_mindamage = weapon_mindamage / GetWeaponForAttack(BASE_ATTACK, true)->GetTemplate()->Delay / 1000; - weapon_maxdamage = weapon_maxdamage / GetWeaponForAttack(BASE_ATTACK, true)->GetTemplate()->Delay / 1000; + weapon_mindamage = weapon_mindamage / weaponSpeed; + weapon_maxdamage = weapon_maxdamage / weaponSpeed; } else if (GetShapeshiftForm() == FORM_BEAR) { - weapon_mindamage = weapon_mindamage / GetWeaponForAttack(BASE_ATTACK, true)->GetTemplate()->Delay / 1000 + weapon_mindamage / 2.5; - weapon_maxdamage = weapon_mindamage / GetWeaponForAttack(BASE_ATTACK, true)->GetTemplate()->Delay / 1000 + weapon_maxdamage / 2.5; + weapon_mindamage = weapon_mindamage / weaponSpeed + weapon_mindamage / 2.5; + weapon_maxdamage = weapon_mindamage / weaponSpeed + weapon_maxdamage / 2.5; } } else if (!CanUseAttackType(attType)) //check if player not in form but still can't use (disarm case) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 7eb1cab28d7..165cc5cec42 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -418,7 +418,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster, int32 const* bp, Unit const { if (caster) { - if (GtSpellScalingEntry const* gtScaling = sGtSpellScalingStore.LookupEntry((scaling->playerClass != -1 ? caster->getClass() : 11) * 100 + caster->getLevel() - 1)) + if (GtSpellScalingEntry const* gtScaling = sGtSpellScalingStore.LookupEntry((scaling->playerClass != -1 ? scaling->playerClass - 1 : 11) * 100 + caster->getLevel() - 1)) { float preciseBasePoints = ScalingMultiplier * gtScaling->value; comboDamage = ComboScalingMultiplier * gtScaling->value; diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index f6d0de28d28..2907292f5a6 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -320,7 +320,10 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl case DTT_CHARACTER: { if (result->GetFieldCount() <= 68) // avoid crashes on next check + { sLog->outFatal(LOG_FILTER_GENERAL, "PlayerDumpWriter::DumpTable - Trying to access non-existing or wrong positioned field (`deleteInfos_Account`) in `characters` table."); + return false; + } if (result->Fetch()[68].GetUInt32()) // characters.deleteInfos_Account - if filled error return false; |