Kaynağa Gözat

L2j Gracia Epilogue release.
Please do not update until whole merge process is finished.
Client protocol is 146. Changelog will be posted later on forum.
Merry Christmas!

JIV 15 yıl önce
ebeveyn
işleme
3a9f16fdb1
100 değiştirilmiş dosya ile 4631 ekleme ve 1160 silme
  1. 12 11
      L2_GameServer/.classpath
  2. 1 1
      L2_GameServer/.project
  3. 187 253
      L2_GameServer/build.xml
  4. 1 1
      L2_GameServer/data/announcements.txt
  5. BIN
      L2_GameServer/dist/GSRegister.exe
  6. 1 1
      L2_GameServer/dist/GameServer_loop.sh
  7. BIN
      L2_GameServer/dist/L2JConfig.exe
  8. 1 1
      L2_GameServer/dist/L2JConfig.sh
  9. 1 1
      L2_GameServer/dist/LoginServer_loop.sh
  10. 3 1
      L2_GameServer/dist/RegisterGameServer.bat
  11. 1 1
      L2_GameServer/dist/RegisterGameServer.sh
  12. 3 3
      L2_GameServer/dist/startGameServer.bat
  13. 1 1
      L2_GameServer/dist/startLoginServer.bat
  14. 1 1
      L2_GameServer/dist/startSQLAccountManager.bat
  15. 1 1
      L2_GameServer/dist/startSQLAccountManager.sh
  16. 3 2
      L2_GameServer/java/com/l2jserver/Base64.java
  17. 345 71
      L2_GameServer/java/com/l2jserver/Config.java
  18. 1 1
      L2_GameServer/java/com/l2jserver/L2DatabaseFactory.java
  19. 1 1
      L2_GameServer/java/com/l2jserver/Server.java
  20. 6 5
      L2_GameServer/java/com/l2jserver/accountmanager/SQLAccountManager.java
  21. 37 14
      L2_GameServer/java/com/l2jserver/configurator/ConfigUserInterface.java
  22. 1 1
      L2_GameServer/java/com/l2jserver/configurator/JIPTextField.java
  23. 14 13
      L2_GameServer/java/com/l2jserver/gameserver/Announcements.java
  24. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/CastleUpdater.java
  25. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/Crypt.java
  26. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/CustomPacketHandlerInterface.java
  27. 5 4
      L2_GameServer/java/com/l2jserver/gameserver/FortUpdater.java
  28. 107 98
      L2_GameServer/java/com/l2jserver/gameserver/GameServer.java
  29. 6 5
      L2_GameServer/java/com/l2jserver/gameserver/GameTimeController.java
  30. 8 7
      L2_GameServer/java/com/l2jserver/gameserver/GeoData.java
  31. 26 26
      L2_GameServer/java/com/l2jserver/gameserver/GeoEngine.java
  32. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/GmListTable.java
  33. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/InstanceListManager.java
  34. 3 3
      L2_GameServer/java/com/l2jserver/gameserver/Item.java
  35. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/ItemsAutoDestroy.java
  36. 43 27
      L2_GameServer/java/com/l2jserver/gameserver/LoginServerThread.java
  37. 8 7
      L2_GameServer/java/com/l2jserver/gameserver/MonsterRace.java
  38. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/PacketHistory.java
  39. 27 26
      L2_GameServer/java/com/l2jserver/gameserver/RecipeController.java
  40. 18 17
      L2_GameServer/java/com/l2jserver/gameserver/SevenSigns.java
  41. 31 30
      L2_GameServer/java/com/l2jserver/gameserver/SevenSignsFestival.java
  42. 27 51
      L2_GameServer/java/com/l2jserver/gameserver/Shutdown.java
  43. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/TaskPriority.java
  44. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/Territory.java
  45. 12 6
      L2_GameServer/java/com/l2jserver/gameserver/ThreadPoolManager.java
  46. 13 10
      L2_GameServer/java/com/l2jserver/gameserver/TradeController.java
  47. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/Universe.java
  48. 24 23
      L2_GameServer/java/com/l2jserver/gameserver/ai/AbstractAI.java
  49. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/ai/Ctrl.java
  50. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/ai/CtrlEvent.java
  51. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/ai/CtrlIntention.java
  52. 2534 0
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2AttackableAI.java
  53. 218 42
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2CharacterAI.java
  54. 19 18
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java
  55. 9 17
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2DoorAI.java
  56. 38 37
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java
  57. 9 8
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2NpcWalkerAI.java
  58. 156 0
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2PlayableAI.java
  59. 21 24
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2PlayerAI.java
  60. 30 29
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java
  61. 11 8
      L2_GameServer/java/com/l2jserver/gameserver/ai/L2SummonAI.java
  62. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiEvent.java
  63. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiEventType.java
  64. 3 2
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiInstance.java
  65. 9 6
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiManager.java
  66. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiParameters.java
  67. 3 2
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiPlugingParameters.java
  68. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/ai2/AiUtil.java
  69. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/ai2/EventHandler.java
  70. 3 2
      L2_GameServer/java/com/l2jserver/gameserver/ai2/EventHandlerSet.java
  71. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/ai2/ISpecificAiManager.java
  72. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/cache/CrestCache.java
  73. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/cache/FastMRUCache.java
  74. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/cache/HtmCache.java
  75. 5 4
      L2_GameServer/java/com/l2jserver/gameserver/cache/WarehouseCacheManager.java
  76. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Forum.java
  77. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Post.java
  78. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Topic.java
  79. 12 12
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/CommunityBoard.java
  80. 5 5
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/AdminBBSManager.java
  81. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/BaseBBSManager.java
  82. 9 8
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/ClanBBSManager.java
  83. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/ForumsBBSManager.java
  84. 11 10
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java
  85. 18 17
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java
  86. 7 6
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java
  87. 11 10
      L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopicBBSManager.java
  88. 5 4
      L2_GameServer/java/com/l2jserver/gameserver/datatables/AccessLevels.java
  89. 5 4
      L2_GameServer/java/com/l2jserver/gameserver/datatables/AdminCommandAccessRights.java
  90. 5 4
      L2_GameServer/java/com/l2jserver/gameserver/datatables/ArmorSetsTable.java
  91. 9 8
      L2_GameServer/java/com/l2jserver/gameserver/datatables/AugmentationData.java
  92. 312 0
      L2_GameServer/java/com/l2jserver/gameserver/datatables/CharNameTable.java
  93. 10 10
      L2_GameServer/java/com/l2jserver/gameserver/datatables/CharTemplateTable.java
  94. 27 22
      L2_GameServer/java/com/l2jserver/gameserver/datatables/ClanTable.java
  95. 11 10
      L2_GameServer/java/com/l2jserver/gameserver/datatables/DoorTable.java
  96. 11 10
      L2_GameServer/java/com/l2jserver/gameserver/datatables/EnchantHPBonusData.java
  97. 3 2
      L2_GameServer/java/com/l2jserver/gameserver/datatables/EventDroplist.java
  98. 9 7
      L2_GameServer/java/com/l2jserver/gameserver/datatables/ExtractableItemsData.java
  99. 9 8
      L2_GameServer/java/com/l2jserver/gameserver/datatables/ExtractableSkillsData.java
  100. 4 3
      L2_GameServer/java/com/l2jserver/gameserver/datatables/FishTable.java

+ 12 - 11
L2_GameServer/.classpath

@@ -1,14 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry excluding="**/.svn/*|.svn" kind="src" path="java"/>
-	<classpathentry excluding="**/.svn/*|.svn" kind="src" path="javaTest"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="lib" path="lib/jython.jar"/>
-	<classpathentry kind="lib" path="lib/c3p0-0.9.1.2.jar"/>
-	<classpathentry kind="lib" path="lib/mmocore.jar"/>
-	<classpathentry kind="lib" path="lib/jython-engine.jar"/>
-	<classpathentry kind="lib" path="lib/javolution-5.3.1.jar"/>
-	<classpathentry kind="lib" path="lib/trove-2.1.0.jar"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry excluding="**/.svn/*|.svn" kind="src" path="java" />
+	<classpathentry excluding="**/.svn/*|.svn" kind="src" path="javaTest" />
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4" />
+	<classpathentry kind="lib" path="lib/jython.jar" />
+	<classpathentry kind="lib" path="lib/c3p0-0.9.1.2.jar" />
+	<classpathentry kind="lib" path="lib/mmocore.jar" />
+	<classpathentry kind="lib" path="lib/netcon.jar" />
+	<classpathentry kind="lib" path="lib/jython-engine.jar" />
+	<classpathentry kind="lib" path="lib/javolution-5.3.1.jar" />
+	<classpathentry kind="lib" path="lib/trove-2.1.0.jar" />
+	<classpathentry kind="output" path="bin" />
 </classpath>

+ 1 - 1
L2_GameServer/.project

@@ -16,4 +16,4 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
 	</natures>
-</projectDescription>
+</projectDescription>

+ 187 - 253
L2_GameServer/build.xml

@@ -1,281 +1,215 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project name="L2J_Server" default="dist" basedir=".">
-    <description>
-        This script will build the L2J server.
-        
-        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, 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, write to the Free Software
-        Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-        02111-1307, USA.
-        
-        http://www.gnu.org/copyleft/gpl.html      
-        
-    </description>
-    
-    <property name="src" location="java"/>
-    <property name="lib" location="lib"/>
-    <property name="build" location="build"/>
-    <property name="build.classes" location="${build}/classes"/>
-    <property name="build.dist" location="${build}/dist"/>
-	<property name="build.dist.login" location="${build.dist}/login"/>
-	<property name="build.dist.game" location="${build.dist}/gameserver"/>
-    <property name="build.dist.libs" location="${build.dist}/libs"/>
-	<property name="build.dist.languages" location="${build.dist}/languages"/>
-	<property name="build.dist.images" location="${build.dist}/images"/>
-	
-    <path id="classpath">
-        <fileset dir="${lib}">
-            <include name="c3p0-0.9.1.2.jar"/>
-        	<include name="jython.jar"/>
-        	<include name="jython-engine.jar"/>
-        	<include name="javolution-5.3.1.jar"/>
-        	<include name="mmocore.jar"/>
-        	<include name="trove-2.1.0.jar"/>
-        </fileset>
-    </path>
-    
-	<target name="verifyRequirements" 
-		description="Checks if the necessary requirements for building L2J are fulfilled">
-		
-		<available classname="javax.script.ScriptContext" property="JDK6.present"/>
-		<fail unless="JDK6.present" message="JDK 6 or greater is required.">
-		</fail>
+	<description>
+		This script will build the L2J Server.
+
+		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, 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, write to the Free Software
+		Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+		02111-1307, USA.
+
+		http://www.gnu.org/copyleft/gpl.html
+	</description>
+
+	<property name="src" location="java" />
+	<property name="lib" location="lib" />
+	<property name="build" location="build" />
+	<property name="build.classes" location="${build}/classes" />
+	<property name="build.dist" location="${build}/dist" />
+	<property name="build.dist.login" location="${build.dist}/login" />
+	<property name="build.dist.game" location="${build.dist}/gameserver" />
+	<property name="build.dist.libs" location="${build.dist}/libs" />
+	<property name="build.dist.languages" location="${build.dist}/languages" />
+	<property name="build.dist.images" location="${build.dist}/images" />
+	<property name="build.dist.doc" location="${build.dist}/doc" />
+
+	<path id="classpath">
+		<fileset dir="${lib}">
+			<include name="c3p0-0.9.1.2.jar" />
+			<include name="jython.jar" />
+			<include name="jython-engine.jar" />
+			<include name="javolution-5.3.1.jar" />
+			<include name="mmocore.jar" />
+			<include name="trove-2.1.0.jar" />
+			<include name="netcon.jar" />
+		</fileset>
+	</path>
+
+	<target name="verifyRequirements" description="Checks if the necessary requirements for building L2J are fulfilled">
+		<available classname="javax.script.ScriptContext" property="JDK6.present" />
+		<fail unless="JDK6.present" message="JDK 6 or greater is required." />
 	</target>
-	
-    <target name="init"
-    	depends="clean, verifyRequirements"
-        description="Create the output directories.">
 
-        <mkdir dir="${build}"/>
-        <mkdir dir="${build.classes}"/>
-        <mkdir dir="${build.dist}" />
-    	<mkdir dir="${build.dist.login}" />
+	<target name="init" depends="clean, verifyRequirements" description="Create the output directories.">
+		<mkdir dir="${build}" />
+		<mkdir dir="${build.classes}" />
+		<mkdir dir="${build.dist}" />
+		<mkdir dir="${build.dist.login}" />
 		<mkdir dir="${build.dist.game}" />
-    </target>
-    
-    
-    <target name="compile"
-            depends="version"
-            description="Compile the source.">
+	</target>
 
-        <javac destdir="${build.classes}"
-               optimize="on"
-               debug="on"
-               source="1.6"
-               target="1.6"
-               nowarn="off">
-            <src path="${src}"/>
-            <classpath refid="classpath"/>   
-        </javac>
-    </target>
-    
-    
-    <target name="jar"
-            depends="compile"
-            description="Create the jar file">
+	<target name="compile" depends="version" description="Compile the source.">
+		<javac destdir="${build.classes}" optimize="on" debug="on" source="1.6" target="1.6" nowarn="off">
+			<src path="${src}" />
+			<classpath refid="classpath" />
+		</javac>
+	</target>
 
-        <jar destfile="${build}/l2jserver.jar">
-            <fileset dir="${build.classes}"/>
-        </jar>
-        
-    	<copy todir="${build.dist.login}">
-            <fileset dir="${build}">
-                <include name="l2jserver.jar"/>
+	<target name="jar" depends="compile" description="Create the jar file">
+		<jar destfile="${build}/l2jserver.jar">
+			<fileset dir="${build.classes}" />
+		</jar>
+		<copy todir="${build.dist.login}">
+			<fileset dir="${build}">
+				<include name="l2jserver.jar" />
 			</fileset>
-        </copy>
-    	<copy todir="${build.dist.game}">
-            <fileset dir="${build}">
-                <include name="l2jserver.jar"/>
+		</copy>
+		<copy todir="${build.dist.game}">
+			<fileset dir="${build}">
+				<include name="l2jserver.jar" />
 			</fileset>
-        </copy>
-        
+		</copy>
 	</target>
 
-    <target name="dist" depends="jar">
-    	
-    	<copy todir="${build.dist.login}">
-            <fileset dir="${src}">
-                <include name="log.cfg"/>
-                <include name="banned_ip.cfg"/>
-                <include name="console.cfg"/>
+	<target name="dist" depends="jar">
+		<copy todir="${build.dist.login}">
+			<fileset dir="${src}">
+				<include name="log.cfg" />
+				<include name="banned_ip.cfg" />
+				<include name="console.cfg" />
 			</fileset>
-        </copy>
-    	
-    	<copy todir="${build.dist.game}">
-            <fileset dir="${src}">
-                <include name="log.cfg"/>
-                <include name="console.cfg"/>
+		</copy>
+		<copy todir="${build.dist.game}">
+			<fileset dir="${src}">
+				<include name="log.cfg" />
+				<include name="console.cfg" />
 			</fileset>
-        </copy>
-    	
-	   	<copy todir="${build.dist.libs}">
+		</copy>
+		<copy todir="${build.dist.libs}">
 			<fileset dir="${src}/../lib">
-				<include name="*.jar"/>
+				<include name="*.jar" />
 			</fileset>
 		</copy>
-    	
-    	<copy todir="${build.dist.languages}">
-    	     <fileset dir="${src}/../languages">
-    	         <include name="**/*"/>
-    	     </fileset>
-    	</copy>
-    	
-        <copy todir="${build.dist.images}">
-             <fileset dir="${src}/../images">
-                 <include name="**/*"/>
-             </fileset>
-        </copy>
-    	
-        <copy todir="${build.dist}">
-            <fileset dir="${basedir}">
-                <include name="changes.txt"/>
-                <include name="LICENSE.txt"/>
-                <include name="README.txt"/>
-            </fileset>
-        </copy>
-    	
-	   	<copy todir="${build.dist}">
+		<copy todir="${build.dist.languages}">
+			<fileset dir="${src}/../languages" />
+		</copy>
+		<copy todir="${build.dist.images}">
+			<fileset dir="${src}/../images" />
+		</copy>
+		<copy todir="${build.dist.doc}">
+			<fileset dir="${basedir}">
+				<include name="changes.txt" />
+				<include name="LICENSE.txt" />
+				<include name="README.txt" />
+			</fileset>
+		</copy>
+		<copy todir="${build.dist.doc}">
 			<fileset dir="${src}/../lib">
-				<include name="*LICENSE*"/>
+				<include name="*LICENSE*" />
 			</fileset>
 		</copy>
-        
-        <copy todir="${build.dist.login}">
-            <fileset dir="dist">
-                <include name="startAccountManager.*"/>
-                <include name="startSQLAccountManager.*"/>
-                <include name="LoginServer_loop.sh"/>
-                <include name="startLoginServer.*"/>
-            	<include name="RegisterGameServer.*"/>
-            	<include name="GSRegister.exe"/>
-                <include name="L2JConfig.exe"/>
-            	<include name="L2JConfig.sh"/>
-            </fileset>
-        </copy>
-    	<copy todir="${build.dist.game}">
-            <fileset dir="dist">
-                <include name="GameServer_loop.sh"/>
-                <include name="startGameServer.*"/>
-                <include name="L2JConfig.exe"/>
-            	 <include name="L2JConfig.sh"/>
-            	<include name="hibernate.cfg.xml"/>
-            </fileset>
-        </copy>
-    	
-		<fixcrlf 	srcdir="${build.dist.game}"
-					eol="lf"
-					eof="remove"
-					includes="**/*.sh">
-		</fixcrlf>
-    	<fixcrlf 	srcdir="${build.dist.login}"
-					eol="lf"
-					eof="remove"
-					includes="**/*.sh">
-		</fixcrlf>
-		
-		<fixcrlf 	srcdir="${build.dist.game}"
-					eol="crlf"
-					eof="remove"
-					includes="**/*.bat">
-		</fixcrlf>
-    	<fixcrlf 	srcdir="${build.dist.login}"
-					eol="crlf"
-					eof="remove"
-					includes="**/*.bat">
-		</fixcrlf>
-
-        
-        <mkdir dir="${build.dist.game}/log" />
-    	<mkdir dir="${build.dist.login}/log" />
-
-        <mkdir dir="${build.dist.game}/config" />
-    	<mkdir dir="${build.dist.login}/config" />
-    	<copy todir="${build.dist.game}/config">
+		<copy todir="${build.dist.login}">
+			<fileset dir="dist">
+				<include name="startAccountManager.*" />
+				<include name="startSQLAccountManager.*" />
+				<include name="LoginServer_loop.sh" />
+				<include name="startLoginServer.*" />
+				<include name="RegisterGameServer.*" />
+				<include name="GSRegister.exe" />
+				<include name="L2JConfig.exe" />
+				<include name="L2JConfig.sh" />
+			</fileset>
+		</copy>
+		<copy todir="${build.dist.game}">
+			<fileset dir="dist">
+				<include name="GameServer_loop.sh" />
+				<include name="startGameServer.*" />
+				<include name="L2JConfig.exe" />
+				<include name="L2JConfig.sh" />
+				<include name="hibernate.cfg.xml" />
+			</fileset>
+		</copy>
+		<fixcrlf srcdir="${build.dist.game}" eol="lf" eof="remove" includes="**/*.sh" />
+		<fixcrlf srcdir="${build.dist.login}" eol="lf" eof="remove" includes="**/*.sh" />
+		<fixcrlf srcdir="${build.dist.game}" eol="crlf" eof="remove" includes="**/*.bat" />
+		<fixcrlf srcdir="${build.dist.login}" eol="crlf" eof="remove" includes="**/*.bat" />
+		<mkdir dir="${build.dist.game}/log" />
+		<mkdir dir="${build.dist.login}/log" />
+		<mkdir dir="${build.dist.game}/config" />
+		<mkdir dir="${build.dist.login}/config" />
+		<copy todir="${build.dist.game}/config">
 			<fileset dir="java/config">
-				<include name="*.properties"/>
+				<include name="*.properties" />
+				<include name="chatfilter.txt" />
 				<exclude name="loginserver.properties" />
 			</fileset>
-        </copy>
-    	<copy todir="${build.dist.login}/config">
+		</copy>
+		<copy todir="${build.dist.login}/config">
 			<fileset dir="java/config">
-				<include name="loginserver.properties"/>
-				<include name="mmo.properties"/>
-				<include name="telnet.properties"/>
+				<include name="loginserver.properties" />
+				<include name="mmo.properties" />
+				<include name="telnet.properties" />
 			</fileset>
 		</copy>
-
-        <mkdir dir="${build.dist.game}/data" />
-        <copy todir="${build.dist.game}/data">
-            <fileset dir="data">
-                <include name="*.csv"/>
-            	<include name="*.txt"/>
+		<mkdir dir="${build.dist.game}/data" />
+		<copy todir="${build.dist.game}/data">
+			<fileset dir="data">
+				<include name="*.csv" />
+				<include name="*.txt" />
 			</fileset>
-        </copy>
-    	
-        <mkdir dir="${build.dist.game}/data/geodata" />
-        <copy todir="${build.dist.game}/data/geodata">
-            <fileset dir="data/geodata">
-                <include name="*.txt"/>
-                <include name="*.l2j"/>
-            </fileset>
-        </copy>
-    	
-    	<mkdir dir="${build.dist.game}/data/pathnode" />
-    	<copy todir="${build.dist.game}/data/pathnode">
-    	    <fileset dir="data/pathnode">
-    	        <include name="*.txt"/>
-    	        <include name="*.pn"/>
-    	    </fileset>
-    	</copy>
-
-        <zip destfile="${build}/L2J_Server.zip"
-             basedir="${build.dist}" />
-    </target>   
-    
-	<target name="version" 
-		depends="init"
-		description="Create l2j-version.properties file">
-		
-    	<tstamp>
-    	  <format property="build.tstamp"
-    	              pattern="yyyyMMdd_HHmm"/>
-    	</tstamp>
-
+		</copy>
+		<mkdir dir="${build.dist.game}/data/geodata" />
+		<copy todir="${build.dist.game}/data/geodata">
+			<fileset dir="data/geodata">
+				<include name="*.txt" />
+				<include name="*.l2j" />
+			</fileset>
+		</copy>
+		<mkdir dir="${build.dist.game}/data/pathnode" />
+		<copy todir="${build.dist.game}/data/pathnode">
+			<fileset dir="data/pathnode">
+				<include name="*.txt" />
+				<include name="*.pn" />
+			</fileset>
+		</copy>
+		<zip destfile="${build}/L2J_Server.zip" basedir="${build.dist}" />
+	</target>
 
-    	<exec dir="." executable="svnversion" outputproperty="l2j.revision"
-			  failifexecutionfails="false">
-    	  <arg line="-n ."/>
-    	</exec>
-    	
-    	<concat destfile="${build.dist.game}/config/l2j-version.properties">
-    	version=${l2j.revision}
-    	builddate=${build.tstamp} 
-      detailed info:
-</concat>
-      <concat destfile="${build.dist.game}/config/l2j-version.properties" append="true">
-        <filelist dir="${src}/../.svn/" files="entries"/>
-        <filterchain>
-          <prefixlines prefix="          "/>
-          <headfilter lines="8" skip="4"/>
-          <tokenfilter>
-             <ignoreblank/>
-          </tokenfilter>
-        </filterchain>
-</concat>
-</target>
+	<target name="version" depends="init" description="Create l2j-version.properties file">
+		<tstamp>
+			<format property="build.tstamp" pattern="yyyyMMdd_HHmm" />
+		</tstamp>
+		<exec dir="." executable="svnversion" outputproperty="l2j.revision" failifexecutionfails="false">
+			<arg line="-n ." />
+		</exec>
+		<concat destfile="${build.dist.game}/config/l2j-version.properties">
+			version=${l2j.revision}
+			builddate=${build.tstamp}
+			detailed info:
+		</concat>
+		<concat destfile="${build.dist.game}/config/l2j-version.properties" append="true">
+			<filelist dir="${src}/../.svn/" files="entries" />
+			<filterchain>
+				<prefixlines prefix="          " />
+				<headfilter lines="8" skip="4" />
+				<tokenfilter>
+					<ignoreblank />
+				</tokenfilter>
+			</filterchain>
+		</concat>
+	</target>
 
-    <target name="clean"
-            description="Remove the output directories">
-        <delete dir="${build}"/>
-    </target>
-</project>
+	<target name="clean" description="Remove the output directories">
+		<delete dir="${build}" />
+	</target>
+</project>

+ 1 - 1
L2_GameServer/data/announcements.txt

@@ -1 +1 @@
-Server admin is too lame to change announcements.txt file ;)
+Thanks for using L2J.

BIN
L2_GameServer/dist/GSRegister.exe


+ 1 - 1
L2_GameServer/dist/GameServer_loop.sh

