OpenClonk
C4GameSaveScenario Class Reference

#include <C4GameSave.h>

Inheritance diagram for C4GameSaveScenario:
[legend]
Collaboration diagram for C4GameSaveScenario:
[legend]

Public Member Functions

 C4GameSaveScenario (bool fForceExactLandscape, bool fSaveOrigin)
 
bool Save (const char *szFilename)
 
bool Save (C4Group &hToGroup, bool fKeepGroup)
 
bool SaveDesc (C4Group &hToGroup)
 
bool Close ()
 
C4GroupGetGroup ()
 

Protected Types

enum  SyncState { SyncNONE = 0 , SyncScenario = 1 , SyncSavegame = 2 , SyncSynchronized = 3 }
 

Protected Member Functions

bool GetSaveOrigin () override
 
bool GetClearOrigin () override
 
bool GetSaveDesc () override
 
bool GetForceExactLandscape () override
 
bool GetSaveScriptPlayers () override
 
bool GetSaveScriptPlayerFiles () override
 
virtual bool GetSaveRuntimeData ()
 
virtual bool GetKeepTitle ()
 
virtual bool GetCopyScenario ()
 
virtual const char * GetSortOrder ()
 
virtual bool GetCreateSmallFile ()
 
virtual bool GetSaveUserPlayers ()
 
virtual bool GetSaveUserPlayerFiles ()
 
virtual void AdjustCore (C4Scenario &rC4S)
 
virtual bool WriteDesc (StdStrBuf &sBuf)
 
virtual bool SaveComponents ()
 
virtual bool OnSaving ()
 
bool IsExact ()
 
bool IsSynced ()
 
void WriteDescLineFeed (StdStrBuf &sBuf)
 
void WriteDescDate (StdStrBuf &sBuf, bool fRecord=false)
 
void WriteDescGameTime (StdStrBuf &sBuf)
 
void WriteDescDefinitions (StdStrBuf &sBuf)
 
void WriteDescNetworkClients (StdStrBuf &sBuf)
 
void WriteDescPlayers (StdStrBuf &sBuf, bool fByTeam, int32_t idTeam)
 
void WriteDescPlayers (StdStrBuf &sBuf)
 
void WriteDescLeague (StdStrBuf &sBuf, bool fLeague, const char *strLeagueName)
 
void WriteDescEngine (StdStrBuf &sBuf)
 

Protected Attributes

bool fForceExactLandscape
 
bool fSaveOrigin
 
C4GrouppSaveGroup
 
bool fOwnGroup
 
bool fInitial
 
enum C4GameSave::SyncState Sync
 

Detailed Description

Definition at line 112 of file C4GameSave.h.

Member Enumeration Documentation

◆ SyncState

enum C4GameSave::SyncState
protectedinherited
Enumerator
SyncNONE 
SyncScenario 
SyncSavegame 
SyncSynchronized 

Definition at line 48 of file C4GameSave.h.

49  {
50  SyncNONE = 0,
51  SyncScenario = 1, // save (eventually static) landscape and objects only to play as a separate scenario later
52  SyncSavegame = 2, // save all runtime data, so the scenario can be continued at a future date
53  SyncSynchronized = 3 // save exact runtime data to be network- or replay-save
54  } Sync; // sync is set by ctor
enum C4GameSave::SyncState Sync
@ SyncSavegame
Definition: C4GameSave.h:52
@ SyncScenario
Definition: C4GameSave.h:51
@ SyncSynchronized
Definition: C4GameSave.h:53

Constructor & Destructor Documentation

◆ C4GameSaveScenario()

C4GameSaveScenario::C4GameSaveScenario ( bool  fForceExactLandscape,
bool  fSaveOrigin 
)
inline

Definition at line 115 of file C4GameSave.h.

C4GameSave(bool fAInitial, SyncState ASync)
Definition: C4GameSave.h:82

Member Function Documentation

◆ AdjustCore()

virtual void C4GameSave::AdjustCore ( C4Scenario rC4S)
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveNetwork, C4GameSaveRecord, and C4GameSaveSavegame.

Definition at line 72 of file C4GameSave.h.

72 {} // set specific C4S values

◆ Close()

