Răsfoiți Sursa

Adding ClanNameTemplate config, making clans to use specific name patterns in their name.
If you set the config to '''[A-Za-z0-9]*''' you will force clan names to use only latin characters, thus evading some exploits that can be caused by clan names with non-latin characters.

Nik 13 ani în urmă
părinte
comite
5c7395e040

+ 4 - 0
L2J_Server_BETA/dist/game/config/server.properties

@@ -103,6 +103,10 @@ CnameTemplate = .*
 # See CnameTemplate for details
 PetNameTemplate = .*
 
+# This setting restricts clan/subpledge names players can set.
+# See CnameTemplate for details
+ClanNameTemplate = .*
+
 # Maximum number of characters per account.
 # Default: 7 (client limit)
 CharMaxNumber = 7

+ 2 - 0
L2J_Server_BETA/java/com/l2jserver/Config.java

@@ -919,6 +919,7 @@ public final class Config
 	public static int MAXIMUM_ONLINE_USERS;
 	public static String CNAME_TEMPLATE;
 	public static String PET_NAME_TEMPLATE;
+	public static String CLAN_NAME_TEMPLATE;
 	public static int MAX_CHARACTERS_NUMBER_PER_ACCOUNT;
 	public static File DATAPACK_ROOT;
 	public static boolean ACCEPT_ALTERNATE_ID;
@@ -1169,6 +1170,7 @@ public final class Config
 					
 					CNAME_TEMPLATE = serverSettings.getProperty("CnameTemplate", ".*");
 					PET_NAME_TEMPLATE = serverSettings.getProperty("PetNameTemplate", ".*");
+					CLAN_NAME_TEMPLATE = serverSettings.getProperty("ClanNameTemplate", ".*");
 					
 					MAX_CHARACTERS_NUMBER_PER_ACCOUNT = Integer.parseInt(serverSettings.getProperty("CharMaxNumber", "0"));
 					MAXIMUM_ONLINE_USERS = Integer.parseInt(serverSettings.getProperty("MaximumOnlineUsers", "100"));

+ 33 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java

@@ -16,6 +16,9 @@ package com.l2jserver.gameserver.model.actor.instance;
 
 import java.util.Iterator;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import javolution.util.FastList;
 
@@ -103,6 +106,12 @@ public class L2VillageMasterInstance extends L2NpcInstance
 			if (cmdParams.isEmpty())
 				return;
 			
+			if (!isValidName(cmdParams))
+			{
+				player.sendPacket(SystemMessageId.CLAN_NAME_INCORRECT);
+				return;
+			}
+			
 			ClanTable.getInstance().createClan(player, cmdParams);
 		}
 		else if (actualCommand.equalsIgnoreCase("create_academy"))
@@ -916,7 +925,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 			
 			return;
 		}
-		if (!Util.isAlphaNumeric(clanName) || 2 > clanName.length())
+		if (!Util.isAlphaNumeric(clanName) || !isValidName(clanName) || 2 > clanName.length())
 		{
 			player.sendPacket(SystemMessageId.CLAN_NAME_INCORRECT);
 			return;
@@ -1012,7 +1021,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 			player.sendMessage("Pledge don't exists.");
 			return;
 		}
-		if (!Util.isAlphaNumeric(pledgeName) || 2 > pledgeName.length())
+		if (!Util.isAlphaNumeric(pledgeName) || !isValidName(pledgeName) || 2 > pledgeName.length())
 		{
 			player.sendPacket(SystemMessageId.CLAN_NAME_INCORRECT);
 			return;
@@ -1135,4 +1144,26 @@ public class L2VillageMasterInstance extends L2NpcInstance
 		}
 		player.sendPacket(ActionFailed.STATIC_PACKET);
 	}
+	
+	private static boolean isValidName(String text)
+	{
+		boolean result = true;
+		String test = text;
+		Pattern pattern;
+		try
+		{
+			pattern = Pattern.compile(Config.CLAN_NAME_TEMPLATE);
+		}
+		catch (PatternSyntaxException e) // case of illegal pattern
+		{
+			_log.warning("ERROR : Clan name pattern of config is wrong!");
+			pattern = Pattern.compile(".*");
+		}
+		Matcher regexp = pattern.matcher(test);
+		if (!regexp.matches())
+		{
+			result = false;
+		}
+		return result;
+	}
 }