mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/SAI: Implemented new event type SMART_EVENT_AREATRIGGER_EXIT (88) (#30367)
This commit is contained in:
1
sql/updates/world/master/2024_10_22_03_world.sql
Normal file
1
sql/updates/world/master/2024_10_22_03_world.sql
Normal file
@@ -0,0 +1 @@
|
||||
UPDATE `smart_scripts` SET `event_param1`=0, `event_param2`=0, `event_param3`=0 WHERE `event_type`=46;
|
||||
@@ -1114,13 +1114,19 @@ class SmartTrigger : public AreaTriggerScript
|
||||
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override
|
||||
{
|
||||
if (!player->IsAlive())
|
||||
return false;
|
||||
|
||||
TC_LOG_DEBUG("scripts.ai", "AreaTrigger {} is using SmartTrigger script", trigger->ID);
|
||||
TC_LOG_DEBUG("scripts.ai", "AreaTrigger {} enter is using SmartTrigger script", trigger->ID);
|
||||
SmartScript script;
|
||||
script.OnInitialize(player, trigger);
|
||||
script.ProcessEventsFor(SMART_EVENT_AREATRIGGER_ONTRIGGER, player, trigger->ID);
|
||||
script.ProcessEventsFor(SMART_EVENT_AREATRIGGER_ENTER, player);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnExit(Player* player, AreaTriggerEntry const* trigger) override
|
||||
{
|
||||
TC_LOG_DEBUG("scripts.ai", "AreaTrigger {} exit is using SmartTrigger script", trigger->ID);
|
||||
SmartScript script;
|
||||
script.OnInitialize(player, trigger);
|
||||
script.ProcessEventsFor(SMART_EVENT_AREATRIGGER_EXIT, player);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -1137,7 +1143,12 @@ void SmartAreaTriggerAI::OnUpdate(uint32 diff)
|
||||
|
||||
void SmartAreaTriggerAI::OnUnitEnter(Unit* unit)
|
||||
{
|
||||
GetScript()->ProcessEventsFor(SMART_EVENT_AREATRIGGER_ONTRIGGER, unit);
|
||||
GetScript()->ProcessEventsFor(SMART_EVENT_AREATRIGGER_ENTER, unit);
|
||||
}
|
||||
|
||||
void SmartAreaTriggerAI::OnUnitExit(Unit* unit)
|
||||
{
|
||||
GetScript()->ProcessEventsFor(SMART_EVENT_AREATRIGGER_EXIT, unit);
|
||||
}
|
||||
|
||||
void SmartAreaTriggerAI::SetTimedActionList(SmartScriptHolder& e, uint32 entry, Unit* invoker)
|
||||
|
||||
@@ -343,6 +343,7 @@ public:
|
||||
void OnInitialize() override;
|
||||
void OnUpdate(uint32 diff) override;
|
||||
void OnUnitEnter(Unit* unit) override;
|
||||
void OnUnitExit(Unit* unit) override;
|
||||
|
||||
SmartScript* GetScript() { return &mScript; }
|
||||
void SetTimedActionList(SmartScriptHolder& e, uint32 entry, Unit* invoker);
|
||||
|
||||
@@ -3235,17 +3235,19 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
||||
case SMART_EVENT_DEATH:
|
||||
case SMART_EVENT_EVADE:
|
||||
case SMART_EVENT_REACHED_HOME:
|
||||
case SMART_EVENT_RESET:
|
||||
case SMART_EVENT_CORPSE_REMOVED:
|
||||
case SMART_EVENT_AI_INIT:
|
||||
case SMART_EVENT_TRANSPORT_ADDPLAYER:
|
||||
case SMART_EVENT_TRANSPORT_REMOVE_PLAYER:
|
||||
case SMART_EVENT_AREATRIGGER_ENTER:
|
||||
case SMART_EVENT_JUST_SUMMONED:
|
||||
case SMART_EVENT_RESET:
|
||||
case SMART_EVENT_JUST_CREATED:
|
||||
case SMART_EVENT_FOLLOW_COMPLETED:
|
||||
case SMART_EVENT_ON_SPELLCLICK:
|
||||
case SMART_EVENT_ON_DESPAWN:
|
||||
case SMART_EVENT_SEND_EVENT_TRIGGER:
|
||||
case SMART_EVENT_AREATRIGGER_EXIT:
|
||||
ProcessAction(e, unit, var0, var1, bvar, spell, gob);
|
||||
break;
|
||||
case SMART_EVENT_GOSSIP_HELLO:
|
||||
@@ -3454,13 +3456,6 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
||||
ProcessAction(e, unit, var0);
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_AREATRIGGER_ONTRIGGER:
|
||||
{
|
||||
if (e.event.areatrigger.id && var0 != e.event.areatrigger.id)
|
||||
return;
|
||||
ProcessAction(e, unit, var0);
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_TEXT_OVER:
|
||||
{
|
||||
if (var0 != e.event.textOver.textGroupID || (e.event.textOver.creatureEntry && e.event.textOver.creatureEntry != var1))
|
||||
|
||||
@@ -171,7 +171,7 @@ void SmartAIMgr::LoadSmartAIFromDB()
|
||||
{
|
||||
if (!sAreaTriggerDataStore->GetAreaTriggerTemplate({ (uint32)temp.entryOrGuid, false }))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: AreaTrigger entry ({} IsServerSide false) does not exist, skipped loading.", uint32(temp.entryOrGuid));
|
||||
TC_LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: AreaTrigger entry ({} IsCustom false) does not exist, skipped loading.", uint32(temp.entryOrGuid));
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
@@ -467,7 +467,7 @@ SmartScriptHolder& SmartAIMgr::FindLinkedEvent(SmartAIEventList& list, uint32 li
|
||||
case SMART_EVENT_FOLLOW_COMPLETED:
|
||||
case SMART_EVENT_ON_SPELLCLICK:
|
||||
case SMART_EVENT_GO_LOOT_STATE_CHANGED:
|
||||
case SMART_EVENT_AREATRIGGER_ONTRIGGER:
|
||||
case SMART_EVENT_AREATRIGGER_ENTER:
|
||||
case SMART_EVENT_IC_LOS:
|
||||
case SMART_EVENT_OOC_LOS:
|
||||
case SMART_EVENT_DISTANCE_CREATURE:
|
||||
@@ -491,6 +491,7 @@ SmartScriptHolder& SmartAIMgr::FindLinkedEvent(SmartAIEventList& list, uint32 li
|
||||
case SMART_EVENT_SCENE_CANCEL:
|
||||
case SMART_EVENT_SCENE_COMPLETE:
|
||||
case SMART_EVENT_SEND_EVENT_TRIGGER:
|
||||
case SMART_EVENT_AREATRIGGER_EXIT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -717,16 +718,6 @@ bool SmartAIMgr::IsEmoteValid(SmartScriptHolder const& e, uint32 entry)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SmartAIMgr::IsAreaTriggerValid(SmartScriptHolder const& e, uint32 entry)
|
||||
{
|
||||
if (!sAreaTriggerStore.LookupEntry(entry))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent AreaTrigger entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SmartAIMgr::IsSoundValid(SmartScriptHolder const& e, uint32 entry)
|
||||
{
|
||||
if (!sSoundKitStore.LookupEntry(entry))
|
||||
@@ -805,7 +796,7 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e)
|
||||
case SMART_EVENT_TRANSPORT_REMOVE_PLAYER: return NO_PARAMS;
|
||||
case SMART_EVENT_TRANSPORT_RELOCATE: return sizeof(SmartEvent::transportRelocate);
|
||||
case SMART_EVENT_INSTANCE_PLAYER_ENTER: return sizeof(SmartEvent::instancePlayerEnter);
|
||||
case SMART_EVENT_AREATRIGGER_ONTRIGGER: return sizeof(SmartEvent::areatrigger);
|
||||
case SMART_EVENT_AREATRIGGER_ENTER: return NO_PARAMS;
|
||||
case SMART_EVENT_QUEST_ACCEPTED: return NO_PARAMS;
|
||||
case SMART_EVENT_QUEST_OBJ_COMPLETION: return NO_PARAMS;
|
||||
case SMART_EVENT_QUEST_COMPLETION: return NO_PARAMS;
|
||||
@@ -845,6 +836,7 @@ bool SmartAIMgr::CheckUnusedEventParams(SmartScriptHolder const& e)
|
||||
case SMART_EVENT_ON_SPELL_START: return sizeof(SmartEvent::spellCast);
|
||||
case SMART_EVENT_ON_DESPAWN: return NO_PARAMS;
|
||||
case SMART_EVENT_SEND_EVENT_TRIGGER: return NO_PARAMS;
|
||||
case SMART_EVENT_AREATRIGGER_EXIT: return NO_PARAMS;
|
||||
default:
|
||||
TC_LOG_WARN("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} is using an event with no unused params specified in SmartAIMgr::CheckUnusedEventParams(), please report this.",
|
||||
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
|
||||
@@ -1378,17 +1370,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_AREATRIGGER_ONTRIGGER:
|
||||
{
|
||||
if (e.event.areatrigger.id && (e.GetScriptType() == SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY || e.GetScriptType() == SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_CUSTOM))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} areatrigger param not supported for SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY and SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_CUSTOM, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
|
||||
return false;
|
||||
}
|
||||
if (e.event.areatrigger.id && !IsAreaTriggerValid(e, e.event.areatrigger.id))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_TEXT_OVER:
|
||||
if (!IsTextValid(e, e.event.textOver.textGroupID))
|
||||
return false;
|
||||
@@ -1540,6 +1521,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
|
||||
case SMART_EVENT_WAYPOINT_RESUMED:
|
||||
case SMART_EVENT_WAYPOINT_STOPPED:
|
||||
case SMART_EVENT_WAYPOINT_ENDED:
|
||||
case SMART_EVENT_AREATRIGGER_ENTER:
|
||||
case SMART_EVENT_AREATRIGGER_EXIT:
|
||||
case SMART_EVENT_GOSSIP_SELECT:
|
||||
case SMART_EVENT_GOSSIP_HELLO:
|
||||
case SMART_EVENT_JUST_CREATED:
|
||||
|
||||
@@ -146,7 +146,7 @@ enum SMART_EVENT
|
||||
SMART_EVENT_TRANSPORT_REMOVE_PLAYER = 43, // NONE
|
||||
SMART_EVENT_TRANSPORT_RELOCATE = 44, // PointId
|
||||
SMART_EVENT_INSTANCE_PLAYER_ENTER = 45, // Team (0 any), CooldownMin, CooldownMax
|
||||
SMART_EVENT_AREATRIGGER_ONTRIGGER = 46, // TriggerId(0 any)
|
||||
SMART_EVENT_AREATRIGGER_ENTER = 46, // NONE
|
||||
SMART_EVENT_QUEST_ACCEPTED = 47, // none
|
||||
SMART_EVENT_QUEST_OBJ_COMPLETION = 48, // none
|
||||
SMART_EVENT_QUEST_COMPLETION = 49, // none
|
||||
@@ -188,8 +188,9 @@ enum SMART_EVENT
|
||||
SMART_EVENT_ON_SPELL_START = 85, // SpellID, CooldownMin, CooldownMax
|
||||
SMART_EVENT_ON_DESPAWN = 86, // NONE
|
||||
SMART_EVENT_SEND_EVENT_TRIGGER = 87, // NONE
|
||||
SMART_EVENT_AREATRIGGER_EXIT = 88, // NONE
|
||||
|
||||
SMART_EVENT_END = 88
|
||||
SMART_EVENT_END = 89
|
||||
};
|
||||
|
||||
struct SmartEvent
|
||||
@@ -347,11 +348,6 @@ struct SmartEvent
|
||||
uint32 cooldownMax;
|
||||
} instancePlayerEnter;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 id;
|
||||
} areatrigger;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 textGroupID;
|
||||
@@ -1549,7 +1545,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] =
|
||||
{SMART_EVENT_TRANSPORT_REMOVE_PLAYER, SMART_SCRIPT_TYPE_MASK_TRANSPORT },
|
||||
{SMART_EVENT_TRANSPORT_RELOCATE, SMART_SCRIPT_TYPE_MASK_TRANSPORT },
|
||||
{SMART_EVENT_INSTANCE_PLAYER_ENTER, SMART_SCRIPT_TYPE_MASK_INSTANCE },
|
||||
{SMART_EVENT_AREATRIGGER_ONTRIGGER, SMART_SCRIPT_TYPE_MASK_AREATRIGGER + SMART_SCRIPT_TYPE_MASK_AREATRIGGER_ENTITY },
|
||||
{SMART_EVENT_AREATRIGGER_ENTER, SMART_SCRIPT_TYPE_MASK_AREATRIGGER + SMART_SCRIPT_TYPE_MASK_AREATRIGGER_ENTITY },
|
||||
{SMART_EVENT_QUEST_ACCEPTED, SMART_SCRIPT_TYPE_MASK_QUEST },
|
||||
{SMART_EVENT_QUEST_OBJ_COMPLETION, SMART_SCRIPT_TYPE_MASK_QUEST },
|
||||
{SMART_EVENT_QUEST_REWARDED, SMART_SCRIPT_TYPE_MASK_QUEST },
|
||||
@@ -1590,7 +1586,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] =
|
||||
{SMART_EVENT_ON_SPELL_FAILED, SMART_SCRIPT_TYPE_MASK_CREATURE },
|
||||
{SMART_EVENT_ON_SPELL_START, SMART_SCRIPT_TYPE_MASK_CREATURE },
|
||||
{SMART_EVENT_ON_DESPAWN, SMART_SCRIPT_TYPE_MASK_CREATURE },
|
||||
{SMART_EVENT_SEND_EVENT_TRIGGER, SMART_SCRIPT_TYPE_MASK_EVENT }
|
||||
{SMART_EVENT_SEND_EVENT_TRIGGER, SMART_SCRIPT_TYPE_MASK_EVENT },
|
||||
{SMART_EVENT_AREATRIGGER_EXIT, SMART_SCRIPT_TYPE_MASK_AREATRIGGER + SMART_SCRIPT_TYPE_MASK_AREATRIGGER_ENTITY }
|
||||
};
|
||||
|
||||
enum SmartEventFlags
|
||||
@@ -1746,7 +1743,6 @@ class TC_GAME_API SmartAIMgr
|
||||
static bool IsItemValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsTextEmoteValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsEmoteValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsAreaTriggerValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsSoundValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsAnimKitValid(SmartScriptHolder const& e, uint32 entry);
|
||||
static bool IsSpellVisualKitValid(SmartScriptHolder const& e, uint32 entry);
|
||||
|
||||
Reference in New Issue
Block a user