This commit is contained in:
6arelyFuture 2021-12-29 22:14:05 +01:00
parent 43d8c57ad0
commit 079f75c434
Signed by: Future
GPG Key ID: FA77F074E98D98A5
4 changed files with 84 additions and 18 deletions

View File

@ -2,6 +2,8 @@
#include "loader/component_loader.hpp" #include "loader/component_loader.hpp"
#include "command.hpp"
namespace chat namespace chat
{ {
class component final : public component_interface class component final : public component_interface
@ -9,6 +11,35 @@ namespace chat
public: public:
void post_unpack() override 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 <client number>\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());
});
} }
}; };
} }

View File

@ -219,6 +219,13 @@ namespace game
static_assert(sizeof(msg_t) == 48); static_assert(sizeof(msg_t) == 48);
typedef enum
{
SCRIPTINSTANCE_SERVER,
SCRIPTINSTANCE_CLIENT,
SCRIPT_INSTANCE_MAX
} scriptInstance_t;
enum dvar_flags : unsigned __int16 enum dvar_flags : unsigned __int16
{ {
DVAR_FLAG_SAVED = 0x1, DVAR_FLAG_SAVED = 0x1,
@ -317,6 +324,22 @@ namespace game
PLAYER_FLAG_FROZEN = 1 << 2, 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 struct gclient_s
{ {
char __pad0[10396]; char __pad0[10396];
@ -364,7 +387,8 @@ namespace game
enum playerStateFlag enum playerStateFlag
{ {
PMF_PRONE = 0x1, PMF_PRONE = 0x1,
PMF_DUCKED = 0x2 PMF_DUCKED = 0x2,
PMF_MANTLE = 0x4
}; };
struct gentity_s struct gentity_s
@ -441,15 +465,6 @@ namespace game
int flags; 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 enum ViewLockTypes
{ {
PLAYERVIEWLOCK_NONE = 0, PLAYERVIEWLOCK_NONE = 0,
@ -496,11 +511,11 @@ namespace game
struct clientHeader_t struct clientHeader_t
{ {
clientState_t state; // 0 clientState_t state;
int sendAsActive; // 4 int sendAsActive;
int deltaMessage; // 8 int deltaMessage;
int rateDealyed; // 12 int rateDealyed;
netchan_t netchan; // 24 netchan_t netchan;
vec3_t predictedOrigin; vec3_t predictedOrigin;
int predictedOriginServerTime; int predictedOriginServerTime;
PredictedVehicleInfo vehicle; PredictedVehicleInfo vehicle;
@ -523,5 +538,15 @@ namespace game
char reliableCommandBuffer[16384]; char reliableCommandBuffer[16384];
int reliableCommandBufferNext; int reliableCommandBufferNext;
svscmd_info_t reliableCommandInfo[128]; 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;
}; };
} }

View File

@ -4,10 +4,10 @@
namespace game namespace game
{ {
// Functions
WEAK symbol<void(errorParm_t, const char*, ...)> Com_Error{0x627380, 0x0}; WEAK symbol<void(errorParm_t, const char*, ...)> Com_Error{0x627380, 0x0};
WEAK symbol<void(conChannel_t, const char*, ...)> Com_Printf{0x4126C0, 0x0}; WEAK symbol<void(conChannel_t, const char*, ...)> Com_Printf{0x4126C0, 0x0};
WEAK symbol<void(conChannel_t, const char*, ...)> Com_DPrintf{0x4E3FA0, 0x0}; WEAK symbol<void(conChannel_t, const char*, ...)> Com_DPrintf{0x4E3FA0, 0x0};
WEAK symbol<void(conChannel_t, const char*, ...)> Com_PrintError{0x568B90, 0x0};
WEAK symbol<void(LocalClientNum_t, const char* text)> Cbuf_AddText{0x56EF70, 0x0}; WEAK symbol<void(LocalClientNum_t, const char* text)> Cbuf_AddText{0x56EF70, 0x0};
WEAK symbol<void(LocalClientNum_t, int controllerIndex, const char* text)> Cmd_ExecuteSingleCommand{0x50B470, 0x0}; WEAK symbol<void(LocalClientNum_t, int controllerIndex, const char* text)> Cmd_ExecuteSingleCommand{0x50B470, 0x0};
@ -24,6 +24,8 @@ namespace game
WEAK symbol<const char*(const dvar_s*)> Dvar_DisplayableValue{0x681DD0, 0x0}; WEAK symbol<const char*(const dvar_s*)> Dvar_DisplayableValue{0x681DD0, 0x0};
WEAK symbol<const dvar_s*(const char*, const char*, WEAK symbol<const dvar_s*(const char*, const char*,
unsigned __int16, const char*)> Dvar_RegisterString{0x4E3410, 0x0}; unsigned __int16, const char*)> Dvar_RegisterString{0x4E3410, 0x0};
WEAK symbol<const dvar_s*(const char*, float, float,
float, unsigned __int16, const char*)> Dvar_RegisterFloat{0x670020, 0x0};
WEAK symbol<void(const char*, void(), cmd_function_t*)> Cmd_AddCommandInternal{0x6AD580, 0x0}; WEAK symbol<void(const char*, void(), cmd_function_t*)> Cmd_AddCommandInternal{0x6AD580, 0x0};
WEAK symbol<void(const char* cmdName)> Cmd_RemoveCommand{0x527EA0, 0x0}; WEAK symbol<void(const char* cmdName)> Cmd_RemoveCommand{0x527EA0, 0x0};
@ -31,9 +33,17 @@ namespace game
WEAK symbol<char*(char*)> I_CleanStr{0x4B0700, 0x0}; WEAK symbol<char*(char*)> I_CleanStr{0x4B0700, 0x0};
WEAK symbol<char*(int)> ConcatArgs{0x5D5F10, 0x0}; WEAK symbol<char*(int)> ConcatArgs{0x5D5F10, 0x0};
WEAK symbol<void(gentity_s*, gentity_s*, int, const char*)> G_Say{0x51BBD0, 0x0};
WEAK symbol<void(gentity_s*, unsigned __int16, unsigned int)> Scr_Notify{0x458D30, 0x0};
WEAK symbol<void(int, scriptInstance_t)> Scr_AddInt{0x49F830, 0x0};
WEAK symbol<void(const float*, scriptInstance_t)> Scr_AddVector{0x532EF0, 0x0};
WEAK symbol<int(const playerState_s*)> PM_GetEffectiveStance{0x659590, 0x0};
WEAK symbol<CmdArgs> cmd_args{0x355BD88, 0x0}; WEAK symbol<CmdArgs> cmd_args{0x355BD88, 0x0};
WEAK symbol<int> dvarCount{0x385BE74, 0x0}; WEAK symbol<int> dvarCount{0x385BE74, 0x0};
WEAK symbol<dvar_t*> sortedDvars{0x385BE88, 0x0}; WEAK symbol<dvar_t*> sortedDvars{0x385BE88, 0x0};
WEAK symbol<gentity_s> g_entities{0x32E5640, 0x0}; WEAK symbol<gentity_s> g_entities{0x32E5784, 0x0};
WEAK symbol<int> level_time{0x3443F4C, 0x0};
} }