private static void ItemDisplayAllocateIconsHook(On.RoR2.UI.ItemInventoryDisplay.orig_AllocateIcons orig, ItemInventoryDisplay self, int count) { orig(self, count); var icons = self.GetFieldValue <List <ItemIcon> >("itemIcons"); DisplayToMasterRef.TryGetValue(self, out var masterRef); // naive, but not worth improving as it is not called every frame icons.ForEach(i => IconToMasterRef[i] = masterRef); }
private void Awake() { if (_instance != null && _instance != this) { Destroy(gameObject); } else { _instance = this; } lobbyRule.AddChoice(0, "None", "Enemies aggregate no items", ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier1Item), ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier1ItemDark)); lobbyRule.AddChoice(1, "White", "Enemies aggregate white items every level", ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier1Item), ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier1ItemDark)); lobbyRule.AddChoice(2, "Green", "Enemies also aggregate green items, every 3 levels", ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier2Item), ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier2ItemDark)); lobbyRule.AddChoice(3, "Red", "Enemies also aggregate red items, every 5 levels", ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier3Item), ColorCatalog.GetColor(ColorCatalog.ColorIndex.Tier3ItemDark)); lobbyRule.AddChoice(4, "Lunar", "Enemies also aggregate lunar items, every 8 levels", ColorCatalog.GetColor(ColorCatalog.ColorIndex.LunarItem), ColorCatalog.GetColor(ColorCatalog.ColorIndex.LunarItemDark)); lobbyRule.AddChoice(5, "Boss", "Enemies also aggregate boss items, every 10 levels", ColorCatalog.GetColor(ColorCatalog.ColorIndex.BossItem), ColorCatalog.GetColor(ColorCatalog.ColorIndex.BossItemDark)); lobbyRule.MakeValueDefault(0); lobbyCategory.PushRule <int>(lobbyRule); On.RoR2.UI.HUD.Awake += (orig, self) => { orig(self); itemInventoryDisplay = Instantiate(self.itemInventoryDisplay, self.transform); itemInventoryDisplay.SetFieldValue <int[]>("itemStacks", ItemCatalog.RequestItemStackArray()); itemInventoryDisplay.SetFieldValue <ItemIndex[]>("itemOrder", ItemCatalog.RequestItemOrderBuffer()); if (!inventory) { inventory = itemInventoryDisplay.gameObject.AddComponent <Inventory>(); } itemInventoryDisplay.SetSubscribedInventory(inventory); }; RoR2.Run.onRunStartGlobal += (RoR2.Run run) => { if (NetworkServer.active && lobbyRule.Value != null) { levelWave = 1; Debug.Log(lobbyRule.Value); if (lobbyRule.Value == 1) { Debug.Log("Added white"); On.RoR2.GlobalEventManager.OnTeamLevelUp += UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart += CopyItemsMaster; On.RoR2.GlobalEventManager.OnTeamLevelUp += WhiteOnLevelUp; } if (lobbyRule.Value == 2) { Debug.Log("Added green"); On.RoR2.GlobalEventManager.OnTeamLevelUp += UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart += CopyItemsMaster; On.RoR2.GlobalEventManager.OnTeamLevelUp += WhiteOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += GreenOnLevelUp; } if (lobbyRule.Value == 3) { Debug.Log("Added red"); On.RoR2.GlobalEventManager.OnTeamLevelUp += UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart += CopyItemsMaster; On.RoR2.GlobalEventManager.OnTeamLevelUp += WhiteOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += GreenOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += RedOnLevelUp; } if (lobbyRule.Value == 4) { Debug.Log("Added lunar"); On.RoR2.GlobalEventManager.OnTeamLevelUp += UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart += CopyItemsMaster; On.RoR2.GlobalEventManager.OnTeamLevelUp += WhiteOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += GreenOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += RedOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += LunarOnLevelUp; } if (lobbyRule.Value == 5) { Debug.Log("Added boss"); On.RoR2.GlobalEventManager.OnTeamLevelUp += UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart += CopyItemsMaster; On.RoR2.GlobalEventManager.OnTeamLevelUp += WhiteOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += GreenOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += RedOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += LunarOnLevelUp; On.RoR2.GlobalEventManager.OnTeamLevelUp += BossOnLevelUp; } } }; RoR2.Run.onRunDestroyGlobal += (RoR2.Run run) => { if (NetworkServer.active && lobbyRule.Value != null) { levelWave = 1; if (lobbyRule.Value <= 0) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= UpdateLevelWave; On.RoR2.CharacterMaster.OnBodyStart -= CopyItemsMaster; } if (lobbyRule.Value <= 1) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= WhiteOnLevelUp; } if (lobbyRule.Value <= 2) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= GreenOnLevelUp; } if (lobbyRule.Value <= 3) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= RedOnLevelUp; } if (lobbyRule.Value <= 4) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= LunarOnLevelUp; } if (lobbyRule.Value <= 5) { On.RoR2.GlobalEventManager.OnTeamLevelUp -= BossOnLevelUp; } } }; }
private void ItemInventoryDisplay_UpdateDisplay(On.RoR2.UI.ItemInventoryDisplay.orig_UpdateDisplay orig, ItemInventoryDisplay self) { orig(self); UpdateInventoryStats(); }