Răsfoiți Sursa

trade chat rework, thx snap

janiii 15 ani în urmă
părinte
comite
3a025dd369

+ 3 - 7
L2_GameServer/java/config/General.properties

@@ -331,9 +331,9 @@ ActivatePositionRecorder = False
 GlobalChat = ON
 GlobalChat = ON
 
 
 # Trade Chat.
 # Trade Chat.
-# Available Options: ON (global), OFF, GM, LIMITED (region)
-# Default: LIMITED
-TradeChat = LIMITED
+# Available Options: ON, OFF, GM, GLOBAL
+# Default: ON
+TradeChat = ON
 
 
 # If you are experiencing problems with Warehouse or Freight transactions, feel free to disable them here.
 # If you are experiencing problems with Warehouse or Freight transactions, feel free to disable them here.
 # Default: True
 # Default: True
@@ -750,10 +750,6 @@ TestServer = False
 # Default: False
 # Default: False
 ListTestServers = False
 ListTestServers = False
 
 
-# Don't load quests.
-# Default: False
-AltDevNoQuests = False
-
 # Don't load spawntable.
 # Don't load spawntable.
 # Default: False
 # Default: False
 AltDevNoSpawns = False
 AltDevNoSpawns = False

+ 34 - 25
L2_GameServer/java/config/floodprotector.properties

@@ -1,70 +1,79 @@
-# ======================
-# Flood protector config
-# ======================
-# These settings apply flood protector to following features:
+# ---------------------------------------------------------------------------
+# Floodprotector Options
+# ---------------------------------------------------------------------------
+# The following settings can be applied to each feature:
+# Interval - Sets the delay in ticks (1 tick = 100ms) between how often that function is allowed
+# LogFlooding - Whether flooding should be logged (only first ocurrance of flooding and total count of flood requests is logged)
+# PunishmentLimit - If number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
+# PunishmentType - Type of the punishment ('none', 'ban', 'jail'), used only if PunishmentLimit is greater than zero
+# PunishmentTime - If a punish limit and type are defined, this sets many minutes should the player/account be punished (0 = forever)
+
 # UseItem - item usage flooding
 # UseItem - item usage flooding
-# RollDice - rolling dice flooding
-# Firework - firework flooding
-# ItemPetSummon - item summonning and pet mounting flooding
-# HeroVoice - hero voice flooding
-# Subclass - subclass flooding
-# DropItem - drop item flooding
-# ServerBypass - server bypass flooding
-# Following settings can be applied to each feature:
-# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one
-#            request is allowed
-# LogFlooding - whether flooding should be logged (only first ocurrance of
-#               flooding and total count of flood requests is logged)
 FloodProtectorUseItemInterval = 4
 FloodProtectorUseItemInterval = 4
 FloodProtectorUseItemLogFlooding = False
 FloodProtectorUseItemLogFlooding = False
-# PunishmentLimit - if number of requests within single interval exceeds
-# specified number then specified punishment is applied
-# (0 - disables punishment feature)
 FloodProtectorUseItemPunishmentLimit = 0
 FloodProtectorUseItemPunishmentLimit = 0
-# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail')
-# valid only if PunishmentLimit is greater than zero
 FloodProtectorUseItemPunishmentType = none
 FloodProtectorUseItemPunishmentType = none
-# PunishmentTime - for how many minutes should be the player/account punished,
-# player is punished in case of 'jail', account is punished
-# in case of 'ban' (0 = forever)
 FloodProtectorUseItemPunishmentTime = 0
 FloodProtectorUseItemPunishmentTime = 0
+
+# RollDice - rolling dice flooding
 FloodProtectorRollDiceInterval = 42
 FloodProtectorRollDiceInterval = 42
 FloodProtectorRollDiceLogFlooding = False
 FloodProtectorRollDiceLogFlooding = False
 FloodProtectorRollDicePunishmentLimit = 0
 FloodProtectorRollDicePunishmentLimit = 0
 FloodProtectorRollDicePunishmentType = none
 FloodProtectorRollDicePunishmentType = none
 FloodProtectorRollDicePunishmentTime = 0
 FloodProtectorRollDicePunishmentTime = 0
