private void BtnAddAndClose_Click(object sender, EventArgs e)
 {
     foreach (var i in CheckedItems.Where(x => UsedInstance.ItemInRange(x)))
     {
         SelectedItems.Add(UsedInstance.Logic[i]);
     }
     Addconditional();
     this.Close();
 }
        //Automatic Checks

        public bool CheckAutoSelectItems()
        {
            bool ItemStateChanged = false;

            foreach (var CheckedObject in AutoSelect)
            {
                //Check if the items checked status has been changed, most likely by CheckEntrancePair.
                if (ActionDic.ContainsKey(CheckedObject.ID) && ActionDic[CheckedObject.ID] != CheckedObject.Checked && CheckedObject.IsEntrance())
                {
                    continue;
                }
                if (CheckedObject.ID < -1)
                {
                    continue;
                }
                if (CheckedObject.Checked && CheckedObject.RandomizedItem > -2)
                {
                    if (Instance.ItemInRange(CheckedObject.RandomizedItem) && !Tools.SameItemMultipleChecks(CheckedObject.RandomizedItem, Instance) && CheckedObject.ItemBelongsToMe())
                    {
                        Instance.Logic[CheckedObject.RandomizedItem].Aquired = false;
                        LogicEditing.CheckEntrancePair(CheckedObject, Instance, false);
                    }
                    CheckedObject.Checked = false;
                    if (!KeepChecked)
                    {
                        CheckedObject.RandomizedItem = -2;
                    }
                    ItemStateChanged = true;
                    continue;
                }
                if (CheckedObject.SpoilerRandom > -2 || CheckedObject.RandomizedItem > -2 || CheckedObject.RandomizedState() == 2)
                {
                    CheckedObject.Checked = true;
                    if (CheckedObject.RandomizedState() == 2)
                    {
                        CheckedObject.RandomizedItem = CheckedObject.ID;
                    }
                    if (CheckedObject.SpoilerRandom > -2)
                    {
                        CheckedObject.RandomizedItem = CheckedObject.SpoilerRandom;
                    }
                    if (CheckedObject.RandomizedItem < 0)
                    {
                        CheckedObject.RandomizedItem = -1;
                        ItemStateChanged             = true;
                        continue;
                    }
                    if (CheckedObject.ItemBelongsToMe())
                    {
                        Instance.Logic[CheckedObject.RandomizedItem].Aquired = true;
                    }
                    Instance.Logic[CheckedObject.RandomizedItem].PlayerData.ItemCameFromPlayer = FromNetPlayer;
                    LogicEditing.CheckEntrancePair(CheckedObject, Instance, true);
                    ItemStateChanged = true;
                    continue;
                }
            }
            return(ItemStateChanged);
        }
 private void button1_Click(object sender, EventArgs e)
 {
     foreach (var i in CheckedItems.Where(x => UsedInstance.ItemInRange(x)))
     {
         SelectedItems.Add(UsedInstance.Logic[i]);
     }
     this.DialogResult = DialogResult.OK;
     this.Close();
 }
