Hooks
static bool BeforeCvMinorCivAI_AddQuestIfAble(CvMinorCivAI* self, PlayerTypes eMajor, MinorCivQuestTypes eQuest, bool& result);static void AfterCvMinorCivAI_AddQuestIfAble(CvMinorCivAI* self, PlayerTypes eMajor, MinorCivQuestTypes eQuest, bool& result);static bool ReplaceCvMinorCivAI_AddQuestIfAble(bool (*original)(CvMinorCivAI*, PlayerTypes, MinorCivQuestTypes), CvMinorCivAI* self, PlayerTypes eMajor, MinorCivQuestTypes eQuest);CivRegisterBefore<CivHooks::CvMinorCivAI_AddQuestIfAble>(host, &BeforeCvMinorCivAI_AddQuestIfAble);CivRegisterAfter<CivHooks::CvMinorCivAI_AddQuestIfAble>(host, &AfterCvMinorCivAI_AddQuestIfAble);CivRegisterReplace<CivHooks::CvMinorCivAI_AddQuestIfAble>(host, &ReplaceCvMinorCivAI_AddQuestIfAble);
Code
5295/// For debugging and testing only. Adds eQuest if able, ignoring quest countdown timers.5296bool CvMinorCivAI::AddQuestIfAble(PlayerTypes eMajor, MinorCivQuestTypes eQuest)5297{5298 CvAssertMsg(eMajor >= 0, "eMajor is expected to be non-negative (invalid Index)");5299 CvAssertMsg(eMajor < MAX_MAJOR_CIVS, "eMajor is expected to be within maximum bounds (invalid Index)");5300 if(eMajor < 0 || eMajor >= MAX_MAJOR_CIVS) return false;53015302#if defined(MOD_EVENTS_QUESTS)5303 CvAssertMsg(eQuest >= NO_MINOR_CIV_QUEST_TYPE, "eQuest is expected to be non-negative (invalid Index)");5304 CvAssertMsg(eQuest < NUM_MINOR_CIV_QUEST_TYPES, "eQuest is expected to be within maximum bounds (invalid Index)");5305 if(eQuest < NO_MINOR_CIV_QUEST_TYPE || eQuest >= GC.getNumQuestInfos()) return false;5306#else5307 CvAssertMsg(eQuest >= NO_MINOR_CIV_QUEST_TYPE, "eQuest is expected to be non-negative (invalid Index)");5308 CvAssertMsg(eQuest < NUM_MINOR_CIV_QUEST_TYPES, "eQuest is expected to be within maximum bounds (invalid Index)");5309 if(eQuest < NO_MINOR_CIV_QUEST_TYPE || eQuest >= NUM_MINOR_CIV_QUEST_TYPES) return false;5310#endif53115312 if(!IsHasMetPlayer(eMajor))5313 return false;53145315 if(IsAtWarWithPlayersTeam(eMajor))5316 return false;53175318 if (!IsValidQuestForPlayer(eMajor, eQuest))5319 return false;53205321 if (IsActiveQuestForPlayer(eMajor, eQuest))5322 return false;53235324 CvAssert(IsPersonalQuest(eQuest) || IsGlobalQuest(eQuest));5325 if (IsPersonalQuest(eQuest))5326 {5327 if(GetNumActivePersonalQuestsForPlayer(eMajor) >= GetMaxActivePersonalQuestsForPlayer())5328 {5329 return false;5330 }53315332 AddQuestForPlayer(eMajor, eQuest, GC.getGame().getGameTurn());5333 return true;5334 }5335 else if (IsGlobalQuest(eQuest))5336 {5337 if(GetNumActiveGlobalQuests() >= GetMaxActiveGlobalQuests())5338 {5339 return false;5340 }53415342 int iNumValidPlayers = 0;5343 for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)5344 {5345 PlayerTypes ePlayerLoop = (PlayerTypes) iPlayerLoop;5346 if(IsValidQuestForPlayer(ePlayerLoop, eQuest))5347 iNumValidPlayers++;5348 }5349 if(iNumValidPlayers < GetMinPlayersNeededForQuest(eQuest))5350 return false;53515352 for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)5353 {5354 PlayerTypes ePlayerLoop = (PlayerTypes) iPlayerLoop;5355 if(IsValidQuestForPlayer(ePlayerLoop, eQuest))5356 AddQuestForPlayer(ePlayerLoop, eQuest, GC.getGame().getGameTurn());5357 }5358 return true;5359 }53605361 return false;5362}