mirror of
https://github.com/OpenMW/openmw.git
synced 2025-05-23 22:11:31 +00:00
Merge branch 'fix_7420' into 'master'
Fix #7420 (Local scripts on items cause the game to crash when activated) Closes #7420 See merge request OpenMW/openmw!3131
This commit is contained in:
commit
428642d2cf
5 changed files with 7 additions and 6 deletions
|
@ -63,7 +63,7 @@ namespace MWLua
|
||||||
LocalScripts(LuaUtil::LuaState* lua, const LObject& obj);
|
LocalScripts(LuaUtil::LuaState* lua, const LObject& obj);
|
||||||
|
|
||||||
MWBase::LuaManager::ActorControls* getActorControls() { return &mData.mControls; }
|
MWBase::LuaManager::ActorControls* getActorControls() { return &mData.mControls; }
|
||||||
const MWWorld::Ptr& getPtr() const { return mData.ptr(); }
|
const MWWorld::Ptr& getPtrOrEmpty() const { return mData.ptrOrEmpty(); }
|
||||||
|
|
||||||
void setActive(bool active);
|
void setActive(bool active);
|
||||||
void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); }
|
void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); }
|
||||||
|
|
|
@ -141,8 +141,9 @@ namespace MWLua
|
||||||
|
|
||||||
mWorldView.update();
|
mWorldView.update();
|
||||||
|
|
||||||
std::erase_if(mActiveLocalScripts,
|
std::erase_if(mActiveLocalScripts, [](const LocalScripts* l) {
|
||||||
[](const LocalScripts* l) { return l->getPtr().isEmpty() || l->getPtr().getRefData().isDeleted(); });
|
return l->getPtrOrEmpty().isEmpty() || l->getPtrOrEmpty().getRefData().isDeleted();
|
||||||
|
});
|
||||||
|
|
||||||
mGlobalScripts.statsNextFrame();
|
mGlobalScripts.statsNextFrame();
|
||||||
for (LocalScripts* scripts : mActiveLocalScripts)
|
for (LocalScripts* scripts : mActiveLocalScripts)
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace MWLua
|
||||||
using SafePtr::SafePtr;
|
using SafePtr::SafePtr;
|
||||||
const MWWorld::Ptr& ptr() const
|
const MWWorld::Ptr& ptr() const
|
||||||
{
|
{
|
||||||
const MWWorld::Ptr& res = ptrOrNull();
|
const MWWorld::Ptr& res = ptrOrEmpty();
|
||||||
if (res.isEmpty())
|
if (res.isEmpty())
|
||||||
throw std::runtime_error("Object is not available: " + id().toString());
|
throw std::runtime_error("Object is not available: " + id().toString());
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -152,7 +152,7 @@ namespace MWLua
|
||||||
return sol::nullopt;
|
return sol::nullopt;
|
||||||
return Misc::StringUtils::lowerCase(contentList[contentFileIndex]);
|
return Misc::StringUtils::lowerCase(contentList[contentFileIndex]);
|
||||||
});
|
});
|
||||||
objectT["isValid"] = [](const ObjectT& o) { return !o.ptrOrNull().isEmpty(); };
|
objectT["isValid"] = [](const ObjectT& o) { return !o.ptrOrEmpty().isEmpty(); };
|
||||||
objectT["recordId"] = sol::readonly_property(
|
objectT["recordId"] = sol::readonly_property(
|
||||||
[](const ObjectT& o) -> std::string { return o.ptr().getCellRef().getRefId().serializeText(); });
|
[](const ObjectT& o) -> std::string { return o.ptr().getCellRef().getRefId().serializeText(); });
|
||||||
objectT["cell"] = sol::readonly_property([](const ObjectT& o) -> sol::optional<Cell<ObjectT>> {
|
objectT["cell"] = sol::readonly_property([](const ObjectT& o) -> sol::optional<Cell<ObjectT>> {
|
||||||
|
|
|
@ -165,7 +165,7 @@ namespace MWWorld
|
||||||
|
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
|
|
||||||
const Ptr& ptrOrNull() const
|
const Ptr& ptrOrEmpty() const
|
||||||
{
|
{
|
||||||
update();
|
update();
|
||||||
return mPtr;
|
return mPtr;
|
||||||
|
|
Loading…
Reference in a new issue