From 5a99a114b480e02f3826be6eac644b3b39c12249 Mon Sep 17 00:00:00 2001 From: Matanos Date: Wed, 16 Oct 2024 01:08:40 +0300 Subject: [PATCH 1/5] added Merchant Remote Control exists checking in inventory --- src/main/java/constants/id/ItemId.java | 1 + .../net/server/channel/handlers/RemoteStoreHandler.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/constants/id/ItemId.java b/src/main/java/constants/id/ItemId.java index 82044196c2c..e27b8feb40b 100644 --- a/src/main/java/constants/id/ItemId.java +++ b/src/main/java/constants/id/ItemId.java @@ -303,6 +303,7 @@ public static boolean isWeddingRing(int itemId) { public static final int WORLD_TRANSFER = 5401000; public static final int MAPLE_LIFE_B = 5432000; public static final int VICIOUS_HAMMER = 5570000; + public static final int REMOTE_CONTROLLER = 5470000; public static final int NX_CARD_100 = 4031865; public static final int NX_CARD_250 = 4031866; diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index c5aff78f62c..a8a31d5dbab 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -24,6 +24,8 @@ import client.Character; import client.Client; +import client.inventory.InventoryType; +import constants.id.ItemId; import net.AbstractPacketHandler; import net.packet.InPacket; import server.maps.HiredMerchant; @@ -39,6 +41,13 @@ public void handlePacket(InPacket p, Client c) { HiredMerchant hm = getMerchant(c); if (hm != null && hm.isOwner(chr)) { if (hm.getChannel() == chr.getClient().getChannel()) { + boolean playerIsOnShopMap = chr.getMapId() == hm.getMapId(); + if(!playerIsOnShopMap) { + var remoteControl = chr.getInventory(InventoryType.CASH).findById(ItemId.REMOTE_CONTROLLER); + if(remoteControl == null) { + return; + } + } hm.visitShop(chr); } else { c.sendPacket(PacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); From b63c30fe9e2c5bd09373698adce1d706f4af035d Mon Sep 17 00:00:00 2001 From: Matanos Date: Wed, 16 Oct 2024 01:14:11 +0300 Subject: [PATCH 2/5] added Merchant Remote Control exists checking in inventory --- .../java/net/server/channel/handlers/RemoteStoreHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index a8a31d5dbab..f703c1b4629 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -44,9 +44,8 @@ public void handlePacket(InPacket p, Client c) { boolean playerIsOnShopMap = chr.getMapId() == hm.getMapId(); if(!playerIsOnShopMap) { var remoteControl = chr.getInventory(InventoryType.CASH).findById(ItemId.REMOTE_CONTROLLER); - if(remoteControl == null) { + if(remoteControl == null) return; - } } hm.visitShop(chr); } else { From b0785496137ccb0426b650dacf4b3b533ea07016 Mon Sep 17 00:00:00 2001 From: Matanos Date: Wed, 16 Oct 2024 17:32:47 +0300 Subject: [PATCH 3/5] fixed Hired Merchant duplication --- src/main/java/net/server/channel/Channel.java | 6 +++++- .../channel/handlers/PlayerInteractionHandler.java | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index 13a0d22a95d..4a58646f5e0 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -365,10 +365,14 @@ public Map getHiredMerchants() { } } - public void addHiredMerchant(int chrid, HiredMerchant hm) { + public boolean addHiredMerchant(int chrid, HiredMerchant hm) { merchWlock.lock(); try { + if(hiredMerchants.containsKey(chrid)) + return false; + hiredMerchants.put(chrid, hm); + return true; } finally { merchWlock.unlock(); } diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index f8680e757a1..2cf8084561e 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -265,10 +265,13 @@ public final void handlePacket(InPacket p, Client c) { //c.sendPacket(PacketCreator.getPlayerShopRemoveVisitor(1)); } else if (ItemConstants.isHiredMerchant(itemId)) { HiredMerchant merchant = new HiredMerchant(chr, desc, itemId); - chr.setHiredMerchant(merchant); - c.getWorldServer().registerHiredMerchant(merchant); - chr.getClient().getChannelServer().addHiredMerchant(chr.getId(), merchant); - chr.sendPacket(PacketCreator.getHiredMerchant(chr, merchant, true)); + boolean merchantAdded = chr.getClient().getChannelServer().addHiredMerchant(chr.getId(), merchant); + if(merchantAdded){ + chr.setHiredMerchant(merchant); + c.getWorldServer().registerHiredMerchant(merchant); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, merchant, true)); + System.out.println("new shop creation."); + } } } } else if (mode == Action.INVITE.getCode()) { From f906fc21a33c09d28c733097dfcced79c9b1d770 Mon Sep 17 00:00:00 2001 From: Matanos Date: Thu, 17 Oct 2024 09:30:28 +0300 Subject: [PATCH 4/5] fixed Hired Merchant duplication --- src/main/java/net/server/channel/Channel.java | 5 +++-- .../server/channel/handlers/PlayerInteractionHandler.java | 2 +- .../net/server/channel/handlers/RemoteStoreHandler.java | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index 4a58646f5e0..f145628da6f 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -118,7 +118,8 @@ public final class Channel { private Set ongoingCathedralGuests = null; private long ongoingStartTime; - private final Lock lock = new ReentrantLock(true);; + private final Lock lock = new ReentrantLock(true); + ; private final Lock merchRlock; private final Lock merchWlock; @@ -368,7 +369,7 @@ public Map getHiredMerchants() { public boolean addHiredMerchant(int chrid, HiredMerchant hm) { merchWlock.lock(); try { - if(hiredMerchants.containsKey(chrid)) + if (hiredMerchants.containsKey(chrid)) return false; hiredMerchants.put(chrid, hm); diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index 2cf8084561e..616ef6a5672 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -266,7 +266,7 @@ public final void handlePacket(InPacket p, Client c) { } else if (ItemConstants.isHiredMerchant(itemId)) { HiredMerchant merchant = new HiredMerchant(chr, desc, itemId); boolean merchantAdded = chr.getClient().getChannelServer().addHiredMerchant(chr.getId(), merchant); - if(merchantAdded){ + if (merchantAdded) { chr.setHiredMerchant(merchant); c.getWorldServer().registerHiredMerchant(merchant); chr.sendPacket(PacketCreator.getHiredMerchant(chr, merchant, true)); diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index f703c1b4629..a2bcdc74611 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -41,10 +41,10 @@ public void handlePacket(InPacket p, Client c) { HiredMerchant hm = getMerchant(c); if (hm != null && hm.isOwner(chr)) { if (hm.getChannel() == chr.getClient().getChannel()) { - boolean playerIsOnShopMap = chr.getMapId() == hm.getMapId(); - if(!playerIsOnShopMap) { + boolean isPlayerOnMerchantMap = chr.getMapId() == hm.getMapId(); + if (!isPlayerOnMerchantMap) { var remoteControl = chr.getInventory(InventoryType.CASH).findById(ItemId.REMOTE_CONTROLLER); - if(remoteControl == null) + if (remoteControl == null) return; } hm.visitShop(chr); From 5b66f14894564533a1af8f24cbd9682098b92bcf Mon Sep 17 00:00:00 2001 From: Matanos Date: Thu, 17 Oct 2024 09:43:27 +0300 Subject: [PATCH 5/5] re-formated spaces --- src/main/java/net/server/channel/Channel.java | 3 ++- .../java/net/server/channel/handlers/RemoteStoreHandler.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index f145628da6f..69fd6389b93 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -369,8 +369,9 @@ public Map getHiredMerchants() { public boolean addHiredMerchant(int chrid, HiredMerchant hm) { merchWlock.lock(); try { - if (hiredMerchants.containsKey(chrid)) + if (hiredMerchants.containsKey(chrid)) { return false; + } hiredMerchants.put(chrid, hm); return true; diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index a2bcdc74611..2502d7324cb 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -44,8 +44,9 @@ public void handlePacket(InPacket p, Client c) { boolean isPlayerOnMerchantMap = chr.getMapId() == hm.getMapId(); if (!isPlayerOnMerchantMap) { var remoteControl = chr.getInventory(InventoryType.CASH).findById(ItemId.REMOTE_CONTROLLER); - if (remoteControl == null) + if (remoteControl == null) { return; + } } hm.visitShop(chr); } else {