diff --git a/src/client/component/scripting.cpp b/src/client/component/scripting.cpp index a4bc07e..642d61c 100644 --- a/src/client/component/scripting.cpp +++ b/src/client/component/scripting.cpp @@ -7,6 +7,7 @@ #include "game/scripting/entity.hpp" #include "game/scripting/event.hpp" #include "game/scripting/lua/engine.hpp" +#include "game/scripting/execution.hpp" #include "scheduler.hpp" @@ -35,6 +36,11 @@ namespace scripting e.arguments.emplace_back(*value); } + if (e.name == "connected") + { + scripting::clear_entity_fields(e.entity); + } + lua::engine::notify(e); } } diff --git a/src/client/game/scripting/execution.cpp b/src/client/game/scripting/execution.cpp index be5bebe..2b4d354 100644 --- a/src/client/game/scripting/execution.cpp +++ b/src/client/game/scripting/execution.cpp @@ -125,7 +125,25 @@ namespace scripting void set_custom_field(const entity& entity, const std::string& field, const script_value& value) { - custom_fields[entity.get_entity_id()].insert(std::make_pair(field, value)); + const auto id = entity.get_entity_id(); + + if (custom_fields[id].find(field) != custom_fields[id].end()) + { + custom_fields[id][field] = value; + return; + } + + custom_fields[id].insert(std::make_pair(field, value)); + } + + void clear_entity_fields(const entity& entity) + { + const auto id = entity.get_entity_id(); + + if (custom_fields.find(id) != custom_fields.end()) + { + custom_fields[id].clear(); + } } void clear_custom_fields() diff --git a/src/client/game/scripting/execution.hpp b/src/client/game/scripting/execution.hpp index 235409f..027d2a4 100644 --- a/src/client/game/scripting/execution.hpp +++ b/src/client/game/scripting/execution.hpp @@ -21,6 +21,7 @@ namespace scripting return call(name, arguments).as(); } + void clear_entity_fields(const entity& entity); void clear_custom_fields(); void set_entity_field(const entity& entity, const std::string& field, const script_value& value); diff --git a/src/client/game/scripting/lua/context.cpp b/src/client/game/scripting/lua/context.cpp index dd71dd4..42265e9 100644 --- a/src/client/game/scripting/lua/context.cpp +++ b/src/client/game/scripting/lua/context.cpp @@ -185,6 +185,17 @@ namespace scripting::lua return convert(s, entity.call(function, arguments)); }; + entity_type[sol::meta_function::new_index] = [](const entity& entity, const std::string& field, + const sol::lua_value& value) + { + entity.set(field, convert(value)); + }; + + entity_type[sol::meta_function::index] = [](const entity& entity, const sol::this_state s, const std::string& field) + { + return convert(s, entity.get(field)); + }; + struct game { };