Hooks
static bool BeforeCvUnit_write(const CvUnit* self, FDataStream& kStream);static void AfterCvUnit_write(const CvUnit* self, FDataStream& kStream);static void ReplaceCvUnit_write(void (*original)(const CvUnit*, FDataStream&), const CvUnit* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvUnit_write>(host, &BeforeCvUnit_write);CivRegisterAfter<CivHooks::CvUnit_write>(host, &AfterCvUnit_write);CivRegisterReplace<CivHooks::CvUnit_write>(host, &ReplaceCvUnit_write);
Code
21498void CvUnit::write(FDataStream& kStream) const21499{21500 VALIDATE_OBJECT2150121502 // Current version number21503 uint uiVersion = 9;21504 kStream << uiVersion;21505 MOD_SERIALIZE_INIT_WRITE(kStream);2150621507 kStream << m_syncArchive;2150821509 // Write out a hash for the unit type, the sync archive saved the index, which is not a good thing to do.21510 if (m_eUnitType != NO_UNIT && m_pUnitInfo)21511 kStream << FString::Hash(m_pUnitInfo->GetType());21512 else21513 kStream << (uint)0;2151421515 kStream << m_iLastMoveTurn;21516#if defined(MOD_API_UNIT_STATS)21517 MOD_SERIALIZE_WRITE(kStream, m_iStatsTravelled);21518 MOD_SERIALIZE_WRITE(kStream, m_iStatsKilled);21519#endif21520 m_Promotions.Write(kStream);21521 kStream << m_combatUnit.eOwner;21522 kStream << m_combatUnit.iID;21523 kStream << m_transportUnit.eOwner;21524 kStream << m_transportUnit.iID;21525 kStream << m_missionAIUnit.eOwner;21526 kStream << m_missionAIUnit.iID;21527 kStream << m_extraDomainModifiers;21528 kStream << m_iEverSelectedCount;21529 kStream << m_iMapLayer;21530 kStream << m_iNumGoodyHutsPopped;2153121532 // slewis - move to autovariable when saves are broken21533 kStream << m_bIgnoreDangerWakeup;21534 kStream << m_iEmbarkedAllWaterCount;21535 kStream << m_iEmbarkExtraVisibility;21536#if defined(MOD_PROMOTIONS_DEEP_WATER_EMBARKATION)21537 MOD_SERIALIZE_WRITE(kStream, m_iEmbarkedDeepWaterCount);21538#endif21539 kStream << m_iEmbarkDefensiveModifier;21540#if defined(MOD_API_EXTENSIONS)21541 MOD_SERIALIZE_WRITE(kStream, m_iBaseRangedCombat);21542#endif21543 kStream << m_iCapitalDefenseModifier;21544 kStream << m_iCapitalDefenseFalloff;21545 kStream << m_iCityAttackPlunderModifier;21546 kStream << m_iReligiousStrengthLossRivalTerritory;21547 kStream << m_iTradeMissionInfluenceModifier;21548 kStream << m_iTradeMissionGoldModifier;21549 kStream << m_iEnemyDamageChance;21550 kStream << m_iNeutralDamageChance;21551 kStream << m_iEnemyDamage;21552 kStream << m_iNeutralDamage;21553 kStream << m_iNearbyEnemyCombatMod;21554 kStream << m_iNearbyEnemyCombatRange;2155521556 kStream << m_iHealOnPillageCount;21557 kStream << m_iFlankAttackModifier;21558 kStream << m_iGoldenAgeValueFromKills;2155921560 kStream << m_iGreatGeneralReceivesMovementCount;21561 kStream << m_iGreatGeneralCombatModifier;21562 kStream << m_iIgnoreGreatGeneralBenefit;21563 kStream << m_iIgnoreZOC;21564#if defined(MOD_UNITS_NO_SUPPLY)21565 MOD_SERIALIZE_WRITE(kStream, m_iNoSupply);21566#endif21567#if defined(MOD_UNITS_MAX_HP)21568 MOD_SERIALIZE_WRITE(kStream, m_iMaxHitPointsBase);21569 MOD_SERIALIZE_WRITE(kStream, m_iMaxHitPointsChange);21570 MOD_SERIALIZE_WRITE(kStream, m_iMaxHitPointsModifier);21571#endif21572 kStream << m_iSapperCount;21573 kStream << m_iCanHeavyCharge;21574 kStream << m_iNumExoticGoods;21575#if defined(MOD_UNITS_XP_TIMES_100)21576 MOD_SERIALIZE_WRITE(kStream, m_iExperienceTimes100);21577#endif21578 kStream << m_iCityAttackOnlyCount;21579 kStream << m_iCaptureDefeatedEnemyCount;21580 kStream << m_iGreatAdmiralCount;21581#if defined(MOD_PROMOTIONS_AURA_CHANGE)21582 MOD_SERIALIZE_WRITE(kStream, m_iAuraRangeChange);21583 MOD_SERIALIZE_WRITE(kStream, m_iAuraEffectChange);21584#endif2158521586#if defined(MOD_PROMOTIONS_UNIT_NAMING)21587 MOD_SERIALIZE_WRITE(kStream, m_strUnitName);21588#endif21589 kStream << m_strName;21590#if defined(MOD_GLOBAL_NO_LOST_GREATWORKS)21591 MOD_SERIALIZE_WRITE(kStream, m_strGreatName);21592#endif2159321594 kStream << m_iScenarioData;21595 kStream << *m_pReligion;2159621597 if (m_eGreatWork != NO_GREAT_WORK)21598 {21599 Database::Connection* db = GC.GetGameDatabase();21600 Database::Results kQuery;21601 if(db && db->Execute(kQuery, "SELECT Type from GreatWorks where ID = ? LIMIT 1"))21602 {21603 kQuery.Bind(1, m_eGreatWork);2160421605 if(kQuery.Step())21606 {21607 kStream << FString::Hash(kQuery.GetText(0));21608 }21609 }21610 }21611 else21612 {21613 kStream << (uint)0;21614 }2161521616 kStream << m_iTourismBlastStrength;2161721618 // Write mission list21619 kStream << m_missionQueue.getLength();21620 for(int uIdx = 0; uIdx < m_missionQueue.getLength(); ++uIdx)21621 {21622 MissionQueueNode* pNode = m_missionQueue.getAt(uIdx);2162321624 kStream << pNode->eMissionType;21625 kStream << pNode->iData1;21626 kStream << pNode->iData2;21627 kStream << pNode->iFlags;21628 kStream << pNode->iPushTurn;21629 }21630}