public Entity AddQuestTask(QuestAction newAction, string newType, string newInfo, string newDescription, string newHint)
 {
     var component = _questTaskComponentPool.Count > 0 ? _questTaskComponentPool.Pop() : new QuestTaskComponent();
     component.action = newAction;
     component.type = newType;
     component.info = newInfo;
     component.description = newDescription;
     component.hint = newHint;
     return AddComponent(MetaGameComponentIds.QuestTask, component);
 }
 public Entity ReplaceQuestTask(QuestAction newAction, string newType, string newInfo, string newDescription, string newHint)
 {
     var previousComponent = hasQuestTask ? questTask : null;
     var component = _questTaskComponentPool.Count > 0 ? _questTaskComponentPool.Pop() : new QuestTaskComponent();
     component.action = newAction;
     component.type = newType;
     component.info = newInfo;
     component.description = newDescription;
     component.hint = newHint;
     ReplaceComponent(MetaGameComponentIds.QuestTask, component);
     if (previousComponent != null) {
         _questTaskComponentPool.Push(previousComponent);
     }
     return this;
 }
Exemple #3
0
    static void LoadQuest(ref Quest currentQuest)
    {
        ParseMode parseMode = ParseMode.None;

        QuestAction currentQuestAction = null;
        TextAsset asset = Resources.Load (currentQuest.file) as TextAsset;
        string[] questData = asset.text.Split ('\n');

        parseMode = ParseMode.Quest;

        foreach (string line in questData) {
            if (line.Contains("<QuestEvent>")){
                parseMode = ParseMode.QuestAction;
                if (currentQuest != null && currentQuestAction != null){
                    currentQuest.actionList.Add(currentQuestAction);
                }
                currentQuestAction = new QuestAction();

            }
            if (line.Contains("<End>")){
                if (currentQuest != null && currentQuestAction != null){
                    currentQuest.actionList.Add(currentQuestAction);
                }
            }
            switch (parseMode){

            case ParseMode.Quest:
                if (line.Contains(":")){
                    string[] parts = line.Split(':');
                    if (line.Contains ("completion")){
                        currentQuest.requiredAmount = int.Parse (parts[1]);
                    }
                    if (line.Contains("name")){
                        currentQuest.questName = parts[1];
                    }
                    if (line.Contains ("startdesc")){
                        int start = line.IndexOf('"') + 1;
                        string desc = line.Substring (start, line.LastIndexOf('"') - start).Replace("\\n", System.Environment.NewLine) ;
                        currentQuest.questDesc = desc;
                    }
                    if (line.Contains ("finishdesc")){
                        int start = line.IndexOf('"') + 1;
                        string desc = line.Substring (start, line.LastIndexOf('"') - start).Replace("\\n", System.Environment.NewLine) ;
                        currentQuest.finishDesc = desc;
                    }

                    if (line.Contains ("questarea")){
                        currentQuest.questArea = int.Parse (parts[1]);
                    }

                    if (line.Contains ("rewards:")){
                        int start = line.IndexOf('"') + 1;
                        string desc = line.Substring (start, line.LastIndexOf('"') - start).Replace("\\n", System.Environment.NewLine) ;
                        currentQuest.rewards = desc;
                    }
                }
                break;

            case ParseMode.QuestAction:
                if (line.Contains(":")){
                    string[] parts = line.Split(':');
                    if (line.Contains("x:")){
                        currentQuestAction.loc.x = int.Parse(parts[1]);
                    }
                    if (line.Contains("y:")){
                        currentQuestAction.loc.y = int.Parse(parts[1]);
                    }
                    if (line.Contains("desc")){
                        currentQuestAction.desc = parts[1];
                    }
                    if (line.Contains ("completion")){
                        currentQuestAction.completionAmount = int.Parse (parts[1]);
                    }
                    if (line.Contains("cost")){
                        currentQuestAction.staminaCost = int.Parse (parts[1]);
                    }
                }

                break;
            }
        }
    }
Exemple #4
0
 public QuestAction(QuestAction qa)
 {
     this.actionType      = qa.actionType;
     this.actionVariables = new List <string>(qa.actionVariables);
     this.isCounterAction = qa.isCounterAction;
 }
 public void SetButton2(QuestAction action)
 {
     _button2.SetCaption(action.Message);
     _buttonCallback2 = action.Handler;
 }
Exemple #6
0
        public void Handle(Packet iPacket)
        {
            QuestAction action  = (QuestAction)iPacket.ReadByte();
            ushort      questID = iPacket.ReadUShort();

            if (!DataProvider.Quests.Contains(questID))
            {
                return;
            }

            Quest quest = DataProvider.Quests[questID];

            int npcId;

            switch (action)
            {
            case QuestAction.RestoreLostItem:     // TODO: Validate.
            {
                int quantity = iPacket.ReadInt();
                int itemID   = iPacket.ReadInt();

                quantity -= this.Parent.Items.Available(itemID);

                Item item = new Item(itemID, (short)quantity);

                this.Parent.Items.Add(item);
            }
            break;

            case QuestAction.Start:
            {
                npcId = iPacket.ReadInt();

                this.Start(quest, npcId);
            }
            break;

            case QuestAction.Complete:
            {
                npcId = iPacket.ReadInt();
                iPacket.ReadInt();         // NOTE: Unknown
                int selection = iPacket.Remaining >= 4 ? iPacket.ReadInt() : 0;

                this.Complete(quest, selection);
            }
            break;

            case QuestAction.Forfeit:
            {
                this.Forfeit(quest.MapleID);
            }
            break;

            case QuestAction.ScriptStart:
            case QuestAction.ScriptEnd:
            {
                npcId = iPacket.ReadInt();

                Npc npc = null;

                foreach (Npc loopNpc in this.Parent.Map.Npcs)
                {
                    if (loopNpc.MapleID == npcId)
                    {
                        npc = loopNpc;

                        break;
                    }
                }

                if (npc == null)
                {
                    return;
                }

                this.Parent.Converse(npc, quest);
            }
            break;
            }
        }
 public void AddActionShape(QuestAction action, Shape shape)
 {
     ActionsAndShapes.Add(action, shape);
     AddShape(shape);
 }
 private static string EndStatePresentation(QuestAction action) => "End state";
 private static string WaitSomeTimePresentation(QuestAction action) => $"Wait {action.Properties["time"]} seconds";
 private static string SkipFramePresentation(QuestAction action) => "Skip frame";
 private static string NotParsedPresentation(QuestAction action) => action.Source;
 public static string GetPresentation(QuestAction action) =>
 presenters.ContainsKey(action.Type) ? presenters[action.Type](action) : "<some code>";