Пример #1
0
            public void OnKilledServer(DamageReport damageReport)
            {
                Vector3 position = Vector3.zero;

                if (damageReport.attackerBody)
                {
                    position = damageReport.victimBody.corePosition;
                }
                else
                {
                    foreach (var teammate in TeamComponent.GetTeamMembers(TeamIndex.Player))
                    {
                        if (teammate.body?.master?.playerCharacterMasterController)
                        {
                            position = teammate.body.corePosition;
                        }
                    }
                }

                DropItems(position);

                PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(equipmentIndex), position, Vector3.up * 20f);

                DropCoins(position);
            }
Пример #2
0
        static void HandleDropEquipment(NetworkMessage netMsg)
        {
            var dropEquipment = netMsg.ReadMessage <DropEquipmentPacket>();
            var body          = dropEquipment.Player.GetComponent <CharacterBody>();

            PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(dropEquipment.EquipmentIndex), body.transform.position + Vector3.up * 1.5f, Vector3.up * 20f + body.transform.forward * 2f);
        }
Пример #3
0
        //  This will update the items odds for the interactables that utilize ExplicitPickupDropTable for specific boss items.
        private static void UpdateDropTableItemOdds(DropList dropList, ExplicitPickupDropTable dropTable, string interactableName)
        {
            if (!DropTableItemOdds.ContainsKey(interactableName))
            {
                DropTableItemOdds.Add(interactableName, new List <float>());
                foreach (ExplicitPickupDropTable.Entry entry in dropTable.entries)
                {
                    DropTableItemOdds[interactableName].Add(entry.pickupWeight);
                }
            }

            if (DropTableItemOdds.ContainsKey(interactableName))
            {
                for (int entryIndex = 0; entryIndex < dropTable.entries.Length; entryIndex++)
                {
                    dropTable.entries[entryIndex].pickupWeight = DropTableItemOdds[interactableName][entryIndex];
                }
            }
            for (int entryIndex = 0; entryIndex < dropTable.entries.Length; entryIndex++)
            {
                if (!dropList.AvailableBossDropList.Contains(PickupCatalog.FindPickupIndex(dropTable.entries[entryIndex].pickupName)))
                {
                    dropTable.entries[entryIndex].pickupWeight = 0;
                }
            }

            //dropTable.GenerateWeightedSelection();
        }
        public static void SimulatePickup(CharacterMaster characterMaster, ItemDef itemDef, int amount = 1, bool showNotif = true)
        {
            var self        = characterMaster.inventory;
            var pickupIndex = PickupCatalog.FindPickupIndex(itemDef.itemIndex);

            //var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
            //var nameToken = pickupDef.nameToken;
            //var color = pickupDef.baseColor;
            //var body = characterMaster.GetBody();

            if (pickupIndex > PickupIndex.none)
            {
                //Chat.AddPickupMessage(body, nameToken, color, (uint)amount);
                Util.PlaySound("Play_UI_item_pickup", characterMaster.GetBodyObject());

                self.GiveItem(itemDef, amount);
                GenericPickupController.SendPickupMessage(characterMaster, pickupIndex);

                if (showNotif)
                {
                    var list = NotificationQueue.instancesList;
                    list[0].OnPickup(characterMaster, pickupIndex);

                    /*for (int i = 0; i < list.Count; i++)
                     * {
                     *  list[i].OnPickup(characterMaster, pickupIndex);
                     * }*/
                }
            }
        }
        private static void DropItemCommand(ConCommandArgs args)
        {
            var itemName  = args.GetArgString(0);
            var itemIndex = ItemNameToIndex(itemName);

            if (itemIndex == ItemIndex.None)
            {
                Console.print("Can't find item specified");
                return;
            }

            var count = args.TryGetArgInt(1) ?? 1;

            KookehsDropItemMod.Logger.LogDebug("Item index: " + itemIndex);

            var master = args.GetSenderMaster();

            var inventory     = master.inventory;
            var charTransform = master.GetBody().GetFieldValue <Transform>("transform");

            for (int i = 0; i < count; i++)
            {
                DropItemHandler.DropItem(charTransform, inventory, PickupCatalog.FindPickupIndex(itemIndex));
            }
        }
 void DropItemIndex(Vector3 position, ItemIndex itemIndex, int count)
 {
     for (uint i = 0; i < count; i++)
     {
         PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(itemIndex), position, Vector3.up * 5f);
     }
 }
