/// <summary>
        ///     Sets the quest's state.
        /// </summary>
        /// <param name="state">The state to be set.</param>
        public void SetState(QuestState state)
        {
            if (m_State == state)
            {
                return;
            }

            m_State = state;
            switch (m_State)
            {
            case QuestState.Inactive:
                m_QuestNode.SetState(QuestNodeState.Inactive);
                m_QuestCounters.StopListening();
                break;

            case QuestState.Active:
                m_QuestNode.SetState(QuestNodeState.Active);
                m_QuestCounters.StartListening();
                break;

            case QuestState.Success:
                m_QuestNode.SetState(QuestNodeState.Succeeded);
                m_QuestCounters.StopListening();
                break;

            case QuestState.Failed:
                m_QuestNode.SetState(QuestNodeState.Failed);
                m_QuestCounters.StopListening();
                break;
            }
        }
示例#2
0
    public void StartQuest(TopDownUIDialog dialog)
    {
        if (questHub != null && questState != QuestState.Started && questFinished == false)
        {
            this.enabled = true;
            if (dialog != null)
            {
                questGiverDialog = dialog;
            }
            else
            {
                Debug.LogError("You must assign TopDownUIDialog component of quest giver to the dialog event action that fires the StartQuest function of quest: " + questName);
            }

            questState = QuestState.Started;

            questHub.startedQuests.Add(this);
            questHub.activeQuest = this;

            uiManager.questLog.GetComponent <TopDownRpgQuestLog>().UpdateQuestList();

            questStartEvents.Invoke();

            //SOME NOTIFICATION THAT QUEST STARTED
            uiManager.notificationText.GetComponent <TopDownUIShowNotification>().ShowNotification("Quest Started \n''" + questName + "''");
        }
    }
示例#3
0
        public void Start()
        {
            if (Started)
            {
                Log.Error("Quest already started: " + Name);
                return;
            }

            state      = QuestState.Started;
            expireTime = Find.TickManager.TicksGame + RandomExpiryTicks();
            Find.World.GetComponent <WorldComponent_QuestTracker>().quests.Add(this);
            foreach (var part in def.questParts)
            {
                part.OnStart(this);
            }

            var slate = new Slate();

            handle                 = RimWorld.QuestUtility.GenerateQuestAndMakeAvailable(DefDatabase <QuestScriptDef> .GetNamed("CityQuest"), slate);
            handle.name            = Name;
            handle.description     = DetailText;
            handle.challengeRating = ChallengeRating;
            OnSetupHandle(handle);
            handle.Initiate();

            OnStart();
        }
示例#4
0
        public static void SpawnQuestItems(NWPlaceable oChest, NWPlayer oPC)
        {
            int    questID            = oChest.GetLocalInt("QUEST_ID");
            int    questStateSequence = oChest.GetLocalInt("QUEST_SEQUENCE");
            string questItemResref    = oChest.GetLocalString("QUEST_ITEM_RESREF");

            if (questID <= 0 || questStateSequence <= 0 || string.IsNullOrWhiteSpace(questItemResref))
            {
                return;
            }

            PCQuestStatus status     = DataService.Single <PCQuestStatus>(x => x.PlayerID == oPC.GlobalID && x.QuestID == questID);
            QuestState    questState = DataService.Get <QuestState>(status.CurrentQuestStateID);

            if (questStateSequence != questState.Sequence)
            {
                return;
            }
            if (_.GetIsObjectValid(_.GetItemPossessedBy(oPC.Object, questItemResref)) == FALSE)
            {
                return;
            }

            // PC is on the correct quest, correct state, the chest creates quest items, and the PC does not already have the quest item.
            // Spawn it.

            _.CreateItemOnObject(questItemResref, oChest.Object);
        }
 private void QuestChangedHandler(string title, QuestState newState)
 {
     if (newState == QuestState.Success)
     {
         Debug.Log("Quest completed callback");
     }
 }
示例#6
0
 public override void Complete()
 {
     state = QuestState.COMPLETED;
     base.Complete();
     marker.HideMarker();
     GameObject.Destroy(marker.gameObject);
 }
示例#7
0
 // Update is called once per frame
 void Update()
 {
     if (State == QuestState.Completed)
     {
         if (!done)
         {
             timer -= Time.deltaTime;
             if (timer <= 0f)
             {
                 done = true;
                 GameMaster.instance.Bonus.TacitusQuest[1].SetActive(true);
                 //quest stuff?
             }
         }
         return;
     }
     if (Tacitus.Count != 0 && State == QuestState.NotStarted && GameMaster.instance.Bonus.TacitusQuest[0].activeSelf == true)
     {
         State = QuestState.Started;
         return;
     }
     if (State == QuestState.Started)
     {
         for (int i = 0; i < Tacitus.Count; i++)
         {
             if (Tacitus[i] == null)
             {
                 State = QuestState.Completed;
                 Tacitus.RemoveAt(i);
                 return;
             }
         }
     }
 }
