Skip to content

Commit 2be2955

Browse files
author
Github Actions
committed
Merge 3.3.5 to 3.3.5-nemesis_anticheat
2 parents 502611f + b5ebf02 commit 2be2955

File tree

3 files changed

+37
-13
lines changed

3 files changed

+37
-13
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Update Teleport to Violet Stand
2+
UPDATE `spell_target_position` SET `PositionX`=5724.62, `PositionY`=1013.17, `Orientation`=0.216440007090568542, `VerifiedBuild`=56313 WHERE `ID`=42953;

src/server/game/Spells/Spell.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8099,23 +8099,37 @@ void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target,
80998099

81008100
bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck)
81018101
{
8102-
// Skip if there are not any script
8103-
if (m_loadedScripts.empty())
8102+
auto allEffectTargetScriptsAreShared = []<typename HookType>(HookList<HookType>& hooks, SpellInfo const* spellInfo, uint32 effIndex, uint32 effIndexToCheck)
8103+
{
8104+
for (HookType& hook : hooks)
8105+
{
8106+
if (!hook.IsEffectAffected(spellInfo, effIndex))
8107+
continue;
8108+
8109+
bool otherEffectHasSameTargetFunction = std::ranges::any_of(hooks, [&](HookType& other)
8110+
{
8111+
return other.IsEffectAffected(spellInfo, effIndexToCheck) && hook.HasSameTargetFunctionAs(other);
8112+
});
8113+
if (!otherEffectHasSameTargetFunction)
8114+
return false;
8115+
}
8116+
81048117
return true;
8118+
};
81058119

8106-
for (auto itr = m_loadedScripts.begin(); itr != m_loadedScripts.end(); ++itr)
8120+
for (SpellScript* script : m_loadedScripts)
81078121
{
8108-
auto targetSelectHookEnd = (*itr)->OnObjectTargetSelect.end(), targetSelectHookItr = (*itr)->OnObjectTargetSelect.begin();
8109-
for (; targetSelectHookItr != targetSelectHookEnd; ++targetSelectHookItr)
8110-
if (((*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) ||
8111-
(!(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)))
8112-
return false;
8122+
if (!allEffectTargetScriptsAreShared(script->OnObjectTargetSelect, m_spellInfo, effIndex, effIndexToCheck))
8123+
return false;
81138124

8114-
auto areaTargetSelectHookEnd = (*itr)->OnObjectAreaTargetSelect.end(), areaTargetSelectHookItr = (*itr)->OnObjectAreaTargetSelect.begin();
8115-
for (; areaTargetSelectHookItr != areaTargetSelectHookEnd; ++areaTargetSelectHookItr)
8116-
if (((*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) ||
8117-
(!(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)))
8118-
return false;
8125+
if (!allEffectTargetScriptsAreShared(script->OnObjectTargetSelect, m_spellInfo, effIndexToCheck, effIndex))
8126+
return false;
8127+
8128+
if (!allEffectTargetScriptsAreShared(script->OnObjectAreaTargetSelect, m_spellInfo, effIndex, effIndexToCheck))
8129+
return false;
8130+
8131+
if (!allEffectTargetScriptsAreShared(script->OnObjectAreaTargetSelect, m_spellInfo, effIndexToCheck, effIndex))
8132+
return false;
81198133
}
81208134
return true;
81218135
}

src/server/game/Spells/SpellScript.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,10 @@ class TC_GAME_API SpellScript : public _SpellScript
281281
public:
282282
ObjectAreaTargetSelectHandler(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType);
283283
void Call(SpellScript* spellScript, std::list<WorldObject*>& targets);
284+
bool HasSameTargetFunctionAs(ObjectAreaTargetSelectHandler const& other) const
285+
{
286+
return pObjectAreaTargetSelectHandlerScript == other.pObjectAreaTargetSelectHandlerScript;
287+
}
284288
private:
285289
SpellObjectAreaTargetSelectFnType pObjectAreaTargetSelectHandlerScript;
286290
};
@@ -290,6 +294,10 @@ class TC_GAME_API SpellScript : public _SpellScript
290294
public:
291295
ObjectTargetSelectHandler(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType);
292296
void Call(SpellScript* spellScript, WorldObject*& target);
297+
bool HasSameTargetFunctionAs(ObjectTargetSelectHandler const& other) const
298+
{
299+
return pObjectTargetSelectHandlerScript == other.pObjectTargetSelectHandlerScript;
300+
}
293301
private:
294302
SpellObjectTargetSelectFnType pObjectTargetSelectHandlerScript;
295303
};

0 commit comments

Comments
 (0)