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); } }
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); }
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); }