Bazaar developer reference

CvCityCitizens::DoSpawnGreatPerson(UnitTypes, bool, bool, bool)

Defined in
CvCityCitizens.cpp, line 2761
Class
CvCityCitizens
Hook name
CivHooks::CvCityCitizens_DoSpawnGreatPerson

Hand-placed hooks inside

A replacement for this function that does not call original stops these hooks from running.

Hooks

static bool BeforeCvCityCitizens_DoSpawnGreatPerson(CvCityCitizens* self, UnitTypes eUnit, bool bIncrementCount, bool bCountAsProphet, bool bIsFree);static void AfterCvCityCitizens_DoSpawnGreatPerson(CvCityCitizens* self, UnitTypes eUnit, bool bIncrementCount, bool bCountAsProphet, bool bIsFree);static void ReplaceCvCityCitizens_DoSpawnGreatPerson(void (*original)(CvCityCitizens*, UnitTypes, bool, bool, bool), CvCityCitizens* self, UnitTypes eUnit, bool bIncrementCount, bool bCountAsProphet, bool bIsFree);CivRegisterBefore<CivHooks::CvCityCitizens_DoSpawnGreatPerson>(host, &BeforeCvCityCitizens_DoSpawnGreatPerson);CivRegisterAfter<CivHooks::CvCityCitizens_DoSpawnGreatPerson>(host, &AfterCvCityCitizens_DoSpawnGreatPerson);CivRegisterReplace<CivHooks::CvCityCitizens_DoSpawnGreatPerson>(host, &ReplaceCvCityCitizens_DoSpawnGreatPerson);

Code

