void FMaskCVar::DoSet (UCVarValue value, ECVarType type) { int val = ToInt(value, type) << BitNum; // Server cvars that get changed by this need to use a special message, because // changes are not processed until the next net update. This is a problem with // exec scripts because all flags will base their changes off of the value of // the "master" cvar at the time the script was run, overriding any changes // another flag might have made to the same cvar earlier in the script. if ((ValueVar.GetFlags() & CVAR_SERVERINFO) && gamestate != GS_STARTUP && !demoplayback) { // [BB] netgame && !players[consoleplayer].settings_controller -> NETWORK_InClientMode( ) if ( NETWORK_InClientMode( ) ) { Printf ("Only setting controllers can change %s\n", Name); return; } // Ugh... for(int i = 0; i < 32; i++) { if (BitVal & (1<<i)) { D_SendServerFlagChange (&ValueVar, i, !!(val & (1<<i))); } } } else { int vval = *ValueVar; vval &= ~BitVal; vval |= val; ValueVar = vval; } }
void FFlagCVar::DoSet (UCVarValue value, ECVarType type) { bool newval = ToBool (value, type); // Server cvars that get changed by this need to use a special message, because // changes are not processed until the next net update. This is a problem with // exec scripts because all flags will base their changes off of the value of // the "master" cvar at the time the script was run, overriding any changes // another flag might have made to the same cvar earlier in the script. if ((ValueVar.GetFlags() & CVAR_SERVERINFO) && gamestate != GS_STARTUP && !demoplayback) { if (netgame && !players[consoleplayer].settings_controller) { Printf ("Only setting controllers can change %s\n", Name); return; } D_SendServerFlagChange (&ValueVar, BitNum, newval); } else { int val = *ValueVar; if (newval) val |= BitVal; else val &= ~BitVal; ValueVar = val; } }