random cleanup and changes

This commit is contained in:
m 2022-11-01 00:09:02 -05:00
parent 3a04ad3132
commit d745e9df04
34 changed files with 174 additions and 196 deletions

View File

@ -1,9 +1,10 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include "arxan.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>

View File

@ -2,18 +2,19 @@
#include "loader/component_loader.hpp"
#include "auth.hpp"
#include "component/command.hpp"
#include "command.hpp"
#include "console.hpp"
#include "network.hpp"
#include "game/game.hpp"
#include "steam/steam.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
#include <utils/smbios.hpp>
#include <utils/info_string.hpp>
#include <utils/cryptography.hpp>
#include "game/game.hpp"
#include "steam/steam.hpp"
namespace auth
{
namespace
@ -249,9 +250,9 @@ namespace auth
utils::hook::set(0x12D93C_b, 0xC3);
}
command::add("guid", []()
command::add("guid", []
{
printf("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits);
console::info("Your guid: %llX\n", steam::SteamUser()->GetSteamID().bits);
});
}
};

View File

@ -1,5 +1,6 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>

View File

@ -29,10 +29,10 @@ namespace bots
void bot_team_join(const int entity_num)
{
const game::scr_entref_t entref{static_cast<uint16_t>(entity_num), 0};
scheduler::once([entref]()
scheduler::once([entref]
{
scripting::notify(entref, "luinotifyserver", {"team_select", 2});
scheduler::once([entref]()
scheduler::once([entref]
{
auto* _class = utils::string::va("class%d", utils::cryptography::random::get_integer() % 5);
scripting::notify(entref, "luinotifyserver", {"class_select", _class});
@ -65,7 +65,7 @@ namespace bots
}
else
{
scheduler::once([]()
scheduler::once([]
{
add_bot();
}, scheduler::pipeline::server, 100ms);

View File

@ -1,13 +1,13 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "command.hpp"
#include "dvars.hpp"
#include "localized_strings.hpp"
#include "scheduler.hpp"
#include "command.hpp"
#include "version.hpp"
#include "game/game.hpp"
#include "dvars.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>

View File

@ -34,9 +34,8 @@ namespace bullet
return;
}
bg_surface_penetration = dvars::register_float("bg_surfacePenetration", 0.0f,
0.0f, std::numeric_limits<float>::max(), 0,
"Set to a value greater than 0 to override the surface penetration depth");
bg_surface_penetration = dvars::register_float("bg_surfacePenetration", 0.0f, 0.0f, std::numeric_limits<float>::max(), 0,
"Set to a value greater than 0 to override the bullet surface penetration depth");
bg_get_surface_penetration_depth_hook.create(0x2E1110_b, &bg_get_surface_penetration_depth_stub);
}

View File

@ -1,18 +1,18 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "game/game.hpp"
#include "game/dvars.hpp"
#include "game/scripting/execution.hpp"
#include "command.hpp"
#include "console.hpp"
#include "dvars.hpp"
#include "game_console.hpp"
#include "fastfiles.hpp"
#include "filesystem.hpp"
#include "scheduler.hpp"
#include "logfile.hpp"
#include "dvars.hpp"
#include "game/game.hpp"
#include "game/dvars.hpp"
#include "game/scripting/execution.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>

View File

@ -1,10 +1,10 @@
#include <std_include.hpp>
#include "console.hpp"
#include "loader/component_loader.hpp"
#include "game/game.hpp"
#include "command.hpp"
#include "console.hpp"
#include "rcon.hpp"
#include "version.hpp"
@ -62,7 +62,7 @@ namespace console
{
static thread_local char buffer[0x1000];
const auto count = _vsnprintf_s(buffer, sizeof(buffer), sizeof(buffer), message, *ap);
const auto count = vsnprintf_s(buffer, _TRUNCATE, message, *ap);
if (count < 0)
{
return {};

View File

@ -138,7 +138,7 @@ namespace dedicated
va_end(ap);
scheduler::once([]()
scheduler::once([]
{
command::execute("map_rotate");
}, scheduler::main, 3s);
@ -313,7 +313,7 @@ namespace dedicated
{
if (game::Live_SyncOnlineDataFlags(0) == 32 && game::Sys_IsDatabaseReady2())
{
scheduler::once([]()
scheduler::once([]
{
command::execute("xstartprivateparty", true);
command::execute("disconnect", true); // 32 -> 0
@ -324,7 +324,7 @@ namespace dedicated
return scheduler::cond_continue;
}, scheduler::pipeline::main, 1s);
scheduler::on_game_initialized([]()
scheduler::on_game_initialized([]
{
initialize();

View File

@ -1,8 +1,11 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "game/game.hpp"
#include "scheduler.hpp"
#include <utils\string.hpp>
#include "game/game.hpp"
#include <utils/string.hpp>
namespace dedicated_info
{
@ -16,7 +19,7 @@ namespace dedicated_info
return;
}
scheduler::loop([]()
scheduler::loop([]
{
auto* sv_running = game::Dvar_FindVar("sv_running");
if (!sv_running || !sv_running->current.enabled || (*game::mp::svs_clients) == nullptr)
@ -25,9 +28,9 @@ namespace dedicated_info
return;
}
auto* const sv_hostname = game::Dvar_FindVar("sv_hostname");
auto* const sv_maxclients = game::Dvar_FindVar("sv_maxclients");
auto* const mapname = game::Dvar_FindVar("mapname");
const auto sv_hostname = game::Dvar_FindVar("sv_hostname");
const auto sv_maxclients = game::Dvar_FindVar("sv_maxclients");
const auto mapname = game::Dvar_FindVar("mapname");
auto bot_count = 0;
auto client_count = 0;

View File

@ -1,16 +1,16 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include <utils/hook.hpp>
#include <utils/thread.hpp>
#include "game/game.hpp"
#include "game/demonware/servers/lobby_server.hpp"
#include "game/demonware/servers/auth3_server.hpp"
#include "game/demonware/servers/stun_server.hpp"
#include "game/demonware/servers/umbrella_server.hpp"
#include "game/demonware/server_registry.hpp"
#include <game/dvars.hpp>
#include "game/dvars.hpp"
#include <utils/hook.hpp>
#include <utils/thread.hpp>
#define TCP_BLOCKING true
#define UDP_BLOCKING false

View File

@ -1,15 +1,15 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include "console.hpp"
#include "command.hpp"
#include "discord.hpp"
#include "materials.hpp"
#include "network.hpp"
#include "party.hpp"
#include "materials.hpp"
#include "discord.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include "game/ui_scripting/execution.hpp"
#include <utils/string.hpp>
@ -58,16 +58,12 @@ namespace discord
static char details[0x80] = {0};
const auto map = game::Dvar_FindVar("mapname")->current.string;
const auto key = utils::string::va("PRESENCE_%s%s", SELECT_VALUE("SP_", ""), map);
const char* mapname = nullptr;
const char* mapname = map;
if (game::DB_XAssetExists(game::ASSET_TYPE_LOCALIZE, key) && !game::DB_IsXAssetDefault(game::ASSET_TYPE_LOCALIZE, key))
{
mapname = game::UI_SafeTranslateString(key);
}
else
{
mapname = map;
}
if (game::environment::is_mp())
{
@ -80,7 +76,6 @@ namespace discord
clean_hostname, sizeof(clean_hostname));
auto max_clients = party::server_client_count();
// When true, we are in Private Match
if (game::SV_Loaded())
{
strcpy_s(clean_hostname, "Private Match");
@ -227,12 +222,17 @@ namespace discord
handlers.joinGame = join_game;
handlers.joinRequest = join_request;
}
else
{
handlers.joinGame = nullptr;
handlers.joinRequest = nullptr;
}
Discord_Initialize("947125042930667530", &handlers, 1, nullptr);
scheduler::once(download_default_avatar, scheduler::pipeline::async);
scheduler::once([]()
scheduler::once([]
{
scheduler::once(update_discord, scheduler::pipeline::async);
scheduler::loop(update_discord, scheduler::pipeline::async, 5s);
@ -270,15 +270,12 @@ namespace discord
static void join_game(const char* join_secret)
{
console::info("Discord: Join game called with join secret: %s\n", join_secret);
std::string secret = join_secret;
scheduler::once([=]()
scheduler::once([=]
{
game::netadr_s target{};
if (game::NET_StringToAdr(secret.data(), &target))
if (game::NET_StringToAdr(join_secret, &target))
{
console::info("Discord: Connecting to server: %s\n", secret.data());
console::info("Discord: Connecting to server: %s\n", join_secret);
party::connect(target);
}
}, scheduler::pipeline::main);
@ -286,7 +283,7 @@ namespace discord
static void join_request(const DiscordUser* request)
{
console::info("Discord: join_request from %s (%s)\n", request->username, request->userId);
console::info("Discord: Join request from %s (%s)\n", request->username, request->userId);
if (game::Com_InFrontend() || !ui_scripting::lui_running())
{
@ -299,7 +296,7 @@ namespace discord
std::string discriminator = request->discriminator;
std::string username = request->username;
scheduler::once([=]()
scheduler::once([=]
{
const ui_scripting::table request_table{};
request_table.set("avatar", avatar);

View File

@ -71,7 +71,7 @@ namespace download
static_cast<double>(total));
}
scheduler::once([=]()
scheduler::once([=]
{
ui_scripting::notify("mod_download_progress",
{
@ -91,7 +91,7 @@ namespace download
void menu_error(const std::string& error)
{
scheduler::once([=]()
scheduler::once([=]
{
party::menu_error(error);
}, scheduler::pipeline::lui);
@ -102,7 +102,7 @@ namespace download
{
if (download_active())
{
scheduler::schedule([=]()
scheduler::schedule([=]
{
if (!download_active())
{
@ -128,14 +128,12 @@ namespace download
return;
}
scheduler::once([=]()
scheduler::once([]
{
const ui_scripting::table mod_data_table{};
ui_scripting::notify("mod_download_start", {});
}, scheduler::pipeline::lui);
scheduler::once([=]()
scheduler::once([=]
{
{
const auto _0 = gsl::finally(&mark_unactive);
@ -148,7 +146,7 @@ namespace download
for (const auto& file : files)
{
scheduler::once([=]()
scheduler::once([=]
{
const ui_scripting::table data_table{};
data_table.set("name", file.name.data());
@ -192,12 +190,12 @@ namespace download
}
}
scheduler::once([]()
scheduler::once([]
{
ui_scripting::notify("mod_download_done", {});
}, scheduler::pipeline::lui);
scheduler::once([=]()
scheduler::once([target]
{
party::connect(target);
}, scheduler::pipeline::main);
@ -216,11 +214,10 @@ namespace download
globals_.abort = true;
});
scheduler::once([]()
scheduler::once([]
{
ui_scripting::notify("mod_download_done", {});
party::menu_error("Download for server mod has been cancelled.");
}, scheduler::pipeline::lui);
}
}

View File

@ -1,6 +1,7 @@
#pragma once
#include "game/game.hpp"
#include <utils/info_string.hpp>
namespace download

View File

@ -135,7 +135,7 @@ namespace dvar_cheats
utils::hook::nop(0x1861D4_b, 8); // let our stub handle zero-source sets
utils::hook::jump(0x1861DF_b, get_dvar_flag_checks_stub(), true); // check extra dvar flags when setting values
scheduler::once([]()
scheduler::once([]
{
dvars::register_bool("sv_cheats", false, game::DvarFlags::DVAR_FLAG_REPLICATED,
"Allow cheat commands and dvars on this server");

View File

@ -1,5 +1,6 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "dvars.hpp"
#include "game/game.hpp"

View File

@ -1,8 +1,11 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "system_check.hpp"
#include "scheduler.hpp"
#include "scheduler.hpp"
#include "system_check.hpp"
#include "version.hpp"
#include "game/dvars.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>
@ -13,10 +16,6 @@
#include <exception/minidump.hpp>
#include <version.hpp>
#include "game/dvars.hpp"
namespace exception
{
namespace
@ -246,7 +245,7 @@ namespace exception
SetUnhandledExceptionFilter(exception_filter);
utils::hook::jump(SetUnhandledExceptionFilter, set_unhandled_exception_filter_stub, true);
scheduler::on_game_initialized([]()
scheduler::on_game_initialized([]
{
is_initialized() = true;
});
@ -255,7 +254,7 @@ namespace exception
void post_unpack() override
{
dvars::cg_legacyCrashHandling = dvars::register_bool("cg_legacyCrashHandling",
false, game::DVAR_FLAG_SAVED, "Disable new crash handling");
false, game::DVAR_FLAG_SAVED, "Toggle new crash handling");
}
};
}

View File

@ -1,13 +1,13 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "game/dvars.hpp"
#include "fastfiles.hpp"
#include "command.hpp"
#include "console.hpp"
#include "fastfiles.hpp"
#include "filesystem.hpp"
#include "game/dvars.hpp"
#include <utils/hook.hpp>
#include <utils/concurrency.hpp>
#include <utils/io.hpp>

View File

@ -1,8 +1,8 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "fonts.hpp"
#include "console.hpp"
#include "fonts.hpp"
#include "filesystem.hpp"
#include "game/game.hpp"

View File

@ -1,15 +1,15 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "dvars.hpp"
#include "fps.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include "game/dvars.hpp"
#include "dvars.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
#include <component/scheduler.hpp>
namespace fps
{

View File

@ -89,8 +89,7 @@ namespace gsc
}
std::string source_buffer;
const auto rawfile_gsc_exists = read_script_file(real_name + ".gsc", &source_buffer);
if (!rawfile_gsc_exists || source_buffer.empty())
if (!read_script_file(real_name + ".gsc", &source_buffer) || source_buffer.empty())
{
return nullptr;
}
@ -98,17 +97,12 @@ namespace gsc
if (game::DB_XAssetExists(game::ASSET_TYPE_SCRIPTFILE, file_name) &&
!game::DB_IsXAssetDefault(game::ASSET_TYPE_SCRIPTFILE, file_name))
{
// filter out developer rawfiles that won't compile
// filter out gsc rawfiles that contain developer code (has ScriptFile counterparts for ship, won't compile either)
if ((real_name.starts_with("maps/createfx") || real_name.starts_with("maps/createart") || real_name.starts_with("maps/mp"))
&& (real_name.ends_with("_fx") || real_name.ends_with("_fog") || real_name.ends_with("_hdr")))
{
return game::DB_FindXAssetHeader(game::ASSET_TYPE_SCRIPTFILE, file_name, false).scriptfile;
}
if (!rawfile_gsc_exists)
{
return game::DB_FindXAssetHeader(game::ASSET_TYPE_SCRIPTFILE, file_name, false).scriptfile;
}
}
std::vector<std::uint8_t> data;

View File

@ -1,11 +1,15 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "command.hpp"
#include "console.hpp"
#include "scheduler.hpp"
#include "game/game.hpp"
#include "game/dvars.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
#include "game/game.hpp"
#include <game/dvars.hpp>
namespace map_rotation
{
@ -82,14 +86,12 @@ namespace map_rotation
auto* const dvar = game::Dvar_FindVar("sv_autoPriority");
if (dvar && dvar->current.enabled)
{
scheduler::on_game_initialized([]()
scheduler::on_game_initialized([]
{
//printf("=======================setting OLD priority=======================\n");
SetPriorityClass(GetCurrentProcess(), previous_priority);
}, scheduler::pipeline::main, 1s);
previous_priority = GetPriorityClass(GetCurrentProcess());
//printf("=======================setting NEW priority=======================\n");
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
}
}
@ -119,7 +121,7 @@ namespace map_rotation
change_process_priority();
if (!game::SV_MapExists(value.data()))
{
printf("map_rotation: '%s' map doesn't exist!\n", value.data());
console::info("map_rotation: '%s' map doesn't exist!\n", value.data());
launch_default_map();
return;
}
@ -128,7 +130,7 @@ namespace map_rotation
}
else
{
printf("Invalid map rotation key: %s\n", key.data());
console::info("Invalid map rotation key: %s\n", key.data());
}
}
@ -137,7 +139,7 @@ namespace map_rotation
void trigger_map_rotation()
{
scheduler::schedule([]()
scheduler::schedule([]
{
if (game::CL_IsCgameInitialized())
{
@ -160,7 +162,7 @@ namespace map_rotation
return;
}
scheduler::once([]()
scheduler::once([]
{
dvars::register_string("sv_mapRotation", "", game::DVAR_FLAG_NONE, "");
dvars::register_string("sv_mapRotationCurrent", "", game::DVAR_FLAG_NONE, "");

View File

@ -7,6 +7,7 @@
#include "dvars.hpp"
#include "game/dvars.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
@ -33,7 +34,7 @@ namespace network
return false;
}
const std::string_view data(message->data + offset, message->cursize - offset);
const std::string data(message->data + offset, message->cursize - offset);
handler->second(*address, data);
#ifdef DEBUG
@ -302,11 +303,10 @@ namespace network
utils::hook::set<int>(0x4F1E25_b, max_packet_size);
// ignore built in "print" oob command and add in our own
utils::hook::set<uint8_t>(0x12F817_b, 0xEB);
on("print", [](const game::netadr_s&, const std::string_view& data)
utils::hook::set<std::uint8_t>(0x12F817_b, 0xEB);
on("print", [](const game::netadr_s&, const std::string& data)
{
const std::string message{data};
console::info("%s\n", message.data());
console::info("%s\n", data.data());
});
// Use our own socket since the game's socket doesn't work with non localhost addresses

View File

@ -3,7 +3,7 @@
namespace network
{
using callback = std::function<void(const game::netadr_s&, const std::string_view&)>;
using callback = std::function<void(const game::netadr_s&, const std::string&)>;
void on(const std::string& command, const callback& callback);
void send(const game::netadr_s& address, const std::string& command, const std::string& data = {}, char separator = ' ');

View File

@ -486,11 +486,6 @@ namespace party
return connect_state.host;
}
std::string get_state_challenge()
{
return connect_state.challenge;
}
void start_map(const std::string& mapname, bool dev)
{
if (game::Live_SyncOnlineDataFlags(0) > 32)
@ -770,7 +765,7 @@ namespace party
game::SV_GameSendServerCommand(client_num, game::SV_CMD_CAN_IGNORE,
utils::string::va("%c \"%s: %s\"", 84, name, message.data()));
printf("%s -> %i: %s\n", name, client_num, message.data());
console::info("%s -> %i: %s\n", name, client_num, message.data());
});
command::add("tellraw", [](const command::params& params)
@ -785,7 +780,7 @@ namespace party
game::SV_GameSendServerCommand(client_num, game::SV_CMD_CAN_IGNORE,
utils::string::va("%c \"%s\"", 84, message.data()));
printf("%i: %s\n", client_num, message.data());
console::info("%i: %s\n", client_num, message.data());
});
command::add("say", [](const command::params& params)
@ -800,7 +795,7 @@ namespace party
game::SV_GameSendServerCommand(
-1, game::SV_CMD_CAN_IGNORE, utils::string::va("%c \"%s: %s\"", 84, name, message.data()));
printf("%s: %s\n", name, message.data());
console::info("%s: %s\n", name, message.data());
});
command::add("sayraw", [](const command::params& params)
@ -814,15 +809,15 @@ namespace party
game::SV_GameSendServerCommand(-1, game::SV_CMD_CAN_IGNORE,
utils::string::va("%c \"%s\"", 84, message.data()));
printf("%s\n", message.data());
console::info("%s\n", message.data());
});
network::on("getInfo", [](const game::netadr_s& target, const std::string_view& data)
network::on("getInfo", [](const game::netadr_s& target, const std::string& data)
{
const auto mapname = get_dvar_string("mapname");
utils::info_string info{};
info.set("challenge", std::string{data});
utils::info_string info;
info.set("challenge", data);
info.set("gamename", "H1");
info.set("hostname", get_dvar_string("sv_hostname"));
info.set("gametype", get_dvar_string("g_gametype"));
@ -871,9 +866,9 @@ namespace party
network::send(target, "infoResponse", info.build(), '\n');
});
network::on("infoResponse", [](const game::netadr_s& target, const std::string_view& data)
network::on("infoResponse", [](const game::netadr_s& target, const std::string& data)
{
const utils::info_string info{data};
const utils::info_string info(data);
server_list::handle_info_response(target, info);
if (connect_state.host != target)

View File

@ -12,7 +12,6 @@ namespace party
void clear_sv_motd();
game::netadr_s get_state_host();
std::string get_state_challenge();
int server_client_count();
int get_client_num_by_name(const std::string& name);

View File

@ -491,7 +491,7 @@ namespace server_list
scheduler::loop(do_frame_work, scheduler::pipeline::main);
scheduler::loop(check_refresh, scheduler::pipeline::lui, 10ms);
network::on("getServersResponse", [](const game::netadr_s& target, const std::string_view& data)
network::on("getServersResponse", [](const game::netadr_s& target, const std::string& data)
{
{
std::lock_guard<std::mutex> _(mutex);
@ -503,7 +503,7 @@ namespace server_list
master_state.requesting = false;
std::optional<size_t> start{};
for (size_t i = 0; i + 6 < data.size(); ++i)
for (std::size_t i = 0; i + 6 < data.size(); ++i)
{
if (data[i + 6] == '\\')
{
@ -527,8 +527,8 @@ namespace server_list
game::netadr_s address{};
address.type = game::NA_IP;
address.localNetID = game::NS_CLIENT1;
memcpy(&address.ip[0], data.data() + i + 0, 4);
memcpy(&address.port, data.data() + i + 4, 2);
std::memcpy(&address.ip[0], data.data() + i + 0, 4);
std::memcpy(&address.port, data.data() + i + 4, 2);
master_state.queued_servers[address] = 0;
}

View File

@ -1,5 +1,8 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "gsc/script_extension.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>
@ -7,34 +10,6 @@
namespace slowmotion
{
namespace
{
void scr_cmd_set_slow_motion()
{
if (game::Scr_GetNumParam() < 1)
{
return;
}
int duration = 1000;
float end = 1.0f;
const float start = game::Scr_GetFloat(0);
if (game::Scr_GetNumParam() >= 2)
{
end = game::Scr_GetFloat(1);
}
if (game::Scr_GetNumParam() >= 3)
{
duration = static_cast<int>(game::Scr_GetFloat(2) * 1000.0f);
}
game::SV_SetConfigstring(10, utils::string::va("%i %i %g %g", *game::mp::gameTime, duration, start, end));
game::Com_SetSlowMotion(start, end, duration);
}
}
class component final : public component_interface
{
public:
@ -45,7 +20,22 @@ namespace slowmotion
return;
}
utils::hook::jump(0x43D2E0_b, scr_cmd_set_slow_motion);
gsc::function::add("setslowmotion", [](const gsc::function_args& args)
{
if (args.size() == 0)
{
return scripting::script_value{};
}
const auto start = args[0].as<float>();
const auto end = (args.size() > 0 ? args[1].as<float>() : 1.0f);
const auto duration = (args.size() > 1 ? args[2].as<int>() : 1) * 1000;
game::SV_SetConfigstring(10, utils::string::va("%i %i %g %g", *game::mp::gameTime, duration, start, end));
game::Com_SetSlowMotion(start, end, duration);
return scripting::script_value{};
});
}
};
}

View File

@ -5,16 +5,16 @@
#include "arxan.hpp"
#include <utils/nt.hpp>
#include <utils/flags.hpp>
#include <utils/string.hpp>
#include <utils/binary_resource.hpp>
#include "game/game.hpp"
#include "steam/interface.hpp"
#include "steam/steam.hpp"
#include <utils/nt.hpp>
#include <utils/flags.hpp>
#include <utils/string.hpp>
#include <utils/binary_resource.hpp>
namespace steam_proxy
{
namespace

View File

@ -1,7 +1,8 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "system_check.hpp"
#include "arxan.hpp"
#include "system_check.hpp"
#include "game/game.hpp"

View File

@ -2,16 +2,15 @@
#include "loader/component_loader.hpp"
#include "console.hpp"
#include "scheduler.hpp"
#include "dvars.hpp"
#include "updater.hpp"
#include "fastfiles.hpp"
#include "game/ui_scripting/execution.hpp"
#include "version.h"
#include "dvars.hpp"
#include "scheduler.hpp"
#include "updater.hpp"
#include "version.hpp"
#include "game/game.hpp"
#include "game/dvars.hpp"
#include "game/ui_scripting/execution.hpp"
#include <utils/concurrency.hpp>
#include <utils/cryptography.hpp>

View File

@ -10,6 +10,7 @@ namespace videos
namespace
{
utils::hook::detour playvid_hook;
std::unordered_map<std::string, std::string> video_replaces;
void playvid(const char* name, const int a2, const int a3)

View File

@ -12,37 +12,34 @@ namespace virtuallobby
{
game::dvar_t* virtual_lobby_fovscale;
void* get_get_fovscale_stub()
void get_get_fovscale_stub(utils::hook::assembler& a)
{
return utils::hook::assemble([](utils::hook::assembler& a)
{
const auto ret = a.newLabel();
const auto original = a.newLabel();
const auto ret = a.newLabel();
const auto original = a.newLabel();
a.pushad64();
a.mov(rax, qword_ptr(0x2999CE8_b)); // virtualLobbyInFiringRange
a.cmp(byte_ptr(rax, 0x10), 1);
a.je(original);
a.call_aligned(game::VirtualLobby_Loaded);
a.cmp(al, 0);
a.je(original);
a.pushad64();
a.mov(rax, qword_ptr(0x2999CE8_b)); // virtualLobbyInFiringRange
a.cmp(byte_ptr(rax, 0x10), 1);
a.je(original);
a.call_aligned(game::VirtualLobby_Loaded);
a.cmp(al, 0);
a.je(original);
// virtuallobby
a.popad64();
a.mov(rax, ptr(reinterpret_cast<int64_t>(&virtual_lobby_fovscale)));
a.jmp(ret);
// virtuallobby
a.popad64();
a.mov(rax, ptr(reinterpret_cast<int64_t>(&virtual_lobby_fovscale)));
a.jmp(ret);
// original
a.bind(original);
a.popad64();
a.mov(rax, qword_ptr(0x14C4EC8_b));
a.jmp(ret);
// original
a.bind(original);
a.popad64();
a.mov(rax, qword_ptr(0x14C4EC8_b));
a.jmp(ret);
a.bind(ret);
a.mov(rdi, rax);
a.mov(ecx, 8);
a.jmp(0x104545_b);
});
a.bind(ret);
a.mov(rdi, rax);
a.mov(ecx, 8);
a.jmp(0x104545_b);
}
}
@ -59,7 +56,7 @@ namespace virtuallobby
virtual_lobby_fovscale = dvars::register_float_hashed("virtualLobby_fovScale", 0.7f, 0.0f, 2.0f,
game::DVAR_FLAG_SAVED, "Field of view scaled for the virtual lobby");
utils::hook::jump(0x104539_b, get_get_fovscale_stub(), true);
utils::hook::jump(0x104539_b, utils::hook::assemble(get_get_fovscale_stub), true);
}
};
}

View File

@ -1,13 +1,13 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "game/game.hpp"
#include "console.hpp"
#include "command.hpp"
#include "console.hpp"
#include "fastfiles.hpp"
#include "utils/hook.hpp"
#include "game/game.hpp"
#include <utils/hook.hpp>
namespace weapon
{