Merge branch 'develop' of https://github.com/h1-mod/h1-mod into develop
This commit is contained in:
commit
6adb2b38c3
@ -227,8 +227,8 @@ namespace auth
|
|||||||
utils::hook::jump(0x140488BC1, get_direct_connect_stub(), true); // H1(1.4)
|
utils::hook::jump(0x140488BC1, get_direct_connect_stub(), true); // H1(1.4)
|
||||||
utils::hook::call(0x140250ED2, send_connect_data_stub); // H1(1.4)
|
utils::hook::call(0x140250ED2, send_connect_data_stub); // H1(1.4)
|
||||||
|
|
||||||
// Check for sending connect packet
|
// Skip checks for sending connect packet
|
||||||
utils::hook::set(0x14059A6E0, 0xC301B0);
|
utils::hook::jump(0x1402508FC, 0x140250946);
|
||||||
// Don't instantly timeout the connecting client ? not sure about this
|
// Don't instantly timeout the connecting client ? not sure about this
|
||||||
utils::hook::set(0x14025136B, 0xC3);
|
utils::hook::set(0x14025136B, 0xC3);
|
||||||
}
|
}
|
||||||
|
@ -96,8 +96,7 @@ namespace colors
|
|||||||
const size_t unk, const size_t unk2)
|
const size_t unk, const size_t unk2)
|
||||||
{
|
{
|
||||||
// CL_GetClientName (CL_GetClientNameAndClantag?)
|
// CL_GetClientName (CL_GetClientNameAndClantag?)
|
||||||
const auto result = reinterpret_cast<size_t(*)(int, int, char*, int, size_t, size_t)>(0x14025BAA0)( // H1 (1.4)
|
const auto result = utils::hook::invoke<size_t>(0x14025BAA0, local_client_num, index, buf, size, unk, unk2);
|
||||||
local_client_num, index, buf, size, unk, unk2);
|
|
||||||
|
|
||||||
utils::string::strip(buf, buf, size);
|
utils::string::strip(buf, buf, size);
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ namespace command
|
|||||||
void parse_commandline_stub()
|
void parse_commandline_stub()
|
||||||
{
|
{
|
||||||
parse_command_line();
|
parse_command_line();
|
||||||
reinterpret_cast<void(*)()>(0x1400D8210)(); // mwr: test
|
utils::hook::invoke<void>(0x1400D8210);
|
||||||
}
|
}
|
||||||
|
|
||||||
game::dvar_t* dvar_command_stub()
|
game::dvar_t* dvar_command_stub()
|
||||||
|
@ -26,7 +26,7 @@ namespace dedicated
|
|||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
// R_LoadGraphicsAssets
|
// R_LoadGraphicsAssets
|
||||||
reinterpret_cast<void(*)()>(0x1405DF4B0)();
|
utils::hook::invoke<void>(0x1405DF4B0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_heartbeat()
|
void send_heartbeat()
|
||||||
|
94
src/client/component/filesystem.cpp
Normal file
94
src/client/component/filesystem.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "loader/component_loader.hpp"
|
||||||
|
#include "filesystem.hpp"
|
||||||
|
#include "game_module.hpp"
|
||||||
|
|
||||||
|
#include "game/game.hpp"
|
||||||
|
#include "dvars.hpp"
|
||||||
|
|
||||||
|
#include <utils/hook.hpp>
|
||||||
|
#include <utils/string.hpp>
|
||||||
|
|
||||||
|
namespace filesystem
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
bool custom_path_registered = false;
|
||||||
|
|
||||||
|
std::string get_binary_directory()
|
||||||
|
{
|
||||||
|
const auto dir = game_module::get_host_module().get_folder();
|
||||||
|
return utils::string::replace(dir, "/", "\\");
|
||||||
|
}
|
||||||
|
|
||||||
|
void register_custom_path_stub(const char* path, const char* dir)
|
||||||
|
{
|
||||||
|
if (!custom_path_registered)
|
||||||
|
{
|
||||||
|
custom_path_registered = true;
|
||||||
|
|
||||||
|
const auto launcher_dir = get_binary_directory();
|
||||||
|
game::FS_AddLocalizedGameDirectory(launcher_dir.data(), "data");
|
||||||
|
}
|
||||||
|
|
||||||
|
game::FS_AddLocalizedGameDirectory(path, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fs_startup_stub(const char* gamename)
|
||||||
|
{
|
||||||
|
custom_path_registered = false;
|
||||||
|
game::FS_Startup(gamename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file::file(std::string name)
|
||||||
|
: name_(std::move(name))
|
||||||
|
{
|
||||||
|
char* buffer{};
|
||||||
|
const auto size = game::FS_ReadFile(this->name_.data(), &buffer);
|
||||||
|
|
||||||
|
if (size >= 0 && buffer)
|
||||||
|
{
|
||||||
|
this->valid_ = true;
|
||||||
|
this->buffer_.append(buffer, size);
|
||||||
|
game::FS_FreeFile(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool file::exists() const
|
||||||
|
{
|
||||||
|
return this->valid_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& file::get_buffer() const
|
||||||
|
{
|
||||||
|
return this->buffer_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& file::get_name() const
|
||||||
|
{
|
||||||
|
return this->name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
class component final : public component_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void post_unpack() override
|
||||||
|
{
|
||||||
|
// Set fs_basegame
|
||||||
|
dvars::override::register_string("fs_basegame", "h1-mod", game::DVAR_FLAG_WRITE);
|
||||||
|
|
||||||
|
utils::hook::call(SELECT_VALUE(0x1403B76E2, 0x1404ED3E2), fs_startup_stub);
|
||||||
|
if (game::environment::is_mp())
|
||||||
|
{
|
||||||
|
utils::hook::call(0x1404ED823, fs_startup_stub);
|
||||||
|
}
|
||||||
|
|
||||||
|
utils::hook::call(SELECT_VALUE(0x1403B8D31, 0x1404EE3D0), register_custom_path_stub);
|
||||||
|
utils::hook::call(SELECT_VALUE(0x1403B8D51, 0x1404EE3F0), register_custom_path_stub);
|
||||||
|
utils::hook::call(SELECT_VALUE(0x1403B8D90, 0x1404EE42F), register_custom_path_stub);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
REGISTER_COMPONENT(filesystem::component)
|
19
src/client/component/filesystem.hpp
Normal file
19
src/client/component/filesystem.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace filesystem
|
||||||
|
{
|
||||||
|
class file
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
file(std::string name);
|
||||||
|
|
||||||
|
bool exists() const;
|
||||||
|
const std::string& get_buffer() const;
|
||||||
|
const std::string& get_name() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool valid_ = false;
|
||||||
|
std::string name_;
|
||||||
|
std::string buffer_;
|
||||||
|
};
|
||||||
|
}
|
@ -59,7 +59,7 @@ namespace game_console
|
|||||||
std::vector<std::string> matches{};
|
std::vector<std::string> matches{};
|
||||||
|
|
||||||
float color_white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
float color_white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
float color_title[4] = {0.9f, 0.9f, 0.5f, 1.0f};
|
float color_title[4] = {0.25f, 0.62f, 0.3f, 1.0f};
|
||||||
|
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
@ -453,11 +453,19 @@ namespace game_console
|
|||||||
|
|
||||||
bool console_char_event(const int local_client_num, const int key)
|
bool console_char_event(const int local_client_num, const int key)
|
||||||
{
|
{
|
||||||
if (key == game::keyNum_t::K_GRAVE || key == game::keyNum_t::K_TILDE)
|
if (key == game::keyNum_t::K_GRAVE ||
|
||||||
|
key == game::keyNum_t::K_TILDE ||
|
||||||
|
key == '|' ||
|
||||||
|
key == '\\')
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key > 127)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (*game::keyCatchers & 1)
|
if (*game::keyCatchers & 1)
|
||||||
{
|
{
|
||||||
if (key == game::keyNum_t::K_TAB) // tab (auto complete)
|
if (key == game::keyNum_t::K_TAB) // tab (auto complete)
|
||||||
|
@ -119,7 +119,7 @@ namespace party
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This function either does Dvar_SetString or Dvar_RegisterString for the given dvar
|
// This function either does Dvar_SetString or Dvar_RegisterString for the given dvar
|
||||||
reinterpret_cast<void(*)(const char*, const char*)>(0x1404FB210)(dvar_name, string);
|
utils::hook::invoke<void>(0x1404FB210, dvar_name, string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void disconnect_stub()
|
void disconnect_stub()
|
||||||
@ -129,12 +129,12 @@ namespace party
|
|||||||
if (game::CL_IsCgameInitialized())
|
if (game::CL_IsCgameInitialized())
|
||||||
{
|
{
|
||||||
// CL_ForwardCommandToServer
|
// CL_ForwardCommandToServer
|
||||||
reinterpret_cast<void (*)(int, const char*)>(0x140253480)(0, "disconnect");
|
utils::hook::invoke<void>(0x140253480, 0, "disconnect");
|
||||||
// CL_WritePacket
|
// CL_WritePacket
|
||||||
reinterpret_cast<void (*)(int)>(0x14024DB10)(0);
|
utils::hook::invoke<void>(0x14024DB10, 0);
|
||||||
}
|
}
|
||||||
// CL_Disconnect
|
// CL_Disconnect
|
||||||
reinterpret_cast<void (*)(int)>(0x140252060)(0);
|
utils::hook::invoke<void>(0x140252060, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,7 +337,8 @@ namespace party
|
|||||||
*reinterpret_cast<int*>(0x14A3A91D0) = 1; // sv_map_restart
|
*reinterpret_cast<int*>(0x14A3A91D0) = 1; // sv_map_restart
|
||||||
*reinterpret_cast<int*>(0x14A3A91D4) = 1; // sv_loadScripts
|
*reinterpret_cast<int*>(0x14A3A91D4) = 1; // sv_loadScripts
|
||||||
*reinterpret_cast<int*>(0x14A3A91D8) = 0; // sv_migrate
|
*reinterpret_cast<int*>(0x14A3A91D8) = 0; // sv_migrate
|
||||||
reinterpret_cast<void(*)()>(0x14047E7F0)(); // SV_CheckLoadGame
|
|
||||||
|
utils::hook::invoke<void>(0x14047E7F0); // SV_CheckLoadGame
|
||||||
});
|
});
|
||||||
|
|
||||||
command::add("fast_restart", []()
|
command::add("fast_restart", []()
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
#include "network.hpp"
|
#include "network.hpp"
|
||||||
#include "scheduler.hpp"
|
#include "scheduler.hpp"
|
||||||
|
#include "filesystem.hpp"
|
||||||
|
|
||||||
#include "game/game.hpp"
|
#include "game/game.hpp"
|
||||||
#include "game/dvars.hpp"
|
#include "game/dvars.hpp"
|
||||||
@ -77,16 +78,27 @@ namespace patches
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CG_SetClientDvarFromServer
|
// CG_SetClientDvarFromServer
|
||||||
reinterpret_cast<void(*)(void*, void*, const char*, const char*)>(0x140236120)(a1, a2, dvar, value);
|
utils::hook::invoke<void>(0x140236120, a1, a2, dvar, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void aim_assist_add_to_target_list(void* a1, void* a2)
|
const char* db_read_raw_file_stub(const char* filename, char* buf, const int size)
|
||||||
{
|
{
|
||||||
if (!dvars::aimassist_enabled->current.enabled)
|
std::string file_name = filename;
|
||||||
return;
|
if (file_name.find(".cfg") == std::string::npos)
|
||||||
|
{
|
||||||
|
file_name.append(".cfg");
|
||||||
|
}
|
||||||
|
|
||||||
game::AimAssist_AddToTargetList(a1, a2);
|
const auto file = filesystem::file(file_name);
|
||||||
}*/
|
if (file.exists())
|
||||||
|
{
|
||||||
|
snprintf(buf, size, "%s\n", file.get_buffer().data());
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
// DB_ReadRawFile
|
||||||
|
return utils::hook::invoke<const char*>(SELECT_VALUE(0x1401CD4F0, 0x1402BEF10), filename, buf, size);
|
||||||
|
}
|
||||||
|
|
||||||
void bsp_sys_error_stub(const char* error, const char* arg1)
|
void bsp_sys_error_stub(const char* error, const char* arg1)
|
||||||
{
|
{
|
||||||
@ -131,7 +143,7 @@ namespace patches
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
reinterpret_cast<void(*)(game::mp::client_t*, game::msg_t*)>(0x140481A00)(client, msg);
|
utils::hook::invoke<void>(0x140481A00, client, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void aim_assist_add_to_target_list(void* a1, void* a2)
|
void aim_assist_add_to_target_list(void* a1, void* a2)
|
||||||
@ -172,6 +184,9 @@ namespace patches
|
|||||||
utils::hook::nop(SELECT_VALUE(0x14018797E, 0x14024EF60), 2);
|
utils::hook::nop(SELECT_VALUE(0x14018797E, 0x14024EF60), 2);
|
||||||
utils::hook::nop(SELECT_VALUE(0x1401856DC, 0x14024C6B0), 6);
|
utils::hook::nop(SELECT_VALUE(0x1401856DC, 0x14024C6B0), 6);
|
||||||
|
|
||||||
|
// Allow executing custom cfg files with the "exec" command
|
||||||
|
utils::hook::call(SELECT_VALUE(0x140343855, 0x140403E28), db_read_raw_file_stub);
|
||||||
|
|
||||||
if (!game::environment::is_sp())
|
if (!game::environment::is_sp())
|
||||||
{
|
{
|
||||||
patch_mp();
|
patch_mp();
|
||||||
|
@ -145,7 +145,7 @@ namespace game
|
|||||||
* Variables
|
* Variables
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
|
||||||
WEAK symbol<CmdArgs> sv_cmd_args{0, 0x14946BA20};
|
WEAK symbol<CmdArgs> sv_cmd_args{0x14AD99A10, 0x14946BA20};
|
||||||
|
|
||||||
WEAK symbol<const char*> command_whitelist{0x141079A60, 0x14120C360};
|
WEAK symbol<const char*> command_whitelist{0x141079A60, 0x14120C360};
|
||||||
WEAK symbol<cmd_function_s*> cmd_functions{0x14AD99AB8, 0x14946BAC8};
|
WEAK symbol<cmd_function_s*> cmd_functions{0x14AD99AB8, 0x14946BAC8};
|
||||||
|
Loading…
Reference in New Issue
Block a user