forked from mirror/openmw-tes3mp
[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.
This commit is contained in:
parent
ba161ddddd
commit
494b10b97e
1 changed files with 42 additions and 37 deletions
|
@ -112,6 +112,48 @@ void Player::update()
|
||||||
{
|
{
|
||||||
auto plPCtrl = mwmp::Networking::get().getPlayerPacketController();
|
auto plPCtrl = mwmp::Networking::get().getPlayerPacketController();
|
||||||
|
|
||||||
|
if (baseInfoChanged)
|
||||||
|
{
|
||||||
|
auto packet = plPCtrl->GetPacket(ID_PLAYER_BASEINFO);
|
||||||
|
packet->setPlayer(basePlayer);
|
||||||
|
packet->Send(false);
|
||||||
|
packet->Send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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_STATS_DYNAMIC);
|
||||||
|
packet->setPlayer(basePlayer);
|
||||||
|
packet->Send(false);
|
||||||
|
packet->Send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (positionChanged)
|
||||||
|
{
|
||||||
|
auto packet = plPCtrl->GetPacket(ID_PLAYER_POSITION);
|
||||||
|
packet->setPlayer(basePlayer);
|
||||||
|
packet->Send(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attributesChanged)
|
||||||
|
{
|
||||||
|
auto packet = plPCtrl->GetPacket(ID_PLAYER_ATTRIBUTE);
|
||||||
|
packet->setPlayer(basePlayer);
|
||||||
|
packet->Send(false);
|
||||||
|
packet->Send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skillsChanged)
|
||||||
|
{
|
||||||
|
auto packet = plPCtrl->GetPacket(ID_PLAYER_SKILL);
|
||||||
|
packet->setPlayer(basePlayer);
|
||||||
|
packet->Send(false);
|
||||||
|
packet->Send(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (inventory.isEquipmentChanged())
|
if (inventory.isEquipmentChanged())
|
||||||
{
|
{
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT);
|
auto packet = plPCtrl->GetPacket(ID_PLAYER_EQUIPMENT);
|
||||||
|
@ -129,42 +171,6 @@ void Player::update()
|
||||||
inventory.resetInventoryFlag();
|
inventory.resetInventoryFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attributesChanged)
|
|
||||||
{
|
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_ATTRIBUTE);
|
|
||||||
packet->setPlayer(basePlayer);
|
|
||||||
packet->Send(false);
|
|
||||||
packet->Send(true);
|
|
||||||
}
|
|
||||||
if (statsChanged)
|
|
||||||
{
|
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_STATS_DYNAMIC);
|
|
||||||
packet->setPlayer(basePlayer);
|
|
||||||
packet->Send(false);
|
|
||||||
packet->Send(true);
|
|
||||||
}
|
|
||||||
if (skillsChanged)
|
|
||||||
{
|
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_SKILL);
|
|
||||||
packet->setPlayer(basePlayer);
|
|
||||||
packet->Send(false);
|
|
||||||
packet->Send(true);
|
|
||||||
}
|
|
||||||
if (baseInfoChanged)
|
|
||||||
{
|
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_BASEINFO);
|
|
||||||
packet->setPlayer(basePlayer);
|
|
||||||
packet->Send(false);
|
|
||||||
packet->Send(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (positionChanged)
|
|
||||||
{
|
|
||||||
auto packet = plPCtrl->GetPacket(ID_PLAYER_POSITION);
|
|
||||||
packet->setPlayer(basePlayer);
|
|
||||||
packet->Send(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changedMap)
|
if (changedMap)
|
||||||
{
|
{
|
||||||
auto packet = mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MAP);
|
auto packet = mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MAP);
|
||||||
|
@ -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…
Reference in a new issue