Hooks
static bool BeforeCvPlayerTraits_Write(CvPlayerTraits* self, FDataStream& kStream);static void AfterCvPlayerTraits_Write(CvPlayerTraits* self, FDataStream& kStream);static void ReplaceCvPlayerTraits_Write(void (*original)(CvPlayerTraits*, FDataStream&), CvPlayerTraits* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvPlayerTraits_Write>(host, &BeforeCvPlayerTraits_Write);CivRegisterAfter<CivHooks::CvPlayerTraits_Write>(host, &AfterCvPlayerTraits_Write);CivRegisterReplace<CivHooks::CvPlayerTraits_Write>(host, &ReplaceCvPlayerTraits_Write);
Code
4033/// Serialization write4034void CvPlayerTraits::Write(FDataStream& kStream)4035{4036 // Current version number4037 uint uiVersion = 19;4038 kStream << uiVersion;4039 MOD_SERIALIZE_INIT_WRITE(kStream);40404041 kStream << m_iGreatPeopleRateModifier;4042 kStream << m_iGreatScientistRateModifier;4043 kStream << m_iGreatGeneralRateModifier;4044 kStream << m_iGreatGeneralExtraBonus;4045 kStream << m_iGreatPersonGiftInfluence;4046 kStream << m_iLevelExperienceModifier;4047 kStream << m_iMaxGlobalBuildingProductionModifier;4048 kStream << m_iMaxTeamBuildingProductionModifier;4049 kStream << m_iMaxPlayerBuildingProductionModifier;4050 kStream << m_iCityUnhappinessModifier;4051 kStream << m_iPopulationUnhappinessModifier;4052 kStream << m_iCityStateBonusModifier;4053 kStream << m_iCityStateFriendshipModifier;4054 kStream << m_iCityStateCombatModifier;4055 kStream << m_iLandBarbarianConversionPercent;4056 kStream << m_iLandBarbarianConversionExtraUnits;4057 kStream << m_iSeaBarbarianConversionPercent;4058 kStream << m_iCapitalBuildingModifier;4059 kStream << m_iPlotBuyCostModifier;4060#if defined(MOD_TRAITS_CITY_WORKING)4061 MOD_SERIALIZE_WRITE(kStream, m_iCityWorkingChange);4062#endif4063#if defined(MOD_TRAITS_CITY_AUTOMATON_WORKERS)4064 MOD_SERIALIZE_WRITE(kStream, m_iCityAutomatonWorkersChange);4065#endif4066 kStream << m_iPlotCultureCostModifier;4067 kStream << m_iCultureFromKills;4068 kStream << m_iFaithFromKills;4069 kStream << m_iCityCultureBonus;4070 kStream << m_iCapitalThemingBonusModifier;4071 kStream << m_iPolicyCostModifier;4072 kStream << m_iCityConnectionTradeRouteChange;4073 kStream << m_iWonderProductionModifier;4074 kStream << m_iPlunderModifier;4075 kStream << m_iImprovementMaintenanceModifier;4076 kStream << m_iGoldenAgeDurationModifier;4077 kStream << m_iGoldenAgeMoveChange;4078 kStream << m_iGoldenAgeCombatModifier;4079 kStream << m_iGoldenAgeTourismModifier;4080 kStream << m_iGoldenAgeGreatArtistRateModifier;4081 kStream << m_iGoldenAgeGreatMusicianRateModifier;4082 kStream << m_iGoldenAgeGreatWriterRateModifier;4083 kStream << m_iExtraEmbarkMoves;4084 kStream << m_iNaturalWonderFirstFinderGold;4085 kStream << m_iNaturalWonderSubsequentFinderGold;4086 kStream << m_iNaturalWonderYieldModifier;4087 kStream << m_iNaturalWonderHappinessModifier;4088 kStream << m_iNearbyImprovementCombatBonus;4089 kStream << m_iNearbyImprovementBonusRange;4090 kStream << m_iCultureBuildingYieldChange;4091 kStream << m_iCombatBonusVsHigherTech;4092 kStream << m_iCombatBonusVsLargerCiv;4093 kStream << m_iLandUnitMaintenanceModifier;4094 kStream << m_iNavalUnitMaintenanceModifier;4095 kStream << m_iRazeSpeedModifier;4096 kStream << m_iDOFGreatPersonModifier;4097 kStream << m_iLuxuryHappinessRetention;4098#if defined(MOD_TRAITS_EXTRA_SUPPLY)4099 MOD_SERIALIZE_WRITE(kStream, m_iExtraSupply);4100 MOD_SERIALIZE_WRITE(kStream, m_iExtraSupplyPerCity);4101 MOD_SERIALIZE_WRITE(kStream, m_iExtraSupplyPerPopulation);4102#endif4103 kStream << m_iExtraSpies;4104 kStream << m_iUnresearchedTechBonusFromKills;4105 kStream << m_iExtraFoundedCityTerritoryClaimRange;4106 kStream << m_iFreeSocialPoliciesPerEra;4107 kStream << m_iNumTradeRoutesModifier;4108 kStream << m_iTradeRouteResourceModifier;4109 kStream << m_iUniqueLuxuryCities;4110 kStream << m_iUniqueLuxuryQuantity;4111 kStream << m_iUniqueLuxuryCitiesPlaced;4112 kStream << m_iWorkerSpeedModifier;4113 kStream << m_iAfraidMinorPerTurnInfluence;4114 kStream << m_iLandTradeRouteRangeBonus;4115 kStream << m_iTradeReligionModifier;4116 kStream << m_iTradeBuildingModifier;4117#if defined(MOD_TRAITS_TRADE_ROUTE_BONUSES)4118 MOD_SERIALIZE_WRITE(kStream, m_iSeaTradeRouteRangeBonus);4119#endif41204121 kStream << m_bFightWellDamaged;4122 kStream << m_bMoveFriendlyWoodsAsRoad;4123 kStream << m_bFasterAlongRiver;4124 kStream << m_bFasterInHills;4125 kStream << m_bEmbarkedAllWater;4126 kStream << m_bEmbarkedToLandFlatCost;4127 kStream << m_bNoHillsImprovementMaintenance;4128 kStream << m_bTechBoostFromCapitalScienceBuildings;4129 kStream << m_bStaysAliveZeroCities;4130 kStream << m_bFaithFromUnimprovedForest;4131#if defined(MOD_TRAITS_ANY_BELIEF)4132 MOD_SERIALIZE_WRITE(kStream, m_bAnyBelief);4133#endif4134 kStream << m_bBonusReligiousBelief;4135 kStream << m_bAbleToAnnexCityStates;4136 kStream << m_bCrossesMountainsAfterGreatGeneral;4137#if defined(MOD_TRAITS_CROSSES_ICE)4138 MOD_SERIALIZE_WRITE(kStream, m_bCrossesIce);4139#endif4140#if defined(MOD_TRAITS_GG_FROM_BARBARIANS)4141 MOD_SERIALIZE_WRITE(kStream, m_bGGFromBarbarians);4142#endif4143 kStream << m_bMayaCalendarBonuses;41444145 kStream << m_iBaktunPreviousTurn;41464147 std::vector<MayaBonusChoice>::const_iterator it;4148 kStream << m_aMayaBonusChoices.size();4149 for(it = m_aMayaBonusChoices.begin(); it != m_aMayaBonusChoices.end(); it++)4150 {4151 kStream << it->m_eUnitType;4152 kStream << it->m_iBaktunJustFinished;4153 }41544155 kStream << m_bNoAnnexing;4156 kStream << m_bTechFromCityConquer;4157 kStream << m_bUniqueLuxuryRequiresNewArea;4158 kStream << m_bRiverTradeRoad;4159 kStream << m_bAngerFreeIntrusionOfCityStates;41604161 kStream << m_eCampGuardType;4162 kStream << m_eCombatBonusImprovement;41634164 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iExtraYieldThreshold);4165 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iFreeCityYield);4166 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangeStrategicResources);4167 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldRateModifier);4168 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangeNaturalWonder);4169 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangePerTradePartner);4170 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangeIncomingTradeRoute);4171 4172 CvInfosSerializationHelper::WriteHashedDataArray<TerrainTypes>(kStream, &m_iStrategicResourceQuantityModifier[0], GC.getNumTerrainInfos());4173 CvInfosSerializationHelper::WriteHashedDataArray<ResourceTypes>(kStream, m_aiResourceQuantityModifier);41744175 kStream << m_abNoTrain.size();4176 for (uint ui = 0; ui < m_abNoTrain.size(); ui++)4177 {4178 kStream << m_abNoTrain[ui];4179 }41804181 kStream << m_aFreeTraitUnits.size();4182 for(uint ui = 0; ui < m_aFreeTraitUnits.size(); ui++)4183 {4184 kStream << m_aFreeTraitUnits[ui].m_iFreeUnit;4185 kStream << m_aFreeTraitUnits[ui].m_ePrereqTech;4186 }41874188 int iNumUnitCombatClassInfos = GC.getNumUnitCombatClassInfos();4189 kStream << iNumUnitCombatClassInfos;4190 for(int iI = 0; iI < iNumUnitCombatClassInfos; iI++)4191 {4192 kStream << m_paiMovesChangeUnitCombat[iI];4193 }4194 for(int iI = 0; iI < iNumUnitCombatClassInfos; iI++)4195 {4196 kStream << m_paiMaintenanceModifierUnitCombat[iI];4197 }41984199 kStream << m_ppaaiImprovementYieldChange;4200#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)4201 // MOD_SERIALIZE_READ - v57/v58/v59 broke the save format couldn't be helped, but don't make a habit of it!!!4202 kStream << m_ppiPlotYieldChange;4203#endif4204#if defined(MOD_API_UNIFIED_YIELDS)4205 // MOD_SERIALIZE_READ - v57/v58/v59 and v61 broke the save format couldn't be helped, but don't make a habit of it!!!4206 kStream << m_ppiBuildingClassYieldChange;4207 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iCapitalYieldChanges);4208 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iCityYieldChanges);4209 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iCoastalCityYieldChanges);4210 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iGreatWorkYieldChanges);4211 kStream << m_ppiFeatureYieldChange;4212 kStream << m_ppiResourceYieldChange;4213 kStream << m_ppiTerrainYieldChange;4214 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldFromKills);4215 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldFromBarbarianKills);4216 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangeTradeRoute);4217 kStream << ArrayWrapper<int>(NUM_YIELD_TYPES, m_iYieldChangeWorldWonder);4218 kStream << m_ppiTradeRouteYieldChange;4219#endif4220 kStream << m_ppaaiSpecialistYieldChange;4221#if defined(MOD_API_UNIFIED_YIELDS)4222 kStream << m_ppiGreatPersonExpendedYield;4223 kStream << m_piGoldenAgeGreatPersonRateModifier;4224 kStream << m_ppiCityYieldFromUnimprovedFeature;4225#endif4226 kStream << m_ppaaiUnimprovedFeatureYieldChange;42274228 kStream << (int)m_aUniqueLuxuryAreas.size();4229 for (unsigned int iI = 0; iI < m_aUniqueLuxuryAreas.size(); iI++)4230 {4231 kStream << m_aUniqueLuxuryAreas[iI];4232 }4233}