I don't really expect much by posting this but I would REALLY appreciate any help at all which could help me figure out a fix for this...
I am using odinms xiuzsource v0.62.
If a player is in the process of setting up a merchant, if the player D/C's, any items that have been places in the merchant will be lost.
I have seen a similar fix for lithium base but I am unsure how to modify the code to work for me.
This probably happens to regular stores also.
A fix like what happens in trades would be perfect. If you put an item in trade and get d/c'd a message box appears saying the trade was cancelled and items are put back in the inventory before you d/c.
I'm prety sure a change needs to be made in this part of playerinteractionmanager.java:
Code:} else if (mode == Action.SET_ITEMS.getCode()) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); MapleInventoryType ivType = MapleInventoryType.getByType(slea.readByte()); IItem item = c.getPlayer().getInventory(ivType).getItem((byte) slea.readShort()); long checkq = slea.readShort(); short quantity = (short)(int)checkq; byte targetSlot = slea.readByte(); if (c.getPlayer().getTrade() != null && item != null) { if (checkq > 4000) { AutobanManager.getInstance().autoban(c, "XSource| PE while in trade."); } if ((quantity <= item.getQuantity() && quantity >= 0) || ii.isThrowingStar(item.getItemId()) || ii.isBullet(item.getItemId())) { if (!c.getChannelServer().allowUndroppablesDrop() && ii.isDropRestricted(item.getItemId())) { c.getSession().write(MaplePacketCreator.enableActions()); return; } IItem tradeItem = item.copy(); if (ii.isThrowingStar(item.getItemId()) || ii.isBullet(item.getItemId())) { tradeItem.setQuantity(item.getQuantity()); MapleInventoryManipulator.removeFromSlot(c, ivType, item.getPosition(), item.getQuantity(), true); } else { tradeItem.setQuantity(quantity); MapleInventoryManipulator.removeFromSlot(c, ivType, item.getPosition(), quantity, true); } tradeItem.setPosition(targetSlot); c.getPlayer().getTrade().addItem(tradeItem); return; } } } else if (mode == Action.CONFIRM.getCode()) { MapleTrade.completeTrade(c.getPlayer()); } else if (mode == Action.ADD_ITEM.getCode() || mode == Action.PUT_ITEM.getCode()) { MapleInventoryType type = MapleInventoryType.getByType(slea.readByte()); byte slot = (byte) slea.readShort(); short bundles = slea.readShort(); short perBundle = slea.readShort(); int price = slea.readInt(); IItem ivItem = c.getPlayer().getInventory(type).getItem(slot); IItem sellItem = ivItem.copy(); sellItem.setQuantity(perBundle); MaplePlayerShopItem item = new MaplePlayerShopItem(sellItem, bundles, price); IPlayerInteractionManager shop = c.getPlayer().getInteraction(); long checkquantity = bundles * perBundle; int checkiquantity = bundles * perBundle; short checksmquantity = (short)(bundles * perBundle); if (shop != null && shop.isOwner(c.getPlayer())) { if (ivItem != null && ivItem.getQuantity() >= bundles * perBundle) { if (price < 0) { AutobanManager.getInstance().autoban(c, "XSource| PE adding a negative priced item."); return; } if (bundles <= 0 || perBundle <= 0 || checkquantity > 20000 || checksmquantity < 0 || checkiquantity < 0 || checkiquantity > 20000) { AutobanManager.getInstance().autoban(c, "XSource| PE Player Shop item: " + sellItem.getItemId()); return; } if (bundles > 10 || perBundle > 4000) return; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); if (ii.isThrowingStar(ivItem.getItemId()) || ii.isBullet(ivItem.getItemId())) { MapleInventoryManipulator.removeFromSlot(c, type, slot, ivItem.getQuantity(), true); } else { MapleInventoryManipulator.removeFromSlot(c, type, slot, (short) (bundles * perBundle), true); } shop.addItem(item); c.getSession().write(MaplePacketCreator.shopItemUpdate(shop)); } } } else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) { int item = slea.readByte(); short quantity = slea.readShort(); IPlayerInteractionManager shop = c.getPlayer().getInteraction(); shop.buy(c, item, quantity); shop.broadcast(MaplePacketCreator.shopItemUpdate(shop), true); } else if (mode == Action.TAKE_ITEM_BACK.getCode() || mode == Action.REMOVE_ITEM.getCode()) { int slot = slea.readShort(); IPlayerInteractionManager shop = c.getPlayer().getInteraction(); if (shop != null && shop.isOwner(c.getPlayer())) { MaplePlayerShopItem item = shop.getItems().get(slot); if (item.getBundles() > 0) { IItem iitem = item.getItem(); iitem.setQuantity(item.getBundles()); MapleInventoryManipulator.addFromDrop(c, iitem); } shop.removeFromSlot(slot); c.getSession().write(MaplePacketCreator.shopItemUpdate(shop)); } } else if (mode == Action.CLOSE_MERCHANT.getCode()) { IPlayerInteractionManager merchant = c.getPlayer().getInteraction(); if (merchant != null && merchant.getShopType() == 1 && merchant.isOwner(c.getPlayer())) { boolean save = false; for (MaplePlayerShopItem items : merchant.getItems()) { if (items.getBundles() > 0) { IItem item = items.getItem(); item.setQuantity((short) (items.getBundles() * item.getQuantity())); if (MapleInventoryManipulator.addFromDrop(c, item)) { items.setBundles((short) 0); } else { save = true; break; } } } c.getSession().write(MaplePacketCreator.shopErrorMessage(0x10, 0)); merchant.closeShop(save); c.getPlayer().setInteraction(null); c.getPlayer().setHasMerchant(false); } } else if (mode == Action.MAINTENANCE_OFF.getCode()) { HiredMerchant merchant = (HiredMerchant) c.getPlayer().getInteraction(); if (merchant != null && merchant.isOwner(c.getPlayer())) { merchant.setOpen(true); merchant.tempItemsUpdate(); } } else if (mode == Action.BAN_PLAYER.getCode()) { IPlayerInteractionManager imps = c.getPlayer().getInteraction(); if (imps != null && imps.isOwner(c.getPlayer())) { ((MaplePlayerShop) imps).banPlayer(slea.readMapleAsciiString()); } } else if (mode == Action.MERCHANT_ORGANIZE.getCode()) { IPlayerInteractionManager imps = c.getPlayer().getInteraction(); for (int i = 0; i < imps.getItems().size(); i++) { if (imps.getItems().get(i).getBundles() == 0) { imps.removeFromSlot(i); } } c.getSession().write(MaplePacketCreator.shopItemUpdate(imps)); } } }


Reply With Quote![[Looking for fix] Merchant Set Up D/C = Lose Items](http://ragezone.com/hyper728.png)

