/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
package com.l2jserver.communityserver.network.writepackets;
import java.io.UnsupportedEncodingException;
import javolution.util.FastList;
import com.l2jserver.communityserver.network.netcon.BaseWritePacket;
public final class PlayerShowBoard extends BaseWritePacket
{
private static final byte[] DEC_HEAD =
{
123, // C 0x7B
1, // C 0x01
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,104,0,111,0,109,0,101,0,0,0, // S "bypass _bbshome"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,103,0,101,0,116,0,102,0,97,0,118,0,0,0, // S "bypass _bbsgetfav"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,108,0,111,0,99,0,0,0, // S "bypass _bbsloc"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,99,0,108,0,97,0,110,0,0,0, // S "bypass _bbsclan"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,109,0,101,0,109,0,111,0,0,0, // S "bypass _bbsmemo"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,109,0,97,0,105,0,108,0,0,0, // S "bypass _bbsmail"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,102,0,114,0,105,0,101,0,110,0,100,0,115,0,0,0, // S "bypass _bbsfriends"
98,0,121,0,112,0,97,0,115,0,115,0,32,0,95,0,98,0,98,0,115,0,95,0,97,0,100,0,100,0,95,0,102,0,97,0,118,0,0,0, // S "bypass _bbs_add_fav"
};
private static final byte[][] DEC_10X =
{
{49,0,48,0,49,0,8,0,0,0,0,0}, // "101"
{49,0,48,0,50,0,8,0,0,0,0,0}, // "102"
{49,0,48,0,51,0,8,0,0,0,0,0}, // "103"
{49,0,48,0,52,0,8,0,0,0,0,0} // "104"
};
private PlayerShowBoard(final int playerObjId)
{
writeC(0x02);
writeC(0x00);
writeD(playerObjId);
}
/**
* ID: 10X
* @param playerObjId
* @param html
* @param id (101 = 0, 102 = 1, 103 = 2, 104 = 3)
*/
public PlayerShowBoard(final int playerObjId, final String html, final byte id)
{
this(playerObjId);
try
{
final byte[] data = getBytes10X(html, id);
writeD(DEC_HEAD.length + data.length); // write DEC_HEAD length + html length
writeB(DEC_HEAD); // write head
writeB(data); // write html
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
/**
* ID: 1001
* @param playerObjId
* @param html
*/
public PlayerShowBoard(final int playerObjId, final String html)
{
this(playerObjId);
try
{
final byte[] data = getBytes1001(html);
writeD(DEC_HEAD.length + data.length); // write DEC_HEAD length + html length
writeB(DEC_HEAD); // write head
writeB(data); // write html
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
/**
* ID: 1002
* @param playerObjId
* @param args (FastList)
*/
public PlayerShowBoard(final int playerObjId, final FastList args)
{
this(playerObjId);
try
{
final byte[] data = getBytes1002(args);
writeD(DEC_HEAD.length + data.length); // write DEC_HEAD length + args length
writeB(DEC_HEAD); // write head
writeB(data); // write args
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
private final byte[] getBytes10X(final String html, final byte id) throws UnsupportedEncodingException
{
if (html == null) return DEC_10X[id];
final byte[] dataHtml = html.getBytes("UTF-16LE");
final byte[] data = new byte[12 + dataHtml.length];
data[0] = 49;
data[2] = 48;
data[4] = (byte)(49 + id);
data[6] = 8;
System.arraycopy(dataHtml, 0, data, 8, dataHtml.length);
return data;
}
private final byte[] getBytes1001(final String html) throws UnsupportedEncodingException
{
final byte[] dataHtml = html.getBytes("UTF-16LE");
final byte[] data = new byte[14 + dataHtml.length];
data[0] = 49;
data[2] = 48;
data[4] = 48;
data[6] = 49;
data[8] = 8;
System.arraycopy(dataHtml, 0, data, 10, dataHtml.length);
return data;
}
private final byte[] getBytes1002(final FastList args) throws UnsupportedEncodingException
{
int len = 10;
for (final String arg : args)
{
len += (arg.length() + 4) * 2;
}
final byte data[] = new byte[len];
data[0] = 49;
data[2] = 48;
data[4] = 48;
data[6] = 50;
data[8] = 8;
int i = 10;
for (final String arg : args)
{
final byte[] dataHtml = arg.getBytes("UTF-16LE");
System.arraycopy(dataHtml, 0, data, i, dataHtml.length);
i += dataHtml.length;
data[i] = 0x20;
i+=2;
data[i] = 0x08;
i+=2;
}
return data;
}
}