Bazaar developer reference

CvUnit::upgradePrice(UnitTypes) const

Defined in
CvUnit.cpp, line 11160
Class
CvUnit
Hook name
CivHooks::CvUnit_upgradePrice

Hooks

static bool BeforeCvUnit_upgradePrice(const CvUnit* self, UnitTypes eUnit, int& result);static void AfterCvUnit_upgradePrice(const CvUnit* self, UnitTypes eUnit, int& result);static int ReplaceCvUnit_upgradePrice(int (*original)(const CvUnit*, UnitTypes), const CvUnit* self, UnitTypes eUnit);CivRegisterBefore<CivHooks::CvUnit_upgradePrice>(host, &BeforeCvUnit_upgradePrice);CivRegisterAfter<CivHooks::CvUnit_upgradePrice>(host, &AfterCvUnit_upgradePrice);CivRegisterReplace<CivHooks::CvUnit_upgradePrice>(host, &ReplaceCvUnit_upgradePrice);

Code

11159/// How much does it cost to upgrade this Unit to a shiny new eUnit?11160int CvUnit::upgradePrice(UnitTypes eUnit) const11161{11162	VALIDATE_OBJECT11163	int iPrice = 0;11164	11165	CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);11166	if(pkUnitInfo == NULL)11167	{11168		return 0;11169	}1117011171	if(isBarbarian())11172	{11173		return 0;11174	}1117511176	iPrice = /*10*/ GC.getBASE_UNIT_UPGRADE_COST();1117711178	CvPlayerAI& kPlayer = GET_PLAYER(getOwner());1117911180	iPrice += (std::max(0, (kPlayer.getProductionNeeded(eUnit) - kPlayer.getProductionNeeded(getUnitType()))) * /*2*/ GC.getUNIT_UPGRADE_COST_PER_PRODUCTION());1118111182	// Upgrades for later units are more expensive11183	const TechTypes eTech = (TechTypes) pkUnitInfo->GetPrereqAndTech();11184	CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);11185	if(pkTechInfo)11186	{11187		const EraTypes eUpgradeEra = (EraTypes) pkTechInfo->GetEra();1118811189		double fMultiplier = 1.0f;11190		fMultiplier += (eUpgradeEra* /*0.3*/ GC.getUNIT_UPGRADE_COST_MULTIPLIER_PER_ERA());1119111192		iPrice = int(iPrice * fMultiplier);11193	}1119411195	if(!isHuman() && !kPlayer.IsAITeammateOfHuman() && !isBarbarian())11196	{11197		iPrice *= GC.getGame().getHandicapInfo().getAIUnitUpgradePercent();11198		iPrice /= 100;1119911200		iPrice *= std::max(0, ((GC.getGame().getHandicapInfo().getAIPerEraModifier() * GET_TEAM(getTeam()).GetCurrentEra()) + 100));11201		iPrice /= 100;11202	}1120311204	// Discount11205	iPrice -= (iPrice * getUpgradeDiscount()) / 100;1120611207	// Mod (Policies, etc.)11208	int iMod = kPlayer.GetUnitUpgradeCostMod();11209	iPrice *= (100 + iMod);11210	iPrice /= 100;1121111212	// Apply exponent11213	iPrice = (int) pow((double) iPrice, (double) /*1.0f*/ GC.getUNIT_UPGRADE_COST_EXPONENT());1121411215	// Make the number not be funky11216	int iDivisor = /*5*/ GC.getUNIT_UPGRADE_COST_VISIBLE_DIVISOR();11217	iPrice /= iDivisor;11218	iPrice *= iDivisor;1121911220	return iPrice;11221}

Calls

Called by