/// <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]); } } }
/// <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); } }
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); }
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); } }
void RegisterAction(IQuestAction actionTemplate) { actionTemplates.Add(actionTemplate); }
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); }