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}