}
dpsnprintf (str, sizeof(str), "playdemo %s\n", cls.demos[cls.demonum]);
- Cbuf_InsertText(&cmd_local, str);
+ Cbuf_InsertText(&cmd_client, str);
cls.demonum++;
}
CL_ParseServerMessage();
if (cls.signon != SIGNONS)
- Cbuf_Execute((&cmd_local)->cbuf); // immediately execute svc_stufftext if in the demo before connect!
+ Cbuf_Execute((&cmd_client)->cbuf); // immediately execute svc_stufftext if in the demo before connect!
// In case the demo contains a "svc_disconnect" message
if (!cls.demoplayback)
if(atoi(sys.argv[i + 1]) > benchmark_runs)
{
// restart the benchmark
- Cbuf_AddText(&cmd_local, va(vabuf, sizeof(vabuf), "timedemo %s\n", cls.demoname));
+ Cbuf_AddText(&cmd_client, va(vabuf, sizeof(vabuf), "timedemo %s\n", cls.demoname));
// cannot execute here
}
else
sizebuf_t buf;
unsigned char bufdata[8];
if (cls.demorecording)
- CL_Stop_f(&cmd_local);
+ CL_Stop_f(&cmd_client);
// send disconnect message 3 times to improve chances of server
// receiving it (but it still fails sometimes)
{
int i;
*cls.connect_userinfo = 0;
- for(i = firstarg; i+2 <= Cmd_Argc(&cmd_local); i += 2)
- InfoString_SetValue(cls.connect_userinfo, sizeof(cls.connect_userinfo), Cmd_Argv(&cmd_local, i), Cmd_Argv(&cmd_local, i+1));
+ for(i = firstarg; i+2 <= Cmd_Argc(&cmd_client); i += 2)
+ InfoString_SetValue(cls.connect_userinfo, sizeof(cls.connect_userinfo), Cmd_Argv(&cmd_client, i), Cmd_Argv(&cmd_client, i+1));
}
else if(firstarg < -1)
{
World_Start(&cl.world);
// load or reload .loc file for team chat messages
- CL_Locs_Reload_f(&cmd_local);
+ CL_Locs_Reload_f(&cmd_client);
// make sure we send enough keepalives
CL_KeepaliveMessage(false);
return;
// abort existing upload if in progress
- QW_CL_StopUpload_f(&cmd_local);
+ QW_CL_StopUpload_f(&cmd_client);
Con_DPrintf("Starting upload of %d bytes...\n", size);
cls.qw_uploadsize = size;
cls.qw_uploadpos = 0;
- QW_CL_NextUpload_f(&cmd_local);
+ QW_CL_NextUpload_f(&cmd_client);
}
#if 0
// execute cl_begindownloads next frame
// (after any commands added by svc_stufftext have been executed)
// when done with downloads the "prespawn" will be sent
- Cbuf_AddText(&cmd_local, "\ncl_begindownloads\n");
+ Cbuf_AddText(&cmd_client, "\ncl_begindownloads\n");
//MSG_WriteByte (&cls.netcon->message, clc_stringcmd);
//MSG_WriteString (&cls.netcon->message, "prespawn");
if (cls.demorecording)
{
// finish the previous level's demo file
- CL_Stop_f(&cmd_local);
+ CL_Stop_f(&cmd_client);
}
// start a new demo file
break;
case qw_svc_sellscreen:
- Cmd_ExecuteString(&cmd_local, "help", src_local, true);
+ Cmd_ExecuteString(&cmd_client, "help", src_local, true);
break;
case qw_svc_smallkick:
break;
case svc_sellscreen:
- Cmd_ExecuteString(&cmd_local, "help", src_local, true);
+ Cmd_ExecuteString(&cmd_client, "help", src_local, true);
break;
case svc_hidelmp:
if (gamemode == GAME_TENEBRAE)
void CL_Parse_ErrorCleanUp(void)
{
CL_StopDownload(0, 0);
- QW_CL_StopUpload_f(&cmd_local);
+ QW_CL_StopUpload_f(&cmd_client);
}
void CL_Parse_Init(void)
static void VM_CL_registercmd (prvm_prog_t *prog)
{
VM_SAFEPARMCOUNT(1, VM_CL_registercmd);
- if(!Cmd_Exists(&cmd_local, PRVM_G_STRING(OFS_PARM0)))
+ if(!Cmd_Exists(&cmd_client, PRVM_G_STRING(OFS_PARM0)))
Cmd_AddCommand(CF_CLIENT, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
}
#include "quakedef.h"
#include "thread.h"
-cmd_state_t cmd_local;
+cmd_state_t cmd_client;
+cmd_state_t cmd_server;
cmd_state_t cmd_serverfromclient;
cmd_userdefined_t cmd_userdefined_all;
cmd_iter_t;
static cmd_iter_t cmd_iter_all[] = {
- {&cmd_local},
+ {&cmd_client},
+ {&cmd_server},
{&cmd_serverfromclient},
{NULL},
};
cmd->null_string = "";
}
// client console can see server cvars because the user may start a server
- cmd_local.cvars = &cvars_all;
- cmd_local.cvars_flagsmask = CF_CLIENT | CF_SERVER;
- cmd_local.cmd_flags = CF_SERVER | CF_CLIENT | CF_CLIENT_FROM_SERVER;
- cmd_local.auto_flags = CF_SERVER_FROM_CLIENT;
- cmd_local.auto_function = CL_ForwardToServer_f; // FIXME: Move this to the client.
- cmd_local.userdefined = &cmd_userdefined_all;
+ cmd_client.cvars = &cvars_all;
+ cmd_client.cvars_flagsmask = CF_CLIENT | CF_SERVER;
+ cmd_client.cmd_flags = CF_CLIENT | CF_CLIENT_FROM_SERVER;
+ cmd_client.auto_flags = CF_SERVER_FROM_CLIENT;
+ cmd_client.auto_function = CL_ForwardToServer_f; // FIXME: Move this to the client.
+ cmd_client.userdefined = &cmd_userdefined_all;
+ // dedicated server console can only see server cvars, there is no client
+ cmd_server.cvars = &cvars_all;
+ cmd_server.cvars_flagsmask = CF_SERVER;
+ cmd_server.cmd_flags = CF_SERVER;
+ cmd_server.auto_flags = 0;
+ cmd_server.auto_function = NULL;
+ cmd_server.userdefined = &cmd_userdefined_all;
// server commands received from clients have no reason to access cvars, cvar expansion seems perilous.
cmd_serverfromclient.cvars = &cvars_null;
cmd_serverfromclient.cvars_flagsmask = 0;
qbool auto_add = false;
int i;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < 3; i++)
{
cmd = cmd_iter_all[i].cmd;
if ((flags & cmd->cmd_flags) || (flags & cmd->auto_flags))
// command interpreter for client commands injected by CSQC, MQC or client engine code
// uses cmddefs_all
-extern cmd_state_t cmd_local;
+extern cmd_state_t cmd_client;
// command interpreter for server commands injected by MQC, SVQC, menu engine code or server engine code
// uses cmddefs_all
-extern cmd_state_t cmd_local;
+extern cmd_state_t cmd_server;
// command interpreter for server commands received over network from clients
// uses cmddefs_null
extern cmd_state_t cmd_serverfromclient;
int crcflags = csqc_progcrc.flags;
csqc_progcrc.flags &= ~CF_READONLY;
csqc_progsize.flags &= ~CF_READONLY;
- Cmd_ExecuteString(&cmd_local, msg, src_local, true);
+ Cmd_ExecuteString(&cmd_client, msg, src_local, true);
csqc_progcrc.flags = csqc_progsize.flags = crcflags;
return;
}
l = sizeof(buf) - 1;
strlcpy(buf, p, l + 1); // strlcpy needs a + 1 as it includes the newline!
- Cmd_ExecuteString(&cmd_local, buf, src_local, true);
+ Cmd_ExecuteString(&cmd_client, buf, src_local, true);
p += l;
if(*p == '\n')
else
break; // end of string or overflow
}
- Cmd_ExecuteString(&cmd_local, "curl --clear_autodownload", src_local, true); // don't inhibit CSQC loading
+ Cmd_ExecuteString(&cmd_client, "curl --clear_autodownload", src_local, true); // don't inhibit CSQC loading
return;
}
if(!cl.csqc_loaded)
{
- Cbuf_AddText(&cmd_local, msg);
+ Cbuf_AddText(&cmd_client, msg);
return;
}
CSQC_BEGIN
prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
}
else
- Cbuf_AddText(&cmd_local, msg);
+ Cbuf_AddText(&cmd_client, msg);
CSQC_END
}
return;
}
- PRVM_Prog_Init(prog, &cmd_local);
+ PRVM_Prog_Init(prog, &cmd_client);
// allocate the mempools
prog->progs_mempool = Mem_AllocPool(csqc_progname.string, 0, NULL);
void CL_VM_ShutDown (void)
{
prvm_prog_t *prog = CLVM_prog;
- Cmd_ClearCSQCCommands(&cmd_local);
+ Cmd_ClearCSQCCommands(&cmd_client);
//Cvar_SetValueQuick(&csqc_progcrc, -1);
//Cvar_SetValueQuick(&csqc_progsize, -1);
if(!cl.csqc_loaded)
}
// check for overlap with a command
- if (Cmd_Exists(&cmd_local, variable->name) || Cmd_Exists(&cmd_local, variable->name))
+ if (Cmd_Exists(&cmd_client, variable->name) || Cmd_Exists(&cmd_server, variable->name))
{
Con_Printf("Cvar_RegisterVariable: %s is a command\n", variable->name);
return;
}
// check for overlap with a command
- if (Cmd_Exists(&cmd_local, name) || Cmd_Exists(&cmd_local, name))
+ if (Cmd_Exists(&cmd_client, name) || Cmd_Exists(&cmd_server, name))
{
Con_Printf("Cvar_Get: %s is a command\n", name);
return NULL;
if (cls.demoplayback)
{
- CL_Disconnect_f(&cmd_local);
+ CL_Disconnect_f(&cmd_client);
cls.demonum = 0;
}
// unload all sounds so they will be reloaded from the new files as needed
- S_UnloadAllSounds_f(&cmd_local);
+ S_UnloadAllSounds_f(&cmd_client);
// restart the video subsystem after the config is executed
- Cbuf_InsertText(&cmd_local, "\nloadconfig\nvid_restart\n\n");
+ Cbuf_InsertText(&cmd_client, "\nloadconfig\nvid_restart\n\n");
return true;
}
r_texture_numcubemaps = 0;
//r_texture_fogintensity = NULL;
memset(&r_fb, 0, sizeof(r_fb));
- R_GLSL_Restart_f(&cmd_local);
+ R_GLSL_Restart_f(&cmd_client);
r_glsl_permutation = NULL;
memset(r_glsl_permutationhash, 0, sizeof(r_glsl_permutationhash));
rsurface.entity = NULL; // used only by R_GetCurrentTexture and RSurf_ActiveModelEntity
if(R_CompileShader_CheckStaticParms())
- R_GLSL_Restart_f(&cmd_local);
+ R_GLSL_Restart_f(&cmd_client);
if (!r_drawentities.integer)
r_refdef.scene.numentities = 0;
Cmd_RestoreInitState();
#ifdef CONFIG_MENU
// prepend a menu restart command to execute after the config
- Cbuf_InsertText(&cmd_local, "\nmenu_restart\n");
+ Cbuf_InsertText(&cmd_client, "\nmenu_restart\n");
#endif
// reset cvars to their defaults, and then exec startup scripts again
- Host_AddConfigText(&cmd_local);
+ Host_AddConfigText(&cmd_client);
}
//============================================================================
while ((line = Sys_ConsoleInput()))
{
if (cls.state == ca_dedicated)
- Cbuf_AddText(&cmd_local, line);
+ Cbuf_AddText(&cmd_server, line);
else
- Cbuf_AddText(&cmd_local, line);
+ Cbuf_AddText(&cmd_client, line);
}
}
int i;
const char* os;
char vabuf[1024];
- cmd_state_t *cmd = &cmd_local;
+ cmd_state_t *cmd = &cmd_client;
host.hook.ConnectLocal = NULL;
host.hook.Disconnect = NULL;
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(&cmd_local, va(vabuf, sizeof(vabuf), "timedemo %s\n", sys.argv[i + 1]));
- Cbuf_Execute((&cmd_local)->cbuf);
+ Cbuf_AddText(&cmd_client, va(vabuf, sizeof(vabuf), "timedemo %s\n", sys.argv[i + 1]));
+ Cbuf_Execute((&cmd_client)->cbuf);
}
// check for special demo mode
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(&cmd_local, va(vabuf, sizeof(vabuf), "playdemo %s\n", sys.argv[i + 1]));
- Cbuf_Execute((&cmd_local)->cbuf);
+ Cbuf_AddText(&cmd_client, va(vabuf, sizeof(vabuf), "playdemo %s\n", sys.argv[i + 1]));
+ Cbuf_Execute((&cmd_client)->cbuf);
}
#ifdef CONFIG_VIDEO_CAPTURE
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(&cmd_local, va(vabuf, sizeof(vabuf), "playdemo %s\ncl_capturevideo 1\n", sys.argv[i + 1]));
- Cbuf_Execute((&cmd_local)->cbuf);
+ Cbuf_AddText(&cmd_client, va(vabuf, sizeof(vabuf), "playdemo %s\ncl_capturevideo 1\n", sys.argv[i + 1]));
+ Cbuf_Execute((&cmd_client)->cbuf);
}
#endif
if (cls.state == ca_dedicated || Sys_CheckParm("-listen"))
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(&cmd_local, "startmap_dm\n");
- Cbuf_Execute((&cmd_local)->cbuf);
+ Cbuf_AddText(&cmd_client, "startmap_dm\n");
+ Cbuf_Execute((&cmd_client)->cbuf);
}
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
#ifdef CONFIG_MENU
- Cbuf_AddText(&cmd_local, "togglemenu 1\n");
+ Cbuf_AddText(&cmd_client, "togglemenu 1\n");
#endif
- Cbuf_Execute((&cmd_local)->cbuf);
+ Cbuf_Execute((&cmd_client)->cbuf);
}
Con_DPrint("========Initialized=========\n");
void
Key_Event (int key, int ascii, qbool down)
{
- cmd_state_t *cmd = &cmd_local;
+ cmd_state_t *cmd = &cmd_client;
const char *bind;
qbool q;
keydest_t keydest = key_dest;
{
if(down)
{
- Con_ToggleConsole_f(&cmd_local);
+ Con_ToggleConsole_f(&cmd_client);
tbl_keydest[key] = key_void; // esc release should go nowhere (especially not to key_menu or key_game)
}
return;
#endif
}
else
- Con_ToggleConsole_f(&cmd_local);
+ Con_ToggleConsole_f(&cmd_client);
}
break;
// (special exemption for german keyboard layouts)
if (con_closeontoggleconsole.integer && bind && !strncmp(bind, "toggleconsole", strlen("toggleconsole")) && (key_consoleactive & KEY_CONSOLEACTIVE_USER) && (con_closeontoggleconsole.integer >= ((ascii != STRING_COLOR_TAG) ? 2 : 3) || key_linepos == 1))
{
- Con_ToggleConsole_f(&cmd_local);
+ Con_ToggleConsole_f(&cmd_client);
return;
}
if(numdownloads_fail == 0)
{
Con_DPrintf("cURL downloads occurred, executing %s\n", command_when_done);
- Cbuf_AddText(&cmd_local, "\n");
- Cbuf_AddText(&cmd_local, command_when_done);
- Cbuf_AddText(&cmd_local, "\n");
+ Cbuf_AddText(&cmd_client, "\n");
+ Cbuf_AddText(&cmd_client, command_when_done);
+ Cbuf_AddText(&cmd_client, "\n");
}
else
{
Con_DPrintf("cURL downloads FAILED, executing %s\n", command_when_error);
- Cbuf_AddText(&cmd_local, "\n");
- Cbuf_AddText(&cmd_local, command_when_error);
- Cbuf_AddText(&cmd_local, "\n");
+ Cbuf_AddText(&cmd_client, "\n");
+ Cbuf_AddText(&cmd_client, command_when_error);
+ Cbuf_AddText(&cmd_client, "\n");
}
Curl_Clear_forthismap();
}
Cvar_RegisterVariable (&cl_curl_useragent);
Cvar_RegisterVariable (&cl_curl_useragent_append);
Cmd_AddCommand(CF_CLIENT | CF_CLIENT_FROM_SERVER, "curl", Curl_Curl_f, "download data from an URL and add to search path");
- //Cmd_AddCommand(&cmd_local, "curlcat", Curl_CurlCat_f, "display data from an URL (debugging command)");
+ //Cmd_AddCommand(&cmd_client, "curlcat", Curl_CurlCat_f, "display data from an URL (debugging command)");
}
/*
{
if(mode == 0)
return; // the menu is off, and we want it off
- M_Menu_Main_f (&cmd_local);
+ M_Menu_Main_f (&cmd_client);
}
else
{
void M_KeyEvent (int key, int ascii, qbool downevent)
{
- cmd_state_t *cmd = &cmd_local;
+ cmd_state_t *cmd = &cmd_client;
if (!downevent)
return;
switch (m_state)
static void MP_Init (void)
{
prvm_prog_t *prog = MVM_prog;
- PRVM_Prog_Init(prog, &cmd_local);
+ PRVM_Prog_Init(prog, &cmd_client);
prog->edictprivate_size = 0; // no private struct used
prog->name = "menu";
if(l)
{
client_t *host_client_save = host_client;
- Cmd_ExecuteString(&cmd_local, s, src_local, true);
+ Cmd_ExecuteString(&cmd_server, s, src_local, true);
host_client = host_client_save;
// in case it is a command that changes host_client (like restart)
}
struct fssearch_s *opensearches[PRVM_MAX_OPENSEARCHES];
const char * opensearches_origin[PRVM_MAX_OPENSEARCHES];
struct skeleton_s *skeletons[MAX_EDICTS];
- struct cmd_state_s *console_cmd; // points to the relevant console command interpreter for this vm (&cmd_local), also used to access cvars
+ struct cmd_state_s *console_cmd; // points to the relevant console command interpreter for this vm (&cmd_client or &cmd_server), also used to access cvars
// buffer for storing all tempstrings created during one invocation of ExecuteProgram
sizebuf_t tempstringsbuf;
char string[VM_STRINGTEMP_LENGTH];
VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_client);
VM_VarString(prog, 0, string, sizeof(string));
- Cbuf_AddText(&cmd_local, string);
+ Cbuf_AddText(&cmd_client, string);
}
/*
char string[VM_STRINGTEMP_LENGTH];
VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_server);
VM_VarString(prog, 0, string, sizeof(string));
- Cbuf_AddText(&cmd_local, string);
+ Cbuf_AddText(&cmd_server, string);
}
static qbool PRVM_Cvar_ReadOk(prvm_prog_t *prog, const char *string)
*/
void VM_coredump(prvm_prog_t *prog)
{
- cmd_state_t *cmd = !host_isclient.integer ? &cmd_local : &cmd_local;
+ cmd_state_t *cmd = !host_isclient.integer ? &cmd_server : &cmd_client;
VM_SAFEPARMCOUNT(0,VM_coredump);
Cbuf_AddText(cmd, "prvm_edicts ");
return;
svs.changelevel_issued = true;
- Cbuf_AddText(&cmd_local, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
+ Cbuf_AddText(&cmd_server, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
}
/*
return;
// check for overlap with a command
- if (Cmd_Exists(&cmd_local, name) || Cmd_Exists(&cmd_local, name))
+ if (Cmd_Exists(&cmd_client, name) || Cmd_Exists(&cmd_server, name))
{
VM_Warning(prog, "VM_registercvar: %s is a command\n", name);
return;
}
if(R_CompileShader_CheckStaticParms())
- R_GLSL_Restart_f(&cmd_local);
+ R_GLSL_Restart_f(&cmd_client);
}
qbool R_Shadow_ShadowMappingEnabled(void)
if (r_editlights_sprcubemapnoshadowlight) { R_SkinFrame_MarkUsed(r_editlights_sprcubemapnoshadowlight); }
if (r_editlights_sprselection) { R_SkinFrame_MarkUsed(r_editlights_sprselection); }
if (strncmp(cl.worldname, r_shadow_mapname, sizeof(r_shadow_mapname)))
- R_Shadow_EditLights_Reload_f(&cmd_local);
+ R_Shadow_EditLights_Reload_f(&cmd_client);
}
void R_Shadow_Init(void)
if (!light)
continue;
R_Shadow_SelectLight(light);
- R_Shadow_EditLights_Edit_f(&cmd_local);
+ R_Shadow_EditLights_Edit_f(&cmd_client);
}
// return to old selected (to not mess editing once selection is locked)
R_Shadow_SelectLight(oldselected);
Cmd_AddCommand(CF_SHARED, "maxplayers", SV_MaxPlayers_f, "sets limit on how many players (or bots) may be connected to the server at once");
host.hook.SV_SendCvar = SV_SendCvar_f;
- // commands that do not have automatic forwarding from cmd_local, these are internal details of the network protocol and not of interest to users (if they know what they are doing they can still use a generic "cmd prespawn" or similar)
+ // commands that do not have automatic forwarding from cmd_client, these are internal details of the network protocol and not of interest to users (if they know what they are doing they can still use a generic "cmd prespawn" or similar)
Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "prespawn", SV_PreSpawn_f, "internal use - signon 1 (client acknowledges that server information has been received)");
Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "spawn", SV_Spawn_f, "internal use - signon 2 (client has sent player information, and is asking server to send scoreboard rankings)");
Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "begin", SV_Begin_f, "internal use - signon 3 (client asks server to start sending entities, and will go to signon 4 (playing) when the first entity update is received)");
static void SV_VM_Setup(void)
{
prvm_prog_t *prog = SVVM_prog;
- PRVM_Prog_Init(prog, &cmd_local);
+ PRVM_Prog_Init(prog, &cmd_server);
// allocate the mempools
// TODO: move the magic numbers/constants into #defines [9/13/2006 Black]
static void VM_SV_registercommand (prvm_prog_t *prog)
{
VM_SAFEPARMCOUNT(1, VM_SV_registercmd);
- if(!Cmd_Exists(&cmd_local, PRVM_G_STRING(OFS_PARM0)))
+ if(!Cmd_Exists(&cmd_server, PRVM_G_STRING(OFS_PARM0)))
Cmd_AddCommand(CF_SERVER, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
}
void Sys_Quit (int returnvalue)
{
// Unlock mutexes because the quit command may jump directly here, causing a deadlock
- if ((&cmd_local)->cbuf->lock)
- Cbuf_Unlock((&cmd_local)->cbuf);
- if ((&cmd_local)->cbuf->lock)
- Cbuf_Unlock((&cmd_local)->cbuf);
+ if ((&cmd_client)->cbuf->lock)
+ Cbuf_Unlock((&cmd_client)->cbuf);
+ if ((&cmd_server)->cbuf->lock)
+ Cbuf_Unlock((&cmd_server)->cbuf);
SV_UnlockThreadMutex();
TaskQueue_Frame(true);
if (!VID_ShowingKeyboard())
{
// user entered a command, close the console now
- Con_ToggleConsole_f(&cmd_local);
+ Con_ToggleConsole_f(&cmd_client);
}
VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, NULL, &buttons[15], (keynum_t)0, NULL, 0, 0, 0, true);
VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, move, &buttons[0], K_MOUSE4, NULL, 0, 0, 0, true);
// so, let's better queue it for next frame
if(!sdl_needs_restart)
{
- Cbuf_AddText(&cmd_local, "\nr_restart\n");
+ Cbuf_AddText(&cmd_client, "\nr_restart\n");
sdl_needs_restart = true;
}
#endif