bool SetEquipmentInternal(On.RoR2.Inventory.orig_SetEquipmentInternal orig, RoR2.Inventory inventory, EquipmentState equipmentState, uint slot) { bool equipmentChanged = orig(inventory, equipmentState, slot); if (Data.modEnabled) { if (Data.mode == DataShop.mode) { if (inventoryLocal != null) { if (inventoryLocal == inventory) { int stageClearCountNew = Run.instance.stageClearCount; if (stageClearCountOld != stageClearCountNew) { stageClearCountOld = stageClearCountNew; equipmentFoundThisStage.Clear(); equipmentFoundThisStageTwice.Clear(); foreach (EquipmentState equipmentStateOlder in latestEquipment) { if (equipmentStateOlder.equipmentIndex != EquipmentIndex.None && !equipmentFoundThisStage.Contains(equipmentStateOlder.equipmentIndex)) { equipmentFoundThisStage.Add(equipmentStateOlder.equipmentIndex); } } } int slotAdjusted = (int)slot; if (slotAdjusted + 1 > latestEquipment.Count) { for (int appendIndex = 0; appendIndex < slotAdjusted + 1 - latestEquipment.Count; appendIndex++) { latestEquipment.Add(new EquipmentState(EquipmentIndex.None, new Run.FixedTimeStamp(), 0)); } } EquipmentState equipmentStateOld = latestEquipment[slotAdjusted]; if (!EquipmentState.Equals(equipmentStateOld, equipmentState)) { latestEquipment[slotAdjusted] = equipmentState; if (!equipmentFoundThisStage.Contains(latestEquipment[slotAdjusted].equipmentIndex)) { if (Data.allEquipmentIndexes.ContainsKey(equipmentState.equipmentIndex)) { if (DataShop.AddScrap(characterBody, Data.GetItemTier(Data.allEquipmentIndexes[equipmentState.equipmentIndex]))) { equipmentFoundThisStage.Add(equipmentState.equipmentIndex); } } } } } } } } return(equipmentChanged); }
static bool EnforceBannedEquipments(On.RoR2.Inventory.orig_SetEquipmentInternal orig, Inventory self, EquipmentState equipmentState, uint slot) { EquipmentState equipment = equipmentState; if (NetworkServer.active) { //Ban check bool isBanned = Settings.BannedEquipments.ContainsKey(equipment.equipmentIndex) ? true : false; //Reroll if banned if (isBanned) { Chat.SendBroadcastChat(new Chat.SimpleChatMessage { baseToken = Util.GenerateColoredString("Banned equipment detected! rerolling...", new Color32(255, 106, 0, 255)) }); bool assigned = false; if (equipment.equipmentDef != null) { if (equipment.equipmentDef.isLunar) { if (Run.instance.availableLunarEquipmentDropList.Count != 0) { EquipmentIndex equipmentIndex = Tools.TryGetRandomEquipment(Run.instance.availableLunarEquipmentDropList, Run.instance.treasureRng); equipment = new EquipmentState(equipmentIndex, equipment.chargeFinishTime, equipment.charges); assigned = true; } } else { if (Run.instance.availableNormalEquipmentDropList.Count != 0) { EquipmentIndex equipmentIndex = Tools.TryGetRandomEquipment(Run.instance.availableNormalEquipmentDropList, Run.instance.treasureRng); equipment = new EquipmentState(equipmentIndex, equipment.chargeFinishTime, equipment.charges); assigned = true; } } } if (!assigned) { equipment = EquipmentState.empty; } } } return(orig(self, equipment, slot)); }