Example #1
0
        public void NextDialog(Connection client)
        {
            Quest q    = Program.Server.GetQuest(client.CurrentQuestID);
            byte  step = client.Character.GetQuestStep(client.CurrentQuestID);
            byte  line = client.CurrentQuestLine;

            // Next line
            line++;

            QuestStep qs = q.GetStep(step);

            if (line < qs.LineCount)
            {
                QuestLine ql = qs.GetLine(line);
                client.SetCurrentQuest(_id, q.QuestID, line);
                bool lastLine = (line >= (qs.LineCount - 1));
                ql.SendToClient(client, !lastLine);

                if (lastLine)
                {
                    client.QuestDialogFinished(_id);
                }
            }
            else
            {
                client.SetCurrentQuest(_id, q.QuestID, 0);
            }
        }
 public void WriteQuestLine(QuestLine questLine, Stream outputStream)
 {
     XamlQuestLine questLineProxy = new XamlQuestLine(questLine);
     using (StreamWriter streamWriter = new StreamWriter(outputStream, UTF8NoBOM, 4096, true))
     {
         XamlServices.Save(streamWriter, questLineProxy);
     }
 }
Example #3
0
 void AddLineToDisplay(QuestLine ql)
 {
     string icon = Program.s_npcIcons.ContainsKey(ql.Icon) ? Program.s_npcIcons[ql.Icon].ToString() : "None";
     string text = Program.s_staticText.ContainsKey(ql.StaticText) ? Program.s_staticText[ql.StaticText].ToString() : ql.DynamicText;
     ListViewItem lvl = lvLines.Items.Add(icon);
     lvl.SubItems.Add(text);
     lvl.Tag = ql;
 }
Example #4
0
        public async Task <IActionResult> UpdateQuest(int id, QuestLine quest)
        {
            if (quest.Id != id)
            {
                return(BadRequest());
            }

            return(Ok(await _questRepository.Update(quest)));
        }
Example #5
0
 public XamlQuestLine(QuestLine questLine)
 {
     this.Version = questLine.Version;
     this.PassCode = questLine.PassCode;
     this.Description = questLine.Description;
     this.Reputations.CopyFrom(questLine.Reputations, rep => new XamlReputation(rep));
     this.QuestSets.CopyFrom(questLine.QuestSets, set => new XamlQuestSet(set));
     this.Quests.CopyFrom(questLine.Quests, quest => quest == null ? null : new XamlQuest(quest));
     this.Tiers.CopyFrom(questLine.Tiers, tier => new XamlRewardBagTier(tier));
     this.Bags.CopyFrom(questLine.Bags, bag => new XamlRewardBag(bag));
 }
        public void rebuild()
        {
            int[] numArray = GameEngine.Instance.World.getActiveQuests();
            this.outgoingScrollArea.clearControls();
            int y = 0;

            this.lineList.Clear();
            double num1 = DXTimer.GetCurrentMilliseconds() / 1000.0;

            for (int i = 0; i < numArray.Length; i++)
            {
                int quest         = numArray[i];
                int completeState = 0;
                if ((this.completedActiveQuests != null) && (i < this.completedActiveQuests.Length))
                {
                    if (this.completedActiveQuests[i])
                    {
                        completeState = 2;
                    }
                    else
                    {
                        completeState = 1;
                    }
                }
                QuestLine control = new QuestLine();
                if (y != 0)
                {
                    y += 5;
                }
                control.Position = new Point(0, y);
                control.init(quest, this, completeState, i);
                this.outgoingScrollArea.addControl(control);
                y += control.Height;
                this.lineList.Add(control);
            }
            this.outgoingScrollArea.Size = new Size(this.outgoingScrollArea.Width, y);
            if (y < this.outgoingScrollBar.Height)
            {
                this.outgoingScrollBar.Visible = false;
            }
            else
            {
                this.outgoingScrollBar.Visible         = true;
                this.outgoingScrollBar.NumVisibleLines = this.outgoingScrollBar.Height;
                this.outgoingScrollBar.Max             = y - this.outgoingScrollBar.Height;
            }
            this.outgoingScrollArea.invalidate();
            this.outgoingScrollBar.invalidate();
            this.backgroundImage.invalidate();
            this.update();
        }
Example #7
0
        public void DoDialog(Connection client)
        {
            // Is the player working for me?
            Quest playerActiveQuest = client.Character.GetActiveQuestForNPC(_id);

            if (playerActiveQuest != null)
            {
                client.SetCurrentQuest(_id, playerActiveQuest.QuestID, 0);
                byte      step = client.Character.GetQuestStep(playerActiveQuest.QuestID);
                QuestLine ql   = playerActiveQuest.GetStep(step).GetLine(0);
                ql.SendToClient(client);
                client.SendPacket(new NPCDialogPacket(_gameID));
                return;
            }

            // Do I have something for the player?
            foreach (Quest q in _quests.Values)
            {
                if (!client.Character.HasActiveQuest(q.QuestID) && !client.Character.HasCompletedQuest(q.QuestID))
                {
                    if (q.PlayerMeetsRequirements(client.Character))
                    {
                        client.Character.ReceiveQuest(q);
                        client.SetCurrentQuest(_id, q.QuestID, 0);
                        QuestStep qs = q.GetStep(0);
                        qs.Activate(client);
                        QuestLine ql = qs.GetLine(0);
                        ql.SendToClient(client);
                        client.SendPacket(new NPCDialogPacket(_gameID));
                    }
                }
            }

            /*
             * // Am I selling something?
             * if (IsMerchant)
             * {
             *  // Show sell dialog
             * }
             *
             * // Just say hello
             * if (_defaultText != null)
             * {
             *  client.SendPacket(new NPCDialogPacket(_defaultText, _defaultIcon));
             * }
             */
        }
