Bazaar developer reference

CvCityCulture::GetTourismTooltip()

Defined in
CvCultureClasses.cpp, line 4707
Class
CvCityCulture
Hook name
CivHooks::CvCityCulture_GetTourismTooltip

Hooks

static bool BeforeCvCityCulture_GetTourismTooltip(CvCityCulture* self, CvString& result);static void AfterCvCityCulture_GetTourismTooltip(CvCityCulture* self, CvString& result);static CvString ReplaceCvCityCulture_GetTourismTooltip(CvString (*original)(CvCityCulture*), CvCityCulture* self);CivRegisterBefore<CivHooks::CvCityCulture_GetTourismTooltip>(host, &BeforeCvCityCulture_GetTourismTooltip);CivRegisterAfter<CivHooks::CvCityCulture_GetTourismTooltip>(host, &AfterCvCityCulture_GetTourismTooltip);CivRegisterReplace<CivHooks::CvCityCulture_GetTourismTooltip>(host, &ReplaceCvCityCulture_GetTourismTooltip);

Code

4706/// What is the tooltip describing the tourism output?4707CvString CvCityCulture::GetTourismTooltip()4708{4709	CvString szRtnValue = "";4710	CvString szTemp;4711 	CvString sharedReligionCivs = "";4712	CvString openBordersCivs = "";4713	CvString tradeRouteCivs = "";4714	CvString lessHappyCivs = "";4715	CvString commonFoeCivs = "";4716	CvString sharedIdeologyCivs = "";4717	CvString differentIdeologyCivs = "";4718	TeamTypes eTeam = m_pCity->getTeam();4719	CvPlayer &kCityPlayer = GET_PLAYER(m_pCity->getOwner());4720	PolicyBranchTypes eMyIdeology = kCityPlayer.GetPlayerPolicies()->GetLateGamePolicyTree();4721	ReligionTypes ePlayerReligion = kCityPlayer.GetReligions()->GetReligionInMostCities();47224723	// Great Works4724#if defined(MOD_GLOBAL_GREATWORK_YIELDTYPES)4725	// Ignore those Great Works in storage, ie not generating a yield4726	int iGWTourism = GetNumGreatWorks(false) * GC.getBASE_TOURISM_PER_GREAT_WORK();4727#else4728	int iGWTourism = GetNumGreatWorks() * GC.getBASE_TOURISM_PER_GREAT_WORK();4729#endif4730	iGWTourism += (m_pCity->GetCityBuildings()->GetGreatWorksTourismModifier() * iGWTourism / 100);4731	szRtnValue = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_GREAT_WORKS", iGWTourism, m_pCity->GetCityCulture()->GetNumGreatWorks());47324733#if defined(MOD_GLOBAL_GREATWORK_YIELDTYPES)4734	int iThemingBonuses = m_pCity->GetCityBuildings()->GetThemingBonuses(YIELD_CULTURE);4735#else4736	int iThemingBonuses = m_pCity->GetCityBuildings()->GetThemingBonuses();4737#endif4738	if (iThemingBonuses > 0)4739	{4740		szRtnValue += "[NEWLINE][NEWLINE]";4741		szRtnValue += GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_THEMING_BONUSES", iThemingBonuses);4742	}47434744	// Landmarks, Wonders, Natural Wonders, Improvements4745	int iTileTourism = 0;4746	int iPercent = m_pCity->GetCityBuildings()->GetLandmarksTourismPercent();4747	if (iPercent > 0)4748	{4749		int iFromWonders = GetCultureFromWonders();4750		int iFromNaturalWonders = GetCultureFromNaturalWonders();4751#if defined(MOD_API_UNIFIED_YIELDS)4752		int iFromImprovements = GetYieldFromImprovements(YIELD_CULTURE);4753#else4754		int iFromImprovements = GetCultureFromImprovements();4755#endif4756		iTileTourism = ((iFromWonders + iFromNaturalWonders + iFromImprovements) * iPercent / 100);4757		if (szRtnValue.length() > 0)4758		{4759			szRtnValue += "[NEWLINE][NEWLINE]";4760		}4761		szRtnValue += GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_TILES", iTileTourism, iPercent);4762	}47634764	// Beliefs4765	int iSacredSitesTourism = 0;4766	int iReligiousArtTourism = 0;4767	ReligionTypes eMajority = m_pCity->GetCityReligions()->GetReligiousMajority();4768	const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, m_pCity->getOwner());4769	if(pReligion)4770	{4771		int iFaithBuildingTourism = pReligion->m_Beliefs.GetFaithBuildingTourism();4772		if (iFaithBuildingTourism > 0)4773		{4774			iSacredSitesTourism = m_pCity->GetCityBuildings()->GetNumBuildingsFromFaith() * iFaithBuildingTourism;4775		}4776		if (szRtnValue.length() > 0)4777		{4778			szRtnValue += "[NEWLINE][NEWLINE]";4779		}4780		szRtnValue += GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_FAITH_BUILDINGS", iSacredSitesTourism);47814782		for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)4783		{4784			BuildingClassTypes eBuildingClass = (BuildingClassTypes)jJ;47854786			CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);4787			if(!pkBuildingClassInfo)4788			{4789				continue;4790			}47914792			CvCivilizationInfo& playerCivilizationInfo = GET_PLAYER(m_pCity->getOwner()).getCivilizationInfo();4793			BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings(eBuildingClass);47944795			if(eBuilding != NO_BUILDING)4796			{4797				if(m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)4798				{4799#if defined(MOD_BUGFIX_MINOR)4800					iReligiousArtTourism += pReligion->m_Beliefs.GetBuildingClassTourism(eBuildingClass) * m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding);4801#else4802					iReligiousArtTourism += pReligion->m_Beliefs.GetBuildingClassTourism(eBuildingClass);4803#endif4804				}4805			}4806		}4807		if (szRtnValue.length() > 0)4808		{4809			szRtnValue += "[NEWLINE][NEWLINE]";4810		}4811		szRtnValue += GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_RELIGIOUS_ART", iReligiousArtTourism);4812	}48134814	// Tech enhanced Tourism4815	for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)4816	{4817		BuildingClassTypes eBuildingClass = (BuildingClassTypes)jJ;48184819		CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);4820		if(!pkBuildingClassInfo)4821		{4822			continue;4823		}48244825		CvCivilizationInfo& playerCivilizationInfo = GET_PLAYER(m_pCity->getOwner()).getCivilizationInfo();4826		BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings(eBuildingClass);48274828		if(eBuilding != NO_BUILDING)4829		{4830			if(m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)4831			{4832				int iTechEnhancedTourism = GC.getBuildingInfo(eBuilding)->GetTechEnhancedTourism();4833				if (iTechEnhancedTourism > 0 && GET_TEAM(m_pCity->getTeam()).GetTeamTechs()->HasTech((TechTypes)GC.getBuildingInfo(eBuilding)->GetEnhancedYieldTech()))4834				{4835#if defined(MOD_BUGFIX_MINOR)4836					iTechEnhancedTourism *= m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding);4837#endif4838					if (szRtnValue.length() > 0)4839					{4840						szRtnValue += "[NEWLINE][NEWLINE]";4841					}4842					szRtnValue += GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_TECH_ENHANCED", iTechEnhancedTourism);4843				}4844			}4845		}4846	}48474848	int iBuildingMod = 0;4849	for(int iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)4850	{4851		CvCivilizationInfo& playerCivilizationInfo = kCityPlayer.getCivilizationInfo();4852		BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings((BuildingClassTypes)iBuildingClassLoop);4853		if (eBuilding != NO_BUILDING)4854		{4855			CvBuildingEntry *pkEntry = GC.getBuildingInfo(eBuilding);4856			if (pkEntry)4857			{4858				iBuildingMod = kCityPlayer.GetPlayerPolicies()->GetBuildingClassTourismModifier((BuildingClassTypes)iBuildingClassLoop);4859				if (iBuildingMod != 0 && m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)4860				{4861#if defined(MOD_BUGFIX_MINOR)4862					iBuildingMod *= m_pCity->GetCityBuildings()->GetNumBuilding(eBuilding);4863#endif4864					if (szRtnValue.length() > 0)4865					{4866						szRtnValue += "[NEWLINE][NEWLINE]";4867					}4868					szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_BUILDING_BONUS", iBuildingMod, pkEntry->GetDescription());4869					szRtnValue += szTemp;4870				}4871			}4872		}4873	}48744875	// Get policy bonuses4876	int iLessHappyMod = kCityPlayer.GetPlayerPolicies()->GetNumericModifier(POLICYMOD_TOURISM_MOD_LESS_HAPPY);4877	int iCommonFoeMod = kCityPlayer.GetPlayerPolicies()->GetNumericModifier(POLICYMOD_TOURISM_MOD_COMMON_FOE);4878	int iSharedIdeologyMod = kCityPlayer.GetPlayerPolicies()->GetNumericModifier(POLICYMOD_TOURISM_MOD_SHARED_IDEOLOGY);48794880	// If generating any, itemize which players we have bonuses with4881	if (iGWTourism > 0 || iTileTourism > 0)4882	{4883		for (int iLoopPlayer = 0; iLoopPlayer < MAX_MAJOR_CIVS; iLoopPlayer++)4884		{4885			CvPlayer &kPlayer = GET_PLAYER((PlayerTypes)iLoopPlayer);4886			PolicyBranchTypes eTheirIdeology = kPlayer.GetPlayerPolicies()->GetLateGamePolicyTree();4887			if (kPlayer.isAlive() && !kPlayer.isMinorCiv() && iLoopPlayer != m_pCity->getOwner() && GET_TEAM(kCityPlayer.getTeam()).isHasMet(GET_PLAYER((PlayerTypes)iLoopPlayer).getTeam()))4888			{4889				// City shares religion with this player4890				if (kPlayer.GetReligions()->HasReligionInMostCities(ePlayerReligion))4891				{4892					if (sharedReligionCivs.length() > 0)4893					{4894						sharedReligionCivs += ", ";4895					}4896					sharedReligionCivs += kPlayer.getCivilizationShortDescription();4897				}48984899				// Open borders with this player4900				CvTeam &kTeam = GET_TEAM(kPlayer.getTeam());4901				if (kTeam.IsAllowsOpenBordersToTeam(eTeam))4902				{4903					if (openBordersCivs.length() > 0)4904					{4905						openBordersCivs += ", ";4906					}4907					openBordersCivs += kPlayer.getCivilizationShortDescription();4908				}49094910				// Trade route with this player4911				if (GC.getGame().GetGameTrade()->IsPlayerConnectedToPlayer(m_pCity->getOwner(), (PlayerTypes)iLoopPlayer))4912				{4913					if (tradeRouteCivs.length() > 0)4914					{4915						tradeRouteCivs += ", ";4916					}4917					tradeRouteCivs += kPlayer.getCivilizationShortDescription();4918				}49194920				// POLICY BONUSES4921				if (iLessHappyMod > 0)4922				{4923					if (kCityPlayer.GetExcessHappiness() > kPlayer.GetExcessHappiness())4924					{4925						if (lessHappyCivs.length() > 0)4926						{4927							lessHappyCivs += ", ";4928						}4929						lessHappyCivs += kPlayer.getCivilizationShortDescription();4930					}4931				}4932				if (iCommonFoeMod > 0)4933				{4934					PlayerTypes eLoopPlayer;4935					for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)4936					{4937						eLoopPlayer = (PlayerTypes) iPlayerLoop;49384939						if(eLoopPlayer !=(PlayerTypes) iLoopPlayer && eLoopPlayer != m_pCity->getOwner() && kCityPlayer.GetDiplomacyAI()->IsPlayerValid(eLoopPlayer))4940						{4941							// Are they at war with me too?4942							if (GET_TEAM(kCityPlayer.getTeam()).isAtWar(GET_PLAYER(eLoopPlayer).getTeam()) && GET_TEAM(kPlayer.getTeam()).isAtWar(GET_PLAYER(eLoopPlayer).getTeam()))4943							{4944								if (commonFoeCivs.length() > 0)4945								{4946									commonFoeCivs += ", ";4947								}4948								commonFoeCivs += kPlayer.getCivilizationShortDescription();4949							}4950						}4951					}4952				}49534954				// Shared ideology bonus (comes from a policy)4955				if (iSharedIdeologyMod > 0)4956				{4957					if (eMyIdeology != NO_POLICY_BRANCH_TYPE && eTheirIdeology != NO_POLICY_BRANCH_TYPE && eMyIdeology == eTheirIdeology)4958					{4959						if (sharedIdeologyCivs.length() > 0)4960						{4961							sharedIdeologyCivs += ", ";4962						}4963						sharedIdeologyCivs += kPlayer.getCivilizationShortDescription();4964					}4965				}49664967				// Different ideology penalty (applies all the time)4968				if (eMyIdeology != NO_POLICY_BRANCH_TYPE && eTheirIdeology != NO_POLICY_BRANCH_TYPE && eMyIdeology != eTheirIdeology)4969				{4970					if (differentIdeologyCivs.length() > 0)4971					{4972						differentIdeologyCivs += ", ";4973					}4974					differentIdeologyCivs += kPlayer.getCivilizationShortDescription();4975				}4976			}4977		}49784979		// Build the strings4980		if (sharedReligionCivs.length() > 0)4981		{4982			if (szRtnValue.length() > 0)4983			{4984				szRtnValue += "[NEWLINE][NEWLINE]";4985			}4986			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_RELIGION_BONUS", kCityPlayer.GetCulture()->GetTourismModifierSharedReligion());4987			szRtnValue += szTemp + sharedReligionCivs;4988		}4989		if (openBordersCivs.length() > 0)4990		{4991			if (szRtnValue.length() > 0)4992			{4993				szRtnValue += "[NEWLINE][NEWLINE]";4994			}4995			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_OPEN_BORDERS_BONUS", kCityPlayer.GetCulture()->GetTourismModifierOpenBorders());4996			szRtnValue += szTemp + openBordersCivs;4997		}4998		if (tradeRouteCivs.length() > 0)4999		{5000			if (szRtnValue.length() > 0)5001			{5002				szRtnValue += "[NEWLINE][NEWLINE]";5003			}5004			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_TRADE_ROUTE_BONUS", kCityPlayer.GetCulture()->GetTourismModifierTradeRoute());5005			szRtnValue += szTemp + tradeRouteCivs;5006		}5007		if (lessHappyCivs.length() > 0)5008		{5009			if (szRtnValue.length() > 0)5010			{5011				szRtnValue += "[NEWLINE][NEWLINE]";5012			}5013			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_LESS_HAPPY_BONUS", iLessHappyMod);5014			szRtnValue += szTemp + lessHappyCivs;5015		}5016		if (commonFoeCivs.length() > 0)5017		{5018			if (szRtnValue.length() > 0)5019			{5020				szRtnValue += "[NEWLINE][NEWLINE]";5021			}5022			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_COMMON_FOE_BONUS", iCommonFoeMod);5023			szRtnValue += szTemp + commonFoeCivs;5024		}5025		if (sharedIdeologyCivs.length() > 0)5026		{5027			if (szRtnValue.length() > 0)5028			{5029				szRtnValue += "[NEWLINE][NEWLINE]";5030			}5031			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_SHARED_IDEOLOGY_BONUS", iSharedIdeologyMod);5032			szRtnValue += szTemp + sharedIdeologyCivs;5033		}5034		if (differentIdeologyCivs.length() > 0)5035		{5036			if (szRtnValue.length() > 0)5037			{5038				szRtnValue += "[NEWLINE][NEWLINE]";5039			}5040			szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_DIFFERENT_IDEOLOGY_PENALTY", GC.getTOURISM_MODIFIER_DIFFERENT_IDEOLOGIES());5041			szRtnValue += szTemp + differentIdeologyCivs;5042		}5043	}50445045	int iTechSpreadModifier = kCityPlayer.GetInfluenceSpreadModifier();5046	if (iTechSpreadModifier > 0)5047	{5048		if (szRtnValue.length() > 0)5049		{5050			szRtnValue += "[NEWLINE][NEWLINE]";5051		}5052		szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_TECH_BONUS", iTechSpreadModifier);5053		szRtnValue += szTemp;5054	}5055	int iLeagueCityModifier = GC.getGame().GetGameLeagues()->GetCityTourismModifier(m_pCity->getOwner(), m_pCity);5056	if (iLeagueCityModifier > 0)5057	{5058		if (szRtnValue.length() > 0)5059		{5060			szRtnValue += "[NEWLINE][NEWLINE]";5061		}5062		szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_LEAGUES_BONUS", iLeagueCityModifier);5063		szRtnValue += szTemp;5064	}50655066	if (kCityPlayer.isGoldenAge() && kCityPlayer.GetPlayerTraits()->GetGoldenAgeTourismModifier())5067	{5068		if (szRtnValue.length() > 0)5069		{5070			szRtnValue += "[NEWLINE][NEWLINE]";5071		}5072		szTemp = GetLocalizedText("TXT_KEY_CO_CITY_TOURISM_CARNIVAL_BONUS", kCityPlayer.GetPlayerTraits()->GetGoldenAgeTourismModifier());5073		szRtnValue += szTemp;5074	}50755076	return szRtnValue;5077}

Calls

Called by