示例#8
0
        private void ShowQuests(QuestState questStateMask)
        {
            currentQuestStateMask = questStateMask;
            NoQuestsMessage       = GetNoQuestsMessage(questStateMask);
            List <QuestInfo> questList = new List <QuestInfo>();

            string[] titles = QuestLog.GetAllQuests(questStateMask);
            foreach (var title in titles)
            {
                FormattedText   description    = FormattedText.Parse(QuestLog.GetQuestDescription(title), DialogueManager.MasterDatabase.emphasisSettings);
                FormattedText   localizedTitle = FormattedText.Parse(QuestLog.GetQuestTitle(title), DialogueManager.MasterDatabase.emphasisSettings);
                FormattedText   heading        = (questHeadingSource == QuestHeadingSource.Description) ? description : localizedTitle;
                bool            abandonable    = QuestLog.IsQuestAbandonable(title) && IsShowingActiveQuests;
                bool            trackable      = QuestLog.IsQuestTrackingAvailable(title) && IsShowingActiveQuests;
                bool            track          = QuestLog.IsQuestTrackingEnabled(title);
                int             entryCount     = QuestLog.GetQuestEntryCount(title);
                FormattedText[] entries        = new FormattedText[entryCount];
                QuestState[]    entryStates    = new QuestState[entryCount];
                for (int i = 0; i < entryCount; i++)
                {
                    entries[i]     = FormattedText.Parse(QuestLog.GetQuestEntry(title, i + 1), DialogueManager.MasterDatabase.emphasisSettings);
                    entryStates[i] = QuestLog.GetQuestEntryState(title, i + 1);
                }
                questList.Add(new QuestInfo(title, heading, description, entries, entryStates, trackable, track, abandonable));
            }
            Quests = questList.ToArray();
            OnQuestListUpdated();
        }
        public static int SaveQuestState(QuestState input)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questState = repo.QuestStates.FirstOrDefault(q => q.Id == input.Id);

            if (questState == null)
            {
                questState = new QuestState();
            }

            questState.Id                       = input.Id;
            questState.QuestEndId               = input.QuestEndId;
            questState.QuestStateName           = input.QuestStateName;
            questState.Text                     = input.Text;
            questState.QuestId                  = input.QuestId;
            questState.HideIfRequirementsNotMet = input.HideIfRequirementsNotMet;
            questState.Notes                    = input.Notes;
            questState.PinToDiagram             = input.PinToDiagram;
            questState.X = input.X;
            questState.Y = input.Y;

            // always set this to something, even if it's just empty string
            if (questState.QuestStateName == null)
            {
                questState.QuestStateName = "-- QUEST STATE NOT NAMED --";
            }

            repo.SaveQuestState(questState);

            return(questState.Id);
        }
示例#10
0
        private void doFTUECheck(DataEntityHandle handle)
        {
            ProfileData component = dataEntityCollection.GetComponent <ProfileData>(handle);

            component.IsFirstTimePlayer = true;
            component.IsFTUEComplete    = false;
            if (!dataEntityCollection.TryGetComponent <QuestStateData>(dataEntityCollection.LocalPlayerHandle, out var component2) || component2.Data == null)
            {
                return;
            }
            for (int i = 0; i < component2.Data.Count; i++)
            {
                QuestState questState = component2.Data[i];
                if (questState.questId == ftueConfig.FtueQuestId)
                {
                    if (questState.timesCompleted > 0 || (questState.completedObjectives != null && questState.completedObjectives.Count > 0))
                    {
                        component.IsFirstTimePlayer = false;
                    }
                    component.IsFTUEComplete = questState.timesCompleted > 0;
                    if (MonoSingleton <NativeAccessibilityManager> .Instance.IsEnabled)
                    {
                        component.IsFirstTimePlayer = false;
                        component.IsFTUEComplete    = true;
                    }
                    break;
                }
            }
        }
        public static bool GetQuestStateFoldout(QuestState questState, int nodeIndex)
        {
            var list = GetQuestStateFoldoutList(questState);

            VerifyListSize(list, nodeIndex, true);
            return(list[nodeIndex]);
        }
示例#12
0
        public override void OnEnter()
        {
            if ((questName == null) || (string.IsNullOrEmpty(questName.Value)))
            {
                LogError(string.Format("{0}: Quest Name is null or blank.", DialogueDebug.Prefix));
            }
            else
            {
                QuestState questState = QuestLog.GetQuestState(questName.Value);
                if (storeResult != null)
                {
                    storeResult.Value = questState.ToString().ToLower();
                }
                switch (questState)
                {
                case QuestState.Unassigned: Fsm.Event(unassignedStateEvent); break;

                case QuestState.Active: Fsm.Event(activeStateEvent); break;

                case QuestState.Success: Fsm.Event(successStateEvent); break;

                case QuestState.Failure: Fsm.Event(failureStateEvent); break;
                }
            }
            Finish();
        }
示例#13
0
 public void CopyFrom(Quest quest)
 {
     if (quest == null)
     {
         Debug.LogWarning("Quest Machine: QuestProxy.CopyFrom source quest is null.");
         return;
     }
     isInstance            = quest.isInstance;
     id                    = StringField.GetStringValue(quest.id);
     displayName           = StringField.GetStringValue(quest.title);
     iconPath              = QuestMachine.GetImagePath(quest.icon);
     group                 = StringField.GetStringValue(quest.group);
     labels                = StringFieldsToStrings(quest.labels);
     giver                 = StringField.GetStringValue(quest.questGiverID);
     isTrackable           = quest.isTrackable;
     track                 = quest.showInTrackHUD;
     isAbandonable         = quest.isAbandonable;
     rememberIfAbandoned   = quest.rememberIfAbandoned;
     autostartConditionSet = new QuestConditionSetProxy(quest.autostartConditionSet);
     offerConditionSet     = new QuestConditionSetProxy(quest.offerConditionSet);
     offerUnmetContentList = QuestContentProxy.NewArray(quest.offerConditionsUnmetContentList);
     offerContentList      = QuestContentProxy.NewArray(quest.offerContentList);
     maxTimes              = quest.maxTimes;
     timesAccepted         = quest.timesAccepted;
     cooldownSecs          = quest.cooldownSeconds;
     cooldownSecsRemain    = quest.cooldownSecondsRemaining;
     state                 = quest.GetState();
     stateInfoList         = QuestStateInfoProxy.NewArray(quest.stateInfoList);
     counterList           = QuestCounterProxy.NewArray(quest.counterList);
     nodeList              = QuestNodeProxy.NewArray(quest.nodeList);
     tags                  = new TagDictionary(quest.tagDictionary);
     indicators            = QuestIndicatorStateRecordProxy.NewArray(quest.indicatorStates);
     goalEntity            = quest.goalEntityTypeName;
 }
