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}