public static void drop(MapleClient c, MapleInventoryType type, byte src, short quantity) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); if (src < 0) { type = MapleInventoryType.EQUIPPED; } IItem source = c.getPlayer().getInventory(type).getItem(src); int itemId = source.getItemId(); if (itemId == 1302065 || itemId == 1302033) { c.getPlayer().hasflag = false; c.getPlayer().setCanPickup(true); } if (itemId == 1112000) { c.getPlayer().dropMessage("Super Rebirth rings cannot be dropped or traded."); return; } if (itemId == 1012076) { c.getPlayer().dropMessage("The Beta Mask cannot be traded or dropped."); return; } if (c.getPlayer().getItemEffect() == itemId && source.getQuantity() == 1) { c.getPlayer().setItemEffect(0); c.getPlayer() .getMap() .broadcastMessage(MaplePacketCreator.itemEffect(c.getPlayer().getId(), 0)); } else if (itemId == 5370000 || itemId == 5370001) { if (c.getPlayer().getItemQuantity(itemId, false) == 1) { c.getPlayer().setChalkboard(null); } } if (itemId == 4000076) { c.getPlayer().mapCheck(); } if (quantity < 0 || source == null || quantity == 0 && !ii.isThrowingStar(itemId) && !ii.isBullet(itemId)) { String message = "Dropping " + quantity + " " + (source == null ? "?" : itemId) + " (" + type.name() + "/" + src + ")"; // AutobanManager.getInstance().addPoints(c, 1000, 0, message); log.info(MapleClient.getLogMessage(c, message)); c.getSession() .close(); // disconnect the client as is inventory is inconsistent with the serverside // inventory -> f**k return; } Point dropPos = new Point(c.getPlayer().getPosition()); // dropPos.y -= 99; if (quantity < source.getQuantity() && !ii.isThrowingStar(itemId) && !ii.isBullet(itemId)) { IItem target = source.copy(); target.setQuantity(quantity); source.setQuantity((short) (source.getQuantity() - quantity)); c.getSession().write(MaplePacketCreator.dropInventoryItemUpdate(type, source)); boolean weddingRing = source.getItemId() == 1112803 || source.getItemId() == 1112806 || source.getItemId() == 1112807 || source.getItemId() == 1112809; if (weddingRing) { c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos); } else if (c.getPlayer().getMap().getEverlast()) { if (!c.getChannelServer().allowUndroppablesDrop() && ii.isDropRestricted(target.getItemId())) { c.getPlayer() .getMap() .disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos); } else { c.getPlayer() .getMap() .spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, false); } } else { if (!c.getChannelServer().allowUndroppablesDrop() && ii.isDropRestricted(target.getItemId())) { c.getPlayer() .getMap() .disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos); } else { c.getPlayer() .getMap() .spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, true); } } } else { c.getPlayer().getInventory(type).removeSlot(src); c.getSession() .write( MaplePacketCreator.dropInventoryItem( (src < 0 ? MapleInventoryType.EQUIP : type), src)); if (src < 0) { c.getPlayer().equipChanged(); } if (c.getPlayer().getMap().getEverlast()) { if (!c.getChannelServer().allowUndroppablesDrop() && ii.isDropRestricted(itemId)) { c.getPlayer() .getMap() .disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos); } else { c.getPlayer() .getMap() .spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, false); } } else { if (!c.getChannelServer().allowUndroppablesDrop() && ii.isDropRestricted(itemId)) { c.getPlayer() .getMap() .disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos); } else { c.getPlayer() .getMap() .spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, true); } } } }