Example #8
0
        void LoadQuestLines_Process_Handler(Task t)
        {
            if (t.Query.Rows.Count > 0)
            {
                // Get the lines from the database
                List <QuestLine> lines = new List <QuestLine>();
                foreach (object[] row in t.Query.Rows)
                {
                    QuestLine line = QuestLine.ReadFromDB(row);
                    lines.Add(line);
                }

                t.Type = Task.TaskType.LoadQuestSteps_Process;
                t.Args = lines.ToArray();
                AddDBQuery("SELECT * FROM quest_steps;", t);
            }
            else
            {
                LogInterface.Log("Database does not contain any quest lines. No quests will be available", LogInterface.LogMessageType.Game, true);
            }
        }
        private void SaveQuestLine()
        {
            MessageBox.Show("Do not use this to overwrite your original *.hqm file!  This is still incomplete!  You have been warned.");

            SelectTargetFileMessage message = new SelectTargetFileMessage
            {
                FileExtension       = ".hqm",
                FileExtensionFilter = "HQM Files (*.hqm)|*.hqm|All Files (*.*)|*.*",
                PromptForOverwrite  = true
            };

            this.MessengerInstance.Send(message);
            if (String.IsNullOrEmpty(message.SelectedFilePath))
            {
                return;
            }

            QuestLine questLine = new QuestLine();

            questLine.Version     = 20;
            questLine.PassCode    = this.passCode;
            questLine.Description = this.description;

            int maxQuestSetId = this.questSetsMutable.Max(x => x.Id);

            questLine.QuestSets = new QuestSet[this.questSetsMutable.Count];
            for (int questSetIndex = 0; questSetIndex < questLine.QuestSets.Length; questSetIndex++)
            {
                var questSet = this.questSetsMutable[questSetIndex];

                // TODO: preserve old IDs, probably with a Dictionary<int, int>?
                // Remember newly created ones will have negative IDs.
                questSet.Id = questSetIndex;

                QuestSet outputQuestSet = questLine.QuestSets[questSetIndex] = new QuestSet();

                outputQuestSet.Id          = questSetIndex;
                outputQuestSet.Name        = questSet.Name;
                outputQuestSet.Description = String.Empty;
            }

            var quests = this.questSetsMutable.SelectMany(questSet => questSet.Quests).ToArray();

            // TODO: preserve old IDs, probably with a Dictionary<int, int>?
            // Remember newly created ones will have negative IDs.
            for (int questIndex = 0; questIndex < quests.Length; questIndex++)
            {
                quests[questIndex].Id = questIndex;
            }

            questLine.Quests = new Quest[quests.Length];
            for (int questIndex = 0; questIndex < questLine.Quests.Length; questIndex++)
            {
                var quest       = quests[questIndex];
                var outputQuest = questLine.Quests[questIndex] = new Quest();

                outputQuest.Id          = questIndex;
                outputQuest.Name        = quest.Name;
                outputQuest.Description = quest.Description;
                outputQuest.Icon        = Conversions.ItemStackViewModelToItemStack(quest.Icon);
                outputQuest.XPos        = quest.XPos;
                outputQuest.YPos        = quest.YPos;
                outputQuest.IsBig       = quest.IsBig;
                outputQuest.QuestSetId  = quest.QuestSet.Id;
                outputQuest.ModifiedParentRequirementCount = quest.ModifiedParentRequirement.UseModifiedParentRequirement ? quest.ModifiedParentRequirement.ModifiedParentRequirementCount : default(int?);
                outputQuest.RepeatType          = quest.RepeatOption.RepeatType;
                outputQuest.RepeatIntervalHours = quest.RepeatOption.RepeatIntervalHours;
                outputQuest.TriggerType         = quest.TriggerOption.TriggerType;
                outputQuest.TriggerTaskCount    = quest.TriggerOption.TaskCount;

                outputQuest.ReputationRewards = quest.ReputationRewards.Select(reward => new ReputationReward {
                    Id = reward.ReputationId, Value = reward.Value
                }).ToArray();

                // TODO: tasks.
                outputQuest.Tasks = new QuestTask[0];
            }

            foreach (var questLink in this.questSetsMutable.SelectMany(questSet => questSet.QuestLinks).Concat(this.crossSetQuestLinksMutable))
            {
                var q = questLine.Quests[questLink.ToQuest.Id];
                q.RequiredQuestIds = (q.RequiredQuestIds ?? Enumerable.Empty <int>()).Concat(new[] { questLink.FromQuest.Id }).ToArray();
            }

            questLine.Reputations = new Reputation[this.reputationsMutable.Count];

            for (int reputationIndex = 0; reputationIndex < questLine.Reputations.Length; reputationIndex++)
            {
                questLine.Reputations[reputationIndex] = Conversions.ReputationViewModelToReputation(this.reputationsMutable[reputationIndex]);
            }

            // TODO: bags.
            questLine.Tiers = new RewardBagTier[0];
            questLine.Bags  = new RewardBag[0];

            using (var stream = File.OpenWrite(message.SelectedFilePath))
            {
                new HQMQuestLineWriter().WriteQuestLine(questLine, stream);
            }
        }
        public void WriteQuestLine(QuestLine questLine, Stream outputStream)
        {
            using (var bWriter = new BinaryWriter(outputStream, Encoding.ASCII, leaveOpen: true))
            {
                var writer = new BitStreamWriter(bWriter);

                writer.WriteInt32(questLine.Version, 8);
                writer.WriteString(questLine.PassCode, 7);
                writer.WriteString(questLine.Description, 16);
                writer.WriteInt32(questLine.QuestSets.Length, 5);

                for (int questSetIndex = 0; questSetIndex < questLine.QuestSets.Length; questSetIndex++)
                {
                    QuestSet questSet = questLine.QuestSets[questSetIndex];

                    writer.WriteString(questSet.Name, 5);
                    writer.WriteString(questSet.Description, 16);

                    writer.WriteInt32(questSet.ReputationBars.Length, 8);
                    for (int reputationBarIndex = 0; reputationBarIndex < questSet.ReputationBars.Length; reputationBarIndex++)
                    {
                        ReputationBar reputationBar = questSet.ReputationBars[reputationBarIndex];

                        writer.WriteInt32(reputationBar.Data, 32);
                    }
                }

                writer.WriteInt32(questLine.Reputations.Length, 8);

                for (int reputationIndex = 0; reputationIndex < questLine.Reputations.Length; reputationIndex++)
                {
                    Reputation reputation = questLine.Reputations[reputationIndex];
                    writer.WriteInt32(reputation.Id, 8);
                    writer.WriteString(reputation.Name, 5);

                    writer.WriteString(reputation.Markers[0].Name, 5);

                    writer.WriteInt32(reputation.Markers.Length - 1, 5);

                    for (int markerIndex = 1; markerIndex < reputation.Markers.Length; markerIndex++)
                    {
                        ReputationMarker marker = reputation.Markers[markerIndex];

                        writer.WriteString(marker.Name, 5);
                        writer.WriteInt32(marker.Value, 32);
                    }
                }

                writer.WriteInt32(questLine.Quests.Length, 10);

                for (int questIndex = 0; questIndex < questLine.Quests.Length; questIndex++)
                {
                    Quest quest = questLine.Quests[questIndex];

                    if (quest == null)
                    {
                        writer.WriteBoolean(false);
                        continue;
                    }

                    writer.WriteBoolean(true);

                    writer.WriteString(quest.Name, 5);
                    writer.WriteString(quest.Description, 16);

                    writer.WriteInt32(quest.XPos, 9);
                    writer.WriteInt32(quest.YPos, 8);
                    writer.WriteBoolean(quest.IsBig);
                    writer.WriteInt32(quest.QuestSetId, 5);

                    if (quest.Icon == null)
                    {
                        writer.WriteBoolean(false);
                    }
                    else
                    {
                        writer.WriteBoolean(true);
                        ItemStack icon = quest.Icon;
                        writer.WriteString(icon.ItemId, 16);
                        writer.WriteInt32(icon.Damage, 16);
                        writer.WriteNBT(icon.NBT);
                    }

                    if (quest.RequiredQuestIds == null)
                    {
                        writer.WriteBoolean(false);
                    }
                    else
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(quest.RequiredQuestIds.Length, 10);
                        for (int requirementIndex = 0; requirementIndex < quest.RequiredQuestIds.Length; requirementIndex++)
                        {
                            writer.WriteInt32(quest.RequiredQuestIds[requirementIndex], 10);
                        }
                    }

                    if (quest.OptionLinks == null)
                    {
                        writer.WriteBoolean(false);
                    }
                    else
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(quest.OptionLinks.Length, 10);
                        for (int optionLinkIndex = 0; optionLinkIndex < quest.OptionLinks.Length; optionLinkIndex++)
                        {
                            writer.WriteInt32(quest.OptionLinks[optionLinkIndex], 10);
                        }
                    }

                    writer.WriteInt32((int)quest.RepeatType, 2);
                    if (quest.RepeatType == RepeatType.Cooldown ||
                        quest.RepeatType == RepeatType.Interval)
                    {
                        writer.WriteInt32(quest.RepeatIntervalHours, 32);
                    }

                    writer.WriteInt32((int)quest.TriggerType, 2);
                    if (quest.TriggerType == TriggerType.TaskCount)
                    {
                        writer.WriteInt32(quest.TriggerTaskCount, 4);
                    }

                    if (quest.ModifiedParentRequirementCount.HasValue)
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(quest.ModifiedParentRequirementCount.Value, 10);
                    }
                    else
                    {
                        writer.WriteBoolean(false);
                    }

                    writer.WriteInt32(quest.Tasks.Length, 4);
                    for (int taskIndex = 0; taskIndex < quest.Tasks.Length; taskIndex++)
                    {
                        QuestTask task = quest.Tasks[taskIndex];

                        QuestTaskType taskType = task.TaskType;
                        writer.WriteInt32((int)taskType, 4);

                        writer.WriteString(task.Name, 5);
                        writer.WriteString(task.Description, 16);

                        switch (taskType)
                        {
                            case QuestTaskType.Consume:
                            case QuestTaskType.Craft:
                            case QuestTaskType.Detection:
                            case QuestTaskType.QDS:
                            {
                                ItemQuestTask itemTask = (ItemQuestTask)task;
                                writer.WriteInt32(itemTask.Requirements.Length, 6);

                                for (int itemIndex = 0; itemIndex < itemTask.Requirements.Length; itemIndex++)
                                {
                                    ItemRequirement requirement = itemTask.Requirements[itemIndex];

                                    if (requirement.Type == ItemType.Item)
                                    {
                                        writer.WriteBoolean(true);
                                        writer.WriteString(requirement.ItemStack.ItemId, 16);
                                        writer.WriteInt32(requirement.ItemStack.Damage, 16);
                                        writer.WriteNBT(requirement.ItemStack.NBT);

                                        writer.WriteInt32(requirement.Amount, 32);
                                        writer.WriteString(requirement.PrecisionId, 30);
                                    }
                                    else
                                    {
                                        writer.WriteBoolean(false);
                                        writer.WriteNBT(requirement.ItemStack.NBT);
                                    }
                                }

                                break;
                            }

                            case QuestTaskType.Location:
                            {
                                LocationQuestTask locationTask = (LocationQuestTask)task;
                                writer.WriteInt32(locationTask.Requirements.Length, 3);
                                for (int locationIndex = 0; locationIndex < locationTask.Requirements.Length; locationIndex++)
                                {
                                    LocationRequirement requirement = locationTask.Requirements[locationIndex];

                                    if (requirement.Icon == null)
                                    {
                                        writer.WriteBoolean(false);
                                    }
                                    else
                                    {
                                        writer.WriteBoolean(true);
                                        ItemStack icon = requirement.Icon;
                                        writer.WriteString(icon.ItemId, 16);
                                        writer.WriteInt32(icon.Damage, 16);
                                        writer.WriteNBT(icon.NBT);
                                    }

                                    writer.WriteString(requirement.Name, 5);
                                    writer.WriteInt32(requirement.XPos, 32);
                                    writer.WriteInt32(requirement.YPos, 32);
                                    writer.WriteInt32(requirement.ZPos, 32);
                                    writer.WriteInt32(requirement.Radius, 32);

                                    writer.WriteInt32((int)requirement.Visibility, 2);
                                    writer.WriteInt32(requirement.DimensionId, 32);
                                }

                                break;
                            }

                            case QuestTaskType.KillMobs:
                            {
                                MobQuestTask mobTask = (MobQuestTask)task;
                                writer.WriteInt32(mobTask.Requirements.Length, 3);
                                for (int mobIndex = 0; mobIndex < mobTask.Requirements.Length; mobIndex++)
                                {
                                    MobRequirement requirement = mobTask.Requirements[mobIndex];

                                    if (requirement.Icon == null)
                                    {
                                        writer.WriteBoolean(false);
                                    }
                                    else
                                    {
                                        writer.WriteBoolean(true);
                                        ItemStack icon = requirement.Icon;
                                        writer.WriteString(icon.ItemId, 16);
                                        writer.WriteInt32(icon.Damage, 16);
                                        writer.WriteNBT(icon.NBT);
                                    }

                                    writer.WriteString(requirement.MobName, 5);
                                    writer.WriteString(requirement.MobID, 10);
                                    writer.WriteInt32(requirement.Amount, 16);
                                    writer.WriteBoolean(requirement.IsExact);
                                }

                                break;
                            }

                            case QuestTaskType.Reputation:
                            case QuestTaskType.KillReputation:
                            {
                                ReputationTargetQuestTask repTask = (ReputationTargetQuestTask)task;
                                writer.WriteInt32(repTask.Requirements.Length, 3);
                                for (int reputationIndex = 0; reputationIndex < repTask.Requirements.Length; reputationIndex++)
                                {
                                    ReputationTargetRequirement requirement = repTask.Requirements[reputationIndex];
                                    writer.WriteInt32(requirement.ReputationId, 8);

                                    if (requirement.LowerBound.HasValue)
                                    {
                                        writer.WriteBoolean(true);
                                        writer.WriteInt32(requirement.LowerBound.Value, 5);
                                    }
                                    else
                                    {
                                        writer.WriteBoolean(false);
                                    }

                                    if (requirement.UpperBound.HasValue)
                                    {
                                        writer.WriteBoolean(true);
                                        writer.WriteInt32(requirement.UpperBound.Value, 5);
                                    }
                                    else
                                    {
                                        writer.WriteBoolean(false);
                                    }

                                    writer.WriteBoolean(requirement.Inverted);
                                }

                                if (taskType == QuestTaskType.KillReputation)
                                {
                                    writer.WriteInt32(((ReputationKillQuestTask)repTask).KillCount, 12);
                                }

                                break;
                            }

                            case QuestTaskType.Deaths:
                            {
                                DeathQuestTask deathTask = (DeathQuestTask)task;

                                writer.WriteInt32(deathTask.DeathCount, 12);

                                break;
                            }
                        }
                    }

                    if (quest.CommonRewards == null)
                    {
                        writer.WriteBoolean(false);
                    }
                    else
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(quest.CommonRewards.Length, 3);
                        for (int commonRewardIndex = 0; commonRewardIndex < quest.CommonRewards.Length; commonRewardIndex++)
                        {
                            ItemStack commonReward = quest.CommonRewards[commonRewardIndex];

                            writer.WriteString(commonReward.ItemId, 16);
                            writer.WriteInt32(commonReward.Size.Value, 16);
                            writer.WriteInt32(commonReward.Damage, 16);
                            writer.WriteNBT(commonReward.NBT);
                        }
                    }

                    if (quest.PickOneRewards == null)
                    {
                        writer.WriteBoolean(false);
                    }
                    else
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(quest.PickOneRewards.Length, 3);
                        for (int pickOneRewardIndex = 0; pickOneRewardIndex < quest.PickOneRewards.Length; pickOneRewardIndex++)
                        {
                            ItemStack pickOneReward = quest.PickOneRewards[pickOneRewardIndex];

                            writer.WriteString(pickOneReward.ItemId, 16);
                            writer.WriteInt32(pickOneReward.Size.Value, 16);
                            writer.WriteInt32(pickOneReward.Damage, 16);
                            writer.WriteNBT(pickOneReward.NBT);
                        }
                    }

                    writer.WriteInt32(quest.ReputationRewards.Length, 3);
                    for (int reputationRewardIndex = 0; reputationRewardIndex < quest.ReputationRewards.Length; reputationRewardIndex++)
                    {
                        ReputationReward reputationReward = quest.ReputationRewards[reputationRewardIndex];

                        writer.WriteInt32(reputationReward.Id, 8);
                        writer.WriteInt32(reputationReward.Value, 32);
                    }
                }

                writer.WriteInt32(questLine.Tiers.Length, 7);
                for (int tierIndex = 0; tierIndex < questLine.Tiers.Length; tierIndex++)
                {
                    RewardBagTier tier = questLine.Tiers[tierIndex];

                    writer.WriteString(tier.Name, 5);
                    writer.WriteInt32((int)tier.Color, 4);
                    writer.WriteInt32(tier.BasicWeight, 19);
                    writer.WriteInt32(tier.GoodWeight, 19);
                    writer.WriteInt32(tier.GreaterWeight, 19);
                    writer.WriteInt32(tier.EpicWeight, 19);
                    writer.WriteInt32(tier.LegendaryWeight, 19);
                }

                writer.WriteInt32(questLine.Bags.Length, 10);
                for (int bagIndex = 0; bagIndex < questLine.Bags.Length; bagIndex++)
                {
                    RewardBag bag = questLine.Bags[bagIndex];

                    writer.WriteInt32(bag.Id, 10);
                    writer.WriteString(bag.Name, 5);
                    writer.WriteInt32(bag.TierId, 7);

                    writer.WriteInt32(bag.Rewards.Length, 6);
                    for (int rewardIndex = 0; rewardIndex < bag.Rewards.Length; rewardIndex++)
                    {
                        ItemStack reward = bag.Rewards[rewardIndex];

                        writer.WriteString(reward.ItemId, 16);
                        writer.WriteInt32(reward.Size.Value, 16);
                        writer.WriteInt32(reward.Damage, 16);
                        writer.WriteNBT(reward.NBT);
                    }

                    if (bag.Limit.HasValue)
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt32(bag.Limit.Value, 10);
                    }
                    else
                    {
                        writer.WriteBoolean(false);
                    }
                }

                writer.WriteFinalBits();
            }
        }
