package handling.cashshop.handler; import client.MapleClient; import client.inventory.Equip; import client.inventory.Item; import client.inventory.MapleInventoryType; import constants.GameConstants; import server.MTSCart; import server.MTSStorage; import server.MapleInventoryManipulator; import server.MapleItemInformationProvider; import tools.data.LittleEndianAccessor; import tools.packet.MTSCSPacket; public class MTSOperation { public static void MTSOperation(LittleEndianAccessor slea, MapleClient c) { MTSCart cart = MTSStorage.getInstance().getCart(c.getPlayer().getId()); if (slea.available() <= 0L) { doMTSPackets(cart, c); return; } byte op = slea.readByte(); if (op == 2) { byte invType = slea.readByte(); if ((invType != 1) && (invType != 2)) { c.getSession().write(MTSCSPacket.getMTSFailSell()); doMTSPackets(cart, c); return; } int itemid = slea.readInt(); if (slea.readByte() != 0) { c.getSession().write(MTSCSPacket.getMTSFailSell()); doMTSPackets(cart, c); return; } slea.skip(12); short stars = 1; short quantity = 1; byte slot = 0; if (invType == 1) { slea.skip(32); } else { stars = slea.readShort(); } slea.readMapleAsciiString(); if (invType == 1) { slea.skip(50); slot = (byte) slea.readInt(); slea.skip(4); } else { slea.readShort(); if ((GameConstants.isThrowingStar(itemid)) || (GameConstants.isBullet(itemid))) { slea.skip(8); } slot = (byte) slea.readInt(); if ((GameConstants.isThrowingStar(itemid)) || (GameConstants.isBullet(itemid))) { quantity = stars; slea.skip(4); } else { quantity = (short) slea.readInt(); } } int price = slea.readInt(); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); MapleInventoryType type = GameConstants.getInventoryType(itemid); Item item = c.getPlayer().getInventory(type).getItem((short) slot).copy(); if ((ii.isCash(itemid)) || (quantity <= 0) || (item == null) || (item.getQuantity() <= 0) || (item.getItemId() != itemid) || (item.getUniqueId() > 0) || (item.getQuantity() < quantity) || (price < 100) || (c.getPlayer().getMeso() < 10000L) || (cart.getNotYetSold().size() >= 10) || (item.getExpiration() > -1L) || (item.getFlag() > 0)) { c.getSession().write(MTSCSPacket.getMTSFailSell()); doMTSPackets(cart, c); return; } if (type == MapleInventoryType.EQUIP) { Equip eq = (Equip) item; if ((eq.getState() > 0) || (eq.getEnhance() > 0) || (eq.getDurability() > -1)) { c.getSession().write(MTSCSPacket.getMTSFailSell()); doMTSPackets(cart, c); return; } } if ((quantity >= 50) && (item.getItemId() == 2340000)) { c.setMonitored(true); } long expiration = System.currentTimeMillis() + 604800000L; item.setQuantity(quantity); MTSStorage.getInstance().addToBuyNow(cart, item, price, c.getPlayer().getId(), c.getPlayer().getName(), expiration); MapleInventoryManipulator.removeFromSlot(c, type, (short) slot, quantity, false); c.getPlayer().gainMeso(-10000L, false); c.getSession().write(MTSCSPacket.getMTSConfirmSell()); } else if (op == 5) { cart.changeInfo(slea.readInt(), slea.readInt(), slea.readInt()); } else if (op == 6) { cart.changeInfo(slea.readInt(), slea.readInt(), 0); slea.readInt(); cart.changeCurrentView(MTSStorage.getInstance().getSearch(slea.readInt() > 0, slea.readMapleAsciiString(), cart.getType(), cart.getTab())); } else if (op == 7) { if (!MTSStorage.getInstance().removeFromBuyNow(slea.readInt(), c.getPlayer().getId(), true)) { c.getSession().write(MTSCSPacket.getMTSFailCancel()); } else { c.getSession().write(MTSCSPacket.getMTSConfirmCancel()); sendMTSPackets(cart, c, true); } } else if (op == 8) { int id = 2147483647 - slea.readInt(); if (id >= cart.getInventory().size()) { c.getPlayer().dropMessage(1, "Please try it again later."); sendMTSPackets(cart, c, true); return; } Item item = (Item) cart.getInventory().get(id); if ((item != null) && (item.getQuantity() > 0) && (MapleInventoryManipulator.checkSpace(c, item.getItemId(), item.getQuantity(), item.getOwner()))) { Item item_ = item.copy(); short pos = MapleInventoryManipulator.addbyItem(c, item_, true); if (pos >= 0) { if (item_.getPet() != null) { item_.getPet().setInventoryPosition(pos); c.getPlayer().addPet(item_.getPet()); } cart.removeFromInventory(item); c.getSession().write(MTSCSPacket.getMTSConfirmTransfer(GameConstants.getInventoryType(item_.getItemId()).getType(), pos)); sendMTSPackets(cart, c, true); return; } c.getSession().write(MTSCSPacket.getMTSFailBuy()); } else { c.getSession().write(MTSCSPacket.getMTSFailBuy()); } } else if (op == 9) { int id = slea.readInt(); if ((MTSStorage.getInstance().checkCart(id, c.getPlayer().getId())) && (cart.addToCart(id))) { c.getSession().write(MTSCSPacket.addToCartMessage(false, false)); } else { c.getSession().write(MTSCSPacket.addToCartMessage(true, false)); } } else if (op == 10) { int id = slea.readInt(); if (cart.getCart().contains(Integer.valueOf(id))) { cart.removeFromCart(id); c.getSession().write(MTSCSPacket.addToCartMessage(false, true)); } else { c.getSession().write(MTSCSPacket.addToCartMessage(true, true)); } } else if ((op == 16) || (op == 17)) { MTSStorage.MTSItemInfo mts = MTSStorage.getInstance().getSingleItem(slea.readInt()); if ((mts != null) && (mts.getCharacterId() != c.getPlayer().getId())) { if (c.getPlayer().getCSPoints(1) > mts.getRealPrice()) { if (MTSStorage.getInstance().removeFromBuyNow(mts.getId(), c.getPlayer().getId(), false)) { c.getPlayer().modifyCSPoints(1, -mts.getRealPrice(), false); MTSStorage.getInstance().getCart(mts.getCharacterId()).increaseOwedNX(mts.getPrice()); c.getSession().write(MTSCSPacket.getMTSConfirmBuy()); sendMTSPackets(cart, c, true); return; } c.getSession().write(MTSCSPacket.getMTSFailBuy()); } else { c.getSession().write(MTSCSPacket.getMTSFailBuy()); } } else { c.getSession().write(MTSCSPacket.getMTSFailBuy()); } } else if (!c.getPlayer().isAdmin()); doMTSPackets(cart, c); } public static void MTSUpdate(MTSCart cart, MapleClient c) { int a = MTSStorage.getInstance().getCart(c.getPlayer().getId()).getSetOwedNX(); c.getPlayer().modifyCSPoints(1, GameConstants.GMS ? a * 2 : a, false); c.getSession().write(MTSCSPacket.getMTSWantedListingOver(0, 0)); doMTSPackets(cart, c); } private static void doMTSPackets(MTSCart cart, MapleClient c) { sendMTSPackets(cart, c, false); } private static void sendMTSPackets(MTSCart cart, MapleClient c, boolean changed) { c.getSession().write(MTSStorage.getInstance().getCurrentMTS(cart)); c.getSession().write(MTSStorage.getInstance().getCurrentNotYetSold(cart)); c.getSession().write(MTSStorage.getInstance().getCurrentTransfer(cart, changed)); c.getSession().write(MTSCSPacket.showMTSCash(c.getPlayer())); c.getSession().write(MTSCSPacket.enableCSUse()); MTSStorage.getInstance().checkExpirations(); } }