package handling.channel.handler;
import client.MapleCharacter;
import client.MapleCharacterUtil;
import client.MapleClient;
import client.messages.CommandProcessor;
import constants.GameConstants;
import constants.ServerConstants;
import handling.channel.ChannelServer;
import handling.world.MapleMessenger;
import handling.world.MapleMessengerCharacter;
import handling.world.World;
import tools.data.LittleEndianAccessor;
import tools.packet.CField;
import tools.packet.CWvsContext;
public class ChatHandler {
public static final void GeneralChat(String text, byte unk, MapleClient c, MapleCharacter chr) {
if ((text.length() > 0) && (chr != null) && (chr.getMap() != null)) {
if (!CommandProcessor.processCommand(c, text, ServerConstants.CommandType.NORMAL)) {
if ((!chr.isIntern()) && (text.length() >= 80)) {
return;
}
if (c.getPlayer().getMap().getId() == GameConstants.JAIL) {
c.getPlayer().dropMessage(5, "You're in jail, herp derp.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
if (c.getPlayer().isMuted() && !c.getPlayer().isGM()) {
c.getPlayer().dropMessage(5, "You are Muted, therefore you are unable to talk.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
if (chr.isHidden()) {
if ((chr.isIntern()) && (!chr.isSuperGM()) && (unk == 0)) {
chr.getMap().broadcastGMMessage(chr, CField.getChatText(chr.getId(), text, false, 1), true);
if (unk == 0) {
chr.getMap().broadcastGMMessage(chr, CWvsContext.serverNotice(2, chr.getName() + " : " + text), true);
}
} else {
chr.getMap().broadcastGMMessage(chr, CField.getChatText(chr.getId(), text, c.getPlayer().isSuperGM(), unk), true);
}
} else {
if ((chr.isIntern()) && (!chr.isSuperGM()) && (unk == 0)) {
chr.getMap().broadcastMessage(CField.getChatText(chr.getId(), text, false, 1), c.getPlayer().getTruePosition());
if (unk == 0) {
chr.getMap().broadcastMessage(CWvsContext.serverNotice(2, chr.getName() + " : " + text), c.getPlayer().getTruePosition());
}
} else {
chr.getMap().broadcastMessage(CField.getChatText(chr.getId(), text, c.getPlayer().isSuperGM(), unk), c.getPlayer().getTruePosition());
}
}
}
}
}
public static final void Others(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) {
if (c.getPlayer().getMap().getId() == GameConstants.JAIL) {
c.getPlayer().dropMessage(5, "You're in jail, herp derp.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
if (c.getPlayer().isMuted() && !c.getPlayer().isGM()) {
c.getPlayer().dropMessage(5, "You are Muted, therefore you are unable to talk.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
int type = slea.readByte();
byte numRecipients = slea.readByte();
if (numRecipients <= 0) {
return;
}
int[] recipients = new int[numRecipients];
for (byte i = 0; i < numRecipients; i = (byte) (i + 1)) {
recipients[i] = slea.readInt();
}
String chattext = slea.readMapleAsciiString();
if ((chr == null) || (!chr.getCanTalk())) {
c.getSession().write(CWvsContext.serverNotice(6, "You have been muted and are therefore unable to talk."));
return;
}
if (c.isMonitored()) {
String chattype = "Unknown";
switch (type) {
case 0:
chattype = "Buddy";
break;
case 1:
chattype = "Party";
break;
case 2:
chattype = "Guild";
break;
case 3:
chattype = "Alliance";
break;
case 4:
chattype = "Expedition";
}
World.Broadcast.broadcastGMMessage(CWvsContext.serverNotice(6, "[GM Message] " + MapleCharacterUtil.makeMapleReadable(chr.getName()) + " said (" + chattype + "): " + chattext));
}
if (chattext.length() > 0) {
if (!CommandProcessor.processCommand(c, chattext, ServerConstants.CommandType.NORMAL));
} else {
return;
}
switch (type) {
case 0:
World.Buddy.buddyChat(recipients, chr.getId(), chr.getName(), chattext);
break;
case 1:
if (chr.getParty() != null) {
World.Party.partyChat(chr.getParty().getId(), chattext, chr.getName());
}
break;
case 2:
if (chr.getGuildId() > 0) {
World.Guild.guildChat(chr.getGuildId(), chr.getName(), chr.getId(), chattext);
}
break;
case 3:
if (chr.getGuildId() > 0) {
World.Alliance.allianceChat(chr.getGuildId(), chr.getName(), chr.getId(), chattext);
}
break;
case 4:
if ((chr.getParty() != null) && (chr.getParty().getExpeditionId() > 0)) {
World.Party.expedChat(chr.getParty().getExpeditionId(), chattext, chr.getName());
}
break;
}
}
public static final void Messenger(LittleEndianAccessor slea, MapleClient c) {
MapleMessenger messenger = c.getPlayer().getMessenger();
if (c.getPlayer().getMap().getId() == GameConstants.JAIL) {
c.getPlayer().dropMessage(5, "You're in jail, herp derp.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
if (c.getPlayer().isMuted() && !c.getPlayer().isGM()) {
c.getPlayer().dropMessage(5, "You are Muted, therefore you are unable to talk.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
int action = slea.readByte();
switch (action) {
case 0:
if (messenger == null) {
int type = slea.readShort();
int messengerid = slea.readInt();
if (messengerid == 0) {
c.getPlayer().setMessenger(World.Messenger.createMessenger(new MapleMessengerCharacter(c.getPlayer())));
} else {
messenger = World.Messenger.getMessenger(messengerid);
if (messenger != null) {
int position = messenger.getLowestPosition();
if ((position > -1) && (position < 7)) {
c.getPlayer().setMessenger(messenger);
World.Messenger.joinMessenger(messenger.getId(), new MapleMessengerCharacter(c.getPlayer()), c.getPlayer().getName(), c.getChannel());
}
}
}
}
break;
case 1:
break;
case 2:
if (messenger != null) {
MapleMessengerCharacter messengerplayer = new MapleMessengerCharacter(c.getPlayer());
World.Messenger.leaveMessenger(messenger.getId(), messengerplayer);
c.getPlayer().setMessenger(null);
}
break;
case 3:
if (messenger != null) {
int position = messenger.getLowestPosition();
if ((position <= -1) || (position >= 7)) {
return;
}
String input = slea.readMapleAsciiString();
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(input);
if (target != null) {
if (target.getMessenger() == null) {
c.getSession().write(CField.messengerNote(input, 4, 1));
target.getClient().getSession().write(CField.messengerInvite(c.getPlayer().getName(), messenger.getId()));
} else {
c.getSession().write(CField.messengerChat(c.getPlayer().getName(), " : " + target.getName() + " is already using Maple Messenger."));
}
} else if (World.isConnected(input)) {
World.Messenger.messengerInvite(c.getPlayer().getName(), messenger.getId(), input, c.getChannel());
} else {
c.getSession().write(CField.messengerNote(input, 4, 0));
}
}
break;
case 5:
final String targeted = slea.readMapleAsciiString();
final MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(targeted);
if (target != null) { // This channel
if (target.getMessenger() != null) {
target.getClient().getSession().write(CField.messengerNote(c.getPlayer().getName(), 5, 0));
}
} else { // Other channel
if (!c.getPlayer().isIntern()) {
World.Messenger.declineChat(targeted, c.getPlayer().getName());
}
}
case 6:
if (messenger != null) {
String charname = slea.readMapleAsciiString();
String text = slea.readMapleAsciiString();
World.Messenger.messengerChat(messenger.getId(), charname, text, c.getPlayer().getName());
}
break;
case 4:
break;
case 14:
String charname = slea.readMapleAsciiString();
String text = slea.readMapleAsciiString();
if (text.contains(" << ")) {
String[] parts = text.split(" << ");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
World.Messenger.messengerWhusper(messenger.getId(), charname, part2, c.getPlayer().getName(), part1);
}
break;
}
}
public static final void Whisper_Find(LittleEndianAccessor slea, MapleClient c) {
if (c.getPlayer().getMap().getId() == GameConstants.JAIL) {
c.getPlayer().dropMessage(5, "You're in jail, herp derp.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
if (c.getPlayer().isMuted() && !c.getPlayer().isGM()) {
c.getPlayer().dropMessage(5, "You are Muted, therefore you are unable to talk.");
c.getPlayer().getClient().getSession().write(CWvsContext.enableActions());
return;
}
byte mode = slea.readByte();
slea.readInt();
switch (mode) {
case 5:
case 68:
final String recipient = slea.readMapleAsciiString();
MapleCharacter player = c.getChannelServer().getPlayerStorage().getCharacterByName(recipient);
if (player != null) {
if ((!player.isIntern()) || ((c.getPlayer().isIntern()) && (player.isIntern()))) {
c.getSession().write(CField.getFindReplyWithMap(player.getName(), player.getMap().getId(), mode == 68));
} else {
c.getSession().write(CField.getWhisperReply(recipient, (byte) 0));
}
} else {
int ch = World.Find.findChannel(recipient);
if (ch > 0) {
player = ChannelServer.getInstance(ch).getPlayerStorage().getCharacterByName(recipient);
if (player == null) {
break;
}
if (player != null) {
if ((!player.isIntern()) || ((c.getPlayer().isIntern()) && (player.isIntern()))) {
c.getSession().write(CField.getFindReply(recipient, (byte) ch, mode == 68));
} else {
c.getSession().write(CField.getWhisperReply(recipient, (byte) 0));
}
return;
}
}
if (ch == -10) {
c.getSession().write(CField.getFindReplyWithCS(recipient, mode == 68));
} else if (ch == -20) {
c.getPlayer().dropMessage(5, "'" + recipient + "' is at the MTS.");
} else {
c.getSession().write(CField.getWhisperReply(recipient, (byte) 0));
}
}
break;
case 6:
if ((c.getPlayer() == null) || (c.getPlayer().getMap() == null)) {
return;
}
if (!c.getPlayer().getCanTalk()) {
c.getSession().write(CWvsContext.serverNotice(6, "You have been muted and are therefore unable to talk."));
return;
}
final String recipientx = slea.readMapleAsciiString();
final String text = slea.readMapleAsciiString();
int ch = World.Find.findChannel(recipientx);
if (ch > 0) {
final MapleCharacter playerx = ChannelServer.getInstance(ch).getPlayerStorage().getCharacterByName(recipientx);
if (playerx != null) {
playerx.getClient().getSession().write(CField.getWhisper(c.getPlayer().getName(), c.getChannel(), text));
c.getSession().write(CField.getWhisperReply(recipientx, (byte) 1));
}
} else {
c.getSession().write(CField.getWhisperReply(recipientx, (byte) 0));
}
break;
}
}
}