aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp2
-rw-r--r--src/server/game/Spells/SpellInfo.cpp3
-rw-r--r--src/server/shared/SharedDefines.h8
-rw-r--r--src/server/shared/enuminfo_SharedDefines.cpp24
4 files changed, 19 insertions, 18 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 808b291a46c..7b7673a16a5 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1038,7 +1038,7 @@ bool Aura::ModStackAmount(int32 num, AuraRemoveMode removeMode /*= AURA_REMOVE_B
return true;
}
- bool refresh = stackAmount >= GetStackAmount();
+ bool refresh = stackAmount >= GetStackAmount() && (m_spellInfo->StackAmount || !m_spellInfo->HasAttribute(SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST));
// Update stack amount
SetStackAmount(stackAmount);
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 26e2ef40a95..d3acdb93edb 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -3463,7 +3463,8 @@ bool _isPositiveEffectImpl(SpellInfo const* spellInfo, uint8 effIndex, std::unor
}
// Special case: effects which determine positivity of whole spell
- if (spellInfo->HasAttribute(SPELL_ATTR1_UNK11))
+ // Note: this check was written before the attribute name was discovered so it might require to be adjusted
+ if (spellInfo->HasAttribute(SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST))
{
// check for targets, there seems to be an assortment of dummy triggering spells that should be negative
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h
index 47d735a3b1e..66da2884e7f 100644
--- a/src/server/shared/SharedDefines.h
+++ b/src/server/shared/SharedDefines.h
@@ -450,7 +450,7 @@ enum SpellAttr1 : uint32
SPELL_ATTR1_CANT_TARGET_IN_COMBAT = 0x00000100, // TITLE Target cannot be in combat
SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // TITLE Starts auto-attack (client only) DESCRIPTION Caster will begin auto-attacking the target on cast
SPELL_ATTR1_NO_THREAT = 0x00000400, // TITLE Does not generate threat DESCRIPTION Also does not cause target to engage
- SPELL_ATTR1_UNK11 = 0x00000800, // TITLE Unknown attribute 11@Attr1 DESCRIPTION Aura?
+ SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST = 0x00000800, // TITLE Aura will not refresh its duration when recast
SPELL_ATTR1_IS_PICKPOCKET = 0x00001000, // TITLE Pickpocket (client only)
SPELL_ATTR1_FARSIGHT = 0x00002000, // TITLE Farsight aura (client only)
SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // TITLE Track target while channeling DESCRIPTION While channeling, adjust facing to face target
@@ -571,7 +571,7 @@ enum SpellAttr4 : uint32
SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // TITLE Chain area targets DESCRIPTION [NYI] Hits area targets over time instead of all at once
SPELL_ATTR4_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr4
SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // TITLE Allow self-cast to override stronger aura (client only)
- SPELL_ATTR4_UNK21 = 0x00200000, // TITLE Keep when entering arena
+ SPELL_ATTR4_DONT_REMOVE_IN_ARENA = 0x00200000, // TITLE Keep when entering arena
SPELL_ATTR4_UNK22 = 0x00400000, // TITLE Unknown attribute 22@Attr4
SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS = 0x00800000, // TITLE Cannot trigger item spells
SPELL_ATTR4_UNK24 = 0x01000000, // TITLE Unknown attribute 24@Attr4 DESCRIPTION Shoot-type spell?
@@ -595,13 +595,13 @@ enum SpellAttr5 : uint32
SPELL_ATTR5_SINGLE_TARGET_SPELL = 0x00000020, // TITLE Single-target aura DESCRIPTION Remove previous application to another unit if applied
SPELL_ATTR5_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr5
SPELL_ATTR5_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr5
- SPELL_ATTR5_UNK8 = 0x00000100, // TITLE Unknown attribute 8@Attr5
+ SPELL_ATTR5_CANT_TARGET_PLAYER_CONTROLLED = 0x00000100, // TITLE Cannot target player controlled units but can target players
SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // TITLE Immediately do periodic tick on apply
SPELL_ATTR5_HIDE_DURATION = 0x00000400, // TITLE Do not send aura duration to client
SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET = 0x00000800, // TITLE Auto-target target of target (client only)
SPELL_ATTR5_UNK12 = 0x00001000, // TITLE Unknown attribute 12@Attr5 DESCRIPTION Cleave related?
SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // TITLE Duration scales with Haste Rating
- SPELL_ATTR5_UNK14 = 0x00004000, // TITLE Unknown attribute 14@Attr5
+ SPELL_ATTR5_NOT_USABLE_WHILE_CHARMED = 0x00004000, // TITLE Charmed units cannot cast this spell
SPELL_ATTR5_UNK15 = 0x00008000, // TITLE Unknown attribute 15@Attr5 DESCRIPTION Related to multi-target spells?
SPELL_ATTR5_UNK16 = 0x00010000, // TITLE Unknown attribute 16@Attr5
SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // TITLE Usable while feared
diff --git a/src/server/shared/enuminfo_SharedDefines.cpp b/src/server/shared/enuminfo_SharedDefines.cpp
index ad71f09b354..6495f6ae3af 100644
--- a/src/server/shared/enuminfo_SharedDefines.cpp
+++ b/src/server/shared/enuminfo_SharedDefines.cpp
@@ -408,7 +408,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr1>::ToString(SpellAttr1 value)
case SPELL_ATTR1_CANT_TARGET_IN_COMBAT: return { "SPELL_ATTR1_CANT_TARGET_IN_COMBAT", "Target cannot be in combat", "" };
case SPELL_ATTR1_MELEE_COMBAT_START: return { "SPELL_ATTR1_MELEE_COMBAT_START", "Starts auto-attack (client only)", "Caster will begin auto-attacking the target on cast" };
case SPELL_ATTR1_NO_THREAT: return { "SPELL_ATTR1_NO_THREAT", "Does not generate threat", "Also does not cause target to engage" };
- case SPELL_ATTR1_UNK11: return { "SPELL_ATTR1_UNK11", "Unknown attribute 11@Attr1", "Aura?" };
+ case SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST: return { "SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST", "Aura will not refresh its duration when recast", "" };
case SPELL_ATTR1_IS_PICKPOCKET: return { "SPELL_ATTR1_IS_PICKPOCKET", "Pickpocket (client only)", "" };
case SPELL_ATTR1_FARSIGHT: return { "SPELL_ATTR1_FARSIGHT", "Farsight aura (client only)", "" };
case SPELL_ATTR1_CHANNEL_TRACK_TARGET: return { "SPELL_ATTR1_CHANNEL_TRACK_TARGET", "Track target while channeling", "While channeling, adjust facing to face target" };
@@ -452,7 +452,7 @@ TC_API_EXPORT SpellAttr1 EnumUtils<SpellAttr1>::FromIndex(size_t index)
case 8: return SPELL_ATTR1_CANT_TARGET_IN_COMBAT;
case 9: return SPELL_ATTR1_MELEE_COMBAT_START;
case 10: return SPELL_ATTR1_NO_THREAT;
- case 11: return SPELL_ATTR1_UNK11;
+ case 11: return SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST;
case 12: return SPELL_ATTR1_IS_PICKPOCKET;
case 13: return SPELL_ATTR1_FARSIGHT;
case 14: return SPELL_ATTR1_CHANNEL_TRACK_TARGET;
@@ -493,7 +493,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr1>::ToIndex(SpellAttr1 value)
case SPELL_ATTR1_CANT_TARGET_IN_COMBAT: return 8;
case SPELL_ATTR1_MELEE_COMBAT_START: return 9;
case SPELL_ATTR1_NO_THREAT: return 10;
- case SPELL_ATTR1_UNK11: return 11;
+ case SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST: return 11;
case SPELL_ATTR1_IS_PICKPOCKET: return 12;
case SPELL_ATTR1_FARSIGHT: return 13;
case SPELL_ATTR1_CHANNEL_TRACK_TARGET: return 14;
@@ -805,7 +805,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr4>::ToString(SpellAttr4 value)
case SPELL_ATTR4_AREA_TARGET_CHAIN: return { "SPELL_ATTR4_AREA_TARGET_CHAIN", "Chain area targets", "[NYI] Hits area targets over time instead of all at once" };
case SPELL_ATTR4_UNK19: return { "SPELL_ATTR4_UNK19", "Unknown attribute 19@Attr4", "" };
case SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER: return { "SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER", "Allow self-cast to override stronger aura (client only)", "" };
- case SPELL_ATTR4_UNK21: return { "SPELL_ATTR4_UNK21", "Keep when entering arena", "" };
+ case SPELL_ATTR4_DONT_REMOVE_IN_ARENA: return { "SPELL_ATTR4_DONT_REMOVE_IN_ARENA", "Keep when entering arena", "" };
case SPELL_ATTR4_UNK22: return { "SPELL_ATTR4_UNK22", "Unknown attribute 22@Attr4", "" };
case SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS: return { "SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS", "Cannot trigger item spells", "" };
case SPELL_ATTR4_UNK24: return { "SPELL_ATTR4_UNK24", "Unknown attribute 24@Attr4", "Shoot-type spell?" };
@@ -849,7 +849,7 @@ TC_API_EXPORT SpellAttr4 EnumUtils<SpellAttr4>::FromIndex(size_t index)
case 18: return SPELL_ATTR4_AREA_TARGET_CHAIN;
case 19: return SPELL_ATTR4_UNK19;
case 20: return SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER;
- case 21: return SPELL_ATTR4_UNK21;
+ case 21: return SPELL_ATTR4_DONT_REMOVE_IN_ARENA;
case 22: return SPELL_ATTR4_UNK22;
case 23: return SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS;
case 24: return SPELL_ATTR4_UNK24;
@@ -890,7 +890,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr4>::ToIndex(SpellAttr4 value)
case SPELL_ATTR4_AREA_TARGET_CHAIN: return 18;
case SPELL_ATTR4_UNK19: return 19;
case SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER: return 20;
- case SPELL_ATTR4_UNK21: return 21;
+ case SPELL_ATTR4_DONT_REMOVE_IN_ARENA: return 21;
case SPELL_ATTR4_UNK22: return 22;
case SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS: return 23;
case SPELL_ATTR4_UNK24: return 24;
@@ -921,13 +921,13 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr5>::ToString(SpellAttr5 value)
case SPELL_ATTR5_SINGLE_TARGET_SPELL: return { "SPELL_ATTR5_SINGLE_TARGET_SPELL", "Single-target aura", "Remove previous application to another unit if applied" };
case SPELL_ATTR5_UNK6: return { "SPELL_ATTR5_UNK6", "Unknown attribute 6@Attr5", "" };
case SPELL_ATTR5_UNK7: return { "SPELL_ATTR5_UNK7", "Unknown attribute 7@Attr5", "" };
- case SPELL_ATTR5_UNK8: return { "SPELL_ATTR5_UNK8", "Unknown attribute 8@Attr5", "" };
+ case SPELL_ATTR5_CANT_TARGET_PLAYER_CONTROLLED: return { "SPELL_ATTR5_CANT_TARGET_PLAYER_CONTROLLED", "Cannot target player controlled units but can target players", "" };
case SPELL_ATTR5_START_PERIODIC_AT_APPLY: return { "SPELL_ATTR5_START_PERIODIC_AT_APPLY", "Immediately do periodic tick on apply", "" };
case SPELL_ATTR5_HIDE_DURATION: return { "SPELL_ATTR5_HIDE_DURATION", "Do not send aura duration to client", "" };
case SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET: return { "SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET", "Auto-target target of target (client only)", "" };
case SPELL_ATTR5_UNK12: return { "SPELL_ATTR5_UNK12", "Unknown attribute 12@Attr5", "Cleave related?" };
case SPELL_ATTR5_HASTE_AFFECT_DURATION: return { "SPELL_ATTR5_HASTE_AFFECT_DURATION", "Duration scales with Haste Rating", "" };
- case SPELL_ATTR5_UNK14: return { "SPELL_ATTR5_UNK14", "Unknown attribute 14@Attr5", "" };
+ case SPELL_ATTR5_NOT_USABLE_WHILE_CHARMED: return { "SPELL_ATTR5_NOT_USABLE_WHILE_CHARMED", "Charmed units cannot cast this spell", "" };
case SPELL_ATTR5_UNK15: return { "SPELL_ATTR5_UNK15", "Unknown attribute 15@Attr5", "Related to multi-target spells?" };
case SPELL_ATTR5_UNK16: return { "SPELL_ATTR5_UNK16", "Unknown attribute 16@Attr5", "" };
case SPELL_ATTR5_USABLE_WHILE_FEARED: return { "SPELL_ATTR5_USABLE_WHILE_FEARED", "Usable while feared", "" };
@@ -965,13 +965,13 @@ TC_API_EXPORT SpellAttr5 EnumUtils<SpellAttr5>::FromIndex(size_t index)
case 5: return SPELL_ATTR5_SINGLE_TARGET_SPELL;
case 6: return SPELL_ATTR5_UNK6;
case 7: return SPELL_ATTR5_UNK7;
- case 8: return SPELL_ATTR5_UNK8;
+ case 8: return SPELL_ATTR5_CANT_TARGET_PLAYER_CONTROLLED;
case 9: return SPELL_ATTR5_START_PERIODIC_AT_APPLY;
case 10: return SPELL_ATTR5_HIDE_DURATION;
case 11: return SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET;
case 12: return SPELL_ATTR5_UNK12;
case 13: return SPELL_ATTR5_HASTE_AFFECT_DURATION;
- case 14: return SPELL_ATTR5_UNK14;
+ case 14: return SPELL_ATTR5_NOT_USABLE_WHILE_CHARMED;
case 15: return SPELL_ATTR5_UNK15;
case 16: return SPELL_ATTR5_UNK16;
case 17: return SPELL_ATTR5_USABLE_WHILE_FEARED;
@@ -1006,13 +1006,13 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr5>::ToIndex(SpellAttr5 value)
case SPELL_ATTR5_SINGLE_TARGET_SPELL: return 5;
case SPELL_ATTR5_UNK6: return 6;
case SPELL_ATTR5_UNK7: return 7;
- case SPELL_ATTR5_UNK8: return 8;
+ case SPELL_ATTR5_CANT_TARGET_PLAYER_CONTROLLED: return 8;
case SPELL_ATTR5_START_PERIODIC_AT_APPLY: return 9;
case SPELL_ATTR5_HIDE_DURATION: return 10;
case SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET: return 11;
case SPELL_ATTR5_UNK12: return 12;
case SPELL_ATTR5_HASTE_AFFECT_DURATION: return 13;
- case SPELL_ATTR5_UNK14: return 14;
+ case SPELL_ATTR5_NOT_USABLE_WHILE_CHARMED: return 14;
case SPELL_ATTR5_UNK15: return 15;
case SPELL_ATTR5_UNK16: return 16;
case SPELL_ATTR5_USABLE_WHILE_FEARED: return 17;