internal void SpawnBounty(Area area, int floor = 0) { if (bounties == null || bounties.Length < 1 || area.IsNonHostileArea() || area.GetPopulation(Neitsillia.Areas.AreaExtentions.Population.Type.Bounties).Count > 30 || Program.Chance(50 + floor)) { return; } Random rng = Program.rng; NPC bounty = NPC.GenerateNPC(area.level, bounties[rng.Next(bounties.Length)]); if (extraBountyDrops != null && extraBountyDrops.Length > 0) { StackedObject <string, int> so = extraBountyDrops[rng.Next(extraBountyDrops.Length)]; AddItem(bounty, so.item, so.count); } if (uncommonBountyDrops != null && uncommonBountyDrops.Length > 0 && rng.Next(101) <= 45) { AddItem(bounty, uncommonBountyDrops[rng.Next(uncommonBountyDrops.Length)], 1); } if (rareBountyDrops != null && rareBountyDrops.Length > 0 && rng.Next(101) <= 15) { AddItem(bounty, rareBountyDrops[rng.Next(rareBountyDrops.Length)], 1); } bounty.Evolve(floor / 10, skaviCat: area.name); area.GetPopulation(Neitsillia.Areas.AreaExtentions.Population.Type.Bounties).Add(bounty); _ = Handlers.UniqueChannels.Instance.SendMessage("Population", $"Event Bounty {bounty.name} Spawned @ {area.name}"); }
private int FindMaterial(Player player, StackedObject <string, int> materials) { int index = player.inventory.FindIndex(materials.item); if (index > -1 && player.inventory.GetCount(index) >= materials.count) { return(index); } return(-1); }
internal void ConsumeSchematicItems(Player player, int materialMultiplier) { for (int i = 0; i < 5; i++) { StackedObject <string, int> mats = GetMaterial(i); if (mats.count > 0) { player.inventory.Remove(FindMaterial(player, mats), mats.count); } } }
public string CheckPlayerInventoryForMaterial(Player player, int materialAmountModifier = 1) { string result = null; for (int i = 0; i < 5; i++) { StackedObject <string, int> mats = GetMaterial(i); mats.count *= materialAmountModifier; if (mats.count > 0 && FindMaterial(player, mats) < 0) { result += $"Missing required {mats.count}x {mats.item} {Environment.NewLine}"; } } return(result); }