2759/// Create a GP!2760#if defined(MOD_GLOBAL_TRULY_FREE_GP)2761void CvCityCitizens::DoSpawnGreatPerson(UnitTypes eUnit, bool bIncrementCount, bool bCountAsProphet, bool bIsFree)2762#else2763void CvCityCitizens::DoSpawnGreatPerson(UnitTypes eUnit, bool bIncrementCount, bool bCountAsProphet)2764#endif2765{2766	CvAssert(eUnit != NO_UNIT);27672768	if (eUnit == NO_UNIT)2769		return;	// Better than crashing.27702771#if defined(CIV_HOST_API)2772	CivHandPopupRaised(GetCity()->getOwner(), BUTTONPOPUP_GREAT_PERSON_REWARD, eUnit, GetCity()->GetID(), -1, false, false, "");hand-placed hook: PopupRaised2773#endif2774	// If it's the active player then show the popup2775	if(GetCity()->getOwner() == GC.getGame().getActivePlayer())2776	{2777		// Don't show in MP2778#if defined(MOD_API_EXTENSIONS)2779		if(!GC.getGame().isReallyNetworkMultiPlayer())2780#else2781		if(!GC.getGame().isNetworkMultiPlayer())	// KWG: Candidate for !GC.getGame().IsOption(GAMEOPTION_SIMULTANEOUS_TURNS)2782#endif2783		{2784			CvPopupInfo kPopupInfo(BUTTONPOPUP_GREAT_PERSON_REWARD, eUnit, GetCity()->GetID());2785			GC.GetEngineUserInterface()->AddPopup(kPopupInfo);2786		}2787	}27882789	CvPlayer& kPlayer = GET_PLAYER(GetCity()->getOwner());2790	CvUnit* newUnit = kPlayer.initUnit(eUnit, GetCity()->getX(), GetCity()->getY());27912792	// Bump up the count2793	if(bIncrementCount && !bCountAsProphet)2794	{2795		if(newUnit->IsGreatGeneral())2796		{2797#if defined(MOD_GLOBAL_TRULY_FREE_GP)2798			kPlayer.incrementGreatGeneralsCreated(bIsFree);2799#else2800			kPlayer.incrementGreatGeneralsCreated();2801#endif2802		}2803		else if(newUnit->IsGreatAdmiral())2804		{2805#if defined(MOD_GLOBAL_TRULY_FREE_GP)2806			kPlayer.incrementGreatAdmiralsCreated(bIsFree);2807#else2808			kPlayer.incrementGreatAdmiralsCreated();2809#endif2810			CvPlot *pSpawnPlot = kPlayer.GetGreatAdmiralSpawnPlot(newUnit);2811			if (newUnit->plot() != pSpawnPlot)2812			{2813				newUnit->setXY(pSpawnPlot->getX(), pSpawnPlot->getY());2814			}2815		}2816		else if (newUnit->getUnitInfo().GetUnitClassType() == GC.getInfoTypeForString("UNITCLASS_WRITER"))2817		{2818#if defined(MOD_GLOBAL_TRULY_FREE_GP)2819			kPlayer.incrementGreatWritersCreated(bIsFree);2820#else2821			kPlayer.incrementGreatWritersCreated();2822#endif2823		}							2824		else if (newUnit->getUnitInfo().GetUnitClassType() == GC.getInfoTypeForString("UNITCLASS_ARTIST"))2825		{2826#if defined(MOD_GLOBAL_TRULY_FREE_GP)2827			kPlayer.incrementGreatArtistsCreated(bIsFree);2828#else2829			kPlayer.incrementGreatArtistsCreated();2830#endif2831		}							2832		else if (newUnit->getUnitInfo().GetUnitClassType() == GC.getInfoTypeForString("UNITCLASS_MUSICIAN"))2833		{2834#if defined(MOD_GLOBAL_TRULY_FREE_GP)2835			kPlayer.incrementGreatMusiciansCreated(bIsFree);2836#else2837			kPlayer.incrementGreatMusiciansCreated();2838#endif2839		}		2840		else2841		{2842#if defined(MOD_GLOBAL_SEPARATE_GP_COUNTERS)2843			if (MOD_GLOBAL_SEPARATE_GP_COUNTERS) {2844				if (newUnit->getUnitInfo().GetUnitClassType() == GC.getInfoTypeForString("UNITCLASS_MERCHANT")) {2845#if defined(MOD_GLOBAL_TRULY_FREE_GP)2846					kPlayer.incrementGreatMerchantsCreated(bIsFree);2847#else2848					kPlayer.incrementGreatMerchantsCreated();2849#endif2850				} else if (newUnit->getUnitInfo().GetUnitClassType() == GC.getInfoTypeForString("UNITCLASS_SCIENTIST")) {2851#if defined(MOD_GLOBAL_TRULY_FREE_GP)2852					kPlayer.incrementGreatScientistsCreated(bIsFree);2853#else2854					kPlayer.incrementGreatScientistsCreated();2855#endif2856				} else {2857#if defined(MOD_GLOBAL_TRULY_FREE_GP)2858					kPlayer.incrementGreatEngineersCreated(bIsFree);2859#else2860					kPlayer.incrementGreatEngineersCreated();2861#endif2862				}2863			} else2864#endif2865#if defined(MOD_GLOBAL_TRULY_FREE_GP)2866			kPlayer.incrementGreatPeopleCreated(bIsFree);2867#else2868			kPlayer.incrementGreatPeopleCreated();2869#endif2870		}2871	}2872	if(bCountAsProphet || newUnit->getUnitInfo().IsFoundReligion())2873	{2874#if defined(MOD_BUGFIX_MINOR)2875		if (bIncrementCount)2876#endif2877#if defined(MOD_GLOBAL_TRULY_FREE_GP)2878		kPlayer.GetReligions()->ChangeNumProphetsSpawned(1, bIsFree);2879#else2880		kPlayer.GetReligions()->ChangeNumProphetsSpawned(1);2881#endif2882	}28832884	// Setup prophet properly2885	if(newUnit->getUnitInfo().IsFoundReligion())2886	{2887		ReligionTypes eReligion = kPlayer.GetReligions()->GetReligionCreatedByPlayer();2888		int iReligionSpreads = newUnit->getUnitInfo().GetReligionSpreads();2889		int iReligiousStrength = newUnit->getUnitInfo().GetReligiousStrength();2890		if(iReligionSpreads > 0 && eReligion > RELIGION_PANTHEON)2891		{2892			newUnit->GetReligionData()->SetSpreadsLeft(iReligionSpreads);2893			newUnit->GetReligionData()->SetReligiousStrength(iReligiousStrength);2894			newUnit->GetReligionData()->SetReligion(eReligion);2895		}2896	}28972898	if (newUnit->getUnitInfo().GetOneShotTourism() > 0)2899	{2900		newUnit->SetTourismBlastStrength(kPlayer.GetCulture()->GetTourismBlastStrength(newUnit->getUnitInfo().GetOneShotTourism()));2901	}29022903	// Notification2904	if(GET_PLAYER(GetOwner()).GetNotifications())2905	{2906		Localization::String strText = Localization::Lookup("TXT_KEY_NOTIFICATION_GREAT_PERSON_ACTIVE_PLAYER");2907		Localization::String strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_GREAT_PERSON");2908		GET_PLAYER(GetOwner()).GetNotifications()->Add(NOTIFICATION_GREAT_PERSON_ACTIVE_PLAYER, strText.toUTF8(), strSummary.toUTF8(), GetCity()->getX(), GetCity()->getY(), eUnit);2909	}2910}

Calls

Called by