diff options
Diffstat (limited to 'src')
-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; |