From e889709a91e07d9c44365253d80a2746369a8831 Mon Sep 17 00:00:00 2001 From: Zenny Date: Tue, 9 Jun 2026 01:39:00 -0700 Subject: [PATCH] Add Key Item tag and restrict it from being used/thrown/dropped --- Zennysoft.Game.Ma.Implementation/Equipment/Tags/ItemTag.cs | 3 ++- Zennysoft.Game.Ma/src/game/Game.cs | 4 ++-- Zennysoft.Game.Ma/src/items/EffectService.cs | 4 ++-- Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Zennysoft.Game.Ma.Implementation/Equipment/Tags/ItemTag.cs b/Zennysoft.Game.Ma.Implementation/Equipment/Tags/ItemTag.cs index 8eedab7f..5266a15c 100644 --- a/Zennysoft.Game.Ma.Implementation/Equipment/Tags/ItemTag.cs +++ b/Zennysoft.Game.Ma.Implementation/Equipment/Tags/ItemTag.cs @@ -23,5 +23,6 @@ public enum ItemTag UseAllItems, GlueOnEquip, BreaksOnUnequip, - ContainsJewel + ContainsJewel, + KeyItem } \ No newline at end of file diff --git a/Zennysoft.Game.Ma/src/game/Game.cs b/Zennysoft.Game.Ma/src/game/Game.cs index ba318052..18a98717 100644 --- a/Zennysoft.Game.Ma/src/game/Game.cs +++ b/Zennysoft.Game.Ma/src/game/Game.cs @@ -556,7 +556,7 @@ public partial class Game : Node3D, IGame InventoryEventNotification.Invoke($"{boxItem.ItemName} contained {rareItem.ItemName} but cost dear life."); break; case ItemTag.TradeOneRandomItem: - var itemsWithoutBox = _player.Inventory.Items.Where(x => x != boxItem).ToList(); + var itemsWithoutBox = _player.Inventory.Items.Where(x => x != boxItem).Where(x => x.ItemTag != ItemTag.KeyItem).ToList(); var rng = new RandomNumberGenerator(); rng.Randomize(); var index = rng.RandiRange(0, itemsWithoutBox.Count - 1); @@ -603,7 +603,7 @@ public partial class Game : Node3D, IGame _player.Inventory.Items.Remove(boxItem); GameRepo.CloseInventory(); - var itemsToThrow = _player.Inventory.Items.ToList(); + var itemsToThrow = _player.Inventory.Items.Where(x => x.ItemTag != ItemTag.KeyItem).ToList(); _player.Inventory.Items.Clear(); double[] throwAngles = [0, -5, 5, -15, -25, 25]; var throwIndex = 0; diff --git a/Zennysoft.Game.Ma/src/items/EffectService.cs b/Zennysoft.Game.Ma/src/items/EffectService.cs index 119cc49d..166ae3bb 100644 --- a/Zennysoft.Game.Ma/src/items/EffectService.cs +++ b/Zennysoft.Game.Ma/src/items/EffectService.cs @@ -355,7 +355,7 @@ public class EffectService public void TradeRandomItem(BoxItem box) where T : IBaseInventoryItem { - var tradableItems = _player.Inventory.Items.OfType().ToList(); + var tradableItems = _player.Inventory.Items.OfType().Where(x => x.ItemTag != ItemTag.KeyItem).ToList(); var rng = new RandomNumberGenerator(); rng.Randomize(); var randomIndex = rng.RandiRange(0, tradableItems.Count - 1); @@ -370,7 +370,7 @@ public class EffectService public IEnumerable TradeAllRandomItems(BoxItem box) { var newInventory = new List(); - var items = _player.Inventory.Items.ToList(); + var items = _player.Inventory.Items.Where(x => x.ItemTag != ItemTag.KeyItem).ToList(); foreach (var item in items) newInventory.Add(GetRandomItemOfType()); diff --git a/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs b/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs index 6022c3f4..d95e83c1 100644 --- a/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs +++ b/Zennysoft.Game.Ma/src/ui/inventory_menu/InventoryMenu.cs @@ -134,7 +134,7 @@ public partial class InventoryMenu : Control, IInventoryMenu private void ItemPressed(IItemSlot selectedItem) { - if (_blocking) + if (_blocking || selectedItem.Item.Value.ItemTag == ItemTag.KeyItem) return; SetProcessInput(false);