From 4b760baae43c9a2d1d37f6a9b7424c0024ef14a7 Mon Sep 17 00:00:00 2001
From: FatBoy-DOTC <justin.chucksinsulating@gmail.com>
Date: Thu, 20 Feb 2025 21:13:53 -0600
Subject: [PATCH] new Fate Peddler

---
 src/engine/gameManager/LootManager.java       | 68 +++++++++++++++++++
 .../handlers/ObjectActionMsgHandler.java      |  4 +-
 src/engine/objects/Contract.java              |  6 ++
 3 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/src/engine/gameManager/LootManager.java b/src/engine/gameManager/LootManager.java
index 191913e5..0ba857e4 100644
--- a/src/engine/gameManager/LootManager.java
+++ b/src/engine/gameManager/LootManager.java
@@ -642,6 +642,74 @@ public enum LootManager {
         }
     }
 
+    public static void newFatePeddler(PlayerCharacter playerCharacter, Item gift) {
+
+        CharacterItemManager itemMan = playerCharacter.getCharItemManager();
+
+        if (itemMan == null)
+            return;
+
+        //check if player owns the gift he is trying to open
+
+        if (!itemMan.doesCharOwnThisItem(gift.getObjectUUID()))
+            return;
+
+        ItemBase ib = gift.getItemBase();
+
+        MobLoot winnings = null;
+
+        if (ib == null)
+            return;
+        switch (ib.getUUID()) {
+            case 971070: //wrapped rune
+                ItemBase runeBase = null;
+                int roll = ThreadLocalRandom.current().nextInt(static_rune_ids.size() + 1);
+                int itemId = static_rune_ids.get(0);
+                try {
+                    itemId = static_rune_ids.get(roll);
+                }catch(Exception e){
+
+                }
+                runeBase = ItemBase.getItemBase(itemId);
+                if(runeBase != null) {
+                    winnings = new MobLoot(playerCharacter, runeBase, 1, false);
+                }
+                break;
+            case 971012: //wrapped glass
+                int chance = ThreadLocalRandom.current().nextInt(100);
+                if(chance == 50){
+                    ItemBase glassBase =ItemBase.getItemBase(rollRandomItem(126));
+                    if(glassBase != null)
+                        winnings = new MobLoot(playerCharacter, ib, 1, false);
+                }else{
+                    ChatManager.chatSystemInfo(playerCharacter, "Please Try Again!");
+                }
+                break;
+        }
+
+        if (winnings == null)
+            return;
+
+        //early exit if the inventory of the player will not hold the item
+
+        if (!itemMan.hasRoomInventory(winnings.getItemBase().getWeight())) {
+            ErrorPopupMsg.sendErrorPopup(playerCharacter, 21);
+            return;
+        }
+
+        winnings.setIsID(true);
+
+        //remove gift from inventory
+
+        itemMan.consume(gift);
+
+        //add winnings to player inventory
+
+        Item playerWinnings = winnings.promoteToItem(playerCharacter);
+        itemMan.addItemToInventory(playerWinnings);
+        itemMan.updateInventory();
+
+    }
     public static void peddleFate(PlayerCharacter playerCharacter, Item gift) {
 
         //get table ID for the itembase ID
diff --git a/src/engine/net/client/handlers/ObjectActionMsgHandler.java b/src/engine/net/client/handlers/ObjectActionMsgHandler.java
index 045eac10..51dfe204 100644
--- a/src/engine/net/client/handlers/ObjectActionMsgHandler.java
+++ b/src/engine/net/client/handlers/ObjectActionMsgHandler.java
@@ -424,9 +424,9 @@ public class ObjectActionMsgHandler extends AbstractClientMsgHandler {
                             }
                             break;
                         case 31:
-                            LootManager.peddleFate(player,item);
+                            //LootManager.peddleFate(player,item);
+                            LootManager.newFatePeddler(player,item);
                             break;
-
                         case 30: //water bucket
                         case 8: //potions, tears of saedron
                         case 5: //runes, petition, warrant, scrolls
diff --git a/src/engine/objects/Contract.java b/src/engine/objects/Contract.java
index 3172b27c..1de0aed4 100644
--- a/src/engine/objects/Contract.java
+++ b/src/engine/objects/Contract.java
@@ -587,6 +587,12 @@ public class Contract extends AbstractGameObject {
             }
         }
 
+        if(this.getObjectUUID() == 1502050){
+            for(MobEquipment me : this.sellInventory){
+                me.magicValue = 1000000;
+            }
+        }
+
         if(this.getObjectUUID() == 1202){ //rune merchant
             for(MobEquipment me : this.sellInventory){
                 switch(me.getItemBase().getUUID()){