Example #11
0
    private void OnGUI()
    {
        int index = 0;

        foreach (QuestTracker q in questLog)
        {
            float height = (new GUIStyle()).CalcSize(new GUIContent(" ")).y;

            Color c;

            switch (q.State)
            {
            case QuestState.Completed:
                c = Color.green;
                break;

            case QuestState.Failed:
                c = Color.red;
                break;

            case QuestState.InProgress:
            default:
                c = Color.white;
                break;
            }

            GUIStyle s = new GUIStyle()
            {
                fontSize = 18
            };
            s.normal.textColor = c;

            GUI.Label(new Rect(0f, height * index, 100f, height), q.Desc, s);

            QuestLine l = q as QuestLine;

            if (l != null)
            {
                index++;

                float offset = 50f;

                foreach (QuestTracker t in l.Quests())
                {
                    switch (t.State)
                    {
                    case QuestState.Completed:
                        c = Color.green;
                        break;

                    case QuestState.Failed:
                        c = Color.red;
                        break;

                    case QuestState.InProgress:
                    default:
                        c = Color.white;
                        break;
                    }

                    s.normal.textColor = c;

                    GUI.Label(new Rect(offset, index * height, 100f, height), l.Desc, s);

                    index++;
                }
            }

            index++;
        }
    }
        public QuestLine ReadQuestLine(Stream inputStream)
        {
            using (var bReader = new BinaryReader(inputStream, Encoding.ASCII, leaveOpen: true))
            {
                var reader = new BitStreamReader(bReader);
                QuestLine questLine = new QuestLine();
                questLine.Version = reader.ReadInt32(8);

                if (questLine.Version != 22)
                {
                    throw new NotSupportedException("Version must be 22.");
                }

                questLine.PassCode = reader.ReadString(7);
                questLine.Description = reader.ReadString(16);
                questLine.QuestSets = new QuestSet[reader.ReadInt32(5)];

                for (int questSetIndex = 0; questSetIndex < questLine.QuestSets.Length; questSetIndex++)
                {
                    QuestSet questSet = questLine.QuestSets[questSetIndex] = new QuestSet();
                    questSet.Id = questSetIndex;
                    questSet.Name = reader.ReadString(5);
                    questSet.Description = reader.ReadString(16);

                    ReputationBar[] reputationBars = questSet.ReputationBars = new ReputationBar[reader.ReadInt32(8)];
                    for (int reputationBarIndex = 0; reputationBarIndex < reputationBars.Length; reputationBarIndex++)
                    {
                        reputationBars[reputationBarIndex] = new ReputationBar { Data = reader.ReadInt32(32) };
                    }
                }

                questLine.Reputations = new Reputation[reader.ReadInt32(8)];

                for (int reputationIndex = 0; reputationIndex < questLine.Reputations.Length; reputationIndex++)
                {
                    Reputation reputation = questLine.Reputations[reputationIndex] = new Reputation();
                    reputation.Id = reader.ReadInt32(8);
                    reputation.Name = reader.ReadString(5);

                    string neutralName = reader.ReadString(5);

                    int markerCount = reader.ReadInt32(5);

                    reputation.Markers = new ReputationMarker[markerCount + 1];
                    reputation.Markers[0] = new ReputationMarker { Name = neutralName, Value = 0 };

                    for (int markerIndex = 1; markerIndex < reputation.Markers.Length; markerIndex++)
                    {
                        ReputationMarker marker = reputation.Markers[markerIndex] = new ReputationMarker();

                        marker.Name = reader.ReadString(5);
                        marker.Value = reader.ReadInt32(32);
                    }
                }

                questLine.Quests = new Quest[reader.ReadInt32(10)];

                for (int questIndex = 0; questIndex < questLine.Quests.Length; questIndex++)
                {
                    // Don't skip this quest?
                    if (!reader.ReadBoolean())
                    {
                        continue;
                    }

                    Quest quest = questLine.Quests[questIndex] = new Quest();

                    quest.Id = questIndex;

                    quest.Name = reader.ReadString(5);
                    quest.Description = reader.ReadString(16);

                    quest.XPos = reader.ReadInt32(9);
                    quest.YPos = reader.ReadInt32(8);
                    quest.IsBig = reader.ReadBoolean();
                    quest.QuestSetId = reader.ReadInt32(5);

                    // Icon?
                    if (reader.ReadBoolean())
                    {
                        ItemStack icon = quest.Icon = new ItemStack();
                        icon.ItemId = reader.ReadString(16);
                        icon.Damage = reader.ReadInt32(16);
                        icon.NBT = reader.ReadNBT();
                    }

                    // Has requirements?
                    if (reader.ReadBoolean())
                    {
                        quest.RequiredQuestIds = new int[reader.ReadInt32(10)];
                        for (int requirementIndex = 0; requirementIndex < quest.RequiredQuestIds.Length; requirementIndex++)
                        {
                            quest.RequiredQuestIds[requirementIndex] = reader.ReadInt32(10);
                        }
                    }

                    // Has option links?
                    if (reader.ReadBoolean())
                    {
                        quest.OptionLinks = new int[reader.ReadInt32(10)];
                        for (int optionLinkIndex = 0; optionLinkIndex < quest.OptionLinks.Length; optionLinkIndex++)
                        {
                            quest.OptionLinks[optionLinkIndex] = reader.ReadInt32(10);
                        }
                    }

                    quest.RepeatType = (RepeatType)reader.ReadInt32(2);
                    if (quest.RepeatType == RepeatType.Cooldown ||
                        quest.RepeatType == RepeatType.Interval)
                    {
                        quest.RepeatIntervalHours = reader.ReadInt32(32);
                    }

                    quest.TriggerType = (TriggerType)reader.ReadInt32(2);
                    if (quest.TriggerType == TriggerType.TaskCount)
                    {
                        quest.TriggerTaskCount = reader.ReadInt32(4);
                    }

                    // Modified Parent Requirement?
                    if (reader.ReadBoolean())
                    {
                        quest.ModifiedParentRequirementCount = reader.ReadInt32(10);
                    }

                    quest.Tasks = new QuestTask[reader.ReadInt32(4)];
                    for (int taskIndex = 0; taskIndex < quest.Tasks.Length; taskIndex++)
                    {
                        QuestTaskType taskType = (QuestTaskType)reader.ReadInt32(4);
                        string taskName = reader.ReadString(5);
                        string taskDescription = reader.ReadString(16);

                        QuestTask task = null;
                        switch (taskType)
                        {
                            case QuestTaskType.Consume:
                            case QuestTaskType.Craft:
                            case QuestTaskType.Detection:
                            case QuestTaskType.QDS:
                            {
                                ItemQuestTask itemTask;
                                task = itemTask = new ItemQuestTask();
                                itemTask.Requirements = new ItemRequirement[reader.ReadInt32(6)];

                                for (int itemIndex = 0; itemIndex < itemTask.Requirements.Length; itemIndex++)
                                {
                                    ItemRequirement requirement = itemTask.Requirements[itemIndex] = new ItemRequirement();
                                    requirement.ItemStack = new ItemStack();

                                    // Item (as opposed to fluid)?
                                    if (reader.ReadBoolean())
                                    {
                                        requirement.Type = ItemType.Item;
                                        requirement.ItemStack.ItemId = reader.ReadString(16);
                                        requirement.ItemStack.Damage = reader.ReadInt32(16);
                                        requirement.ItemStack.NBT = reader.ReadNBT();

                                        requirement.Amount = reader.ReadInt32(32);
                                        requirement.PrecisionId = reader.ReadString(30);
                                    }
                                    else
                                    {
                                        requirement.Type = ItemType.Fluid;
                                        requirement.ItemStack.NBT = reader.ReadNBT();
                                    }
                                }

                                break;
                            }

                            case QuestTaskType.Location:
                            {
                                LocationQuestTask locationTask;
                                task = locationTask = new LocationQuestTask();
                                locationTask.Requirements = new LocationRequirement[reader.ReadInt32(3)];
                                for (int locationIndex = 0; locationIndex < locationTask.Requirements.Length; locationIndex++)
                                {
                                    LocationRequirement requirement = locationTask.Requirements[locationIndex] = new LocationRequirement();

                                    // Icon?
                                    if (reader.ReadBoolean())
                                    {
                                        ItemStack icon = requirement.Icon = new ItemStack();
                                        icon.ItemId = reader.ReadString(16);
                                        icon.Damage = reader.ReadInt32(16);
                                        icon.NBT = reader.ReadNBT();
                                    }

                                    requirement.Name = reader.ReadString(5);
                                    requirement.XPos = reader.ReadInt32(32);
                                    requirement.YPos = reader.ReadInt32(32);
                                    requirement.ZPos = reader.ReadInt32(32);
                                    requirement.Radius = reader.ReadInt32(32);

                                    requirement.Visibility = (Visibility)reader.ReadInt32(2);
                                    requirement.DimensionId = reader.ReadInt32(32);
                                }

                                break;
                            }

                            case QuestTaskType.KillMobs:
                            {
                                MobQuestTask mobTask;
                                task = mobTask = new MobQuestTask();
                                mobTask.Requirements = new MobRequirement[reader.ReadInt32(3)];
                                for (int mobIndex = 0; mobIndex < mobTask.Requirements.Length; mobIndex++)
                                {
                                    MobRequirement requirement = mobTask.Requirements[mobIndex] = new MobRequirement();

                                    // Icon?
                                    if (reader.ReadBoolean())
                                    {
                                        ItemStack icon = requirement.Icon = new ItemStack();
                                        icon.ItemId = reader.ReadString(16);
                                        icon.Damage = reader.ReadInt32(16);
                                        icon.NBT = reader.ReadNBT();
                                    }

                                    requirement.MobName = reader.ReadString(5);
                                    requirement.MobID = reader.ReadString(10);
                                    requirement.Amount = reader.ReadInt32(16);
                                    requirement.IsExact = reader.ReadBoolean();
                                }

                                break;
                            }

                            case QuestTaskType.Reputation:
                            case QuestTaskType.KillReputation:
                            {
                                ReputationTargetQuestTask repTask;
                                task = repTask = taskType == QuestTaskType.Reputation ? new ReputationTargetQuestTask() : new ReputationKillQuestTask();
                                repTask.Requirements = new ReputationTargetRequirement[reader.ReadInt32(3)];
                                for (int reputationIndex = 0; reputationIndex < repTask.Requirements.Length; reputationIndex++)
                                {
                                    ReputationTargetRequirement requirement = repTask.Requirements[reputationIndex] = new ReputationTargetRequirement();
                                    requirement.ReputationId = reader.ReadInt32(8);

                                    // Has lower bound?
                                    if (reader.ReadBoolean())
                                    {
                                        requirement.LowerBound = reader.ReadInt32(5);
                                    }

                                    // Has upper bound?
                                    if (reader.ReadBoolean())
                                    {
                                        requirement.UpperBound = reader.ReadInt32(5);
                                    }

                                    requirement.Inverted = reader.ReadBoolean();
                                }

                                if (taskType == QuestTaskType.KillReputation)
                                {
                                    ((ReputationKillQuestTask)repTask).KillCount = reader.ReadInt32(12);
                                }

                                break;
                            }

                            case QuestTaskType.Deaths:
                            {
                                DeathQuestTask deathTask;
                                task = deathTask = new DeathQuestTask();

                                deathTask.DeathCount = reader.ReadInt32(12);

                                break;
                            }
                        }

                        task.TaskType = taskType;
                        task.Name = taskName;
                        task.Description = taskDescription;
                        quest.Tasks[taskIndex] = task;
                    }

                    // Common Rewards?
                    if (reader.ReadBoolean())
                    {
                        quest.CommonRewards = new ItemStack[reader.ReadInt32(3)];
                        for (int commonRewardIndex = 0; commonRewardIndex < quest.CommonRewards.Length; commonRewardIndex++)
                        {
                            ItemStack commonReward = quest.CommonRewards[commonRewardIndex] = new ItemStack();

                            commonReward.ItemId = reader.ReadString(16);
                            commonReward.Size = reader.ReadInt32(16);
                            commonReward.Damage = reader.ReadInt32(16);
                            commonReward.NBT = reader.ReadNBT();
                        }
                    }

                    // Pick-One Rewards?
                    if (reader.ReadBoolean())
                    {
                        quest.PickOneRewards = new ItemStack[reader.ReadInt32(3)];
                        for (int pickOneRewardIndex = 0; pickOneRewardIndex < quest.PickOneRewards.Length; pickOneRewardIndex++)
                        {
                            ItemStack pickOneReward = quest.PickOneRewards[pickOneRewardIndex] = new ItemStack();

                            pickOneReward.ItemId = reader.ReadString(16);
                            pickOneReward.Size = reader.ReadInt32(16);
                            pickOneReward.Damage = reader.ReadInt32(16);
                            pickOneReward.NBT = reader.ReadNBT();
                        }
                    }

                    quest.ReputationRewards = new ReputationReward[reader.ReadInt32(3)];
                    for (int reputationRewardIndex = 0; reputationRewardIndex < quest.ReputationRewards.Length; reputationRewardIndex++)
                    {
                        ReputationReward reputationReward = quest.ReputationRewards[reputationRewardIndex] = new ReputationReward();

                        reputationReward.Id = reader.ReadInt32(8);
                        reputationReward.Value = reader.ReadInt32(32);
                    }
                }

                questLine.Tiers = new RewardBagTier[reader.ReadInt32(7)];
                for (int tierIndex = 0; tierIndex < questLine.Tiers.Length; tierIndex++)
                {
                    RewardBagTier tier = questLine.Tiers[tierIndex] = new RewardBagTier();

                    tier.Name = reader.ReadString(5);
                    tier.Color = (Color)reader.ReadInt32(4);
                    tier.BasicWeight = reader.ReadInt32(19);
                    tier.GoodWeight = reader.ReadInt32(19);
                    tier.GreaterWeight = reader.ReadInt32(19);
                    tier.EpicWeight = reader.ReadInt32(19);
                    tier.LegendaryWeight = reader.ReadInt32(19);
                }

                questLine.Bags = new RewardBag[reader.ReadInt32(10)];
                for (int bagIndex = 0; bagIndex < questLine.Bags.Length; bagIndex++)
                {
                    RewardBag bag = questLine.Bags[bagIndex] = new RewardBag();

                    bag.Id = reader.ReadInt32(10);
                    bag.Name = reader.ReadString(5);
                    bag.TierId = reader.ReadInt32(7);

                    bag.Rewards = new ItemStack[reader.ReadInt32(6)];
                    for (int rewardIndex = 0; rewardIndex < bag.Rewards.Length; rewardIndex++)
                    {
                        ItemStack reward = bag.Rewards[rewardIndex] = new ItemStack();

                        reward.ItemId = reader.ReadString(16);
                        reward.Size = reader.ReadInt32(16);
                        reward.Damage = reader.ReadInt32(16);
                        reward.NBT = reader.ReadNBT();
                    }

                    // Use a limit?
                    if (reader.ReadBoolean())
                    {
                        bag.Limit = reader.ReadInt32(10);
                    }
                }

                return questLine;
            }
        }
