void C4GameSaveSavegame::AdjustCore(C4Scenario &rC4S) { // Determine save game index from trailing number in group file name int iSaveGameIndex = GetTrailingNumber(GetFilenameOnly(pSaveGroup->GetFullName().getData())); // Looks like a decent index: set numbered icon if (Inside(iSaveGameIndex, 1, 10)) rC4S.Head.Icon = 2 + (iSaveGameIndex - 1); // Else: set normal script icon else rC4S.Head.Icon = 29; }
bool C4ObjectInfo::Save(C4Group &hGroup, bool fStoreTiny, C4DefList *pDefs) { // Set group file name; rename if necessary char szTempGroup[_MAX_PATH+1]; SCopy(Name, szTempGroup, _MAX_PATH); MakeFilenameFromTitle(szTempGroup); SAppend(".oci",szTempGroup, _MAX_PATH); if (!SEqualNoCase(Filename, szTempGroup)) { if (!Filename[0]) { // first time creation of file - make sure it's not a duplicate SCopy(szTempGroup, Filename, _MAX_PATH); while (hGroup.FindEntry(Filename)) { // if a crew info of that name exists already, rename! RemoveExtension(Filename); int32_t iFinNum = GetTrailingNumber(Filename), iLen = SLen(Filename); while (iLen && Inside(Filename[iLen-1], '0', '9')) --iLen; if (iLen>_MAX_PATH-22) { LogF("Error generating unique filename for %s(%s): Path overflow", Name, hGroup.GetFullName().getData()); break; } snprintf(Filename+iLen, 22, "%d", iFinNum+1); EnforceExtension(Filename, "oci"); } } else { // Crew was renamed; file rename necessary, if the name is not blocked by another crew info if (!hGroup.FindEntry(szTempGroup)) { if (hGroup.Rename(Filename, szTempGroup)) SCopy(szTempGroup, Filename, _MAX_PATH); else { // could not rename. Not fatal; just use old file LogF("Error adjusting crew info for %s into %s: Rename error from %s to %s!", Name, hGroup.GetFullName().getData(), Filename, szTempGroup); } } } } // Open group C4Group hTemp; if (!hTemp.OpenAsChild(&hGroup, Filename, false, true)) return false; // custom rank image present? if (pDefs && !fStoreTiny) { C4Def *pDef = pDefs->ID2Def(id); if (pDef) { if (pDef->pRankSymbols) { C4FacetSurface fctRankSymbol; if (C4RankSystem::DrawRankSymbol(&fctRankSymbol, Rank, pDef->pRankSymbols, pDef->iNumRankSymbols, true)) { fctRankSymbol.GetFace().SavePNG(hTemp, C4CFN_ClonkRank); } } else { // definition does not have custom rank symbols: Remove any rank image from Clonk hTemp.Delete(C4CFN_ClonkRank); } } } // Save info to temp group if (!C4ObjectInfoCore::Save(hTemp, pDefs)) { hTemp.Close(); return false; } // Close temp group hTemp.Close(); // Success return true; }