diff options
author | DoctorKraft <DoctorKraft@users.noreply.github.com> | 2018-01-04 01:15:33 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-01-04 01:15:33 +0100 |
commit | 2ee6ce68495ff6a84f082b53431db50633ee8c88 (patch) | |
tree | e0ae919d028f87a850ebe8861c21f4115435bedb /src | |
parent | 50af6fd0f88a14d07664b923a68fff85721dcdb3 (diff) |
Core/Packets: Implemented SMSG_GAME_OBJECT_UI_ACTION (#20919)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 32 insertions, 1 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index af07bf67765..33aded2266a 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1905,6 +1905,18 @@ void GameObject::Use(Unit* user) player->SendDirectMessage(artifactForgeOpened.Write()); return; } + case GAMEOBJECT_TYPE_UI_LINK: + { + Player* player = user->ToPlayer(); + if (!player) + return; + + WorldPackets::GameObject::GameObjectUIAction gameObjectUIAction; + gameObjectUIAction.ObjectGUID = GetGUID(); + gameObjectUIAction.UILink = GetGOInfo()->UILink.UILinkType; + player->SendDirectMessage(gameObjectUIAction.Write()); + return; + } default: if (GetGoType() >= MAX_GAMEOBJECT_TYPE) TC_LOG_ERROR("misc", "GameObject::Use(): unit (type: %u, %s, name: %s) tries to use object (%s, name: %s) of unknown type (%u)", diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp index 029053b9c3a..c4b1aa4fc5c 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.cpp +++ b/src/server/game/Server/Packets/GameObjectPackets.cpp @@ -69,3 +69,11 @@ WorldPacket const* WorldPackets::GameObject::GameObjectCustomAnim::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::GameObject::GameObjectUIAction::Write() +{ + _worldPacket << ObjectGUID; + _worldPacket << int32(UILink); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/GameObjectPackets.h b/src/server/game/Server/Packets/GameObjectPackets.h index fbaecdcf2b6..36b5232ae5b 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.h +++ b/src/server/game/Server/Packets/GameObjectPackets.h @@ -120,6 +120,17 @@ namespace WorldPackets uint32 CustomAnim = 0; bool PlayAsDespawn = false; }; + + class GameObjectUIAction final : public ServerPacket + { + public: + GameObjectUIAction() : ServerPacket(SMSG_GAME_OBJECT_UI_ACTION, 16 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid ObjectGUID; + int32 UILink = 0; + }; } } #endif // GOPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index c1bb1f4c5ed..94524203adc 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1151,7 +1151,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_RESET_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_SET_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_UI_ACTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_UI_ACTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_SPEED_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |