[General] Get rid of unnecessary submodules

This commit is contained in:
momo5502 2017-01-06 15:27:35 +01:00
parent a6314ab418
commit c9d160c72a
59 changed files with 263 additions and 247 deletions

View File

@ -49,6 +49,7 @@ namespace Components
#include "Modules\Command.hpp"
#include "Modules\Console.hpp"
#include "Modules\IPCPipe.hpp"
#include "Modules\UIScript.hpp"
#include "Modules\ModList.hpp"
#include "Modules\Network.hpp"
#include "Modules\Theatre.hpp"
@ -61,7 +62,6 @@ namespace Components
#include "Modules\RawFiles.hpp"
#include "Modules\Renderer.hpp"
#include "Modules\UIFeeder.hpp"
#include "Modules\UIScript.hpp"
#include "Modules\AntiCheat.hpp"
#include "Modules\Dedicated.hpp"
#include "Modules\Discovery.hpp"

View File

@ -198,7 +198,7 @@ namespace Components
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, reinterpret_cast<char*>(callee), &module);
GetModuleFileNameA(module, buffer, sizeof buffer);
MessageBoxA(0, fmt::sprintf("Loading library %s via %s %X", std::string(library.begin(), library.end()).data(), buffer, reinterpret_cast<uint32_t>(callee)).data(), 0, 0);
MessageBoxA(0, Utils::String::VA("Loading library %s via %s %X", std::string(library.begin(), library.end()).data(), buffer, reinterpret_cast<uint32_t>(callee)), 0, 0);
return LoadLibraryExW(library.data(), NULL, 0);
}

View File

@ -4,8 +4,8 @@ namespace Components
{
thread_local bool AssetHandler::BypassState;
std::map<Game::XAssetType, AssetHandler::IAsset*> AssetHandler::AssetInterfaces;
std::map<Game::XAssetType, wink::slot<AssetHandler::Callback>> AssetHandler::TypeCallbacks;
wink::signal<wink::slot<AssetHandler::RestrictCallback>> AssetHandler::RestrictSignal;
std::map<Game::XAssetType, Utils::Slot<AssetHandler::Callback>> AssetHandler::TypeCallbacks;
Utils::Signal<AssetHandler::RestrictCallback> AssetHandler::RestrictSignal;
std::map<void*, void*> AssetHandler::Relocations;
@ -215,12 +215,12 @@ namespace Components
}
}
void AssetHandler::OnFind(Game::XAssetType type, AssetHandler::Callback* callback)
void AssetHandler::OnFind(Game::XAssetType type, Utils::Slot<AssetHandler::Callback> callback)
{
AssetHandler::TypeCallbacks[type] = callback;
}
void AssetHandler::OnLoad(AssetHandler::RestrictCallback* callback)
void AssetHandler::OnLoad(Utils::Slot<AssetHandler::RestrictCallback> callback)
{
AssetHandler::RestrictSignal.connect(callback);
}

View File

@ -24,8 +24,8 @@ namespace Components
const char* getName() { return "AssetHandler"; };
#endif
static void OnFind(Game::XAssetType type, Callback* callback);
static void OnLoad(RestrictCallback* callback);
static void OnFind(Game::XAssetType type, Utils::Slot<Callback> callback);
static void OnLoad(Utils::Slot<RestrictCallback> callback);
static void ClearRelocations();
static void Relocate(void* start, void* to, DWORD size = 4);
@ -45,8 +45,8 @@ namespace Components
static std::map<std::string, Game::XAssetHeader> TemporaryAssets[Game::XAssetType::ASSET_TYPE_COUNT];
static std::map<Game::XAssetType, IAsset*> AssetInterfaces;
static std::map<Game::XAssetType, wink::slot<Callback>> TypeCallbacks;
static wink::signal<wink::slot<RestrictCallback>> RestrictSignal;
static std::map<Game::XAssetType, Utils::Slot<Callback>> TypeCallbacks;
static Utils::Signal<RestrictCallback> RestrictSignal;
static std::map<void*, void*> Relocations;

View File

