diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-12-25 18:20:48 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-24 21:55:46 +0100 |
commit | 52bb230e4c83c814658b77f6d277da77e0b47be7 (patch) | |
tree | 1b37332599db06367b1f48a0a8bcff409ea7c580 | |
parent | 9ea8cdb45716c162221c7d8a6f37da19a047c6d7 (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.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 36 |
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; |