public void Update()
 {
     CheckDropItem(KeyCode.F2, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier1).Select(x => new PickupIndex(x)).ToList()));
     CheckDropItem(KeyCode.F3, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier2).Select(x => new PickupIndex(x)).ToList()));
     CheckDropItem(KeyCode.F4, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier3).Select(x => new PickupIndex(x)).ToList()));
     CheckDropItem(KeyCode.F5, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultEquipmentDropList().Select(x => new PickupIndex(x)).ToList()));
 }
        public void Awake()
        {
            var t1 = new List <ItemIndex> {
                ItemIndex.SecondarySkillMagazine,
                ItemIndex.BossDamageBonus,
                ItemIndex.BleedOnHit,
                ItemIndex.HealWhileSafe,
                ItemIndex.Mushroom,
                ItemIndex.Bear,
                ItemIndex.Hoof,
                ItemIndex.FireRing,
                ItemIndex.CritGlasses,
                ItemIndex.WardOnLevel,
                ItemIndex.Bandolier,
            };

            var t2 = new List <ItemIndex> {
                ItemIndex.Feather,
                ItemIndex.ChainLightning,
                ItemIndex.SlowOnHit,
                ItemIndex.JumpBoost,
                ItemIndex.EquipmentMagazine,
                ItemIndex.Seed
            };

            var t3 = new List <ItemIndex> {
                ItemIndex.AlienHead,
                ItemIndex.IncreaseHealing,
                ItemIndex.UtilitySkillMagazine,
                ItemIndex.ExtraLife,
                ItemIndex.FallBoots,
                ItemIndex.HealOnCrit
            };

            var eq = new List <EquipmentIndex> {
                EquipmentIndex.Lightning,
                EquipmentIndex.CritOnUse,
                EquipmentIndex.Blackhole,
                EquipmentIndex.Fruit
            };

            ItemDropAPI.AddDropInformation(ItemDropLocation.SmallChest, new List <ItemIndex> {
                ItemIndex.Hoof
            }.ToSelection(0.3f), t1.ToSelection(0.8f), t2.ToSelection(0.15f), t3.ToSelection(0.05f));
            ItemDropAPI.AddDropInformation(ItemDropLocation.MediumChest, t2.ToSelection(0.7f), t3.ToSelection(0.3f));
            ItemDropAPI.AddDropInformation(ItemDropLocation.LargeChest, t3.ToSelection());

            ItemDropAPI.AddDropInformation(ItemDropLocation.Boss, t3.ToSelection());
            ItemDropAPI.AddDropInformation(ItemDropLocation.Shrine, ItemDropAPI.None.ToSelection(0.5f), t1.ToSelection(0.8f), t2.ToSelection(0.2f), t3.ToSelection(0.03f));

            // if i didn't care about equipment items:
            // DefaultItemDrops.AddEquipmentChestDefaultDrops();
            // but i do so:
            ItemDropAPI.AddDropInformation(ItemDropLocation.EquipmentChest, eq.ToSelection());

            ItemDropAPI.ChestSpawnRate = 1.5f;
        }
Beispiel #3
0
        internal static void InitializeHooks()
        {
            On.RoR2.RoR2Application.UnitySystemConsoleRedirector.Redirect += orig => { };

            SurvivorAPI.InitHooks();
            AssetAPI.InitHooks();
            ItemDropAPI.InitHooks();
            InventoryAPI.InitHooks();
        }
        public ItemIndex GiveAndReturnRandomItem(Inventory inventory)
        {
            var tier1 = ItemDropAPI.GetDefaultDropList(ItemTier.Tier1);
            var tier2 = ItemDropAPI.GetDefaultDropList(ItemTier.Tier2);
            var tier3 = ItemDropAPI.GetDefaultDropList(ItemTier.Tier3);

            WeightedSelection <List <ItemIndex> > weightedSelection = new WeightedSelection <List <ItemIndex> >();

            weightedSelection.AddChoice(tier1, 80f);
            weightedSelection.AddChoice(tier2, 19f);
            weightedSelection.AddChoice(tier3, 1f);

            List <ItemIndex> list = weightedSelection.Evaluate(UnityEngine.Random.value);

            var givenItem = list[UnityEngine.Random.Range(0, list.Count)];

            inventory.GiveItem(givenItem);
            return(givenItem);
        }
