diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 37b1ba7a3d..6f43be6e1f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -125,7 +125,8 @@ enum SpellValueMod : uint8 SPELLVALUE_BASE_POINT2, SPELLVALUE_RADIUS_MOD, SPELLVALUE_MAX_TARGETS, - SPELLVALUE_AURA_STACK + SPELLVALUE_AURA_STACK, + SPELLVALUE_AURA_DURATION }; class CustomSpellValues diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d22cc7ceca..f29419cfcf 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -520,6 +520,7 @@ SpellValue::SpellValue(SpellInfo const* proto) MaxAffectedTargets = proto->MaxAffectedTargets; RadiusMod = 1.0f; AuraStackAmount = 1; + AuraDuration = 0; } class TC_GAME_API SpellEvent : public BasicEvent @@ -2857,6 +2858,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA } int32 duration = m_spellAura->GetMaxDuration(); + if (m_spellValue->AuraDuration && m_spellValue->AuraDuration != duration) + duration = m_spellValue->AuraDuration; // unit is immune to aura if it was diminished to 0 duration if (!positive && !unit->ApplyDiminishingToDuration(aurSpellInfo, triggered, duration, m_originalCaster, diminishLevel)) @@ -7802,6 +7805,11 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value) case SPELLVALUE_AURA_STACK: m_spellValue->AuraStackAmount = uint8(value); break; + case SPELLVALUE_AURA_DURATION: + m_spellValue->AuraDuration = int32(value); + break; + default: + break; } } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 421cefb8b9..5e1917651d 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -233,6 +233,7 @@ struct SpellValue uint32 MaxAffectedTargets; float RadiusMod; uint8 AuraStackAmount; + int32 AuraDuration; }; enum SpellState