+
+# Firework - firework flooding
 FloodProtectorFireworkInterval = 42
 FloodProtectorFireworkInterval = 42
 FloodProtectorFireworkLogFlooding = False
 FloodProtectorFireworkLogFlooding = False
 FloodProtectorFireworkPunishmentLimit = 0
 FloodProtectorFireworkPunishmentLimit = 0
 FloodProtectorFireworkPunishmentType = none
 FloodProtectorFireworkPunishmentType = none
 FloodProtectorFireworkPunishmentTime = 0
 FloodProtectorFireworkPunishmentTime = 0
+
+# ItemPetSummon - item summonning and pet mounting flooding
 FloodProtectorItemPetSummonInterval = 16
 FloodProtectorItemPetSummonInterval = 16
 FloodProtectorItemPetSummonLogFlooding = False
 FloodProtectorItemPetSummonLogFlooding = False
 FloodProtectorItemPetSummonPunishmentLimit = 0
 FloodProtectorItemPetSummonPunishmentLimit = 0
 FloodProtectorItemPetSummonPunishmentType = none
 FloodProtectorItemPetSummonPunishmentType = none
 FloodProtectorItemPetSummonPunishmentTime = 0
 FloodProtectorItemPetSummonPunishmentTime = 0
+
+# HeroVoice - hero voice flooding
 FloodProtectorHeroVoiceInterval = 100
 FloodProtectorHeroVoiceInterval = 100
 FloodProtectorHeroVoiceLogFlooding = False
 FloodProtectorHeroVoiceLogFlooding = False
 FloodProtectorHeroVoicePunishmentLimit = 0
 FloodProtectorHeroVoicePunishmentLimit = 0
 FloodProtectorHeroVoicePunishmentType = none
 FloodProtectorHeroVoicePunishmentType = none
 FloodProtectorHeroVoicePunishmentTime = 0
 FloodProtectorHeroVoicePunishmentTime = 0
+
+# GlobalChat - global chat flooding
+FloodProtectorGlobalChatInterval = 5
+FloodProtectorGlobalChatLogFlooding = False
+FloodProtectorGlobalChatPunishmentLimit = 0
+FloodProtectorGlobalChatPunishmentType = none
+FloodProtectorGlobalChatPunishmentTime = 0
+
+# Subclass - subclass flooding
 FloodProtectorSubclassInterval = 20
 FloodProtectorSubclassInterval = 20
 FloodProtectorSubclassLogFlooding = False
 FloodProtectorSubclassLogFlooding = False
 FloodProtectorSubclassPunishmentLimit = 0
 FloodProtectorSubclassPunishmentLimit = 0
 FloodProtectorSubclassPunishmentType = none
 FloodProtectorSubclassPunishmentType = none
 FloodProtectorSubclassPunishmentTime = 0
 FloodProtectorSubclassPunishmentTime = 0
+
+# DropItem - drop item flooding
 FloodProtectorDropItemInterval = 10
 FloodProtectorDropItemInterval = 10
 FloodProtectorDropItemLogFlooding = False
 FloodProtectorDropItemLogFlooding = False
 FloodProtectorDropItemPunishmentLimit = 0
 FloodProtectorDropItemPunishmentLimit = 0
 FloodProtectorDropItemPunishmentType = none
 FloodProtectorDropItemPunishmentType = none
 FloodProtectorDropItemPunishmentTime = 0
 FloodProtectorDropItemPunishmentTime = 0
+
+# ServerBypass - server bypass flooding
 FloodProtectorServerBypassInterval = 5
 FloodProtectorServerBypassInterval = 5
 FloodProtectorServerBypassLogFlooding = False
 FloodProtectorServerBypassLogFlooding = False
 FloodProtectorServerBypassPunishmentLimit = 0
 FloodProtectorServerBypassPunishmentLimit = 0
 FloodProtectorServerBypassPunishmentType = none
 FloodProtectorServerBypassPunishmentType = none
 FloodProtectorServerBypassPunishmentTime = 0
 FloodProtectorServerBypassPunishmentTime = 0
+
+# ServerBypass - multisell list request flooding
 FloodProtectorMultiSellInterval = 1
 FloodProtectorMultiSellInterval = 1
 FloodProtectorMultiSellLogFlooding = False
 FloodProtectorMultiSellLogFlooding = False
 FloodProtectorMultiSellPunishmentLimit = 0
 FloodProtectorMultiSellPunishmentLimit = 0
 FloodProtectorMultiSellPunishmentType = none
 FloodProtectorMultiSellPunishmentType = none
-FloodProtectorMultiSellPunishmentTime = 0
+FloodProtectorMultiSellPunishmentTime = 0

+ 36 - 44
L2_GameServer/java/net/sf/l2j/Config.java

@@ -357,7 +357,6 @@ public final class Config
 	public static boolean DEVELOPER;
 	public static boolean DEVELOPER;
 	public static boolean ACCEPT_GEOEDITOR_CONN;
 	public static boolean ACCEPT_GEOEDITOR_CONN;
 	public static boolean TEST_SERVER;
 	public static boolean TEST_SERVER;
-	public static boolean ALT_DEV_NO_QUESTS;
 	public static boolean ALT_DEV_NO_SPAWNS;
 	public static boolean ALT_DEV_NO_SPAWNS;
 	public static boolean SERVER_LIST_TESTSERVER;
 	public static boolean SERVER_LIST_TESTSERVER;
 	public static int THREAD_P_EFFECTS;
 	public static int THREAD_P_EFFECTS;
@@ -369,24 +368,6 @@ public final class Config
 	public static boolean DEADLOCK_DETECTOR;
 	public static boolean DEADLOCK_DETECTOR;
 	public static int DEADLOCK_CHECK_INTERVAL;
 	public static int DEADLOCK_CHECK_INTERVAL;
 	public static boolean RESTART_ON_DEADLOCK;
 	public static boolean RESTART_ON_DEADLOCK;
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_USE_ITEM =
-		new FloodProtectorConfig("UseItemFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_ROLL_DICE =
-		new FloodProtectorConfig("RollDiceFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_FIREWORK =
-		new FloodProtectorConfig("FireworkFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_ITEM_PET_SUMMON =
-		new FloodProtectorConfig("ItemPetSummonFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_HERO_VOICE =
-		new FloodProtectorConfig("HeroVoiceFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_SUBCLASS =
-		new FloodProtectorConfig("SubclassFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_DROP_ITEM =
-		new FloodProtectorConfig("DropItemFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_SERVER_BYPASS =
-		new FloodProtectorConfig("ServerBypassFloodProtector");
-	public static final FloodProtectorConfig FLOOD_PROTECTOR_MULTISELL =
-		new FloodProtectorConfig("MultiSellFloodProtector");
 	public static boolean ALLOW_DISCARDITEM;
 	public static boolean ALLOW_DISCARDITEM;
 	public static int AUTODESTROY_ITEM_AFTER;
 	public static int AUTODESTROY_ITEM_AFTER;
 	public static int HERB_AUTO_DESTROY_TIME;
 	public static int HERB_AUTO_DESTROY_TIME;
@@ -519,6 +500,31 @@ public final class Config
 	public static boolean CUSTOM_MERCHANT_TABLES;
 	public static boolean CUSTOM_MERCHANT_TABLES;
 
 
 
 
+	//--------------------------------------------------
+	// FloodProtector Settings
+	//--------------------------------------------------
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_USE_ITEM =
+		new FloodProtectorConfig("UseItemFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_ROLL_DICE =
+		new FloodProtectorConfig("RollDiceFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_FIREWORK =
+		new FloodProtectorConfig("FireworkFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_ITEM_PET_SUMMON =
+		new FloodProtectorConfig("ItemPetSummonFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_HERO_VOICE =
+		new FloodProtectorConfig("HeroVoiceFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_GLOBAL_CHAT =
+		new FloodProtectorConfig("GlobalChatFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_SUBCLASS =
+		new FloodProtectorConfig("SubclassFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_DROP_ITEM =
+		new FloodProtectorConfig("DropItemFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_SERVER_BYPASS =
+		new FloodProtectorConfig("ServerBypassFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_MULTISELL =
+		new FloodProtectorConfig("MultiSellFloodProtector");
+
+
 	//--------------------------------------------------
 	//--------------------------------------------------
 	// L2JMods Settings
 	// L2JMods Settings
 	//--------------------------------------------------
 	//--------------------------------------------------
@@ -717,20 +723,16 @@ public final class Config
 	public static int MIN_PROTOCOL_REVISION;
 	public static int MIN_PROTOCOL_REVISION;
 	public static int MAX_PROTOCOL_REVISION;
 	public static int MAX_PROTOCOL_REVISION;
 	public static boolean LOG_LOGIN_CONTROLLER;
 	public static boolean LOG_LOGIN_CONTROLLER;
-	
-	/** ************************************************** **/
-	/** MMO Settings - Begin **/
-	/** ************************************************** **/
-	
+
+
+	//--------------------------------------------------
+	// MMO Settings
+	//--------------------------------------------------
 	public static int MMO_SELECTOR_SLEEP_TIME;
 	public static int MMO_SELECTOR_SLEEP_TIME;
 	public static int MMO_MAX_SEND_PER_PASS;
 	public static int MMO_MAX_SEND_PER_PASS;
 	public static int MMO_MAX_READ_PER_PASS;
 	public static int MMO_MAX_READ_PER_PASS;
 	public static int MMO_HELPER_BUFFER_COUNT;
 	public static int MMO_HELPER_BUFFER_COUNT;
 	public static int MMO_IO_SELECTOR_THREAD_COUNT;
 	public static int MMO_IO_SELECTOR_THREAD_COUNT;
-	
-	/** ************************************************** **/
-	/** MMO Settings - End **/
-	/** ************************************************** **/
 
 
 
 
 	//--------------------------------------------------
 	//--------------------------------------------------
@@ -1398,7 +1400,6 @@ public final class Config
 					ACCEPT_GEOEDITOR_CONN = Boolean.parseBoolean(General.getProperty("AcceptGeoeditorConn", "false"));
 					ACCEPT_GEOEDITOR_CONN = Boolean.parseBoolean(General.getProperty("AcceptGeoeditorConn", "false"));
 					TEST_SERVER = Boolean.parseBoolean(General.getProperty("TestServer", "false"));
 					TEST_SERVER = Boolean.parseBoolean(General.getProperty("TestServer", "false"));
 					SERVER_LIST_TESTSERVER = Boolean.parseBoolean(General.getProperty("ListTestServers", "false"));
 					SERVER_LIST_TESTSERVER = Boolean.parseBoolean(General.getProperty("ListTestServers", "false"));
-					ALT_DEV_NO_QUESTS = Boolean.parseBoolean(General.getProperty("AltDevNoQuests", "False"));
 					ALT_DEV_NO_SPAWNS = Boolean.parseBoolean(General.getProperty("AltDevNoSpawns", "False"));
 					ALT_DEV_NO_SPAWNS = Boolean.parseBoolean(General.getProperty("AltDevNoSpawns", "False"));
 					THREAD_P_EFFECTS = Integer.parseInt(General.getProperty("ThreadPoolSizeEffects", "10"));
 					THREAD_P_EFFECTS = Integer.parseInt(General.getProperty("ThreadPoolSizeEffects", "10"));
 					THREAD_P_GENERAL = Integer.parseInt(General.getProperty("ThreadPoolSizeGeneral", "13"));
 					THREAD_P_GENERAL = Integer.parseInt(General.getProperty("ThreadPoolSizeGeneral", "13"));
@@ -1448,7 +1449,7 @@ public final class Config
 					ZONE_TOWN = Integer.parseInt(General.getProperty("ZoneTown", "0"));
 					ZONE_TOWN = Integer.parseInt(General.getProperty("ZoneTown", "0"));
 					ACTIVATE_POSITION_RECORDER = Boolean.parseBoolean(General.getProperty("ActivatePositionRecorder", "False"));
 					ACTIVATE_POSITION_RECORDER = Boolean.parseBoolean(General.getProperty("ActivatePositionRecorder", "False"));
 					DEFAULT_GLOBAL_CHAT = General.getProperty("GlobalChat", "ON");
 					DEFAULT_GLOBAL_CHAT = General.getProperty("GlobalChat", "ON");
-					DEFAULT_TRADE_CHAT = General.getProperty("TradeChat", "LIMITED");
+					DEFAULT_TRADE_CHAT = General.getProperty("TradeChat", "ON");
 					ALLOW_WAREHOUSE = Boolean.parseBoolean(General.getProperty("AllowWarehouse", "True"));
 					ALLOW_WAREHOUSE = Boolean.parseBoolean(General.getProperty("AllowWarehouse", "True"));
 					WAREHOUSE_CACHE = Boolean.parseBoolean(General.getProperty("WarehouseCache", "False"));
 					WAREHOUSE_CACHE = Boolean.parseBoolean(General.getProperty("WarehouseCache", "False"));
 					WAREHOUSE_CACHE_TIME = Integer.parseInt(General.getProperty("WarehouseCacheTime", "15"));
 					WAREHOUSE_CACHE_TIME = Integer.parseInt(General.getProperty("WarehouseCacheTime", "15"));
@@ -1573,7 +1574,6 @@ public final class Config
 					security.load(is);
 					security.load(is);
 					
 					
 					loadFloodProtectorConfigs(security);
 					loadFloodProtectorConfigs(security);
-					
 				}
 				}
 				catch (Exception e)
 				catch (Exception e)
 				{
 				{
@@ -1695,7 +1695,6 @@ public final class Config
 						_log.warning("Error while loading Player XP percent lost");
 						_log.warning("Error while loading Player XP percent lost");
 						e.printStackTrace();
 						e.printStackTrace();
 					}
 					}
-					
 				}
 				}
 				catch (Exception e)
 				catch (Exception e)
 				{
 				{
@@ -1977,7 +1976,6 @@ public final class Config
 					e.printStackTrace();
 					e.printStackTrace();
 					throw new Error("Failed to Load "+PVP_CONFIG_FILE+" File.");
 					throw new Error("Failed to Load "+PVP_CONFIG_FILE+" File.");
 				}
 				}
-
 				try
 				try
 				{
 				{
 					Properties Settings = new Properties();
 					Properties Settings = new Properties();
@@ -2062,7 +2060,6 @@ public final class Config
 					e.printStackTrace();
 					e.printStackTrace();
 					throw new Error("Failed to Load " + LOGIN_CONFIGURATION_FILE + " File.");
 					throw new Error("Failed to Load " + LOGIN_CONFIGURATION_FILE + " File.");
 				}
 				}
-				
 				// MMO 
 				// MMO 
 				try
 				try
 				{
 				{
@@ -2373,8 +2370,8 @@ public final class Config
 		else if (pName.equalsIgnoreCase("PvPVsNormalTime")) PVP_NORMAL_TIME = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PvPVsNormalTime")) PVP_NORMAL_TIME = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PvPVsPvPTime")) PVP_PVP_TIME = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PvPVsPvPTime")) PVP_PVP_TIME = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("GlobalChat")) DEFAULT_GLOBAL_CHAT = pValue;
 		else if (pName.equalsIgnoreCase("GlobalChat")) DEFAULT_GLOBAL_CHAT = pValue;
-		else if (pName.equalsIgnoreCase("TradeChat"))	DEFAULT_TRADE_CHAT = pValue;
-		else if (pName.equalsIgnoreCase("GMAdminMenuStyle"))	GM_ADMIN_MENU_STYLE = pValue;
+		else if (pName.equalsIgnoreCase("TradeChat")) DEFAULT_TRADE_CHAT = pValue;
+		else if (pName.equalsIgnoreCase("GMAdminMenuStyle")) GM_ADMIN_MENU_STYLE = pValue;
 		else return false;
 		else return false;
 		return true;
 		return true;
 	}
 	}
@@ -2421,9 +2418,6 @@ public final class Config
 	
 	
 	/**
 	/**
 	 * Loads flood protector configurations.
 	 * Loads flood protector configurations.
-	 * 
-	 * @param properties
-	 *            properties file reader
 	 */
 	 */
 	private static void loadFloodProtectorConfigs(final Properties properties)
 	private static void loadFloodProtectorConfigs(final Properties properties)
 	{
 	{
@@ -2432,6 +2426,7 @@ public final class Config
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_FIREWORK, "Firework", "42");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_FIREWORK, "Firework", "42");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_ITEM_PET_SUMMON, "ItemPetSummon", "16");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_ITEM_PET_SUMMON, "ItemPetSummon", "16");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_HERO_VOICE, "HeroVoice", "100");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_HERO_VOICE, "HeroVoice", "100");
+		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_GLOBAL_CHAT, "GlobalChat", "5");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SUBCLASS, "Subclass", "20");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SUBCLASS, "Subclass", "20");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_DROP_ITEM, "DropItem", "10");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_DROP_ITEM, "DropItem", "10");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SERVER_BYPASS, "ServerBypass", "5");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SERVER_BYPASS, "ServerBypass", "5");
@@ -2451,15 +2446,12 @@ public final class Config
 	 * @param defaultInterval
 	 * @param defaultInterval
 	 *            default flood protector interval
 	 *            default flood protector interval
 	 */
 	 */
