Server list
This commit is contained in:
parent
b9ae2a1917
commit
99a23e453c
@ -33,7 +33,7 @@ namespace console
|
|||||||
|
|
||||||
void dispatch_message(const int type, const std::string& message)
|
void dispatch_message(const int type, const std::string& message)
|
||||||
{
|
{
|
||||||
printf(message.data());
|
printf("%s", message.data());
|
||||||
game_console::print(type, message);
|
game_console::print(type, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,7 +573,7 @@ namespace party
|
|||||||
network::on("infoResponse", [](const game::netadr_s& target, const std::string_view& data)
|
network::on("infoResponse", [](const game::netadr_s& target, const std::string_view& data)
|
||||||
{
|
{
|
||||||
const utils::info_string info{data};
|
const utils::info_string info{data};
|
||||||
// server_list::handle_info_response(target, info);
|
server_list::handle_info_response(target, info);
|
||||||
|
|
||||||
if (connect_state.host != target)
|
if (connect_state.host != target)
|
||||||
{
|
{
|
||||||
|
@ -118,8 +118,7 @@ namespace server_list
|
|||||||
return diff > server_limit ? server_limit : static_cast<int>(diff);
|
return diff > server_limit ? server_limit : static_cast<int>(diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ui_feeder_item_text(int /*localClientNum*/, void* /*a2*/, void* /*a3*/, const int index,
|
const char* ui_feeder_item_text(const int index, const int column)
|
||||||
const int column)
|
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> _(mutex);
|
std::lock_guard<std::mutex> _(mutex);
|
||||||
|
|
||||||
@ -366,13 +365,65 @@ namespace server_list
|
|||||||
lui_open_menu_hook.create(game::LUI_OpenMenu, lui_open_menu_stub);
|
lui_open_menu_hook.create(game::LUI_OpenMenu, lui_open_menu_stub);
|
||||||
|
|
||||||
// replace UI_RunMenuScript call in LUI_CoD_LuaCall_RefreshServerList to our refresh_servers
|
// replace UI_RunMenuScript call in LUI_CoD_LuaCall_RefreshServerList to our refresh_servers
|
||||||
utils::hook::call(0x28E049_b, &refresh_server_list);
|
utils::hook::jump(0x28E049_b, utils::hook::assemble([](utils::hook::assembler& a)
|
||||||
utils::hook::call(0x28E55E_b, &join_server);
|
{
|
||||||
|
a.pushad64();
|
||||||
|
a.call_aligned(refresh_server_list);
|
||||||
|
a.popad64();
|
||||||
|
|
||||||
|
a.xor_(eax, eax);
|
||||||
|
a.mov(rbx, qword_ptr(rsp, 0x38));
|
||||||
|
a.add(rsp, 0x20);
|
||||||
|
a.pop(rdi);
|
||||||
|
a.ret();
|
||||||
|
}), true);
|
||||||
|
|
||||||
|
utils::hook::jump(0x28E557_b, utils::hook::assemble([](utils::hook::assembler& a)
|
||||||
|
{
|
||||||
|
a.mov(r8d, edi);
|
||||||
|
a.mov(ecx, eax);
|
||||||
|
a.mov(ebx, eax);
|
||||||
|
|
||||||
|
a.pushad64();
|
||||||
|
a.call_aligned(join_server);
|
||||||
|
a.popad64();
|
||||||
|
|
||||||
|
a.jmp(0x28E563_b);
|
||||||
|
}), true);
|
||||||
|
|
||||||
utils::hook::nop(0x28E57D_b, 5);
|
utils::hook::nop(0x28E57D_b, 5);
|
||||||
|
|
||||||
// do feeder stuff
|
// do feeder stuff
|
||||||
utils::hook::call(0x28E119_b, &ui_feeder_count);
|
utils::hook::jump(0x28E117_b, utils::hook::assemble([](utils::hook::assembler& a)
|
||||||
utils::hook::call(0x28E331_b, &ui_feeder_item_text);
|
{
|
||||||
|
a.mov(ecx, eax);
|
||||||
|
|
||||||
|
a.pushad64();
|
||||||
|
a.call_aligned(ui_feeder_count);
|
||||||
|
a.movd(xmm0, eax);
|
||||||
|
a.popad64();
|
||||||
|
|
||||||
|
a.mov(rax, qword_ptr(rbx, 0x48));
|
||||||
|
a.cvtdq2ps(xmm0, xmm0);
|
||||||
|
a.mov(rdi, 0x28E12B_b);
|
||||||
|
a.jmp(rdi);
|
||||||
|
}), true);
|
||||||
|
|
||||||
|
utils::hook::jump(0x28E331_b, utils::hook::assemble([](utils::hook::assembler& a)
|
||||||
|
{
|
||||||
|
a.push(rax);
|
||||||
|
a.pushad64();
|
||||||
|
a.mov(rcx, r9); // index
|
||||||
|
a.mov(rdx, qword_ptr(rsp, 0x88 + 0x20)); // column
|
||||||
|
a.call_aligned(ui_feeder_item_text);
|
||||||
|
a.mov(qword_ptr(rsp, 0x80), rax);
|
||||||
|
a.popad64();
|
||||||
|
a.pop(rax);
|
||||||
|
|
||||||
|
a.mov(rsi, qword_ptr(rsp, 0x90));
|
||||||
|
a.mov(rdi, rax);
|
||||||
|
a.jmp(0x28E341_b);
|
||||||
|
}), true);
|
||||||
|
|
||||||
scheduler::loop(do_frame_work, scheduler::pipeline::main);
|
scheduler::loop(do_frame_work, scheduler::pipeline::main);
|
||||||
|
|
||||||
@ -423,4 +474,4 @@ namespace server_list
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
//REGISTER_COMPONENT(server_list::component)
|
REGISTER_COMPONENT(server_list::component)
|
||||||
|
@ -160,7 +160,7 @@ namespace game
|
|||||||
WEAK symbol<void()> LUI_EnterCriticalSection{0x0, 0x2669B0};
|
WEAK symbol<void()> LUI_EnterCriticalSection{0x0, 0x2669B0};
|
||||||
WEAK symbol<void()> LUI_LeaveCriticalSection{0x0, 0x26BDC0};
|
WEAK symbol<void()> LUI_LeaveCriticalSection{0x0, 0x26BDC0};
|
||||||
|
|
||||||
WEAK symbol<bool(int clientNum, const char* menu)> Menu_IsMenuOpenAndVisible{0x0, 0x0};
|
WEAK symbol<bool(int clientNum, const char* menu)> Menu_IsMenuOpenAndVisible{0x0, 0x389F70};
|
||||||
|
|
||||||
WEAK symbol<scr_string_t(const char* str)> SL_FindString{0x0, 0x0};
|
WEAK symbol<scr_string_t(const char* str)> SL_FindString{0x0, 0x0};
|
||||||
WEAK symbol<scr_string_t(const char* str, unsigned int user)> SL_GetString{0x0, 0x5083A0};
|
WEAK symbol<scr_string_t(const char* str, unsigned int user)> SL_GetString{0x0, 0x5083A0};
|
||||||
@ -192,13 +192,13 @@ namespace game
|
|||||||
WEAK symbol<void(const char* error, ...)> Sys_Error{0x0, 0x0};
|
WEAK symbol<void(const char* error, ...)> Sys_Error{0x0, 0x0};
|
||||||
WEAK symbol<void(char* path, int pathSize, Sys_Folder folder, const char* filename, const char* ext)>
|
WEAK symbol<void(char* path, int pathSize, Sys_Folder folder, const char* filename, const char* ext)>
|
||||||
Sys_BuildAbsPath{0x0, 0x0};
|
Sys_BuildAbsPath{0x0, 0x0};
|
||||||
WEAK symbol<int()> Sys_Milliseconds{0x0, 0x0};
|
WEAK symbol<int()> Sys_Milliseconds{0x0, 0x5BDDF0};
|
||||||
WEAK symbol<bool()> Sys_IsDatabaseReady2{0x0, 0x4F79C0};
|
WEAK symbol<bool()> Sys_IsDatabaseReady2{0x0, 0x4F79C0};
|
||||||
WEAK symbol<bool(int, void const*, const netadr_s*)> Sys_SendPacket{0x0, 0x5BDA90};
|
WEAK symbol<bool(int, void const*, const netadr_s*)> Sys_SendPacket{0x0, 0x5BDA90};
|
||||||
WEAK symbol<bool(const char* path)> Sys_FileExists{0x0, 0x0};
|
WEAK symbol<bool(const char* path)> Sys_FileExists{0x0, 0x0};
|
||||||
|
|
||||||
WEAK symbol<const char* (const char*)> UI_GetMapDisplayName{0x0, 0x0};
|
WEAK symbol<const char*(const char*)> UI_GetMapDisplayName{0x0, 0x4DDEE0};
|
||||||
WEAK symbol<const char* (const char*)> UI_GetGameTypeDisplayName{0x0, 0x4DD8C0};
|
WEAK symbol<const char*(const char*)> UI_GetGameTypeDisplayName{0x0, 0x4DD8C0};
|
||||||
WEAK symbol<void(unsigned int localClientNum, const char** args)> UI_RunMenuScript{0x0, 0x1E35B0};
|
WEAK symbol<void(unsigned int localClientNum, const char** args)> UI_RunMenuScript{0x0, 0x1E35B0};
|
||||||
WEAK symbol<int(const char* text, int maxChars, Font_s* font, float scale)> UI_TextWidth{0x0, 0x0};
|
WEAK symbol<int(const char* text, int maxChars, Font_s* font, float scale)> UI_TextWidth{0x0, 0x0};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user