Bazaar developer reference

CvMinorCivQuest::IsExpired()

Defined in
CvMinorCivAI.cpp, line 752
Class
CvMinorCivQuest
Hook name
CivHooks::CvMinorCivQuest_IsExpired
Lua events
GameEvents.QuestIsExpired

Hooks

static bool BeforeCvMinorCivQuest_IsExpired(CvMinorCivQuest* self, bool& result);static void AfterCvMinorCivQuest_IsExpired(CvMinorCivQuest* self, bool& result);static bool ReplaceCvMinorCivQuest_IsExpired(bool (*original)(CvMinorCivQuest*), CvMinorCivQuest* self);CivRegisterBefore<CivHooks::CvMinorCivQuest_IsExpired>(host, &BeforeCvMinorCivQuest_IsExpired);CivRegisterAfter<CivHooks::CvMinorCivQuest_IsExpired>(host, &AfterCvMinorCivQuest_IsExpired);CivRegisterReplace<CivHooks::CvMinorCivQuest_IsExpired>(host, &ReplaceCvMinorCivQuest_IsExpired);

Code

751/// Is this quest now expired (ie. time limit is up or condition is no longer valid)?752bool CvMinorCivQuest::IsExpired()753{754	// If this quest type has an end turn, have we passed it?755	if(GetEndTurn() != NO_TURN && GC.getGame().getGameTurn() > GetEndTurn())756	{757		return true;758	}759760#if defined(MOD_EVENTS_QUESTS)761	if (UseEvents() && !IsInternal()) {762		if(GetEndTurn() != NO_TURN) {763			// Quests with a duration automatically expire on the last turn if they wern't successful764			if (GC.getGame().getGameTurn() == GetEndTurn() && !IsComplete()) {765				return true;766			}767		} else {768			// Otherwise, send an event to ascertain if they've expired769			if (GAMEEVENTINVOKE_TESTANY(GAMEEVENT_QuestIsExpired, m_eAssignedPlayer, m_eMinor, m_eType) == GAMEEVENTRETURN_TRUE) {770				return true;771			}772		}773		774		return false;775	} else {776#endif777	// Build a Route778	if(m_eType == MINOR_CIV_QUEST_ROUTE)779	{780	}781782	// City-state wanted us to clear a camp783	if(m_eType == MINOR_CIV_QUEST_KILL_CAMP)784	{785		int iX = GetPrimaryData();786		int iY = GetSecondaryData();787		CvPlot* pPlot = GC.getMap().plot(iX, iY);788789		if(pPlot)790		{791			// Camp that was here is gone792			if(!pPlot->HasBarbarianCamp())793			{794				// Someone cleared it, and it wasn't us795				if(pPlot->GetPlayerThatClearedBarbCampHere() != NO_PLAYER && pPlot->GetPlayerThatClearedBarbCampHere() != m_eAssignedPlayer)796				{797					return true;798				}799			}800		}801	}802803	// Connect a resource804	if(m_eType == MINOR_CIV_QUEST_CONNECT_RESOURCE)805	{806	}807808	// CONSTRUCT A WONDER809	else if(m_eType == MINOR_CIV_QUEST_CONSTRUCT_WONDER)810	{811		BuildingTypes eWonder = (BuildingTypes) GetPrimaryData();812		CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eWonder);813		CvAssertMsg(pkBuildingInfo, "Building info not expected to be FALSE! Please send Anton your save file and version.");814		if(!pkBuildingInfo) return false;815816		for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)817		{818			const PlayerTypes eLoopPlayer = (PlayerTypes) iPlayerLoop;819			CvPlayer* pLoopPlayer = &GET_PLAYER(eLoopPlayer);820821			if(pLoopPlayer)822			{823				// Someone built the wonder, and it wasn't us824				if(m_eAssignedPlayer != eLoopPlayer && pLoopPlayer->countNumBuildings(eWonder) > 0)825				{826					return true;827				}828			}829		}830	}831832	// Spawn a Great Person833	else if(m_eType == MINOR_CIV_QUEST_GREAT_PERSON)834	{835	}836837	// KILL ANOTHER CITY STATE838	else if(m_eType == MINOR_CIV_QUEST_KILL_CITY_STATE)839	{840		PlayerTypes eTargetCityState = (PlayerTypes) GetPrimaryData();841		CvPlayer* pTargetCityState = &GET_PLAYER(eTargetCityState);842843		if(pTargetCityState)844		{845			CvTeam* pTargetCityStateTeam = &GET_TEAM(pTargetCityState->getTeam());846			if(pTargetCityStateTeam)847			{848				// Someone killed the City State, and it wasn't us849				if(!pTargetCityState->isAlive() && pTargetCityStateTeam->GetKilledByTeam() != GET_PLAYER(m_eAssignedPlayer).getTeam())850				{851					return true;852				}853			}854		}855	}856857	// Find a Player858	else if(m_eType == MINOR_CIV_QUEST_FIND_PLAYER)859	{860		PlayerTypes eTargetPlayer = (PlayerTypes) GetPrimaryData();861		CvPlayer* pTargetPlayer = &GET_PLAYER(eTargetPlayer);862863		if(pTargetPlayer)864		{865			// Someone killed the Player866			if(!GET_PLAYER(eTargetPlayer).isAlive())867				return true;868		}869	}870871	// Find a Natural Wonder872	else if(m_eType == MINOR_CIV_QUEST_FIND_NATURAL_WONDER)873	{874	}875876	// Give Gold877	else if(m_eType == MINOR_CIV_QUEST_GIVE_GOLD)878	{879	}880881	// Pledge to Protect882	else if(m_eType == MINOR_CIV_QUEST_PLEDGE_TO_PROTECT)883	{884	}885886	// Contest Culture887	else if(m_eType == MINOR_CIV_QUEST_CONTEST_CULTURE)888	{889		if(GC.getGame().getGameTurn() == GetEndTurn() && !IsComplete())890			return true;891	}892893	// Contest Faith894	else if(m_eType == MINOR_CIV_QUEST_CONTEST_FAITH)895	{896		if(GC.getGame().getGameTurn() == GetEndTurn() && !IsComplete())897			return true;898	}899900	// Contest Techs901	else if(m_eType == MINOR_CIV_QUEST_CONTEST_TECHS)902	{903		if(GC.getGame().getGameTurn() == GetEndTurn() && !IsComplete())904			return true;905	}906907	// Invest908	else if(m_eType == MINOR_CIV_QUEST_INVEST)909	{910	}911912	// Bully target City-State913	else if(m_eType == MINOR_CIV_QUEST_BULLY_CITY_STATE)914	{915		PlayerTypes eTargetCityState = (PlayerTypes) GetPrimaryData();916		CvPlayer* pTargetCityState = &GET_PLAYER(eTargetCityState);917918		if(pTargetCityState)919		{920			// Someone killed the City State...ouch921			if(!pTargetCityState->isAlive())922				return true;923		}924	}925926	// Denounce target Major927	else if(m_eType == MINOR_CIV_QUEST_DENOUNCE_MAJOR)928	{929		PlayerTypes eTargetPlayer = (PlayerTypes) GetPrimaryData();930		CvPlayer* pTargetPlayer = &GET_PLAYER(eTargetPlayer);931932		if(pTargetPlayer)933		{934			// Someone killed the Major935			if(!pTargetPlayer->isAlive())936				return true;937		}938	}939940	// Spread your religion to us941	else if(m_eType == MINOR_CIV_QUEST_SPREAD_RELIGION)942	{943		//antonjs: consider: if holy city is lost944	}945	946	// Trade Route947	else if(m_eType == MINOR_CIV_QUEST_TRADE_ROUTE)948	{949	}950#if defined(MOD_EVENTS_QUESTS)951	}952#endif953954	return false;955}

Calls

Called by