Bazaar developer reference

CvCity::getProductionModifier(UnitTypes, CvString *) const

Defined in
CvCity.cpp, line 5521
Class
CvCity
Hook name
CivHooks::CvCity_getProductionModifier_with_UnitTypes_CvString_const

Hooks

static bool BeforeCvCity_getProductionModifier_with_UnitTypes_CvString_const(const CvCity* self, UnitTypes eUnit, CvString* toolTipSink, int& result);static void AfterCvCity_getProductionModifier_with_UnitTypes_CvString_const(const CvCity* self, UnitTypes eUnit, CvString* toolTipSink, int& result);static int ReplaceCvCity_getProductionModifier_with_UnitTypes_CvString_const(int (*original)(const CvCity*, UnitTypes, CvString*), const CvCity* self, UnitTypes eUnit, CvString* toolTipSink);CivRegisterBefore<CivHooks::CvCity_getProductionModifier_with_UnitTypes_CvString_const>(host, &BeforeCvCity_getProductionModifier_with_UnitTypes_CvString_const);CivRegisterAfter<CivHooks::CvCity_getProductionModifier_with_UnitTypes_CvString_const>(host, &AfterCvCity_getProductionModifier_with_UnitTypes_CvString_const);CivRegisterReplace<CivHooks::CvCity_getProductionModifier_with_UnitTypes_CvString_const>(host, &ReplaceCvCity_getProductionModifier_with_UnitTypes_CvString_const);

Code

5521int CvCity::getProductionModifier(UnitTypes eUnit, CvString* toolTipSink) const5522{5523	VALIDATE_OBJECT55245525	CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);5526	if(pkUnitInfo == NULL)5527	{5528		//Unit type doesn't exist!5529		return 0;5530	}55315532	CvPlayerAI& thisPlayer = GET_PLAYER(getOwner());55335534	int iMultiplier = getGeneralProductionModifiers(toolTipSink);55355536	iMultiplier += thisPlayer.getProductionModifier(eUnit, toolTipSink);55375538	int iTempMod;55395540	// Capital Settler bonus5541	if(isCapital() && pkUnitInfo->IsFound())5542	{5543		iTempMod = GET_PLAYER(getOwner()).getCapitalSettlerProductionModifier();5544		iMultiplier += iTempMod;5545		GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_CAPITAL_SETTLER_PLAYER", iTempMod);5546	}55475548	// Domain bonus5549	iTempMod = getDomainProductionModifier((DomainTypes)(pkUnitInfo->GetDomainType()));5550	iMultiplier += iTempMod;5551	if(toolTipSink && iTempMod)5552	{5553		GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_UNIT_DOMAIN", iTempMod);5554	}55555556	// UnitCombat class bonus5557	UnitCombatTypes eUnitCombatType = (UnitCombatTypes)(pkUnitInfo->GetUnitCombatType());5558	if(eUnitCombatType != NO_UNITCOMBAT)5559	{5560		iTempMod = getUnitCombatProductionModifier(eUnitCombatType);5561		iMultiplier += iTempMod;5562		if(toolTipSink && iTempMod)5563		{5564			GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_UNIT_COMBAT_TYPE", iTempMod);5565		}5566	}55675568	// Military production bonus5569	if(pkUnitInfo->IsMilitaryProduction())5570	{5571		iTempMod = getMilitaryProductionModifier();5572		iMultiplier += iTempMod;5573		if(toolTipSink && iTempMod)5574		{5575			GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_MILITARY", iTempMod);5576		}5577	}55785579	// City Space mod5580	if(pkUnitInfo->GetSpaceshipProject() != NO_PROJECT)5581	{5582		iTempMod = getSpaceProductionModifier();5583		iMultiplier += iTempMod;5584		if(toolTipSink && iTempMod)5585		{5586			GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_SPACE", iTempMod);5587		}55885589		iTempMod = thisPlayer.getSpaceProductionModifier();55905591		iMultiplier += iTempMod;5592		if(toolTipSink && iTempMod)5593		{5594			GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_SPACE_PLAYER", iTempMod);5595		}5596	}55975598	// Production bonus for having a particular building5599	iTempMod = 0;5600	int iBuildingMod = 0;5601	BuildingTypes eBuilding;5602	for(int iI = 0; iI < GC.getNumBuildingInfos(); iI++)5603	{5604		eBuilding = (BuildingTypes) iI;5605		CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);5606		if(pkBuildingInfo)5607		{5608			if(GetCityBuildings()->GetNumBuilding(eBuilding) > 0)5609			{5610				iTempMod = pkUnitInfo->GetBuildingProductionModifier(eBuilding);56115612				if(iTempMod != 0)5613				{5614#if defined(MOD_BUGFIX_MINOR)5615					iTempMod *= GetCityBuildings()->GetNumBuilding(eBuilding);5616#endif5617					iBuildingMod += iTempMod;5618					if(toolTipSink && iTempMod)5619					{5620						GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_PRODMOD_UNIT_WITH_BUILDING", iTempMod, pkBuildingInfo->GetDescription());5621					}5622				}5623			}5624		}5625	}5626	if(iBuildingMod != 0)5627	{5628		iMultiplier += iBuildingMod;5629	}56305631	return iMultiplier;5632}

Calls

Called by