[Server] Send some packets only to nearest players

This commit is contained in:
Koncord 2017-02-19 16:38:47 +08:00
parent 846ceacc90
commit b760015071
3 changed files with 41 additions and 10 deletions

View file

@ -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<Script::CallbackIdentity("OnPlayerAttributesChange")>(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<Script::CallbackIdentity("OnPlayerSkillsChange")>(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<Script::CallbackIdentity("OnPlayerLevelChange")>(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<Script::CallbackIdentity("OnPlayerEquipmentChange")>(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;
}

View file

@ -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);
}
}
}

View file

@ -17,6 +17,7 @@
#include <components/openmw-mp/Log.hpp>
#include <components/openmw-mp/Base/BasePlayer.hpp>
#include <components/openmw-mp/Packets/Player/PlayerPacket.hpp>
#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;