示例#14
0
        public override void OnEnter()
        {
            if (PlayMakerTools.IsValueAssigned(questName) && PlayMakerTools.IsValueAssigned(entryNumber))
            {
                QuestState questState = QuestLog.GetQuestEntryState(questName.Value, Mathf.Max(1, entryNumber.Value));
                if (storeResult != null)
                {
                    storeResult.Value = questState.ToString().ToLower();
                }
                switch (questState)
                {
                case QuestState.Unassigned: Fsm.Event(unassignedStateEvent); break;

                case QuestState.Active: Fsm.Event(activeStateEvent); break;

                case QuestState.Success: Fsm.Event(successStateEvent); break;

                case QuestState.Failure: Fsm.Event(failureStateEvent); break;
                }
            }
            else
            {
                LogError(string.Format("{0}: Quest Name and Entry Number must be assigned first.", DialogueDebug.Prefix));
            }
            Finish();
        }
示例#15
0
 private string GetQuestEntryText(string quest, int entryNum, QuestState entryState)
 {
     if (entryState == QuestState.Unassigned || entryState == QuestState.Abandoned)
     {
         return(string.Empty);
     }
     else if ((entryState == QuestState.Success || entryState == QuestState.Failure) && !showCompletedEntryText)
     {
         return(string.Empty);
     }
     else if (entryState == QuestState.Success)
     {
         var text = DialogueLua.GetQuestField(quest, "Entry " + entryNum + " Success").AsString;
         if (!string.IsNullOrEmpty(text))
         {
             return(text);
         }
     }
     else if (entryState == QuestState.Failure)
     {
         var text = DialogueLua.GetQuestField(quest, "Entry " + entryNum + " Failure").AsString;
         if (!string.IsNullOrEmpty(text))
         {
             return(text);
         }
     }
     return(QuestLog.GetQuestEntry(quest, entryNum));
 }
示例#16
0
 public QuestChanged(QuestChange _change, QuestLine _quest, int _currentQuest, QuestState _state)
 {
     change       = _change;
     quest        = _quest;
     currentQuest = _currentQuest;
     state        = _state;
 }
        protected virtual void ShowQuests(QuestState questStateMask)
        {
            currentQuestStateMask = questStateMask;
            noQuestsMessage       = GetNoQuestsMessage(questStateMask);
            List <QuestInfo> questList = new List <QuestInfo>();

            if (useGroups)
            {
                var records = QuestLog.GetAllGroupsAndQuests(questStateMask, true);
                foreach (var record in records)
                {
                    if (!IsQuestVisible(record.questTitle))
                    {
                        continue;
                    }
                    questList.Add(GetQuestInfo(record.groupName, record.questTitle));
                }
            }
            else
            {
                string[] titles = QuestLog.GetAllQuests(questStateMask, true, null);
                foreach (var title in titles)
                {
                    if (!IsQuestVisible(title))
                    {
                        continue;
                    }
                    questList.Add(GetQuestInfo(string.Empty, title));
                }
            }
            quests = questList.ToArray();
            OnQuestListUpdated();
        }
示例#18
0
        /// <summary>
        /// Gets the localized quest description for a specific state.
        /// </summary>
        /// <returns>
        /// The quest description.
        /// </returns>
        /// <param name='title'>
        /// Title of the quest.
        /// </param>
        /// <param name='state'>
        /// State to check.
        /// </param>
        public static string GetQuestDescription(string title, QuestState state)
        {
            string descriptionFieldName = GetDefaultDescriptionFieldForState(state);
            string result = DialogueLua.GetLocalizedQuestField(title, descriptionFieldName).AsString;

            return((string.Equals(result, "nil") || string.IsNullOrEmpty(result)) ? null : result);
        }
        public static bool GetQuestActionFoldout(QuestState questState)
        {
            var list = data.actionFoldouts;

            VerifyListSize(list, (int)questState, true);
            return(list[(int)questState]);
        }
        protected virtual IEnumerator RefreshAtEndOfFrame()
        {
            yield return(new WaitForEndOfFrame());

            // Move instances to the unused list:
            unusedInstances.AddRange(instantiatedItems);
            instantiatedItems.Clear();
            siblingIndexCounter = 0;

            // Add quests, drawing from unused list when possible:
            int        numTracked = 0;
            QuestState flags      = (showActiveQuests ? QuestState.Active : 0) |
                                    (showCompletedQuests ? QuestState.Success | QuestState.Failure : 0);

            foreach (string quest in QuestLog.GetAllQuests(flags))
            {
                if (QuestLog.IsQuestTrackingEnabled(quest))
                {
                    AddQuestTrack(quest);
                    numTracked++;
                }
            }
            if (container != null)
            {
                container.gameObject.SetActive(showContainerIfEmpty || numTracked > 0);
            }

            // Destroy remaining unused instances:
            for (int i = 0; i < unusedInstances.Count; i++)
            {
                Destroy(unusedInstances[i].gameObject);
            }
            unusedInstances.Clear();
            refreshCoroutine = null;
        }
        public static bool GetQuestContentFoldout(QuestContentCategory category, QuestState questState)
        {
            var list = GetQuestContentFoldoutList(category);

            VerifyListSize(list, (int)questState, false);
            return(list[(int)questState]);
        }
