void C4PacketFwd::CompileFunc(StdCompiler *pComp) { pComp->Value(mkNamingAdapt(fNegativeList, "Negative", false)); pComp->Value(mkNamingAdapt(mkIntPackAdapt(iClientCnt), "ClientCnt", 0)); pComp->Value(mkNamingAdapt(mkArrayAdaptMap(iClients, iClientCnt, mkIntPackAdapt<int32_t>), "Clients", -1)); pComp->Value(mkNamingAdapt(Data, "Data")); }
void C4LSectors::Dump() { C4ValueNumbers numbers; LogSilent(DecompileToBuf<StdCompilerINIWrite>( mkNamingAdapt( mkArrayAdaptMap(Sectors, Size, mkParAdaptMaker(&numbers)), "Sector")).getData()); }
void C4TeamList::CompileFunc(StdCompiler *pComp) { // if (pComp->isCompiler()) Clear(); - do not clear, because this would corrupt the fCustom-flag pComp->Value(mkNamingAdapt(fActive, "Active", true)); pComp->Value(mkNamingAdapt(fCustom, "Custom", true)); pComp->Value(mkNamingAdapt(fAllowHostilityChange, "AllowHostilityChange", false)); pComp->Value(mkNamingAdapt(fAllowTeamSwitch, "AllowTeamSwitch", false)); pComp->Value(mkNamingAdapt(fAutoGenerateTeams, "AutoGenerateTeams", false)); pComp->Value(mkNamingAdapt(iLastTeamID, "LastTeamID", 0)); StdEnumEntry<TeamDist> TeamDistEntries[] = { { "Free", TEAMDIST_Free }, { "Host", TEAMDIST_Host }, { "None", TEAMDIST_None }, { "Random", TEAMDIST_Random }, { "RandomInv", TEAMDIST_RandomInv }, }; pComp->Value(mkNamingAdapt(mkEnumAdaptT<uint8_t>(eTeamDist, TeamDistEntries), "TeamDistribution", TEAMDIST_Free)); pComp->Value(mkNamingAdapt(fTeamColors, "TeamColors", false)); pComp->Value(mkNamingAdapt(iMaxScriptPlayers, "MaxScriptPlayers", 0)); pComp->Value(mkNamingAdapt(mkParAdapt(sScriptPlayerNames, StdCompiler::RCT_All), "ScriptPlayerNames", StdStrBuf())); int32_t iOldTeamCount = iTeamCount; pComp->Value(mkNamingCountAdapt(iTeamCount, "Team")); if (pComp->isCompiler()) { while (iOldTeamCount--) delete ppList[iOldTeamCount]; delete [] ppList; if ((iTeamCapacity = iTeamCount)) { ppList = new C4Team *[iTeamCapacity]; memset(ppList, 0, sizeof(C4Team *)*iTeamCapacity); } else ppList = NULL; } if (iTeamCount) { // Force compiler to spezialize mkPtrAdaptNoNull(*ppList); // Save team list, using map-function. pComp->Value(mkNamingAdapt( mkArrayAdaptMap(ppList, iTeamCount, mkPtrAdaptNoNull<C4Team>), "Team")); } if (pComp->isCompiler()) { // adjust last team ID, which may not be set properly for player-generated team files iLastTeamID = std::max(GetLargestTeamID(), iLastTeamID); // force automatic generation of teams if none are defined if (!iTeamCount) fAutoGenerateTeams = true; } }
void C4ValueArray::CompileFunc(class StdCompiler *pComp, C4ValueNumbers * numbers) { int32_t inSize = iSize; // Size. Reset if not found. try { pComp->Value(inSize); } catch (StdCompiler::NotFoundException *pExc) { Reset(); delete pExc; return; } // Separator pComp->Separator(StdCompiler::SEP_SEP2); // Allocate if (pComp->isCompiler()) this->SetSize(inSize); // Values pComp->Value(mkArrayAdaptMap(pData, iSize, C4Value(), mkParAdaptMaker(numbers))); }
void C4RoundResultsPlayers::CompileFunc(StdCompiler *pComp) { bool fCompiler = pComp->isCompiler(); if (fCompiler) Clear(); int32_t iTemp = iPlayerCount; pComp->Value(mkNamingCountAdapt<int32_t>(iTemp, "Player")); if (iTemp < 0 || iTemp > C4MaxPlayer) { pComp->excCorrupt("player count out of range"); return; } // Grow list, if necessary if (fCompiler && iTemp > iPlayerCapacity) { GrowList(iTemp - iPlayerCapacity); iPlayerCount = iTemp; ZeroMem(ppPlayers, sizeof(*ppPlayers) * iPlayerCount); } // Compile pComp->Value(mkNamingAdapt(mkArrayAdaptMap(ppPlayers, iPlayerCount, mkPtrAdaptNoNull<C4RoundResultsPlayer>), "Player")); // Force specialization mkPtrAdaptNoNull<C4RoundResultsPlayer>(*ppPlayers); }