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}