示例#22
0
        public static QuestRewards Parse(int id, WZProperty data, QuestState state)
        {
            if (data == null)
            {
                return(null);
            }

            QuestRewards result = new QuestRewards();

            result.Id         = id;
            result.State      = state;
            result.Message    = data.ResolveForOrNull <string>("message");
            result.Exp        = data.ResolveFor <int>("exp");
            result.BuffItemId = data.ResolveFor <int>("buffItemId");
            result.charmExp   = data.ResolveFor <int>("charmEXP");
            result.SenseEXP   = data.ResolveFor <int>("senseEXP");
            result.Fame       = data.ResolveFor <int>("pop");
            result.PetSkill   = data.ResolveFor <int>("petskill");
            result.Items      = data.Resolve("item")?.Children.Select(c => ItemReward.Parse(c));
            result.Skills     = data.Resolve("skill")?.Children.Select(c => SkillReward.Parse(c));
            result.Meso       = data.ResolveFor <int>("money");
            result.MoveToMap  = (uint?)data.ResolveFor <int>("transferField");

            return(result);
        }
示例#23
0
 private void UpdateQuestInfo(QuestState questState)
 {
     _questTitle.text         = questState.QuestName;
     _incompleteImage.enabled = questState.Status == QuestStatus.Ongoing;
     _completedImage.enabled  = questState.Status == QuestStatus.Completed;
     _failedImage.enabled     = questState.Status == QuestStatus.Failed;
 }
        public static int SaveQuestStatePreaction(QuestStatePreaction input, QuestState state)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questStatePreaction = repo.QuestStatePreactions.FirstOrDefault(q => q.Id == input.Id);
            var dbState             = repo.QuestStates.FirstOrDefault(s => s.Id == state.Id);

            if (questStatePreaction == null)
            {
                questStatePreaction = new QuestStatePreaction();
            }

            questStatePreaction.Id                      = input.Id;
            questStatePreaction.QuestId                 = input.QuestId;
            questStatePreaction.QuestStateId            = dbState;
            questStatePreaction.QuestStatePreactionName = input.QuestStatePreactionName;
            if (input.VariableName != null)
            {
                questStatePreaction.VariableName = input.VariableName.ToUpper();
            }
            questStatePreaction.AddOrSet    = input.AddOrSet;
            questStatePreaction.ActionType  = input.ActionType;
            questStatePreaction.ActionValue = input.ActionValue;

            repo.SaveQuestStatePreaction(questStatePreaction);

            return(questStatePreaction.Id);
        }
示例#25
0
        public void SaveQuestState(QuestState QuestState)
        {
            if (QuestState.Id == 0)
            {
                context.QuestStates.Add(QuestState);
            }
            else
            {
                var editMe = context.QuestStates.Find(QuestState.Id);
                if (editMe != null)
                {
                    // dbEntry.Name = QuestState.Name;
                    // dbEntry.Message = QuestState.Message;
                    // dbEntry.TimeStamp = QuestState.TimeStamp;
                }
            }

            try
            {
                context.SaveChanges();
            }
            catch (OptimisticConcurrencyException)
            {
                //context.(RefreshMode.ClientWins, dbModels.Models.QuestState);
                //context.SaveChanges();
            }

            // context.SaveChanges();
        }
		public void AddEntryDescription(string text, QuestState entryState) {
			if (entryContainer == null) {
				
				// No container, so make entryDescription a big multi-line string:
				alternateEntryDescriptions.SetActive(false);
				if (entryDescription != null) {
					if (numEntries == 0) {
						entryDescription.gameObject.SetActive(true);
						entryDescription.text = text;
					} else {
						entryDescription.text += "\n" + text;
					}
				}
			} else {
				
				// Instantiate into container:
				if (numEntries == 0) {
					entryContainer.gameObject.SetActive(true);
					if (entryDescription != null) entryDescription.gameObject.SetActive(false);
					alternateEntryDescriptions.SetActive(false);
				}
				switch (entryState) {
				case QuestState.Active:
					InstantiateFirstValidTextElement(text, entryContainer, entryDescription);
					break;
				case QuestState.Success:
					InstantiateFirstValidTextElement(text, entryContainer, alternateEntryDescriptions.successDescription, entryDescription);
					break;
				case QuestState.Failure:
					InstantiateFirstValidTextElement(text, entryContainer, alternateEntryDescriptions.failureDescription, entryDescription);
					break;
				}
			}
			numEntries++;
		}
示例#27
0
 public QuestPlayer(int questId, QuestType questType, QuestState questState, QuestClearLimit questClearLimit)
 {
     this.questId         = questId;
     this.questType       = questType;
     this.questState      = questState;
     this.questClearLimit = questClearLimit;
 }
示例#28
0
    public override QuestState SaveQuestState()
    {
        QuestState qs = base.SaveQuestState();

        qs.questState = progress.ToString();
        return(qs);
    }
示例#29
0
        public void UpdateTracker()
        {
            // Move instances to the unused list:
            unusedInstances.AddRange(instantiatedItems);
            instantiatedItems.Clear();
            siblingIndexCounter = 0;

            // Add quests, drawing from unused list when possible:
            int        numTracked = 0;
            QuestState flags      = (showActiveQuests ? QuestState.Active : 0) |
                                    (showCompletedQuests ? QuestState.Success | QuestState.Failure : 0);

            foreach (string quest in QuestLog.GetAllQuests(flags))
            {
                if (QuestLog.IsQuestTrackingEnabled(quest))
                {
                    AddQuestTrack(quest);
                    numTracked++;
                }
            }
            if (container != null)
            {
                container.gameObject.SetActive(showContainerIfEmpty || numTracked > 0);
            }

            // Destroy remaining unused instances:
            for (int i = 0; i < unusedInstances.Count; i++)
            {
                Destroy(unusedInstances[i].gameObject);
            }
            unusedInstances.Clear();
        }
 void QuestComplete()
 {
     // Set state to "completed" and proceed with needed animation and audio triggers.
     questState = QuestState.Completed;
     statusScreenAnimator.SetTrigger("Quest Completed");
     audioSource.PlayOneShot(questCompleteAudioClip);
 }
 public QuestInstruction_UpdateStep(int stepNumber, QuestState state, bool hideRewards) : this()
 {
     this.StepNumber    = stepNumber;
     this.State         = state;
     this.HideRewards   = hideRewards;
     base.MustBeDelayed = (state == QuestState.Completed);
 }
        internal ProgressInfo(int rpID, QuestType rpResetType, QuestState rpState, int rpProgress, DateTimeOffset rpUpdateTime)
        {
            Quest = QuestProgressService.Instance.Infos[rpID];
            ResetType = rpResetType;

            r_State = rpState;
            r_Progress = rpProgress;
            UpdateTime = rpUpdateTime;
        }