bool C4GameSave::Close ( )
inherited

Definition at line 447 of file C4GameSave.cpp.

448 {
449  bool fSuccess = true;
450  // any group open?
451  if (pSaveGroup)
452  {
453  // sort group
454  const char *szSortOrder = GetSortOrder();
455  if (szSortOrder) pSaveGroup->Sort(szSortOrder);
456  // close if owned group
457  if (fOwnGroup)
458  {
459  fSuccess = !!pSaveGroup->Close();
460  delete pSaveGroup;
461  fOwnGroup = false;
462  }
463  pSaveGroup = nullptr;
464  }
465  return fSuccess;
466 }
bool fOwnGroup
Definition: C4GameSave.h:39
C4Group * pSaveGroup
Definition: C4GameSave.h:38
virtual const char * GetSortOrder()
Definition: C4GameSave.h:61
bool Sort(const char *list)
Definition: C4Group.cpp:2470
bool Close()
Definition: C4Group.cpp:971

References C4Group::Close(), C4GameSave::fOwnGroup, C4GameSave::GetSortOrder(), C4GameSave::pSaveGroup, and C4Group::Sort().

Referenced by C4Network2::CreateDynamic(), C4GameSave::Save(), C4Record::Start(), C4Record::StartStreaming(), and C4GameSave::~C4GameSave().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetClearOrigin()

bool C4GameSaveScenario::GetClearOrigin ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 121 of file C4GameSave.h.

121 { return false; } // always keep existing origin

◆ GetCopyScenario()

virtual bool C4GameSave::GetCopyScenario ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveNetwork, and C4GameSaveRecord.

Definition at line 60 of file C4GameSave.h.

60 { return true; } // return whether the savegame depends on the game scenario file

◆ GetCreateSmallFile()

virtual bool C4GameSave::GetCreateSmallFile ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveNetwork, and C4GameSaveRecord.

Definition at line 62 of file C4GameSave.h.

62 { return false; } // return whether file size should be minimized

◆ GetForceExactLandscape()

bool C4GameSaveScenario::GetForceExactLandscape ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 123 of file C4GameSave.h.

virtual bool GetForceExactLandscape()
Definition: C4GameSave.h:63

References fForceExactLandscape, and C4GameSave::GetForceExactLandscape().

Here is the call graph for this function:

◆ GetGroup()

C4Group* C4GameSave::GetGroup ( )
inlineinherited

Definition at line 109 of file C4GameSave.h.

109 { return pSaveGroup; } // get scenario saving group; only open between calls to Save() and Close()

References C4GameSave::pSaveGroup.

◆ GetKeepTitle()

virtual bool C4GameSave::GetKeepTitle ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveNetwork.

Definition at line 58 of file C4GameSave.h.

58 { return !IsExact(); } // whether original, localized title with image and icon shall be deleted
bool IsExact()
Definition: C4GameSave.h:78

References C4GameSave::IsExact().

Referenced by C4GameSave::Save().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSaveDesc()

bool C4GameSaveScenario::GetSaveDesc ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 122 of file C4GameSave.h.

122 { return false; } // should WriteDescData be executed in Save()-call?

◆ GetSaveOrigin()

bool C4GameSaveScenario::GetSaveOrigin ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 120 of file C4GameSave.h.

120 { return fSaveOrigin; }

References fSaveOrigin.

◆ GetSaveRuntimeData()

virtual bool C4GameSave::GetSaveRuntimeData ( )
inlineprotectedvirtualinherited

Definition at line 57 of file C4GameSave.h.

57 { return !fInitial; } // save exact landscape, players, etc.
bool fInitial
Definition: C4GameSave.h:45

References C4GameSave::fInitial.

Referenced by C4GameSave::GetForceExactLandscape(), and C4GameSave::Save().

Here is the caller graph for this function:

◆ GetSaveScriptPlayerFiles()

bool C4GameSaveScenario::GetSaveScriptPlayerFiles ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 125 of file C4GameSave.h.

125 { return true; } // script players are also saved; but user players aren't!

◆ GetSaveScriptPlayers()

bool C4GameSaveScenario::GetSaveScriptPlayers ( )
inlineoverrideprotectedvirtual

