Bazaar developer reference

CvCityReligions::CityConvertsReligion(ReligionTypes, ReligionTypes, PlayerTypes)

Defined in
CvReligionClasses.cpp, line 4549
Class
CvCityReligions
Hook name
CivHooks::CvCityReligions_CityConvertsReligion
Lua events
GameEvents.CityConvertsReligion

Hooks

static bool BeforeCvCityReligions_CityConvertsReligion(CvCityReligions* self, ReligionTypes eMajority, ReligionTypes eOldMajority, PlayerTypes eResponsibleParty);static void AfterCvCityReligions_CityConvertsReligion(CvCityReligions* self, ReligionTypes eMajority, ReligionTypes eOldMajority, PlayerTypes eResponsibleParty);static void ReplaceCvCityReligions_CityConvertsReligion(void (*original)(CvCityReligions*, ReligionTypes, ReligionTypes, PlayerTypes), CvCityReligions* self, ReligionTypes eMajority, ReligionTypes eOldMajority, PlayerTypes eResponsibleParty);CivRegisterBefore<CivHooks::CvCityReligions_CityConvertsReligion>(host, &BeforeCvCityReligions_CityConvertsReligion);CivRegisterAfter<CivHooks::CvCityReligions_CityConvertsReligion>(host, &AfterCvCityReligions_CityConvertsReligion);CivRegisterReplace<CivHooks::CvCityReligions_CityConvertsReligion>(host, &ReplaceCvCityReligions_CityConvertsReligion);

Code

