package server.shops;
import client.MapleCharacter;
import client.MapleClient;
import client.inventory.Item;
import client.inventory.ItemFlag;
import constants.GameConstants;
import handling.channel.ChannelServer;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import org.apache.log4j.Logger;
import server.MapleInventoryManipulator;
import server.MapleItemInformationProvider;
import server.Timer.EtcTimer;
import server.maps.MapleMapObjectType;
import tools.FileoutputUtil;
import tools.MaplePacketCreator;
import tools.packet.PlayerShopPacket;
public class HiredMerchant extends AbstractPlayerStore {
public ScheduledFuture<?> schedule;
private final List<String> blacklist;
private int storeid;
private final long start;
private long lastChangeNameTime = 0L;
private static final Logger log = Logger.getLogger(HiredMerchant.class);
public HiredMerchant(MapleCharacter owner, int itemId, String desc) {
super(owner, itemId, desc, "", 6);
this.start = System.currentTimeMillis();
this.blacklist = new LinkedList();
this.schedule = EtcTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
if ((HiredMerchant.this.getMCOwner() != null) && (HiredMerchant.this.getMCOwner().getPlayerShop() == HiredMerchant.this)) {
HiredMerchant.this.getMCOwner().setPlayerShop(null);
}
HiredMerchant.this.removeAllVisitors(-1, -1);
HiredMerchant.this.closeShop(true, true);
}
}, 86400000L);
}
@Override
public byte getShopType() {
return 1;
}
public void setStoreid(int storeid) {
this.storeid = storeid;
}
public List<MaplePlayerShopItem> searchItem(int itemSearch) {
List itemz = new LinkedList();
for (MaplePlayerShopItem item : this.items) {
if ((item.item.getItemId() == itemSearch) && (item.bundles > 0)) {
itemz.add(item);
}
}
return itemz;
}
@Override
public void buy(MapleClient c, int item, short quantity) {
MaplePlayerShopItem pItem = (MaplePlayerShopItem) this.items.get(item);
Item shopItem = pItem.item;
Item newItem = shopItem.copy();
short perbundle = newItem.getQuantity();
int theQuantity = pItem.price * quantity;
newItem.setQuantity((short) (quantity * perbundle));
short flag = newItem.getFlag();
if (ItemFlag.KARMA_USE.check(flag)) {
newItem.setFlag((short) (flag - ItemFlag.KARMA_USE.getValue()));
}
if (MapleInventoryManipulator.checkSpace(c, newItem.getItemId(), newItem.getQuantity(), newItem.getOwner())) {
int gainmeso = getMeso() + theQuantity - GameConstants.EntrustedStoreTax(theQuantity);
if (gainmeso > 0) {
setMeso(gainmeso);
MaplePlayerShopItem tmp167_165 = pItem;
tmp167_165.bundles = (short) (tmp167_165.bundles - quantity);
MapleInventoryManipulator.addFromDrop(c, newItem, false);
this.bought.add(new AbstractPlayerStore.BoughtItem(newItem.getItemId(), quantity, theQuantity, c.getPlayer().getName()));
c.getPlayer().gainMeso(-theQuantity, false);
saveItems();
MapleCharacter chr = getMCOwnerWorld();
String itemText = new StringBuilder().append(MapleItemInformationProvider.getInstance().getName(newItem.getItemId())).append(" (").append(perbundle).append(") x ").append(quantity).append(" 已经被卖出。 剩余数量: ").append(pItem.bundles).append(" 购买者: ").append(c.getPlayer().getName()).toString();
if (chr != null) {
chr.dropMessage(-5, new StringBuilder().append("您雇佣商店里面的道具: ").append(itemText).toString());
}
FileoutputUtil.log(new StringBuilder().append("[雇佣] ").append(chr != null ? chr.getName() : getOwnerName()).append(" 雇佣商店卖出: ").append(newItem.getItemId()).append(" - ").append(itemText).append(" 价格: ").append(theQuantity).toString());
FileoutputUtil.hiredMerchLog(chr != null ? chr.getName() : getOwnerName(), new StringBuilder().append("雇佣商店卖出: ").append(newItem.getItemId()).append(" - ").append(itemText).append(" 价格: ").append(theQuantity).toString());
} else {
c.getPlayer().dropMessage(1, "金币不足.");
c.getSession().write(MaplePacketCreator.enableActions());
}
} else {
c.getPlayer().dropMessage(1, "背包已满.");
c.getSession().write(MaplePacketCreator.enableActions());
}
}
@Override
public void closeShop(boolean saveItems, boolean remove) {
if (this.schedule != null) {
this.schedule.cancel(false);
}
if (saveItems) {
saveItems();
this.items.clear();
}
if (remove) {
ChannelServer.getInstance(this.channel).removeMerchant(this);
getMap().broadcastMessage(PlayerShopPacket.destroyHiredMerchant(getOwnerId()));
}
getMap().removeMapObject(this);
this.schedule = null;
}
public int getTimeLeft() {
return (int) (System.currentTimeMillis() - this.start);
}
public int getTimeLeft(boolean first) {
if (first) {
return (int) this.start;
}
return 86400 - (int) (System.currentTimeMillis() - this.start) / 1000;
}
public int getStoreId() {
return this.storeid;
}
public boolean canChangeName() {
if (this.lastChangeNameTime + 60000L > System.currentTimeMillis()) {
return false;
}
this.lastChangeNameTime = System.currentTimeMillis();
return true;
}
public int getChangeNameTimeLeft() {
int time = 60 - (int) (System.currentTimeMillis() - this.lastChangeNameTime) / 1000;
return time > 0 ? time : 1;
}
@Override
public MapleMapObjectType getType() {
return MapleMapObjectType.HIRED_MERCHANT;
}
@Override
public void sendDestroyData(MapleClient client) {
if (isAvailable()) {
client.getSession().write(PlayerShopPacket.destroyHiredMerchant(getOwnerId()));
}
}
@Override
public void sendSpawnData(MapleClient client) {
if (isAvailable()) {
client.getSession().write(PlayerShopPacket.spawnHiredMerchant(this));
}
}
public boolean isInBlackList(String bl) {
return this.blacklist.contains(bl);
}
public void addBlackList(String bl) {
this.blacklist.add(bl);
}
public void removeBlackList(String bl) {
this.blacklist.remove(bl);
}
public void sendBlackList(MapleClient c) {
c.getSession().write(PlayerShopPacket.MerchantBlackListView(this.blacklist));
}
public void sendVisitor(MapleClient c) {
c.getSession().write(PlayerShopPacket.MerchantVisitorView(this.visitorsList));
}
}