From 079f75c434e72d07bf70e46a65e5359f0f6e1fc0 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 29 Dec 2021 22:14:05 +0100 Subject: [PATCH] sayas --- src/component/ban.cpp | 2 +- src/component/chat.cpp | 31 ++++++++++++++++++++++++ src/game/structs.hpp | 55 ++++++++++++++++++++++++++++++------------ src/game/symbols.hpp | 14 +++++++++-- 4 files changed, 84 insertions(+), 18 deletions(-) diff --git a/src/component/ban.cpp b/src/component/ban.cpp index 4b20d1b..d1dc84f 100644 --- a/src/component/ban.cpp +++ b/src/component/ban.cpp @@ -37,4 +37,4 @@ namespace ban }; } -REGISTER_COMPONENT(ban::component) \ No newline at end of file +REGISTER_COMPONENT(ban::component) diff --git a/src/component/chat.cpp b/src/component/chat.cpp index 5421eeb..3f65d10 100644 --- a/src/component/chat.cpp +++ b/src/component/chat.cpp @@ -2,6 +2,8 @@ #include "loader/component_loader.hpp" +#include "command.hpp" + namespace chat { class component final : public component_interface @@ -9,6 +11,35 @@ namespace chat public: void post_unpack() override { + add_chat_commands(); + } + + private: + static void add_chat_commands() + { + command::add("sayAs", [](const command::params& params) + { + if (params.size() < 3) + { + game::Com_Printf(game::CON_CHANNEL_DONT_FILTER, + "Usage: sayAs \n"); + return; + } + + const auto* client = game::SV_GetPlayerByNum(); + + if (client == nullptr) + return; + + auto* gentity = client->gentity; + assert(gentity != nullptr); + + if (gentity->client == nullptr) + return; + + const auto message = params.join(2); + game::G_Say(gentity, nullptr, 0, message.data()); + }); } }; } diff --git a/src/game/structs.hpp b/src/game/structs.hpp index c41c15b..26e9c70 100644 --- a/src/game/structs.hpp +++ b/src/game/structs.hpp @@ -219,6 +219,13 @@ namespace game static_assert(sizeof(msg_t) == 48); + typedef enum + { + SCRIPTINSTANCE_SERVER, + SCRIPTINSTANCE_CLIENT, + SCRIPT_INSTANCE_MAX + } scriptInstance_t; + enum dvar_flags : unsigned __int16 { DVAR_FLAG_SAVED = 0x1, @@ -317,6 +324,22 @@ namespace game PLAYER_FLAG_FROZEN = 1 << 2, }; + struct playerState_s + { + int commandTime; + int pm_type; + int bobCycle; + int pm_flags; + int weapFlags; + int otherFlags; + int pm_time; + }; + + struct pmove_t + { + playerState_s* ps; + }; + struct gclient_s { char __pad0[10396]; @@ -364,7 +387,8 @@ namespace game enum playerStateFlag { PMF_PRONE = 0x1, - PMF_DUCKED = 0x2 + PMF_DUCKED = 0x2, + PMF_MANTLE = 0x4 }; struct gentity_s @@ -441,15 +465,6 @@ namespace game int flags; }; - enum EffectiveStance - { - PM_EFF_STANCE_DEFAULT = 0, - PM_EFF_STANCE_PRONE = 1, - PM_EFF_STANCE_DUCKED = 2, - PM_EFF_STANCE_LASTSTANDCRAWL = 3, - PM_EFF_STANCE_COUNT = 4 - }; - enum ViewLockTypes { PLAYERVIEWLOCK_NONE = 0, @@ -496,11 +511,11 @@ namespace game struct clientHeader_t { - clientState_t state; // 0 - int sendAsActive; // 4 - int deltaMessage; // 8 - int rateDealyed; // 12 - netchan_t netchan; // 24 + clientState_t state; + int sendAsActive; + int deltaMessage; + int rateDealyed; + netchan_t netchan; vec3_t predictedOrigin; int predictedOriginServerTime; PredictedVehicleInfo vehicle; @@ -523,5 +538,15 @@ namespace game char reliableCommandBuffer[16384]; int reliableCommandBufferNext; svscmd_info_t reliableCommandInfo[128]; + int reliableSequence; + int reliableAcknowledge; + int reliableSent; + int messageAcknowledge; + int gamestateMessageNum; + int challenge; + usercmd_s lastUsercmd; + int lastClientCommand; + char lastClientCommandString[1024]; + gentity_s* gentity; }; } diff --git a/src/game/symbols.hpp b/src/game/symbols.hpp index 655ab15..1fbf842 100644 --- a/src/game/symbols.hpp +++ b/src/game/symbols.hpp @@ -4,10 +4,10 @@ namespace game { -// Functions WEAK symbol Com_Error{0x627380, 0x0}; WEAK symbol Com_Printf{0x4126C0, 0x0}; WEAK symbol Com_DPrintf{0x4E3FA0, 0x0}; + WEAK symbol Com_PrintError{0x568B90, 0x0}; WEAK symbol Cbuf_AddText{0x56EF70, 0x0}; WEAK symbol Cmd_ExecuteSingleCommand{0x50B470, 0x0}; @@ -24,6 +24,8 @@ namespace game WEAK symbol Dvar_DisplayableValue{0x681DD0, 0x0}; WEAK symbol Dvar_RegisterString{0x4E3410, 0x0}; + WEAK symbol Dvar_RegisterFloat{0x670020, 0x0}; WEAK symbol Cmd_AddCommandInternal{0x6AD580, 0x0}; WEAK symbol Cmd_RemoveCommand{0x527EA0, 0x0}; @@ -31,9 +33,17 @@ namespace game WEAK symbol I_CleanStr{0x4B0700, 0x0}; WEAK symbol ConcatArgs{0x5D5F10, 0x0}; + WEAK symbol G_Say{0x51BBD0, 0x0}; + + WEAK symbol Scr_Notify{0x458D30, 0x0}; + WEAK symbol Scr_AddInt{0x49F830, 0x0}; + WEAK symbol Scr_AddVector{0x532EF0, 0x0}; + + WEAK symbol PM_GetEffectiveStance{0x659590, 0x0}; WEAK symbol cmd_args{0x355BD88, 0x0}; WEAK symbol dvarCount{0x385BE74, 0x0}; WEAK symbol sortedDvars{0x385BE88, 0x0}; - WEAK symbol g_entities{0x32E5640, 0x0}; + WEAK symbol g_entities{0x32E5784, 0x0}; + WEAK symbol level_time{0x3443F4C, 0x0}; }