[Server] Send large ID_CONTAINER packets on a need-to-know basis

This commit is contained in:
David Cernat 2017-02-19 20:20:44 +02:00
parent 791089d342
commit 24251cafd0
2 changed files with 9 additions and 2 deletions

View file

@ -50,7 +50,7 @@ void Cell::sendToLoaded(mwmp::WorldPacket *worldPacket, mwmp::BaseEvent *baseEve
for (auto pl : plList)
{
if (pl->guid == baseEvent->guid) continue;
worldPacket->Send(baseEvent, pl->guid);
worldPacket->Send(baseEvent, pl->guid);
}
}

View file

@ -598,7 +598,14 @@ void Networking::processWorldPacket(RakNet::Packet *packet)
player->npc.mName.c_str());
myPacket->Read(baseEvent);
myPacket->Send(baseEvent, true);
// Until we have a timestamp-based system, send packets pertaining to more
// than one container (i.e. replies to server requests for container contents)
// only to players who have the container's cell loaded
if (baseEvent->action == BaseEvent::SET && baseEvent->objectChanges.count > 1)
CellController::get()->getCell(&baseEvent->cell)->sendToLoaded(myPacket, baseEvent);
else
myPacket->Send(baseEvent, true);
Script::Call<Script::CallbackIdentity("OnContainer")>(
player->getId(),