diff --git a/apps/openmw/mwmp/Cell.cpp b/apps/openmw/mwmp/Cell.cpp index 9a7142e76..10d9e75dc 100644 --- a/apps/openmw/mwmp/Cell.cpp +++ b/apps/openmw/mwmp/Cell.cpp @@ -462,6 +462,9 @@ void Cell::initializeLocalActors() // If this Ptr is lacking a unique index, ignore it if (ptr.getCellRef().getRefNum().mIndex == 0 && ptr.getCellRef().getMpNum() == 0) continue; + // If this Ptr is disabled or deleted, ignore it + if (!ptr.getRefData().isEnabled() || ptr.getRefData().isDeleted()) continue; + std::string mapIndex = Main::get().getCellController()->generateMapIndex(ptr); // Only initialize this actor if it isn't already initialized diff --git a/apps/openmw/mwmp/ObjectList.cpp b/apps/openmw/mwmp/ObjectList.cpp index 96b104f1e..5e3959213 100644 --- a/apps/openmw/mwmp/ObjectList.cpp +++ b/apps/openmw/mwmp/ObjectList.cpp @@ -620,7 +620,16 @@ void ObjectList::setObjectStates(MWWorld::CellStore* cellStore) ptrFound.getCellRef().getRefNum(), ptrFound.getCellRef().getMpNum()); if (baseObject.objectState) + { MWBase::Environment::get().getWorld()->enable(ptrFound); + + // Is this an actor in a cell where we're the authority? If so, initialize it as + // a LocalActor + if (ptrFound.getClass().isActor() && mwmp::Main::get().getCellController()->hasLocalAuthority(*cellStore->getCell())) + { + mwmp::Main::get().getCellController()->getCell(*cellStore->getCell())->initializeLocalActor(ptrFound); + } + } else MWBase::Environment::get().getWorld()->disable(ptrFound); }