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
At the end:
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 )
At the end:
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.