Пример #7
0
        private bool DropItem(Transform charTransform, Inventory inventory, PickupIndex pickupIndex)
        {
            _pickups[inventory] = new PickupRecord(Time.time, ItemIndex.None);

            //if (!inventory.hasAuthority)
            //    return false;

            var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);

            if (pickupDef.equipmentIndex != EquipmentIndex.None)
            {
                if (inventory.GetEquipmentIndex() != pickupDef.equipmentIndex)
                {
                    return(false);
                }

                inventory.SetEquipmentIndex(EquipmentIndex.None);
            }
            else
            {
                if (inventory.GetItemCount(pickupDef.itemIndex) <= 0)
                {
                    return(false);
                }

                inventory.RemoveItem(pickupDef.itemIndex, 1);
            }

            PickupDropletController.CreatePickupDroplet(pickupIndex,
                                                        charTransform.position, Vector3.up * 20f + charTransform.forward * 10f);
            return(true);
        }
            void SetOptionsServer(On.RoR2.PickupPickerController.orig_SetOptionsServer orig, RoR2.PickupPickerController pickupPickerController, RoR2.PickupPickerController.Option[] options)
            {
                List <RoR2.PickupPickerController.Option> optionsAdjusted = new List <PickupPickerController.Option>();

                foreach (RoR2.PickupPickerController.Option option in options)
                {
                    if (latestPickupDisplayType == "scrapper")
                    {
                        if (playerItems.Contains(PickupCatalog.FindPickupIndex(Catalogue.GetScrapIndex(ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(option.pickupIndex).itemIndex).tier))))
                        {
                            optionsAdjusted.Add(option);
                        }
                    }
                    else if (latestPickupDisplayType == "command")
                    {
                        if (playerItems.Contains(option.pickupIndex))
                        {
                            optionsAdjusted.Add(option);
                        }
                    }
                    else
                    {
                        optionsAdjusted.Add(option);
                    }
                }
                options = new RoR2.PickupPickerController.Option[optionsAdjusted.Count];
                for (int optionIndex = 0; optionIndex < optionsAdjusted.Count; optionIndex++)
                {
                    options[optionIndex] = optionsAdjusted[optionIndex];
                }
                orig(pickupPickerController, options);
            }
            void SetDefaultDropLists(Run run)
            {
                List <PickupIndex> masterList = new List <PickupIndex>();

                foreach (PickupIndex pickupIndex in run.availableTier1DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableTier2DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableTier3DropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableBossDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableLunarDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (PickupIndex pickupIndex in run.availableEquipmentDropList)
                {
                    masterList.Add(pickupIndex);
                }
                foreach (EquipmentIndex equipmentIndex in Catalogue.eliteEquipment)
                {
                    masterList.Add(PickupCatalog.FindPickupIndex(equipmentIndex));
                }
                DropList.DuplicateDropList(masterList, playerItems);
                DropList.DuplicateDropList(masterList, monsterItems);
            }
        private static void ScrappingToIdle_OnEnter(On.EntityStates.Scrapper.ScrappingToIdle.orig_OnEnter orig, EntityStates.Scrapper.ScrappingToIdle self)
        {
            if (!(ShareSuite.PrinterCauldronFixEnabled.Value && NetworkServer.active && GeneralHooks.IsMultiplayer()))
            {
                orig(self);
                return;
            }

            _itemLock = true;
            orig(self);

            ScrapperController scrapperController = GetInstanceField(typeof(ScrapperBaseState), self, "scrapperController") as ScrapperController;

            Debug.Log(scrapperController);
            if (scrapperController)
            {
                PickupIndex pickupIndex = PickupIndex.none;
                ItemDef     itemDef     = ItemCatalog.GetItemDef(scrapperController.lastScrappedItemIndex);
                if (itemDef != null)
                {
                    switch (itemDef.tier)
                    {
                    case ItemTier.Tier1:
                        pickupIndex = PickupCatalog.FindPickupIndex("ItemIndex.ScrapWhite");
                        break;

                    case ItemTier.Tier2:
                        pickupIndex = PickupCatalog.FindPickupIndex("ItemIndex.ScrapGreen");
                        break;

                    case ItemTier.Tier3:
                        pickupIndex = PickupCatalog.FindPickupIndex("ItemIndex.ScrapRed");
                        break;

                    case ItemTier.Boss:
                        pickupIndex = PickupCatalog.FindPickupIndex("ItemIndex.ScrapYellow");
                        break;
                    }
                }

                if (pickupIndex == PickupIndex.none)
                {
                    return;
                }

                var interactor = GetInstanceField(typeof(ScrapperController), scrapperController, "interactor") as Interactor;
                Debug.Log("Interactor Established");

                PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);

                if (!interactor)
                {
                    return;
                }

                CharacterBody component = interactor.GetComponent <CharacterBody>();
                component.inventory.GiveItem(pickupDef.itemIndex, scrapperController.itemsEaten);
                ChatHandler.SendRichCauldronMessage(component.inventory.GetComponent <CharacterMaster>(), pickupIndex);
            }
        }
