Bazaar developer reference

CvGameReligions::FoundReligion(PlayerTypes, ReligionTypes, const char *, BeliefTypes, BeliefTypes, BeliefTypes, BeliefTypes, CvCity *)

Defined in
CvReligionClasses.cpp, line 1038
Class
CvGameReligions
Hook name
CivHooks::CvGameReligions_FoundReligion
Lua events
GameEvents.ReligionFounded

Hooks

static bool BeforeCvGameReligions_FoundReligion(CvGameReligions* self, PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity);static void AfterCvGameReligions_FoundReligion(CvGameReligions* self, PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity);static void ReplaceCvGameReligions_FoundReligion(void (*original)(CvGameReligions*, PlayerTypes, ReligionTypes, const char*, BeliefTypes, BeliefTypes, BeliefTypes, BeliefTypes, CvCity*), CvGameReligions* self, PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity);CivRegisterBefore<CivHooks::CvGameReligions_FoundReligion>(host, &BeforeCvGameReligions_FoundReligion);CivRegisterAfter<CivHooks::CvGameReligions_FoundReligion>(host, &AfterCvGameReligions_FoundReligion);CivRegisterReplace<CivHooks::CvGameReligions_FoundReligion>(host, &ReplaceCvGameReligions_FoundReligion);

Code

