diff --git a/apps/openmw/mwmp/LocalActor.cpp b/apps/openmw/mwmp/LocalActor.cpp index 19202001c..2212ed8ea 100644 --- a/apps/openmw/mwmp/LocalActor.cpp +++ b/apps/openmw/mwmp/LocalActor.cpp @@ -57,7 +57,7 @@ LocalActor::~LocalActor() void LocalActor::update(bool forceUpdate) { updateStatsDynamic(forceUpdate); - updateEquipment(forceUpdate); + updateEquipment(forceUpdate, false); if (forceUpdate || !creatureStats.mDead) { @@ -196,7 +196,7 @@ void LocalActor::updateStatsDynamic(bool forceUpdate) } } -void LocalActor::updateEquipment(bool forceUpdate) +void LocalActor::updateEquipment(bool forceUpdate, bool sendImmediately) { if (!ptr.getClass().hasInventoryStore(ptr)) return; @@ -205,6 +205,7 @@ void LocalActor::updateEquipment(bool forceUpdate) equipmentChanged = true; MWWorld::InventoryStore &invStore = ptr.getClass().getInventoryStore(ptr); + for (int slot = 0; slot < MWWorld::InventoryStore::Slots; slot++) { auto &item = equipmentItems[slot]; @@ -235,7 +236,11 @@ void LocalActor::updateEquipment(bool forceUpdate) if (equipmentChanged) { - mwmp::Main::get().getNetworking()->getActorList()->addEquipmentActor(*this); + if (sendImmediately) + sendEquipment(); + else + mwmp::Main::get().getNetworking()->getActorList()->addEquipmentActor(*this); + equipmentChanged = false; } } @@ -254,6 +259,15 @@ void LocalActor::updateAttackOrCast() } } +void LocalActor::sendEquipment() +{ + ActorList actorList; + actorList.cell = cell; + actorList.addActor(*this); + Main::get().getNetworking()->getActorPacket(ID_ACTOR_EQUIPMENT)->setActorList(&actorList); + Main::get().getNetworking()->getActorPacket(ID_ACTOR_EQUIPMENT)->Send(); +} + void LocalActor::sendDeath(char newDeathState) { deathState = newDeathState; diff --git a/apps/openmw/mwmp/LocalActor.hpp b/apps/openmw/mwmp/LocalActor.hpp index 59dce27cf..2d4279409 100644 --- a/apps/openmw/mwmp/LocalActor.hpp +++ b/apps/openmw/mwmp/LocalActor.hpp @@ -22,9 +22,10 @@ namespace mwmp void updateAnimPlay(); void updateSpeech(); void updateStatsDynamic(bool forceUpdate); - void updateEquipment(bool forceUpdate); + void updateEquipment(bool forceUpdate, bool sendImmediately = false); void updateAttackOrCast(); + void sendEquipment(); void sendDeath(char newDeathState); MWWorld::Ptr getPtr(); diff --git a/apps/openmw/mwmp/ObjectList.cpp b/apps/openmw/mwmp/ObjectList.cpp index 5e3959213..c94de9d46 100644 --- a/apps/openmw/mwmp/ObjectList.cpp +++ b/apps/openmw/mwmp/ObjectList.cpp @@ -249,6 +249,7 @@ void ObjectList::editContainers(MWWorld::CellStore* cellStore) { MWWorld::InventoryStore& invStore = ptrFound.getClass().getInventoryStore(ptrFound); invStore.autoEquip(ptrFound); + mwmp::Main::get().getCellController()->getLocalActor(ptrFound)->updateEquipment(true, true); } // If this container was open for us, update its view