Пример #1
0
        private void loadQuestDetails(dynamic resource)
        {
            foreach (dynamic questDetailRes in resource.QuestDetailList)
            {
                var questDetail = new QuestDetail();
                questDetail.Index            = questDetailRes.Index;
                questDetail.GameMode         = GameMode.Parse(questDetailRes.GameMode);
                questDetail.LevelRestriction = questDetailRes.LevelRestriction;

                int conditionIndex = 1;
                while (questDetailRes.Members.ContainsKey("ConditionType" + conditionIndex))
                {
                    var condition = new QuestCondition(QuestConditionType.Parse(questDetailRes.Members["ConditionType" + conditionIndex]),
                                                       ((string)questDetailRes.Members["ConditionCount" + conditionIndex]).Split(',').Select(int.Parse).ToList());
                    questDetail.Conditions.Add(condition);
                    conditionIndex++;
                }

                int requireItemIndex = 1;
                while (questDetailRes.Members.ContainsKey("RequireItem" + requireItemIndex))
                {
                    var requirement = new QuestItemRequirement(questDetailRes.Members["RequireItem" + requireItemIndex], questDetailRes.Members["Quantity" + requireItemIndex]);
                    questDetail.ItemRequirement.Add(requirement);
                    requireItemIndex++;
                }
                _questDetails.Add(questDetail.Index, questDetail);
            }
        }
Пример #2
0
        private static void AssignTo(this QuestItemRequirement itemRequirement, QuestCondition condition, RemotePlayer player)
        {
            condition.Type          = ConditionType.Item;
            condition.RequiredCount = (uint)itemRequirement.MinimumNumber;
            condition.CurrentCount  = (uint)player.Inventory.Items.Count(item => item.Definition == itemRequirement.Item);
            condition.RequirementId = itemRequirement.Item.GetItemType();
            var temporaryItem = new TemporaryItem();

            temporaryItem.Definition = itemRequirement.Item;
            temporaryItem.Durability = temporaryItem.GetMaximumDurabilityOfOnePiece();
            player.ItemSerializer.SerializeItem(condition.RequiredItemData, temporaryItem);
        }
Пример #3
0
        private static void AssignTo(this QuestItemRequirement itemRequirement, QuestCondition condition, RemotePlayer player)
        {
            condition.Type          = ConditionType.Item;
            condition.RequiredCount = (uint)itemRequirement.MinimumNumber;
            condition.CurrentCount  = (uint)player.Inventory.Items.Count(item => item.Definition == itemRequirement.Item);
            condition.RequirementId = itemRequirement.Item.GetItemType();

            // The requirement does not contain an item, but only the ItemDefinition.
            // We could create and serialize a temporary item and copy just a part of the result.
            // However, we can also keep it simple and just set the last 5 socket bytes to 0xFF (No Socket).
            condition.RequiredItemData.Slice(condition.RequiredItemData.Length - 5).Fill(0xFF);
        }