bool CServerDef::r_LoadVal( CScript & s ) { ADDTOCALLSTACK("CServerDef::r_LoadVal"); EXC_TRY("LoadVal"); switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ) ) { case SC_ACCAPP: case SC_ACCAPPS: // Treat it as a value or a string. if ( IsDigit( s.GetArgStr()[0] )) m_eAccApp = static_cast<ACCAPP_TYPE>(s.GetArgVal() ); else { // Treat it as a string. "Manual","Automatic","Guest" m_eAccApp = static_cast<ACCAPP_TYPE>(FindTable(s.GetArgStr(), sm_AccAppTable, CountOf(sm_AccAppTable))); } if ( m_eAccApp < 0 || m_eAccApp >= ACCAPP_QTY ) m_eAccApp = ACCAPP_Unspecified; break; case SC_AGE: break; case SC_CLIENTVERSION: m_sClientVersion = s.GetArgRaw(); // m_ClientVersion.SetClientVer( s.GetArgRaw()); break; case SC_CREATE: m_timeCreate = CServerTime::GetCurrentTime() - ( s.GetArgLLVal() * TICK_PER_SEC ); break; case SC_ADMINEMAIL: if ( this != &g_Serv && !g_Serv.m_sEMail.IsEmpty() && strstr(s.GetArgStr(), g_Serv.m_sEMail) ) return false; if ( !g_Cfg.IsValidEmailAddressFormat(s.GetArgStr()) ) return false; if ( g_Cfg.IsObscene(s.GetArgStr()) ) return false; m_sEMail = s.GetArgStr(); break; case SC_LANG: { tchar szLang[ 32 ]; Str_GetBare( szLang, s.GetArgStr(), sizeof(szLang), "<>/\"\\" ); if ( g_Cfg.IsObscene(szLang) ) // Is the name unacceptable? return false; m_sLang = szLang; } break; case SC_LASTVALIDDATE: m_dateLastValid.Read( s.GetArgStr() ); break; case SC_LASTVALIDTIME: { int iVal = s.GetArgVal() * TICK_PER_SEC; if ( iVal < 0 ) m_timeLastValid = CServerTime::GetCurrentTime() + iVal; else m_timeLastValid = CServerTime::GetCurrentTime() - iVal; } break; case SC_SERVIP: m_ip.SetHostPortStr( s.GetArgStr() ); break; case SC_NAME: case SC_SERVNAME: SetName( s.GetArgStr() ); break; case SC_SERVPORT: m_ip.SetPort( (word)s.GetArgVal() ); break; case SC_ACCOUNTS: SetStat( SERV_STAT_ACCOUNTS, s.GetArgVal() ); break; case SC_CLIENTS: { int iClients = s.GetArgVal(); if ( iClients < 0 ) return false; // invalid if ( iClients > FD_SETSIZE ) // Number is bugged ! return false; SetStat( SERV_STAT_CLIENTS, iClients ); } break; case SC_ITEMS: SetStat( SERV_STAT_ITEMS, s.GetArgVal() ); break; case SC_CHARS: SetStat( SERV_STAT_CHARS, s.GetArgVal() ); break; case SC_TIMEZONE: m_TimeZone = (char)s.GetArgVal(); break; case SC_URL: case SC_URLLINK: // It is a basically valid URL ? if ( this != &g_Serv ) { if ( !g_Serv.m_sURL.IsEmpty() && strstr(s.GetArgStr(), g_Serv.m_sURL) ) return false; } if ( !strchr(s.GetArgStr(), '.' ) ) return false; if ( g_Cfg.IsObscene( s.GetArgStr()) ) // Is the name unacceptable? return false; m_sURL = s.GetArgStr(); break; default: return CScriptObj::r_LoadVal(s); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPT; EXC_DEBUG_END; return false; }