void cvar_t::ForceSet (const char *val) { if (m_Flags & CVAR_LATCH && !(m_Flags & CVAR_SERVERINFO && baseapp != server) && !(m_Flags & CVAR_CLIENTINFO && baseapp != client)) { m_Flags |= CVAR_MODIFIED; if(val) m_LatchedString = val; else m_LatchedString = ""; } else { m_Flags |= CVAR_MODIFIED; if(val) m_String = val; else m_String = ""; m_Value = atof (val); if (m_Flags & CVAR_USERINFO) D_UserInfoChanged (this); if (m_Flags & CVAR_SERVERINFO) D_SendServerInfoChange (this, val); if (m_UseCallback) Callback (); } m_Flags &= ~CVAR_ISDEFAULT; }
void cvar_t::ForceSet(const char* valstr) { // [SL] 2013-04-16 - Latched CVARs do not change values until the next map. // Servers and single-player games should abide by this behavior but // multiplayer clients should just do what the server tells them. if (m_Flags & CVAR_LATCH && serverside && (gamestate == GS_LEVEL || gamestate == GS_INTERMISSION)) { m_Flags |= CVAR_MODIFIED; if (valstr) m_LatchedString = valstr; else m_LatchedString.clear(); } else { m_Flags |= CVAR_MODIFIED; bool numerical_value = IsRealNum(valstr); bool integral_type = m_Type == CVARTYPE_BOOL || m_Type == CVARTYPE_BYTE || m_Type == CVARTYPE_WORD || m_Type == CVARTYPE_INT; bool floating_type = m_Type == CVARTYPE_FLOAT; float valf = numerical_value ? atof(valstr) : 0.0f; // perform rounding to nearest integer for integral types if (integral_type) valf = floor(valf + 0.5f); valf = clamp(valf, m_MinValue, m_MaxValue); if (numerical_value || integral_type || floating_type) { // generate m_String based on the clamped valf value char tmp[32]; sprintf(tmp, "%g", valf); m_String = tmp; } else { // just set m_String to valstr if (valstr) m_String = valstr; else m_String.clear(); } m_Value = valf; if (m_UseCallback) Callback(); if (m_Flags & CVAR_USERINFO) D_UserInfoChanged(this); if (m_Flags & CVAR_SERVERINFO) D_SendServerInfoChange(this, m_String.c_str()); } m_Flags &= ~CVAR_ISDEFAULT; }
void FBaseCVar::ForceSet (UCVarValue value, ECVarType type, bool nouserinfosend) { DoSet (value, type); if ((Flags & CVAR_USERINFO) && !nouserinfosend && !(Flags & CVAR_IGNORE)) D_UserInfoChanged (this); if (m_UseCallback) Callback (); Flags &= ~CVAR_ISDEFAULT; }