Хендлеры

Теги:
 
+
-
edit
 

Mansters

новичок
Допустем я хочу ввести юзерскую команду /123
какой хендлер для этого использовать usercommandhandlers или voicedcommandhandlers ?
usercommandhandlers смущает private static final int[] COMMAND_IDS = { 52 }; где брать эти IDS (понятно что их клиент отсылает)
Как сделали команду /unstuck ?
 

Murkt

Pythoneer

вводимые команды клиент парсит. Когда он видит команду правильную - посылает предопределённые (по типу 52), а когда нет - просто текст. Просто текст перехватывается с помощью voicedcommandhandlers, смотри clientpackets.Say2
[team Їжачки - сумні падлюки]  
+
-
edit
 

Mansters

новичок
создаю в voicedcommandhandlers


package net.sf.l2j.gameserver.handler.voicedcommandhandlers;
/**

*
*/


import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;


public class komanda implements IVoicedCommandHandler
{
private static String[] _voicedCommands = { "komanda" };

public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
{
if (command.equals("komanda")) showUserPage(activeChar);

return true;
}


public String[] getVoicedCommandList()
{
return _voicedCommands;
}
public void showUserPage(L2PcInstance activeChar)
{
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

StringBuffer replyMSG = new StringBuffer("<html><body>");

replyMSG.append("
L2J User Panel

");

replyMSG.append("</body></html>");

adminReply.setHtml(replyMSG.toString());
activeChar.sendPacket(adminReply);
}
}



в gameserver.gameserver.java прописываю


import net.sf.l2j.gameserver.handler.voicedcommandhandlers.komanda;
_voicedCommandHandler.registerVoicedCommandHandler(new komanda());



если текст отправляется в voicedcommandhandlers
то при вводе /komanda должно открываться пустое окно, но эфекта 0

что я сделал нетак ?
 

Murkt

Pythoneer

насколько я помню, стандартно voicedcommandhandler перехватывает сообщения с точкой в начале, а не слешем.

Посмотреть не могу, так как в Фортрессе выкошен давным-давно по причине ненужности.
[team Їжачки - сумні падлюки]  
+
-
edit
 

Mansters

новичок
Спасибо Муркт, я разобрался как это работает :)
[quote]
package net.sf.l2j.gameserver.handler.voicedcommandhandlers;
/**

*
*/


import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;


public class komanda implements IVoicedCommandHandler
{
private static String[] _voicedCommands = { "komanda" };

public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
{
if (command.startsWith("komanda"))
{
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

StringBuffer replyMSG = new StringBuffer("<html><body>");

replyMSG.append("
L2J Admin Panel

");

replyMSG.append("</body></html>");

adminReply.setHtml(replyMSG.toString());
activeChar.sendPacket(adminReply);
}
return true;
}


public String[] getVoicedCommandList()
{
return _voicedCommands;
}

}
[/quote]

оказывается работает, только нужно ставить . после неё пробел а затем komanda писать :). komanda

как-же сделать команды типа /komanda ?
 

Murkt

Pythoneer

модифицировать clientpackets.Say2 - двух минут дело
[team Їжачки - сумні падлюки]  
+
-
edit
 

Mansters

новичок
activeChar.sendPacket(cs);
if (_text.startsWith("."))
{
StringTokenizer st = new StringTokenizer(_text);
String target = st.nextToken().substring(1);
if (st.hasMoreTokens())
{
String command = st.nextToken();
IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);
if (vch != null)
vch.useVoicedCommand(command, activeChar, target);
else
_log.warning("No handler registered for bypass '"+command+"'");
}
}
if (_text.startsWith("/"))
{
StringTokenizer st = new StringTokenizer(_text);
String target = st.nextToken().substring(1);
if (st.hasMoreTokens())
{
String command = st.nextToken();
IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);
if (vch != null)
vch.useVoicedCommand(command, activeChar, target);
else
_log.warning("No handler registered for bypass '"+command+"'");
}
}


}
else if (_type == CLAN && activeChar.getClan() != null)
{
activeChar.getClan().broadcastToOnlineMembers(cs);
}
else if (_type == ALLIANCE && activeChar.getClan() != null)
{
activeChar.getClan().broadcastToOnlineAllyMembers(cs);
}
else if (_type == PARTY && activeChar.isInParty())
{
activeChar.getParty().broadcastToPartyMembers(cs);
}
else if (_type == PETITION_PLAYER)
{
for (L2PcInstance gm : L2World.getInstance().getAllGMs())
{
gm.sendPacket(cs);
if(!gm.getMessageRefusal())
{
gm.sendPacket(cs);
}
}
}
else if (_type == HERO_VOICE)
{
if (!activeChar.isHero())
return;
else
{
for (L2PcInstance player : L2World.getInstance().getAllPlayers())
{
if(!BlockList.isBlocked(player, activeChar))
{
player.sendPacket(cs);
}
}
}
}

}

/* (non-Javadoc)
* @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
*/
public String getType()
{
return _C__38_SAY2;
}
}
 

никакой реакции сервера на /
 
Это сообщение редактировалось 01.04.2006 в 08:15
AD Реклама Google — средство выживания форумов :)

Murkt

Pythoneer

во-первых, не обязательно сюда пихать полные исходники файлов :)
во-вторых, вместо добавки одного if'a можно было добавить одно условие через || в уже имеющееся

if (_text.startsWith(".") || _text.startsWith("."))
{
StringTokenizer st = new StringTokenizer(_text);
.....

в-третьих, там может клиент какую-нибудь каку делать. А может и не делать, меня это не интересовало :)
[team Їжачки - сумні падлюки]  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru