diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 3 | ||||
-rw-r--r-- | src/server/shared/SharedDefines.h | 8 | ||||
-rw-r--r-- | src/server/shared/enuminfo_SharedDefines.cpp | 24 |
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; |