SySt3MGaM3RFr3aKs Posted January 21, 2010 Posted January 21, 2010 Chat filter system, with a log to write the words you don't allow in your server. Index: /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/network/clientpackets/Say2.java =================================================================== --- /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/network/clientpackets/Say2.java (revision 12) +++ /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/network/clientpackets/Say2.java (revision 130) @@ -192,4 +192,48 @@ _logChat.log(record); + } + + if (L2Config.USE_CHAT_FILTER) + { + if (_type == SHOUT || _type == TRADE || _type == HERO_VOICE) + { + String filteredText = _text; + filteredText = filteredText.replace("=", ""); + filteredText = filteredText.replace("*", ""); + filteredText = filteredText.replace(" ", ""); + filteredText = filteredText.replace("-", ""); + filteredText = filteredText.replace("_", ""); + filteredText = filteredText.replace(".", ""); + filteredText = filteredText.replace(",", ""); + filteredText = filteredText.replace("'", ""); + filteredText = filteredText.replace("/", ""); + filteredText = filteredText.replace("+", ""); + filteredText = filteredText.toLowerCase(); + if(!activeChar.inObserverMode() && !activeChar.isInDuel() && !activeChar.isInOlympiadMode() + && L2Config.CHAT_FILTER_PUNISHMENT.equalsIgnoreCase("jail") && !activeChar.isInCombat()) { + for (int i = 0; i < L2Config.FILTER_LIST.size(); i++) + { + if(filteredText.contains(L2Config.FILTER_LIST.get(i).toString())) { + int punishmentLength = 0; + punishmentLength = L2Config.CHAT_FILTER_PUNISHMENT_PARAM1 + (L2Config.CHAT_FILTER_PUNISHMENT_PARAM2*activeChar.ChatFilterCount); + activeChar.sendMessage("[ChatFilterSystem] Be careful whith words"); + activeChar.sendMessage("[ChatFilterSystem] Word " + L2Config.FILTER_LIST.get(i).toString()+ " is untolerable"); + activeChar.setInJail(true, punishmentLength); + activeChar.ChatFilterCount += 1; + _text = "[CFS] Jailed for " + punishmentLength + "mins"; + break; + } + } + } else { + for (int i = 0; i < L2Config.FILTER_LIST.size(); i++) + { + if(filteredText.contains(L2Config.FILTER_LIST.get(i).toString())) { + activeChar.sendMessage("[ChatFilterSystem] Be careful whith words"); + activeChar.sendMessage("[ChatFilterSystem] Word " + L2Config.FILTER_LIST.get(i).toString()+ " is untolerable"); + _text = "[CFS] Text cleared"; + } + } + } + } } Index: /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 105) +++ /trunk/Eclipse-Game/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 130) @@ -216,6 +216,6 @@ private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?"; - private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?"; - private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?"; + private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,chat_filter_count=? WHERE obj_id=?"; + private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,chat_filter_count FROM characters WHERE obj_id=?"; private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC"; private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)"; @@ -5910,5 +5910,6 @@ player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level")); - + player.setChatFilterCount(rset.getInt("chat_filter_count")); + // Add the L2PcInstance object in _allObjects //L2World.getInstance().storeObject(player); @@ -6274,5 +6275,6 @@ statement.setString(55, getName()); statement.setLong(56, getDeathPenaltyBuffLevel()); - statement.setInt(57, getObjectId()); + statement.setInt(57, getChatFilterCount()); + statement.setInt(58, getObjectId()); statement.execute(); @@ -6393,5 +6395,16 @@ finally { try { con.close(); } catch (Exception e) {} } } - + + /** ChatFilterCounter */ + public int ChatFilterCount = 0; + + public void setChatFilterCount(int cfcount) + { + ChatFilterCount = cfcount; + } + public int getChatFilterCount() + { + return ChatFilterCount; + } /** * Return True if the L2PcInstance is on line.<BR><BR> Index: /trunk/Eclipse-Game/java/net/sf/l2j/L2Config.java =================================================================== --- /trunk/Eclipse-Game/java/net/sf/l2j/L2Config.java (revision 128) +++ /trunk/Eclipse-Game/java/net/sf/l2j/L2Config.java (revision 130) @@ -6,4 +6,7 @@ import java.io.InputStream; import java.io.OutputStream; +import java.io.LineNumberReader; +import java.io.BufferedReader; +import java.io.FileReader; import java.math.BigInteger; import java.util.List; @@ -60,4 +63,5 @@ public static final String DATAPACK_VERSION_FILE = "./config/l2jdp-version.properties"; public static final String LOGIN_CONFIGURATION_FILE = "./config/loginserver.properties"; + public static final String CHAT_FILTER_FILE = "./config/ChatFilter.txt"; public static int MAX_ITEM_IN_PACKET; @@ -770,6 +774,10 @@ public static final FloodProtectorConfig FLOOD_PROTECTOR_WEREHOUSE = new FloodProtectorConfig("WerehouseFloodProtector"); public static final FloodProtectorConfig FLOOD_PROTECTOR_MISC = new FloodProtectorConfig("MiscFloodProtector"); - public static final FloodProtectorConfig FLOOD_PROTECTOR_CHAT = new FloodProtectorConfig("ChatFloodProtector"); - + public static final FloodProtectorConfig FLOOD_PROTECTOR_CHAT = new FloodProtectorConfig("ChatFloodProtector"); + public static boolean USE_CHAT_FILTER; + public static List<String> FILTER_LIST = new FastList<String>(); + public static String CHAT_FILTER_PUNISHMENT; + public static int CHAT_FILTER_PUNISHMENT_PARAM1; + public static int CHAT_FILTER_PUNISHMENT_PARAM2; // Class Balance @@ -2100,4 +2108,33 @@ floodprotectorSettings.load(is); is.close(); + + USE_CHAT_FILTER = Boolean.parseBoolean(floodprotectorSettings.getProperty("UseChatFilter", "True")); + CHAT_FILTER_PUNISHMENT = floodprotectorSettings.getProperty("ChatFilterPunishment", "off"); + CHAT_FILTER_PUNISHMENT_PARAM1 = Integer.parseInt(floodprotectorSettings.getProperty("ChatFilterPunishmentParam1", "1")); + CHAT_FILTER_PUNISHMENT_PARAM2 = Integer.parseInt(floodprotectorSettings.getProperty("ChatFilterPunishmentParam2", "1")); + + if (USE_CHAT_FILTER) + { + try + { + LineNumberReader lnr = new LineNumberReader(new BufferedReader(new FileReader(new File(CHAT_FILTER_FILE)))); + String line = null; + while ((line = lnr.readLine()) != null) + { + if (line.trim().length() == 0 || line.startsWith("#")) + { + continue; + } + FILTER_LIST.add(line.trim()); + } + _log.info("Chat Filter: Loaded " + FILTER_LIST.size() + " words"); + } + catch (Exception e) + { + e.printStackTrace(); + throw new Error("Failed to Load "+CHAT_FILTER_FILE+" File."); + } + } + loadFloodProtectorConfigs(floodprotectorSettings); _log.info("# " + FLOODPROTECTOR_CONFIG_FILE + " Sucessfully LOADED #"); Index: /trunk/Eclipse-Game/config/ChatFilter.txt =================================================================== --- /trunk/Eclipse-Game/config/ChatFilter.txt (revision 130) +++ /trunk/Eclipse-Game/config/ChatFilter.txt (revision 130) @@ -0,0 +1,7 @@ +lag +laag +laaag +laaaag +laaaaag +laaaaaag +laaaaaaag Index: /trunk/Eclipse-Game/config/Custom/FloodProtector.properties =================================================================== --- /trunk/Eclipse-Game/config/Custom/FloodProtector.properties (revision 76) +++ /trunk/Eclipse-Game/config/Custom/FloodProtector.properties (revision 130) @@ -7,4 +7,16 @@ # PunishmentType - type of the punishment ('none', 'ban', 'jail'), used only, if PunishmentLimit is greater than zero # PunishmentTime - for how many minutes should be the player/account punished, player is punished in case of 'jail', account is punishedin case of 'ban' (0 = forever) + +#--------------------------------------------------------------- +# Chat Filter system - +#--------------------------------------------------------------- +# Enable chat filter +UseChatFilter = False +# Player punishment for illegal word: off, jail +ChatFilterPunishment = off +# How long the punishment is in effect, min +ChatFilterPunishmentParam1 = 10 +# How much to increase every new punishment for player, min +ChatFilterPunishmentParam2 = 5 FloodProtectorUseItemInterval = 4 Credits: one guy from L2JForum, and ŚyśţęmƒяәдҚς for some modifications, nothing special, just removal effect. Quote
SoRa Posted August 7, 2010 Posted August 7, 2010 This is a good share and usefull,ty a lot man. :) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.