Beispiel #5
0
        public void Update()
        {
            CheckDropItem(KeyCode.F2, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier1).Select(x => new PickupIndex(x)).ToList()));
            CheckDropItem(KeyCode.F3, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier2).Select(x => new PickupIndex(x)).ToList()));
            CheckDropItem(KeyCode.F4, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultDropList(ItemTier.Tier3).Select(x => new PickupIndex(x)).ToList()));
            CheckDropItem(KeyCode.F5, new Lazy <List <PickupIndex> >(() => ItemDropAPI.GetDefaultEquipmentDropList().Select(x => new PickupIndex(x)).ToList()));

            if (Input.GetKeyDown(KeyCode.F6))
            {
                PlayerCharacterMasterController.instances[0].master.GiveMoney(10000);

                var item = PickupCatalog.GetPickupDef(new PickupIndex(ItemIndex.None));

                var items = new List <PickupIndex> {
                    PickupCatalog.FindPickupIndex(item)                     // item that hasnt an actual prefab (default to exclamation mark) so fairly easy to recognize if it drops
                };
                //ItemDropAPI.AddDrops(ItemDropLocation.LargeChest, items.ToSelection());

                var trans = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;

                chests[i++ % chests.Length].DoSpawn(trans.position, trans.rotation, null);
            }
        }
        private void On_RunBuildDropTable(On.RoR2.Run.orig_BuildDropTable orig, Run self)
        {
            var newItemMask = self.availableItems;
            var newEqpMask  = self.availableEquipment;

            foreach (CatalogBoilerplate bpl in allInstances)
            {
                if (!bpl.enabled)
                {
                    if (bpl is Equipment_V2 eqp)
                    {
                        newEqpMask.Remove(eqp.catalogIndex);
                    }
                    else if (bpl is Item_V2 item)
                    {
                        newItemMask.Remove(item.catalogIndex);
                    }
                }
                else
                {
                    if (bpl is Equipment_V2 eqp)
                    {
                        newEqpMask.Add(eqp.catalogIndex);
                    }
                    else if (bpl is Item_V2 item)
                    {
                        newItemMask.Add(item.catalogIndex);
                    }
                }
            }

            //ItemDropAPI completely overwrites drop tables; need to perform separate removal
            if (ItemDropAPI.Loaded)
            {
                ItemDropAPI.RemoveFromDefaultByTier(
                    allInstances.Where(bpl => bpl is Item_V2 && !bpl.enabled)
                    .Select(bpl => {
                    return(new KeyValuePair <ItemIndex, ItemTier>(((Item_V2)bpl).catalogIndex, ((Item_V2)bpl).itemTier));
                })
                    .ToArray());
                ItemDropAPI.RemoveFromDefaultEquipment(
                    allInstances.Where(bpl => bpl is Equipment_V2 && !bpl.enabled)
                    .Select(bpl => ((Equipment_V2)bpl).catalogIndex)
                    .ToArray());

                ItemDropAPI.AddToDefaultByTier(
                    allInstances.Where(bpl => bpl is Item_V2 && bpl.enabled)
                    .Select(bpl => {
                    return(new KeyValuePair <ItemIndex, ItemTier>(((Item_V2)bpl).catalogIndex, ((Item_V2)bpl).itemTier));
                })
                    .ToArray());
                ItemDropAPI.AddToDefaultEquipment(
                    allInstances.Where(bpl => bpl is Equipment_V2 && bpl.enabled)
                    .Select(bpl => ((Equipment_V2)bpl).catalogIndex)
                    .ToArray());
            }
            orig(self);
            //should force-update most cached drop tables
            PickupDropTable.RegenerateAll(Run.instance);
            //update existing Command droplets. part of an effort to disable items mid-stage, may not be necessary while that's prevented
            foreach (var picker in UnityEngine.Object.FindObjectsOfType <PickupPickerController>())
            {
                picker.SetOptionsFromPickupForCommandArtifact(picker.options[0].pickupIndex);
            }
        }