Beispiel #1
0
// if an unknown command with parameters was encountered when loading
// config.cfg, assume it's a cvar set and spawn a temp var
qbool Cvar_CreateTempVar (void)
{
	const char *name = Cmd_Argv(0);
	// FIXME, make sure it's a valid cvar name, return false if not
	Cvar_Get (name, Cmd_MakeArgs(1), CVAR_TEMP);
	return true;
}
Beispiel #2
0
qbool Cvar_Command (void)
{
	cvar_t *v;

	// check variables
	if (!(v = Cvar_Find (Cmd_Argv(0))))
		return false;

	if (Cmd_Argc() == 1) {
		if (cvar_viewhelp.value)
			Help_DescribeCvar (v);

		if (cvar_viewdefault.value) {
			char *spaces = CreateSpaces(strlen(v->name) + 2);

			Com_Printf ("%s : default value is \"%s\"\n", v->name, v->defaultvalue);

			Com_Printf ("%s current value is \"%s\"\n", spaces, v->string);

			if ((v->flags & CVAR_AUTO) && v->autoString) {
				Com_Printf ("%s auto    value is \"%s\"\n", spaces, v->autoString);
			}

			if (cvar_viewlatched.integer && v->latchedString) {
				Com_Printf ("%s latched value is \"%s\"\n", spaces, v->latchedString);
			}

		} else {
			Com_Printf ("\"%s\" is \"%s\"\n", v->name, v->string);

			if ((v->flags & CVAR_AUTO) && v->autoString) {
				Com_Printf ("auto: \"%s\"\n", v->autoString);
			}

			if (cvar_viewlatched.integer && v->latchedString) {
				Com_Printf ("latched: \"%s\"\n", v->latchedString);
			}
		}
	} else {
		// RestrictTriggers means that advanced (possibly cheaty) scripts are not allowed
		// So we will force the usage of user-created variables to go through the set command
		if ((v->flags & CVAR_USER_CREATED) && Rulesets_RestrictTriggers()) {
			Com_Printf ("Current ruleset requires \"set\" with user created variables\n");
			return true;
		}

		Cvar_Set (v, Cmd_MakeArgs(1));
	}

	return true;
}
Beispiel #3
0
/*
===============
Cmd_Alias_f

Creates a new command that executes a command string (possibly ; separated)
===============
*/
void Cmd_Alias_f (void)
{
	cmd_alias_t	*a;
	int			key;
	char		*name;

	if (Cmd_Argc() == 1)
	{
		Com_Printf ("alias <name> <command> : create or modify an alias\n");
		Com_Printf ("aliaslist : list all aliases\n");
		return;
	}

	name = Cmd_Argv(1);

	// see if there's already an alias by that name
	a = Cmd_FindAlias(name);

	if (a) {
		// reuse it
		Q_free (a->name);
		Q_free (a->value);
	}
	else {
		// allocate a new one
		a = Q_malloc (sizeof(cmd_alias_t));
		a->flags = 0;

		// link it in
		a->next = cmd_alias;
		cmd_alias = a;
		key = Com_HashKey(name);
		a->hash_next = cmd_alias_hash[key];
		cmd_alias_hash[key] = a;
	}

	a->name = Q_strdup(name);
	a->value = Q_strdup(Cmd_MakeArgs(2));	// copy the rest of the command line

#ifndef SERVERONLY
	if (cbuf_current == &cbuf_svc)
		a->flags |= ALIAS_STUFFED;
	else
		a->flags &= ALIAS_STUFFED;
#endif

	if (!Q_stricmp(Cmd_Argv(0), "aliasa"))
		a->flags |= ALIAS_ARCHIVE;

}
Beispiel #4
0
void Cvar_Set_Eval_f(void)
{
	if (Cmd_Argc() < 3) {
		Com_Printf("Usage:\n"
			"set_eval <variable> <expression>\n"
			"set_eval is similar to set_calc but supports richer expressions\n");
		return;
	}
	else {
		const char *expression;
		char *var_name;
		cvar_t *var;
		int errn;
		expr_val result;

		var_name = Cmd_Argv (1);
		var = Cvar_Find (var_name);

		if (!var)
			var = Cvar_Create (var_name, Cmd_Argv (1), 0);

		expression = Cmd_MakeArgs(2);

		result = Expr_Eval(expression, NULL, &errn);

		if (errn == EXPR_EVAL_SUCCESS) {
			switch (result.type) {
				case ET_INT:
					Cvar_SetValue(var, result.i_val);
					break;
				case ET_DBL:
					Cvar_SetValue(var, result.d_val);
					break;
				case ET_BOOL:
					Cvar_SetValue(var, result.b_val ? 1 : 0);
					break;
				case ET_STR:
					Cvar_Set(var, result.s_val);
					free(result.s_val);
					break;
			}
		}
		else {
			Com_Printf("Error in expression: %s\n", Parser_Error_Description(errn));
		}
	}
}
Beispiel #5
0
/*
===============
SVC_RemoteCommand

A client issued an rcon command.
Shift down the remaining args
Redirect all printfs
===============
*/
void SVC_RemoteCommand (void)
{
	if (!Rcon_Validate ()) {
		Com_Printf ("Bad rcon from %s:\n%s\n", NET_AdrToString (net_from), net_message.data+4);

		SV_BeginRedirect (RD_PACKET);
		Com_Printf ("Bad rcon_password\n");
	}
	else {
		Com_Printf ("Rcon from %s:\n%s\n", NET_AdrToString (net_from), net_message.data+4);

		SV_BeginRedirect (RD_PACKET);
		Cmd_ExecuteString (Cmd_MakeArgs(2));
	}

	SV_EndRedirect ();
}
Beispiel #6
0
/*
============
Cvar_Command

Handles variable inspection and changing from the console
============
*/
qbool Cvar_Command (void)
{
	cvar_t		*var;

// check variables
	var = Cvar_Find (Cmd_Argv(0));
	if (!var)
		return false;

// perform a variable print or set
	if (Cmd_Argc() == 1)
	{
		Com_Printf ("\"%s\" is \"%s\"\n", var->name, var->string);
		return true;
	}

	Cvar_Set (var, Cmd_MakeArgs(1));
	return true;
}
Beispiel #7
0
/*
=====================
CL_Rcon_f

Send the rest of the command line over as
an unconnected command.
=====================
*/
void CL_Rcon_f (void)
{
	char	message[1024];
	netadr_t	to;
	extern cvar_t cl_rconAddress;
	extern cvar_t *cl_rconPassword;

	message[0] = 255;
	message[1] = 255;
	message[2] = 255;
	message[3] = 255;
	message[4] = 0;

	strcat (message, "rcon ");

	if (cl_rconPassword->string[0]) {
		strcat (message, cl_rconPassword->string);
		strcat (message, " ");
	}

	strlcat (message, Cmd_MakeArgs(1), sizeof(message));

	if (cls.state >= ca_connected)
		to = cls.netchan.remote_address;
	else
	{
		if (!strlen(cl_rconAddress.string))
		{
			Com_Printf ("You must either be connected,\n"
						"or set the 'rcon_address' cvar\n"
						"to issue rcon commands\n");

			return;
		}
		NET_StringToAdr (cl_rconAddress.string, &to);
		if (to.port == 0)
			to.port = BigShort (PORT_SERVER);
	}

	NET_SendPacket (NS_CLIENT, strlen(message)+1, message
		, to);
}
Beispiel #8
0
void SList_Load (void) {
	char line[128];
	char filename[MAX_OSPATH] = {0};
	char *desc, *addr;
	unsigned int len;
	int c, argc, count;
	FILE *f;

	snprintf(&filename[0], sizeof(filename), "%s/servers.txt", com_basedir);
	if (!(f = fopen(filename, "r")))
		return;

	count = len = 0;
	while ((c = getc(f))) {
		if (c == '\n' || c == '\r' || c == EOF) {
			if (c == '\r' && (c = getc(f)) != '\n' && c != EOF)
				ungetc(c, f);

			line[len] = 0;
			len = 0;
			Cmd_TokenizeString(line);

			if ((argc = Cmd_Argc()) >= 1) {
				addr = Cmd_Argv(0);
				desc = (argc >= 2) ? Cmd_MakeArgs(1) : "Unknown";
				SList_Set (count, addr, desc);
				if (++count == MAX_SERVER_LIST)
					break;
			}
			if (c == EOF)
				break;	//just in case an EOF follows a '\r'
		} else {
			if (len + 1 < sizeof(line))
				line[len++] = c;
		}
	}

	fclose (f);

	slist_initialised = true;
}