Bazaar developer reference

CvUnitEntry::CacheResults(Database::Results &, CvDatabaseUtility &)

Defined in
CvUnitClasses.cpp, line 173
Class
CvUnitEntry
Hook name
CivHooks::CvUnitEntry_CacheResults
Overrides
CvBaseInfo::CacheResults(Database::Results &, CvDatabaseUtility &)

Hooks

static bool BeforeCvUnitEntry_CacheResults(CvUnitEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvUnitEntry_CacheResults(CvUnitEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvUnitEntry_CacheResults(bool (*original)(CvUnitEntry*, Database::Results&, CvDatabaseUtility&), CvUnitEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvUnitEntry_CacheResults>(host, &BeforeCvUnitEntry_CacheResults);CivRegisterAfter<CivHooks::CvUnitEntry_CacheResults>(host, &AfterCvUnitEntry_CacheResults);CivRegisterReplace<CivHooks::CvUnitEntry_CacheResults>(host, &ReplaceCvUnitEntry_CacheResults);

Code

173bool CvUnitEntry::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)174{175	if(!CvBaseInfo::CacheResults(kResults, kUtility))176		return false;177178	//Basic Properties179	m_iProductionCost = kResults.GetInt("Cost");180	m_iFaithCost = kResults.GetInt("FaithCost");181	m_bRequiresFaithPurchaseEnabled = kResults.GetBool("RequiresFaithPurchaseEnabled");182#if defined(MOD_GLOBAL_EXCLUDE_FROM_GIFTS)183	if (MOD_GLOBAL_EXCLUDE_FROM_GIFTS) {184		m_bNoMinorGifts = kResults.GetBool("NoMinorGifts");185	}186#endif187	m_bPurchaseOnly = kResults.GetBool("PurchaseOnly");188	m_bMoveAfterPurchase = kResults.GetBool("MoveAfterPurchase");189#if defined(MOD_GLOBAL_MOVE_AFTER_UPGRADE)190	if (MOD_GLOBAL_MOVE_AFTER_UPGRADE) {191		m_bMoveAfterUpgrade = kResults.GetBool("MoveAfterUpgrade");192	}193#endif194#if defined(MOD_GLOBAL_CANNOT_EMBARK)195	if (MOD_GLOBAL_CANNOT_EMBARK) {196		m_bCannotEmbark = kResults.GetBool("CannotEmbark");197	}198#endif199	m_iHurryCostModifier = kResults.GetInt("HurryCostModifier");200	m_iAdvancedStartCost = kResults.GetInt("AdvancedStartCost");201	m_iMinAreaSize = kResults.GetInt("MinAreaSize");202	m_iMoves = kResults.GetInt("Moves");203	m_bMoves = kResults.GetInt("Immobile");204	m_iBaseSightRange = kResults.GetInt("BaseSightRange");205	m_iRange = kResults.GetInt("Range");206	m_iAirInterceptRange = kResults.GetInt("AirInterceptRange");207	m_iAirUnitCap = kResults.GetInt("AirUnitCap");208	m_iNukeDamageLevel = kResults.GetInt("NukeDamageLevel");209	m_iWorkRate = kResults.GetInt("WorkRate");210	m_iNumFreeTechs = kResults.GetInt("NumFreeTechs");211	m_iBaseBeakersTurnsToCount = kResults.GetInt("BaseBeakersTurnsToCount");212	m_iBaseCultureTurnsToCount = kResults.GetInt("BaseCultureTurnsToCount");213	m_iBaseHurry = kResults.GetInt("BaseHurry");214	m_iHurryMultiplier = kResults.GetInt("HurryMultiplier");215	m_bRushBuilding= kResults.GetInt("RushBuilding");216	m_iBaseGold = kResults.GetInt("BaseGold");217	m_iNumGoldPerEra = kResults.GetInt("NumGoldPerEra");218	m_bSpreadReligion = kResults.GetBool("SpreadReligion");219	m_bRemoveHeresy = kResults.GetBool("RemoveHeresy");220	m_iReligionSpreads = kResults.GetInt("ReligionSpreads");221	m_iReligiousStrength = kResults.GetInt("ReligiousStrength");222	m_bFoundReligion = kResults.GetBool("FoundReligion");223	m_bRequiresEnhancedReligion = kResults.GetBool("RequiresEnhancedReligion");224	m_bProhibitsSpread = kResults.GetBool("ProhibitsSpread");225	m_bCanBuyCityState = kResults.GetBool("CanBuyCityState");226#if defined(MOD_GLOBAL_SEPARATE_GREAT_ADMIRAL)227	if (MOD_GLOBAL_SEPARATE_GREAT_ADMIRAL) {228		m_bCanRepairFleet = kResults.GetBool("CanRepairFleet");229		m_bCanChangePort = kResults.GetBool("CanChangePort");230	}231#endif232	m_iCombat = kResults.GetInt("Combat");233	m_iCombatLimit = kResults.GetInt("CombatLimit");234	m_iRangedCombat = kResults.GetInt("RangedCombat");235	m_iRangedCombatLimit = kResults.GetInt("RangedCombatLimit");236#if defined(MOD_UNITS_NO_SUPPLY)237	if (MOD_UNITS_NO_SUPPLY) {238		m_bNoSupply = (kResults.GetInt("NoSupply") != 0);239	}240#endif241#if defined(MOD_UNITS_MAX_HP)242	if (MOD_UNITS_MAX_HP) {243		m_iMaxHitPoints = kResults.GetInt("MaxHitPoints");244	} else {245		m_iMaxHitPoints = GC.getMAX_HIT_POINTS();246	}247#endif248	m_iXPValueAttack = kResults.GetInt("XPValueAttack");249	m_iXPValueDefense = kResults.GetInt("XPValueDefense");250	m_iConscriptionValue = kResults.GetInt("Conscription");251	m_iExtraMaintenanceCost = kResults.GetInt("ExtraMaintenanceCost");252	m_bNoMaintenance = kResults.GetBool("NoMaintenance");253	m_iUnhappiness = kResults.GetInt("Unhappiness");254	m_iUnitFlagIconOffset = kResults.GetInt("UnitFlagIconOffset");255	m_iUnitPortraitOffset = kResults.GetInt("PortraitIndex");256	m_iLeaderExperience = kResults.GetInt("LeaderExperience");257	m_bFoodProduction = kResults.GetBool("Food");258	m_bNoBadGoodies = kResults.GetBool("NoBadGoodies");259	m_bRivalTerritory = kResults.GetBool("RivalTerritory");260	m_bMilitarySupport = kResults.GetBool("MilitarySupport");261	m_bMilitaryProduction = kResults.GetBool("MilitaryProduction");262	m_bPillage = kResults.GetBool("Pillage");263	m_bFound = kResults.GetBool("Found");264	m_bFoundAbroad = kResults.GetBool("FoundAbroad");265	m_iCultureBombRadius = kResults.GetInt("CultureBombRadius");266	m_iGoldenAgeTurns = kResults.GetInt("GoldenAgeTurns");267	m_iFreePolicies = kResults.GetInt("FreePolicies");268	m_iOneShotTourism = kResults.GetInt("OneShotTourism");269	m_iOneShotTourismPercentOthers = kResults.GetInt("OneShotTourismPercentOthers");270	m_bIgnoreBuildingDefense = kResults.GetBool("IgnoreBuildingDefense");271	m_bPrereqResources = kResults.GetBool("PrereqResources");272	m_bMechanized = kResults.GetBool("Mechanized");273	m_bSuicide = kResults.GetBool("Suicide");274	m_bCaptureWhileEmbarked = kResults.GetBool("CaptureWhileEmbarked");275	m_bRangeAttackOnlyInDomain = kResults.GetBool("RangeAttackOnlyInDomain");276	m_bTrade = kResults.GetBool("Trade");277	m_iNumExoticGoods = kResults.GetInt("NumExoticGoods");278279	m_strUnitArtInfoTag = kResults.GetText("UnitArtInfo");280	m_bUnitArtInfoCulturalVariation = kResults.GetBool("UnitArtInfoCulturalVariation");281	m_bUnitArtInfoEraVariation = kResults.GetBool("UnitArtInfoEraVariation");282283	//References284	const char* szTextVal = NULL;285	szTextVal = kResults.GetText("Class");286	m_iUnitClassType = GC.getInfoTypeForString(szTextVal, true);287288	szTextVal = kResults.GetText("Special");289	m_iSpecialUnitType = GC.getInfoTypeForString(szTextVal, true);290291	szTextVal = kResults.GetText("Capture");292	m_iUnitCaptureClassType = GC.getInfoTypeForString(szTextVal, true);293294	szTextVal = kResults.GetText("CombatClass");295	m_iUnitCombatType = GC.getInfoTypeForString(szTextVal, true);296297#if defined(MOD_GLOBAL_PROMOTION_CLASSES)298	szTextVal = kResults.GetText("PromotionClass");299	m_iUnitPromotionType = GC.getInfoTypeForString(szTextVal, true);300301	if (m_iUnitPromotionType == NO_UNITCOMBAT || !MOD_GLOBAL_PROMOTION_CLASSES) {302		m_iUnitPromotionType = m_iUnitCombatType;303	}304#endif305306#if defined(MOD_EVENTS_CAN_MOVE_INTO)307	m_bSendCanMoveIntoEvent = kResults.GetBool("SendCanMoveIntoEvent");308#endif309310	szTextVal = kResults.GetText("Domain");311	m_iDomainType = GC.getInfoTypeForString(szTextVal, true);312313	szTextVal = kResults.GetText("CivilianAttackPriority");314	m_iCivilianAttackPriority = GC.getInfoTypeForString(szTextVal, true);315316	szTextVal = kResults.GetText("DefaultUnitAI");317	m_iDefaultUnitAIType = GC.getInfoTypeForString(szTextVal, true);318319	szTextVal = kResults.GetText("PillagePrereqTech");320	m_iPrereqPillageTech = GC.getInfoTypeForString(szTextVal, true);321	322	szTextVal = kResults.GetText("PrereqTech");323	m_iPrereqAndTech = GC.getInfoTypeForString(szTextVal, true);324325	szTextVal = kResults.GetText("ObsoleteTech");326	m_iObsoleteTech = GC.getInfoTypeForString(szTextVal, true);327328	szTextVal = kResults.GetText("PolicyType");329	m_iPolicyType = GC.getInfoTypeForString(szTextVal, true);330331	szTextVal = kResults.GetText("GoodyHutUpgradeUnitClass");332	m_iGoodyHutUpgradeUnitClass = GC.getInfoTypeForString(szTextVal, true);333334	szTextVal = kResults.GetText("SpecialCargo");335	m_iSpecialCargo = GC.getInfoTypeForString(szTextVal, true);336337	szTextVal = kResults.GetText("DomainCargo");338	m_iDomainCargo = GC.getInfoTypeForString(szTextVal, true);339340	szTextVal = kResults.GetText("ProjectPrereq");341	m_iProjectPrereq = GC.getInfoTypeForString(szTextVal, true);342343	szTextVal = kResults.GetText("SpaceshipProject");344	m_iSpaceshipProject = GC.getInfoTypeForString(szTextVal, true);345346	szTextVal = kResults.GetText("LeaderPromotion");347	m_iLeaderPromotion = GC.getInfoTypeForString(szTextVal, true);348349	//Arrays350	const char* szUnitType = GetType();351352	kUtility.SetFlavors(m_piFlavorValue, "Unit_Flavors", "UnitType", szUnitType);353354	kUtility.PopulateArrayByValue(m_piProductionTraits, "Traits", "Unit_ProductionTraits", "TraitType", "UnitType", szUnitType, "Trait");355356	kUtility.PopulateArrayByValue(m_piResourceQuantityRequirements, "Resources", "Unit_ResourceQuantityRequirements", "ResourceType", "UnitType", szUnitType, "Cost");357	kUtility.PopulateArrayByValue(m_piProductionModifierBuildings, "Buildings", "Unit_ProductionModifierBuildings", "BuildingType", "UnitType", szUnitType, "ProductionModifier");358	kUtility.PopulateArrayByValue(m_piYieldFromKills, "Yields", "Unit_YieldFromKills", "YieldType", "UnitType", szUnitType, "Yield");359#if defined(MOD_API_UNIFIED_YIELDS)360	kUtility.PopulateArrayByValue(m_piYieldFromBarbarianKills, "Yields", "Unit_YieldFromBarbarianKills", "YieldType", "UnitType", szUnitType, "Yield");361#endif362	kUtility.PopulateArrayByExistence(m_pbFreePromotions, "UnitPromotions", "Unit_FreePromotions", "PromotionType", "UnitType", szUnitType);363364	kUtility.PopulateArrayByExistence(m_pbUpgradeUnitClass, "UnitClasses", "Unit_ClassUpgrades", "UnitClassType", "UnitType", szUnitType);365366	kUtility.PopulateArrayByExistence(m_pbUnitAIType, "UnitAIInfos", "Unit_AITypes", "UnitAIType", "UnitType", szUnitType);367	kUtility.PopulateArrayByExistence(m_pbNotUnitAIType, "UnitAIInfos", "Unit_NotAITypes", "UnitAIType", "UnitType", szUnitType);368369	kUtility.PopulateArrayByExistence(m_pbBuilds, "Builds", "Unit_Builds", "BuildType", "UnitType", szUnitType);370	kUtility.PopulateArrayByExistence(m_pbGreatPeoples, "Specialists", "Unit_GreatPersons", "GreatPersonType", "UnitType", szUnitType);371	kUtility.PopulateArrayByExistence(m_pbBuildings, "Buildings", "Unit_Buildings", "BuildingType", "UnitType", szUnitType);372	kUtility.PopulateArrayByExistence(m_pbBuildingClassRequireds, "BuildingClasses", "Unit_BuildingClassRequireds", "BuildingClassType", "UnitType", szUnitType);373374	//TechTypes375	{376		//Initialize array to NO_TECH377		kUtility.InitializeArray(m_piPrereqAndTechs, "Technologies", (int)NO_TECH);378379		std::string strKey = "Units - TechTypes";380		Database::Results* pResults = kUtility.GetResults(strKey);381		if(pResults == NULL)382		{383			pResults = kUtility.PrepareResults(strKey, "select Technologies.ID from Unit_TechTypes inner join Technologies on TechType = Technologies.Type where UnitType = ?");384		}385386		pResults->Bind(1, szUnitType, -1, false);387388		int i = 0;389		while(pResults->Step())390		{391			m_piPrereqAndTechs[i++] = pResults->GetInt(0);392		}393394		pResults->Reset();395	}396397	//Unit Unique Names Count398	{399		std::string strKey = "Units - UniqueNameCount";400		Database::Results* pUnitNameCount = kUtility.GetResults(strKey);401		if(pUnitNameCount == NULL)402		{403			pUnitNameCount = kUtility.PrepareResults(strKey, "select count(*) from Unit_UniqueNames where UnitType = ?");404		}405406		pUnitNameCount->Bind(1, szUnitType, -1, false);407408		pUnitNameCount->Step();409		m_iNumUnitNames = pUnitNameCount->GetInt(0);410411		pUnitNameCount->Reset();412	}413414	//Unit Unique Names415	{416		if(m_iNumUnitNames > 0)417		{418			m_paszUnitNames = FNEW(CvString[m_iNumUnitNames], c_eCiv5GameplayDLL, 0);419			m_paeGreatWorks = FNEW(GreatWorkType[m_iNumUnitNames], c_eCiv5GameplayDLL, 0);420421			std::string strKey = "Units - UniqueNames";422			Database::Results* pResults = kUtility.GetResults(strKey);423			if(pResults == NULL)424			{425				pResults = kUtility.PrepareResults(strKey, "select UniqueName, GreatWorkType from Unit_UniqueNames where UnitType = ? ORDER BY rowid");426			}427428			pResults->Bind(1, szUnitType, -1, false);429430			int i = 0;431			while(pResults->Step())432			{433				m_paszUnitNames[i] = pResults->GetText(0);434			435				const char* szGreatWorkType = pResults->GetText(1);436				if(szGreatWorkType == NULL)437				{438					m_paeGreatWorks[i] = NO_GREAT_WORK;439				}440				else441				{442					m_paeGreatWorks[i] = static_cast<GreatWorkType>(GC.getInfoTypeForString(szGreatWorkType, true));443				}444445				i++;446			}447448			pResults->Reset();449		}450	}451452	//MovementRates453	{454		std::string strKey = "Units - MovementRates";455		Database::Results* pMovementRates = kUtility.GetResults(strKey);456		if(pMovementRates == NULL)457		{458			pMovementRates = kUtility.PrepareResults(strKey, "SELECT * FROM MovementRates where Type = ? ORDER BY NumHexes");459		}460461		const char* szMovementRate = kResults.GetText("MoveRate");462		pMovementRates->Bind(1, szMovementRate, -1, false);463		while(pMovementRates->Step())464		{465			int f0 = pMovementRates->GetInt("NumHexes") - 1;466			float f1 = pMovementRates->GetFloat("TotalTime");467			float f2 = pMovementRates->GetFloat("EaseIn");468			float f3 = pMovementRates->GetFloat("EaseOut");469			float f4 = pMovementRates->GetFloat("IndividualOffset");470			float f5 = pMovementRates->GetFloat("RowOffset");471			float f6 = pMovementRates->GetFloat("CurveRoll");472			int   iPathSubdivision = pMovementRates->GetInt("PathSubdivision");473			if(f0 >= 0 && f0 <= 11)474			{475				m_unitMoveRate[f0].m_fTotalMoveRate    = f1;476				m_unitMoveRate[f0].m_fEaseIn           = f2;477				m_unitMoveRate[f0].m_fEaseOut          = f3;478				m_unitMoveRate[f0].m_fIndividualOffset = f4;479				m_unitMoveRate[f0].m_fRowOffset        = f5;480				m_unitMoveRate[f0].m_fCurveRoll        = f6;481				m_unitMoveRate[f0].m_iPathSubdivision  = iPathSubdivision;482			}483		}484		pMovementRates->Reset();485486	}487488	// Calculate military Power and cache it489	DoUpdatePower();490491	return true;492}

Calls