4548/// Implement changes from a city changing religion4549void CvCityReligions::CityConvertsReligion(ReligionTypes eMajority, ReligionTypes eOldMajority, PlayerTypes eResponsibleParty)4550{4551	CvGameReligions* pReligions = GC.getGame().GetGameReligions();45524553	m_pCity->UpdateReligion(eMajority);45544555	if(eOldMajority > RELIGION_PANTHEON)4556	{4557		const CvReligion* pOldReligion = pReligions->GetReligion(eOldMajority, NO_PLAYER);4558		GET_PLAYER(pOldReligion->m_eFounder).UpdateReligion();4559	}45604561	if(eMajority > RELIGION_PANTHEON)4562	{4563		const CvReligion* pNewReligion = pReligions->GetReligion(eMajority, NO_PLAYER);4564		GET_PLAYER(pNewReligion->m_eFounder).UpdateReligion();45654566		// Pay adoption bonuses (if any)4567		if(!m_bHasPaidAdoptionBonus)4568		{4569			int iGoldBonus = pNewReligion->m_Beliefs.GetGoldWhenCityAdopts();4570			iGoldBonus *= GC.getGame().getGameSpeedInfo().getTrainPercent();;4571			iGoldBonus /= 100;45724573			if(iGoldBonus > 0)4574			{4575				GET_PLAYER(pNewReligion->m_eFounder).GetTreasury()->ChangeGold(iGoldBonus);4576				SetPaidAdoptionBonus(true);45774578				if(pNewReligion->m_eFounder == GC.getGame().getActivePlayer())4579				{4580					char text[256] = {0};4581					sprintf_s(text, "[COLOR_YELLOW]+%d[ENDCOLOR][ICON_GOLD]", iGoldBonus);4582#if defined(SHOW_PLOT_POPUP)4583					SHOW_PLOT_POPUP(m_pCity->plot(), NO_PLAYER, text, 0.5f);4584#else4585					GC.GetEngineUserInterface()->AddPopupText(m_pCity->getX(), m_pCity->getY(), text, 0.5f);4586#endif4587				}4588			}4589		}45904591		// Notification if the player's city was converted to a religion they didn't found4592		PlayerTypes eOwnerPlayer = m_pCity->getOwner();4593		CvPlayerAI& kOwnerPlayer = GET_PLAYER(eOwnerPlayer);4594		const ReligionTypes eOwnerPlayerReligion = kOwnerPlayer.GetReligions()->GetReligionCreatedByPlayer();45954596		if(eOwnerPlayer != eResponsibleParty && eMajority != eOldMajority && pNewReligion->m_eFounder != eOwnerPlayer4597			&& eOwnerPlayerReligion > RELIGION_PANTHEON)4598		{4599			if(kOwnerPlayer.GetNotifications())4600			{4601				Localization::String strMessage;4602				Localization::String strSummary;4603				strMessage = GetLocalizedText("TXT_KEY_NOTIFICATION_RELIGION_SPREAD_ACTIVE_PLAYER", m_pCity->getName());4604				strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_SPREAD_ACTIVE_PLAYER_S");4605#if defined(MOD_API_EXTENSIONS)4606				kOwnerPlayer.GetNotifications()->Add(NOTIFICATION_RELIGION_SPREAD, strMessage.toUTF8(), strSummary.toUTF8(), m_pCity->getX(), m_pCity->getY(), eMajority, -1);4607#else4608				kOwnerPlayer.GetNotifications()->Add(NOTIFICATION_RELIGION_SPREAD, strMessage.toUTF8(), strSummary.toUTF8(), m_pCity->getX(), m_pCity->getY(), -1);4609#endif4610			}46114612#if !defined(NO_ACHIEVEMENTS)4613			//Achievements!4614			if(eOwnerPlayer == GC.getGame().getActivePlayer()){4615				const CvReligion* pkReligion = GC.getGame().GetGameReligions()->GetReligion(eOwnerPlayerReligion, eOwnerPlayer);4616				if(pkReligion != NULL)4617				{4618					if(m_pCity->getX() == pkReligion->m_iHolyCityX && m_pCity->getY() == pkReligion->m_iHolyCityY)4619					{4620						gDLL->UnlockAchievement(ACHIEVEMENT_XP1_20);4621					}4622				}4623			}4624#endif4625		}46264627		else if(eOwnerPlayer != eResponsibleParty && eMajority != eOldMajority && eOldMajority == NO_RELIGION)4628		{4629			if(kOwnerPlayer.GetNotifications())4630			{4631				Localization::String strMessage;4632				Localization::String strSummary;4633				strMessage = GetLocalizedText("TXT_KEY_NOTIFICATION_RELIGION_SPREAD_INITIAL_CONVERSION", m_pCity->getName());4634				strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_RELIGION_SPREAD_INITIAL_CONVERSION_S");4635#if defined(MOD_API_EXTENSIONS)4636				kOwnerPlayer.GetNotifications()->Add(NOTIFICATION_RELIGION_SPREAD_NATURAL, strMessage.toUTF8(), strSummary.toUTF8(), m_pCity->getX(), m_pCity->getY(), eMajority, -1);4637#else4638				kOwnerPlayer.GetNotifications()->Add(NOTIFICATION_RELIGION_SPREAD_NATURAL, strMessage.toUTF8(), strSummary.toUTF8(), m_pCity->getX(), m_pCity->getY(), -1);4639#endif4640			}4641		}46424643#if !defined(NO_ACHIEVEMENTS)4644		//More Achievements4645		if(m_pCity->getOwner() != GC.getGame().getActivePlayer() && pNewReligion->m_eFounder == GC.getGame().getActivePlayer())4646		{4647			if(m_pCity->GetCityReligions()->IsHolyCityAnyReligion() && !m_pCity->GetCityReligions()->IsHolyCityForReligion(pNewReligion->m_eReligion))4648			{4649				gDLL->UnlockAchievement(ACHIEVEMENT_XP1_18);4650			}4651		}46524653		if(m_pCity->isCapital() && pNewReligion->m_eFounder == GC.getGame().getActivePlayer())4654		{4655			//Determine if this is a standard size or larger map.4656			bool bIsStandardOrLarger = false;4657			Database::Connection* pDB = GC.GetGameDatabase();4658			Database::Results kStandardSize;4659			if(pDB->SelectAt(kStandardSize, "Worlds", "Type", "WORLDSIZE_STANDARD"))4660			{4661				if(kStandardSize.Step())4662				{4663					int idColumn = kStandardSize.ColumnPosition("ID");4664					if(idColumn >= 0)4665					{4666						WorldSizeTypes eWorldSize = GC.getMap().getWorldSize();4667						int standardWorldSize = kStandardSize.GetInt(idColumn);4668						if(eWorldSize >= standardWorldSize)4669						{4670							bIsStandardOrLarger = true;4671						}4672					}4673				}4674			}46754676			if(bIsStandardOrLarger)4677			{4678				//Determine if this religion has spread to all capitals4679				bool bSpreadToAllCapitals = true;4680				for(int i = 0; i < MAX_MAJOR_CIVS; ++i)4681				{4682					CvPlayerAI& kPlayer = GET_PLAYER(static_cast<PlayerTypes>(i));4683					if(kPlayer.isAlive())4684					{4685						CvCity* pCapital = kPlayer.getCapitalCity();4686						if(pCapital != NULL)4687						{4688							CvCityReligions* pCityReligions = pCapital->GetCityReligions();4689							if(pCityReligions != NULL)4690							{4691								if(pCityReligions->GetReligiousMajority() != pNewReligion->m_eFounder)4692								{4693									bSpreadToAllCapitals = false;4694									break;4695								}4696							}4697						}4698					}46994700					if(bSpreadToAllCapitals)4701					{4702						gDLL->UnlockAchievement(ACHIEVEMENT_XP1_19);4703					}4704				}4705			}4706		}4707#endif47084709		// Diplo implications (there must have been religion switch and a responsible party)4710		if(eMajority != eOldMajority && eResponsibleParty != NO_PLAYER)4711		{4712			// Is the city owner not the founder of this religion?4713			if(pNewReligion->m_eFounder != m_pCity->getOwner())4714			{4715				CvPlayer& kCityOwnerPlayer = GET_PLAYER(m_pCity->getOwner());47164717				// Did he found another religion?4718				ReligionTypes eCityOwnerReligion = kCityOwnerPlayer.GetReligions()->GetReligionCreatedByPlayer();4719				if(eCityOwnerReligion >= RELIGION_PANTHEON)4720				{4721					int iPoints = 0;47224723					// His religion wasn't present here, minor hit4724					if(eOldMajority != eCityOwnerReligion)4725					{4726						iPoints = GC.getRELIGION_DIPLO_HIT_INITIAL_CONVERT_FRIENDLY_CITY(); /*1*/4727					}47284729					// This was his holy city; huge hit!4730					else if(m_pCity->GetCityReligions()->IsHolyCityForReligion(eCityOwnerReligion))4731					{4732						iPoints = GC.getRELIGION_DIPLO_HIT_CONVERT_HOLY_CITY(); /*25*/4733					}47344735					// He had established his religion here, major hit4736					else4737					{4738						iPoints = GC.getRELIGION_DIPLO_HIT_RELIGIOUS_FLIP_FRIENDLY_CITY(); /*3*/4739					}47404741					kCityOwnerPlayer.GetDiplomacyAI()->ChangeNegativeReligiousConversionPoints(eResponsibleParty, iPoints);4742				}4743			}4744		}47454746		ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();4747		if(pkScriptSystem)4748		{4749			CvLuaArgsHandle args;4750			args->Push(m_pCity->getOwner());4751			args->Push(eMajority);4752			args->Push(m_pCity->getX());4753			args->Push(m_pCity->getY());47544755			// Attempt to execute the game events.4756			// Will return false if there are no registered listeners.4757			bool bResult = false;4758			LuaSupport::CallHook(pkScriptSystem, "CityConvertsReligion", args.get(), bResult);4759		}4760	}4761}

Calls

Called by