diff --git a/Zennysoft.Game.Ma/src/enemy/Enemy.cs b/Zennysoft.Game.Ma/src/enemy/Enemy.cs index dd0d9b8b..332c5c1b 100644 --- a/Zennysoft.Game.Ma/src/enemy/Enemy.cs +++ b/Zennysoft.Game.Ma/src/enemy/Enemy.cs @@ -191,6 +191,9 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide (x.SpawnsOn as FloorSpawnTable).SpawnsOnFloor(FloorType.Altar)).ToArray(); var numberOfItemsToSpawn = rng.RandiRange(2, itemSpawnPoints.Count); itemSpawnPoints.Shuffle(); - var database = ItemDatabase.Instance; - var spawnableItems = database.Items.Where(x => (x.SpawnsOn as FloorSpawnTable).SpawnsOnFloor(FloorType.Altar)).ToArray(); - foreach (var spawnPoint in itemSpawnPoints.Cast()) + var spawnPoints = itemSpawnPoints.Cast().ToList(); + foreach (var spawnPoint in spawnPoints) { if (numberOfItemsToSpawn <= 0) break; numberOfItemsToSpawn--; + var rarity = RarityTag.Common; + var rarityGroup = rng.Randf(); + if (rarityGroup < 0.5f) + { + rarity = RarityTag.Common; + color = "white"; + } + else if (rarityGroup < 0.85f) + { + rarity = RarityTag.Uncommon; + color = "green"; + } + else if (rarityGroup < 0.99f) + { + rarity = RarityTag.Rare; + color = "cyan"; + } + else + { + rarity = RarityTag.Legendary; + color = "gold"; + } + + spawnableItems = [.. spawnableItems.Where(x => x.RarityTag == rarity)]; + if (spawnableItems.Length == 0) + break; var selectedItem = database.PickItemFromList(spawnableItems) as Node3D; var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D; AddChild(duplicated); duplicated.Position = new Vector3(spawnPoint.Position.X, 0, spawnPoint.Position.Z); + GD.PrintRich($"Item spawned: [b]{(selectedItem as IBaseInventoryItem).ItemName}[/b] at {duplicated.GlobalPosition}. Rolled a {rarityGroup} for a [color={color}]{rarity}"); } }