fix(Core/Spells): Multi-Shot should not be affected by Glyph of Aimed… (#9897)

* fix(Core/Spells): Multi-Shot should not be affected by Glyph of Aimed Shot.

Fixes #9707

* Update.
This commit is contained in:
UltraNix
2022-01-03 19:15:24 +01:00
committed by GitHub
parent 855e031284
commit d8712455c7
3 changed files with 31 additions and 2 deletions

View File

@@ -10274,7 +10274,7 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite
// category spells
if (cat && catrec > 0)
{
_AddSpellCooldown(spellInfo->Id, cat, itemId, useSpellCooldown? recTime : catrecTime, true, true);
_AddSpellCooldown(spellInfo->Id, cat, itemId, useSpellCooldown ? recTime : catrecTime, true, true);
if (needsCooldownPacket)
{
WorldPacket data;
@@ -10282,6 +10282,8 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite
SendDirectMessage(&data);
}
PacketCooldowns forcedCategoryCooldowns;
SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(cat);
if (i_scstore != sSpellsByCategoryStore.end())
{
@@ -10306,8 +10308,20 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite
}
_AddSpellCooldown(i_scset->second, cat, itemId, catrecTime, !spellInfo->IsCooldownStartedOnEvent() && catrec && rec && catrec != rec);
if (spellInfo->HasAttribute(SPELL_ATTR0_CU_FORCE_SEND_CATEGORY_COOLDOWNS))
{
forcedCategoryCooldowns[i_scset->second] = catrecTime;
}
}
}
if (!forcedCategoryCooldowns.empty())
{
WorldPacket data;
BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, forcedCategoryCooldowns);
SendDirectMessage(&data);
}
}
else
{

View File

@@ -201,7 +201,7 @@ enum SpellCustomAttributes
SPELL_ATTR0_CU_POSITIVE_EFF0 = 0x02000000,
SPELL_ATTR0_CU_POSITIVE_EFF1 = 0x04000000,
SPELL_ATTR0_CU_POSITIVE_EFF2 = 0x08000000,
// unused = 0x10000000,
SPELL_ATTR0_CU_FORCE_SEND_CATEGORY_COOLDOWNS = 0x10000000,
SPELL_ATTR0_CU_FORCE_AURA_SAVING = 0x20000800,
SPELL_ATTR0_CU_ENCOUNTER_REWARD = 0x40000000, // pussywizard

View File

@@ -3058,7 +3058,14 @@ void SpellMgr::LoadSpellCustomAttr()
case SPELLFAMILY_HUNTER:
// Aspects
if (spellInfo->GetCategory() == 47)
{
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NO_INITIAL_THREAT;
}
// Aimed Shot
if (spellInfo->SpellFamilyFlags[0] & 0x00020000)
{
spellInfo->AttributesCu |= SPELL_ATTR0_CU_FORCE_SEND_CATEGORY_COOLDOWNS;
}
break;
default:
break;
@@ -7581,6 +7588,14 @@ void SpellMgr::LoadDbcDataCorrections()
if (spellInfo->SpellIconID == 2721 && spellInfo->SpellFamilyFlags[0] & 0x2)
spellInfo->SpellFamilyFlags[0] |= 0x40;
break;
case SPELLFAMILY_HUNTER:
// Aimed Shot not affected by category cooldown modifiers
if (spellInfo->SpellFamilyFlags[0] & 0x00020000)
{
spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
spellInfo->RecoveryTime = 10 * IN_MILLISECONDS;
}
break;
}
// Recklessness/Shield Wall/Retaliation