@@ -7,7 +7,7 @@
 while :; do
 	[ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
 	[ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
-	java -Djava.util.logging.manager=net.sf.l2j.util.L2LogManager -Xms1024m -Xmx1024m -cp ./../libs/*:l2jserver.jar net.sf.l2j.gameserver.GameServer > log/stdout.log 2>&1
+	java -Djava.util.logging.manager=com.l2jserver.util.L2LogManager -Xms1024m -Xmx1024m -cp ./../libs/*:l2jserver.jar com.l2jserver.gameserver.GameServer > log/stdout.log 2>&1
 	[ $? -ne 2 ] && break
 #	/etc/init.d/mysql restart
 	sleep 10

BIN
L2_GameServer/dist/L2JConfig.exe


+ 1 - 1
L2_GameServer/dist/L2JConfig.sh

@@ -1,2 +1,2 @@
 #!/bin/sh
-java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar net.sf.l2j.configurator.ConfigUserInterface
+java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar com.l2jserver.configurator.ConfigUserInterface

+ 1 - 1
L2_GameServer/dist/LoginServer_loop.sh

@@ -5,7 +5,7 @@ until [ $err == 0 ];
 do
 	[ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
 	[ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
-	nice -n -2 java -Xmx128m -cp ./../libs/*:l2jserver.jar net.sf.l2j.loginserver.L2LoginServer > log/stdout.log 2>&1
+	nice -n -2 java -Xms128m -Xmx128m -cp ./../libs/*:l2jserver.jar com.l2jserver.loginserver.L2LoginServer > log/stdout.log 2>&1
 	err=$?
 #	/etc/init.d/mysql restart
 	sleep 10;

+ 3 - 1
L2_GameServer/dist/RegisterGameServer.bat

@@ -1,3 +1,5 @@
 @echo off
-javaw -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jserver.jar net.sf.l2j.gsregistering.BaseGameServerRegister
+color 17
+cls
+java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jserver.jar com.l2jserver.gsregistering.BaseGameServerRegister -c
 exit

+ 1 - 1
L2_GameServer/dist/RegisterGameServer.sh

@@ -1,2 +1,2 @@
 #!/bin/sh
-java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar net.sf.l2j.gsregistering.GameServerRegister
+java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar com.l2jserver.gsregistering.GameServerRegister -c

+ 3 - 3
L2_GameServer/dist/startGameServer.bat

@@ -5,13 +5,13 @@ echo Starting L2J Game Server.
 echo.
 REM -------------------------------------
 REM Default parameters for a basic server.
-java -Djava.util.logging.manager=net.sf.l2j.util.L2LogManager -Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer
+java -Djava.util.logging.manager=com.l2jserver.util.L2LogManager -Xms1024m -Xmx1024m -cp ./../libs/*;l2jserver.jar com.l2jserver.gameserver.GameServer
 REM
 REM If you have a big server and lots of memory, you could experiment for example with
 REM java -server -Xmx1536m -Xms1024m -Xmn512m -XX:PermSize=256m -XX:SurvivorRatio=8 -Xnoclassgc -XX:+AggressiveOpts
 REM If you are having troubles on server shutdown (saving data),
-REM add this to startup paramethers: -Djava.util.logging.manager=net.sf.l2j.L2LogManager. Example:
-REM java -Djava.util.logging.manager=net.sf.l2j.util.L2LogManager -Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer
+REM add this to startup paramethers: -Djava.util.logging.manager=com.l2jserver.L2LogManager. Example:
+REM java -Djava.util.logging.manager=com.l2jserver.util.L2LogManager -Xmx1024m -cp ./../libs/*;l2jserver.jar com.l2jserver.gameserver.GameServer
 REM -------------------------------------
 if ERRORLEVEL 2 goto restart
 if ERRORLEVEL 1 goto error

+ 1 - 1
L2_GameServer/dist/startLoginServer.bat

@@ -3,7 +3,7 @@ title Login Server Console
 :start
 echo Starting L2J Login Server.
 echo.
-java -Xmx128m  -cp ./../libs/*;l2jserver.jar net.sf.l2j.loginserver.L2LoginServer
+java -Xms128m -Xmx128m  -cp ./../libs/*;l2jserver.jar com.l2jserver.loginserver.L2LoginServer
 if ERRORLEVEL 2 goto restart
 if ERRORLEVEL 1 goto error
 goto end

+ 1 - 1
L2_GameServer/dist/startSQLAccountManager.bat

@@ -2,7 +2,7 @@
 cls
 title L2J - SQL Account Manager
 color 17
-java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jserver.jar net.sf.l2j.accountmanager.SQLAccountManager 2> NUL
+java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*;l2jserver.jar com.l2jserver.accountmanager.SQLAccountManager 2> NUL
 if %errorlevel% == 0 (
 echo.
 echo Execution succesful

+ 1 - 1
L2_GameServer/dist/startSQLAccountManager.sh

@@ -1,2 +1,2 @@
 #!/bin/sh
-java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar net.sf.l2j.accountmanager.SQLAccountManager
+java -Djava.util.logging.config.file=console.cfg -cp ./../libs/*:l2jserver.jar com.l2jserver.accountmanager.SQLAccountManager

+ 3 - 2
L2_GameServer/java/net/sf/l2j/Base64.java → L2_GameServer/java/com/l2jserver/Base64.java

@@ -12,12 +12,13 @@
  * 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 net.sf.l2j;
+package com.l2jserver;
 
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import net.sf.l2j.gameserver.util.StringUtil;
+
+import com.l2jserver.gameserver.util.StringUtil;
 
 /**
  * Encodes and decodes to and from Base64 notation.

+ 345 - 71
L2_GameServer/java/net/sf/l2j/Config.java → L2_GameServer/java/com/l2jserver/Config.java

@@ -12,25 +12,30 @@
  * 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 net.sf.l2j;
+package com.l2jserver;
 
+import gnu.trove.TIntFloatHashMap;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.FileReader;
 import java.io.InputStream;
+import java.io.LineNumberReader;
 import java.io.OutputStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.logging.Logger;
 
 import javolution.util.FastList;
-import javolution.util.FastMap;
-import net.sf.l2j.gameserver.util.FloodProtectorConfig;
-import net.sf.l2j.gameserver.util.StringUtil;
-import net.sf.l2j.util.L2Properties;
+
+import com.l2jserver.gameserver.util.FloodProtectorConfig;
+import com.l2jserver.gameserver.util.StringUtil;
+import com.l2jserver.util.L2Properties;
 
 public final class Config
 {
@@ -58,6 +63,10 @@ public final class Config
 	public static final String TELNET_FILE = "./config/telnet.properties";
 	public static final String FLOOD_PROTECTOR_FILE = "./config/floodprotector.properties";
 	public static final String MMO_CONFIG_FILE = "./config/mmo.properties";
+	public static final String OLYMPIAD_CONFIG_FILE = "./config/olympiad.properties";
+	public static final String COMMUNITY_CONFIGURATION_FILE = "./config/CommunityServer.properties";
+	public static final String GRANDBOSS_CONFIG_FILE = "./config/Grandboss.properties";
+	public static final String CHAT_FILTER_FILE = "./config/chatfilter.txt";
 
 
 	//--------------------------------------------------
@@ -75,9 +84,9 @@ public final class Config
 	public static double RESPAWN_RESTORE_MP;
 	public static boolean ALT_GAME_TIREDNESS;
 	public static boolean ENABLE_MODIFY_SKILL_DURATION;
-	public static Map<Integer, Integer> SKILL_DURATION_LIST;
+	public static TIntIntHashMap SKILL_DURATION_LIST;
 	public static boolean ENABLE_MODIFY_SKILL_REUSE;
-	public static Map<Integer, Integer> SKILL_REUSE_LIST;
+	public static TIntIntHashMap SKILL_REUSE_LIST;
 	public static boolean AUTO_LEARN_SKILLS;
 	public static boolean AUTO_LOOT_HERBS;
 	public static byte BUFFS_MAX_AMOUNT;
@@ -122,7 +131,6 @@ public final class Config
 	public static int WAREHOUSE_SLOTS_DWARF;
 	public static int WAREHOUSE_SLOTS_NO_DWARF;
 	public static int WAREHOUSE_SLOTS_CLAN;
-	public static int FREIGHT_SLOTS;
 	public static boolean ALT_GAME_KARMA_PLAYER_CAN_BE_KILLED_IN_PEACEZONE;
 	public static boolean ALT_GAME_KARMA_PLAYER_CAN_SHOP;
 	public static boolean ALT_GAME_KARMA_PLAYER_CAN_TELEPORT;
@@ -163,6 +171,8 @@ public final class Config
 	public static int STARTING_SP;
 	public static boolean AUTO_LOOT;
 	public static boolean AUTO_LOOT_RAIDS;
+	public static int LOOT_RAIDS_PRIVILEGE_INTERVAL;
+	public static int LOOT_RAIDS_PRIVILEGE_CC_SIZE;
 	public static int UNSTUCK_INTERVAL;
 	public static int TELEPORT_WATCHDOG_TIMEOUT;
 	public static int PLAYER_SPAWN_PROTECTION;
@@ -173,8 +183,6 @@ public final class Config
 	public static boolean PETITIONING_ALLOWED;
 	public static int MAX_PETITIONS_PER_PLAYER;
 	public static int MAX_PETITIONS_PENDING;
-	public static boolean ALT_GAME_FREIGHTS;
-	public static int ALT_GAME_FREIGHT_PRICE;
 	public static boolean ALT_GAME_FREE_TELEPORT;
 	public static boolean ALT_RECOMMEND;
 	public static int DELETE_DAYS;
@@ -336,6 +344,7 @@ public final class Config
 	public static int CLAN_LEVEL_8_REQUIREMENT;
 	public static int CLAN_LEVEL_9_REQUIREMENT;
 	public static int CLAN_LEVEL_10_REQUIREMENT;
+	public static boolean ALLOW_WYVERN_DURING_SIEGE;
 
 
 	//--------------------------------------------------
@@ -389,7 +398,7 @@ public final class Config
 	public static int AUTODESTROY_ITEM_AFTER;
 	public static int HERB_AUTO_DESTROY_TIME;
 	public static String PROTECTED_ITEMS;
-	public static List<Integer> LIST_PROTECTED_ITEMS = new FastList<Integer>();
+	public static List<Integer> LIST_PROTECTED_ITEMS = new ArrayList<Integer>();
 	public static int CHAR_STORE_INTERVAL;
 	public static boolean LAZY_ITEMS_UPDATE;
 	public static boolean UPDATE_ITEMS_ON_CHAR_STORE;
@@ -404,6 +413,7 @@ public final class Config
 	public static boolean MULTIPLE_ITEM_DROP;
 	public static boolean FORCE_INVENTORY_UPDATE;
 	public static boolean LAZY_CACHE;
+	public static boolean CACHE_CHAR_NAMES;
 	public static int MIN_NPC_ANIMATION;
 	public static int MAX_NPC_ANIMATION;
 	public static int MIN_MONSTER_ANIMATION;
@@ -424,7 +434,9 @@ public final class Config
 	public static boolean ALLOW_WAREHOUSE;
 	public static boolean WAREHOUSE_CACHE;
 	public static int WAREHOUSE_CACHE_TIME;
-	public static boolean ALLOW_FREIGHT;
+	public static boolean ALLOW_REFUND;
+	public static boolean ALLOW_MAIL;
+	public static boolean ALLOW_ATTACHMENTS;
 	public static boolean ALLOW_WEAR;
 	public static int WEAR_DELAY;
 	public static int WEAR_PRICE;
@@ -446,6 +458,8 @@ public final class Config
 	public static boolean SHOW_STATUS_COMMUNITYBOARD;
 	public static int NAME_PAGE_SIZE_COMMUNITYBOARD;
 	public static int NAME_PER_ROW_COMMUNITYBOARD;
+	public static boolean USE_SAY_FILTER;
+	public static String CHAT_FILTER_CHARS;
 	public static int ALT_OLY_START_TIME;
 	public static int ALT_OLY_MIN;
 	public static long ALT_OLY_CPERIOD;
@@ -543,6 +557,8 @@ public final class Config
 		new FloodProtectorConfig("MultiSellFloodProtector");
 	public static final FloodProtectorConfig FLOOD_PROTECTOR_TRANSACTION =
 		new FloodProtectorConfig("TransactionFloodProtector");
+	public static final FloodProtectorConfig FLOOD_PROTECTOR_SENDMAIL =
+		new FloodProtectorConfig("SendMailFloodProtector");
 
 
 	//--------------------------------------------------
@@ -593,8 +609,8 @@ public final class Config
 	public static byte TVT_EVENT_MIN_LVL;
 	public static byte TVT_EVENT_MAX_LVL;
 	public static int TVT_EVENT_EFFECTS_REMOVAL;
-	public static Map<Integer, Integer> TVT_EVENT_FIGHTER_BUFFS;
-	public static Map<Integer, Integer> TVT_EVENT_MAGE_BUFFS;
+	public static TIntIntHashMap TVT_EVENT_FIGHTER_BUFFS;
+	public static TIntIntHashMap TVT_EVENT_MAGE_BUFFS;
 	public static boolean TVT_ALLOW_VOICED_COMMAND;
 	public static boolean L2JMOD_ALLOW_WEDDING;
 	public static int L2JMOD_WEDDING_PRICE;
@@ -610,12 +626,16 @@ public final class Config
 	public static int BANKING_SYSTEM_ADENA;
 	public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_CLAN;
 	public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE;
-	public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT;
 	public static boolean OFFLINE_TRADE_ENABLE;
 	public static boolean OFFLINE_CRAFT_ENABLE;
 	public static boolean OFFLINE_SET_NAME_COLOR;
 	public static int OFFLINE_NAME_COLOR;
 	public static boolean L2JMOD_ENABLE_MANA_POTIONS_SUPPORT;
+	public static boolean L2JMOD_DISPLAY_SERVER_TIME;
+	public static boolean L2JMOD_ANTIFEED_ENABLE;
+	public static boolean L2JMOD_ANTIFEED_DUALBOX;
+	public static boolean L2JMOD_ANTIFEED_DISCONNECTED_AS_DUALBOX;
+	public static int L2JMOD_ANTIFEED_INTERVAL;
 
 
 	//--------------------------------------------------
@@ -629,6 +649,10 @@ public final class Config
 	public static boolean DEEPBLUE_DROP_RULES;
 	public static boolean DEEPBLUE_DROP_RULES_RAID;
 	public static boolean SHOW_NPC_LVL;
+	public static boolean SHOW_CREST_WITHOUT_QUEST;
+	public static boolean ENABLE_RANDOM_ENCHANT_EFFECT;
+	public static int MIN_NPC_LVL_DMG_PENALTY;
+	public static int MIN_NPC_LVL_MAGIC_PENALTY;
 	public static boolean GUARD_ATTACK_AGGRO_MOB;
 	public static boolean ALLOW_WYVERN_UPGRADER;
 	public static String PET_RENT_NPC;
@@ -641,6 +665,9 @@ public final class Config
 	public static float RAID_MIN_RESPAWN_MULTIPLIER;
 	public static float RAID_MAX_RESPAWN_MULTIPLIER;
 	public static boolean RAID_DISABLE_CURSE;
+	public static int RAID_CHAOS_TIME;
+	public static int GRAND_CHAOS_TIME;
+	public static int MINION_CHAOS_TIME;
 	public static int INVENTORY_MAXIMUM_PET;
 
 
@@ -668,7 +695,6 @@ public final class Config
 	public static float RATE_PARTY_XP;
 	public static float RATE_PARTY_SP;
 	public static float RATE_QUESTS_REWARD;
-	public static float RATE_DROP_ADENA;
 	public static float RATE_CONSUMABLE_COST;
 	public static float RATE_EXTR_FISH;
 	public static float RATE_DROP_ITEMS;
@@ -676,6 +702,7 @@ public final class Config
 	public static float RATE_DROP_SPOIL;
 	public static int RATE_DROP_MANOR;
 	public static float RATE_DROP_QUEST;
+	public static TIntFloatHashMap RATE_DROP_ITEMS_ID;
 	public static float RATE_KARMA_EXP_LOST;
 	public static float RATE_SIEGE_GUARDS_PRICE;
 	public static float RATE_DROP_COMMON_HERBS;
@@ -748,6 +775,14 @@ public final class Config
 	public static int MAX_PROTOCOL_REVISION;
 	public static boolean LOG_LOGIN_CONTROLLER;
 
+	//--------------------------------------------------
+	// CommunityServer Settings
+	//--------------------------------------------------
+	public static boolean	ENABLE_COMMUNITY_BOARD;
+	public static String	COMMUNITY_SERVER_ADDRESS;
+	public static int		COMMUNITY_SERVER_PORT;
+	public static byte[]	COMMUNITY_SERVER_HEX_ID;
+	public static int		COMMUNITY_SERVER_SQL_DP_ID;
 
 	//--------------------------------------------------
 	// MMO Settings
@@ -854,6 +889,28 @@ public final class Config
 	public static int NORMAL_CONNECTION_TIME;
 	public static int FAST_CONNECTION_TIME;
 	public static int MAX_CONNECTION_PER_IP;
+	
+	// GrandBoss Settings
+	
+	public static int Antharas_Wait_Time;
+	public static int Valakas_Wait_Time;
+	public static int Interval_Of_Antharas_Spawn;
+	public static int Random_Of_Antharas_Spawn;
+	public static int Interval_Of_Valakas_Spawn;
+	public static int Random_Of_Valakas_Spawn;
+	public static int Interval_Of_Baium_Spawn;
+	public static int Random_Of_Baium_Spawn;
+	public static int Interval_Of_Core_Spawn;
+	public static int Random_Of_Core_Spawn;
+	public static int Interval_Of_Orfen_Spawn;
+	public static int Random_Of_Orfen_Spawn;
+	public static int Interval_Of_QueenAnt_Spawn;
+	public static int Random_Of_QueenAnt_Spawn;
+	public static int Interval_Of_Zaken_Spawn;
+	public static int Random_Of_Zaken_Spawn;
+	
+	//chatfilter
+	public static ArrayList<String>	FILTER_LIST;
 
 	/**
 	 * This class initializes all global variables for configuration.<br>
@@ -915,6 +972,24 @@ public final class Config
 					throw new Error("Failed to Load "+CONFIGURATION_FILE+" File.");
 				}
 
+				// Load Community Properties file (if exists)
+				try
+				{
+					L2Properties communityServerSettings	= new L2Properties();
+					is = new FileInputStream(new File(COMMUNITY_CONFIGURATION_FILE));
+					communityServerSettings.load(is);
+					ENABLE_COMMUNITY_BOARD = Boolean.parseBoolean(communityServerSettings.getProperty("EnableCommunityBoard", "False"));
+					COMMUNITY_SERVER_ADDRESS = communityServerSettings.getProperty("CommunityServerHostname", "localhost");
+					COMMUNITY_SERVER_PORT = Integer.parseInt(communityServerSettings.getProperty("CommunityServerPort", "9013"));
+					COMMUNITY_SERVER_HEX_ID = new BigInteger(communityServerSettings.getProperty("CommunityServerHexId"), 16).toByteArray();
+					COMMUNITY_SERVER_SQL_DP_ID = Integer.parseInt(communityServerSettings.getProperty("CommunityServerSqlDpId", "200"));
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+					throw new Error("Failed to Load "+COMMUNITY_CONFIGURATION_FILE+" File.");
+				}
+
 				// Load Feature L2Properties file (if exists)
 				try
 				{
@@ -1119,6 +1194,7 @@ public final class Config
 					CLAN_LEVEL_8_REQUIREMENT = Integer.parseInt(Feature.getProperty("ClanLevel8Requirement", "120"));
 					CLAN_LEVEL_9_REQUIREMENT = Integer.parseInt(Feature.getProperty("ClanLevel9Requirement", "120"));
 					CLAN_LEVEL_10_REQUIREMENT = Integer.parseInt(Feature.getProperty("ClanLevel10Requirement", "140"));
+					ALLOW_WYVERN_DURING_SIEGE = Boolean.parseBoolean(Feature.getProperty("AllowRideWyvernDuringSiege", "True"));
 				}
 				catch (Exception e)
 				{
@@ -1153,7 +1229,7 @@ public final class Config
 					if (ENABLE_MODIFY_SKILL_DURATION)
 					{
 						String[] propertySplit = Character.getProperty("SkillDurationList", "").split(";");
-						SKILL_DURATION_LIST = new FastMap<Integer, Integer>(propertySplit.length);
+						SKILL_DURATION_LIST = new TIntIntHashMap(propertySplit.length);
 						for (String skill : propertySplit)
 						{
 							String[] skillSplit = skill.split(",");
@@ -1180,7 +1256,7 @@ public final class Config
 					if (ENABLE_MODIFY_SKILL_REUSE)
 					{
 						String[] propertySplit = Character.getProperty("SkillReuseList", "").split(";");
-						SKILL_REUSE_LIST = new FastMap<Integer, Integer>(propertySplit.length);
+						SKILL_REUSE_LIST = new TIntIntHashMap(propertySplit.length);
 						for (String skill : propertySplit)
 						{
 							String[] skillSplit = skill.split(",");
@@ -1248,7 +1324,6 @@ public final class Config
 					WAREHOUSE_SLOTS_DWARF = Integer.parseInt(Character.getProperty("MaximumWarehouseSlotsForDwarf", "120"));
 					WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(Character.getProperty("MaximumWarehouseSlotsForNoDwarf", "100"));
 					WAREHOUSE_SLOTS_CLAN = Integer.parseInt(Character.getProperty("MaximumWarehouseSlotsForClan", "150"));
-					FREIGHT_SLOTS = Integer.parseInt(Character.getProperty("MaximumFreightSlots", "20"));
 					ENCHANT_CHANCE_WEAPON = Integer.parseInt(Character.getProperty("EnchantChanceWeapon", "66"));
 					ENCHANT_CHANCE_ARMOR = Integer.parseInt(Character.getProperty("EnchantChanceArmor", "66"));
 					ENCHANT_CHANCE_JEWELRY = Integer.parseInt(Character.getProperty("EnchantChanceJewelry", "66"));
@@ -1320,6 +1395,8 @@ public final class Config
 					STARTING_SP = Integer.parseInt(Character.getProperty("StartingSP", "0"));
 					AUTO_LOOT = Boolean.parseBoolean(Character.getProperty("AutoLoot", "false"));
 					AUTO_LOOT_RAIDS = Boolean.parseBoolean(Character.getProperty("AutoLootRaids", "false"));
+					LOOT_RAIDS_PRIVILEGE_INTERVAL = Integer.parseInt(Character.getProperty("RaidLootRightsInterval", "900")) * 1000;
+					LOOT_RAIDS_PRIVILEGE_CC_SIZE = Integer.parseInt(Character.getProperty("RaidLootRightsCCSize", "45"));
 					UNSTUCK_INTERVAL = Integer.parseInt(Character.getProperty("UnstuckInterval", "300"));
 					TELEPORT_WATCHDOG_TIMEOUT = Integer.parseInt(Character.getProperty("TeleportWatchdogTimeout", "0"));
 					PLAYER_SPAWN_PROTECTION = Integer.parseInt(Character.getProperty("PlayerSpawnProtection", "0"));
@@ -1330,8 +1407,6 @@ public final class Config
 					PETITIONING_ALLOWED = Boolean.parseBoolean(Character.getProperty("PetitioningAllowed", "True"));
 					MAX_PETITIONS_PER_PLAYER = Integer.parseInt(Character.getProperty("MaxPetitionsPerPlayer", "5"));
 					MAX_PETITIONS_PENDING = Integer.parseInt(Character.getProperty("MaxPetitionsPending", "25"));
-					ALT_GAME_FREIGHTS = Boolean.parseBoolean(Character.getProperty("AltGameFreights", "true"));
-					ALT_GAME_FREIGHT_PRICE = Integer.parseInt(Character.getProperty("AltGameFreightPrice", "1000"));
 					ALT_GAME_FREE_TELEPORT = Boolean.parseBoolean(Character.getProperty("AltFreeTeleporting", "False"));
 					ALT_RECOMMEND = Boolean.parseBoolean(Character.getProperty("AltRecommend", "False"));
 					DELETE_DAYS = Integer.parseInt(Character.getProperty("DeleteCharAfterDays", "7"));
@@ -1453,7 +1528,7 @@ public final class Config
 					GM_ITEM_RESTRICTION = Boolean.parseBoolean(General.getProperty("GMItemRestriction", "True"));
 					GM_SKILL_RESTRICTION = Boolean.parseBoolean(General.getProperty("GMSkillRestriction", "True"));
 					GM_TRADE_RESTRICTED_ITEMS = Boolean.parseBoolean(General.getProperty("GMTradeRestrictedItems", "False"));
-					GM_RESTART_FIGHTING = Boolean.parseBoolean(General.getProperty("GMRestartFighting", "False"));
+					GM_RESTART_FIGHTING = Boolean.parseBoolean(General.getProperty("GMRestartFighting", "True"));
 					BYPASS_VALIDATION = Boolean.parseBoolean(General.getProperty("BypassValidation", "True"));
 					GAMEGUARD_ENFORCE = Boolean.parseBoolean(General.getProperty("GameGuardEnforce", "False"));
 					GAMEGUARD_PROHIBITACTION = Boolean.parseBoolean(General.getProperty("GameGuardProhibitAction", "False"));
@@ -1505,6 +1580,7 @@ public final class Config
 					MULTIPLE_ITEM_DROP = Boolean.parseBoolean(General.getProperty("MultipleItemDrop", "True"));
 					FORCE_INVENTORY_UPDATE = Boolean.parseBoolean(General.getProperty("ForceInventoryUpdate", "False"));
 					LAZY_CACHE = Boolean.parseBoolean(General.getProperty("LazyCache", "True"));
+					CACHE_CHAR_NAMES = Boolean.parseBoolean(General.getProperty("CacheCharNames", "False"));
 					MIN_NPC_ANIMATION = Integer.parseInt(General.getProperty("MinNPCAnimation", "10"));
 					MAX_NPC_ANIMATION = Integer.parseInt(General.getProperty("MaxNPCAnimation", "20"));
 					MIN_MONSTER_ANIMATION = Integer.parseInt(General.getProperty("MinMonsterAnimation", "5"));
@@ -1525,7 +1601,9 @@ public final class Config
 					ALLOW_WAREHOUSE = Boolean.parseBoolean(General.getProperty("AllowWarehouse", "True"));
 					WAREHOUSE_CACHE = Boolean.parseBoolean(General.getProperty("WarehouseCache", "False"));
 					WAREHOUSE_CACHE_TIME = Integer.parseInt(General.getProperty("WarehouseCacheTime", "15"));
-					ALLOW_FREIGHT = Boolean.parseBoolean(General.getProperty("AllowFreight", "True"));
+					ALLOW_REFUND = Boolean.parseBoolean(General.getProperty("AllowRefund", "True"));
+					ALLOW_MAIL = Boolean.parseBoolean(General.getProperty("AllowMail", "True"));
+					ALLOW_ATTACHMENTS = Boolean.parseBoolean(General.getProperty("AllowAttachments", "True"));
 					ALLOW_WEAR = Boolean.parseBoolean(General.getProperty("AllowWear", "False"));
 					WEAR_DELAY = Integer.parseInt(General.getProperty("WearDelay", "5"));
 					WEAR_PRICE = Integer.parseInt(General.getProperty("WearPrice", "10"));
@@ -1533,7 +1611,6 @@ public final class Config
 					ALLOW_RACE = Boolean.parseBoolean(General.getProperty("AllowRace", "True"));
 					ALLOW_WATER = Boolean.parseBoolean(General.getProperty("AllowWater", "True"));
 					ALLOW_RENTPET = Boolean.parseBoolean(General.getProperty("AllowRentPet", "False"));
-					ALLOW_DISCARDITEM = Boolean.parseBoolean(General.getProperty("AllowDiscardItem", "True"));
 					ALLOWFISHING = Boolean.parseBoolean(General.getProperty("AllowFishing", "True"));
 					ALLOW_MANOR = Boolean.parseBoolean(General.getProperty("AllowManor", "True"));
 					ALLOW_BOAT = Boolean.parseBoolean(General.getProperty("AllowBoat", "True"));
@@ -1548,36 +1625,8 @@ public final class Config
 					SHOW_STATUS_COMMUNITYBOARD = Boolean.parseBoolean(General.getProperty("ShowStatusOnCommunityBoard", "True"));
 					NAME_PAGE_SIZE_COMMUNITYBOARD = Integer.parseInt(General.getProperty("NamePageSizeOnCommunityBoard", "50"));
 					NAME_PER_ROW_COMMUNITYBOARD = Integer.parseInt(General.getProperty("NamePerRowOnCommunityBoard", "5"));
-					ALT_OLY_START_TIME = Integer.parseInt(General.getProperty("AltOlyStartTime", "18"));
-					ALT_OLY_MIN = Integer.parseInt(General.getProperty("AltOlyMin","00"));
-					ALT_OLY_CPERIOD = Long.parseLong(General.getProperty("AltOlyCPeriod","21600000"));
-					ALT_OLY_BATTLE = Long.parseLong(General.getProperty("AltOlyBattle","360000"));
-					ALT_OLY_WPERIOD = Long.parseLong(General.getProperty("AltOlyWPeriod","604800000"));
-					ALT_OLY_VPERIOD = Long.parseLong(General.getProperty("AltOlyVPeriod","86400000"));
-					ALT_OLY_CLASSED = Integer.parseInt(General.getProperty("AltOlyClassedParticipants","5"));
-					ALT_OLY_NONCLASSED = Integer.parseInt(General.getProperty("AltOlyNonClassedParticipants","9"));
-					ALT_OLY_REG_DISPLAY = Integer.parseInt(General.getProperty("AltOlyRegistrationDisplayNumber","100"));
-					ALT_OLY_BATTLE_REWARD_ITEM = Integer.parseInt(General.getProperty("AltOlyBattleRewItem","6651"));
-					ALT_OLY_CLASSED_RITEM_C = Integer.parseInt(General.getProperty("AltOlyClassedRewItemCount","50"));
-					ALT_OLY_NONCLASSED_RITEM_C = Integer.parseInt(General.getProperty("AltOlyNonClassedRewItemCount","30"));
-					ALT_OLY_COMP_RITEM = Integer.parseInt(General.getProperty("AltOlyCompRewItem","13722"));
-					ALT_OLY_GP_PER_POINT = Integer.parseInt(General.getProperty("AltOlyGPPerPoint","1000"));
-					ALT_OLY_HERO_POINTS = Integer.parseInt(General.getProperty("AltOlyHeroPoints","180"));
-					ALT_OLY_RANK1_POINTS = Integer.parseInt(General.getProperty("AltOlyRank1Points","120"));
-					ALT_OLY_RANK2_POINTS = Integer.parseInt(General.getProperty("AltOlyRank2Points","80"));
-					ALT_OLY_RANK3_POINTS = Integer.parseInt(General.getProperty("AltOlyRank3Points","55"));
-					ALT_OLY_RANK4_POINTS = Integer.parseInt(General.getProperty("AltOlyRank4Points","35"));
-					ALT_OLY_RANK5_POINTS = Integer.parseInt(General.getProperty("AltOlyRank5Points","20"));
-					ALT_OLY_MAX_POINTS = Integer.parseInt(General.getProperty("AltOlyMaxPoints","10"));
-					ALT_OLY_LOG_FIGHTS = Boolean.parseBoolean(General.getProperty("AlyOlyLogFights","false"));
-					ALT_OLY_SHOW_MONTHLY_WINNERS = Boolean.parseBoolean(General.getProperty("AltOlyShowMonthlyWinners","true"));
-					ALT_OLY_ANNOUNCE_GAMES = Boolean.parseBoolean(General.getProperty("AltOlyAnnounceGames","true"));
-					LIST_OLY_RESTRICTED_ITEMS = new FastList<Integer>();
-					for (String id : General.getProperty("AltOlyRestrictedItems","0").split(","))
-					{
-						LIST_OLY_RESTRICTED_ITEMS.add(Integer.parseInt(id));
-					}
-					ALT_OLY_ENCHANT_LIMIT = Integer.parseInt(General.getProperty("AltOlyEnchantLimit","-1"));
+					USE_SAY_FILTER = Boolean.parseBoolean(General.getProperty("UseChatFilter", "false"));
+					CHAT_FILTER_CHARS = General.getProperty("ChatFilterChars", "^_^");
 					ALT_MANOR_REFRESH_TIME = Integer.parseInt(General.getProperty("AltManorRefreshTime","20"));
 					ALT_MANOR_REFRESH_MIN = Integer.parseInt(General.getProperty("AltManorRefreshMin","00"));
 					ALT_MANOR_APPROVE_TIME = Integer.parseInt(General.getProperty("AltManorApproveTime","6"));
@@ -1669,6 +1718,10 @@ public final class Config
 					DEEPBLUE_DROP_RULES = Boolean.parseBoolean(NPC.getProperty("UseDeepBlueDropRules", "True"));
 					DEEPBLUE_DROP_RULES_RAID = Boolean.parseBoolean(NPC.getProperty("UseDeepBlueDropRulesRaid", "True"));
 					SHOW_NPC_LVL = Boolean.parseBoolean(NPC.getProperty("ShowNpcLevel", "False"));
+					SHOW_CREST_WITHOUT_QUEST = Boolean.parseBoolean(NPC.getProperty("ShowCrestWithoutQuest", "False"));
+					ENABLE_RANDOM_ENCHANT_EFFECT = Boolean.parseBoolean(NPC.getProperty("EnableRandomEnchantEffect", "False"));;
+					MIN_NPC_LVL_DMG_PENALTY = Integer.parseInt(NPC.getProperty("MinNPCLevelForDmgPenalty", "78"));
+					MIN_NPC_LVL_MAGIC_PENALTY = Integer.parseInt(NPC.getProperty("MinNPCLevelForMagicPenalty", "78"));
 					ENABLE_DROP_VITALITY_HERBS = Boolean.parseBoolean(NPC.getProperty("EnableVitalityHerbs", "True"));
 					GUARD_ATTACK_AGGRO_MOB = Boolean.parseBoolean(NPC.getProperty("GuardAttackAggroMob", "False"));
 					ALLOW_WYVERN_UPGRADER = Boolean.parseBoolean(NPC.getProperty("AllowWyvernUpgrader", "False"));
@@ -1686,6 +1739,9 @@ public final class Config
 					RAID_MAX_RESPAWN_MULTIPLIER = Float.parseFloat(NPC.getProperty("RaidMaxRespawnMultiplier", "1.0"));
 					RAID_MINION_RESPAWN_TIMER = Integer.parseInt(NPC.getProperty("RaidMinionRespawnTime", "300000"));
 					RAID_DISABLE_CURSE = Boolean.parseBoolean(NPC.getProperty("DisableRaidCurse", "False"));
+					RAID_CHAOS_TIME = Integer.parseInt(NPC.getProperty("RaidChaosTime", "10"));
+					GRAND_CHAOS_TIME = Integer.parseInt(NPC.getProperty("GrandChaosTime", "10"));
+					MINION_CHAOS_TIME = Integer.parseInt(NPC.getProperty("MinionChaosTime", "10"));
 					INVENTORY_MAXIMUM_PET = Integer.parseInt(NPC.getProperty("MaximumSlotsForPet", "12"));
 				}
 				catch (Exception e)
@@ -1706,7 +1762,6 @@ public final class Config
 					RATE_PARTY_XP = Float.parseFloat(ratesSettings.getProperty("RatePartyXp", "1."));
 					RATE_PARTY_SP = Float.parseFloat(ratesSettings.getProperty("RatePartySp", "1."));
 					RATE_QUESTS_REWARD = Float.parseFloat(ratesSettings.getProperty("RateQuestsReward", "1."));
-					RATE_DROP_ADENA = Float.parseFloat(ratesSettings.getProperty("RateDropAdena", "1."));
 					RATE_CONSUMABLE_COST = Float.parseFloat(ratesSettings.getProperty("RateConsumableCost", "1."));
 					RATE_EXTR_FISH = Float.parseFloat(ratesSettings.getProperty("RateExtractFish", "1."));
 					RATE_DROP_ITEMS = Float.parseFloat(ratesSettings.getProperty("RateDropItems", "1."));
@@ -1778,6 +1833,34 @@ public final class Config
 						_log.warning("Error while loading Player XP percent lost");
 						e.printStackTrace();
 					}
+					
+					String[] propertySplit = ratesSettings.getProperty("RateDropItemsById", "").split(";");
+					RATE_DROP_ITEMS_ID = new TIntFloatHashMap(propertySplit.length);
+					if (!propertySplit[0].isEmpty())
+					{
+						for (String item : propertySplit)
+						{
+							String[] itemSplit = item.split(",");
+							if (itemSplit.length != 2)
+								_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
+							else
+							{
+								try
+								{
+									RATE_DROP_ITEMS_ID.put(Integer.parseInt(itemSplit[0]), Float.parseFloat(itemSplit[1]));
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!item.isEmpty())
+										_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
+								}
+							}
+						}
+					}
+					if (RATE_DROP_ITEMS_ID.get(57) == 0f)
+					{
+						RATE_DROP_ITEMS_ID.put(57, RATE_DROP_ITEMS); //for Adena rate if not defined
+					}
 				}
 				catch (Exception e)
 				{
@@ -1830,7 +1913,6 @@ public final class Config
 
 					L2JMOD_ENABLE_WAREHOUSESORTING_CLAN = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingClan", "False"));
 					L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingPrivate", "False"));
-					L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingFreight", "False"));
 
 					if (TVT_EVENT_PARTICIPATION_NPC_ID == 0)
 					{
@@ -1933,7 +2015,7 @@ public final class Config
 										}
 										catch (NumberFormatException nfe)
 										{
-											if (!door.equals(""))
+											if (!door.isEmpty())
 												_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTDoorsToOpen \"", door, "\""));
 										}
 									}
@@ -1953,9 +2035,9 @@ public final class Config
 									}
 
 									propertySplit = L2JModSettings.getProperty("TvTEventFighterBuffs", "").split(";");
-									if (!propertySplit[0].equals(""))
+									if (!propertySplit[0].isEmpty())
 									{
-										TVT_EVENT_FIGHTER_BUFFS = new FastMap<Integer, Integer>(propertySplit.length);
+										TVT_EVENT_FIGHTER_BUFFS = new TIntIntHashMap(propertySplit.length);
 										for (String skill : propertySplit)
 										{
 											String[] skillSplit = skill.split(",");
@@ -1977,9 +2059,9 @@ public final class Config
 									}
 
 									propertySplit = L2JModSettings.getProperty("TvTEventMageBuffs", "").split(";");
-									if (!propertySplit[0].equals(""))
+									if (!propertySplit[0].isEmpty())
 									{
-										TVT_EVENT_MAGE_BUFFS = new FastMap<Integer, Integer>(propertySplit.length);
+										TVT_EVENT_MAGE_BUFFS = new TIntIntHashMap(propertySplit.length);
 										for (String skill : propertySplit)
 										{
 											String[] skillSplit = skill.split(",");
@@ -2014,6 +2096,13 @@ public final class Config
 					OFFLINE_NAME_COLOR = Integer.decode("0x" + L2JModSettings.getProperty("OfflineNameColor", "808080"));
 
 					L2JMOD_ENABLE_MANA_POTIONS_SUPPORT = Boolean.parseBoolean(L2JModSettings.getProperty("EnableManaPotionSupport", "false"));
+
+					L2JMOD_DISPLAY_SERVER_TIME = Boolean.parseBoolean(L2JModSettings.getProperty("DisplayServerTime", "false"));
+
+					L2JMOD_ANTIFEED_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("AntiFeedEnable", "false"));
+					L2JMOD_ANTIFEED_DUALBOX = Boolean.parseBoolean(L2JModSettings.getProperty("AntiFeedDualbox", "true"));
+					L2JMOD_ANTIFEED_DISCONNECTED_AS_DUALBOX = Boolean.parseBoolean(L2JModSettings.getProperty("AntiFeedDisconnectedAsDualbox", "true"));
+					L2JMOD_ANTIFEED_INTERVAL = 1000*Integer.parseInt(L2JModSettings.getProperty("AntiFeedInterval", "120"));
 				}
 				catch (Exception e)
 				{
@@ -2063,6 +2152,49 @@ public final class Config
 					e.printStackTrace();
 					throw new Error("Failed to Load "+PVP_CONFIG_FILE+" File.");
 				}
+				// Load Olympiad L2Properties file (if exists)
+				try
+				{
+					L2Properties olympiad = new L2Properties();
+					is = new FileInputStream(new File(OLYMPIAD_CONFIG_FILE));
+					olympiad.load(is);
+
+					ALT_OLY_START_TIME = Integer.parseInt(olympiad.getProperty("AltOlyStartTime", "18"));
+					ALT_OLY_MIN = Integer.parseInt(olympiad.getProperty("AltOlyMin","00"));
+					ALT_OLY_CPERIOD = Long.parseLong(olympiad.getProperty("AltOlyCPeriod","21600000"));
+					ALT_OLY_BATTLE = Long.parseLong(olympiad.getProperty("AltOlyBattle","360000"));
+					ALT_OLY_WPERIOD = Long.parseLong(olympiad.getProperty("AltOlyWPeriod","604800000"));
+					ALT_OLY_VPERIOD = Long.parseLong(olympiad.getProperty("AltOlyVPeriod","86400000"));
+					ALT_OLY_CLASSED = Integer.parseInt(olympiad.getProperty("AltOlyClassedParticipants","5"));
+					ALT_OLY_NONCLASSED = Integer.parseInt(olympiad.getProperty("AltOlyNonClassedParticipants","9"));
+					ALT_OLY_REG_DISPLAY = Integer.parseInt(olympiad.getProperty("AltOlyRegistrationDisplayNumber","100"));
+					ALT_OLY_BATTLE_REWARD_ITEM = Integer.parseInt(olympiad.getProperty("AltOlyBattleRewItem","6651"));
+					ALT_OLY_CLASSED_RITEM_C = Integer.parseInt(olympiad.getProperty("AltOlyClassedRewItemCount","50"));
+					ALT_OLY_NONCLASSED_RITEM_C = Integer.parseInt(olympiad.getProperty("AltOlyNonClassedRewItemCount","30"));
+					ALT_OLY_COMP_RITEM = Integer.parseInt(olympiad.getProperty("AltOlyCompRewItem","13722"));
+					ALT_OLY_GP_PER_POINT = Integer.parseInt(olympiad.getProperty("AltOlyGPPerPoint","1000"));
+					ALT_OLY_HERO_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyHeroPoints","180"));
+					ALT_OLY_RANK1_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyRank1Points","120"));
+					ALT_OLY_RANK2_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyRank2Points","80"));
+					ALT_OLY_RANK3_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyRank3Points","55"));
+					ALT_OLY_RANK4_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyRank4Points","35"));
+					ALT_OLY_RANK5_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyRank5Points","20"));
+					ALT_OLY_MAX_POINTS = Integer.parseInt(olympiad.getProperty("AltOlyMaxPoints","10"));
+					ALT_OLY_LOG_FIGHTS = Boolean.parseBoolean(olympiad.getProperty("AlyOlyLogFights","false"));
+					ALT_OLY_SHOW_MONTHLY_WINNERS = Boolean.parseBoolean(olympiad.getProperty("AltOlyShowMonthlyWinners","true"));
+					ALT_OLY_ANNOUNCE_GAMES = Boolean.parseBoolean(olympiad.getProperty("AltOlyAnnounceGames","true"));
+					LIST_OLY_RESTRICTED_ITEMS = new FastList<Integer>();
+					for (String id : olympiad.getProperty("AltOlyRestrictedItems","0").split(","))
+					{
+						LIST_OLY_RESTRICTED_ITEMS.add(Integer.parseInt(id));
+					}
+					ALT_OLY_ENCHANT_LIMIT = Integer.parseInt(olympiad.getProperty("AltOlyEnchantLimit","-1"));
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+					throw new Error("Failed to Load "+OLYMPIAD_CONFIG_FILE+" File.");
+				}
 				try
 				{
 					L2Properties Settings = new L2Properties();
@@ -2075,6 +2207,120 @@ public final class Config
 				{
 					_log.warning("Could not load HexID file ("+HEXID_FILE+"). Hopefully login will give us one.");
 				}
+
+				// Grandboss
+				try
+				{
+					L2Properties grandbossSettings = new L2Properties();
+					is = new FileInputStream(new File(GRANDBOSS_CONFIG_FILE));
+					grandbossSettings.load(is);
+
+					Antharas_Wait_Time = Integer.parseInt(grandbossSettings.getProperty("AntharasWaitTime", "30"));
+					if (Antharas_Wait_Time < 3 || Antharas_Wait_Time > 60)
+						Antharas_Wait_Time = 30;
+					Antharas_Wait_Time = Antharas_Wait_Time * 60000;
+
+					Valakas_Wait_Time = Integer.parseInt(grandbossSettings.getProperty("ValakasWaitTime", "30"));
+					if (Valakas_Wait_Time < 3 || Valakas_Wait_Time > 60)
+						Valakas_Wait_Time = 30;
+					Valakas_Wait_Time = Valakas_Wait_Time * 60000;
+
+					Interval_Of_Antharas_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfAntharasSpawn", "192"));
+					if (Interval_Of_Antharas_Spawn < 1 || Interval_Of_Antharas_Spawn > 480)
+						Interval_Of_Antharas_Spawn = 192;
+					Interval_Of_Antharas_Spawn = Interval_Of_Antharas_Spawn * 3600000;
+
+					Random_Of_Antharas_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfAntharasSpawn", "145"));
+					if (Random_Of_Antharas_Spawn < 1 || Random_Of_Antharas_Spawn > 192)
+						Random_Of_Antharas_Spawn = 145;
+					Random_Of_Antharas_Spawn = Random_Of_Antharas_Spawn * 3600000;
+
+					Interval_Of_Valakas_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfValakasSpawn", "192"));
+					if (Interval_Of_Valakas_Spawn < 1 || Interval_Of_Valakas_Spawn > 480)
+						Interval_Of_Valakas_Spawn = 192;
+					Interval_Of_Valakas_Spawn = Interval_Of_Valakas_Spawn * 3600000;
+
+					Random_Of_Valakas_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfValakasSpawn", "145"));
+					if (Random_Of_Valakas_Spawn < 1 || Random_Of_Valakas_Spawn > 192)
+						Random_Of_Valakas_Spawn = 145;
+					Random_Of_Valakas_Spawn = Random_Of_Valakas_Spawn * 3600000;
+
+					Interval_Of_Baium_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfBaiumSpawn", "121"));
+					if (Interval_Of_Baium_Spawn < 1 || Interval_Of_Baium_Spawn > 480)
+						Interval_Of_Baium_Spawn = 121;
+					Interval_Of_Baium_Spawn = Interval_Of_Baium_Spawn * 3600000;
+
+					Random_Of_Baium_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfBaiumSpawn", "8"));
+					if (Random_Of_Baium_Spawn < 1 || Random_Of_Baium_Spawn > 192)
+						Random_Of_Baium_Spawn = 8;
+					Random_Of_Baium_Spawn = Random_Of_Baium_Spawn * 3600000;
+
+					Interval_Of_Core_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfCoreSpawn", "27"));
+					if (Interval_Of_Core_Spawn < 1 || Interval_Of_Core_Spawn > 480)
+						Interval_Of_Core_Spawn = 27;
+					Interval_Of_Core_Spawn = Interval_Of_Core_Spawn * 3600000;
+
+					Random_Of_Core_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfCoreSpawn", "47"));
+					if (Random_Of_Core_Spawn < 1 || Random_Of_Core_Spawn > 192)
+						Random_Of_Core_Spawn = 47;
+					Random_Of_Core_Spawn = Random_Of_Core_Spawn * 3600000;
+
+					Interval_Of_Orfen_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfOrfenSpawn", "28"));
+					if (Interval_Of_Orfen_Spawn < 1 || Interval_Of_Orfen_Spawn > 480)
+						Interval_Of_Orfen_Spawn = 28;
+					Interval_Of_Orfen_Spawn = Interval_Of_Orfen_Spawn * 3600000;
+
+					Random_Of_Orfen_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfOrfenSpawn", "41"));
+					if (Random_Of_Orfen_Spawn < 1 || Random_Of_Orfen_Spawn > 192)
+						Random_Of_Orfen_Spawn = 41;
+					Random_Of_Orfen_Spawn = Random_Of_Orfen_Spawn * 3600000;
+
+					Interval_Of_QueenAnt_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfQueenAntSpawn", "19"));
+					if (Interval_Of_QueenAnt_Spawn < 1 || Interval_Of_QueenAnt_Spawn > 480)
+						Interval_Of_QueenAnt_Spawn = 19;
+					Interval_Of_QueenAnt_Spawn = Interval_Of_QueenAnt_Spawn * 3600000;
+
+					Random_Of_QueenAnt_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfQueenAntSpawn", "35"));
+					if (Random_Of_QueenAnt_Spawn < 1 || Random_Of_QueenAnt_Spawn > 192)
+						Random_Of_QueenAnt_Spawn = 35;
+					Random_Of_QueenAnt_Spawn = Random_Of_QueenAnt_Spawn * 3600000;
+
+					Interval_Of_Zaken_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfZakenSpawn", "19"));
+					if (Interval_Of_Zaken_Spawn < 1 || Interval_Of_Zaken_Spawn > 480)
+						Interval_Of_Zaken_Spawn = 19;
+					Interval_Of_Zaken_Spawn = Interval_Of_Zaken_Spawn * 3600000;
+
+					Random_Of_Zaken_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfZakenSpawn", "35"));
+					if (Random_Of_Zaken_Spawn < 1 || Random_Of_Zaken_Spawn > 192)
+						Random_Of_Zaken_Spawn = 35;
+					Random_Of_Zaken_Spawn = Random_Of_Zaken_Spawn * 3600000;
+
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+					throw new Error("Failed to Load " + GRANDBOSS_CONFIG_FILE + " File.");
+				}
+
+				try
+				{
+					FILTER_LIST = new ArrayList<String>();
+					LineNumberReader lnr = new LineNumberReader(new BufferedReader(new FileReader(new File(CHAT_FILTER_FILE))));
+					String line = null;
+					while ((line = lnr.readLine()) != null)
+					{
+						if (line.trim().isEmpty() || line.startsWith("#"))
+							continue;
+
+						FILTER_LIST.add(line.trim());
+					}
+					_log.info("Loaded " + FILTER_LIST.size() + " Filter Words.");
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+					throw new Error("Failed to Load " + CHAT_FILTER_FILE + " File.");
+				}
 			}
 			finally
 			{
@@ -2082,7 +2328,8 @@ public final class Config
 				{
 					is.close();
 				}
-				catch (Exception e) { }
+				catch (Exception e)
+				{}
 			}
 		}
 		else if(Server.serverMode == Server.MODE_LOGINSERVER)
@@ -2205,12 +2452,12 @@ public final class Config
 	 */
 	public static boolean setParameterValue(String pName, String pValue)
 	{
+		// rates.properties
 		if (pName.equalsIgnoreCase("RateXp")) RATE_XP = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateSp")) RATE_SP = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RatePartyXp")) RATE_PARTY_XP = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RatePartySp")) RATE_PARTY_SP = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateQuestsReward")) RATE_QUESTS_REWARD = Float.parseFloat(pValue);
