private bool DoTrashLoot(string value) { var lootTable = new List <TrashLootEntry>(); bool hasFilter = int.TryParse(value.Split(' ')[1], out int which); if (!hasFilter) { return(false); } StardewValley.Locations.Town t = (StardewValley.Locations.Town)Game1.getLocationFromName("Town"); //was this can already checked today? NetArray <bool, NetBool> wasCheckedArray = (NetArray <bool, NetBool>) typeof(StardewValley.Locations.Town).GetField("garbageChecked", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(t); if (wasCheckedArray[which]) { return(false); } //build a loot table specific to this can, as provided by mods foreach (var l in API.Items.TrashLoot) { if (l.Filter == -1) { lootTable.Add(l); //"any can" item } else if (l.Filter == which) { lootTable.Add(l); } } if (lootTable.Count > 0 && Modworks.RNG.NextDouble() < (System.Math.Min(0.1d + Modworks.Player.GetLuckFactorFloat(), 0.9d))) //10% to 90% chance, influenced by luck { TrashLootEntry tle = lootTable[Modworks.RNG.Next(lootTable.Count)]; int? itemId = Modworks.Items.GetModItemId(tle.Module, tle.ItemID); if (!itemId.HasValue) { Modworks.Log.Debug("Attempted to award trash item of invalid id: " + tle.ItemID); return(false); } Modworks.Player.GiveItem(itemId.Value); Game1.playSound("trashcan"); wasCheckedArray[which] = true; //mark the can as checked return(true); } return(false); }
public void AddTrashLoot(string module, TrashLootEntry loot) { TrashLoot.Add(loot); }