Reimplemented from C4GameSave.

Definition at line 124 of file C4GameSave.h.

124 { return true; } // script players are also saved; but user players aren't!

◆ GetSaveUserPlayerFiles()

virtual bool C4GameSave::GetSaveUserPlayerFiles ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveSavegame.

Definition at line 68 of file C4GameSave.h.

68 { return IsExact(); } // return whether .ocp files of joined user players shall be put into the scenario

References C4GameSave::IsExact().

Here is the call graph for this function:

◆ GetSaveUserPlayers()

virtual bool C4GameSave::GetSaveUserPlayers ( )
inlineprotectedvirtualinherited

Definition at line 66 of file C4GameSave.h.

66 { return IsExact(); } // return whether joined user players shall be saved into SavePlayerInfos

References C4GameSave::IsExact().

Here is the call graph for this function:

◆ GetSortOrder()

virtual const char* C4GameSave::GetSortOrder ( )
inlineprotectedvirtualinherited

Definition at line 61 of file C4GameSave.h.

61 { return C4FLS_Scenario; } // return nullptr to prevent sorting
#define C4FLS_Scenario
Definition: C4Components.h:189

References C4FLS_Scenario.

Referenced by C4GameSave::Close().

Here is the caller graph for this function:

◆ IsExact()

bool C4GameSave::IsExact ( )
inlineprotectedinherited

Definition at line 78 of file C4GameSave.h.

78 { return Sync>=SyncSavegame; } // exact save (players, always exact landscape, etc.)

References C4GameSave::Sync, and C4GameSave::SyncSavegame.

Referenced by C4GameSave::GetForceExactLandscape(), C4GameSave::GetKeepTitle(), C4GameSave::GetSaveScriptPlayerFiles(), C4GameSave::GetSaveScriptPlayers(), C4GameSave::GetSaveUserPlayerFiles(), and C4GameSave::GetSaveUserPlayers().

Here is the caller graph for this function:

◆ IsSynced()

bool C4GameSave::IsSynced ( )
inlineprotectedinherited

Definition at line 79 of file C4GameSave.h.

79 { return Sync>=SyncSynchronized; } // synchronized

References C4GameSave::Sync, and C4GameSave::SyncSynchronized.

◆ OnSaving()

virtual bool C4GameSave::OnSaving ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveSavegame.

Definition at line 75 of file C4GameSave.h.

75 { return true; } // callback for special actions to be performed when saving (like, add sync)

Referenced by C4GameSave::Save().

Here is the caller graph for this function:

◆ Save() [1/2]

bool C4GameSave::Save ( C4Group hToGroup,
bool  fKeepGroup 
)
inherited

Definition at line 414 of file C4GameSave.cpp.

415 {
416  // close any previous
417  Close();
418  // set group
419  pSaveGroup = &hToGroup; fOwnGroup = fKeepGroup;
420  // PreSave-actions (virtual call)
421  if (!OnSaving()) return false;
422  // always save core
423  if (!SaveCore()) { Log(LoadResStr("IDS_ERR_SAVE_CORE")); return false; }
424  // cleanup group
426  // remove: Title text, image and icon if specified
427  if (!GetKeepTitle())
428  {
434  }
435  // save additional runtime data
436  if (GetSaveRuntimeData()) if (!SaveRuntimeData()) return false;
437  // Desc
438  if (GetSaveDesc())
439  if (!SaveDesc(*pSaveGroup))
440  Log(LoadResStr("IDS_ERR_SAVE_DESC")); /* nofail */
441  // save specialized components (virtual call)
442  if (!SaveComponents()) return false;
443  // done, success
444  return true;
445 }
#define C4CFN_Info
Definition: C4Components.h:70
#define C4CFN_PlayerFiles
Definition: C4Components.h:168
#define C4CFN_ScenarioTitle
Definition: C4Components.h:84
#define C4CFN_Titles
Definition: C4Components.h:146
#define C4CFN_ScenarioIcon
Definition: C4Components.h:85
#define C4CFN_ScenarioDesc
Definition: C4Components.h:88
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
bool Log(const char *szMessage)
Definition: C4Log.cpp:204
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270
bool SaveDesc(C4Group &hToGroup)
Definition: C4GameSave.cpp:235
virtual bool SaveComponents()
Definition: C4GameSave.h:74
virtual bool OnSaving()
Definition: C4GameSave.h:75
virtual bool GetSaveDesc()
Definition: C4GameSave.h:59
virtual bool GetKeepTitle()
Definition: C4GameSave.h:58
bool Close()
Definition: C4GameSave.cpp:447
virtual bool GetSaveRuntimeData()
Definition: C4GameSave.h:57
bool Delete(const char *files, bool recursive=false)
Definition: C4Group.cpp:1645

