diff --git a/apps/openmw/mwgui/hud.cpp b/apps/openmw/mwgui/hud.cpp index b5c8dc8bb..917fdb02b 100644 --- a/apps/openmw/mwgui/hud.cpp +++ b/apps/openmw/mwgui/hud.cpp @@ -1,5 +1,9 @@ #include "hud.hpp" +#include +#include "../mwmp/Main.hpp" +#include "../mwworld/cellstore.hpp" + #include #include #include @@ -51,6 +55,18 @@ namespace MWGui if (setNewOwner) dropped.getCellRef().setOwner(""); + // Added by tes3mp + mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); + event->cell = *dropped.getCell()->getCell(); + event->cellRef.mRefID = dropped.getCellRef().getRefId(); + event->cellRef.mRefNum = dropped.getCellRef().getRefNum(); + event->cellRef.mPos = dropped.getCellRef().getPosition(); + mwmp::Main::get().getNetworking()->GetWorldPacket(ID_WORLD_OBJECT_PLACE)->Send(event); + + printf("Sending ID_WORLD_OBJECT_PLACE about %s\n%i\n", + event->cellRef.mRefID.c_str(), + event->cellRef.mRefNum); + return dropped; } diff --git a/apps/openmw/mwmp/Networking.cpp b/apps/openmw/mwmp/Networking.cpp index c29219f84..7ee853ff2 100644 --- a/apps/openmw/mwmp/Networking.cpp +++ b/apps/openmw/mwmp/Networking.cpp @@ -632,9 +632,15 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet) WorldPacket *myPacket = worldController.GetPacket(packet->data[0]); WorldEvent *event = new WorldEvent(id); + myPacket->Packet(&bsIn, event, false); MWWorld::CellStore *ptrCellStore; + if (event->cell.isExterior()) + ptrCellStore = MWBase::Environment::get().getWorld()->getExterior(event->cell.mData.mX, event->cell.mData.mY); + else + ptrCellStore = MWBase::Environment::get().getWorld()->getInterior(event->cell.mName); + switch (packet->data[0]) { case ID_WORLD_OBJECT_PLACE: @@ -647,13 +653,6 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet) } case ID_WORLD_OBJECT_DELETE: { - myPacket->Packet(&bsIn, event, false); - - if (event->cell.isExterior()) - ptrCellStore = MWBase::Environment::get().getWorld()->getExterior(event->cell.mData.mX, event->cell.mData.mY); - else - ptrCellStore = MWBase::Environment::get().getWorld()->getInterior(event->cell.mName); - LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "Received ID_WORLD_OBJECT_DELETE"); LOG_APPEND(Log::LOG_WARN, "- cellRefId: %s, %i", event->cellRef.mRefID.c_str(), diff --git a/apps/openmw/mwworld/actiontake.cpp b/apps/openmw/mwworld/actiontake.cpp index 1fc6b04c9..5778fa308 100644 --- a/apps/openmw/mwworld/actiontake.cpp +++ b/apps/openmw/mwworld/actiontake.cpp @@ -2,14 +2,13 @@ #include #include "../mwmp/Main.hpp" +#include "../mwworld/cellstore.hpp" #include "../mwbase/environment.hpp" #include "../mwbase/world.hpp" #include "../mwbase/windowmanager.hpp" #include "../mwbase/mechanicsmanager.hpp" -#include "../mwworld/cellstore.hpp" - #include "class.hpp" #include "containerstore.hpp" @@ -25,9 +24,7 @@ namespace MWWorld // Added by tes3mp mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); - event->cell = *getTarget().getCell()->getCell(); - event->cellRef.mRefID = getTarget().getCellRef().getRefId(); event->cellRef.mRefNum = getTarget().getCellRef().getRefNum(); mwmp::Main::get().getNetworking()->GetWorldPacket(ID_WORLD_OBJECT_DELETE)->Send(event); diff --git a/components/openmw-mp/Packets/World/PacketObjectPlace.cpp b/components/openmw-mp/Packets/World/PacketObjectPlace.cpp index 946c055c6..b9f50e168 100644 --- a/components/openmw-mp/Packets/World/PacketObjectPlace.cpp +++ b/components/openmw-mp/Packets/World/PacketObjectPlace.cpp @@ -14,4 +14,10 @@ void PacketObjectPlace::Packet(RakNet::BitStream *bs, WorldEvent *event, bool se RW(event->cellRef.mRefID, send); RW(event->cellRef.mRefNum, send); + RW(event->cellRef.mPos, send); + + RW(event->cell.mData.mFlags, send); + RW(event->cell.mCellId.mIndex.mX, send); + RW(event->cell.mCellId.mIndex.mY, send); + RW(event->cell.mName, send); }