示例#33
0
        /// <summary>
        /// Adds the given state(s) to the quest with the given ID (keeping any old states)
        /// </summary>
        /// <param name="id">The particular quest</param>
        /// <param name="state">The state(s) to add</param>
        public static void addQuestState(QuestID id, QuestState state)
        {
            nullCheck();
            triggers[(int)id] |= state;

            //push event
            QuestEventArgs args = new QuestEventArgs();
            args.questID = id;
            args.questStateChange = state;
            args.add = true;
            pushEvent(args);
        }
        internal ProgressInfo(int rpID, QuestType rpResetType, QuestState rpState, int rpProgress, DateTimeOffset rpUpdateTime)
        {
            QuestInfo rQuest;
            if (QuestProgressService.Instance.Infos.TryGetValue(rpID, out rQuest))
                Quest = rQuest;
            else
                Quest = new QuestInfo(rpID);

            r_ResetType = rpResetType;

            r_State = rpState;
            r_Progress = rpProgress;
            UpdateTime = rpUpdateTime;
        }
示例#35
0
文件: Quest.cs 项目: pie3467/aura
        public Quest(int questId, long uniqueId, QuestState state)
        {
            this.Id = questId;
            this.UniqueId = uniqueId;
            this.State = state;

            this.Data = ChannelServer.Instance.ScriptManager.GetQuestScript(this.Id);
            if (this.Data == null)
                throw new Exception("Quest '" + questId.ToString() + "' does not exist.");

            _progresses = new OrderedDictionary<string, QuestObjectiveProgress>();
            foreach (var objective in this.Data.Objectives)
                _progresses[objective.Key] = new QuestObjectiveProgress(objective.Key);
            _progresses[0].Unlocked = true;
        }
		public void SetDescription(string text, QuestState questState) {
			if (text == null) return;
			switch (questState) {
			case QuestState.Active:
				SetFirstValidTextElement(text, description);
				break;
			case QuestState.Success:
				SetFirstValidTextElement(text, alternateDescriptions.successDescription, description);
				break;
			case QuestState.Failure:
				SetFirstValidTextElement(text, alternateDescriptions.failureDescription, description);
				break;
			default:
				return;
			}
		}
示例#37
0
	public void progressState() {

		switch (state) {
		case(QuestState.Inactive):
			state = QuestState.Prologue;
			break;
		case(QuestState.Prologue):
			state = QuestState.Active;
			break;
		case(QuestState.Active):
			state = QuestState.Finished;
			questManager.receiveDialogue(progressDialogue());
			break;
		}

		Debug.Log (state.ToString ());

		stageDialogueComplete = false;
	}
示例#38
0
 /// <summary>
 /// Gets the localized quest description for a specific state.
 /// </summary>
 /// <returns>
 /// The quest description.
 /// </returns>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='state'>
 /// State to check.
 /// </param>
 public static string GetQuestDescription(string title, QuestState state)
 {
     string descriptionFieldName = GetDefaultDescriptionFieldForState(state);
     string result = DialogueLua.GetLocalizedQuestField(title, descriptionFieldName).AsString;
     return (string.Equals(result, "nil") || string.IsNullOrEmpty(result)) ? null : result;
 }
示例#39
0
 /// <summary>
 /// Reports whether a quest's current state is one of the states marked in a state bit mask.
 /// </summary>
 /// <returns>
 /// <c>true</c> if the quest's current state is in the state bit mask.
 /// </returns>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='stateMask'>
 /// A QuestState bit mask (e.g., <c>QuestState.Success | QuestState.Failure</c>).
 /// </param>
 public static bool IsQuestInStateMask(string title, QuestState stateMask)
 {
     QuestState state = GetQuestState(title);
     return ((stateMask & state) == state);
 }
示例#40
0
 protected override void ReadPacket(BinaryReader reader)
 {
     Quest = new ClientQuestProgress(reader);
     QuestState = (QuestState)reader.ReadByte();
     TrackQuest = reader.ReadBoolean();
 }
示例#41
0
        /// <summary>
        /// Sendet ein Quest Update zum angegebenen Quest an diesen Client.
        /// </summary>
        /// <param name="quest">Quest.</param>
        /// <param name="progress">Progress.</param>
        /// <param name="state">State.</param>
        public void SendQuestUpdate(string quest, string progress, QuestState state)
        {
            try
            {
                // QuestId[string];Progress[string];State[byte]
                writer.Write((byte)MessageType.ServerQuestUpdate);
                writer.Write((short)0);
                writer.Write(quest);
                writer.Write(progress);
                writer.Write((byte)state);

                int contentend = (int)writerStream.Position;
                writerStream.Seek(1, SeekOrigin.Begin);
                writer.Write((short)(contentend - 3));
                writerStream.Seek(contentend, SeekOrigin.Begin);

                Flush();
            }
            catch (Exception ex)
            {
                Close(ex, false);
            }
        }