Пример #11
0
        private void Check(TeleporterInteraction teleporterInteraction)
        {
            if (!hasBeenHit)
            {
                for (int i = 0; i < CharacterMaster.readOnlyInstancesList.Count; i++)
                {
                    //body.GetComponent<CharacterBody>()?.inventory.GiveItem(catalogIndex);

                    var player = CharacterMaster.readOnlyInstancesList[i];
                    if (player)
                    {
                        var body = player.GetComponent <CharacterBody>();
                        if (body)
                        {
                            Chat.AddMessage(i.ToString() + "= Gave Master Round to " + player.name);
                            PickupIndex pickupIndex    = PickupCatalog.FindPickupIndex(catalogIndex);
                            Vector3     pickupVelocity = new Vector3(100 * i, 100, 100 * i);
                            PickupDropletController.CreatePickupDroplet(pickupIndex, teleporterInteraction.transform.position, pickupVelocity);
                        }
                    }
                }
            }
            else
            {
                Chat.AddMessage("Players didn't survive the hits");
            }
        }
Пример #12
0
        private void MaybeAwardLoot(On.RoR2.CharacterBody.orig_OnInventoryChanged orig, CharacterBody self)
        {
            orig(self);
            var amount = self.inventory.GetItemCount(Definition.itemIndex);

            if (amount > 0 && amount % 3 == 0)
            {
                self.inventory.RemoveItem(Definition.itemIndex, 3);
                PickupIndex loot;
                if (Util.CheckRoll(5, self.master))
                {
                    loot = Run.instance.treasureRng.NextElementUniform(Run.instance.availableTier3DropList);
                }
                else
                {
                    loot = Run.instance.treasureRng.NextElementUniform(Run.instance.availableTier2DropList);
                }
                if (self.isPlayerControlled)
                {
                    PickupDropletController.CreatePickupDroplet(loot, self.corePosition, Vector3.up * 5);
                }
                else
                {
                    PickupDef def = PickupCatalog.GetPickupDef(loot);
                    self.inventory.GiveItem(def.itemIndex);
                    var lootCount = self.inventory.GetItemCount(def.itemIndex);
                    Chat.AddPickupMessage(self, def.nameToken, ColorCatalog.GetColor(ItemCatalog.GetItemDef(def.itemIndex).colorIndex), (uint)lootCount);
                }
            }
        }