References C4CFN_Info, C4CFN_PlayerFiles, C4CFN_ScenarioDesc, C4CFN_ScenarioIcon, C4CFN_ScenarioTitle, C4CFN_Titles, C4GameSave::Close(), C4Group::Delete(), FormatString(), C4GameSave::fOwnGroup, C4GameSave::GetKeepTitle(), C4GameSave::GetSaveDesc(), C4GameSave::GetSaveRuntimeData(), LoadResStr(), Log(), C4GameSave::OnSaving(), C4GameSave::pSaveGroup, C4GameSave::SaveComponents(), and C4GameSave::SaveDesc().

Here is the call graph for this function:

◆ Save() [2/2]

bool C4GameSave::Save ( const char *  szFilename)
inherited

Definition at line 398 of file C4GameSave.cpp.

399 {
400  // close any previous
401  Close();
402  // create group
403  C4Group *pLSaveGroup = new C4Group();
404  if (!SaveCreateGroup(szFilename, *pLSaveGroup))
405  {
406  LogF(LoadResStr("IDS_ERR_SAVE_TARGETGRP"), szFilename ? szFilename : "nullptr!");
407  delete pLSaveGroup;
408  return false;
409  }
410  // save to it
411  return Save(*pLSaveGroup, true);
412 }
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:262
bool Save(const char *szFilename)
Definition: C4GameSave.cpp:398

References C4GameSave::Close(), LoadResStr(), and LogF().

Referenced by C4Network2::CreateDynamic(), C4Game::QuickSave(), C4Console::SaveGame(), C4Console::SaveScenario(), C4Record::Start(), and C4Record::StartStreaming().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SaveComponents()

virtual bool C4GameSave::SaveComponents ( )
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveRecord, and C4GameSaveSavegame.

Definition at line 74 of file C4GameSave.h.

74 { return true; } // save (or remove) custom components for specialization

Referenced by C4GameSave::Save().

Here is the caller graph for this function:

◆ SaveDesc()

bool C4GameSave::SaveDesc ( C4Group hToGroup)
inherited

Definition at line 235 of file C4GameSave.cpp.

236 {
237  // Unfortunately, there's no way to prealloc the buffer in an appropriate size
238  StdStrBuf sBuffer;
239 
240  // Scenario title
241  sBuffer.Append(Game.ScenarioTitle.getData());
242  sBuffer.Append("\n\n");
243 
244  // OK; each specializations has its own desc format
245  WriteDesc(sBuffer);
246 
247  // Generate Filename
248  StdStrBuf sFilename; char szLang[3];
249  SCopyUntil(Config.General.Language, szLang, ',', 2);
250  sFilename.Format(C4CFN_ScenarioDesc,szLang);
251 
252  // Save to file
253  return !!hToGroup.Add(sFilename.getData(),sBuffer,false,true);
254 }
C4Config Config
Definition: C4Config.cpp:930
C4Game Game
Definition: C4Globals.cpp:52
void SCopyUntil(const char *szSource, char *sTarget, char cUntil, int iMaxL, int iIndex)
Definition: Standard.cpp:172
char Language[CFG_MaxString+1]
Definition: C4Config.h:37
C4ConfigGeneral General
Definition: C4Config.h:255
StdCopyStrBuf ScenarioTitle
Definition: C4Game.h:103
virtual bool WriteDesc(StdStrBuf &sBuf)
Definition: C4GameSave.h:73
bool Add(const char *filename, const char *entry_name)
Definition: C4Group.cpp:1621
const char * getData() const
Definition: StdBuf.h:442
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174