示例#42
0
 /// <summary>
 /// Adds a quest to the Lua Item[] table.
 /// </summary>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='description'>
 /// Description of the quest.
 /// </param>
 /// <param name='state'>
 /// Quest state.
 /// </param>
 /// <example>
 /// QuestLog.AddQuest("Kill 5 Rats", "The baker asked me to bring 5 rat corpses.", QuestState.Unassigned);
 /// </example>
 public static void AddQuest(string title, string description, QuestState state)
 {
     if (!string.IsNullOrEmpty(title)) {
         Lua.Run(string.Format("Item[\"{0}\"] = {{ Name = \"{1}\", Description = \"{2}\", State = \"{3}\" }}",
                               new System.Object[] { DialogueLua.StringToTableIndex(title),
                               DialogueLua.DoubleQuotesToSingle(title),
                               DialogueLua.DoubleQuotesToSingle(description),
                               StateToString(state) }),
                 DialogueDebug.LogInfo);
     }
 }
示例#43
0
 /// <summary>
 /// Gets an array of all quests matching the specified state bitmask.
 /// </summary>
 /// <returns>The titles of all quests matching the specified state bitmask, sorted by Name.</returns>
 /// <param name="flags">A bitmask of QuestState values.</param>
 /// <example>
 /// string[] completedQuests = QuestLog.GetAllQuests( QuestState.Success | QuestState.Failure );
 /// </example>
 public static string[] GetAllQuests(QuestState flags)
 {
     return GetAllQuests(flags, true);
 }
示例#44
0
 /// <summary>
 /// Sets the quest state.
 /// </summary>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='state'>
 /// New state.
 /// </param>
 /// <example>
 /// if (PiedPiperIsFree) {
 ///     QuestLog.SetQuestState("Kill 5 Rats", QuestState.Failure);
 /// }
 /// </example>
 public static void SetQuestState(string title, QuestState state)
 {
     DialogueLua.SetQuestField(title, "State", StateToString(state));
     SendUpdateTracker();
 }
示例#45
0
 /*public dynamic Serialize()
 {
     dynamic result = new ExpandoObject();
     result.id = questId;
     result.state = state;
     return result;
 }*/
 public ObjectInstanceQuest(dynamic json)
 {
     this.questId = json.id;
     this.state = json.state;
 }
        internal void ResetByProgress(QuestState rpState, QuestProgress rpProgress)
        {
            if (ID == 214)
                return;

            var rLimit = (int)Math.Ceiling(Total * 0.5);
            if (rpProgress == QuestProgress.Progress50 && Current < rLimit)
                CurrentInternal = rLimit;

            rLimit = (int)Math.Ceiling(Total * 0.8);
            if (rpProgress == QuestProgress.Progress80 && Current < rLimit)
                CurrentInternal = rLimit;

            rLimit = Total;
            if (rpState == QuestState.Completed && Current < rLimit)
                CurrentInternal = rLimit;

            State = rpState;
        }
        internal void ResetByDate()
        {
            var rResetState = false;
            var rNow = DateTimeOffset.Now.ToOffset(TimeZoneOffset);

            if (!UpdateTime.HasValue)
                Current = 0;
            else
            {
                var rUpdateTime = UpdateTime.Value;
                DateTimeOffset rResetTime;
                switch (Type)
                {
                    case QuestType.Daily:
                    case QuestType.Special1:
                    case QuestType.Special2:
                        rResetTime = new DateTimeOffset(rNow.Year, rNow.Month, rNow.Day, 5, 0, 0, TimeZoneOffset);
                        if (rNow.Hour < 5)
                            rResetTime -= TimeSpan.FromDays(1.0);

                        rResetState = rUpdateTime < rResetTime;

                        break;

                    case QuestType.Weekly:
                        var rOffset = rNow.DayOfWeek - DayOfWeek.Monday;
                        if (rOffset < 0)
                            rOffset += 7;

                        rResetTime = rNow.AddDays(-1 * rOffset) - rNow.TimeOfDay + ResetHour;

                        rResetState = rUpdateTime < rResetTime;

                        break;

                    case QuestType.Monthly:
                        rResetTime = new DateTimeOffset(rNow.Year, rNow.Month, 1, 5, 0, 0, TimeZoneOffset);
                        if (rNow.Hour < 5)
                            rResetTime = rResetTime.AddMonths(-1);

                        rResetState = rUpdateTime < rResetTime;
                        break;
                }
            }

            if (rResetState)
            {
                DebugUtil.Log(string.Format("任务 {0}: 被重置 原时间={1}", ID, UpdateTime.Value));
                StateInternal = QuestState.None;
                CurrentInternal = 0;
                UpdateTime = rNow;
                RecordManager.Instance.Quest.UpdateProgress(this);
                RecordManager.Instance.Quest.UpdateStatus(this);
            }
        }
示例#48
0
 /// <summary>
 /// Converts a state to its string representation.
 /// </summary>
 /// <returns>
 /// The string representation (e.g., "active").
 /// </returns>
 /// <param name='state'>
 /// The state (e.g., <c>QuestState.Active</c>).
 /// </param>
 public static string StateToString(QuestState state)
 {
     switch (state) {
     case QuestState.Unassigned: return UnassignedStateString;
     case QuestState.Active: return ActiveStateString;
     case QuestState.Success: return SuccessStateString;
     case QuestState.Failure: return FailureStateString;
     case QuestState.Abandoned: return AbandonedStateString;
     default: return UnassignedStateString;
     }
 }
示例#49
0
 private static string GetDefaultDescriptionFieldForState(QuestState state)
 {
     switch (state) {
     case QuestState.Success:
         return "Success_Description";
     case QuestState.Failure:
         return "Failure_Description";
     default:
         return "Description";
     }
 }
