Merge pull request #284 from momo5502/feature/steam-update

Adapt to the latest steam update
This commit is contained in:
Maurice Heumann 2023-03-05 11:15:09 +01:00 committed by GitHub
commit 25510cdece
18 changed files with 1357 additions and 1360 deletions

View File

@ -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)

View File

@ -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())
{ {

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
} }
}; };

View File

@ -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;

View File

@ -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

View File

@ -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);
} }
}; };
} }

View File

@ -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

View File

@ -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)

View File

@ -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);
} }
}; };
} }

View File

@ -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);

View File

@ -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
} }

View File

@ -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())
{ {

View File

@ -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)

View File

@ -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};
} }

View File

@ -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");