[Server] Send player packets in a more appropriate order

Previously, the fact that a character class packet got sent after a dynamic stats packet caused the dynamic stats to get overridden on the client by the class change.
new-script-api
David Cernat 7 years ago
parent ba161ddddd
commit 494b10b97e

@ -112,37 +112,40 @@ void Player::update()
{ {
auto plPCtrl = mwmp::Networking::get().getPlayerPacketController(); auto plPCtrl = mwmp::Networking::get().getPlayerPacketController();
if (inventory.isEquipmentChanged()) if (baseInfoChanged)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT); auto packet = plPCtrl->GetPacket(ID_PLAYER_BASEINFO);
packet->setPlayer(this); packet->setPlayer(basePlayer);
packet->Send(false); packet->Send(false);
packet->Send(true); packet->Send(true);
inventory.resetEquipmentFlag();
} }
if (inventory.inventoryChangeType() != 0) // The character class can override values from below on the client, so send it first
cClass.update();
if (statsChanged)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT); auto packet = plPCtrl->GetPacket(ID_PLAYER_STATS_DYNAMIC);
packet->setPlayer(this); packet->setPlayer(basePlayer);
packet->Send(/*toOthers*/ false); packet->Send(false);
inventory.resetInventoryFlag(); packet->Send(true);
} }
if (attributesChanged) if (positionChanged)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_ATTRIBUTE); auto packet = plPCtrl->GetPacket(ID_PLAYER_POSITION);
packet->setPlayer(basePlayer); packet->setPlayer(basePlayer);
packet->Send(false); packet->Send(false);
packet->Send(true);
} }
if (statsChanged)
if (attributesChanged)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_STATS_DYNAMIC); auto packet = plPCtrl->GetPacket(ID_PLAYER_ATTRIBUTE);
packet->setPlayer(basePlayer); packet->setPlayer(basePlayer);
packet->Send(false); packet->Send(false);
packet->Send(true); packet->Send(true);
} }
if (skillsChanged) if (skillsChanged)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_SKILL); auto packet = plPCtrl->GetPacket(ID_PLAYER_SKILL);
@ -150,19 +153,22 @@ void Player::update()
packet->Send(false); packet->Send(false);
packet->Send(true); packet->Send(true);
} }
if (baseInfoChanged)
if (inventory.isEquipmentChanged())
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_BASEINFO); auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT);
packet->setPlayer(basePlayer); packet->setPlayer(this);
packet->Send(false); packet->Send(false);
packet->Send(true); packet->Send(true);
inventory.resetEquipmentFlag();
} }
if (positionChanged) if (inventory.inventoryChangeType() != 0)
{ {
auto packet = plPCtrl->GetPacket(ID_PLAYER_POSITION); auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT);
packet->setPlayer(basePlayer); packet->setPlayer(this);
packet->Send(false); packet->Send(/*toOthers*/ false);
inventory.resetInventoryFlag();
} }
if (changedMap) if (changedMap)
@ -181,7 +187,6 @@ void Player::update()
cellAPI.resetChangedCell(); cellAPI.resetChangedCell();
} }
cClass.update();
settings.update(); settings.update();
books.update(); books.update();
gui.update(); gui.update();

Loading…
Cancel
Save