bool CServerDef::r_WriteVal( lpctstr pszKey, CSString &sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CServerDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ) ) { case SC_ACCAPP: sVal.FormatVal( m_eAccApp ); break; case SC_ACCAPPS: // enum string ASSERT( m_eAccApp >= 0 && m_eAccApp < ACCAPP_QTY ); sVal = sm_AccAppTable[ m_eAccApp ]; break; case SC_ADMINEMAIL: sVal = m_sEMail; break; case SC_AGE: // display the age in days. sVal.FormatLLVal( GetAgeHours()/24 ); break; case SC_CLIENTVERSION: { char szVersion[ 128 ]; sVal = m_ClientVersion.WriteClientVer( szVersion ); } break; case SC_CREATE: sVal.FormatLLVal( -( g_World.GetTimeDiff(m_timeCreate) / TICK_PER_SEC ) ); break; case SC_LANG: sVal = m_sLang; break; case SC_LASTVALIDDATE: if ( m_timeLastValid.IsTimeValid() ) sVal.FormatLLVal( GetTimeSinceLastValid() / ( TICK_PER_SEC * 60 ) ); else sVal = "NA"; break; case SC_LASTVALIDTIME: // How many seconds ago. sVal.FormatLLVal( m_timeLastValid.IsTimeValid() ? ( GetTimeSinceLastValid() / TICK_PER_SEC ) : -1 ); break; case SC_SERVIP: sVal = m_ip.GetAddrStr(); break; case SC_NAME: case SC_SERVNAME: sVal = GetName(); // What the name should be. Fill in from ping. break; case SC_SERVPORT: sVal.FormatVal( m_ip.GetPort() ); break; case SC_ACCOUNTS: sVal.FormatSTVal( StatGet( SERV_STAT_ACCOUNTS ) ); break; case SC_CLIENTS: sVal.FormatSTVal( StatGet( SERV_STAT_CLIENTS ) ); break; case SC_ITEMS: sVal.FormatSTVal( StatGet( SERV_STAT_ITEMS ) ); break; case SC_MEM: sVal.FormatSTVal( StatGet( SERV_STAT_MEM ) ); break; case SC_CHARS: sVal.FormatSTVal( StatGet( SERV_STAT_CHARS ) ); break; case SC_TIMEZONE: sVal.FormatVal( m_TimeZone ); break; case SC_URL: sVal = m_sURL; break; case SC_URLLINK: // try to make a link of it. if ( m_sURL.IsEmpty() ) { sVal = GetName(); break; } sVal.Format("<a href=\"http://%s\">%s</a>", static_cast<lpctstr>(m_sURL), GetName()); break; case SC_VERSION: sVal = SPHERE_VERSION; break; default: { lpctstr pszArgs = strchr(pszKey, ' '); if (pszArgs != NULL) GETNONWHITESPACE(pszArgs); CScriptTriggerArgs Args( pszArgs ? pszArgs : "" ); if ( r_Call( pszKey, pSrc, &Args, &sVal ) ) return true; return CScriptObj::r_WriteVal( pszKey, sVal, pSrc ); } } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CSector::r_WriteVal( lpctstr pszKey, CSString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT32_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { nullptr, INT32_MAX } }; SC_TYPE key = (SC_TYPE)FindTableHead(pszKey, sm_szLoadKeys, CountOf(sm_szLoadKeys) - 1); switch ( key ) { case SC_CANSLEEP: { pszKey += 8; bool fCheckAdjacents = Exp_GetVal(pszKey); sVal.FormatBVal(CanSleep(fCheckAdjacents)); return true; } case SC_CLIENTS: sVal.FormatSTVal(m_Chars_Active.GetClientsNumber()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return true; case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( (int)GetCharComplexity() )) ) ? "1" : "0"; return true; } sVal.FormatSTVal( GetCharComplexity() ); return true; case SC_FLAGS: sVal.FormatHex(m_dwFlags); return true; case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return true; case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return true; case SC_NUMBER: sVal.FormatVal(m_index); return true; case SC_ISDARK: sVal.FormatVal( IsDark() ); return true; case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return true; case SC_ISSLEEPING: sVal.FormatVal(IsSleeping()); return true; case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return true; case SC_ITEMCOUNT: sVal.FormatSTVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal((int)GetSeason()); return true; case SC_WEATHER: sVal.FormatVal((int)GetWeather()); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }