Merge pull request #284 from momo5502/feature/steam-update
Adapt to the latest steam update
This commit is contained in:
commit
25510cdece
@ -134,27 +134,27 @@ namespace auth
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p(0x141E19D7D_g, 0x141E19DCB_g);
|
p(0x141E19CED_g, 0x141E19D3B_g);
|
||||||
p(0x141EB2D06_g, 0x141EB2D46_g);
|
p(0x141EB2C76_g, 0x141EB2CB6_g);
|
||||||
p(0x141EB2E3D_g, 0x141EB2E82_g);
|
p(0x141EB2DAD_g, 0x141EB2DF2_g);
|
||||||
p(0x141EB3CC5_g, 0x141EB3D06_g);
|
p(0x141EB3C35_g, 0x141EB3C76_g);
|
||||||
p(0x141E19B60_g, 0x141E19BB6_g);
|
p(0x141E19AD0_g, 0x141E19B26_g);
|
||||||
//
|
//
|
||||||
p(0x141EB0F78_g, 0x141EB0FB9_g);
|
p(0x141EB0EE8_g, 0x141EB0F29_g);
|
||||||
p(0x141EB1038_g, 0x141EB1079_g);
|
p(0x141EB0FA8_g, 0x141EB0FE9_g);
|
||||||
p(0x141EB25B5_g, 0x141EB2603_g);
|
p(0x141EB2525_g, 0x141EB2573_g);
|
||||||
p(0x141EB26DD_g, 0x141EB2733_g);
|
p(0x141EB264D_g, 0x141EB26A3_g);
|
||||||
p(0x141EB280D_g, 0x141EB2857_g);
|
p(0x141EB277D_g, 0x141EB27C7_g);
|
||||||
|
|
||||||
p(0x141EB2B7A_g, 0x141EB2B8A_g);
|
p(0x141EB2AEA_g, 0x141EB2AFA_g);
|
||||||
p(0x141EB2B91_g, 0x141EB2BC3_g);
|
p(0x141EB2B01_g, 0x141EB2B33_g);
|
||||||
|
|
||||||
p(0x141EB31C7_g, 0x141EB31D7_g);
|
p(0x141EB3137_g, 0x141EB3147_g);
|
||||||
p(0x141EB31DE_g, 0x141EB320F_g);
|
p(0x141EB314E_g, 0x141EB317F_g);
|
||||||
|
|
||||||
p(0x141EB5407_g, 0x141EB544F_g); // ?
|
p(0x141EB5377_g, 0x141EB53BF_g); // ?
|
||||||
p(0x141EB5A22_g, 0x141EB5A65_g);
|
p(0x141EB5992_g, 0x141EB59D5_g);
|
||||||
p(0x141EB7562_g, 0x141EB75A5_g); // ?
|
p(0x141EB74D2_g, 0x141EB7515_g); // ?
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& patch : patches)
|
for (const auto& patch : patches)
|
||||||
|
@ -118,7 +118,7 @@ namespace bots
|
|||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
utils::hook::jump(game::select(0x141653B70, 0x1402732E0), get_bot_name);
|
utils::hook::jump(game::select(0x141653B70, 0x1402732E0), get_bot_name);
|
||||||
utils::hook::call(game::select(0x142249AF7, 0x14052E53A), format_bot_string);
|
utils::hook::call(game::select(0x142249097, 0x14052E53A), format_bot_string);
|
||||||
|
|
||||||
if (!game::is_server())
|
if (!game::is_server())
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@ namespace client_patches
|
|||||||
fix_amd_cpu_stuttering();
|
fix_amd_cpu_stuttering();
|
||||||
|
|
||||||
// Kill microphones for now
|
// Kill microphones for now
|
||||||
utils::hook::set(0x15AAEB254_g, mixer_open_stub);
|
utils::hook::set(0x15AAE9254_g, mixer_open_stub);
|
||||||
|
|
||||||
preload_map_hook.create(0x14135A1E0_g, preload_map_stub);
|
preload_map_hook.create(0x14135A1E0_g, preload_map_stub);
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,8 @@ namespace colors
|
|||||||
template <size_t index>
|
template <size_t index>
|
||||||
void patch_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t a = 255)
|
void patch_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t a = 255)
|
||||||
{
|
{
|
||||||
auto* color_table = reinterpret_cast<uint8_t*>(0x142FF0E20_g);
|
auto* color_table = reinterpret_cast<uint8_t*>(0x142FEFE20_g);
|
||||||
auto* g_color_table = reinterpret_cast<float*>(0x142FB6CF0_g);
|
auto* g_color_table = reinterpret_cast<float*>(0x142FB5CF0_g);
|
||||||
|
|
||||||
uint8_t color_int[4];
|
uint8_t color_int[4];
|
||||||
color_int[0] = r;
|
color_int[0] = r;
|
||||||
@ -36,7 +36,7 @@ namespace colors
|
|||||||
utils::hook::copy(g_color_table + index * 4, color_float, sizeof(color_float));
|
utils::hook::copy(g_color_table + index * 4, color_float, sizeof(color_float));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t get_player_name_stub(const uint64_t client, int client_num, char* buffer, const int size,
|
/*uint64_t get_player_name_stub(const uint64_t client, int client_num, char* buffer, const int size,
|
||||||
const bool has_clan_tag)
|
const bool has_clan_tag)
|
||||||
{
|
{
|
||||||
const auto res = get_player_name_hook.invoke<uint64_t>(client, client_num, buffer, size, has_clan_tag);
|
const auto res = get_player_name_hook.invoke<uint64_t>(client, client_num, buffer, size, has_clan_tag);
|
||||||
@ -48,12 +48,12 @@ namespace colors
|
|||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
const char* get_gamer_tag_stub(const uint64_t num)
|
/*const char* get_gamer_tag_stub(const uint64_t num)
|
||||||
{
|
{
|
||||||
return utils::string::va("^3%s", get_gamer_tag_hook.invoke<const char*>(num));
|
return utils::string::va("^3%s", get_gamer_tag_hook.invoke<const char*>(num));
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
struct component final : client_component
|
struct component final : client_component
|
||||||
@ -67,6 +67,7 @@ namespace colors
|
|||||||
patch_color<5>(32, 197, 255); // 5 - Light Blue
|
patch_color<5>(32, 197, 255); // 5 - Light Blue
|
||||||
patch_color<6>(151, 80, 221); // 6 - Pink
|
patch_color<6>(151, 80, 221); // 6 - Pink
|
||||||
|
|
||||||
|
// Old addresses
|
||||||
//get_player_name_hook.create(0x1413E3140_g, get_player_name_stub);
|
//get_player_name_hook.create(0x1413E3140_g, get_player_name_stub);
|
||||||
//get_gamer_tag_hook.create(0x141EC7370_g, get_gamer_tag_stub);
|
//get_gamer_tag_hook.create(0x141EC7370_g, get_gamer_tag_stub);
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ namespace command
|
|||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
// Disable whitelist
|
// Disable whitelist
|
||||||
utils::hook::jump(game::select(0x1420EF190, 0x1404F9CD0), update_whitelist_stub);
|
utils::hook::jump(game::select(0x1420EE860, 0x1404F9CD0), update_whitelist_stub);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ namespace console
|
|||||||
{
|
{
|
||||||
a.push(rbx);
|
a.push(rbx);
|
||||||
a.mov(eax, 0x8030);
|
a.mov(eax, 0x8030);
|
||||||
a.jmp(game::select(0x142333667, 0x140597527));
|
a.jmp(game::select(0x142332AA7, 0x140597527));
|
||||||
});
|
});
|
||||||
|
|
||||||
static_cast<void(*)(const char*)>(print_func)(message);
|
static_cast<void(*)(const char*)>(print_func)(message);
|
||||||
@ -105,13 +105,13 @@ namespace console
|
|||||||
game::Cbuf_AddText(0, "quit\n");
|
game::Cbuf_AddText(0, "quit\n");
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
default:
|
default:
|
||||||
return utils::hook::invoke<LRESULT>(game::select(0x142333520, 0x1405973E0), hwnd, msg, wparam, lparam);
|
return utils::hook::invoke<LRESULT>(game::select(0x142332960, 0x1405973E0), hwnd, msg, wparam, lparam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT input_line_wnd_proc(const HWND hwnd, const UINT msg, const WPARAM wparam, const LPARAM lparam)
|
LRESULT input_line_wnd_proc(const HWND hwnd, const UINT msg, const WPARAM wparam, const LPARAM lparam)
|
||||||
{
|
{
|
||||||
return utils::hook::invoke<LRESULT>(game::select(0x142333820, 0x1405976E0), hwnd, msg, wparam, lparam);
|
return utils::hook::invoke<LRESULT>(game::select(0x142332C60, 0x1405976E0), hwnd, msg, wparam, lparam);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sys_create_console_stub(const HINSTANCE h_instance)
|
void sys_create_console_stub(const HINSTANCE h_instance)
|
||||||
@ -212,8 +212,8 @@ namespace console
|
|||||||
utils::hook::set<uint8_t>(0x14133D2FE_g, 0xEB); // Always enable ingame console
|
utils::hook::set<uint8_t>(0x14133D2FE_g, 0xEB); // Always enable ingame console
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::hook::jump(game::select(0x1423337F0, 0x1405976B0), queue_message);
|
utils::hook::jump(game::select(0x142332C30, 0x1405976B0), queue_message);
|
||||||
utils::hook::nop(game::select(0x14233380A, 0x1405976CA), 2); // Print from every thread
|
utils::hook::nop(game::select(0x142332C4A, 0x1405976CA), 2); // Print from every thread
|
||||||
|
|
||||||
//const auto self = utils::nt::library::get_by_address(sys_create_console_stub);
|
//const auto self = utils::nt::library::get_by_address(sys_create_console_stub);
|
||||||
//logo = LoadImageA(self.get_handle(), MAKEINTRESOURCEA(IMAGE_LOGO), 0, 0, 0, LR_COPYFROMRESOURCE);
|
//logo = LoadImageA(self.get_handle(), MAKEINTRESOURCEA(IMAGE_LOGO), 0, 0, 0, LR_COPYFROMRESOURCE);
|
||||||
@ -251,7 +251,7 @@ namespace console
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
static utils::hook::detour sys_create_console_hook;
|
static utils::hook::detour sys_create_console_hook;
|
||||||
sys_create_console_hook.create(game::select(0x1423339C0, 0x140597880), sys_create_console_stub);
|
sys_create_console_hook.create(game::select(0x142332E00, 0x140597880), sys_create_console_stub);
|
||||||
|
|
||||||
game::Sys_ShowConsole();
|
game::Sys_ShowConsole();
|
||||||
started = true;
|
started = true;
|
||||||
|
@ -476,28 +476,27 @@ namespace demonware
|
|||||||
{
|
{
|
||||||
server_thread = utils::thread::create_named_thread("Demonware", server_main);
|
server_thread = utils::thread::create_named_thread("Demonware", server_main);
|
||||||
|
|
||||||
|
utils::hook::set<uint8_t>(game::select(0x14293DC69, 0x1407D5879), 0x0); // CURLOPT_SSL_VERIFYPEER
|
||||||
|
utils::hook::set<uint8_t>(game::select(0x15C293850, 0x1407D5865), 0xAF); // CURLOPT_SSL_VERIFYHOST
|
||||||
|
|
||||||
utils::hook::set<uint8_t>(game::select(0x14293E829, 0x1407D5879), 0x0); // CURLOPT_SSL_VERIFYPEER
|
utils::hook::copy_string(game::select(0x1430B8670, 0x140EE4C68), "http://prod.umbrella.demonware.net");
|
||||||
utils::hook::set<uint8_t>(game::select(0x15F3CCFED, 0x1407D5865), 0xAF); // CURLOPT_SSL_VERIFYHOST
|
|
||||||
|
|
||||||
utils::hook::copy_string(game::select(0x1430B96E0, 0x140EE4C68), "http://prod.umbrella.demonware.net");
|
|
||||||
|
|
||||||
if (game::is_server())
|
if (game::is_server())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::hook::copy_string(0x1430B9BE0_g, "http://prod.uno.demonware.net/v1.0");
|
utils::hook::copy_string(0x1430B8B70_g, "http://prod.uno.demonware.net/v1.0");
|
||||||
|
|
||||||
utils::hook::set<uint8_t>(0x1430B9810_g, 0x0); // HTTPS -> HTTP
|
utils::hook::set<uint8_t>(0x1430B87A0_g, 0x0); // HTTPS -> HTTP
|
||||||
utils::hook::copy_string(0x1430B93C8_g, "http://%s:%d/auth/");
|
utils::hook::copy_string(0x1430B8358_g, "http://%s:%d/auth/");
|
||||||
|
|
||||||
utils::hook::set<uint32_t>(0x141EC4B50_g, 0xC3D08948); // Skip publisher file signature stuff
|
utils::hook::set<uint32_t>(0x141EC4AC0_g, 0xC3D08948); // Skip publisher file signature stuff
|
||||||
utils::hook::call(0x141EC458C_g, get_ffotd_name); // Return unlocalized ffotd name
|
utils::hook::call(0x141EC44FC_g, get_ffotd_name); // Return unlocalized ffotd name
|
||||||
utils::hook::set<uint64_t>(0x141F04550_g, 0xC300000001B8); // Kill LPC_File_SafeWrite
|
utils::hook::set<uint64_t>(0x141F04500_g, 0xC300000001B8); // Kill LPC_File_SafeWrite
|
||||||
utils::hook::set<uint64_t>(0x141F03180_g, 0xC300000001B8); // Kill LPC_DeleteStale
|
utils::hook::set<uint64_t>(0x141F03130_g, 0xC300000001B8); // Kill LPC_DeleteStale
|
||||||
|
|
||||||
utils::hook::set<uint8_t>(0x141E0AAAB_g, 0xEB); // Release un-handled reportReward spamming loop
|
utils::hook::set<uint8_t>(0x141E0AA1B_g, 0xEB); // Release un-handled reportReward spamming loop
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_destroy() override
|
void pre_destroy() override
|
||||||
|
@ -202,21 +202,21 @@ namespace dvars
|
|||||||
if (!game::is_server())
|
if (!game::is_server())
|
||||||
{
|
{
|
||||||
scheduler::once(read_archive_dvars, scheduler::pipeline::main);
|
scheduler::once(read_archive_dvars, scheduler::pipeline::main);
|
||||||
dvar_set_variant_hook.create(0x1422C9A90_g, dvar_set_variant_stub);
|
dvar_set_variant_hook.create(0x1422C9030_g, dvar_set_variant_stub);
|
||||||
|
|
||||||
// Show all known dvars in console
|
// Show all known dvars in console
|
||||||
utils::hook::jump(0x1422BD890_g, dvar_for_each_name_stub);
|
utils::hook::jump(0x1422BCE30_g, dvar_for_each_name_stub);
|
||||||
utils::hook::jump(0x1422BD7E0_g, dvar_for_each_name_client_num_stub);
|
utils::hook::jump(0x1422BCD80_g, dvar_for_each_name_client_num_stub);
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduler::once(copy_dvar_names_to_pool, scheduler::pipeline::main);
|
scheduler::once(copy_dvar_names_to_pool, scheduler::pipeline::main);
|
||||||
|
|
||||||
// All dvars are recognized as command
|
// All dvars are recognized as command
|
||||||
utils::hook::nop(game::select(0x14215297A, 0x14050949A), 2);
|
utils::hook::nop(game::select(0x142151F1A, 0x14050949A), 2);
|
||||||
// Show all dvars in dvarlist command
|
// Show all dvars in dvarlist command
|
||||||
utils::hook::nop(game::select(0x142152C87, 0x140509797), 6);
|
utils::hook::nop(game::select(0x142152227, 0x140509797), 6);
|
||||||
// Show all dvars in dvardump command
|
// Show all dvars in dvardump command
|
||||||
utils::hook::nop(game::select(0x142152659, 0x140509179), 6);
|
utils::hook::nop(game::select(0x142151BF9, 0x140509179), 6);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace getinfo
|
|||||||
int get_client_count()
|
int get_client_count()
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
const auto client_states = *reinterpret_cast<uint64_t*>(game::select(0x1576FB318, 0x14A178E98));
|
const auto client_states = *reinterpret_cast<uint64_t*>(game::select(0x1576F9318, 0x14A178E98));
|
||||||
if (!client_states)
|
if (!client_states)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -46,7 +46,7 @@ namespace getinfo
|
|||||||
|
|
||||||
int get_bot_count()
|
int get_bot_count()
|
||||||
{
|
{
|
||||||
const auto client_states = *reinterpret_cast<uint64_t*>(game::select(0x1576FB318, 0x14A178E98));
|
const auto client_states = *reinterpret_cast<uint64_t*>(game::select(0x1576F9318, 0x14A178E98));
|
||||||
if (!client_states)
|
if (!client_states)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -69,7 +69,7 @@ namespace getinfo
|
|||||||
{
|
{
|
||||||
int Com_SessionMode_GetGameMode()
|
int Com_SessionMode_GetGameMode()
|
||||||
{
|
{
|
||||||
return *reinterpret_cast<int*>(game::select(0x1568EF7F4, 0x14948DB04)) << 14 >> 28;
|
return *reinterpret_cast<int*>(game::select(0x1568ED7F4, 0x14948DB04)) << 14 >> 28;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -62,9 +62,9 @@ namespace loot
|
|||||||
dvar_cg_unlockall_loot = game::Dvar_RegisterBool(game::Dvar_GenerateHash("cg_unlockall_loot"), "cg_unlockall_loot", false, (game::dvarFlags_e)0x0, "Unlocks blackmarket loot");
|
dvar_cg_unlockall_loot = game::Dvar_RegisterBool(game::Dvar_GenerateHash("cg_unlockall_loot"), "cg_unlockall_loot", false, (game::dvarFlags_e)0x0, "Unlocks blackmarket loot");
|
||||||
dvar_cg_unlockall_loot->debugName = "cg_unlockall_loot";
|
dvar_cg_unlockall_loot->debugName = "cg_unlockall_loot";
|
||||||
|
|
||||||
loot_getitemquantity_hook.create(0x141E82C90_g, loot_getitemquantity_stub);
|
loot_getitemquantity_hook.create(0x141E82C00_g, loot_getitemquantity_stub);
|
||||||
liveinventory_getitemquantity_hook.create(0x141E090C0_g, liveinventory_getitemquantity_stub);
|
liveinventory_getitemquantity_hook.create(0x141E09030_g, liveinventory_getitemquantity_stub);
|
||||||
liveinventory_areextraslotspurchased_hook.create(0x141E089E0_g, liveinventory_areextraslotspurchased_stub);
|
liveinventory_areextraslotspurchased_hook.create(0x141E08950_g, liveinventory_areextraslotspurchased_stub);
|
||||||
|
|
||||||
scheduler::once([]() {
|
scheduler::once([]() {
|
||||||
if (dvar_cg_unlockall_loot->current.enabled)
|
if (dvar_cg_unlockall_loot->current.enabled)
|
||||||
|
@ -237,22 +237,22 @@ namespace network
|
|||||||
{
|
{
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
utils::hook::nop(game::select(0x142332E76, 0x140596DF6), 4); // don't increment data pointer to optionally skip socket byte
|
utils::hook::nop(game::select(0x1423322B6, 0x140596DF6), 4); // don't increment data pointer to optionally skip socket byte
|
||||||
utils::hook::call(game::select(0x142332E43, 0x140596DC3), read_socket_byte_stub); // optionally read socket byte
|
utils::hook::call(game::select(0x142332283, 0x140596DC3), read_socket_byte_stub); // optionally read socket byte
|
||||||
utils::hook::call(game::select(0x142332E81, 0x140596E01), verify_checksum_stub); // skip checksum verification
|
utils::hook::call(game::select(0x1423322C1, 0x140596E01), verify_checksum_stub); // skip checksum verification
|
||||||
utils::hook::set<uint8_t>(game::select(0x14233305E, 0x140596F2E), 0); // don't add checksum to packet
|
utils::hook::set<uint8_t>(game::select(0x14233249E, 0x140596F2E), 0); // don't add checksum to packet
|
||||||
|
|
||||||
utils::hook::set<uint32_t>(game::select(0x14134C6E0, 0x14018E574), 5); // set initial connection state to challenging
|
utils::hook::set<uint32_t>(game::select(0x14134C6E0, 0x14018E574), 5); // set initial connection state to challenging
|
||||||
|
|
||||||
// intercept command handling
|
// intercept command handling
|
||||||
utils::hook::call(game::select(0x14134D146, 0x14018EED0), utils::hook::assemble(handle_command_stub));
|
utils::hook::call(game::select(0x14134D146, 0x14018EED0), utils::hook::assemble(handle_command_stub));
|
||||||
|
|
||||||
utils::hook::set<uint8_t>(game::select(0x14224E90D, 0x1405315F9), 0xEB); // don't kick clients without dw handle
|
utils::hook::set<uint8_t>(game::select(0x14224DEAD, 0x1405315F9), 0xEB); // don't kick clients without dw handle
|
||||||
|
|
||||||
// Skip DW stuff in NetAdr_ToString
|
// Skip DW stuff in NetAdr_ToString
|
||||||
utils::hook::set<uint8_t>(game::select(0x142173952, 0x140515881), 0xEB);
|
utils::hook::set<uint8_t>(game::select(0x142172EF2, 0x140515881), 0xEB);
|
||||||
// NA_IP -> NA_RAWIP in NetAdr_ToString
|
// NA_IP -> NA_RAWIP in NetAdr_ToString
|
||||||
utils::hook::set<uint8_t>(game::select(0x142173934, 0x140515864), game::NA_RAWIP);
|
utils::hook::set<uint8_t>(game::select(0x142172ED4, 0x140515864), game::NA_RAWIP);
|
||||||
|
|
||||||
if (game::is_server())
|
if (game::is_server())
|
||||||
{
|
{
|
||||||
@ -264,7 +264,7 @@ namespace network
|
|||||||
scheduler::once(create_ip_socket, scheduler::main);
|
scheduler::once(create_ip_socket, scheduler::main);
|
||||||
|
|
||||||
// Kill lobby system
|
// Kill lobby system
|
||||||
handle_packet_internal_hook.create(game::select(0x141EF8030, 0x1404A5B90), &handle_packet_internal_stub);
|
handle_packet_internal_hook.create(game::select(0x141EF7FE0, 0x1404A5B90), &handle_packet_internal_stub);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ namespace party
|
|||||||
{
|
{
|
||||||
scheduler::once([=]
|
scheduler::once([=]
|
||||||
{
|
{
|
||||||
const auto local_client = *reinterpret_cast<DWORD*>(0x14342355C_g);
|
const auto local_client = *reinterpret_cast<DWORD*>(0x14342155C_g);
|
||||||
const auto current_mode = game::Com_SessionMode_GetMode();
|
const auto current_mode = game::Com_SessionMode_GetMode();
|
||||||
game::Com_SwitchMode(local_client, current_mode, mode, 6);
|
game::Com_SwitchMode(local_client, current_mode, mode, 6);
|
||||||
}, scheduler::main);
|
}, scheduler::main);
|
||||||
@ -90,7 +90,7 @@ namespace party
|
|||||||
{
|
{
|
||||||
const auto LobbyJoin_Begin = reinterpret_cast<bool(*)(int actionId, game::ControllerIndex_t controllerIndex,
|
const auto LobbyJoin_Begin = reinterpret_cast<bool(*)(int actionId, game::ControllerIndex_t controllerIndex,
|
||||||
game::LobbyType sourceLobbyType,
|
game::LobbyType sourceLobbyType,
|
||||||
game::LobbyType targetLobbyType)>(0x141ED9540_g);
|
game::LobbyType targetLobbyType)>(0x141ED94D0_g);
|
||||||
|
|
||||||
if (!LobbyJoin_Begin(0, game::CONTROLLER_INDEX_FIRST, game::LOBBY_TYPE_PRIVATE, game::LOBBY_TYPE_PRIVATE))
|
if (!LobbyJoin_Begin(0, game::CONTROLLER_INDEX_FIRST, game::LOBBY_TYPE_PRIVATE, game::LOBBY_TYPE_PRIVATE))
|
||||||
{
|
{
|
||||||
@ -205,7 +205,7 @@ namespace party
|
|||||||
game::netadr_t get_connected_server()
|
game::netadr_t get_connected_server()
|
||||||
{
|
{
|
||||||
constexpr auto local_client_num = 0ull;
|
constexpr auto local_client_num = 0ull;
|
||||||
const auto address = *reinterpret_cast<uint64_t*>(0x1453DABB8_g) + (0x25780 * local_client_num) + 0x10;
|
const auto address = *reinterpret_cast<uint64_t*>(0x1453D8BB8_g) + (0x25780 * local_client_num) + 0x10;
|
||||||
return *reinterpret_cast<game::netadr_t*>(address);
|
return *reinterpret_cast<game::netadr_t*>(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ namespace party
|
|||||||
{
|
{
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
utils::hook::jump(0x141EE6030_g, &connect_stub);
|
utils::hook::jump(0x141EE5FE0_g, &connect_stub);
|
||||||
|
|
||||||
network::on("infoResponse", handle_info_response);
|
network::on("infoResponse", handle_info_response);
|
||||||
scheduler::loop(cleanup_queried_servers, scheduler::async, 200ms);
|
scheduler::loop(cleanup_queried_servers, scheduler::async, 200ms);
|
||||||
|
@ -168,12 +168,11 @@ namespace scheduler
|
|||||||
{
|
{
|
||||||
if (!game::is_server())
|
if (!game::is_server())
|
||||||
{
|
{
|
||||||
r_end_frame_hook.create(0x142273560_g, r_end_frame_stub);
|
r_end_frame_hook.create(0x142272B00_g, r_end_frame_stub);
|
||||||
// some func called before R_EndFrame, maybe SND_EndFrame?
|
// some func called before R_EndFrame, maybe SND_EndFrame?
|
||||||
}
|
}
|
||||||
|
|
||||||
//g_run_frame_hook.create(0x14065C360_g, server_frame_stub); // GlassSv_Update
|
main_frame_hook.create(game::select(0x1420F8E00, 0x1405020E0), main_frame_stub);
|
||||||
main_frame_hook.create(game::select(0x1420F9860, 0x1405020E0), main_frame_stub);
|
|
||||||
// Com_Frame_Try_Block_Function
|
// Com_Frame_Try_Block_Function
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,10 +454,10 @@ namespace ui_scripting
|
|||||||
utils::hook::call(game::select(0x141D4979A, 0x1403F233A), hks_load_stub);
|
utils::hook::call(game::select(0x141D4979A, 0x1403F233A), hks_load_stub);
|
||||||
|
|
||||||
hks_package_require_hook.create(game::select(0x141D28EF0, 0x1403D7FC0), hks_package_require_stub);
|
hks_package_require_hook.create(game::select(0x141D28EF0, 0x1403D7FC0), hks_package_require_stub);
|
||||||
ui_cod_init_hook.create(game::select(0x141F298B0, 0x1404A0A50), ui_cod_init_stub);
|
ui_cod_init_hook.create(game::UI_CoD_Init, ui_cod_init_stub);
|
||||||
ui_cod_lobbyui_init_hook.create(game::select(0x141F2C620, 0x1404A1F50), ui_cod_lobbyui_init_stub);
|
ui_cod_lobbyui_init_hook.create(game::UI_CoD_LobbyUI_Init, ui_cod_lobbyui_init_stub);
|
||||||
ui_shutdown_hook.create(game::select(0x14270E9C0, 0x1404A1280), ui_shutdown_stub);
|
ui_shutdown_hook.create(game::select(0x14270DE00, 0x1404A1280), ui_shutdown_stub);
|
||||||
lua_cod_getrawfile_hook.create(game::select(0x141F0F880, 0x1404BCB70), lua_cod_getrawfile_stub);
|
lua_cod_getrawfile_hook.create(game::select(0x141F0EFE0, 0x1404BCB70), lua_cod_getrawfile_stub);
|
||||||
|
|
||||||
if (game::is_server())
|
if (game::is_server())
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,7 @@ namespace game
|
|||||||
{
|
{
|
||||||
eModes Com_SessionMode_GetMode()
|
eModes Com_SessionMode_GetMode()
|
||||||
{
|
{
|
||||||
return eModes(*reinterpret_cast<uint32_t*>(game::select(0x1568EF7F4, 0x14948DB04)) << 28 >> 28);
|
return eModes(*reinterpret_cast<uint32_t*>(game::select(0x1568ED7F4, 0x14948DB04)) << 28 >> 28);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool I_islower(int c)
|
bool I_islower(int c)
|
||||||
|
@ -18,24 +18,24 @@ namespace game
|
|||||||
WEAK symbol<void(const char* fmt, ...)> G_LogPrintf{0x0, 0x1402A7BB0};
|
WEAK symbol<void(const char* fmt, ...)> G_LogPrintf{0x0, 0x1402A7BB0};
|
||||||
|
|
||||||
// Com
|
// Com
|
||||||
WEAK symbol<void(int channel, unsigned int label, const char* fmt, ...)> Com_Printf{0x1421499C0, 0x140505630};
|
WEAK symbol<void(int channel, unsigned int label, const char* fmt, ...)> Com_Printf{0x142148F60, 0x140505630};
|
||||||
WEAK symbol<void(const char* file, int line, int code, const char* fmt, ...)> Com_Error_{0x1420F8BD0, 0x140501470};
|
WEAK symbol<void(const char* file, int line, int code, const char* fmt, ...)> Com_Error_{0x1420F8170, 0x140501470};
|
||||||
WEAK symbol<bool(eModes mode)> Com_SessionMode_IsMode{0x1420F7DD0};
|
WEAK symbol<bool(eModes mode)> Com_SessionMode_IsMode{0x1420F7370};
|
||||||
WEAK symbol<void(eNetworkModes networkMode)> Com_SessionMode_SetNetworkMode{0x1420F8010, 0x140500B80};
|
WEAK symbol<void(eNetworkModes networkMode)> Com_SessionMode_SetNetworkMode{0x1420F75B0, 0x140500B80};
|
||||||
WEAK symbol<eGameModes(eGameModes gameMode)> Com_SessionMode_SetGameMode{0x1420F7FD0, 0x140500B40};
|
WEAK symbol<eGameModes(eGameModes gameMode)> Com_SessionMode_SetGameMode{0x1420F7570, 0x140500B40};
|
||||||
WEAK symbol<eModes(eModes mode)> Com_SessionMode_SetMode{0x1420F7FF0};
|
WEAK symbol<eModes(eModes mode)> Com_SessionMode_SetMode{0x1420F7570};
|
||||||
WEAK symbol<void(const char* gametype, bool loadDefaultSettings, bool isModified)> Com_GametypeSettings_SetGametype{0x1420F63E0};
|
WEAK symbol<void(const char* gametype, bool loadDefaultSettings, bool isModified)> Com_GametypeSettings_SetGametype{0x1420F5980};
|
||||||
WEAK symbol<bool()> Com_IsRunningUILevel{0x142148DB0};
|
WEAK symbol<bool()> Com_IsRunningUILevel{0x142148350};
|
||||||
WEAK symbol<void(int localClientNum, eModes fromMode, eModes toMode, uint32_t flags)> Com_SwitchMode{
|
WEAK symbol<void(int localClientNum, eModes fromMode, eModes toMode, uint32_t flags)> Com_SwitchMode{
|
||||||
0x14214AF30
|
0x14214A4D0
|
||||||
};
|
};
|
||||||
|
|
||||||
WEAK symbol<void(int localClientNum, const char* text)> Cbuf_AddText{0x1420EC8B0, 0x1404F75B0};
|
WEAK symbol<void(int localClientNum, const char* text)> Cbuf_AddText{0x1420EC010, 0x1404F75B0};
|
||||||
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* buffer)> Cbuf_ExecuteBuffer{
|
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* buffer)> Cbuf_ExecuteBuffer{
|
||||||
0x14133BE10, 0x1404F78D0
|
0x14133BE10, 0x1404F78D0
|
||||||
};
|
};
|
||||||
WEAK symbol<void(const char* cmdName, xcommand_t function, cmd_function_s* allocedCmd)> Cmd_AddCommandInternal{
|
WEAK symbol<void(const char* cmdName, xcommand_t function, cmd_function_s* allocedCmd)> Cmd_AddCommandInternal{
|
||||||
0x1420ED530, 0x1404F8210
|
0x1420ECC90, 0x1404F8210
|
||||||
};
|
};
|
||||||
WEAK symbol<void()> Cbuf_AddServerText_f{0x0, 0x1407DB4C0};
|
WEAK symbol<void()> Cbuf_AddServerText_f{0x0, 0x1407DB4C0};
|
||||||
WEAK symbol<void(const char* cmdName, xcommand_t function, cmd_function_s* allocedCmd)> Cmd_AddServerCommandInternal
|
WEAK symbol<void(const char* cmdName, xcommand_t function, cmd_function_s* allocedCmd)> Cmd_AddServerCommandInternal
|
||||||
@ -44,7 +44,7 @@ namespace game
|
|||||||
};
|
};
|
||||||
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* text,
|
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* text,
|
||||||
bool fromRemoteConsole)> Cmd_ExecuteSingleCommand{
|
bool fromRemoteConsole)> Cmd_ExecuteSingleCommand{
|
||||||
0x1420EDC20
|
0x1420ED380
|
||||||
};
|
};
|
||||||
WEAK symbol<void(char* text, int maxSize)> Con_GetTextCopy{0x14133A7D0, 0x140182C40};
|
WEAK symbol<void(char* text, int maxSize)> Con_GetTextCopy{0x14133A7D0, 0x140182C40};
|
||||||
|
|
||||||
@ -61,50 +61,50 @@ namespace game
|
|||||||
WEAK symbol<const char*(const XAsset* asset)> DB_GetXAssetName{0x1413E9DA0, 0x14019F080};
|
WEAK symbol<const char*(const XAsset* asset)> DB_GetXAssetName{0x1413E9DA0, 0x14019F080};
|
||||||
|
|
||||||
// Live
|
// Live
|
||||||
WEAK symbol<bool(uint64_t, int*, bool)> Live_GetConnectivityInformation{0x141E0C410};
|
WEAK symbol<bool(uint64_t, int*, bool)> Live_GetConnectivityInformation{0x141E0C380};
|
||||||
|
|
||||||
// MSG
|
// MSG
|
||||||
WEAK symbol<uint8_t(msg_t* msg)> MSG_ReadByte{0x142155EB0, 0x14050D1B0};
|
WEAK symbol<uint8_t(msg_t* msg)> MSG_ReadByte{0x142155450, 0x14050D1B0};
|
||||||
|
|
||||||
// NET
|
// NET
|
||||||
WEAK symbol<bool(netsrc_t sock, int length, const void* data, const netadr_t* to)> NET_SendPacket{
|
WEAK symbol<bool(netsrc_t sock, int length, const void* data, const netadr_t* to)> NET_SendPacket{
|
||||||
0x142332F70, 0x140596E40
|
0x1423323B0, 0x140596E40
|
||||||
};
|
};
|
||||||
WEAK symbol<bool(char const*, netadr_t*)> NET_StringToAdr{0x1421731E0, 0x140515110};
|
WEAK symbol<bool(char const*, netadr_t*)> NET_StringToAdr{0x142172780, 0x140515110};
|
||||||
|
|
||||||
// Sys
|
// Sys
|
||||||
WEAK symbol<int()> Sys_Milliseconds{0x142333430};
|
WEAK symbol<int()> Sys_Milliseconds{0x142332870};
|
||||||
WEAK symbol<void()> Sys_ShowConsole{0x142333F80, 0x140597E40};
|
WEAK symbol<void()> Sys_ShowConsole{0x1423333C0, 0x140597E40};
|
||||||
WEAK symbol<TLSData*()> Sys_GetTLS{0x142184210, 0x140525EB0};
|
WEAK symbol<TLSData*()> Sys_GetTLS{0x1421837B0, 0x140525EB0};
|
||||||
WEAK symbol<TLSData*()> Sys_IsDatabaseReady{0x1421844C0};
|
WEAK symbol<TLSData*()> Sys_IsDatabaseReady{0x142183A60};
|
||||||
|
|
||||||
// Unnamed
|
// Unnamed
|
||||||
WEAK symbol<const char* (const char* name)> CopyString{0x1422ACC80, 0x14056BD70};
|
WEAK symbol<const char* (const char* name)> CopyString{0x1422AC220, 0x14056BD70};
|
||||||
|
|
||||||
// Dvar
|
// Dvar
|
||||||
WEAK symbol<bool(const dvar_t* dvar)> Dvar_IsSessionModeBaseDvar{0x1422C2E00, 0x140576890};
|
WEAK symbol<bool(const dvar_t* dvar)> Dvar_IsSessionModeBaseDvar{0x1422C23A0, 0x140576890};
|
||||||
WEAK symbol<dvar_t*(const char* dvarName)> Dvar_FindVar{0x1422BD730, 0x140575540};
|
WEAK symbol<dvar_t*(const char* dvarName)> Dvar_FindVar{0x1422BCCD0, 0x140575540};
|
||||||
WEAK symbol<unsigned int(const char* str)> Dvar_GenerateHash{0x14133DBF0, 0x140185800};
|
WEAK symbol<unsigned int(const char* str)> Dvar_GenerateHash{0x14133DBF0, 0x140185800};
|
||||||
WEAK symbol<dvar_t*(unsigned int hash)> Dvar_FindMalleableVar{0x1422BD6A0};
|
WEAK symbol<dvar_t*(unsigned int hash)> Dvar_FindMalleableVar{0x1422BCC40};
|
||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetDebugName{0x1422BDCB0};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetDebugName{0x1422BD250};
|
||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetString{0x1422BFFF0, 0x140575E30};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetString{0x1422BF590, 0x140575E30};
|
||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_DisplayableValue{0x1422BCAE0};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_DisplayableValue{0x1422BC080};
|
||||||
WEAK symbol<bool(const dvar_t* dvar)> Dvar_GetBool{0x1422BD930};
|
WEAK symbol<bool(const dvar_t* dvar)> Dvar_GetBool{0x1422BCED0};
|
||||||
WEAK symbol<dvar_t*(dvarStrHash_t hash, const char* dvarName, bool value, dvarFlags_e flags, const char* description)> Dvar_RegisterBool{
|
WEAK symbol<dvar_t*(dvarStrHash_t hash, const char* dvarName, bool value, dvarFlags_e flags, const char* description)> Dvar_RegisterBool{
|
||||||
0x1422D1360
|
0x1422D0900
|
||||||
};
|
};
|
||||||
WEAK symbol<void (void (*callback)(const dvar_t*, void*), void* userData)> Dvar_ForEach{0x1422BD760};
|
WEAK symbol<void (void (*callback)(const dvar_t*, void*), void* userData)> Dvar_ForEach{0x1422BCD00};
|
||||||
WEAK symbol<void(const char* dvarName, const char* string, bool createIfMissing)> Dvar_SetFromStringByName{
|
WEAK symbol<void(const char* dvarName, const char* string, bool createIfMissing)> Dvar_SetFromStringByName{
|
||||||
0x1422C7F60
|
0x1422C7500
|
||||||
};
|
};
|
||||||
|
|
||||||
// UI
|
// UI
|
||||||
WEAK symbol<void(bool frontend)> UI_CoD_Init{0x141F298B0, 0x0};
|
WEAK symbol<void(bool frontend)> UI_CoD_Init{0x141F29010, 0x1404A0A50};
|
||||||
WEAK symbol<void()> UI_CoD_LobbyUI_Init{0x141F2C620, 0x0};
|
WEAK symbol<void()> UI_CoD_LobbyUI_Init{0x141F2BD80, 0x1404A1F50};
|
||||||
WEAK symbol<void()> UI_CoD_Shutdown{0x141F336B0, 0x0};
|
WEAK symbol<void()> UI_CoD_Shutdown{0x141F32E10, 0x0};
|
||||||
WEAK symbol<void(const char*, const char*, int, game::hks::lua_State*)> UI_AddMenu{0x1427024B0, 0x0};
|
WEAK symbol<void(const char*, const char*, int, game::hks::lua_State*)> UI_AddMenu{0x1427018F0, 0x0};
|
||||||
WEAK symbol<const char* (int)> UI_CoD_GetRootNameForController{0x141F291E0, 0x0};
|
WEAK symbol<const char* (int)> UI_CoD_GetRootNameForController{0x141F28940, 0x0};
|
||||||
WEAK symbol<void(game::hks::lua_State*, const char*)> Lua_CoD_LoadLuaFile{0x141F122C0, 0x0};
|
WEAK symbol<void(game::hks::lua_State*, const char*)> Lua_CoD_LoadLuaFile{0x141F11A20, 0x0};
|
||||||
WEAK symbol<void(int localClientNum)> CG_LUIHUDRestart{0x140F7E970};
|
WEAK symbol<void(int localClientNum)> CG_LUIHUDRestart{0x140F7E970};
|
||||||
WEAK symbol<void(int localClientNum)> CL_CheckKeepDrawingConnectScreen{0x1413CCAE0};
|
WEAK symbol<void(int localClientNum)> CL_CheckKeepDrawingConnectScreen{0x1413CCAE0};
|
||||||
|
|
||||||
@ -120,8 +120,6 @@ namespace game
|
|||||||
WEAK symbol<void(const char* name, const char* key, unsigned int playbackFlags, float volume, void* callbackInfo, int id)> Cinematic_StartPlayback{0x1412BE3A0};
|
WEAK symbol<void(const char* name, const char* key, unsigned int playbackFlags, float volume, void* callbackInfo, int id)> Cinematic_StartPlayback{0x1412BE3A0};
|
||||||
WEAK symbol<void(uint64_t id, bool cancelAll)> Cinematic_StopPlayback{0x1412BEA70};
|
WEAK symbol<void(uint64_t id, bool cancelAll)> Cinematic_StopPlayback{0x1412BEA70};
|
||||||
|
|
||||||
WEAK symbol<bool(void* storageFileInfo)> ShouldTransfer{0x142276E10};
|
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
WEAK symbol<void(const char*, int, const void*, float, float, float, float, float, const float*, int)>
|
WEAK symbol<void(const char*, int, const void*, float, float, float, float, float, const float*, int)>
|
||||||
R_AddCmdDrawText{
|
R_AddCmdDrawText{
|
||||||
@ -129,40 +127,40 @@ namespace game
|
|||||||
};
|
};
|
||||||
|
|
||||||
// SV
|
// SV
|
||||||
WEAK symbol<bool()> SV_Loaded{0x142252CB0, 0x140535460};
|
WEAK symbol<bool()> SV_Loaded{0x142252250, 0x140535460};
|
||||||
WEAK symbol<void*()> SV_AddTestClient{0x1422499A0, 0x14052E3E0};
|
WEAK symbol<void*()> SV_AddTestClient{0x142248F40, 0x14052E3E0};
|
||||||
WEAK symbol<void(client_s* cl_0, svscmd_type type, const char* fmt, ...)> SV_SendServerCommand{0x0, 0x140537F10};
|
WEAK symbol<void(client_s* cl_0, svscmd_type type, const char* fmt, ...)> SV_SendServerCommand{0x0, 0x140537F10};
|
||||||
WEAK symbol<bool(int clientNum)> SV_IsTestClient{0x14224B5C0, 0x14052FF40};
|
WEAK symbol<bool(int clientNum)> SV_IsTestClient{0x14224AB60, 0x14052FF40};
|
||||||
WEAK symbol<void(int controllerIndex, const char* server, MapPreload preload, bool savegame)> SV_SpawnServer{0x142253320, 0x140535B20};
|
WEAK symbol<void(int controllerIndex, const char* server, MapPreload preload, bool savegame)> SV_SpawnServer{0x1422528C0, 0x140535B20};
|
||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
WEAK symbol<const char* (char* str)> I_CleanStr{0x1422E9C10, 0x140580E80};
|
WEAK symbol<const char* (char* str)> I_CleanStr{0x1422E9050, 0x140580E80};
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
WEAK symbol<cmd_function_s> cmd_functions{0x15689FF58, 0x14946F860};
|
WEAK symbol<cmd_function_s> cmd_functions{0x15689DF58, 0x14946F860};
|
||||||
WEAK symbol<CmdArgs> sv_cmd_args{0x15689CE30, 0x14944C740};
|
WEAK symbol<CmdArgs> sv_cmd_args{0x15689AE30, 0x14944C740};
|
||||||
|
|
||||||
WEAK symbol<gentity_s> g_entities{0x0, 0x1471031B0};
|
WEAK symbol<gentity_s> g_entities{0x0, 0x1471031B0};
|
||||||
|
|
||||||
WEAK symbol<int> level_time{0x0, 0x1474FDC94};
|
WEAK symbol<int> level_time{0x0, 0x1474FDC94};
|
||||||
|
|
||||||
WEAK symbol<SOCKET> ip_socket{0x157E77818, 0x14A640988};
|
WEAK symbol<SOCKET> ip_socket{0x157E75818, 0x14A640988};
|
||||||
|
|
||||||
WEAK symbol<Join> s_join{0x15574C640};
|
WEAK symbol<Join> s_join{0x15574A640};
|
||||||
|
|
||||||
WEAK symbol<char> s_dvarPool{0x157AC8220, 0x14A3CB620};
|
WEAK symbol<char> s_dvarPool{0x157AC6220, 0x14A3CB620};
|
||||||
WEAK symbol<int> g_dvarCount{0x157AC81CC, 0x14A3CB5FC};
|
WEAK symbol<int> g_dvarCount{0x157AC61CC, 0x14A3CB5FC};
|
||||||
|
|
||||||
namespace s_wcd
|
namespace s_wcd
|
||||||
{
|
{
|
||||||
WEAK symbol<HWND> codLogo{0x157E77A50, 0x14A640BC0};
|
WEAK symbol<HWND> codLogo{0x157E75A50, 0x14A640BC0};
|
||||||
WEAK symbol<HFONT> hfBufferFont{0x157E77A58, 0x14A640BC8};
|
WEAK symbol<HFONT> hfBufferFont{0x157E75A58, 0x14A640BC8};
|
||||||
WEAK symbol<HWND> hWnd{0x157E77A40, 0x14A640BB0};
|
WEAK symbol<HWND> hWnd{0x157E75A40, 0x14A640BB0};
|
||||||
WEAK symbol<HWND> hwndBuffer{0x157E77A48, 0x14A640BB8};
|
WEAK symbol<HWND> hwndBuffer{0x157E75A48, 0x14A640BB8};
|
||||||
WEAK symbol<HWND> hwndInputLine{0x157E77A60, 0x14A640BD0};
|
WEAK symbol<HWND> hwndInputLine{0x157E75A60, 0x14A640BD0};
|
||||||
WEAK symbol<int> windowHeight{0x157E7806C, 0x14A6411DC};
|
WEAK symbol<int> windowHeight{0x157E7606C, 0x14A6411DC};
|
||||||
WEAK symbol<int> windowWidth{0x157E78068, 0x14A6411D8};
|
WEAK symbol<int> windowWidth{0x157E76068, 0x14A6411D8};
|
||||||
WEAK symbol<WNDPROC> SysInputLineWndProc{0x157E78070, 0x14A6411E0};
|
WEAK symbol<WNDPROC> SysInputLineWndProc{0x157E76070, 0x14A6411E0};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Global game definitions
|
// Global game definitions
|
||||||
@ -178,20 +176,20 @@ namespace game
|
|||||||
|
|
||||||
namespace hks
|
namespace hks
|
||||||
{
|
{
|
||||||
WEAK symbol<lua_State*> lua_state {0x159C78D88, 0x14858C408};
|
WEAK symbol<lua_State*> lua_state {0x159C76D88, 0x14858C408};
|
||||||
WEAK symbol<void(lua_State* s, const char* str, unsigned int l)> hksi_lua_pushlstring{0x140A18430, 0x1401DE6F0};
|
WEAK symbol<void(lua_State* s, const char* str, unsigned int l)> hksi_lua_pushlstring{0x140A18430, 0x1401DE6F0};
|
||||||
|
|
||||||
WEAK symbol<void(lua_State* s, const HksObject* tbl, const HksObject* key, const HksObject* val)> hks_obj_settable{0x141D4B660, 0x1403F41B0};
|
WEAK symbol<void(lua_State* s, const HksObject* tbl, const HksObject* key, const HksObject* val)> hks_obj_settable{0x141D4B660, 0x1403F41B0};
|
||||||
WEAK symbol<HksObject* (HksObject* result, lua_State* s, const HksObject* table, const HksObject* key)> hks_obj_gettable{0x141D4ABF0, 0x1403F3750};
|
WEAK symbol<HksObject* (HksObject* result, lua_State* s, const HksObject* table, const HksObject* key)> hks_obj_gettable{0x141D4ABF0, 0x1403F3750};
|
||||||
WEAK symbol<void(lua_State* s, int nargs, int nresults, const unsigned int* pc)> vm_call_internal{0x141D71070, 0x140418E40};
|
WEAK symbol<void(lua_State* s, int nargs, int nresults, const unsigned int* pc)> vm_call_internal{0x141D70FE0, 0x140418E40};
|
||||||
WEAK symbol<HashTable* (lua_State* s, unsigned int arraySize, unsigned int hashSize)> Hashtable_Create{0x141D3B5F0, 0x1403E46D0};
|
WEAK symbol<HashTable* (lua_State* s, unsigned int arraySize, unsigned int hashSize)> Hashtable_Create{0x141D3B5F0, 0x1403E46D0};
|
||||||
WEAK symbol<cclosure* (lua_State* s, lua_function function, int num_upvalues, int internal_, int profilerTreatClosureAsFunc)> cclosure_Create{0x141D3B7E0, 0x1403E48C0};
|
WEAK symbol<cclosure* (lua_State* s, lua_function function, int num_upvalues, int internal_, int profilerTreatClosureAsFunc)> cclosure_Create{0x141D3B7E0, 0x1403E48C0};
|
||||||
WEAK symbol<int(lua_State* s, int t)> hksi_luaL_ref{0x141D4D1A0, 0x1403F5CF0};
|
WEAK symbol<int(lua_State* s, int t)> hksi_luaL_ref{0x141D4D1A0, 0x1403F5CF0};
|
||||||
WEAK symbol<void(lua_State* s, int t, int ref)> hksi_luaL_unref{0x141D4D320, 0x1403F5E70};
|
WEAK symbol<void(lua_State* s, int t, int ref)> hksi_luaL_unref{0x141D4D320, 0x1403F5E70};
|
||||||
|
|
||||||
WEAK symbol<int(lua_State* s, const HksCompilerSettings* options, const char* buff, unsigned __int64 sz, const char* name)> hksi_hksL_loadbuffer{0x141D4BD80, 0x1403F48D0};
|
WEAK symbol<int(lua_State* s, const HksCompilerSettings* options, const char* buff, unsigned __int64 sz, const char* name)> hksi_hksL_loadbuffer{0x141D4BD80, 0x1403F48D0};
|
||||||
WEAK symbol<int(lua_State* s, const char* what, lua_Debug* ar)> hksi_lua_getinfo{0x141D4D960, 0x1403F64B0};
|
WEAK symbol<int(lua_State* s, const char* what, lua_Debug* ar)> hksi_lua_getinfo{0x141D4D8D0, 0x1403F64B0};
|
||||||
WEAK symbol<int(lua_State* s, int level, lua_Debug* ar)> hksi_lua_getstack{0x141D4DC20, 0x1403F6770};
|
WEAK symbol<int(lua_State* s, int level, lua_Debug* ar)> hksi_lua_getstack{0x141D4DB90, 0x1403F6770};
|
||||||
WEAK symbol<void(lua_State* s, const char* fmt, ...)> hksi_luaL_error{0x141D4D050, 0x1403F5BA0};
|
WEAK symbol<void(lua_State* s, const char* fmt, ...)> hksi_luaL_error{0x141D4D050, 0x1403F5BA0};
|
||||||
WEAK symbol<const char*> s_compilerTypeName{0x140A18430};
|
WEAK symbol<const char*> s_compilerTypeName{0x140A18430};
|
||||||
}
|
}
|
||||||
|
@ -314,11 +314,11 @@ namespace
|
|||||||
throw std::runtime_error("Bad binary loaded into memory");
|
throw std::runtime_error("Bad binary loaded into memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_server && !game::is_legacy_client())
|
if (!is_server && !game::is_client())
|
||||||
{
|
{
|
||||||
if(game::is_client())
|
if(game::is_legacy_client())
|
||||||
{
|
{
|
||||||
throw std::runtime_error("You are running the latest Steam update. We're working on supporting it. For the time being, however, you have to revert to the old binary.");
|
throw std::runtime_error("You are using the outdated BlackOps3.exe. This version is not supported anymore. Please use the latest binary from Steam.");
|
||||||
}
|
}
|
||||||
|
|
||||||
throw std::runtime_error("Bad binary loaded into memory");
|
throw std::runtime_error("Bad binary loaded into memory");
|
||||||
|
Loading…
Reference in New Issue
Block a user