mirror of
https://github.com/XLabsProject/s1x-client.git
synced 2023-08-02 15:02:12 +02:00
Fixes
fix lua crashes. Co-Authored-By: fed <58637860+fedddddd@users.noreply.github.com>
This commit is contained in:
parent
993a0ce70e
commit
d362a8ade3
@ -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<script_value> 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));
|
||||
|
@ -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<std::string, array_value> 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<int>()
|
||||
@ -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<int>()
|
||||
@ -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 };
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user