Mas para que isso serve exatamente?
Você pode ouvir qualquer chat do seu servidor, ou ouvir todos os chats de um player em si!
Exemplo dos comandos dessa função:
!ouvir / !ouvir parar / !ouvir tudo / !ouvir nada
-------------------------------------------------------------------
Agora a hora do trabalho!
Vá no netbeans, e va ao MapleCharacter.java e coloque estas funções:
Agora va no GeneralchatHandler.java e coloque essa função no fim do documento:
Aqui está como ficou o meu GeneralchatHandler.java (NÃO COLOQUE ISSO, É SÓ UM EXEMPLO DE COMO O MEU FICOU!):
Agora vá até PartychatHandler.java e coloque essa função, também no fim do documento:
Aqui, novamente, está o exemplo de como o meu PartychatHandler.java ficou (NÃO COLOQUE ISSO, É SÓ UM EXEMPLO):
Agora, vá até WhisperHandler.java e procure por:
e antes dele coloque esta função:
E Por fim, adicione estes comandos nos comandos para gm:
Créditos:
Tradução do tópico: Eu
Ferramentas: AskHugo
Você pode ouvir qualquer chat do seu servidor, ou ouvir todos os chats de um player em si!
Exemplo dos comandos dessa função:
!ouvir
-------------------------------------------------------------------
Agora a hora do trabalho!
Vá no netbeans, e va ao MapleCharacter.java e coloque estas funções:
- Código:
public void setWatcher(MapleCharacter spy) {
watcher = spy;
}
public void clearWatcher() {
watcher = null;
}
public MapleCharacter getWatcher() {
return watcher;
}
Agora va no GeneralchatHandler.java e coloque essa função no fim do documento:
- Código:
if (c.getPlayer().getWatcher() != null) {
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " All] : " + text);
}
Aqui está como ficou o meu GeneralchatHandler.java (NÃO COLOQUE ISSO, É SÓ UM EXEMPLO DE COMO O MEU FICOU!):
- Código:
package net.sf.odinms.net.channel.handler;
import net.sf.odinms.client.MapleClient;
import net.sf.odinms.client.messages.CommandProcessor;
import net.sf.odinms.net.AbstractMaplePacketHandler;
import net.sf.odinms.server.PublicChatHandler;
import net.sf.odinms.tools.MaplePacketCreator;
import net.sf.odinms.tools.StringUtil;
import net.sf.odinms.tools.data.input.SeekableLittleEndianAccessor;
public class GeneralchatHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
c.getPlayer().resetAfkTime();
String text = slea.readMapleAsciiString();
int show = slea.readByte();
if (!CommandProcessor.getInstance().processCommand(c, text) && !PublicChatHandler.doChat(c, text)) {
if (text.charAt(0) != '!') {
if (text.charAt(0) != '@') {
if (c.getPlayer().getCanTalk()) {
if ((StringUtil.countCharacters(text, '@') > 4 && c.getPlayer().getGMLevel() < 3 || StringUtil.countCharacters(text, '#') > 4 && c.getPlayer().getGMLevel() < 3 || StringUtil.countCharacters(text, '&') > 4 && c.getPlayer().getGMLevel() < 3 || StringUtil.countCharacters(text, '%') > 4 && c.getPlayer().getGMLevel() < 3 || StringUtil.countCharacters(text, '$') > 4 && c.getPlayer().getGMLevel() < 3)) {
text = "I tried to spam, please rape my face.";
}
if (!c.getPlayer().isHidden()) {
if (c.getPlayer().getGMText() == 0) {
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.getChatText(c.getPlayer().getId(), text, false, show));
} else if (c.getPlayer().getGMText() == 7) {
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.getChatText(c.getPlayer().getId(), text, true, show));
} else {
switch (c.getPlayer().getGMText()) {
case 1:
case 2:
case 3:
case 4:
//MultiChat
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.multiChat(c.getPlayer().getName(), text, c.getPlayer().getGMText() - 1));
break;
case 5:
case 6:
//Server Notice
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.serverNotice(c.getPlayer().getGMText(), c.getPlayer().getName() + " : " + text));
break;
case 8:
//Whisper
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.getWhisper(c.getPlayer().getName(), c.getChannel(), text));
break;
case 9:
//MapleTip
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.sendYellowTip(c.getPlayer().getName() + " : " + text));
break;
}
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.getChatText(c.getPlayer().getId(), text, false, 1));
}
} else {
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.serverNotice(5, c.getPlayer().getName() + " : " + text));
}
} else {
c.getPlayer().dropMessage("You cannot talk since you are muted.");
}
} else {
c.getPlayer().dropMessage("Player command " + text + " does not exist");
}
} else {
if (c.getPlayer().getGMLevel() < 1) {
c.getPlayer().dropMessage("You cannot use staff commands like " + text + ". Feel free to apply for a staff position on the forums");
} else {
c.getPlayer().dropMessage("Staff command " + text + " does not exist");
}
}
if (c.getPlayer().getWatcher() != null) {
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " All] : " + text);
}
}
}
}
Agora vá até PartychatHandler.java e coloque essa função, também no fim do documento:
- Código:
if (c.getPlayer().getWatcher() != null) {
switch (type) {
case 0:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Amigos] : " + chattext);
break;
case 1:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Grupo] : " + chattext);
break;
case 2:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Cla] : " + chattext);
break;
case 3:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Alianca] : " + chattext);
break;
}
}
Aqui, novamente, está o exemplo de como o meu PartychatHandler.java ficou (NÃO COLOQUE ISSO, É SÓ UM EXEMPLO):
- Código:
package net.sf.odinms.net.channel.handler;
import java.rmi.RemoteException;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.client.MapleClient;
import net.sf.odinms.client.messages.CommandProcessor;
import net.sf.odinms.net.AbstractMaplePacketHandler;
import net.sf.odinms.tools.MaplePacketCreator;
import net.sf.odinms.tools.data.input.SeekableLittleEndianAccessor;
public class PartychatHandler extends AbstractMaplePacketHandler {
// private static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(PartychatHandler.class);
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
c.getPlayer().resetAfkTime();
int type = slea.readByte(); // 0 for buddys, 1 for partys
int numRecipients = slea.readByte();
int recipients[] = new int[numRecipients];
for (int i = 0; i < numRecipients; i++) {
recipients[i] = slea.readInt();
}
String chattext = slea.readMapleAsciiString();
if (!CommandProcessor.getInstance().processCommand(c, chattext)) {
MapleCharacter player = c.getPlayer();
if (chattext.charAt(0) != '!') {
if (chattext.charAt(0) != '@') {
if (c.getPlayer().getCanTalk()) {
try {
if (type == 0) {
c.getChannelServer().getWorldInterface().buddyChat(recipients, player.getId(), player.getName(), chattext);
} else if (type == 1 && player.getParty() != null) {
c.getChannelServer().getWorldInterface().partyChat(player.getParty().getId(), chattext, player.getName());
} else if (type == 2 && player.getGuildId() > 0) {
c.getChannelServer().getWorldInterface().guildChat(c.getPlayer().getGuildId(), c.getPlayer().getName(), c.getPlayer().getId(), chattext);
} else if (type == 3 && player.getGuild() != null) {
int allianceId = player.getGuild().getAllianceId();
if (allianceId > 0) {
c.getChannelServer().getWorldInterface().allianceMessage(allianceId, MaplePacketCreator.multiChat(player.getName(), chattext, 3), player.getId(), -1);
}
}
} catch (RemoteException e) {
c.getChannelServer().reconnectWorld();
}
} else {
c.getPlayer().dropMessage("You cannot talk since you are muted.");
}
} else {
c.getPlayer().dropMessage("Player command " + chattext + " does not exist");
}
} else {
if (c.getPlayer().getGMLevel() < 1) {
c.getPlayer().dropMessage("You cannot use staff commands like " + chattext + ". Feel free to apply for a staff position on the forums");
} else {
c.getPlayer().dropMessage("Staff command " + chattext + " does not exist");
}
}
if (c.getPlayer().getWatcher() != null) {
switch (type) {
case 0:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Amigos] : " + chattext);
break;
case 1:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Grupo] : " + chattext);
break;
case 2:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Cla] : " + chattext);
break;
case 3:
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " Alianca] : " + chattext);
break;
}
}
}
}
}
Agora, vá até WhisperHandler.java e procure por:
- Código:
} else if (mode == 5)
e antes dele coloque esta função:
- Código:
if (c.getPlayer().getWatcher() != null) {
c.getPlayer().getWatcher().dropMessage("[" + c.getPlayer().getName() + " para " + recipient + " Susurro] : " + text);
}
E Por fim, adicione estes comandos nos comandos para gm:
- Código:
} else if (splitted[0].equals("!ouvir")) {
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
if (splitted.length == 3) {
if (victim != null) {
victim.clearWatcher();
mc.dropMessage("Voce parou de ouvir o player " + victim.getName());
} else {
mc.dropMessage("Este player nao esta no seu canal ou ele esta deslogado");
}
} else if (splitted.length == 2) {
if (splitted[1].equalsIgnoreCase("nada")) {
for (MapleCharacter chars : cserv.getPlayerStorage().getAllCharacters()) {
if (chars.getWatcher() == player) {
chars.clearWatcher();
}
}
mc.dropMessage("Voce parou de ouvir todos do seu canal.");
} else if (splitted[1].equalsIgnoreCase("tudo")) {
for (MapleCharacter chars : cserv.getPlayerStorage().getAllCharacters()) {
if (chars.getWatcher() == null && chars != player) {
chars.setWatcher(player);
}
}
mc.dropMessage("Voce esta ouvindo todo o canal, use !ouvir nada para parar de ouvir.");
} else {
if (victim != null) {
if (victim.getWatcher() == null) {
victim.setWatcher(player);
mc.dropMessage("Voce esta ouvindo o player " + victim.getName());
} else {
if (victim.getWatcher().getName() != null) {
mc.dropMessage(victim.getWatcher().getName() + " ja esta ouvindo este player. Use !ouvir " + victim.getName() + " nada e tente novamente");
} else {
mc.dropMessage("Alguem ja esta ouvindo este player. Use !ouvir " + victim.getName() + " nada e tente novamente");
}
}
} else {
mc.dropMessage("Este Player nao esta no seu canal ou esta deslogado");
}
}
} else {
mc.dropMessage("Exemplo: !ouvir <nick> / !ouvir <nick> parar / !ouvir tudo / !ouvir nada");
}
Créditos:
Tradução do tópico: Eu
Ferramentas: AskHugo