Beispiel #1
0
            public void Update()
            {
                BaseItemType BaseItem = gameController.Files.BaseItemTypes.Translate(Entity.Path);
                string       ItemName = BaseItem.BaseName;

                ClassID = BaseItem.ClassName;
                MavenDetails mavenDetails = new MavenDetails();

                int packSize = 0;
                int quantity = Entity.GetComponent <Quality>()?.ItemQuality ?? 0;
                // get and evaluate mods
                var mapComponent = Entity.GetComponent <Map>() ?? null;

                Tier            = mapComponent?.Tier ?? -1;
                NeedsPadding    = Tier == -1 ? false : true;
                ZanaMissionType = ObjectiveType.None;
                Bricked         = false;
                Corrupted       = Entity.GetComponent <Base>()?.isCorrupted ?? false;

                var modsComponent = Entity.GetComponent <Mods>() ?? null;

                ModCount = modsComponent?.ItemMods.Count() ?? 0;
                if (modsComponent != null && ModCount > 0)
                {
                    // add warnings, add quant, add packsize
                    if (modsComponent != null && modsComponent.ItemRarity != ItemRarity.Unique)
                    {
                        foreach (var mod in modsComponent.ItemMods.Where(x =>
                                                                         !x.Group.Contains("MapAtlasInfluence")))
                        {
                            if (ModNameBlacklist.Any(m => mod.RawName.Contains(m)))
                            {
                                ModCount--;
                                continue;
                            }

                            #region Elder Guardian Maven Areas and Regions
                            if (mod.Group.Contains("MapElderContainsBoss"))
                            {
                                ModCount--;
                                switch (mod.Value1)
                                {
                                case 1:
                                    mavenDetails.MavenRegion = "The Twisted";
                                    mavenDetails.MavenArea   = "The Enslaver";
                                    break;

                                case 2:
                                    mavenDetails.MavenRegion = "The Twisted";
                                    mavenDetails.MavenArea   = "The Eradicator";
                                    break;

                                case 3:
                                    mavenDetails.MavenRegion = "The Twisted";
                                    mavenDetails.MavenArea   = "The Constrictor";
                                    break;

                                case 4:
                                    mavenDetails.MavenRegion = "The Twisted";
                                    mavenDetails.MavenArea   = "The Purifier";
                                    break;
                                }
                                continue;
                            }
                            #endregion
                            quantity += mod.Value1;
                            packSize += mod.Value3;
                            if (WarningDictionary.Where(x => mod.RawName.Contains(x.Key)).Any())
                            {
                                StyledText warning = WarningDictionary.Where(x => mod.RawName.Contains(x.Key)).FirstOrDefault().Value;
                                if (warning.Bricking)
                                {
                                    Bricked = true;
                                }
                                ActiveWarnings.Add(warning);
                            }
                        }
                    }


                    // Check Zana missions
                    if (!modsComponent.ItemMods.Any(x => x.RawName == "MapZanaSubAreaMissionDetails"))
                    {
                        ZanaMod = null;
                    }
                    else if (ZanaMods.TryGetValue(modsComponent.ItemMods.
                                                  FirstOrDefault(x => x.RawName == "MapZanaSubAreaMissionDetails").Value2, out string modName))
                    {
                        Vector4 textColor = new Vector4(0.9f, 0.85f, 0.65f, 1f);
                        if (modName.Contains("Elder Guardian"))
                        {
                            ZanaMissionType = ObjectiveType.ElderGuardian;
                        }
                        else if (modName.Contains("Shaper Guardian"))
                        {
                            ZanaMissionType = ObjectiveType.ShaperGuardian;
                        }
                        else if (modName.Contains("Harvest"))
                        {
                            ZanaMissionType = ObjectiveType.Harvest;
                        }
                        else if (modName.Contains("Delirium"))
                        {
                            ZanaMissionType = ObjectiveType.Delirium;
                        }
                        else if (modName.Contains("Blighted Map"))
                        {
                            ZanaMissionType = ObjectiveType.Blighted;
                        }
                        else if (modName.Contains("Blight Encounter"))
                        {
                            ZanaMissionType = ObjectiveType.BlightEncounter;
                        }
                        else if (modName.Contains("Legion"))
                        {
                            ZanaMissionType = ObjectiveType.Legion;
                        }
                        else if (modName.Contains("Metamorph"))
                        {
                            ZanaMissionType = ObjectiveType.Metamorph;
                        }
                        ZanaMod = new StyledText()
                        {
                            Color = textColor, Text = modName
                        };
                    }
                    else
                    {
                        Vector4 textColor = new Vector4(0.9f, 0.85f, 0.65f, 1f);
                        modName = $"Unknown Zana Mission: {modsComponent.ItemMods.FirstOrDefault(x => x.RawName == "MapZanaSubAreaMissionDetails").Value2}";
                        ZanaMod = new StyledText()
                        {
                            Color = textColor, Text = modName
                        };
                    }
                }
                ;
                Quantity = quantity;
                PackSize = packSize;

                if (!ClassID.Contains("HeistContract") &&
                    !ClassID.Contains("HeistBlueprint") &&
                    !ClassID.Contains("AtlasRegionUpgradeItem") &&
                    !ClassID.Contains("QuestItem") &&
                    !ClassID.Contains("MiscMapItem") &&
                    !ClassID.Contains("MapFragment"))
                {
                    WorldArea area    = mapComponent.Area;
                    string    mapTrim = Entity.GetComponent <Base>().Name.Replace(" Map", "");
                    if (modsComponent.ItemRarity == ItemRarity.Unique)
                    {
                        // normal map at inner, 0x18, 0x18
                        long mapUnique = gameController.IngameState.M.Read <long>(mapComponent.Address + 0x10, 0x10, 0x20);
                        area    = gameController.Files.WorldAreas.GetByAddress(mapUnique) ?? area;
                        mapTrim = area.Name;
                    }
                    MapName = $"[T{mapComponent.Tier}] {mapTrim}";


                    Awakened  = AwakenedAreas.Contains(area) ? true : false;
                    Bonus     = BonusAreas.Contains(area) ? true : false;
                    Completed = CompletedAreas.Contains(area) ? true : false;
                    mavenDetails.MavenCompletion = MavenAreas.Contains(area) ? true : false;

                    if (AreaRegion.TryGetValue(mapTrim, out string region))
                    {
                        MapRegion = region;
                    }
                    else
                    {
                        MapRegion = "Unknown Region";
                    }
                }

                if (Entity.Path.Contains("MavenMap"))
                {
                    mavenDetails.MavenInvitation = true;
                    MapName = ItemName;
                    mavenDetails.MavenRegion = RegionReadable.FirstOrDefault(x => Entity.Path.Contains(x.Key)).Value ?? "Uncharted";
                }
                if (ClassID.Contains("MapFragment"))
                {
                    MapName      = ItemName;
                    NeedsPadding = true;
                }

                #region Maven Regions & Areas
                if (Entity.Path.Contains("BreachFragmentPhysical"))
                {
                    mavenDetails.MavenRegion = "The Hidden";
                    mavenDetails.MavenArea   = "Uul-Netol's Domain";
                }
                else if (Entity.Path.Contains("BreachFragmentCold"))
                {
                    mavenDetails.MavenRegion = "The Hidden";
                    mavenDetails.MavenArea   = "Tul's Domain";
                }
                else if (Entity.Path.Contains("BreachFragmentFire"))
                {
                    mavenDetails.MavenRegion = "The Hidden";
                    mavenDetails.MavenArea   = "Xoph's Domain";
                }
                else if (Entity.Path.Contains("BreachFragmentLightning"))
                {
                    mavenDetails.MavenRegion = "The Hidden";
                    mavenDetails.MavenArea   = "Esh's Domain";
                }
                else if (Entity.Path.Contains("BreachFragmentChaos"))
                {
                    mavenDetails.MavenRegion = "The Feared";
                    mavenDetails.MavenArea   = "Chayula's Domain";
                }
                else if (Entity.Path.Contains("CurrencyElderFragment"))
                {
                    mavenDetails.MavenRegion = "The Feared";
                    mavenDetails.MavenArea   = "Absence of Value and Meaning";
                }
                else if (Entity.Path.Contains("ShaperFragment"))
                {
                    mavenDetails.MavenRegion = "The Feared";
                    mavenDetails.MavenArea   = "The Shaper's Realm";
                }
                else if (Entity.Path.Contains("VaalFragment2_"))
                {
                    mavenDetails.MavenRegion = "The Feared";
                    mavenDetails.MavenArea   = "The Alluring Abyss";
                }
                else if (ItemName == "Cortex")
                {
                    mavenDetails.MavenRegion = "The Feared";
                    mavenDetails.MavenArea   = "Cortex";
                }
                else if (ItemName.Contains("Lair of the Hydra") ||
                         ItemName.Contains("Maze of the Minotaur") ||
                         ItemName.Contains("Forge of the Phoenix Map") ||
                         ItemName.Contains("Pit of the Chimera Map"))
                {
                    mavenDetails.MavenRegion = "The Formed";
                    mavenDetails.MavenArea   = ItemName.Replace(" Map", "");
                }
                else if (ItemName == "Rewritten Distant Memory" ||
                         ItemName == "Augmented Distant Memory" ||
                         ItemName == "Altered Distant Memory" ||
                         ItemName == "Twisted Distant Memory")
                {
                    mavenDetails.MavenRegion = "The Forgotten";
                    mavenDetails.MavenArea   = ItemName;
                }

                if (mavenDetails.MavenInvitation || mavenDetails.MavenArea != string.Empty)
                {
                    mavenDetails.MavenUncharted = MavenAreas.Any(x => x.Name == mavenDetails.MavenArea) ? true : false;
                    mavenDetails.MavenBosses    = MavenBosses(Entity.Path, mavenDetails.MavenRegion);
                }
                #endregion
                MavenDetails = mavenDetails;

                if ((MapName ?? string.Empty) != string.Empty && LacksCompletionList.Any(x => MapName.Contains(x)))
                {
                    LacksCompletion = true;
                }

                // evaluate rarity for colouring item name
                ItemColor = GetRarityColor(modsComponent?.ItemRarity ?? ItemRarity.Normal);
            }