1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-12-14 18:43:06 +00:00

[Lua] core.getGMST returns nil if there is no such game setting

This commit is contained in:
Petr Mikheev 2023-06-11 22:15:55 +02:00
parent 96399b3d23
commit 256db78c6c

View file

@ -131,16 +131,28 @@ namespace MWLua
addTimeBindings(api, context, false); addTimeBindings(api, context, false);
api["magic"] = initCoreMagicBindings(context); api["magic"] = initCoreMagicBindings(context);
api["l10n"] = LuaUtil::initL10nLoader(lua->sol(), MWBase::Environment::get().getL10nManager()); api["l10n"] = LuaUtil::initL10nLoader(lua->sol(), MWBase::Environment::get().getL10nManager());
const MWWorld::Store<ESM::GameSetting>* gmst const MWWorld::Store<ESM::GameSetting>* gmstStore
= &MWBase::Environment::get().getESMStore()->get<ESM::GameSetting>(); = &MWBase::Environment::get().getESMStore()->get<ESM::GameSetting>();
api["getGMST"] = [lua = context.mLua, gmst](const std::string& setting) -> sol::object { api["getGMST"] = [lua = context.mLua, gmstStore](const std::string& setting) -> sol::object {
const ESM::Variant& value = gmst->find(setting)->mValue; const ESM::GameSetting* gmst = gmstStore->search(setting);
if (value.getType() == ESM::VT_String) if (gmst == nullptr)
return sol::make_object<std::string>(lua->sol(), value.getString()); return sol::nil;
else if (value.getType() == ESM::VT_Int) const ESM::Variant& value = gmst->mValue;
return sol::make_object<int>(lua->sol(), value.getInteger()); switch (value.getType())
else {
return sol::make_object<float>(lua->sol(), value.getFloat()); case ESM::VT_Float:
return sol::make_object<float>(lua->sol(), value.getFloat());
case ESM::VT_Short:
case ESM::VT_Long:
case ESM::VT_Int:
return sol::make_object<int>(lua->sol(), value.getInteger());
case ESM::VT_String:
return sol::make_object<std::string>(lua->sol(), value.getString());
case ESM::VT_Unknown:
case ESM::VT_None:
break;
}
return sol::nil;
}; };
sol::table skill(context.mLua->sol(), sol::create); sol::table skill(context.mLua->sol(), sol::create);