respawning npc respawns in origin cell

This commit is contained in:
Kuyondo 2025-05-23 18:15:24 +08:00
parent b7a48e1d78
commit 2df7ded814
3 changed files with 13 additions and 1 deletions

View File

@ -1427,7 +1427,8 @@ namespace MWClass
ptr.getRefData().setCustomData(nullptr);
// Reset to original position
MWBase::Environment::get().getWorld()->moveObject(ptr, ptr.getCellRef().getPosition().asVec3());
MWBase::Environment::get().getWorld()->moveObject(
ptr, ptr.getCell()->getOriginCell(ptr), ptr.getCellRef().getPosition().asVec3());
MWBase::Environment::get().getWorld()->rotateObject(
ptr, ptr.getCellRef().getPosition().asRotationVec3(), MWBase::RotationFlag_none);
}

View File

@ -1354,6 +1354,15 @@ namespace MWWorld
return {};
}
CellStore* MWWorld::CellStore::getOriginCell(const Ptr& object) const
{
MovedRefTracker::const_iterator found = mMovedHere.find(object.getBase());
if (found != mMovedHere.end())
return found->second;
return object.getCell();
}
Ptr CellStore::getPtr(ESM::RefId id)
{
if (mState == CellStore::State_Unloaded)

View File

@ -338,6 +338,8 @@ namespace MWWorld
Ptr getMovedActor(int actorId) const;
CellStore* getOriginCell(const Ptr& object) const;
Ptr getPtr(ESM::RefId id);
private: