Merge branch '4.3.4' of https://gitlab.com/trinitycore/TrinityCore_434 into ShatteredWorld
# Conflicts: # src/server/scripts/EasternKingdoms/Gilneas/chapter1.cpp # src/server/scripts/Kalimdor/LostCityOfTheTolvir/boss_lockmaw_and_augh.cpp # src/server/scripts/Kalimdor/LostCityOfTheTolvir/instance_lost_city_of_the_tolvir.cpp # src/server/scripts/Kalimdor/LostCityOfTheTolvir/lost_city_of_the_tolvir.h # src/server/scripts/Spells/spell_quest.cpp
This commit is contained in:
commit
3e4451cab7
39 files changed
+608
-158
No files matched your search
@@ -4481,17 +4481,6 @@ bool Unit::HasNegativeAuraWithInterruptFlag(uint32 flag, ObjectGuid guid) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Unit::HasNegativeAuraWithAttribute(uint32 flag, ObjectGuid guid) const
|
||||
{
|
||||
for (AuraApplicationMap::const_iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
|
||||
{
|
||||
Aura const* aura = iter->second->GetBase();
|
||||
if (!iter->second->IsPositive() && aura->GetSpellInfo()->Attributes & flag && (!guid || aura->GetCasterGUID() == guid))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Unit::HasAuraWithMechanic(uint32 mechanicMask) const
|
||||
{
|
||||
for (AuraApplicationMap::const_iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
|
||||
@@ -4509,6 +4498,26 @@ bool Unit::HasAuraWithMechanic(uint32 mechanicMask) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Unit::HasStrongerAuraWithDR(SpellInfo const* auraSpellInfo, Unit* caster, bool triggered) const
|
||||
{
|
||||
DiminishingGroup diminishGroup = auraSpellInfo->GetDiminishingReturnsGroupForSpell(triggered);
|
||||
DiminishingLevels level = GetDiminishing(diminishGroup);
|
||||
for (auto itr = m_appliedAuras.begin(); itr != m_appliedAuras.end(); ++itr)
|
||||
{
|
||||
SpellInfo const* spellInfo = itr->second->GetBase()->GetSpellInfo();
|
||||
if (spellInfo->GetDiminishingReturnsGroupForSpell(triggered) != diminishGroup)
|
||||
continue;
|
||||
|
||||
int32 existingDuration = itr->second->GetBase()->GetMaxDuration();
|
||||
int32 newDuration = auraSpellInfo->GetMaxDuration();
|
||||
ApplyDiminishingToDuration(auraSpellInfo, triggered, newDuration, caster, level);
|
||||
if (newDuration > 0 && newDuration < existingDuration)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
AuraEffect* Unit::IsScriptOverriden(SpellInfo const* spell, int32 script) const
|
||||
{
|
||||
AuraEffectList const& auras = GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
|
||||
@@ -9434,31 +9443,28 @@ void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Sp
|
||||
duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]);
|
||||
}
|
||||
|
||||
DiminishingLevels Unit::GetDiminishing(DiminishingGroup group)
|
||||
DiminishingLevels Unit::GetDiminishing(DiminishingGroup group) const
|
||||
{
|
||||
DiminishingReturn& diminish = m_Diminishing[group];
|
||||
DiminishingReturn const& diminish = m_Diminishing[group];
|
||||
if (!diminish.hitCount)
|
||||
return DIMINISHING_LEVEL_1;
|
||||
|
||||
// If last spell was cast more than 15 seconds ago - reset the count.
|
||||
// If last spell was cast more than 15 seconds ago - reset level
|
||||
if (!diminish.stack && GetMSTimeDiffToNow(diminish.hitTime) > 15000)
|
||||
{
|
||||
diminish.hitCount = DIMINISHING_LEVEL_1;
|
||||
return DIMINISHING_LEVEL_1;
|
||||
}
|
||||
|
||||
return DiminishingLevels(diminish.hitCount);
|
||||
}
|
||||
|
||||
void Unit::IncrDiminishing(SpellInfo const* auraSpellInfo, bool triggered)
|
||||
{
|
||||
DiminishingGroup const group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(triggered);
|
||||
DiminishingLevels const maxLevel = auraSpellInfo->GetDiminishingReturnsMaxLevel(triggered);
|
||||
DiminishingGroup group = auraSpellInfo->GetDiminishingReturnsGroupForSpell(triggered);
|
||||
uint32 currentLevel = GetDiminishing(group);
|
||||
uint32 const maxLevel = auraSpellInfo->GetDiminishingReturnsMaxLevel(triggered);
|
||||
|
||||
// Checking for existing in the table
|
||||
DiminishingReturn& diminish = m_Diminishing[group];
|
||||
if (static_cast<int32>(diminish.hitCount) < maxLevel)
|
||||
++diminish.hitCount;
|
||||
if (currentLevel < maxLevel)
|
||||
diminish.hitCount = currentLevel + 1;
|
||||
}
|
||||
|
||||
bool Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool triggered, int32& duration, Unit* caster, DiminishingLevels previousLevel) const
|
||||
@@ -9479,9 +9485,7 @@ bool Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool trigg
|
||||
Unit const* target = targetOwner ? targetOwner : this;
|
||||
Unit const* source = casterOwner ? casterOwner : caster;
|
||||
|
||||
if ((target->GetTypeId() == TYPEID_PLAYER
|
||||
|| target->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)
|
||||
&& source->GetTypeId() == TYPEID_PLAYER)
|
||||
if (target->IsAffectedByDiminishingReturns() && source->GetTypeId() == TYPEID_PLAYER)
|
||||
duration = limitDuration;
|
||||
}
|
||||
|
||||
@@ -9503,10 +9507,9 @@ bool Unit::ApplyDiminishingToDuration(SpellInfo const* auraSpellInfo, bool trigg
|
||||
}
|
||||
}
|
||||
// Some diminishings applies to mobs too (for example, Stun)
|
||||
else if ((auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_PLAYER
|
||||
&& ((targetOwner ? (targetOwner->GetTypeId() == TYPEID_PLAYER) : (GetTypeId() == TYPEID_PLAYER))
|
||||
|| (GetTypeId() == TYPEID_UNIT && ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)))
|
||||
|| auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_ALL)
|
||||
else if (auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_ALL ||
|
||||
(auraSpellInfo->GetDiminishingReturnsGroupType(triggered) == DRTYPE_PLAYER &&
|
||||
(targetOwner ? targetOwner->IsAffectedByDiminishingReturns() : IsAffectedByDiminishingReturns())))
|
||||
{
|
||||
DiminishingLevels diminish = previousLevel;
|
||||
switch (diminish)
|
||||
|
||||
Reference in new issue
Block a user