fix(core): DK ToT off-hand strikes and Titan Grip for classless

- Item: 2H weapon subclass/inventory masks for strike spells (ToT / dual 2H).
- Player: allow SPELL_EFFECT_TITAN_GRIP through skill validation; clear TG on
  talent/spec reset only for warriors.
- PlayerStorage: sync m_canTitanGrip from spellbook before inventory load.
- Spell: treat Thassarian off-hand strike spells as OFF_ATTACK when DBC omits
  SPELL_ATTR3_REQUIRES_OFF_HAND_WEAPON.
This commit is contained in:
Dawnforger
2026-05-07 23:40:40 -05:00
parent c09646fdf0
commit 22e79a4f32
4 changed files with 98 additions and 6 deletions
@@ -5525,6 +5525,21 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
// xinef: load mails before inventory, so problematic items can be added to already loaded mails
_LoadMail(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAILS), holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS));
// m_canTitanGrip is normally set when SPELL_EFFECT_TITAN_GRIP runs. After spellbook load, ensure the
// flag matches any known TG spell so 2H off-hand items validate before _LoadInventory (classless DK, etc.).
for (auto const& spellItr : m_spells)
{
if (!spellItr.second->Active || spellItr.second->State == PLAYERSPELL_REMOVED)
continue;
if (SpellInfo const* si = sSpellMgr->GetSpellInfo(spellItr.first))
if (si->HasEffect(SPELL_EFFECT_TITAN_GRIP))
{
SetCanTitanGrip(true);
UpdateTitansGrip();
break;
}
}
_LoadInventory(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INVENTORY), time_diff);
// update items with duration and realtime