Bazaar developer reference

CvPlayer::createGreatGeneral(UnitTypes, int, int, bool)

Defined in
CvPlayer.cpp, line 25858
Class
CvPlayer
Hook name
CivHooks::CvPlayer_createGreatGeneral

Hooks

static bool BeforeCvPlayer_createGreatGeneral(CvPlayer* self, UnitTypes eGreatPersonUnit, int iX, int iY, bool bIsFree);static void AfterCvPlayer_createGreatGeneral(CvPlayer* self, UnitTypes eGreatPersonUnit, int iX, int iY, bool bIsFree);static void ReplaceCvPlayer_createGreatGeneral(void (*original)(CvPlayer*, UnitTypes, int, int, bool), CvPlayer* self, UnitTypes eGreatPersonUnit, int iX, int iY, bool bIsFree);CivRegisterBefore<CivHooks::CvPlayer_createGreatGeneral>(host, &BeforeCvPlayer_createGreatGeneral);CivRegisterAfter<CivHooks::CvPlayer_createGreatGeneral>(host, &AfterCvPlayer_createGreatGeneral);CivRegisterReplace<CivHooks::CvPlayer_createGreatGeneral>(host, &ReplaceCvPlayer_createGreatGeneral);

Code

25857#if defined(MOD_GLOBAL_TRULY_FREE_GP)25858void CvPlayer::createGreatGeneral(UnitTypes eGreatPersonUnit, int iX, int iY, bool bIsFree)25859#else25860void CvPlayer::createGreatGeneral(UnitTypes eGreatPersonUnit, int iX, int iY)25861#endif25862{25863	CvUnit* pGreatPeopleUnit = initUnit(eGreatPersonUnit, iX, iY);25864	if(NULL == pGreatPeopleUnit)25865	{25866		CvAssert(false);25867		return;25868	}2586925870	ChangeNumGreatPeople(1);2587125872#if defined(MOD_GLOBAL_TRULY_FREE_GP)25873	incrementGreatGeneralsCreated(bIsFree);25874#else25875	incrementGreatGeneralsCreated();25876#endif2587725878#if defined(MOD_GLOBAL_TRULY_FREE_GP)25879	changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE() * ((getGreatGeneralsCreated(bIsFree) / 10) + 1));25880#else25881	changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE() * ((getGreatGeneralsCreated() / 10) + 1));25882#endif2588325884	for(int iI = 0; iI < MAX_PLAYERS; iI++)25885	{25886		if(GET_PLAYER((PlayerTypes)iI).getTeam() == getTeam())25887		{25888#if defined(MOD_BUGFIX_MINOR)25889#if defined(MOD_GLOBAL_TRULY_FREE_GP)25890			GET_PLAYER((PlayerTypes)iI).changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE_TEAM() * ((getGreatGeneralsCreated(bIsFree) / 10) + 1));25891#else25892			GET_PLAYER((PlayerTypes)iI).changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE_TEAM() * ((getGreatGeneralsCreated() / 10) + 1));25893#endif25894#else25895#if defined(MOD_GLOBAL_TRULY_FREE_GP)25896			GET_PLAYER((PlayerTypes)iI).changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE_TEAM() * ((getGreatPeopleCreated(bIsFree) / 10) + 1));25897#else25898			GET_PLAYER((PlayerTypes)iI).changeGreatGeneralsThresholdModifier(/*50*/ GC.getGREAT_GENERALS_THRESHOLD_INCREASE_TEAM() * ((getGreatPeopleCreated() / 10) + 1));25899#endif25900#endif25901		}25902	}2590325904#if defined(MOD_GLOBAL_LOCAL_GENERALS)25905	CvPlot* pPlot = pGreatPeopleUnit->plot();2590625907	// In rare cases we can gain the general from an embarked unit being attacked, or from a hovering unit over coast25908	// so if this plot is water, relocate the Great General25909	if (pPlot->isWater()) {25910		pGreatPeopleUnit->jumpToNearestValidPlot();25911	}25912#else25913	CvPlot* pPlot = GC.getMap().plot(iX, iY);25914#endif2591525916#if !defined(NO_ACHIEVEMENTS)25917	//Achievements and Stats25918	if(pGreatPeopleUnit->isHuman() && !GC.getGame().isGameMultiPlayer())25919	{25920		gDLL->IncrementSteamStat(ESTEAMSTAT_GREATGENERALS);25921		const char* strLeader = GET_PLAYER(pGreatPeopleUnit->getOwner()).getLeaderTypeKey();25922		if(strLeader && strcmp(strLeader, "LEADER_WU_ZETIAN") == 0)25923		{25924			gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_SUNTZU);25925		}2592625927		CvAchievementUnlocker::Check_PSG();25928	}25929#endif2593025931	// Notification25932	if(GetNotifications())25933	{25934		Localization::String strText = Localization::Lookup("TXT_KEY_NOTIFICATION_GREAT_PERSON_ACTIVE_PLAYER");25935		Localization::String strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_GREAT_PERSON");25936		GetNotifications()->Add(NOTIFICATION_GREAT_PERSON_ACTIVE_PLAYER, strText.toUTF8(), strSummary.toUTF8(), pPlot->getX(), pPlot->getY(), eGreatPersonUnit);25937	}25938}

Calls

Called by