diff --git a/Distribution/Data/go.json b/Distribution/Data/go.json index 0c0f41dc0..e05e4792f 100644 --- a/Distribution/Data/go.json +++ b/Distribution/Data/go.json @@ -38,7 +38,7 @@ ] }, { - "name": "Deciet", + "name": "Deceit", "locations": [ { "name": "Entrance", "location": [1068, 1512, 10], "map": "Veridia" }, { "name": "Level 1", "location": [1515, 164, 0], "map": "Underworld" }, diff --git a/Distribution/Data/regions.json b/Distribution/Data/regions.json index ac64853f0..7f797cb0e 100644 --- a/Distribution/Data/regions.json +++ b/Distribution/Data/regions.json @@ -2181,7 +2181,7 @@ { "$type": "DungeonRegion", "Map": "Underworld", - "Name": "the Dungeon Deciet", + "Name": "the Dungeon Deceit", "Priority": 50, "Area": [ { "x1": 1464, "y1": 49, "x2": 1571, "y2": 170 }, @@ -2193,8 +2193,8 @@ { "$type": "GreetingDungeonRegion", "Map": "Underworld", - "Parent": { "Map": "Underworld", "Name": "the Dungeon Deciet" }, - "Name": "the Dungeon Deciet - Level 1", + "Parent": { "Map": "Underworld", "Name": "the Dungeon Deceit" }, + "Name": "the Dungeon Deceit - Level 1", "Priority": 55, "Area": [ { "x1": 1464, "y1": 49, "x2": 1571, "y2": 170 } @@ -2203,8 +2203,8 @@ { "$type": "GreetingDungeonRegion", "Map": "Underworld", - "Parent": { "Map": "Underworld", "Name": "the Dungeon Deciet" }, - "Name": "Deciet - Level 2", + "Parent": { "Map": "Underworld", "Name": "the Dungeon Deceit" }, + "Name": "Deceit - Level 2", "Priority": 55, "Area": [ { "x1": 1595, "y1": 37, "x2": 1690, "y2": 166 } @@ -2213,8 +2213,8 @@ { "$type": "GreetingDungeonRegion", "Map": "Underworld", - "Parent": { "Map": "Underworld", "Name": "the Dungeon Deciet" }, - "Name": "Deciet - Level 3", + "Parent": { "Map": "Underworld", "Name": "the Dungeon Deceit" }, + "Name": "Deceit - Level 3", "Priority": 55, "Area": [ { "x1": 1450, "y1": 170, "x2": 1570, "y2": 301 } @@ -2223,8 +2223,8 @@ { "$type": "GreetingDungeonRegion", "Map": "Underworld", - "Parent": { "Map": "Underworld", "Name": "the Dungeon Deciet" }, - "Name": "Deciet - Level 4", + "Parent": { "Map": "Underworld", "Name": "the Dungeon Deceit" }, + "Name": "Deceit - Level 4", "Priority": 55, "Area": [ { "x1": 1574, "y1": 165, "x2": 1673, "y2": 295 } diff --git a/Projects/UOContent/Engines/DailyDungeonManager.cs b/Projects/UOContent/Engines/DailyDungeonManager.cs index 78186a8b2..18b4d9341 100644 --- a/Projects/UOContent/Engines/DailyDungeonManager.cs +++ b/Projects/UOContent/Engines/DailyDungeonManager.cs @@ -1,6 +1,7 @@ using System; using Server; using Server.Commands; +using Server.Items; namespace Server.Custom { @@ -63,6 +64,83 @@ namespace Server.Custom World.Broadcast(1161, true, $"The magical energies of the world have shifted. {ActiveDungeon} is now the Dungeon of the Day!"); } + private static readonly Func[] DailyRares = new Func[] + { + // --- Cosmetics & Status --- + () => new ClothingBlessDeed(), + () => new SpecialHairDye(), + () => new SpecialBeardDye(), + () => new LeatherDyeTub(), + () => new FurnitureDyeTub(), + () => new BlackDyeTub(), + () => new MetallicLeatherDyeTub(), + () => new RunebookDyeTub(), + () => new SpecialDyeTub(), + () => new WhiteClothDyeTub(), + () => new WhiteLeatherDyeTub(), + + // --- Wealth & Adventure --- + // Forces a Level 5 (Devious) Treasure Map + () => new TreasureMap(5, Map.Trammel), + // A fat bank check for 5,000 gold + () => new BankCheck(5000), + + // --- Classic UOR Deco Rares --- + () => new DecoGoldIngot(), + () => new DecoGoldIngot2(), + () => new DecoGoldIngots(), + () => new DecoGoldIngots2(), + () => new DecoGoldIngots3(), + () => new DecoGoldIngots4(), + () => new DecoIronIngot(), + () => new DecoIronIngot2(), + () => new DecoIronIngots(), + () => new DecoIronIngots2(), + () => new DecoIronIngots3(), + () => new DecoIronIngots4(), + () => new DecoIronIngots5(), + () => new DecoIronIngots6(), + () => new DecoSilverIngot(), + () => new DecoSilverIngot2(), + () => new DecoSilverIngots(), + () => new DecoSilverIngots2(), + () => new DecoSilverIngots3(), + () => new DecoSilverIngots4(), + () => new DecoSilverIngots5(), + () => new Bucket(), + () => new ClosedBarrel(), + () => new WaterBarrel(), + () => new DecoCrystalBall(), + () => new DecoMagicalCrystal(), + () => new DecoHay(), + () => new DecoHay2(), + () => new DecoHorseDung(), + () => new EmptyToolKit(), + () => new Lockpicks(), + + // --- Rare Resources --- + // Drops exactly 50 Valorite Ingots + () => new ValoriteIngot(50), + () => new VeriteIngot(50), + () => new AgapiteIngot(50), + () => new GoldIngot(50), + + // --- Weaons and Armor --- + () => + { + var halberd = new Halberd(); + halberd.DamageLevel = WeaponDamageLevel.Vanq; + halberd.DurabilityLevel = WeaponDurabilityLevel.Indestructible; + return halberd; + } + + }; + + public static Server.Item GetRandomRare() + { + Func createItem = DailyRares[Utility.Random(DailyRares.Length)]; + return createItem(); + } [Usage("ForceDungeonSwap")] [Description("Forces the Dungeon of the Day to rotate immediately.")] private static void ForceSwap_OnCommand(CommandEventArgs e) diff --git a/Projects/UOContent/Mobiles/BaseCreature.cs b/Projects/UOContent/Mobiles/BaseCreature.cs index a873787e1..457d31fb3 100644 --- a/Projects/UOContent/Mobiles/BaseCreature.cs +++ b/Projects/UOContent/Mobiles/BaseCreature.cs @@ -3668,9 +3668,20 @@ namespace Server.Mobiles } } + // 2% chance to drop a random rare from your curated list if (Utility.RandomDouble() <= 0.05) { - c.DropItem(new Server.Items.SpecialHairDye()); + Server.Item rareLoot = Custom.DailyDungeonManager.GetRandomRare(); + if (rareLoot != null) + { + c.DropItem(rareLoot); + + // Optional: Add a special effect or sound when a rare drops! + if (killer != null) + { + killer.SendMessage(1161, "A rare item has dropped into the corpse!"); + } + } } if (killer != null)