Пример #13
0
 public void Update()
 {
     NModLoader.Update();
     if (Input.GetKeyDown(KeyCode.F2))
     {
         //Get the player body to use a position:
         var transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;
         //And then drop our defined item in front of the player.
         PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(NModLoader.LoadedCustomItems[Envy.Name].Index), transform.position, transform.forward * 20f);
     }
     if (Input.GetKeyDown(KeyCode.F3))
     {
         //Get the player body to use a position:
         var transform   = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;
         var customItems = NModLoader.LoadedCustomItems.Values.ToArray();
         for (var i = 0; i < customItems.Length; i++)
         {
             var rotation = Math.PI * 2 * (i / (float)customItems.Length);
             PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(customItems[i].Index), transform.position, new Vector3((float)Math.Cos(rotation), 0.05f, (float)Math.Sin(rotation)) * 30f);
         }
     }
     if (Input.GetKeyDown(KeyCode.F4))
     {
         //Get the player body to use a position:
         var transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform;
         //And then drop our defined item in front of the player.
         PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex((ItemIndex)53), transform.position, transform.forward * 20f);
     }
 }
Пример #14
0
        private void GenericPickupController_GrantItem(On.RoR2.GenericPickupController.orig_GrantItem orig, GenericPickupController self, CharacterBody body, Inventory inventory)
        {
            orig(self, body, inventory);
            PickupDef pickupDef = PickupCatalog.GetPickupDef(self.pickupIndex);

            body.master?.GetBodyObject().GetComponent <DropInventoryOnDeath>()?.AddItem((pickupDef != null) ? pickupDef.itemIndex : ItemIndex.None, 1);
        }
Пример #15
0
        public static bool PickupIsNonBlacklistedItem(PickupIndex pickupIndex)
        {
            var pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
            var itemDef   = ItemCatalog.GetItemDef(pickupDef.itemIndex);

            return(itemDef.DoesNotContainTag(ItemTag.AIBlacklist));
        }
Пример #16
0
 private void GenericPickupController_AttemptGrant(On.RoR2.GenericPickupController.orig_AttemptGrant orig, GenericPickupController self, CharacterBody body)
 {
     if (!NetworkServer.active)
     {
         Debug.LogWarning("[Server] function 'System.Void RoR2.GenericPickupController::AttemptGrant(RoR2.CharacterBody)' called on client");
         return;
     }
     if (!self.gameObject.GetComponent <SpiceRolled>())
     {
         self.gameObject.AddComponent <SpiceRolled>();
         TeamComponent component = body.GetComponent <TeamComponent>();
         if (component && component.teamIndex == TeamIndex.Player)
         {
             Inventory inventory = body.inventory;
             if (inventory)
             {
                 var spiceCount         = inventory.GetItemCount(SpiceTally);
                 var spiceCountAdjusted = spiceCount < SpiceEquipment_MaxPerPlayer ? spiceCount : 0;
                 if (Util.CheckRoll(spiceCountAdjusted))
                 {
                     self.pickupIndex = PickupCatalog.FindPickupIndex(Spice.instance.EquipmentDef.equipmentIndex);
                 }
             }
         }
     }
     orig(self, body);
 }
 void DropLunarCoin(Vector3 position, int count)
 {
     for (uint i = 0; i < count; i++)
     {
         PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex("LunarCoin.Coin0"), position, Vector3.up * 2f);
     }
 }
Пример #18
0
        private static void FixScrapperIL(ILContext il)
        {
            ILCursor c = new ILCursor(il);

            c.GotoNext(MoveType.After,
                       x => x.MatchLdstr("ItemIndex.ScrapYellow"),
                       x => x.MatchCall(typeof(PickupCatalog), nameof(PickupCatalog.FindPickupIndex)),
                       x => x.MatchStloc(0)
                       );
            c.Emit(OpCodes.Ldloc_1);
            var toLabel = c.Previous;

            foreach (var inLabel in c.IncomingLabels)
            {
                inLabel.Target = toLabel;
            }
            c.Emit(OpCodes.Ldloc_0);
            c.EmitDelegate <Func <ItemDef, PickupIndex, PickupIndex> >((ItemDef item, PickupIndex orig) =>
            {
                if (item.tier == ItemTier.Lunar)
                {
                    return(PickupCatalog.FindPickupIndex(LunarScrapDef.itemIndex));
                }
                return(orig);
            });
            c.Emit(OpCodes.Stloc_0);
        }
