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()); }
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); }