I coded a fix for this a long time ago ... i will post it to the community so u are not forced to use other peoples mods that are untrusted and full of backdoors like XSMOD.
The Problem.
say @%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%@%
Solution in open source format
Within the g_cmds.c file replace the G_ParseVoiceCommands function with the following.
//Start COPY HERE
/*
==================
G_ParseVoiceCommands
==================
*/
void G_ParseVoiceCommands ( gentity_t *ent, const char *chatText, char *text, int textlen, char *sound )
{
int len;
int num;
char *message;
const char *src;
const char *pos;
char c;
char voicecmd[MAX_VOICECMD_TOKENS];
qboolean dotext;
dotext = qtrue;
len = textlen;
src = chatText;
while ( *src != '\0' && len )
{
if ( *src != '@' && *src != '&' )
{
*text++ = *src++;
len--;
continue;
}
if ( *src == '&' )
{
dotext = qfalse;
}
src++;
if ( (*src == '@' && dotext) || (*src == '&' && !dotext) )
{
*text++ = *src++;
len--;
continue;
}
pos = src;
num = 0;
c = *src;
while ( c >= '0' && c <= '9' && len )
{
c -= '0';
num = num * 10 + c;
if (!(num > 0 && num < 1025))
{
Com_Printf("[Heret!cmod ERROR]Invalid VoiceCmd Sound Parsed.");
G_LogPrintf( "[Heret!cmod VoiceCmd ERROR]: %s: %s\n", ent->client->pers.netname, chatText );
return;
}
src++;
len--;
c = *src;
}
if (!(num > 0 && num < 1025) && !voicecmds.voiceCommandSound[num][0])
{
//Heret!cmod Fix - Voice Commands Overflow
*text++ = dotext?'@':'&';
src = pos;
len--;
continue;
//========================================
}
if ( ent != NULL && ent->client->sess.modData->adminref < 2 && ent->client->sess.modData->adminref != -1 && voicecmds.voiceCommandFlag[num] == VOICE_ADMIN_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
if ( ent != NULL && !ent->client->sess.modData->clan && voicecmds.voiceCommandFlag[num] == VOICE_CLAN_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
if ( ent != NULL && ent->client->sess.modData->adminref < 4 && ent->client->sess.modData->adminref > -3 && voicecmds.voiceCommandFlag[num] == VOICE_FOUNDER_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
if ( ent != NULL && ent->client->sess.modData->adminref < 4 && ent->client->sess.modData->adminref > -3 && voicecmds.voiceCommandFlag[num] == VOICE_COFOUNDER_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
if ( ent != NULL && ent->client->sess.modData->adminref < 3 && ent->client->sess.modData->adminref > -2 && voicecmds.voiceCommandFlag[num] == VOICE_SYSOP_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
if ( ent != NULL && ent->client->sess.modData->adminref < 1 && ent->client->sess.modData->adminref > -1 && voicecmds.voiceCommandFlag[num] == VOICE_REFEREE_ONLY )
{
*text++ = dotext?'@':'&';
src = pos;
continue;
}
strcpy( sound, voicecmds.voiceCommandSound[num] );
message = voicecmds.voiceCommandText[num];
G_LogPrintf( "[Heret!cMod] VoiceCmd Text: %s\n", message );
if ( dotext && (num > 0 && num < 1025) && message != NULL)
{
while (*message != '\0' && len )
{
*text++ = *message++;
len--;
}
}
}
*text = '\0';
}
//STOP COPY HERE
Thanks In Advance
[Heret!c][Death]
http://www.hereticteam.com