aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/Unit/StatSystem.cpp14
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Tools/PlayerDump.cpp3
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;