aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-02-11 22:52:28 -0300
committerShauren <shauren.trinity@gmail.com>2021-06-19 23:33:44 +0200
commit13be704cb4619ef585ae0043580e2534f62e64aa (patch)
treed249b45c0eb51cb57590ca742f3a3dd57d979e9e
parent85e5509e91a1370b16851d375a26121797870921 (diff)
Core/Spells: implement SPELLVALUE_CRIT_CHANCE
(cherry picked from commit 546a605bd0cd0e828def81e26697f1c116a3f1b7)
-rw-r--r--src/server/game/Spells/Spell.cpp8
-rw-r--r--src/server/game/Spells/Spell.h1
-rw-r--r--src/server/game/Spells/SpellDefines.h1
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
4 files changed, 10 insertions, 2 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 501d7acbb04..59d67d12069 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -503,6 +503,7 @@ SpellValue::SpellValue(SpellInfo const* proto, Unit const* caster)
MaxAffectedTargets = proto->MaxAffectedTargets;
RadiusMod = 1.0f;
AuraStackAmount = 1;
+ CriticalChance = 0.0f;
DurationMul = 1;
}
@@ -7485,7 +7486,9 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier)
}
}
- float critChance = m_caster->SpellCritChanceDone(this, nullptr, m_spellSchoolMask, m_attackType);
+ float critChance = m_spellValue->CriticalChance;
+ if (!critChance)
+ critChance = m_caster->SpellCritChanceDone(this, nullptr, m_spellSchoolMask, m_attackType);
targetInfo.crit = roll_chance_f(unit->SpellCritChanceTaken(m_caster, this, nullptr, m_spellSchoolMask, critChance, m_attackType));
}
@@ -7578,6 +7581,9 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value)
case SPELLVALUE_AURA_STACK:
m_spellValue->AuraStackAmount = uint8(value);
break;
+ case SPELLVALUE_CRIT_CHANCE:
+ m_spellValue->CriticalChance = value / 100.0f; // @todo ugly /100 remove when basepoints are double
+ break;
case SPELLVALUE_DURATION_PCT:
m_spellValue->DurationMul = float(value) / 100.0f;
break;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index ea980d151a8..82456b035b1 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -306,6 +306,7 @@ struct SpellValue
float RadiusMod;
int32 AuraStackAmount;
float DurationMul;
+ float CriticalChance;
};
enum SpellState
diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h
index 83b48de53ec..77801e9a43f 100644
--- a/src/server/game/Spells/SpellDefines.h
+++ b/src/server/game/Spells/SpellDefines.h
@@ -212,6 +212,7 @@ enum SpellValueMod : uint8
SPELLVALUE_RADIUS_MOD,
SPELLVALUE_MAX_TARGETS,
SPELLVALUE_AURA_STACK,
+ SPELLVALUE_CRIT_CHANCE,
SPELLVALUE_DURATION_PCT
};
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 96d80449b8a..3cb6ab166e3 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3172,7 +3172,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
spellInfoMutable->_InitializeExplicitTargetMask();
}
- // addition for binary spells, ommit spells triggering other spells
+ // addition for binary spells, omit spells triggering other spells
for (SpellInfo const& spellInfo : mSpellInfoMap)
{
SpellInfo* spellInfoMutable = const_cast<SpellInfo*>(&spellInfo);