package com.asteria.net.message.impl;
import com.asteria.game.character.player.Player;
import com.asteria.game.item.Item;
import com.asteria.game.item.ItemDefinition;
import com.asteria.game.item.ItemNode;
import com.asteria.game.item.ItemNodeManager;
import com.asteria.game.location.Position;
import com.asteria.net.ValueType;
import com.asteria.net.message.InputMessageListener;
import com.asteria.net.message.MessageBuilder;
/**
* The message sent from the client when the player drops an item.
*
* @author lare96 <http://github.com/lare96>
*/
public final class DropItemMessage implements InputMessageListener {
@Override
public void handleMessage(Player player, int opcode, int size, MessageBuilder payload) {
if (player.isDisabled())
return;
int id = payload.getShort(false, ValueType.A);
payload.get(false);
payload.get(false);
int slot = payload.getShort(false, ValueType.A);
if (slot < 0 || id < 0)
return;
Item item = player.getInventory().get(slot);
if (item == null || item.getId() != id)
return;
player.setSkillAction(false);
int amount = ItemDefinition.DEFINITIONS[id].isStackable() ? item.getAmount() : 1;
player.getInventory().remove(new Item(id, amount), slot);
Position p = new Position(player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ());
ItemNodeManager.register(new ItemNode(new Item(id, amount), p, player));
}
}