From ac666edebd658ed25dfa6abd1611402e70f1f6fe Mon Sep 17 00:00:00 2001 From: David Cernat Date: Thu, 20 Oct 2016 22:15:47 +0300 Subject: [PATCH] Add a CellRef to WorldEvent --- apps/openmw-mp/Networking.cpp | 6 ++++++ apps/openmw/mwworld/livecellref.hpp | 2 +- apps/openmw/mwworld/worldimp.cpp | 3 +++ components/openmw-mp/Base/WorldEvent.hpp | 11 +++++++++++ .../openmw-mp/Packets/World/PacketObjectRemoval.cpp | 2 ++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/openmw-mp/Networking.cpp b/apps/openmw-mp/Networking.cpp index fc765ffeb..aa7937fba 100644 --- a/apps/openmw-mp/Networking.cpp +++ b/apps/openmw-mp/Networking.cpp @@ -368,6 +368,9 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet) if (!player->isHandshaked() || player->LoadedState() != Player::POSTLOADED) return; + WorldPacket *myPacket = worldController->GetPacket(packet->data[0]); + WorldEvent *event = new WorldEvent(player->guid); + switch (packet->data[0]) { @@ -375,6 +378,9 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet) { LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Received ID_WORLD_OBJECT_REMOVAL from %s", player->Npc()->mName.c_str()); + + myPacket->Read(event); + myPacket->Send(event, true); break; } diff --git a/apps/openmw/mwworld/livecellref.hpp b/apps/openmw/mwworld/livecellref.hpp index f42e1611a..91495eed2 100644 --- a/apps/openmw/mwworld/livecellref.hpp +++ b/apps/openmw/mwworld/livecellref.hpp @@ -28,7 +28,7 @@ namespace MWWorld */ MWWorld::CellRef mRef; - /* Added by TES3MP to prevent dedicated players' references from automatically + /* Added by tes3mp to prevent dedicated players' references from automatically * and unpredictably moving across exterior cell boundaries on clients */ bool canChangeCell; diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 872471ebb..d7fd3281f 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1106,7 +1106,10 @@ namespace MWWorld && mWorldScene->getActiveCells().find(ptr.getCell()) != mWorldScene->getActiveCells().end() && ptr.getRefData().isEnabled()) { + // Added by tes3mp mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); + event->CellRef()->mRefID = ptr.getCellRef().getRefId(); + event->CellRef()->mRefNum = ptr.getCellRef().getRefNum(); mwmp::Main::get().getNetworking()->GetWorldPacket(ID_WORLD_OBJECT_REMOVAL)->Send(event); mWorldScene->removeObjectFromScene (ptr); diff --git a/components/openmw-mp/Base/WorldEvent.hpp b/components/openmw-mp/Base/WorldEvent.hpp index e70427b4c..e384bbe10 100644 --- a/components/openmw-mp/Base/WorldEvent.hpp +++ b/components/openmw-mp/Base/WorldEvent.hpp @@ -1,6 +1,7 @@ #ifndef OPENMW_WORLDEVENT_HPP #define OPENMW_WORLDEVENT_HPP +#include #include namespace mwmp @@ -19,7 +20,17 @@ namespace mwmp } + virtual ESM::CellRef *CellRef() + { + return &ref; + } + RakNet::RakNetGUID guid; + + protected: + + ESM::CellRef ref; + }; } diff --git a/components/openmw-mp/Packets/World/PacketObjectRemoval.cpp b/components/openmw-mp/Packets/World/PacketObjectRemoval.cpp index 2c4e02297..0c6b68f53 100644 --- a/components/openmw-mp/Packets/World/PacketObjectRemoval.cpp +++ b/components/openmw-mp/Packets/World/PacketObjectRemoval.cpp @@ -11,4 +11,6 @@ PacketObjectRemoval::PacketObjectRemoval(RakNet::RakPeerInterface *peer) : World void PacketObjectRemoval::Packet(RakNet::BitStream *bs, WorldEvent *event, bool send) { WorldPacket::Packet(bs, event, send); + + RW(*event->CellRef(), send); }