References C4Group::Add(), StdStrBuf::Append(), C4CFN_ScenarioDesc, Config, StdStrBuf::Format(), Game, C4Config::General, StdStrBuf::getData(), C4ConfigGeneral::Language, C4Game::ScenarioTitle, SCopyUntil(), and C4GameSave::WriteDesc().

Referenced by C4GameSave::Save(), and C4Record::Stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDesc()

virtual bool C4GameSave::WriteDesc ( StdStrBuf sBuf)
inlineprotectedvirtualinherited

Reimplemented in C4GameSaveRecord, and C4GameSaveSavegame.

Definition at line 73 of file C4GameSave.h.

73 { return true; } // write desc (contents only)

Referenced by C4GameSave::SaveDesc().

Here is the caller graph for this function:

◆ WriteDescDate()

void C4GameSave::WriteDescDate ( StdStrBuf sBuf,
bool  fRecord = false 
)
protectedinherited

Definition at line 262 of file C4GameSave.cpp.

263 {
264  // write local time/date
265  time_t tTime; time(&tTime);
266  struct tm *pLocalTime;
267  pLocalTime=localtime(&tTime);
268  sBuf.AppendFormat(LoadResStr(fRecord ? "IDS_DESC_DATEREC" : (::Network.isEnabled() ? "IDS_DESC_DATENET" : "IDS_DESC_DATE")),
269  pLocalTime->tm_mday,
270  pLocalTime->tm_mon+1,
271  pLocalTime->tm_year+1900,
272  pLocalTime->tm_hour,
273  pLocalTime->tm_min);
274  WriteDescLineFeed(sBuf);
275 }
C4Network2 Network
Definition: C4Globals.cpp:53
void WriteDescLineFeed(StdStrBuf &sBuf)
Definition: C4GameSave.cpp:256
bool isEnabled() const
Definition: C4Network2.h:203
void AppendFormat(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:190

References StdStrBuf::AppendFormat(), C4Network2::isEnabled(), LoadResStr(), Network, and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveSavegame::WriteDesc(), and C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescDefinitions()

void C4GameSave::WriteDescDefinitions ( StdStrBuf sBuf)
protectedinherited

Definition at line 304 of file C4GameSave.cpp.

305 {
306  // Definition specs
307  if (Game.DefinitionFilenames[0])
308  {
309  char szDef[_MAX_PATH_LEN];
310  // Desc
311  sBuf.Append(LoadResStr("IDS_DESC_DEFSPECS"));
312  // Get definition modules
313  for (int cnt=0; SGetModule(Game.DefinitionFilenames,cnt,szDef); cnt++)
314  {
315  // Get exe relative path
316  StdStrBuf sDefFilename;
317  sDefFilename.Copy(Config.AtRelativePath(szDef));
318  // Append comma
319  if (cnt>0) sBuf.Append(", ");
320  // Apend to desc
321  sBuf.Append(sDefFilename);
322  }
323  // End of line
324  WriteDescLineFeed(sBuf);
325  }
326 }
#define _MAX_PATH_LEN
bool SGetModule(const char *szList, int iIndex, char *sTarget, int iSize)
Definition: Standard.cpp:539
const char * AtRelativePath(const char *filename)
Definition: C4Config.cpp:741
char DefinitionFilenames[20 *_MAX_PATH_LEN]
Definition: C4Game.h:105
void Copy()
Definition: StdBuf.h:467

References _MAX_PATH_LEN, StdStrBuf::Append(), C4Config::AtRelativePath(), Config, StdStrBuf::Copy(), C4Game::DefinitionFilenames, Game, LoadResStr(), SGetModule(), and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveSavegame::WriteDesc(), and C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescEngine()

void C4GameSave::WriteDescEngine ( StdStrBuf sBuf)
protectedinherited

Definition at line 288 of file C4GameSave.cpp.

289 {
290  char ver[32]; sprintf(ver, "%d.%d", (int)C4XVER1, (int)C4XVER2);
291  sBuf.AppendFormat(LoadResStr("IDS_DESC_VERSION"), ver);
292  WriteDescLineFeed(sBuf);
293 }
#define sprintf
Definition: Standard.h:162

References StdStrBuf::AppendFormat(), LoadResStr(), sprintf, and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescGameTime()

void C4GameSave::WriteDescGameTime ( StdStrBuf sBuf)
protectedinherited

Definition at line 277 of file C4GameSave.cpp.

278 {
279  // Write game duration
280  if (Game.Time)
281  {
282  sBuf.AppendFormat(LoadResStr("IDS_DESC_DURATION"),
283  Game.Time/3600,(Game.Time%3600)/60,Game.Time%60);
284  WriteDescLineFeed(sBuf);
285  }
286 }
int32_t Time
Definition: C4Game.h:132

References StdStrBuf::AppendFormat(), Game, LoadResStr(), C4Game::Time, and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveSavegame::WriteDesc(), and C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescLeague()

void C4GameSave::WriteDescLeague ( StdStrBuf sBuf,
bool  fLeague,
const char *  strLeagueName 
)
protectedinherited

Definition at line 295 of file C4GameSave.cpp.

296 {
297  if (fLeague)
298  {
299  sBuf.AppendFormat(LoadResStr("IDS_PRC_LEAGUE"), strLeagueName);
300  WriteDescLineFeed(sBuf);
301  }
302 }

References StdStrBuf::AppendFormat(), LoadResStr(), and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescLineFeed()

void C4GameSave::WriteDescLineFeed ( StdStrBuf sBuf)
protectedinherited

Definition at line 256 of file C4GameSave.cpp.

257 {
258  // paragraph end + cosmetics
259  sBuf.Append("\n\n");
260 }

References StdStrBuf::Append().

Referenced by C4GameSave::WriteDescDate(), C4GameSave::WriteDescDefinitions(), C4GameSave::WriteDescEngine(), C4GameSave::WriteDescGameTime(), C4GameSave::WriteDescLeague(), C4GameSave::WriteDescNetworkClients(), and C4GameSave::WriteDescPlayers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescNetworkClients()

void C4GameSave::WriteDescNetworkClients ( StdStrBuf sBuf)
protectedinherited

Definition at line 328 of file C4GameSave.cpp.

329 {
330  // Desc
331  sBuf.Append(LoadResStr("IDS_DESC_CLIENTS"));
332  // Client names
333  for (C4Network2Client *pClient=::Network.Clients.GetNextClient(nullptr); pClient; pClient=::Network.Clients.GetNextClient(pClient))
334  { sBuf.Append(", "); sBuf.Append(pClient->getName()); }
335  // End of line
336  WriteDescLineFeed(sBuf);
337 }
C4Network2Client * GetNextClient(C4Network2Client *pClient)
C4Network2ClientList Clients
Definition: C4Network2.h:116

References StdStrBuf::Append(), C4Network2::Clients, C4Network2ClientList::GetNextClient(), LoadResStr(), Network, and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveSavegame::WriteDesc(), and C4GameSaveRecord::WriteDesc().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteDescPlayers() [1/2]

void C4GameSave::WriteDescPlayers ( StdStrBuf sBuf)
protectedinherited

Definition at line 372 of file C4GameSave.cpp.

373 {
374  // New style using Game.PlayerInfos
376  {
377  sBuf.Append(LoadResStr("IDS_DESC_PLRS"));
379  {
380  // Teams defined: Print players sorted by teams
381  WriteDescLineFeed(sBuf);
382  C4Team *pTeam; int32_t i=0;
383  while ((pTeam = Game.Teams.GetTeamByIndex(i++)))
384  {
385  WriteDescPlayers(sBuf, true, pTeam->GetID());
386  }
387  // Finally, print out players outside known teams (those can only be achieved by script using SetPlayerTeam)
388  WriteDescPlayers(sBuf, true, 0);
389  }
390  else
391  {
392  // No teams defined: Print all players that have ever joined
393  WriteDescPlayers(sBuf, false, 0);
394  }
395  }
396 }
C4TeamList & Teams
Definition: C4Game.h:70
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
void WriteDescPlayers(StdStrBuf &sBuf, bool fByTeam, int32_t idTeam)
Definition: C4GameSave.cpp:339
int32_t GetPlayerCount() const
Definition: C4Teams.h:31
int32_t GetID() const
Definition: C4Teams.h:66
C4Team * GetTeamByIndex(int32_t iIndex) const
Definition: C4Teams.cpp:404
bool IsMultiTeams() const
Definition: C4Teams.h:162
bool IsAutoGenerateTeams() const
Definition: C4Teams.h:172

References StdStrBuf::Append(), Game, C4Team::GetID(), C4PlayerInfoList::GetPlayerCount(), C4TeamList::GetTeamByIndex(), C4TeamList::IsAutoGenerateTeams(), C4TeamList::IsMultiTeams(), LoadResStr(), C4Game::PlayerInfos, C4Game::Teams, C4GameSave::WriteDescLineFeed(), and C4GameSave::WriteDescPlayers().

Here is the call graph for this function:

◆ WriteDescPlayers() [2/2]

void C4GameSave::WriteDescPlayers ( StdStrBuf sBuf,
bool  fByTeam,
int32_t  idTeam 
)
protectedinherited

Definition at line 339 of file C4GameSave.cpp.

340 {
341  // write out all players; only if they match the given team if specified
342  C4PlayerInfo *pPlr; bool fAnyPlrWritten = false;
343  for (int i = 0; (pPlr = Game.PlayerInfos.GetPlayerInfoByIndex(i)); i++)
344  if (pPlr->HasJoined() && !pPlr->IsRemoved() && !pPlr->IsInvisible())
345  {
346  if (fByTeam)
347  {
348  if (idTeam)
349  {
350  // match team
351  if (pPlr->GetTeam() != idTeam) continue;
352  }
353  else
354  {
355  // must be in no known team
356  if (Game.Teams.GetTeamByID(pPlr->GetTeam())) continue;
357  }
358  }
359  if (fAnyPlrWritten)
360  sBuf.Append(", ");
361  else if (fByTeam && idTeam)
362  {
363  C4Team *pTeam = Game.Teams.GetTeamByID(idTeam);
364  if (pTeam) sBuf.AppendFormat("%s: ", pTeam->GetName());
365  }
366  sBuf.Append(pPlr->GetName());
367  fAnyPlrWritten = true;
368  }
369  if (fAnyPlrWritten) WriteDescLineFeed(sBuf);
370 }
int32_t GetTeam() const
Definition: C4PlayerInfo.h:195
bool IsInvisible() const
Definition: C4PlayerInfo.h:175
bool IsRemoved() const
Definition: C4PlayerInfo.h:164
bool HasJoined() const
Definition: C4PlayerInfo.h:165
const char * GetName() const
Definition: C4PlayerInfo.h:157
C4PlayerInfo * GetPlayerInfoByIndex(int32_t index) const
const char * GetName() const
Definition: C4Teams.h:65
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383

References StdStrBuf::Append(), StdStrBuf::AppendFormat(), Game, C4PlayerInfo::GetName(), C4Team::GetName(), C4PlayerInfoList::GetPlayerInfoByIndex(), C4PlayerInfo::GetTeam(), C4TeamList::GetTeamByID(), C4PlayerInfo::HasJoined(), C4PlayerInfo::IsInvisible(), C4PlayerInfo::IsRemoved(), C4Game::PlayerInfos, C4Game::Teams, and C4GameSave::WriteDescLineFeed().

Referenced by C4GameSaveSavegame::WriteDesc(), C4GameSaveRecord::WriteDesc(), and C4GameSave::WriteDescPlayers().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fForceExactLandscape

bool C4GameSaveScenario::fForceExactLandscape
protected

Definition at line 118 of file C4GameSave.h.

Referenced by GetForceExactLandscape().

◆ fInitial

bool C4GameSave::fInitial
protectedinherited

◆ fOwnGroup

bool C4GameSave::fOwnGroup
protectedinherited

Definition at line 39 of file C4GameSave.h.

Referenced by C4GameSave::Close(), and C4GameSave::Save().

◆ fSaveOrigin

bool C4GameSaveScenario::fSaveOrigin
protected

Definition at line 119 of file C4GameSave.h.

Referenced by GetSaveOrigin().

◆ pSaveGroup

◆ Sync

enum C4GameSave::SyncState C4GameSave::Sync
protectedinherited

The documentation for this class was generated from the following file: