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}