Core/Spells: Fixed autoattack timer being reset by almost every spell cast
This commit is contained in:
1 parent
ae5ad5f06c
commit
b31333615f
4 files changed
+7
-6
No files matched your search
@@ -61,7 +61,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC);
|
||||
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, bankSlots, restState, characterFlags, characterFlags2 "
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, bankSlots, restState, characterFlags, characterFlags2, "
|
||||
"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
"resettalents_time, talentTree, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, instance_mode_mask, "
|
||||
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, power4, power5, instance_id, talentGroupsCount, activeTalentGroup, "
|
||||
|
||||
@@ -8645,8 +8645,9 @@ void Unit::AtEnterCombat()
|
||||
if (Spell* spell = m_currentSpells[CURRENT_GENERIC_SPELL])
|
||||
if (spell->getState() == SPELL_STATE_PREPARING
|
||||
&& spell->m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL)
|
||||
&& spell->m_spellInfo->InterruptFlags.HasFlag(SpellInterruptFlags::Combat))
|
||||
InterruptNonMeleeSpells(false);
|
||||
&& spell->m_spellInfo->InterruptFlags.HasFlag(SpellInterruptFlags::Combat)
|
||||
&& !spell->m_spellInfo->HasAura(SPELL_AURA_MOUNTED)) // for some reason mounts are not interrupted by entering combat even with both interrupt flag and attribute
|
||||
InterruptSpell(CURRENT_GENERIC_SPELL, false, false);
|
||||
|
||||
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::EnteringCombat);
|
||||
ProcSkillsAndAuras(this, nullptr, PROC_FLAG_ENTER_COMBAT, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr);
|
||||
|
||||
@@ -7910,13 +7910,13 @@ bool Spell::IsChannelActive() const
|
||||
|
||||
bool Spell::IsAutoActionResetSpell() const
|
||||
{
|
||||
if (IsTriggered() || m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS))
|
||||
if (IsTriggered() || !m_spellInfo->InterruptFlags.HasFlag(SpellInterruptFlags::Combat) || m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS))
|
||||
return false;
|
||||
|
||||
if (!m_casttime && m_spellInfo->HasAttribute(SPELL_ATTR6_DOESNT_RESET_SWING_TIMER_IF_INSTANT))
|
||||
return false;
|
||||
|
||||
return m_casttime || m_spellInfo->IsRangedWeaponSpell();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Spell::IsPositive() const
|
||||
|
||||
@@ -50,7 +50,7 @@ enum class SpellInterruptFlags : uint32
|
||||
Movement = 0x00000001,
|
||||
DamagePushbackPlayerOnly = 0x00000002,
|
||||
Stun = 0x00000004, // useless, even spells without it get interrupted
|
||||
Combat = 0x00000008,
|
||||
Combat = 0x00000008, // used for both interrupting spell when entering combat and to reset auto attack timer
|
||||
DamageCancelsPlayerOnly = 0x00000010,
|
||||
MeleeCombat = 0x00000020 // NYI
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user