From ea5e02b43b1d9e3a75b321eb733be54f7bcfcc16 Mon Sep 17 00:00:00 2001 From: fed <58637860+fedddddd@users.noreply.github.com> Date: Sat, 5 Nov 2022 00:04:40 +0100 Subject: [PATCH] Cleanup --- src/client/game/scripting/lua/context.cpp | 6 +- .../game/scripting/lua/value_conversion.cpp | 148 ------------------ .../game/scripting/lua/value_conversion.hpp | 2 - 3 files changed, 2 insertions(+), 154 deletions(-) diff --git a/src/client/game/scripting/lua/context.cpp b/src/client/game/scripting/lua/context.cpp index c2a5619d..016eaf0c 100644 --- a/src/client/game/scripting/lua/context.cpp +++ b/src/client/game/scripting/lua/context.cpp @@ -428,14 +428,12 @@ namespace scripting::lua entity_type["struct"] = sol::property([](const entity& entity, const sol::this_state s) { - const auto id = entity.get_entity_id(); - return scripting::lua::entity_to_struct(s, id); + return entity; }); entity_type["getstruct"] = [](const entity& entity, const sol::this_state s) { - const auto id = entity.get_entity_id(); - return scripting::lua::entity_to_struct(s, id); + return entity; }; entity_type["scriptcall"] = [](const entity& entity, const sol::this_state s, const std::string& filename, diff --git a/src/client/game/scripting/lua/value_conversion.cpp b/src/client/game/scripting/lua/value_conversion.cpp index d9980827..d0cd2312 100644 --- a/src/client/game/scripting/lua/value_conversion.cpp +++ b/src/client/game/scripting/lua/value_conversion.cpp @@ -8,110 +8,6 @@ namespace scripting::lua { namespace { - struct array_value - { - int index; - 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 = 0xA000 * (id & 3); - - auto current = game::scr_VarGlob->objectVariableChildren[id].firstChild; - auto idx = 1; - - for (auto i = offset + current; current; i = offset + current) - { - const auto var = game::scr_VarGlob->childVariableValue[i]; - - if (var.type == game::SCRIPT_NONE) - { - current = var.nextSibling; - continue; - } - - const auto string_value = (game::scr_string_t)((unsigned __int8)var.name_lo + (var.k.keys.name_hi << 8)); - const auto* str = game::SL_ConvertToString(string_value); - - std::string key = string_value < 0x40000 && str - ? str - : std::to_string(idx++); - - game::VariableValue variable{}; - variable.type = var.type; - variable.u = var.u.u; - - array_value value; - value.index = i; - value.value = variable; - - values[key] = value; - - current = var.nextSibling; - } - - table["getkeys"] = [values]() - { - std::vector _keys; - - for (const auto& entry : values) - { - _keys.push_back(entry.first); - } - - return _keys; - }; - - 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() - ? std::to_string(key_value.as()) - : key_value.as(); - - if (values.find(key) == values.end()) - { - return; - } - - 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] = [values](const sol::table t, const sol::this_state s, - const sol::lua_value& key_value) - { - const auto key = key_value.is() - ? std::to_string(key_value.as()) - : key_value.as(); - - if (values.find(key) == values.end()) - { - return sol::lua_value{s, sol::lua_nil}; - } - - return convert(s, values.at(key).value); - }; - - metatable[sol::meta_function::length] = [values]() - { - return values.size(); - }; - - table[sol::metatable_key] = metatable; - - return {state, table}; - } - bool is_istring(const sol::lua_value& value) { if (!value.is()) @@ -170,50 +66,6 @@ namespace scripting::lua } } - sol::lua_value entity_to_struct(lua_State* state, unsigned int parent_id) - { - auto table = sol::table::create(state); - auto metatable = sol::table::create(state); - - table["getentity"] = [parent_id]() - { - return entity(parent_id); - }; - - metatable[sol::meta_function::new_index] = [parent_id](const sol::table t, const sol::this_state s, - const sol::lua_value& field, const sol::lua_value& value) - { - const auto new_variable = convert({s, value}); - if (field.is()) - { - scripting::set_object_variable(parent_id, field.as(), new_variable); - } - else if (field.is()) - { - scripting::set_object_variable(parent_id, field.as(), new_variable); - } - }; - - metatable[sol::meta_function::index] = [parent_id](const sol::table t, const sol::this_state s, - const sol::lua_value& field) - { - if (field.is()) - { - return convert(s, scripting::get_object_variable(parent_id, field.as())); - } - else if (field.is()) - { - return convert(s, scripting::get_object_variable(parent_id, field.as())); - } - - return sol::lua_value{s, sol::lua_nil}; - }; - - table[sol::metatable_key] = metatable; - - return {state, table}; - } - script_value convert(const sol::lua_value& value) { if (value.is()) diff --git a/src/client/game/scripting/lua/value_conversion.hpp b/src/client/game/scripting/lua/value_conversion.hpp index 93256f80..27acaad3 100644 --- a/src/client/game/scripting/lua/value_conversion.hpp +++ b/src/client/game/scripting/lua/value_conversion.hpp @@ -4,8 +4,6 @@ namespace scripting::lua { - sol::lua_value entity_to_struct(lua_State* state, unsigned int parent_id); - script_value convert(const sol::lua_value& value); sol::lua_value convert(lua_State* state, const script_value& value); }