diff --git a/apps/openmw-mp/Networking.cpp b/apps/openmw-mp/Networking.cpp index b4f8e1f7d..d559f8f82 100644 --- a/apps/openmw-mp/Networking.cpp +++ b/apps/openmw-mp/Networking.cpp @@ -150,7 +150,10 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) if (!player->creatureStats.mDead) { myPacket->Read(player); - myPacket->Send(player, true); //send to other clients + //myPacket->Send(player, true); //send to other clients + + player->sendToNearest(myPacket); + } break; @@ -197,7 +200,9 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) if (!player->creatureStats.mDead) { myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); + + player->sendToNearest(myPacket); Script::Call(player->getId()); } @@ -210,7 +215,8 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) if (!player->creatureStats.mDead) { myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); + player->sendToNearest(myPacket); Script::Call(player->getId()); } @@ -223,7 +229,7 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) if (!player->creatureStats.mDead) { myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); Script::Call(player->getId()); } @@ -235,7 +241,9 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) DEBUG_PRINTF("ID_PLAYER_EQUIPMENT\n"); myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); + + player->sendToNearest(myPacket); Script::Call(player->getId()); @@ -298,7 +306,8 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) } } - myPacket->Send(player, true); + //myPacket->Send(player, true); + player->sendToNearest(myPacket); playerController->GetPacket(ID_PLAYER_DYNAMICSTATS)->RequestData(player->attack.target); } break; @@ -308,7 +317,10 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) { DEBUG_PRINTF("ID_PLAYER_DYNAMICSTATS\n"); myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); + + player->sendToNearest(myPacket); + break; } @@ -359,7 +371,10 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) { DEBUG_PRINTF("ID_PLAYER_DRAWSTATE\n"); myPacket->Read(player); - myPacket->Send(player, true); + //myPacket->Send(player, true); + + player->sendToNearest(myPacket); + break; } diff --git a/apps/openmw-mp/Player.cpp b/apps/openmw-mp/Player.cpp index 5c2325ae0..17302d90c 100644 --- a/apps/openmw-mp/Player.cpp +++ b/apps/openmw-mp/Player.cpp @@ -136,7 +136,21 @@ std::chrono::steady_clock::time_point Player::getLastAttackerTime() return lastAttackerTime; } -CellController::TContainer Player::GetCells() +CellController::TContainer Player::getCells() { return cells; } + +void Player::sendToNearest(mwmp::PlayerPacket *myPacket) +{ + for(auto cell : getCells()) + { + for(auto pl : *cell) + { + if(pl == this) + continue; + + myPacket->Send(this, pl->guid); + } + } +} diff --git a/apps/openmw-mp/Player.hpp b/apps/openmw-mp/Player.hpp index 3045c4b4b..b3f9b4346 100644 --- a/apps/openmw-mp/Player.hpp +++ b/apps/openmw-mp/Player.hpp @@ -17,6 +17,7 @@ #include #include +#include #include "Cell.hpp" struct Player; @@ -69,7 +70,8 @@ public: virtual ~Player(); - CellController::TContainer GetCells(); + CellController::TContainer getCells(); + void sendToNearest(mwmp::PlayerPacket *myPacket); public: mwmp::InventoryChanges inventoryChangesBuffer;