[Chat]: Check client number from input (#872)

This commit is contained in:
Edo 2023-03-23 14:08:21 +00:00 committed by GitHub
parent b4500226dd
commit 655b7fe913
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 34 additions and 30 deletions

View File

@ -451,7 +451,7 @@ namespace Components
Utils::Hook::Set<DWORD>(0x4D0D60, 0xC301B0);
// Guid command
Command::Add("guid", [](Command::Params*)
Command::Add("guid", []
{
Logger::Print("Your guid: {:#X}\n", Steam::SteamUser()->GetSteamID().bits);
});

View File

@ -259,17 +259,17 @@ namespace Components
}
}
const auto num = std::atoi(input);
if (num < 0 || num >= *Game::svs_clientCount)
const auto clientNum = std::strtoul(input, nullptr, 10);
if (clientNum >= Game::MAX_CLIENTS)
{
Logger::Print("Bad client slot: {}\n", num);
Logger::Print("Bad client slot: {}\n", clientNum);
return;
}
const auto* cl = &Game::svs_clients[num];
if (cl->header.state == Game::CS_FREE)
const auto* cl = &Game::svs_clients[clientNum];
if (cl->header.state < Game::CS_ACTIVE)
{
Logger::Print("Client {} is not active\n", num);
Logger::Print("Client {} is not active\n", clientNum);
return;
}
@ -279,7 +279,7 @@ namespace Components
}
const std::string reason = params->size() < 3 ? "EXE_ERR_BANNED_PERM" : params->join(2);
BanClient(&Game::svs_clients[num], reason);
BanClient(&Game::svs_clients[clientNum], reason);
});
Command::Add("unbanClient", [](Command::Params* params)
@ -309,7 +309,7 @@ namespace Components
else if (type == "guid"s)
{
SteamID id;
id.bits = strtoull(params->get(2), nullptr, 16);
id.bits = std::strtoull(params->get(2), nullptr, 16);
UnbanClient(id);

View File

@ -461,8 +461,8 @@ namespace Components
if (params->size() < 2) return;
auto message = params->join(1);
auto name = sv_sayName.get<std::string>();
const auto message = params->join(1);
const auto name = sv_sayName.get<std::string>();
if (!name.empty())
{
@ -486,19 +486,21 @@ namespace Components
if (params->size() < 3) return;
const auto client = std::atoi(params->get(1));
auto message = params->join(2);
auto name = sv_sayName.get<std::string>();
const auto parsedInput = std::strtoul(params->get(1), nullptr, 10);
const auto clientNum = static_cast<int>(std::min<std::size_t>(parsedInput, Game::MAX_CLIENTS));
const auto message = params->join(2);
const auto name = sv_sayName.get<std::string>();
if (!name.empty())
{
Game::SV_GameSendServerCommand(client, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"{}: {}\"", 0x68, name.data(), message));
Logger::Print(Game::CON_CHANNEL_SERVER, "{} -> {}: {}\n", name, client, message);
Game::SV_GameSendServerCommand(clientNum, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"{}: {}\"", 0x68, name.data(), message));
Logger::Print(Game::CON_CHANNEL_SERVER, "{} -> {}: {}\n", name, clientNum, message);
}
else
{
Game::SV_GameSendServerCommand(client, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"Console: {}\"", 0x68, message));
Logger::Print(Game::CON_CHANNEL_SERVER, "Console -> {}: {}\n", client, message);
Game::SV_GameSendServerCommand(clientNum, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"Console: {}\"", 0x68, message));
Logger::Print(Game::CON_CHANNEL_SERVER, "Console -> {}: {}\n", clientNum, message);
}
});
@ -512,7 +514,7 @@ namespace Components
if (params->size() < 2) return;
auto message = params->join(1);
const auto message = params->join(1);
Game::SV_GameSendServerCommand(-1, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"{}\"", 0x68, message));
Logger::Print(Game::CON_CHANNEL_SERVER, "Raw: {}\n", message);
});
@ -527,10 +529,12 @@ namespace Components
if (params->size() < 3) return;
const auto client = atoi(params->get(1));
std::string message = params->join(2);
Game::SV_GameSendServerCommand(client, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"{}\"", 0x68, message));
Logger::Print(Game::CON_CHANNEL_SERVER, "Raw -> {}: {}\n", client, message);
const auto parsedInput = std::strtoul(params->get(1), nullptr, 10);
const auto clientNum = static_cast<int>(std::min<std::size_t>(parsedInput, Game::MAX_CLIENTS));
const auto message = params->join(2);
Game::SV_GameSendServerCommand(clientNum, Game::SV_CMD_CAN_IGNORE, Utils::String::Format("{:c} \"{}\"", 0x68, message));
Logger::Print(Game::CON_CHANNEL_SERVER, "Raw -> {}: {}\n", clientNum, message);
});
sv_sayName = Dvar::Register<const char*>("sv_sayName", "^7Console", Game::DVAR_NONE, "The alias of the server when broadcasting a chat message");

View File

@ -57,16 +57,16 @@ namespace Components
static Game::cmd_function_s* Allocate();
static void Add(const char* name, const std::function<void()>& callback);
static void Add(const char* name, const std::function<void(Command::Params*)>& callback);
static void Add(const char* name, const std::function<void(Params*)>& callback);
static void AddRaw(const char* name, void(*callback)(), bool key = false);
static void AddSV(const char* name, const std::function<void(Command::Params*)>& callback);
static void AddSV(const char* name, const std::function<void(Params*)>& callback);
static void Execute(std::string command, bool sync = true);
static Game::cmd_function_s* Find(const std::string& command);
private:
static std::unordered_map<std::string, std::function<void(Command::Params*)>> FunctionMap;
static std::unordered_map<std::string, std::function<void(Command::Params*)>> FunctionMapSV;
static std::unordered_map<std::string, std::function<void(Params*)>> FunctionMap;
static std::unordered_map<std::string, std::function<void(Params*)>> FunctionMapSV;
static void AddRawSV(const char* name, void(*callback)());

View File

@ -226,7 +226,7 @@ namespace Components
Command::Add("ipcping", []([[maybe_unused]] Command::Params* params)
{
Logger::Print("Sending ping to pipe!\n");
Write("ping", "");
Write("ping", {});
});
}

View File

@ -142,7 +142,7 @@ namespace Components
const char* data = Game::Scr_AddSourceBuffer(nullptr, file.getName().data(), nullptr, false);
if (data != nullptr)
if (data)
{
Utils::IO::WriteFile("raw/" + file.getName(), data);
Logger::Print("File '{}' written to raw!\n", file.getName());

View File

@ -45,7 +45,7 @@ namespace Utils::String
bool Compare(const std::string& lhs, const std::string& rhs)
{
return std::ranges::equal(lhs, rhs, [](const unsigned char a, const unsigned char b)
return std::ranges::equal(lhs, rhs, [](const unsigned char a, const unsigned char b) -> bool
{
return std::tolower(a) == std::tolower(b);
});