示例#50
0
 /// <summary>
 /// Gets an array of all quests matching the specified state bitmask.
 /// </summary>
 /// <returns>The titles of all quests matching the specified state bitmask.</returns>
 /// <param name='flags'>A bitmask of QuestState values.</param>
 /// <param name='sortByName'>If `true`, sorts the titles by name.</param>
 /// <example>
 /// string[] completedQuests = QuestLog.GetAllQuests( QuestState.Success | QuestState.Failure, true );
 /// </example>
 public static string[] GetAllQuests(QuestState flags, bool sortByName)
 {
     List<string> titles = new List<string>();
     LuaTableWrapper itemTable = Lua.Run("return Item").AsTable;
     if (!itemTable.IsValid) {
         if (DialogueDebug.LogWarnings) Debug.LogWarning(string.Format("{0}: Quest Log couldn't access Lua Item[] table. Has the Dialogue Manager loaded a database yet?", new System.Object[] { DialogueDebug.Prefix }));
         return titles.ToArray();
     }
     foreach (var itemTableValue in itemTable.Values) {
         LuaTableWrapper fields = itemTableValue as LuaTableWrapper;
         if (fields == null) continue;
         string title = null;
         bool isItem = false;
         try {
             object titleObject = fields["Name"];
             title = (titleObject != null) ? titleObject.ToString() : string.Empty;
             isItem = false;
             object isItemObject = fields["Is_Item"];
             if (isItemObject != null) {
                 if (isItemObject.GetType() == typeof(bool)) {
                     isItem = (bool) isItemObject;
                 } else {
                     isItem = Tools.StringToBool(isItemObject.ToString());
                 }
             }
         } catch {}
         if (!isItem) {
             if (string.IsNullOrEmpty(title)) {
                 if (DialogueDebug.LogWarnings) Debug.LogWarning(string.Format("{0}: A quest title (item name in Item[] table) is null or empty", new System.Object[] { DialogueDebug.Prefix }));
             } else if (IsQuestInStateMask(title, flags)) {
                 titles.Add(title);
             }
         }
     }
     if (sortByName) titles.Sort();
     return titles.ToArray();
 }
示例#51
0
        public static void unpackDefaultData()
        {
            HeroSave hSave = new HeroSave();
            hSave.x = 25 * 32;
            hSave.y = 4 * 32;
            hSave.dir = Direction.North;
            hSave.inventorySave = new Inventory().getSaveStructure();
            hSave.monologueSave = new InnerMonologue().getSaveStructure();
            hSave.name = "No name";
            hSave.reputationSave = new int[] { 0, 0, 0, 0, 0 };
            hSave.followerID = PersonID.None;
            Hero.instance.loadSaveStructure(hSave);

            KeyboardManager.loadDefaultKeys();

            QuestState[] defQuests = new QuestState[Quest.NUM_QUEST_IDS];   //should all be 0 when initialized
            defQuests[(int)QuestID.FoodFight] = QuestState.Available;
            Quest.loadQuestStateSave(defQuests);

            WorldManager.clearMaps();
            WorldManager.setRoomNoTransition(PlaceID.StudentLounge);

            GameClock.renewClock();

            CharacterBankSave characterSave = new CharacterBankSave();
            characterSave.char_x = new int[CharacterManager.NUM_PERSON_IDS];
            characterSave.char_y = new int[CharacterManager.NUM_PERSON_IDS];
            characterSave.char_room = new PlaceID[CharacterManager.NUM_PERSON_IDS];

            characterSave.char_x[(int)PersonID.Phil] = 23 * 32;
            characterSave.char_y[(int)PersonID.Phil] = 7 * 32;
            characterSave.char_room[(int)PersonID.Phil] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Librarian] = 4 * 32;
            characterSave.char_y[(int)PersonID.Librarian] = 4 * 32;
            characterSave.char_room[(int)PersonID.Librarian] = PlaceID.Library;

            characterSave.char_x[(int)PersonID.Artie] = 12 * 32;
            characterSave.char_y[(int)PersonID.Artie] = 8 * 32;
            characterSave.char_room[(int)PersonID.Artie] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Bill] = 16 * 32;
            characterSave.char_y[(int)PersonID.Bill] = 14 * 32;
            characterSave.char_room[(int)PersonID.Bill] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Claude] = 25 * 32;
            characterSave.char_y[(int)PersonID.Claude] = 18 * 32;
            characterSave.char_room[(int)PersonID.Claude] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Jay1] = 4 * 32;
            characterSave.char_y[(int)PersonID.Jay1] = 18 * 32;
            characterSave.char_room[(int)PersonID.Jay1] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Jay2] = 10 * 32;
            characterSave.char_y[(int)PersonID.Jay2] = 2 * 32;
            characterSave.char_room[(int)PersonID.Jay2] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Jay3] = 14 * 32;
            characterSave.char_y[(int)PersonID.Jay3] = 18 * 32;
            characterSave.char_room[(int)PersonID.Jay3] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.Jay4] = 20 * 32;
            characterSave.char_y[(int)PersonID.Jay4] = 2 * 32;
            characterSave.char_room[(int)PersonID.Jay4] = PlaceID.Cafeteria;

            characterSave.char_x[(int)PersonID.BraceFace] = 10 * 32;
            characterSave.char_y[(int)PersonID.BraceFace] = 10 * 32;
            characterSave.char_room[(int)PersonID.BraceFace] = PlaceID.Math;

            characterSave.char_x[(int)PersonID.Fitz] = 19 * 32;
            characterSave.char_y[(int)PersonID.Fitz] = 13 * 32;
            characterSave.char_room[(int)PersonID.Fitz] = PlaceID.ComputerLab;

            characterSave.char_x[(int)PersonID.ROB] = 8 * 32;
            characterSave.char_y[(int)PersonID.ROB] = 11 * 32;
            characterSave.char_room[(int)PersonID.ROB] = PlaceID.Science;

            characterSave.char_x[(int)PersonID.Enforcer] = 11 * 32;
            characterSave.char_y[(int)PersonID.Enforcer] = 49 * 32;
            characterSave.char_room[(int)PersonID.Enforcer] = PlaceID.HallwayWest;

            characterSave.char_x[(int)PersonID.Tyke] = 11 * 32;
            characterSave.char_y[(int)PersonID.Tyke] = 6 * 32;
            characterSave.char_room[(int)PersonID.Tyke] = PlaceID.Entrance;

            characterSave.char_x[(int)PersonID.Dyke] = 18 * 32;
            characterSave.char_y[(int)PersonID.Dyke] = 11 * 32;
            characterSave.char_room[(int)PersonID.Dyke] = PlaceID.StudentLounge;

            characterSave.char_x[(int)PersonID.Shaq] = 23 * 32;
            characterSave.char_y[(int)PersonID.Shaq] = 3 * 32;
            characterSave.char_room[(int)PersonID.Shaq] = PlaceID.HallwayEast;

            characterSave.char_x[(int)PersonID.Herbert] = 3 * 32;
            characterSave.char_y[(int)PersonID.Herbert] = 40 * 32;
            characterSave.char_room[(int)PersonID.Herbert] = PlaceID.HallwayWest;

            characterSave.char_x[(int)PersonID.Avery] = 8 * 32;
            characterSave.char_y[(int)PersonID.Avery] = 7 * 32;
            characterSave.char_room[(int)PersonID.Avery] = PlaceID.StudentLounge;

            characterSave.char_x[(int)PersonID.Boris] = 25 * 32;
            characterSave.char_y[(int)PersonID.Boris] = 5 * 32;
            characterSave.char_room[(int)PersonID.Boris] = PlaceID.Entrance;

            characterSave.char_x[(int)PersonID.Jarvis] = 17 * 32;
            characterSave.char_y[(int)PersonID.Jarvis] = 15 * 32;
            characterSave.char_room[(int)PersonID.Jarvis] = PlaceID.Entrance;

            characterSave.char_x[(int)PersonID.Zeke] = 10 * 32;
            characterSave.char_y[(int)PersonID.Zeke] = 4 * 32;
            characterSave.char_room[(int)PersonID.Zeke] = PlaceID.Bathroom;

            /*
            Fitz,
            ROB,
            Enforcer,
            Tyke,
            Dyke,
            Shaq,
            Herbert,
            Avery,
            Boris,
            Jarvis,
            Zeke
             */

            CharacterManager.loadSaveStructure(characterSave);
        }
