From d362a8ade350cd7dad0170f7a9e5aca67fc84ff7 Mon Sep 17 00:00:00 2001 From: quaK <38787176+Joelrau@users.noreply.github.com> Date: Mon, 15 Mar 2021 04:33:26 +0200 Subject: [PATCH] Fixes fix lua crashes. Co-Authored-By: fed <58637860+fedddddd@users.noreply.github.com> --- src/client/game/scripting/lua/context.cpp | 17 +++++++++-------- .../game/scripting/lua/value_conversion.cpp | 19 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/client/game/scripting/lua/context.cpp b/src/client/game/scripting/lua/context.cpp index 42265e9..262d9d6 100644 --- a/src/client/game/scripting/lua/context.cpp +++ b/src/client/game/scripting/lua/context.cpp @@ -105,7 +105,7 @@ namespace scripting::lua for (auto arg : va) { - arguments.push_back(convert(arg)); + arguments.push_back(convert({s, arg})); } return convert(s, entity.call(name, arguments)); @@ -119,9 +119,9 @@ namespace scripting::lua { return convert(s, entity.get(constant)); }, - [constant](const entity& entity, const sol::lua_value& value) + [constant](const entity& entity, const sol::this_state s, const sol::lua_value& value) { - entity.set(constant, convert(value)); + entity.set(constant, convert({s, value})); }); } @@ -136,13 +136,14 @@ namespace scripting::lua return convert(s, entity.get(field)); }; - entity_type["notify"] = [](const entity& entity, const std::string& event, sol::variadic_args va) + entity_type["notify"] = [](const entity& entity, const sol::this_state s, const std::string& event, + sol::variadic_args va) { std::vector arguments{}; for (auto arg : va) { - arguments.push_back(convert(arg)); + arguments.push_back(convert({s, arg})); } notify(entity, event, arguments); @@ -179,7 +180,7 @@ namespace scripting::lua for (auto arg : va) { - arguments.push_back(convert(arg)); + arguments.push_back(convert({s, arg})); } return convert(s, entity.call(function, arguments)); @@ -211,7 +212,7 @@ namespace scripting::lua for (auto arg : va) { - arguments.push_back(convert(arg)); + arguments.push_back(convert({s, arg})); } return convert(s, call(name, arguments)); @@ -225,7 +226,7 @@ namespace scripting::lua for (auto arg : va) { - arguments.push_back(convert(arg)); + arguments.push_back(convert({s, arg})); } return convert(s, call(function, arguments)); diff --git a/src/client/game/scripting/lua/value_conversion.cpp b/src/client/game/scripting/lua/value_conversion.cpp index 64a21e9..6cbca60 100644 --- a/src/client/game/scripting/lua/value_conversion.cpp +++ b/src/client/game/scripting/lua/value_conversion.cpp @@ -8,18 +8,19 @@ namespace scripting::lua struct array_value { int index; - sol::lua_value value{}; + script_value value; }; sol::lua_value entity_to_array(lua_State* state, unsigned int id) { auto table = sol::table::create(state); + auto metatable = sol::table::create(state); std::unordered_map values; const auto offset = 64000 * (id & 3); - auto current = game::scr_VarGlob->objectVariableChildren[id].firstChild; + auto current = game::scr_VarGlob->objectVariableChildren[id].firstChild; auto idx = 1; for (auto i = offset + current; current; i = offset + current) @@ -45,7 +46,7 @@ namespace scripting::lua array_value value; value.index = i; - value.value = convert(state, script_value(variable)); + value.value = variable; values[key] = value; @@ -64,9 +65,7 @@ namespace scripting::lua return _keys; }; - auto metatable = sol::table::create(state); - - metatable[sol::meta_function::new_index] = [state, values](const sol::table t, const sol::this_state s, + metatable[sol::meta_function::new_index] = [values](const sol::table t, const sol::this_state s, const sol::lua_value& key_value, const sol::lua_value& value) { const auto key = key_value.is() @@ -78,14 +77,14 @@ namespace scripting::lua return; } - const auto variable = convert(value).get_raw(); + const auto variable = convert({s, value}).get_raw(); const auto i = values.at(key).index; game::scr_VarGlob->childVariableValue[i].type = (char)variable.type; game::scr_VarGlob->childVariableValue[i].u.u = variable.u; }; - metatable[sol::meta_function::index] = [state, values](const sol::table t, const sol::this_state s, + metatable[sol::meta_function::index] = [values](const sol::table t, const sol::this_state s, const sol::lua_value& key_value) { const auto key = key_value.is() @@ -97,7 +96,7 @@ namespace scripting::lua return sol::lua_value{}; } - return values.at(key).value; + return convert(s, values.at(key).value); }; metatable[sol::meta_function::length] = [values]() @@ -107,7 +106,7 @@ namespace scripting::lua table[sol::metatable_key] = metatable; - return table; + return { state, table }; } }