public override BlockDropItemStack[] GetDropsForHandbook(ItemStack handbookStack, IPlayer forPlayer)
        {
            LootList list = lootLists[LastCodePart()];
            List <BlockDropItemStack> drops = new List <BlockDropItemStack>();

            foreach (var val in list.lootItems)
            {
                for (int i = 0; i < val.codes.Length; i++)
                {
                    BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(api.World, i, 1));
                    if (stack == null)
                    {
                        continue;
                    }

                    stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length;

                    // Prevent duplicates
                    if (drops.FirstOrDefault(dstack => dstack.ResolvedItemstack.Equals(api.World, stack.ResolvedItemstack, GlobalConstants.IgnoredStackAttributes)) == null)
                    {
                        drops.Add(stack);
                    }
                }
            }

            return(drops.ToArray());
        }
Esempio n. 2
0
        static BlockLootVessel()
        {
            lootLists["seed"] = LootList.Create(1,
                                                LootItem.Item(1, 5, 7, "seeds-carrot", "seeds-onion", "seeds-spelt", "seeds-turnip", "seeds-rice", "seeds-rye", "seeds-soybean", "seeds-pumpkin", "seeds-cabbage")
                                                );

            lootLists["food"] = LootList.Create(1,
                                                LootItem.Item(3, 8, 15, "grain-spelt", "grain-rice", "grain-flax", "grain-rye"),
                                                LootItem.Item(0.1f, 1, 1, "resonancearchive-1", "resonancearchive-2", "resonancearchive-3", "resonancearchive-4", "resonancearchive-5", "resonancearchive-6", "resonancearchive-7", "resonancearchive-8", "resonancearchive-9")
                                                );

            lootLists["forage"] = LootList.Create(2.5f,
                                                  LootItem.Item(1, 2, 6, "flint"),
                                                  LootItem.Item(1, 3, 9, "stick"),
                                                  LootItem.Item(1, 3, 16, "drygrass"),
                                                  LootItem.Item(1, 3, 24, "stone-andesite", "stone-chalk", "stone-claystone", "stone-granite", "stone-sandstone", "stone-shale"),
                                                  LootItem.Item(1, 3, 24, "clay-blue", "clay-fire"),
                                                  LootItem.Item(1, 3, 24, "cattailtops"),
                                                  LootItem.Item(1, 1, 4, "poultice-linen-horsetail"),
                                                  LootItem.Item(0.5f, 1, 12, "flaxfibers"),
                                                  LootItem.Item(0.3f, 1, 3, "honeycomb"),
                                                  LootItem.Item(0.3f, 2, 6, "bamboostakes"),
                                                  LootItem.Item(0.3f, 2, 6, "beenade-closed")
                                                  );

            lootLists["ore"] = LootList.Create(1.35f,
                                               LootItem.Item(1, 2, 12, "ore-lignite", "ore-bituminouscoal"),
                                               LootItem.Item(1, 2, 8, "nugget-nativecopper", "ore-quartz", "nugget-galena"),
                                               LootItem.Item(0.2f, 4, 12, "nugget-galena", "nugget-cassiterite", "nugget-sphalerite", "nugget-bismuthinite"),
                                               LootItem.Item(0.1f, 4, 12, "nugget-limonite", "nugget-nativegold", "nugget-chromite", "nugget-ilmenite", "nugget-nativesilver", "nugget-magnetite")
                                               );

            lootLists["tool"] = LootList.Create(2.2f,
                                                LootItem.Item(1, 1, 1, "axe-flint"),
                                                LootItem.Item(1, 1, 1, "shovel-flint"),
                                                LootItem.Item(1, 1, 1, "knife-flint"),
                                                LootItem.Item(0.1f, 1, 1, "axe-copper", "axe-copper", "axe-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "shovel-copper", "shovel-copper", "shovel-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "pickaxe-copper"),
                                                LootItem.Item(0.1f, 1, 1, "scythe-copper"),
                                                LootItem.Item(0.1f, 1, 1, "knife-copper", "knife-copper", "knife-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "sword-copper", "sword-copper", "sword-tinbronze"),
                                                LootItem.Item(0.1f, 1, 4, "gear-rusty")
                                                );

            lootLists["farming"] = LootList.Create(2.5f,
                                                   LootItem.Item(0.1f, 1, 1, "linensack"),
                                                   LootItem.Item(0.5f, 1, 1, "basket"),
                                                   LootItem.Item(0.75f, 3, 10, "feather"),
                                                   LootItem.Item(0.75f, 2, 10, "flaxfibers"),
                                                   LootItem.Item(0.35f, 2, 10, "flaxtwine"),
                                                   LootItem.Item(0.75f, 2, 4, "seeds-cabbage"),
                                                   LootItem.Item(0.75f, 5, 10, "cattailtops"),
                                                   LootItem.Item(0.1f, 1, 1, "scythe-copper", "scythe-tinbronze")
                                                   );
        }
Esempio n. 3
0
        public override ItemStack[] GetDrops(IWorldAccessor world, BlockPos pos, IPlayer byPlayer, float dropQuantityMultiplier = 1f)
        {
            LootList list = lootLists[LastCodePart()];

            if (list == null)
            {
                return(new ItemStack[0]);
            }

            return(list.GenerateLoot(world));
        }
Esempio n. 4
0
        public static LootList Create(float tries, params LootItem[] lootItems)
        {
            LootList list = new LootList();

            list.Tries = tries;
            list.lootItems.AddRange(lootItems);

            for (int i = 0; i < lootItems.Length; i++)
            {
                list.TotalChance += lootItems[i].chance;
            }

            return(list);
        }
Esempio n. 5
0
        static BlockLootVessel()
        {
            lootLists["seed"] = LootList.Create(1,
                                                LootItem.Item(1, 3, 5, "seeds-carrot", "seeds-onion", "seeds-spelt", "seeds-turnip", "seeds-rice", "seeds-rye", "seeds-soybean", "seeds-pumpkin", "seeds-cabbage")
                                                );

            lootLists["food"] = LootList.Create(1,
                                                LootItem.Item(1, 8, 15, "grain-spelt", "grain-rice", "grain-flax", "grain-rye")
                                                );

            lootLists["forage"] = LootList.Create(3.5f,
                                                  LootItem.Item(1, 0.5f, 6, "flint"),
                                                  LootItem.Item(1, 0.5f, 6, "stick"),
                                                  LootItem.Item(1, 0.5f, 12, "drygrass"),
                                                  LootItem.Item(1, 3, 24, "stone-andesite", "stone-chalk", "stone-claystone", "stone-granite", "stone-sandstone", "stone-shale"),
                                                  LootItem.Item(1, 3, 24, "clay-blue", "clay-fire"),
                                                  LootItem.Item(1, 3, 24, "cattails")
                                                  );

            lootLists["ore"] = LootList.Create(2.75f,
                                               LootItem.Item(1, 2, 12, "ore-lignite", "ore-bituminouscoal"),
                                               LootItem.Item(1, 2, 8, "ore-nativecopper", "ore-quartz", "ore-galena"),
                                               LootItem.Item(0.3f, 2, 6, "ore-galena", "ore-cassiterite", "ore-sphalerite", "ore-bismuthinite"),
                                               LootItem.Item(0.1f, 2, 6, "ore-limonite", "ore-quartz_nativegold", "ore-chromite", "ore-platinum", "ore-ilmenite", "ore-quartz_nativesilver", "ore-magnetite")
                                               );

            lootLists["tool"] = LootList.Create(2.2f,
                                                LootItem.Item(1, 1, 1, "axe-flint"),
                                                LootItem.Item(1, 1, 1, "shovel-flint"),
                                                LootItem.Item(1, 1, 1, "pickaxe-flint"),
                                                LootItem.Item(1, 1, 1, "knife-flint"),
                                                LootItem.Item(0.1f, 1, 1, "axe-copper", "axe-copper", "axe-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "shovel-copper", "shovel-copper", "shovel-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "pickaxe-copper", "pickaxe-copper", "pickaxe-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "knife-copper", "knife-copper", "knife-tinbronze"),
                                                LootItem.Item(0.1f, 1, 1, "sword-copper", "sword-copper", "sword-tinbronze")
                                                );

            lootLists["farming"] = LootList.Create(2.75f,
                                                   LootItem.Item(0.1f, 1, 1, "linensack"),
                                                   LootItem.Item(0.5f, 1, 1, "basket"),
                                                   LootItem.Item(0.75f, 3, 10, "feather"),
                                                   LootItem.Item(0.75f, 2, 10, "flaxfibers"),
                                                   LootItem.Item(0.35f, 2, 10, "flaxtwine"),
                                                   LootItem.Item(0.75f, 2, 4, "seeds-cabbage"),
                                                   LootItem.Item(0.75f, 5, 10, "cattails")
                                                   );
        }
Esempio n. 6
0
        public override BlockDropItemStack[] GetDropsForHandbook(IWorldAccessor world, BlockPos pos, IPlayer byPlayer)
        {
            LootList list = lootLists[LastCodePart()];
            List <BlockDropItemStack> drops = new List <BlockDropItemStack>();

            foreach (var val in list.lootItems)
            {
                for (int i = 0; i < val.codes.Length; i++)
                {
                    BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(world, i));
                    stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length;
                    drops.Add(stack);
                }
            }

            return(drops.ToArray());
        }
        public override ItemStack[] GetDrops(IWorldAccessor world, BlockPos pos, IPlayer byPlayer, float dropQuantityMultiplier = 1f)
        {
            float selfdropRate = (byPlayer?.Entity.Stats.GetBlended("wholeVesselLootChance") ?? 0) - 1;

            if (api.World.Rand.NextDouble() < selfdropRate)
            {
                return(new ItemStack[] { new ItemStack(this) });
            }

            LootList list = lootLists[LastCodePart()];

            if (list == null)
            {
                return(new ItemStack[0]);
            }

            return(list.GenerateLoot(world, byPlayer));
        }
Esempio n. 8
0
        public override BlockDropItemStack[] GetDropsForHandbook(ItemStack handbookStack, IPlayer forPlayer)
        {
            LootList list = lootLists[LastCodePart()];
            List <BlockDropItemStack> drops = new List <BlockDropItemStack>();

            foreach (var val in list.lootItems)
            {
                for (int i = 0; i < val.codes.Length; i++)
                {
                    BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(api.World, i, 1));
                    if (stack == null)
                    {
                        continue;
                    }

                    stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length;
                    drops.Add(stack);
                }
            }

            return(drops.ToArray());
        }