mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-14 01:29:07 +00:00
feat(Core/SAI): implemented a new SAI action type SMART_ACTION_DO_ACTION (#8375)
* feat(Core/SAI): implemented a new SAI action type SMART_ACTION_DO_ACTION This will give possibility to trigger certain actions on instance scripts or creatures/gobjects * yet we still love you "blank line" xD
This commit is contained in:
@@ -3232,6 +3232,54 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
delete targets;
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_DO_ACTION:
|
||||
{
|
||||
int32 const actionId = e.action.doAction.isNegative ? -e.action.doAction.actionId : e.action.doAction.actionId;
|
||||
if (!e.action.doAction.instanceTarget)
|
||||
{
|
||||
ObjectList* targets = GetTargets(e, unit);
|
||||
if (!targets)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
for (WorldObject* objTarget : *targets)
|
||||
{
|
||||
if (Creature const* unitTarget = objTarget->ToCreature())
|
||||
{
|
||||
if (unitTarget->IsAIEnabled)
|
||||
{
|
||||
unitTarget->AI()->DoAction(actionId);
|
||||
}
|
||||
}
|
||||
else if (GameObject const* gobjTarget = objTarget->ToGameObject())
|
||||
{
|
||||
gobjTarget->AI()->DoAction(actionId);
|
||||
}
|
||||
}
|
||||
|
||||
delete targets;
|
||||
}
|
||||
else
|
||||
{
|
||||
InstanceScript* instanceScript = nullptr;
|
||||
if (WorldObject* baseObj = GetBaseObject())
|
||||
{
|
||||
instanceScript = baseObj->GetInstanceScript();
|
||||
}
|
||||
// Action is triggered by AreaTrigger
|
||||
else if (trigger && IsPlayer(unit))
|
||||
{
|
||||
instanceScript = unit->GetInstanceScript();
|
||||
}
|
||||
|
||||
if (instanceScript)
|
||||
{
|
||||
instanceScript->DoAction(actionId);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user