public static void RemoveById(MapleClient c, MapleInventoryType type, int itemId, int quantity, bool fromDrop, bool consume) { if (quantity < 0) { return; } var items = c.Player.Inventorys[type.Value].ListById(itemId); var remremove = quantity; foreach (var item in items) { if (remremove <= item.Quantity) { RemoveFromSlot(c, type, item.Position, (short)remremove, fromDrop, consume); remremove = 0; break; } remremove -= item.Quantity; RemoveFromSlot(c, type, item.Position, item.Quantity, fromDrop, consume); } if (remremove > 0) { throw new Exception("Not enough cheese available ( ItemID:" + itemId + ", Remove Amount:" + (quantity - remremove) + "| Current Amount:" + quantity + ")"); } }
public static void Move(MapleClient c, MapleInventoryType type, short src, short dst) { byte srcSlot = (byte)src; byte dstSlot = (byte)dst; if (srcSlot > 127 || dstSlot > 127 || srcSlot > c.Player.Inventorys[type.Value].SlotLimit || dstSlot > c.Player.Inventorys[type.Value].SlotLimit) { return; } MapleItemInformationProvider ii = MapleItemInformationProvider.Instance; IMapleItem source; IMapleItem initialTarget; if (!c.Player.Inventorys[type.Value].Inventory.TryGetValue(srcSlot, out source)) { return; } short olddstQ = -1; if (c.Player.Inventorys[type.Value].Inventory.TryGetValue(dstSlot, out initialTarget)) { olddstQ = initialTarget.Quantity; } short oldsrcQ = source.Quantity; short slotMax = ii.GetSlotMax(c, source.ItemId); bool op = c.Player.Inventorys[type.Value].Move(srcSlot, dstSlot, slotMax); if (!op) { c.Send(PacketCreator.EnableActions()); return; } if (type != MapleInventoryType.Equip && initialTarget != null && initialTarget.ItemId == source.ItemId && !ii.IsThrowingStar(source.ItemId) && !ii.IsBullet(source.ItemId)) { c.Send(olddstQ + oldsrcQ > slotMax ? PacketCreator.MoveAndMergeWithRestInventoryItem(type, srcSlot, dstSlot, (short)((olddstQ + oldsrcQ) - slotMax), slotMax) : PacketCreator.MoveAndMergeInventoryItem(type, srcSlot, dstSlot, ((Item)c.Player.Inventorys[type.Value].Inventory[dstSlot]).Quantity)); } else { c.Send(PacketCreator.MoveInventoryItem(type, src, dst, 0)); } }
public static void RemoveById(MapleClient c, MapleInventoryType type, int itemId, int quantity, bool fromDrop, bool consume, bool v) { var items = c.Player.Inventorys[type.Value].ListById(itemId); var remremove = quantity; foreach (var item in items) { if (remremove <= item.Quantity) { RemoveFromSlot(c, type, item.Position, (short)remremove, fromDrop, consume); remremove = 0; break; } remremove -= item.Quantity; RemoveFromSlot(c, type, item.Position, item.Quantity, fromDrop, consume); } if (remremove > 0) { throw new Exception("[h4x] Not enough items available (" + itemId + ", " + (quantity - remremove) + "/" + quantity + ")"); } }
public int CountItemType(int charid, MapleInventoryType itemtype) { //int it = (int)itemtype.getType(); //try //{ // Connection con = DatabaseConnection.getConnection(); // PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) AS c FROM inventoryitems WHERE characterid = ? AND inventorytype = ?"); // ps.setInt(1, charid); // ps.setInt(2, it); // ResultSet rs = ps.executeQuery(); // if (rs.next()) // { // return Integer.parseInt(rs.getString("c")); // } // rs.close(); // ps.close(); //} //catch (Exception e) //{ // e.printStackTrace(); //} return(0); }
public IMapleItem ToItem() { IMapleItem newitem; MapleInventoryType type = MapleItemInformationProvider.Instance.GetInventoryType(ItemId); if (type == MapleInventoryType.Equip) { newitem = new Equip(ItemId, 0xFF) { Expiration = Expire, UniqueId = UniqueId }; ((Equip)newitem).IsRing = IsRing; } else { newitem = new Item(ItemId, 0xFF, Quantity) { Expiration = Expire, UniqueId = UniqueId }; } return(newitem); }
public static void RemoveFromSlot(MapleClient c, MapleInventoryType type, byte slot, short quantity, bool fromDrop, bool consume = false) { if (quantity < 0) { return; } var item = c.Player.Inventorys[type.Value].Inventory[slot]; var ii = MapleItemInformationProvider.Instance; var allowZero = consume && (ii.IsThrowingStar(item.ItemId) || ii.IsBullet(item.ItemId)); c.Player.Inventorys[type.Value].RemoveItem(slot, quantity, allowZero); if (item.Quantity == 0 && !allowZero) { c.Send(PacketCreator.ClearInventoryItem(type, item.Position, fromDrop)); } else { if (!consume) { //item.l(c.Player.getName() + " removed " + quantity + ". " + item.getQuantity() + " left.", false); } c.Send(PacketCreator.UpdateInventorySlot(type, (Item)item, fromDrop)); } }
public MapleInventory(MapleInventoryType type, byte slotLimit) { Inventory = new Dictionary <byte, IMapleItem>(); SlotLimit = slotLimit; Type = type; }
public static void Drop(MapleClient c, MapleInventoryType type, byte srcSlot, short quantity) { MapleItemInformationProvider ii = MapleItemInformationProvider.Instance; if (srcSlot > 127) { type = MapleInventoryType.Equipped; } IMapleItem source = c.Player.Inventorys[type.Value].Inventory[srcSlot]; if (quantity > ii.GetSlotMax(c, source.ItemId)) { //try //{ // c.getChannelServer().getWorldInterface().broadcastGMMessage(c.Player.getName(), PacketCreator.serverNotice(0, c.Player.getName() + " is dropping more than slotMax.").getBytes()); //} //catch (Throwable u) //{ //} } if (quantity < 0 || quantity == 0 && !ii.IsThrowingStar(source.ItemId) && !ii.IsBullet(source.ItemId)) { //String message = "Dropping " + quantity + " " + (source == null ? "?" : source.ItemId) + " (" +type.name() + "/" + srcSlot + ")"; //log.info(MapleClient.getLogMessage(c, message)); c.Close(); // disconnect the client as is inventory is inconsistent with the serverside inventory return; } Point dropPos = c.Player.Position; if (quantity < source.Quantity && !ii.IsThrowingStar(source.ItemId) && !ii.IsBullet(source.ItemId)) { IMapleItem target = source.Copy(); target.Quantity = quantity; source.Quantity -= quantity; c.Send(PacketCreator.DropInventoryItemUpdate(type, source)); bool weddingRing = source.ItemId == 1112804; bool liRing = source.ItemId == 1112405; if (weddingRing) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, target, dropPos); } else if (liRing) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, target, dropPos); } else if (c.Player.Map.Everlast) { if (ii.IsDropRestricted(target.ItemId)) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, target, dropPos); } else { c.Player.Map.spawnItemDrop(c.Player, c.Player, target, dropPos, true, false); } } else { if (ii.IsDropRestricted(target.ItemId)) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, target, dropPos); } else { c.Player.Map.spawnItemDrop(c.Player, c.Player, target, dropPos, true, false); } } } else { c.Player.Inventorys[type.Value].RemoveSlot(srcSlot); c.Send(PacketCreator.DropInventoryItem(srcSlot > 127 ? MapleInventoryType.Equip : type, srcSlot)); bool liRing = source.ItemId == 1112405; if (srcSlot > 127) { c.Player.EquipChanged(); } if (c.Player.Map.Everlast) { if (ii.IsDropRestricted(source.ItemId)) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, source, dropPos); } else { c.Player.Map.spawnItemDrop(c.Player, c.Player, source, dropPos, true, false); if (liRing) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, source, dropPos); } else { c.Player.Map.spawnItemDrop(c.Player, c.Player, source, dropPos, true, true); } } } else { if (ii.IsDropRestricted(source.ItemId)) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, source, dropPos); } else { if (liRing) { c.Player.Map.disappearingItemDrop(c.Player, c.Player, source, dropPos); } else { c.Player.Map.spawnItemDrop(c.Player, c.Player, source, dropPos, true, true); } } } } }