package handling.channel.handler;
import clientside.MapleClient;
import handling.world.World;
import handling.world.guild.MapleBBSThread;
import java.util.List;
import tools.data.LittleEndianAccessor;
import tools.packet.CWvsContext;
public class BBSHandler {
private static final String correctLength(String in, int maxSize) {
if (in.length() > maxSize) {
return in.substring(0, maxSize);
}
return in;
}
public static final void BBSOperation(LittleEndianAccessor slea, MapleClient c) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
int localthreadid = 0;
byte action = slea.readByte();
String text;
switch (action) {
case 0:
boolean bEdit = slea.readByte() > 0;
if (bEdit) {
localthreadid = slea.readInt();
}
boolean bNotice = slea.readByte() > 0;
String title = correctLength(slea.readMapleAsciiString(), 25);
text = correctLength(slea.readMapleAsciiString(), 600);
int icon = slea.readInt();
if ((icon >= 100) && (icon <= 106)) {
if (c.getPlayer().haveItem(5290000 + icon - 100, 1, false, true));
} else if ((icon < 0) || (icon > 2)) {
return;
}
if (!bEdit) {
newBBSThread(c, title, text, icon, bNotice);
} else {
editBBSThread(c, title, text, icon, localthreadid);
}
break;
case 1:
localthreadid = slea.readInt();
deleteBBSThread(c, localthreadid);
break;
case 2:
int start = slea.readInt();
listBBSThreads(c, start * 10);
break;
case 3:
localthreadid = slea.readInt();
displayThread(c, localthreadid);
break;
case 4:
localthreadid = slea.readInt();
text = correctLength(slea.readMapleAsciiString(), 25);
newBBSReply(c, localthreadid, text);
break;
case 5:
localthreadid = slea.readInt();
int replyid = slea.readInt();
deleteBBSReply(c, localthreadid, replyid);
}
}
private static void listBBSThreads(MapleClient c, int start) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
c.getSession().write(CWvsContext.GuildPacket.BBSThreadList(World.Guild.getBBS(c.getPlayer().getGuildId()), start));
}
private static final void newBBSReply(MapleClient c, int localthreadid, String text) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
World.Guild.addBBSReply(c.getPlayer().getGuildId(), localthreadid, text, c.getPlayer().getId());
displayThread(c, localthreadid);
}
private static final void editBBSThread(MapleClient c, String title, String text, int icon, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
World.Guild.editBBSThread(c.getPlayer().getGuildId(), localthreadid, title, text, icon, c.getPlayer().getId(), c.getPlayer().getGuildRank());
displayThread(c, localthreadid);
}
private static final void newBBSThread(MapleClient c, String title, String text, int icon, boolean bNotice) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
displayThread(c, World.Guild.addBBSThread(c.getPlayer().getGuildId(), title, text, icon, bNotice, c.getPlayer().getId()));
listBBSThreads(c, 0);
}
private static final void deleteBBSThread(MapleClient c, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
World.Guild.deleteBBSThread(c.getPlayer().getGuildId(), localthreadid, c.getPlayer().getId(), c.getPlayer().getGuildRank());
}
private static final void deleteBBSReply(MapleClient c, int localthreadid, int replyid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
World.Guild.deleteBBSReply(c.getPlayer().getGuildId(), localthreadid, replyid, c.getPlayer().getId(), c.getPlayer().getGuildRank());
displayThread(c, localthreadid);
}
private static final void displayThread(MapleClient c, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
List<MapleBBSThread> bbsList = World.Guild.getBBS(c.getPlayer().getGuildId());
if (bbsList != null) {
for (MapleBBSThread t : bbsList) {
if ((t != null) && (t.localthreadID == localthreadid)) {
c.getSession().write(CWvsContext.GuildPacket.showThread(t));
}
}
}
}
}