Core/AuraScript: Add DoCheckAreaTarget hook to allow explicit area aura target selection.
This commit is contained in:
@@ -1636,50 +1636,15 @@ bool Aura::CanBeAppliedOn(Unit *target)
|
||||
// not selfcasted single target auras mustn't be applied
|
||||
if (GetCasterGUID() != GetOwner()->GetGUID() && IsSingleTargetSpell(GetSpellProto()))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
else if (GetOwner() != target)
|
||||
else
|
||||
return CheckAreaTarget(target);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Aura::CheckAreaTarget(Unit *target)
|
||||
bool Aura::CheckAreaTarget(Unit* target)
|
||||
{
|
||||
// for owner check use Spell::CheckTarget
|
||||
ASSERT(GetOwner() != target);
|
||||
|
||||
// some special cases
|
||||
switch(GetId())
|
||||
{
|
||||
case 45828: // AV Marshal's HP/DMG auras
|
||||
case 45829:
|
||||
case 45830:
|
||||
case 45821:
|
||||
case 45822: // AV Warmaster's HP/DMG auras
|
||||
case 45823:
|
||||
case 45824:
|
||||
case 45826:
|
||||
switch(target->GetEntry())
|
||||
{
|
||||
// alliance
|
||||
case 14762: // Dun Baldar North Marshal
|
||||
case 14763: // Dun Baldar South Marshal
|
||||
case 14764: // Icewing Marshal
|
||||
case 14765: // Stonehearth Marshal
|
||||
case 11948: // Vandar Stormspike
|
||||
// horde
|
||||
case 14772: // East Frostwolf Warmaster
|
||||
case 14776: // Tower Point Warmaster
|
||||
case 14773: // Iceblood Warmaster
|
||||
case 14777: // West Frostwolf Warmaster
|
||||
case 11946: // Drek'thar
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
return CallScriptCheckAreaTargetHandlers(target);
|
||||
}
|
||||
|
||||
void Aura::_DeleteRemovedApplications()
|
||||
@@ -1709,6 +1674,20 @@ void Aura::LoadScripts()
|
||||
}
|
||||
}
|
||||
|
||||
bool Aura::CallScriptCheckAreaTargetHandlers(Unit* target)
|
||||
{
|
||||
for(std::list<AuraScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
|
||||
{
|
||||
(*scritr)->_PrepareScriptCall(AURA_SCRIPT_HOOK_CHECK_AREA_TARGET);
|
||||
std::list<AuraScript::CheckAreaTargetHandler>::iterator hookItrEnd = (*scritr)->DoCheckAreaTarget.end(), hookItr = (*scritr)->DoCheckAreaTarget.begin();
|
||||
for (; hookItr != hookItrEnd ; ++hookItr)
|
||||
if(!(*hookItr).Call(*scritr, target))
|
||||
return false;
|
||||
(*scritr)->_FinishScriptCall();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Aura::CallScriptEffectApplyHandlers(AuraEffect const * aurEff, AuraApplication const * aurApp, AuraEffectHandleModes mode)
|
||||
{
|
||||
bool preventDefault = false;
|
||||
|
||||
Reference in New Issue
Block a user