From 0c1905e842a47e78097ebed699daf549e2b51ae5 Mon Sep 17 00:00:00 2001 From: Koncord Date: Sun, 5 Mar 2017 16:46:11 +0800 Subject: [PATCH] [General] Add PreInit packet --- components/CMakeLists.txt | 2 +- components/openmw-mp/NetworkMessages.hpp | 3 +- .../openmw-mp/Packets/PacketPreInit.cpp | 38 +++++++++++++++++++ .../openmw-mp/Packets/PacketPreInit.hpp | 27 +++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 components/openmw-mp/Packets/PacketPreInit.cpp create mode 100644 components/openmw-mp/Packets/PacketPreInit.hpp diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index 5d28bf790..5d94f88b7 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -173,7 +173,7 @@ add_component_dir (openmw-mp Packets/World/PacketVideoPlay Packets/World/PacketScriptLocalShort Packets/World/PacketScriptLocalFloat Packets/World/PacketScriptMemberShort - Packets/World/PacketScriptGlobalShort) + Packets/World/PacketScriptGlobalShort Packets/PacketPreInit) add_component_dir (fallback fallback validate diff --git a/components/openmw-mp/NetworkMessages.hpp b/components/openmw-mp/NetworkMessages.hpp index ccf69376f..8182a7ada 100644 --- a/components/openmw-mp/NetworkMessages.hpp +++ b/components/openmw-mp/NetworkMessages.hpp @@ -58,7 +58,8 @@ enum GameMessages ID_SCRIPT_MEMBER_SHORT, ID_SCRIPT_GLOBAL_SHORT, - ID_GAME_CONSOLE + ID_GAME_CONSOLE, + ID_GAME_PREINIT }; diff --git a/components/openmw-mp/Packets/PacketPreInit.cpp b/components/openmw-mp/Packets/PacketPreInit.cpp new file mode 100644 index 000000000..02048b4a2 --- /dev/null +++ b/components/openmw-mp/Packets/PacketPreInit.cpp @@ -0,0 +1,38 @@ +// +// Created by koncord on 05.03.17. +// + +#include +#include +#include "PacketPreInit.hpp" + +mwmp::PacketPreInit::PacketPreInit(RakNet::RakPeerInterface *peer) : BasePacket(peer) +{ + packetID = ID_GAME_PREINIT; +} + +void mwmp::PacketPreInit::Packet(RakNet::BitStream *bs, RakNet::RakNetGUID &guid, bool send, PluginContainer &checksums) +{ + BasePacket::Packet(bs, guid, send); + + unsigned int size = checksums.size(); + RW(size, send); + if(send) + { + BOOST_FOREACH(PluginContainer::value_type & checksum, checksums) + { + RW(checksum.first, true); + RW(checksum.second, true); + } + } + else + { + for(unsigned int i = 0; i < size; i++) + { + PluginPair checksum; + RW(checksum.first, false); + RW(checksum.second, false); + checksums.push_back(checksum); + } + } +} diff --git a/components/openmw-mp/Packets/PacketPreInit.hpp b/components/openmw-mp/Packets/PacketPreInit.hpp new file mode 100644 index 000000000..82185c4c8 --- /dev/null +++ b/components/openmw-mp/Packets/PacketPreInit.hpp @@ -0,0 +1,27 @@ +// +// Created by koncord on 05.03.17. +// + +#ifndef OPENMW_PACKETPREINIT_HPP +#define OPENMW_PACKETPREINIT_HPP + +#include +#include "BasePacket.hpp" + + +namespace mwmp +{ + class PacketPreInit : public BasePacket + { + public: + typedef std::pair PluginPair; + typedef std::vector PluginContainer; + + PacketPreInit(RakNet::RakPeerInterface *peer); + + virtual void Packet(RakNet::BitStream *bs, RakNet::RakNetGUID &guid, bool send, PluginContainer &checksums); + }; +} + + +#endif //OPENMW_PACKETPREINIT_HPP