Hooks
static bool BeforeCvPlot_read(CvPlot* self, FDataStream& kStream);static void AfterCvPlot_read(CvPlot* self, FDataStream& kStream);static void ReplaceCvPlot_read(void (*original)(CvPlot*, FDataStream&), CvPlot* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvPlot_read>(host, &BeforeCvPlot_read);CivRegisterAfter<CivHooks::CvPlot_read>(host, &AfterCvPlot_read);CivRegisterReplace<CivHooks::CvPlot_read>(host, &ReplaceCvPlot_read);
Code
10538//10539// read object from a stream10540// used during load10541//10542void CvPlot::read(FDataStream& kStream)10543{10544 int iCount;1054510546 // Init saved data10547 reset();1054810549 // Version number to maintain backwards compatibility10550 uint uiVersion;10551 kStream >> uiVersion;10552 CvAssertMsg(uiVersion <= g_CurrentCvPlotVersion, "Unexpected Version. This could be caused by serialization errors.");10553 MOD_SERIALIZE_INIT_READ(kStream);1055410555 kStream >> m_iX;10556 kStream >> m_iY;10557 kStream >> m_iArea;10558 kStream >> m_iFeatureVariety;10559 kStream >> m_iOwnershipDuration;10560 kStream >> m_iImprovementDuration;10561 kStream >> m_iUpgradeProgress;10562 kStream >> m_iCulture;10563 kStream >> m_iNumMajorCivsRevealed;10564 kStream >> m_iCityRadiusCount;10565 kStream >> m_iReconCount;10566 kStream >> m_iRiverCrossingCount;10567 kStream >> m_iResourceNum;10568 kStream >> m_cBuilderAIScratchPadPlayer;10569 kStream >> m_sBuilderAIScratchPadTurn;10570 kStream >> m_sBuilderAIScratchPadValue;10571 kStream >> m_eBuilderAIScratchPadRoute;10572 kStream >> m_iLandmass;10573 kStream >> m_uiTradeRouteBitFlags;1057410575 // the following members specify bit packing and do not resolve to10576 // any serializable type.10577 bool bitPackWorkaround;10578 kStream >> bitPackWorkaround;10579 m_bStartingPlot = bitPackWorkaround;10580 kStream >> bitPackWorkaround;10581 m_bHills = bitPackWorkaround;10582 kStream >> bitPackWorkaround;10583 m_bNEOfRiver = bitPackWorkaround;10584 kStream >> bitPackWorkaround;10585 m_bWOfRiver = bitPackWorkaround;10586 kStream >> bitPackWorkaround;10587 m_bNWOfRiver = bitPackWorkaround;10588 kStream >> bitPackWorkaround;10589 m_bPotentialCityWork = bitPackWorkaround;10590 kStream >> bitPackWorkaround;10591 m_bImprovementPillaged = bitPackWorkaround;10592 kStream >> bitPackWorkaround;10593 m_bRoutePillaged = bitPackWorkaround;10594 kStream >> bitPackWorkaround;10595 m_bBarbCampNotConverting = bitPackWorkaround;10596 kStream >> bitPackWorkaround;10597 m_bRoughFeature = bitPackWorkaround;10598 kStream >> bitPackWorkaround;10599 m_bResourceLinkedCityActive = bitPackWorkaround;10600 kStream >> bitPackWorkaround;10601 m_bImprovedByGiftFromMajor = bitPackWorkaround;1060210603 kStream >> m_eOwner;10604 kStream >> m_ePlotType;10605 kStream >> m_eTerrainType;10606 if (uiVersion >= 3)10607 m_eFeatureType = (FeatureTypes) CvInfosSerializationHelper::ReadHashed(kStream);10608 else10609 {10610 kStream >> m_eFeatureType;10611 if ((int)m_eFeatureType >= GC.getNumFeatureInfos())10612 m_eFeatureType = NO_FEATURE;10613 }10614 m_eResourceType = (ResourceTypes) CvInfosSerializationHelper::ReadHashed(kStream);1061510616 if(uiVersion >= 5)10617 {10618 m_eImprovementType = (ImprovementTypes) CvInfosSerializationHelper::ReadHashed(kStream);10619 }10620 else10621 {10622 kStream >> m_eImprovementType;10623 // Filter out improvements that have been removed10624 if (m_eImprovementType != NO_IMPROVEMENT)10625 if (GC.getImprovementInfo((ImprovementTypes)m_eImprovementType) == NULL)10626 m_eImprovementType = NO_IMPROVEMENT;10627 }1062810629 if (uiVersion >= 7)10630 {10631 m_eImprovementTypeUnderConstruction = (ImprovementTypes)CvInfosSerializationHelper::ReadHashed(kStream);10632 }10633 else10634 {10635 m_eImprovementTypeUnderConstruction = NO_IMPROVEMENT;10636 }1063710638 if (uiVersion >= 2)10639 {10640 kStream >> m_ePlayerBuiltImprovement;10641 }10642 else10643 {10644 m_ePlayerBuiltImprovement = NO_PLAYER;10645 }10646 kStream >> m_ePlayerResponsibleForImprovement;10647 kStream >> m_ePlayerResponsibleForRoute;10648 kStream >> m_ePlayerThatClearedBarbCampHere;10649 kStream >> m_eRouteType;10650#if defined(MOD_GLOBAL_STACKING_RULES)10651 MOD_SERIALIZE_READ(30, kStream, m_eUnitIncrement, 0);10652#endif10653 kStream >> m_eWorldAnchor;10654 kStream >> m_cWorldAnchorData;1065510656 kStream >> m_eRiverEFlowDirection;10657 kStream >> m_eRiverSEFlowDirection;10658 kStream >> m_eRiverSWFlowDirection;1065910660 kStream >> m_plotCity.eOwner;10661 kStream >> m_plotCity.iID;10662 kStream >> m_workingCity.eOwner;10663 kStream >> m_workingCity.iID;10664 kStream >> m_workingCityOverride.eOwner;10665 kStream >> m_workingCityOverride.iID;10666 kStream >> m_ResourceLinkedCity.eOwner;10667 kStream >> m_ResourceLinkedCity.iID;10668 kStream >> m_purchaseCity.eOwner;10669 kStream >> m_purchaseCity.iID;1067010671 for(uint i = 0; i < NUM_YIELD_TYPES; i++)10672 kStream >> m_aiYield[i];1067310674 for(uint i = 0; i < REALLY_MAX_PLAYERS; i++)10675 kStream >> m_aiFoundValue[i];1067610677 for(uint i = 0; i < REALLY_MAX_PLAYERS; i++)10678 kStream >> m_aiPlayerCityRadiusCount[i];1067910680 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10681 {10682 kStream >> m_aiVisibilityCount[i];10683 if (m_aiVisibilityCount[i] < 0)10684 m_aiVisibilityCount[i] = 0;10685 }1068610687 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10688 kStream >> m_aiRevealedOwner[i];1068910690 kStream >> m_cRiverCrossing;1069110692 for(uint i = 0; i<PlotBoolField::eCount; ++i)10693 {10694 kStream >> m_bfRevealed.m_dwBits[i];10695 }1069610697 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10698 kStream >> m_abResourceForceReveal[i];1069910700 if (uiVersion >= 6)10701 {10702 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10703 m_aeRevealedImprovementType[i] = (ImprovementTypes) CvInfosSerializationHelper::ReadHashed(kStream);10704 }10705 else10706 {10707 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10708 {10709 kStream >> m_aeRevealedImprovementType[i];10710 if (m_aeRevealedImprovementType[i] != NO_IMPROVEMENT)10711 if (GC.getImprovementInfo((ImprovementTypes)m_aeRevealedImprovementType[i]) == NULL)10712 m_aeRevealedImprovementType[i] = NO_IMPROVEMENT;10713 }10714 }1071510716 for(uint i = 0; i < REALLY_MAX_TEAMS; i++)10717 kStream >> m_aeRevealedRouteType[i];1071810719 for(uint i = 0; i < MAX_MAJOR_CIVS; i++)10720 kStream >> m_abNoSettling[i];1072110722 bool hasScriptData = false;10723 kStream >> hasScriptData;10724 if(hasScriptData)10725 {10726 std::string scriptData;10727 kStream >> scriptData;10728 setScriptData(scriptData.c_str());10729 }1073010731 SAFE_DELETE_ARRAY(m_paiBuildProgress);10732 kStream >> iCount;10733 if(iCount > 0)10734 {10735 const int iNumBuildInfos = GC.getNumBuildInfos();10736 m_paiBuildProgress = FNEW(short[iNumBuildInfos], c_eCiv5GameplayDLL, 0);10737 ZeroMemory(m_paiBuildProgress, sizeof(short) * iNumBuildInfos);10738 10739 BuildArrayHelpers::Read(kStream, m_paiBuildProgress);10740 }1074110742 kStream >> m_apaiInvisibleVisibilityCount;1074310744 //m_units.Read(kStream);10745 UINT uLength;10746 kStream >> uLength;10747 for(UINT uIdx = 0; uIdx < uLength; ++uIdx)10748 {10749 IDInfo Data;1075010751 kStream >> Data.eOwner;10752 kStream >> Data.iID;1075310754 m_units.insertAtEnd(&Data);10755 }1075610757 kStream >> m_cContinentType;10758 kStream >> m_kArchaeologyData;1075910760 updateImpassable();10761}