From fccf6fb72b60b08dfbe6d5fb17fba55239944fca Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 9 Mar 2024 00:54:27 +0100 Subject: Core/Objects: Implemented vignettes --- src/server/game/Server/Packets/VignettePackets.cpp | 59 ++++++++++++++++++++++ src/server/game/Server/Packets/VignettePackets.h | 58 +++++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 2 +- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/server/game/Server/Packets/VignettePackets.cpp create mode 100644 src/server/game/Server/Packets/VignettePackets.h (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Packets/VignettePackets.cpp b/src/server/game/Server/Packets/VignettePackets.cpp new file mode 100644 index 00000000000..10ca888ccbc --- /dev/null +++ b/src/server/game/Server/Packets/VignettePackets.cpp @@ -0,0 +1,59 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "VignettePackets.h" + +namespace WorldPackets::Vignette +{ +ByteBuffer& operator<<(ByteBuffer& data, VignetteData const& vignetteData) +{ + data << vignetteData.Position; + data << vignetteData.ObjGUID; + data << int32(vignetteData.VignetteID); + data << uint32(vignetteData.ZoneID); + data << uint32(vignetteData.WMOGroupID); + data << uint32(vignetteData.WMODoodadPlacementID); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, VignetteDataSet const& vignetteDataSet) +{ + data << uint32(vignetteDataSet.IDs.size()); + data << uint32(vignetteDataSet.Data.size()); + for (ObjectGuid const& id : vignetteDataSet.IDs) + data << id; + + for (VignetteData const& vignetteData : vignetteDataSet.Data) + data << vignetteData; + + return data; +} + +WorldPacket const* VignetteUpdate::Write() +{ + _worldPacket.WriteBit(ForceUpdate); + _worldPacket.WriteBit(InFogOfWar); + _worldPacket << uint32(Removed.size()); + _worldPacket << Added; + _worldPacket << Updated; + for (ObjectGuid const& removed : Removed) + _worldPacket << removed; + + return &_worldPacket; +} +} diff --git a/src/server/game/Server/Packets/VignettePackets.h b/src/server/game/Server/Packets/VignettePackets.h new file mode 100644 index 00000000000..c96f68262df --- /dev/null +++ b/src/server/game/Server/Packets/VignettePackets.h @@ -0,0 +1,58 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef TRINITYCORE_VIGNETTE_PACKETS_H +#define TRINITYCORE_VIGNETTE_PACKETS_H + +#include "ObjectGuid.h" +#include "Packet.h" +#include "Position.h" + +namespace WorldPackets::Vignette +{ +struct VignetteData +{ + ObjectGuid ObjGUID; + TaggedPosition Position; + int32 VignetteID = 0; + uint32 ZoneID = 0; + uint32 WMOGroupID = 0; + uint32 WMODoodadPlacementID = 0; +}; + +struct VignetteDataSet +{ + std::vector IDs; + std::vector Data; +}; + +class VignetteUpdate final : public ServerPacket +{ +public: + VignetteUpdate() : ServerPacket(SMSG_VIGNETTE_UPDATE, 200) { } + + WorldPacket const* Write() override; + + VignetteDataSet Added; + VignetteDataSet Updated; + std::vector Removed; + bool ForceUpdate = false; + bool InFogOfWar = false; +}; +} + +#endif // TRINITYCORE_VIGNETTE_PACKETS_H diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 80a289eb9c4..613b4e1f970 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -2145,7 +2145,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_PURCHASE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_PURCHASE_STATE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VENDOR_INVENTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_VIGNETTE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_VIGNETTE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_CHANNEL_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_LOGIN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); -- cgit v1.2.3