Bazaar developer reference

CvUnit::read(FDataStream &)

Defined in
CvUnit.cpp, line 21272
Class
CvUnit
Hook name
CivHooks::CvUnit_read

Hooks

static bool BeforeCvUnit_read(CvUnit* self, FDataStream& kStream);static void AfterCvUnit_read(CvUnit* self, FDataStream& kStream);static void ReplaceCvUnit_read(void (*original)(CvUnit*, FDataStream&), CvUnit* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvUnit_read>(host, &BeforeCvUnit_read);CivRegisterAfter<CivHooks::CvUnit_read>(host, &AfterCvUnit_read);CivRegisterReplace<CivHooks::CvUnit_read>(host, &ReplaceCvUnit_read);

Code

21272void CvUnit::read(FDataStream& kStream)21273{21274	VALIDATE_OBJECT21275	// Init data before load21276	reset();2127721278	// Version number to maintain backwards compatibility21279	uint uiVersion;21280	kStream >> uiVersion;21281	MOD_SERIALIZE_INIT_READ(kStream);2128221283	// all FAutoVariables in the m_syncArchive will be read21284	// automagically, no need to explicitly load them here21285	kStream >> m_syncArchive;2128621287	// anything not in m_syncArchive needs to be explicitly21288	// read2128921290	// The 'automagic' sync archive saves out the unit type index, which is bad since that can change.21291	// Read in the hash and update the value.21292	{21293		uint idUnitType;21294		kStream >> idUnitType;21295		if (idUnitType != 0)21296		{21297			UnitTypes eUnitIndex = (UnitTypes)GC.getInfoTypeForHash(idUnitType);21298			if (NO_UNIT != eUnitIndex)21299				m_eUnitType = eUnitIndex;21300		}21301	}2130221303	kStream >> m_iLastMoveTurn;21304#if defined(MOD_API_UNIT_STATS)21305	MOD_SERIALIZE_READ(73, kStream, m_iStatsTravelled, 0);21306	MOD_SERIALIZE_READ(73, kStream, m_iStatsKilled, 0);21307#endif21308	m_Promotions.Read(kStream);21309	m_pUnitInfo = (NO_UNIT != m_eUnitType) ? GC.getUnitInfo(m_eUnitType) : NULL;21310	kStream >> m_combatUnit.eOwner;21311	kStream >> m_combatUnit.iID;21312	kStream >> m_transportUnit.eOwner;21313	kStream >> m_transportUnit.iID;21314	kStream >> m_missionAIUnit.eOwner;21315	kStream >> m_missionAIUnit.iID;21316	kStream >> m_extraDomainModifiers;21317	kStream >> m_iEverSelectedCount;21318	kStream >> m_iMapLayer;21319	if (uiVersion >= 9)21320	{21321		kStream >> m_iNumGoodyHutsPopped;21322	}21323	else21324	{21325		m_iNumGoodyHutsPopped = 0;21326	}2132721328	kStream >> m_bIgnoreDangerWakeup;2132921330	kStream >> m_iEmbarkedAllWaterCount;21331	kStream >> m_iEmbarkExtraVisibility;2133221333#if defined(MOD_PROMOTIONS_DEEP_WATER_EMBARKATION)21334	MOD_SERIALIZE_READ(23, kStream, m_iEmbarkedDeepWaterCount, 0);21335#endif21336	kStream >> m_iEmbarkDefensiveModifier;2133721338#if defined(MOD_API_EXTENSIONS)21339	MOD_SERIALIZE_READ(58, kStream, m_iBaseRangedCombat, ((NO_UNIT != m_eUnitType) ? m_pUnitInfo->GetRangedCombat() : 0));21340#endif2134121342	kStream >> m_iCapitalDefenseModifier;21343	kStream >> m_iCapitalDefenseFalloff;2134421345	kStream >> m_iCityAttackPlunderModifier;2134621347	kStream >> m_iReligiousStrengthLossRivalTerritory;2134821349	kStream >> m_iTradeMissionInfluenceModifier;21350	kStream >> m_iTradeMissionGoldModifier;2135121352	kStream >> m_iEnemyDamageChance;21353	kStream >> m_iNeutralDamageChance;2135421355	kStream >> m_iEnemyDamage;21356	kStream >> m_iNeutralDamage;2135721358	kStream >> m_iNearbyEnemyCombatMod;21359	kStream >> m_iNearbyEnemyCombatRange;2136021361	kStream >> m_iHealOnPillageCount;21362	kStream >> m_iFlankAttackModifier;2136321364	if (uiVersion >= 3)21365	{21366		kStream >> m_iGoldenAgeValueFromKills;21367	}21368	else21369	{21370		m_iGoldenAgeValueFromKills = 0;21371	}2137221373	kStream >> m_iGreatGeneralReceivesMovementCount;21374	kStream >> m_iGreatGeneralCombatModifier;21375	kStream >> m_iIgnoreGreatGeneralBenefit;2137621377	if (uiVersion >= 8)21378	{21379		kStream >> m_iIgnoreZOC;21380	}21381	else21382	{21383		m_iIgnoreZOC = 0;21384	}2138521386#if defined(MOD_UNITS_NO_SUPPLY)21387	MOD_SERIALIZE_READ(77, kStream, m_iNoSupply, 0);21388#endif2138921390#if defined(MOD_UNITS_MAX_HP)21391	MOD_SERIALIZE_READ(78, kStream, m_iMaxHitPointsBase, m_pUnitInfo->GetMaxHitPoints());21392	MOD_SERIALIZE_READ(77, kStream, m_iMaxHitPointsChange, 0);21393	MOD_SERIALIZE_READ(77, kStream, m_iMaxHitPointsModifier, 0)21394#endif2139521396	if (uiVersion >= 2)21397	{21398		kStream >> m_iSapperCount;21399	}21400	else21401	{21402		m_iSapperCount = 0;21403	}2140421405	kStream >> m_iCanHeavyCharge;2140621407	if (uiVersion >= 5)21408	{21409		kStream >> m_iNumExoticGoods;21410	}21411	else21412	{21413		m_iNumExoticGoods = 0;21414	}2141521416#if defined(MOD_UNITS_XP_TIMES_100)21417	MOD_SERIALIZE_READ(74, kStream, m_iExperienceTimes100, m_iExperience * 100);21418#endif2141921420	kStream >> m_iCityAttackOnlyCount;2142121422	kStream >> m_iCaptureDefeatedEnemyCount;2142321424	kStream >> m_iGreatAdmiralCount;2142521426#if defined(MOD_PROMOTIONS_AURA_CHANGE)21427	MOD_SERIALIZE_READ(83, kStream, m_iAuraRangeChange, 0);21428	MOD_SERIALIZE_READ(83, kStream, m_iAuraEffectChange, 0);21429#endif2143021431#if defined(MOD_PROMOTIONS_UNIT_NAMING)21432	MOD_SERIALIZE_READ(46, kStream, m_strUnitName, getNameKey());21433#endif21434	kStream >> m_strName;21435#if defined(MOD_GLOBAL_NO_LOST_GREATWORKS)21436	MOD_SERIALIZE_READ(84, kStream, m_strGreatName, "");21437#endif2143821439	kStream >> m_iScenarioData;2144021441	kStream >> *m_pReligion;2144221443	m_eGreatWork = NO_GREAT_WORK;21444	if(uiVersion > 3)21445	{21446		if(uiVersion > 5)21447		{21448			uint uiGreatWorkType = 0;21449			kStream >> uiGreatWorkType;21450			21451			if (uiGreatWorkType != 0)21452			{21453				m_eGreatWork = (GreatWorkType)GC.getInfoTypeForHash(uiGreatWorkType);21454			}21455		}21456		else21457		{21458			CvString strGreatWorkType;21459			kStream >> strGreatWorkType;21460			m_eGreatWork = static_cast<GreatWorkType>(GC.getInfoTypeForString(strGreatWorkType.c_str()));21461		}21462	}2146321464	if (uiVersion >= 7)21465	{21466		kStream >> m_iTourismBlastStrength;21467	}21468	else21469	{21470		m_iTourismBlastStrength = 0;21471	}2147221473	//  Read mission queue21474	UINT uSize;21475	kStream >> uSize;21476	for(UINT uIdx = 0; uIdx < uSize; ++uIdx)21477	{21478		MissionQueueNode Node;2147921480		kStream >> Node.eMissionType;21481		kStream >> Node.iData1;21482		kStream >> Node.iData2;21483		kStream >> Node.iFlags;21484		kStream >> Node.iPushTurn;2148521486		m_missionQueue.insertAtEnd(&Node);21487	}2148821489	// Re-attach to the map layer.21490	if (m_iMapLayer != DEFAULT_UNIT_MAP_LAYER)21491	{21492		GC.getMap().plotManager().AddUnit(GetIDInfo(), m_iX, m_iY, m_iMapLayer);21493	}21494}

Calls

Called by