internal static List <Item> GetItemsToRecover() { if (_itemsToRecover.Value == null) { Dictionary <ISalable, int[]> adventureRecoveryStock = Utility.getAdventureRecoveryStock(); int money = Game1.player.Money; Random random = new Random((int)((long)Game1.uniqueIDForThisGame + Game1.stats.DaysPlayed * Game1.stats.DaysPlayed)); List <Item> itemsToRecover = new List <Item>(); while (adventureRecoveryStock.Count > 0) { KeyValuePair <ISalable, int[]> itemAndValue = adventureRecoveryStock.ToList()[Game1.random.Next(0, adventureRecoveryStock.Count)]; adventureRecoveryStock.Remove(itemAndValue.Key); RecoveryConfig recoveryConfig = DataLoader.GetRecoveryConfig(Game1.player); if (itemAndValue.Value[0] <= money || recoveryConfig.RecoverForFree) { money -= itemAndValue.Value[0]; itemsToRecover.Add((Item)itemAndValue.Key); if (!recoveryConfig.RecoverAllItems) { break; } } } if (itemsToRecover.Count > 0) { _itemsToRecover.Value = itemsToRecover; } } return(_itemsToRecover.Value); }
public static void SaveRecoveryConfig(Farmer player, bool enableRecoveryService, bool?recoveryAllItems = null, bool?recoveryForFree = null) { RecoveryConfig recoveryConfig = GetRecoveryConfig(player); if (!recoveryConfig.DisableRecoveryConfigInGameChanges) { recoveryConfig.EnableRecoveryService = enableRecoveryService; recoveryConfig.RecoverAllItems = recoveryAllItems ?? recoveryConfig.RecoverAllItems; recoveryConfig.RecoverForFree = recoveryForFree ?? recoveryConfig.RecoverForFree; Helper.WriteConfig <ModConfig>(DataLoader.ModConfig); } }
/// <summary> /// To call when the items were recovered. /// Charge the player and clear the lost items list if needed. /// </summary> public static void ItemsRecovered() { Dictionary <ISalable, int[]> adventureRecoveryStock = Utility.getAdventureRecoveryStock(); RecoveryConfig recoveryConfig = DataLoader.GetRecoveryConfig(Game1.player); _itemsToRecover.Value.ForEach(item => { if (!recoveryConfig.RecoverForFree) { ShopMenu.chargePlayer(Game1.player, 0, adventureRecoveryStock[item][0]); } Game1.player.itemsLostLastDeath.Remove(item); }); if (!recoveryConfig.DisableClearLostItemsOnRandomRecovery && !recoveryConfig.RecoverAllItems) { Game1.player.itemsLostLastDeath.Clear(); } _itemsToRecover.Value = null; }