Exemple #1
0
        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);
        }
Exemple #2
0
 public void AddTrashLoot(string module, TrashLootEntry loot)
 {
     TrashLoot.Add(loot);
 }