Bazaar developer reference

CvPlayerTraits::Read(FDataStream &)

Defined in
CvTraitClasses.cpp, line 3581
Class
CvPlayerTraits
Hook name
CivHooks::CvPlayerTraits_Read

Hooks

static bool BeforeCvPlayerTraits_Read(CvPlayerTraits* self, FDataStream& kStream);static void AfterCvPlayerTraits_Read(CvPlayerTraits* self, FDataStream& kStream);static void ReplaceCvPlayerTraits_Read(void (*original)(CvPlayerTraits*, FDataStream&), CvPlayerTraits* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvPlayerTraits_Read>(host, &BeforeCvPlayerTraits_Read);CivRegisterAfter<CivHooks::CvPlayerTraits_Read>(host, &AfterCvPlayerTraits_Read);CivRegisterReplace<CivHooks::CvPlayerTraits_Read>(host, &ReplaceCvPlayerTraits_Read);

Code

3580/// Serialization read3581void CvPlayerTraits::Read(FDataStream& kStream)3582{3583	int iNumEntries;35843585	// Version number to maintain backwards compatibility3586	uint uiVersion;3587	kStream >> uiVersion;3588	MOD_SERIALIZE_INIT_READ(kStream);35893590	kStream >> m_iGreatPeopleRateModifier;3591	kStream >> m_iGreatScientistRateModifier;3592	kStream >> m_iGreatGeneralRateModifier;3593	kStream >> m_iGreatGeneralExtraBonus;35943595	kStream >> m_iGreatPersonGiftInfluence;35963597	kStream >> m_iLevelExperienceModifier;3598	kStream >> m_iMaxGlobalBuildingProductionModifier;3599	kStream >> m_iMaxTeamBuildingProductionModifier;3600	kStream >> m_iMaxPlayerBuildingProductionModifier;3601	kStream >> m_iCityUnhappinessModifier;3602	kStream >> m_iPopulationUnhappinessModifier;3603	kStream >> m_iCityStateBonusModifier;3604	kStream >> m_iCityStateFriendshipModifier;3605	kStream >> m_iCityStateCombatModifier;3606	kStream >> m_iLandBarbarianConversionPercent;3607	kStream >> m_iLandBarbarianConversionExtraUnits;3608	kStream >> m_iSeaBarbarianConversionPercent;3609	kStream >> m_iCapitalBuildingModifier;3610	kStream >> m_iPlotBuyCostModifier;3611#if defined(MOD_TRAITS_CITY_WORKING)3612    MOD_SERIALIZE_READ(23, kStream, m_iCityWorkingChange, 0);3613#endif3614#if defined(MOD_TRAITS_CITY_AUTOMATON_WORKERS)3615    MOD_SERIALIZE_READ(90, kStream, m_iCityAutomatonWorkersChange, 0);3616#endif3617	kStream >> m_iPlotCultureCostModifier;3618	kStream >> m_iCultureFromKills;3619	if (uiVersion >= 19)3620	{3621		kStream >> m_iFaithFromKills;3622	}3623	else3624	{3625		m_iFaithFromKills = 0;3626	}3627	kStream >> m_iCityCultureBonus;36283629	if (uiVersion >= 17)3630	{3631		kStream >> m_iCapitalThemingBonusModifier;3632	}3633	else3634	{3635		m_iCapitalThemingBonusModifier = 0;3636	}36373638	kStream >> m_iPolicyCostModifier;3639	kStream >> m_iCityConnectionTradeRouteChange;3640	kStream >> m_iWonderProductionModifier;3641	kStream >> m_iPlunderModifier;36423643	kStream >> m_iImprovementMaintenanceModifier;36443645	kStream >> m_iGoldenAgeDurationModifier;3646	kStream >> m_iGoldenAgeMoveChange;3647	kStream >> m_iGoldenAgeCombatModifier;36483649	if (uiVersion >= 2)3650	{3651		kStream >> m_iGoldenAgeTourismModifier;3652		kStream >> m_iGoldenAgeGreatArtistRateModifier;3653		kStream >> m_iGoldenAgeGreatMusicianRateModifier;3654		kStream >> m_iGoldenAgeGreatWriterRateModifier;3655	}3656	else3657	{3658		m_iGoldenAgeTourismModifier = 0;3659		m_iGoldenAgeGreatArtistRateModifier = 0;3660		m_iGoldenAgeGreatMusicianRateModifier = 0;3661		m_iGoldenAgeGreatWriterRateModifier = 0;3662	}36633664	kStream >> m_iExtraEmbarkMoves;36653666	kStream >> m_iNaturalWonderFirstFinderGold;36673668	kStream >> m_iNaturalWonderSubsequentFinderGold;36693670	kStream >> m_iNaturalWonderYieldModifier;3671	kStream >> m_iNaturalWonderHappinessModifier;36723673	kStream >> m_iNearbyImprovementCombatBonus;3674	kStream >> m_iNearbyImprovementBonusRange;36753676	kStream >> m_iCultureBuildingYieldChange;36773678	kStream >> m_iCombatBonusVsHigherTech;36793680	kStream >> m_iCombatBonusVsLargerCiv;36813682	kStream >> m_iLandUnitMaintenanceModifier;36833684	kStream >> m_iNavalUnitMaintenanceModifier;36853686	kStream >> m_iRazeSpeedModifier;36873688	kStream >> m_iDOFGreatPersonModifier;36893690	kStream >> m_iLuxuryHappinessRetention;36913692#if defined(MOD_TRAITS_EXTRA_SUPPLY)3693	MOD_SERIALIZE_READ(78, kStream, m_iExtraSupply, 0);3694	MOD_SERIALIZE_READ(78, kStream, m_iExtraSupplyPerCity, 0);3695	MOD_SERIALIZE_READ(78, kStream, m_iExtraSupplyPerPopulation, 0);3696#endif36973698	kStream >> m_iExtraSpies;36993700	kStream >> m_iUnresearchedTechBonusFromKills;37013702	if (uiVersion >= 4)3703	{3704		kStream >> m_iExtraFoundedCityTerritoryClaimRange;3705	}3706	else3707	{3708		m_iExtraFoundedCityTerritoryClaimRange = 0;3709	}37103711	if (uiVersion >= 5)3712	{3713		kStream >> m_iFreeSocialPoliciesPerEra;3714	}3715	else3716	{3717		m_iFreeSocialPoliciesPerEra = 0;3718	}37193720	if (uiVersion >= 6)3721	{3722		kStream >> m_iNumTradeRoutesModifier;3723	}3724	else3725	{3726		m_iNumTradeRoutesModifier = 0;3727	}37283729	if (uiVersion >= 8)3730	{3731		kStream >> m_iTradeRouteResourceModifier;3732	}3733	else3734	{3735		m_iTradeRouteResourceModifier = 0;3736	}37373738	if (uiVersion >= 9)3739	{3740		kStream >> m_iUniqueLuxuryCities;3741		kStream >> m_iUniqueLuxuryQuantity;3742	}3743	else3744	{3745		m_iUniqueLuxuryCities = 0;3746		m_iUniqueLuxuryQuantity = 0;3747	}37483749	if (uiVersion >= 11)3750	{3751		kStream >> m_iUniqueLuxuryCitiesPlaced;3752	}3753	else3754	{3755		m_iUniqueLuxuryCitiesPlaced = 0;3756	}37573758	if (uiVersion >= 13)3759	{3760		kStream >> m_iWorkerSpeedModifier;3761	}3762	else3763	{3764		m_iWorkerSpeedModifier = 0;3765	}37663767	if (uiVersion >= 14)3768	{3769		kStream >> m_iAfraidMinorPerTurnInfluence;3770	}3771	else3772	{3773		m_iAfraidMinorPerTurnInfluence = 0;3774	}3775	3776	if (uiVersion >= 15)3777	{3778		kStream >> m_iLandTradeRouteRangeBonus;3779		kStream >> m_iTradeReligionModifier;3780	}3781	else3782	{3783		m_iLandTradeRouteRangeBonus = 0;3784		m_iTradeReligionModifier = 0;3785	}37863787	if (uiVersion >= 16)3788	{3789		kStream >> m_iTradeBuildingModifier;3790	}3791	else3792	{3793		m_iTradeBuildingModifier = 0;3794	}37953796#if defined(MOD_TRAITS_TRADE_ROUTE_BONUSES)3797	MOD_SERIALIZE_READ(52, kStream, m_iSeaTradeRouteRangeBonus, 0);3798#endif37993800	kStream >> m_bFightWellDamaged;3801	kStream >> m_bMoveFriendlyWoodsAsRoad;3802	kStream >> m_bFasterAlongRiver;38033804	kStream >> m_bFasterInHills;38053806	kStream >> m_bEmbarkedAllWater;38073808	kStream >> m_bEmbarkedToLandFlatCost;38093810	kStream >> m_bNoHillsImprovementMaintenance;38113812	kStream >> m_bTechBoostFromCapitalScienceBuildings;3813	kStream >> m_bStaysAliveZeroCities;38143815	kStream >> m_bFaithFromUnimprovedForest;38163817#if defined(MOD_TRAITS_ANY_BELIEF)3818	MOD_SERIALIZE_READ(46, kStream, m_bAnyBelief, false);3819#endif3820	kStream >> m_bBonusReligiousBelief;38213822	kStream >> m_bAbleToAnnexCityStates;38233824	kStream >> m_bCrossesMountainsAfterGreatGeneral;3825#if defined(MOD_TRAITS_CROSSES_ICE)3826	MOD_SERIALIZE_READ(23, kStream, m_bCrossesIce, false);3827#endif3828#if defined(MOD_TRAITS_GG_FROM_BARBARIANS)3829	MOD_SERIALIZE_READ(83, kStream, m_bGGFromBarbarians, false);3830#endif38313832	kStream >> m_bMayaCalendarBonuses;3833	kStream >> m_iBaktunPreviousTurn;38343835	kStream >> iNumEntries;3836	m_aMayaBonusChoices.clear();3837	MayaBonusChoice choice;3838	for(int iI = 0; iI < iNumEntries; iI++)3839	{3840		kStream >> choice.m_eUnitType;3841		kStream >> choice.m_iBaktunJustFinished;3842		m_aMayaBonusChoices.push_back(choice);3843	}38443845	kStream >> m_bNoAnnexing;3846	if (uiVersion >= 3)3847	{3848		kStream >> m_bTechFromCityConquer;3849	}3850	else3851	{3852		m_bTechFromCityConquer = false;3853	}38543855	if (uiVersion >= 9)3856	{3857		kStream >> m_bUniqueLuxuryRequiresNewArea;3858	}3859	else3860	{3861		m_bUniqueLuxuryRequiresNewArea = false;3862	}38633864	if (uiVersion >= 12)3865	{3866		kStream >> m_bRiverTradeRoad;3867	}3868	else3869	{3870		m_bRiverTradeRoad = false;3871	}38723873	if (uiVersion >= 18)3874	{3875		kStream >> m_bAngerFreeIntrusionOfCityStates;3876	}3877	else3878	{3879		m_bAngerFreeIntrusionOfCityStates = false;3880	}38813882	kStream >> m_eCampGuardType;38833884	kStream >> m_eCombatBonusImprovement;38853886	ArrayWrapper<int> kExtraYieldThreshold(NUM_YIELD_TYPES, m_iExtraYieldThreshold);3887	kStream >> kExtraYieldThreshold;38883889	ArrayWrapper<int> kFreeCityYield(NUM_YIELD_TYPES, m_iFreeCityYield);3890	kStream >> kFreeCityYield;38913892	ArrayWrapper<int> kYieldChangeResourcesWrapper(NUM_YIELD_TYPES, m_iYieldChangeStrategicResources);3893	kStream >> kYieldChangeResourcesWrapper;38943895	ArrayWrapper<int> kYieldRateModifierWrapper(NUM_YIELD_TYPES, m_iYieldRateModifier);3896	kStream >> kYieldRateModifierWrapper;38973898	ArrayWrapper<int> kYieldChangeNaturalWonderWrapper(NUM_YIELD_TYPES, m_iYieldChangeNaturalWonder);3899	kStream >> kYieldChangeNaturalWonderWrapper;39003901	if (uiVersion >= 7)3902	{3903		ArrayWrapper<int> kYieldChangePerTradePartnerWrapper(NUM_YIELD_TYPES, m_iYieldChangePerTradePartner);3904		kStream >> kYieldChangePerTradePartnerWrapper;39053906		ArrayWrapper<int> kYieldChangeIncomingTradeRouteWrapper(NUM_YIELD_TYPES, m_iYieldChangeIncomingTradeRoute);3907		kStream >> kYieldChangeIncomingTradeRouteWrapper;3908	}3909	else3910	{3911		for(int iYield = 0; iYield < NUM_YIELD_TYPES; iYield++)3912		{3913			m_iYieldChangePerTradePartner[iYield] = 0;3914			m_iYieldChangeIncomingTradeRoute[iYield] = 0;3915		}3916	}39173918	CvAssert(GC.getNumTerrainInfos() == NUM_TERRAIN_TYPES);	// If this is not true, m_iStrategicResourceQuantityModifier must be resized dynamically3919	CvInfosSerializationHelper::ReadHashedDataArray(kStream, &m_iStrategicResourceQuantityModifier[0], GC.getNumTerrainInfos());39203921	CvInfosSerializationHelper::ReadHashedDataArray(kStream, m_aiResourceQuantityModifier);39223923	kStream >> iNumEntries;3924	m_abNoTrain.clear();3925	for (int i = 0; i < iNumEntries; i++)3926	{3927		bool bValue;3928		kStream >> bValue;3929		m_abNoTrain.push_back(bValue);3930	}39313932	kStream >> iNumEntries;3933	m_aFreeTraitUnits.clear();3934	for(int iI = 0; iI < iNumEntries; iI++)3935	{3936		FreeTraitUnit trait;3937		kStream >> trait.m_iFreeUnit;3938		kStream >> trait.m_ePrereqTech;3939		m_aFreeTraitUnits.push_back(trait);3940	}39413942	kStream >> iNumEntries;3943	for(int iI = 0; iI < iNumEntries; iI++)3944	{3945		kStream >> m_paiMovesChangeUnitCombat[iI];3946	}3947	if (uiVersion >= 10)3948	{3949		for(int iI = 0; iI < iNumEntries; iI++)3950		{3951			kStream >> m_paiMaintenanceModifierUnitCombat[iI];3952		}3953	}3954	else3955	{3956		int iNumUnitCombatClassInfos = GC.getNumUnitCombatClassInfos();3957		m_paiMaintenanceModifierUnitCombat.resize(iNumUnitCombatClassInfos);3958		for(int iI = 0; iI < iNumUnitCombatClassInfos; iI++)3959		{3960			m_paiMaintenanceModifierUnitCombat[iI] = 0;3961		}3962	}39633964	kStream >> m_ppaaiImprovementYieldChange;3965#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)3966	// MOD_SERIALIZE_READ - v57/v58/v59 broke the save format  couldn't be helped, but don't make a habit of it!!!3967	kStream >> m_ppiPlotYieldChange;3968#endif3969#if defined(MOD_API_UNIFIED_YIELDS)3970	// MOD_SERIALIZE_READ - v57/v58/v59 and v61 broke the save format  couldn't be helped, but don't make a habit of it!!!3971	kStream >> m_ppiBuildingClassYieldChange;3972	3973	ArrayWrapper<int> kCapitalYieldChangesWrapper(NUM_YIELD_TYPES, m_iCapitalYieldChanges);3974	kStream >> kCapitalYieldChangesWrapper;39753976	ArrayWrapper<int> kCityYieldChangesWrapper(NUM_YIELD_TYPES, m_iCityYieldChanges);3977	kStream >> kCityYieldChangesWrapper;39783979	ArrayWrapper<int> kCoastalCityYieldChangesWrapper(NUM_YIELD_TYPES, m_iCoastalCityYieldChanges);3980	kStream >> kCoastalCityYieldChangesWrapper;39813982	ArrayWrapper<int> kGreatWorkYieldChangesWrapper(NUM_YIELD_TYPES, m_iGreatWorkYieldChanges);3983	kStream >> kGreatWorkYieldChangesWrapper;39843985	kStream >> m_ppiFeatureYieldChange;3986	kStream >> m_ppiResourceYieldChange;3987	kStream >> m_ppiTerrainYieldChange;39883989	ArrayWrapper<int> kYieldFromKillsWrapper(NUM_YIELD_TYPES, m_iYieldFromKills);3990	kStream >> kYieldFromKillsWrapper;39913992	ArrayWrapper<int> kYieldFromBarbarianKillsWrapper(NUM_YIELD_TYPES, m_iYieldFromBarbarianKills);3993	kStream >> kYieldFromBarbarianKillsWrapper;39943995	ArrayWrapper<int> kYieldChangeTradeRouteWrapper(NUM_YIELD_TYPES, m_iYieldChangeTradeRoute);3996	kStream >> kYieldChangeTradeRouteWrapper;39973998	ArrayWrapper<int> kYieldChangeWorldWonderWrapper(NUM_YIELD_TYPES, m_iYieldChangeWorldWonder);3999	kStream >> kYieldChangeWorldWonderWrapper;40004001	kStream >> m_ppiTradeRouteYieldChange;4002#endif4003	kStream >> m_ppaaiSpecialistYieldChange;40044005#if defined(MOD_API_UNIFIED_YIELDS)4006	kStream >> m_ppiGreatPersonExpendedYield;4007	kStream >> m_piGoldenAgeGreatPersonRateModifier;4008	kStream >> m_ppiCityYieldFromUnimprovedFeature;4009#endif4010	kStream >> m_ppaaiUnimprovedFeatureYieldChange;40114012	if (uiVersion >= 11)4013	{4014		kStream >> iNumEntries;4015		m_aUniqueLuxuryAreas.clear();4016		for (int iI = 0; iI < iNumEntries; iI++)4017		{4018			int iAreaID;4019			kStream >> iAreaID;4020			m_aUniqueLuxuryAreas.push_back(iAreaID);4021		}4022	}4023	else if (uiVersion >= 9)4024	{4025		kStream >> m_aUniqueLuxuryAreas;4026	}4027	else4028	{4029		m_aUniqueLuxuryAreas.clear();4030	}4031}

Calls

Called by