Bazaar developer reference

CvPlayer::DoGreatPersonExpended(UnitTypes, CvUnit *)

Defined in
CvPlayer.cpp, line 14402
Class
CvPlayer
Hook name
CivHooks::CvPlayer_DoGreatPersonExpended
Lua events
GameEvents.GreatPersonExpended

Hooks

static bool BeforeCvPlayer_DoGreatPersonExpended(CvPlayer* self, UnitTypes eGreatPersonUnit, CvUnit* pGreatPersonUnit);static void AfterCvPlayer_DoGreatPersonExpended(CvPlayer* self, UnitTypes eGreatPersonUnit, CvUnit* pGreatPersonUnit);static void ReplaceCvPlayer_DoGreatPersonExpended(void (*original)(CvPlayer*, UnitTypes, CvUnit*), CvPlayer* self, UnitTypes eGreatPersonUnit, CvUnit* pGreatPersonUnit);CivRegisterBefore<CivHooks::CvPlayer_DoGreatPersonExpended>(host, &BeforeCvPlayer_DoGreatPersonExpended);CivRegisterAfter<CivHooks::CvPlayer_DoGreatPersonExpended>(host, &AfterCvPlayer_DoGreatPersonExpended);CivRegisterReplace<CivHooks::CvPlayer_DoGreatPersonExpended>(host, &ReplaceCvPlayer_DoGreatPersonExpended);

Code

