diff --git a/2006Redone Server/src/com/rebotted/game/players/Player.java b/2006Redone Server/src/com/rebotted/game/players/Player.java index 96379b29..4849e9eb 100644 --- a/2006Redone Server/src/com/rebotted/game/players/Player.java +++ b/2006Redone Server/src/com/rebotted/game/players/Player.java @@ -969,6 +969,8 @@ public abstract class Player { public int soundVolume = 10; + public boolean soundDone; + /** * Outputs a send packet which is built from the data params provided * towards a connected user client channel. diff --git a/2006Redone Server/src/com/rebotted/net/packets/impl/PickupItem.java b/2006Redone Server/src/com/rebotted/net/packets/impl/PickupItem.java index 9ab6cbe2..13d9760a 100644 --- a/2006Redone Server/src/com/rebotted/net/packets/impl/PickupItem.java +++ b/2006Redone Server/src/com/rebotted/net/packets/impl/PickupItem.java @@ -27,6 +27,14 @@ public class PickupItem implements PacketType { player.pItemY = player.getInStream().readSignedWordBigEndian(); player.pItemId = player.getInStream().readUnsignedWord(); player.pItemX = player.getInStream().readSignedWordBigEndian(); + if (player.getItemAssistant().freeSlots() < 1) + { + if (!(player.getItemAssistant().playerHasItem(player.pItemId) && player.getItemAssistant().isStackable(player.pItemId))) + { + player.getPacketSender().sendMessage("Not enough inventory space..."); + return; + } + } if (Math.abs(player.getX() - player.pItemX) > 25 || Math.abs(player.getY() - player.pItemY) > 25) { player.resetWalkingQueue(); return; @@ -64,34 +72,37 @@ public class PickupItem implements PacketType { } SkillHandler.resetSkills(player); player.getCombatAssistant().resetPlayerAttack(); - if (player.getX() == player.pItemX && player.getY() == player.pItemY - || player.getX() - 1 == player.pItemX && player.getY() == player.pItemY - || player.getY() - 1 == player.pItemY && player.getX() == player.pItemX - || player.getX() + 1 == player.pItemX && player.getY() == player.pItemY - || player.getY() + 1 == player.pItemY && player.getX() == player.pItemX) { - GameEngine.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, - player.pItemY, true); - player.getPacketSender().sendSound(SoundList.ITEM_PICKUP, 100, 0); - GlobalDropsHandler.pickup(player, player.pItemId, player.pItemX, player.pItemY); - } else { player.walkingToItem = true; + //player.getPacketSender().sendMessage("walkingToItem"); + player.soundDone = false; CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { @Override public void execute(CycleEventContainer container) { if (!player.walkingToItem) { container.stop(); } - if (player.getX() == player.pItemX && player.getY() == player.pItemY && player.walkingToItem) { - GameEngine.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, player.pItemY, true); + if ((player.getX() == player.pItemX && player.getY() == player.pItemY + || player.getX() - 1 == player.pItemX && player.getY() == player.pItemY + || player.getY() - 1 == player.pItemY && player.getX() == player.pItemX + || player.getX() + 1 == player.pItemX && player.getY() == player.pItemY + || player.getY() + 1 == player.pItemY && player.getX() == player.pItemX + ||player.getX() == player.pItemX && player.getY() == player.pItemY) && player.walkingToItem) { container.stop(); } } - @Override - public void stop() { - player.walkingToItem = false; - } - }, 1); - } + @Override + public void stop() { + player.walkingToItem = false; + //player.getPacketSender().sendMessage("!walkingToItem - stop"); + GameEngine.itemHandler.removeGroundItem(player, player.pItemId, player.pItemX, player.pItemY, true); + GlobalDropsHandler.pickup(player, player.pItemId, player.pItemX, player.pItemY); + if (!player.soundDone) + { + player.soundDone = true; + player.getPacketSender().sendSound(SoundList.ITEM_PICKUP, 100, 0); + } + } + }, 1); } } diff --git a/2006Redone Server/src/com/rebotted/world/GlobalDropsHandler.java b/2006Redone Server/src/com/rebotted/world/GlobalDropsHandler.java index 0a8d5b91..f25d0257 100644 --- a/2006Redone Server/src/com/rebotted/world/GlobalDropsHandler.java +++ b/2006Redone Server/src/com/rebotted/world/GlobalDropsHandler.java @@ -150,7 +150,7 @@ public class GlobalDropsHandler { * @param c * cord y */ - public static void pickup(Player player2, int a, int b, int c) { + public static void pickup(Player player, int a, int b, int c) { GlobalDrop drop = itemExists(a, b, c); if (drop == null) { return; @@ -158,16 +158,20 @@ public class GlobalDropsHandler { if (drop.isTaken()) { return; } - if (player2.getItemAssistant().freeSlots() > 0) { - player2.getItemAssistant().addItem(drop.getId(), drop.getAmount()); - drop.setTakenAt(System.currentTimeMillis()); - drop.setTaken(true); - for (Player player : PlayerHandler.players) { - Client cl = (Client) player; - if (cl != null) { - cl.getPacketSender().removeGroundItem(drop.getId(), drop.getX(), drop.getY(), drop.getAmount()); - spawnedDrops.remove(drop); - } + if (player.getItemAssistant().freeSlots() < 1) { + if (!(player.getItemAssistant().playerHasItem(player.pItemId) && player.getItemAssistant().isStackable(player.pItemId))) { + player.getPacketSender().sendMessage("Not enough inventory space..."); + return; + } + } + player.getItemAssistant().addItem(drop.getId(), drop.getAmount()); + drop.setTakenAt(System.currentTimeMillis()); + drop.setTaken(true); + for (Player playerLoop : PlayerHandler.players) { + Client cl = (Client) playerLoop; + if (cl != null) { + cl.getPacketSender().removeGroundItem(drop.getId(), drop.getX(), drop.getY(), drop.getAmount()); + spawnedDrops.remove(drop); } } }