示例#4
0
        private void SeedChecker_Load(object sender, EventArgs e)
        {
            CheckerInstance = Utility.CloneTrackerInstance(LogicObjects.MainTrackerInstance);

            if (!Utility.CheckforSpoilerLog(CheckerInstance.Logic))
            {
                var file = Utility.FileSelect("Select A Spoiler Log", "Spoiler Log (*.txt;*html)|*.txt;*html");
                if (file == "")
                {
                    return;
                }
                LogicEditing.WriteSpoilerLogToLogic(CheckerInstance, file);
                if (!Utility.CheckforSpoilerLog(CheckerInstance.Logic, true))
                {
                    MessageBox.Show("Not all items have spoiler data. Your results may be incorrect.");
                }
            }
            else if (!Utility.CheckforSpoilerLog(CheckerInstance.Logic, true))
            {
                MessageBox.Show("Not all items have spoiler data. Your results may be incorrect.");
            }


            var GameClearEntry = CheckerInstance.Logic.Find(x => x.DictionaryName == "MMRTGameClear");

            int GameclearID = -1;

            if (GameClearEntry != null)
            {
                GameClearEntry.DictionaryName = (CheckerInstance.IsMM()) ? "Defeat Majora" : "Beat the Game";
                LBNeededItems.Items.Add(new LogicObjects.ListItem {
                    DisplayName = GameClearEntry.DictionaryName, PathID = GameClearEntry.ID
                });
            }
            else if (CheckerInstance.IsMM())
            {
                Console.WriteLine("Adding MMRTGameClear");
                GameclearID = PlaythroughGenerator.GetGameClearEntry(CheckerInstance.Logic, CheckerInstance.IsEntranceRando());
                if (!CheckerInstance.ItemInRange(GameclearID))
                {
                    return;
                }
                CheckerInstance.Logic[GameclearID].DictionaryName = "Defeat Majora";
                LBNeededItems.Items.Add(new LogicObjects.ListItem {
                    DisplayName = "Defeat Majora", PathID = GameclearID
                });
            }

            listBox2.DataSource = CheckerInstance.Logic.Select(x => x.LocationName ?? x.DictionaryName).ToList();

            GameClearEntry = CheckerInstance.Logic.Find(x => x.DictionaryName == "MMRTGameClear" || x.DictionaryName == "Beat the Game" || x.DictionaryName == "Defeat Majora");

            if (GameClearEntry != null)
            {
                listBox2.SelectedIndex = GameClearEntry.ID;
            }
            else
            {
                listBox2.SelectedIndex = 0;
            }
            WriteSpoilerItemsToBox();
        }
示例#5
0
        public static void CleanMultiWorldData(LogicObjects.TrackerInstance Instance, LogicObjects.MMRTpacket Data)
        {
            foreach (var i in Instance.Logic.Where(x => x.Aquired && x.PlayerData.ItemCameFromPlayer == Data.PlayerID))
            {
                i.Aquired = false;
                i.PlayerData.ItemCameFromPlayer = -1;
            }

            var log          = LogicObjects.MainTrackerInstance.Logic;
            var itemsAquired = new List <LogicObjects.LogicEntry>();
            var itemsInUse   = new List <LogicObjects.LogicEntry>();

            foreach (var i in log)
            {
                if (i.IsFake)
                {
                    continue;
                }
                if (i.LogicItemAquired())
                {
                    itemsAquired.Add(i); itemsInUse.Add(i);
                }
                if (i.ItemHasBeenPlaced(Instance.Logic))
                {
                    itemsInUse.Add(i);
                }
            }

            foreach (var i in Data.LogicData)
            {
                if (i.PI != LogicObjects.MainTrackerInstance.Options.MyPlayerID || i.Ch == false || !Instance.ItemInRange(i.RI) || log[i.RI].IsEntrance())
                {
                    continue;
                }

                if (itemsInUse.Where(x => x.ID == i.RI).Any())
                {
                    Debugging.Log($"{log[i.RI].DictionaryName} was in use elsewhere");

                    var MatchingItems             = log.Where(x => x.SpoilerItem.Intersect(log[i.RI].SpoilerItem).Any());
                    var FindUnusedMatchingItem    = MatchingItems.Where(x => !itemsInUse.Where(y => y.ID == x.ID).Any());
                    var FindUnAquiredMatchingItem = MatchingItems.Where(x => !itemsAquired.Where(y => y.ID == x.ID).Any());

                    if (FindUnusedMatchingItem.Any())
                    {
                        Debugging.Log($"Unused Matching Item found: {FindUnusedMatchingItem.ToArray()[0].DictionaryName}");
                        var newItem = FindUnusedMatchingItem.First();
                        i.RI = newItem.ID;
                        itemsAquired.Add(newItem);
                        itemsInUse.Add(newItem);
                    }
                    else if (FindUnAquiredMatchingItem.Any())
                    {
                        Debugging.Log($"No Unused Matching Items Were Found, getting unaquired matching item.");
                        Debugging.Log($"Matching UnAquired Item Found: {FindUnAquiredMatchingItem.First().DictionaryName}");
                        var newItem = FindUnAquiredMatchingItem.First();
                        i.RI = newItem.ID;
                        itemsAquired.Add(newItem);
                        itemsInUse.Add(newItem);
                    }
                    else
                    {
                        Debugging.Log($"No Unused items were found. This is an error and could cause Issues.");
                    }
                }
            }
        }