aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-12-25 18:20:48 +0200
committerShauren <shauren.trinity@gmail.com>2022-03-24 21:55:46 +0100
commit52bb230e4c83c814658b77f6d277da77e0b47be7 (patch)
tree1b37332599db06367b1f48a0a8bcff409ea7c580
parent9ea8cdb45716c162221c7d8a6f37da19a047c6d7 (diff)
Core/SAI: Use GetBaseObject as second param of SMART_ACTION_ACTIVATE_GAMEOBJECT & reorder GameObjectActions (#27461)
(cherry picked from commit 87cb0a4212535731749aebb2d3fe8f5c3000be92)
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp2
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp36
2 files changed, 25 insertions, 13 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 8fa9ccee379..e4bdcbf8c8b 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2445,7 +2445,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
if (GameObject* targetGo = target->ToGameObject())
{
- targetGo->ActivateObject(GameObjectActions(e.action.activateGameObject.gameObjectAction), e.action.activateGameObject.param);
+ targetGo->ActivateObject(GameObjectActions(e.action.activateGameObject.gameObjectAction), e.action.activateGameObject.param, GetBaseObject());
}
}
break;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 6f1dd21e014..a5242500c14 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1643,6 +1643,9 @@ void GameObject::ActivateObject(GameObjectActions action, int32 param, WorldObje
switch (action)
{
+ case GameObjectActions::None:
+ TC_LOG_FATAL("spell", "Spell %d has action type NONE in effect %d", spellId, effectIndex);
+ break;
case GameObjectActions::AnimateCustom0:
case GameObjectActions::AnimateCustom1:
case GameObjectActions::AnimateCustom2:
@@ -1650,24 +1653,40 @@ void GameObject::ActivateObject(GameObjectActions action, int32 param, WorldObje
SendCustomAnim(uint32(action) - uint32(GameObjectActions::AnimateCustom0));
break;
case GameObjectActions::Disturb: // What's the difference with Open?
- case GameObjectActions::Open:
if (unitCaster)
Use(unitCaster);
break;
- case GameObjectActions::OpenAndUnlock:
- if (unitCaster)
- UseDoorOrButton(0, false, unitCaster);
- [[fallthrough]];
case GameObjectActions::Unlock:
RemoveFlag(GO_FLAG_LOCKED);
break;
case GameObjectActions::Lock:
AddFlag(GO_FLAG_LOCKED);
break;
+ case GameObjectActions::Open:
+ if (unitCaster)
+ Use(unitCaster);
+ break;
+ case GameObjectActions::OpenAndUnlock:
+ if (unitCaster)
+ UseDoorOrButton(0, false, unitCaster);
+ RemoveFlag(GO_FLAG_LOCKED);
+ break;
case GameObjectActions::Close:
+ ResetDoorOrButton();
+ break;
+ case GameObjectActions::ToggleOpen:
+ // No use cases, implementation unknown
+ break;
+ case GameObjectActions::Destroy:
+ if (unitCaster)
+ UseDoorOrButton(0, true, unitCaster);
+ break;
case GameObjectActions::Rebuild:
ResetDoorOrButton();
break;
+ case GameObjectActions::Creation:
+ // No use cases, implementation unknown
+ break;
case GameObjectActions::Despawn:
DespawnOrUnsummon();
break;
@@ -1681,10 +1700,6 @@ void GameObject::ActivateObject(GameObjectActions action, int32 param, WorldObje
ResetDoorOrButton();
AddFlag(GO_FLAG_LOCKED);
break;
- case GameObjectActions::Destroy:
- if (unitCaster)
- UseDoorOrButton(0, true, unitCaster);
- break;
case GameObjectActions::UseArtKit0:
case GameObjectActions::UseArtKit1:
case GameObjectActions::UseArtKit2:
@@ -1754,9 +1769,6 @@ void GameObject::ActivateObject(GameObjectActions action, int32 param, WorldObje
case GameObjectActions::StopSpellVisual:
SetSpellVisualId(0);
break;
- case GameObjectActions::None:
- TC_LOG_FATAL("spell", "Spell %d has action type NONE in effect %d", spellId, effectIndex);
- break;
default:
TC_LOG_ERROR("spell", "Spell %d has unhandled action %d in effect %d", spellId, int32(action), effectIndex);
break;