}
dpsnprintf (str, sizeof(str), "playdemo %s\n", cls.demos[cls.demonum]);
- Cbuf_InsertText(cmd_client, str);
+ Cbuf_InsertText(cmd_local, str);
cls.demonum++;
}
CL_ParseServerMessage();
if (cls.signon != SIGNONS)
- Cbuf_Execute((cmd_client)->cbuf); // immediately execute svc_stufftext if in the demo before connect!
+ Cbuf_Execute((cmd_local)->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_client, va(vabuf, sizeof(vabuf), "timedemo %s\n", cls.demoname));
+ Cbuf_AddText(cmd_local, 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_client);
+ CL_Stop_f(cmd_local);
// 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_client); i += 2)
- InfoString_SetValue(cls.connect_userinfo, sizeof(cls.connect_userinfo), Cmd_Argv(cmd_client, i), Cmd_Argv(cmd_client, i+1));
+ 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));
}
else if(firstarg < -1)
{
World_Start(&cl.world);
// load or reload .loc file for team chat messages
- CL_Locs_Reload_f(cmd_client);
+ CL_Locs_Reload_f(cmd_local);
// make sure we send enough keepalives
CL_KeepaliveMessage(false);
return;
// abort existing upload if in progress
- QW_CL_StopUpload_f(cmd_client);
+ QW_CL_StopUpload_f(cmd_local);
Con_DPrintf("Starting upload of %d bytes...\n", size);
cls.qw_uploadsize = size;
cls.qw_uploadpos = 0;
- QW_CL_NextUpload_f(cmd_client);
+ QW_CL_NextUpload_f(cmd_local);
}
#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_client, "\ncl_begindownloads\n");
+ Cbuf_AddText(cmd_local, "\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_client);
+ CL_Stop_f(cmd_local);
}
// start a new demo file
break;
case qw_svc_sellscreen:
- Cmd_ExecuteString(cmd_client, "help", src_local, true);
+ Cmd_ExecuteString(cmd_local, "help", src_local, true);
break;
case qw_svc_smallkick:
break;
case svc_sellscreen:
- Cmd_ExecuteString(cmd_client, "help", src_local, true);
+ Cmd_ExecuteString(cmd_local, "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_client);
+ QW_CL_StopUpload_f(cmd_local);
}
void CL_Parse_Init(void)
static void VM_CL_registercmd (prvm_prog_t *prog)
{
VM_SAFEPARMCOUNT(1, VM_CL_registercmd);
- if(!Cmd_Exists(cmd_client, PRVM_G_STRING(OFS_PARM0)))
+ if(!Cmd_Exists(cmd_local, PRVM_G_STRING(OFS_PARM0)))
Cmd_AddCommand(CF_CLIENT, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
}
VM_fabs, // #43 float(float f) fabs (QUAKE)
NULL, // #44 vector(entity e, float speed) aim (QUAKE)
VM_cvar, // #45 float(string s) cvar (QUAKE)
-VM_localcmd_client, // #46 void(string s) localcmd (QUAKE)
+VM_localcmd_local, // #46 void(string s) localcmd (QUAKE)
VM_nextent, // #47 entity(entity e) nextent (QUAKE)
VM_CL_particle, // #48 void(vector o, vector d, float color, float count) particle (QUAKE)
VM_changeyaw, // #49 void() ChangeYaw (QUAKE)
#include "quakedef.h"
#include "thread.h"
-cmd_state_t *cmd_client;
-cmd_state_t *cmd_server;
+cmd_state_t *cmd_local;
cmd_state_t *cmd_serverfromclient;
cmd_userdefined_t cmd_userdefined_all;
char *line;
while ((line = Sys_ConsoleInput()))
- {
- if (cls.state == ca_dedicated)
- Cbuf_AddText(cmd_server, line);
- else
- Cbuf_AddText(cmd_client, line);
- }
+ Cbuf_AddText(cmd_local, line);
}
void Cbuf_Frame(cmd_buf_t *cbuf)
cbuf->free.prev = cbuf->free.next = &(cbuf->free);
// FIXME: Get rid of cmd_iter_all eventually. This is just a hack to reduce the amount of work to make the interpreters dynamic.
- cmd_iter_all = (cmd_iter_t *)Mem_Alloc(tempmempool, sizeof(cmd_iter_t) * 4);
+ cmd_iter_all = (cmd_iter_t *)Mem_Alloc(tempmempool, sizeof(cmd_iter_t) * 3);
- // client console can see server cvars because the user may start a server
- cmd_iter_all[0].cmd = cmd_client = Cmd_AddInterpreter(cbuf, &cvars_all, CF_CLIENT | CF_SERVER, CF_CLIENT | CF_CLIENT_FROM_SERVER, &cmd_userdefined_all);
- cmd_client->Handle = Cmd_CL_Callback;
- cmd_client->NotFound = NULL;
-
- // dedicated server console can only see server cvars, there is no client
- cmd_iter_all[1].cmd = cmd_server = Cmd_AddInterpreter(cbuf, &cvars_all, CF_SERVER, CF_SERVER, &cmd_userdefined_all);
- cmd_server->Handle = Cmd_SV_Callback;
- cmd_server->NotFound = NULL;
+ // local console
+ cmd_iter_all[0].cmd = cmd_local = Cmd_AddInterpreter(cbuf, &cvars_all, CF_CLIENT | CF_SERVER, CF_CLIENT | CF_CLIENT_FROM_SERVER | CF_SERVER_FROM_CLIENT, &cmd_userdefined_all);
+ cmd_local->Handle = Cmd_CL_Callback;
+ cmd_local->NotFound = NULL;
// server commands received from clients have no reason to access cvars, cvar expansion seems perilous.
- cmd_iter_all[2].cmd = cmd_serverfromclient = Cmd_AddInterpreter(cbuf, &cvars_null, 0, CF_SERVER_FROM_CLIENT | CF_USERINFO, &cmd_userdefined_null);
+ cmd_iter_all[1].cmd = cmd_serverfromclient = Cmd_AddInterpreter(cbuf, &cvars_null, 0, CF_SERVER_FROM_CLIENT | CF_USERINFO, &cmd_userdefined_null);
cmd_serverfromclient->Handle = Cmd_SV_Callback;
cmd_serverfromclient->NotFound = Cmd_SV_NotFound;
- cmd_iter_all[3].cmd = NULL;
+ cmd_iter_all[2].cmd = NULL;
//
// register our commands
//
cmd_state_t *cmd;
int i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < 2; i++)
{
cmd = cmd_iter_all[i].cmd;
if (flags & cmd->cmd_flags)
extern cvar_t sv_cheats;
+/*
+ * Cloudwalk FIXME: This idea sounded great in my head but...
+ * How do we handle commands that can be received by the client,
+ * but which the server can also execute locally?
+ *
+ * If we create a callback where the engine will forward to server
+ * but try to execute the command locally if it's dedicated,
+ * we're back to intermixing client and server code which I'm
+ * trying to avoid. There's no other way I can think of to
+ * implement that behavior that doesn't involve an #ifdef, or
+ * making a mess of hooks.
+ */
qbool Cmd_Callback(cmd_state_t *cmd, cmd_function_t *func, const char *text, cmd_source_t src)
{
if (func->function)
qbool Cmd_CL_Callback(cmd_state_t *cmd, cmd_function_t *func, const char *text, cmd_source_t src)
{
- if(func->qcfunc && (func->flags & CF_CLIENT))
- return CL_VM_ConsoleCommand(text);
- else if ((func->flags & CF_SERVER_FROM_CLIENT) && src == src_local)
+ // TODO: Assign these functions to QC commands directly?
+ if(func->qcfunc)
{
- CL_ForwardToServer_f(cmd);
- return true;
+ if(((func->flags & CF_CLIENT) && CL_VM_ConsoleCommand(text)) ||
+ ((func->flags & CF_SERVER) && SV_VM_ConsoleCommand(text)))
+ return true;
}
- else
- return Cmd_Callback(cmd, func, text, src);
+ if (func->flags & CF_SERVER_FROM_CLIENT)
+ {
+ if(host_isclient.integer)
+ {
+ CL_ForwardToServer_f(cmd);
+ return true;
+ }
+ else if(!(func->flags & CF_SERVER))
+ {
+ Con_Printf("Cannot execute client commands from a dedicated server console.\n");
+ return true;
+ }
+ }
+ return Cmd_Callback(cmd, func, text, src);
}
qbool Cmd_SV_Callback(cmd_state_t *cmd, cmd_function_t *func, const char *text, cmd_source_t src)
func->function(cmd);
return true;
}
- else
- return Cmd_Callback(cmd, func, text, src);
+ return false;
}
qbool Cmd_SV_NotFound(cmd_state_t *cmd, cmd_function_t *func, const char *text, cmd_source_t src)
extern cmd_userdefined_t cmd_userdefined_all; // aliases and csqc functions
extern cmd_userdefined_t cmd_userdefined_null; // intentionally empty
-// command interpreter for client commands injected by CSQC, MQC or client engine code
+// command interpreter for local commands injected by SVQC, CSQC, MQC, server or client engine code
// uses cmddefs_all
-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_server;
+extern cmd_state_t *cmd_local;
// 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_client, msg, src_local, true);
+ Cmd_ExecuteString(cmd_local, 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_client, buf, src_local, true);
+ Cmd_ExecuteString(cmd_local, buf, src_local, true);
p += l;
if(*p == '\n')
else
break; // end of string or overflow
}
- Cmd_ExecuteString(cmd_client, "curl --clear_autodownload", src_local, true); // don't inhibit CSQC loading
+ Cmd_ExecuteString(cmd_local, "curl --clear_autodownload", src_local, true); // don't inhibit CSQC loading
return;
}
if(!cl.csqc_loaded)
{
- Cbuf_AddText(cmd_client, msg);
+ Cbuf_AddText(cmd_local, msg);
return;
}
CSQC_BEGIN
prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
}
else
- Cbuf_AddText(cmd_client, msg);
+ Cbuf_AddText(cmd_local, msg);
CSQC_END
}
return;
}
- PRVM_Prog_Init(prog, cmd_client);
+ PRVM_Prog_Init(prog, cmd_local);
// 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_client);
+ Cmd_ClearCSQCCommands(cmd_local);
//Cvar_SetValueQuick(&csqc_progcrc, -1);
//Cvar_SetValueQuick(&csqc_progsize, -1);
if(!cl.csqc_loaded)
}
// check for overlap with a command
- if (Cmd_Exists(cmd_client, variable->name) || Cmd_Exists(cmd_server, variable->name))
+ if (Cmd_Exists(cmd_local, variable->name) || Cmd_Exists(cmd_local, variable->name))
{
Con_Printf("Cvar_RegisterVariable: %s is a command\n", variable->name);
return;
}
// check for overlap with a command
- if (Cmd_Exists(cmd_client, name) || Cmd_Exists(cmd_server, name))
+ if (Cmd_Exists(cmd_local, name) || Cmd_Exists(cmd_local, name))
{
Con_Printf("Cvar_Get: %s is a command\n", name);
return NULL;
if (cls.demoplayback)
{
- CL_Disconnect_f(cmd_client);
+ CL_Disconnect_f(cmd_local);
cls.demonum = 0;
}
// unload all sounds so they will be reloaded from the new files as needed
- S_UnloadAllSounds_f(cmd_client);
+ S_UnloadAllSounds_f(cmd_local);
// restart the video subsystem after the config is executed
- Cbuf_InsertText(cmd_client, "\nloadconfig\nvid_restart\n\n");
+ Cbuf_InsertText(cmd_local, "\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_client);
+ R_GLSL_Restart_f(cmd_local);
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_client);
+ R_GLSL_Restart_f(cmd_local);
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_client, "\nmenu_restart\n");
+ Cbuf_InsertText(cmd_local, "\nmenu_restart\n");
#endif
// reset cvars to their defaults, and then exec startup scripts again
- Host_AddConfigText(cmd_client);
+ Host_AddConfigText(cmd_local);
}
//============================================================================
// here comes the not so critical stuff
- Host_AddConfigText(cmd_client);
+ Host_AddConfigText(cmd_local);
// if quake.rc is missing, use default
if (!FS_FileExists("quake.rc"))
{
- Cbuf_AddText(cmd_client, "exec default.cfg\nexec " CONFIGFILENAME "\nexec autoexec.cfg\n");
- Cbuf_Execute(cmd_client->cbuf);
+ Cbuf_AddText(cmd_local, "exec default.cfg\nexec " CONFIGFILENAME "\nexec autoexec.cfg\n");
+ Cbuf_Execute(cmd_local->cbuf);
}
host.state = host_active;
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(cmd_client, va(vabuf, sizeof(vabuf), "timedemo %s\n", sys.argv[i + 1]));
- Cbuf_Execute(cmd_client->cbuf);
+ Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "timedemo %s\n", sys.argv[i + 1]));
+ Cbuf_Execute(cmd_local->cbuf);
}
// check for special demo mode
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(cmd_client, va(vabuf, sizeof(vabuf), "playdemo %s\n", sys.argv[i + 1]));
- Cbuf_Execute(cmd_client->cbuf);
+ Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "playdemo %s\n", sys.argv[i + 1]));
+ Cbuf_Execute(cmd_local->cbuf);
}
#ifdef CONFIG_VIDEO_CAPTURE
if (i && i + 1 < sys.argc)
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(cmd_client, va(vabuf, sizeof(vabuf), "playdemo %s\ncl_capturevideo 1\n", sys.argv[i + 1]));
- Cbuf_Execute((cmd_client)->cbuf);
+ Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "playdemo %s\ncl_capturevideo 1\n", sys.argv[i + 1]));
+ Cbuf_Execute((cmd_local)->cbuf);
}
#endif
if (cls.state == ca_dedicated || Sys_CheckParm("-listen"))
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
- Cbuf_AddText(cmd_client, "startmap_dm\n");
- Cbuf_Execute(cmd_client->cbuf);
+ Cbuf_AddText(cmd_local, "startmap_dm\n");
+ Cbuf_Execute(cmd_local->cbuf);
}
if (!sv.active && !cls.demoplayback && !cls.connect_trying)
{
#ifdef CONFIG_MENU
- Cbuf_AddText(cmd_client, "togglemenu 1\n");
+ Cbuf_AddText(cmd_local, "togglemenu 1\n");
#endif
- Cbuf_Execute(cmd_client->cbuf);
+ Cbuf_Execute(cmd_local->cbuf);
}
Con_DPrint("========Initialized=========\n");
void
Key_Event (int key, int ascii, qbool down)
{
- cmd_state_t *cmd = cmd_client;
+ cmd_state_t *cmd = cmd_local;
const char *bind;
qbool q;
keydest_t keydest = key_dest;
{
if(down)
{
- Con_ToggleConsole_f(cmd_client);
+ Con_ToggleConsole_f(cmd_local);
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_client);
+ Con_ToggleConsole_f(cmd_local);
}
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_client);
+ Con_ToggleConsole_f(cmd_local);
return;
}
if(numdownloads_fail == 0)
{
Con_DPrintf("cURL downloads occurred, executing %s\n", command_when_done);
- Cbuf_AddText(cmd_client, "\n");
- Cbuf_AddText(cmd_client, command_when_done);
- Cbuf_AddText(cmd_client, "\n");
+ Cbuf_AddText(cmd_local, "\n");
+ Cbuf_AddText(cmd_local, command_when_done);
+ Cbuf_AddText(cmd_local, "\n");
}
else
{
Con_DPrintf("cURL downloads FAILED, executing %s\n", command_when_error);
- Cbuf_AddText(cmd_client, "\n");
- Cbuf_AddText(cmd_client, command_when_error);
- Cbuf_AddText(cmd_client, "\n");
+ Cbuf_AddText(cmd_local, "\n");
+ Cbuf_AddText(cmd_local, command_when_error);
+ Cbuf_AddText(cmd_local, "\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_client, "curlcat", Curl_CurlCat_f, "display data from an URL (debugging command)");
+ //Cmd_AddCommand(cmd_local, "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_client);
+ M_Menu_Main_f (cmd_local);
}
else
{
void M_KeyEvent (int key, int ascii, qbool downevent)
{
- cmd_state_t *cmd = cmd_client;
+ cmd_state_t *cmd = cmd_local;
if (!downevent)
return;
switch (m_state)
static void MP_Init (void)
{
prvm_prog_t *prog = MVM_prog;
- PRVM_Prog_Init(prog, cmd_client);
+ PRVM_Prog_Init(prog, cmd_local);
prog->edictprivate_size = 0; // no private struct used
prog->name = "menu";
static void VM_M_registercommand(prvm_prog_t *prog)
{
VM_SAFEPARMCOUNT(1, VM_M_registercommand);
- if(!Cmd_Exists(cmd_client, PRVM_G_STRING(OFS_PARM0)))
+ if(!Cmd_Exists(cmd_local, PRVM_G_STRING(OFS_PARM0)))
Cmd_AddCommand(CF_CLIENT, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
}
VM_vectoyaw, // #10
VM_vectoangles, // #11
VM_random, // #12
-VM_localcmd_client, // #13
+VM_localcmd_local, // #13
VM_cvar, // #14
VM_cvar_set, // #15
VM_dprint, // #16
if(l)
{
client_t *host_client_save = host_client;
- Cmd_ExecuteString(cmd_server, s, src_local, true);
+ Cmd_ExecuteString(cmd_local, 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_client or &cmd_server), also used to access cvars
+ struct cmd_state_s *console_cmd; // points to the relevant console command interpreter for this vm (cmd_local or &cmd_server), also used to access cvars
// buffer for storing all tempstrings created during one invocation of ExecuteProgram
sizebuf_t tempstringsbuf;
/*
=================
-VM_localcmd_client
+VM_localcmd_local
Sends text over to the client's execution buffer
cmd (string, ...)
=================
*/
-void VM_localcmd_client(prvm_prog_t *prog)
+void VM_localcmd_local(prvm_prog_t *prog)
{
char string[VM_STRINGTEMP_LENGTH];
- VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_client);
+ VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_local);
VM_VarString(prog, 0, string, sizeof(string));
- Cbuf_AddText(cmd_client, string);
+ Cbuf_AddText(cmd_local, string);
}
/*
char string[VM_STRINGTEMP_LENGTH];
VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_server);
VM_VarString(prog, 0, string, sizeof(string));
- Cbuf_AddText(cmd_server, string);
+ Cbuf_AddText(cmd_local, 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_server : cmd_client;
VM_SAFEPARMCOUNT(0,VM_coredump);
- Cbuf_AddText(cmd, "prvm_edicts ");
- Cbuf_AddText(cmd, prog->name);
- Cbuf_AddText(cmd, "\n");
+ Cbuf_AddText(cmd_local, "prvm_edicts ");
+ Cbuf_AddText(cmd_local, prog->name);
+ Cbuf_AddText(cmd_local, "\n");
}
/*
return;
svs.changelevel_issued = true;
- Cbuf_AddText(cmd_server, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
+ Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
}
/*
return;
// check for overlap with a command
- if (Cmd_Exists(cmd_client, name) || Cmd_Exists(cmd_server, name))
+ if (Cmd_Exists(cmd_local, name) || Cmd_Exists(cmd_local, name))
{
VM_Warning(prog, "VM_registercvar: %s is a command\n", name);
return;
void VM_random (prvm_prog_t *prog);
void VM_localsound(prvm_prog_t *prog);
void VM_break (prvm_prog_t *prog);
-void VM_localcmd_client(prvm_prog_t *prog);
+void VM_localcmd_local(prvm_prog_t *prog);
void VM_localcmd_server(prvm_prog_t *prog);
void VM_cvar (prvm_prog_t *prog);
void VM_cvar_string(prvm_prog_t *prog);
}
if(R_CompileShader_CheckStaticParms())
- R_GLSL_Restart_f(cmd_client);
+ R_GLSL_Restart_f(cmd_local);
}
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_client);
+ R_Shadow_EditLights_Reload_f(cmd_local);
}
void R_Shadow_Init(void)
if (!light)
continue;
R_Shadow_SelectLight(light);
- R_Shadow_EditLights_Edit_f(cmd_client);
+ R_Shadow_EditLights_Edit_f(cmd_local);
}
// 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_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)
+ // 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)
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_server);
+ PRVM_Prog_Init(prog, cmd_local);
// 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_server, PRVM_G_STRING(OFS_PARM0)))
+ if(!Cmd_Exists(cmd_local, 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_client)->cbuf->lock)
- Cbuf_Unlock((cmd_client)->cbuf);
- if ((cmd_server)->cbuf->lock)
- Cbuf_Unlock((cmd_server)->cbuf);
+ if ((cmd_local)->cbuf->lock)
+ Cbuf_Unlock((cmd_local)->cbuf);
SV_UnlockThreadMutex();
TaskQueue_Frame(true);
if (!VID_ShowingKeyboard())
{
// user entered a command, close the console now
- Con_ToggleConsole_f(cmd_client);
+ Con_ToggleConsole_f(cmd_local);
}
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_client, "\nr_restart\n");
+ Cbuf_AddText(cmd_local, "\nr_restart\n");
sdl_needs_restart = true;
}
#endif