package tools.packet;
import client.MapleCharacter;
import client.MapleClient;
import client.inventory.Item;
import constants.GameConstants;
import handling.SendPacketOpcode;
import java.util.List;
import server.MerchItemPackage;
import server.shops.AbstractPlayerStore.BoughtItem;
import server.shops.HiredMerchant;
import server.shops.IMaplePlayerShop;
import server.shops.MapleMiniGame;
import server.shops.MaplePlayerShop;
import server.shops.MaplePlayerShopItem;
import tools.Pair;
import tools.data.MaplePacketLittleEndianWriter;
public class PlayerShopPacket {
public static byte[] sendTitleBox() {
return sendTitleBox(7);
}
public static byte[] sendTitleBox(int mode) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8);
mplew.writeShort(SendPacketOpcode.SEND_TITLE_BOX.getValue());
mplew.write(mode);
if ((mode == 8) || (mode == 16)) {
mplew.writeInt(0);
mplew.write(0);
} else if (mode == 13) {
mplew.writeInt(0);
} else if (mode == 14) {
mplew.write(0);
} else if (mode == 18) {
mplew.write(1);
mplew.writeMapleAsciiString("");
}
return mplew.getPacket();
}
public static byte[] requestShopPic(int oid) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(17);
mplew.writeShort(SendPacketOpcode.SEND_TITLE_BOX.getValue());
mplew.write(17);
mplew.writeInt(oid);
mplew.writeShort(0);
mplew.writeLong(0L);
return mplew.getPacket();
}
public static final byte[] addCharBox(MapleCharacter c, int type) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.UPDATE_CHAR_BOX.getValue());
mplew.writeInt(c.getId());
PacketHelper.addAnnounceBox(mplew, c);
return mplew.getPacket();
}
public static final byte[] removeCharBox(MapleCharacter c) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.UPDATE_CHAR_BOX.getValue());
mplew.writeInt(c.getId());
mplew.write(0);
return mplew.getPacket();
}
public static final byte[] sendPlayerShopBox(MapleCharacter c) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.UPDATE_CHAR_BOX.getValue());
mplew.writeInt(c.getId());
PacketHelper.addAnnounceBox(mplew, c);
return mplew.getPacket();
}
public static byte[] getHiredMerch(MapleCharacter chr, HiredMerchant merch, boolean firstTime) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(0x14);
mplew.write(6);
mplew.write(7);
mplew.writeShort(merch.getVisitorSlot(chr));
mplew.writeInt(merch.getItemId());
mplew.writeMapleAsciiString("Hired Merchant");
for (Pair storechr : merch.getVisitors()) {
mplew.write(((Byte) storechr.left).byteValue());
PacketHelper.addCharLook(mplew, (MapleCharacter) storechr.right, false, false);
mplew.writeMapleAsciiString(((MapleCharacter) storechr.right).getName());
mplew.writeShort(((MapleCharacter) storechr.right).getJob());
}
mplew.write(-1);
mplew.writeShort(0);
mplew.writeMapleAsciiString(merch.getOwnerName());
if (merch.isOwner(chr)) {
mplew.writeInt(merch.getTimeLeft());
mplew.write(firstTime ? 1 : 0);
mplew.write(merch.getBoughtItems().size());
for (final BoughtItem SoldItem : merch.getBoughtItems()) {
mplew.writeInt(SoldItem.id);
mplew.writeShort(SoldItem.quantity);
mplew.writeLong(SoldItem.totalPrice);
mplew.writeMapleAsciiString(SoldItem.buyer);
}
mplew.writeLong(merch.getMeso());
}
mplew.writeInt(263);
mplew.writeMapleAsciiString(merch.getDescription());
mplew.write(16);
mplew.writeLong(merch.getMeso());
mplew.write(merch.getItems().size());
for (MaplePlayerShopItem item : merch.getItems()) {
mplew.writeShort(item.bundles);
mplew.writeShort(item.item.getQuantity());
mplew.writeLong(item.price);
PacketHelper.addItemInfo(mplew, item.item);
}
mplew.writeShort(0);
return mplew.getPacket();
}
public static final byte[] getPlayerStore(MapleCharacter chr, boolean firstTime) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
IMaplePlayerShop ips = chr.getPlayerShop();
mplew.write(GameConstants.GMS ? 11 : 5);
switch (ips.getShopType()) {
case 2:
mplew.write(4);
mplew.write(4);
break;
case 3:
mplew.write(2);
mplew.write(2);
break;
case 4:
mplew.write(1);
mplew.write(2);
}
mplew.writeShort(ips.getVisitorSlot(chr));
PacketHelper.addCharLook(mplew, ((MaplePlayerShop) ips).getMCOwner(), false ,false);
mplew.writeMapleAsciiString(ips.getOwnerName());
mplew.writeShort(((MaplePlayerShop) ips).getMCOwner().getJob());
for (Pair storechr : ips.getVisitors()) {
mplew.write(((Byte) storechr.left).byteValue());
PacketHelper.addCharLook(mplew, (MapleCharacter) storechr.right, false,false);
mplew.writeMapleAsciiString(((MapleCharacter) storechr.right).getName());
mplew.writeShort(((MapleCharacter) storechr.right).getJob());
}
mplew.write(255);
mplew.writeMapleAsciiString(ips.getDescription());
mplew.write(10);
mplew.write(ips.getItems().size());
for (MaplePlayerShopItem item : ips.getItems()) {
mplew.writeShort(item.bundles);
mplew.writeShort(item.item.getQuantity());
mplew.writeInt(item.price);
PacketHelper.addItemInfo(mplew, item.item);
}
return mplew.getPacket();
}
public static final byte[] shopChat(String message, int slot) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(24);
mplew.write(25);
mplew.write(slot);
mplew.writeMapleAsciiString(message);
return mplew.getPacket();
}
public static final byte[] shopErrorMessage(int error, int type) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(28);
mplew.write(type);
mplew.write(error);
return mplew.getPacket();
}
public static final byte[] spawnHiredMerchant(HiredMerchant hm) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.SPAWN_HIRED_MERCHANT.getValue());
mplew.writeInt(hm.getOwnerId());
mplew.writeInt(hm.getItemId());
mplew.writePos(hm.getTruePosition());
mplew.writeShort(0);
mplew.writeMapleAsciiString(hm.getOwnerName());
PacketHelper.addInteraction(mplew, hm);
return mplew.getPacket();
}
public static final byte[] destroyHiredMerchant(int id) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.DESTROY_HIRED_MERCHANT.getValue());
mplew.writeInt(id);
return mplew.getPacket();
}
public static byte[] shopItemUpdate(IMaplePlayerShop shop) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(0x4D);
if (shop.getShopType() == 1) {
mplew.writeLong(0L);
}
mplew.write(shop.getItems().size());
for (MaplePlayerShopItem item : shop.getItems()) {
mplew.writeShort(item.bundles);
mplew.writeShort(item.item.getQuantity());
mplew.writeLong(item.price);
PacketHelper.addItemInfo(mplew, item.item);
}
mplew.writeShort(0);
return mplew.getPacket();
}
public static byte[] shopVisitorAdd(MapleCharacter chr, int slot) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(0x13);
mplew.write(slot);
PacketHelper.addCharLook(mplew, chr, false, false);
mplew.writeMapleAsciiString(chr.getName());
mplew.writeShort(chr.getJob());
return mplew.getPacket();
}
public static final byte[] shopVisitorLeave(byte slot) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(19);
mplew.write(slot);
return mplew.getPacket();
}
public static final byte[] Merchant_Buy_Error(byte message) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(44);
mplew.write(message);
return mplew.getPacket();
}
public static final byte[] updateHiredMerchant(HiredMerchant shop) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.UPDATE_HIRED_MERCHANT.getValue());
mplew.writeInt(shop.getOwnerId());
PacketHelper.addInteraction(mplew, shop);
return mplew.getPacket();
}
public static final byte[] merchItem_Message(int op) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.MERCH_ITEM_MSG.getValue());
mplew.write(op);
return mplew.getPacket();
}
public static final byte[] merchItemStore(byte op, int days, int fees) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.MERCH_ITEM_STORE.getValue());
mplew.write(op);
switch (op) {
case 39:
mplew.writeInt(999999999);
mplew.writeInt(999999999);
mplew.write(0);
break;
case 38:
mplew.writeInt(days);
mplew.writeInt(fees);
}
return mplew.getPacket();
}
public static final byte[] merchItemStore_ItemData(MerchItemPackage pack) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.MERCH_ITEM_STORE.getValue());
mplew.write(38);
mplew.writeInt(9030000);
mplew.write(16);
mplew.writeLong(126L);
mplew.writeInt(pack.getMesos());
mplew.write(0);
mplew.write(pack.getItems().size());
for (Item item : pack.getItems()) {
PacketHelper.addItemInfo(mplew, item);
}
mplew.writeZeroBytes(3);
return mplew.getPacket();
}
public static byte[] getMiniGame(MapleClient c, MapleMiniGame minigame) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(10);
mplew.write(minigame.getGameType());
mplew.write(minigame.getMaxSize());
mplew.writeShort(minigame.getVisitorSlot(c.getPlayer()));
PacketHelper.addCharLook(mplew, minigame.getMCOwner(), false , false);
mplew.writeMapleAsciiString(minigame.getOwnerName());
mplew.writeShort(minigame.getMCOwner().getJob());
for (Pair visitorz : minigame.getVisitors()) {
mplew.write(((Byte) visitorz.getLeft()).byteValue());
PacketHelper.addCharLook(mplew, (MapleCharacter) visitorz.getRight(), false , false);
mplew.writeMapleAsciiString(((MapleCharacter) visitorz.getRight()).getName());
mplew.writeShort(((MapleCharacter) visitorz.getRight()).getJob());
}
mplew.write(-1);
mplew.write(0);
addGameInfo(mplew, minigame.getMCOwner(), minigame);
for (Pair visitorz : minigame.getVisitors()) {
mplew.write(((Byte) visitorz.getLeft()).byteValue());
addGameInfo(mplew, (MapleCharacter) visitorz.getRight(), minigame);
}
mplew.write(-1);
mplew.writeMapleAsciiString(minigame.getDescription());
mplew.writeShort(minigame.getPieceType());
return mplew.getPacket();
}
public static byte[] getMiniGameReady(boolean ready) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(ready ? 56 : GameConstants.GMS ? 60 : ready ? 59 : 57);
return mplew.getPacket();
}
public static byte[] getMiniGameExitAfter(boolean ready) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(ready ? 54 : GameConstants.GMS ? 58 : ready ? 57 : 55);
return mplew.getPacket();
}
public static byte[] getMiniGameStart(int loser) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 62 : 59);
mplew.write(loser == 1 ? 0 : 1);
return mplew.getPacket();
}
public static byte[] getMiniGameSkip(int slot) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 64 : 61);
mplew.write(slot);
return mplew.getPacket();
}
public static byte[] getMiniGameRequestTie() {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 51 : 48);
return mplew.getPacket();
}
public static byte[] getMiniGameDenyTie() {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 50 : 49);
return mplew.getPacket();
}
public static byte[] getMiniGameFull() {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.writeShort(GameConstants.GMS ? 10 : 5);
mplew.write(2);
return mplew.getPacket();
}
public static byte[] getMiniGameMoveOmok(int move1, int move2, int move3) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 65 : 62);
mplew.writeInt(move1);
mplew.writeInt(move2);
mplew.write(move3);
return mplew.getPacket();
}
public static byte[] getMiniGameNewVisitor(MapleCharacter c, int slot, MapleMiniGame game) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 9 : 4);
mplew.write(slot);
PacketHelper.addCharLook(mplew, c, false , false);
mplew.writeMapleAsciiString(c.getName());
mplew.writeShort(c.getJob());
addGameInfo(mplew, c, game);
return mplew.getPacket();
}
public static void addGameInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr, MapleMiniGame game) {
mplew.writeInt(game.getGameType());
mplew.writeInt(game.getWins(chr));
mplew.writeInt(game.getTies(chr));
mplew.writeInt(game.getLosses(chr));
mplew.writeInt(game.getScore(chr));
}
public static byte[] getMiniGameClose(byte number) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 18 : 10);
mplew.write(1);
mplew.write(number);
return mplew.getPacket();
}
public static byte[] getMatchCardStart(MapleMiniGame game, int loser) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 62 : 59);
mplew.write(loser == 1 ? 0 : 1);
int times = game.getPieceType() == 2 ? 30 : game.getPieceType() == 1 ? 20 : 12;
mplew.write(times);
for (int i = 1; i <= times; i++) {
mplew.writeInt(game.getCardId(i));
}
return mplew.getPacket();
}
public static byte[] getMatchCardSelect(int turn, int slot, int firstslot, int type) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 69 : 66);
mplew.write(turn);
mplew.write(slot);
if (turn == 0) {
mplew.write(firstslot);
mplew.write(type);
}
return mplew.getPacket();
}
public static byte[] getMiniGameResult(MapleMiniGame game, int type, int x) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(GameConstants.GMS ? 63 : 60);
mplew.write(type);
game.setPoints(x, type);
if (type != 0) {
game.setPoints(x == 1 ? 0 : 1, type == 2 ? 0 : 1);
}
if (type != 1) {
if (type == 0) {
mplew.write(x == 1 ? 0 : 1);
} else {
mplew.write(x);
}
}
addGameInfo(mplew, game.getMCOwner(), game);
for (Pair visitorz : game.getVisitors()) {
addGameInfo(mplew, (MapleCharacter) visitorz.right, game);
}
return mplew.getPacket();
}
public static final byte[] MerchantBlackListView(List<String> blackList) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(39);
mplew.writeShort(blackList.size());
for (String visit : blackList) {
mplew.writeMapleAsciiString(visit);
}
return mplew.getPacket();
}
public static final byte[] MerchantVisitorView(List<String> visitor) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendPacketOpcode.PLAYER_INTERACTION.getValue());
mplew.write(38);
mplew.writeShort(visitor.size());
for (String visit : visitor) {
mplew.writeMapleAsciiString(visit);
mplew.writeInt(1);
}
return mplew.getPacket();
}
}