Example #13
0
 void FixLineButtons(QuestLine ql)
 {
     btnLineUp.Enabled = false;
     btnLineDown.Enabled = false;
     ListViewItem lvs = lvSteps.SelectedItems[0];
     QuestStep qs = (QuestStep)lvs.Tag;
     int index = qs.Lines.IndexOf(ql);
     btnLineUp.Enabled = (index > 0);
     btnLineDown.Enabled = (index < (qs.Lines.Count - 1));
 }
Example #14
0
        private void btnNewLine_Click(object sender, EventArgs e)
        {
            // Create a quest line
            QuestLine ql = new QuestLine(0, (ushort)(cbIcon.SelectedItem != null ? ((IntStrID)cbIcon.SelectedItem).ID : 0), (ushort)Math.Max(cbStaticText.SelectedIndex, 0), "", 0);
            ql.New = true;

            // Add it to the step
            ListViewItem lvs = lvSteps.SelectedItems[0];
            QuestStep qs = (QuestStep)lvs.Tag;
            qs.Lines.Add(ql);

            // Add it to the display
            AddLineToDisplay(ql);

            // Mark quest dirty
            SetDirty(true);
        }
Example #15
0
 public async Task <IActionResult> UpdateQuest(QuestLine quest)
 {
     return(Ok(await _questRepository.Create(quest)));
 }
