Перейти к содержанию
Авторизация  
Slipknot

Как Реализовать?

Рекомендуемые сообщения

Может кто натолкнуть?

хочу убрать баг не баг,меня бесит)

Как сделать чтоб сам себе в Пм нельзя было писать,вроде на Acis\или Silentium видел,а в каком классе, и вообще перерыл не могу найти...

может кто подсказать?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ух , я такого давно не видел ) на 1 сборках бейса такая финчя была, к сожалению сам не знаю , но тоже интересно для колекции)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот код с люськи

 

 

package ru.catssoftware.gameserver.network.clientpackets;

 

import java.util.regex.Pattern;

 

 

import org.apache.log4j.Logger;

 

 

import ru.catssoftware.Config;

import ru.catssoftware.gameserver.handler.ChatHandler;

import ru.catssoftware.gameserver.handler.IChatHandler;

import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;

import ru.catssoftware.gameserver.handler.VoicedCommandHandler;

import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;

import ru.catssoftware.gameserver.model.zone.L2Zone;

import ru.catssoftware.gameserver.network.SystemChatChannelId;

import ru.catssoftware.gameserver.network.SystemMessageId;

import ru.catssoftware.gameserver.util.FloodProtector;

import ru.catssoftware.gameserver.util.FloodProtector.Protected;

 

public class Say2 extends L2GameClientPacket

{

private static final String _C__38_SAY2 = "[C] 38 Say2";

private static Logger _logChat = Logger.getLogger("chat");

private SystemChatChannelId _chat;

private String _text;

private String _target;

private int _type;

 

@Override

protected void readImpl()

{

_text = readS();

_type = readD();

_chat = SystemChatChannelId.getChatType(_type);

_target = _chat == SystemChatChannelId.Chat_Tell ? readS() : null;

}

 

@Override

protected void runImpl()

{

L2PcInstance activeChar = getClient().getActiveChar();

 

// Проверяем activeChar

if (activeChar == null)

return;

 

// Проверка длинны текста

if (_text.length() > Config.CHAT_LENGTH)

{

activeChar.sendMessage("Превышена длинна сообщения!");

_text = _text.substring(0, Config.CHAT_LENGTH);

}

 

// Проверка допустимого типа чата

switch (_chat)

{

case Chat_None:

case Chat_Announce:

case Chat_Critical_Announce:

case Chat_System:

case Chat_Custom:

case Chat_GM_Pet:

{

if (!activeChar.isGM())

_chat = SystemChatChannelId.Chat_Normal;

}

}

 

// Проверка на VoiceHandler, парсер Voice команд

if (_chat == SystemChatChannelId.Chat_Normal && (_text.startsWith(".") && !_text.startsWith("..")))

{

String[] _commandParams = _text.split(" ");

String command = _commandParams[0].substring(1);

String params = "";

 

if (_commandParams.length > 1)

params = _text.substring(1 + command.length()).trim();

else if (activeChar.getTarget() != null)

params = activeChar.getTarget().getName();

 

IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);

 

if (vch != null)

{

if (!activeChar.isGM() && !FloodProtector.tryPerformAction(activeChar, Protected.VOICE_CMD))

{

activeChar.sendMessage("Защита от флуда. Попробуйте позже!");

return;

}

else

{

vch.useVoicedCommand(command, activeChar, params);

return;

}

}

else

{

IVoicedCommandHandler vc = VoicedCommandHandler.getInstance().getVoicedCommandHandler("menu");

if (vc == null)

return;

 

vc.useVoicedCommand("menu", activeChar, "");

activeChar.sendMessage("Wrong command: [." + command + "].");

}

return;

}

 

// Проверка блокировки чата

if (!activeChar.isGM() && (activeChar.isChatBanned() || activeChar.isInsideZone(L2Zone.FLAG_NOCHAT)))

{

if (_chat != SystemChatChannelId.Chat_User_Pet && _chat != SystemChatChannelId.Chat_Tell)

{

activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED);

return;

}

}

 