-		else if (pName.equalsIgnoreCase("RateDropAdena")) RATE_DROP_ADENA = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateConsumableCost")) RATE_CONSUMABLE_COST = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateExtractFish")) RATE_EXTR_FISH = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateDropItems")) RATE_DROP_ITEMS = Float.parseFloat(pValue);
@@ -2218,20 +2465,37 @@ public final class Config
 		else if (pName.equalsIgnoreCase("RateDropSpoil")) RATE_DROP_SPOIL = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateDropManor")) RATE_DROP_MANOR = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("RateDropQuest")) RATE_DROP_QUEST = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityLevel1")) RATE_VITALITY_LEVEL_1 = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityLevel2")) RATE_VITALITY_LEVEL_2 = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityLevel3")) RATE_VITALITY_LEVEL_3 = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityLevel4")) RATE_VITALITY_LEVEL_4 = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateRecoveryPeaceZone")) RATE_RECOVERY_VITALITY_PEACE_ZONE = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityLost")) RATE_VITALITY_LOST = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityGain")) RATE_VITALITY_GAIN = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateRecoveryOnReconnect")) RATE_RECOVERY_ON_RECONNECT = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateKarmaExpLost")) RATE_KARMA_EXP_LOST = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("RateSiegeGuardsPrice")) RATE_SIEGE_GUARDS_PRICE = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateCommonHerbs")) RATE_DROP_COMMON_HERBS = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateHpMpHerbs")) RATE_DROP_MP_HP_HERBS = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateGreaterHerbs")) RATE_DROP_GREATER_HERBS = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateSuperiorHerbs")) RATE_DROP_SUPERIOR_HERBS = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateSpecialHerbs")) RATE_DROP_SPECIAL_HERBS = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("RateVitalityHerbs")) RATE_DROP_VITALITY_HERBS = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("PlayerDropLimit")) PLAYER_DROP_LIMIT = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PlayerRateDrop")) PLAYER_RATE_DROP = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PlayerRateDropItem")) PLAYER_RATE_DROP_ITEM = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PlayerRateDropEquip")) PLAYER_RATE_DROP_EQUIP = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("PlayerRateDropEquipWeapon")) PLAYER_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(pValue);
-
+		else if (pName.equalsIgnoreCase("PetXpRate")) PET_XP_RATE = Float.parseFloat(pValue);
+		else if (pName.equalsIgnoreCase("PetFoodRate")) PET_FOOD_RATE = Integer.parseInt(pValue);
+		else if (pName.equalsIgnoreCase("SinEaterXpRate")) SINEATER_XP_RATE = Float.parseFloat(pValue);
 		else if (pName.equalsIgnoreCase("KarmaDropLimit")) KARMA_DROP_LIMIT = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("KarmaRateDrop")) KARMA_RATE_DROP = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("KarmaRateDropItem")) KARMA_RATE_DROP_ITEM = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("KarmaRateDropEquip")) KARMA_RATE_DROP_EQUIP = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("KarmaRateDropEquipWeapon")) KARMA_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(pValue);
-
+		
+		// general.properties
 		else if (pName.equalsIgnoreCase("AutoDestroyDroppedItemAfter")) AUTODESTROY_ITEM_AFTER = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("DestroyPlayerDroppedItem")) DESTROY_DROPPED_PLAYER_ITEM = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("DestroyEquipableItem")) DESTROY_EQUIPABLE_PLAYER_ITEM = Boolean.parseBoolean(pValue);
@@ -2246,7 +2510,7 @@ public final class Config
 		else if (pName.equalsIgnoreCase("DeleteCharAfterDays")) DELETE_DAYS = Integer.parseInt(pValue);
 
 		else if (pName.equalsIgnoreCase("AllowDiscardItem")) ALLOW_DISCARDITEM = Boolean.parseBoolean(pValue);
-		else if (pName.equalsIgnoreCase("AllowFreight")) ALLOW_FREIGHT = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("AllowRefund")) ALLOW_REFUND = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("AllowWarehouse")) ALLOW_WAREHOUSE = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("AllowWear")) ALLOW_WEAR = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("WearDelay")) WEAR_DELAY = Integer.parseInt(pValue);
@@ -2270,6 +2534,7 @@ public final class Config
 
 		else if (pName.equalsIgnoreCase("ShowServerNews")) SERVER_NEWS = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("ShowNpcLevel")) SHOW_NPC_LVL = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("ShowCrestWithoutQuest")) SHOW_CREST_WITHOUT_QUEST = Boolean.parseBoolean(pValue);
 
 		else if (pName.equalsIgnoreCase("ForceInventoryUpdate")) FORCE_INVENTORY_UPDATE = Boolean.parseBoolean(pValue);
 
@@ -2281,7 +2546,9 @@ public final class Config
 
 		else if (pName.equalsIgnoreCase("CheckKnownList")) CHECK_KNOWN = Boolean.parseBoolean(pValue);
 
+		else if (pName.equalsIgnoreCase("MaxDriftRange")) MAX_DRIFT_RANGE = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("UseDeepBlueDropRules")) DEEPBLUE_DROP_RULES = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("UseDeepBlueDropRulesRaid")) DEEPBLUE_DROP_RULES_RAID = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("GuardAttackAggroMob")) GUARD_ATTACK_AGGRO_MOB = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("CancelLesserEffect")) EFFECT_CANCELING = Boolean.parseBoolean(pValue);
 
@@ -2292,7 +2559,6 @@ public final class Config
 		else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForNoDwarf")) WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForDwarf")) WAREHOUSE_SLOTS_DWARF = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForClan")) WAREHOUSE_SLOTS_CLAN = Integer.parseInt(pValue);
-		else if (pName.equalsIgnoreCase("MaximumFreightSlots")) FREIGHT_SLOTS = Integer.parseInt(pValue);
 
 		else if (pName.equalsIgnoreCase("EnchantChanceWeapon")) ENCHANT_CHANCE_WEAPON = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("EnchantChanceArmor")) ENCHANT_CHANCE_ARMOR = Integer.parseInt(pValue);
@@ -2323,6 +2589,9 @@ public final class Config
 		else if (pName.equalsIgnoreCase("RaidPDefenceMultiplier")) RAID_PDEFENCE_MULTIPLIER = Double.parseDouble(pValue) /100;
 		else if (pName.equalsIgnoreCase("RaidMDefenceMultiplier")) RAID_MDEFENCE_MULTIPLIER = Double.parseDouble(pValue) /100;
 		else if (pName.equalsIgnoreCase("RaidMinionRespawnTime")) RAID_MINION_RESPAWN_TIMER =Integer.parseInt(pValue);
+		else if (pName.equalsIgnoreCase("RaidChaosTime")) RAID_CHAOS_TIME =Integer.parseInt(pValue);
+		else if (pName.equalsIgnoreCase("GrandChaosTime")) GRAND_CHAOS_TIME =Integer.parseInt(pValue);
+		else if (pName.equalsIgnoreCase("MinionChaosTime")) MINION_CHAOS_TIME =Integer.parseInt(pValue);
 
 		else if (pName.equalsIgnoreCase("StartingAdena")) STARTING_ADENA = Long.parseLong(pValue);
 		else if (pName.equalsIgnoreCase("StartingLevel")) STARTING_LEVEL = Byte.parseByte(pValue);
@@ -2382,8 +2651,6 @@ public final class Config
 		else if (pName.equalsIgnoreCase("AllowClassMasters")) ALLOW_CLASS_MASTERS = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("AllowEntireTree")) ALLOW_ENTIRE_TREE = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("AlternateClassMaster")) ALTERNATE_CLASS_MASTER = Boolean.parseBoolean(pValue);
-		else if (pName.equalsIgnoreCase("AltGameFreights")) ALT_GAME_FREIGHTS = Boolean.parseBoolean(pValue);
-		else if (pName.equalsIgnoreCase("AltGameFreightPrice")) ALT_GAME_FREIGHT_PRICE = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("AltPartyRange")) ALT_PARTY_RANGE = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("AltPartyRange2")) ALT_PARTY_RANGE2 = Integer.parseInt(pValue);
 
@@ -2448,10 +2715,16 @@ public final class Config
 
 		else if (pName.equalsIgnoreCase("EnableWarehouseSortingClan")) L2JMOD_ENABLE_WAREHOUSESORTING_CLAN = Boolean.parseBoolean(pValue);
 		else if (pName.equalsIgnoreCase("EnableWarehouseSortingPrivate")) L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE = Boolean.parseBoolean(pValue);
-		else if (pName.equalsIgnoreCase("EnableWarehouseSortingFreight")) L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT = Boolean.parseBoolean(pValue);
 
 		else if (pName.equalsIgnoreCase("EnableManaPotionSupport")) L2JMOD_ENABLE_MANA_POTIONS_SUPPORT = Boolean.parseBoolean(pValue);
 
+		else if (pName.equalsIgnoreCase("DisplayServerTime")) L2JMOD_DISPLAY_SERVER_TIME = Boolean.parseBoolean(pValue);
+
+		else if (pName.equalsIgnoreCase("AntiFeedEnable")) L2JMOD_ANTIFEED_ENABLE = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("AntiFeedDualbox")) L2JMOD_ANTIFEED_DUALBOX = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("AntiFeedDisconnectedAsDualbox")) L2JMOD_ANTIFEED_DISCONNECTED_AS_DUALBOX = Boolean.parseBoolean(pValue);
+		else if (pName.equalsIgnoreCase("AntiFeedInterval")) L2JMOD_ANTIFEED_INTERVAL = 1000*Integer.parseInt(pValue);
+
 		else if (pName.equalsIgnoreCase("MinKarma")) KARMA_MIN_KARMA = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("MaxKarma")) KARMA_MAX_KARMA = Integer.parseInt(pValue);
 		else if (pName.equalsIgnoreCase("XPDivider")) KARMA_XP_DIVIDER = Integer.parseInt(pValue);
@@ -2526,6 +2799,7 @@ public final class Config
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SERVER_BYPASS, "ServerBypass", "5");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MULTISELL, "MultiSell", "1");
 		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_TRANSACTION, "Transaction", "10");
+		loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SENDMAIL, "SendMail", "600");
 	}
 	
 	/**

+ 1 - 1
L2_GameServer/java/net/sf/l2j/L2DatabaseFactory.java → L2_GameServer/java/com/l2jserver/L2DatabaseFactory.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j;
+package com.l2jserver;
 
 import java.sql.Connection;
 import java.sql.SQLException;

+ 1 - 1
L2_GameServer/java/net/sf/l2j/Server.java → L2_GameServer/java/com/l2jserver/Server.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j;
+package com.l2jserver;
 
 /**
  * This class used to be the starter class, since LS/GS split, it only retains server mode

+ 6 - 5
L2_GameServer/java/net/sf/l2j/accountmanager/SQLAccountManager.java → L2_GameServer/java/com/l2jserver/accountmanager/SQLAccountManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.accountmanager;
+package com.l2jserver.accountmanager;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -24,11 +24,12 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
+import com.l2jserver.Base64;
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.Server;
+
 import javolution.util.FastList;
-import net.sf.l2j.Base64;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.Server;
 
 /**
  * This class SQL Account Manager

+ 37 - 14
L2_GameServer/java/net/sf/l2j/configurator/ConfigUserInterface.java → L2_GameServer/java/com/l2jserver/configurator/ConfigUserInterface.java

@@ -12,11 +12,12 @@
  * 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 net.sf.l2j.configurator;
+package com.l2jserver.configurator;
 
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
+import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.BufferedWriter;
@@ -50,17 +51,18 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
-import javax.swing.JTextField;
+import javax.swing.JTextArea;
 import javax.swing.JToolBar;
 import javax.swing.SwingUtilities;
 import javax.swing.ToolTipManager;
 import javax.swing.UIManager;
 
+import com.l2jserver.configurator.ConfigUserInterface.ConfigFile.ConfigComment;
+import com.l2jserver.configurator.ConfigUserInterface.ConfigFile.ConfigProperty;
+import com.l2jserver.i18n.LanguageControl;
+import com.l2jserver.images.ImagesTable;
+
 import javolution.util.FastList;
-import net.sf.l2j.configurator.ConfigUserInterface.ConfigFile.ConfigComment;
-import net.sf.l2j.configurator.ConfigUserInterface.ConfigFile.ConfigProperty;
-import net.sf.l2j.i18n.LanguageControl;
-import net.sf.l2j.images.ImagesTable;
 
 /**
  *
@@ -176,7 +178,8 @@ public class ConfigUserInterface extends JFrame implements ActionListener
 	/**
      * 
      */
-    private void buildInterface()
+    @SuppressWarnings("serial")
+	private void buildInterface()
     {
     	ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
 		ToolTipManager.sharedInstance().setInitialDelay(0);
@@ -188,7 +191,9 @@ public class ConfigUserInterface extends JFrame implements ActionListener
     	cons.insets = new Insets(2, 2, 2, 2);
 	    for (ConfigFile cf : getConfigs())
 	    {
-	    	JPanel panel = new JPanel();
+	    	JPanel panel = new JPanel() {
+	    		public void scrollRectToVisible(Rectangle r ) {}
+	    	};
 	    	panel.setLayout(new GridBagLayout());
 	    	
 	    	cons.gridy = 0;
@@ -213,6 +218,7 @@ public class ConfigUserInterface extends JFrame implements ActionListener
 	    		cons.gridx++;
 	    		
 	    		JComponent valueComponent = cp.getValueComponent();
+	    		valueComponent.setToolTipText(comments);
 	    		cons.weightx = 1;
 	    		panel.add(valueComponent, cons);
 	    		cons.gridx++;
@@ -290,6 +296,15 @@ public class ConfigUserInterface extends JFrame implements ActionListener
 	    		{
 	    			value = kv[1].trim();
 	    		}
+                
+                if (line.indexOf('\\') >= 0)
+                {
+                    while ((line = lnr.readLine()) != null && line.indexOf('\\') >= 0)
+                    {
+                        value += "\r\n"+line;
+                    }
+                    value += "\r\n"+line;
+                }
 	    		
 	    		String comments = commentBuffer.toString();
 	    		commentBuffer.setLength(0); //reset
@@ -298,6 +313,7 @@ public class ConfigUserInterface extends JFrame implements ActionListener
 	    	}
 	    }
     	getConfigs().add(cf);
+    	lnr.close();
     }
 
     /**
@@ -579,9 +595,15 @@ public class ConfigUserInterface extends JFrame implements ActionListener
             		case STRING:
             		default:
             			String val = this.getValue().toString();
-            			JTextField textField = new JTextField(val);
-            			textField.setColumns(Math.max(val.length(), 20));
-            			return textField;
+            			JTextArea textArea = new JTextArea(val);
+            			textArea.setFont(UIManager.getFont("TextField.font"));
+            			int rows = 1;
+            			for (int i = 0; i < val.length(); i++)
+            				if (val.charAt(i) == '\\')
+            					rows++;
+            			textArea.setRows(rows);
+            			textArea.setColumns(Math.max(val.length() / rows, 20));
+            			return textArea;
             	}
             }
             
@@ -590,15 +612,16 @@ public class ConfigUserInterface extends JFrame implements ActionListener
             	String value;
             	if (this.getValueComponent() instanceof JCheckBox)
             	{
-            		value = ((JCheckBox) this.getValueComponent()).isSelected()+"";
+            		value = Boolean.toString(((JCheckBox) this.getValueComponent()).isSelected());
+            		value = value.substring(0, 1).toUpperCase() + value.substring(1);
             	}
             	else if (this.getValueComponent() instanceof JIPTextField)
             	{
             		value = ((JIPTextField) this.getValueComponent()).getText();
             	}
-            	else if (this.getValueComponent() instanceof JTextField)
+            	else if (this.getValueComponent() instanceof JTextArea)
             	{
-            		value = ((JTextField) this.getValueComponent()).getText();
+            		value = ((JTextArea) this.getValueComponent()).getText();
             	}
             	else
             	{

+ 1 - 1
L2_GameServer/java/net/sf/l2j/configurator/JIPTextField.java → L2_GameServer/java/com/l2jserver/configurator/JIPTextField.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.configurator;
+package com.l2jserver.configurator;
 
 import java.awt.Component;
 import java.awt.GridBagConstraints;

+ 14 - 13
L2_GameServer/java/net/sf/l2j/gameserver/Announcements.java → L2_GameServer/java/com/l2jserver/gameserver/Announcements.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.io.File;
 import java.io.FileReader;
@@ -25,18 +25,19 @@ import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.script.DateRange;
+import com.l2jserver.gameserver.util.Broadcast;
+import com.l2jserver.gameserver.util.StringUtil;
+
 import javolution.util.FastList;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.cache.HtmCache;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.clientpackets.Say2;
-import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
-import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.script.DateRange;
-import net.sf.l2j.gameserver.util.Broadcast;
-import net.sf.l2j.gameserver.util.StringUtil;
 
 /**
  * This class ...
@@ -120,7 +121,7 @@ public class Announcements
 		for (int i = 0; i < _announcements.size(); i++)
 		{
 			StringUtil.append(replyMSG, "<table width=260><tr><td width=220>", _announcements.get(i), "</td><td width=40>"
-					+ "<button value=\"Delete\" action=\"bypass -h admin_del_announcement ", String.valueOf(i), "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
+					+ "<button value=\"Delete\" action=\"bypass -h admin_del_announcement ", String.valueOf(i), "\" width=60 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
 		}
 		adminReply.replace("%announces%", replyMSG.toString());
 		activeChar.sendPacket(adminReply);

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/CastleUpdater.java → L2_GameServer/java/com/l2jserver/gameserver/CastleUpdater.java

@@ -12,15 +12,16 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.instancemanager.CastleManager;
-import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.entity.Castle;
-import net.sf.l2j.gameserver.model.itemcontainer.ItemContainer;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.instancemanager.CastleManager;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.entity.Castle;
+import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
+
 
 /**
  *

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/Crypt.java → L2_GameServer/java/com/l2jserver/gameserver/Crypt.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.nio.ByteBuffer;
 

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/CustomPacketHandlerInterface.java → L2_GameServer/java/com/l2jserver/gameserver/CustomPacketHandlerInterface.java

@@ -19,12 +19,13 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.nio.ByteBuffer;
 
-import net.sf.l2j.gameserver.network.L2GameClient;
-import net.sf.l2j.gameserver.network.clientpackets.L2GameClientPacket;
+import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket;
+
 
 /**
  * This interface can be implemented by custom extensions to l2j to get packets

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/FortUpdater.java → L2_GameServer/java/com/l2jserver/gameserver/FortUpdater.java

@@ -12,13 +12,14 @@
  * this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.entity.Fort;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.entity.Fort;
+
 
 /**
  *

+ 107 - 98
L2_GameServer/java/net/sf/l2j/gameserver/GameServer.java → L2_GameServer/java/com/l2jserver/gameserver/GameServer.java

@@ -13,7 +13,7 @@
  * this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -26,103 +26,106 @@ import java.util.logging.Level;
 import java.util.logging.LogManager;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.Server;
-import net.sf.l2j.gameserver.cache.CrestCache;
-import net.sf.l2j.gameserver.cache.HtmCache;
-import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
-import net.sf.l2j.gameserver.datatables.AccessLevels;
-import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights;
-import net.sf.l2j.gameserver.datatables.ArmorSetsTable;
-import net.sf.l2j.gameserver.datatables.AugmentationData;
-import net.sf.l2j.gameserver.datatables.CharNameTable;
-import net.sf.l2j.gameserver.datatables.CharTemplateTable;
-import net.sf.l2j.gameserver.datatables.ClanTable;
-import net.sf.l2j.gameserver.datatables.DoorTable;
-import net.sf.l2j.gameserver.datatables.EnchantHPBonusData;
-import net.sf.l2j.gameserver.datatables.EventDroplist;
-import net.sf.l2j.gameserver.datatables.ExtractableItemsData;
-import net.sf.l2j.gameserver.datatables.ExtractableSkillsData;
-import net.sf.l2j.gameserver.datatables.FishTable;
-import net.sf.l2j.gameserver.datatables.HelperBuffTable;
-import net.sf.l2j.gameserver.datatables.HennaTable;
-import net.sf.l2j.gameserver.datatables.HennaTreeTable;
-import net.sf.l2j.gameserver.datatables.HeroSkillTable;
-import net.sf.l2j.gameserver.datatables.ItemTable;
-import net.sf.l2j.gameserver.datatables.LevelUpData;
-import net.sf.l2j.gameserver.datatables.MapRegionTable;
-import net.sf.l2j.gameserver.datatables.MerchantPriceConfigTable;
-import net.sf.l2j.gameserver.datatables.NobleSkillTable;
-import net.sf.l2j.gameserver.datatables.NpcBufferTable;
-import net.sf.l2j.gameserver.datatables.NpcTable;
-import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
-import net.sf.l2j.gameserver.datatables.PetSkillsTable;
-import net.sf.l2j.gameserver.datatables.ResidentialSkillTable;
-import net.sf.l2j.gameserver.datatables.SkillSpellbookTable;
-import net.sf.l2j.gameserver.datatables.SkillTable;
-import net.sf.l2j.gameserver.datatables.SkillTreeTable;
-import net.sf.l2j.gameserver.datatables.SpawnTable;
-import net.sf.l2j.gameserver.datatables.StaticObjects;
-import net.sf.l2j.gameserver.datatables.SummonItemsData;
-import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
-import net.sf.l2j.gameserver.geoeditorcon.GeoEditorListener;
-import net.sf.l2j.gameserver.handler.AdminCommandHandler;
-import net.sf.l2j.gameserver.handler.ChatHandler;
-import net.sf.l2j.gameserver.handler.ItemHandler;
-import net.sf.l2j.gameserver.handler.SkillHandler;
-import net.sf.l2j.gameserver.handler.UserCommandHandler;
-import net.sf.l2j.gameserver.handler.VoicedCommandHandler;
-import net.sf.l2j.gameserver.idfactory.IdFactory;
-import net.sf.l2j.gameserver.instancemanager.AirShipManager;
-import net.sf.l2j.gameserver.instancemanager.AuctionManager;
-import net.sf.l2j.gameserver.instancemanager.BoatManager;
-import net.sf.l2j.gameserver.instancemanager.CastleManager;
-import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
-import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
-import net.sf.l2j.gameserver.instancemanager.CoupleManager;
-import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
-import net.sf.l2j.gameserver.instancemanager.DayNightSpawnManager;
-import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
-import net.sf.l2j.gameserver.instancemanager.FortManager;
-import net.sf.l2j.gameserver.instancemanager.FortSiegeManager;
-import net.sf.l2j.gameserver.instancemanager.FourSepulchersManager;
-import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
-import net.sf.l2j.gameserver.instancemanager.InstanceManager;
-import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;
-import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
-import net.sf.l2j.gameserver.instancemanager.PetitionManager;
-import net.sf.l2j.gameserver.instancemanager.QuestManager;
-import net.sf.l2j.gameserver.instancemanager.RaidBossPointsManager;
-import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
-import net.sf.l2j.gameserver.instancemanager.SiegeManager;
-import net.sf.l2j.gameserver.instancemanager.TransformationManager;
-import net.sf.l2j.gameserver.instancemanager.ZoneManager;
-import net.sf.l2j.gameserver.model.AutoChatHandler;
-import net.sf.l2j.gameserver.model.AutoSpawnHandler;
-import net.sf.l2j.gameserver.model.L2Manor;
-import net.sf.l2j.gameserver.model.L2Multisell;
-import net.sf.l2j.gameserver.model.L2PetDataTable;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.entity.Hero;
-import net.sf.l2j.gameserver.model.entity.TvTManager;
-import net.sf.l2j.gameserver.model.olympiad.Olympiad;
-import net.sf.l2j.gameserver.network.L2GameClient;
-import net.sf.l2j.gameserver.network.L2GamePacketHandler;
-import net.sf.l2j.gameserver.pathfinding.PathFinding;
-import net.sf.l2j.gameserver.script.faenor.FaenorScriptEngine;
-import net.sf.l2j.gameserver.scripting.CompiledScriptCache;
-import net.sf.l2j.gameserver.scripting.L2ScriptEngineManager;
-import net.sf.l2j.gameserver.taskmanager.AutoAnnounceTaskManager;
-import net.sf.l2j.gameserver.taskmanager.KnownListUpdateTaskManager;
-import net.sf.l2j.gameserver.taskmanager.TaskManager;
-import net.sf.l2j.gameserver.util.DynamicExtension;
-import net.sf.l2j.status.Status;
-import net.sf.l2j.util.DeadLockDetector;
 
 import org.mmocore.network.SelectorConfig;
 import org.mmocore.network.SelectorThread;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.Server;
+import com.l2jserver.gameserver.cache.CrestCache;
+import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.communitybbs.Manager.ForumsBBSManager;
+import com.l2jserver.gameserver.datatables.AccessLevels;
+import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
+import com.l2jserver.gameserver.datatables.ArmorSetsTable;
+import com.l2jserver.gameserver.datatables.AugmentationData;
+import com.l2jserver.gameserver.datatables.CharNameTable;
+import com.l2jserver.gameserver.datatables.CharTemplateTable;
+import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.datatables.DoorTable;
+import com.l2jserver.gameserver.datatables.EnchantHPBonusData;
+import com.l2jserver.gameserver.datatables.EventDroplist;
+import com.l2jserver.gameserver.datatables.ExtractableItemsData;
+import com.l2jserver.gameserver.datatables.ExtractableSkillsData;
+import com.l2jserver.gameserver.datatables.FishTable;
+import com.l2jserver.gameserver.datatables.HelperBuffTable;
+import com.l2jserver.gameserver.datatables.HennaTable;
+import com.l2jserver.gameserver.datatables.HennaTreeTable;
+import com.l2jserver.gameserver.datatables.HeroSkillTable;
+import com.l2jserver.gameserver.datatables.ItemTable;
+import com.l2jserver.gameserver.datatables.PetDataTable;
+import com.l2jserver.gameserver.datatables.LevelUpData;
+import com.l2jserver.gameserver.datatables.MapRegionTable;
+import com.l2jserver.gameserver.datatables.MerchantPriceConfigTable;
+import com.l2jserver.gameserver.datatables.NobleSkillTable;
+import com.l2jserver.gameserver.datatables.NpcBufferTable;
+import com.l2jserver.gameserver.datatables.NpcTable;
+import com.l2jserver.gameserver.datatables.NpcWalkerRoutesTable;
+import com.l2jserver.gameserver.datatables.PetSkillsTable;
+import com.l2jserver.gameserver.datatables.ResidentialSkillTable;
+import com.l2jserver.gameserver.datatables.SkillSpellbookTable;
+import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.datatables.SkillTreeTable;
+import com.l2jserver.gameserver.datatables.SpawnTable;
+import com.l2jserver.gameserver.datatables.StaticObjects;
+import com.l2jserver.gameserver.datatables.SummonItemsData;
+import com.l2jserver.gameserver.datatables.TeleportLocationTable;
+import com.l2jserver.gameserver.geoeditorcon.GeoEditorListener;
+import com.l2jserver.gameserver.handler.AdminCommandHandler;
+import com.l2jserver.gameserver.handler.ChatHandler;
+import com.l2jserver.gameserver.handler.ItemHandler;
+import com.l2jserver.gameserver.handler.SkillHandler;
+import com.l2jserver.gameserver.handler.UserCommandHandler;
+import com.l2jserver.gameserver.handler.VoicedCommandHandler;
+import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.instancemanager.AirShipManager;
+import com.l2jserver.gameserver.instancemanager.AuctionManager;
+import com.l2jserver.gameserver.instancemanager.BoatManager;
+import com.l2jserver.gameserver.instancemanager.CastleManager;
+import com.l2jserver.gameserver.instancemanager.CastleManorManager;
+import com.l2jserver.gameserver.instancemanager.ClanHallManager;
+import com.l2jserver.gameserver.instancemanager.CoupleManager;
+import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
+import com.l2jserver.gameserver.instancemanager.DayNightSpawnManager;
+import com.l2jserver.gameserver.instancemanager.DimensionalRiftManager;
+import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
+import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
+import com.l2jserver.gameserver.instancemanager.GrandBossManager;
+import com.l2jserver.gameserver.instancemanager.InstanceManager;
+import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
+import com.l2jserver.gameserver.instancemanager.MailManager;
+import com.l2jserver.gameserver.instancemanager.MercTicketManager;
+import com.l2jserver.gameserver.instancemanager.PetitionManager;
+import com.l2jserver.gameserver.instancemanager.QuestManager;
+import com.l2jserver.gameserver.instancemanager.RaidBossPointsManager;
+import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
+import com.l2jserver.gameserver.instancemanager.SiegeManager;
+import com.l2jserver.gameserver.instancemanager.TransformationManager;
+import com.l2jserver.gameserver.instancemanager.ZoneManager;
+import com.l2jserver.gameserver.model.AutoChatHandler;
+import com.l2jserver.gameserver.model.AutoSpawnHandler;
+import com.l2jserver.gameserver.model.L2Manor;
+import com.l2jserver.gameserver.model.L2Multisell;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.entity.Hero;
+import com.l2jserver.gameserver.model.entity.TvTManager;
+import com.l2jserver.gameserver.model.olympiad.Olympiad;
+import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.L2GamePacketHandler;
+import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
+import com.l2jserver.gameserver.pathfinding.PathFinding;
+import com.l2jserver.gameserver.script.faenor.FaenorScriptEngine;
+import com.l2jserver.gameserver.scripting.CompiledScriptCache;
+import com.l2jserver.gameserver.scripting.L2ScriptEngineManager;
+import com.l2jserver.gameserver.taskmanager.AutoAnnounceTaskManager;
+import com.l2jserver.gameserver.taskmanager.KnownListUpdateTaskManager;
+import com.l2jserver.gameserver.taskmanager.TaskManager;
+import com.l2jserver.gameserver.util.DynamicExtension;
+import com.l2jserver.status.Status;
+import com.l2jserver.util.DeadLockDetector;
+
 /**
  * This class ...
  * 
@@ -259,7 +262,7 @@ public class GameServer
 			PathFinding.getInstance();
 		
 		CastleManager.getInstance().loadInstances();
-		SiegeManager.getInstance();
+		SiegeManager.getInstance().getSieges();
 		FortManager.getInstance().loadInstances();
 		FortSiegeManager.getInstance();
 		
@@ -274,7 +277,6 @@ public class GameServer
 		FourSepulchersManager.getInstance().init();
 		DimensionalRiftManager.getInstance();
 		Announcements.getInstance();
-		AutoAnnounceTaskManager.getInstance();
 		MapRegionTable.getInstance();
 		EventDroplist.getInstance();
 		
@@ -377,12 +379,15 @@ public class GameServer
 		GmListTable.getInstance();
 		
 		// read pet stats from db
-		L2PetDataTable.getInstance().loadPetsData();
+		PetDataTable.getInstance().loadPetsData();
 		
 		MerchantPriceConfigTable.getInstance().updateReferences();
 		CastleManager.getInstance().activateInstances();
 		FortManager.getInstance().activateInstances();
-		
+
+		if (Config.ALLOW_MAIL)
+			MailManager.getInstance();
+
 		Universe.getInstance();
 		
 		if (Config.ACCEPT_GEOEDITOR_CONN)
@@ -423,6 +428,8 @@ public class GameServer
 		_loginThread = LoginServerThread.getInstance();
 		_loginThread.start();
 		
+		CommunityServerThread.initialize();
+		
 		final SelectorConfig sc = new SelectorConfig();
 		sc.MAX_READ_PER_PASS = Config.MMO_MAX_READ_PER_PASS;
 		sc.MAX_SEND_PER_PASS = Config.MMO_MAX_SEND_PER_PASS;
@@ -467,6 +474,8 @@ public class GameServer
 		_log.config("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
 		long serverLoadEnd = System.currentTimeMillis();
 		_log.info("Server Loaded in " + ((serverLoadEnd - serverLoadStart) / 1000) + " seconds");
+		
+		AutoAnnounceTaskManager.getInstance();
 	}
 	
 	public static void main(String[] args) throws Exception

+ 6 - 5
L2_GameServer/java/net/sf/l2j/gameserver/GameTimeController.java → L2_GameServer/java/com/l2jserver/gameserver/GameTimeController.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -23,11 +23,12 @@ import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.ai.CtrlEvent;
+import com.l2jserver.gameserver.instancemanager.DayNightSpawnManager;
+import com.l2jserver.gameserver.model.actor.L2Character;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.ai.CtrlEvent;
-import net.sf.l2j.gameserver.instancemanager.DayNightSpawnManager;
-import net.sf.l2j.gameserver.model.actor.L2Character;
 
 /**
  * This class ...

+ 8 - 7
L2_GameServer/java/net/sf/l2j/gameserver/GeoData.java → L2_GameServer/java/com/l2jserver/gameserver/GeoData.java

@@ -12,16 +12,17 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.Location;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.pathfinding.Node;
-import net.sf.l2j.util.Point3D;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.Location;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.pathfinding.Node;
+import com.l2jserver.util.Point3D;
+
 
 /**
  *

+ 26 - 26
L2_GameServer/java/net/sf/l2j/gameserver/GeoEngine.java → L2_GameServer/java/com/l2jserver/gameserver/GeoEngine.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
@@ -31,20 +31,20 @@ import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.DoorTable;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.Location;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DefenderInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.pathfinding.Node;
+import com.l2jserver.gameserver.pathfinding.cellnodes.CellPathFinding;
+import com.l2jserver.util.Point3D;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.datatables.DoorTable;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.Location;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2FortSiegeGuardInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance;
-import net.sf.l2j.gameserver.pathfinding.Node;
-import net.sf.l2j.gameserver.pathfinding.cellnodes.CellPathFinding;
-import net.sf.l2j.util.Point3D;
 
 /**
  *
@@ -73,7 +73,7 @@ public class GeoEngine extends GeoData
 	
 	//Public Methods
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#getType(int, int)
+	 * @see com.l2jserver.gameserver.GeoData#getType(int, int)
 	 */
 	@Override
 	public short getType(int x, int y)
@@ -82,7 +82,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#getHeight(int, int, int)
+	 * @see com.l2jserver.gameserver.GeoData#getHeight(int, int, int)
 	 */
 	@Override
 	public short getHeight(int x, int y, int z)
@@ -91,7 +91,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#getSpawnHeight(int, int, int, int, int)
+	 * @see com.l2jserver.gameserver.GeoData#getSpawnHeight(int, int, int, int, int)
 	 */
 	@Override
 	public short getSpawnHeight(int x, int y, int zmin, int zmax, int spawnid)
@@ -100,7 +100,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#geoPosition(int, int)
+	 * @see com.l2jserver.gameserver.GeoData#geoPosition(int, int)
 	 */
 	@Override
 	public String geoPosition(int x, int y)
@@ -112,7 +112,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#canSeeTarget(L2Object, Point3D)
+	 * @see com.l2jserver.gameserver.GeoData#canSeeTarget(L2Object, Point3D)
 	 */
 	@Override
 	public boolean canSeeTarget(L2Object cha, Point3D target)
@@ -127,7 +127,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#canSeeTarget(net.sf.l2j.gameserver.model.L2Object, net.sf.l2j.gameserver.model.L2Object)
+	 * @see com.l2jserver.gameserver.GeoData#canSeeTarget(com.l2jserver.gameserver.model.L2Object, com.l2jserver.gameserver.model.L2Object)
 	 */
 	@Override
 	public boolean canSeeTarget(L2Object cha, L2Object target)
@@ -142,7 +142,7 @@ public class GeoEngine extends GeoData
 		// If this is going to be improved, use e.g.
 		// ((L2Character)cha).getTemplate().collisionHeight
 		int z = cha.getZ() + 45;
-		if (cha instanceof L2SiegeGuardInstance || cha instanceof L2FortSiegeGuardInstance)
+		if (cha instanceof L2DefenderInstance)
 			z += 30; // well they don't move closer to balcony fence at the moment :(
 		int z2 = target.getZ() + 45;
 		if (!(target instanceof L2DoorInstance)
@@ -150,7 +150,7 @@ public class GeoEngine extends GeoData
 			return false;
 		if (target instanceof L2DoorInstance)
 			return true; // door coordinates are hinge coords..
-		if (target instanceof L2SiegeGuardInstance || target instanceof L2FortSiegeGuardInstance)
+		if (target instanceof L2DefenderInstance)
 			z2 += 30; // well they don't move closer to balcony fence at the moment :(
 		if (cha.getZ() >= target.getZ())
 			return canSeeTarget(cha.getX(), cha.getY(), z, target.getX(), target.getY(), z2);
@@ -159,7 +159,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#canSeeTargetDebug(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, net.sf.l2j.gameserver.model.L2Object)
+	 * @see com.l2jserver.gameserver.GeoData#canSeeTargetDebug(com.l2jserver.gameserver.model.actor.instance.L2PcInstance, com.l2jserver.gameserver.model.L2Object)
 	 */
 	@Override
 	public boolean canSeeTargetDebug(L2PcInstance gm, L2Object target)
@@ -180,7 +180,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#getNSWE(int, int, int)
+	 * @see com.l2jserver.gameserver.GeoData#getNSWE(int, int, int)
 	 */
 	@Override
 	public short getNSWE(int x, int y, int z)
@@ -196,7 +196,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#moveCheck(int, int, int, int, int, int, int)
+	 * @see com.l2jserver.gameserver.GeoData#moveCheck(int, int, int, int, int, int, int)
 	 */
 	@Override
 	public Location moveCheck(int x, int y, int z, int tx, int ty, int tz, int instanceId)
@@ -210,7 +210,7 @@ public class GeoEngine extends GeoData
 	}
 	
 	/**
-	 * @see net.sf.l2j.gameserver.GeoData#addGeoDataBug(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, java.lang.String)
+	 * @see com.l2jserver.gameserver.GeoData#addGeoDataBug(com.l2jserver.gameserver.model.actor.instance.L2PcInstance, java.lang.String)
 	 */
 	@Override
 	public void addGeoDataBug(L2PcInstance gm, String comment)
@@ -1294,7 +1294,7 @@ public class GeoEngine extends GeoData
 			// Check if LOS goes under a layer/floor
 			// clearly under layer but not too much under 
 			// lowerheight here only for geodata bug checking, layers very close? maybe could be removed
