Exemple #1
0
        public static RewardWithDetailsList VerasFindSourcesForItems(this String id, Details mainDetails = default, RewardWithDetailsList inResult = default)
        {
            mainDetails = (mainDetails == default) ? new Details() : mainDetails;
            mainDetails.PreviousIDs.Add(id);
            var mainResult   = inResult ?? new RewardWithDetailsList();
            var resultstoadd = new List <RewardWithDetailsList>();
            var links        = Program.Original.Root.XPathSelectElements($"//*[text()={id} and not(self::GUID)]").ToArray();

            if (links.Length > 0)
            {
                for (var i = 0; i < links.Length; i++)
                {
                    var element = links[i];
                    while (element.Name.LocalName != "Asset" || !element.HasElements)
                    {
                        element = element.Parent;
                    }
                    var Details = new Details(mainDetails);
                    var result  = mainResult.Copy();
                    if (element.Element("Template") == null)
                    {
                        if (element.XPathSelectElement("Values/Profile/ShipDropRewardPool")?.Value == id)
                        {
                            result.AddSourceAsset(element.GetProxy("ShipDrop"), new HashSet <XElement> {
                                element.GetProxy("ShipDrop")
                            });
                            resultstoadd.Add(result);
                            continue;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    var key = element.XPathSelectElement("Values/Standard/GUID").Value;
                    if (mainDetails.PreviousIDs.Contains(key))
                    {
                        continue;
                    }

                    switch (element.Element("Template").Value)
                    {
                    case "AssetPool":
                    case "TutorialQuest":
                    case "SettlementRightsFeature":
                    case "Profile_2ndParty":
                    case "GuildhouseItem":
                    case "HarborOfficeItem":
                    case "HarbourOfficeBuff":
                    case "MonumentEvent":
                    case "MainQuest":
                        // ignore
                        break;

                    case "Expedition":

                        if (!element.XPathSelectElement("Values/Standard/Name").Value.Contains("Test"))
                        {
                            if (Details.Items.Count == 0)
                            {
                                Details.Add(element);
                            }

                            result.AddSourceAsset(element, Details.Items);
                        }
                        break;

                    case "Profile_3rdParty":
                    case "Profile_3rdParty_Pirate":
                        if (!element.XPathSelectElement("Values/Standard/Name").Value.Contains("Test") &&
                            element.XPathSelectElement("Standard/Profile/ShipDropRewardPool")?.Value == id)
                        {
                            result.AddSourceAsset(element.GetProxy("ShipDrop"), new HashSet <XElement> {
                                element.GetProxy("ShipDrop")
                            });
                            break;
                        }

                        goto case "A7_QuestEscortObject";

                    case "A7_QuestEscortObject":
                    case "A7_QuestDeliveryObject":
                    case "A7_QuestDestroyObjects":
                    case "A7_QuestPickupObject":
                    case "A7_QuestFollowShip":
                    case "A7_QuestPhotography":
                    case "A7_QuestStatusQuo":
                    case "A7_QuestItemUsage":
                    case "A7_QuestSustain":
                    case "A7_QuestPicturePuzzleObject":
                    case "Quest":
                    case "CollectablePicturePuzzle":
                    case "MonumentEventReward":
                    case "TourismFeature":
                        if (!element.XPathSelectElement("Values/Standard/Name").Value.Contains("Test"))
                        {
                            result.AddSourceAsset(element, new HashSet <XElement> {
                                element
                            });
                        }
                        break;

                    case "ExpeditionDecision":
                        var check  = false;
                        var name   = element.XPathSelectElement("Values/Standard/Name")?.Value;
                        var reward = element.XPathSelectElement("Values/Reward/RewardAssets");
                        check = reward?.HasElements == true && reward.Elements("Item").Any(l => l.Element("Reward").Value == id);
                        if (check || element.XPathSelectElements($"//*[text()={id} and not(self::GUID) and (self::InsertEvent)]").Any())
                        {
                            Details.Add(element);
                        }
                        goto case "ExpeditionOption";

                    case "ExpeditionOption":
                    case "ExpeditionTrade":
                    case "ExpeditionEvent":
                    case "ExpeditionEventPool":
                        if (Sources.ContainsKey(key))
                        {
                            result.AddSourceAsset(Sources[key].Copy(), Details);
                            break;
                        }
                        goto case "RewardPool";

                    case "RewardPool":
                    case "RewardItemPool":

                        if (Sources.ContainsKey(key))
                        {
                            result.AddSourceAsset(Sources[key].Copy());
                            break;
                        }

                        VerasFindSourcesForItems(key, Details, result);
                        if (!Sources.ContainsKey(key))
                        {
                            Sources.Add(key, result.Copy());
                        }
                        break;

                    default:
                        Debug.WriteLine(element.Element("Template").Value);
                        break;
                        //throw new NotImplementedException(element.Element("Template").Value);
                    }
                    resultstoadd.Add(result);
                }
            }

            foreach (var item in resultstoadd)
            {
                mainResult.AddSourceAsset(item);
            }
            return(mainResult);
        }
Exemple #2
0
        private static RewardWithDetailsList VerasFindExpeditionEvents(string id, Details mainDetails = default, RewardWithDetailsList inResult = default)
        {
            mainDetails = (mainDetails == default) ? new Details() : mainDetails;
            mainDetails.PreviousIDs.Add(id);
            var mainResult   = inResult ?? new RewardWithDetailsList();
            var resultstoadd = new List <RewardWithDetailsList>();
            var links        = Program.Original.Root.XPathSelectElements($"//*[text()={id} and not(self::GUID)]").ToArray();

            if (links.Length > 0)
            {
                for (var i = 0; i < links.Length; i++)
                {
                    var element = links[i];
                    while (element.Name.LocalName != "Asset" || !element.HasElements)
                    {
                        element = element.Parent;
                    }
                    if (element.Element("Template") == null)
                    {
                        continue;
                    }
                    var key = element.XPathSelectElement("Values/Standard/GUID").Value;
                    if (mainDetails.PreviousIDs.Contains(key))
                    {
                        continue;
                    }
                    var Details = new Details(mainDetails);
                    var result  = mainResult.Copy();
                    switch (element.Element("Template").Value)
                    {
                    case "AssetPool":
                    case "TutorialQuest":
                    case "SettlementRightsFeature":
                    case "Profile_2ndParty":
                    case "GuildhouseItem":
                    case "HarborOfficeItem":
                    case "HarbourOfficeBuff":
                    case "MonumentEvent":

                    case "Expedition":
                    case "Profile_3rdParty":
                    case "Profile_3rdParty_Pirate":
                    case "A7_QuestEscortObject":
                    case "A7_QuestDeliveryObject":
                    case "A7_QuestDestroyObjects":
                    case "A7_QuestPickupObject":
                    case "A7_QuestFollowShip":
                    case "A7_QuestPhotography":
                    case "A7_QuestStatusQuo":
                    case "A7_QuestItemUsage":
                    case "A7_QuestSustain":
                    case "A7_QuestPicturePuzzleObject":
                    case "Quest":
                    case "CollectablePicturePuzzle":
                    case "MonumentEventReward":
                    case "TourismFeature":

                    case "RewardPool":
                    case "RewardItemPool":
                    case "ExpeditionEventPool":
                        // ignore
                        break;

                    case "ExpeditionDecision":
                    case "ExpeditionOption":
                    case "ExpeditionTrade":
                        Details.Add(element);
                        VerasFindExpeditionEvents(key, Details, result);
                        break;

                    case "ExpeditionEvent":
                        if (!element.XPathSelectElement("Values/Standard/Name").Value.Contains("Test"))
                        {
                            result.AddSourceAsset(element, Details.Items);
                        }

                        break;

                    default:
                        throw new NotImplementedException(element.Element("Template").Value);
                    }
                    resultstoadd.Add(result);
                }
            }

            foreach (var item in resultstoadd)
            {
                mainResult.AddSourceAsset(item);
            }
            return(mainResult);
        }