don't use detour, check size of name

This commit is contained in:
m 2023-05-13 16:32:50 -05:00
parent 4fe501cf80
commit 966458a129
2 changed files with 19 additions and 6 deletions

View File

@ -15,7 +15,6 @@ namespace script
constexpr size_t GSC_MAGIC = 0x1C000A0D43534780;
utils::hook::detour db_findxassetheader_hook;
utils::hook::detour load_gametype_script_hook;
utils::hook::detour gscr_get_bgb_remaining_hook;
std::unordered_map<std::string, game::RawFile*> loaded_scripts;
@ -51,14 +50,26 @@ namespace script
name.erase(i, host_path.length());
}
auto base_name = name;
if (utils::string::ends_with(name, ".gsc"))
{
base_name = name.substr(0, name.size() - 4); // .gsc suffix will be readded by Scr_LoadScript
}
if (base_name.size() < 1)
{
printf("Not loading GSC script '%s' due to invalid name.\n", name.data());
return;
}
auto* rawfile = allocator.allocate<game::RawFile>();
rawfile->name = name.data();
rawfile->name = name.data(); // use script name with .gsc suffix for FindXAssetHeader hook
rawfile->buffer = file_string;
rawfile->len = static_cast<int>(data.length());
loaded_scripts[name] = rawfile;
game::Scr_LoadScript(game::SCRIPTINSTANCE_SERVER, name.substr(0, name.size() - 4).data()); // .gsc suffix will be readded by Scr_LoadScript
game::Scr_LoadScript(game::SCRIPTINSTANCE_SERVER, base_name.data());
}
void load_scripts_folder(const std::string& script_dir)
@ -122,11 +133,11 @@ namespace script
{
if (!game::Com_IsInGame() || game::Com_IsRunningUILevel())
{
load_gametype_script_hook.invoke<void>();
game::GScr_LoadGametypeScript();
return;
}
load_gametype_script_hook.invoke<void>();
game::GScr_LoadGametypeScript();
load_scripts();
}
@ -149,7 +160,7 @@ namespace script
db_findxassetheader_hook.create(game::select(0x141420ED0, 0x1401D5FB0), db_findxassetheader_stub);
// Load our scripts when the gametype script is loaded
load_gametype_script_hook.create(game::select(0x141AAD850, 0x1402D7140), load_gametype_script_stub);
utils::hook::call(game::select(0x141AAF37C, 0x1402D8C7F), load_gametype_script_stub);
// Force GSC checksums to be valid
utils::hook::call(game::select(0x1408F2E5D, 0x1400E2D22), server_script_checksum_stub);

View File

@ -216,6 +216,8 @@ namespace game
0x1422E9410, 0x1405811E0
};
WEAK symbol<void()> GScr_LoadGametypeScript{0x141AAD850, 0x1402D7140};
// Variables
WEAK symbol<cmd_function_s> cmd_functions{0x15689DF58, 0x14946F860};
WEAK symbol<CmdArgs> sv_cmd_args{0x15689AE30, 0x14944C740};