Example #16
0
        private void SaveQuestLine()
        {
            MessageBox.Show("Do not use this to overwrite your original *.hqm file!  This is still incomplete!  You have been warned.");

            SelectTargetFileMessage message = new SelectTargetFileMessage
            {
                FileExtension = ".hqm",
                FileExtensionFilter = "HQM Files (*.hqm)|*.hqm|All Files (*.*)|*.*",
                PromptForOverwrite = true
            };
            this.MessengerInstance.Send(message);
            if (String.IsNullOrEmpty(message.SelectedFilePath))
            {
                return;
            }

            QuestLine questLine = new QuestLine();

            questLine.Version = 20;
            questLine.PassCode = this.passCode;
            questLine.Description = this.description;

            int maxQuestSetId = this.questSetsMutable.Max(x => x.Id);

            questLine.QuestSets = new QuestSet[this.questSetsMutable.Count];
            for (int questSetIndex = 0; questSetIndex < questLine.QuestSets.Length; questSetIndex++)
            {
                var questSet = this.questSetsMutable[questSetIndex];

                // TODO: preserve old IDs, probably with a Dictionary<int, int>?
                // Remember newly created ones will have negative IDs.
                questSet.Id = questSetIndex;

                QuestSet outputQuestSet = questLine.QuestSets[questSetIndex] = new QuestSet();

                outputQuestSet.Id = questSetIndex;
                outputQuestSet.Name = questSet.Name;
                outputQuestSet.Description = String.Empty;
            }

            var quests = this.questSetsMutable.SelectMany(questSet => questSet.Quests).ToArray();

            // TODO: preserve old IDs, probably with a Dictionary<int, int>?
            // Remember newly created ones will have negative IDs.
            for (int questIndex = 0; questIndex < quests.Length; questIndex++)
            {
                quests[questIndex].Id = questIndex;
            }

            questLine.Quests = new Quest[quests.Length];
            for (int questIndex = 0; questIndex < questLine.Quests.Length; questIndex++)
            {
                var quest = quests[questIndex];
                var outputQuest = questLine.Quests[questIndex] = new Quest();

                outputQuest.Id = questIndex;
                outputQuest.Name = quest.Name;
                outputQuest.Description = quest.Description;
                outputQuest.Icon = Conversions.ItemStackViewModelToItemStack(quest.Icon);
                outputQuest.XPos = quest.XPos;
                outputQuest.YPos = quest.YPos;
                outputQuest.IsBig = quest.IsBig;
                outputQuest.QuestSetId = quest.QuestSet.Id;
                outputQuest.ModifiedParentRequirementCount = quest.ModifiedParentRequirement.UseModifiedParentRequirement ? quest.ModifiedParentRequirement.ModifiedParentRequirementCount : default(int?);
                outputQuest.RepeatType = quest.RepeatOption.RepeatType;
                outputQuest.RepeatIntervalHours = quest.RepeatOption.RepeatIntervalHours;
                outputQuest.TriggerType = quest.TriggerOption.TriggerType;
                outputQuest.TriggerTaskCount = quest.TriggerOption.TaskCount;

                outputQuest.ReputationRewards = quest.ReputationRewards.Select(reward => new ReputationReward { Id = reward.ReputationId, Value = reward.Value }).ToArray();

                // TODO: tasks.
                outputQuest.Tasks = new QuestTask[0];
            }

            foreach (var questLink in this.questSetsMutable.SelectMany(questSet => questSet.QuestLinks).Concat(this.crossSetQuestLinksMutable))
            {
                var q = questLine.Quests[questLink.ToQuest.Id];
                q.RequiredQuestIds = (q.RequiredQuestIds ?? Enumerable.Empty<int>()).Concat(new[] { questLink.FromQuest.Id }).ToArray();
            }

            questLine.Reputations = new Reputation[this.reputationsMutable.Count];

            for (int reputationIndex = 0; reputationIndex < questLine.Reputations.Length; reputationIndex++)
            {
                questLine.Reputations[reputationIndex] = Conversions.ReputationViewModelToReputation(this.reputationsMutable[reputationIndex]);
            }

            // TODO: bags.
            questLine.Tiers = new RewardBagTier[0];
            questLine.Bags = new RewardBag[0];

            using (var stream = File.OpenWrite(message.SelectedFilePath))
            {
                new HQMQuestLineWriter().WriteQuestLine(questLine, stream);
            }
        }