aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDoctorKraft <DoctorKraft@users.noreply.github.com>2018-01-04 01:15:33 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2018-01-04 01:15:33 +0100
commit2ee6ce68495ff6a84f082b53431db50633ee8c88 (patch)
treee0ae919d028f87a850ebe8861c21f4115435bedb /src
parent50af6fd0f88a14d07664b923a68fff85721dcdb3 (diff)
Core/Packets: Implemented SMSG_GAME_OBJECT_UI_ACTION (#20919)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp12
-rw-r--r--src/server/game/Server/Packets/GameObjectPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/GameObjectPackets.h11
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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);