Slipknot 25 Опубликовано 4 марта, 2013 Может кто натолкнуть? хочу убрать баг не баг,меня бесит) Как сделать чтоб сам себе в Пм нельзя было писать,вроде на Acis\или Silentium видел,а в каком классе, и вообще перерыл не могу найти... может кто подсказать? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mefestofel163 1333 Опубликовано 4 марта, 2013 ух , я такого давно не видел ) на 1 сборках бейса такая финчя была, к сожалению сам не знаю , но тоже интересно для колекции) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 4 марта, 2013 Say2 в пакетах Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Slipknot 25 Опубликовано 4 марта, 2013 Вот код с люськи 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?" 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Slipknot 25 Опубликовано 4 марта, 2013 Блин,помогите кто-то весь день проковырял нифига не понял(( 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Silentium 592 Опубликовано 4 марта, 2013 И не знал, что у нас нельзя самому себе в пм писать. Спасибо, поправлю. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 4 марта, 2013 Выводите дебаг и смотрите. За вас никто не будет копаться. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты