From 34db360fa1aaa87ffc5fcc8094252dcb803f132d Mon Sep 17 00:00:00 2001 From: Federico Cecchetto Date: Wed, 15 Sep 2021 21:36:20 +0200 Subject: [PATCH] Start lua on player spawn --- src/client/component/scripting.cpp | 16 +++++----------- src/client/game/scripting/lua/context.cpp | 1 + 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/client/component/scripting.cpp b/src/client/component/scripting.cpp index 671bc46b..c2d590c5 100644 --- a/src/client/component/scripting.cpp +++ b/src/client/component/scripting.cpp @@ -8,6 +8,7 @@ #include "game/scripting/event.hpp" #include "game/scripting/functions.hpp" +#include "game/scripting/execution.hpp" #include "game/scripting/lua/engine.hpp" #include @@ -21,8 +22,8 @@ namespace scripting { utils::hook::detour vm_notify_hook; - utils::hook::detour scr_load_level_hook; utils::hook::detour g_shutdown_game_hook; + utils::hook::detour player_spawn_hook; utils::hook::detour scr_add_class_field_hook; @@ -52,21 +53,15 @@ namespace scripting vm_notify_hook.invoke(notify_list_owner_id, string_value, top); } - void scr_load_level_stub() + void player_spawn_stub(const game::gentity_s* player) { - scr_load_level_hook.invoke(); + player_spawn_hook.invoke(player); lua::engine::start(); } void g_shutdown_game_stub(const int free_scripts) { lua::engine::stop(); - - if (!free_scripts) - { - lua::engine::start(); - } - g_shutdown_game_hook.invoke(free_scripts); } @@ -99,7 +94,6 @@ namespace scripting { const auto function_name = scripting::find_token(threadName); script_function_table[current_file][function_name] = codePos; - scr_set_thread_position_hook.invoke(threadName, codePos); } } @@ -111,8 +105,8 @@ namespace scripting { vm_notify_hook.create(game::base_address + 0x5CC450, vm_notify_stub); - scr_load_level_hook.create(game::base_address + 0x4C7EB0, scr_load_level_stub); g_shutdown_game_hook.create(game::base_address + 0x4CBAD0, g_shutdown_game_stub); + player_spawn_hook.create(game::base_address + 0x4B0710, player_spawn_stub); scr_add_class_field_hook.create(game::base_address + 0x5C2C30, scr_add_class_field_stub); scr_set_thread_position_hook.create(game::base_address + 0x5BC7E0, scr_set_thread_position_stub); diff --git a/src/client/game/scripting/lua/context.cpp b/src/client/game/scripting/lua/context.cpp index 09e95902..ca065592 100644 --- a/src/client/game/scripting/lua/context.cpp +++ b/src/client/game/scripting/lua/context.cpp @@ -31,6 +31,7 @@ namespace scripting::lua void setup_entity_type(sol::state& state, event_handler& handler, scheduler& scheduler) { state["level"] = entity{*game::levelEntityId}; + state["player"] = call("getentbynum", {0}).as(); auto vector_type = state.new_usertype("vector", sol::constructors()); vector_type["x"] = sol::property(&vector::get_x, &vector::set_x);