From b0728154077b4749c7d56891fd82230a595e80ce Mon Sep 17 00:00:00 2001 From: Diavolo Date: Fri, 27 May 2022 12:30:43 +0200 Subject: [PATCH] 99% non-plagiarised kill command implementation --- src/Components/Modules/ClientCommand.cpp | 17 +++++++++++++++++ src/Game/Functions.cpp | 2 ++ src/Game/Functions.hpp | 3 +++ 3 files changed, 22 insertions(+) diff --git a/src/Components/Modules/ClientCommand.cpp b/src/Components/Modules/ClientCommand.cpp index 7d8436da..774919d0 100644 --- a/src/Components/Modules/ClientCommand.cpp +++ b/src/Components/Modules/ClientCommand.cpp @@ -245,6 +245,23 @@ namespace Components assert(ent != nullptr); ent->client->ps.stunTime = 1000 + Game::level->time; // 1000 is the default test stun time }); + + ClientCommand::Add("kill", []([[maybe_unused]] Game::gentity_s* ent, [[maybe_unused]] Command::ServerParams* params) + { + assert(ent->client != nullptr); + assert(ent->client->connected != Game::clientConnected_t::CON_DISCONNECTED); + + if (ent->client->sessionState != Game::sessionState_t::SESS_STATE_PLAYING || !ClientCommand::CheatsOk(ent)) + return; + + Scheduler::Once([ent] + { + ent->flags &= ~(Game::entityFlag::FL_GODMODE | Game::entityFlag::FL_DEMI_GODMODE); + ent->health = 0; + ent->client->ps.stats[0] = 0; + Game::player_die(ent, ent, ent, 100000, 12, 0, nullptr, Game::hitLocation_t::HITLOC_NONE, 0); + }, Scheduler::Pipeline::SERVER); + }); } void ClientCommand::AddScriptFunctions() diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 38dc86e1..e032a757 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -431,6 +431,8 @@ namespace Game IN_Init_t IN_Init = IN_Init_t(0x45D620); IN_Shutdown_t IN_Shutdown = IN_Shutdown_t(0x426360); + player_die_t player_die = player_die_t(0x42BC70); + XAssetHeader* DB_XAssetPool = reinterpret_cast(0x7998A8); unsigned int* g_poolSize = reinterpret_cast(0x7995E8); diff --git a/src/Game/Functions.hpp b/src/Game/Functions.hpp index c91fa939..149c843b 100644 --- a/src/Game/Functions.hpp +++ b/src/Game/Functions.hpp @@ -1029,6 +1029,9 @@ namespace Game typedef void(__cdecl * IN_Shutdown_t)(); extern IN_Shutdown_t IN_Shutdown; + typedef void(__cdecl * player_die_t)(gentity_s* self, const gentity_s* inflictor, gentity_s* attacker, int damage, int meansOfDeath, int iWeapon, const float* vDir, const hitLocation_t hitLoc, int psTimeOffset); + extern player_die_t player_die; + extern XAssetHeader* DB_XAssetPool; extern unsigned int* g_poolSize;