Skip to content

Commit ec3363f

Browse files
author
Github Actions
committed
Merge 3.3.5-base_patch to 3.3.5-passive_anticheat
2 parents e441443 + fab8ca7 commit ec3363f

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
@@ -8105,23 +8105,37 @@ void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target,
81058105

81068106
bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck)
81078107
{
8108-
// Skip if there are not any script
8109-
if (m_loadedScripts.empty())
8108+
auto allEffectTargetScriptsAreShared = []<typename HookType>(HookList<HookType>& hooks, SpellInfo const* spellInfo, uint32 effIndex, uint32 effIndexToCheck)
8109+
{
8110+
for (HookType& hook : hooks)
8111+
{
8112+
if (!hook.IsEffectAffected(spellInfo, effIndex))
8113+
continue;
8114+
8115+
bool otherEffectHasSameTargetFunction = std::ranges::any_of(hooks, [&](HookType& other)
8116+
{
8117+
return other.IsEffectAffected(spellInfo, effIndexToCheck) && hook.HasSameTargetFunctionAs(other);
8118+
});
8119+
if (!otherEffectHasSameTargetFunction)
8120+
return false;
8121+
}
8122+
81108123
return true;
8124+
};
81118125

8112-
for (auto itr = m_loadedScripts.begin(); itr != m_loadedScripts.end(); ++itr)
8126+
for (SpellScript* script : m_loadedScripts)
81138127
{
8114-
auto targetSelectHookEnd = (*itr)->OnObjectTargetSelect.end(), targetSelectHookItr = (*itr)->OnObjectTargetSelect.begin();
8115-
for (; targetSelectHookItr != targetSelectHookEnd; ++targetSelectHookItr)
8116-
if (((*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) ||
8117-
(!(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)))
8118-
return false;
8128+
if (!allEffectTargetScriptsAreShared(script->OnObjectTargetSelect, m_spellInfo, effIndex, effIndexToCheck))
8129+
return false;
81198130

8120-
auto areaTargetSelectHookEnd = (*itr)->OnObjectAreaTargetSelect.end(), areaTargetSelectHookItr = (*itr)->OnObjectAreaTargetSelect.begin();
8121-
for (; areaTargetSelectHookItr != areaTargetSelectHookEnd; ++areaTargetSelectHookItr)
8122-
if (((*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) ||
8123-
(!(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)))
8124-
return false;
8131+
if (!allEffectTargetScriptsAreShared(script->OnObjectTargetSelect, m_spellInfo, effIndexToCheck, effIndex))
8132+
return false;
8133+
8134+
if (!allEffectTargetScriptsAreShared(script->OnObjectAreaTargetSelect, m_spellInfo, effIndex, effIndexToCheck))
8135+
return false;
8136+
8137+
if (!allEffectTargetScriptsAreShared(script->OnObjectAreaTargetSelect, m_spellInfo, effIndexToCheck, effIndex))
8138+
return false;
81258139
}
81268140
return true;
81278141
}

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)