Core/Spells: renamed SPELL_ATTR1_REQ_COMBO_POINTS1 to SPELL_ATTR1_FINISHING_MOVE_DAMAGE and SPELL_ATTR1_REQ_COMBO_POINTS2 to SPELL_ATTR1_FINISHING_MOVE_DURATION and implemented them

This commit is contained in:
Ovahlord
2021-05-16 19:19:51 +02:00
parent 2dce3955b2
commit 95651d9f88
2 changed files with 11 additions and 9 deletions

View File

@@ -409,9 +409,9 @@ enum SpellAttr1
SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17
SPELL_ATTR1_UNK18 = 0x00040000, // 18 stun, polymorph, daze, hex
SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19
SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target
SPELL_ATTR1_FINISHING_MOVE_DAMAGE = 0x00100000, // 20 Finishing Move - Damage
SPELL_ATTR1_UNK21 = 0x00200000, // 21
SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target
SPELL_ATTR1_FINISHING_MOVE_DURATION = 0x00400000, // 22 Finishing Move - Duration
SPELL_ATTR1_UNK23 = 0x00800000, // 23
SPELL_ATTR1_IS_FISHING = 0x01000000, // 24 only fishing spells
SPELL_ATTR1_UNK25 = 0x02000000, // 25

View File

@@ -528,7 +528,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster, int32 const* bp, Unit const
if (caster)
{
// bonus amount from combo points
if (caster->m_playerMovingMe && comboDamage)
if (_spellInfo->HasAttribute(SPELL_ATTR1_FINISHING_MOVE_DAMAGE) && caster->m_playerMovingMe && comboDamage)
if (uint8 comboPoints = caster->m_playerMovingMe->GetComboPoints())
value += comboDamage * comboPoints;
@@ -1456,7 +1456,7 @@ bool SpellInfo::IsMoveAllowedChannel() const
bool SpellInfo::NeedsComboPoints() const
{
return HasAttribute(SpellAttr1(SPELL_ATTR1_REQ_COMBO_POINTS1 | SPELL_ATTR1_REQ_COMBO_POINTS2));
return HasAttribute(SpellAttr1(SPELL_ATTR1_FINISHING_MOVE_DAMAGE | SPELL_ATTR1_FINISHING_MOVE_DURATION));
}
bool SpellInfo::IsNextMeleeSwingSpell() const
@@ -3367,12 +3367,14 @@ int32 SpellInfo::CalcDuration(Unit* caster, Spell* spell) const
if (duration == -1)
return -1;
// This is ***not** in client code, but is very much needed for, ie, Slice and Dice.
uint8 comboPoints = caster != nullptr && caster->m_playerMovingMe ? caster->m_playerMovingMe->GetComboPoints() : 0;
if (comboPoints != 0)
// Increase duration based on combo points
if (HasAttribute(SPELL_ATTR1_FINISHING_MOVE_DURATION))
{
if (GetDuration() != GetMaxDuration() && GetDuration() != -1)
duration += int32((GetMaxDuration() - GetDuration()) * comboPoints / 5);
if (uint8 comboPoints = (caster && caster->m_playerMovingMe) ? caster->m_playerMovingMe->GetComboPoints() : 0)
{
if (GetDuration() != GetMaxDuration() && GetDuration() != -1)
duration += int32((GetMaxDuration() - GetDuration()) * comboPoints / 5);
}
}
if (caster != nullptr)