Merge branch 'activescripts' into 'master'

Mark scripts on newly scripted, active objects as active

See merge request OpenMW/openmw!4785
This commit is contained in:
psi29a 2025-07-17 14:21:45 +00:00
commit eb67d1a1fb
3 changed files with 12 additions and 6 deletions

View File

@ -235,14 +235,17 @@ namespace MWLua
&mOnSkillLevelUp }); &mOnSkillLevelUp });
} }
void LocalScripts::setActive(bool active) void LocalScripts::setActive(bool active, bool callHandlers)
{ {
mData.mIsActive = active; mData.mIsActive = active;
if (callHandlers)
{
if (active) if (active)
callEngineHandlers(mOnActiveHandlers); callEngineHandlers(mOnActiveHandlers);
else else
callEngineHandlers(mOnInactiveHandlers); callEngineHandlers(mOnInactiveHandlers);
} }
}
void LocalScripts::applyStatsCache() void LocalScripts::applyStatsCache()
{ {

View File

@ -67,7 +67,7 @@ namespace MWLua
MWBase::LuaManager::ActorControls* getActorControls() { return &mData.mControls; } MWBase::LuaManager::ActorControls* getActorControls() { return &mData.mControls; }
const MWWorld::Ptr& getPtrOrEmpty() const { return mData.ptrOrEmpty(); } const MWWorld::Ptr& getPtrOrEmpty() const { return mData.ptrOrEmpty(); }
void setActive(bool active); void setActive(bool active, bool callHandlers = true);
bool isActive() const override { return mData.mIsActive; } bool isActive() const override { return mData.mIsActive; }
void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); } void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); }
void onActivated(const LObject& actor) { callEngineHandlers(mOnActivatedHandlers, actor); } void onActivated(const LObject& actor) { callEngineHandlers(mOnActivatedHandlers, actor); }

View File

@ -540,8 +540,11 @@ namespace MWLua
localScripts = createLocalScripts(ptr); localScripts = createLocalScripts(ptr);
localScripts->addAutoStartedScripts(); localScripts->addAutoStartedScripts();
if (ptr.isInCell() && MWBase::Environment::get().getWorldScene()->isCellActive(*ptr.getCell())) if (ptr.isInCell() && MWBase::Environment::get().getWorldScene()->isCellActive(*ptr.getCell()))
{
localScripts->setActive(true, false);
mActiveLocalScripts.insert(localScripts); mActiveLocalScripts.insert(localScripts);
} }
}
localScripts->addCustomScript(scriptId, initData); localScripts->addCustomScript(scriptId, initData);
} }