Hooks
static bool BeforeCvPlayer_DoYieldBonusFromKill(CvPlayer* self, YieldTypes eYield, CvUnit* pAttackingUnit, CvUnit* pKilledUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int & iNumBonuses);static void AfterCvPlayer_DoYieldBonusFromKill(CvPlayer* self, YieldTypes eYield, CvUnit* pAttackingUnit, CvUnit* pKilledUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int & iNumBonuses);static void ReplaceCvPlayer_DoYieldBonusFromKill(void (*original)(CvPlayer*, YieldTypes, CvUnit*, CvUnit*, UnitTypes, int, int, bool, int &), CvPlayer* self, YieldTypes eYield, CvUnit* pAttackingUnit, CvUnit* pKilledUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int & iNumBonuses);CivRegisterBefore<CivHooks::CvPlayer_DoYieldBonusFromKill>(host, &BeforeCvPlayer_DoYieldBonusFromKill);CivRegisterAfter<CivHooks::CvPlayer_DoYieldBonusFromKill>(host, &AfterCvPlayer_DoYieldBonusFromKill);CivRegisterReplace<CivHooks::CvPlayer_DoYieldBonusFromKill>(host, &ReplaceCvPlayer_DoYieldBonusFromKill);
Code
10878/// Apply and show a yield bonus from a combat win10879/// If a bonus is applied, iNumBonuses must be incremented to stagger the UI text with other bonuses10880#if defined(MOD_API_UNIFIED_YIELDS)10881#if defined(MOD_API_EXTENSIONS)10882void CvPlayer::DoYieldBonusFromKill(YieldTypes eYield, CvUnit* pAttackingUnit, CvUnit* pKilledUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int &iNumBonuses)10883#else10884void CvPlayer::DoYieldBonusFromKill(YieldTypes eYield, CvUnit* pAttackingUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int &iNumBonuses)10885#endif10886#else10887#if defined(MOD_API_EXTENSIONS)10888void CvPlayer::DoYieldBonusFromKill(YieldTypes eYield, UnitTypes eAttackingUnitType, CvUnit* pKilledUnit, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int &iNumBonuses)10889#else10890void CvPlayer::DoYieldBonusFromKill(YieldTypes eYield, UnitTypes eAttackingUnitType, UnitTypes eKilledUnitType, int iX, int iY, bool bWasBarbarian, int &iNumBonuses)10891#endif10892#endif10893{10894 int iValue = 0;1089510896 CvAssertMsg(eKilledUnitType != NO_UNIT, "Killed unit's type is NO_TYPE. Please send Anton your save file and version.");10897 if (eKilledUnitType == NO_UNIT) return;1089810899 CvUnitEntry* pkKilledUnitInfo = GC.getUnitInfo(eKilledUnitType);10900 if(pkKilledUnitInfo)10901 {10902#if defined(MOD_API_EXTENSIONS)10903 int iCombatStrength = pKilledUnit ? max(pKilledUnit->GetBaseCombatStrength(), pKilledUnit->GetBaseRangedCombatStrength()) : max(pkKilledUnitInfo->GetCombat(), pkKilledUnitInfo->GetRangedCombat());10904#else10905 int iCombatStrength = max(pkKilledUnitInfo->GetCombat(), pkKilledUnitInfo->GetRangedCombat());10906#endif10907 if(iCombatStrength > 0)10908 { 10909 switch(eYield)10910 {10911 case YIELD_FOOD:10912 case YIELD_PRODUCTION:10913 // Not supported, local to a city10914 return;1091510916 case YIELD_GOLD:10917 iValue += GetPlayerPolicies()->GetNumericModifier(POLICYMOD_GOLD_FROM_KILLS);10918 break;1091910920 case YIELD_CULTURE:10921 iValue += GetPlayerTraits()->GetCultureFromKills();10922 iValue += GetPlayerPolicies()->GetNumericModifier(POLICYMOD_CULTURE_FROM_KILLS);1092310924 // Do we get it for barbarians?10925 if(bWasBarbarian)10926 {10927 iValue += GetPlayerPolicies()->GetNumericModifier(POLICYMOD_CULTURE_FROM_BARBARIAN_KILLS);10928 }10929 break;1093010931 case YIELD_FAITH:10932 iValue += GetPlayerTraits()->GetFaithFromKills();1093310934 if (eYield == YIELD_FAITH && (GC.getGame().isOption(GAMEOPTION_NO_RELIGION)))10935 {10936 return;10937 }10938 break;10939 case YIELD_SCIENCE:10940 break;10941#if defined(MOD_API_UNIFIED_YIELDS_TOURISM)10942 case YIELD_TOURISM:10943 // Not supported, as not accumulated turn-on-turn10944 break;10945#endif10946#if defined(MOD_API_UNIFIED_YIELDS_GOLDEN_AGE)10947 case YIELD_GOLDEN_AGE_POINTS:10948 break;10949#endif10950 }1095110952#if defined(MOD_API_UNIFIED_YIELDS)10953 iValue += GetYieldFromKills(eYield);10954 iValue += GetPlayerTraits()->GetYieldFromKills(eYield);10955 10956 if (bWasBarbarian) {10957 iValue += GetYieldFromBarbarianKills(eYield);10958 iValue += GetPlayerTraits()->GetYieldFromBarbarianKills(eYield);10959 }1096010961 const ReligionTypes eReligion = GetReligions()->GetReligionCreatedByPlayer(true);10962 if (eReligion >= RELIGION_PANTHEON) {10963 const CvReligion* pMyReligion = GC.getGame().GetGameReligions()->GetReligion(eReligion, GetID());10964 if (pMyReligion) {10965 iValue += pMyReligion->m_Beliefs.GetYieldFromKills(eYield);1096610967 if (bWasBarbarian) {10968 iValue += pMyReligion->m_Beliefs.GetYieldFromBarbarianKills(eYield);10969 }10970 }10971 }10972#endif1097310974 iValue += GC.getGame().GetGameReligions()->GetBeliefYieldForKill(eYield, iX, iY, GetID());1097510976#if defined(MOD_API_UNIFIED_YIELDS)10977 if(pAttackingUnit != NULL)10978#else10979 if(eAttackingUnitType != NO_UNIT)10980#endif10981 {10982#if defined(MOD_API_UNIFIED_YIELDS)10983 UnitTypes eAttackingUnitType = pAttackingUnit->getUnitType();10984#endif10985 CvUnitEntry* pkAttackingUnitInfo = GC.getUnitInfo(eAttackingUnitType);10986 if(pkAttackingUnitInfo)10987 {10988 iValue += pkAttackingUnitInfo->GetYieldFromKills(eYield);1098910990#if defined(MOD_API_UNIFIED_YIELDS)10991 iValue += pAttackingUnit->getYieldFromKills(eYield);10992 10993 // Do we get it for barbarians?10994 if(bWasBarbarian)10995 {10996 iValue += pkAttackingUnitInfo->GetYieldFromBarbarianKills(eYield);10997 iValue += pAttackingUnit->getYieldFromBarbarianKills(eYield);10998 }10999#endif11000 }11001 }1100211003 iValue = (iValue * iCombatStrength) / 100;11004 if(iValue > 0)11005 {11006 switch(eYield)11007 {11008 case YIELD_GOLD:11009 GetTreasury()->ChangeGold(iValue);11010 break;11011 case YIELD_CULTURE:11012 changeJONSCulture(iValue);11013 break;11014 case YIELD_FAITH:11015 ChangeFaith(iValue);11016 break;11017#if defined(MOD_API_UNIFIED_YIELDS)11018 case YIELD_GOLDEN_AGE_POINTS:11019 ChangeGoldenAgeProgressMeter(iValue);11020 break;11021#endif11022 case YIELD_SCIENCE:11023 TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();11024 if(eCurrentTech == NO_TECH)11025 {11026 changeOverflowResearch(iValue);11027 }11028 else11029 {11030 GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iValue, GetID());11031 }11032 break;11033 }11034 iNumBonuses++;11035 ReportYieldFromKill(eYield, iValue, iX, iY, iNumBonuses);11036 }11037 }11038 }11039}