UserCmd strings
Jump to navigation
Jump to search
Introduction
This modification allows a mod to send messages from the client to the server without using commands. This allows for a more secure method of communication from the client to the server. A possible implementation would be with VGUI Screens.
Changes
UserCmd.cpp
WriteUsercmd
if(g_pLocalPlayer&&g_pLocalPlayer->UserDataChanged())
{
buf->WriteOneBit( 1 );
KeyValues *data = g_pLocalPlayer->GetUserData();
CUtlBuffer databuf;
data->WriteAsBinary(databuf);
int len = strlen(static_cast<char*>(databuf.Base()));
buf->WriteShort(len);
buf->WriteBits(databuf, len);
g_pLocalPlayer->ClearUserData();
}
else
{
buf->WriteOneBit( 0 );
}
ReadUsercmd
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from, CBasePlayer *pPlayer )
if( buf->ReadOneBit() )
{
int count = buf->ReadShort();
char data[count+1];
buf->ReadBytes(data,count);
#ifndef CLIENT_DLL
pPlayer->EvaluateUserData(data);
#endif
}
UserCmd.h
#include "baseplayer_shared.h"
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from, CBasePlayer *pPlayer );
in_main.cpp
ReadUsercmd( buf, to, from, NULL );
Changes to gameinterface.cpp
ReadUsercmd( buf, to, from, pPlayer );
Implementation
Client
KeyValues *GetUserData(void)returns the KeyValues data stored on the player.void ClearUserData(void)clears the client-side KeyValues and sets the boolean so they don't get sent twice.bool UserDataChanged(void)returns the boolean modified by ClearUserData.
Server
void EvaluateUserData(const char *pData)reads pData to a KeyValues and evaluates what to do with the commands stored within them.