aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp8
-rw-r--r--src/server/game/Entities/Unit/CharmInfo.cpp15
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp6
-rw-r--r--src/server/game/Spells/SpellInfo.cpp5
-rw-r--r--src/server/game/Spells/SpellInfo.h1
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;