// Проверка типа чата. Если чар ГМ, то меняем тип чата

if (_chat == SystemChatChannelId.Chat_User_Pet && activeChar.isGM())

_chat = SystemChatChannelId.Chat_GM_Pet;

 

// Фильтр разрешенного типа чата при наличии Зарича/Акаманаха

if (activeChar.isCursedWeaponEquipped())

{

switch (_chat)

{

case Chat_Shout:

case Chat_Market:

activeChar.sendMessage("Чат недоступен");

return;

}

}

 

// Проверка абзацов в чате, если абзацы запрещены

if (!Config.ALLOW_MULTILINE_CHAT)

_text = _text.replaceAll("\\\\n", "");

 

// Запись чата в лог файл

if (Config.LOG_CHAT)

{

if (_chat == SystemChatChannelId.Chat_Tell)

_logChat.info(_chat.getName() + "[" + activeChar.getName() + " to " + _target + "] " + _text);

else

_logChat.info(_chat.getName() + "[" + activeChar.getName() + "] " + _text);

}

 

// Проверка текста на запрещенные слова

if (Config.USE_SAY_FILTER)

{

switch (_chat)

{

case Chat_Normal:

case Chat_Shout:

case Chat_Market:

case Chat_Tell:

case Chat_Hero:

checkText(activeChar);

}

}

 

IChatHandler ich = ChatHandler.getInstance().getChatHandler(_chat);

if (ich != null)

ich.useChatHandler(activeChar, _target, _chat, _text);

}

 

private void checkText(L2PcInstance activeChar)

{

String filteredText = _text;

for (Pattern pattern : Config.FILTER_LIST)

{

filteredText = pattern.matcher(filteredText).replaceAll(Config.CHAT_FILTER_CHARS);

}

 

if (Config.KARMA_ON_OFFENSIVE > 0 && !_text.equals(filteredText))

activeChar.setKarma(activeChar.getKarma() + Config.KARMA_ON_OFFENSIVE);

 

_text = filteredText;

}

 

@Override

public String getType()

{

return _C__38_SAY2;

}

}

 

 

А это с Silentium

 

 

 

/*

* 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 <http://www.gnu.org/licenses/>.

*/

package silentium.gameserver.network.clientpackets;

 

import java.util.regex.Pattern;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

import silentium.gameserver.handler.ChatHandler;

import silentium.gameserver.handler.IChatHandler;

import silentium.gameserver.model.actor.instance.L2PcInstance;

import silentium.gameserver.network.SystemMessageId;

import silentium.gameserver.network.serverpackets.ActionFailed;

import silentium.gameserver.properties.ChatFilterProperties;

import silentium.gameserver.properties.GameServerProperties;

import silentium.gameserver.utils.IllegalPlayerAction;

import silentium.gameserver.utils.LoggingUtils;

import silentium.gameserver.utils.Util;

 

public final class Say2 extends L2GameClientPacket

