Ejemplo n.º 1
0
/*
============
Cvar_VM_Set

Set cvar for game or cgame vm.
============
*/
void Cvar_VM_Set( const char *var_name, const char *value, qboolean gamevm )
{
	int flags = Cvar_Flags( var_name );
	qboolean force = qtrue;

	if ( flags != CVAR_NONEXISTENT )
	{
		if ( flags & CVAR_PROTECTED )
		{
			if ( value )
				Com_Error( ERR_DROP, "%s tried to set "
					"\"%s\" to \"%s\"", gamevm ? "GameVM" : "CGameVM", var_name, value );
			else
				Com_Error( ERR_DROP, "%s tried to "
					"modify \"%s\"", gamevm ? "GameVM" : "CGameVM",  var_name );
			return;
		}

		// don't let VMs change cheat cvars when cheats are disabled
		// don't let VMs change engine latched cvars instantly
		// don't let cgame change systeminfo cvars when connected to a server
		if ( ( ( flags & CVAR_CHEAT ) && !cvar_cheats->integer )
			|| ( ( flags & CVAR_LATCH ) && !( flags & CVAR_VM_CREATED ) )
			|| ( ( flags & CVAR_SYSTEMINFO ) && CL_ConnectedToRemoteServer() ) )
		{
			force = qfalse;
		}
	}

	Cvar_Set2( var_name, value, CVAR_VM_CREATED, force );
}
Ejemplo n.º 2
0
/*
============
Cvar_VM_Set

Set cvar for game, cgame, or ui vm.
============
*/
void Cvar_VM_Set( const char *var_name, const char *value, vmSlots_t vmslot )
{
	uint32_t flags = Cvar_Flags( var_name );

	if ( vmslot != VM_GAME && (flags & CVAR_SYSTEMINFO) && CL_ConnectedToRemoteServer() )
	{
		Com_Printf ("%s can only be set by server.\n", var_name);
		return;
	}

	if( flags != CVAR_NONEXISTENT && (flags & CVAR_PROTECTED) ) {
		if( value )
			Com_Error( ERR_DROP, "%s tried to set \"%s\" to \"%s\"", vmStrs[vmslot], var_name, value );
		else
			Com_Error( ERR_DROP, "%s tried to modify \"%s\"", vmStrs[vmslot], var_name );
		return;
	}

	Cvar_Set2( var_name, value, CVAR_VM_CREATED, qtrue );
}
Ejemplo n.º 3
0
/*
============
Cvar_Set2
============
*/
cvar_t *Cvar_Set2( const char *var_name, const char *value, int defaultFlags, qboolean force ) {
	cvar_t	*var;

//	Com_DPrintf( "Cvar_Set2: %s %s\n", var_name, value );

	if ( !Cvar_ValidateString( var_name ) ) {
		Com_Printf("invalid cvar name string: %s\n", var_name );
		var_name = "BADNAME";
	}

#if 0	// FIXME
	if ( value && !Cvar_ValidateString( value ) ) {
		Com_Printf("invalid cvar value string: %s\n", value );
		var_value = "BADVALUE";
	}
#endif

	var = Cvar_FindVar (var_name);
	if (!var) {
		if ( !value ) {
			return NULL;
		}
		// create it
		var = Cvar_Get( var_name, value, defaultFlags );
		var->explicitSet = qtrue;
		return var;
	}

	// explicit set state change
	if ( var->explicitSet != ( value != NULL ) ) {
		var->explicitSet = ( value != NULL );

		// update config file even if value hasn't changed
		if ( var->flags & CVAR_ARCHIVE ) {
			cvar_modifiedFlags |= CVAR_ARCHIVE;
		}
	}

	if (!value ) {
		value = var->resetString;
	}

	value = Cvar_Validate(var, value, qtrue);

	if((var->flags & CVAR_LATCH) && var->latchedString)
	{
		if(!strcmp(value, var->string))
		{
			Z_Free(var->latchedString);
			var->latchedString = NULL;
			return var;
		}

		if(!strcmp(value, var->latchedString))
			return var;
	}
	else if(!strcmp(value, var->string))
		return var;

	// note what types of cvars have been modified (userinfo, archive, serverinfo, systeminfo)
	cvar_modifiedFlags |= var->flags;

	if (!force)
	{
		if ( (var->flags & (CVAR_SYSTEMINFO|CVAR_SERVER_CREATED)) && CL_ConnectedToRemoteServer() )
		{
			Com_Printf ("%s can only be set by server.\n", var_name);
			return var;
		}

		if (var->flags & CVAR_ROM)
		{
			Com_Printf ("%s is read only.\n", var_name);
			return var;
		}

		if (var->flags & CVAR_INIT)
		{
			Com_Printf ("%s is write protected.\n", var_name);
			return var;
		}

		if (var->flags & CVAR_LATCH)
		{
			if (var->latchedString)
			{
				if (strcmp(value, var->latchedString) == 0)
					return var;
				Z_Free (var->latchedString);
			}
			else
			{
				if (strcmp(value, var->string) == 0)
					return var;
			}

			Com_Printf ("%s will be changed upon restarting.\n", var_name);
			var->latchedString = CopyString(value);
			var->modified = qtrue;
			var->modificationCount++;
			return var;
		}

		if ( (var->flags & CVAR_CHEAT) && !cvar_cheats->integer )
		{
			Com_Printf ("%s is cheat protected.\n", var_name);
			return var;
		}
	}
	else
	{
		if (var->latchedString)
		{
			Z_Free (var->latchedString);
			var->latchedString = NULL;
		}
	}

	if (!strcmp(value, var->string))
		return var;		// not changed

	var->modified = qtrue;
	var->modificationCount++;
	
	Z_Free (var->string);	// free the old value string
	
	var->string = CopyString(value);
	var->value = atof (var->string);
	var->integer = atoi (var->string);

	return var;
}