Пример #19
0
        public void DropRecentItem()
        {
            if (!NetworkServer.active)
            {
                var message = new DropRecentItemMessage();
                _cmdDropItem.Invoke(message);
            }
            else
            {
                var player    = PlayerCharacterMasterController.instances[0];
                var inventory = player.master.inventory;
                if (!_pickups.TryGetValue(inventory, out var pickup))
                {
                    return;
                }

                if (pickup.ItemIndex == ItemIndex.None || Time.time - pickup.PickupTime > 10)
                {
                    return;
                }

                // Server, execute command
                var characterBody = inventory.GetComponent <CharacterMaster>().GetBody();
                var charTransform = characterBody.transform;
                var pickupIndex   = PickupCatalog.FindPickupIndex(pickup.ItemIndex);

                DropItem(charTransform, inventory, pickupIndex);
            }
        }
 private void PodComponent_onRoboPodLandedServer(VehicleSeat actionVehicleSeat, GameObject passenger)
 {
     if (actionVehicleSeat.rigidbody == vehicleSeat.rigidbody)
     {
         PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(RoR2Content.Equipment.QuestVolatileBattery.equipmentIndex), vehicleSeat.exitPosition.position, Vector3.up);
     }
 }
Пример #21
0
        private void On_PickupCatalogInit(On.RoR2.PickupCatalog.orig_Init orig)
        {
            orig();

            foreach (CatalogBoilerplate bpl in allInstances)
            {
                PickupIndex pind;
                if (bpl is Equipment)
                {
                    pind = PickupCatalog.FindPickupIndex(((Equipment)bpl).catalogIndex);
                }
                else if (bpl is Item)
                {
                    pind = PickupCatalog.FindPickupIndex(((Item)bpl).catalogIndex);
                }
                else
                {
                    continue;
                }
                var pickup = PickupCatalog.GetPickupDef(pind);

                bpl.pickupDef   = pickup;
                bpl.pickupIndex = pind;
            }
        }
Пример #22
0
            public void Start()
            {
                RoR2.EntityLogic.DelayedEvent delayedEvent = GetComponent <RoR2.EntityLogic.DelayedEvent>();
                delayedEvent.action = new UnityEvent();
                delayedEvent.action.AddListener(() =>
                {
                    AddShrineStack(purchaseInteraction.lastActivator);
                });
                delayedEvent.timeStepType = RoR2.EntityLogic.DelayedEvent.TimeStepType.FixedTime;

                purchaseInteraction = GetComponent <PurchaseInteraction>();
                purchaseInteraction.onPurchase.AddListener((interactor) =>
                {
                    purchaseInteraction.SetAvailable(false);
                    delayedEvent.CallDelayed(1.5f);
                });

                availableItems = new List <ItemIndex>();
                if (NetworkServer.active)
                {
                    rng = new Xoroshiro128Plus(Run.instance.stageRng.nextUlong);
                    foreach (PickupIndex pickupIndex in Run.instance.availableTier3DropList)
                    {
                        availableItems.Add(PickupCatalog.GetPickupDef(pickupIndex).itemIndex);
                    }
                }
            }
Пример #23
0
        private RoR2.UI.LogBook.Entry[] On_LogbookBuildPickupEntries(On.RoR2.UI.LogBook.LogBookController.orig_BuildPickupEntries orig)
        {
            var retv = orig();

            Logger.LogDebug("Processing logbook models...");
            int replacedModels = 0;

            foreach (RoR2.UI.LogBook.Entry e in retv)
            {
                if (!(e.extraData is PickupIndex))
                {
                    continue;
                }
                if (e.modelPrefab == null)
                {
                    continue;
                }
                if (e.modelPrefab.transform.Find("cardfront"))
                {
                    e.modelPrefab = PickupCatalog.GetPickupDef((PickupIndex)e.extraData).displayPrefab;
                    replacedModels++;
                }
            }
            Logger.LogDebug("Modified " + replacedModels + " logbook models.");
            return(retv);
        }
Пример #24
0
        private static PickupIndex?GetRandomItemOfTier(ItemTier tier, PickupIndex orDefault)
        {
            switch (tier)
            {
            case ItemTier.Tier1:
                return(PickRandomOf(Blacklist.AvailableTier1DropList));

            case ItemTier.Tier2:
                return(PickRandomOf(Blacklist.AvailableTier2DropList));

            case ItemTier.Tier3:
                return(PickRandomOf(Blacklist.AvailableTier3DropList));

            case ItemTier.Lunar:
                if (ShareSuite.LunarItemsRandomized.Value)
                {
                    return(PickRandomOf(Blacklist.AvailableLunarDropList));
                }
                break;

            case ItemTier.Boss:
                if (ShareSuite.BossItemsRandomized.Value)
                {
                    return(PickRandomOf(Blacklist.AvailableBossDropList));
                }
                break;
            }
            var pickupDef = PickupCatalog.GetPickupDef(orDefault);

            if (Blacklist.HasItem(pickupDef.itemIndex))
            {
                return(null);
            }
            return(orDefault);
        }
Пример #25
0
        public static void SendRichCauldronMessage(CharacterMaster player, PickupIndex index)
        {
            var body = player.hasBody ? player.GetBody() : null;

            if (!GeneralHooks.IsMultiplayer() || body == null ||
                !ShareSuite.RichMessagesEnabled.Value)
            {
                SendPickupMessage(player, index);
                return;
            }

            var pickupDef   = PickupCatalog.GetPickupDef(index);
            var pickupColor = pickupDef.baseColor;
            var pickupName  = Language.GetString(pickupDef.nameToken);
            var playerColor = GetPlayerColor(player.playerCharacterMasterController);

            var pickupMessage =
                $"<color=#{playerColor}>{body.GetUserName()}</color> <color=#{GrayColor}>traded for</color> " +
                $"<color=#{ColorUtility.ToHtmlStringRGB(pickupColor)}>" +
                $"{pickupName ?? "???"}</color><color=#{GrayColor}>.</color>";

            Chat.SendBroadcastChat(new Chat.SimpleChatMessage {
                baseToken = pickupMessage
            });
        }
Пример #26
0
        private static void OnGrantEquipment(On.RoR2.GenericPickupController.orig_GrantEquipment orig, GenericPickupController self, CharacterBody body, Inventory inventory)
        {
            #region Sharedequipment

            var equip = PickupCatalog.GetPickupDef(self.pickupIndex).equipmentIndex;

            if (!BlackList.HasEquipment(equip) &&
                NetworkServer.active &&
                IsValidEquipmentPickup(self.pickupIndex) &&
                GeneralHooks.IsMultiplayer())
            {
                foreach (var player in PlayerCharacterMasterController.instances.Select(p => p.master)
                         .Where(p => !p.IsDeadAndOutOfLivesServer() || ShareSuite.DeadPlayersGetItems.Value))
                {
                    SyncToolbotEquip(player, ref equip);

                    // Sync Mul-T Equipment, but perform primary equipment pickup only for clients
                    if (player.inventory == inventory)
                    {
                        continue;
                    }

                    player.inventory.SetEquipmentIndex(equip);
                    self.NetworkpickupIndex = PickupCatalog.FindPickupIndex(equip);
                }
            }

            orig(self, body, inventory);

            #endregion
        }
Пример #27
0
 public static PickupSelection ToSelection(this List <EquipmentIndex> indices, float dropChance = 1.0f)
 {
     return(indices == null ? null : new PickupSelection {
         DropChance = dropChance,
         Pickups = indices.Select(x => PickupCatalog.FindPickupIndex(x)).ToList()
     });
 }
Пример #28
0
        public static IEnumerable <PickupIndex> GetDropListForTier(ItemTier itemTier, bool addTierScrap = false)
        {
            IEnumerable <PickupIndex> HandleWithScrap(IEnumerable <PickupIndex> baseList, ItemDef scrap)
            {
                return(addTierScrap ? baseList.Append(PickupCatalog.FindPickupIndex(scrap.itemIndex)) : baseList);
            }

            switch (itemTier)
            {
            case ItemTier.Tier1:
                return(HandleWithScrap(Run.instance.availableTier1DropList, RoR2Content.Items.ScrapWhite));

            case ItemTier.Tier2:
                return(HandleWithScrap(Run.instance.availableTier2DropList, RoR2Content.Items.ScrapGreen));

            case ItemTier.Tier3:
                return(HandleWithScrap(Run.instance.availableTier3DropList, RoR2Content.Items.ScrapRed));

            case ItemTier.Boss:
                return(HandleWithScrap(Run.instance.availableBossDropList, RoR2Content.Items.ScrapYellow));

            case ItemTier.Lunar:
                return(Run.instance.availableLunarItemDropList);

            default:
                throw new Exception($"ItemTier {itemTier} has not been handled");
            }
        }
Пример #29
0
            private static List <PickupIndex> CreateDropList(
                IEnumerable <PickupIndex> vanillaDropList,
                IEnumerable <EquipmentIndex> equipmentsToAdd,
                IEnumerable <EquipmentIndex> equipmentsToRemove)
            {
                var finalDropList = new List <PickupIndex>();

                foreach (var pickupIndex in vanillaDropList)
                {
                    if (!finalDropList.Contains(pickupIndex))
                    {
                        finalDropList.Add(pickupIndex);
                    }
                }

                foreach (var equipmentIndex in equipmentsToAdd)
                {
                    var pickupIndex = PickupCatalog.FindPickupIndex(equipmentIndex);
                    if (!finalDropList.Contains(pickupIndex))
                    {
                        finalDropList.Add(pickupIndex);
                    }
                }

                foreach (var equipmentIndex in equipmentsToRemove)
                {
                    var pickupIndex = PickupCatalog.FindPickupIndex(equipmentIndex);
                    if (finalDropList.Contains(pickupIndex))
                    {
                        finalDropList.Remove(pickupIndex);
                    }
                }

                return(finalDropList);
            }
Пример #30
0
        internal static void GiveScavsLunarsAndBossItems(On.RoR2.ScavengerItemGranter.orig_Start orig, RoR2.ScavengerItemGranter self)
        {
            orig(self);
            Inventory inventory = self.GetComponent <Inventory>();

            if (inventory.GetTotalItemCountOfTier(ItemTier.Lunar) == 0)
            {
                var list        = Run.instance.availableLunarDropList.Where(new System.Func <PickupIndex, bool>(PickupIsNonBlacklistedItem)).ToList();
                var randomIndex = Random.Range(0, list.Count);
                inventory.GiveItem(PickupCatalog.GetPickupDef(list[randomIndex]).itemIndex, 2);
            }

            if (inventory.GetTotalItemCountOfTier(ItemTier.Boss) == 0)
            {
                var list        = PickupCatalog.allPickups.Where(def => def.isBoss).ToList();
                var randomIndex = Random.Range(0, list.Count);
                inventory.GiveItem(list[randomIndex].itemIndex, 1);
            }


            bool PickupIsNonBlacklistedItem(PickupIndex pickupIndex)
            {
                PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
                ItemDef   itemDef   = ItemCatalog.GetItemDef(pickupDef != null ? pickupDef.itemIndex : ItemIndex.None);

                if (itemDef == null)
                {
                    return(false);
                }
                return(itemDef.DoesNotContainTag(ItemTag.AIBlacklist));
            }
        }