{

protected static final Logger _log = LoggerFactory.getLogger(Say2.class.getName());

private static Logger chatLogger = LoggerFactory.getLogger("chat");

 

public static final int ALL = 0;

public static final int SHOUT = 1; // !

public static final int TELL = 2;

public static final int PARTY = 3; // #

public static final int CLAN = 4; // @

public static final int GM = 5;

public static final int PETITION_PLAYER = 6;

public static final int PETITION_GM = 7;

public static final int TRADE = 8; // +

public static final int ALLIANCE = 9; // $

public static final int ANNOUNCEMENT = 10;

public static final int BOAT = 11;

public static final int L2FRIEND = 12;

public static final int MSNCHAT = 13;

public static final int PARTYMATCH_ROOM = 14;

public static final int PARTYROOM_COMMANDER = 15; // (Yellow)

public static final int PARTYROOM_ALL = 16; // (Red)

public static final int HERO_VOICE = 17;

public static final int CRITICAL_ANNOUNCE = 18;

 

private final static String[] CHAT_NAMES =

{

"ALL",

"SHOUT",

"TELL",

"PARTY",

"CLAN",

"GM",

"PETITION_PLAYER",

"PETITION_GM",

"TRADE",

"ALLIANCE",

"ANNOUNCEMENT", // 10

"BOAT",

"WILLCRASHCLIENT:)",

"FAKEALL?",

"PARTYMATCH_ROOM",

"PARTYROOM_COMMANDER",

"PARTYROOM_ALL",

"HERO_VOICE",

"CRITICAL_ANNOUNCE"

};

 

private String _text;

private int _type;

private String _target;

 

@Override

protected void readImpl()

{

_text = readS();

_type = readD();

_target = (_type == TELL) ? readS() : null;

}

 

@Override

protected void runImpl()

{

_log.debug("Say2: Msg Type = '" + _type + "' Text = '" + _text + "'.");

 

L2PcInstance activeChar = getClient().getActiveChar();

if (activeChar == null)

{

return;

}

 

if ((_type < 0) || (_type >= CHAT_NAMES.length))

{

_log.warn("Say2: Invalid type: " + _type + " Player : " + activeChar.getName() + " text: " + String.valueOf(_text));

activeChar.sendPacket(ActionFailed.STATIC_PACKET);

activeChar.logout();

return;

}

 

if (_text.isEmpty())

{

_log.warn(activeChar.getName() + ": sending empty text. Possible packet hack.");

activeChar.sendPacket(ActionFailed.STATIC_PACKET);

activeChar.logout();

return;

}

 

if (_text.length() >= 100)

{

return;

}

 

if (!activeChar.isGM() && (_type == ANNOUNCEMENT))

{

Util.handleIllegalPlayerAction(activeChar, activeChar.getName() + " tried to announce without GM statut.", IllegalPlayerAction.PUNISH_BROADCAST);

_log.warn(activeChar.getName() + " tried to use announcements without GM statut.");

return;

}

 

if (activeChar.isChatBanned() || (activeChar.isInJail() && !activeChar.isGM()))

{

activeChar.sendPacket(SystemMessageId.CHATTING_PROHIBITED);

return;

}

 

if ((_type == PETITION_PLAYER) && activeChar.isGM())

{

_type = PETITION_GM;

}

 

if (!activeChar.isGM() && GameServerProperties.USE_SAY_FILTER)

{

checkText();

}

 

_text = _text.replaceAll("\\\\n", "");

 

IChatHandler handler = ChatHandler.getInstance().getChatHandler(_type);

if (handler != null)

{

handler.handleChat(_type, activeChar, _target, _text);

 

if (GameServerProperties.LOG_CHAT)

{

LoggingUtils.logChat(chatLogger, _type == TELL ? activeChar.getName() : null, _target, _text, CHAT_NAMES[_type]);

}

}

else

{

_log.warn(activeChar.getName() + " tried to use unregistred chathandler type: " + _type + ".");

}

}

 

private void checkText()

{

String filteredText = _text;

for (String pattern : ChatFilterProperties.FILTER_LIST)

{

if (matches(filteredText, ".*" + pattern + ".*", Pattern.CASE_INSENSITIVE))

{

filteredText = GameServerProperties.CHAT_FILTER_CHARS;

}

}

_text = filteredText;

}

 

private boolean matches(String str, String regex, int flags)

{

return Pattern.compile(regex, flags).matcher(str).matches();

}

 

@Override

protected boolean triggersOnActionRequest()

{

return false;

}

}

 

 

не могу понять что вообще за пм отвечает"TELL?"

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин,помогите кто-то весь день проковырял нифига не понял((

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не знал, что у нас нельзя самому себе в пм писать. Спасибо, поправлю. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выводите дебаг и смотрите. За вас никто не будет копаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...