void C4GameSave::WriteDescPlayers(StdStrBuf &sBuf) { // New style using Game.PlayerInfos if (Game.PlayerInfos.GetPlayerCount()) { sBuf.Append(LoadResStr("IDS_DESC_PLRS")); if (Game.Teams.IsMultiTeams() && !Game.Teams.IsAutoGenerateTeams()) { // Teams defined: Print players sorted by teams WriteDescLineFeed(sBuf); C4Team *pTeam; int32_t i=0; while ((pTeam = Game.Teams.GetTeamByIndex(i++))) { WriteDescPlayers(sBuf, true, pTeam->GetID()); } // Finally, print out players outside known teams (those can only be achieved by script using SetPlayerTeam) WriteDescPlayers(sBuf, true, 0); } else { // No teams defined: Print all players that have ever joined WriteDescPlayers(sBuf, false, 0); } } }
void C4GameSave::WriteDescDefinitions(StdStrBuf &sBuf) { // Definition specs if (Game.DefinitionFilenames[0]) { char szDef[_MAX_PATH+1]; // Desc sBuf.Append(LoadResStr("IDS_DESC_DEFSPECS")); // Get definition modules for (int cnt=0; SGetModule(Game.DefinitionFilenames,cnt,szDef); cnt++) { // Get exe relative path StdStrBuf sDefFilename; sDefFilename.Copy(Config.AtRelativePath(szDef)); // Convert rtf backslashes sDefFilename.Replace("\\", "\\\\"); // Append comma if (cnt>0) sBuf.Append(", "); // Apend to desc sBuf.Append(sDefFilename); } // End of line WriteDescLineFeed(sBuf); } }
void C4GameSave::WriteDescPlayers(StdStrBuf &sBuf, bool fByTeam, int32_t idTeam) { // write out all players; only if they match the given team if specified C4PlayerInfo *pPlr; bool fAnyPlrWritten = false; for (int i = 0; (pPlr = Game.PlayerInfos.GetPlayerInfoByIndex(i)); i++) if (pPlr->HasJoined() && !pPlr->IsRemoved() && !pPlr->IsInvisible()) { if (fByTeam) { if (idTeam) { // match team if (pPlr->GetTeam() != idTeam) continue; } else { // must be in no known team if (Game.Teams.GetTeamByID(pPlr->GetTeam())) continue; } } if (fAnyPlrWritten) sBuf.Append(", "); else if (fByTeam && idTeam) { C4Team *pTeam = Game.Teams.GetTeamByID(idTeam); if (pTeam) sBuf.AppendFormat("%s: ", pTeam->GetName()); } sBuf.Append(pPlr->GetName()); fAnyPlrWritten = true; } if (fAnyPlrWritten) WriteDescLineFeed(sBuf); }
void C4GameSave::WriteDescLeague(StdStrBuf &sBuf, bool fLeague, const char *strLeagueName) { if (fLeague) { sBuf.AppendFormat(LoadResStr("IDS_PRC_LEAGUE"), strLeagueName); WriteDescLineFeed(sBuf); } }
void C4GameSave::WriteDescNetworkClients(StdStrBuf &sBuf) { // Desc sBuf.Append(LoadResStr("IDS_DESC_CLIENTS")); // Client names for (C4Network2Client *pClient=::Network.Clients.GetNextClient(nullptr); pClient; pClient=::Network.Clients.GetNextClient(pClient)) { sBuf.Append(", "); sBuf.Append(pClient->getName()); } // End of line WriteDescLineFeed(sBuf); }
void C4GameSave::WriteDescGameTime(StdStrBuf &sBuf) { // Write game duration if (Game.Time) { sBuf.AppendFormat(LoadResStr("IDS_DESC_DURATION"), Game.Time/3600,(Game.Time%3600)/60,Game.Time%60); WriteDescLineFeed(sBuf); } }
void C4GameSave::WriteDescDate(StdStrBuf &sBuf, bool fRecord) { // write local time/date time_t tTime; time(&tTime); struct tm *pLocalTime; pLocalTime=localtime(&tTime); sBuf.AppendFormat(LoadResStr(fRecord ? "IDS_DESC_DATEREC" : (::Network.isEnabled() ? "IDS_DESC_DATENET" : "IDS_DESC_DATE")), pLocalTime->tm_mday, pLocalTime->tm_mon+1, pLocalTime->tm_year+1900, pLocalTime->tm_hour, pLocalTime->tm_min); WriteDescLineFeed(sBuf); }
void C4GameSave::WriteDescEngine(StdStrBuf &sBuf) { char ver[32]; sprintf(ver, "%d.%d", (int)C4XVER1, (int)C4XVER2); sBuf.AppendFormat(LoadResStr("IDS_DESC_VERSION"), ver); WriteDescLineFeed(sBuf); }