From 0166f84a1b2bc339324de4138fb8b34d12aee9d9 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 16 Oct 2022 11:20:51 +0200 Subject: [PATCH] Core/Spells: replaced SPELLVALUE_AURA_DURATION implementation with master's SPELLVALUE_DURATION version --- src/server/game/Spells/Spell.cpp | 14 +++++++++----- src/server/game/Spells/Spell.h | 2 +- src/server/game/Spells/SpellDefines.h | 2 +- src/server/scripts/Spells/spell_generic.cpp | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2d20481c06..38b044a450 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -538,7 +538,6 @@ SpellValue::SpellValue(SpellInfo const* proto) MaxAffectedTargets = proto->MaxAffectedTargets; RadiusMod = 1.0f; AuraStackAmount = 1; - AuraDuration = 0; CriticalChance = 0.f; } @@ -3071,7 +3070,7 @@ void Spell::DoSpellEffectHit(Unit* unit, uint8 effIndex, TargetInfo& hitInfo) hitInfo.HitAura->SetDiminishGroup(hitInfo.DRGroup); - //if (!m_spellValue->Duration) + if (!m_spellValue->Duration.has_value()) { hitInfo.AuraDuration = caster->ModSpellDuration(hitInfo.AuraSpellInfo, unit, hitInfo.AuraDuration, hitInfo.Positive, hitInfo.HitAura->GetEffectMask()); if (hitInfo.AuraDuration > 0) @@ -3098,6 +3097,8 @@ void Spell::DoSpellEffectHit(Unit* unit, uint8 effIndex, TargetInfo& hitInfo) hitInfo.AuraDuration += hitInfo.HitAura->GetRolledOverDuration(); } } + else + hitInfo.AuraDuration = *m_spellValue->Duration; if (hitInfo.AuraDuration != hitInfo.HitAura->GetMaxDuration()) { @@ -3782,8 +3783,11 @@ void Spell::handle_immediate() if (m_spellInfo->IsChanneled()) { int32 duration = Aura::CalcMaxDuration(m_spellInfo, m_caster); - if (duration > 0) + if (duration > 0 || m_spellValue->Duration) { + if (m_spellValue->Duration) + duration = *m_spellValue->Duration; + m_channeledDuration = duration; SendChannelStart(duration); } @@ -8162,8 +8166,8 @@ 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); + case SPELLVALUE_DURATION: + m_spellValue->Duration = value; break; default: break; diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index a944e3bf4d..bd6ab3e044 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -241,8 +241,8 @@ struct SpellValue uint32 MaxAffectedTargets; float RadiusMod; uint8 AuraStackAmount; - int32 AuraDuration; float CriticalChance; + Optional Duration; }; enum SpellState diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 015feb0acc..851c783fa5 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -148,7 +148,7 @@ enum SpellValueMod : uint8 SPELLVALUE_RADIUS_MOD, SPELLVALUE_MAX_TARGETS, SPELLVALUE_AURA_STACK, - SPELLVALUE_AURA_DURATION + SPELLVALUE_DURATION }; enum SpellFacingFlags diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 5f027b1ebf..7806461f50 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5287,7 +5287,7 @@ class spell_gen_flask_of_battle : public SpellScript int32 durationBonus = sSpellMgr->AssertSpellInfo(chugALugSpellId)->Effects[EFFECT_0].CalcValue(); int32 duration = sSpellMgr->AssertSpellInfo(spellId)->GetMaxDuration(); AddPct(duration, durationBonus); - player->CastSpell(player, spellId, { SPELLVALUE_AURA_DURATION, duration }); + player->CastSpell(player, spellId, { SPELLVALUE_DURATION, duration }); } else player->CastSpell(player, spellId);