Beispiel #1
0
        /// <summary>
        /// Reads task lines to find conditions and actions.
        /// </summary>
        /// <param name="lines">Array of lines in this task block.</param>
        /// <param name="startLine">First line after task header (if present).</param>
        void ReadTaskLines(string[] lines, int startLine)
        {
            // Step through lines of quest and log when encountering unsupported lines
            // This will generate a lot of log noise early on until things are further along
            for (int i = startLine; i < lines.Length; i++)
            {
                // Try to find registered action template using this line
                IQuestAction actionTemplate = QuestMachine.Instance.GetActionTemplate(lines[i]);
                if (actionTemplate != null)
                {
                    // Create a new action from template (don't link template itself)
                    IQuestAction action = actionTemplate.CreateNew(lines[i], ParentQuest);
                    if (action != null)
                    {
                        if (QuestMachine.Instance.IsDebugModeEnabled)
                        {
                            action.DebugSource = lines[i].Trim();
                        }

                        actions.Add(action);
                        if (action.IsTriggerCondition)
                        {
                            hasTriggerConditions = true;
                        }
                    }
                }
                else
                {
                    Debug.LogFormat("Action not found. Ignoring '{0}'", lines[i]);
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// Add action to task
 /// </summary>
 /// <param name="questAction">Action</param>
 public void AddQuestAction(IQuestAction questAction)
 {
     if (questAction != null && this.actions.Contains(questAction) == false)
     {
         actions.Add(questAction);
     }
 }
Beispiel #3
0
        public IQuest MakeRandomQuest(IEntity questor, IEntity provider, IWorldInstance overworldRef)
        {
            GlobalConstants.GameManager.ItemHandler.CleanUpRewards();

            List <IQuestAction> actions = new List <IQuestAction>();

            //int numberOfSteps = RNG.instance.Roll(1, 4);
            int numberOfSteps = 1;

            for (int i = 0; i < numberOfSteps; i++)
            {
                int          result = this.Roller.Roll(0, this.Actions.Count);
                IQuestAction action = this.Actions[result].Create(questor, provider, overworldRef, new string[0]);
                actions.Add(action);
            }

            IEnumerable <string> tagsForAllSteps = actions.SelectMany(step => step.Tags);
            var   rewards = this.GetRewards(questor, provider, actions);
            Quest quest   = new Quest(
                actions,
                QuestMorality.Neutral,
                rewards,
                provider.Guid,
                questor.Guid,
                tagsForAllSteps);

            return(quest);
        }
Beispiel #4
0
        public void Load(Dictionary data)
        {
            var    valueExtractor = GlobalConstants.GameManager.ItemDatabase.ValueExtractor;
            string guidString     = valueExtractor.GetValueFromDictionary <string>(data, "Guid");

            this.ID = guidString is null ? Guid.Empty : new Guid(guidString);

            guidString   = valueExtractor.GetValueFromDictionary <string>(data, "Questor");
            this.Questor = guidString is null ? Guid.Empty : new Guid(guidString);

            guidString      = valueExtractor.GetValueFromDictionary <string>(data, "Instigator");
            this.Instigator = guidString is null ? Guid.Empty : new Guid(guidString);

            this.CurrentStep = valueExtractor.GetValueFromDictionary <int>(data, "CurrentStep");

            var rewardDicts = valueExtractor.GetArrayValuesCollectionFromDictionary <Dictionary>(data, "Rewards");

            List <IItemInstance> rewards = new List <IItemInstance>();

            foreach (Dictionary dict in rewardDicts)
            {
                IItemInstance item = new ItemInstance();
                item.Load(dict);
                rewards.Add(item);
            }
            GlobalConstants.GameManager.ItemHandler.AddQuestRewards(this.ID, rewards);

            this.RewardGUIDs = rewards.Select(instance => instance.Guid).ToList();

            this.Actions = new List <IQuestAction>();
            var actionDicts = valueExtractor.GetArrayValuesCollectionFromDictionary <Dictionary>(data, "Actions");

            foreach (Dictionary actionDict in actionDicts)
            {
                string type = valueExtractor.GetValueFromDictionary <string>(actionDict, "Type");
                if (type.IsNullOrEmpty())
                {
                    continue;
                }

                IQuestAction action = QuestActionFactory.Create(type);
                if (action is null)
                {
                    continue;
                }

                action.Load(actionDict);
                this.Actions.Add(action);
            }
        }
Beispiel #5
0
 void RegisterAction(IQuestAction actionTemplate)
 {
     actionTemplates.Add(actionTemplate);
 }
Beispiel #6
0
        public static IQuestAction Create(string name)
        {
            IQuestAction action = GlobalConstants.ScriptingEngine.FetchAndInitialise(name) as IQuestAction;

            return(action);
        }
    public int DrawActionUI(IQuestAction action, Color colr)
    {
        int procAction = 0;

        GUILayout.BeginHorizontal();

        if (action.opened)
        {
            GUILayout.BeginVertical();
            if (GUILayout.Button("\u25AC", "ButtonLeft", GUILayout.Width(20f), GUILayout.Height(16f)))
            {
                procAction = 1;
            }
            if (GUILayout.Button("\u25B2", "ButtonLeft", GUILayout.Width(20f), GUILayout.Height(16f)))
            {
                procAction = 2;
            }
            if (GUILayout.Button("\u25BC", "ButtonLeft", GUILayout.Width(20f), GUILayout.Height(16f)))
            {
                procAction = 3;
            }
            GUILayout.EndVertical();
        }
        else
        {
            if (GUILayout.Button("\u25AC", "ButtonLeft", GUILayout.Width(20f), GUILayout.Height(16f)))
            {
                procAction = 1;
            }
        }

        EditorGUILayout.BeginVertical();

        action.opened = EditorsUtilities.DrawHeader(action.caption, action.opened, internalIndent);
        if (action.opened)
        {
            EditorsUtilities.BeginContentsColored(colr, internalIndent);

            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(QuestEditorsLocals.GetString("Caption:"), GUILayout.MaxWidth(100f));
            action.caption = EditorGUILayout.TextField(action.caption);
            EditorGUILayout.EndHorizontal();

            if (action.GetType() == typeof(PlayAnimQuestAction))
            {
                DrawQuestAction(action as PlayAnimQuestAction);
            }
            else if (action.GetType() == typeof(IfElseQuestAction))
            {
                DrawQuestAction(action as IfElseQuestAction);
            }
            else if (action.GetType() == typeof(DebugQuestAction))
            {
                DrawQuestAction(action as DebugQuestAction);
            }
            else if (action.GetType() == typeof(SetVariableQuestAction))
            {
                DrawQuestAction(action as SetVariableQuestAction);
            }
            else if (action.GetType() == typeof(AddQuestItemAction))
            {
                DrawQuestAction(action as AddQuestItemAction);
            }
            else if (action.GetType() == typeof(UseItemQuestAction))
            {
                DrawQuestAction(action as UseItemQuestAction);
            }

            EditorGUILayout.EndVertical();


            EditorsUtilities.EndContents();
        }


        EditorGUILayout.EndVertical();
        GUILayout.EndHorizontal();
        GUILayout.Space(5f);

        return(procAction);
    }