diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 4 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 38 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 11 |
5 files changed, 37 insertions, 45 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 62beb6dedef..a1878130e8c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9004,10 +9004,10 @@ DiminishingLevels Unit::GetDiminishing(DiminishingGroup group) return DiminishingLevels(diminish.hitCount); } -void Unit::IncrDiminishing(SpellInfo const* auraSpellInfo, bool triggered) +void Unit::IncrDiminishing(SpellInfo const* auraSpellInfo) { - DiminishingGroup const group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(triggered); - DiminishingLevels const maxLevel = auraSpellInfo->GetDiminishingReturnsMaxLevel(triggered); + DiminishingGroup const group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(); + DiminishingLevels const maxLevel = auraSpellInfo->GetDiminishingReturnsMaxLevel(); // Checking for existing in the table DiminishingReturn& diminish = m_Diminishing[group]; @@ -9015,13 +9015,13 @@ void Unit::IncrDiminishing(SpellInfo const* auraSpellInfo, bool triggered) ++diminish.hitCount; } -float Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool triggered, int32& duration, Unit* caster, DiminishingLevels previousLevel) +float Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, int32& duration, Unit* caster, DiminishingLevels previousLevel) { - DiminishingGroup const group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(triggered); + DiminishingGroup const group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(); if (duration == -1 || group == DIMINISHING_NONE) return 1.0f; - int32 const limitDuration = auraSpellInfo->GetDiminishingReturnsLimitDuration(triggered); + int32 const limitDuration = auraSpellInfo->GetDiminishingReturnsLimitDuration(); // test pet/charm masters instead pets/charmeds Unit const* targetOwner = GetCharmerOrOwner(); @@ -9061,9 +9061,9 @@ float Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool trig } case DIMINISHING_AOE_KNOCKBACK: { - if ((auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_PLAYER && (((targetOwner ? targetOwner : this)->ToPlayer()) + if ((auraSpellInfo->GetDiminishingReturnsGroupType() == DRTYPE_PLAYER && (((targetOwner ? targetOwner : this)->ToPlayer()) || (ToCreature() && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)))) - || auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_ALL) + || auraSpellInfo->GetDiminishingReturnsGroupType() == DRTYPE_ALL) { DiminishingLevels diminish = previousLevel; switch (diminish) @@ -9077,9 +9077,9 @@ float Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool trig } default: { - if ((auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_PLAYER && (((targetOwner ? targetOwner : this)->ToPlayer()) + if ((auraSpellInfo->GetDiminishingReturnsGroupType() == DRTYPE_PLAYER && (((targetOwner ? targetOwner : this)->ToPlayer()) || (ToCreature() && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)))) - || auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_ALL) + || auraSpellInfo->GetDiminishingReturnsGroupType() == DRTYPE_ALL) { DiminishingLevels diminish = previousLevel; switch (diminish) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 84e769c3e3d..72e9a35c626 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -985,8 +985,8 @@ class TC_GAME_API Unit : public WorldObject void SendCombatLogMessage(WorldPackets::CombatLog::CombatLogServerPacket* combatLog) const; DiminishingLevels GetDiminishing(DiminishingGroup group); - void IncrDiminishing(SpellInfo const* auraSpellInfo, bool triggered); - float ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool triggered, int32& duration, Unit* caster, DiminishingLevels previousLevel); + void IncrDiminishing(SpellInfo const* auraSpellInfo); + float ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, int32& duration, Unit* caster, DiminishingLevels previousLevel); void ApplyDiminishingAura(DiminishingGroup group, bool apply); void ClearDiminishings(); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index bc19e1cc51d..92faf274ee5 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2633,19 +2633,18 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA aura_effmask |= 1 << effect->EffectIndex; // Get Data Needed for Diminishing Returns, some effects may have multiple auras, so this must be done on spell hit, not aura add - bool const triggered = m_triggeredByAuraSpell != nullptr; - DiminishingGroup const diminishGroup = m_spellInfo->GetDiminishingReturnsGroupForSpell(triggered); + DiminishingGroup const diminishGroup = m_spellInfo->GetDiminishingReturnsGroupForSpell(); DiminishingLevels diminishLevel = DIMINISHING_LEVEL_1; if (diminishGroup && aura_effmask) { diminishLevel = unit->GetDiminishing(diminishGroup); - DiminishingReturnsType type = m_spellInfo->GetDiminishingReturnsGroupType(triggered); + DiminishingReturnsType type = m_spellInfo->GetDiminishingReturnsGroupType(); // Increase Diminishing on unit, current informations for actually casts will use values above if ((type == DRTYPE_PLAYER && (unit->GetCharmerOrOwnerPlayerOrPlayerItself() || (unit->GetTypeId() == TYPEID_UNIT && unit->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH))) || type == DRTYPE_ALL) - unit->IncrDiminishing(m_spellInfo, triggered); + unit->IncrDiminishing(m_spellInfo); } if (aura_effmask) @@ -2692,7 +2691,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA // Now Reduce spell duration using data received at spell hit int32 duration = m_spellAura->GetMaxDuration(); - float diminishMod = unit->ApplyDiminishingToDuration(aurSpellInfo, triggered, duration, m_originalCaster, diminishLevel); + float diminishMod = unit->ApplyDiminishingToDuration(aurSpellInfo, duration, m_originalCaster, diminishLevel); // unit is immune to aura if it was diminished to 0 duration if (diminishMod == 0.0f) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 1ad9ee5fd19..b71484017b7 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2469,7 +2469,7 @@ void SpellInfo::_LoadSpellSpecific() void SpellInfo::_LoadSpellDiminishInfo() { - auto diminishingGroupCompute = [this](bool triggered) -> DiminishingGroup + auto diminishingGroupCompute = [this]() -> DiminishingGroup { if (IsPositive()) return DIMINISHING_NONE; @@ -2812,7 +2812,7 @@ void SpellInfo::_LoadSpellDiminishInfo() } }; - auto diminishingLimitDurationCompute = [this](DiminishingGroup group) -> int32 + auto diminishingLimitDurationCompute = [this]() -> int32 { // Explicit diminishing duration switch (SpellFamilyName) @@ -2848,39 +2848,33 @@ void SpellInfo::_LoadSpellDiminishInfo() return 8 * IN_MILLISECONDS; }; - SpellDiminishInfo triggeredInfo, normalInfo; - triggeredInfo.DiminishGroup = diminishingGroupCompute(true); - triggeredInfo.DiminishReturnType = diminishingTypeCompute(triggeredInfo.DiminishGroup); - triggeredInfo.DiminishMaxLevel = diminishingMaxLevelCompute(triggeredInfo.DiminishGroup); - triggeredInfo.DiminishDurationLimit = diminishingLimitDurationCompute(triggeredInfo.DiminishGroup); + SpellDiminishInfo diminishInfo; + diminishInfo.DiminishGroup = diminishingGroupCompute(); + diminishInfo.DiminishReturnType = diminishingTypeCompute(diminishInfo.DiminishGroup); + diminishInfo.DiminishMaxLevel = diminishingMaxLevelCompute(diminishInfo.DiminishGroup); + diminishInfo.DiminishDurationLimit = diminishingLimitDurationCompute(); - normalInfo.DiminishGroup = diminishingGroupCompute(false); - normalInfo.DiminishReturnType = diminishingTypeCompute(normalInfo.DiminishGroup); - normalInfo.DiminishMaxLevel = diminishingMaxLevelCompute(normalInfo.DiminishGroup); - normalInfo.DiminishDurationLimit = diminishingLimitDurationCompute(normalInfo.DiminishGroup); - - _diminishInfoTriggered = triggeredInfo; - _diminishInfoNonTriggered = normalInfo; + _diminishInfo = diminishInfo; } -DiminishingGroup SpellInfo::GetDiminishingReturnsGroupForSpell(bool triggered) const +DiminishingGroup SpellInfo::GetDiminishingReturnsGroupForSpell() const { - return triggered ? _diminishInfoTriggered.DiminishGroup : _diminishInfoNonTriggered.DiminishGroup; + return _diminishInfo.DiminishGroup; } -DiminishingReturnsType SpellInfo::GetDiminishingReturnsGroupType(bool triggered) const +DiminishingReturnsType SpellInfo::GetDiminishingReturnsGroupType() const { - return triggered ? _diminishInfoTriggered.DiminishReturnType : _diminishInfoNonTriggered.DiminishReturnType; + return _diminishInfo.DiminishReturnType; } -DiminishingLevels SpellInfo::GetDiminishingReturnsMaxLevel(bool triggered) const +DiminishingLevels SpellInfo::GetDiminishingReturnsMaxLevel() const { - return triggered ? _diminishInfoTriggered.DiminishMaxLevel : _diminishInfoNonTriggered.DiminishMaxLevel; + return _diminishInfo.DiminishMaxLevel; } -int32 SpellInfo::GetDiminishingReturnsLimitDuration(bool triggered) const +int32 SpellInfo::GetDiminishingReturnsLimitDuration() const { - return triggered ? _diminishInfoTriggered.DiminishDurationLimit : _diminishInfoNonTriggered.DiminishDurationLimit; + return _diminishInfo.DiminishDurationLimit; } float SpellInfo::GetMinRange(bool positive) const diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 638a137fc32..27028a6d5b6 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -556,10 +556,10 @@ class TC_GAME_API SpellInfo SpellEffectInfo const* GetEffect(uint32 index) const { return GetEffect(DIFFICULTY_NONE, index); } // spell diminishing returns - DiminishingGroup GetDiminishingReturnsGroupForSpell(bool triggered) const; - DiminishingReturnsType GetDiminishingReturnsGroupType(bool triggered) const; - DiminishingLevels GetDiminishingReturnsMaxLevel(bool triggered) const; - int32 GetDiminishingReturnsLimitDuration(bool triggered) const; + DiminishingGroup GetDiminishingReturnsGroupForSpell() const; + DiminishingReturnsType GetDiminishingReturnsGroupType() const; + DiminishingLevels GetDiminishingReturnsMaxLevel() const; + int32 GetDiminishingReturnsLimitDuration() const; private: // loading helpers @@ -582,8 +582,7 @@ class TC_GAME_API SpellInfo SpellSpecificType _spellSpecific; AuraStateType _auraState; - SpellDiminishInfo _diminishInfoNonTriggered; - SpellDiminishInfo _diminishInfoTriggered; + SpellDiminishInfo _diminishInfo; }; #endif // _SPELLINFO_H |