ソースを参照

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 年 前
コミット
3a9f16fdb1
100 ファイル変更4631 行追加1160 行削除
  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-

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません