Start lua on player spawn
This commit is contained in:
parent
65cfeeb8c8
commit
34db360fa1
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "game/scripting/event.hpp"
|
#include "game/scripting/event.hpp"
|
||||||
#include "game/scripting/functions.hpp"
|
#include "game/scripting/functions.hpp"
|
||||||
|
#include "game/scripting/execution.hpp"
|
||||||
#include "game/scripting/lua/engine.hpp"
|
#include "game/scripting/lua/engine.hpp"
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
@ -21,8 +22,8 @@ namespace scripting
|
|||||||
{
|
{
|
||||||
utils::hook::detour vm_notify_hook;
|
utils::hook::detour vm_notify_hook;
|
||||||
|
|
||||||
utils::hook::detour scr_load_level_hook;
|
|
||||||
utils::hook::detour g_shutdown_game_hook;
|
utils::hook::detour g_shutdown_game_hook;
|
||||||
|
utils::hook::detour player_spawn_hook;
|
||||||
|
|
||||||
utils::hook::detour scr_add_class_field_hook;
|
utils::hook::detour scr_add_class_field_hook;
|
||||||
|
|
||||||
@ -52,21 +53,15 @@ namespace scripting
|
|||||||
vm_notify_hook.invoke<void>(notify_list_owner_id, string_value, top);
|
vm_notify_hook.invoke<void>(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<void>();
|
player_spawn_hook.invoke<void>(player);
|
||||||
lua::engine::start();
|
lua::engine::start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void g_shutdown_game_stub(const int free_scripts)
|
void g_shutdown_game_stub(const int free_scripts)
|
||||||
{
|
{
|
||||||
lua::engine::stop();
|
lua::engine::stop();
|
||||||
|
|
||||||
if (!free_scripts)
|
|
||||||
{
|
|
||||||
lua::engine::start();
|
|
||||||
}
|
|
||||||
|
|
||||||
g_shutdown_game_hook.invoke<void>(free_scripts);
|
g_shutdown_game_hook.invoke<void>(free_scripts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +94,6 @@ namespace scripting
|
|||||||
{
|
{
|
||||||
const auto function_name = scripting::find_token(threadName);
|
const auto function_name = scripting::find_token(threadName);
|
||||||
script_function_table[current_file][function_name] = codePos;
|
script_function_table[current_file][function_name] = codePos;
|
||||||
|
|
||||||
scr_set_thread_position_hook.invoke<void>(threadName, codePos);
|
scr_set_thread_position_hook.invoke<void>(threadName, codePos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,8 +105,8 @@ namespace scripting
|
|||||||
{
|
{
|
||||||
vm_notify_hook.create(game::base_address + 0x5CC450, vm_notify_stub);
|
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);
|
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_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);
|
scr_set_thread_position_hook.create(game::base_address + 0x5BC7E0, scr_set_thread_position_stub);
|
||||||
|
@ -31,6 +31,7 @@ namespace scripting::lua
|
|||||||
void setup_entity_type(sol::state& state, event_handler& handler, scheduler& scheduler)
|
void setup_entity_type(sol::state& state, event_handler& handler, scheduler& scheduler)
|
||||||
{
|
{
|
||||||
state["level"] = entity{*game::levelEntityId};
|
state["level"] = entity{*game::levelEntityId};
|
||||||
|
state["player"] = call("getentbynum", {0}).as<entity>();
|
||||||
|
|
||||||
auto vector_type = state.new_usertype<vector>("vector", sol::constructors<vector(float, float, float)>());
|
auto vector_type = state.new_usertype<vector>("vector", sol::constructors<vector(float, float, float)>());
|
||||||
vector_type["x"] = sol::property(&vector::get_x, &vector::set_x);
|
vector_type["x"] = sol::property(&vector::get_x, &vector::set_x);
|
||||||
|
Loading…
Reference in New Issue
Block a user