UserCmd strings: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (char*ful)
Line 9: Line 9:
  {
  {
  buf->WriteOneBit( 1 );
  buf->WriteOneBit( 1 );
  KeyValues *data = g_pLocalPlayer->GetUserData();
  int count = g_pLocalPlayer->GetUserDataCount();
  CUtlBuffer databuf;
  const char *pData;
  data->WriteAsBinary(databuf);
  buf->WriteByte(count);
  int len = strlen(static_cast<char*>(databuf.Base()));
  for(int x=0;x<count;x++)
  buf->WriteShort(len);
  {
buf->WriteBits(databuf, len);
buf->WriteString(g_pLocalPlayer->GetUserData(x));
}
  g_pLocalPlayer->ClearUserData();
  g_pLocalPlayer->ClearUserData();
  }
  }
Line 26: Line 27:
  if( buf->ReadOneBit() )
  if( buf->ReadOneBit() )
  {
  {
  int count = buf->ReadShort();
  int count = buf->ReadByte();
  char data[count+1];
  for(int x=0;x<count;x++)
  buf->ReadBytes(data,count);
  {
char *cmd = buf->ReadAndAllocateString();
  #ifndef CLIENT_DLL
  #ifndef CLIENT_DLL
pPlayer->EvaluateUserData(data);
pPlayer->EvaluateUserData(cmd);
  #endif
  #endif
delete cmd;
}
  }
  }
====UserCmd.h====
====UserCmd.h====
Line 44: Line 48:
==Implementation==
==Implementation==
===Client===
===Client===
*<code>KeyValues *GetUserData(void)</code> returns the KeyValues data stored on the player.
*<code>int GetUserDataCount(void)</code> returns the number of data strings stored in a char array stored on the player.
*<code>void ClearUserData(void)</code> clears the client-side KeyValues and sets the boolean so they don't get sent twice.
*<code>const char *GetUserData(int index)</code> returns the data stored in the array of user data stored on the player.
*<code>void ClearUserData(void)</code> clears the client-side char*[] and sets the boolean so they don't get sent twice.
*<code>bool UserDataChanged(void)</code> returns the boolean modified by ClearUserData.
*<code>bool UserDataChanged(void)</code> returns the boolean modified by ClearUserData.
===Server===
===Server===
*<code>void EvaluateUserData(const char *pData)</code> reads pData to a KeyValues and evaluates what to do with the commands stored within them.
*<code>void EvaluateUserData(const char *pData)</code> evaluates what to do with the commands stored in pData.
[[Category:Programming]][[Category:Tutorials]]
[[Category:Programming]][[Category:Tutorials]]

Revision as of 17:07, 17 June 2006

Warning.pngWarning:These changes are only theoretical and haven't been tested whatsoever.

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 );
		int count = g_pLocalPlayer->GetUserDataCount();
		const char *pData;
		buf->WriteByte(count);
		for(int x=0;x<count;x++)
		{
			buf->WriteString(g_pLocalPlayer->GetUserData(x));
		}
		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->ReadByte();
		for(int x=0;x<count;x++)
		{
			char *cmd = buf->ReadAndAllocateString();
#ifndef CLIENT_DLL
			pPlayer->EvaluateUserData(cmd);
#endif
			delete cmd;
		}
	}

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

  • int GetUserDataCount(void) returns the number of data strings stored in a char array stored on the player.
  • const char *GetUserData(int index) returns the data stored in the array of user data stored on the player.
  • void ClearUserData(void) clears the client-side char*[] 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) evaluates what to do with the commands stored in pData.