Jump to content

Recommended Posts

Posted

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.

  • 6 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • NEW HIDDENSTASH KEY SYSTEM INTRODUCED TO THE SITE   **Earn While You Spend - Introducing HS Cashback!**   Every purchase on our site now rewards you with **HS Keys cashback**   EVERY ONE WHO REGISTERS IN SITE UNTILL 15TH OF MAY GETS 2000 HS KEYS IN HES BALANE   Here's how it works:       **1 USD = 1000 HS Keys**   **Get 3% cashback** on every purchase   **Use your HS Keys to **save on your next order**   ---   ### ⚡ Why this is awesome   * Every order gives you value back   * Stack it with promos & HS usage   * Turn your spending into future discounts   ---   ### Example   Spend **$10** → Get **300 HS Keys** back   Spend **$50** → Get **1500 HS Keys** back   ---   ### Smart system (built for fairness)   * Cashback is rounded to keep things balanced   * Prevents abuse from tiny orders   * Rewards real buyers   ---   ### Start earning now   Every purchase = progress toward your next discount   Shop now and build your HS balance!   #cashback #gamingdeals #d2r #rewards #loyalty   Stay safe out there, heroes - and happy hunting! www.d2rhiddenstash.com     We just launched our new Affiliate Program — and it’s the easiest way to earn HS Keys.   Invite your friends using your personal link.   Example: If your friend spends $10 → you get 300 HS Keys No limits. No effort. Just share your link.   Get your referral link here: www.d2rhiddenstash.com/profile     Start earning today
    • https://jumpshare.com/share/L45ApA5PVrGN2O5Ua5pQ   Skill synchronization with the server: Launching and synchronizing animations, launching and synchronizing effects. All of this is tied to the server's timing  
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..