-	private static void loadFloodProtectorConfig(final Properties properties,
-	        final FloodProtectorConfig config, final String configString,
-	        final String defaultInterval)
+	private static void loadFloodProtectorConfig(final Properties properties, final FloodProtectorConfig config, final String configString, final String defaultInterval)
 	{
 	{
 		config.FLOOD_PROTECTION_INTERVAL = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "Interval"), defaultInterval));
 		config.FLOOD_PROTECTION_INTERVAL = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "Interval"), defaultInterval));
 		config.LOG_FLOODING = Boolean.parseBoolean(properties.getProperty(StringUtil.concat("FloodProtector", configString, "LogFlooding"), "False"));
 		config.LOG_FLOODING = Boolean.parseBoolean(properties.getProperty(StringUtil.concat("FloodProtector", configString, "LogFlooding"), "False"));
 		config.PUNISHMENT_LIMIT = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentLimit"), "0"));
 		config.PUNISHMENT_LIMIT = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentLimit"), "0"));
 		config.PUNISHMENT_TYPE = properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentType"), "none");
 		config.PUNISHMENT_TYPE = properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentType"), "none");
 		config.PUNISHMENT_TIME = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentTime"), "0"));
 		config.PUNISHMENT_TIME = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentTime"), "0"));
-		
 	}
 	}
