Hooks
static bool BeforeCvGameReligions_CanFoundReligion(CvGameReligions* self, PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity, CvGameReligions::FOUNDING_RESULT& result);static void AfterCvGameReligions_CanFoundReligion(CvGameReligions* self, PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity, CvGameReligions::FOUNDING_RESULT& result);static CvGameReligions::FOUNDING_RESULT ReplaceCvGameReligions_CanFoundReligion(CvGameReligions::FOUNDING_RESULT (*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_CanFoundReligion>(host, &BeforeCvGameReligions_CanFoundReligion);CivRegisterAfter<CivHooks::CvGameReligions_CanFoundReligion>(host, &AfterCvGameReligions_CanFoundReligion);CivRegisterReplace<CivHooks::CvGameReligions_CanFoundReligion>(host, &ReplaceCvGameReligions_CanFoundReligion);
Code
1221/// Can the supplied religion be created?1222CvGameReligions::FOUNDING_RESULT CvGameReligions::CanFoundReligion(PlayerTypes ePlayer, ReligionTypes eReligion, const char* szCustomName, BeliefTypes eBelief1, BeliefTypes eBelief2, BeliefTypes eBelief3, BeliefTypes eBelief4, CvCity* pkHolyCity)1223{1224 if(GetNumReligionsStillToFound() <= 0)1225 return FOUNDING_NO_RELIGIONS_AVAILABLE;12261227 if(ePlayer == NO_PLAYER)1228 return FOUNDING_INVALID_PLAYER;12291230 if(HasCreatedReligion(ePlayer))1231 return FOUNDING_PLAYER_ALREADY_CREATED_RELIGION;12321233 CvPlayer& kPlayer = GET_PLAYER(ePlayer);12341235 CvReligion kReligion(eReligion, ePlayer, pkHolyCity, false);12361237 // Copy over belief from your pantheon1238#if defined(MOD_API_RELIGION)1239 if (HasCreatedPantheon(ePlayer)) {1240 CvReligionBeliefs beliefs = GC.getGame().GetGameReligions()->GetReligion(RELIGION_PANTHEON, kPlayer.GetID())->m_Beliefs;1241 for(int iI = 0; iI < beliefs.GetNumBeliefs(); iI++) {1242 kReligion.m_Beliefs.AddBelief(beliefs.GetBelief(iI));1243 }1244 }1245#else1246 BeliefTypes eBelief = GC.getGame().GetGameReligions()->GetBeliefInPantheon(kPlayer.GetID());1247 if(eBelief != NO_BELIEF)1248 kReligion.m_Beliefs.AddBelief(eBelief);1249#endif12501251 kReligion.m_Beliefs.AddBelief(eBelief1);1252 kReligion.m_Beliefs.AddBelief(eBelief2);12531254 if(eBelief3 != NO_BELIEF)1255 {1256 kReligion.m_Beliefs.AddBelief(eBelief3);1257 }12581259 if(eBelief4 != NO_BELIEF)1260 {1261 kReligion.m_Beliefs.AddBelief(eBelief4);1262 }12631264 if(szCustomName != NULL && strlen(szCustomName) <= sizeof(kReligion.m_szCustomName))1265 {1266 strcpy_s(kReligion.m_szCustomName, szCustomName);1267 }12681269 // Now see if there are any conflicts.1270 for(ReligionList::const_iterator it = m_CurrentReligions.begin(); it != m_CurrentReligions.end(); it++)1271 {1272 if ((*it).m_eFounder != ePlayer) // Only check other player's religions1273 {1274 if(kReligion.m_eReligion == (*it).m_eReligion)1275 return FOUNDING_RELIGION_IN_USE;12761277 for(int iSrcBelief = (*it).m_Beliefs.GetNumBeliefs(); iSrcBelief--;)1278 {1279 BeliefTypes eSrcBelief = (*it).m_Beliefs.GetBelief(iSrcBelief);1280 if(eSrcBelief != NO_BELIEF)1281 {1282 for(int iDestBelief = kReligion.m_Beliefs.GetNumBeliefs(); iDestBelief--;)1283 {1284 BeliefTypes eDestBelief = kReligion.m_Beliefs.GetBelief(iDestBelief);1285 if(eDestBelief != NO_BELIEF && eDestBelief == eSrcBelief)1286 return FOUNDING_BELIEF_IN_USE;1287 }1288 }1289 }1290 }1291 }12921293 return FOUNDING_OK;1294}