Tweeked KRIMZON_SV_PARSECLIENTCOMMAND. It should have better behaviour now. (More like DP)

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@571 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2004-12-05 11:51:44 +00:00
parent c692ef4d5e
commit 799eec7a81
2 changed files with 56 additions and 38 deletions

View file

@ -1205,13 +1205,13 @@ qboolean PR_UserCmd(char *s)
#ifdef Q2SERVER #ifdef Q2SERVER
if (ge) if (ge)
{ {
SV_BeginRedirect (RD_CLIENT);
ge->ClientCommand(host_client->q2edict); ge->ClientCommand(host_client->q2edict);
SV_EndRedirect ();
return true; //the dll will convert in to chat. return true; //the dll will convert in to chat.
} }
#endif #endif
SV_EndRedirect ();
pr_globals = PR_globals(svprogfuncs, PR_CURRENT); pr_globals = PR_globals(svprogfuncs, PR_CURRENT);
if (SV_ParseClientCommand) if (SV_ParseClientCommand)
{ //this one is queryable, so it's the one that is proven to exist. { //this one is queryable, so it's the one that is proven to exist.
@ -1221,7 +1221,7 @@ qboolean PR_UserCmd(char *s)
G_INT(OFS_PARM0) = (int)PR_SetString(svprogfuncs, s); G_INT(OFS_PARM0) = (int)PR_SetString(svprogfuncs, s);
PR_ExecuteProgram (svprogfuncs, SV_ParseClientCommand); PR_ExecuteProgram (svprogfuncs, SV_ParseClientCommand);
return false; return true;
} }
if (mod_UserCmd && pr_imitatemvdsv.value >= 0) if (mod_UserCmd && pr_imitatemvdsv.value >= 0)
{ {

View file

@ -2638,17 +2638,18 @@ typedef struct
{ {
char *name; char *name;
void (*func) (void); void (*func) (void);
qboolean noqchandling;
} ucmd_t; } ucmd_t;
ucmd_t ucmds[] = ucmd_t ucmds[] =
{ {
{"new", SV_New_f}, {"new", SV_New_f, true},
{"pk3list", SV_PK3List_f}, {"pk3list", SV_PK3List_f, true},
{"modellist", SV_Modellist_f}, {"modellist", SV_Modellist_f, true},
{"soundlist", SV_Soundlist_f}, {"soundlist", SV_Soundlist_f, true},
{"prespawn", SV_PreSpawn_f}, {"prespawn", SV_PreSpawn_f, true},
{"spawn", SV_Spawn_f}, {"spawn", SV_Spawn_f, true},
{"begin", SV_Begin_f}, {"begin", SV_Begin_f, true},
{"join", Cmd_Join_f}, {"join", Cmd_Join_f},
{"observe", Cmd_Observe_f}, {"observe", Cmd_Observe_f},
@ -2697,28 +2698,28 @@ ucmd_t ucmds[] =
#ifdef Q2SERVER #ifdef Q2SERVER
ucmd_t ucmdsq2[] = { ucmd_t ucmdsq2[] = {
{"new", SV_New_f}, {"new", SV_New_f, true},
{"configstrings", SVQ2_ConfigStrings_f}, {"configstrings", SVQ2_ConfigStrings_f, true},
{"baselines", SVQ2_BaseLines_f}, {"baselines", SVQ2_BaseLines_f, true},
{"begin", SV_Begin_f}, {"begin", SV_Begin_f, true},
{"setinfo", SV_SetInfo_f}, {"setinfo", SV_SetInfo_f, true},
{"serverinfo", SV_ShowServerinfo_f}, {"serverinfo", SV_ShowServerinfo_f, true},
{"download", SV_BeginDownload_f}, {"download", SV_BeginDownload_f, true},
{"nextdl", SV_NextDownload_f}, {"nextdl", SV_NextDownload_f, true},
{"nextserver", SVQ2_NextServer_f}, {"nextserver", SVQ2_NextServer_f, true},
{"vote", SV_Vote_f}, {"vote", SV_Vote_f, true},
#ifdef SVRANKING #ifdef SVRANKING
{"topten", Rank_ListTop10_f}, {"topten", Rank_ListTop10_f, true},
#endif #endif
{"drop", SV_Drop_f}, {"drop", SV_Drop_f, true},
{"disconnect", SV_Drop_f}, {"disconnect", SV_Drop_f, true},
{NULL, NULL} {NULL, NULL}
}; };
@ -2739,8 +2740,6 @@ void SV_ExecuteUserCommand (char *s, qboolean fromQC)
Cmd_ExecLevel=1; Cmd_ExecLevel=1;
SV_BeginRedirect (RD_CLIENT);
if (atoi(Cmd_Argv(0))>0) //now see if it's meant to be from a slave client if (atoi(Cmd_Argv(0))>0) //now see if it's meant to be from a slave client
{ {
int pnum = atoi(Cmd_Argv(0)); int pnum = atoi(Cmd_Argv(0));
@ -2767,8 +2766,17 @@ void SV_ExecuteUserCommand (char *s, qboolean fromQC)
for ( ; u->name ; u++) for ( ; u->name ; u++)
if (!strcmp (Cmd_Argv(0), u->name) ) if (!strcmp (Cmd_Argv(0), u->name) )
{ {
if (!fromQC && !u->noqchandling)
if (PR_UserCmd(s))
{
host_client = oldhost;
return;
}
SV_BeginRedirect (RD_CLIENT);
u->func (); u->func ();
break; host_client = oldhost;
SV_EndRedirect ();
return;
} }
if (!u->name) if (!u->name)
@ -2777,7 +2785,6 @@ void SV_ExecuteUserCommand (char *s, qboolean fromQC)
if (PR_UserCmd(s)) if (PR_UserCmd(s))
{ {
host_client = oldhost; host_client = oldhost;
SV_EndRedirect ();
return; return;
} }
@ -2790,14 +2797,13 @@ void SV_ExecuteUserCommand (char *s, qboolean fromQC)
if (!Rank_GetPlayerStats(host_client->rankid, &stats)) if (!Rank_GetPlayerStats(host_client->rankid, &stats))
{ {
host_client = oldhost; host_client = oldhost;
SV_EndRedirect ();
return; return;
} }
Con_Printf ("cmd from %s:\n%s\n" Con_Printf ("cmd from %s:\n%s\n"
, host_client->name, net_message.data+4); , host_client->name, net_message.data+4);
SV_BeginRedirect (RD_PACKET); SV_BeginRedirect (RD_CLIENT);
remaining[0] = 0; remaining[0] = 0;
@ -3170,9 +3176,9 @@ ucmd_t nqucmds[] =
{"color", SVNQ_NQColour_f}, {"color", SVNQ_NQColour_f},
{"kill", SV_Kill_f}, {"kill", SV_Kill_f},
{"pause", SV_Pause_f}, {"pause", SV_Pause_f},
{"spawn", SVNQ_Spawn_f}, {"spawn", SVNQ_Spawn_f, true},
{"begin", SVNQ_Begin_f}, {"begin", SVNQ_Begin_f, true},
{"prespawn", SVNQ_PreSpawn_f}, {"prespawn", SVNQ_PreSpawn_f, true},
{"kick", NULL}, {"kick", NULL},
{"ping", NULL}, {"ping", NULL},
{"ban", NULL}, {"ban", NULL},
@ -3187,6 +3193,7 @@ ucmd_t nqucmds[] =
void SVNQ_ExecuteUserCommand (char *s) void SVNQ_ExecuteUserCommand (char *s)
{ {
client_t *oldhost = host_client;
ucmd_t *u; ucmd_t *u;
Cmd_TokenizeString (s); Cmd_TokenizeString (s);
@ -3194,24 +3201,35 @@ void SVNQ_ExecuteUserCommand (char *s)
Cmd_ExecLevel=1; Cmd_ExecLevel=1;
SV_BeginRedirect (RD_CLIENT);
for (u=nqucmds ; u->name ; u++) for (u=nqucmds ; u->name ; u++)
{ {
if (!strcmp (Cmd_Argv(0), u->name) ) if (!strcmp (Cmd_Argv(0), u->name) )
{ {
if (!fromQC && !u->noqchandling)
if (PR_UserCmd(s))
{
host_client = oldhost;
return;
}
if (!u->func) if (!u->func)
{ {
Con_Printf("Command was disabled\n"); SV_BeginRedirect (RD_CLIENT);
Con_Printf("Command was disabled\n");
SV_EndRedirect ();
} }
else else
{
SV_BeginRedirect (RD_CLIENT);
u->func (); u->func ();
break; SV_EndRedirect ();
}
host_client = oldhost;
return;
} }
} }
SV_EndRedirect ();
if (!u->name) if (!u->name)
Con_Printf("%s tried to \"%s\"\n", host_client->name, s); Con_Printf("%s tried to \"%s\"\n", host_client->name, s);
} }