示例#52
0
 /// <summary>
 /// Sets the state of the quest entry.
 /// </summary>
 /// <param name="questTitle">Title of the quest.</param>
 /// <param name="entryNumber">Entry number.</param>
 /// <param name="state">State.</param>
 public static void SetQuestEntryState(string questTitle, int entryNumber, QuestState state)
 {
     DialogueLua.SetQuestField(questTitle, GetEntryStateFieldName(entryNumber), StateToString(state));
     SendUpdateTracker();
 }
示例#53
0
 private string GetQuestEntryText(string quest, int entryNum, QuestState entryState)
 {
     if (entryState == QuestState.Unassigned || entryState == QuestState.Abandoned) {
         return string.Empty;
     } else if (entryState == QuestState.Success && showCompletedEntryText) {
         var text = DialogueLua.GetQuestField(quest, "Entry " + entryNum + " Success").AsString;
         if (!string.IsNullOrEmpty(text)) return text;
     } else if (entryState == QuestState.Failure && showCompletedEntryText) {
         var text = DialogueLua.GetQuestField(quest, "Entry " + entryNum + " Failure").AsString;
         if (!string.IsNullOrEmpty(text)) return text;
     }
     return QuestLog.GetQuestEntry(quest, entryNum);
 }
示例#54
0
		private string GetTitleStyleName(QuestState state) {
			switch (state) {
			case QuestState.Active: return TitleStyle;
			case QuestState.Success: return SuccessTitleStyle;
			case QuestState.Failure: return FailureTitleStyle;
			default: return TitleStyle;
			}
		}
示例#55
0
 /// <summary>
 /// Sets the quest description for a specified state.
 /// </summary>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='state'>
 /// Set the description for this state (i.e., regular, success, or failure).
 /// </param>
 /// <param name='description'>
 /// The description.
 /// </param>
 public static void SetQuestDescription(string title, QuestState state, string description)
 {
     DialogueLua.SetQuestField(title, GetDefaultDescriptionFieldForState(state), description);
 }
示例#56
0
	protected void returnToDefault() {

		foreach (Objective o in inactiveObjectives) {
			o.resetObjective();
		}

		foreach (Objective o in prologueObjectives) {
			o.resetObjective();
		}

		foreach (Objective o in activeObjectives) {
			o.resetObjective();
		}

		readyForCutscene = false;

		currentInactiveObj = 0;
		currentPrologueObj = 0;
		currentActiveObj = 0;

		currentInactiveLine = 0;
		currentPrologueLine = 0;
		currentActiveLine = 0;

		state = QuestState.Inactive;
	}
示例#57
0
		private string GetEntryStyleName(QuestState entryState) {
			switch (entryState) {
			case QuestState.Active: return ActiveEntryStyle;
			case QuestState.Success: return SuccessEntryStyle;
			case QuestState.Failure: return FailureEntryStyle;
			default: return ActiveEntryStyle;
			}
		}
示例#58
0
 public ObjectInstanceQuest(int questId, QuestState state)
 {
     this.questId = questId;
     this.state = state;
 }
示例#59
0
        public void SendUpdateQuest(QuestProgressInfo quest, QuestState state, bool trackQuest = false)
        {
            quest.CheckCompleted();

            Enqueue(new S.ChangeQuest
            {
                Quest = quest.CreateClientQuestProgress(),
                QuestState = state,
                TrackQuest = trackQuest
            });
        }
示例#60
0
 private void SetupProperties()
 {
     State = QuestState.Unavailable;
     Goal = new QuestGoal();
     Prize = new QuestPrize();
 }