-}
+}

+ 15 - 0
L2_GameServer/java/net/sf/l2j/gameserver/util/FloodProtectors.java

@@ -43,6 +43,10 @@ public final class FloodProtectors
 	 * Hero-voice flood protector.
 	 * Hero-voice flood protector.
 	 */
 	 */
 	private final FloodProtectorAction _heroVoice;
 	private final FloodProtectorAction _heroVoice;
+	/**
+	 * Global-chat flood protector.
+	 */
+	private final FloodProtectorAction _globalChat;
 	/**
 	/**
 	 * Subclass flood protector.
 	 * Subclass flood protector.
 	 */
 	 */
@@ -74,6 +78,7 @@ public final class FloodProtectors
 		_firework = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_FIREWORK);
 		_firework = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_FIREWORK);
 		_itemPetSummon = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_ITEM_PET_SUMMON);
 		_itemPetSummon = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_ITEM_PET_SUMMON);
 		_heroVoice = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_HERO_VOICE);
 		_heroVoice = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_HERO_VOICE);
+		_globalChat = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_GLOBAL_CHAT);
 		_subclass = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_SUBCLASS);
 		_subclass = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_SUBCLASS);
 		_dropItem = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_DROP_ITEM);
 		_dropItem = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_DROP_ITEM);
 		_serverBypass = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_SERVER_BYPASS);
 		_serverBypass = new FloodProtectorAction(player, Config.FLOOD_PROTECTOR_SERVER_BYPASS);
@@ -130,6 +135,16 @@ public final class FloodProtectors
 		return _heroVoice;
 		return _heroVoice;
 	}
 	}
 	
 	
+	/**
+	 * Returns {@link #_globalChat}.
+	 * 
+	 * @return {@link #_globalChat}
+	 */
+	public FloodProtectorAction getGlobalChat()
+	{
+		return _globalChat;
+	}
+	
 	/**
 	/**
 	 * Returns {@link #_subclass}.
 	 * Returns {@link #_subclass}.
 	 * 
 	 *