diff options
| author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2021-11-07 19:17:12 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-03-21 22:59:21 +0100 |
| commit | 791b759332b784211031571d3ca68cf0080897cb (patch) | |
| tree | bda8469726e232e8a4d51688e5a69da3e650193d /src/server/game/AI/SmartScripts | |
| parent | 4c1b9d7455625c10af11a34d0f282db3aaff3c73 (diff) | |
Core/SAI: Add SMART_ACTION_ACTIVATE_GAMEOBJECT action (#27216)
Closes #27196
(cherry picked from commit 0817be8f76dead48e2c0eeb7d5a7434a452f0dcf)
Diffstat (limited to 'src/server/game/AI/SmartScripts')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 33 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 10 |
3 files changed, 48 insertions, 18 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 2be17b16857..6475dd55081 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2465,6 +2465,24 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u targetUnit->SetHealth(targetUnit->CountPctFromMaxHealth(e.action.setHealthPct.percent)); break; } + case SMART_ACTION_CREATE_CONVERSATION: + { + WorldObject* baseObject = GetBaseObject(); + + for (WorldObject* const target : targets) + { + if (Player* playerTarget = target->ToPlayer()) + { + Conversation* conversation = Conversation::CreateConversation(e.action.conversation.id, playerTarget, + *playerTarget, playerTarget->GetGUID(), nullptr); + if (!conversation) + TC_LOG_WARN("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CREATE_CONVERSATION: id %u, baseObject %s, target %s - failed to create conversation", + e.action.conversation.id, !baseObject ? "" : baseObject->GetName().c_str(), playerTarget->GetName().c_str()); + } + } + + break; + } case SMART_ACTION_SET_IMMUNE_PC: { for (WorldObject* target : targets) @@ -2507,22 +2525,15 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } - case SMART_ACTION_CREATE_CONVERSATION: + case SMART_ACTION_ACTIVATE_GAMEOBJECT: { - WorldObject* baseObject = GetBaseObject(); - - for (WorldObject* const target : targets) + for (WorldObject* target : targets) { - if (Player* playerTarget = target->ToPlayer()) + if (GameObject* targetGo = target->ToGameObject()) { - Conversation* conversation = Conversation::CreateConversation(e.action.conversation.id, playerTarget, - *playerTarget, playerTarget->GetGUID(), nullptr); - if (!conversation) - TC_LOG_WARN("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CREATE_CONVERSATION: id %u, baseObject %s, target %s - failed to create conversation", - e.action.conversation.id, !baseObject ? "" : baseObject->GetName().c_str(), playerTarget->GetName().c_str()); + targetGo->ActivateObject(GameObjectActions(e.action.activateGameObject.gameObjectAction), e.action.activateGameObject.param); } } - break; } case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 6bf316b8342..2e0173f5389 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1015,7 +1015,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_SET_IMMUNE_PC: return sizeof(SmartAction::setImmunePC); case SMART_ACTION_SET_IMMUNE_NPC: return sizeof(SmartAction::setImmuneNPC); case SMART_ACTION_SET_UNINTERACTIBLE: return sizeof(SmartAction::setUninteractible); - //case SMART_ACTION_ACTIVATE_GAMEOBJECT: return sizeof(SmartAction::raw); + case SMART_ACTION_ACTIVATE_GAMEOBJECT: return sizeof(SmartAction::activateGameObject); case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: return sizeof(SmartAction::addToStoredTargets); case SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER: return sizeof(SmartAction::becomePersonalClone); default: @@ -2291,6 +2291,16 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_SAI_IS_BOOLEAN_VALID(e, e.action.setHealthRegen.regenHealth); break; } + case SMART_ACTION_CREATE_CONVERSATION: + { + if (!sConversationDataStore->GetConversationTemplate(e.action.conversation.id)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: SMART_ACTION_CREATE_CONVERSATION Entry " SI64FMTD " SourceType %u Event %u Action %u uses invalid entry %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.conversation.id); + return false; + } + + break; + } case SMART_ACTION_SET_IMMUNE_PC: { TC_SAI_IS_BOOLEAN_VALID(e, e.action.setImmunePC.immunePC); @@ -2306,14 +2316,17 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_SAI_IS_BOOLEAN_VALID(e, e.action.setUninteractible.uninteractible); break; } - case SMART_ACTION_CREATE_CONVERSATION: + case SMART_ACTION_ACTIVATE_GAMEOBJECT: { - if (!sConversationDataStore->GetConversationTemplate(e.action.conversation.id)) + if (!NotNULL(e, e.action.activateGameObject.gameObjectAction)) + return false; + + if (e.action.activateGameObject.gameObjectAction >= uint32(GameObjectActions::Max)) { - TC_LOG_ERROR("sql.sql", "SmartAIMgr: SMART_ACTION_CREATE_CONVERSATION Entry " SI64FMTD " SourceType %u Event %u Action %u uses invalid entry %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.conversation.id); + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u has gameObjectAction parameter out of range (max allowed %u, current value %u), skipped.", + e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), uint32(GameObjectActions::Max), e.action.activateGameObject.gameObjectAction); return false; } - break; } case SMART_ACTION_FOLLOW: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 5d4278b5b4b..769d306ca2c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1217,6 +1217,11 @@ struct SmartAction struct { + uint32 id; + } conversation; + + struct + { SAIBool immunePC; } setImmunePC; @@ -1232,8 +1237,9 @@ struct SmartAction struct { - uint32 id; - } conversation; + uint32 gameObjectAction; + uint32 param; + } activateGameObject; struct { |
