예제 #1
0
        public string GenerateSaveData()
        {
            StringBuilder modValue = new StringBuilder();

            for (int i = 1; i <= 3; i++)
            {
                SeedRO seed = stateManager.GetSeedForFileSlot(i);
                modValue.Append("" + RANDO_OPTION_VALUE_DELIM + seed.Seed + RANDO_OPTION_TYPE_DELIM + seed.SeedType);

                foreach (SettingType setting in seed.Settings.Keys)
                {
                    modValue.Append("" + RANDO_OPTION_SETTING_DELIM + setting + RANDO_OPTION_SETTING_VALUE_DELIM + seed.Settings[setting]);
                }
                //Capturing collected items per seed
                if (seed.CollectedItems.Count > 0)
                {
                    modValue.Append("" + RANDO_OPTION_SETTING_DELIM + "CollectedItems=");
                    foreach (RandoItemRO collectedItem in seed.CollectedItems)
                    {
                        modValue.Append("" + collectedItem + RANDO_OPTION_ITEM_DELIM);
                    }
                    //Shaving off the last ','
                    modValue.Length--;
                }
                //Add seed info
                if (seed.MappingInfo != null && !seed.MappingInfo.Equals(""))
                {
                    modValue.Append("" + RANDO_OPTION_SETTING_DELIM + "Mappings=" + seed.MappingInfo);
                }
            }

            Console.WriteLine($"Saving seed data: '{modValue}'");

            return(modValue.ToString());
        }
예제 #2
0
        void InventoryManager_AddItem(On.InventoryManager.orig_AddItem orig, InventoryManager self, EItems itemId, int quantity)
        {
            LocationRO randoItemCheck;

            if (itemId != EItems.TIME_SHARD) //killing the timeshard noise in the logs
            {
                Console.WriteLine($"Called InventoryManager_AddItem method. Looking to give x{quantity} amount of item '{itemId}'.");
            }

            //Wierd Ruxxtin logic stuff
            if (EItems.NONE.Equals(itemId))
            {
                Console.WriteLine("Looks like Ruxxtin has a timeshard.");
            }

            //Lets make sure that the item they are collecting is supposed to be randomized
            if (randoStateManager.IsRandomizedFile && !RandomizerStateManager.Instance.HasTempOverrideOnRandoItem(itemId) && randoStateManager.IsLocationRandomized(itemId, out randoItemCheck))
            {
                //Based on the item that is attempting to be added, determine what SHOULD be added instead
                RandoItemRO randoItemId = randoStateManager.CurrentLocationToItemMapping[randoItemCheck];
                Console.WriteLine($"Randomizer magic engage! Game wants item '{itemId}', giving it rando item '{randoItemId}' with a quantity of '{quantity}'");

                //If that item is the windmill shuriken, immediately activate it and the mod option
                if (EItems.WINDMILL_SHURIKEN.Equals(randoItemId.Item))
                {
                    OnToggleWindmillShuriken();
                }
                else if (EItems.TIME_SHARD.Equals(randoItemId.Item)) //Handle timeshards
                {
                    Manager <InventoryManager> .Instance.CollectTimeShard(quantity);

                    randoStateManager.GetSeedForFileSlot(randoStateManager.CurrentFileSlot).CollectedItems.Add(randoItemId);
                    return; //Collecting timeshards internally call add item so I dont need to do it again.
                }

                //Set the itemId to the new item
                itemId = randoItemId.Item;
                //Set this item to have been collected in the state manager
                randoStateManager.GetSeedForFileSlot(randoStateManager.CurrentFileSlot).CollectedItems.Add(randoItemId);

                //Save
                Save.seedData = randomizerSaveMethod.GenerateSaveData();
            }

            //Call original add with items
            orig(self, itemId, quantity);
        }