diff --git a/apps/openmw/mwmp/LocalPlayer.cpp b/apps/openmw/mwmp/LocalPlayer.cpp index 40d83e64b..db5cc227d 100644 --- a/apps/openmw/mwmp/LocalPlayer.cpp +++ b/apps/openmw/mwmp/LocalPlayer.cpp @@ -62,14 +62,14 @@ void LocalPlayer::updateDynamicStats(bool forceUpdate) { MWWorld::Ptr player = GetPlayerPtr(); - MWMechanics::CreatureStats *creatureClass = &player.getClass().getCreatureStats(player); - MWMechanics::DynamicStat health(creatureClass->getHealth()); - MWMechanics::DynamicStat magicka(creatureClass->getMagicka()); - MWMechanics::DynamicStat fatigue(creatureClass->getFatigue()); + MWMechanics::CreatureStats *ptrCreatureStats = &player.getClass().getCreatureStats(player); + MWMechanics::DynamicStat health(ptrCreatureStats->getHealth()); + MWMechanics::DynamicStat magicka(ptrCreatureStats->getMagicka()); + MWMechanics::DynamicStat fatigue(ptrCreatureStats->getFatigue()); - static MWMechanics::DynamicStat oldHealth(creatureClass->getHealth()); - static MWMechanics::DynamicStat oldMagicka(creatureClass->getMagicka()); - static MWMechanics::DynamicStat oldFatigue(creatureClass->getFatigue()); + static MWMechanics::DynamicStat oldHealth(ptrCreatureStats->getHealth()); + static MWMechanics::DynamicStat oldMagicka(ptrCreatureStats->getMagicka()); + static MWMechanics::DynamicStat oldFatigue(ptrCreatureStats->getFatigue()); static float timer = 0; @@ -233,6 +233,21 @@ void LocalPlayer::setCell() updateCell(true); } +void LocalPlayer::setDynamicStats() +{ + MWBase::World *world = MWBase::Environment::get().getWorld(); + MWWorld::Ptr player = world->getPlayerPtr(); + + MWMechanics::CreatureStats *ptrCreatureStats = &player.getClass().getCreatureStats(player); + + MWMechanics::DynamicStat dynamicStat; + + for (int i = 0; i < 3; ++i) + { + dynamicStat.readState(CreatureStats()->mDynamic[i]); + ptrCreatureStats->setDynamic(i, dynamicStat); + } +} void LocalPlayer::updateInventory(bool forceUpdate) { diff --git a/apps/openmw/mwmp/LocalPlayer.hpp b/apps/openmw/mwmp/LocalPlayer.hpp index b7d6710d6..3de754686 100644 --- a/apps/openmw/mwmp/LocalPlayer.hpp +++ b/apps/openmw/mwmp/LocalPlayer.hpp @@ -31,6 +31,7 @@ namespace mwmp void setPosition(); void setCell(); + void setDynamicStats(); void SetClass(); void SendClass(); diff --git a/apps/openmw/mwmp/Networking.cpp b/apps/openmw/mwmp/Networking.cpp index 62a28ec88..47ac6effd 100644 --- a/apps/openmw/mwmp/Networking.cpp +++ b/apps/openmw/mwmp/Networking.cpp @@ -339,8 +339,15 @@ void Networking::ReceiveMessage(RakNet::Packet *packet) { if (id == myid) { - getLocalPlayer()->updateDynamicStats(true); - myPacket->Send(getLocalPlayer(), serverAddr); + if (packet->length == myPacket->headerSize()) + { + getLocalPlayer()->updateDynamicStats(true); + } + else + { + myPacket->Packet(&bsIn, getLocalPlayer(), false); + getLocalPlayer()->setDynamicStats(); + } } else if (pl != 0) {