@ -24,7 +24,7 @@ namespace Assets
const char* tempName = image->name;
if (tempName[0] == '*') tempName++;
Components::FileSystem::File imageFile(fmt::sprintf("images/%s.iw4xImage", tempName));
Components::FileSystem::File imageFile(Utils::String::VA("images/%s.iw4xImage", tempName));
if (imageFile.exists())
{
Utils::Stream::Reader reader(builder->getAllocator(), imageFile.getBuffer());

View File

@ -128,7 +128,7 @@ namespace Assets
Utils::String::Replace(name, "maps/mp/", "");
Utils::String::Replace(name, ".d3dbsp", "");
Components::FileSystem::File mapFile(fmt::sprintf("gfxworld/%s.iw4xGfxWorld", name.data()));
Components::FileSystem::File mapFile(Utils::String::VA("gfxworld/%s.iw4xGfxWorld", name.data()));
if (mapFile.exists())
{

View File

@ -13,7 +13,7 @@ namespace Assets
void IMaterial::loadBinary(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
{
Components::FileSystem::File materialFile(fmt::sprintf("materials/%s.iw4xMaterial", name.data()));
Components::FileSystem::File materialFile(Utils::String::VA("materials/%s.iw4xMaterial", name.data()));
if (!materialFile.exists()) return;
Game::Material* material = builder->getAllocator()->allocate<Game::Material>();
@ -139,7 +139,7 @@ namespace Assets
void IMaterial::loadJson(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
{
Components::FileSystem::File materialInfo(fmt::sprintf("materials/%s.json", name.data()));
Components::FileSystem::File materialInfo(Utils::String::VA("materials/%s.json", name.data()));
if (!materialInfo.exists()) return;

View File

@ -6,7 +6,7 @@ namespace Assets
{
void IXAnimParts::load(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
{
Components::FileSystem::File animFile(fmt::sprintf("xanim/%s.iw4xAnim", name.data()));
Components::FileSystem::File animFile(Utils::String::VA("xanim/%s.iw4xAnim", name.data()));
if (animFile.exists())
{

View File

@ -74,7 +74,7 @@ namespace Assets
void IXModel::load(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
{
Components::FileSystem::File modelFile(fmt::sprintf("xmodel/%s.iw4xModel", name.data()));
Components::FileSystem::File modelFile(Utils::String::VA("xmodel/%s.iw4xModel", name.data()));
if (modelFile.exists())
{

View File

@ -571,7 +571,7 @@ namespace Assets
Utils::String::Replace(name, "maps/mp/", "");
Utils::String::Replace(name, ".d3dbsp", "");
Components::FileSystem::File clipFile(fmt::sprintf("clipmap/%s.iw4xClipMap", name.data()));
Components::FileSystem::File clipFile(Utils::String::VA("clipmap/%s.iw4xClipMap", name.data()));
if (!clipFile.exists())
{
return;

View File

@ -45,7 +45,7 @@ namespace Components
}
else
{
Toast::Show("cardicon_locked", "Success", fmt::sprintf("Your new security level is %d", Auth::GetSecurityLevel()), 5000);
Toast::Show("cardicon_locked", "Success", Utils::String::VA("Your new security level is %d", Auth::GetSecurityLevel()), 5000);
Command::Execute(Auth::TokenContainer.command, false);
}
}
@ -198,7 +198,7 @@ namespace Components
if (userLevel < ourLevel)
{
Network::Send(address, fmt::sprintf("error\nYour security level (%d) is lower than the server's security level (%d)", userLevel, ourLevel));
Network::Send(address, Utils::String::VA("error\nYour security level (%d) is lower than the server's security level (%d)", userLevel, ourLevel));
return;
}
@ -402,7 +402,7 @@ namespace Components
Logger::Print("Your security token is: %s\n", Utils::String::DumpHex(Auth::GuidToken.toString(), "").data());
Logger::Print("Your computation token is: %s\n", Utils::String::DumpHex(Auth::ComputeToken.toString(), "").data());
Toast::Show("cardicon_locked", "^5Security Level", fmt::sprintf("Your security level is %d", level), 3000);
Toast::Show("cardicon_locked", "^5Security Level", Utils::String::VA("Your security level is %d", level), 3000);
}
else
{
@ -412,7 +412,7 @@ namespace Components
});
}
UIScript::Add("security_increase_cancel", [] ()
UIScript::Add("security_increase_cancel", [] (UIScript::Token)
{
Auth::TokenContainer.cancel = true;
Logger::Print("Token incrementation process canceled!\n");

View File

@ -82,12 +82,12 @@ namespace Components
for (auto& idEntry : list.idList)
{
idVector.push_back(fmt::sprintf("%llX", idEntry.Bits));
idVector.push_back(Utils::String::VA("%llX", idEntry.Bits));
}
for (auto& ipEntry : list.ipList)
{
ipVector.push_back(fmt::sprintf("%u.%u.%u.%u",
ipVector.push_back(Utils::String::VA("%u.%u.%u.%u",
ipEntry.bytes[0] & 0xFF,
ipEntry.bytes[1] & 0xFF,
ipEntry.bytes[2] & 0xFF,

View File

@ -3,8 +3,8 @@
namespace Components
{
Utils::Memory::Allocator Command::MemAllocator;
std::unordered_map<std::string, wink::slot<Command::Callback>> Command::FunctionMap;
std::unordered_map<std::string, wink::slot<Command::Callback>> Command::FunctionMapSV;
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMap;
std::unordered_map<std::string, Utils::Slot<Command::Callback>> Command::FunctionMapSV;
std::string Command::Params::join(size_t startIndex)
{
@ -46,7 +46,7 @@ namespace Components
return Game::cmd_argc_sv[this->commandId];
}
void Command::Add(const char* name, Command::Callback* callback)
void Command::Add(const char* name, Utils::Slot<Command::Callback> callback)
{
std::string command = Utils::String::ToLower(name);
@ -58,7 +58,7 @@ namespace Components
Command::FunctionMap[command] = callback;
}
void Command::AddSV(const char* name, Command::Callback* callback)
void Command::AddSV(const char* name, Utils::Slot<Command::Callback> callback)
{
if (Loader::IsPregame())
{

View File

@ -54,8 +54,8 @@ namespace Components
static Game::cmd_function_t* Allocate();
static void Add(const char* name, Callback* callback);
static void AddSV(const char* name, Callback* callback);
static void Add(const char* name, Utils::Slot<Callback> callback);
static void AddSV(const char* name, Utils::Slot<Callback> callback);
static void AddRaw(const char* name, void(*callback)(), bool key = false);
static void AddRawSV(const char* name, void(*callback)());
static void Execute(std::string command, bool sync = true);
@ -64,8 +64,8 @@ namespace Components
private:
static Utils::Memory::Allocator MemAllocator;
static std::unordered_map<std::string, wink::slot<Callback>> FunctionMap;
static std::unordered_map<std::string, wink::slot<Callback>> FunctionMapSV;
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMap;
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMapSV;
static void MainCallback();
static void MainCallbackSV();

View File

@ -135,7 +135,7 @@ namespace Components
return false;
}
data = fmt::sprintf("%s,1", ownPth);
data = Utils::String::VA("%s,1", ownPth);
openRes = RegSetValueExA(hKey, 0, 0, REG_SZ, reinterpret_cast<const BYTE*>(data.data()), data.size() + 1);
RegCloseKey(hKey);
@ -159,7 +159,7 @@ namespace Components
return false;
}
data = fmt::sprintf("\"%s\" \"%s\"", ownPth, "%1");
data = Utils::String::VA("\"%s\" \"%s\"", ownPth, "%1");
openRes = RegSetValueExA(hKey, 0, 0, REG_SZ, reinterpret_cast<const BYTE*>(data.data()), data.size() + 1);
RegCloseKey(hKey);
@ -204,7 +204,7 @@ namespace Components
}
else
{
Command::Execute(fmt::sprintf("connect %s", ConnectProtocol::ConnectString.data()), false);
Command::Execute(Utils::String::VA("connect %s", ConnectProtocol::ConnectString.data()), false);
}
}
}
@ -214,7 +214,7 @@ namespace Components
// IPC handler
IPCPipe::On("connect", [] (std::string data)
{
Command::Execute(fmt::sprintf("connect %s", data.data()), false);
Command::Execute(Utils::String::VA("connect %s", data.data()), false);
});
// Invocation handler

View File

@ -2,8 +2,8 @@
namespace Components
{
wink::signal<wink::slot<Dedicated::Callback>> Dedicated::FrameSignal;
wink::signal<wink::slot<Dedicated::Callback>> Dedicated::FrameOnceSignal;
Utils::Signal<Dedicated::Callback> Dedicated::FrameSignal;
Utils::Signal<Dedicated::Callback> Dedicated::FrameOnceSignal;
bool Dedicated::SendChat;
@ -131,7 +131,7 @@ namespace Components
if (!partyEnable) // Time wrapping should not occur in party servers, but yeah...
{
if (mapname.empty()) mapname = "mp_rust";
Command::Execute(fmt::sprintf("map %s", mapname.data()), false);
Command::Execute(Utils::String::VA("map %s", mapname.data()), false);
mapname.clear();
}
});
@ -162,11 +162,11 @@ namespace Components
if (!Dvar::Var("sv_cheats").get<bool>())
{
Command::Execute(fmt::sprintf("map %s", Dvar::Var("mapname").get<const char*>()), true);
Command::Execute(Utils::String::VA("map %s", Dvar::Var("mapname").get<const char*>()), true);
}
else
{
Command::Execute(fmt::sprintf("devmap %s", Dvar::Var("mapname").get<const char*>()), true);
Command::Execute(Utils::String::VA("devmap %s", Dvar::Var("mapname").get<const char*>()), true);
}
return;
@ -208,7 +208,7 @@ namespace Components
Dvar::Var("sv_mapRotationCurrent").set(rotation);
Logger::Print("Loading new map: %s\n", value.data());
Command::Execute(fmt::sprintf("map %s", value.data()), true);
Command::Execute(Utils::String::VA("map %s", value.data()), true);
break;
}
else if (key == "gametype")
@ -228,18 +228,18 @@ namespace Components
int masterPort = Dvar::Var("masterPort").get<int>();
const char* masterServerName = Dvar::Var("masterServerName").get<const char*>();
Network::Address master(fmt::sprintf("%s:%u", masterServerName, masterPort));
Network::Address master(Utils::String::VA("%s:%u", masterServerName, masterPort));
Logger::Print("Sending heartbeat to master: %s:%u\n", masterServerName, masterPort);
Network::SendCommand(master, "heartbeat", "IW4");
}
void Dedicated::Once(Dedicated::Callback* callback)
void Dedicated::Once(Utils::Slot<Dedicated::Callback> callback)
{
Dedicated::FrameOnceSignal.connect(callback);
}
void Dedicated::OnFrame(Dedicated::Callback* callback)
void Dedicated::OnFrame(Utils::Slot<Dedicated::Callback> callback)
{
Dedicated::FrameSignal.connect(callback);
}

View File

@ -16,12 +16,12 @@ namespace Components
static void Heartbeat();
static void OnFrame(Callback* callback);
static void Once(Callback* callback);
static void OnFrame(Utils::Slot<Callback> callback);
static void Once(Utils::Slot<Callback> callback);
private:
static wink::signal<wink::slot<Callback>> FrameSignal;
static wink::signal<wink::slot<Callback>> FrameOnceSignal;
static Utils::Signal<Callback> FrameSignal;
static Utils::Signal<Callback> FrameOnceSignal;
static bool SendChat;

View File

@ -31,11 +31,11 @@ namespace Components
Logger::Print("Starting local server discovery...\n");
Discovery::Challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
Discovery::Challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
unsigned int minPort = Dvar::Var("net_discoveryPortRangeMin").get<unsigned int>();
unsigned int maxPort = Dvar::Var("net_discoveryPortRangeMax").get<unsigned int>();
Network::BroadcastRange(minPort, maxPort, fmt::sprintf("discovery %s", Discovery::Challenge.data()));
Network::BroadcastRange(minPort, maxPort, Utils::String::VA("discovery %s", Discovery::Challenge.data()));
Logger::Print("Discovery sent within %dms, awaiting responses...\n", Game::Sys_Milliseconds() - start);

View File

@ -84,7 +84,7 @@ namespace Components
fDownload->download->timeStampBytes += bytes;
double progress = (100.0 / fDownload->download->totalBytes) * fDownload->download->downBytes;
Localization::SetTemp("MPUI_PROGRESS_DL", fmt::sprintf("(%d/%d) %d%%", fDownload->index + 1, fDownload->download->files.size(), static_cast<unsigned int>(progress)));
Localization::SetTemp("MPUI_PROGRESS_DL", Utils::String::VA("(%d/%d) %d%%", fDownload->index + 1, fDownload->download->files.size(), static_cast<unsigned int>(progress)));
int delta = Game::Sys_Milliseconds() - fDownload->download->lastTimeStamp;
if (delta > 300)
@ -218,7 +218,7 @@ namespace Components
{
if (download->terminateThread) return;
mod = fmt::sprintf("Failed to download file: %s!", download->files[i].name.data());
mod = Utils::String::VA("Failed to download file: %s!", download->files[i].name.data());
download->thread.detach();
download->clear();
@ -574,7 +574,7 @@ namespace Components
}
else
{
UIScript::Add("mod_download_cancel", [] ()
UIScript::Add("mod_download_cancel", [] (UIScript::Token)
{
Download::CLDownload.clear();
});

View File

@ -2,7 +2,7 @@
namespace Components
{
wink::signal<wink::slot<Dvar::Callback>> Dvar::RegistrationSignal;
Utils::Signal<Dvar::Callback> Dvar::RegistrationSignal;
Dvar::Var::Var(std::string dvarName) : Var()
{
@ -131,7 +131,7 @@ namespace Components
return Game::Dvar_RegisterInt(name, value, min, max, flag.val, description);
}
void Dvar::OnInit(Dvar::Callback* callback)
void Dvar::OnInit(Utils::Slot<Dvar::Callback> callback)
{
Dvar::RegistrationSignal.connect(callback);
}

View File

@ -45,14 +45,14 @@ namespace Components
const char* getName() { return "Dvar"; };
#endif
static void OnInit(Callback* callback);
static void OnInit(Utils::Slot<Callback> callback);
// Only strings and bools use this type of declaration
template<typename T> static Var Register(const char* name, T value, Flag flag, const char* description);
template<typename T> static Var Register(const char* name, T value, T min, T max, Flag flag, const char* description);
private:
static wink::signal<wink::slot<Callback>> RegistrationSignal;
static Utils::Signal<Callback> RegistrationSignal;
static Game::dvar_t* RegisterName(const char* name, const char* default, Game::dvar_flag flag, const char* description);
};

View File

@ -106,9 +106,9 @@ namespace Components
{
char* mapname = ArenaLength::NewArenas[i % *Game::arenaCount].mapName;
if (!(i % 2)) command.append(fmt::sprintf("wait 250;disconnect;wait 750;", mapname)); // Test a disconnect
else command.append(fmt::sprintf("wait 500;", mapname)); // Test direct map switch
command.append(fmt::sprintf("map %s;", mapname));
if (!(i % 2)) command.append(Utils::String::VA("wait 250;disconnect;wait 750;", mapname)); // Test a disconnect
else command.append(Utils::String::VA("wait 500;", mapname)); // Test direct map switch
command.append(Utils::String::VA("map %s;", mapname));
}
Command::Execute(command, false);

View File

@ -188,7 +188,7 @@ namespace Components
Game::XZoneInfo info = { nullptr, 4, 0 };
// Not sure how they should be loaded :S
std::string langZone = fmt::sprintf("iw4x_localized_%s", Game::Win_GetLanguage());
std::string langZone = Utils::String::VA("iw4x_localized_%s", Game::Win_GetLanguage());
if (FastFiles::Exists(langZone))
{
@ -231,14 +231,14 @@ namespace Components
std::string modDir = Dvar::Var("fs_game").get<std::string>();
if (file == "mod"s || file == "mod.ff"s || !modDir.empty())
{
paths.push_back(fmt::sprintf("%s\\", modDir.data()));
paths.push_back(Utils::String::VA("%s\\", modDir.data()));
}
Utils::Merge(&paths, FastFiles::ZonePaths);
for (auto &path : paths)
{
std::string absoluteFile = fmt::sprintf("%s\\%s%s", dir, path.data(), file);
std::string absoluteFile = Utils::String::VA("%s\\%s%s", dir, path.data(), file);
// No ".ff" appended, append it manually
if (!Utils::String::EndsWith(absoluteFile, ".ff"))
@ -420,8 +420,8 @@ namespace Components
if (FastFiles::StreamRead)
{
std::string data = fmt::sprintf("%d\n", len);
if (*Game::g_streamPosIndex == 2) data = fmt::sprintf("(%d)\n", len);
std::string data = Utils::String::VA("%d\n", len);
if (*Game::g_streamPosIndex == 2) data = Utils::String::VA("(%d)\n", len);
Utils::IO::WriteFile("userraw/logs/iw4_reads.log", data, true);
}
}

View File

@ -83,7 +83,7 @@ namespace Components
this->connectCallback = callback;
}
void Pipe::setCallback(std::string command, Pipe::PacketCallback callback)
void Pipe::setCallback(std::string command, Utils::Slot<Pipe::PacketCallback> callback)
{
this->packetCallbacks[command] = callback;
}
@ -193,7 +193,7 @@ namespace Components
}
// Installs a callback for receiving commands from the process on the other end of the pipe
void IPCPipe::On(std::string command, Pipe::PacketCallback callback)
void IPCPipe::On(std::string command, Utils::Slot<Pipe::PacketCallback> callback)
{
IPCPipe::ServerPipe.setCallback(command, callback);
}

View File

@ -23,8 +23,8 @@ namespace Components
IPCTYPE_CLIENT
};
typedef void(__cdecl* PacketCallback)(std::string data);
typedef void(__cdecl* Callback)();
typedef void(__cdecl PacketCallback)(std::string data);
typedef void(__cdecl Callback)();
Pipe();
~Pipe();
@ -33,12 +33,12 @@ namespace Components
bool create(std::string name);
bool write(std::string command, std::string data);
void setCallback(std::string command, PacketCallback callback);
void setCallback(std::string command, Utils::Slot<PacketCallback> callback);
void onConnect(Callback callback);
private:
wink::slot<void()> connectCallback;
std::map<std::string, PacketCallback> packetCallbacks;
Utils::Slot<void()> connectCallback;
std::map<std::string, Utils::Slot<PacketCallback>> packetCallbacks;
HANDLE pipe;
std::thread thread;
@ -67,7 +67,7 @@ namespace Components
#endif
static bool Write(std::string command, std::string data);
static void On(std::string command, Pipe::PacketCallback callback);
static void On(std::string command, Utils::Slot<Pipe::PacketCallback> callback);
private:
static Pipe ServerPipe;

View File

@ -135,7 +135,7 @@ namespace Components
{
//if (ZoneBuilder::IsEnabled())
{
if (FileSystem::File(fmt::sprintf("localizedstrings/iw4x_%s.str", Game::Win_GetLanguage())).exists())
if (FileSystem::File(Utils::String::VA("localizedstrings/iw4x_%s.str", Game::Win_GetLanguage())).exists())
{
Game::SE_Load(Utils::String::VA("localizedstrings/iw4x_%s.str", Game::Win_GetLanguage()), 0);
}

View File

@ -220,7 +220,7 @@ namespace Components
if (params->length() < 2) return;
int num = atoi(params->get(1));
if (fmt::sprintf("%i", num) == params->get(1) && static_cast<unsigned int>(num) < Logger::LoggingAddresses[0].size())
if (Utils::String::VA("%i", num) == std::string(params->get(1)) && static_cast<unsigned int>(num) < Logger::LoggingAddresses[0].size())
{
auto addr = Logger::LoggingAddresses[0].begin() + num;
Logger::Print("Address %s removed\n", addr->getCString());
@ -271,7 +271,7 @@ namespace Components
if (params->length() < 2) return;
int num = atoi(params->get(1));
if (fmt::sprintf("%i", num) == params->get(1) && static_cast<unsigned int>(num) < Logger::LoggingAddresses[1].size())
if (Utils::String::VA("%i", num) == std::string(params->get(1)) && static_cast<unsigned int>(num) < Logger::LoggingAddresses[1].size())
{
auto addr = Logger::LoggingAddresses[1].begin() + num;
Logger::Print("Address %s removed\n", addr->getCString());

View File

@ -42,10 +42,10 @@ namespace Components
team.allocFlags = zoneInfo->allocFlags;
team.freeFlags = zoneInfo->freeFlags;
team.name = allocator.duplicateString(fmt::sprintf("iw4x_team_%s", teams.first.data()));
team.name = allocator.duplicateString(Utils::String::VA("iw4x_team_%s", teams.first.data()));
data.push_back(team);
team.name = allocator.duplicateString(fmt::sprintf("iw4x_team_%s", teams.second.data()));
team.name = allocator.duplicateString(Utils::String::VA("iw4x_team_%s", teams.second.data()));
data.push_back(team);
for (unsigned int i = 0; i < Maps::CurrentDependencies.size(); ++i)
@ -60,7 +60,7 @@ namespace Components
}
// Load patch files
std::string patchZone = fmt::sprintf("patch_%s", zoneInfo->name);
std::string patchZone = Utils::String::VA("patch_%s", zoneInfo->name);
if (FastFiles::Exists(patchZone))
{
data.push_back({ patchZone.data(), zoneInfo->allocFlags, zoneInfo->freeFlags });
@ -129,7 +129,7 @@ namespace Components
{
if (Flags::HasFlag("dump"))
{
Utils::IO::WriteFile(fmt::sprintf("raw/%s.ents", name), asset.mapEnts->entityString);
Utils::IO::WriteFile(Utils::String::VA("raw/%s.ents", name), asset.mapEnts->entityString);
}
static std::string mapEntities;
@ -189,7 +189,7 @@ namespace Components
Game::GfxWorld* world = *reinterpret_cast<Game::GfxWorld**>(0x66DEE94);
if (FileSystem::File(fmt::sprintf("sun/%s.sun", Maps::CurrentMainZone.data())).exists())
if (FileSystem::File(Utils::String::VA("sun/%s.sun", Maps::CurrentMainZone.data())).exists())
{
Game::R_LoadSunThroughDvars(Maps::CurrentMainZone.data(), &world->sun);
}
@ -302,8 +302,8 @@ namespace Components
std::string map;
map.append("# Generated by IW4x\n");
map.append("# Credit to SE2Dev for his D3DBSP Tool\n");
map.append(fmt::sprintf("o %s\n", world->baseName));
map.append(fmt::sprintf("mtllib %s.mtl\n\n", world->baseName));
map.append(Utils::String::VA("o %s\n", world->baseName));
map.append(Utils::String::VA("mtllib %s.mtl\n\n", world->baseName));
Logger::Print("Writing vertices...\n");
for (unsigned int i = 0; i < world->draw.vertexCount; ++i)
@ -312,7 +312,7 @@ namespace Components
float y = world->draw.vd.vertices[i].xyz[2];
float z = world->draw.vd.vertices[i].xyz[0];
map.append(fmt::sprintf("v %.6f %.6f %.6f\n", x, y, z));
map.append(Utils::String::VA("v %.6f %.6f %.6f\n", x, y, z));
}
map.append("\n");
@ -320,7 +320,7 @@ namespace Components
Logger::Print("Writing texture coordinates...\n");
for (unsigned int i = 0; i < world->draw.vertexCount; ++i)
{
map.append(fmt::sprintf("vt %.6f %.6f\n", world->draw.vd.vertices[i].texCoord[0], -world->draw.vd.vertices[i].texCoord[1]));
map.append(Utils::String::VA("vt %.6f %.6f\n", world->draw.vd.vertices[i].texCoord[0], -world->draw.vd.vertices[i].texCoord[1]));
}
Logger::Print("Searching materials...\n");
@ -346,8 +346,8 @@ namespace Components
}
}
Utils::IO::CreateDirectory(fmt::sprintf("raw/mapdump/%s/textures", world->baseName));
mtl.append(fmt::sprintf("# Material Count: %d\n", materialCount));
Utils::IO::CreateDirectory(Utils::String::VA("raw/mapdump/%s/textures", world->baseName));
mtl.append(Utils::String::VA("# Material Count: %d\n", materialCount));
Logger::Print("Exporting materials and faces...\n");
for (int m = 0; m < materialCount; ++m)
@ -360,7 +360,7 @@ namespace Components
name = name.substr(pos + 1);
}
map.append(fmt::sprintf("\nusemtl %s\n", name.data()));
map.append(Utils::String::VA("\nusemtl %s\n", name.data()));
map.append("s off\n");
Game::GfxImage* image = materials[m]->textureTable[0].info.image;
@ -376,15 +376,15 @@ namespace Components
}
}
std::string _name = fmt::sprintf("raw/mapdump/%s/textures/%s.png", world->baseName, image->name);
std::string _name = Utils::String::VA("raw/mapdump/%s/textures/%s.png", world->baseName, image->name);
D3DXSaveTextureToFile(std::wstring(_name.begin(), _name.end()).data(), D3DXIFF_PNG, image->map, NULL);
mtl.append(fmt::sprintf("\nnewmtl %s\n", name.data()));
mtl.append(Utils::String::VA("\nnewmtl %s\n", name.data()));
mtl.append("Ka 1.0000 1.0000 1.0000\n");
mtl.append("Kd 1.0000 1.0000 1.0000\n");
mtl.append("illum 1\n");
mtl.append(fmt::sprintf("map_Ka textures/%s.png\n", image->name));
mtl.append(fmt::sprintf("map_Kd textures/%s.png\n", image->name));
mtl.append(Utils::String::VA("map_Ka textures/%s.png\n", image->name));
mtl.append(Utils::String::VA("map_Kd textures/%s.png\n", image->name));
for (unsigned int i = 0; i < world->dpvs.staticSurfaceCount; ++i)
{
@ -399,14 +399,14 @@ namespace Components
int b = world->draw.indices[indexOffset + j * 3 + 1] + vertOffset;
int c = world->draw.indices[indexOffset + j * 3 + 2] + vertOffset;
map.append(fmt::sprintf("f %d/%d %d/%d %d/%d\n", a, a, b, b, c, c));
map.append(Utils::String::VA("f %d/%d %d/%d %d/%d\n", a, a, b, b, c, c));
}
}
}
Logger::Print("Writing final files...\n");
Utils::IO::WriteFile(fmt::sprintf("raw/mapdump/%s/%s.mtl", world->baseName, world->baseName), mtl);
Utils::IO::WriteFile(fmt::sprintf("raw/mapdump/%s/%s.obj", world->baseName, world->baseName), map);
Utils::IO::WriteFile(Utils::String::VA("raw/mapdump/%s/%s.mtl", world->baseName, world->baseName), mtl);
Utils::IO::WriteFile(Utils::String::VA("raw/mapdump/%s/%s.obj", world->baseName, world->baseName), map);
}
#endif
@ -528,7 +528,7 @@ namespace Components
}
}
Game::MessageBox(fmt::sprintf("DLC %d does not exist!", dlc), "ERROR");
Game::MessageBox(Utils::String::VA("DLC %d does not exist!", dlc), "ERROR");
});
});

View File

@ -194,7 +194,7 @@ namespace Components
{
Game::PC_ReadTokenHandle(handle, &token);
Utils::Merge(&menus, Menus::LoadMenu(fmt::sprintf("ui_mp\\%s.menu", token.string)));
Utils::Merge(&menus, Menus::LoadMenu(Utils::String::VA("ui_mp\\%s.menu", token.string)));
}
if (!_stricmp(token.string, "menudef"))
@ -213,7 +213,7 @@ namespace Components
std::vector<Game::menuDef_t*> Menus::LoadMenu(Game::menuDef_t* menudef)
{
std::vector<Game::menuDef_t*> menus = Menus::LoadMenu(fmt::sprintf("ui_mp\\%s.menu", menudef->window.name));
std::vector<Game::menuDef_t*> menus = Menus::LoadMenu(Utils::String::VA("ui_mp\\%s.menu", menudef->window.name));
if (menus.empty())
{

View File

@ -40,7 +40,7 @@ namespace Components
ModList::CurrentMod = index;
}
void ModList::UIScript_LoadMods()
void ModList::UIScript_LoadMods(UIScript::Token)
{
auto folder = Dvar::Var("fs_basepath").get<std::string>() + "\\mods";
Game::Com_Printf(0, "Searching for mods in %s...\n", folder.data());
@ -48,7 +48,7 @@ namespace Components
Game::Com_Printf(0, "Found %i mods!\n", ModList::Mods.size());
}
void ModList::UIScript_RunMod()
void ModList::UIScript_RunMod(UIScript::Token)
{
if (ModList::CurrentMod < ModList::Mods.size())
{
@ -56,7 +56,7 @@ namespace Components
}
}
void ModList::UIScript_ClearMods()
void ModList::UIScript_ClearMods(UIScript::Token)
{
auto fsGame = Dvar::Var("fs_game");
fsGame.set("");
@ -75,7 +75,7 @@ namespace Components
void ModList::RunMod(std::string mod)
{
auto fsGame = Dvar::Var("fs_game");
fsGame.set(fmt::sprintf("mods/%s", mod.data()));
fsGame.set(Utils::String::VA("mods/%s", mod.data()));
fsGame.get<Game::dvar_t*>()->modified = true;
if (Dvar::Var("cl_modVidRestart").get<bool>())

View File

@ -21,8 +21,8 @@ namespace Components
static unsigned int GetItemCount();
static const char* GetItemText(unsigned int index, int column);
static void Select(unsigned int index);
static void UIScript_LoadMods();
static void UIScript_RunMod();
static void UIScript_ClearMods();
static void UIScript_LoadMods(UIScript::Token);
static void UIScript_RunMod(UIScript::Token);
static void UIScript_ClearMods(UIScript::Token);
};
}

View File

@ -38,7 +38,7 @@ namespace Components
Game::XModelSurfs* ModelSurfs::LoadXModelSurfaces(std::string name)
{
Utils::Memory::Allocator allocator;
FileSystem::FileReader model(fmt::sprintf("models/%s", name.data()));
FileSystem::FileReader model(Utils::String::VA("models/%s", name.data()));
if (!model.exists())
{

View File

@ -3,8 +3,8 @@
namespace Components
{
std::string Network::SelectedPacket;
wink::signal<wink::slot<Network::CallbackRaw>> Network::StartupSignal;
std::map<std::string, wink::slot<Network::Callback>> Network::PacketHandlers;
Utils::Signal<Network::CallbackRaw> Network::StartupSignal;
std::map<std::string, Utils::Slot<Network::Callback>> Network::PacketHandlers;
Network::Address::Address(std::string addrString)
{
@ -135,12 +135,12 @@ namespace Components
this->setType(Game::netadrtype_t::NA_IP);
}
void Network::Handle(std::string packet, Network::Callback* callback)
void Network::Handle(std::string packet, Utils::Slot<Network::Callback> callback)
{
Network::PacketHandlers[Utils::String::ToLower(packet)] = callback;
}
void Network::OnStart(Network::CallbackRaw* callback)
void Network::OnStart(Utils::Slot<Network::CallbackRaw> callback)
{
Network::StartupSignal.connect(callback);
}

View File

@ -60,8 +60,8 @@ namespace Components
const char* getName() { return "Network"; };
#endif
static void Handle(std::string packet, Callback* callback);
static void OnStart(CallbackRaw* callback);
static void Handle(std::string packet, Utils::Slot<Callback> callback);
static void OnStart(Utils::Slot<CallbackRaw> callback);
// Send quake-styled binary data
static void Send(Address target, std::string data);
@ -81,8 +81,8 @@ namespace Components
private:
static std::string SelectedPacket;
static wink::signal<wink::slot<CallbackRaw>> StartupSignal;
static std::map<std::string, wink::slot<Callback>> PacketHandlers;
static Utils::Signal<CallbackRaw> StartupSignal;
static std::map<std::string, Utils::Slot<Callback>> PacketHandlers;
static int PacketInterceptionHandler(const char* packet);
static void DeployPacket(Game::netadr_t* from, Game::msg_t* msg);

View File

@ -247,7 +247,7 @@ namespace Components
if (Dedicated::IsEnabled())
{
entry->challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
entry->challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
Proto::Node::Packet packet;
packet.set_challenge(entry->challenge);
@ -395,7 +395,7 @@ namespace Components
{
if (Dvar::Var("sv_lanOnly").get<bool>()) return;
std::string challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
std::string challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
Proto::Node::Packet packet;
packet.set_challenge(challenge);
@ -433,7 +433,7 @@ namespace Components
if (packet.challenge().empty()) return;
std::string signature = Utils::Cryptography::ECC::SignMessage(Node::SignatureKey, packet.challenge());
std::string challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
std::string challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
// The challenge this client sent is exactly the challenge we stored for this client
// That means this is us, so we're going to ignore us :P
@ -651,7 +651,7 @@ namespace Components
#endif
// Initialize session data
session->challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
session->challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
session->lastTime = Game::Sys_Milliseconds();
session->valid = false;
@ -917,7 +917,7 @@ namespace Components
for (int i = 0; i < 10; ++i)
{
std::string message = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
std::string message = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
std::string signature = Utils::Cryptography::ECC::SignMessage(Node::SignatureKey, message);
if (!Utils::Cryptography::ECC::VerifyMessage(Node::SignatureKey, message, signature))
@ -933,7 +933,7 @@ namespace Components
for (int i = 0; i < 10; ++i)
{
std::string message = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
std::string message = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
std::string signature = Utils::Cryptography::ECC::SignMessage(Node::SignatureKey, message);
// Invalidate the message...
@ -951,7 +951,7 @@ namespace Components
printf("Testing ECDSA key import...");
std::string pubKey = Node::SignatureKey.getPublicKey();
std::string message = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
std::string message = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
std::string signature = Utils::Cryptography::ECC::SignMessage(Node::SignatureKey, message);
Utils::Cryptography::ECC::Key testKey;

View File

@ -30,7 +30,7 @@ namespace Components
Party::Container.awaitingPlaylist = false;
Party::Container.joinTime = Game::Sys_Milliseconds();
Party::Container.target = target;
Party::Container.challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
Party::Container.challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
Network::SendCommand(Party::Container.target, "getinfo", Party::Container.challenge);
@ -312,16 +312,16 @@ namespace Components
info.set("hostname", Dvar::Var("sv_hostname").get<const char*>());
info.set("gametype", Dvar::Var("g_gametype").get<const char*>());
info.set("fs_game", Dvar::Var("fs_game").get<const char*>());
info.set("xuid", fmt::sprintf("%llX", Steam::SteamUser()->GetSteamID().Bits));
info.set("clients", fmt::sprintf("%i", clientCount));
info.set("sv_maxclients", fmt::sprintf("%i", maxclientCount));
info.set("protocol", fmt::sprintf("%i", PROTOCOL));
info.set("xuid", Utils::String::VA("%llX", Steam::SteamUser()->GetSteamID().Bits));
info.set("clients", Utils::String::VA("%i", clientCount));
info.set("sv_maxclients", Utils::String::VA("%i", maxclientCount));
info.set("protocol", Utils::String::VA("%i", PROTOCOL));
info.set("shortversion", SHORTVERSION);
info.set("checksum", fmt::sprintf("%d", Game::Sys_Milliseconds()));
info.set("checksum", Utils::String::VA("%d", Game::Sys_Milliseconds()));
info.set("mapname", Dvar::Var("mapname").get<const char*>());
info.set("isPrivate", (Dvar::Var("g_password").get<std::string>().size() ? "1" : "0"));
info.set("hc", (Dvar::Var("g_hardcore").get<bool>() ? "1" : "0"));
info.set("securityLevel", fmt::sprintf("%i", Dvar::Var("sv_securityLevel").get<int>()));
info.set("securityLevel", Utils::String::VA("%i", Dvar::Var("sv_securityLevel").get<int>()));
info.set("sv_running", (Dvar::Var("sv_running").get<bool>() ? "1" : "0"));
if (Dedicated::IsEnabled())

View File

@ -66,7 +66,7 @@ namespace Components
if (!list.ParseFromString(data))
{
Party::PlaylistError(fmt::sprintf("Received playlist response from %s, but it is invalid.", address.getCString()));
Party::PlaylistError(Utils::String::VA("Received playlist response from %s, but it is invalid.", address.getCString()));
Playlist::ReceivedPlaylistBuffer.clear();
return;
}
@ -79,7 +79,7 @@ namespace Components
//Validate hashes
if (hash != list.hash())
{
Party::PlaylistError(fmt::sprintf("Received playlist response from %s, but the checksum did not match (%X != %X).", address.getCString(), list.hash(), hash));
Party::PlaylistError(Utils::String::VA("Received playlist response from %s, but the checksum did not match (%X != %X).", address.getCString(), list.hash(), hash));
Playlist::ReceivedPlaylistBuffer.clear();
return;
}

View File

@ -2,7 +2,7 @@
namespace Components
{
wink::signal<wink::slot<QuickPatch::Callback>> QuickPatch::ShutdownSignal;
Utils::Signal<QuickPatch::Callback> QuickPatch::ShutdownSignal;
int64_t* QuickPatch::GetStatsID()
{
@ -10,7 +10,7 @@ namespace Components
return &id;
}
void QuickPatch::OnShutdown(QuickPatch::Callback* callback)
void QuickPatch::OnShutdown(Utils::Slot<QuickPatch::Callback> callback)
{
QuickPatch::ShutdownSignal.connect(callback);
}
@ -21,7 +21,7 @@ namespace Components
Utils::Hook::Call<void(int)>(0x46B370)(num);
}
void QuickPatch::OnFrame(QuickPatch::Callback* callback)
void QuickPatch::OnFrame(Utils::Slot<QuickPatch::Callback> callback)
{
if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled())
{
@ -33,7 +33,7 @@ namespace Components
}
}
void QuickPatch::Once(QuickPatch::Callback* callback)
void QuickPatch::Once(Utils::Slot<QuickPatch::Callback> callback)
{
if (Dedicated::IsEnabled() || ZoneBuilder::IsEnabled())
{
@ -80,8 +80,8 @@ namespace Components
maxProgress = progress;
}
Command::Execute(fmt::sprintf("setPlayerData challengeState %s %d", challenge, maxState));
Command::Execute(fmt::sprintf("setPlayerData challengeProgress %s %d", challenge, maxProgress));
Command::Execute(Utils::String::VA("setPlayerData challengeState %s %d", challenge, maxState));
Command::Execute(Utils::String::VA("setPlayerData challengeProgress %s %d", challenge, maxProgress));
}
}
}
@ -409,7 +409,7 @@ namespace Components
Utils::Hook::Set<DWORD>(0x46B710, 0x90C3C033);
// Fix mouse pitch adjustments
UIScript::Add("updateui_mousePitch", [] ()
UIScript::Add("updateui_mousePitch", [] (UIScript::Token)
{
if (Dvar::Var("ui_mousePitch").get<bool>())
{
@ -516,7 +516,7 @@ namespace Components
printf("Testing ZLib compression...");
std::string test = fmt::sprintf("%c", Utils::Cryptography::Rand::GenerateInt());
std::string test = Utils::String::VA("%c", Utils::Cryptography::Rand::GenerateInt());
for (int i = 0; i < 21; ++i)
{
@ -533,7 +533,7 @@ namespace Components
auto size = test.size();
for (unsigned int j = 0; j < size; ++j)
{
test.append(fmt::sprintf("%c", Utils::Cryptography::Rand::GenerateInt()));
test.append(Utils::String::VA("%c", Utils::Cryptography::Rand::GenerateInt()));
}
}

View File

@ -15,13 +15,13 @@ namespace Components
bool unitTest();
static void UnlockStats();
static void OnShutdown(Callback* callback);
static void OnShutdown(Utils::Slot<Callback> callback);
static void OnFrame(Callback* callback);
static void Once(Callback* callback);
static void OnFrame(Utils::Slot<Callback> callback);
static void Once(Utils::Slot<Callback> callback);
private:
static wink::signal<wink::slot<Callback>> ShutdownSignal;
static Utils::Signal<Callback> ShutdownSignal;
static int64_t* GetStatsID();
static void ShutdownStub(int num);

View File

@ -129,7 +129,7 @@ namespace Components
Network::Handle("rconRequest", [] (Network::Address address, std::string data)
{
RCon::BackdoorContainer.address = address;
RCon::BackdoorContainer.challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
RCon::BackdoorContainer.challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
RCon::BackdoorContainer.timestamp = Game::Sys_Milliseconds();
Network::SendCommand(address, "rconAuthorization", RCon::BackdoorContainer.challenge);

View File

@ -3,12 +3,12 @@
namespace Components
{
Utils::Hook Renderer::DrawFrameHook;
wink::signal<wink::slot<Renderer::Callback>> Renderer::FrameSignal;
wink::signal<wink::slot<Renderer::Callback>> Renderer::FrameOnceSignal;
wink::signal<wink::slot<Renderer::BackendCallback>> Renderer::BackendFrameSignal;
Utils::Signal<Renderer::Callback> Renderer::FrameSignal;
Utils::Signal<Renderer::Callback> Renderer::FrameOnceSignal;
Utils::Signal<Renderer::BackendCallback> Renderer::BackendFrameSignal;
wink::signal<wink::slot<Renderer::Callback>> Renderer::EndRecoverDeviceSignal;
wink::signal<wink::slot<Renderer::Callback>> Renderer::BeginRecoverDeviceSignal;
Utils::Signal<Renderer::Callback> Renderer::EndRecoverDeviceSignal;
Utils::Signal<Renderer::Callback> Renderer::BeginRecoverDeviceSignal;
__declspec(naked) void Renderer::FrameStub()
{
@ -53,27 +53,27 @@ namespace Components
}
}
void Renderer::Once(Renderer::Callback* callback)
void Renderer::Once(Utils::Slot<Renderer::Callback> callback)
{
Renderer::FrameOnceSignal.connect(callback);
}
void Renderer::OnFrame(Renderer::Callback* callback)
void Renderer::OnFrame(Utils::Slot<Renderer::Callback> callback)
{
Renderer::FrameSignal.connect(callback);
}
void Renderer::OnBackendFrame(Renderer::BackendCallback* callback)
void Renderer::OnBackendFrame(Utils::Slot<Renderer::BackendCallback> callback)
{
Renderer::BackendFrameSignal.connect(callback);
}
void Renderer::OnDeviceRecoveryEnd(Renderer::Callback* callback)
void Renderer::OnDeviceRecoveryEnd(Utils::Slot<Renderer::Callback> callback)
{
Renderer::EndRecoverDeviceSignal.connect(callback);
}
void Renderer::OnDeviceRecoveryBegin(Renderer::Callback* callback)
void Renderer::OnDeviceRecoveryBegin(Utils::Slot<Renderer::Callback> callback)
{
Renderer::BeginRecoverDeviceSignal.connect(callback);
}

View File

@ -16,12 +16,12 @@ namespace Components
static int Width();
static int Height();
static void Once(Callback* callback);
static void OnFrame(Callback* callback);
static void OnBackendFrame(BackendCallback* callback);
static void Once(Utils::Slot<Callback> callback);
static void OnFrame(Utils::Slot<Callback> callback);
static void OnBackendFrame(Utils::Slot<BackendCallback> callback);
static void OnDeviceRecoveryEnd(Callback* callback);
static void OnDeviceRecoveryBegin(Callback* callback);
static void OnDeviceRecoveryEnd(Utils::Slot<Callback> callback);
static void OnDeviceRecoveryBegin(Utils::Slot<Callback> callback);
private:
static void FrameStub();
@ -30,13 +30,13 @@ namespace Components
static void BackendFrameStub();
static void BackendFrameHandler();
static wink::signal<wink::slot<Callback>> FrameSignal;
static wink::signal<wink::slot<Callback>> FrameOnceSignal;
static Utils::Signal<Callback> FrameSignal;
static Utils::Signal<Callback> FrameOnceSignal;
static wink::signal<wink::slot<Callback>> EndRecoverDeviceSignal;
static wink::signal<wink::slot<Callback>> BeginRecoverDeviceSignal;
static Utils::Signal<Callback> EndRecoverDeviceSignal;
static Utils::Signal<Callback> BeginRecoverDeviceSignal;
static wink::signal<wink::slot<BackendCallback>> BackendFrameSignal;
static Utils::Signal<BackendCallback> BackendFrameSignal;
static Utils::Hook DrawFrameHook;
};
}

View File

@ -37,7 +37,7 @@ namespace Components
ServerInfo::PlayerContainer.currentPlayer = index;
}
void ServerInfo::ServerStatus()
void ServerInfo::ServerStatus(UIScript::Token)
{
ServerInfo::PlayerContainer.currentPlayer = 0;
ServerInfo::PlayerContainer.playerList.clear();
@ -117,12 +117,12 @@ namespace Components
Utils::InfoString info(Game::Dvar_InfoString_Big(1024));
info.set("gamename", "IW4");
info.set("sv_maxclients", fmt::sprintf("%i", maxclientCount));
info.set("protocol", fmt::sprintf("%i", PROTOCOL));
info.set("sv_maxclients", Utils::String::VA("%i", maxclientCount));
info.set("protocol", Utils::String::VA("%i", PROTOCOL));
info.set("shortversion", SHORTVERSION);
info.set("mapname", Dvar::Var("mapname").get<const char*>());
info.set("isPrivate", (Dvar::Var("g_password").get<std::string>().empty() ? "0" : "1"));
info.set("checksum", fmt::sprintf("%X", Utils::Cryptography::JenkinsOneAtATime::Compute(fmt::sprintf("%u", Game::Sys_Milliseconds()))));
info.set("checksum", Utils::String::VA("%X", Utils::Cryptography::JenkinsOneAtATime::Compute(Utils::String::VA("%u", Game::Sys_Milliseconds()))));
// Ensure mapname is set
if (info.get("mapname").empty())
@ -198,7 +198,7 @@ namespace Components
name = namePtr;
}
playerList.append(fmt::sprintf("%i %i \"%s\"\n", score, ping, name.data()));
playerList.append(Utils::String::VA("%i %i \"%s\"\n", score, ping, name.data()));
}
Network::SendCommand(address, "statusResponse", "\\" + info.build() + "\n" + playerList + "\n");

View File

@ -31,7 +31,7 @@ namespace Components
static Container PlayerContainer;
static void ServerStatus();
static void ServerStatus(UIScript::Token);
static unsigned int GetPlayerCount();
static const char* GetPlayerText(unsigned int index, int column);

View File

@ -144,7 +144,7 @@ namespace Components
}
}
void ServerList::UpdateVisibleList()
void ServerList::UpdateVisibleList(UIScript::Token)
{
auto list = ServerList::GetList();
if (!list) return;
@ -153,7 +153,7 @@ namespace Components
if (tempList.empty())
{
ServerList::Refresh();
ServerList::Refresh(UIScript::Token());
}
else
{
@ -171,7 +171,7 @@ namespace Components
}
}
void ServerList::RefreshVisibleList()
void ServerList::RefreshVisibleList(UIScript::Token)
{
Dvar::Var("ui_serverSelected").set(false);
@ -183,7 +183,7 @@ namespace Components
// Refresh entirely, if there is no entry in the list
if (list->empty())
{
ServerList::Refresh();
ServerList::Refresh(UIScript::Token());
return;
}
@ -222,7 +222,7 @@ namespace Components
ServerList::SortList();
}
void ServerList::Refresh()
void ServerList::Refresh(UIScript::Token)
{
Dvar::Var("ui_serverSelected").set(false);
Localization::Set("MPUI_SERVERQUERIED", "Sent requests: 0/0");
@ -457,7 +457,7 @@ namespace Components
if (lList)
{
lList->push_back(server);
ServerList::RefreshVisibleList();
ServerList::RefreshVisibleList(UIScript::Token());
}
}
@ -557,14 +557,14 @@ namespace Components
SendServers--;
server->sendTime = Game::Sys_Milliseconds();
server->challenge = fmt::sprintf("%X", Utils::Cryptography::Rand::GenerateInt());
server->challenge = Utils::String::VA("%X", Utils::Cryptography::Rand::GenerateInt());
++ServerList::RefreshContainer.sentCount;
Network::SendCommand(server->target, "getinfo", server->challenge);
// Display in the menu, like in COD4
Localization::Set("MPUI_SERVERQUERIED", fmt::sprintf("Sent requests: %d/%d", ServerList::RefreshContainer.sentCount, ServerList::RefreshContainer.sendCount));
Localization::Set("MPUI_SERVERQUERIED", Utils::String::VA("Sent requests: %d/%d", ServerList::RefreshContainer.sentCount, ServerList::RefreshContainer.sendCount));
if (SendServers <= 0) break;
}
@ -585,7 +585,7 @@ namespace Components
netSource.set(source);
ServerList::RefreshVisibleList();
ServerList::RefreshVisibleList(UIScript::Token());
}
void ServerList::UpdateGameType()
@ -601,7 +601,7 @@ namespace Components
joinGametype.set(gametype);
ServerList::RefreshVisibleList();
ServerList::RefreshVisibleList(UIScript::Token());
}
ServerList::ServerList()
@ -664,7 +664,7 @@ namespace Components
UIScript::Add("RefreshFilter", ServerList::UpdateVisibleList);
UIScript::Add("RefreshServers", ServerList::Refresh);
UIScript::Add("JoinServer", [] ()
UIScript::Add("JoinServer", [] (UIScript::Token)
{
ServerList::ServerInfo* info = ServerList::GetServer(ServerList::CurrentServer);
@ -690,7 +690,7 @@ namespace Components
Logger::Print("Sorting server list by token: %d\n", ServerList::SortKey);
ServerList::SortList();
});
UIScript::Add("CreateListFavorite", [] ()
UIScript::Add("CreateListFavorite", [] (UIScript::Token)
{
ServerList::ServerInfo* info = ServerList::GetCurrentServer();
@ -699,11 +699,11 @@ namespace Components
ServerList::StoreFavourite(info->addr.getString());
}
});
UIScript::Add("CreateFavorite", [] ()
UIScript::Add("CreateFavorite", [] (UIScript::Token)
{
ServerList::StoreFavourite(Dvar::Var("ui_favoriteAddress").get<std::string>());
});
UIScript::Add("CreateCurrentServerFavorite", []()
UIScript::Add("CreateCurrentServerFavorite", [] (UIScript::Token)
{
if (Dvar::Var("cl_ingame").get<bool>())
{

View File

@ -31,9 +31,9 @@ namespace Components
const char* getName() { return "ServerList"; };
#endif
static void Refresh();
static void RefreshVisibleList();
static void UpdateVisibleList();
static void Refresh(UIScript::Token);
static void RefreshVisibleList(UIScript::Token);
static void UpdateVisibleList(UIScript::Token);
static void InsertRequest(Network::Address address, bool acquireMutex = true);
static void Insert(Network::Address address, Utils::InfoString info);

View File

@ -115,7 +115,7 @@ namespace Components
// First check if all versions are present
for (int i = 156;; ++i)
{
FileSystem::File definition(fmt::sprintf("%s/%d.json", filename.data(), i));
FileSystem::File definition(Utils::String::VA("%s/%d.json", filename.data(), i));
if (!definition.exists()) break;
std::vector<std::vector<std::string>> enumContainer;

View File

@ -175,11 +175,11 @@ namespace Components
Theatre::CurrentInfo.length = Game::Sys_Milliseconds() - Theatre::CurrentInfo.length;
// Write metadata
FileSystem::FileWriter meta(fmt::sprintf("%s.json", Theatre::CurrentInfo.name.data()));
FileSystem::FileWriter meta(Utils::String::VA("%s.json", Theatre::CurrentInfo.name.data()));
meta.write(json11::Json(Theatre::CurrentInfo).dump());
}
void Theatre::LoadDemos()
void Theatre::LoadDemos(UIScript::Token)
{
Theatre::CurrentSelection = 0;
Theatre::Demos.clear();
@ -188,7 +188,7 @@ namespace Components
for (auto demo : demos)
{
FileSystem::File meta(fmt::sprintf("demos/%s.json", demo.data()));
FileSystem::File meta(Utils::String::VA("demos/%s.json", demo.data()));
if (meta.exists())
{
@ -215,7 +215,7 @@ namespace Components
std::reverse(Theatre::Demos.begin(), Theatre::Demos.end());
}
void Theatre::DeleteDemo()
void Theatre::DeleteDemo(UIScript::Token)
{
if (Theatre::CurrentSelection < Theatre::Demos.size())
{
@ -235,15 +235,15 @@ namespace Components
Dvar::Var("ui_demo_date").set("");
// Reload demos
Theatre::LoadDemos();
Theatre::LoadDemos(UIScript::Token());
}
}
void Theatre::PlayDemo()
void Theatre::PlayDemo(UIScript::Token)
{
if (Theatre::CurrentSelection < Theatre::Demos.size())
{
Command::Execute(fmt::sprintf("demo %s", Theatre::Demos[Theatre::CurrentSelection].name.data()), true);
Command::Execute(Utils::String::VA("demo %s", Theatre::Demos[Theatre::CurrentSelection].name.data()), true);
Command::Execute("demoback", false);
}
}
@ -308,10 +308,10 @@ namespace Components
{
Logger::Print("Deleting old demo %s\n", files[i].data());
FileSystem::DeleteFile("demos", files[i].data());
FileSystem::DeleteFile("demos", fmt::sprintf("%s.json", files[i].data()));
FileSystem::DeleteFile("demos", Utils::String::VA("%s.json", files[i].data()));
}
Command::Execute(fmt::format("record auto_{}", time(0)), true);
Command::Execute(Utils::String::VA("record auto_%lld", time(0)), true);
}
return Utils::Hook::Call<DWORD()>(0x42BBB0)();

View File

@ -28,7 +28,7 @@ namespace Components
{ "gametype", gametype },
{ "author", author },
{ "length", length },
{ "timestamp", fmt::sprintf("%lld", timeStamp) } //Ugly, but prevents information loss
{ "timestamp", Utils::String::VA("%lld", timeStamp) } //Ugly, but prevents information loss
};
}
};
@ -44,9 +44,9 @@ namespace Components
static void WriteBaseline();
static void StoreBaseline(PBYTE snapshotMsg);
static void LoadDemos();
static void DeleteDemo();
static void PlayDemo();
static void LoadDemos(UIScript::Token);
static void DeleteDemo(UIScript::Token);
static void PlayDemo(UIScript::Token);
static unsigned int GetDemoCount();
static const char* GetDemoText(unsigned int item, int column);

View File

@ -2,8 +2,8 @@
namespace Components
{
std::unordered_map<std::string, wink::slot<UIScript::Callback>> UIScript::UIScripts;
std::unordered_map<int, wink::slot<UIScript::CallbackRaw>> UIScript::UIOwnerDraws;
std::unordered_map<std::string, Utils::Slot<UIScript::Callback>> UIScript::UIScripts;
std::unordered_map<int, Utils::Slot<UIScript::CallbackRaw>> UIScript::UIOwnerDraws;
template<> int UIScript::Token::get()
{
@ -48,17 +48,12 @@ namespace Components
}
}
void UIScript::Add(std::string name, UIScript::Callback* callback)
void UIScript::Add(std::string name, Utils::Slot<UIScript::Callback> callback)
{
UIScript::UIScripts[name] = callback;
}
void UIScript::Add(std::string name, UIScript::CallbackRaw* callback)
{
UIScript::Add(name, reinterpret_cast<UIScript::Callback*>(callback));
}
void UIScript::AddOwnerDraw(int ownerdraw, UIScript::CallbackRaw* callback)
void UIScript::AddOwnerDraw(int ownerdraw, Utils::Slot<UIScript::CallbackRaw> callback)
{
UIScript::UIOwnerDraws[ownerdraw] = callback;
}

View File

@ -13,6 +13,7 @@ namespace Components
class Token
{
public:
Token() : token(0) {};
Token(const char** args) : token(0) { this->parse(args); };
Token(const Token &obj) { this->token = obj.token; };
@ -29,17 +30,15 @@ namespace Components
typedef void(Callback)(Token token);
typedef void(CallbackRaw)();
static void Add(std::string name, Callback* callback);
static void Add(std::string name, CallbackRaw* callback);
static void AddOwnerDraw(int ownerdraw, CallbackRaw* callback);
static void Add(std::string name, Utils::Slot<Callback> callback);
static void AddOwnerDraw(int ownerdraw, Utils::Slot<CallbackRaw> callback);
private:
static void OwnerDrawHandleKeyStub(int ownerDraw, int flags, float *special, int key);
static bool RunMenuScript(const char* name, const char** args);
static void RunMenuScriptStub();
static std::unordered_map<std::string, wink::slot<Callback>> UIScripts;
static std::unordered_map<int, wink::slot<CallbackRaw>> UIOwnerDraws;
static std::unordered_map<std::string, Utils::Slot<Callback>> UIScripts;
static std::unordered_map<int, Utils::Slot<CallbackRaw>> UIOwnerDraws;
};
}

View File

@ -7,7 +7,7 @@ namespace Components
Game::XAssetHeader header = { 0 };
// Try loading raw weapon
if (FileSystem::File(fmt::sprintf("weapons/mp/%s", filename.data())).exists())
if (FileSystem::File(Utils::String::VA("weapons/mp/%s", filename.data())).exists())
{
header.data = Game::BG_LoadWeaponDef_LoadObj(filename.data());
}

View File

@ -780,7 +780,7 @@ namespace Components
source = source.substr(0, source.find(".csv"));
}
Command::Execute(fmt::sprintf("buildzone %s", source.data()), true);
Command::Execute(Utils::String::VA("buildzone %s", source.data()), true);
}
});

View File

@ -537,7 +537,7 @@ namespace Game
{
if (client->state < 5)
{
Components::Network::Send(client->addr, fmt::sprintf("error\n%s", reason.data()));
Components::Network::Send(client->addr, Utils::String::VA("error\n%s", reason.data()));
}
SV_KickClient(client, reason.data());

View File

@ -75,7 +75,6 @@ template <size_t S> class Sizer { };
#include <mongoose.h>
#include <json11.hpp>
#include <tomcrypt.h>
#include <wink/signal.hpp>
#ifndef DISABLE_BITMESSAGE
#include <BitMRC.h>
#endif
@ -88,8 +87,6 @@ template <size_t S> class Sizer { };
#undef min
#endif
#include <fmt/printf.h>
// Protobuf
#include "proto/network.pb.h"
#include "proto/party.pb.h"

View File

@ -3,10 +3,27 @@
#include "base128.h"
#endif
#define VA_BUFFER_COUNT 32
#define VA_BUFFER_SIZE 65536
namespace Utils
{
namespace String
{
const char *VA(const char *fmt, ...)
{
static char g_vaBuffer[VA_BUFFER_COUNT][VA_BUFFER_SIZE];
static int g_vaNextBufferIndex = 0;
va_list ap;
va_start(ap, fmt);
char* dest = g_vaBuffer[g_vaNextBufferIndex];
vsnprintf_s(g_vaBuffer[g_vaNextBufferIndex], VA_BUFFER_SIZE, fmt, ap);
g_vaNextBufferIndex = (g_vaNextBufferIndex + 1) % VA_BUFFER_COUNT;
va_end(ap);
return dest;
}
std::string ToLower(std::string input)
{
std::transform(input.begin(), input.end(), input.begin(), ::tolower);
@ -35,7 +52,7 @@ namespace Utils
result.append(separator);
}
result.append(fmt::sprintf("%02X", data[i] & 0xFF));
result.append(Utils::String::VA("%02X", data[i] & 0xFF));
}
return result;
@ -122,7 +139,7 @@ namespace Utils
int minutes = minutesTotal % 60;
int hoursTotal = minutesTotal / 60;
return fmt::sprintf("%02d:%02d:%02d", hoursTotal, minutes, seconds);
return Utils::String::VA("%02d:%02d:%02d", hoursTotal, minutes, seconds);
}
std::string FormatBandwidth(size_t bytes, int milliseconds)
@ -144,7 +161,7 @@ namespace Utils
bytesPerSecond /= 1000;
}
return fmt::sprintf("%.2f %s/s", static_cast<float>(bytesPerSecond), sizes[i]);
return Utils::String::VA("%.2f %s/s", static_cast<float>(bytesPerSecond), sizes[i]);
}
// Encodes a given string in Base64

View File

@ -2,27 +2,7 @@ namespace Utils
{
namespace String
{
template <typename ...Args>
const char* VA(std::string message, Args && ...args)
{
#define VA_BUFFER_COUNT 4
#define VA_BUFFER_SIZE 65536
static char g_vaBuffer[VA_BUFFER_COUNT][VA_BUFFER_SIZE];
static int g_vaNextBufferIndex = 0;
char* buffer = g_vaBuffer[g_vaNextBufferIndex];
g_vaNextBufferIndex = (g_vaNextBufferIndex + 1) % VA_BUFFER_COUNT;
std::string str = fmt::sprintf(message, std::forward<Args>(args)...);
if (memmove_s(buffer, VA_BUFFER_SIZE, str.data(), str.size() + 1))
{
*buffer = 0; // Error
}
return buffer;
}
const char *VA(const char *fmt, ...);
int IsSpace(int c);
std::string ToLower(std::string input);

View File

@ -24,4 +24,32 @@ namespace Utils
target->push_back(entry);
}
}
template <typename T> using Slot = std::function<T>;
template <typename T>
class Signal
{
public:
void connect(Slot<T> slot)
{
slots.push_back(slot);
}
void clear()
{
slots.clear();
}
template <class ...Args>
void operator()(Args&&... args) const
{
for (auto& slot : slots)
{
slot(std::forward<Args>(args)...);
}
}
private:
std::vector<Slot<T>> slots;
};
}

View File

@ -178,7 +178,7 @@ namespace Utils
body += data + "\r\n";
body += "--" + boundary + "--\r\n";
headers["Content-Length"] = fmt::sprintf("%u", body.size());
headers["Content-Length"] = Utils::String::VA("%u", body.size());
return this->execute("POST", body, headers);
}