-			if ((z - upperHeight) < -10 && (z - upperHeight) > inc_z - 10 && (z - lowerHeight) > 40)
+			if ((z - upperHeight) < -10 && (z - upperHeight) > inc_z - 20 && (z - lowerHeight) > 40)
 			{
 				if (debug)
 					_log.warning("false, incz" + inc_z);

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/GmListTable.java → L2_GameServer/java/com/l2jserver/gameserver/GmListTable.java

@@ -12,17 +12,18 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.L2GameServerPacket;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 
 /**
  * This class stores references to all online game masters. (access level > 100)

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/InstanceListManager.java → L2_GameServer/java/com/l2jserver/gameserver/InstanceListManager.java

@@ -1,4 +1,4 @@
-package net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 /**
  * Interface for managers of list of instances.

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/Item.java → L2_GameServer/java/com/l2jserver/gameserver/Item.java

@@ -19,10 +19,10 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.templates.item.L2Item;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.templates.item.L2Item;
 
 /**
  * This class ...

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/ItemsAutoDestroy.java → L2_GameServer/java/com/l2jserver/gameserver/ItemsAutoDestroy.java

@@ -12,17 +12,18 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.List;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.templates.item.L2EtcItemType;
+
 import javolution.util.FastList;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.templates.item.L2EtcItemType;
 
 public class ItemsAutoDestroy
 {

+ 43 - 27
L2_GameServer/java/net/sf/l2j/gameserver/LoginServerThread.java → L2_GameServer/java/com/l2jserver/gameserver/LoginServerThread.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.io.BufferedOutputStream;
 import java.io.IOException;
@@ -29,39 +29,44 @@ import java.security.spec.RSAPublicKeySpec;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.L2GameClient;
-import net.sf.l2j.gameserver.network.L2GameClient.GameClientState;
-import net.sf.l2j.gameserver.network.gameserverpackets.AuthRequest;
-import net.sf.l2j.gameserver.network.gameserverpackets.BlowFishKey;
-import net.sf.l2j.gameserver.network.gameserverpackets.ChangeAccessLevel;
-import net.sf.l2j.gameserver.network.gameserverpackets.GameServerBasePacket;
-import net.sf.l2j.gameserver.network.gameserverpackets.PlayerAuthRequest;
-import net.sf.l2j.gameserver.network.gameserverpackets.PlayerInGame;
-import net.sf.l2j.gameserver.network.gameserverpackets.PlayerLogout;
-import net.sf.l2j.gameserver.network.gameserverpackets.ServerStatus;
-import net.sf.l2j.gameserver.network.loginserverpackets.AuthResponse;
-import net.sf.l2j.gameserver.network.loginserverpackets.InitLS;
-import net.sf.l2j.gameserver.network.loginserverpackets.KickPlayer;
-import net.sf.l2j.gameserver.network.loginserverpackets.LoginServerFail;
-import net.sf.l2j.gameserver.network.loginserverpackets.PlayerAuthResponse;
-import net.sf.l2j.gameserver.network.serverpackets.CharSelectionInfo;
-import net.sf.l2j.gameserver.network.serverpackets.LoginFail;
-import net.sf.l2j.loginserver.crypt.NewCrypt;
-import net.sf.l2j.util.Rnd;
-import net.sf.l2j.util.Util;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
+import com.l2jserver.gameserver.network.gameserverpackets.AuthRequest;
+import com.l2jserver.gameserver.network.gameserverpackets.BlowFishKey;
+import com.l2jserver.gameserver.network.gameserverpackets.ChangeAccessLevel;
+import com.l2jserver.gameserver.network.gameserverpackets.GameServerBasePacket;
+import com.l2jserver.gameserver.network.gameserverpackets.PlayerAuthRequest;
+import com.l2jserver.gameserver.network.gameserverpackets.PlayerInGame;
+import com.l2jserver.gameserver.network.gameserverpackets.PlayerLogout;
+import com.l2jserver.gameserver.network.gameserverpackets.ServerStatus;
+import com.l2jserver.gameserver.network.loginserverpackets.AuthResponse;
+import com.l2jserver.gameserver.network.loginserverpackets.InitLS;
+import com.l2jserver.gameserver.network.loginserverpackets.KickPlayer;
+import com.l2jserver.gameserver.network.loginserverpackets.LoginServerFail;
+import com.l2jserver.gameserver.network.loginserverpackets.PlayerAuthResponse;
+import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
+import com.l2jserver.gameserver.network.serverpackets.LoginFail;
+import com.l2jserver.loginserver.crypt.NewCrypt;
+import com.l2jserver.util.Rnd;
+import com.l2jserver.util.Util;
 
 public class LoginServerThread extends Thread
 {
 	protected static final Logger _log = Logger.getLogger(LoginServerThread.class.getName());
-	
-	/** {@see net.sf.l2j.loginserver.LoginServer#PROTOCOL_REV } */
+	protected static final Logger _logAccounting = Logger.getLogger("accounting");
+
+	/** {@see com.l2jserver.loginserver.LoginServer#PROTOCOL_REV } */
 	private static final int REVISION = 0x0102;
 	private RSAPublicKey _publicKey;
 	private String _hostname;
@@ -449,7 +454,18 @@ public class LoginServerThread extends Thread
 	{
 		if (_accountsInGameServer.get(account) != null)
 		{
-			_accountsInGameServer.get(account).closeNow();
+			L2GameClient client = _accountsInGameServer.get(account);
+	    	LogRecord record = new LogRecord(Level.WARNING, "Kicked");
+	    	record.setParameters(new Object[]{client});
+			_logAccounting.log(record);
+			L2PcInstance player = client.getActiveChar();
+			if (player != null)
+			{
+				player.sendPacket(SystemMessageId.ANOTHER_LOGIN_WITH_ACCOUNT);
+				player.logout(false);
+			}
+			else
+				client.closeNow();
 			LoginServerThread.getInstance().sendLogout(account);
 		}
 	}

+ 8 - 7
L2_GameServer/java/net/sf/l2j/gameserver/MonsterRace.java → L2_GameServer/java/com/l2jserver/gameserver/MonsterRace.java

@@ -12,15 +12,16 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.lang.reflect.Constructor;
 
-import net.sf.l2j.gameserver.datatables.NpcTable;
-import net.sf.l2j.gameserver.idfactory.IdFactory;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
-import net.sf.l2j.util.Rnd;
+import com.l2jserver.gameserver.datatables.NpcTable;
+import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
+import com.l2jserver.util.Rnd;
+
 
 public class MonsterRace
 {
@@ -65,7 +66,7 @@ public class MonsterRace
 			try
 			{
 				L2NpcTemplate template = NpcTable.getInstance().getTemplate(id + random);
-				_constructor = Class.forName("net.sf.l2j.gameserver.model.actor.instance." + template.type + "Instance").getConstructors()[0];
+				_constructor = Class.forName("com.l2jserver.gameserver.model.actor.instance." + template.type + "Instance").getConstructors()[0];
 				int objectId = IdFactory.getInstance().getNextId();
 				_monsters[i] = (L2Npc) _constructor.newInstance(objectId, template);
 			}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/PacketHistory.java → L2_GameServer/java/com/l2jserver/gameserver/PacketHistory.java

@@ -22,7 +22,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.Date;
 import java.util.Map;

+ 27 - 26
L2_GameServer/java/net/sf/l2j/gameserver/RecipeController.java → L2_GameServer/java/com/l2jserver/gameserver/RecipeController.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.io.File;
 import java.io.IOException;
@@ -29,37 +29,38 @@ import javax.xml.parsers.ParserConfigurationException;
 
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.datatables.ItemTable;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2ManufactureItem;
-import net.sf.l2j.gameserver.model.L2RecipeInstance;
-import net.sf.l2j.gameserver.model.L2RecipeList;
-import net.sf.l2j.gameserver.model.L2RecipeStatInstance;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.ItemList;
-import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
-import net.sf.l2j.gameserver.network.serverpackets.RecipeBookItemList;
-import net.sf.l2j.gameserver.network.serverpackets.RecipeItemMakeInfo;
-import net.sf.l2j.gameserver.network.serverpackets.RecipeShopItemInfo;
-import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
-import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.skills.Stats;
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.templates.item.L2Item;
-import net.sf.l2j.gameserver.util.Util;
-import net.sf.l2j.util.Rnd;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.ItemTable;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.model.L2ManufactureItem;
+import com.l2jserver.gameserver.model.L2RecipeInstance;
+import com.l2jserver.gameserver.model.L2RecipeList;
+import com.l2jserver.gameserver.model.L2RecipeStatInstance;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.Inventory;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.network.serverpackets.ItemList;
+import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
+import com.l2jserver.gameserver.network.serverpackets.RecipeBookItemList;
+import com.l2jserver.gameserver.network.serverpackets.RecipeItemMakeInfo;
+import com.l2jserver.gameserver.network.serverpackets.RecipeShopItemInfo;
+import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
+import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.skills.Stats;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.templates.item.L2Item;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
 public class RecipeController
 {
 	protected static final Logger _log = Logger.getLogger(RecipeController.class.getName());

+ 18 - 17
L2_GameServer/java/net/sf/l2j/gameserver/SevenSigns.java → L2_GameServer/java/com/l2jserver/gameserver/SevenSigns.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -24,23 +24,24 @@ import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.datatables.MapRegionTable;
+import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.instancemanager.CastleManager;
+import com.l2jserver.gameserver.model.AutoChatHandler;
+import com.l2jserver.gameserver.model.AutoSpawnHandler;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.AutoSpawnHandler.AutoSpawnInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.Castle;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.util.Broadcast;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.datatables.MapRegionTable;
-import net.sf.l2j.gameserver.datatables.SkillTable;
-import net.sf.l2j.gameserver.instancemanager.CastleManager;
-import net.sf.l2j.gameserver.model.AutoChatHandler;
-import net.sf.l2j.gameserver.model.AutoSpawnHandler;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.AutoSpawnHandler.AutoSpawnInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.entity.Castle;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.SSQInfo;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.util.Broadcast;
 
 /**
  *  Seven Signs Engine

+ 31 - 30
L2_GameServer/java/net/sf/l2j/gameserver/SevenSignsFestival.java → L2_GameServer/java/com/l2jserver/gameserver/SevenSignsFestival.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -24,35 +24,36 @@ import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.ai.CtrlIntention;
+import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.datatables.MapRegionTable;
+import com.l2jserver.gameserver.datatables.NpcTable;
+import com.l2jserver.gameserver.datatables.SpawnTable;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.model.L2Party;
+import com.l2jserver.gameserver.model.L2Spawn;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.SpawnListener;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.base.Experience;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
+import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.ai.CtrlIntention;
-import net.sf.l2j.gameserver.datatables.ClanTable;
-import net.sf.l2j.gameserver.datatables.MapRegionTable;
-import net.sf.l2j.gameserver.datatables.NpcTable;
-import net.sf.l2j.gameserver.datatables.SpawnTable;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2Party;
-import net.sf.l2j.gameserver.model.L2Spawn;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.SpawnListener;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.model.actor.instance.L2FestivalMonsterInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.base.Experience;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.clientpackets.Say2;
-import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
-import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
-import net.sf.l2j.gameserver.util.Util;
-import net.sf.l2j.util.Rnd;
 
 /**
  *Seven Signs Festival of Darkness Engine
@@ -1162,7 +1163,7 @@ public class SevenSignsFestival implements SpawnListener
 		{
 			if (player.getClan() != null)
 			{
-				player.getClan().setReputationScore(player.getClan().getReputationScore() + Config.FESTIVAL_WIN_POINTS, true);
+				player.getClan().addReputationScore(Config.FESTIVAL_WIN_POINTS, true);
 				SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_MEMBER_C1_WAS_IN_HIGHEST_RANKED_PARTY_IN_FESTIVAL_OF_DARKNESS_AND_GAINED_S2_REPUTATION);
 				sm.addString(partyMemberName);
 				sm.addNumber(Config.FESTIVAL_WIN_POINTS);
@@ -1187,7 +1188,7 @@ public class SevenSignsFestival implements SpawnListener
 						L2Clan clan = ClanTable.getInstance().getClanByName(clanName);
 						if (clan != null)
 						{
-							clan.setReputationScore(clan.getReputationScore() + Config.FESTIVAL_WIN_POINTS, true);
+							clan.addReputationScore(Config.FESTIVAL_WIN_POINTS, true);
 							SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_MEMBER_C1_WAS_IN_HIGHEST_RANKED_PARTY_IN_FESTIVAL_OF_DARKNESS_AND_GAINED_S2_REPUTATION);
 							sm.addString(partyMemberName);
 							sm.addNumber(Config.FESTIVAL_WIN_POINTS);

+ 27 - 51
L2_GameServer/java/net/sf/l2j/gameserver/Shutdown.java → L2_GameServer/java/com/l2jserver/gameserver/Shutdown.java

@@ -12,29 +12,27 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.Collection;
-import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
-import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
-import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
-import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;
-import net.sf.l2j.gameserver.instancemanager.QuestManager;
-import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.olympiad.Olympiad;
-import net.sf.l2j.gameserver.network.L2GameClient;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.gameserverpackets.ServerStatus;
-import net.sf.l2j.gameserver.network.serverpackets.ServerClose;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.util.Broadcast;
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.instancemanager.CastleManorManager;
+import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
+import com.l2jserver.gameserver.instancemanager.GrandBossManager;
+import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
+import com.l2jserver.gameserver.instancemanager.QuestManager;
+import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.olympiad.Olympiad;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.gameserverpackets.ServerStatus;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.util.Broadcast;
+
 
 /**
  *
@@ -202,6 +200,15 @@ public class Shutdown extends Thread
 	{
 		if (this == SingletonHolder._instance)
 		{
+			try
+			{
+				disconnectAllCharacters();
+			}
+			catch (Throwable t)
+			{
+				// ignore
+			}
+			
 			// ensure all services are stopped
 			try
 			{
@@ -480,9 +487,6 @@ public class Shutdown extends Thread
 		if (Config.ACTIVATE_POSITION_RECORDER)
 			Universe.getInstance().implode(true);
 		
-		// we cannt abort shutdown anymore, so i removed the "if"
-		disconnectAllCharacters();
-		
 		// Seven Signs data is now saved along with Festival data.
 		if (!SevenSigns.getInstance().isSealValidationPeriod())
 			SevenSignsFestival.getInstance().saveFestivalData(false);
@@ -536,46 +540,18 @@ public class Shutdown extends Thread
 	 */
 	private void disconnectAllCharacters()
 	{
-		SystemMessage sysm = new SystemMessage(SystemMessageId.YOU_HAVE_BEEN_DISCONNECTED);
-		ServerClose ql = new ServerClose();
 		Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
 		//synchronized (L2World.getInstance().getAllPlayers())
 		{
 			for (L2PcInstance player : pls)
 			{
-				player.sendPacket(sysm);
 				//Logout Character
 				try
 				{
-					L2GameClient.saveCharToDisk(player);
-					player.sendPacket(ql);
-				}
-				catch (Throwable t)
-				{
-				}
-			}
-		}
-		try
-		{
-			Thread.sleep(1000);
-		}
-		catch (Throwable t)
-		{
-			_log.log(Level.INFO, "", t);
-		}
-		
-		pls = L2World.getInstance().getAllPlayers().values();
-		//synchronized (L2World.getInstance().getAllPlayers())
-		{
-			for (L2PcInstance player : pls)
-			{
-				try
-				{
-					player.closeNetConnection();
+					player.logout(false);
 				}
 				catch (Throwable t)
 				{
-					// just to make sure we try to kill the connection 
 				}
 			}
 		}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/TaskPriority.java → L2_GameServer/java/com/l2jserver/gameserver/TaskPriority.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 /**
  * @author mkizub

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/Territory.java → L2_GameServer/java/com/l2jserver/gameserver/Territory.java

@@ -22,14 +22,15 @@
 	version 0.1, 2005-03-16
 */
 
-package net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.Map;
 import java.util.logging.Logger;
 
+import com.l2jserver.gameserver.lib.SqlUtils;
+import com.l2jserver.gameserver.model.L2Territory;
+
 import javolution.util.FastMap;
-import net.sf.l2j.gameserver.lib.SqlUtils;
-import net.sf.l2j.gameserver.model.L2Territory;
 
 public class Territory
 {

+ 12 - 6
L2_GameServer/java/net/sf/l2j/gameserver/ThreadPoolManager.java → L2_GameServer/java/com/l2jserver/gameserver/ThreadPoolManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.RejectedExecutionException;
@@ -24,12 +24,13 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.network.L2GameClient;
 
-import net.sf.l2j.gameserver.util.StringUtil;
 import org.mmocore.network.ReceivablePacket;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.util.StringUtil;
+
 /**
  * <p>This class is made to handle all the ThreadPools used in L2j.</p>
  * <p>Scheduled Tasks can either be sent to a {@link #_generalScheduledThreadPool "general"} or {@link #_effectsScheduledThreadPool "effects"} {@link ScheduledThreadPoolExecutor ScheduledThreadPool}:
@@ -55,7 +56,7 @@ import org.mmocore.network.ReceivablePacket;
  * <li>{@link #_generalPacketsThreadPool GeneralPackets} where most packets handler are executed.</li>
  * <li>{@link #_ioPacketsThreadPool I/O Packets} where all the i/o packets are executed.</li>
  * <li>There will be an AI ThreadPool where AI events should be executed</li>
- * <li>A general ThreadPool where everything else that needs to run asynchronously with no delay should be executed ({@link net.sf.l2j.gameserver.model.actor.knownlist KnownList} updates, SQL updates/inserts...)?</li>
+ * <li>A general ThreadPool where everything else that needs to run asynchronously with no delay should be executed ({@link com.l2jserver.gameserver.model.actor.knownlist KnownList} updates, SQL updates/inserts...)?</li>
  * </ul>
  * </p>
  * @author -Wooden-
@@ -167,6 +168,11 @@ public class ThreadPoolManager
 		}
 	}
 	
+	public boolean removeGeneral(Runnable r)
+	{
+		return _generalScheduledThreadPool.remove(r);
+	}
+	
 	public ScheduledFuture<?> scheduleAi(Runnable r, long delay)
 	{
 		try
@@ -325,7 +331,7 @@ public class ThreadPoolManager
 			_ioPacketsThreadPool.shutdown();
 			_generalThreadPool.shutdown();
 			_aiThreadPool.shutdown();
-			_log.info("All ThreadPools are now stoped");
+			_log.info("All ThreadPools are now stopped");
 			
 		}
 		catch (InterruptedException e)

+ 13 - 10
L2_GameServer/java/net/sf/l2j/gameserver/TradeController.java → L2_GameServer/java/com/l2jserver/gameserver/TradeController.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -23,13 +23,14 @@ import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.datatables.ItemTable;
+import com.l2jserver.gameserver.model.L2TradeList;
+import com.l2jserver.gameserver.model.L2TradeList.L2TradeItem;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.datatables.ItemTable;
-import net.sf.l2j.gameserver.model.L2TradeList;
-import net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem;
 
 /**
  * This class ...
@@ -90,7 +91,8 @@ public class TradeController
 						+ L2DatabaseFactory.getInstance().safetyString("order") + " ASC");
 				statement.setString(1, String.valueOf(rset1.getInt("shop_id")));
 				ResultSet rset = statement.executeQuery();
-				L2TradeList buy1 = new L2TradeList(rset1.getInt("shop_id"));
+				int shopId = rset1.getInt("shop_id");
+				L2TradeList buy1 = new L2TradeList(shopId);
 				
 				while (rset.next())
 				{
@@ -101,7 +103,7 @@ public class TradeController
 					time = rset.getInt("time");
 					saveTimer = rset.getLong("saveTimer");
 					
-					L2TradeItem item = new L2TradeItem(itemId);
+					L2TradeItem item = new L2TradeItem(shopId, itemId);
 					if (ItemTable.getInstance().getTemplate(itemId) == null)
 					{
 						_log.warning("Skipping itemId: " + itemId + " on buylistId: " + buy1.getListId() + ", missing data for that item.");
@@ -195,7 +197,8 @@ public class TradeController
 							+ L2DatabaseFactory.getInstance().safetyString("order") + " ASC");
 					statement.setString(1, String.valueOf(rset1.getInt("shop_id")));
 					ResultSet rset = statement.executeQuery();
-					L2TradeList buy1 = new L2TradeList(rset1.getInt("shop_id"));
+					int shopId = rset1.getInt("shop_id");
+					L2TradeList buy1 = new L2TradeList(shopId);
 					
 					while (rset.next())
 					{
@@ -206,7 +209,7 @@ public class TradeController
 						time = rset.getInt("time");
 						saveTimer = rset.getLong("saveTimer");
 						
-						L2TradeItem item = new L2TradeItem(itemId);
+						L2TradeItem item = new L2TradeItem(shopId, itemId);
 						if (ItemTable.getInstance().getTemplate(itemId) == null)
 						{
 							_log.warning("Skipping itemId: " + itemId + " on buylistId: " + buy1.getListId()

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/Universe.java → L2_GameServer/java/com/l2jserver/gameserver/Universe.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver;
+package com.l2jserver.gameserver;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
@@ -38,8 +38,9 @@ import java.util.zip.GZIPInputStream;
 
 import javax.imageio.ImageIO;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2CharPosition;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2CharPosition;
+
 
 public class Universe implements java.io.Serializable
 {

+ 24 - 23
L2_GameServer/java/net/sf/l2j/gameserver/ai/AbstractAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/AbstractAI.java

@@ -12,35 +12,36 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
 import java.util.concurrent.Future;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import net.sf.l2j.gameserver.GameTimeController;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Summon;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.AutoAttackStart;
-import net.sf.l2j.gameserver.network.serverpackets.AutoAttackStop;
-import net.sf.l2j.gameserver.network.serverpackets.Die;
-import net.sf.l2j.gameserver.network.serverpackets.ExMoveToLocationInAirShip;
-import net.sf.l2j.gameserver.network.serverpackets.MoveToLocation;
-import net.sf.l2j.gameserver.network.serverpackets.MoveToLocationInVehicle;
-import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn;
-import net.sf.l2j.gameserver.network.serverpackets.StopMove;
-import net.sf.l2j.gameserver.network.serverpackets.StopRotation;
-import net.sf.l2j.gameserver.taskmanager.AttackStanceTaskManager;
+import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.network.serverpackets.AutoAttackStart;
+import com.l2jserver.gameserver.network.serverpackets.AutoAttackStop;
+import com.l2jserver.gameserver.network.serverpackets.Die;
+import com.l2jserver.gameserver.network.serverpackets.ExMoveToLocationInAirShip;
+import com.l2jserver.gameserver.network.serverpackets.MoveToLocation;
+import com.l2jserver.gameserver.network.serverpackets.MoveToLocationInVehicle;
+import com.l2jserver.gameserver.network.serverpackets.MoveToPawn;
+import com.l2jserver.gameserver.network.serverpackets.StopMove;
+import com.l2jserver.gameserver.network.serverpackets.StopRotation;
+import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
+
 
 /**
  * Mother class of all objects AI in the world.<BR><BR>

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai/Ctrl.java → L2_GameServer/java/com/l2jserver/gameserver/ai/Ctrl.java

@@ -12,9 +12,9 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import net.sf.l2j.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Character;
 
 /**
  * Interface of AI and client state.

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/ai/CtrlEvent.java → L2_GameServer/java/com/l2jserver/gameserver/ai/CtrlEvent.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
 /**
  * This class contains an enum of each possibles evenements that can happen on an AI character.

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/ai/CtrlIntention.java → L2_GameServer/java/com/l2jserver/gameserver/ai/CtrlIntention.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
 /** Enumaration of generic intentions of an NPC/PC, an intention may require
  * several steps to be completed */

+ 2534 - 0
L2_GameServer/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -0,0 +1,2534 @@
+/*
+ * 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 com.l2jserver.gameserver.ai;
+
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+
+import java.util.Collection;
+import java.util.concurrent.Future;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.GeoData;
+import com.l2jserver.gameserver.Territory;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.NpcTable;
+import com.l2jserver.gameserver.instancemanager.DimensionalRiftManager;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2FriendlyMobInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2GuardInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2MinionInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2RaidBossInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2RiftInvaderInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
+import com.l2jserver.gameserver.templates.skills.L2EffectType;
+import com.l2jserver.gameserver.templates.skills.L2SkillType;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+/**
+ * This class manages AI of L2Attackable.<BR><BR>
+ *
+ */
+public class L2AttackableAI extends L2CharacterAI implements Runnable
+{
+
+	//protected static final Logger _log = Logger.getLogger(L2AttackableAI.class.getName());
+
+	private static final int RANDOM_WALK_RATE = 30; // confirmed
+	// private static final int MAX_DRIFT_RANGE = 300;
+	private static final int MAX_ATTACK_TIMEOUT = 300; // int ticks, i.e. 30 seconds
+
+	/** The L2Attackable AI task executed every 1s (call onEvtThink method)*/
+	private Future<?> _aiTask;
+
+	/** The delay after which the attacked is stopped */
+	private int _attackTimeout;
+
+	/** The L2Attackable aggro counter */
+	private int _globalAggro;
+
+	/** The flag used to indicate that a thinking action is in progress */
+	private boolean _thinking; // to prevent recursive thinking
+	
+	private String clan;
+	private String enemyClan;
+
+	private int timepass = 0;
+	private int chaostime = 0;
+	private L2NpcTemplate _skillrender;
+	int lastBuffTick;
+	/**
+	 * Constructor of L2AttackableAI.<BR><BR>
+	 *
+	 * @param accessor The AI accessor of the L2Character
+	 *
+	 */
+	public L2AttackableAI(L2Character.AIAccessor accessor)
+	{
+		super(accessor);
+		_skillrender = NpcTable.getInstance().getTemplate(((L2Npc)_actor).getTemplate().npcId);
+		//_selfAnalysis.init();
+		_attackTimeout = Integer.MAX_VALUE;
+		_globalAggro = -10; // 10 seconds timeout of ATTACK after respawn
+		if (((L2Attackable)_actor).getEnemyClan() != "none")
+			setEnemyClan(((L2Attackable)_actor).getEnemyClan());
+	}
+
+	public void run()
+	{
+		// Launch actions corresponding to the Event Think
+		onEvtThink();
+
+	}
+
+/**
+	 * Return True if the target is autoattackable (depends on the actor type).<BR><BR>
+	 *
+	 * <B><U> Actor is a L2GuardInstance</U> :</B><BR><BR>
+	 * <li>The target isn't a Folk or a Door</li>
+	 * <li>The target isn't dead, isn't invulnerable, isn't in silent moving mode AND too far (>100)</li>
+	 * <li>The target is in the actor Aggro range and is at the same height</li>
+	 * <li>The L2PcInstance target has karma (=PK)</li>
+	 * <li>The L2MonsterInstance target is aggressive</li><BR><BR>
+	 *
+	 * <B><U> Actor is a L2SiegeGuardInstance</U> :</B><BR><BR>
+	 * <li>The target isn't a Folk or a Door</li>
+	 * <li>The target isn't dead, isn't invulnerable, isn't in silent moving mode AND too far (>100)</li>
+	 * <li>The target is in the actor Aggro range and is at the same height</li>
+	 * <li>A siege is in progress</li>
+	 * <li>The L2PcInstance target isn't a Defender</li><BR><BR>
+	 *
+	 * <B><U> Actor is a L2FriendlyMobInstance</U> :</B><BR><BR>
+	 * <li>The target isn't a Folk, a Door or another L2Npc</li>
+	 * <li>The target isn't dead, isn't invulnerable, isn't in silent moving mode AND too far (>100)</li>
+	 * <li>The target is in the actor Aggro range and is at the same height</li>
+	 * <li>The L2PcInstance target has karma (=PK)</li><BR><BR>
+	 *
+	 * <B><U> Actor is a L2MonsterInstance</U> :</B><BR><BR>
+	 * <li>The target isn't a Folk, a Door or another L2Npc</li>
+	 * <li>The target isn't dead, isn't invulnerable, isn't in silent moving mode AND too far (>100)</li>
+	 * <li>The target is in the actor Aggro range and is at the same height</li>
+	 * <li>The actor is Aggressive</li><BR><BR>
+	 *
+	 * @param target The targeted L2Object
+	 *
+	 */
+	private boolean autoAttackCondition(L2Character target)
+	{
+		if (target == null) 
+			return false;
+			
+		L2Attackable me = (L2Attackable) _actor;
+
+		if(target instanceof L2Attackable)
+		{
+			setClan(((L2Attackable)target).getClan());
+		}
+
+			
+		// Check if the target isn't invulnerable
+		if (target.isInvul())
+		{
+			// However EffectInvincible requires to check GMs specially
+			if (target instanceof L2PcInstance && ((L2PcInstance)target).isGM())
+				return false;
+			if (target instanceof L2Summon && ((L2Summon)target).getOwner().isGM())
+				return false;
+		}
+
+		// Check if the target isn't a Folk or a Door
+		if (target instanceof L2DoorInstance) return false;
+
+		// Check if the target isn't dead, is in the Aggro range and is at the same height
+		if (target.isAlikeDead() || (target instanceof L2PcInstance && !me.isInsideRadius(target, me.getAggroRange(), false, false)) 
+				||Math.abs(_actor.getZ() - target.getZ()) > 300 || (target instanceof L2Summon && !me.isInsideRadius(target, me.getAggroRange(), false, false))) return false;
+
+		// Check if the target is a L2PlayableInstance
+		if (target instanceof L2Playable)
+		{
+			// Check if the AI isn't a Raid Boss, can See Silent Moving players and the target isn't in silent move mode
+			if (!(me.isRaid()) && !(me.canSeeThroughSilentMove()) && ((L2Playable)target).isSilentMoving())
+				return false;
+		}
+		
+		// Check if the target is a L2PcInstance
+		if (target instanceof L2PcInstance)
+		{
+			// Don't take the aggro if the GM has the access level below or equal to GM_DONT_TAKE_AGGRO
+			if (((L2PcInstance)target).isGM() && !((L2PcInstance)target).getAccessLevel().canTakeAggro())
+				return false;
+
+			// TODO: Ideally, autoattack condition should be called from the AI script.  In that case,
+			// it should only implement the basic behaviors while the script will add more specific
+			// behaviors (like varka/ketra alliance, etc).  Once implemented, remove specialized stuff
+			// from this location.  (Fulminus)
+			
+			// Check if player is an ally (comparing mem addr)
+			if ("varka".equals(me.getFactionId()) && ((L2PcInstance) target).isAlliedWithVarka())
+				return false;
+			if ("ketra".equals(me.getFactionId()) && ((L2PcInstance) target).isAlliedWithKetra())
+				return false;
+			// check if the target is within the grace period for JUST getting up from fake death
+			if (((L2PcInstance) target).isRecentFakeDeath())
+				return false;
+			
+
+			if (target.isInParty() && target.getParty().isInDimensionalRift())
+			{
+				byte riftType = target.getParty().getDimensionalRift().getType();
+				byte riftRoom = target.getParty().getDimensionalRift().getCurrentRoom();
+				
+				if (me instanceof L2RiftInvaderInstance && !DimensionalRiftManager.getInstance().getRoom(riftType, riftRoom).checkIfInZone(me.getX(), me.getY(), me.getZ()))
+					return false;
+			}
+			
+			//if (_selfAnalysis.cannotMoveOnLand && !target.isInsideZone(L2Character.ZONE_WATER))
+			//	return false;
+		}
+
+		// Check if the target is a L2Summon
+		if (target instanceof L2Summon)
+		{
+			L2PcInstance owner = ((L2Summon)target).getOwner();
+			if (owner != null)
+			{
+				// Don't take the aggro if the GM has the access level below or equal to GM_DONT_TAKE_AGGRO
+				if (owner.isGM() && (owner.isInvul() || !owner.getAccessLevel().canTakeAggro()))
+					return false;
+				// Check if player is an ally (comparing mem addr)
+				if ("varka".equals(me.getFactionId()) && owner.isAlliedWithVarka())
+					return false;
+				if ("ketra".equals(me.getFactionId()) && owner.isAlliedWithKetra())
+					return false;
+			}
+		}
+		// Check if the actor is a L2GuardInstance
+		if (_actor instanceof L2GuardInstance)
+		{
+
+			// Check if the L2PcInstance target has karma (=PK)
+			if (target instanceof L2PcInstance && ((L2PcInstance) target).getKarma() > 0)
+				// Los Check
+				return GeoData.getInstance().canSeeTarget(me, target);
+
+			//if (target instanceof L2Summon)
+			//	return ((L2Summon)target).getKarma() > 0;
+
+			// Check if the L2MonsterInstance target is aggressive
+			if (target instanceof L2MonsterInstance && Config.GUARD_ATTACK_AGGRO_MOB)
+				return (((L2MonsterInstance) target).isAggressive() && GeoData.getInstance().canSeeTarget(me, target));
+
+			return false;
+		}
+		else if (_actor instanceof L2FriendlyMobInstance)
+		{ // the actor is a L2FriendlyMobInstance
+
+			// Check if the target isn't another L2Npc
+			if (target instanceof L2Npc)
+				return false;
+
+			// Check if the L2PcInstance target has karma (=PK)
+			if (target instanceof L2PcInstance && ((L2PcInstance) target).getKarma() > 0)
+				return GeoData.getInstance().canSeeTarget(me, target); // Los Check
+			else
+				return false;
+		}
+		else
+		{
+			if(target instanceof L2Attackable)
+			{
+				if ("none".equals(((L2Attackable)_actor).getEnemyClan()) || "none".equals(((L2Attackable)target).getClan()))
+					return false;
+				
+				if (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)target).getClan()))
+				{
+					if (_actor.isInsideRadius(target, ((L2Attackable)_actor).getEnemyRange(), false, false))
+					{
+						return GeoData.getInstance().canSeeTarget(_actor, target);
+					}
+					else return false;
+				}
+				if (((L2Attackable)_actor).getIsChaos() > 0 && me.isInsideRadius(target, ((L2Attackable)_actor).getIsChaos(), false, false) )
+				{
+					if (((L2Attackable)_actor).getFactionId() != null && ((L2Attackable)_actor).getFactionId().equals(((L2Attackable) target).getFactionId()))
+					{
+						return false;
+					}
+					// Los Check
+					return GeoData.getInstance().canSeeTarget(me, target);
+				}
+			}
+			
+			if (target instanceof L2Attackable || target instanceof L2Npc)
+				return false;
+
+			// depending on config, do not allow mobs to attack _new_ players in peacezones,
+			// unless they are already following those players from outside the peacezone.
+			if (!Config.ALT_MOB_AGRO_IN_PEACEZONE && target.isInsideZone(L2Character.ZONE_PEACE))
+				return false;
+			
+			if (me.isChampion() && Config.L2JMOD_CHAMPION_PASSIVE)
+				return false;
+
+			// Check if the actor is Aggressive
+			return (me.isAggressive() && GeoData.getInstance().canSeeTarget(me, target));
+		}
+	}
+	public void startAITask()
+	{
+		// If not idle - create an AI task (schedule onEvtThink repeatedly)
+		if (_aiTask == null)
+		{
+			_aiTask = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(this, 1000, 1000);
+		}
+	}
+
+	public void stopAITask()
+	{
+		if (_aiTask != null)
+		{
+			_aiTask.cancel(false);
+			_aiTask = null;
+		}
+	}
+
+	@Override
+
+	protected void onEvtDead()
+	{
+		stopAITask();
+		super.onEvtDead();
+	}
+
+	/**
+	 * Set the Intention of this L2CharacterAI and create an  AI Task executed every 1s (call onEvtThink method) for this L2Attackable.<BR><BR>
+	 *
+	 * <FONT COLOR=#FF0000><B> <U>Caution</U> : If actor _knowPlayer isn't EMPTY, AI_INTENTION_IDLE will be change in AI_INTENTION_ACTIVE</B></FONT><BR><BR>
+	 *
+	 * @param intention The new Intention to set to the AI
+	 * @param arg0 The first parameter of the Intention
+	 * @param arg1 The second parameter of the Intention
+	 *
+	 */
+	@Override
+	synchronized void changeIntention(CtrlIntention intention, Object arg0, Object arg1)
+	{
+		if (intention == AI_INTENTION_IDLE || intention == AI_INTENTION_ACTIVE)
+		{
+			// Check if actor is not dead
+			if (!_actor.isAlikeDead())
+			{
+				L2Attackable npc = (L2Attackable) _actor;
+				
+				// If its _knownPlayer isn't empty set the Intention to AI_INTENTION_ACTIVE
+				if (!npc.getKnownList().getKnownPlayers().isEmpty())
+					intention = AI_INTENTION_ACTIVE;
+				else
+				{
+					if (npc.getSpawn() != null)
+					{
+						final int range = Config.MAX_DRIFT_RANGE;
+						if (!npc.isInsideRadius(npc.getSpawn().getLocx(), npc.getSpawn().getLocy(), npc.getSpawn().getLocz(), range + range, true, false))
+							intention = AI_INTENTION_ACTIVE;
+					}
+				}
+			}
+			
+			if (intention == AI_INTENTION_IDLE)
+			{
+				// Set the Intention of this L2AttackableAI to AI_INTENTION_IDLE
+				super.changeIntention(AI_INTENTION_IDLE, null, null);
+				
+				// Stop AI task and detach AI from NPC
+				if (_aiTask != null)
+				{
+					_aiTask.cancel(true);
+					_aiTask = null;
+				}
+				
+				// Cancel the AI
+				_accessor.detachAI();
+				
+				return;
+			}
+		}
+		
+		// Set the Intention of this L2AttackableAI to intention
+		super.changeIntention(intention, arg0, arg1);
+		
+		// If not idle - create an AI task (schedule onEvtThink repeatedly)
+		startAITask();
+	}
+	
+	/**
+	 * Manage the Attack Intention : Stop current Attack (if necessary), Calculate attack timeout, Start a new Attack and Launch Think Event.<BR><BR>
+	 *
+	 * @param target The L2Character to attack
+	 *
+	 */
+	@Override
+	protected void onIntentionAttack(L2Character target)
+	{
+		// Calculate the attack timeout
+		_attackTimeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks();
+
+		// self and buffs
+		
+		if (lastBuffTick+30 < GameTimeController.getGameTicks())
+		{
+			if(_skillrender.hasBuffSkill())
+				for (L2Skill sk : _skillrender._buffskills)
+					if (Cast(sk))
+						break;
+			
+			lastBuffTick = GameTimeController.getGameTicks();
+		}
+		
+		// Manage the Attack Intention : Stop current Attack (if necessary), Start a new Attack and Launch Think Event
+		super.onIntentionAttack(target);
+	}
+
+	/**
+	 * Manage AI standard thinks of a L2Attackable (called by onEvtThink).<BR><BR>
+	 *
+	 * <B><U> Actions</U> :</B><BR><BR>
+	 * <li>Update every 1s the _globalAggro counter to come close to 0</li>
+	 * <li>If the actor is Aggressive and can attack, add all autoAttackable L2Character in its Aggro Range to its _aggroList, chose a target and order to attack it</li>
+	 * <li>If the actor is a L2GuardInstance that can't attack, order to it to return to its home location</li>
+	 * <li>If the actor is a L2MonsterInstance that can't attack, order to it to random walk (1/100)</li><BR><BR>
+	 *
+	 */
+	private void thinkActive()
+	{
+		L2Attackable npc = (L2Attackable) _actor;
+		
+		// Update every 1s the _globalAggro counter to come close to 0
+		if (_globalAggro != 0)
+		{
+			if (_globalAggro < 0)
+				_globalAggro++;
+			else
+				_globalAggro--;
+		}
+		
+		// Add all autoAttackable L2Character in L2Attackable Aggro Range to its _aggroList with 0 damage and 1 hate
+		// A L2Attackable isn't aggressive during 10s after its spawn because _globalAggro is set to -10
+		if (_globalAggro >= 0)
+		{
+			// Get all visible objects inside its Aggro Range
+			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
+			//synchronized (npc.getKnownList().getKnownObjects())
+			{
+				for (L2Object obj : objs)
+				{
+					if (!(obj instanceof L2Character))
+						continue;
+					L2Character target = (L2Character) obj;
+					
+					/*
+					 * Check to see if this is a festival mob spawn.
+					 * If it is, then check to see if the aggro trigger
+					 * is a festival participant...if so, move to attack it.
+					 */
+					if ((_actor instanceof L2FestivalMonsterInstance) && obj instanceof L2PcInstance)
+					{
+						L2PcInstance targetPlayer = (L2PcInstance) obj;
+						
+						if (!(targetPlayer.isFestivalParticipant()))
+							continue;
+					}
+					
+					// TODO: The AI Script ought to handle aggro behaviors in onSee.  Once implemented, aggro behaviors ought
+					// to be removed from here.  (Fulminus)
+					// For each L2Character check if the target is autoattackable
+					if (autoAttackCondition(target)) // check aggression
+					{
+						// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
+						int hating = npc.getHating(target);
+						
+						// Add the attacker to the L2Attackable _aggroList with 0 damage and 1 hate
+						if (hating == 0)
+							npc.addDamageHate(target, 0, 0);
+					}
+				}
+			}
+			
+			// Chose a target from its aggroList
+			L2Character hated;
+			if (_actor.isConfused())
+				hated = getAttackTarget(); // effect handles selection
+			else
+				hated = npc.getMostHated();
+			
+			// Order to the L2Attackable to attack the target
+			if (hated != null)
+			{
+				// Get the hate level of the L2Attackable against this L2Character target contained in _aggroList
+				int aggro = npc.getHating(hated);
+				
+				if (aggro + _globalAggro > 0)
+				{
+					// Set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance
+					if (!_actor.isRunning())
+						_actor.setRunning();
+
+					// Set the AI Intention to AI_INTENTION_ATTACK
+					setIntention(CtrlIntention.AI_INTENTION_ATTACK, hated);
+				}
+				
+				return;
+			}
+			
+		}
+		
+		// Check if the actor is a L2GuardInstance
+		if (_actor instanceof L2GuardInstance)
+		{
+			// Order to the L2GuardInstance to return to its home location because there's no target to attack
+			((L2GuardInstance) _actor).returnHome();
+		}
+		
+		// If this is a festival monster, then it remains in the same location.
+		if (_actor instanceof L2FestivalMonsterInstance)
+			return;
+		
+		// Check if the mob should not return to spawn point
+		if (!npc.canReturnToSpawnPoint())
+			return;
+		
+		// Minions following leader
+		if (_actor instanceof L2MinionInstance && ((L2MinionInstance) _actor).getLeader() != null)
+		{
+			int offset;
+			
+			if (_actor.isRaidMinion())
+				offset = 500; // for Raids - need correction
+			else
+				offset = 200; // for normal minions - need correction :)
+				
+			if (((L2MinionInstance) _actor).getLeader().isRunning())
+				_actor.setRunning();
+			else
+				_actor.setWalking();
+			
+			if (_actor.getPlanDistanceSq(((L2MinionInstance) _actor).getLeader()) > offset * offset)
+			{
+				int x1, y1, z1;
+				x1 = ((L2MinionInstance) _actor).getLeader().getX() + Rnd.nextInt((offset - 30) * 2) - (offset - 30);
+				y1 = ((L2MinionInstance) _actor).getLeader().getY() + Rnd.nextInt((offset - 30) * 2) - (offset - 30);
+				z1 = ((L2MinionInstance) _actor).getLeader().getZ();
+				// Move the actor to Location (x,y,z) server side AND client side by sending Server->Client packet CharMoveToLocation (broadcast)
+				moveTo(x1, y1, z1);
+				return;
+			}
+			else if (Rnd.nextInt(RANDOM_WALK_RATE) == 0)
+			{
+				if(_skillrender.hasBuffSkill())
+					for (L2Skill sk : _skillrender._buffskills)
+						if (Cast(sk))
+							return;
+			}
+		}
+		// Order to the L2MonsterInstance to random walk (1/100)
+		else if (npc.getSpawn() != null && Rnd.nextInt(RANDOM_WALK_RATE) == 0 
+				&& !_actor.isNoRndWalk())
+		{
+			int x1, y1, z1;
+			final int range = Config.MAX_DRIFT_RANGE;
+			
+			if(_skillrender.hasBuffSkill())
+				for (L2Skill sk : _skillrender._buffskills)
+					if (Cast(sk))
+						return;
+			
+			// If NPC with random coord in territory
+			if (npc.getSpawn().getLocx() == 0 && npc.getSpawn().getLocy() == 0)
+			{
+				// Calculate a destination point in the spawn area
+				int p[] = Territory.getInstance().getRandomPoint(npc.getSpawn().getLocation());
+				x1 = p[0];
+				y1 = p[1];
+				z1 = p[2];
+				
+				// Calculate the distance between the current position of the L2Character and the target (x,y)
+				double distance2 = _actor.getPlanDistanceSq(x1, y1);
+				
+				if (distance2 > (range + range) * (range + range))
+				{
+					npc.setisReturningToSpawnPoint(true);
+					float delay = (float) Math.sqrt(distance2) / range;
+					x1 = _actor.getX() + (int) ((x1 - _actor.getX()) / delay);
+					y1 = _actor.getY() + (int) ((y1 - _actor.getY()) / delay);
+				}
+				
+				// If NPC with random fixed coord, don't move (unless needs to return to spawnpoint)
+				if (Territory.getInstance().getProcMax(npc.getSpawn().getLocation()) > 0 && !npc.isReturningToSpawnPoint())
+					return;
+			}
+			else
+			{
+				// If NPC with fixed coord
+				x1 = npc.getSpawn().getLocx();
+				y1 = npc.getSpawn().getLocy();
+				z1 = npc.getSpawn().getLocz();
+
+				if (!_actor.isInsideRadius(x1, y1, z1, range + range, true, false))
+					npc.setisReturningToSpawnPoint(true);
+				else
+				{
+					x1 += Rnd.nextInt(range * 2) - range;
+					y1 += Rnd.nextInt(range * 2) - range;
+					z1 = npc.getZ();
+				}
+			}
+			
+			//_log.config("Curent pos ("+getX()+", "+getY()+"), moving to ("+x1+", "+y1+").");
+			// Move the actor to Location (x,y,z) server side AND client side by sending Server->Client packet CharMoveToLocation (broadcast)
+			moveTo(x1, y1, z1);
+		}
+	}
+
+	/**
+	 * Manage AI attack thinks of a L2Attackable (called by onEvtThink).<BR><BR>
+	 *
+	 * <B><U> Actions</U> :</B><BR><BR>
+	 * <li>Update the attack timeout if actor is running</li>
+	 * <li>If target is dead or timeout is expired, stop this attack and set the Intention to AI_INTENTION_ACTIVE</li>
+	 * <li>Call all L2Object of its Faction inside the Faction Range</li>
+	 * <li>Chose a target and order to attack it with magic skill or physical attack</li><BR><BR>
+	 *
+	 * TODO: Manage casting rules to healer mobs (like Ant Nurses)
+	 *
+	 */
+	private void thinkAttack()
+	{
+		if (_attackTimeout < GameTimeController.getGameTicks())
+		{
+			// Check if the actor is running
+			if (_actor.isRunning())
+			{
+				// Set the actor movement type to walk and send Server->Client packet ChangeMoveType to all others L2PcInstance
+				_actor.setWalking();
+
+				// Calculate a new attack timeout
+				_attackTimeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks();
+			}
+		}
+		
+		if (_actor.isCastingNow())
+			return;
+
+		L2Character originalAttackTarget = getAttackTarget();
+		// Check if target is dead or if timeout is expired to stop this attack
+		if (originalAttackTarget == null || originalAttackTarget.isAlikeDead()
+			|| _attackTimeout < GameTimeController.getGameTicks())
+		{
+			// Stop hating this target after the attack timeout or if target is dead
+			if (originalAttackTarget != null)
+				((L2Attackable) _actor).stopHating(originalAttackTarget);
+
+			// Set the AI Intention to AI_INTENTION_ACTIVE
+			setIntention(AI_INTENTION_ACTIVE);
+
+			_actor.setWalking();
+			return;
+		}
+
+		// Handle all L2Object of its Faction inside the Faction Range
+
+		if (((L2Npc) _actor).getFactionId() != null)
+		{
+			String faction_id = ((L2Npc) _actor).getFactionId();
+			
+			// Go through all L2Object that belong to its faction
+			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
+			//synchronized (_actor.getKnownList().getKnownObjects())
+			{
+				for (L2Object obj : objs)
+				{
+					if (obj instanceof L2Npc)
+					{
+						L2Npc npc = (L2Npc) obj;
+						
+						//Handle SevenSigns mob Factions
+						String npcfaction = npc.getFactionId();
+						boolean sevenSignFaction = false;
+						
+						// TODO: Unhardcode this by AI scripts (DrHouse)
+						//Catacomb mobs should assist lilim and nephilim other than dungeon
+						if ("c_dungeon_clan".equals(faction_id) &&
+							("c_dungeon_lilim".equals(npcfaction) || "c_dungeon_nephi".equals(npcfaction)))
+							sevenSignFaction = true;
+						//Lilim mobs should assist other Lilim and catacomb mobs
+						else if ("c_dungeon_lilim".equals(faction_id) &&
+							"c_dungeon_clan".equals(npcfaction))
+							sevenSignFaction = true;
+						//Nephilim mobs should assist other Nephilim and catacomb mobs
+						else if ("c_dungeon_nephi".equals(faction_id) &&
+							"c_dungeon_clan".equals(npcfaction))
+							sevenSignFaction = true;
+						
+						if (!faction_id.equals(npc.getFactionId()) && !sevenSignFaction)
+							continue;
+							
+						// Check if the L2Object is inside the Faction Range of
+						// the actor
+						if (_actor.isInsideRadius(npc, npc.getFactionRange() + npc.getTemplate().collisionRadius, true, false) && npc.getAI() != null)
+						{
+							if (Math.abs(originalAttackTarget.getZ() - npc.getZ()) < 600 && _actor.getAttackByList().contains(originalAttackTarget)
+									&& (npc.getAI()._intention == CtrlIntention.AI_INTENTION_IDLE || npc.getAI()._intention == CtrlIntention.AI_INTENTION_ACTIVE) && GeoData.getInstance().canSeeTarget(_actor, npc))
+							{
+								if ((originalAttackTarget instanceof L2PcInstance) || (originalAttackTarget instanceof L2Summon))
+								{
+									if (npc.getTemplate().getEventQuests(Quest.QuestEventType.ON_FACTION_CALL) != null)
+									{
+										L2PcInstance player = (originalAttackTarget instanceof L2PcInstance) ? (L2PcInstance) originalAttackTarget : ((L2Summon) originalAttackTarget).getOwner();
+										for (Quest quest : npc.getTemplate().getEventQuests(Quest.QuestEventType.ON_FACTION_CALL))
+											quest.notifyFactionCall(npc, (L2Npc) _actor, player, (originalAttackTarget instanceof L2Summon));
+									}
+								}
+								else if (npc instanceof L2Attackable && getAttackTarget() != null && npc.getAI()._intention != CtrlIntention.AI_INTENTION_ATTACK)
+								{
+									((L2Attackable)npc).addDamageHate(getAttackTarget(), 0, ((L2Attackable)_actor).getHating(getAttackTarget()));
+									npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK,getAttackTarget());
+								}
+								
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		//Return when Attack been disable
+		if(_actor.isAttackingDisabled())
+			return;
+
+		/*
+		if(_actor.getTarget() == null || this.getAttackTarget() == null || this.getAttackTarget().isDead() || ctarget == _actor)
+			AggroReconsider();
+		*/
+
+		//----------------------------------------------------------------
+		
+		//------------------------------------------------------------------------------
+		//Initialize data
+		double dist = 0;
+		int dist2 = 0;
+		int range = 0;
+		L2Character MostHate = ((L2Attackable) _actor).getMostHated();
+		//L2Character ctarget = (L2Character)_actor.getTarget();
+		try
+		{
+			setAttackTarget(MostHate);
+			_actor.setTarget(MostHate);
+			dist = Math.sqrt(_actor.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY()));
+			dist2= (int)dist;
+			range = _actor.getPhysicalAttackRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+			if(getAttackTarget().isMoving())
+			{
+				range = range + 50;
+				if(_actor.isMoving())
+					range = range + 50;
+			}
+		}
+		catch (NullPointerException e)
+		{
+			setIntention(AI_INTENTION_ACTIVE);
+			return;
+		}
+		//------------------------------------------------------
+		// In case many mobs are trying to hit from same place, move a bit,
+		// circling around the target
+		if (!_actor.isRooted() && Rnd.nextInt(100) <= 33) // check it once per 3 seconds
+		{
+			int combinedCollision = _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+			int collision = _actor.getTemplate().collisionRadius;
+			for (L2Object nearby : _actor.getKnownList().getKnownCharactersInRadius(collision))
+			{
+				if (nearby instanceof L2Attackable && nearby != getAttackTarget())
+				{
+					int diffx = Rnd.get(combinedCollision, combinedCollision+40);
+					if (Rnd.get(10)<5) diffx = -diffx;
+					int diffy = Rnd.get(combinedCollision, combinedCollision+40);
+					if (Rnd.get(10)<5) diffy = -diffy;
+					moveTo(getAttackTarget().getX() + diffx, getAttackTarget().getY() + diffy, getAttackTarget().getZ());
+					return;
+				}
+			}
+		}
+		//Dodge if its needed
+		if(!_actor.isRooted() && ((L2Attackable)_actor).getCanDodge()>0)
+		if (Rnd.get(100) <= ((L2Attackable)_actor).getCanDodge())
+		{
+			// Micht: kepping this one otherwise we should do 2 sqrt
+			double distance2 = _actor.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY());
+			if (Math.sqrt(distance2) <= (60+_actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius))
+			{
+				//Diasable the RND for increasing the performance
+				//int chance = 60;
+				//if (chance >= Rnd.get(100))
+				//{
+					int posX = _actor.getX();
+					int posY = _actor.getY();
+					int posZ = _actor.getZ();
+					/*
+					if (Rnd.get(1)>0)
+					posX=((L2Attackable)_actor).getSpawn().getLocx()+Rnd.get(100);
+					else
+					posX=((L2Attackable)_actor).getSpawn().getLocx()-Rnd.get(100);
+
+					if (Rnd.get(1)>0)
+					posY=((L2Attackable)_actor).getSpawn().getLocy() + Rnd.get(100);
+					else
+					posY=((L2Attackable)_actor).getSpawn().getLocy()-Rnd.get(100);
+
+					setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(posX, posY, posZ, 0));
+					*/
+					if (Rnd.get(1)>0)
+						posX=posX+Rnd.get(100);
+					else
+						posX=posX-Rnd.get(100);
+
+					if (Rnd.get(1)>0)
+						posY=posY + Rnd.get(100);
+					else
+						posY=posY - Rnd.get(100);
+					
+					setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(posX, posY, posZ, 0));
+					return;
+				//}
+			}
+		}
+
+		//------------------------------------------------------------------------------
+		// BOSS/Raid Minion Target Reconsider
+		if (_actor.isRaid() || _actor.isRaidMinion())
+		{
+			chaostime++;
+			if (_actor instanceof L2RaidBossInstance && !((L2MonsterInstance)_actor).hasMinions())
+			{
+				if (chaostime > Config.RAID_CHAOS_TIME)
+					if (Rnd.get(100) <= 100-(_actor.getCurrentHp()*100/_actor.getMaxHp()))
+					{
+						AggroReconsider();
+						chaostime = 0;
+					}
+			}
+			else if (_actor instanceof L2RaidBossInstance && ((L2MonsterInstance)_actor).hasMinions())
+			{
+				if (chaostime > Config.RAID_CHAOS_TIME)
+					if (Rnd.get(100) <= 100-(_actor.getCurrentHp()*200/_actor.getMaxHp()))
+					{
+						AggroReconsider();
+						chaostime = 0;
+					}
+			}
+			else if(_actor instanceof L2GrandBossInstance)
+			{
+				if(chaostime > Config.GRAND_CHAOS_TIME)
+					if(Rnd.get(100) <= 100-(_actor.getCurrentHp()*300/_actor.getMaxHp()))
+					{
+						AggroReconsider();
+						chaostime = 0;
+					}
+			}
+			else
+			{
+				if(chaostime > Config.MINION_CHAOS_TIME)
+					if(Rnd.get(100)<= 100-(_actor.getCurrentHp()*200/_actor.getMaxHp()))
+					{
+						AggroReconsider();
+						chaostime = 0; 
+					}
+			}
+		}
+
+		if(_skillrender.hasSkill())
+		{
+		//-------------------------------------------------------------------------------
+		//Heal Condition
+		if(_skillrender.hasHealSkill() && _skillrender._healskills !=null)
+		{
+			double percentage = _actor.getCurrentHp()/_actor.getMaxHp()*100;
+			if(_actor instanceof L2MinionInstance)
+			{
+				L2Character leader = ((L2MinionInstance)_actor).getLeader();
+				if(leader != null && !leader.isDead() && Rnd.get(100) > (leader.getCurrentHp() / leader.getMaxHp() * 100))
+					for(L2Skill sk:_skillrender._healskills)
+					{
+						if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_SELF)
+							continue;
+						if((sk.getMpConsume()>=_actor.getCurrentMp()
+								|| _actor.isSkillDisabled(sk.getId())
+								||(sk.isMagic()&&_actor.isMuted())
+								||(!sk.isMagic()&&_actor.isPhysicalMuted())))
+						{
+							continue;
+						}
+						if(!Util.checkIfInRange((sk.getCastRange()+_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius),_actor,leader,false) 
+								&& !isParty(sk) && !_actor.isMovementDisabled())
+						{
+							moveToPawn(leader,sk.getCastRange() +_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius);
+						}
+						if(GeoData.getInstance().canSeeTarget(_actor,leader))
+						{
+							clientStopMoving(null);
+							_actor.setTarget(leader);
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return;
+						}
+					}
+			}	
+			if(Rnd.get(100) < (100-percentage)/3)
+				for(L2Skill sk:_skillrender._healskills)
+				{
+					if((sk.getMpConsume() >= _actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.isMagic() && _actor.isMuted()))
+							||(!sk.isMagic() && _actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+						clientStopMoving(null);
+						_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						return;
+				}
+			for(L2Skill sk:_skillrender._healskills)
+			{
+				if((sk.getMpConsume() >= _actor.getCurrentMp()
+						|| _actor.isSkillDisabled(sk.getId())
+						||(sk.isMagic() && _actor.isMuted()))
+						||(!sk.isMagic() && _actor.isPhysicalMuted()))
+				{
+					continue;
+				}
+				if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_ONE)
+				for(L2Character obj: _actor.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + _actor.getTemplate().collisionRadius))
+				{
+					if(!(obj instanceof L2Attackable) || obj.isDead())
+						continue;
+
+					L2Attackable targets = ((L2Attackable)obj);
+					if(((L2Attackable)_actor).getFactionId() != targets.getFactionId() && ((L2Attackable)_actor).getFactionId()!=null)
+						continue;
+					percentage = targets.getCurrentHp()/targets.getMaxHp()*100;
+					if(Rnd.get(100)< (100-percentage)/10)
+					{
+						if(GeoData.getInstance().canSeeTarget(_actor,targets))
+						{
+							clientStopMoving(null);
+							_actor.setTarget(obj);
+							_actor.doCast(sk);
+							return;
+						}
+					}
+				}
+				if(isParty(sk))
+				{
+					clientStopMoving(null);
+					_actor.doCast(sk);
+					return;
+				}
+			}
+		}
+		//-------------------------------------------------------------------------------
+		//Res Skill Condition
+		if(_skillrender.hasResSkill())
+		{
+			if(_actor instanceof L2MinionInstance)
+			{
+				L2Character leader = ((L2MinionInstance)_actor).getLeader();
+				if(leader != null && leader.isDead())
+					for(L2Skill sk:_skillrender._resskills)
+					{
+						if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_SELF)
+							continue;
+						if((sk.getMpConsume() >= _actor.getCurrentMp()
+								|| _actor.isSkillDisabled(sk.getId())
+								||(sk.isMagic() && _actor.isMuted())
+								||(!sk.isMagic() && _actor.isPhysicalMuted())))
+						{
+							continue;
+						}
+						if(!Util.checkIfInRange((sk.getCastRange()+_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius),_actor,leader,false) 
+								&& !isParty(sk) && !_actor.isRooted())
+						{
+							moveToPawn(leader,sk.getCastRange()
+									+_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius);
+						}
+						if(GeoData.getInstance().canSeeTarget(_actor,leader))
+						{
+							clientStopMoving(null);
+							_actor.setTarget(((L2MinionInstance)_actor).getLeader());
+							_actor.doCast(sk);
+							return;
+						}
+					}
+			}
+			for(L2Skill sk:_skillrender._resskills)
+			{
+				if((sk.getMpConsume() >= _actor.getCurrentMp()
+						|| _actor.isSkillDisabled(sk.getId())
+						||(sk.isMagic() && _actor.isMuted()))
+						||(!sk.isMagic() && _actor.isPhysicalMuted()))
+				{
+					continue;
+				}
+				if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_ONE)
+				for(L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(sk.getCastRange()+_actor.getTemplate().collisionRadius))
+				{
+					if(!(obj instanceof L2Attackable) || !obj.isDead())
+						continue;
+
+					L2Attackable targets = ((L2Attackable)obj);
+					if(((L2Attackable)_actor).getFactionId() != targets.getFactionId() && ((L2Attackable)_actor).getFactionId()!=null)
+						continue;
+					if(Rnd.get(100) < 10)
+					{
+						if(GeoData.getInstance().canSeeTarget(_actor,targets))
+						{
+							clientStopMoving(null);
+							_actor.setTarget(obj);
+							_actor.doCast(sk);
+							return;
+						}
+					}						
+				}
+				if(isParty(sk))
+				{
+					clientStopMoving(null);
+					L2Object target = getAttackTarget();
+					_actor.setTarget(_actor);
+					_actor.doCast(sk);
+					_actor.setTarget(target);
+					return;					
+				}
+			}
+		}
+		}
+
+		//-------------------------------------------------------------------------------
+		//Immobilize Condition
+		if((_actor.isRooted() && (dist > range || getAttackTarget().isMoving()))
+				||(dist > range && getAttackTarget().isMoving()))
+		{
+			MovementDisable();
+			return;
+		}
+		setTimepass(0);
+		//--------------------------------------------------------------------------------
+		//Skill Use 
+		if(_skillrender.hasSkill())
+		{
+		if(Rnd.get(100)<=((L2Npc)_actor).getSkillChance())
+		{
+			L2Skill skills = _skillrender._generalskills.get(Rnd.nextInt(_skillrender._generalskills.size()));
+			if (Cast(skills))
+				return;
+			for(L2Skill sk:_skillrender._generalskills)
+				if (Cast(sk))
+					return;
+		}
+		
+		//--------------------------------------------------------------------------------
+		//Long/Short Range skill Usage
+		if (((L2Npc)_actor).hasLSkill() || ((L2Npc)_actor).hasSSkill())
+		{
+			if (((L2Npc)_actor).hasSSkill() && dist2 <= 150 && Rnd.get(100) <= ((L2Npc)_actor).getSSkillChance())
+			{
+				SSkillRender();
+				if (_skillrender._Srangeskills != null)
+					for(L2Skill sk:_skillrender._Srangeskills)
+						if (Cast(sk))
+							return;
+			}
+			if (((L2Npc)_actor).hasLSkill() && dist2 >= 300 && Rnd.get(100) <= ((L2Npc)_actor).getSSkillChance())
+			{
+				LSkillRender();
+				if(_skillrender._Lrangeskills!=null)
+					for(L2Skill sk:_skillrender._Lrangeskills)
+						if (Cast(sk))
+							return;
+			}
+			
+		}
+		}
+		
+		//--------------------------------------------------------------------------------
+		// Starts Melee or Primary Skill
+		if(dist2>range || !GeoData.getInstance().canSeeTarget(_actor, getAttackTarget()))
+		{
+			if (_actor.isRooted())
+			{
+				TargetReconsider();
+				return;
+			}
+			else
+			{
+				if(getAttackTarget().isMoving())
+					range -= 100;
+				if(range < 5)
+					range = 5;
+				moveToPawn(getAttackTarget(), range);
+				return;
+			}
+		}
+		else
+		{
+			Melee(((L2Npc)_actor).getPrimaryAttack());
+		}
+		
+	}
+	
+	private void Melee(int type)
+	{
+		if(type!=0)
+		{
+			switch(type)
+			{
+				case -1:
+				{
+					if(_skillrender._generalskills != null)
+						for(L2Skill sk : _skillrender._generalskills)
+							if (Cast(sk))
+								return;
+					break;
+				}
+				case 1:
+				{
+					if(_skillrender.hasAtkSkill())
+						for(L2Skill sk : _skillrender._atkskills)
+							if (Cast(sk))
+								return;
+					break;
+				}
+				default:
+				{
+					if(_skillrender._generalskills != null)
+						for(L2Skill sk : _skillrender._generalskills)
+							if(sk.getId() == ((L2Npc)_actor).getPrimaryAttack())
+								if (Cast(sk))
+									return;
+				}
+				break;
+			}
+		}
+
+		_accessor.doAttack(getAttackTarget());
+	}
+	private boolean Cast(L2Skill sk)
+	{
+		if (sk == null)
+			return false;
+		if (sk.getMpConsume() >= _actor.getCurrentMp() || _actor.isSkillDisabled(sk.getId())
+				|| (sk.isMagic() && _actor.isMuted()) || (!sk.isMagic() && _actor.isPhysicalMuted()))
+			return false;
+		if(getAttackTarget() == null)
+			if(((L2Attackable)_actor).getMostHated() != null)
+				setAttackTarget(((L2Attackable)_actor).getMostHated());
+		if(getAttackTarget() == null)
+			return false;
+		double dist = Math.sqrt(_actor.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY()));
+		double dist2= dist + getAttackTarget().getTemplate().collisionRadius;
+		double range = _actor.getPhysicalAttackRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+		double srange = sk.getCastRange() + _actor.getTemplate().collisionRadius;
+		if(getAttackTarget().isMoving())
+			dist2 = dist2 - 400;
+
+		switch(sk.getSkillType())
+		{
+			
+			case BUFF:
+			case REFLECT:
+				{
+					if (_actor.getFirstEffect(sk) == null)
+					{
+						clientStopMoving(null);
+						//L2Object target = getAttackTarget();
+						_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(target);
+						return true;
+					}
+					//----------------------------------------
+					//If actor already have buff, start looking at others same faction mob to cast
+					if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_SELF)
+						return false;
+					if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_ONE)
+					{
+						L2Character target = EffectTargetReconsider(sk,true);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							L2Object targets = getAttackTarget();
+							_actor.setTarget(target);
+							_actor.doCast(sk);
+							_actor.setTarget(targets);
+							return true;
+						}
+					}
+					if(canParty(sk))
+					{
+						clientStopMoving(null);
+						L2Object targets = getAttackTarget();
+						_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						_actor.setTarget(targets);
+						return true;
+					}
+					break;
+				}
+			case HEAL:
+			case HOT:
+			case HEAL_PERCENT:
+			case HEAL_STATIC:
+			case BALANCE_LIFE:
+				{
+					double percentage = _actor.getCurrentHp()/_actor.getMaxHp()*100;
+					if(_actor instanceof L2MinionInstance && sk.getTargetType() != L2Skill.SkillTargetType.TARGET_SELF)
+					{
+						L2Character leader = ((L2MinionInstance)_actor).getLeader();
+						if(leader != null && !leader.isDead() && Rnd.get(100) > (leader.getCurrentHp()/leader.getMaxHp()*100))
+						{
+							if(!Util.checkIfInRange((sk.getCastRange() + _actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius),_actor,leader,false) 
+									&& !isParty(sk) && !_actor.isRooted())
+							{
+								moveToPawn(leader,sk.getCastRange() +_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius);
+							}
+							if(GeoData.getInstance().canSeeTarget(_actor,leader))
+							{
+								clientStopMoving(null);
+								_actor.setTarget(leader);
+								_actor.doCast(sk);
+								return true;
+							}
+						}			
+					}	
+					if(Rnd.get(100) < (100-percentage)/3)
+					{
+						clientStopMoving(null);
+						_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						return true;
+					}
+
+					if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_ONE)
+					for(L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + _actor.getTemplate().collisionRadius))
+					{
+						if(!(obj instanceof L2Attackable) || obj.isDead())
+							continue;
+
+						L2Attackable targets = ((L2Attackable)obj);
+						if(((L2Attackable)_actor).getFactionId() != targets.getFactionId()&&((L2Attackable)_actor).getFactionId() != null)
+							continue;
+						percentage = targets.getCurrentHp()/targets.getMaxHp()*100;
+						if(Rnd.get(100)< (100-percentage)/10)
+						{
+							if(GeoData.getInstance().canSeeTarget(_actor,targets))
+							{
+								clientStopMoving(null);
+								_actor.setTarget(obj);
+								_actor.doCast(sk);
+								return true;
+							}
+						}
+					}
+					if(isParty(sk))
+					{
+						for(L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius() + _actor.getTemplate().collisionRadius))
+						{
+							if(!(obj instanceof L2Attackable))
+							{
+								continue;
+							}
+							L2Npc targets = ((L2Npc)obj);
+							L2Npc actors = ((L2Npc)_actor);
+							if(actors.getFactionId() != null && targets.getFactionId().equals(actors.getFactionId()))
+							{
+								if(obj.getCurrentHp() < obj.getMaxHp() && Rnd.get(100) <= 20)
+								{
+									clientStopMoving(null);
+									_actor.setTarget(_actor);
+									_actor.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+					break;
+				}
+			case RESURRECT:
+				{
+					if(!isParty(sk))
+					{
+						if(_actor instanceof L2MinionInstance && sk.getTargetType() != L2Skill.SkillTargetType.TARGET_SELF)
+						{
+							L2Character leader = ((L2MinionInstance)_actor).getLeader();
+							if(leader != null && leader.isDead())
+								if(!Util.checkIfInRange((sk.getCastRange() + _actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius),_actor,leader,false) 
+										&& !isParty(sk) && !_actor.isRooted())
+								{
+									moveToPawn(leader,sk.getCastRange() +_actor.getTemplate().collisionRadius + leader.getTemplate().collisionRadius);
+								}
+								if(GeoData.getInstance().canSeeTarget(_actor,leader))
+								{
+									clientStopMoving(null);
+									_actor.setTarget(((L2MinionInstance)_actor).getLeader());
+									_actor.doCast(sk);
+									return true;
+								}
+						}
+
+						for(L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(sk.getCastRange()+_actor.getTemplate().collisionRadius))
+						{
+							if(!(obj instanceof L2Attackable) || !obj.isDead())
+								continue;
+
+							L2Attackable targets = ((L2Attackable)obj);
+							if(((L2Attackable)_actor).getFactionId()!= targets.getFactionId() && ((L2Attackable)_actor).getFactionId()!=null)
+								continue;
+							if(Rnd.get(100)< 10)
+							{
+								if(GeoData.getInstance().canSeeTarget(_actor,targets))
+								{
+									clientStopMoving(null);
+									_actor.setTarget(obj);
+									_actor.doCast(sk);
+									return true;
+								}
+							}		
+						}
+					}
+					else if(isParty(sk))
+					{
+						for(L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()+_actor.getTemplate().collisionRadius))
+						{
+							if(!(obj instanceof L2Attackable))
+							{
+								continue;
+							}
+							L2Npc targets = ((L2Npc)obj);
+							L2Npc actors = ((L2Npc)_actor);
+							if(actors.getFactionId() != null && actors.getFactionId().equals(targets.getFactionId()))
+							{
+								if(obj.getCurrentHp()<obj.getMaxHp() && Rnd.get(100)<=20)
+								{
+									clientStopMoving(null);
+									_actor.setTarget(_actor);
+									_actor.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+					break;
+				}
+			case DEBUFF:
+			case WEAKNESS:
+			case POISON:
+			case DOT:
+			case MDOT:
+			case BLEED:
+				{
+					if(GeoData.getInstance().canSeeTarget(_actor,getAttackTarget())
+							&& !canAOE(sk) && !getAttackTarget().isDead() && dist2<=srange)
+					{
+						if (getAttackTarget().getFirstEffect(sk) == null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(canAOE(sk))
+					{
+						if(sk.getTargetType() == SkillTargetType.TARGET_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AURA)
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						if((sk.getTargetType() == SkillTargetType.TARGET_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_MULTIFACE)
+								&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(sk.getTargetType() == SkillTargetType.TARGET_ONE)
+					{
+						L2Character target = EffectTargetReconsider(sk,false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					break;
+				}
+			case SLEEP:
+				{
+					if(sk.getTargetType() == SkillTargetType.TARGET_ONE)
+					{
+						
+						if(getAttackTarget() != null && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							
+
+							
+							if(dist2>range || getAttackTarget().isMoving())
+							{
+								if (getAttackTarget().getFirstEffect(sk) == null)
+								{
+									clientStopMoving(null);
+									//_actor.setTarget(getAttackTarget());
+									_actor.doCast(sk);
+									return true;
+								}
+							}
+						}
+
+
+						L2Character target = EffectTargetReconsider(sk,false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(canAOE(sk))
+					{
+						if(sk.getTargetType() == SkillTargetType.TARGET_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AURA)
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						if((sk.getTargetType() == SkillTargetType.TARGET_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_MULTIFACE)
+							&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					break;
+				}
+			case ROOT:
+			case STUN:
+			case PARALYZE:
+				{
+					if(GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !canAOE(sk) && dist2<=srange)
+					{
+						if (getAttackTarget().getFirstEffect(sk) == null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(canAOE(sk))
+					{
+						if(sk.getTargetType() == SkillTargetType.TARGET_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AURA)
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						else if((sk.getTargetType() == SkillTargetType.TARGET_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_MULTIFACE)
+								&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(sk.getTargetType() == SkillTargetType.TARGET_ONE)
+					{
+						L2Character target = EffectTargetReconsider(sk,false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					break;
+				}
+			case MUTE:
+			case FEAR:
+				{
+					if(GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !canAOE(sk) && dist2<=srange)
+					{
+						if (getAttackTarget().getFirstEffect(sk) == null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(canAOE(sk))
+					{
+						if(sk.getTargetType() == SkillTargetType.TARGET_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AURA)
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						if((sk.getTargetType() == SkillTargetType.TARGET_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_MULTIFACE)
+							&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					else if(sk.getTargetType() == SkillTargetType.TARGET_ONE)
+					{
+						L2Character target = EffectTargetReconsider(sk,false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					break;
+				}
+			case CANCEL:
+			case NEGATE:
+				{
+					if(sk.getTargetType() == SkillTargetType.TARGET_ONE)
+					{
+						if(getAttackTarget().getFirstEffect(L2EffectType.BUFF) != null
+								&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget())
+								&& !getAttackTarget().isDead()
+								&& dist2<=srange)
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						L2Character target = EffectTargetReconsider(sk,false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							L2Object targets = getAttackTarget();
+							_actor.setTarget(target);
+							_actor.doCast(sk);
+							_actor.setTarget(targets);
+							return true;
+						}
+					}
+					else if(canAOE(sk))
+					{
+						if((sk.getTargetType() == SkillTargetType.TARGET_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AURA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AURA)
+							&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+							
+						{
+							clientStopMoving(null);
+							//L2Object target = getAttackTarget();
+							//_actor.setTarget(_actor);
+							_actor.doCast(sk);
+							//_actor.setTarget(target);
+							return true;
+						}
+						else if((sk.getTargetType() == SkillTargetType.TARGET_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_BEHIND_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_FRONT_AREA
+								|| sk.getTargetType() == SkillTargetType.TARGET_MULTIFACE)
+							&& GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+					}
+					break;
+				}
+			case PDAM:
+			case MDAM:
+			case BLOW:
+			case DRAIN:
+			case CHARGEDAM:
+			case DEATHLINK:
+			case CPDAM:
+			case MANADAM:
+				{
+					if(!canAura(sk))
+					{
+						if(GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+						else
+						{
+							L2Character target = SkillTargetReconsider(sk);
+							if (target != null)
+							{
+								clientStopMoving(null);
+								L2Object targets = getAttackTarget();
+								_actor.setTarget(target);
+								_actor.doCast(sk);
+								_actor.setTarget(targets);
+								return true;
+							}
+						}
+					}
+					else
+					{
+						clientStopMoving(null);
+						_actor.doCast(sk);
+						return true;
+					}
+					break;
+				}
+			default :
+				{
+					if(!canAura(sk))
+					{
+						
+						if(GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()) && !getAttackTarget().isDead() && dist2<=srange)
+						{
+							clientStopMoving(null);
+							_actor.doCast(sk);
+							return true;
+						}
+						else
+						{
+							L2Character target = SkillTargetReconsider(sk);
+							if (target != null)
+							{
+								clientStopMoving(null);
+								L2Object targets = getAttackTarget();
+								_actor.setTarget(target);
+								_actor.doCast(sk);
+								_actor.setTarget(targets);
+								return true;
+							}
+						}
+					}
+					else
+					{
+						clientStopMoving(null);
+						//L2Object targets = getAttackTarget();
+						//_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(targets);
+						return true;
+					}
+					
+				}
+				break;
+		}
+		
+		return false;
+	}
+	
+	/**
+	 * This AI task will start when ACTOR cannot move and attack range larger than distance
+	 */
+	private void MovementDisable()
+	{
+		
+		double dist = 0;
+		double dist2 = 0;
+		int range = 0;
+		try
+		{
+			if(_actor.getTarget() == null)
+			_actor.setTarget(getAttackTarget());
+			dist = Math.sqrt(_actor.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY()));
+			dist2= dist;
+			range = _actor.getPhysicalAttackRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+			if(getAttackTarget().isMoving())
+			{
+					dist = dist -30;
+				if(_actor.isMoving())
+					dist = dist -50;
+			}
+		}
+		catch (NullPointerException e)
+		{
+			setIntention(AI_INTENTION_ACTIVE);
+			return;
+		}
+		
+		//Check if activeChar has any skill
+		if(_skillrender.hasSkill())
+		{
+			//-------------------------------------------------------------
+			//Try to stop the target or disable the target as priority
+			if(_skillrender.hasImmobiliseSkill())
+			{
+				for(L2Skill sk : _skillrender._immobiliseskills)
+				{
+					if(sk.getMpConsume() >= _actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							|| (sk.getCastRange()+ _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							|| (sk.isMagic()&&_actor.isMuted())
+							|| (!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					if (getAttackTarget().getFirstEffect(sk) == null)
+					{
+						clientStopMoving(null);
+						//L2Object target = getAttackTarget();
+						//_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(target);
+						return;
+					}
+				}
+			}
+			//-------------------------------------------------------------
+			//Same as Above, but with Mute/FEAR etc....
+			if(_skillrender.hasCOTSkill())
+			{
+				for(L2Skill sk:_skillrender._cotskills)
+				{
+					if(sk.getMpConsume()>=_actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.getCastRange()+ _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							||(sk.isMagic()&&_actor.isMuted())
+							||(!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					if (getAttackTarget().getFirstEffect(sk) == null)
+					{
+						clientStopMoving(null);
+						//L2Object target = getAttackTarget();
+						//_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(target);
+						return;
+					}
+				}
+			}				
+			//-------------------------------------------------------------
+			if(_skillrender.hasDebuffSkill()&&Rnd.get(10)<=2)
+			{
+				for(L2Skill sk:_skillrender._debuffskills)
+				{
+					if(sk.getMpConsume()>=_actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.getCastRange()+ _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							||(sk.isMagic()&&_actor.isMuted())
+							||(!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					if (getAttackTarget().getFirstEffect(sk) == null)
+					{
+						clientStopMoving(null);
+						//L2Object target = getAttackTarget();
+						//_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(target);
+						return;
+					}
+				}
+			}
+			//-------------------------------------------------------------
+			//Some side effect skill like CANCEL or NEGATE
+			if(_skillrender.hasNegativeSkill() && Rnd.get(10) == 1)
+			{
+				for(L2Skill sk : _skillrender._negativeskills)
+				{
+					if(sk.getMpConsume() >= _actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.getCastRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							||(sk.isMagic()&&_actor.isMuted())
+							||(!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					if (getAttackTarget().getFirstEffect(L2EffectType.BUFF) != null)
+					{
+						clientStopMoving(null);
+						//L2Object target = getAttackTarget();
+						//_actor.setTarget(_actor);
+						_actor.doCast(sk);
+						//_actor.setTarget(target);
+						return;
+					}
+				}
+			}
+			//-------------------------------------------------------------
+			//Start ATK SKILL when nothing can be done
+			if(_skillrender.hasAtkSkill())
+			{
+				for(L2Skill sk:_skillrender._atkskills)
+				{
+					if(sk.getMpConsume()>=_actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.getCastRange()+ _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							||(sk.isMagic()&&_actor.isMuted())
+							||(!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					clientStopMoving(null);
+					//L2Object target = getAttackTarget();
+					//_actor.setTarget(_actor);
+					_actor.doCast(sk);
+					//_actor.setTarget(target);
+					return;
+				}
+			}
+			//-------------------------------------------------------------
+			//if there is no ATK skill to use, then try Universal skill
+			/*
+			if(_skillrender.hasUniversalSkill())
+			{
+				for(L2Skill sk:_skillrender._universalskills)
+				{
+					if(sk.getMpConsume()>=_actor.getCurrentMp()
+							|| _actor.isSkillDisabled(sk.getId())
+							||(sk.getCastRange()+ _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius <= dist2 && !canAura(sk))
+							||(sk.isMagic()&&_actor.isMuted())
+							||(!sk.isMagic()&&_actor.isPhysicalMuted()))
+					{
+						continue;
+					}
+					if(!GeoData.getInstance().canSeeTarget(_actor,getAttackTarget()))
+						continue;
+					clientStopMoving(null);
+					L2Object target = getAttackTarget();
+					//_actor.setTarget(_actor);
+					_actor.doCast(sk);
+					//_actor.setTarget(target);
+					return;
+				}
+			}
+
+			*/
+		}
+		//timepass = timepass + 1;
+		if (_actor.isRooted())
+		{
+			//timepass = 0;
+			TargetReconsider();
+
+
+			return;
+		}
+		//else if(timepass>=5)
+		//{
+		//	timepass = 0;
+		//	AggroReconsider();
+		//	return;
+		//}
+		
+		if(dist>range || !GeoData.getInstance().canSeeTarget(_actor, getAttackTarget()))
+		{
+			if(getAttackTarget().isMoving())
+				range -=100;if(range<5)range=5;
+				moveToPawn(getAttackTarget(), range);
+				return;
+			
+		}
+
+
+		Melee(((L2Npc)_actor).getPrimaryAttack());
+		return;
+	}
+
+	private L2Character EffectTargetReconsider(L2Skill sk, boolean positive)
+	{	
+		if (sk == null)
+			return null;
+		if(sk.getSkillType() != L2SkillType.NEGATE || sk.getSkillType() != L2SkillType.CANCEL )
+		{
+			if(!positive)
+			{
+				double dist = 0;
+				double dist2 = 0;
+				int range = 0;
+				L2Attackable actor = (L2Attackable)_actor;
+				
+				if(actor.getAttackByList() != null)
+				for(L2Character obj: actor.getAttackByList())
+				{
+					if(obj == null || obj.isDead() || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj == getAttackTarget())
+						continue;
+					try
+					{
+						_actor.setTarget(getAttackTarget());
+						dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist2= dist;
+						range = sk.getCastRange() + _actor.getTemplate().collisionRadius + obj.getTemplate().collisionRadius;
+						if(obj.isMoving())
+							dist2 = dist2 - 70;
+					}
+					catch (NullPointerException e)
+					{
+						continue;
+					}
+					if(dist2<=range)
+					{
+						if (getAttackTarget().getFirstEffect(sk) == null)
+							return obj;
+					}
+				}
+				
+				//----------------------------------------------------------------------
+				//If there is nearby Target with aggro, start going on random target that is attackable
+				for (L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(range))
+				{
+					if(obj.isDead() || obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj))
+						continue;
+					try
+					{
+						_actor.setTarget(getAttackTarget());
+						dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist2= dist;
+						range = sk.getCastRange() + _actor.getTemplate().collisionRadius + obj.getTemplate().collisionRadius;
+						if(obj.isMoving())
+							dist2 = dist2 - 70;
+					}
+					catch (NullPointerException e)
+					{
+						continue;
+					}
+					if(obj instanceof L2Attackable)
+					{
+						if(((L2Attackable)_actor).getEnemyClan() != null && (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)obj).getClan())) && !"none".equals(((L2Attackable)_actor).getEnemyClan()))
+						{
+							if(dist2<=range)
+							{
+								if (getAttackTarget().getFirstEffect(sk) == null)
+									return obj;
+							}
+						}
+					}
+					if(obj instanceof L2PcInstance || obj instanceof L2Summon)
+					{
+						if(dist2<=range)
+						{
+							if (getAttackTarget().getFirstEffect(sk) == null)
+								return obj;
+						}
+					}
+				}
+			}
+			else if (positive)
+			{
+				double dist = 0;
+				double dist2 = 0;
+				int range = 0;
+				for(L2Character obj: _actor.getKnownList().getKnownCharactersInRadius(range))
+				{
+					if(!(obj instanceof L2Attackable) || obj.isDead() || obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj))
+						continue;
+					
+					L2Attackable targets = ((L2Attackable)obj);
+					if(((L2Attackable)_actor).getFactionId()!= targets.getFactionId() && ((L2Attackable)_actor).getFactionId()!=null)
+						continue;
+					
+					try
+					{
+						_actor.setTarget(getAttackTarget());
+						dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist2= dist;
+						range = sk.getCastRange() + _actor.getTemplate().collisionRadius + obj.getTemplate().collisionRadius;
+						if(obj.isMoving())
+							dist2 = dist2 - 70;
+					}
+					catch (NullPointerException e)
+					{
+						continue;
+					}
+					if(dist2<=range)
+					{
+						if (obj.getFirstEffect(sk) == null)
+							return obj;
+					}
+				}
+			}
+			return null;
+		}
+		else
+		{
+			double dist = 0;
+			double dist2 = 0;
+			int range = 0;
+			range = sk.getCastRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+			for (L2Character obj : _actor.getKnownList().getKnownCharactersInRadius(range))
+			{
+				if(obj == null || obj.isDead() || !GeoData.getInstance().canSeeTarget(_actor,obj))
+					continue;
+				try
+				{
+					_actor.setTarget(getAttackTarget());
+					dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+					dist2= dist;
+					range = sk.getCastRange() + _actor.getTemplate().collisionRadius + obj.getTemplate().collisionRadius;
+					if(obj.isMoving())
+						dist2 = dist2 - 70;
+				}
+				catch (NullPointerException e)
+				{
+					continue;
+				}
+				if(obj instanceof L2Attackable)
+				{
+					if(((L2Attackable)_actor).getEnemyClan() != null && (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)obj).getClan())) && !"none".equals(((L2Attackable)_actor).getEnemyClan()))
+					{
+						if(dist2<=range)
+						{
+							if (getAttackTarget().getFirstEffect(L2EffectType.BUFF) != null)
+								return obj;
+						}
+					}
+				}
+				if(obj instanceof L2PcInstance || obj instanceof L2Summon)
+				{
+
+					if(dist2<=range)
+					{
+						if (getAttackTarget().getFirstEffect(L2EffectType.BUFF) != null)
+							return obj;
+					}
+				}
+			}
+			return null;
+		}
+	}
+
+	private L2Character SkillTargetReconsider(L2Skill sk)
+	{
+		double dist = 0;
+		double dist2 = 0;
+		int range = 0;
+		L2Attackable actor = (L2Attackable)_actor;
+		if(actor.getHateList()!=null)
+		for(L2Character obj: actor.getHateList())
+		{
+			if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj.isDead())
+				continue;
+			try
+			{
+				_actor.setTarget(getAttackTarget());
+				dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+				dist2= dist;
+				range = sk.getCastRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+				//if(obj.isMoving())
+				//	dist2 = dist2 - 40;
+			}
+			catch (NullPointerException e)
+			{
+				continue;
+			}
+			if(dist2<=range)
+			{
+				return obj;
+			}
+		}
+		
+		if(!(_actor instanceof L2GuardInstance))
+		{
+			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
+			for (L2Object target : objs)
+			{
+				try
+				{
+					_actor.setTarget(getAttackTarget());
+					dist = Math.sqrt(_actor.getPlanDistanceSq(target.getX(), target.getY()));
+					dist2= dist;
+					range = sk.getCastRange() + _actor.getTemplate().collisionRadius + getAttackTarget().getTemplate().collisionRadius;
+					//if(obj.isMoving())
+					//	dist2 = dist2 - 40;
+				}
+				catch (NullPointerException e)
+				{
+					continue;
+				}
+				L2Character obj = null;
+				if (target instanceof L2Character)
+					obj = (L2Character)target;
+				if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || dist2 > range)
+					continue;
+				if(obj instanceof L2PcInstance)
+				{
+					return obj;
+				
+				}
+				if(obj instanceof L2Attackable)
+				{
+					if(((L2Attackable)_actor).getEnemyClan() != null && (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)obj).getClan())) && !"none".equals(((L2Attackable)_actor).getEnemyClan()))
+					{
+						return obj;
+					}
+					if (((L2Attackable)_actor).getIsChaos() != 0)
+					{
+						if(((L2Attackable)obj).getFactionId() != null && ((L2Attackable)obj).getFactionId().equals(((L2Attackable)_actor).getFactionId()))
+							continue;
+					else
+						return obj;
+					}
+				}
+				if(obj instanceof L2Summon)
+				{
+					return obj;
+				}
+			
+			}
+		}
+		return null;
+	}
+	private void TargetReconsider()
+	{
+		double dist = 0;
+		double dist2 = 0;
+		int range = 0;
+		L2Attackable actor = (L2Attackable)_actor;
+		L2Character MostHate = ((L2Attackable) _actor).getMostHated();
+		if(actor.getHateList()!=null)
+		for(L2Character obj : actor.getHateList())
+		{
+			if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj.isDead() || obj!= MostHate || obj == _actor)
+				continue;
+			try
+			{
+				dist = Math.sqrt(_actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+				dist2= dist;
+				range = _actor.getPhysicalAttackRange() + _actor.getTemplate().collisionRadius + obj.getTemplate().collisionRadius;
+				if(obj.isMoving())
+					dist2 = dist2 - 70;
+			}
+			catch (NullPointerException e)
+			{
+				continue;
+			}
+			
+			if(dist2<=range)
+			{
+				if(MostHate!=null)
+					actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+				else
+					actor.addDamageHate(obj,2000,2000);
+				_actor.setTarget(obj);
+				setAttackTarget(obj);
+				return;
+			}
+		}
+		if(!(_actor instanceof L2GuardInstance))
+		{
+			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
+			for (L2Object target : objs)
+			{
+				L2Character obj = null;
+				if (target instanceof L2Character)
+					obj = (L2Character)target;
+				
+				if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj.isDead() || obj!= MostHate || obj == _actor || obj == getAttackTarget())
+					continue;
+				if(obj instanceof L2PcInstance)
+				{
+					if(MostHate != null)
+						actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+					else
+						actor.addDamageHate(obj,2000,2000);
+					_actor.setTarget(obj);
+					setAttackTarget(obj);
+					
+				}
+				else if(obj instanceof L2Attackable)
+				{
+					if(((L2Attackable)_actor).getEnemyClan() != null && (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)obj).getClan())) && !"none".equals(((L2Attackable)_actor).getEnemyClan()))
+					{
+						actor.addDamageHate(obj,0,actor.getHating(MostHate));
+						_actor.setTarget(obj);
+					}
+					if (((L2Attackable)_actor).getIsChaos() != 0)
+					{
+						if(((L2Attackable)obj).getFactionId() != null && ((L2Attackable)obj).getFactionId().equals(((L2Attackable)_actor).getFactionId()))
+							continue;
+						else
+						{
+							if(MostHate != null)
+								actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+							else
+								actor.addDamageHate(obj,2000,2000);
+							_actor.setTarget(obj);
+							setAttackTarget(obj);
+						}
+					}
+				}
+				else if(obj instanceof L2Summon)
+				{
+					if(MostHate != null)
+						actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+					else
+						actor.addDamageHate(obj,2000,2000);
+					_actor.setTarget(obj);
+					setAttackTarget(obj);
+				}
+			}
+		}
+	}
+	
+	
+	@SuppressWarnings("null")
+	private void AggroReconsider()
+	{
+
+		L2Attackable actor = (L2Attackable)_actor;
+		L2Character MostHate = ((L2Attackable) _actor).getMostHated();
+		
+		if(actor.getHateList() != null)
+		{
+
+			int rand = Rnd.get(actor.getHateList().size());
+			int count = 0;
+			for(L2Character obj: actor.getHateList())
+			{
+				if(count < rand)
+				{
+					count++;
+					continue;
+				}
+				
+				if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj.isDead()|| obj == getAttackTarget() || obj == actor)
+					continue;
+				
+				try
+				{
+					_actor.setTarget(getAttackTarget());
+	
+				}
+				catch (NullPointerException e)
+				{
+					continue;
+				}
+					if(MostHate!=null)
+						actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+					else
+						actor.addDamageHate(obj,2000,2000);
+					_actor.setTarget(obj);
+					setAttackTarget(obj);
+					return;
+				
+			}
+		}
+
+		if(!(_actor instanceof L2GuardInstance))
+		{
+			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
+			for (L2Object target : objs)
+			{
+				L2Character obj = null;
+				if(target instanceof L2Character)
+					obj = (L2Character)target;
+				else
+					continue;
+				if(obj == null || !GeoData.getInstance().canSeeTarget(_actor,obj) || obj.isDead() || obj != MostHate || obj == _actor)
+					continue;
+				if(obj instanceof L2PcInstance)
+				{
+					if(MostHate!=null || !MostHate.isDead())
+						actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+					else
+						actor.addDamageHate(obj,2000,2000);
+					_actor.setTarget(obj);
+					setAttackTarget(obj);
+					
+				}
+				else if(obj instanceof L2Attackable)
+				{
+					if(((L2Attackable)_actor).getEnemyClan() != null && (((L2Attackable)_actor).getEnemyClan().equals(((L2Attackable)obj).getClan())) && !"none".equals(((L2Attackable)_actor).getEnemyClan()))
+					{
+						if(MostHate != null)
+							actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+						else
+							actor.addDamageHate(obj,2000,2000);
+						_actor.setTarget(obj);
+					}
+					if (((L2Attackable)_actor).getIsChaos() != 0)
+					{
+						if(((L2Attackable)obj).getFactionId() != null && ((L2Attackable)obj).getFactionId().equals(((L2Attackable)_actor).getFactionId()))
+							continue;
+						else
+						{
+							if(MostHate != null)
+								actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+							else
+								actor.addDamageHate(obj,2000,2000);
+							_actor.setTarget(obj);
+							setAttackTarget(obj);
+						}
+					}
+				}
+				else if(obj instanceof L2Summon)
+				{
+					if(MostHate != null)
+						actor.addDamageHate(obj,actor.getHating(MostHate),actor.getHating(MostHate));
+					else
+						actor.addDamageHate(obj,2000,2000);
+					_actor.setTarget(obj);
+					setAttackTarget(obj);
+				}
+			}
+		}
+	}
+	
+	private void LSkillRender()
+	{ 
+		if(_skillrender._Lrangeskills == null)
+		_skillrender._Lrangeskills = ((L2Npc)_actor).getLrangeSkill();
+	}
+	private void SSkillRender()
+	{ 
+		if(_skillrender._Srangeskills == null)
+		_skillrender._Srangeskills = ((L2Npc)_actor).getSrangeSkill();
+	}
+	/**
+	 * Manage AI thinking actions of a L2Attackable.<BR><BR>
+	 */
+	@Override
+	protected void onEvtThink()
+	{
+		// Check if the actor can't use skills and if a thinking action isn't already in progress
+		if (_thinking || _actor.isAllSkillsDisabled()) return;
+
+		// Start thinking action
+		_thinking = true;
+
+		try
+		{
+			// Manage AI thinks of a L2Attackable
+			if (getIntention() == AI_INTENTION_ACTIVE) thinkActive();
+			else if (getIntention() == AI_INTENTION_ATTACK) thinkAttack();
+		}
+		finally
+		{
+			// Stop thinking action
+			_thinking = false;
+		}
+	}
+
+	/**
+	 * Launch actions corresponding to the Event Attacked.<BR><BR>
+	 *
+	 * <B><U> Actions</U> :</B><BR><BR>
+	 * <li>Init the attack : Calculate the attack timeout, Set the _globalAggro to 0, Add the attacker to the actor _aggroList</li>
+	 * <li>Set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance</li>
+	 * <li>Set the Intention to AI_INTENTION_ATTACK</li><BR><BR>
+	 *
+	 * @param attacker The L2Character that attacks the actor
+	 *
+	 */
+	@Override
+	protected void onEvtAttacked(L2Character attacker)
+	{
+		//if (_actor instanceof L2ChestInstance && !((L2ChestInstance)_actor).isInteracted())
+		//{
+			//((L2ChestInstance)_actor).deleteMe();
+			//((L2ChestInstance)_actor).getSpawn().startRespawn();
+			//return;
+		//}
+
+		// Calculate the attack timeout
+		_attackTimeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks();
+
+		// Set the _globalAggro to 0 to permit attack even just after spawn
+		if (_globalAggro < 0) _globalAggro = 0;
+
+		// Add the attacker to the _aggroList of the actor
+		((L2Attackable) _actor).addDamageHate(attacker, 0, 1);
+
+		// Set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance
+		if (!_actor.isRunning()) _actor.setRunning();
+
+		// Set the Intention to AI_INTENTION_ATTACK
+		if (getIntention() != AI_INTENTION_ATTACK)
+		{
+			setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker);
+		}
+		else if (((L2Attackable) _actor).getMostHated() != getAttackTarget())
+		{
+			setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker);
+		}
+
+		super.onEvtAttacked(attacker);
+	}
+
+	/**
+	 * Launch actions corresponding to the Event Aggression.<BR><BR>
+	 *
+	 * <B><U> Actions</U> :</B><BR><BR>
+	 * <li>Add the target to the actor _aggroList or update hate if already present </li>
+	 * <li>Set the actor Intention to AI_INTENTION_ATTACK (if actor is L2GuardInstance check if it isn't too far from its home location)</li><BR><BR>
+	 *
+	 * @param attacker The L2Character that attacks
+	 * @param aggro The value of hate to add to the actor against the target
+	 *
+	 */
+	@Override
+	protected void onEvtAggression(L2Character target, int aggro)
+	{
+		L2Attackable me = (L2Attackable) _actor;
+
+		if (target != null)
+		{
+			// Add the target to the actor _aggroList or update hate if already present
+			me.addDamageHate(target, 0, aggro);
+
+			// Set the actor AI Intention to AI_INTENTION_ATTACK
+			if (getIntention() != CtrlIntention.AI_INTENTION_ATTACK)
+			{
+				// Set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance
+				if (!_actor.isRunning()) _actor.setRunning();
+
+				setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
+			}
+		}
+	}
+
+	@Override
+	protected void onIntentionActive()
+	{
+		// Cancel attack timeout
+		_attackTimeout = Integer.MAX_VALUE;
+		super.onIntentionActive();
+	}
+
+	public void setGlobalAggro(int value)
+	{
+		_globalAggro = value;
+	}
+
+	/**
+	 * @param clan The clan to set.
+	 */
+	public void setClan(String CL)
+	{
+		this.clan = CL;
+	}
+
+	/**
+	 * @return Returns the clan.
+	 */
+	public String getClan()
+	{
+		return clan;
+	}
+
+	/**
+	 * @param enemyClan The enemyClan to set.
+	 */
+	public void setEnemyClan(String EC)
+	{
+		this.enemyClan = EC;
+	}
+
+	/**
+	 * @return Returns the enemyClan.
+	 */
+	public String getEnemyClan()
+	{
+		return enemyClan;
+	}
+
+	/**
+	 * @param timepass The timepass to set.
+	 */
+	public void setTimepass(int TP)
+	{
+		this.timepass = TP;
+	}
+
+	/**
+	 * @return Returns the timepass.
+	 */
+	public int getTimepass()
+	{
+		return timepass;
+	}
+}

+ 218 - 42
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2CharacterAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2CharacterAI.java

@@ -12,46 +12,49 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_CAST;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_INTERACT;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_MOVE_TO;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_PICK_UP;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_REST;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_CAST;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_INTERACT;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_MOVE_TO;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_PICK_UP;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_REST;
 
 import java.util.List;
 
 import javolution.util.FastList;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.Universe;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.L2ItemInstance.ItemLocation;
-import net.sf.l2j.gameserver.model.actor.L2Attackable;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.model.actor.instance.L2AirShipInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2BoatInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.AutoAttackStop;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.taskmanager.AttackStanceTaskManager;
-import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
-import net.sf.l2j.gameserver.templates.item.L2Weapon;
-import net.sf.l2j.gameserver.templates.item.L2WeaponType;
-import net.sf.l2j.util.Point3D;
-import net.sf.l2j.util.Rnd;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.Universe;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.L2ItemInstance.ItemLocation;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2AirShipInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.network.serverpackets.AutoAttackStop;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
+import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
+import com.l2jserver.gameserver.templates.item.L2Weapon;
+import com.l2jserver.gameserver.templates.item.L2WeaponType;
+import com.l2jserver.util.Point3D;
+import com.l2jserver.util.Rnd;
+import com.l2jserver.gameserver.templates.skills.L2SkillType;
+import com.l2jserver.gameserver.model.L2Effect;
 
+import com.l2jserver.gameserver.GeoData;
 /**
  * This class manages AI of L2Character.<BR><BR>
  *
@@ -206,9 +209,6 @@ public class L2CharacterAI extends AbstractAI
 	@Override
 	protected void onIntentionAttack(L2Character target)
 	{
-		// stop invul effect if exist
-		if (_actor.getInvulEffect() != null)
-			_actor.getInvulEffect().exit();
 		if (target == null)
 		{
 			clientActionFailed();
@@ -277,9 +277,6 @@ public class L2CharacterAI extends AbstractAI
 	@Override
 	protected void onIntentionCast(L2Skill skill, L2Object target)
 	{
-		// stop invul effect if exist
-		if (_actor.getInvulEffect() != null)
-			_actor.getInvulEffect().exit();
 		if (getIntention() == AI_INTENTION_REST && skill.isMagic())
 		{
 			clientActionFailed();
@@ -351,7 +348,7 @@ public class L2CharacterAI extends AbstractAI
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.ai.AbstractAI#onIntentionMoveToInABoat(net.sf.l2j.gameserver.model.L2CharPosition, net.sf.l2j.gameserver.model.L2CharPosition)
+	 * @see com.l2jserver.gameserver.ai.AbstractAI#onIntentionMoveToInABoat(com.l2jserver.gameserver.model.L2CharPosition, com.l2jserver.gameserver.model.L2CharPosition)
 	 */
 	@Override
 	protected void onIntentionMoveToInABoat(L2CharPosition destination, L2CharPosition origin)
@@ -385,7 +382,7 @@ public class L2CharacterAI extends AbstractAI
 	}
 
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.ai.AbstractAI#onIntentionMoveToInAirShip(net.sf.l2j.gameserver.model.L2CharPosition, net.sf.l2j.gameserver.model.L2CharPosition)
+	 * @see com.l2jserver.gameserver.ai.AbstractAI#onIntentionMoveToInAirShip(com.l2jserver.gameserver.model.L2CharPosition, com.l2jserver.gameserver.model.L2CharPosition)
 	 */
 	@Override
 	protected void onIntentionMoveToInAirShip(L2CharPosition destination, L2CharPosition origin)
@@ -1414,4 +1411,183 @@ public class L2CharacterAI extends AbstractAI
 				isCanceled = true;
 		}
 	}
+	
+	
+	  public boolean canAura(L2Skill sk)
+	    {
+	    	if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_AURA 
+	    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_BEHIND_AURA
+	    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_FRONT_AURA)
+	    	{
+	    		for(L2Object target:_actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+	    		{
+	    			if (target == getAttackTarget())
+	    				return true;
+	    		}
+	    	}
+	    	return false;
+	    }
+	    public boolean canAOE(L2Skill sk)
+	    {
+	    	if(sk.getSkillType() != L2SkillType.NEGATE || sk.getSkillType() != L2SkillType.CANCEL)
+	    	{
+		    	if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_AURA 
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_BEHIND_AURA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_FRONT_AURA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_MULTIFACE)
+		    	{
+		    		boolean cancast = true;
+		    		for(L2Character target:_actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+		    		{
+		    			if(!GeoData.getInstance().canSeeTarget(_actor,target))
+		    				continue;
+		    			if(target instanceof L2Attackable)
+		    			{
+		    				L2Npc targets = ((L2Npc)target);
+		    				L2Npc actors = ((L2Npc)_actor);
+		    				
+		    				if(targets.getEnemyClan() == null || actors.getClan() == null || !targets.getEnemyClan().equals(actors.getClan()) || ("none".equals(actors.getClan()) && actors.getIsChaos() == 0))
+		    					continue;
+		    			}
+		    			L2Effect[] effects = target.getAllEffects();
+						for (int i = 0; effects != null && i < effects.length; i++)
+						{
+							L2Effect effect = effects[i];
+							if (effect.getSkill() == sk)
+							{
+								cancast=false;
+								break;
+							}
+						}
+		    		}
+		    		if(cancast)
+		    			return true;
+		    	}
+		    	else if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_AREA 
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_BEHIND_AREA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_FRONT_AREA)
+		    	{
+		    		boolean cancast = true;
+		    		for(L2Character target: getAttackTarget().getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+		    		{
+		    			if(!GeoData.getInstance().canSeeTarget(_actor,target) || target == null)
+		    				continue;
+		    			if(target instanceof L2Attackable)
+		    			{
+		    				L2Npc targets = ((L2Npc)target);
+		    				L2Npc actors = ((L2Npc)_actor);
+		    				if(targets.getEnemyClan() == null || actors.getClan() == null || !targets.getEnemyClan().equals(actors.getClan()) || (("none".equals(actors.getClan())) && actors.getIsChaos() == 0))
+		    					continue;
+		    			}
+		    			L2Effect[] effects = target.getAllEffects();
+	 					if (effects.length >0)
+	 						cancast = true;
+		    		}
+		    		if(cancast)
+		    			return true;
+		    	}
+	    	}
+	    	else
+	    	{
+	    		if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_AURA 
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_BEHIND_AURA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_FRONT_AURA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_MULTIFACE)
+		    	{
+		    		boolean cancast = false;
+		    		for(L2Character target:_actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+		    		{
+		    			if(!GeoData.getInstance().canSeeTarget(_actor,target))
+		    				continue;
+		    			if(target instanceof L2Attackable)
+		    			{
+		    				L2Npc targets = ((L2Npc)target);
+		    				L2Npc actors = ((L2Npc)_actor);
+		    				if(targets.getEnemyClan() == null || actors.getClan() == null || !targets.getEnemyClan().equals(actors.getClan()) || (actors.getClan() == null && actors.getIsChaos() == 0))
+		    					continue;
+		    			}
+		    			L2Effect[] effects = target.getAllEffects();
+	 					if (effects.length >0)
+	 						cancast = true;
+		    		}
+		    		if(cancast)
+		    			return true;
+		    	}
+		    	else if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_AREA 
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_BEHIND_AREA
+		    			|| sk.getTargetType() == L2Skill.SkillTargetType.TARGET_FRONT_AREA)
+		    	{
+		    		boolean cancast = true;
+		    		for(L2Character target: getAttackTarget().getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+		    		{
+		    			if(!GeoData.getInstance().canSeeTarget(_actor,target))
+		    				continue;
+		    			if(target instanceof L2Attackable)
+		    			{
+		    				L2Npc targets = ((L2Npc)target);
+		    				L2Npc actors = ((L2Npc)_actor);
+		    				if(targets.getEnemyClan() == null || actors.getClan() == null || !targets.getEnemyClan().equals(actors.getClan()) || (actors.getClan() == null && actors.getIsChaos() == 0))
+		    					continue;
+		    			}
+		    			L2Effect[] effects = target.getAllEffects();
+						for (int i = 0; effects != null && i < effects.length; i++)
+						{
+							L2Effect effect = effects[i];
+							if (effect.getSkill() == sk)
+							{
+								cancast=false;
+								break;
+							}
+						}
+		    		}
+		    		if(cancast)
+		    			return true;
+		    	}
+	    	}
+	    	return false;
+	    }
+	    public boolean canParty(L2Skill sk)
+	    {
+	    	if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_PARTY)
+	    	{
+	    			int count = 0;
+	    			int ccount = 0;
+	        		for(L2Character target:_actor.getKnownList().getKnownCharactersInRadius(sk.getSkillRadius()))
+	        		{
+	        			if(!(target instanceof L2Attackable) || !GeoData.getInstance().canSeeTarget(_actor,target))
+	        			{
+	        					continue;
+	        			}
+	    				L2Npc targets = ((L2Npc)target);
+	    				L2Npc actors = ((L2Npc)_actor);
+	    				if(actors.getFactionId() != null && targets.getFactionId().equals(actors.getFactionId()))
+	    				{
+	    					count++;
+		        			L2Effect[] effects = target.getAllEffects();
+		    				for (int i = 0; effects != null && i < effects.length; i++)
+		    				{
+		    					
+		    					L2Effect effect = effects[i];
+		    					if (effect.getSkill() == sk)
+		    					{
+		    						ccount++;
+		    						break;
+		    					}
+		    				}
+	    				}
+	        		}
+	        		if(ccount < count)
+	        			return true;
+	        	
+	    	}
+	    	return false;
+	    }
+	    public boolean isParty(L2Skill sk)
+	    {
+	    	if(sk.getTargetType() == L2Skill.SkillTargetType.TARGET_PARTY)
+	    	{
+	    				return true;
+	    	}
+	    	return false;
+	    }
 }

+ 19 - 18
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2ControllableMobAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java

@@ -12,29 +12,30 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 
 import java.util.Collection;
 import java.util.List;
 
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.MobGroup;
+import com.l2jserver.gameserver.model.MobGroupTable;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.L2Character.AIAccessor;
+import com.l2jserver.gameserver.model.actor.instance.L2ControllableMobInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
 import javolution.util.FastList;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.MobGroup;
-import net.sf.l2j.gameserver.model.MobGroupTable;
-import net.sf.l2j.gameserver.model.actor.L2Attackable;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.model.actor.L2Playable;
-import net.sf.l2j.gameserver.model.actor.L2Character.AIAccessor;
-import net.sf.l2j.gameserver.model.actor.instance.L2ControllableMobInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
-import net.sf.l2j.gameserver.util.Util;
-import net.sf.l2j.util.Rnd;
 
 /**
  * @author littlecrow
@@ -311,7 +312,7 @@ public class L2ControllableMobAI extends L2AttackableAI
 						
 						L2Npc npc = (L2Npc) obj;
 						
-						if (faction_id != npc.getFactionId())
+						if (!faction_id.equals(npc.getFactionId()))
 							continue;
 						
 						if (_actor.isInsideRadius(npc, npc.getFactionRange(), false, true) && Math.abs(getAttackTarget().getZ() - npc.getZ()) < 200)

+ 9 - 17
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2DoorAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2DoorAI.java

@@ -12,16 +12,15 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2FortSiegeGuardInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DefenderInstance;
 
 /**
  * @author mkizub
@@ -171,14 +170,7 @@ public class L2DoorAI extends L2CharacterAI
 		 */
 		public void run()
 		{
-			for (L2SiegeGuardInstance guard : _door.getKnownSiegeGuards())
-			{
-				if (_actor.isInsideRadius(guard, guard.getFactionRange(), false, true) && Math.abs(_attacker.getZ() - guard.getZ()) < 200)
-				{
-					guard.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, _attacker, 15);
-				}
-			}
-			for (L2FortSiegeGuardInstance guard : _door.getKnownFortSiegeGuards())
+			for (L2DefenderInstance guard : _door.getKnownDefenders())
 			{
 				if (_actor.isInsideRadius(guard, guard.getFactionRange(), false, true) && Math.abs(_attacker.getZ() - guard.getZ()) < 200)
 				{

+ 38 - 37
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2FortSiegeGuardAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java

@@ -12,36 +12,37 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
 import java.util.concurrent.Future;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.GameTimeController;
-import net.sf.l2j.gameserver.GeoData;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.model.L2Effect;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Attackable;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.model.actor.L2Playable;
-import net.sf.l2j.gameserver.model.actor.L2Summon;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2FortBallistaInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2FortCommanderInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2FortSiegeGuardInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.templates.skills.L2SkillType;
-import net.sf.l2j.gameserver.util.Util;
-import net.sf.l2j.util.Rnd;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.GeoData;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2DefenderInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2FortBallistaInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2FortCommanderInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.templates.skills.L2SkillType;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
 
 /**
  * This class manages AI of L2Attackable.<BR><BR>
@@ -127,7 +128,7 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 	private boolean autoAttackCondition(L2Character target)
 	{
 		// Check if the target isn't another guard, folk or a door
-		if (target == null || target instanceof L2FortSiegeGuardInstance || target instanceof L2NpcInstance || target instanceof L2DoorInstance
+		if (target == null || target instanceof L2DefenderInstance || target instanceof L2NpcInstance || target instanceof L2DoorInstance
 				|| target.isAlikeDead() || target instanceof L2FortBallistaInstance || target instanceof L2FortCommanderInstance
 				|| target instanceof L2Playable)
 		{
@@ -318,8 +319,8 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 		// Order to the L2SiegeGuardInstance to return to its home location because there's no target to attack
 		if (_actor.getWalkSpeed() >= 0)
 		{
-			if (_actor instanceof L2FortSiegeGuardInstance)
-				((L2FortSiegeGuardInstance) _actor).returnHome();
+			if (_actor instanceof L2DefenderInstance)
+				((L2DefenderInstance) _actor).returnHome();
 			else
 				((L2FortCommanderInstance) _actor).returnHome();
 		}
@@ -438,7 +439,7 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 			
 			L2Npc npc = (L2Npc) cha;
 			
-			if (faction_id != npc.getFactionId())
+			if (!faction_id.equals(npc.getFactionId()))
 				continue;
 			
 			if (npc.getAI() != null) // TODO: possibly check not needed
@@ -489,11 +490,11 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 		L2Skill[] skills = null;
 		double dist_2 = 0;
 		int range = 0;
-		L2FortSiegeGuardInstance sGuard;
-		if (_actor instanceof L2FortSiegeGuardInstance)
-			sGuard = (L2FortSiegeGuardInstance) _actor;
-		else
+		L2DefenderInstance sGuard;
+		if (_actor instanceof L2FortCommanderInstance)
 			sGuard = (L2FortCommanderInstance) _actor;
+		else
+			sGuard = (L2DefenderInstance) _actor;
 		L2Character attackTarget = getAttackTarget();
 		
 		try
@@ -822,11 +823,11 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 				if (!_actor.isRunning())
 					_actor.setRunning();
 				
-				L2FortSiegeGuardInstance sGuard;
-				if (_actor instanceof L2FortSiegeGuardInstance)
-					sGuard = (L2FortSiegeGuardInstance) _actor;
-				else
+				L2DefenderInstance sGuard;
+				if (_actor instanceof L2FortCommanderInstance)
 					sGuard = (L2FortCommanderInstance) _actor;
+				else
+					sGuard = (L2DefenderInstance) _actor;
 				double homeX = target.getX() - sGuard.getSpawn().getLocx();
 				double homeY = target.getY() - sGuard.getSpawn().getLocy();
 				

+ 9 - 8
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2NpcWalkerAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2NpcWalkerAI.java

@@ -12,16 +12,17 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.NpcWalkerRoutesTable;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2NpcWalkerNode;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2NpcWalkerInstance;
 
 import javolution.util.FastList;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2NpcWalkerNode;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.instance.L2NpcWalkerInstance;
 
 public class L2NpcWalkerAI extends L2CharacterAI implements Runnable
 {

+ 156 - 0
L2_GameServer/java/com/l2jserver/gameserver/ai/L2PlayableAI.java

@@ -0,0 +1,156 @@
+/*
+ * 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 com.l2jserver.gameserver.ai;
+
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.L2Character.AIAccessor;
+
+import com.l2jserver.gameserver.network.SystemMessageId;
+
+/**
+ * 
+ * This class manages AI of L2Playable.<BR><BR>
+ *
+ * L2PlayableAI :<BR><BR>
+ * <li>L2SummonAI</li>
+ * <li>L2PlayerAI</li>
+ * <BR> <BR>
+ * 
+ * @author  JIV
+ */
+public abstract class L2PlayableAI extends L2CharacterAI
+{
+
+	/**
+     * @param accessor
+     */
+    public L2PlayableAI(AIAccessor accessor)
+    {
+	    super(accessor);
+    }
+    
+    
+    /**
+     * @see com.l2jserver.gameserver.ai.L2CharacterAI#onIntentionAttack(com.l2jserver.gameserver.model.actor.L2Character)
+     */
+    @Override
+    protected void onIntentionAttack(L2Character target)
+    {
+    	if (target instanceof L2Playable)
+		{
+			if (target.getActingPlayer().getProtectionBlessing()
+			        && (_actor.getActingPlayer().getLevel() - target.getActingPlayer().getLevel()) >= 10
+			        && _actor.getActingPlayer().getKarma() > 0
+			        && !(target.isInsideZone(L2Character.ZONE_PVP)))
+			{
+				// If attacker have karma and have level >= 10 than his target and target have
+				// Newbie Protection Buff,
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				return;
+			}
+			
+			if (_actor.getActingPlayer().getProtectionBlessing()
+			        && (target.getActingPlayer().getLevel() - _actor.getActingPlayer().getLevel()) >= 10
+			        && target.getActingPlayer().getKarma() > 0
+			        && !(target.isInsideZone(L2Character.ZONE_PVP)))
+			{
+				// If target have karma and have level >= 10 than his target and actor have
+				// Newbie Protection Buff,
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				return;
+			}
+			
+			if (target.getActingPlayer().isCursedWeaponEquipped()
+			        && _actor.getActingPlayer().getLevel() <= 20)
+			{
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				return;
+			}
+			
+			if (_actor.getActingPlayer().isCursedWeaponEquipped()
+			        && target.getActingPlayer().getLevel() <= 20)
+			{
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				return;
+			}
+		}
+    	
+        super.onIntentionAttack(target);
+    }
+    
+    /**
+     * @see com.l2jserver.gameserver.ai.L2CharacterAI#onIntentionCast(com.l2jserver.gameserver.model.L2Skill, com.l2jserver.gameserver.model.L2Object)
+     */
+    @Override
+    protected void onIntentionCast(L2Skill skill, L2Object target)
+    {
+    	if (target instanceof L2Playable && skill.isOffensive())
+		{
+			if (target.getActingPlayer().getProtectionBlessing()
+			        && (_actor.getActingPlayer().getLevel() - target.getActingPlayer().getLevel()) >= 10
+			        && _actor.getActingPlayer().getKarma() > 0
+			        && !(((L2Playable) target).isInsideZone(L2Character.ZONE_PVP)))
+			{
+				// If attacker have karma and have level >= 10 than his target and target have
+				// Newbie Protection Buff,
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				_actor.setIsCastingNow(false);
+				return;
+			}
+			
+			if (_actor.getActingPlayer().getProtectionBlessing()
+			        && (target.getActingPlayer().getLevel() - _actor.getActingPlayer().getLevel()) >= 10
+			        && target.getActingPlayer().getKarma() > 0
+			        && !(((L2Playable) target).isInsideZone(L2Character.ZONE_PVP)))
+			{
+				// If target have karma and have level >= 10 than his target and actor have
+				// Newbie Protection Buff,
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				_actor.setIsCastingNow(false);
+				return;
+			}
+			
+			if (target.getActingPlayer().isCursedWeaponEquipped()
+			        && _actor.getActingPlayer().getLevel() <= 20)
+			{
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				_actor.setIsCastingNow(false);
+				return;
+			}
+			
+			if (_actor.getActingPlayer().isCursedWeaponEquipped()
+			        && target.getActingPlayer().getLevel() <= 20)
+			{
+				_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
+				clientActionFailed();
+				_actor.setIsCastingNow(false);
+				return;
+			}
+		}
+    	
+        super.onIntentionCast(skill, target);
+    }
+	
+}

+ 21 - 24
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2PlayerAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2PlayerAI.java

@@ -12,26 +12,27 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_CAST;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_INTERACT;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_MOVE_TO;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_PICK_UP;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_REST;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2CharPosition;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Character.AIAccessor;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2StaticObjectInstance;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_CAST;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_INTERACT;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_MOVE_TO;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_PICK_UP;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_REST;
 
-public class L2PlayerAI extends L2CharacterAI
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Character.AIAccessor;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
+
+public class L2PlayerAI extends L2PlayableAI
 {
 	
 	private boolean _thinking; // to prevent recursive thinking
@@ -246,9 +247,7 @@ public class L2PlayerAI extends L2CharacterAI
 		}
 		if (maybeMoveToPawn(target, _actor.getPhysicalAttackRange()))
 			return;
-		// stop invul effect if exist
-		if (_actor.getInvulEffect() != null)
-			_actor.getInvulEffect().exit();
+
 		_accessor.doAttack(target);
 	}
 	
@@ -287,9 +286,7 @@ public class L2PlayerAI extends L2CharacterAI
 		
 		if (_skill.getHitTime() > 50)
 			clientStopMoving(null);
-		// stop invul effect if exist
-		if (_actor.getInvulEffect() != null)
-			_actor.getInvulEffect().exit();
+
 		L2Object oldTarget = _actor.getTarget();
 		if (oldTarget != null && target != null && oldTarget != target)
 		{

+ 30 - 29
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2SiegeGuardAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java

@@ -12,33 +12,34 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
 import java.util.concurrent.Future;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.GameTimeController;
-import net.sf.l2j.gameserver.GeoData;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.model.L2Effect;
-import net.sf.l2j.gameserver.model.L2Object;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.actor.L2Attackable;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
-import net.sf.l2j.gameserver.model.actor.L2Playable;
-import net.sf.l2j.gameserver.model.actor.L2Summon;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance;
-import net.sf.l2j.gameserver.templates.skills.L2SkillType;
-import net.sf.l2j.gameserver.util.Util;
-import net.sf.l2j.util.Rnd;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.GeoData;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2Effect;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2DefenderInstance;
+import com.l2jserver.gameserver.templates.skills.L2SkillType;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
 
 /**
  * This class manages AI of L2Attackable.<BR><BR>
@@ -126,7 +127,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 	private boolean autoAttackCondition(L2Character target)
 	{
 		// Check if the target isn't another guard, folk or a door
-		if (target == null || target instanceof L2SiegeGuardInstance || target instanceof L2NpcInstance || target instanceof L2DoorInstance
+		if (target == null || target instanceof L2DefenderInstance || target instanceof L2NpcInstance || target instanceof L2DoorInstance
 				|| target.isAlikeDead())
 			return false;
 		
@@ -305,8 +306,8 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 			}
 			
 		}
-		// Order to the L2SiegeGuardInstance to return to its home location because there's no target to attack
-		((L2SiegeGuardInstance) _actor).returnHome();
+		// Order to the L2DefenderInstance to return to its home location because there's no target to attack
+		((L2DefenderInstance) _actor).returnHome();
 	}
 	
 	/**
@@ -422,7 +423,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 			
 			L2Npc npc = (L2Npc) cha;
 			
-			if (faction_id != npc.getFactionId())
+			if (!faction_id.equals(npc.getFactionId()))
 				continue;
 			
 			if (npc.getAI() != null) // TODO: possibly check not needed
@@ -473,7 +474,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 		L2Skill[] skills = null;
 		double dist_2 = 0;
 		int range = 0;
-		L2SiegeGuardInstance sGuard = (L2SiegeGuardInstance) _actor;
+		L2DefenderInstance sGuard = (L2DefenderInstance) _actor;
 		L2Character attackTarget = getAttackTarget();
 		
 		try
@@ -801,7 +802,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 				if (!_actor.isRunning())
 					_actor.setRunning();
 				
-				L2SiegeGuardInstance sGuard = (L2SiegeGuardInstance) _actor;
+				L2DefenderInstance sGuard = (L2DefenderInstance) _actor;
 				double homeX = target.getX() - sGuard.getSpawn().getLocx();
 				double homeY = target.getY() - sGuard.getSpawn().getLocy();
 				

+ 11 - 8
L2_GameServer/java/net/sf/l2j/gameserver/ai/L2SummonAI.java → L2_GameServer/java/com/l2jserver/gameserver/ai/L2SummonAI.java

@@ -12,16 +12,17 @@
  * 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 net.sf.l2j.gameserver.ai;
+package com.l2jserver.gameserver.ai;
 
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
-import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
-import net.sf.l2j.gameserver.model.actor.L2Summon;
-import net.sf.l2j.gameserver.model.actor.L2Character.AIAccessor;
-import net.sf.l2j.gameserver.model.actor.instance.L2MerchantSummonInstance;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
+import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
-public class L2SummonAI extends L2CharacterAI
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.L2Character.AIAccessor;
+import com.l2jserver.gameserver.model.actor.instance.L2MerchantSummonInstance;
+
+public class L2SummonAI extends L2PlayableAI
 {
 	
 	private boolean _thinking; // to prevent recursive thinking
@@ -163,6 +164,8 @@ public class L2SummonAI extends L2CharacterAI
 			case AI_INTENTION_ACTIVE:
 			case AI_INTENTION_FOLLOW:
 			case AI_INTENTION_IDLE:
+			case AI_INTENTION_MOVE_TO: 
+			case AI_INTENTION_PICK_UP: 
 				((L2Summon) _actor).setFollowStatus(_startFollow);
 		}
 	}

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiEvent.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiEvent.java

@@ -12,9 +12,9 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
-import net.sf.l2j.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Character;
 
 public class AiEvent
 {

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiEventType.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiEventType.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 /**
  *

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiInstance.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiInstance.java

@@ -12,14 +12,15 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
+import com.l2jserver.gameserver.TaskPriority;
+
 import javolution.util.FastMap;
-import net.sf.l2j.gameserver.TaskPriority;
 
 /**
  *

+ 9 - 6
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiManager.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiManager.java

@@ -12,7 +12,9 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
+
+import gnu.trove.TIntObjectHashMap;
 
 import java.io.File;
 import java.io.IOException;
@@ -23,11 +25,12 @@ import java.util.Set;
 import java.util.jar.JarFile;
 import java.util.logging.Logger;
 
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.ai2.AiInstance.QueueEventRunner;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
 import javolution.util.FastSet;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.ai2.AiInstance.QueueEventRunner;
 
 /**
  * This class will load all the AI's and retain all of them.
@@ -39,7 +42,7 @@ public class AiManager
 {
 	protected static final Logger _log = Logger.getLogger(AiManager.class.getName());
 	private List<AiInstance> _aiList;
-	private Map<Integer, AiInstance> _aiMap;
+	private TIntObjectHashMap<AiInstance> _aiMap;
 	private ThreadPoolManager _tpm;
 	private Map<String, String> _paramcache;
 	
@@ -51,7 +54,7 @@ public class AiManager
 	private AiManager()
 	{
 		_aiList = new FastList<AiInstance>();
-		_aiMap = new FastMap<Integer, AiInstance>();
+		_aiMap = new TIntObjectHashMap<AiInstance>();
 		_tpm = ThreadPoolManager.getInstance();
 		_paramcache = new FastMap<String, String>();
 		load();
@@ -78,7 +81,7 @@ public class AiManager
 				{
 					try
 					{
-						Class<?> managerClass = Class.forName("net.sf.l2j.gameserver.ai.managers." + file.substring(0, file.length() - 6));
+						Class<?> managerClass = Class.forName("com.l2jserver.gameserver.ai.managers." + file.substring(0, file.length() - 6));
 						Object managerObject = managerClass.newInstance();
 						if (!(managerObject instanceof ISpecificAiManager))
 						{

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiParameters.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiParameters.java

@@ -12,16 +12,17 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.PriorityBlockingQueue;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+
 import javolution.util.FastList;
-import net.sf.l2j.gameserver.model.actor.L2Character;
-import net.sf.l2j.gameserver.model.actor.L2Npc;
 
 /**
  *

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiPlugingParameters.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiPlugingParameters.java

@@ -12,12 +12,13 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.Set;
 
+import com.l2jserver.gameserver.datatables.NpcTable;
+
 import javolution.util.FastSet;
-import net.sf.l2j.gameserver.datatables.NpcTable;
 
 /**
  *

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai2/AiUtil.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/AiUtil.java

@@ -12,9 +12,9 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
-import net.sf.l2j.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Character;
 
 public class AiUtil
 {

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/ai2/EventHandler.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/EventHandler.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.logging.Logger;
 

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/ai2/EventHandlerSet.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/EventHandlerSet.java

@@ -12,12 +12,13 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.List;
 
+import com.l2jserver.gameserver.TaskPriority;
+
 import javolution.util.FastList;
-import net.sf.l2j.gameserver.TaskPriority;
 
 /**
  *

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/ai2/ISpecificAiManager.java → L2_GameServer/java/com/l2jserver/gameserver/ai2/ISpecificAiManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.ai2;
+package com.l2jserver.gameserver.ai2;
 
 import java.util.List;
 

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/cache/CrestCache.java → L2_GameServer/java/com/l2jserver/gameserver/cache/CrestCache.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.cache;
+package com.l2jserver.gameserver.cache;
 
 import java.io.File;
 import java.io.FileFilter;
@@ -25,12 +25,13 @@ import java.sql.SQLException;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.model.L2Clan;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.datatables.ClanTable;
-import net.sf.l2j.gameserver.idfactory.IdFactory;
-import net.sf.l2j.gameserver.model.L2Clan;
 
 /**
  * @author Layane

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/cache/FastMRUCache.java → L2_GameServer/java/com/l2jserver/gameserver/cache/FastMRUCache.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.cache;
+package com.l2jserver.gameserver.cache;
 
 import javolution.context.ObjectFactory;
 import javolution.lang.Reusable;

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/cache/HtmCache.java → L2_GameServer/java/com/l2jserver/gameserver/cache/HtmCache.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.cache;
+package com.l2jserver.gameserver.cache;
 
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -20,9 +20,10 @@ import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.util.Util;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.util.Util;
 
 /**
  * @author Layane

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/cache/WarehouseCacheManager.java → L2_GameServer/java/com/l2jserver/gameserver/cache/WarehouseCacheManager.java

@@ -12,12 +12,13 @@
  * 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 net.sf.l2j.gameserver.cache;
+package com.l2jserver.gameserver.cache;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 
 /**
  *

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/BB/Forum.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Forum.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.BB;
+package com.l2jserver.gameserver.communitybbs.BB;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -21,11 +21,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
 
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.communitybbs.Manager.ForumsBBSManager;
+import com.l2jserver.gameserver.communitybbs.Manager.TopicBBSManager;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
-import net.sf.l2j.gameserver.communitybbs.Manager.TopicBBSManager;
 
 public class Forum
 {
@@ -56,8 +57,8 @@ public class Forum
 	
 	/**
 	 * Creates new instance of Forum. When you create new forum, use
-	 * {@link net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager#
-	 * addForum(net.sf.l2j.gameserver.communitybbs.BB.Forum)} to add forum
+	 * {@link com.l2jserver.gameserver.communitybbs.Manager.ForumsBBSManager#
+	 * addForum(com.l2jserver.gameserver.communitybbs.BB.Forum)} to add forum
 	 * to the forums manager.
 	 *
 	 * @param i

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/BB/Post.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Post.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.BB;
+package com.l2jserver.gameserver.communitybbs.BB;
 
 
 import java.sql.Connection;
@@ -21,9 +21,10 @@ import java.sql.ResultSet;
 import java.util.List;
 import java.util.logging.Logger;
 
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.communitybbs.Manager.PostBBSManager;
+
 import javolution.util.FastList;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.communitybbs.Manager.PostBBSManager;
 
 /**
  * @author Maktakien

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/BB/Topic.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/BB/Topic.java

@@ -12,14 +12,15 @@
  * 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 net.sf.l2j.gameserver.communitybbs.BB;
+package com.l2jserver.gameserver.communitybbs.BB;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.logging.Logger;
 
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.communitybbs.Manager.TopicBBSManager;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.communitybbs.Manager.TopicBBSManager;
+
 
 public class Topic
 {

+ 12 - 12
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/CommunityBoard.java

@@ -12,19 +12,19 @@
  * 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 net.sf.l2j.gameserver.communitybbs;
+package com.l2jserver.gameserver.communitybbs;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.communitybbs.Manager.ClanBBSManager;
-import net.sf.l2j.gameserver.communitybbs.Manager.PostBBSManager;
-import net.sf.l2j.gameserver.communitybbs.Manager.RegionBBSManager;
-import net.sf.l2j.gameserver.communitybbs.Manager.TopBBSManager;
-import net.sf.l2j.gameserver.communitybbs.Manager.TopicBBSManager;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.L2GameClient;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.communitybbs.Manager.ClanBBSManager;
+import com.l2jserver.gameserver.communitybbs.Manager.PostBBSManager;
+import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
+import com.l2jserver.gameserver.communitybbs.Manager.TopBBSManager;
+import com.l2jserver.gameserver.communitybbs.Manager.TopicBBSManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 public class CommunityBoard
 {

+ 5 - 5
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/AdminBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/AdminBBSManager.java

@@ -12,10 +12,10 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
 
 public class AdminBBSManager extends BaseBBSManager
 {
@@ -33,7 +33,7 @@ public class AdminBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
@@ -61,7 +61,7 @@ public class AdminBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/BaseBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/BaseBBSManager.java

@@ -12,13 +12,14 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.util.List;
 
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+
 import javolution.util.FastList;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
 
 public abstract class BaseBBSManager
 {

+ 9 - 8
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/ClanBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/ClanBBSManager.java

@@ -12,16 +12,17 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.util.StringTokenizer;
 
-import net.sf.l2j.gameserver.datatables.ClanTable;
-import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.util.StringUtil;
+import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.util.StringUtil;
+
 
 public class ClanBBSManager extends BaseBBSManager
 {
@@ -363,7 +364,7 @@ public class ClanBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/ForumsBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/ForumsBBSManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -20,10 +20,11 @@ import java.sql.ResultSet;
 import java.util.List;
 import java.util.logging.Logger;
 
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.communitybbs.BB.Forum;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
 import javolution.util.FastList;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.communitybbs.BB.Forum;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 
 public class ForumsBBSManager extends BaseBBSManager
 {
@@ -96,7 +97,7 @@ public class ForumsBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
@@ -160,7 +161,7 @@ public class ForumsBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)

+ 11 - 10
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/PostBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.text.DateFormat;
 import java.util.Date;
@@ -20,14 +20,15 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import com.l2jserver.gameserver.communitybbs.BB.Forum;
+import com.l2jserver.gameserver.communitybbs.BB.Post;
+import com.l2jserver.gameserver.communitybbs.BB.Topic;
+import com.l2jserver.gameserver.communitybbs.BB.Post.CPost;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.util.StringUtil;
+
 import javolution.util.FastMap;
-import net.sf.l2j.gameserver.communitybbs.BB.Forum;
-import net.sf.l2j.gameserver.communitybbs.BB.Post;
-import net.sf.l2j.gameserver.communitybbs.BB.Topic;
-import net.sf.l2j.gameserver.communitybbs.BB.Post.CPost;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
-import net.sf.l2j.gameserver.util.StringUtil;
 
 public class PostBBSManager extends BaseBBSManager
 {
@@ -84,7 +85,7 @@ public class PostBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
@@ -278,7 +279,7 @@ public class PostBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)

+ 18 - 17
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/RegionBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.util.Collections;
 import java.util.Comparator;
@@ -21,20 +21,21 @@ import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameServer;
+import com.l2jserver.gameserver.model.BlockList;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.base.Experience;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.util.StringUtil;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.GameServer;
-import net.sf.l2j.gameserver.model.BlockList;
-import net.sf.l2j.gameserver.model.L2World;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.base.Experience;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.clientpackets.Say2;
-import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.util.StringUtil;
 
 public class RegionBBSManager extends BaseBBSManager
 {
@@ -46,7 +47,7 @@ public class RegionBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
@@ -176,7 +177,7 @@ public class RegionBBSManager extends BaseBBSManager
 	}
 	
 	/* (non-Javadoc)
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
@@ -368,7 +369,7 @@ public class RegionBBSManager extends BaseBBSManager
 					+ "SP Rate: x", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen + "Party SP Rate: x", String.valueOf(Config.RATE_SP
 					* Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose
 					+ trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen
-					+ "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ADENA), tdClose
+					+ "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(57)), tdClose
 					+ trClose
 					+ "</table>"
 					+ "<table>"
@@ -459,7 +460,7 @@ public class RegionBBSManager extends BaseBBSManager
 					+ trClose + trOpen + tdOpen + "SP Rate: ", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen
 					+ "Party SP Rate: ", String.valueOf(Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose
 					+ trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen
-					+ "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ADENA), tdClose
+					+ "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(57)), tdClose
 					+ trClose
 					+ "</table>"
 					+ "<table>"

+ 7 - 6
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/TopBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java

@@ -12,13 +12,14 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.util.StringTokenizer;
 
-import net.sf.l2j.gameserver.cache.HtmCache;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+
 
 public class TopBBSManager extends BaseBBSManager
 {
@@ -28,7 +29,7 @@ public class TopBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
@@ -76,7 +77,7 @@ public class TopBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)

+ 11 - 10
L2_GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/TopicBBSManager.java → L2_GameServer/java/com/l2jserver/gameserver/communitybbs/Manager/TopicBBSManager.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.communitybbs.Manager;
+package com.l2jserver.gameserver.communitybbs.Manager;
 
 import java.text.DateFormat;
 import java.util.Calendar;
@@ -21,15 +21,16 @@ import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import com.l2jserver.gameserver.communitybbs.BB.Forum;
+import com.l2jserver.gameserver.communitybbs.BB.Post;
+import com.l2jserver.gameserver.communitybbs.BB.Topic;
+import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
+import com.l2jserver.gameserver.util.StringUtil;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
-import net.sf.l2j.gameserver.communitybbs.BB.Forum;
-import net.sf.l2j.gameserver.communitybbs.BB.Post;
-import net.sf.l2j.gameserver.communitybbs.BB.Topic;
-import net.sf.l2j.gameserver.datatables.ClanTable;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.network.serverpackets.ShowBoard;
-import net.sf.l2j.gameserver.util.StringUtil;
 
 public class TopicBBSManager extends BaseBBSManager
 {
@@ -90,7 +91,7 @@ public class TopicBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
@@ -165,7 +166,7 @@ public class TopicBBSManager extends BaseBBSManager
 	
 	/**
 	 * 
-	 * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance)
+	 * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/datatables/AccessLevels.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/AccessLevels.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import gnu.trove.TIntObjectHashMap;
 
@@ -22,9 +22,10 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.model.L2AccessLevel;
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.L2AccessLevel;
+
 
 /**
  * @author FBIagent<br>

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/datatables/AdminCommandAccessRights.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/AdminCommandAccessRights.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -21,10 +21,11 @@ import java.sql.SQLException;
 import java.util.Map;
 import java.util.logging.Logger;
 
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.L2AccessLevel;
+import com.l2jserver.gameserver.model.L2AdminCommandAccessRight;
+
 import javolution.util.FastMap;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.model.L2AccessLevel;
-import net.sf.l2j.gameserver.model.L2AdminCommandAccessRight;
 
 /**
  * @author FBIagent<br>

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/datatables/ArmorSetsTable.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/ArmorSetsTable.java

@@ -17,7 +17,7 @@
  * @author godson
  */
 
-package net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import gnu.trove.TIntObjectHashMap;
 
@@ -26,9 +26,10 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Logger;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.model.L2ArmorSet;
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.L2ArmorSet;
+
 
 /**
  *

+ 9 - 8
L2_GameServer/java/net/sf/l2j/gameserver/datatables/AugmentationData.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/AugmentationData.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import gnu.trove.TIntObjectHashMap;
 
@@ -25,18 +25,19 @@ import java.util.logging.Logger;
 import javax.xml.parsers.DocumentBuilderFactory;
 
 import javolution.util.FastList;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2Augmentation;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.network.clientpackets.AbstractRefinePacket;
-import net.sf.l2j.gameserver.skills.Stats;
-import net.sf.l2j.gameserver.templates.item.L2Item;
-import net.sf.l2j.util.Rnd;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2Augmentation;
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.network.clientpackets.AbstractRefinePacket;
+import com.l2jserver.gameserver.skills.Stats;
+import com.l2jserver.gameserver.templates.item.L2Item;
+import com.l2jserver.util.Rnd;
+
 /**
  * This class manages the augmentation data and can also create new augmentations.
  *

+ 312 - 0
L2_GameServer/java/com/l2jserver/gameserver/datatables/CharNameTable.java

@@ -0,0 +1,312 @@
+/*
+ * 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 com.l2jserver.gameserver.datatables;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.logging.Logger;
+
+import javolution.util.FastMap;
+
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
+
+/**
+ * This class ...
+ *
+ * @version $Revision: 1.3.2.2.2.1 $ $Date: 2005/03/27 15:29:18 $
+ */
+public class CharNameTable
+{
+	private static Logger _log = Logger.getLogger(CharNameTable.class.getName());
+
+	private final Map<Integer, String> _chars;
+	private final Map<Integer, Integer> _accessLevels;
+
+	private CharNameTable()
+	{
+		_chars = new FastMap<Integer, String>();
+		_accessLevels = new FastMap<Integer, Integer>();
+		if (Config.CACHE_CHAR_NAMES)
+			loadAll();
+	}
+	
+	public static CharNameTable getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+
+	public final void addName(L2PcInstance player)
+	{
+		if (player != null)
+		{
+			addName(player.getObjectId(), player.getName());
+			_accessLevels.put(player.getObjectId(), player.getAccessLevel().getLevel());
+		}
+	}
+
+	public final void addName(int objId, String name)
+	{
+		if (name != null)
+		{
+			if (!name.equalsIgnoreCase(_chars.get(objId)))
+				_chars.put(objId, name);
+		}
+	}
+
+	public final void removeName(int objId)
+	{
+		_chars.remove(objId);
+	}
+
+	public final int getIdByName(String name)
+	{
+		Iterator<Entry<Integer, String>> it = _chars.entrySet().iterator();
+		while (it.hasNext())
+		{
+			Map.Entry<Integer, String> pair = it.next();
+			if (pair.getValue().equalsIgnoreCase(name))
+				return pair.getKey();
+		}
+		
+		if (Config.CACHE_CHAR_NAMES)
+			return -1;
+
+		int id = -1;
+		int accessLevel = 0;
+		Connection con = null;
+		PreparedStatement statement = null;
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			statement = con.prepareStatement("SELECT charId,accesslevel FROM characters WHERE char_name=?");
+			statement.setString(1, name);
+			ResultSet rset = statement.executeQuery();
+			while (rset.next())
+			{
+				id = rset.getInt(1);
+				accessLevel = rset.getInt(2);
+			}
+			rset.close();
+		}
+		catch (SQLException e)
+		{
+			_log.warning("could not check existing char name:" + e.getMessage());
+		}
+		finally
+		{
+			try
+			{
+				statement.close();
+			}
+			catch (Exception e) {}
+			try
+			{
+				con.close();
+			}
+			catch (Exception e) {}
+		}
+		if (id > 0)
+		{
+			_chars.put(id, name);
+			_accessLevels.put(id, accessLevel);
+		}
+
+		return id;
+	}
+
+	public final String getNameById(int id)
+	{
+		String name = _chars.get(id);
+		if (name != null)
+			return name;
+
+		if (Config.CACHE_CHAR_NAMES)
+			return null;
+		
+		int accessLevel = 0;
+		Connection con = null;
+		PreparedStatement statement = null;
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			statement = con.prepareStatement("SELECT char_name,accesslevel FROM characters WHERE charId=?");
+			statement.setInt(1, id);
+			ResultSet rset = statement.executeQuery();
+			while (rset.next())
+			{
+				name = rset.getString(1);
+				accessLevel = rset.getInt(2);
+			}
+			rset.close();
+		}
+		catch (SQLException e)
+		{
+			_log.warning("could not check existing char id:" + e.getMessage());
+		}
+		finally
+		{
+			try
+			{
+				statement.close();
+			}
+			catch (Exception e) {}
+			try
+			{
+				con.close();
+			}
+			catch (Exception e) {}
+		}
+		if (name != null && !name.isEmpty())
+		{
+			_chars.put(id, name);
+			_accessLevels.put(id, accessLevel);
+		}
+
+		return name;
+	}
+
+	public final int getAccessLevelById(int objectId)
+	{
+		if (getNameById(objectId) != null)
+			return _accessLevels.get(objectId);
+		else
+			return 0;
+	}
+
+	public synchronized boolean doesCharNameExist(String name)
+	{
+		boolean result = true;
+		Connection con = null;
+		
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement statement = con.prepareStatement("SELECT account_name FROM characters WHERE char_name=?");
+			statement.setString(1, name);
+			ResultSet rset = statement.executeQuery();
+			result = rset.next();
+			rset.close();
+			statement.close();
+		}
+		catch (SQLException e)
+		{
+			_log.warning("could not check existing charname:" + e.getMessage());
+		}
+		finally
+		{
+			try
+			{
+				con.close();
+			}
+			catch (Exception e)
+			{
+			}
+		}
+		return result;
+	}
+	
+	public int accountCharNumber(String account)
+	{
+		Connection con = null;
+		int number = 0;
+		
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement statement = con.prepareStatement("SELECT COUNT(char_name) FROM characters WHERE account_name=?");
+			statement.setString(1, account);
+			ResultSet rset = statement.executeQuery();
+			while (rset.next())
+			{
+				number = rset.getInt(1);
+			}
+			rset.close();
+			statement.close();
+		}
+		catch (SQLException e)
+		{
+			_log.warning("could not check existing char number:" + e.getMessage());
+		}
+		finally
+		{
+			try
+			{
+				con.close();
+			}
+			catch (Exception e)
+			{
+			}
+		}
+		
+		return number;
+	}
+	
+	private void loadAll()
+	{
+		String name;
+		int id = -1;
+		int accessLevel = 0;
+		PreparedStatement statement = null;
+		Connection con = null;
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			statement = con.prepareStatement("SELECT charId,char_name,accesslevel FROM characters");
+			ResultSet rset = statement.executeQuery();
+			while (rset.next())
+			{
+				id = rset.getInt(1);
+				name = rset.getString(2);
+				accessLevel = rset.getInt(3);
+				_chars.put(id, name);
+				_accessLevels.put(id, accessLevel);
+			}
+			rset.close();
+		}
+		catch (SQLException e)
+		{
+			_log.warning("could not load char name: " + e.getMessage());
+		}
+		finally
+		{
+			try
+			{
+				statement.close();
+			}
+			catch (Exception e)
+			{}
+			try
+			{
+				con.close();
+			}
+			catch (Exception e)
+			{}
+		}
+	}
+	
+	@SuppressWarnings("synthetic-access")
+	private static class SingletonHolder
+	{
+		protected static final CharNameTable _instance = new CharNameTable();
+	}
+}

+ 10 - 10
L2_GameServer/java/net/sf/l2j/gameserver/datatables/CharTemplateTable.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/CharTemplateTable.java

@@ -12,21 +12,21 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
+
+import gnu.trove.TIntObjectHashMap;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import javolution.util.FastMap;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.model.base.ClassId;
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.templates.chars.L2PcTemplate;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.base.ClassId;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.templates.chars.L2PcTemplate;
 
 /**
  * This class ...
@@ -37,7 +37,7 @@ public class CharTemplateTable
 {
 	private static final Logger LOG = Logger.getLogger(CharTemplateTable.class.getName());
 	
-	private final Map<Integer, L2PcTemplate> _templates = new FastMap<Integer, L2PcTemplate>();
+	private final TIntObjectHashMap<L2PcTemplate> _templates = new TIntObjectHashMap<L2PcTemplate>();
 	
 	public static CharTemplateTable getInstance()
 	{
@@ -146,9 +146,9 @@ public class CharTemplateTable
 				{
 					if (classId == -1)
 					{
-						for (L2PcTemplate pct : _templates.values())
+						for (Object pct : _templates.getValues())
 						{
-							pct.addItem(itemId, amount, equipped);
+							((L2PcTemplate) pct).addItem(itemId, amount, equipped);
 						}
 					}
 					else

+ 27 - 22
L2_GameServer/java/net/sf/l2j/gameserver/datatables/ClanTable.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/ClanTable.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -21,28 +21,31 @@ import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
+import com.l2jserver.gameserver.instancemanager.SiegeManager;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.L2ClanMember;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.Fort;
+import com.l2jserver.gameserver.model.entity.FortSiege;
+import com.l2jserver.gameserver.model.entity.Siege;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
+import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
+import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
+import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
+import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListAll;
+import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.util.Util;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.ThreadPoolManager;
-import net.sf.l2j.gameserver.idfactory.IdFactory;
-import net.sf.l2j.gameserver.instancemanager.FortManager;
-import net.sf.l2j.gameserver.instancemanager.FortSiegeManager;
-import net.sf.l2j.gameserver.instancemanager.SiegeManager;
-import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.L2ClanMember;
-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
-import net.sf.l2j.gameserver.model.entity.Fort;
-import net.sf.l2j.gameserver.model.entity.FortSiege;
-import net.sf.l2j.gameserver.model.entity.Siege;
-import net.sf.l2j.gameserver.network.SystemMessageId;
-import net.sf.l2j.gameserver.network.serverpackets.ExBrExtraUserInfo;
-import net.sf.l2j.gameserver.network.serverpackets.PledgeShowInfoUpdate;
-import net.sf.l2j.gameserver.network.serverpackets.PledgeShowMemberListAll;
-import net.sf.l2j.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
-import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.network.serverpackets.UserInfo;
-import net.sf.l2j.gameserver.util.Util;
 
 /**
  * This class ...
@@ -207,6 +210,8 @@ public class ClanTable
 		player.sendPacket(new ExBrExtraUserInfo(player));
 		player.sendPacket(new PledgeShowMemberListUpdate(player));
 		player.sendPacket(new SystemMessage(SystemMessageId.CLAN_CREATED));
+		// notify CB server that a new Clan is created
+		CommunityServerThread.getInstance().sendPacket(new WorldInfo(null, clan, WorldInfo.TYPE_UPDATE_CLAN_DATA));
 		return clan;
 	}
 	

+ 11 - 10
L2_GameServer/java/net/sf/l2j/gameserver/datatables/DoorTable.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/DoorTable.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -26,16 +26,17 @@ import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.instancemanager.ClanHallManager;
+import com.l2jserver.gameserver.instancemanager.InstanceManager;
+import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
+import com.l2jserver.gameserver.model.entity.ClanHall;
+import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
+import com.l2jserver.gameserver.templates.StatsSet;
+import com.l2jserver.gameserver.templates.chars.L2CharTemplate;
+
 import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.idfactory.IdFactory;
-import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
-import net.sf.l2j.gameserver.instancemanager.InstanceManager;
-import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
-import net.sf.l2j.gameserver.model.entity.ClanHall;
-import net.sf.l2j.gameserver.pathfinding.AbstractNodeLoc;
-import net.sf.l2j.gameserver.templates.StatsSet;
-import net.sf.l2j.gameserver.templates.chars.L2CharTemplate;
 
 public class DoorTable
 {

+ 11 - 10
L2_GameServer/java/net/sf/l2j/gameserver/datatables/EnchantHPBonusData.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/EnchantHPBonusData.java

@@ -12,7 +12,9 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
+
+import gnu.trove.TIntObjectHashMap;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,13 +30,12 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2ItemInstance;
-import net.sf.l2j.gameserver.skills.Stats;
-import net.sf.l2j.gameserver.skills.funcs.FuncTemplate;
-import net.sf.l2j.gameserver.skills.funcs.LambdaConst;
-import net.sf.l2j.gameserver.templates.item.L2Item;
-import javolution.util.FastMap;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2ItemInstance;
+import com.l2jserver.gameserver.skills.Stats;
+import com.l2jserver.gameserver.skills.funcs.FuncTemplate;
+import com.l2jserver.gameserver.skills.funcs.LambdaConst;
+import com.l2jserver.gameserver.templates.item.L2Item;
 
 /**
  *
@@ -44,8 +45,8 @@ public class EnchantHPBonusData
 {
 	protected static final Logger _log = Logger.getLogger(EnchantHPBonusData.class.getName());
 
-	private final FastMap<Integer,Integer[]> _singleArmorHPBonus = new FastMap<Integer, Integer[]>();
-	private final FastMap<Integer,Integer[]> _fullArmorHPBonus = new FastMap<Integer, Integer[]>();
+	private final TIntObjectHashMap<Integer[]> _singleArmorHPBonus = new TIntObjectHashMap<Integer[]>();
+	private final TIntObjectHashMap<Integer[]> _fullArmorHPBonus = new TIntObjectHashMap<Integer[]>();
 
 	public static final EnchantHPBonusData getInstance()
 	{

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/datatables/EventDroplist.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/EventDroplist.java

@@ -12,13 +12,14 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import java.util.Date;
 import java.util.List;
 
+import com.l2jserver.gameserver.script.DateRange;
+
 import javolution.util.FastList;
-import net.sf.l2j.gameserver.script.DateRange;
 
 /**
  * This class manage drop of Special Events created by GM for a defined period.

+ 9 - 7
L2_GameServer/java/net/sf/l2j/gameserver/datatables/ExtractableItemsData.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/ExtractableItemsData.java

@@ -19,23 +19,25 @@
  *
  */
 
-package net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
+
+import gnu.trove.TIntObjectHashMap;
 
 import java.io.File;
 import java.util.Scanner;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2ExtractableItem;
+import com.l2jserver.gameserver.model.L2ExtractableProductItem;
+
 import javolution.util.FastList;
-import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2ExtractableItem;
-import net.sf.l2j.gameserver.model.L2ExtractableProductItem;
 
 public class ExtractableItemsData
 {
 	protected static final Logger _log = Logger.getLogger(ExtractableItemsData.class.getName());
 	//          Map<itemid, L2ExtractableItem>
-	private FastMap<Integer, L2ExtractableItem> _items;
+	private TIntObjectHashMap<L2ExtractableItem> _items;
 	
 	public static ExtractableItemsData getInstance()
 	{
@@ -44,7 +46,7 @@ public class ExtractableItemsData
 	
 	public ExtractableItemsData()
 	{
-		_items = new FastMap<Integer, L2ExtractableItem>();
+		_items = new TIntObjectHashMap<L2ExtractableItem>();
 		
 		Scanner s;
 		

+ 9 - 8
L2_GameServer/java/net/sf/l2j/gameserver/datatables/ExtractableSkillsData.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/ExtractableSkillsData.java

@@ -19,25 +19,26 @@
  *
  */
 
-package net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
+
+import gnu.trove.TIntObjectHashMap;
 
 import java.io.File;
-import java.util.Map;
 import java.util.Scanner;
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.L2ExtractableProductItem;
+import com.l2jserver.gameserver.model.L2ExtractableSkill;
+import com.l2jserver.gameserver.model.L2Skill;
+
 import javolution.util.FastList;
-import javolution.util.FastMap;
-import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.model.L2ExtractableProductItem;
-import net.sf.l2j.gameserver.model.L2Skill;
-import net.sf.l2j.gameserver.model.L2ExtractableSkill;
 
 public class ExtractableSkillsData
 {
 	protected static final Logger _log = Logger.getLogger(ExtractableSkillsData.class.getName());
 	//          Map<FastMap<itemid, skill>, L2ExtractableItem>
-	private Map<Integer, L2ExtractableSkill> _items = new FastMap<Integer, L2ExtractableSkill>();
+	private TIntObjectHashMap<L2ExtractableSkill> _items = new TIntObjectHashMap<L2ExtractableSkill>();
 	
 	public static ExtractableSkillsData getInstance()
 	{

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/datatables/FishTable.java → L2_GameServer/java/com/l2jserver/gameserver/datatables/FishTable.java

@@ -12,7 +12,7 @@
  * 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 net.sf.l2j.gameserver.datatables;
+package com.l2jserver.gameserver.datatables;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -21,9 +21,10 @@ import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.FishData;
+
 import javolution.util.FastList;
-import net.sf.l2j.L2DatabaseFactory;
-import net.sf.l2j.gameserver.model.FishData;
 
 /**
  * @author -Nemesiss-

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor