Fix a typo in stub & clean-up some things

This commit is contained in:
FutureRave 2022-03-15 22:49:58 +00:00
parent 9e207b3c9a
commit 0068b76d98
No known key found for this signature in database
GPG Key ID: E883E2BC9657D955
8 changed files with 44 additions and 41 deletions

View File

@ -264,7 +264,7 @@ namespace Components
} }
constexpr auto SV_BotUserMove = 0x626E50; constexpr auto SV_BotUserMove = 0x626E50;
__declspec(naked) void Bots::SV_UpdateBots_Hk() __declspec(naked) void Bots::SV_BotUserMove_Hk()
{ {
__asm __asm
{ {
@ -302,8 +302,8 @@ namespace Components
// Intercept sprintf for the connect string // Intercept sprintf for the connect string
Utils::Hook(0x48ADAB, Bots::BuildConnectString, HOOK_CALL).install()->quick(); Utils::Hook(0x48ADAB, Bots::BuildConnectString, HOOK_CALL).install()->quick();
Utils::Hook(0x627021, Bots::SV_UpdateBots_Hk, HOOK_CALL).install()->quick(); Utils::Hook(0x627021, Bots::SV_BotUserMove_Hk, HOOK_CALL).install()->quick();
Utils::Hook(0x627241, Bots::SV_UpdateBots_Hk, HOOK_CALL).install()->quick(); Utils::Hook(0x627241, Bots::SV_BotUserMove_Hk, HOOK_CALL).install()->quick();
// Zero the bot command array // Zero the bot command array
for (auto i = 0u; i < std::extent_v<decltype(g_botai)>; i++) for (auto i = 0u; i < std::extent_v<decltype(g_botai)>; i++)

View File

@ -32,6 +32,6 @@ namespace Components
static void AddMethods(); static void AddMethods();
static void BotAiAction(Game::client_t* cl); static void BotAiAction(Game::client_t* cl);
static void SV_UpdateBots_Hk(); static void SV_BotUserMove_Hk();
}; };
} }

View File

@ -28,10 +28,11 @@ namespace Components
bool ClientCommand::CallbackHandler(Game::gentity_s* ent, const char* cmd) bool ClientCommand::CallbackHandler(Game::gentity_s* ent, const char* cmd)
{ {
const auto command = Utils::String::ToLower(cmd); const auto command = Utils::String::ToLower(cmd);
const auto got = ClientCommand::FunctionMap.find(command);
if (ClientCommand::FunctionMap.find(command) != ClientCommand::FunctionMap.end()) if (got != ClientCommand::FunctionMap.end())
{ {
ClientCommand::FunctionMap[command](ent); got->second(ent);
return true; return true;
} }
@ -42,7 +43,7 @@ namespace Components
{ {
const auto command = Utils::String::ToLower(name); const auto command = Utils::String::ToLower(name);
ClientCommand::FunctionMap[command] = callback; ClientCommand::FunctionMap[command] = std::move(callback);
} }
void ClientCommand::ClientCommandStub(const int clientNum) void ClientCommand::ClientCommandStub(const int clientNum)

View File

@ -966,7 +966,7 @@ namespace Components
Script::AddFunction("HttpGet", [](Game::scr_entref_t) Script::AddFunction("HttpGet", [](Game::scr_entref_t)
{ {
if (!Dedicated::IsEnabled() && !Flags::HasFlag("scriptablehttp")) if (!Flags::HasFlag("scriptablehttp"))
return; return;
const auto* url = Game::Scr_GetString(0); const auto* url = Game::Scr_GetString(0);
@ -987,7 +987,7 @@ namespace Components
Script::AddFunction("HttpCancel", [](Game::scr_entref_t) Script::AddFunction("HttpCancel", [](Game::scr_entref_t)
{ {
if (!Dedicated::IsEnabled() && !Flags::HasFlag("scriptablehttp")) if (!Flags::HasFlag("scriptablehttp"))
return; return;
const auto object = Game::Scr_GetObject(0); const auto object = Game::Scr_GetObject(0);

View File

@ -60,18 +60,16 @@ namespace Components
if (Game::scrVmPub->debugCode || Game::scrVarPub->developer_script) if (Game::scrVmPub->debugCode || Game::scrVarPub->developer_script)
{ {
Game::RuntimeErrorInternal(23, codePos, index, msg); Game::RuntimeErrorInternal(23, codePos, index, msg);
if (!Game::scrVmPub->terminal_error)
return;
} }
else else
{ {
Logger::Print(23, "%s\n", msg); Logger::Print(23, "%s\n", msg);
// Let's not throw error unless we have to
if (Game::scrVmPub->abort_on_error && !Game::scrVmPub->terminal_error)
return;
} }
// Let's not throw error unless we have to
if (!Game::scrVmPub->abort_on_error)
return;
if (dialogMessage == nullptr) if (dialogMessage == nullptr)
dialogMessage = ""; dialogMessage = "";
@ -222,7 +220,7 @@ namespace Components
} }
Logger::Print("Finding script handle %s::%s...\n", script.data(), label.data()); Logger::Print("Finding script handle %s::%s...\n", script.data(), label.data());
int handle = Game::Scr_GetFunctionHandle(script.data(), label.data()); const auto handle = Game::Scr_GetFunctionHandle(script.data(), label.data());
if (handle) if (handle)
{ {
Logger::Print("Script handle %s::%s loaded successfully.\n", script.data(), label.data()); Logger::Print("Script handle %s::%s loaded successfully.\n", script.data(), label.data());
@ -235,7 +233,7 @@ namespace Components
void Script::LoadGameType() void Script::LoadGameType()
{ {
for (auto handle : Script::ScriptHandles) for (const auto& handle : Script::ScriptHandles)
{ {
Game::Scr_FreeThread(Game::Scr_ExecThread(handle, 0)); Game::Scr_FreeThread(Game::Scr_ExecThread(handle, 0));
} }
@ -247,7 +245,7 @@ namespace Components
{ {
Script::ScriptHandles.clear(); Script::ScriptHandles.clear();
auto list = FileSystem::GetFileList("scripts/", "gsc"); const auto list = FileSystem::GetFileList("scripts/", "gsc");
for (auto file : list) for (auto file : list)
{ {
@ -258,8 +256,12 @@ namespace Components
file = file.substr(0, file.size() - 4); file = file.substr(0, file.size() - 4);
} }
int handle = Script::LoadScriptAndLabel(file, "init"); auto handle = Script::LoadScriptAndLabel(file, "init");
if (handle) Script::ScriptHandles.push_back(handle);
if (handle)
{
Script::ScriptHandles.push_back(handle);
}
else else
{ {
handle = Script::LoadScriptAndLabel(file, "main"); handle = Script::LoadScriptAndLabel(file, "main");
@ -339,7 +341,7 @@ namespace Components
for (const auto& [key, value] : Script::ScriptBaseProgramNum) for (const auto& [key, value] : Script::ScriptBaseProgramNum)
{ {
int codePos = key; const auto codePos = key;
if (codePos > scriptPos) if (codePos > scriptPos)
{ {
@ -403,7 +405,7 @@ namespace Components
void Script::OnVMShutdown(Utils::Slot<Scheduler::Callback> callback) void Script::OnVMShutdown(Utils::Slot<Scheduler::Callback> callback)
{ {
Script::ScriptBaseProgramNum.clear(); Script::ScriptBaseProgramNum.clear();
Script::VMShutdownSignal.connect(callback); Script::VMShutdownSignal.connect(std::move(callback));
} }
void Script::ScrShutdownSystemStub(int num) void Script::ScrShutdownSystemStub(int num)
@ -460,7 +462,7 @@ namespace Components
{ {
if (what[0] == '\0' || with[0] == '\0') if (what[0] == '\0' || with[0] == '\0')
{ {
Logger::Print("Warning: Invalid paramters passed to ReplacedFunctions\n"); Logger::Print("Warning: Invalid parameters passed to ReplacedFunctions\n");
return; return;
} }
@ -600,7 +602,7 @@ namespace Components
} }
}); });
// Script Storage Funcs // Script Storage Functions
Script::AddFunction("StorageSet", [](Game::scr_entref_t) // gsc: StorageSet(<str key>, <str data>); Script::AddFunction("StorageSet", [](Game::scr_entref_t) // gsc: StorageSet(<str key>, <str data>);
{ {
const auto* key = Game::Scr_GetString(0); const auto* key = Game::Scr_GetString(0);
@ -664,7 +666,7 @@ namespace Components
return; return;
} }
Game::Scr_AddBool(Script::ScriptStorage.count(key)); Game::Scr_AddBool(static_cast<int>(Script::ScriptStorage.count(key))); // Until C++17
}); });
Script::AddFunction("StorageClear", [](Game::scr_entref_t) // gsc: StorageClear(); Script::AddFunction("StorageClear", [](Game::scr_entref_t) // gsc: StorageClear();
@ -719,11 +721,12 @@ namespace Components
if (!Game::SV_Loaded()) if (!Game::SV_Loaded())
return; return;
int nowMs = Game::Sys_Milliseconds(); const auto nowMs = Game::Sys_Milliseconds();
if (Script::LastFrameTime != -1) if (Script::LastFrameTime != -1)
{ {
int timeTaken = static_cast<int>((nowMs - Script::LastFrameTime) * Dvar::Var("timescale").get<float>()); const auto timeScale = Dvar::Var("timescale").get<float>();
const auto timeTaken = static_cast<int>((nowMs - Script::LastFrameTime) * timeScale);
if (timeTaken >= 500) if (timeTaken >= 500)
Logger::Print(23, "Hitch warning: %i msec frame time\n", timeTaken); Logger::Print(23, "Hitch warning: %i msec frame time\n", timeTaken);

View File

@ -2,7 +2,7 @@
namespace Components namespace Components
{ {
static const char* queryStrings[] = { R"(..)", R"(../)", R"(..\)" }; const char* ScriptExtension::QueryStrings[] = { R"(..)", R"(../)", R"(..\)" };
void ScriptExtension::AddFunctions() void ScriptExtension::AddFunctions()
{ {
@ -26,16 +26,16 @@ namespace Components
return; return;
} }
for (auto i = 0u; i < ARRAYSIZE(queryStrings); ++i) for (auto i = 0u; i < ARRAYSIZE(ScriptExtension::QueryStrings); ++i)
{ {
if (std::strstr(path, queryStrings[i]) != nullptr) if (std::strstr(path, ScriptExtension::QueryStrings[i]) != nullptr)
{ {
Logger::Print("^1FileWrite: directory traversal is not allowed!\n"); Logger::Print("^1FileWrite: directory traversal is not allowed!\n");
return; return;
} }
} }
if (mode != "append"s && mode != "write"s) if (mode != "append" && mode != "write")
{ {
Logger::Print("^3FileWrite: mode not defined or was wrong, defaulting to 'write'\n"); Logger::Print("^3FileWrite: mode not defined or was wrong, defaulting to 'write'\n");
mode = "write"; mode = "write";
@ -61,9 +61,9 @@ namespace Components
return; return;
} }
for (auto i = 0u; i < ARRAYSIZE(queryStrings); ++i) for (auto i = 0u; i < ARRAYSIZE(ScriptExtension::QueryStrings); ++i)
{ {
if (std::strstr(path, queryStrings[i]) != nullptr) if (std::strstr(path, ScriptExtension::QueryStrings[i]) != nullptr)
{ {
Logger::Print("^1FileRead: directory traversal is not allowed!\n"); Logger::Print("^1FileRead: directory traversal is not allowed!\n");
return; return;
@ -89,9 +89,9 @@ namespace Components
return; return;
} }
for (auto i = 0u; i < ARRAYSIZE(queryStrings); ++i) for (auto i = 0u; i < ARRAYSIZE(ScriptExtension::QueryStrings); ++i)
{ {
if (std::strstr(path, queryStrings[i]) != nullptr) if (std::strstr(path, ScriptExtension::QueryStrings[i]) != nullptr)
{ {
Logger::Print("^1FileExists: directory traversal is not allowed!\n"); Logger::Print("^1FileExists: directory traversal is not allowed!\n");
return; return;
@ -111,9 +111,9 @@ namespace Components
return; return;
} }
for (auto i = 0u; i < ARRAYSIZE(queryStrings); ++i) for (auto i = 0u; i < ARRAYSIZE(ScriptExtension::QueryStrings); ++i)
{ {
if (std::strstr(path, queryStrings[i]) != nullptr) if (std::strstr(path, ScriptExtension::QueryStrings[i]) != nullptr)
{ {
Logger::Print("^1fileRemove: directory traversal is not allowed!\n"); Logger::Print("^1fileRemove: directory traversal is not allowed!\n");
return; return;
@ -137,9 +137,7 @@ namespace Components
std::string ip = Game::NET_AdrToString(client->netchan.remoteAddress); std::string ip = Game::NET_AdrToString(client->netchan.remoteAddress);
const auto pos = ip.find_first_of(":"); if (const auto pos = ip.find_first_of(":"); pos != std::string::npos)
if (pos != std::string::npos)
ip.erase(ip.begin() + pos, ip.end()); // Erase port ip.erase(ip.begin() + pos, ip.end()); // Erase port
Game::Scr_AddString(ip.data()); Game::Scr_AddString(ip.data());

View File

@ -8,6 +8,7 @@ namespace Components
ScriptExtension(); ScriptExtension();
private: private:
static const char* QueryStrings[];
static void AddFunctions(); static void AddFunctions();
static void AddMethods(); static void AddMethods();

View File

@ -681,7 +681,7 @@ namespace Game
typedef unsigned int(__cdecl * Scr_GetNumParam_t)(); typedef unsigned int(__cdecl * Scr_GetNumParam_t)();
extern Scr_GetNumParam_t Scr_GetNumParam; extern Scr_GetNumParam_t Scr_GetNumParam;
typedef int(__cdecl * Scr_GetFunctionHandle_t)(const char*, const char*); typedef int(__cdecl * Scr_GetFunctionHandle_t)(const char* filename, const char* name);
extern Scr_GetFunctionHandle_t Scr_GetFunctionHandle; extern Scr_GetFunctionHandle_t Scr_GetFunctionHandle;
typedef int(__cdecl * Scr_ExecThread_t)(int, int); typedef int(__cdecl * Scr_ExecThread_t)(int, int);