Esempio n. 1
0
        public static void CheckSeed(LogicObjects.TrackerInstance Instance, bool InitialRun, List <int> Ignored)
        {
            if (InitialRun)
            {
                LogicEditing.ForceFreshCalculation(Instance.Logic);
            }
            bool recalculate = false;

            foreach (var item in Instance.Logic)
            {
                item.Available = LogicEditing.RequirementsMet(item.Required, Instance.Logic) && LogicEditing.CondtionalsMet(item.Conditionals, Instance.Logic);
                Console.WriteLine($"{item.DictionaryName} Avalable {item.Available}");
                int Special = LogicEditing.SetAreaClear(item, Instance);
                if (Special == 2)
                {
                    recalculate = true;
                }

                if (item.Aquired != item.Available && Special == 0 && item.IsFake)
                {
                    item.Aquired = item.Available;
                    recalculate  = true;
                }
                if (!item.IsFake && item.RandomizedItem > -1 && item.Available != Instance.Logic[item.RandomizedItem].Aquired && !Ignored.Contains(item.ID))
                {
                    Instance.Logic[item.RandomizedItem].Aquired = item.Available;
                    recalculate = true;
                }
            }
            if (recalculate)
            {
                CheckSeed(Instance, false, Ignored);
            }
        }
Esempio n. 2
0
        public static LogicObjects.ItemUnlockData FindRequirements(LogicObjects.LogicEntry Item, List <LogicObjects.LogicEntry> logic)
        {
            List <int> ImportantItems = new List <int>();
            List <LogicObjects.PlaythroughItem> playthrough = new List <LogicObjects.PlaythroughItem>();
            var LogicCopy = Utility.CloneLogicList(logic);

            foreach (var i in LogicCopy)
            {
                if (i.Unrandomized())
                {
                    i.IsFake = true;
                }
            }
            var ItemCopy = LogicCopy[Item.ID];

            LogicEditing.ForceFreshCalculation(LogicCopy);
            foreach (var i in LogicCopy)
            {
                ImportantItems.Add(i.ID);
                if (i.IsFake)
                {
                    i.SpoilerRandom = i.ID;
                }
            }
            PlaythroughGenerator.UnlockAllFake(LogicCopy, ImportantItems, 0, playthrough);
            List <int> UsedItems   = new List <int>();
            bool       isAvailable = (LogicEditing.RequirementsMet(ItemCopy.Required, LogicCopy, UsedItems) && LogicEditing.CondtionalsMet(ItemCopy.Conditionals, LogicCopy, UsedItems));

            if (!isAvailable)
            {
                return(new LogicObjects.ItemUnlockData());
            }
            List <int> NeededItems = Tools.ResolveFakeToRealItems(new LogicObjects.PlaythroughItem {
                SphereNumber = 0, Check = ItemCopy, ItemsUsed = UsedItems
            }, playthrough, LogicCopy);
            List <int> FakeItems = Tools.FindAllFakeItems(new LogicObjects.PlaythroughItem {
                SphereNumber = 0, Check = ItemCopy, ItemsUsed = UsedItems
            }, playthrough, LogicCopy);

            NeededItems = NeededItems.Distinct().ToList();
            return(new LogicObjects.ItemUnlockData {
                playthrough = playthrough, FakeItems = FakeItems, ResolvedRealItems = NeededItems, UsedItems = UsedItems
            });
        }