diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/CharmInfo.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.h | 1 |
6 files changed, 28 insertions, 9 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index a73acd3b20c..d7c84660747 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1388,10 +1388,12 @@ bool Pet::addSpell(uint32 spellId, ActiveStates active /*= ACT_DECIDE*/, PetSpel if (active == ACT_DECIDE) // active was not used before, so we save it's autocast/passive state here { - if (spellInfo->IsAutocastable()) - newspell.active = ACT_DISABLED; - else + if (!spellInfo->IsAutocastable()) newspell.active = ACT_PASSIVE; + else if (spellInfo->IsAutocastEnabledByDefault()) + newspell.active = ACT_ENABLED; + else + newspell.active = ACT_DISABLED; } else newspell.active = active; diff --git a/src/server/game/Entities/Unit/CharmInfo.cpp b/src/server/game/Entities/Unit/CharmInfo.cpp index ed440785cc1..a9e01ed6c31 100644 --- a/src/server/game/Entities/Unit/CharmInfo.cpp +++ b/src/server/game/Entities/Unit/CharmInfo.cpp @@ -149,7 +149,7 @@ void CharmInfo::InitCharmCreateSpells() newstate = ACT_PASSIVE; else { - if (spellInfo->NeedsExplicitUnitTarget()) + if (spellInfo->IsAutocastEnabledByDefault() && spellInfo->NeedsExplicitUnitTarget()) { newstate = ACT_ENABLED; ToggleCreatureAutocast(spellInfo, true); @@ -188,7 +188,18 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new uint8 j = (preferredSlot + i) % MAX_UNIT_ACTION_BAR_INDEX; if (!PetActionBar[j].GetAction() && PetActionBar[j].IsActionBarForSpell()) { - SetActionBar(j, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); + newstate = [&] + { + if (newstate != ACT_DECIDE) + return newstate; + if (!spellInfo->IsAutocastable()) + return ACT_PASSIVE; + if (spellInfo->IsAutocastEnabledByDefault()) + return ACT_ENABLED; + return ACT_DISABLED; + }(); + + SetActionBar(j, spell_id, newstate); return true; } } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index e9f0c3d1f22..c3b77aef35f 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -776,7 +776,7 @@ enum SpellAttr9 : uint32 SPELL_ATTR9_IGNORE_DEFAULT_RATED_BATTLEGROUND_RESTRICTIONS = 0x00004000, // TITLE Ignore Default Rated Battleground Restrictions SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST = 0x00008000, // TITLE Do Not Display Power Cost (client only) SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET = 0x00010000, // TITLE Next modal spell requires same unit target DESCRIPTION Prevents automatically casting the spell from SpellClassOptions::ModalNextSpell after current spell if target was changed (client only) - SPELL_ATTR9_UNK17 = 0x00020000, // TITLE Unknown attribute 17@Attr9 + SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT = 0x00020000, // TITLE AutoCast Off By Default SPELL_ATTR9_UNK18 = 0x00040000, // TITLE Unknown attribute 18@Attr9 SPELL_ATTR9_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr9 SPELL_ATTR9_UNK20 = 0x00100000, // TITLE Unknown attribute 20@Attr9 diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index 528728b94d1..daa045813ad 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1452,7 +1452,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value) case SPELL_ATTR9_IGNORE_DEFAULT_RATED_BATTLEGROUND_RESTRICTIONS: return { "SPELL_ATTR9_IGNORE_DEFAULT_RATED_BATTLEGROUND_RESTRICTIONS", "Ignore Default Rated Battleground Restrictions", "" }; case SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST: return { "SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST", "Do Not Display Power Cost (client only)", "" }; case SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET: return { "SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET", "Next modal spell requires same unit target", "Prevents automatically casting the spell from SpellClassOptions::ModalNextSpell after current spell if target was changed (client only)" }; - case SPELL_ATTR9_UNK17: return { "SPELL_ATTR9_UNK17", "Unknown attribute 17@Attr9", "" }; + case SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT: return { "SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT", "AutoCast Off By Default", "" }; case SPELL_ATTR9_UNK18: return { "SPELL_ATTR9_UNK18", "Unknown attribute 18@Attr9", "" }; case SPELL_ATTR9_UNK19: return { "SPELL_ATTR9_UNK19", "Unknown attribute 19@Attr9", "" }; case SPELL_ATTR9_UNK20: return { "SPELL_ATTR9_UNK20", "Unknown attribute 20@Attr9", "" }; @@ -1496,7 +1496,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index) case 14: return SPELL_ATTR9_IGNORE_DEFAULT_RATED_BATTLEGROUND_RESTRICTIONS; case 15: return SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST; case 16: return SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET; - case 17: return SPELL_ATTR9_UNK17; + case 17: return SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT; case 18: return SPELL_ATTR9_UNK18; case 19: return SPELL_ATTR9_UNK19; case 20: return SPELL_ATTR9_UNK20; @@ -1537,7 +1537,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value) case SPELL_ATTR9_IGNORE_DEFAULT_RATED_BATTLEGROUND_RESTRICTIONS: return 14; case SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST: return 15; case SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET: return 16; - case SPELL_ATTR9_UNK17: return 17; + case SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT: return 17; case SPELL_ATTR9_UNK18: return 18; case SPELL_ATTR9_UNK19: return 19; case SPELL_ATTR9_UNK20: return 20; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 5d653dc5a35..ed44f582a2c 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1606,6 +1606,11 @@ bool SpellInfo::IsAutocastable() const return true; } +bool SpellInfo::IsAutocastEnabledByDefault() const +{ + return !HasAttribute(SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT); +} + bool SpellInfo::IsStackableWithRanks() const { if (IsPassive()) diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index dea9d265b8e..a1b758f28e2 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -485,6 +485,7 @@ class TC_GAME_API SpellInfo bool IsPassive() const; bool IsAutocastable() const; + bool IsAutocastEnabledByDefault() const; bool IsStackableWithRanks() const; bool IsPassiveStackableWithRanks() const; bool IsMultiSlotAura() const; |
