From 4194aa09d15cf5bf3be01da5f7c11782fced4123 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Sun, 24 Mar 2024 08:07:24 -0400 Subject: [PATCH] Rewrite of handler --- .../client/handlers/BuyFromNPCMsgHandler.java | 177 +++++------------- 1 file changed, 51 insertions(+), 126 deletions(-) diff --git a/src/engine/net/client/handlers/BuyFromNPCMsgHandler.java b/src/engine/net/client/handlers/BuyFromNPCMsgHandler.java index 900292b3..e281f2bc 100644 --- a/src/engine/net/client/handlers/BuyFromNPCMsgHandler.java +++ b/src/engine/net/client/handlers/BuyFromNPCMsgHandler.java @@ -9,16 +9,14 @@ package engine.net.client.handlers; import engine.Enum; -import engine.Enum.DispatchChannel; import engine.exception.MsgSendException; import engine.gameManager.SessionManager; -import engine.net.Dispatch; -import engine.net.DispatchMessage; import engine.net.client.ClientConnection; import engine.net.client.msg.BuyFromNPCMsg; import engine.net.client.msg.ClientNetMsg; import engine.net.client.msg.ErrorPopupMsg; import engine.objects.*; +import org.pmw.tinylog.Logger; import java.util.ArrayList; @@ -39,6 +37,7 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler { buyFromNPCMsg = (BuyFromNPCMsg) baseMsg; PlayerCharacter sourcePlayer = SessionManager.getPlayerCharacter(origin); + Item vendorItem; if (sourcePlayer == null) return true; @@ -61,21 +60,15 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler { if (gold == null) return true; - Item buy = Item.getFromCache(buyFromNPCMsg.getItemID()); + ArrayList sellInventory = npc.getContract().getSellInventory(); - if (buy == null) + if (sellInventory == null) return true; - if (buyFromNPCMsg.getItemType() == Enum.GameObjectType.Item.ordinal()) { - - ArrayList sellInventory = npc.getContract().getSellInventory(); - - if (sellInventory == null) - return true; - + if (buyFromNPCMsg.getItemID() < 0) { for (Item me : sellInventory) { - if (me.templateID == buy.templateID) { + if (me.objectUUID == buyFromNPCMsg.getItemID()) { //test room available for item if (!itemMan.hasRoomInventory(me.template.item_wt)) @@ -115,150 +108,82 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler { return true; } - buy = Item.createItemForPlayer(sourcePlayer, me.templateID); + vendorItem = Item.createItemForPlayer(sourcePlayer, me.templateID); - if (buy != null) { - // me.transferEnchants(buy); - itemMan.addItemToInventory(buy); + if (vendorItem != null) { + // me.transferEnchants(buy); + itemMan.addItemToInventory(vendorItem); //itemMan.updateInventory(); } } } - } else if (buyFromNPCMsg.getItemType() == Enum.GameObjectType.Item.ordinal()) { - - CharacterItemManager npcCim = npc.charItemManager; - - if (npcCim == null) - return true; - - buy = Item.getFromCache(buyFromNPCMsg.getItemID()); - - if (buy == null) - return true; - - if (!npcCim.inventoryContains(buy)) - return true; - - //test room available for item - if (!itemMan.hasRoomInventory(buy.template.item_wt)) - return true; - - //TODO test cost and subtract goldItem - - //TODO CHnage this if we ever put NPc city npcs in buildings. - int cost = buy.template.item_value; - - if (buy.flags.contains(Enum.ItemFlags.Identified) || buy.isCustomValue()) - cost = buy.getMagicValue(); - - float bargain = sourcePlayer.getBargain(); - - float profit = npc.getSellPercent(sourcePlayer) - bargain; - - if (profit < 1) - profit = 1; - - if (!buy.isCustomValue()) - cost *= profit; - else - cost = buy.getValue(); - - - if (gold.getNumOfItems() - cost < 0) { - ErrorPopupMsg.sendErrorPopup(sourcePlayer, 128); // Insufficient Gold - return true; - } - - Building building = (!npc.isStatic()) ? npc.getBuilding() : null; - - if (building != null) - if (building.getProtectionState().equals(Enum.ProtectionState.NPC)) - building = null; - - int buildingDeposit = cost; - - if (building != null && (building.getStrongboxValue() + buildingDeposit) > building.getMaxGold()) { - ErrorPopupMsg.sendErrorPopup(sourcePlayer, 206); - return true; - } + return true; + } - if (!itemMan.buyFromNPC(building, cost, buildingDeposit)) { - ErrorPopupMsg.sendErrorPopup(sourcePlayer, 110); - return true; - } + CharacterItemManager npcCim = npc.charItemManager; - if (buy != null) - itemMan.buyFromNPC(buy, npc); + if (npcCim == null) + return true; - } else if (buyFromNPCMsg.getItemType() == Enum.GameObjectType.MobLoot.ordinal()) { + vendorItem = Item.getFromCache(buyFromNPCMsg.getItemID()); - CharacterItemManager npcCim = npc.charItemManager; + if (vendorItem == null) + return true; - if (npcCim == null) - return true; + //test room available for item - buy = MobLoot.getFromCache(buyFromNPCMsg.getItemID()); + if (!itemMan.hasRoomInventory(vendorItem.template.item_wt)) + return true; - if (buy == null) - return true; + int cost = vendorItem.template.item_value; - if (!npcCim.inventoryContains(buy)) - return true; + if (vendorItem.flags.contains(Enum.ItemFlags.Identified) || vendorItem.isCustomValue()) + cost = vendorItem.getMagicValue(); - //test room available for item - if (!itemMan.hasRoomInventory(buy.template.item_wt)) - return true; + float bargain = sourcePlayer.getBargain(); - //TODO test cost and subtract goldItem + float profit = npc.getSellPercent(sourcePlayer) - bargain; - //TODO CHnage this if we ever put NPc city npcs in buildings. + if (profit < 1) + profit = 1; - int cost = buy.getMagicValue(); - cost *= npc.getSellPercent(sourcePlayer); + if (!vendorItem.isCustomValue()) + cost *= profit; + else + cost = vendorItem.getValue(); - if (gold.getNumOfItems() - cost < 0) { - ErrorPopupMsg.sendErrorPopup(sourcePlayer, 128); // Insufficient Gold - return true; - } + if (gold.getNumOfItems() - cost < 0) { + ErrorPopupMsg.sendErrorPopup(sourcePlayer, 128); // Insufficient Gold + return true; + } - Building building = (!npc.isStatic()) ? npc.getBuilding() : null; + Building building = (!npc.isStatic()) ? npc.getBuilding() : null; - if (building != null && building.getProtectionState().equals(Enum.ProtectionState.NPC)) + if (building != null) + if (building.getProtectionState().equals(Enum.ProtectionState.NPC)) building = null; - int buildingDeposit = cost; - - if (building != null && (building.getStrongboxValue() + buildingDeposit) > building.getMaxGold()) { - ErrorPopupMsg.sendErrorPopup(sourcePlayer, 206); - return true; - } - if (!itemMan.buyFromNPC(building, cost, buildingDeposit)) - return true; + int buildingDeposit = cost; - if (buy != null) - itemMan.buyFromNPC(buy, npc); - - } else + if (building != null && (building.getStrongboxValue() + buildingDeposit) > building.getMaxGold()) { + ErrorPopupMsg.sendErrorPopup(sourcePlayer, 206); return true; + } - if (buy != null) { - - buyFromNPCMsg.setItem(buy); - //send the buy message back to update player - // msg.setItemType(buy.getObjectType().ordinal()); - // msg.setItemID(buy.getObjectUUID()); - Dispatch dispatch = Dispatch.borrow(sourcePlayer, buyFromNPCMsg); - DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); - itemMan.updateInventory(); + if (!itemMan.buyFromNPC(building, cost, buildingDeposit)) { + ErrorPopupMsg.sendErrorPopup(sourcePlayer, 110); + return true; } + if (vendorItem != null) + itemMan.buyFromNPC(vendorItem, npc); + return true; + } catch (Exception e) { + Logger.error(e); } finally { origin.buyLock.unlock(); } - } else { - ErrorPopupMsg.sendErrorPopup(origin.getPlayerCharacter(), 12); // All production slots taken } return true; } - } \ No newline at end of file