package org.reunionemu.jreunion.game; import java.util.TimerTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.reunionemu.jreunion.server.DatabaseUtils; import org.reunionemu.jreunion.server.LocalMap; import org.reunionemu.jreunion.server.PacketFactory.Type; import org.reunionemu.jreunion.server.Session; import org.reunionemu.jreunion.server.SessionList; public class RoamingItem extends WorldObject{ private Item<?> item; private Player owner; private java.util.Timer deleteTimer = new java.util.Timer(); public RoamingItem(Item<?> item) { this.setItem(item); this.setEntityId(item.getEntityId()); } private void setItem(Item<?> item) { this.item = item; } public Item<?> getItem() { return item; } @Override public void enter(Session session) { session.getOwner().getClient().sendPacket(Type.IN_ITEM, this); } @Override public void exit(Session session) { session.getOwner().getClient().sendPacket(Type.OUT, this); } public void setOwner(Player owner) { this.owner = owner; } public Player getOwner() { return owner; } public String toString(){ StringBuffer buffer = new StringBuffer(); buffer.append("{"); buffer.append("id:"); buffer.append(getEntityId()); buffer.append(", "); buffer.append("item: "); buffer.append(getItem()); buffer.append(", "); buffer.append("map: "); buffer.append(getPosition().getLocalMap()); buffer.append("}"); return buffer.toString(); } public void delete(){ LocalMap map = getPosition().getLocalMap(); SessionList<Session> list = map.GetSessions(getPosition()); map.removeEntity(this); DatabaseUtils.getDinamicInstance().deleteRoamingItem(getItem()); map.removeEntity(this.getItem()); DatabaseUtils.getDinamicInstance().deleteItem(getItem().getItemId()); list.exit(this, true); list.update(); //getInterested().sendPacket(Type.OUT, this); } public void startDeleteTimer(boolean randomTime){ long dropTimeOut = getPosition().getLocalMap().getWorld().getServerSetings().getDropTimeOut(); long extraTime = 0; if(randomTime){ extraTime = (long)(dropTimeOut * Math.random()); } deleteTimer.schedule(new TimerTask() { @Override public void run() { LoggerFactory.getLogger(RoamingItem.class).info("Server deleted roaming item {id:" +getEntityId()+", item:"+getItem()+", map:"+getPosition().getLocalMap()+"}"); delete(); } },(dropTimeOut+extraTime)*1000); } public void stopDeleteTimer(){ deleteTimer.cancel(); } public void setDropExclusivity(Player player){ java.util.Timer dropExclusivityTimer = new java.util.Timer(); long dropExclusivity = player.getClient().getWorld().getServerSetings().getDropExclusivity(); dropExclusivityTimer.schedule(new TimerTask() { @Override public void run() { setOwner(null); } },dropExclusivity*1000); } }