14400/// Do effects when a GP is consumed14401#if defined(MOD_EVENTS_GREAT_PEOPLE)14402void CvPlayer::DoGreatPersonExpended(UnitTypes eGreatPersonUnit, CvUnit* pGreatPersonUnit)14403#else14404void CvPlayer::DoGreatPersonExpended(UnitTypes eGreatPersonUnit)14405#endif14406{14407	// Gold gained14408	int iExpendGold = GetGreatPersonExpendGold();14409	if(iExpendGold > 0)14410	{14411		GetTreasury()->ChangeGold(iExpendGold);1441214413#if !defined(NO_ACHIEVEMENTS)14414		if(isHuman() && !GC.getGame().isGameMultiPlayer() && GET_PLAYER(GC.getGame().getActivePlayer()).isLocalPlayer())14415		{14416			// Update Steam stat and check achievement14417			const int HALICARNASSUS_ACHIEVEMENT_GOLD = 1000;14418			int iHalicarnassus = GC.getInfoTypeForString("BUILDINGCLASS_MAUSOLEUM_HALICARNASSUS");14419			// Does player have DLC_06, and if so, do they have the Mausoleum of Halicarnassus?14420			if(iHalicarnassus != -1 && getBuildingClassCount((BuildingClassTypes)iHalicarnassus) >= 1)14421			{14422				BuildingTypes eHalicarnassus = (BuildingTypes)GC.getInfoTypeForString("BUILDING_MAUSOLEUM_HALICARNASSUS");14423				CvBuildingEntry* pHalicarnassusInfo = GC.getBuildingInfo(eHalicarnassus);14424				int iHalicarnassusGold = pHalicarnassusInfo->GetGreatPersonExpendGold();1442514426				int32 iTotalHalicarnassusGold = 0;14427				if(gDLL->GetSteamStat(ESTEAMSTAT_HALICARNASSUSGOLDEARNED, &iTotalHalicarnassusGold))14428				{14429					iTotalHalicarnassusGold += iHalicarnassusGold;14430					gDLL->SetSteamStat(ESTEAMSTAT_HALICARNASSUSGOLDEARNED, iTotalHalicarnassusGold);14431					if(iTotalHalicarnassusGold >= HALICARNASSUS_ACHIEVEMENT_GOLD)14432					{14433						gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_HALICARNASSUS_GOLD);14434					}14435				}14436			}14437		}14438#endif14439	}1444014441#if defined(MOD_API_UNIFIED_YIELDS)14442	GreatPersonTypes eGreatPerson = GetGreatPersonFromUnitClass(pGreatPersonUnit->getUnitClassType());14443	if (eGreatPerson != NO_GREATPERSON)14444	{14445		ReligionTypes eReligionFounded = GetReligions()->GetReligionCreatedByPlayer(true);14446		const CvReligion* pReligion = (eReligionFounded < RELIGION_PANTHEON) ? NULL : GC.getGame().GetGameReligions()->GetReligion(eReligionFounded, GetID());1444714448		for (int iI = 0; iI < NUM_YIELD_TYPES; iI++)14449		{14450			YieldTypes eYield = (YieldTypes) iI;1445114452			int iYieldBonus = getGreatPersonExpendedYield(eGreatPerson, eYield);14453			iYieldBonus += GetPlayerTraits()->GetGreatPersonExpendedYield(eGreatPerson, eYield);1445414455			if(pReligion)14456			{14457				iYieldBonus += pReligion->m_Beliefs.GetGreatPersonExpendedYield(eGreatPerson, eYield);14458			14459				if (eYield == YIELD_FAITH)14460				{14461					iYieldBonus += pReligion->m_Beliefs.GetGreatPersonExpendedFaith();14462				}14463			}1446414465			if (iYieldBonus > 0)14466			{14467				iYieldBonus *= GC.getGame().getGameSpeedInfo().getTrainPercent();14468				iYieldBonus /= 100;14469					14470				switch(eYield)14471				{14472				case YIELD_GOLD:14473					GetTreasury()->ChangeGold(iYieldBonus);14474					break;14475				case YIELD_CULTURE:14476					changeJONSCulture(iYieldBonus);14477					break;14478				case YIELD_FAITH:14479					ChangeFaith(iYieldBonus);14480					break;14481				case YIELD_GOLDEN_AGE_POINTS:14482					ChangeGoldenAgeProgressMeter(iYieldBonus);14483					break;14484				case YIELD_SCIENCE:14485					{14486					TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();14487					if(eCurrentTech == NO_TECH)14488					{14489						changeOverflowResearch(iYieldBonus);14490					}14491					else14492					{14493						GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iYieldBonus, GetID());14494					}14495					}14496					break;14497				case YIELD_TOURISM:14498					GetCulture()->AddTourismAllKnownCivs(iYieldBonus);14499					break;14500				case YIELD_FOOD:14501				case YIELD_PRODUCTION:14502					{14503						CvPlot* pPlot = pGreatPersonUnit->plot(); 14504						CvCity* pCity = pPlot->isCity() ? pPlot->getPlotCity() : pPlot->GetAdjacentCity();14505						if (pCity && pGreatPersonUnit->getTeam() == pCity->getTeam()) {14506							if (eYield == YIELD_FOOD) {14507								pCity->changeFood(iYieldBonus);14508							} else {14509								pCity->changeProduction(iYieldBonus);14510							}14511						}14512						break;14513					}14514				}14515			}14516		}14517	}14518#else14519	// Faith gained14520	ReligionTypes eReligionFounded = GetReligions()->GetReligionCreatedByPlayer();14521	if(eReligionFounded > RELIGION_PANTHEON)14522	{14523		const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eReligionFounded, GetID());14524		if(pReligion)14525		{14526			int iFaith = pReligion->m_Beliefs.GetGreatPersonExpendedFaith();14527			if(iFaith > 0)14528			{14529				iFaith *= GC.getGame().getGameSpeedInfo().getTrainPercent();14530				iFaith /= 100;14531				ChangeFaith(iFaith);14532			}14533		}14534	}14535#endif1453614537#if defined(MOD_EVENTS_GREAT_PEOPLE)14538	if (MOD_EVENTS_GREAT_PEOPLE) {14539		GAMEEVENTINVOKE_HOOK(GAMEEVENT_GreatPersonExpended, GetID(), pGreatPersonUnit->GetID(), eGreatPersonUnit, pGreatPersonUnit->getX(), pGreatPersonUnit->getY());14540	} else {14541#endif14542	ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();14543	if (pkScriptSystem)14544	{14545		CvLuaArgsHandle args;14546		args->Push(GetID());14547		args->Push(eGreatPersonUnit);1454814549		bool bResult;14550		LuaSupport::CallHook(pkScriptSystem, "GreatPersonExpended", args.get(), bResult);14551	}14552#if defined(MOD_EVENTS_GREAT_PEOPLE)14553	}14554#endif14555}

Calls

Called by