1037/// Create a new religion1038void CvGameReligions::FoundReligion(PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity)1039{1040	CvPlayer& kPlayer = GET_PLAYER(ePlayer);10411042	CvReligion kReligion(eReligion, ePlayer, pkHolyCity, false);10431044	// Copy over belief from your pantheon1045	BeliefTypes eBelief = GC.getGame().GetGameReligions()->GetBeliefInPantheon(kPlayer.GetID());1046	if(eBelief != NO_BELIEF)1047#if defined(MOD_API_RELIGION)1048	{1049		CvReligionBeliefs beliefs = GC.getGame().GetGameReligions()->GetReligion(RELIGION_PANTHEON, ePlayer)->m_Beliefs;1050		for (int iI = 0; iI < beliefs.GetNumBeliefs(); iI++) {1051			kReligion.m_Beliefs.AddBelief(beliefs.GetBelief(iI));1052		}1053	}1054#else1055		kReligion.m_Beliefs.AddBelief(eBelief);1056#endif10571058	kReligion.m_Beliefs.AddBelief(eBelief1);1059	kReligion.m_Beliefs.AddBelief(eBelief2);10601061	if(eBelief3 != NO_BELIEF)1062	{1063		kReligion.m_Beliefs.AddBelief(eBelief3);1064	}10651066	if(eBelief4 != NO_BELIEF)1067	{1068		kReligion.m_Beliefs.AddBelief(eBelief4);1069	}10701071	if(szCustomName != NULL && strlen(szCustomName) <= sizeof(kReligion.m_szCustomName))1072	{1073		strcpy_s(kReligion.m_szCustomName, szCustomName);1074	}10751076	// Found it1077	m_CurrentReligions.push_back(kReligion);10781079	// Inform the holy city1080	pkHolyCity->GetCityReligions()->DoReligionFounded(kReligion.m_eReligion);10811082#if defined(MOD_TRAITS_OTHER_PREREQS)1083	if (MOD_TRAITS_OTHER_PREREQS) {1084		// Update our traits (some may have become obsolete)1085		kPlayer.GetPlayerTraits()->Reset();1086		kPlayer.GetPlayerTraits()->InitPlayerTraits();1087		kPlayer.recomputePolicyCostModifier();1088	}1089#endif10901091	// Update game systems1092	kPlayer.UpdateReligion();1093	kPlayer.GetReligions()->SetFoundingReligion(false);10941095	// In case we have another prophet sitting around, make sure he's set to this religion1096	int iLoopUnit;1097	CvUnit* pLoopUnit;1098	for(pLoopUnit = kPlayer.firstUnit(&iLoopUnit); pLoopUnit != NULL; pLoopUnit = kPlayer.nextUnit(&iLoopUnit))1099	{1100		if(pLoopUnit->getUnitInfo().IsFoundReligion())1101		{1102			pLoopUnit->GetReligionData()->SetReligion(eReligion);1103			pLoopUnit->GetReligionData()->SetSpreadsLeft(pLoopUnit->getUnitInfo().GetReligionSpreads());1104			pLoopUnit->GetReligionData()->SetReligiousStrength(pLoopUnit->getUnitInfo().GetReligiousStrength());1105		}1106	}11071108#if defined(MOD_EVENTS_FOUND_RELIGION)1109	if (MOD_EVENTS_FOUND_RELIGION) {1110		GAMEEVENTINVOKE_HOOK(GAMEEVENT_ReligionFounded, ePlayer, pkHolyCity->GetID(), eReligion, eBelief, eBelief1, eBelief2, eBelief3, eBelief4);1111	} else {1112#endif1113	ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();1114	if(pkScriptSystem)1115	{1116		CvLuaArgsHandle args;1117		args->Push(ePlayer);1118		args->Push(pkHolyCity->GetID());1119		args->Push(eReligion);1120		args->Push(eBelief);1121		args->Push(eBelief1);1122		args->Push(eBelief2);1123		args->Push(eBelief3);1124		args->Push(eBelief4);11251126		bool bResult;1127		LuaSupport::CallHook(pkScriptSystem, "ReligionFounded", args.get(), bResult);1128	}1129#if defined(MOD_EVENTS_FOUND_RELIGION)1130	}1131#endif11321133	// Send out messaging1134	CvReligionEntry* pEntry = GC.getReligionInfo(kReligion.m_eReligion);1135	if(pEntry)1136	{1137		//Add replay message1138		CvString szReligionName = kReligion.GetName();1139		Localization::String strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_FOUNDED_S");1140		Localization::String replayText = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_FOUNDED");1141		replayText << kPlayer.getCivilizationShortDescriptionKey() << szReligionName << pkHolyCity->getNameKey();11421143		GC.getGame().addReplayMessage(REPLAY_MESSAGE_RELIGION_FOUNDED, kReligion.m_eFounder, replayText.toUTF8(), kReligion.m_iHolyCityX, kReligion.m_iHolyCityY);11441145#if defined(MOD_RELIGION_LOCAL_RELIGIONS)1146		// Local religions are intended to be "super-pantheons" so typically are founded immediately a pantheon is founded1147		// As founding the pantheon sent a notification, don't send another here (if the modded wants one, they can always send it manually)1148		if (!(MOD_RELIGION_LOCAL_RELIGIONS && pEntry->IsLocalReligion())) {1149#endif1150			//Notify the masses1151			for(int iNotifyLoop = 0; iNotifyLoop < MAX_MAJOR_CIVS; ++iNotifyLoop){1152				PlayerTypes eNotifyPlayer = (PlayerTypes) iNotifyLoop;1153				CvPlayerAI& kNotifyPlayer = GET_PLAYER(eNotifyPlayer);1154				CvNotifications* pNotifications = kNotifyPlayer.GetNotifications();1155				if(pNotifications){1156					// Message slightly different for founder player1157					if(kReligion.m_eFounder == eNotifyPlayer)1158					{1159						Localization::String localizedText = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_FOUNDED_ACTIVE_PLAYER");1160						localizedText << szReligionName << pkHolyCity->getNameKey();11611162#if defined(MOD_API_EXTENSIONS)1163						pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED_ACTIVE_PLAYER, localizedText.toUTF8(), strSummary.toUTF8(), -1, -1, eReligion, -1);1164#else1165						pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED_ACTIVE_PLAYER, localizedText.toUTF8(), strSummary.toUTF8(), -1, -1, -1);1166#endif1167					}1168					else1169					{1170						CvTeam& kNotifyTeam = GET_TEAM(kNotifyPlayer.getTeam());11711172						if(kNotifyTeam.isHasMet(kPlayer.getTeam()))1173						{1174#if defined(MOD_API_EXTENSIONS)1175							pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED, replayText.toUTF8(), strSummary.toUTF8(), -1, -1, eReligion, -1);1176#else1177							pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED, replayText.toUTF8(), strSummary.toUTF8(), -1, -1, -1);1178#endif1179						}1180						else1181						{1182							Localization::String unknownCivText = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_FOUNDED_UNKNOWN");1183							unknownCivText << szReligionName;11841185#if defined(MOD_API_EXTENSIONS)1186							pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED, unknownCivText.toUTF8(), strSummary.toUTF8(), -1, -1, eReligion, -1);1187#else1188							pNotifications->Add(NOTIFICATION_RELIGION_FOUNDED, unknownCivText.toUTF8(), strSummary.toUTF8(), -1, -1, -1);1189#endif1190						}1191					}1192				}1193			}1194#if defined(MOD_RELIGION_LOCAL_RELIGIONS)1195		}1196#endif11971198		// Logging1199		if(GC.getLogging())1200		{1201			CvString strLogMsg;1202			strLogMsg = kPlayer.getCivilizationShortDescription();1203			strLogMsg += ", RELIGION FOUNDED, ";1204			strLogMsg += pkHolyCity->getName();1205			strLogMsg += ", ";1206			strLogMsg += pEntry->GetDescription();1207			LogReligionMessage(strLogMsg);1208		}12091210#if !defined(NO_ACHIEVEMENTS)1211		//Achievements!1212		if(ePlayer == GC.getGame().getActivePlayer())1213		{1214			gDLL->UnlockAchievement(ACHIEVEMENT_XP1_11);1215		}1216#endif1217	}1218	GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);1219}

Calls

Called by