public void StartQuest(QuestInstance quest) { ServiceLocator.QuestService.GetQuestStatus(quest).HasStarted = true; ServiceLocator.EconomyService.Gold -= quest.Cost.ModifiedValue; GetQuestStatus(quest).OnQuestExpired -= OnQuestExpired; }
public void CompleteQuest(QuestInstance quest) { QuestStatus status = GetQuestStatus(quest); bool successful = status.HasCompletedSuccesfully(); foreach (HeroInstance hero in status.AssignedHeroes.Values) { HeroStates targetHeroState = HeroStates.IDLE; if (successful) { hero.Experience += quest.TotalExperience; } else { if (MathUtilities.RollRandom(status.RiskInjuryRate)) { targetHeroState = HeroStates.WOUNDED; } else if (MathUtilities.RollRandom(status.RiskInjuryRate)) { targetHeroState = HeroStates.DEAD; } } hero.HeroState = targetHeroState; } if (successful) { ServiceLocator.EconomyService.Gold += quest.GoldReward; } RemoveQuest(quest); }
public FactionInstance GetQuestFaction(QuestInstance quest) { if (m_FactionTable.ContainsKey(quest)) { return(m_FactionTable[quest]); } return(null); }
public QuestStatus GetQuestStatus(QuestInstance quest) { if (m_QuestStatuses.ContainsKey(quest)) { return(m_QuestStatuses[quest]); } return(null); }
public void CheckQuests() { if (gameWon) { return; } foreach (Transform t in quests) { QuestInstance qI = t.GetComponent <QuestInstance>(); if (qI.completed) { return; } switch (qI.quest.res) { case Resource.Money: if (money >= qI.quest.amount) { qI.quest.completed = true; qI.Complete(); } break; case Resource.Notoriety: if (notor >= qI.quest.amount) { qI.quest.completed = true; qI.Complete(); } break; case Resource.Cultists: if (numOfCultists >= qI.quest.amount) { qI.quest.completed = true; qI.Complete(); } break; case Resource.Time: if (timeSurvived >= qI.quest.amount) { qI.quest.completed = true; qI.Complete(); } break; default: break; } } if (quests[0].GetComponent <QuestInstance>().completed&& quests[1].GetComponent <QuestInstance>().completed&& quests[2].GetComponent <QuestInstance>().completed) { OpenWinMenu(); } }
public void RemoveQuest(QuestInstance quest) { m_QuestStatuses[quest].OnStatusUpdate -= QuestStatusUpdateWrapper; m_FactionTable.Remove(quest); m_QuestStatuses.Remove(quest); OnQuestsUpdate(quest, QuestUpdateAction.REMOVED); }
public ModelQuest() { Secondaryobjectives = new List <ModelQuestSecondaryobjectives>(); Secondaryrewards = new List <ModelQuestSecondaryrewards>(); Timereffects = new List <ModelQuestTimereffects>(); Playersettings = new List <ModelQuestPlayersettings>(); Diplomacysettings = new List <ModelQuestDiplomacysettings>(); Instance = new QuestInstance(); }
private void OnQuestSubmitted() { QuestInstance quest = m_ActiveQuest.QuestInstance; Destroy(m_QuestInterfaceTargets[m_ActiveQuest].gameObject); m_QuestInterfaceTargets.Remove(m_ActiveQuest); m_ActiveQuest.TargetTransform = questSubmittedPosition; m_ActiveQuest = null; }
public void RegisterQuest(QuestInstance quest, FactionInstance faction) { m_FactionTable[quest] = faction; m_QuestStatuses[quest] = new QuestStatus(quest); m_QuestStatuses[quest].OnQuestExpired += OnQuestExpired; m_QuestStatuses[quest].OnStatusUpdate += QuestStatusUpdateWrapper; OnQuestsUpdate(quest, QuestUpdateAction.ADDED); OnQuestStatusUpdate(m_QuestStatuses[quest].AssignedHeroes, m_QuestStatuses[quest]); }
private void QuestUpdated(QuestInstance quest, QuestUpdateAction action) { switch (action) { case QuestUpdateAction.ADDED: AddQuestInterface(quest); break; case QuestUpdateAction.REMOVED: RemoveQuestInterface(quest); break; } }
private List <QuestInstance> UpdateQuestTimeLimits(List <QuestInstance> list, int dayLimit) { for (int i = list.Count - 1; i >= 0; i--) { QuestInstance quest = list[i]; quest.DaysLeftOnPost--; if (quest.DaysLeftOnPost <= dayLimit) { list.Remove(quest); } } return(list); }
private void NextDayStep() { if (m_QuestsToAssign.Count != 0) { QuestInstance nextQuest = m_QuestsToAssign[m_QuestsToAssign.Count - 1]; m_QuestsToAssign.Remove(nextQuest); QuestDetailsWindow.Instance.OpenWindow(nextQuest, QuestDetailsWindowMode.HERO_SELECT); m_CurrentDayStep++; return; } while (m_ActiveQuestsToUpdate.Count != 0) { QuestInstance activeQuest = m_ActiveQuestsToUpdate[m_ActiveQuestsToUpdate.Count - 1]; activeQuest.DaysLeftOnQuest--; m_ActiveQuestsToUpdate.Remove(activeQuest); if (activeQuest.DaysLeftOnQuest <= 0) { QuestDetailsWindow.Instance.OpenWindow(activeQuest, QuestDetailsWindowMode.COMPLETED); activeQuest.CompleteQuest(QuestManager.ActiveQuests[activeQuest]); m_CurrentDayStep++; return; } } if (m_CurrentDayStep == 0) { nothingToReportUI.SetActive(true); TimeUtilities.ExecuteAfterDelay(() => { nothingToReportUI.SetActive(false); NextDayStep(); }, 2.5f, this); m_CurrentDayStep++; return; } CurrentDay++; OnNextDay(); QuestManager.PostedQuests = UpdateQuestTimeLimits(QuestManager.PostedQuests, 0); QuestManager.Requests = UpdateQuestTimeLimits(QuestManager.Requests, 0); InventoryManager.Gold -= 4; StartCoroutine(SunRotateRoutine(true)); NightFadeUI.Instance.Disable(() => { }); QuestDetailsWindow.Instance.OnWindowClose -= NextDayStep; }
public virtual QuestInstance newInstance() { QuestInstance qi = new QuestInstance(); qi.quest = this; qi.objectives = new List <QuestObjectiveEvaluator>(); QuestObjective[] objectives = this.gameObject.GetComponents <QuestObjective>(); if (objectives != null) { for (int i = 0; i < objectives.Length; i++) { qi.objectives.Add(objectives[i].getEvaluator()); } } return(qi); }
private void OnQuestEventTimerComplete() { m_QuestEventTimeTracker.OnTimerCompleted -= OnQuestEventTimerComplete; QuestEventData eventData = m_QuestEventDataList[m_CurrentQuestEventData]; bool spawnQuest = UnityEngine.Random.Range(0, 101) < eventData.chance; if (spawnQuest) { for (int i = 0; i < eventData.questCount; i++) { QuestInstance quest = QuestGenerator.GenerateQuest(1, m_QuestMakeupRandom.GetRandomValue()); FactionInstance faction = ServiceLocator.AllegianceService.Factions.GetRandom(); ServiceLocator.QuestService.RegisterQuest(quest, faction); } m_CurrentQuestEventData = -1; } StartNextQuestEvent(); }
/// <summary> /// Get quest instance from quest. /// </summary> /// <param name="q">The quest.</param> /// <returns>Quest instance.</returns> public static QuestInstance GetQuestInstance(Quest q) { QuestInstance ObjInstance = new QuestInstance() { Id = q.Id, Status = "assigned", Scale = q.Questbasescale, Timer = q.Timer, Giveregion = q.GiveRegion, Returnregion = q.ReturnRegion, Active = ((q.Questtype == QuestTypes.CapitolCity) || (q.Questtype == QuestTypes.Global)) ? "true" : "false", Objective = new ModelQuestinstanceObjective() { Id = q.Objectives.Id, Type = "And", MustFailAll = q.Objectives.Mustfailall, Objective = QuestHelper.ConvertQuestObjectiveValues(q.Objectives.Values) }, Secondaryobjectives = QuestHelper.ConvertQuestSecondaryobjectivesValues(q) }; return(ObjInstance); }
public void ApplyQuestChain(QuestInstance chain) { m_QuestInstance = chain; if (QuestManager.PostedQuests.Contains(m_QuestInstance)) { m_QuestMode = QuestDetailsWindowMode.POSTED_REVIEW; } else if (QuestManager.Requests.Contains(m_QuestInstance)) { m_QuestMode = QuestDetailsWindowMode.SETUP; } else { m_QuestMode = QuestDetailsWindowMode.ACTIVE_REVIEW; } m_QuestInstance.OnDaysLeftUpdate += UpdateText; UpdateText(); }
private void RemoveQuestInterface(QuestInstance quest) { QuestInterface questInterfaceToRemove = null; foreach (QuestInterface questInterface in m_QuestInterfaceTargets.Keys) { if (questInterface.QuestInstance == quest) { questInterfaceToRemove = questInterface; break; } } if (questInterfaceToRemove == null) { return; } Destroy(questInterfaceToRemove.gameObject); Destroy(m_QuestInterfaceTargets[questInterfaceToRemove].gameObject); m_QuestInterfaceTargets.Remove(questInterfaceToRemove); }
private void AddQuestInterface(QuestInstance quest) { QuestListEntry newEntry = Instantiate(questListEntryPrefab, questListParent); QuestInterface newInterface = Instantiate(questInterfacePrefab, questInstancesParent); m_QuestInterfaceTargets[newInterface] = newEntry; newInterface.QuestInstance = quest; newInterface.SetInteractable(false); newEntry.GetComponent <RectTransform>().rect.Set(selectedQuestPosition.rect.x, selectedQuestPosition.rect.y, selectedQuestPosition.rect.width, selectedQuestPosition.rect.height); newEntry.OnButtonClick.AddListener(() => { if (m_ActiveQuest == newInterface) { return; } SetQuestState(newInterface, QuestInterfaceStates.ACTIVE); }); newEntry.OnHoverStart += () => { if (m_ActiveQuest == newInterface) { return; } SetQuestState(newInterface, QuestInterfaceStates.HOVER); }; newEntry.OnHoverEnd += () => { if (m_ActiveQuest == newInterface) { return; } SetQuestState(newInterface, QuestInterfaceStates.DEFAULT); }; SetQuestState(newInterface, QuestInterfaceStates.DEFAULT); }
public static void InitializeServices(GameSetupData data) { //Factions and heroes for (int i = 0; i < data.factionCount; i++) { FactionInstance faction = FactionGenerator.GenerateFaction(); foreach (HeroType heroType in Enum.GetValues(typeof(HeroType))) { HeroInstance hero = HeroGenerator.GenerateHero(1, heroType); ServiceLocator.AllegianceService.SetHeroAllegiance(hero, faction); } /*for (int h = 0; h < Random.Range(data.heroesPerFactionMin, data.heroesPerFactionMax + 1); h++) { * HeroInstance hero = HeroGenerator.GenerateHero(1); * ServiceLocator.AllegianceService.SetHeroAllegiance(hero, faction); * }*/ for (int q = 0; q < data.startQuests; q++) { QuestInstance quest = QuestGenerator.GenerateQuest(1, QuestMakeupType.SOLO); ServiceLocator.QuestService.RegisterQuest(quest, faction); } } }
public virtual QuestInstance newInstance() { if (!metaQuestDummy) { metaQuestDummy = new GameObject("metaQuestDummy"); DontDestroyOnLoad(metaQuestDummy); } //strip the dummy gameobject from the components MonoBehaviour[] components = metaQuestDummy.GetComponents <MonoBehaviour>(); foreach (MonoBehaviour bhvr in components) { Destroy(bhvr); } //create a new quest instance QuestInstance qi = new QuestInstance(); //copy the data qi.quest = metaQuestDummy.AddComponent <Quest>(); qi.quest.audioQuest = _music; qi.quest.title = _title; qi.quest.town = _town; qi.quest.background = _background; qi.quest.baseCoinsAward = _award; qi.quest.startDialog = metaQuestDummy.AddComponent <Dialog>(); //create the dialog Dialog dialog = qi.quest.startDialog; foreach (DialogMessage dm in messages) { DialogMessage msg = new DialogMessage(); msg.CopyFrom(dm); dialog.messages.Add(msg); } //add the accept side quest window and the quest title cinematic event metaQuestDummy.AddComponent <ShowAcceptSideQuestWindow>(); metaQuestDummy.AddComponent <ShowQuestTitle>(); //create new quest objectives evaluator qi.objectives = new List <QuestObjectiveEvaluator>(); MetaKillQuest[] mkq = GetComponents <MetaKillQuest>(); List <KillQuest> mandatoryKillQuests = new List <KillQuest>(); List <KillQuest> optionalKillQuests = new List <KillQuest>(); if (mkq != null) { foreach (MetaKillQuest mk in mkq) { if (mk._mandatory) { mandatoryKillQuests.Add(mk as KillQuest); } else { optionalKillQuests.Add(mk as KillQuest); } } foreach (KillQuest kq in mandatoryKillQuests) { qi.objectives.Add(kq.getEvaluator()); } if (_maxKillQuests >= 0) { if (mandatoryKillQuests.Count < _maxKillQuests) { //random sort optionalKillQuests.Sort(delegate(KillQuest kq1, KillQuest kq2) { return((Random.Range(0, 2) == 0)?-1:1); //shuffle }); int numKillQuestsToAdd = _maxKillQuests - mandatoryKillQuests.Count; for (int i = 0; i < numKillQuestsToAdd; i++) { qi.objectives.Add(optionalKillQuests[i].getEvaluator()); } } } else { foreach (KillQuest kq in optionalKillQuests) { qi.objectives.Add(kq.getEvaluator()); } } } LootQuest[] lqs = GetComponents <LootQuest>(); if (lqs != null) { foreach (LootQuest lq in lqs) { qi.objectives.Add(lq.getEvaluator()); } } RescueQuest[] rqs = GetComponents <RescueQuest>(); if (rqs != null && rqs.Length > 0) { int index = Random.Range(0, rqs.Length); Debug.Log(index); qi.objectives.Add(rqs[index].getEvaluator()); } return(qi); }
public void OpenWindow(QuestInstance quest, QuestDetailsWindowMode mode) { WindowMode = mode; if (quest == CurrentQuest) { gameObject.SetActive(!gameObject.activeSelf); } else { gameObject.SetActive(true); } CurrentQuest = quest; Reset(); switch (mode) { case QuestDetailsWindowMode.SETUP: closeButton.gameObject.SetActive(true); skipButton.gameObject.SetActive(false); cancelButton.gameObject.SetActive(false); acceptButton.gameObject.SetActive(false); completeButton.gameObject.SetActive(false); postButton.gameObject.SetActive(true); RefreshItemRewardDropdown(); SetNoHero(); CheckPostButtonStatus(); break; case QuestDetailsWindowMode.HERO_SELECT: closeButton.gameObject.SetActive(false); skipButton.gameObject.SetActive(true); cancelButton.gameObject.SetActive(true); acceptButton.gameObject.SetActive(true); completeButton.gameObject.SetActive(false); postButton.gameObject.SetActive(false); break; case QuestDetailsWindowMode.POSTED_REVIEW: closeButton.gameObject.SetActive(true); skipButton.gameObject.SetActive(false); cancelButton.gameObject.SetActive(true); acceptButton.gameObject.SetActive(false); completeButton.gameObject.SetActive(false); postButton.gameObject.SetActive(false); SetNoHero(); break; case QuestDetailsWindowMode.ACTIVE_REVIEW: closeButton.gameObject.SetActive(true); skipButton.gameObject.SetActive(false); cancelButton.gameObject.SetActive(true); acceptButton.gameObject.SetActive(false); completeButton.gameObject.SetActive(false); postButton.gameObject.SetActive(false); FindActiveHero(); break; case QuestDetailsWindowMode.COMPLETED: closeButton.gameObject.SetActive(false); skipButton.gameObject.SetActive(false); cancelButton.gameObject.SetActive(false); acceptButton.gameObject.SetActive(false); completeButton.gameObject.SetActive(true); postButton.gameObject.SetActive(false); FindActiveHero(); break; } questTitle.text = "<b><u>" + CurrentQuest.QuestSource.RequestTitle + "</u>\n<size=18>" + CurrentQuest.QuestTypeDisplay + " - </b><i>" + CurrentQuest.DurationInDays + " Day" + (CurrentQuest.DurationInDays > 1 ? "s" : "") + " duration</i></size>"; difficultyText.text = "" + CurrentQuest.DifficultyLevel; handlerGoldReward.text = CurrentQuest.HandlerGoldRewardEstimate; handlerItemRewardParent.SetActive(CurrentQuest.HandlerItemReward != null); handlerRewardItemInstance.SetItem(CurrentQuest.HandlerItemReward != null ? CurrentQuest.HandlerItemReward.Item : (GameItem)null); handlerAdditionalRewardParent.SetActive(CurrentQuest.AdditionalReward != null); handlerAdditionalReward.text = CurrentQuest.AdditionalReward != null ? CurrentQuest.AdditionalReward.DisplayValue : "-"; foreach (QuestDetailsHero heroSection in m_HeroSections) { heroSection.Reload(); } }