Przeglądaj źródła

Merge branch 'master' into refactor/StatusChangeDisplay

Aleos 7 lat temu
rodzic
commit
8807632e4a
100 zmienionych plików z 7474 dodań i 3676 usunięć
  1. 4 4
      .travis.yml
  2. 2 2
      3rdparty/yaml-cpp/src/contrib/graphbuilderadapter.h
  3. 1 1
      3rdparty/yaml-cpp/src/parse.cpp
  4. 4 4
      3rdparty/yaml-cpp/src/singledocparser.cpp
  5. 4 4
      3rdparty/yaml-cpp/yaml-cpp.vcxproj
  6. 4 4
      Makefile.in
  7. 3 0
      README.md
  8. 0 52
      conf/battle/client.conf
  9. 4 0
      conf/battle/feature.conf
  10. 4 0
      conf/battle/guild.conf
  11. 1 2
      conf/help.txt
  12. 0 0
      conf/import-tmpl/inter_server.conf
  13. 17 0
      conf/import-tmpl/inter_server.yml
  14. 1 1
      conf/inter_athena.conf
  15. 0 26
      conf/inter_server.conf
  16. 34 0
      conf/inter_server.yml
  17. 0 6
      conf/login_athena.conf
  18. 5 0
      conf/msg_conf/char_msg.conf
  19. 8 3
      conf/msg_conf/map_msg.conf
  20. 1 2
      conf/msg_conf/map_msg_chn.conf
  21. 1 2
      conf/msg_conf/map_msg_frn.conf
  22. 1 2
      conf/msg_conf/map_msg_idn.conf
  23. 1 2
      conf/msg_conf/map_msg_rus.conf
  24. 1 2
      conf/msg_conf/map_msg_tha.conf
  25. 118 0
      conf/readme.md
  26. 0 22
      conf/readme.txt
  27. 1 1
      configure
  28. 1 0
      configure.in
  29. 10 0
      db/const.txt
  30. 80 0
      db/import-tmpl/achievement_db.yml
  31. 6 4
      db/import-tmpl/item_flag.txt
  32. 0 35
      db/import-tmpl/packet_db.txt
  33. 0 2675
      db/packet_db.txt
  34. 2407 0
      db/pre-re/achievement_db.yml
  35. 1 0
      db/pre-re/item_flag.txt
  36. 2407 0
      db/re/achievement_db.yml
  37. 1 0
      db/re/instance_db.txt
  38. 119 97
      db/re/item_db.txt
  39. 6 0
      db/re/item_flag.txt
  40. 1 1
      db/re/item_trade.txt
  41. 63 14
      db/re/mob_db.txt
  42. 4 4
      db/re/mob_drop.txt
  43. 48 0
      db/re/mob_skill_db.txt
  44. 4 0
      db/re/quest_db.txt
  45. 106 0
      db/readme.md
  46. 102 0
      doc/achievements.txt
  47. 4 4
      doc/atcommands.txt
  48. 27 8
      doc/packet_interserv.txt
  49. 127 24
      doc/script_commands.txt
  50. 1 1
      npc/custom/quests/hunting_missions.txt
  51. 2 7
      npc/custom/resetnpc.txt
  52. 6 13
      npc/merchants/old_pharmacist.txt
  53. 3 3
      npc/quests/quests_moscovia.txt
  54. 10 4
      npc/re/custom/lasagna/lasagna_npcs.txt
  55. 2 1
      npc/re/guides/navigation.txt
  56. 991 0
      npc/re/instances/GhostPalace.txt
  57. 278 0
      npc/re/other/achievements.txt
  58. 1 2
      npc/re/quests/quests_eclage.txt
  59. 2 0
      npc/re/scripts_athena.conf
  60. 10 0
      rAthena.sln
  61. 119 97
      sql-files/item_db_re.sql
  62. 25 0
      sql-files/main.sql
  63. 63 14
      sql-files/mob_db_re.sql
  64. 0 1
      sql-files/upgrades/upgrade_20140104.sql
  65. 0 20
      sql-files/upgrades/upgrade_20140114.sql
  66. 0 21
      sql-files/upgrades/upgrade_20140205.sql
  67. 0 1
      sql-files/upgrades/upgrade_20140523.sql
  68. 0 118
      sql-files/upgrades/upgrade_20140612.sql
  69. 0 12
      sql-files/upgrades/upgrade_20140612_log.sql
  70. 0 6
      sql-files/upgrades/upgrade_20140616.sql
  71. 0 1
      sql-files/upgrades/upgrade_20140627.sql
  72. 0 1
      sql-files/upgrades/upgrade_20140713_log.sql
  73. 0 7
      sql-files/upgrades/upgrade_20140723.sql
  74. 0 1
      sql-files/upgrades/upgrade_20140822.sql
  75. 0 1
      sql-files/upgrades/upgrade_20140826.sql
  76. 0 1
      sql-files/upgrades/upgrade_20140915.sql
  77. 0 1
      sql-files/upgrades/upgrade_20140915_log.sql
  78. 0 1
      sql-files/upgrades/upgrade_20150103_log.sql
  79. 0 6
      sql-files/upgrades/upgrade_20150131.sql
  80. 0 6
      sql-files/upgrades/upgrade_20150211_skillset.sql
  81. 0 12
      sql-files/upgrades/upgrade_20150327_market.sql
  82. 0 9
      sql-files/upgrades/upgrade_20150408.sql
  83. 0 1
      sql-files/upgrades/upgrade_20150408_log.sql
  84. 0 68
      sql-files/upgrades/upgrade_20150619.sql
  85. 0 1
      sql-files/upgrades/upgrade_20150619_log.sql
  86. 0 1
      sql-files/upgrades/upgrade_20150804_log.sql
  87. 0 1
      sql-files/upgrades/upgrade_20150828.sql
  88. 0 66
      sql-files/upgrades/upgrade_20150831.sql
  89. 0 1
      sql-files/upgrades/upgrade_20150917_log.sql
  90. 0 19
      sql-files/upgrades/upgrade_20151230_log.sql
  91. 25 0
      sql-files/upgrades/upgrade_20170727.sql
  92. 2 0
      sql-files/upgrades/upgrade_20170806.sql
  93. 15 8
      src/char/Makefile.in
  94. 8 2
      src/char/char-server.vcxproj
  95. 8 2
      src/char/char-server.vcxproj.filters
  96. 66 20
      src/char/char.cpp
  97. 12 2
      src/char/char.h
  98. 75 94
      src/char/char_clif.c
  99. 4 10
      src/char/char_logif.c
  100. 2 4
      src/char/char_mapif.c

+ 4 - 4
.travis.yml

@@ -27,14 +27,15 @@ before_script:
   - mysql -u $DB_ROOT -e "GRANT ALL ON *.* TO '$DB_USER'@'$DB_HOST' IDENTIFIED BY '$DB_PASS';"
   - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
   - sudo apt-get update -q
-  - sudo apt-get install gcc-4.8 -y
-  - sudo apt-get install g++-4.8 -y
+  - sudo apt-get install gcc-5 -y
+  - sudo apt-get install g++-5 -y
+  - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 1
+  - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 1
 
 script:
   - ./configure $CONFIGURE_FLAGS
   - make clean
   - make server
-  - 'echo packet_db_ver: $PACKETDBVER >> db/import/packet_db.txt'
   - ./map-server --run-once
 
 env:
@@ -44,7 +45,6 @@ env:
     - DB_NAME="ragnarok"
     - DB_USER="ragnarok"
     - DB_PASS="ragnarok"
-    - PACKETDBVER=45
   matrix:
     - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no --enable-buildbot=yes"
     - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no --enable-buildbot=yes"

+ 2 - 2
3rdparty/yaml-cpp/src/contrib/graphbuilderadapter.h

@@ -50,8 +50,8 @@ class GraphBuilderAdapter : public EventHandler {
   struct ContainerFrame {
     ContainerFrame(void* pSequence)
         : pContainer(pSequence), pPrevKeyNode(&sequenceMarker) {}
-    ContainerFrame(void* pMap, void* pPrevKeyNode)
-        : pContainer(pMap), pPrevKeyNode(pPrevKeyNode) {}
+    ContainerFrame(void* pMap, void* pPrevKeyNode_)
+        : pContainer(pMap), pPrevKeyNode(pPrevKeyNode_) {}
 
     void* pContainer;
     void* pPrevKeyNode;

+ 1 - 1
3rdparty/yaml-cpp/src/parse.cpp

@@ -31,7 +31,7 @@ Node Load(std::istream& input) {
 
 Node LoadFile(const std::string& filename) {
   std::ifstream fin(filename.c_str());
-  if (!fin) {
+  if (!fin || fin.bad()) {
     throw BadFile();
   }
   return Load(fin);

+ 4 - 4
3rdparty/yaml-cpp/src/singledocparser.cpp

@@ -166,10 +166,10 @@ void SingleDocParser::HandleBlockSequence(EventHandler& eventHandler) {
 
     // check for null
     if (!m_scanner.empty()) {
-      const Token& token = m_scanner.peek();
-      if (token.type == Token::BLOCK_ENTRY ||
-          token.type == Token::BLOCK_SEQ_END) {
-        eventHandler.OnNull(token.mark, NullAnchor);
+      const Token& token_ = m_scanner.peek();
+      if (token_.type == Token::BLOCK_ENTRY ||
+          token_.type == Token::BLOCK_SEQ_END) {
+        eventHandler.OnNull(token_.mark, NullAnchor);
         continue;
       }
     }

+ 4 - 4
3rdparty/yaml-cpp/yaml-cpp.vcxproj

@@ -96,7 +96,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\;$(SolutionDir)3rdparty\yaml-cpp\src\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WIN32;_WINDOWS;WIN32;_WINDOWS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     </ClCompile>
   </ItemDefinitionGroup>
@@ -108,7 +108,7 @@
       </SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\;$(SolutionDir)3rdparty\yaml-cpp\src\;</AdditionalIncludeDirectories>
       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WIN32;_WINDOWS;WIN32;_WINDOWS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
     </ClCompile>
   </ItemDefinitionGroup>
@@ -121,7 +121,7 @@
       <SDLCheck>
       </SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\;$(SolutionDir)3rdparty\yaml-cpp\src\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WIN32;_WINDOWS;WIN32;_WINDOWS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>
@@ -138,7 +138,7 @@
       <SDLCheck>
       </SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\;$(SolutionDir)3rdparty\yaml-cpp\src\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WIN32;_WINDOWS;WIN32;_WINDOWS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <Link>

+ 4 - 4
Makefile.in

@@ -5,10 +5,10 @@ OMAP=@OMAP@
 ifeq ($(HAVE_MYSQL),yes)
 	ALL_DEPENDS=server tools
 	SERVER_DEPENDS=common login char map import
-	COMMON_DEPENDS=mt19937ar libconfig
+	COMMON_DEPENDS=mt19937ar libconfig yaml-cpp
 	LOGIN_DEPENDS=mt19937ar libconfig common
-	CHAR_DEPENDS=mt19937ar libconfig common
-	MAP_DEPENDS=mt19937ar libconfig common
+	CHAR_DEPENDS=mt19937ar libconfig common yaml-cpp
+	MAP_DEPENDS=mt19937ar libconfig common yaml-cpp
 else
 	ALL_DEPENDS=needs_mysql
 	SERVER_DEPENDS=needs_mysql
@@ -93,7 +93,7 @@ help:
 	@echo "'common'      - builds object files used for the three servers"
 	@echo "'mt19937ar'   - builds object file of Mersenne Twister MT19937"
 	@echo "'libconfig'   - builds object files of libconfig"
-	@echo "'libconfig'   - builds object files of yaml-cpp"
+	@echo "'yaml-cpp'    - builds object files of yaml-cpp"
 	@echo "'login'       - builds login server"
 	@echo "'char'        - builds char server"
 	@echo "'map'         - builds map server"

+ 3 - 0
README.md

@@ -91,6 +91,9 @@ relevant to your Operation System, please refer to the Wiki (links at the end of
 	* Configure and compile:
 
 				./configure && make clean && make server
+	* Configure and compile (for Centos 64 bit with Maria DB):
+
+				./configure --enable-64bit --with-MYSQL_LIBS=/usr/lib64/libmysqlclient.so && make clean && make server
 	* When you're ready, start the servers:
 
 				./athena-start start

+ 0 - 52
conf/battle/client.conf

@@ -9,58 +9,6 @@
 //         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary)
 //--------------------------------------------------------------
 
-// Set here which client version do you accept. Add all values of clients:
-// Clients older than accepted versions, and versions not set to 'accepted'
-// here will be rejected when logging in
-// 0x00000001: Clients older than 2004-09-06aSakray (packet versions 5-9)
-// 0x00000002: 2004-09-06	aSakexe		(version 10)
-// 0x00000004: 2004-09-20	aSakexe		(version 11)
-// 0x00000008: 2004-10-05	aSakexe		(version 12)
-// 0x00000010: 2004-10-25	aSakexe		(version 13)
-// 0x00000020: 2004-11-29	aSakexe		(version 14)
-// 0x00000040: 2005-01-10	bSakexe		(version 15)
-// 0x00000080: 2005-05-09	aSakexe		(version 16)
-// 0x00000100: 2005-06-28	aSakexe		(version 17)
-// 0x00000200: 2005-07-18	aSakexe		(version 18)
-// 0x00000400: 2005-07-19	bSakexe		(version 19)
-// 0x00000800: 2006-03-27	aSakexe		(version 20)
-// 0x00001000: 2007-01-08	aSakexe		(version 21)
-// 0x00002000: 2007-02-12	aSakexe		(version 22)
-// 0x00004000: 2008-09-10	aSakexe		(version 23)
-// 0x00008000: 2008-08-27	aRagexeRE	(version 24)
-// 0x00010000: 2008-09-10	aRagexeRE	(version 25)
-// 0x00020000: 2010-11-24	aRagexeRE	(version 26)
-// 0x00040000: 2011-10-05	aRagexeRE	(version 27)
-// 0x00080000: 2011-11-02	aRagexe		(version 28)
-// 0x00100000: 2012-03-07	fRagexeRE	(version 29)
-// 0x00200000: 2012-04-10	aRagexeRE	(version 30)
-// 0x00400000: 2012-04-18	aRagexeRE	(version 31)
-// 0x00800000: 2012-06-18	unknow 		(version 32)
-// 0x01000000: 2012-07-02	aRagexeRE	(version 33)
-// 0x02000000: 2013-03-20	Ragexe		(version 34)
-// 0x04000000: 2013-05-15	aRagexe		(version 35)
-// 0x08000000: 2013-05-22	Ragexe		(version 36)
-// 0x10000000: 2013-05-29	Ragexe		(version 37)
-// 0x20000000: 2013-06-05	Ragexe		(version 38)
-// 0x40000000: 2013-06-12	Ragexe		(version 39)
-// default value: 0x7FFFFFFF			(all clients/versions [5;39])
-packet_ver_flag: 0x7FFFFFFF
-
-// 0x00000001: 2013-06-18	Ragexe		(version 40)
-// 0x00000002: 2013-06-26	Ragexe		(version 41)
-// 0x00000004: 2013-07-03	Ragexe		(version 42)
-// 0x00000008: 2013-07-10	Ragexe		(version 43)
-// 0x00000010: 2013-07-17	Ragexe		(version 44)
-// 0x00000020: 2013-08-07	Ragexe		(version 45)
-// 0x00000040: 2013-12-23	Ragexe		(version 46)
-// 0x00000080: ????
-// 0x00000100: ????
-// 0x00000200: ????
-// 0x00000400: 2014-10-16	Ragexe		(version 50)
-// 0x00000800: 2014-10-22	Ragexe		(version 51)
-// default value: 0x7FFFFFFF			(all clients/versions [41;72])
-packet_ver_flag2: 0x7FFFFFFF
-
 // Minimum delay between whisper/global/party/guild messages (in ms)
 // Messages that break this threshold are silently omitted. 
 min_chat_delay: 0

+ 4 - 0
conf/battle/feature.conf

@@ -63,3 +63,7 @@ feature.autotrade_open_delay: 5000
 // Requires: 2014-10-22bRagexe or later
 // Off by default while test version is out; enable at your own risk.
 feature.roulette: off
+
+// Achievement (Note 1)
+// Requires: 2015-05-13aRagexe or later
+feature.achievement: on

+ 4 - 0
conf/battle/guild.conf

@@ -70,3 +70,7 @@ guild_leaderchange_delay: 1440
 // Is changing the guild leader allowed during WoE?
 // Default: no
 guild_leaderchange_woe: no
+
+// Only guild master can accept alliance?
+// Default: no
+guild_alliance_onlygm: no

+ 1 - 2
conf/help.txt

@@ -42,7 +42,7 @@ go: "Params: <city name|number>\n" "Warps you to a city.\n"
 	"  -1: (Memo point 0)  16: prison/jail     33: malangdo island\n"
 	"   0: prontera              17: jawaii             34: malaya port\n"
 	"   1: morocc                18: ayothaya       35: eclage\n"
-	"   2: geffen                  19: einbroch\n"
+	"   2: geffen                  19: einbroch       36: lasagna\n"
 	"   3: payon                  20: lighthalzen\n"
 	"   4: alberta                 21: einbech\n"
 	"   5: izlude                   22: hugel\n"
@@ -310,7 +310,6 @@ reloaditemdb: "Reload item database."
 reloadmobdb: "Reload monster database."
 reloadmotd: "Reload Message of the Day."
 reloadmsgconf: "Reload message configuration."
-reloadpacketdb: "Reload packet database."
 reloadpcdb: "Reload player settings."
 reloadquestdb: "Reload quest database."
 reloadscript: "Reload all scripts."

+ 0 - 0
conf/import-tmpl/inter_server.conf


+ 17 - 0
conf/import-tmpl/inter_server.yml

@@ -0,0 +1,17 @@
+# Config for Storages
+#
+# To access the premium storage, use script command 'openstorage2'.
+# If premium storages are added, copy the structure of the storage table and match the table name in this config.
+# The 'max' of premium storages are not adjusted by 'vip_storage_increase' config nor MIN_STORAGE.
+#
+# Structure:
+#	- ID: <storage_id>          // (int) Storage ID will be used for script command 'openstorage2'.
+#	  Name: "<storage name>"    // (string) Storage name will be sent to the client to display on the title bar.
+#	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
+#	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
+###############################################################################################################################################
+#Storages:
+#   - ID: 1
+#     Name: "VIP Storage"
+#     Table: "vip_storage"
+#     Max: 300

+ 1 - 1
conf/inter_athena.conf

@@ -153,6 +153,6 @@ roulette_table: db_roulette
 // Use SQL item_db, mob_db and mob_skill_db for the map server? (yes/no)
 use_sql_db: no
 
-inter_server_conf: conf/inter_server.conf
+inter_server_conf: inter_server.yml
 
 import: conf/import/inter_conf.txt

+ 0 - 26
conf/inter_server.conf

@@ -1,26 +0,0 @@
-/**
- * Config for Storages
- *
- * To access the premium storage, use script command 'openstorage2'.
- * If premium storages are added, copy the structure of the storage table and match the table name in this config.
- * The 'max' of premium storages are not adjusted by 'vip_storage_increase' config nor MIN_STORAGE.
- *
- * Structure:
-{
-	id: <storage_id>          // (int) Storage ID will be used for script command 'openstorage2'.
-	name: "<storage name>"    // (string) Storage name will be sent to the client to display on the title bar.
-	table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
-	max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
-},					          // Use comma to add more storages
- **/
-
-storages: (
-{
-	// Default Storage
-	// DO NOT CHANGE THIS UNLESS YOU KNOW WHAT YOU ARE DOING
-	id: 0
-	name: "Storage"
-	table: "storage"
-	//max: 600
-}
-)

+ 34 - 0
conf/inter_server.yml

@@ -0,0 +1,34 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# 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/>.
+#
+###########################################################################
+# Config for Storages
+#
+# To access the premium storage, use script command 'openstorage2'.
+# If premium storages are added, copy the structure of the storage table and match the table name in this config.
+# The 'max' of premium storages are not adjusted by 'vip_storage_increase' config nor MIN_STORAGE.
+#
+# Structure:
+#	- ID: <storage_id>          // (int) Storage ID will be used for script command 'openstorage2'.
+#	  Name: "<storage name>"    // (string) Storage name will be sent to the client to display on the title bar.
+#	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
+#	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
+
+Storages:
+    - ID: 0
+      Name: "Storage"
+      Table: "storage"

+ 0 - 6
conf/login_athena.conf

@@ -106,12 +106,6 @@ vip_char_increase: -1
 // 0 or more: new accounts automatically expire after the given value, in seconds
 start_limited_time: -1
 
-// Check the clientversion field set in clientinfo.xml?
-check_client_version: no
-
-// What version is allowed to connect? (if the option above is enabled)
-client_version_to_connect: 20
-
 // Store passwords as MD5 hashes instead of plain text?
 // NOTE: Will not work with clients that use <passwordencrypt>
 use_MD5_passwords: no

+ 5 - 0
conf/msg_conf/char_msg.conf

@@ -157,3 +157,8 @@
 224: -- Character Details --
 225: [Slot/CID: %d/%d] %s | %s | Level: %d/%d | %s
 226: This account doesn't have characters.
+
+// Achievements
+227: GM
+228: Achievement Reward Mail
+229: [%s] Achievement Reward.

+ 8 - 3
conf/msg_conf/map_msg.conf

@@ -825,7 +825,13 @@
 769: %s %s has been banned.
 770: %s %s has been unbanned.
 
-//771-899 free
+//@reloadachievementdb
+771: Achievement database has been reloaded.
+
+// Achievements
+772: Achievements are disabled.
+
+//773-899 free
 
 //------------------------------------
 // More atcommands message
@@ -1615,8 +1621,7 @@
 1475: ---- My Channels ----
 1476: You have not joined any channels.
 
-// @reloadpacketdb
-1477: Packet database has been reloaded.
+//1477 free
 
 // @partysharelvl
 1478: Party share level range has been changed successfully.

+ 1 - 2
conf/msg_conf/map_msg_chn.conf

@@ -1469,8 +1469,7 @@
 1475: ---- 我的頻道 ----
 1476: 你沒有加入任何的頻道
 
-// @reloadpacketdb
-1477: 完成重載封包數據庫.
+//1477 free
 
 // @partysharelvl
 1478: 隊伍經驗均分的等級間距已成功變更。

+ 1 - 2
conf/msg_conf/map_msg_frn.conf

@@ -1480,8 +1480,7 @@
 1475: ---- Canaux rejoins ----
 1476: Vous n'avez rejoins aucun canal.
 
-// @reloadpacketdb
-1477: Base de donnée des 'Packets' rechargée.
+//1477 free
 
 // @partysharelvl
 1478: Différence de niveau pour le partage en équipe changé.

+ 1 - 2
conf/msg_conf/map_msg_idn.conf

@@ -1571,8 +1571,7 @@
 1475: ---- Channel yang diikuti ----
 1476: Kamu tidak bergabung ke channel manapun saat ini.
 
-// @reloadpacketdb
-1477: Database paket telah dimuat ulang.
+//1477 free
 
 // @partysharelvl
 1478: Jarak level dalam party share telah diubah dengan sukses.

+ 1 - 2
conf/msg_conf/map_msg_rus.conf

@@ -1480,8 +1480,7 @@
 1475: ---- Мои каналы ----
 1476: Вы не присоединились ни к одному каналу.
 
-// @reloadpacketdb
-1477: База данных пакетов была перезагружена.
+//1477 free
 
 // @partysharelvl
 1478: Диапазон уровней разделения опыта между участниками группы успешно изменен.

+ 1 - 2
conf/msg_conf/map_msg_tha.conf

@@ -1473,8 +1473,7 @@
 1475: ---- Channels ·�ט©�¹���ט ----
 1476: ¤�³ה�טה´י���טד¹ channels ד´א��.
 
-// @reloadpacketdb
-1477: °�¹¢י���� Packet ה´י¶��ג��´ד��טא���÷�י��.
+//1477 free
 
 // @partysharelvl
 1478: ��´�÷ Level �����÷���ב×�ל ה´י¶��»��÷א»��ט�¹א���÷�י��ב�י�.

+ 118 - 0
conf/readme.md

@@ -0,0 +1,118 @@
+# Import Directories
+
+## What is the import directory for?
+
+The `import/` directory provides a way for you to change your config settings without the need to even touch the main `/conf/` and `/db/` files.
+
+By placing your custom entries into the `import/` directory within these two locations, your core files will not need to have any conflicts resolved when you update your server. You store your changes, and the rest is updated with rAthena.
+
+## How does this work?
+
+Think of "import" as in "override". Place only the settings you have changed in the import files, or settings you are "overriding".
+
+For example, when setting up a server there are always a few config settings that users would like to change in order for rAthena to suit their needs. The following example will show you how to use the `/conf/import/` directory correctly. (for `/db/import/` examples, see [/db/readme.md](/db/readme.md))
+
+### Login Server
+---
+We want to use MD5 passwords and disable `_m/f` account creation methods.
+
+#### /conf/import/login_conf.txt
+
+	new_account: no
+	use_MD5_passwords: yes
+
+
+### Char Server
+---
+We want to change the server name to "Odin".
+
+#### /conf/import/char_conf.txt
+
+	server_name: Odin
+
+
+### Map Server
+---
+We want to hide all error messages and add a few custom maps.
+
+#### /conf/import/map_conf.txt
+
+	//Makes server output more silent by omitting certain types of messages:
+	//16: Hide Error and SQL Error messages.
+	console_silent: 16
+	map: 1@toy
+	map: 1@valley
+	map: shops
+
+
+### Inter Server
+---
+We want to use MySQL tables instead of .txt files.
+
+#### /conf/import/inter_conf.txt
+
+	use_sql_db: yes
+
+
+### Logging Settings
+---
+We want to log all items and all chat messages.
+
+#### /conf/import/log_conf.txt
+
+	log_filter: 1
+	// Log CHAT (Global, Whisper, Party, Guild, Main chat, Clan) (Note 3)
+	// log_chat: 63 = logs everything
+	log_chat: 63
+
+
+### Battle Configs
+---
+We want to change the way various mechanics work. For anything that would be configured in the `/conf/battle/` directory, it will go into `import/battle_conf.txt`. To help you find which configs came from where, it's generally a good idea to comment out the name of the file that specific collection of configs came from.
+
+#### /conf/import/battle_conf.txt
+
+	// guild.conf
+	guild_exp_limit: 90
+
+	// items.conf
+	vending_over_max: no
+	vending_tax: 100
+	weapon_produce_rate: 200
+	potion_produce_rate: 200
+	produce_item_name_input: 0x03
+
+	// misc.conf
+	duel_time_interval: 2
+	at_mapflag: yes
+	at_monsterignore: yes
+	cashshop_show_points: yes
+	hide_fav_sell: yes
+	// Whether or not mail box status is displayed upon login.
+	// Default: 0
+	// 0 = No
+	// 1 = Yes
+	// 2 = Yes, when there are unread mails
+	mail_show_status: 2
+
+	// monster.conf
+	show_mob_info: 3
+
+	// party.conf
+	party_hp_mode: 1
+	display_party_name: yes
+
+	// pet.conf
+	pet_rename: yes
+
+	// player.conf
+	max_aspd: 196
+	max_third_aspd: 196
+	max_extended_aspd: 196
+	vip_disp_rate: no
+
+	// status.conf
+	debuff_on_logout: 3
+
+
+We cannot stress enough how helpful this system is for everyone. The majority of git conflicts will simply go away if users make use of the `import/` system.

+ 0 - 22
conf/readme.txt

@@ -1,22 +0,0 @@
-What is the import folder for?
--------------------------------------------------------------------------------
-
-The folder provides a way for you to change your config settings without having
-to update the files every time you update your server. You store your changes,
-and the rest is updated with rAthena.
-
-How does this work?
--------------------------------------------------------------------------------
-
-Place only the settings you have changed in the import files.
-For example, if you want to change a value in /battle/exp.conf:
-
-	// Rate at which exp. is given. (Note 2)
-	base_exp_rate: 700
-
-You could instead copy the setting into /import/battle_conf.txt,
-and you'll eliminate any problems updating in the future.
-
-Neat, isn't it?
-
-- Semi-guide by Ajarn / Euphy

+ 1 - 1
configure

@@ -4951,7 +4951,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 CFLAGS="$CFLAGS -pipe -ffast-math -Wall"
 CPPFLAGS="$CPPFLAGS -I../common"
-
+CXXFLAGS="$CXXFLAGS -std=c++11"
 
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5

+ 1 - 0
configure.in

@@ -440,6 +440,7 @@ AC_LANG([C++])
 
 CFLAGS="$CFLAGS -pipe -ffast-math -Wall"
 CPPFLAGS="$CPPFLAGS -I../common"
+CXXFLAGS="$CXXFLAGS -std=c++11"
 
 
 AC_C_BIGENDIAN(

+ 10 - 0
db/const.txt

@@ -2298,6 +2298,16 @@ JP_NPC01	10236
 4_PCCOUNT	10253
 4_LAVAGOLEM	10254
 
+JP_NPC02	10261
+JP_NPC03	10262
+JP_NPC04	10263
+JP_NPC05	10264
+JP_NPC06	10265
+JP_NPC07	10266
+JP_NPC08	10267
+JP_NPC09	10268
+JP_NPC10	10269
+
 SWORDCLAN	1
 ARCWANDCLAN	2
 GOLDENMACECLAN	3

+ 80 - 0
db/import-tmpl/achievement_db.yml

@@ -0,0 +1,80 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# 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/>.
+#
+###########################################################################
+# Custom Achievement Database
+###########################################################################
+#
+# Achievement Settings
+#
+###########################################################################
+# ID - Unique achievement ID.
+###########################################################################
+# Group - Achievement group type. Each achievement type calls a specific
+# objective check.
+# Valid groups:
+#  AG_ADD_FRIEND
+#  AG_ADVENTURE
+#  AG_BABY
+#  AG_BATTLE
+#  AG_CHATTING
+#  AG_CHATTING_COUNT
+#  AG_CHATTING_CREATE
+#  AG_CHATTING_DYING
+#  AG_EAT
+#  AG_GET_ITEM
+#  AG_GET_ZENY
+#  AG_GOAL_ACHIEVE
+#  AG_GOAL_LEVEL
+#  AG_GOAL_STATUS
+#  AG_HEAR
+#  AG_JOB_CHANGE
+#  AG_MARRY
+#  AG_PARTY
+#  AG_ENCHANT_FAIL
+#  AG_ENCHANT_SUCCESS
+#  AG_SEE
+#  AG_SPEND_ZENY
+#  AG_TAMING
+###########################################################################
+# Name - Achievement name. Used when sending rewards through RODEX.
+###########################################################################
+# Target - A list of monster ID and count values that the achievement
+# requires. The target count can also be used for achievements that keep
+# a counter while not being related to monster kills.
+# Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+###########################################################################
+# Condition - A conditional statement that must be met for the achievement
+# to be considered complete.
+###########################################################################
+# Map - A map name that is used for the AG_CHATTING type which increments
+# the counter based on the player's map.
+###########################################################################
+# Dependent: - A list of achievement IDs that need to be completed before
+# this achievement is considered complete.
+###########################################################################
+# Reward - A list of rewards that are given on completion. All fields are
+# optional.
+#   ItemID: Item ID
+#   Amount:  Amount of Item ID (default 1)
+#   Script: Bonus Script
+#   TitleID: Title ID
+###########################################################################
+# Score - Achievement points that are given on completion.
+###########################################################################
+
+Achievements:

+ 6 - 4
db/import-tmpl/item_flag.txt

@@ -2,8 +2,10 @@
 // <ItemID>,<Flag>
 //
 // <Flag>:
-// 1 - As Dead Branch item (will be logged at `branchlog` table and cannot be used at 'nobranch' mapflag)
-// 2 - As item group container, check player's inventory and weight before consumed
-// 4 - GUID item, cannot be stacked even same or stackable item
-// 8 - Item will be bound item when equipped
+//  1 - As Dead Branch item (will be logged at `branchlog` table and cannot be used at 'nobranch' mapflag)
+//  2 - As item group container, check player's inventory and weight before consumed
+//  4 - GUID item, cannot be stacked even same or stackable item
+//  8 - Item will be bound item when equipped
+// 16 - Special Broadcast: When item dropped by monster and player loot it, will be broadcasted!
+// 32 - Item will not be removed on consumption. Also supports 'itemskill'
 // NOTE: For removing flag by import file, use "-" to remove the flag. Example, 604,-1 will removes flag 1 from Branch_Of_Dead_Tree

+ 0 - 35
db/import-tmpl/packet_db.txt

@@ -1,35 +0,0 @@
-// Client<->Map Packet Database
-//
-// Structure of Database:
-// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...]
-//
-// 01. PacketType       ID of the packet.
-// 02. PacketLength     Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size.
-// 03. Name             Name of the packet parser function (optional, for incoming packets only).
-// 04. FieldIndex       Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given).
-//                      Can be 0, when the layout is not known.
-// ...
-//
-// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used.
-//
-// The packet database allows you to add support for new clients,
-// because packets change every release.
-//
-// Note: Every packet version needs a wanttoconnection specification, since
-// that is the packet used to identify a client's version.
-// If multiple versions have the same connection packet, the higher version
-// will be used (unless the lower one is specified as the default)
-//
-// Incoming packets have their parser function and layout specified, which enables
-// them for the current and all higher versions, unless explicitely disabled.
-//
-// Outgoing packets must be specified in order to enable them for the current
-// and all higher versions, unless explicitely disabled. Packets that are not
-// enabled for a packet version are silently discarded when sent as multicast.
-//
-// Every packet version inherits packet definitions from the previous (lower)
-// packet version.
-//
-// Main packet version of the DB to use (default = max available version)
-// Client detection is faster when all clients use this version.
-// Version 23 is the latest Sakexe (above versions are for Renewal clients)

+ 0 - 2675
db/packet_db.txt

@@ -1,2675 +0,0 @@
-// Client<->Map Packet Database
-//
-// Structure of Database:
-// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...]
-//
-// 01. PacketType       ID of the packet.
-// 02. PacketLength     Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size.
-// 03. Name             Name of the packet parser function (optional, for incoming packets only).
-// 04. FieldIndex       Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given).
-//                      Can be 0, when the layout is not known.
-// ...
-//
-// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used.
-//
-// The packet database allows you to add support for new clients,
-// because packets change every release.
-//
-// Note: Every packet version needs a wanttoconnection specification, since
-// that is the packet used to identify a client's version.
-// If multiple versions have the same connection packet, the higher version
-// will be used (unless the lower one is specified as the default)
-//
-// Incoming packets have their parser function and layout specified, which enables
-// them for the current and all higher versions, unless explicitely disabled.
-//
-// Outgoing packets must be specified in order to enable them for the current
-// and all higher versions, unless explicitely disabled. Packets that are not
-// enabled for a packet version are silently discarded when sent as multicast.
-//
-// Every packet version inherits packet definitions from the previous (lower)
-// packet version.
-//
-// Main packet version of the DB to use (default = max available version)
-// Client detection is faster when all clients use this version.
-// Version 23 is the latest Sakexe (above versions are for Renewal clients)
-//
-// packet_keys values are default value for each packet version, if no value
-// or value is 'default' in packet_keys_use, server will uses default keys
-// according to used packet_db_ver. packet_keys_use is user-defined keys.
-// Maximum key value is 0x7FFFFFFF.
-// NOTE: Keys won't be reloaded, initialized on first load only.
-//
-//packet_db_ver: 46
-packet_db_ver: default
-packet_keys_use: default
-
-packet_ver: 5
-0x0064,55
-0x0065,17
-0x0066,6
-0x0067,37
-0x0068,46
-0x0069,-1
-0x006a,23
-0x006b,-1
-0x006c,3
-0x006d,108
-0x006e,3
-0x006f,2
-0x0070,6
-0x0071,28
-0x0072,19,wanttoconnection,2:6:10:14:18
-0x0073,11
-0x0074,3
-0x0075,-1
-0x0076,9
-0x0077,5
-0x0078,54
-0x0079,53
-0x007a,58
-0x007b,60
-0x007c,41
-0x007d,2,loadendack,0
-0x007e,6,ticksend,2
-0x007f,6
-0x0080,7
-0x0081,3
-0x0082,2
-0x0083,2
-0x0084,2
-0x0085,5,walktoxy,2
-0x0086,16
-0x0087,12
-0x0088,10
-0x0089,7,actionrequest,2:6
-0x008a,29
-0x008b,2
-0x008c,-1,globalmessage,2:4
-0x008d,-1
-0x008e,-1
-//0x008f,-1
-0x0090,7,npcclicked,2:6
-0x0091,22
-0x0092,28
-0x0093,2
-0x0094,6,getcharnamerequest,2
-0x0095,30
-0x0096,-1,wis,2:4:28
-0x0097,-1
-0x0098,3
-0x0099,-1,broadcast,2:4
-0x009a,-1
-0x009b,5,changedir,2:4
-0x009c,9
-0x009d,17
-0x009e,17
-0x009f,6,takeitem,2
-0x00a0,23
-0x00a1,6
-0x00a2,6,dropitem,2:4
-0x00a3,-1
-0x00a4,-1
-0x00a5,-1
-0x00a6,-1
-0x00a7,8,useitem,2:4
-0x00a8,7
-0x00a9,6,equipitem,2:4
-0x00aa,7,ZC_WEAR_EQUIP_ACK,2:4:6
-0x00ab,4,unequipitem,2
-0x00ac,7
-//0x00ad,-1
-0x00ae,-1
-0x00af,6
-0x00b0,8
-0x00b1,8
-0x00b2,3,restart,2
-0x00b3,3
-0x00b4,-1
-0x00b5,6
-0x00b6,6
-0x00b7,-1
-0x00b8,7,npcselectmenu,2:6
-0x00b9,6,npcnextclicked,2
-0x00ba,2
-0x00bb,5,statusup,2:4
-0x00bc,6
-0x00bd,44
-0x00be,5
-0x00bf,3,emotion,2
-0x00c0,7
-0x00c1,2,howmanyconnections,0
-0x00c2,6
-0x00c3,8
-0x00c4,6
-0x00c5,7,npcbuysellselected,2:6
-0x00c6,-1
-0x00c7,-1
-0x00c8,-1,npcbuylistsend,2:4
-0x00c9,-1,npcselllistsend,2:4
-0x00ca,3
-0x00cb,3
-0x00cc,6,gmkick,2
-0x00cd,3
-0x00ce,2,killall,0
-0x00cf,27,wisexin,2:26
-0x00d0,3,wisall,2
-0x00d1,4
-0x00d2,4
-0x00d3,2,wisexlist,0
-0x00d4,-1
-0x00d5,-1,createchatroom,2:4:6:7:15
-0x00d6,3
-0x00d7,-1
-0x00d8,6
-0x00d9,14,chataddmember,2:6
-0x00da,3
-0x00db,-1
-0x00dc,28
-0x00dd,29
-0x00de,-1,chatroomstatuschange,2:4:6:7:15
-0x00df,-1
-0x00e0,30,changechatowner,2:6
-0x00e1,30
-0x00e2,26,kickfromchat,2
-0x00e3,2,chatleave,0
-0x00e4,6,traderequest,2
-0x00e5,26
-0x00e6,3,tradeack,2
-0x00e7,3
-0x00e8,8,tradeadditem,2:4
-0x00e9,19
-0x00ea,5
-0x00eb,2,tradeok,0
-0x00ec,3
-0x00ed,2,tradecancel,0
-0x00ee,2
-0x00ef,2,tradecommit,0
-0x00f0,3
-0x00f1,2
-0x00f2,6
-0x00f3,8,movetokafra,2:4
-0x00f4,21
-0x00f5,8,movefromkafra,2:4
-0x00f6,8
-0x00f7,2,closekafra,0
-0x00f8,2
-0x00f9,26,createparty,2
-0x00fa,3
-0x00fb,-1
-0x00fc,6,partyinvite,2
-0x00fd,27
-0x00fe,30
-0x00ff,10,replypartyinvite,2:6
-0x0100,2,leaveparty,0
-0x0101,6
-0x0102,6,partychangeoption,2
-0x0103,30,removepartymember,2:6
-0x0104,79
-0x0105,31
-0x0106,10
-0x0107,10
-0x0108,-1,partymessage,2:4
-0x0109,-1
-0x010a,4
-0x010b,6
-0x010c,6
-0x010d,2
-0x010e,11
-0x010f,-1
-0x0110,10
-0x0111,39
-0x0112,4,skillup,2
-0x0113,10,useskilltoid,2:4:6
-0x0114,31
-0x0115,35
-0x0116,10,useskilltopos,2:4:6:8
-0x0117,18
-0x0118,2,stopattack,0
-0x0119,13
-0x011a,15
-0x011b,20,useskillmap,2:4
-0x011c,68
-0x011d,2,requestmemo,0
-0x011e,3
-0x011f,16
-0x0120,6
-0x0121,14
-0x0122,-1
-0x0123,-1
-0x0124,21
-0x0125,8
-0x0126,8,putitemtocart,2:4
-0x0127,8,getitemfromcart,2:4
-0x0128,8,movefromkafratocart,2:4
-0x0129,8,movetokafrafromcart,2:4
-0x012a,2,removeoption,0
-0x012b,2
-0x012c,3
-0x012d,4
-0x012e,2,closevending,0
-0x012f,-1,openvending,2:4:0:84
-0x0130,6,vendinglistreq,2
-0x0131,86
-0x0132,6
-0x0133,-1
-0x0134,-1,purchasereq,2:4:8
-0x0135,7
-0x0136,-1
-0x0137,6
-0x0138,3
-0x0139,16
-0x013a,4
-0x013b,4
-0x013c,4
-0x013d,6
-0x013e,24
-0x013f,26,itemmonster,2
-0x0140,22,mapmove,2:18:20
-0x0141,14
-0x0142,6
-0x0143,10,npcamountinput,2:6
-0x0144,23
-0x0145,19
-0x0146,6,npccloseclicked,2
-0x0147,39
-0x0148,8
-0x0149,9,gmreqnochat,2:6:7
-0x014a,6
-0x014b,27
-0x014c,-1
-0x014d,2,guildcheckmaster,0
-0x014e,6
-0x014f,6,guildrequestinfo,2
-0x0150,110
-0x0151,6,guildrequestemblem,2
-0x0152,-1
-0x0153,-1,guildchangeemblem,2:4
-0x0154,-1
-0x0155,-1,guildchangememberposition,2:4
-0x0156,-1
-0x0157,6
-0x0158,-1
-0x0159,54,guildleave,2:6:10:14
-0x015a,66
-0x015b,54,guildexpulsion,2:6:10:14
-0x015c,90
-0x015d,42,guildbreak,2
-0x015e,6
-0x015f,42
-0x0160,-1
-0x0161,-1,guildchangepositioninfo,2:4
-0x0162,-1
-0x0163,-1
-0x0164,-1
-0x0165,30,createguild,2:6
-0x0166,-1
-0x0167,3
-0x0168,14,guildinvite,2:6:10
-0x0169,3
-0x016a,30
-0x016b,10,guildreplyinvite,2:6
-0x016c,43
-0x016d,14
-0x016e,186,guildchangenotice,2:6:66
-0x016f,182
-0x0170,14,guildrequestalliance,2:6:10
-0x0171,30
-0x0172,10,guildreplyalliance,2:6
-0x0173,3
-0x0174,-1
-0x0175,6
-0x0176,106
-0x0177,-1
-0x0178,4,itemidentify,2
-0x0179,5
-0x017a,4,usecard,2
-0x017b,-1
-0x017c,6,insertcard,2:4
-0x017d,7
-0x017e,-1,guildmessage,2:4
-0x017f,-1
-0x0180,6,guildopposition,2
-0x0181,3
-0x0182,106
-0x0183,10,guilddelalliance,2:6
-0x0184,10
-0x0185,34
-//0x0186,-1
-0x0187,6
-0x0188,8
-0x0189,4
-0x018a,4,quitgame,2
-0x018b,4
-0x018c,29
-0x018d,-1
-0x018e,10,producemix,2:4:6:8
-0x018f,6
-0x0190,90,useskilltoposinfo,2:4:6:8:10
-0x0191,86
-0x0192,24
-0x0193,6,solvecharname,2
-0x0194,30
-0x0195,102
-0x0196,9
-0x0197,4,resetchar,2
-0x0198,8,changemaptype,2:4:6
-0x0199,4
-0x019a,14
-0x019b,10
-0x019c,-1,localbroadcast,2:4
-0x019d,6,gmhide,2
-0x019e,2
-0x019f,6,catchpet,2
-0x01a0,3
-0x01a1,3,petmenu,2
-0x01a2,35
-0x01a3,5
-0x01a4,11
-0x01a5,26,changepetname,2
-0x01a6,-1
-0x01a7,4,selectegg,2
-0x01a8,4
-0x01a9,6,sendemotion,2
-0x01aa,10
-0x01ab,12
-0x01ac,6
-0x01ad,-1
-0x01ae,4,selectarrow,2
-0x01af,4,changecart,2
-0x01b0,11
-0x01b1,7
-0x01b2,-1,openvending,2:4:84:85
-0x01b3,67
-0x01b4,12
-0x01b5,18
-0x01b6,114
-0x01b7,6
-0x01b8,3
-0x01b9,6
-0x01ba,26,remove,2
-0x01bb,26,shift,2
-0x01bc,26,recall,2
-0x01bd,26,summon,2
-0x01be,2
-0x01bf,3
-0x01c0,2
-0x01c1,14
-0x01c2,10
-0x01c3,-1
-0x01c4,22
-0x01c5,22
-0x01c6,4
-0x01c7,2
-0x01c8,13
-0x01c9,97
-//0x01ca,-1
-0x01cb,9
-0x01cc,9
-0x01cd,30
-0x01ce,6,autospell,2
-0x01cf,28
-0x01d0,8
-0x01d1,14
-0x01d2,10
-0x01d3,35
-0x01d4,6
-0x01d5,-1,npcstringinput,2:4:8
-0x01d6,4
-0x01d7,11
-0x01d8,54
-0x01d9,53
-0x01da,60
-0x01db,2
-0x01dc,-1
-0x01dd,47
-0x01de,33
-0x01df,6,gmreqaccname,2
-0x01e0,30
-0x01e1,8
-0x01e2,34
-0x01e3,14
-0x01e4,2
-0x01e5,6
-0x01e6,26
-0x01e7,2,sndoridori,0
-0x01e8,28,createparty2,2:26:27
-0x01e9,81
-0x01ea,6
-0x01eb,10
-0x01ec,26
-0x01ed,2,snexplosionspirits,0
-0x01ee,-1
-0x01ef,-1
-0x01f0,-1
-0x01f1,-1
-0x01f2,20
-0x01f3,10
-0x01f4,32
-0x01f5,9
-0x01f6,34
-0x01f7,14,adoptreply,2:6:10
-0x01f8,2
-0x01f9,6,adoptrequest,2
-0x01fa,48
-0x01fb,56
-0x01fc,-1
-0x01fd,4,repairitem,2
-0x01fe,5
-0x01ff,10
-0x0200,26
-0x0201,-1
-0x0202,26,friendslistadd,2
-0x0203,10,friendslistremove,2:6
-0x0204,18
-0x0205,26
-0x0206,11
-0x0207,34
-0x0208,11,friendslistreply,2:6:10
-0x0209,36
-0x020a,10
-//0x020b,-1
-//0x020c,-1
-0x020d,-1
-0x8b3,-1
-0x8d6,6,ZC_CLEAR_DIALOG,2
-
-//2004-07-05aSakexe
-packet_ver: 6
-0x0072,22,wanttoconnection,5:9:13:17:21
-0x0085,8,walktoxy,5
-0x00a7,13,useitem,5:9
-0x0113,15,useskilltoid,4:9:11
-0x0116,15,useskilltopos,4:9:11:13
-0x0190,95,useskilltoposinfo,4:9:11:13:15
-0x0208,14,friendslistreply,2:6:10
-0x020e,24
-
-//2004-07-13aSakexe
-packet_ver: 7
-0x0072,39,wanttoconnection,12:22:30:34:38
-0x0085,9,walktoxy,6
-0x009b,13,changedir,5:12
-0x009f,10,takeitem,6
-0x00a7,17,useitem,6:13
-0x0113,19,useskilltoid,7:9:15
-0x0116,19,useskilltopos,7:9:15:17
-0x0190,99,useskilltoposinfo,7:9:15:17:19
-
-//2004-07-26aSakexe
-packet_ver: 8
-0x0072,14,dropitem,5:12
-0x007e,33,wanttoconnection,12:18:24:28:32
-0x0085,20,useskilltoid,7:12:16
-0x0089,15,getcharnamerequest,11
-0x008c,23,useskilltopos,3:6:17:21
-0x0094,10,takeitem,6
-0x009b,6,walktoxy,3
-0x009f,13,changedir,5:12
-0x00a2,103,useskilltoposinfo,3:6:17:21:23
-0x00a7,12,solvecharname,8
-0x00f3,-1,globalmessage,2:4
-0x00f5,17,useitem,6:12
-0x00f7,10,ticksend,6
-0x0113,16,movetokafra,5:12
-0x0116,2,closekafra,0
-0x0190,26,movefromkafra,10:22
-0x0193,9,actionrequest,3:8
-
-//2004-08-09aSakexe
-packet_ver: 9
-0x0072,17,dropitem,8:15
-0x007e,37,wanttoconnection,9:21:28:32:36
-0x0085,26,useskilltoid,11:18:22
-0x0089,12,getcharnamerequest,8
-0x008c,40,useskilltopos,5:15:29:38
-0x0094,13,takeitem,9
-0x009b,15,walktoxy,12
-0x009f,12,changedir,7:11
-0x00a2,120,useskilltoposinfo,5:15:29:38:40
-0x00a7,11,solvecharname,7
-0x00f5,24,useitem,9:20
-0x00f7,13,ticksend,9
-0x0113,23,movetokafra,5:19
-0x0190,26,movefromkafra,11:22
-0x0193,18,actionrequest,7:17
-
-//2004-08-16aSakexe
-0x0212,26,rc,2
-0x0213,26,check,2
-0x0214,42
-
-//2004-08-17aSakexe
-0x020f,10,pvpinfo,2:6
-0x0210,22
-
-//2004-09-06aSakexe
-packet_ver: 10
-0x0072,20,useitem,9:20
-0x007e,19,movetokafra,3:15
-0x0085,23,actionrequest,9:22
-0x0089,9,walktoxy,6
-0x008c,105,useskilltoposinfo,10:14:18:23:25
-0x0094,17,dropitem,6:15
-0x009b,14,getcharnamerequest,10
-0x009f,-1,globalmessage,2:4
-0x00a2,14,solvecharname,10
-0x00a7,25,useskilltopos,10:14:18:23
-0x00f3,10,changedir,4:9
-0x00f5,34,wanttoconnection,7:15:25:29:33
-0x00f7,2,closekafra,0
-0x0113,11,takeitem,7
-0x0116,11,ticksend,7
-0x0190,22,useskilltoid,9:15:18
-0x0193,17,movefromkafra,3:13
-
-//2004-09-20aSakexe
-packet_ver: 11
-0x0072,18,useitem,10:14
-0x007e,25,movetokafra,6:21
-0x0085,9,actionrequest,3:8
-0x0089,14,walktoxy,11
-0x008c,109,useskilltoposinfo,16:20:23:27:29
-0x0094,19,dropitem,12:17
-0x009b,10,getcharnamerequest,6
-0x00a2,10,solvecharname,6
-0x00a7,29,useskilltopos,6:20:23:27
-0x00f3,18,changedir,8:17
-0x00f5,32,wanttoconnection,10:17:23:27:31
-0x0113,14,takeitem,10
-0x0116,14,ticksend,10
-0x0190,14,useskilltoid,4:7:10
-0x0193,12,movefromkafra,4:8
-
-//2004-10-05aSakexe
-packet_ver: 12
-0x0072,17,useitem,6:13
-0x007e,16,movetokafra,5:12
-0x0089,6,walktoxy,3
-0x008c,103,useskilltoposinfo,2:6:17:21:23
-0x0094,14,dropitem,5:12
-0x009b,15,getcharnamerequest,11
-0x00a2,12,solvecharname,8
-0x00a7,23,useskilltopos,3:6:17:21
-0x00f3,13,changedir,5:12
-0x00f5,33,wanttoconnection,12:18:24:28:32
-0x0113,10,takeitem,6
-0x0116,10,ticksend,6
-0x0190,20,useskilltoid,7:12:16
-0x0193,26,movefromkafra,10:22
-
-//2004-10-25aSakexe
-packet_ver: 13
-0x0072,13,useitem,5:9
-0x007e,13,movetokafra,6:9
-0x0085,15,actionrequest,4:14
-0x008c,108,useskilltoposinfo,6:9:23:26:28
-0x0094,12,dropitem,6:10
-0x009b,10,getcharnamerequest,6
-0x00a2,16,solvecharname,12
-0x00a7,28,useskilltopos,6:9:23:26
-0x00f3,15,changedir,6:14
-0x00f5,29,wanttoconnection,5:14:20:24:28
-0x0113,9,takeitem,5
-0x0116,9,ticksend,5
-0x0190,26,useskilltoid,4:10:22
-0x0193,22,movefromkafra,12:18
-
-//2004-11-01aSakexe
-0x0084,-1
-0x0215,6
-
-//2004-11-08aSakexe
-0x0084,2
-0x0216,6
-0x0217,2,blacksmith,0
-0x0218,2,alchemist,0
-0x0219,282
-0x021a,282
-0x021b,10
-0x021c,10
-
-//2004-11-15aSakexe
-0x021d,6,lesseffect,2
-
-//2004-11-29aSakexe
-packet_ver: 14
-0x0072,22,useskilltoid,8:12:18
-0x007e,30,useskilltopos,4:9:22:28
-0x0085,-1,globalmessage,2:4
-0x0089,7,ticksend,3
-0x008c,13,getcharnamerequest,9
-0x0094,14,movetokafra,4:10
-0x009b,2,closekafra,0
-0x009f,18,actionrequest,6:17
-0x00a2,7,takeitem,3
-0x00a7,7,walktoxy,4
-0x00f3,8,changedir,3:7
-0x00f5,29,wanttoconnection,3:10:20:24:28
-0x00f7,14,solvecharname,10
-0x0113,110,useskilltoposinfo,4:9:22:28:30
-0x0116,12,dropitem,4:10
-0x0190,15,useitem,3:11
-0x0193,21,movefromkafra,4:17
-0x0221,-1
-0x0222,6,weaponrefine,2
-0x0223,8
-
-//2004-12-13aSakexe
-//skipped: many packets being set to -1
-0x0066,3
-0x0070,3
-0x01ca,3
-0x021e,6
-0x021f,66
-0x0220,10
-
-//2005-01-10bSakexe
-packet_ver: 15
-0x0072,26,useskilltoid,8:16:22
-0x007e,114,useskilltoposinfo,10:18:22:32:34
-0x0085,23,changedir,12:22
-0x0089,9,ticksend,5
-0x008c,8,getcharnamerequest,4
-0x0094,20,movetokafra,10:16
-0x009b,32,wanttoconnection,3:12:23:27:31
-0x009f,17,useitem,5:13
-0x00a2,11,solvecharname,7
-0x00a7,13,walktoxy,10
-0x00f3,-1,globalmessage,2:4
-0x00f5,9,takeitem,5
-0x00f7,21,movefromkafra,11:17
-0x0113,34,useskilltopos,10:18:22:32
-0x0116,20,dropitem,15:18
-0x0190,20,actionrequest,9:19
-0x0193,2,closekafra,0
-
-//2005-03-28aSakexe
-0x0224,10
-0x0225,2,taekwon,0
-0x0226,282
-
-//2005-04-04aSakexe
-0x0227,18
-0x0228,18
-
-//2005-04-11aSakexe
-0x0229,15
-0x022a,58
-0x022b,57
-0x022c,64
-
-//2005-04-25aSakexe
-0x022d,5,hommenu,2:4
-0x0232,9,hommoveto,2:6
-0x0233,11,homattack,2:6:10
-0x0234,6,hommovetomaster,2
-
-//2005-05-09aSakexe
-packet_ver: 16
-0x0072,25,useskilltoid,6:10:21
-0x007e,102,useskilltoposinfo,5:9:12:20:22
-0x0085,11,changedir,7:10
-0x0089,8,ticksend,4
-0x008c,11,getcharnamerequest,7
-0x0094,14,movetokafra,7:10
-0x009b,26,wanttoconnection,4:9:17:21:25
-0x009f,14,useitem,4:10
-0x00a2,15,solvecharname,11
-0x00a7,8,walktoxy,5
-0x00f5,8,takeitem,4
-0x00f7,22,movefromkafra,14:18
-0x0113,22,useskilltopos,5:9:12:20
-0x0116,10,dropitem,5:8
-0x0190,19,actionrequest,5:18
-
-//2005-05-23aSakexe
-0x022e,69
-0x0230,12
-
-//2005-05-30aSakexe
-0x022e,71
-0x0235,-1
-0x0236,10
-0x0237,2,rankingpk,0
-0x0238,282
-
-//2005-05-31aSakexe
-0x0216,2
-0x0239,11
-
-//2005-06-08aSakexe
-0x0216,6
-0x0217,2,blacksmith,0
-0x022f,5
-0x0231,26,changehomunculusname,2
-0x023a,4
-0x023b,36,storagepassword,2:4:20
-0x023c,6
-
-//2005-06-22aSakexe
-0x022e,71
-
-//2005-06-28aSakexe
-packet_ver: 17
-0x0072,34,useskilltoid,6:17:30
-0x007e,113,useskilltoposinfo,12:15:18:31:33
-0x0085,17,changedir,8:16
-0x0089,13,ticksend,9
-0x008c,8,getcharnamerequest,4
-0x0094,31,movetokafra,16:27
-0x009b,32,wanttoconnection,9:15:23:27:31
-0x009f,19,useitem,9:15
-0x00a2,9,solvecharname,5
-0x00a7,11,walktoxy,8
-0x00f5,13,takeitem,9
-0x00f7,18,movefromkafra,11:14
-0x0113,33,useskilltopos,12:15:18:31
-0x0116,12,dropitem,3:10
-0x0190,24,actionrequest,11:23
-0x0216,-1
-0x023d,-1
-0x023e,4
-
-//2005-07-18aSakexe
-packet_ver: 18
-0x0072,19,useskilltoid,5:11:15
-0x007e,110,useskilltoposinfo,9:15:23:28:30
-0x0085,11,changedir,6:10
-0x0089,7,ticksend,3
-0x008c,11,getcharnamerequest,7
-0x0094,21,movetokafra,12:17
-0x009b,31,wanttoconnection,3:13:22:26:30
-0x009f,12,useitem,3:8
-0x00a2,18,solvecharname,14
-0x00a7,15,walktoxy,12
-0x00f5,7,takeitem,3
-0x00f7,13,movefromkafra,5:9
-0x0113,30,useskilltopos,9:15:23:28
-0x0116,12,dropitem,6:10
-0x0190,21,actionrequest,5:20
-0x0216,6
-0x023f,2,mailrefresh,0
-0x0240,8
-0x0241,6,mailread,2
-0x0242,-1
-0x0243,6,maildelete,2
-0x0244,6,mailgetattach,2
-0x0245,7
-0x0246,4,mailwinopen,2
-0x0247,8,mailsetattach,2:4
-0x0248,68
-0x0249,3
-0x024a,70
-0x024b,4,auctioncancelreg,2
-0x024c,8,auctionsetitem,2:4
-0x024d,14
-0x024e,6,auctioncancel,2
-0x024f,10,auctionbid,2:6
-0x0250,3
-0x0251,2
-0x0252,-1
-
-//2005-07-19bSakexe
-packet_ver: 19
-0x0072,34,useskilltoid,6:17:30
-0x007e,113,useskilltoposinfo,12:15:18:31:33
-0x0085,17,changedir,8:16
-0x0089,13,ticksend,9
-0x008c,8,getcharnamerequest,4
-0x0094,31,movetokafra,16:27
-0x009b,32,wanttoconnection,9:15:23:27:31
-0x009f,19,useitem,9:15
-0x00a2,9,solvecharname,5
-0x00a7,11,walktoxy,8
-0x00f5,13,takeitem,9
-0x00f7,18,movefromkafra,11:14
-0x0113,33,useskilltopos,12:15:18:31
-0x0116,12,dropitem,3:10
-0x0190,24,actionrequest,11:23
-
-//2005-08-01aSakexe
-0x0245,3
-0x0251,4
-
-//2005-08-08aSakexe
-0x024d,12,auctionregister,2:6:10
-0x024e,4
-
-//2005-08-17aSakexe
-0x0253,3
-0x0254,3,feelsaveok,2
-
-//2005-08-29aSakexe
-0x0240,-1
-0x0248,-1,mailsend,2:4:28:68:69
-0x0255,5
-0x0256,-1
-0x0257,8
-
-//2005-09-12bSakexe
-0x0256,5
-0x0258,2
-0x0259,3
-
-//2005-10-10aSakexe
-0x020e,32
-0x025a,-1
-0x025b,6,cooking,2:4
-
-//2005-10-13aSakexe
-0x007a,6
-0x0251,32
-0x025c,4,auctionbuysell,2
-
-//2005-10-17aSakexe
-0x007a,58
-0x025d,6,auctionclose,2
-0x025e,4
-
-//2005-10-24aSakexe
-0x025f,6
-0x0260,6
-
-//2005-11-07aSakexe
-0x024e,6,auctioncancel,2
-0x0251,34,auctionsearch,2:4:8:32
-
-//2006-01-09aSakexe
-0x0261,11
-0x0262,11
-0x0263,11
-0x0264,20
-0x0265,20
-0x0266,30
-0x0267,4
-0x0268,4
-0x0269,4
-0x026a,4
-0x026b,4
-0x026c,4
-0x026d,4
-0x026f,2
-0x0270,2
-0x0271,38
-0x0272,44
-
-//2006-01-26aSakexe
-0x0271,40
-
-//2006-03-06aSakexe
-0x0273,6
-0x0274,8
-
-//2006-03-13aSakexe
-0x0273,30,mailreturn,2:6
-
-//2006-03-27aSakexe
-packet_ver: 20
-0x0072,26,useskilltoid,11:18:22
-0x007e,120,useskilltoposinfo,5:15:29:38:40
-0x0085,12,changedir,7:11
-//0x0089,13,ticksend,9
-0x008c,12,getcharnamerequest,8
-0x0094,23,movetokafra,5:19
-0x009b,37,wanttoconnection,9:21:28:32:36
-0x009f,24,useitem,9:20
-0x00a2,11,solvecharname,7
-0x00a7,15,walktoxy,12
-0x00f5,13,takeitem,9
-0x00f7,26,movefromkafra,11:22
-0x0113,40,useskilltopos,5:15:29:38
-0x0116,17,dropitem,8:15
-0x0190,18,actionrequest,7:17
-
-//2006-10-23aSakexe
-0x006d,110
-
-//2006-04-24aSakexe to 2007-01-02aSakexe
-0x023e,8
-0x0277,84
-0x0278,2
-0x0279,2
-0x027a,-1
-0x027b,14
-0x027c,60
-0x027d,62
-0x027e,-1
-0x027f,8
-0x0280,12
-0x0281,4
-0x0282,284
-0x0283,6
-0x0284,14
-0x0285,6
-0x0286,4
-0x0287,-1
-0x0288,6
-0x0289,8
-0x028a,18
-0x028b,-1
-0x028c,46
-0x028d,34
-0x028e,4
-0x028f,6
-0x0290,4
-0x0291,4
-0x0292,2,autorevive,0
-0x0293,70
-0x0294,10
-0x0295,-1
-0x0296,-1
-0x0297,-1
-0x0298,8
-0x0299,6
-0x029a,27
-0x029c,66
-0x029d,-1
-0x029e,11
-0x029f,3,mermenu,2
-0x02a0,-1
-0x02a1,-1
-0x02a2,8
-
-//2007-01-08aSakexe
-packet_ver: 21
-0x0072,30,useskilltoid,10:14:26
-0x007e,120,useskilltoposinfo,10:19:23:38:40
-0x0085,14,changedir,10:13
-0x0089,11,ticksend,7
-0x008c,17,getcharnamerequest,13
-0x0094,17,movetokafra,4:13
-0x009b,35,wanttoconnection,7:21:26:30:34
-0x009f,21,useitem,7:17
-0x00a2,10,solvecharname,6
-0x00a7,8,walktoxy,5
-0x00f5,11,takeitem,7
-0x00f7,15,movefromkafra,3:11
-0x0113,40,useskilltopos,10:19:23:38
-0x0116,19,dropitem,11:17
-0x0190,10,actionrequest,4:9
-
-//2007-01-22aSakexe
-0x02a3,18
-0x02a4,2
-
-//2007-01-29aSakexe
-0x029b,72
-0x02a3,-1
-0x02a4,-1
-0x02a5,8
-
-// 2007-02-05aSakexe
-0x02aa,4
-0x02ab,36
-0x02ac,6
-
-//2007-02-12aSakexe
-packet_ver: 22
-0x0072,25,useskilltoid,6:10:21
-0x007e,102,useskilltoposinfo,5:9:12:20:22
-0x0085,11,changedir,7:10
-0x0089,8,ticksend,4
-0x008c,11,getcharnamerequest,7
-0x0094,14,movetokafra,7:10
-0x009b,26,wanttoconnection,4:9:17:21:25
-0x009f,14,useitem,4:10
-0x00a2,15,solvecharname,11
-//0x00a7,8,walktoxy,5
-0x00f5,8,takeitem,4
-0x00f7,22,movefromkafra,14:18
-0x0113,22,useskilltopos,5:9:12:20
-0x0116,10,dropitem,5:8
-0x0190,19,actionrequest,5:18
-
-//2007-05-07aSakexe
-0x01fd,15,repairitem,2:4:6:7:9:11:13
-
-//2007-02-27aSakexe to 2007-10-02aSakexe
-0x0288,10,cashshopbuy,2:4:6
-0x0289,12
-0x02a6,22
-0x02a7,22
-0x02a8,162
-0x02a9,58
-0x02ad,8
-0x02b0,85
-0x02b1,-1
-0x02b2,-1
-0x02b3,107
-0x02b4,6
-0x02b5,-1
-0x02b6,7,queststate,2:6
-0x02b7,7
-0x02b8,22
-0x02b9,191
-0x02ba,11,hotkey,2:4:5:9
-0x02bb,8
-0x02bc,6
-0x02bf,10
-0x02c0,2
-0x02c1,-1
-0x02c2,-1
-0x02c4,26,partyinvite2,2
-0x02c5,30
-0x02c6,30
-0x02c7,7,replypartyinvite2,2:6
-0x02c8,3,partytick,2
-0x02c9,3
-0x02ca,3
-0x02cb,20
-0x02cc,4
-0x02cd,26
-0x02ce,10
-0x02cf,6
-0x02d0,-1
-0x02d1,-1
-0x02d2,-1
-0x02d3,4,ZC_NOTIFY_BIND_ON_EQUIP,2
-0x02d4,29
-0x02d5,2
-0x02d6,6,viewplayerequip,2
-0x02d7,-1
-0x02d8,10,equiptickbox,2:6
-0x02d9,10
-0x02da,3
-0x02db,-1,battlechat,2:4
-0x02dc,-1
-0x02dd,32
-0x02de,6
-0x02df,36
-0x02e0,34
-
-//2007-10-23aSakexe
-0x02cb,65
-0x02cd,71
-
-//2007-11-06aSakexe
-0x0078,55
-0x007c,42
-0x022c,65
-0x029b,80
-
-//2007-11-13aSakexe
-0x02e1,33
-
-//2007-11-20aSakexe
-//0x01df,10 <- ???
-0x02e2,14
-0x02e3,25
-0x02e4,8
-0x02e5,8
-0x02e6,6
-
-//2007-11-27aSakexe
-0x02e7,-1
-
-//2008-01-02aSakexe
-0x01df,6,gmreqaccname,2
-0x02e8,-1
-0x02e9,-1
-0x02ea,-1
-0x02eb,13
-0x02ec,67
-0x02ed,59
-0x02ee,60
-0x02ef,8
-
-//2008-03-18aSakexe
-0x02bf,-1
-0x02c0,-1
-0x02f0,10
-0x02f1,2,progressbar,0
-0x02f2,2
-
-//2008-03-25bSakexe
-0x02f3,-1
-0x02f4,-1
-0x02f5,-1
-0x02f6,-1
-0x02f7,-1
-0x02f8,-1
-0x02f9,-1
-0x02fa,-1
-0x02fb,-1
-0x02fc,-1
-0x02fd,-1
-0x02fe,-1
-0x02ff,-1
-0x0300,-1
-
-//2008-04-01aSakexe
-0x0301,-1
-0x0302,-1
-0x0303,-1
-0x0304,-1
-0x0305,-1
-0x0306,-1
-0x0307,-1
-0x0308,-1
-0x0309,-1
-0x030a,-1
-0x030b,-1
-0x030c,-1
-0x030d,-1
-0x030e,-1
-0x030f,-1
-0x0310,-1
-0x0311,-1
-0x0312,-1
-0x0313,-1
-0x0314,-1
-0x0315,-1
-0x0316,-1
-0x0317,-1
-0x0318,-1
-0x0319,-1
-0x031a,-1
-0x031b,-1
-0x031c,-1
-0x031d,-1
-0x031e,-1
-0x031f,-1
-0x0320,-1
-0x0321,-1
-0x0322,-1
-0x0323,-1
-0x0324,-1
-0x0325,-1
-0x0326,-1
-0x0327,-1
-0x0328,-1
-0x0329,-1
-0x032a,-1
-0x032b,-1
-0x032c,-1
-0x032d,-1
-0x032e,-1
-0x032f,-1
-0x0330,-1
-0x0331,-1
-0x0332,-1
-0x0333,-1
-0x0334,-1
-0x0335,-1
-0x0336,-1
-0x0337,-1
-0x0338,-1
-0x0339,-1
-0x033a,-1
-0x033b,-1
-0x033c,-1
-0x033d,-1
-0x033e,-1
-0x033f,-1
-0x0340,-1
-0x0341,-1
-0x0342,-1
-0x0343,-1
-0x0344,-1
-0x0345,-1
-0x0346,-1
-0x0347,-1
-0x0348,-1
-0x0349,-1
-0x034a,-1
-0x034b,-1
-0x034c,-1
-0x034d,-1
-0x034e,-1
-0x034f,-1
-0x0350,-1
-0x0351,-1
-0x0352,-1
-0x0353,-1
-0x0354,-1
-0x0355,-1
-0x0356,-1
-0x0357,-1
-0x0358,-1
-0x0359,-1
-0x035a,-1
-
-//2008-05-27aSakexe
-0x035b,-1
-0x035c,2
-0x035d,-1
-0x035e,2
-0x035f,-1
-0x0389,-1
-
-//2008-08-20aSakexe
-0x040c,-1
-0x040d,-1
-0x040e,-1
-0x040f,-1
-0x0410,-1
-0x0411,-1
-0x0412,-1
-0x0413,-1
-0x0414,-1
-0x0415,-1
-0x0416,-1
-0x0417,-1
-0x0418,-1
-0x0419,-1
-0x041a,-1
-0x041b,-1
-0x041c,-1
-0x041d,-1
-0x041e,-1
-0x041f,-1
-0x0420,-1
-0x0421,-1
-0x0422,-1
-0x0423,-1
-0x0424,-1
-0x0425,-1
-0x0426,-1
-0x0427,-1
-0x0428,-1
-0x0429,-1
-0x042a,-1
-0x042b,-1
-0x042c,-1
-0x042d,-1
-0x042e,-1
-0x042f,-1
-0x0430,-1
-0x0431,-1
-0x0432,-1
-0x0433,-1
-0x0434,-1
-0x0435,-1
-
-//2008-09-10aSakexe
-packet_ver: 23
-0x0436,19,wanttoconnection,2:6:10:14:18
-0x0437,7,actionrequest,2:6
-0x0438,10,useskilltoid,2:4:6
-0x0439,8,useitem,2:4
-
-//2008-11-13aSakexe
-0x043d,8
-0x043e,-1
-0x043f,8
-
-//2008-11-26aSakexe
-0x01a2,37
-0x0440,10
-0x0441,4
-
-//2008-12-10aSakexe
-0x0442,-1
-0x0443,8,skillselectmenu,2:6
-
-//2009-01-14aSakexe
-0x043f,25
-0x0444,-1
-0x0445,10
-
-//2009-02-18aSakexe
-0x0446,14
-
-//2009-02-25aSakexe
-0x0448,-1
-
-//2009-03-30aSakexe
-0x0449,4
-
-//2009-04-08aSakexe
-0x02a6,-1
-0x02a7,-1
-0x044a,6,clientversion,2
-
-//Renewal Clients
-//2008-08-27aRagexeRE
-packet_ver: 24
-0x0072,22,useskilltoid,9:15:18
-0x007c,44
-0x007e,105,useskilltoposinfo,10:14:18:23:25
-0x0085,10,changedir,4:9
-0x0089,11,ticksend,7
-0x008c,14,getcharnamerequest,10
-0x0094,19,movetokafra,3:15
-0x009b,34,wanttoconnection,7:15:25:29:33
-0x009f,20,useitem,7:20
-0x00a2,14,solvecharname,10
-0x00a7,9,walktoxy,6
-0x00f5,11,takeitem,7
-0x00f7,17,movefromkafra,3:13
-0x0113,25,useskilltopos,10:14:18:23
-0x0116,17,dropitem,6:15
-0x0190,23,actionrequest,9:22
-0x02e2,20
-0x02e3,22
-0x02e4,11
-0x02e5,9
-
-//2008-09-10aRagexeRE
-packet_ver: 25
-0x0436,19,wanttoconnection,2:6:10:14:18
-0x0437,7,actionrequest,2:6
-0x0438,10,useskilltoid,2:4:6
-0x0439,8,useitem,2:4
-
-//2008-11-12aRagexeRE
-0x043d,8
-//0x043e,-1
-0x043f,8
-
-//2008-12-17aRagexeRE
-0x01a2,37
-//0x0440,10
-//0x0441,4
-//0x0442,8
-//0x0443,8
-
-//2008-12-17bRagexeRE
-0x006d,114
-
-//2009-01-21aRagexeRE
-0x043f,25
-//0x0444,-1
-//0x0445,10
-
-//2009-02-18aRagexeRE
-//0x0446,14
-
-//2009-02-26cRagexeRE
-//0x0448,-1
-
-//2009-04-01aRagexeRE
-//0x0449,4
-
-//2009-05-14aRagexeRE
-//0x044b,2
-
-//2009-05-20aRagexeRE
-//0x07d0,6
-//0x07d1,2
-//0x07d2,-1
-//0x07d3,4
-//0x07d4,4
-//0x07d5,4
-//0x07d6,4
-//0x0447,2
-
-//2009-06-03aRagexeRE
-0x07d7,8,partychangeoption,2:6:7
-0x07d8,8
-0x07d9,254
-0x07da,6,partychangeleader,2
-
-//2009-06-10aRagexeRE
-//0x07db,8
-
-//2009-06-17aRagexeRE
-0x07d9,268
-//0x07dc,6
-//0x07dd,54
-//0x07de,30
-//0x07df,54
-
-//2009-07-01aRagexeRE
-//0x0275,37
-//0x0276,-1
-
-//2009-07-08aRagexeRE
-//0x07e0,58
-
-//2009-07-15aRagexeRE
-0x07e1,15
-
-//2009-08-05aRagexeRE
-0x07e2,8
-
-//2009-08-18aRagexeRE
-0x07e3,6
-0x07e4,-1,itemlistwindowselected,2:4:8:12
-0x07e6,8
-
-//2009-08-25aRagexeRE
-//0x07e6,28
-0x07e7,5
-
-//2009-09-22aRagexeRE
-0x07e5,8
-0x07e6,8
-0x07e7,32
-0x07e8,-1
-0x07e9,5
-
-//2009-09-29aRagexeRE
-//0x07ea,2
-//0x07eb,-1
-//0x07ec,6
-//0x07ed,8
-//0x07ee,6
-//0x07ef,8
-//0x07f0,4
-//0x07f2,4
-//0x07f3,3
-
-//2009-10-06aRagexeRE
-//0x07ec,8
-//0x07ed,10
-//0x07f0,8
-//0x07f1,15
-//0x07f2,6
-//0x07f3,4
-//0x07f4,3
-
-//2009-10-27aRagexeRE
-0x07f5,6,gmfullstrip,2
-0x07f6,14
-
-//2009-11-03aRagexeRE
-0x07f7,-1
-0x07f8,-1
-0x07f9,-1
-
-//2009-11-17aRagexeRE
-0x07fa,8
-
-//2009-11-24aRagexeRE
-0x07fb,25
-
-//2009-12-01aRagexeRE
-0x07fc,10
-0x07fd,-1,ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0
-0x07fe,26
-//0x07ff,-1
-
-//2009-12-15aRagexeRE
-0x0800,-1
-//0x0801,-1
-
-//2009-12-22aRagexeRE
-0x0802,18,bookingregreq,2:4:6		// Booking System
-0x0803,4
-0x0804,8		// Booking System
-0x0805,-1
-0x0806,4,bookingdelreq,2		// Booking System
-//0x0807,2
-0x0808,4		// Booking System
-//0x0809,14
-//0x080A,50
-//0x080B,18
-//0x080C,6
-
-//2009-12-29aRagexeRE
-0x0804,14,bookingsearchreq,2:4:6:8:12		// Booking System
-0x0806,2,bookingdelreq,0		// Booking System
-0x0807,4
-0x0808,14,bookingupdatereq,2		// Booking System
-0x0809,50
-0x080A,18
-0x080B,6		// Booking System
-
-//2010-01-05aRagexeRE
-0x0801,-1,purchasereq2,2:4:8:12
-
-//2010-01-26aRagexeRE
-//0x080C,2
-//0x080D,3
-0x080E,14
-
-//2010-02-09aRagexeRE
-//0x07F0,6
-
-//2010-02-23aRagexeRE
-0x080F,20
-
-//2010-03-03aRagexeRE
-0x0810,3
-0x0811,-1,reqopenbuyingstore,2:4:8:9:89
-//0x0812,86
-//0x0813,6
-//0x0814,6
-//0x0815,-1
-//0x0817,-1
-//0x0818,6
-//0x0819,4
-
-//2010-03-09aRagexeRE
-0x0813,-1
-//0x0814,2
-//0x0815,6
-0x0816,6
-0x0818,-1
-//0x0819,10
-//0x081A,4
-//0x081B,4
-//0x081C,6
-0x081d,22
-0x081e,8
-
-//2010-03-23aRagexeRE
-//0x081F,-1
-
-//2010-04-06aRagexeRE
-//0x081A,6
-
-//2010-04-13aRagexeRE
-//0x081A,10
-0x0820,11
-//0x0821,2
-//0x0822,9
-//0x0823,-1
-
-//2010-04-14dRagexeRE
-//0x081B,8
-
-//2010-04-20aRagexeRE
-0x0812,8
-0x0814,86
-0x0815,2,reqclosebuyingstore,0
-0x0817,6,reqclickbuyingstore,2
-0x0819,-1,reqtradebuyingstore,2:4:8:12
-0x081a,4
-0x081b,10
-0x081c,10
-0x0824,6
-
-//2010-06-01aRagexeRE
-//0x0825,-1
-//0x0826,4
-0x0835,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0836,-1
-0x0837,3
-//0x0838,3
-
-//2010-06-08aRagexeRE
-0x0838,2,searchstoreinfonextpage,0
-0x083A,4 	// Search Stalls Feature
-0x083B,2,closesearchstoreinfo,0
-0x083C,12,searchstoreinfolistitemclick,2:6:10
-0x083D,6
-
-//2010-06-15aRagexeRE
-//0x083E,26
-
-//2010-06-22aRagexeRE
-//0x083F,22
-
-//2010-06-29aRagexeRE
-0x00AA,9,ZC_WEAR_EQUIP_ACK,2:4:6:8
-//0x07F1,18
-//0x07F2,8
-//0x07F3,6
-
-//2010-07-01aRagexeRE
-0x083A,5 	// Search Stalls Feature
-
-//2010-07-13aRagexeRE
-//0x0827,6
-//0x0828,14
-//0x0829,6
-//0x082A,10
-//0x082B,6
-//0x082C,14
-//0x0840,-1
-//0x0841,19
-
-//2010-07-14aRagexeRE
-//0x0841,4
-
-//2010-08-03aRagexeRE
-0x0839,66
-0x0842,6,recall2,2
-0x0843,6,remove2,2
-
-//2010-11-24aRagexeRE
-packet_ver: 26
-0x0288,-1,cashshopbuy,2:4:8:10
-0x0436,19,wanttoconnection,2:6:10:14:18
-0x035f,5,walktoxy,2
-0x0360,6,ticksend,2
-0x0361,5,changedir,2:4
-0x0362,6,takeitem,2
-0x0363,6,dropitem,2:4
-0x0364,8,movetokafra,2:4
-0x0365,8,movefromkafra,2:4
-0x0366,10,useskilltopos,2:4:6:8
-0x0367,90,useskilltoposinfo,2:4:6:8:10
-0x0368,6,getcharnamerequest,2
-0x0369,6,solvecharname,2
-0x0856,-1
-0x0857,-1
-0x0858,-1
-0x0859,-1
-0x08d0,9,ZC_WEAR_EQUIP_ACK,2:4:6:8
-
-//2011-10-05aRagexeRE
-packet_ver: 27
-packet_keys: 0x291E6762,0x77CD391A,0x60AC2F16 // [Shakto]
-0x0364,5,walktoxy,2
-0x0817,6,ticksend,2
-0x0366,5,changedir,2:4
-0x0815,6,takeitem,2
-0x0885,6,dropitem,2:4
-0x0893,8,movetokafra,2:4
-0x0897,8,movefromkafra,2:4
-0x0369,10,useskilltopos,2:4:6:8
-0x08ad,90,useskilltoposinfo,2:4:6:8:10
-0x088a,6,getcharnamerequest,2
-0x0838,6,solvecharname,2
-0x0439,8,useitem,2:4
-0x08d2,10
-0x08d1,7
-0x0846,4,cashshopreqtab,2 //2011-07-18
-
-// 2011-11-02aRagexe
-packet_ver: 28
-packet_keys: 0x5324329D,0x5D545D52,0x06137269 // [Shakto]
-0x0436,26,friendslistadd,2
-0x0898,5,hommenu,2:4
-0x0281,36,storagepassword,2:4:20
-0x088d,26,partyinvite2,2
-0x083c,19,wanttoconnection,2:6:10:14:18
-0x08aa,7,actionrequest,2:6
-0x02c4,10,useskilltoid,2:4:6
-0x0811,-1,itemlistwindowselected,2:4:8:12
-0x0890,8
-0x08a5,18,bookingregreq,2:4:6
-0x0835,-1,reqopenbuyingstore,2:4:8:9:89
-0x089b,2,reqclosebuyingstore,0
-0x08a1,6,reqclickbuyingstore,2
-0x089e,-1,reqtradebuyingstore,2:4:8:12
-0x08ab,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x088b,2,searchstoreinfonextpage,0
-0x08a2,12,searchstoreinfolistitemclick,2:6:10
-0x08cf,10 //Amulet spirits
-
-//2012-03-07fRagexeRE
-packet_ver:29
-packet_keys: 0x382A6DEF,0x5CBE7202,0x61F46637 // [Shakto]
-0x086A,19,wanttoconnection,2:6:10:14:18
-0x0437,5,walktoxy,2
-0x0887,6,ticksend,2
-0x0890,5,changedir,2:4
-0x0865,6,takeitem,2
-0x02C4,6,dropitem,2:4
-0x093B,8,movetokafra,2:4
-0x0963,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0369,26,friendslistadd,2
-0x0863,5,hommenu,2:4
-0x0861,36,storagepassword,2:4:20
-0x0929,26,partyinvite2,2
-0x0885,7,actionrequest,2:6
-0x0889,10,useskilltoid,2:4:6
-0x0870,-1,itemlistwindowselected,2:4:8:12
-//0x0926,41,bookingregreq,2:4:6
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0817,2,reqclosebuyingstore,0
-0x0360,6,reqclickbuyingstore,2
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0884,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0835,2,searchstoreinfonextpage,0
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0439,8,useitem,2:4
-0x0365,41,bookingregreq,2:4:6
-
-// New Packet
-0x090F,-1		// ZC_NOTIFY_NEWENTRY7
-0x0914,-1		// ZC_NOTIFY_MOVEENTRY8
-0x0915,-1		// ZC_NOTIFY_STANDENTRY9
-
-//2012-04-10aRagexeRE
-packet_ver: 30
-packet_keys: 0x01581359,0x452D6FFA,0x6AFB6E2E // [Shakto]
-0x01fd,15,repairitem,2:4:6:7:9:11:13
-0x089c,26,friendslistadd,2
-0x0885,5,hommenu,2:4
-0x0961,36,storagepassword,2:4:20
-0x0288,-1,cashshopbuy,2:4:8:10
-0x091c,26,partyinvite2,2
-0x094b,19,wanttoconnection,2:6:10:14:18
-0x0369,7,actionrequest,2:6
-0x083c,10,useskilltoid,2:4:6
-0x0439,8,useitem,2:4
-0x0945,-1,itemlistwindowselected,2:4:8:12
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0817,2,reqclosebuyingstore,0
-0x0360,6,reqclickbuyingstore,2
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0835,2,searchstoreinfonextpage,0
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0437,5,walktoxy,2
-0x0886,6,ticksend,2
-0x0871,5,changedir,2:4
-0x0938,6,takeitem,2
-0x0891,6,dropitem,2:4
-0x086c,8,movetokafra,2:4
-0x08a6,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x0889,6,getcharnamerequest,2
-0x0884,6,solvecharname,2
-0x08e6,4
-0x08e7,10,bookingsearchreq,2:4:6:8:12
-0x08e8,-1
-0x08e9,2,bookingdelreq,0
-0x08ea,4
-0x08eb,39,bookingupdatereq,2
-0x08ec,73
-0x08ed,43
-0x08ee,6
-0x08ef,6,bookingignorereq,2
-0x08f0,6
-0x08f1,6,bookingjoinpartyreq,2
-0x08f2,36
-0x08f3,-1
-0x08f4,6
-0x08f5,-1,bookingsummonmember,2:4
-0x08f6,22
-0x08f7,3
-0x08f8,7
-0x08f9,6
-0x08fa,6
-0x08fb,6,bookingcanceljoinparty,2
-0x0907,5,moveitem,2:4
-0x0908,5
-0x08d7,28,battlegroundreg,2:4
-0x0977,14 //Monster HP Bar
-0x0916,26,guildinvite2,2
-0x091d,41,bookingregreq,2:4:6
-0x08cb,10,ZC_PERSONAL_INFOMATION,2:4:6:8:10:11:13:15 //Still need further information
-// Merge Item
-0x096D,-1,ZC_MERGE_ITEM_OPEN,2:4 // ZC_MERGE_ITEM_OPEN
-0x096E,-1,mergeitem_req,2:4 // CZ_REQ_MERGE_ITEM
-0x096F,7,ZC_ACK_MERGE_ITEM,2:4:6 // ZC_ACK_MERGE_ITEM
-0x0974,2,mergeitem_cancel,0 // CZ_CANCEL_MERGE_ITEM
-0x0844,2,cashshopopen,0
-0x0849,16 //clif_cashshop_result
-0x0848,-1,cashshopbuy,2:6:4:10
-0x084a,2,cashshopclose,0
-0x08c9,2,cashshopitemlist,0
-
-//2012-04-18aRagexeRE [Special Thanks to Judas!]
-packet_ver: 31
-packet_keys: 0x01540E48,0x13041224,0x31247924 // [Shakto]
-0x023B,26,friendslistadd,2
-0x0361,5,hommenu,2:4
-0x08A8,36,storagepassword,2:4:20
-0x0802,26,partyinvite2,2
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x035F,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x08E5,41,bookingregreq,2:4:6    //Added to prevent disconnections
-0x08d2,10
-
-//2012-06-18
-packet_ver: 32
-packet_keys: 0x261F261F,0x261F261F,0x261F261F // [Shakto]
-0x0983,29 // ZC_MSG_STATE_CHANGE3
-0x0861,41,bookingregreq,2:4:6 //actually 12-05-03
-
-//2012-07-02aRagexeRE (unstable)
-packet_ver: 33
-packet_keys: 0x25733B31,0x53486CFD,0x398649BD // [Shakto]
-0x0363,19,wanttoconnection,2:6:10:14:18
-0x0364,6,ticksend,2
-0x085a,7,actionrequest,2:6
-0x0861,8,movefromkafra,2:4
-0x0862,10,useskilltoid,2:4:6
-0x0863,10,useskilltopos,2:4:6:8
-0x0886,6,solvecharname,2
-0x0889,90,useskilltoposinfo,2:4:6:8:10
-0x089e,6,dropitem,2:4
-0x089f,6,takeitem,2
-0x08a0,8,movetokafra,2:4
-0x094a,6,getcharnamerequest,2
-0x0953,5,walktoxy,2
-0x0960,5,changedir,2:4
-0x0879,41,bookingregreq,2:4:6
-
-//2013-03-20Ragexe (Judas)
-packet_ver: 34
-packet_keys: 0x3F094C49,0x55F86C1E,0x58AA359A // [Shakto]
-0x014f,6,guildrequestinfo,2
-0x01fd,15,repairitem,2:4:6:7:9:11:13
-//0x0281,-1,itemlistwindowselected,2:4:8:12
-0x035f,6,reqclickbuyingstore,2
-0x0363,6,ticksend,2
-0x0365,12,searchstoreinfolistitemclick,2:6:10
-0x0438,6,dropitem,2:4
-0x0447,2,booking_playcancel,0 // CZ_BLOCKING_PLAY_CANCEL
-0x044A,6,clientversion,2
-0x0844,2,cashshopopen,0
-0x0849,16 //clif_cashshop_result
-0x0848,-1,cashshopbuy,2:6:4:10
-0x084a,2,cashshopclose,0
-0x084b,19 //fallitem4
-0x085a,90,useskilltoposinfo,2:4:6:8:10
-0x085d,18,bookingregreq,2:4:6
-0x0868,-1,itemlistwindowselected,2:4:8:12
-0x086d,26,partyinvite2,2
-0x086f,26,friendslistadd,2
-0x0874,8,movefromkafra,2:4
-0x0881,5,walktoxy,2
-0x0886,2,reqclosebuyingstore,0
-0x0888,19,wanttoconnection,2:6:10:14:18
-0x088e,7,actionrequest,2:6
-0x0897,5,changedir,2:4
-0x0898,6,getcharnamerequest,2
-0x089b,10,useskilltoid,2:4:6
-0x08ac,8,movetokafra,2:4
-0x08c9,2,cashshopitemlist,0
-0x08cf,10 //Amulet spirits
-0x08d2,10
-0x0907,5,moveitem,2:4
-0x0908,5
-0x0922,-1,reqtradebuyingstore,2:4:8:12
-//0x092e,2,searchstoreinfonextpage,0
-0x0933,6,takeitem,2
-0x0938,-1,reqopenbuyingstore,2:4:8:9:89
-0x093f,5,hommenu,2:4
-0x0947,36,storagepassword,2:4:20
-0x094c,6,solvecharname,2
-0x094e,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0959,10,useskilltopos,2:4:6:8
-//0x095a,8,mailsetattach,2:4
-0x0977,14 //Monster HP Bar
-0x0978,6,reqworldinfo,2
-0x0979,50 //ackworldinfo
-0x097b,16,ZC_PERSONAL_INFOMATION,2:4:8:12:16:17:21:25 //Still need further information
-//0x0981,12,ZC_PERSONAL_INFOMATION_CHN,2:4:6:8:12:13:15:17:10 // Disabled until further information is found.
-0x0990,31 //additem
-0x0991,-1 //inv itemlist normal
-0x0992,-1 //inv itemlist equip
-0x0993,-1 //cart itemlist normal
-0x0994,-1 //cart itemlist equip
-0x0995,-1 //store itemlist normal
-0x0996,-1 //store itemlist equip
-0x0997,-1 //ZC_EQUIPWIN_MICROSCOPE_V5
-0x0998,8,equipitem,2:4 // CZ_REQ_WEAR_EQUIP_V5
-0x0999,11,ZC_WEAR_EQUIP_ACK,2:4:8:10 // cz_wear_equipv5
-0x099a,9 // take_off_equipv5
-0x099b,8 //maptypeproperty2
-
-// New Packets
-0x08C8,34	// ZC_NOTIFY_ACT3
-0x08ff,24 	// ZC_EFST_SET_ENTER
-0x0984,28 	// ZC_EFST_SET_ENTER2
-0x099f,22 	// ZC_SKILL_ENTRY4
-
-//2013-05-15aRagexe (Yommy)
-packet_ver: 35
-packet_keys: 0x75794A38,0x58A96BC1,0x296E6FB8 // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0362,5,changedir,2:4
-0x08A1,6,takeitem,2
-0x0944,6,dropitem,2:4
-0x0887,8,movetokafra,2:4
-0x08AC,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x092D,18,bookingregreq,2:4:6
-//0x08AA,8 CZ_JOIN_BATTLE_FIELD
-0x0963,-1,itemlistwindowselected,2:4:8:12
-0x0943,19,wanttoconnection,2:6:10:14:18
-0x0947,26,partyinvite2,2
-//0x0862,4 CZ_GANGSI_RANK
-0x0962,26,friendslistadd,2
-0x0931,5,hommenu,2:4
-0x093e,36,storagepassword,2:4:20
-
-//2013-05-22Ragexe (Yommy)
-packet_ver: 36
-packet_keys: 0x6948050B,0x06511D9D,0x725D4DF1 // [Shakto]
-0x08A2,7,actionrequest,2:6
-0x095C,10,useskilltoid,2:4:6
-0x0360,5,walktoxy,2
-0x07EC,6,ticksend,2
-0x0925,5,changedir,2:4
-0x095E,6,takeitem,2
-0x089C,6,dropitem,2:4
-0x08a3,8,movetokafra,2:4
-0x087E,8,movefromkafra,2:4
-0x0811,10,useskilltopos,2:4:6:8
-0x0964,90,useskilltoposinfo,2:4:6:8:10
-0x08a6,6,getcharnamerequest,2
-0x0369,6,solvecharname,2
-0x093e,12,searchstoreinfolistitemclick,2:6:10
-0x08aa,2,searchstoreinfonextpage,0
-0x095b,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0952,-1,reqtradebuyingstore,2:4:8:12
-0x0368,6,reqclickbuyingstore,2
-0x086E,2,reqclosebuyingstore,0
-0x0874,-1,reqopenbuyingstore,2:4:8:9:89
-0x089B,18,bookingregreq,2:4:6
-//0x0965,8 CZ_JOIN_BATTLE_FIELD
-0x086A,-1,itemlistwindowselected,2:4:8:12
-0x08A9,19,wanttoconnection,2:6:10:14:18
-0x0950,26,partyinvite2,2
-//0x08AC,4 CZ_GANGSI_RANK
-0x0362,26,friendslistadd,2
-0x0926,5,hommenu,2:4
-0x088e,36,storagepassword,2:4:20
-
-//2013-05-29Ragexe (Shakto)
-packet_ver: 37
-packet_keys: 0x023A6C87,0x14BF1F1E,0x5CC70CC9 // [Shakto]
-0x0890,7,actionrequest,2:6
-0x0438,10,useskilltoid,2:4:6
-0x0876,5,walktoxy,2
-0x0897,6,ticksend,2
-0x0951,5,changedir,2:4
-0x0895,6,takeitem,2
-0x08A7,6,dropitem,2:4
-0x0938,8,movetokafra,2:4
-0x0957,8,movefromkafra,2:4
-0x0917,10,useskilltopos,2:4:6:8
-0x085E,90,useskilltoposinfo,2:4:6:8:10
-0x0863,6,getcharnamerequest,2
-0x0937,6,solvecharname,2
-0x085A,12,searchstoreinfolistitemclick,2:6:10
-0x0941,2,searchstoreinfonextpage,0
-0x0918,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0936,-1,reqtradebuyingstore,2:4:8:12
-0x0892,6,reqclickbuyingstore,2
-0x0964,2,reqclosebuyingstore,0
-0x0869,-1,reqopenbuyingstore,2:4:8:9:89
-0x0874,18,bookingregreq,2,4:6
-//0x088E,8 // CZ_JOIN_BATTLE_FIELD
-0x0958,-1,itemlistwindowselected,2:4:8:12
-0x0919,19,wanttoconnection,2:6:10:14:18
-0x08A8,26,partyinvite2,2
-//0x0888,4 // CZ_GANGSI_RANK
-0x0877,26,friendslistadd,2
-0x023B,5,hommenu,2:4
-0x0956,36,storagepassword,2:4:20
-
-//2013-06-05Ragexe (Shakto)
-packet_ver: 38
-packet_keys: 0x646E08D9,0x5F153AB5,0x61B509B5 // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x0436,4 // CZ_GANGSI_RANK
-0x023B,26,friendslistadd,2
-0x0361,5,hommenu,2,4
-0x0883,36,storagepassword,2:4:20
-0x097C,4,ranklist,2
-
-//2013-06-12Ragexe (Shakto)
-packet_ver: 39
-packet_keys: 0x6D166F66,0x3C000FCF,0x295B0FCB // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x087E,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x0919,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x0436,4 // CZ_GANGSI_RANK
-0x0940,26,friendslistadd,2
-0x093A,5,hommenu,2:4
-0x0964,36,storagepassword,2:4:20
-
-//2013-06-18Ragexe (Shakto)
-packet_ver: 40
-packet_keys: 0x434115DE,0x34A10FE9,0x6791428E // [Shakto]
-0x0889,7,actionrequest,2:6
-0x0951,10,useskilltoid,2:4:6
-0x088E,5,walktoxy,2
-0x0930,6,ticksend,2
-0x08A6,5,changedir,2:4
-0x0962,6,takeitem,2
-0x0917,6,dropitem,2:4
-0x0885,8,movetokafra,2:4
-0x0936,8,movefromkafra,2:4
-0x096A,10,useskilltopos,2:4:6:8
-0x094F,90,useskilltoposinfo,2:4:6:8:10
-0x0944,6,getcharnamerequest,2
-0x0945,6,solvecharname,2
-0x0890,12,searchstoreinfolistitemclick,2:6:10
-0x0363,2,searchstoreinfonextpage,0
-0x0281,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0891,-1,reqtradebuyingstore,2:4:8:12
-0x0862,6,reqclickbuyingstore,2
-0x085A,2,reqclosebuyingstore,0
-0x0932,-1,reqopenbuyingstore,2:4:8:9:89
-0x08A7,18,bookingregreq,2:4:6
-//0x087A,8 // CZ_JOIN_BATTLE_FIELD
-0x0942,-1,itemlistwindowselected,2:4:8:12
-0x095B,19,wanttoconnection,2:6:10:14:18
-0x0887,26,partyinvite2,2
-//0x0878,4 // CZ_GANGSI_RANK
-0x0953,26,friendslistadd,2
-0x02C4,5,hommenu,2:4
-0x0864,36,storagepassword,2:4:20
-
-//2013-06-26Ragexe
-packet_ver: 41
-packet_keys: 0x38F453EF,0x6A040FD8,0X65BD6668 // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x094D,5,changedir,2:4
-0x088B,6,takeitem,2
-0x0952,6,dropitem,2:4
-0x0921,8,movetokafra,2:4
-0x0817,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0365,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0894,18,bookingregreq,2:4:6
-//0x0860,8 // CZ_JOIN_BATTLE_FIELD
-0x08A5,-1,itemlistwindowselected,2:4:8:12
-0x088C,19,wanttoconnection,2:6:10:14:18
-0x0895,26,partyinvite2,2
-//0x088F,4 // CZ_GANGSI_RANK
-0x08AB,26,friendslistadd,2
-0x0960,5,hommenu,2:4
-0x0930,36,storagepassword,2:4:20
-
-//2013-07-03Ragexe
-packet_ver: 42
-packet_keys: 0x4FF90E23,0x0F1432F2,0x4CFA1EDA // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0930,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0202,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x0436,4 // CZ_GANGSI_RANK
-0x0360,26,friendslistadd,2
-0x094A,5,hommenu,2:4
-0x0873,36,storagepassword,2:4:20
-
-//2013-07-10Ragexe
-packet_ver: 43
-packet_keys: 0x458F758F,0x4CCF3F8F,0x4A9C4237
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x0436,4 // CZ_GANGSI_RANK
-0x023B,26,friendslistadd,2
-0x0361,5,hommenu,2:4
-0x0880,36,storagepassword,2:4:20
-0x0848,-1,cashshopbuy,2:6:4:10
-0x097D,288 //ZC_ACK_RANKING
-
-//2013-07-17Ragexe
-packet_ver: 44
-packet_keys: 0x2BED4F91,0x5F9E00CF,0x5EE5520C
-0x0918,7,actionrequest,2:6
-0x091E,10,useskilltoid,2:4:6
-0x083C,5,walktoxy,2
-0x02C4,6,ticksend,2
-0x088C,5,changedir,2:4
-0x08A9,6,takeitem,2
-0x0917,6,dropitem,2:4
-0x089B,8,movetokafra,2:4
-0x0956,8,movefromkafra,2:4
-0x0882,10,useskilltopos,2:4:6:8
-0x0952,90,useskilltoposinfo,2:4:6:8:10
-0x0958,6,getcharnamerequest,2
-0x0967,6,solvecharname,2
-0x0960,12,searchstoreinfolistitemclick,2:6:10
-0x0819,2,searchstoreinfonextpage,0
-0x086B,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x093B,-1,reqtradebuyingstore,2:4:8:12
-0x0898,6,reqclickbuyingstore,2
-0x096A,2,reqclosebuyingstore,0
-0x08AA,-1,reqopenbuyingstore,2:4:8:9:89
-0x0862,18,bookingregreq,2:4:6
-//0x08A6,8 // CZ_JOIN_BATTLE_FIELD
-0x0897,-1,itemlistwindowselected,2:4:8:12
-0x091D,19,wanttoconnection,2:6:10:14:18
-0x092F,26,partyinvite2,2
-//0x086C,4 // CZ_GANGSI_RANK
-0x0863,26,friendslistadd,2
-0x088A,5,hommenu,2:4
-0x095B,36,storagepassword,2:4:20
-0x09A6,12,ZC_BANKING_CHECK,2:10
-0x09A7,10,bankdeposit,2:6
-0x09A8,16,ZC_ACK_BANKING_DEPOSIT,2:4:12
-0x09A9,10,bankwithdrawal,2:6
-0x09AA,16,ZC_ACK_BANKING_WITHDRAW,2:4:12
-0x09AB,6,bankcheck,2
-0x09B6,6,bankopen,2
-0x09B7,4,ZC_ACK_OPEN_BANKING,2
-0x09B8,6,bankclose,2
-0x09B9,4,ZC_ACK_CLOSE_BANKING,2
-
-//2013-07-31cRagexe
-0x09ca,23 // ZC_SKILL_ENTRY5
-0x09cb,17	// ZC_USE_SKILL2
-
-//2013-08-07Ragexe
-packet_ver: 45
-packet_keys: 0x7E241DE0,0x5E805580,0x3D807D80 // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x436,4 // CZ_GANGSI_RANK
-0x023B,26,friendslistadd,2
-0x0361,5,hommenu,2:4
-0x0887,36,storagepassword,2:4:20
-0x09C1,10,ZC_C_MARKERINFO,2:6:8
-// Merge Item
-0x096D,-1,ZC_MERGE_ITEM_OPEN,2:4 // ZC_MERGE_ITEM_OPEN
-0x096E,-1,mergeitem_req,2:4 // CZ_REQ_MERGE_ITEM
-0x096F,7,ZC_ACK_MERGE_ITEM,2:4:6:7 // ZC_ACK_MERGE_ITEM
-0x0974,2,mergeitem_cancel,0 // CZ_CANCEL_MERGE_ITEM
-
-//2013-12-23Ragexe
-packet_ver: 46
-packet_keys: 0x631C511C,0x111C111C,0x111C111C // [Shakto]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4:6
-//0x363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022D,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x436,4 // CZ_GANGSI_RANK
-0x023B,26,friendslistadd,2
-0x0361,5,hommenu,2:4
-0x08A4,36,storagepassword,2:4:20
-//New Packets
-//0x097E,12 //ZC_UPDATE_RANKING_POINT
-0x09CE,102,itemmonster,2
-0x09D4,2,npcshopclosed,0
-//NPC Market
-0x09D5,-1
-0x09D6,-1,npcmarketpurchase,2:4:6
-0x09D7,-1
-0x09D8,2,npcmarketclosed,0
-// Clan System
-0x0988,6
-0x0989,2
-0x098A,-1
-0x098D,-1,clanchat,2:4
-0x098E,-1
-// Sale
-0x09AC,-1,salesearch,2:4:8
-0x09AD,8
-0x09AE,17,saleadd,2:6:8:12:16
-0x09AF,4
-0x09B0,8,saleremove,2:6
-0x09B1,4
-0x09B2,8
-0x09B3,4
-0x09B4,6,saleopen,2
-0x09BC,6,saleclose,2
-0x09C3,8,salerefresh,2:6
-0x09C4,8
-
-// New Packet
-0x097A,-1		// ZC_ALL_QUEST_LIST2
-0x09DB,-1		// ZC_NOTIFY_MOVEENTRY10
-0x09DC,-1		// ZC_NOTIFY_NEWENTRY10
-0x09DD,-1	// ZC_NOTIFY_STANDENTRY10
-0x09DF,7		// ZC_ACK_WHISPER02
-
-//2014-10-16Ragexe
-packet_ver: 50
-packet_keys: 0x2DFF467C,0x444B37EE,0x2C1B634F // [YomRawr]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0967,5,changedir,2:4
-0x07E4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07EC,8,movetokafra,2:4
-0x022D,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,bookingregreq,2:4
-// 0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8
-0x086E,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite,2
-// 0x0922,4 // CZ_GANGSI_RANK
-0x094B,26,friendslistadd,2
-0x0364,5,hommenu,2:4
-0x0936,36,storagepassword,0
-0x09DF,7
-
-// New packet
-0x0A00,269		// ZC_SHORTCUT_KEY_LIST_V3
-0x0A01,3,hotkeyrowshift,2	// CZ_SHORTCUTKEYBAR_ROTATE
-0x0A02,4			// ZC_DRESSROOM_OPEN
-0x0A0E,14		// ZC_BATTLEFIELD_NOTIFY_HP2
-0x09F7,75		// ZC_PROPERTY_HOMUN_2
-0x09E5,18		// ZC_DELETEITEM_FROM_MCSTORE2
-0x09E6,22		// ZC_UPDATE_ITEM_FROM_BUYING_STORE2
-
-// Roulette System [Yommy]
-0x0A19,2,rouletteopen,0	// CZ_REQ_OPEN_ROULETTE
-0x0A1A,23 		// ZC_ACK_OPEN_ROULETTE
-0x0A1B,2,rouletteinfo,0 	// CZ_REQ_ROULETTE_INFO
-0x0A1C,-1 		// ZC_ACK_ROULETTE_INFO
-0x0A1D,2,rouletteclose,0 	// CZ_REQ_CLOSE_ROULETTE
-0x0A1E,3 			// ZC_ACK_CLOSE_ROULETTE
-0x0A1F,2,roulettegenerate,0 	// CZ_REQ_GENERATE_ROULETTE
-0x0A20,21 		// ZC_ACK_GENERATE_ROULETTE
-0x0A21,3,rouletterecvitem,2 	// CZ_RECV_ROULETTE_ITEM
-0x0A22,5 			// ZC_RECV_ROULETTE_ITEM
-
-//2014-10-22bRagexe
-packet_ver: 51
-packet_keys: 0x290551EA,0x2B952C75,0x2D67669B // [YomRawr]
-0x006d,149
-0x023b,10,useskilltopos,2:4:6:8
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x035f,6,ticksend,2
-0x0360,6,reqclickbuyingstore,2
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x0368,6,solvecharname,2
-0x0369,7,actionrequest,2:6
-0x0437,5,walktoxy,2
-0x0438,36,storagepassword,2:4:20
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0817,2,reqclosebuyingstore,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0835,12,searchstoreinfolistitemclick,2:6:10
-0x083c,10,useskilltoid,2:4:6
-0x0878,8,movetokafra,2:4
-0x087d,6,dropitem,2:4
-0x0896,26,partyinvite2,2
-0x0899,5,hommenu,2:4
-0x08aa,8,movefromkafra,2:4
-//0x08ab,4	// CZ_GANGSI_RANK
-0x08ad,5,changedir,2:4
-0x08e3,149
-0x091a,26,friendslistadd,2
-//0x092b,8	// CZ_JOIN_BATTLE_FIELD
-0x093b,19,wanttoconnection,2:6:10:14:18
-0x0940,2,searchstoreinfonextpage,0
-0x094e,6,takeitem,2
-0x0955,18,bookingregreq,2:4:6
-0x096a,6,getcharnamerequest,2
-
-// New Packet
-0x0A18,14		// ZC_ACCEPT_ENTER3
-0x0A28,3		// ZC_ACK_OPENSTORE2
-0x09FD,-1		// ZC_NOTIFY_MOVEENTRY11
-0x09FE,-1		// ZC_NOTIFY_NEWENTRY11
-0x09FF,-1		// ZC_NOTIFY_STANDENTRY11
-//0x09F8,-1		// ZC_ALL_QUEST_LIST3
-
-//2015-05-13aRagexe
-packet_ver: 52
-packet_keys: 0x62C86D09,0x75944F17,0x112C133D // [YomRawr]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035F,6,ticksend,2
-0x0924,5,changedir,2:4
-0x0958,6,takeitem,2
-0x0885,6,dropitem,2:4
-0x0879,8,movetokafra,2:4
-0x0864,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x096A,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x022D,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0883,18,bookingregreq,2:4:6
-// 0x02C4,8 CZ_JOIN_BATTLE_FIELD
-0x0960,-1,itemlistwindowselected,2:4:8:12
-0x0363,19,wanttoconnection,2:6:10:14:18
-0x094A,26,partyinvite2,2
-// 0x0927,4 CZ_GANGSI_RANK
-0x08A8,26,friendslistadd,2
-0x0817,5,hommenu,2:4
-0x0923,36,storagepassword,2:4:20
-
-// New Packets
-0xA3B,-1		// ZC_HAT_EFFECT
-
-// RODEX Mail system
-0x09E7,3		// ZC_NOTIFY_UNREADMAIL
-0x09E8,11,mailrefresh,2:3	// CZ_OPEN_MAILBOX
-0x09E9,2,dull,0 	// CZ_CLOSE_MAILBOX
-0x09EA,11,mailread,2:3	// CZ_REQ_READ_MAIL
-0x09EB,-1		// ZC_ACK_READ_MAIL
-0x09EC,-1,mailsend,2:4:28:52:60:62:64	// CZ_REQ_WRITE_MAIL
-0x09ED,3		// ZC_ACK_WRITE_MAIL
-0x09EE,11,mailrefresh,2:3	// CZ_REQ_NEXT_MAIL_LIST
-0x09EF,11,mailrefresh,2:3 	// CZ_REQ_REFRESH_MAIL_LIST
-0x09F0,-1		// ZC_ACK_MAIL_LIST
-0x09F1,11,mailgetattach,0	// CZ_REQ_ZENY_FROM_MAIL
-0x09F2,12	// ZC_ACK_ZENY_FROM_MAIL
-0x09F3,11,mailgetattach,0	// CZ_REQ_ITEM_FROM_MAIL
-0x09F4,12	// ZC_ACK_ITEM_FROM_MAIL
-0x09F5,11,maildelete,0	// CZ_REQ_DELETE_MAIL
-0x09F6,11		// ZC_ACK_DELETE_MAIL
-0x0A03,2,mailcancel,0	// CZ_REQ_CANCEL_WRITE_MAIL
-0x0A04,6,mailsetattach,2:4	// CZ_REQ_ADD_ITEM_TO_MAIL
-0x0A05,53	// ZC_ACK_ADD_ITEM_TO_MAIL
-0x0A06,6,mailwinopen,2:4	// CZ_REQ_REMOVE_ITEM_MAIL
-0x0A07,9		// ZC_ACK_REMOVE_ITEM_MAIL
-0x0A08,26,mailbegin,0	// CZ_REQ_OPEN_WRITE_MAIL
-0x0A12,27	// ZC_ACK_OPEN_WRITE_MAIL
-0x0A13,26,mailreceiver,2	// CZ_CHECK_RECEIVE_CHARACTER_NAME
-0x0A14,10		// ZC_CHECK_RECEIVE_CHARACTER_NAME
-0x0A32,2		// ZC_OPEN_RODEX_THROUGH_NPC_ONLY
-
-// New EquipPackets Support
-0x0A09,45	// ZC_ADD_EXCHANGE_ITEM3
-0x0A0A,47	// ZC_ADD_ITEM_TO_STORE3
-0x0A0B,47	// ZC_ADD_ITEM_TO_CART3
-0x0A0C,56	// ZC_ITEM_PICKUP_ACK_V6
-0x0A0D,-1	// ZC_INVENTORY_ITEMLIST_EQUIP_V6
-0x0A0F,-1		// ZC_CART_ITEMLIST_EQUIP_V6
-0x0A10,-1		// ZC_STORE_ITEMLIST_EQUIP_V6
-0x0A2D,-1	// ZC_EQUIPWIN_MICROSCOPE_V6
-
-// OneClick Itemidentify
-0x0A35,4,oneclick_itemidentify,2	// CZ_REQ_ONECLICK_ITEMIDENTIFY
-
-// Achievement System
-0x0A23,-1		// ZC_ALL_ACH_LIST
-0x0A24,66	// ZC_ACH_UPDATE
-0x0A25,6,dull,0	// CZ_REQ_ACH_REWARD
-0x0A26,7		// ZC_REQ_ACH_REWARD_ACK
-
-// Title System
-0x0A2E,6,dull,0	// CZ_REQ_CHANGE_TITLE
-0x0A2F,7		// ZC_ACK_CHANGE_TITLE
-0x0A30,106	// ZC_ACK_REQNAMEALL2
-
-// Pet Evolution System
-0x09FB,-1,dull,0	// CZ_PET_EVOLUTION
-0x09FC,6		// ZC_PET_EVOLUTION_RESULT
-
-//2015-05-20aRagexe
-0x0A3D,18,saleadd,2:6:8:12:16
-
-//2015-09-16Ragexe
-packet_ver: 53
-packet_keys: 0x17F83A19,0x116944F4,0x1CC541E9 // [Napster]
-0x0869,7,actionrequest,2:6
-0x093E,10,useskilltoid,2:4:6
-0x0877,5,walktoxy,2
-0x08AC,6,ticksend,2
-0x0936,5,changedir,2:4
-0x089C,6,takeitem,2
-0x092F,6,dropitem,2:4
-0x0934,8,movetokafra,2:4
-0x085E,8,movefromkafra,2:4
-0x022D,10,useskilltopos,2:4:6:8
-0x0873,90,useskilltoposinfo,2:4:6:8:10
-0x095A,6,getcharnamerequest,2
-0x0942,6,solvecharname,2
-0x087F,12,searchstoreinfolistitemclick,2:6:10
-0x0817,2,searchstoreinfonextpage,0
-0x0920,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0881,-1,reqtradebuyingstore,2:4:8:12
-0x0835,6,reqclickbuyingstore,2
-0x092E,2,reqclosebuyingstore,0
-0x0948,-1,reqopenbuyingstore,2:4:8:9:89
-0x089B,18,bookingregreq,2:4:6
-// 0x094F,8 CZ_JOIN_BATTLE_FIELD
-0x0961,-1,itemlistwindowselected,2:4:8:12
-0x0969,19,wanttoconnection,2:6:10:14:18
-0x0924,26,partyinvite2,2
-// 0x0938,4 CZ_GANGSI_RANK
-0x089E,26,friendslistadd,2
-0x0960,5,hommenu,2:4
-0x0941,36,storagepassword,2:4:20
-
-// New Packet
-0x097F,-1		// ZC_SELECTCART
-0x0980,7,selectcart,2:6	// CZ_SELECTCART
-
-//2015-10-01bRagexeRE
-packet_ver: 54
-packet_keys: 0x45B945B9,0x45B945B9,0x45B945B9	// [Dastgir]
-0x0369,7,actionrequest,2:6
-0x083c,10,useskilltoid,2:4:6
-0x0437,5,walktoxy,2
-0x035f,6,ticksend,2
-0x0202,5,changedir,2:4
-0x07e4,6,takeitem,2
-0x0362,6,dropitem,2:4
-0x07ec,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposmoreinfo,2:4:6:8:10
-0x096a,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0811,-1,reqtradebuyingstore,2:4:8:12
-0x0360,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x0815,-1,reqopenbuyingstore,2:4:8:9:89
-0x0365,18,partybookingregisterreq,2:4:6
-//0x0363,8 // CZ_JOIN_BATTLE_FIELD
-0x0281,-1,itemlistwindowselected,2:4:8:12
-0x022d,19,wanttoconnection,2:6:10:14:18
-0x0802,26,partyinvite2,2
-//0x0436,4 // CZ_GANGSI_RANK
-0x023b,26,friendslistadd,2
-0x0361,5,hommenu,2:4
-0x0860,36,storagepassword,2:4:20
-
-//2015-11-04aRagexe
-packet_ver: 55
-packet_keys: 0x4C17382A,0x7ED174C9,0x29961E4F // [Winnie]
-0x0369,7,actionrequest,2:6
-0x083C,10,useskilltoid,2:4:6
-0x0363,5,walktoxy,2
-0x0886,6,ticksend,2
-0x0928,5,changedir,2:4
-0x0964,6,takeitem,2
-0x0437,6,dropitem,2:4
-0x088B,8,movetokafra,2:4
-0x0364,8,movefromkafra,2:4
-0x0438,10,useskilltopos,2:4:6:8
-0x0366,90,useskilltoposinfo,2:4:6:8:10
-0x0887,6,getcharnamerequest,2
-0x0368,6,solvecharname,2
-0x0838,12,searchstoreinfolistitemclick,2:6:10
-0x0835,2,searchstoreinfonextpage,0
-0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
-0x0815,-1,reqtradebuyingstore,2:4:8:12
-0x0436,6,reqclickbuyingstore,2
-0x0817,2,reqclosebuyingstore,0
-0x023B,-1,reqopenbuyingstore,2:4:8:9:89
-0x0811,18,bookingregreq,2:4:6
-//0x0939,8 CZ_JOIN_BATTLE_FIELD
-0x093A,-1,itemlistwindowselected,2:4:8:12
-0x0360,19,wanttoconnection,2:6:10:14:18
-0x08A5,26,partyinvite2,2
-//0x08A3,4 CZ_GANGSI_RANK
-0x07EC,26,friendslistadd,2
-0x088D,5,hommenu,2:4
-0x0940,36,storagepassword,2:4:20
-
-// 2016-03-02bRagexe
-0x0A51,34
-
-// 2016-03-30aRagexe
-0x0A6E,-1,mailsend,2:4:28:52:60:62:64:68	// CZ_REQ_WRITE_MAIL2
-
-// 2016-06-01aRagexe
-0x0A7D,-1
-
-// 2017-05-02dRagexeRE
-0x0A43,85
-0x0A44,-1
-0x0ABD,10
-
-//Add new packets here
-//packet_ver: 56

+ 2407 - 0
db/pre-re/achievement_db.yml

@@ -0,0 +1,2407 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# 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/>.
+#
+###########################################################################
+# Custom Achievement Database
+###########################################################################
+#
+# Achievement Settings
+#
+###########################################################################
+# ID - Unique achievement ID.
+###########################################################################
+# Group - Achievement group type. Each achievement type calls a specific
+# objective check.
+# Valid groups:
+#  AG_ADD_FRIEND
+#  AG_ADVENTURE
+#  AG_BABY
+#  AG_BATTLE
+#  AG_CHATTING
+#  AG_CHATTING_COUNT
+#  AG_CHATTING_CREATE
+#  AG_CHATTING_DYING
+#  AG_EAT
+#  AG_GET_ITEM
+#  AG_GET_ZENY
+#  AG_GOAL_ACHIEVE
+#  AG_GOAL_LEVEL
+#  AG_GOAL_STATUS
+#  AG_HEAR
+#  AG_JOB_CHANGE
+#  AG_MARRY
+#  AG_PARTY
+#  AG_ENCHANT_FAIL
+#  AG_ENCHANT_SUCCESS
+#  AG_SEE
+#  AG_SPEND_ZENY
+#  AG_TAMING
+###########################################################################
+# Name - Achievement name. Used when sending rewards through RODEX.
+###########################################################################
+# Target - A list of monster ID and count values that the achievement
+# requires. The target count can also be used for achievements that keep
+# a counter while not being related to monster kills.
+# Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+###########################################################################
+# Condition - A conditional statement that must be met for the achievement
+# to be considered complete.
+###########################################################################
+# Map - A map name that is used for the AG_CHATTING type which increments
+# the counter based on the player's map.
+###########################################################################
+# Dependent: - A list of achievement IDs that need to be completed before
+# this achievement is considered complete.
+###########################################################################
+# Reward - A list of rewards that are given on completion. All fields are
+# optional.
+#   ItemID: Item ID
+#   Amount:  Amount of Item ID (default 1)
+#   Script: Bonus Script
+#   TitleID: Title ID
+###########################################################################
+# Score - Achievement points that are given on completion.
+###########################################################################
+
+Achievements:
+  - ID: 110000
+    Group: "AG_EAT"
+    Name: "At this time I live to eat"
+    Score: 10
+  - ID: 110001
+    Group: "AG_SEE"
+    Name: "A fan of this polarity"
+    Score: 10
+  - ID: 120001
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120002
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120003
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120004
+    Group: "AG_ADVENTURE"
+    Name: "West Prontera Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120005
+    Group: "AG_ADVENTURE"
+    Name: "West Prontera Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120006
+    Group: "AG_ADVENTURE"
+    Name: "East Prontera Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120007
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120008
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120009
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120010
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120011
+    Group: "AG_ADVENTURE"
+    Name: "East Geffen Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120012
+    Group: "AG_ADVENTURE"
+    Name: "Southeast Geffen Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120013
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120014
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120015
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120016
+    Group: "AG_ADVENTURE"
+    Name: "South Geffen Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120017
+    Group: "AG_ADVENTURE"
+    Name: "South Geffen Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120018
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120019
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120020
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120021
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120022
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120023
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(6)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120024
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120025
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120026
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120027
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120028
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120029
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120030
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120031
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120032
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120033
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120034
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120035
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120036
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120037
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120038
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120039
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120040
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120041
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120042
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(6)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120043
+    Group: "AG_ADVENTURE"
+    Name: "South Aldebaran Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120044
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120045
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120046
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120047
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120048
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120049
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(6)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120050
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(7)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120051
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(8)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120052
+    Group: "AG_ADVENTURE"
+    Name: "Border Checkpoint Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120053
+    Group: "AG_ADVENTURE"
+    Name: "Border Checkpoint Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120054
+    Group: "AG_ADVENTURE"
+    Name: "Kiel Hyre Mansion Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120055
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120056
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120057
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120058
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Gorge Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120059
+    Group: "AG_ADVENTURE"
+    Name: "Kiel Hyre Academy Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120060
+    Group: "AG_ADVENTURE"
+    Name: "Guard Camp Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120061
+    Group: "AG_ADVENTURE"
+    Name: "Yuno Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120062
+    Group: "AG_ADVENTURE"
+    Name: "Front of Thanatos Tower Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120063
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120064
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120065
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120066
+    Group: "AG_ADVENTURE"
+    Name: "Abyss Lake Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120067
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120068
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120069
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120070
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120071
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120072
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(6)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120073
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(7)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120074
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(8)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120075
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120076
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120077
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120078
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Plains Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120079
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120080
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120081
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120082
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Grassland Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120083
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Grassland Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120084
+    Group: "AG_ADVENTURE"
+    Name: "Portus Luna Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120085
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120086
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120087
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120088
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120089
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(5)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120090
+    Group: "AG_ADVENTURE"
+    Name: "Eclage Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120091
+    Group: "AG_ADVENTURE"
+    Name: "North Bitfrost Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120092
+    Group: "AG_ADVENTURE"
+    Name: "South Bitfrost Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120093
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120094
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120095
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120096
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120097
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120098
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120099
+    Group: "AG_ADVENTURE"
+    Name: "Outskirts of Kamidal Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120100
+    Group: "AG_ADVENTURE"
+    Name: "Outskirts of Kamidal Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120101
+    Group: "AG_ADVENTURE"
+    Name: "Amatsu Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120102
+    Group: "AG_ADVENTURE"
+    Name: "Kunlun Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120103
+    Group: "AG_ADVENTURE"
+    Name: "Gonryun Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120104
+    Group: "AG_ADVENTURE"
+    Name: "Ayothaya Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120105
+    Group: "AG_ADVENTURE"
+    Name: "Moscovia Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120106
+    Group: "AG_ADVENTURE"
+    Name: "Brasilis Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120107
+    Group: "AG_ADVENTURE"
+    Name: "Dewata Field Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120108
+    Group: "AG_ADVENTURE"
+    Name: "Malaya Field Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120109
+    Group: "AG_ADVENTURE"
+    Name: "Malaya Field Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 10
+  - ID: 120110
+    Group: "AG_ADVENTURE"
+    Name: "Abbey Underground Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120111
+    Group: "AG_ADVENTURE"
+    Name: "Abyss Lake Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120112
+    Group: "AG_ADVENTURE"
+    Name: "Clock Tower Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120113
+    Group: "AG_ADVENTURE"
+    Name: "Amatsu Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120114
+    Group: "AG_ADVENTURE"
+    Name: "Ant Hell Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120115
+    Group: "AG_ADVENTURE"
+    Name: "Ayothaya Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120116
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120117
+    Group: "AG_ADVENTURE"
+    Name: "Brasilis Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120118
+    Group: "AG_ADVENTURE"
+    Name: "Clock Tower Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120119
+    Group: "AG_ADVENTURE"
+    Name: "Istana Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120120
+    Group: "AG_ADVENTURE"
+    Name: "Scaraba Hole Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120121
+    Group: "AG_ADVENTURE"
+    Name: "Bitfrost Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120122
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120123
+    Group: "AG_ADVENTURE"
+    Name: "Geffen Underground Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120124
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(1)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120125
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(2)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120126
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(3)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120127
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(4)"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120128
+    Group: "AG_ADVENTURE"
+    Name: "Kunlun Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120129
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120130
+    Group: "AG_ADVENTURE"
+    Name: "Sphinx Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120131
+    Group: "AG_ADVENTURE"
+    Name: "Izlude Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120132
+    Group: "AG_ADVENTURE"
+    Name: "Robot Factory Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120133
+    Group: "AG_ADVENTURE"
+    Name: "Bio Lab Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120134
+    Group: "AG_ADVENTURE"
+    Name: "Gonryun Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120135
+    Group: "AG_ADVENTURE"
+    Name: "Nogg Road Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120136
+    Group: "AG_ADVENTURE"
+    Name: "Coal Mine Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120137
+    Group: "AG_ADVENTURE"
+    Name: "Pyramid Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120138
+    Group: "AG_ADVENTURE"
+    Name: "Orc Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120139
+    Group: "AG_ADVENTURE"
+    Name: "Payon Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120140
+    Group: "AG_ADVENTURE"
+    Name: "Labyrinth Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120141
+    Group: "AG_ADVENTURE"
+    Name: "Undersea Tunnel Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120142
+    Group: "AG_ADVENTURE"
+    Name: "Thanatos Tower Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120143
+    Group: "AG_ADVENTURE"
+    Name: "Thor Volcano Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120144
+    Group: "AG_ADVENTURE"
+    Name: "Sunken Ship Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120145
+    Group: "AG_ADVENTURE"
+    Name: "Turtle Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 120146
+    Group: "AG_ADVENTURE"
+    Name: "Toy Factory Dungeon Exploration"
+    #Reward:
+    #  ItemID: 22876
+    Score: 20
+  - ID: 127001
+    Group: "AG_CHATTING"
+    Name: "Prontera Contribution"
+    Map: "prontera"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127002
+    Group: "AG_CHATTING"
+    Name: "Geffen Contribution"
+    Map: "geffen"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127003
+    Group: "AG_CHATTING"
+    Name: "Morocc Contribution"
+    Map: "morocc"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127004
+    Group: "AG_CHATTING"
+    Name: "Payon Contribution"
+    Map: "payon"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127005
+    Group: "AG_CHATTING"
+    Name: "Yuno Contribution"
+    Map: "yuno"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127006
+    Group: "AG_CHATTING"
+    Name: "Lighthalzen Contribution"
+    Map: "lighthalzen"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127007
+    Group: "AG_CHATTING"
+    Name: "Einbroch Contribution"
+    Map: "einbroch"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127008
+    Group: "AG_CHATTING"
+    Name: "Rachel Contribution"
+    Map: "rachel"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127009
+    Group: "AG_CHATTING"
+    Name: "Veins Contribution"
+    Map: "veins"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 128000
+    Group: "AG_BATTLE"
+    Name: "Uninvited Guest"
+    #Target:
+    #  - MobID: 2996
+    #    Count: 1
+    Score: 10
+  - ID: 128001
+    Group: "AG_BATTLE"
+    Name: "Strange Guest"
+    #Target:
+    #  - MobID: 2996
+    #    Count: 10
+    Score: 10
+  - ID: 128002
+    Group: "AG_BATTLE"
+    Name: "Get along with map..."
+    #Target:
+    #  - MobID: 2996
+    #    Count: 25
+    Score: 20
+  - ID: 128003
+    Group: "AG_BATTLE"
+    Name: "Welcomed Guest"
+    #Target:
+    #  - MobID: 2996
+    #    Count: 50
+    Score: 30
+  - ID: 128004
+    Group: "AG_BATTLE"
+    Name: "Kimmy's best friend"
+    #Target:
+    #  - MobID: 2996
+    #    Count: 100
+    Score: 50
+  - ID: 128005
+    Group: "AG_BATTLE"
+    Name: "Novice Angler"
+    #Target:
+    #  - MobID: 2322
+    #    Count: 1
+    Score: 10
+  - ID: 128006
+    Group: "AG_BATTLE"
+    Name: "Juicy Hunter"
+    #Target:
+    #  - MobID: 2322
+    #    Count: 10
+    Score: 20
+  - ID: 128007
+    Group: "AG_BATTLE"
+    Name: "Rhythm Master"
+    #Target:
+    #  - MobID: 2322
+    #    Count: 50
+    Score: 50
+  - ID: 128008
+    Group: "AG_BATTLE"
+    Name: "Bold Adventurer"
+    Target:
+      - MobID: 1929
+        Count: 1
+    Score: 10
+  - ID: 128009
+    Group: "AG_BATTLE"
+    Name: "Baphomet Hatred"
+    Target:
+      - MobID: 1929
+        Count: 10
+    Score: 20
+  - ID: 128010
+    Group: "AG_BATTLE"
+    Name: "Goat's Nemesis"
+    Target:
+      - MobID: 1929
+        Count: 50
+    Score: 50
+  - ID: 128011
+    Group: "AG_BATTLE"
+    Name: "Ordinary Tourist"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 1
+    Score: 10
+  - ID: 128012
+    Group: "AG_BATTLE"
+    Name: "Backcountry Expert"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 10
+    Score: 20
+  - ID: 128013
+    Group: "AG_BATTLE"
+    Name: "Able to eat more like this"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 50
+    Score: 50
+  - ID: 128014
+    Group: "AG_BATTLE"
+    Name: "Digest hard meat"
+    #Target:
+    #  - MobID: 2319
+    #    Count: 1
+    Score: 10
+  - ID: 128015
+    Group: "AG_BATTLE"
+    Name: "Master of Escape"
+    #Target:
+    #  - MobID: 2319
+    #    Count: 10
+    Score: 20
+  - ID: 128016
+    Group: "AG_BATTLE"
+    Name: "Immortal Hunter"
+    #Target:
+    #  - MobID: 2319
+    #    Count: 50
+    Score: 50
+  - ID: 128017
+    Group: "AG_BATTLE"
+    Name: "Stood up and overcame despair"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 1
+    Score: 10
+  - ID: 128018
+    Group: "AG_BATTLE"
+    Name: "Ember of Hope"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 10
+    Score: 10
+  - ID: 128019
+    Group: "AG_BATTLE"
+    Name: "Pouring Aurora"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 25
+    Score: 20
+  - ID: 128020
+    Group: "AG_BATTLE"
+    Name: "Who is desperate? I am hopeless!"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 50
+    Score: 30
+  - ID: 128021
+    Group: "AG_BATTLE"
+    Name: "I know god will save the world"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 100
+    Score: 50
+  - ID: 128022
+    Group: "AG_BATTLE"
+    Name: "There was mercy in Morocc army"
+    #Target:
+    #  - MobID: 3000
+    #  Count: 1
+    Score: 10
+  - ID: 128023
+    Group: "AG_BATTLE"
+    Name: "There was fear in Morocc army"
+    #Target:
+    #  - MobID: 3000
+    #    Count: 10
+    Score: 20
+  - ID: 128024
+    Group: "AG_BATTLE"
+    Name: "Guard of weak army"
+    #Target:
+    #  - MobID: 3000
+    #    Count: 50
+    Score: 50
+  - ID: 128025
+    Group: "AG_BATTLE"
+    Name: "Audience with the queen"
+    #Target:
+    #  - MobID: 2529
+    #    Count: 1
+    Score: 10
+  - ID: 128026
+    Group: "AG_BATTLE"
+    Name: "Warm earth"
+    #Target:
+    #  - MobID: 2533
+    #    Count: 1
+    Score: 10
+  - ID: 128027
+    Group: "AG_BATTLE"
+    Name: "Water is very good exactly"
+    #Target:
+    #  - MobID: 2534
+    #    Count: 1
+    Score: 10
+  - ID: 128028
+    Group: "AG_BATTLE"
+    Name: "Pleasant breeze"
+    #Target:
+    #  - MobID: 2535
+    #    Count: 1
+    Score: 10
+  - ID: 128029
+    Group: "AG_BATTLE"
+    Name: "Visitor of old castle"
+    #Target:
+    #  - MobID: 2476
+    #    Count: 1
+    Score: 10
+  - ID: 128030
+    Group: "AG_BATTLE"
+    Name: "Lord of old castle"
+    #Target:
+    #  - MobID: 2476
+    #    Count: 10
+    Score: 20
+  - ID: 128031
+    Group: "AG_BATTLE"
+    Name: "Conqueror of old castle"
+    #Target:
+    #  - MobID: 2476
+    #    Count: 50
+    Score: 50
+  - ID: 128032
+    Group: "AG_BATTLE"
+    Name: "Haggard sucker"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 1
+    Score: 10
+  - ID: 128033
+    Group: "AG_BATTLE"
+    Name: "Hope of the Knight"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 10
+    Score: 20
+  - ID: 128034
+    Group: "AG_BATTLE"
+    Name: "Guardian of the Dawn"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 50
+    Score: 50
+  - ID: 128035
+    Group: "AG_BATTLE"
+    Name: "Time Traveler"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 1
+    Score: 10
+  - ID: 128036
+    Group: "AG_BATTLE"
+    Name: "Restore ancient relic"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 10
+    Score: 20
+  - ID: 128037
+    Group: "AG_BATTLE"
+    Name: "Master of relic transport"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 50
+    Score: 50
+  - ID: 128038
+    Group: "AG_BATTLE"
+    Name: "Show Jailbreak to the captain"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 1
+    Score: 10
+  - ID: 128039
+    Group: "AG_BATTLE"
+    Name: "Show Jailbreak to the weak captain"
+    #Target:
+    #  - MobID: 3188
+    #    Count: 1
+    Score: 10
+  - ID: 128040
+    Group: "AG_BATTLE"
+    Name: "Riot on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 1
+    Score: 20
+  - ID: 128041
+    Group: "AG_BATTLE"
+    Name: "Turmoil on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 10
+    Score: 20
+  - ID: 128042
+    Group: "AG_BATTLE"
+    Name: "Rebellion on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 50
+    Score: 50
+  - ID: 128043
+    Group: "AG_BATTLE"
+    Name: "Revolt of Riot"
+    #Target:
+    #  - MobID: 3188
+    #    Count: 50
+    Score: 50
+  - ID: 128044
+    Group: "AG_BATTLE"
+    Name: "Magic tournament champion"
+    #Target:
+    #  - MobID: 2564
+    #    Count: 1
+    Score: 10
+  - ID: 128045
+    Group: "AG_BATTLE"
+    Name: "Gladiator of Coliseum"
+    #Target:
+    #  - MobID: 2564
+    #    Count: 10
+    Score: 20
+  - ID: 128046
+    Group: "AG_BATTLE"
+    Name: "Slayer of Colosseum"
+    #Target:
+    #  - MobID: 2564
+    #    Count: 50
+    Score: 50
+  - ID: 128047
+    Group: "AG_BATTLE"
+    Name: "Endless Tower challenger"
+    Target:
+      - MobID: 1956
+        Count: 1
+    Score: 10
+  - ID: 128048
+    Group: "AG_BATTLE"
+    Name: "Endless Tower Slayer"
+    Target:
+      - MobID: 1956
+        Count: 10
+    Score: 20
+  - ID: 128049
+    Group: "AG_BATTLE"
+    Name: "Lord of the tower"
+    Target:
+      - MobID: 1956
+        Count: 50
+    Score: 50
+  - ID: 128050
+    Group: "AG_BATTLE"
+    Name: "Novice Exorcist"
+    #Target:
+    #  - MobID: 2327
+    #    Count: 1
+    Score: 10
+  - ID: 128051
+    Group: "AG_BATTLE"
+    Name: "Experienced Exorcist"
+    #Target:
+    #  - MobID: 2327
+    #    Count: 10
+    Score: 20
+  - ID: 128052
+    Group: "AG_BATTLE"
+    Name: "Legendary Exorcist"
+    #Target:
+    #  - MobID: 2327
+    #    Count: 50
+    Score: 50
+  - ID: 129001
+    Group: "AG_ADVENTURE"
+    Name: "Prontera Explorer"
+    Dependent: [120001, 120002, 120003, 120004, 120005, 120006, 120007, 120008, 120009, 120010]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129002
+    Group: "AG_ADVENTURE"
+    Name: "Geffen Explorer"
+    Dependent: [120011, 120012, 120013, 120014, 120015, 120016, 120017]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129003
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Explorer"
+    Dependent: [120018, 120019, 120020, 120021, 120022, 120023]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129004
+    Group: "AG_ADVENTURE"
+    Name: "Payon Explorer"
+    Dependent: [120024, 120025, 120026, 120027, 120028, 120029, 120030, 120031]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129005
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Explorer"
+    Dependent: [120032, 120033, 120034, 120035, 120036]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129006
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Explorer"
+    Dependent: [120037, 120038, 120039, 120040, 120041, 120042, 120043]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129007
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Explorer"
+    Dependent: [120044, 120045, 120046, 120047, 120048, 120049, 120050, 120051]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129008
+    Group: "AG_ADVENTURE"
+    Name: "Rune Midgard Explorer"
+    Dependent: [129001, 129002, 129003, 129004, 129005, 129006, 129007]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129009
+    Group: "AG_ADVENTURE"
+    Name: "Yuno Explorer"
+    Dependent: [120052, 120053, 120054, 120055, 120056, 120057, 120058, 120059, 120060, 120061]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129010
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Explorer"
+    Dependent: [120062, 120063, 120064, 120065, 120066]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129011
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Explorer"
+    Dependent: [120067, 120068, 120069, 120070, 120071, 120072, 120073, 120074]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129012
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Explorer"
+    Dependent: [120075, 120076, 120077]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129013
+    Group: "AG_ADVENTURE"
+    Name: "Schwarzwald Explorer"
+    Dependent: [129009, 129010, 129011, 129012]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129014
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Explorer"
+    Dependent: [120078, 120079, 120080, 120081, 120082, 120083, 120084]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129015
+    Group: "AG_ADVENTURE"
+    Name: "Veins Explorer"
+    Dependent: [120085, 120086, 120087, 120088, 120089]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129016
+    Group: "AG_ADVENTURE"
+    Name: "Arunafeltz Explorer"
+    Dependent: [129014, 129015]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129017
+    Group: "AG_ADVENTURE"
+    Name: "Laphine Explorer"
+    Dependent: [120090, 120091, 120092, 120093, 120094, 120095]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129018
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Explorer"
+    Dependent: [120096, 120097, 120098, 120099, 120100]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129019
+    Group: "AG_ADVENTURE"
+    Name: "Eclage Explorer"
+    Dependent: [129017, 129018]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129020
+    Group: "AG_ADVENTURE"
+    Name: "Localizing fields explorer"
+    Dependent: [120101, 120102, 120103, 120104, 120105, 120106, 120107, 120108, 120109]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 130000 # Talk to Prince NPC (npc/quests/quests_morocc.txt L5288)
+    Group: "AG_CHATTING"
+    Name: "Socialite debut"
+    Reward:
+      TitleID: 1034
+    Score: 10
+  - ID: 170000
+    Group: "AG_HEAR"
+    Name: "Song chamber is not an accident"
+    Score: 10
+  - ID: 190000
+    Group: "AG_CHATTING"
+    Name: "Alliance workers of merchant city"
+    Score: 50
+  - ID: 200000
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the first aura!"
+    Condition: " BaseLevel >= 99 "
+    Reward:
+      ItemID: 12549
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1000
+    Score: 50
+  - ID: 200001
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the second aura!"
+    Condition: " BaseLevel >= 150 "
+    Dependent: [200000]
+    Reward:
+      ItemID: 5364
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1001
+    Score: 60
+  - ID: 200002
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the third aura!"
+    Condition: " BaseLevel >= 175 "
+    Dependent: [200001]
+    Reward:
+    #  ItemID: 18880
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1002
+    Score: 70
+  - ID: 200003
+    Group: "AG_GOAL_LEVEL"
+    Name: "Master Job level!"
+    Condition: " JobLevel >= 50 "
+    Reward:
+      ItemID: 617
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1003
+    Score: 30
+  - ID: 200004
+    Group: "AG_GOAL_LEVEL"
+    Name: "Grandmaster Job level!"
+    Condition: " JobLevel >= 70 "
+    Dependent: [200003]
+    Reward:
+    #  ItemID: 12817
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1004
+    Score: 50
+  - ID: 200005
+    Group: "AG_JOB_CHANGE"
+    Name: "Official Adventurer"
+    Condition: " Class >= JOB_SWORDMAN && Class <= JOB_THIEF "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 200006
+    Group: "AG_JOB_CHANGE"
+    Name: "First step of job change!"
+    Condition: " Class >= JOB_SWORDMAN && Class <= JOB_THIEF "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 20
+  - ID: 200007
+    Group: "AG_JOB_CHANGE"
+    Name: "Veteran Adventurer! (1)"
+    Condition: " Class >= JOB_KNIGHT && Class <= JOB_ASSASSIN "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 25
+  - ID: 200008
+    Group: "AG_JOB_CHANGE"
+    Name: "Veteran Adventurer! (2)"
+    Condition: " Class >= JOB_CRUSADER && Class <= JOB_DANCER "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 25
+  - ID: 200009
+    Group: "AG_JOB_CHANGE"
+    Name: "Warrior (1)"
+    Condition: " Class >= JOB_LORD_KNIGHT && Class <= JOB_ASSASSIN_CROSS "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 30
+  - ID: 200010
+    Group: "AG_JOB_CHANGE"
+    Name: "Warrior (2)"
+    Condition: " Class >= JOB_PALADIN && Class <= JOB_GYPSY "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 30
+  - ID: 200011
+    Group: "AG_JOB_CHANGE"
+    Name: "Elite Adventurer! (1)"
+    Condition: " Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 50
+  - ID: 200012
+    Group: "AG_JOB_CHANGE"
+    Name: "Transcendentaler! (1)"
+    Condition: " Class >= JOB_RUNE_KNIGHT_T && Class <= JOB_GUILLOTINE_CROSS_T "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 60
+  - ID: 200013
+    Group: "AG_JOB_CHANGE"
+    Name: "Elite Adventurer! (2)"
+    Condition: " Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 50
+  - ID: 200014
+    Group: "AG_JOB_CHANGE"
+    Name: "Transcendentaler! (2)"
+    Condition: " Class >= JOB_ROYAL_GUARD_T && Class <= JOB_SHADOW_CHASER_T "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 60
+  - ID: 200015
+    Group: "AG_JOB_CHANGE"
+    Name: "The way of exceptional character"
+    Condition: " Class == JOB_SUPER_NOVICE || Class == JOB_GUNSLINGER || Class == JOB_NINJA || Class == JOB_TAEKWON "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 200016
+    Group: "AG_JOB_CHANGE"
+    Name: "This is My way!"
+    Condition: " Class == JOB_STAR_GLADIATOR || Class == JOB_SOUL_LINKER || Class == JOB_KAGEROU || Class == JOB_OBORO || Class == JOB_REBELLION "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 20
+  - ID: 200017
+    Group: "AG_GOAL_STATUS"
+    Name: "Bearish Power!"
+    Condition: " bStr >= 90 "
+    Score: 10
+  - ID: 200018
+    Group: "AG_GOAL_STATUS"
+    Name: "Overflowing Magic!"
+    Condition: " bInt >= 90 "
+    Score: 10
+  - ID: 200019
+    Group: "AG_GOAL_STATUS"
+    Name: "Healthy Body and Mental Health!"
+    Condition: " bVit >= 90 "
+    Score: 10
+  - ID: 200020
+    Group: "AG_GOAL_STATUS"
+    Name: "Speed of Light"
+    Condition: " bAgi >= 90 "
+    Score: 10
+  - ID: 200021
+    Group: "AG_GOAL_STATUS"
+    Name: "Hawk Eyes"
+    Condition: " bDex >= 90 "
+    Score: 10
+  - ID: 200022
+    Group: "AG_GOAL_STATUS"
+    Name: "Maximum Luck"
+    Condition: " bLuk >= 90 "
+    Score: 10
+  - ID: 200023
+    Group: "AG_GOAL_STATUS"
+    Name: "Dragonlike Power!"
+    Condition: " bStr >= 125 "
+    Reward:
+      Script: " sc_start SC_GIANTGROWTH,180000,1; "
+    Score: 20
+  - ID: 200024
+    Group: "AG_GOAL_STATUS"
+    Name: "Magic Insanity"
+    Condition: " bInt >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_HASTEUP; bonus_script \"{ bonus2 bHPLossRate,100,10000; bonus bBaseAtk,20; bonus bAspdRate,25; }\",60,0,0,SI_STEAMPACK; "
+    Score: 20
+  - ID: 200025
+    Group: "AG_GOAL_STATUS"
+    Name: "Rock Alloy"
+    Condition: " bVit >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_HEAL3; sc_start2 SC_S_LIFEPOTION,600000,-5,5; "
+    Score: 20
+  - ID: 200026
+    Group: "AG_GOAL_STATUS"
+    Name: "Speed of Light"
+    Condition: " bAgi >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_STEAL; sc_start SC_INCFLEE2,60000,20; "
+    Score: 20
+  - ID: 200027
+    Group: "AG_GOAL_STATUS"
+    Name: "Falcon's Eyes"
+    Condition: " bDex >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_MAGICALATTHIT; sc_start SC_INCCRI,300000,30; "
+    Score: 20
+  - ID: 200028
+    Group: "AG_GOAL_STATUS"
+    Name: "Lucky Fever"
+    Condition: " bLuk >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_GLORIA; sc_start SC_GLORIA,15000,0; "
+    Score: 20
+  - ID: 200029
+    Group: "AG_GOAL_STATUS"
+    Name: "Incarnation of Love and Hate"
+    Condition: " BaseLevel == 99 && Class == JOB_NOVICE "
+    Reward:
+    #  ItemID: 16483
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+    Score: 30
+  - ID: 200030
+    Group: "AG_GOAL_STATUS"
+    Name: "I really love it!"
+    Condition: " BaseLevel == 99 && (Class >= JOB_SWORDMAN && Class <= JOB_THIEF) "
+    Reward:
+    #  ItemID: 16504
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+    Score: 30
+  - ID: 200031
+    Group: "AG_JOB_CHANGE"
+    Name: "Reborn in Valhalla!"
+    Condition: " BaseLevel == 99 && Class == JOB_NOVICE_HIGH "
+    Reward:
+    #  ItemID: 22808
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 230100
+    Group: "AG_TAMING"
+    Name: "Poring is Love"
+    Dependent: [230101, 230102, 230103, 230104]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1025
+    Score: 50
+  - ID: 230110
+    Group: "AG_TAMING"
+    Name: "Entomologist"
+    Dependent: [230111, 230112, 230113, 230114, 230115, 230116]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1026
+    Score: 50
+  - ID: 230120
+    Group: "AG_TAMING"
+    Name: "Animals are also our friend"
+    Dependent: [230121, 230122, 230123, 230124, 230125, 230126, 230127, 230128]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1027
+    Score: 50
+  - ID: 230140
+    Group: "AG_TAMING"
+    Name: "Monster Girls Unite!!"
+    Dependent: [230141, 230142, 230143, 230144, 230145, 230146, 230147]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1029
+    Score: 50
+  - ID: 230101
+    Group: "AG_TAMING"
+    Name: "Poring - taming"
+    Target:
+      - MobID: 1002
+        Count: 1
+    Score: 10
+  - ID: 230102
+    Group: "AG_TAMING"
+    Name: "Drops - taming"
+    Target:
+      - MobID: 1113
+        Count: 1
+    Score: 10
+  - ID: 230103
+    Group: "AG_TAMING"
+    Name: "Poporing - taming"
+    Target:
+      - MobID: 1031
+        Count: 1
+    Score: 10
+  - ID: 230104
+    Group: "AG_TAMING"
+    Name: "Novice Poring - taming"
+    #Target:
+    #  - MobID: 2398
+    #    Count: 1
+    Score: 10
+  - ID: 230111
+    Group: "AG_TAMING"
+    Name: "Chonchon - taming"
+    Target:
+      - MobID: 1011
+        Count: 1
+    Score: 10
+  - ID: 230112
+    Group: "AG_TAMING"
+    Name: "Steel Chonchon - taming"
+    Target:
+      - MobID: 1042
+        Count: 1
+    Score: 10
+  - ID: 230113
+    Group: "AG_TAMING"
+    Name: "Hunter Fly - taming"
+    Target:
+      - MobID: 1035
+        Count: 1
+    Score: 10
+  - ID: 230114
+    Group: "AG_TAMING"
+    Name: "Rocker - taming"
+    Target:
+      - MobID: 1052
+        Count: 1
+    Score: 10
+  - ID: 230115
+    Group: "AG_TAMING"
+    Name: "Spore - taming"
+    Target:
+      - MobID: 1014
+        Count: 1
+    Score: 10
+  - ID: 230116
+    Group: "AG_TAMING"
+    Name: "Poison Spore - taming"
+    Target:
+      - MobID: 1077
+        Count: 1
+    Score: 10
+  - ID: 230121
+    Group: "AG_TAMING"
+    Name: "Lunatic - taming"
+    Target:
+      - MobID: 1063
+        Count: 1
+    Score: 10
+  - ID: 230122
+    Group: "AG_TAMING"
+    Name: "Picky - taming"
+    Target:
+      - MobID: 1049
+        Count: 1
+    Score: 10
+  - ID: 230123
+    Group: "AG_TAMING"
+    Name: "Savage Bebe - taming"
+    Target:
+      - MobID: 1167
+        Count: 1
+    Score: 10
+  - ID: 230124
+    Group: "AG_TAMING"
+    Name: "Baby Desert Wolf - taming"
+    Target:
+      - MobID: 1107
+        Count: 1
+    Score: 10
+  - ID: 230125
+    Group: "AG_TAMING"
+    Name: "Smokie - taming"
+    Target:
+      - MobID: 1056
+        Count: 1
+    Score: 10
+  - ID: 230126
+    Group: "AG_TAMING"
+    Name: "Yoyo - taming"
+    Target:
+      - MobID: 1057
+        Count: 1
+    Score: 10
+  - ID: 230127
+    Group: "AG_TAMING"
+    Name: "Peco Peco - taming"
+    Target:
+      - MobID: 1019
+        Count: 1
+    Score: 10
+  - ID: 230128
+    Group: "AG_TAMING"
+    Name: "Petite - taming"
+    Target:
+      - MobID: 1155
+        Count: 1
+    Score: 10
+  - ID: 230141
+    Group: "AG_TAMING"
+    Name: "Munak - taming"
+    Target:
+      - MobID: 1026
+        Count: 1
+    Score: 10
+  - ID: 230142
+    Group: "AG_TAMING"
+    Name: "Isis - taming"
+    Target:
+      - MobID: 1029
+        Count: 1
+    Score: 10
+  - ID: 230143
+    Group: "AG_TAMING"
+    Name: "Sohee - taming"
+    Target:
+      - MobID: 1170
+        Count: 1
+    Score: 10
+  - ID: 230144
+    Group: "AG_TAMING"
+    Name: "Zherlthsh - taming"
+    Target:
+      - MobID: 1200
+        Count: 1
+    Score: 10
+  - ID: 230145
+    Group: "AG_TAMING"
+    Name: "Alice - taming"
+    Target:
+      - MobID: 1275
+        Count: 1
+    Score: 10
+  - ID: 230146
+    Group: "AG_TAMING"
+    Name: "Succubus - taming"
+    Target:
+      - MobID: 1370
+        Count: 1
+    Score: 10
+  - ID: 230147
+    Group: "AG_TAMING"
+    Name: "Loli Ruri - taming"
+    Target:
+      - MobID: 1505
+        Count: 1
+    Score: 10
+  - ID: 220000
+    Group: "AG_CHATTING_CREATE"
+    Name: "Community begin"
+    Condition: " true "
+    Score: 10
+  - ID: 220001
+    Group: "AG_CHATTING_DYING"
+    Name: "A mouth only moment"
+    Condition: " true "
+    Score: 10
+  - ID: 220002
+    Group: "AG_CHATTING_COUNT"
+    Name: "Admiring the chatter"
+    Condition: " ARG0 == 20 "
+    Score: 10
+  - ID: 220003
+    Group: "AG_ADD_FRIEND"
+    Name: "My friend's friend~"
+    Condition: " ARG0 >= 1 "
+    Score: 10
+  - ID: 220004
+    Group: "AG_ADD_FRIEND"
+    Name: "A competition of popularity"
+    Condition: " ARG0 >= 10 "
+    Score: 10
+  - ID: 220005
+    Group: "AG_PARTY"
+    Name: "Let's Party~"
+    Condition: " true "
+    Score: 10
+  - ID: 220006
+    Group: "AG_MARRY"
+    Name: "Married with who..?"
+    Condition: " true "
+    Reward:
+      TitleID: 1022
+    Score: 20
+  - ID: 220007
+    Group: "AG_BABY"
+    Name: "Can you grow?"
+    Condition: " ARG0 == 1 "
+    Reward:
+      TitleID: 1032
+    Score: 20
+  - ID: 220008
+    Group: "AG_BABY"
+    Name: "Being a parent"
+    Condition: " ARG0 == 2 "
+    Reward:
+      TitleID: 1033
+    Score: 20
+  - ID: 220009
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (1)"
+    Condition: " ARG0 >= 10000 "
+    Target:
+      Count: 10000
+    Score: 10
+  - ID: 220010
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (2)"
+    Condition: " ARG0 >= 100000 "
+    Target:
+      Count: 100000
+    Score: 15
+  - ID: 220011
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (3)"
+    Condition: " ARG0 >= 500000 "
+    Target:
+      Count: 500000
+    Score: 20
+  - ID: 220012
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (4)"
+    Condition: " ARG0 >= 1000000 "
+    Target:
+      Count: 1000000
+    Score: 30
+  - ID: 220013
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (5)"
+    Condition: " ARG0 >= 5000000 "
+    Target:
+      Count: 5000000
+    Score: 50
+  - ID: 220014
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (1)"
+    Condition: " ARG0 == 1 && ARG1 >= 7 "
+    Score: 10
+  - ID: 220015
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (2)"
+    Condition: " ARG0 == 1 && ARG1 >= 12 "
+    Score: 15
+  - ID: 220016
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (3)"
+    Condition: " ARG0 == 2 && ARG1 >= 7 "
+    Score: 10
+  - ID: 220017
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (4)"
+    Condition: " ARG0 == 2 && ARG1 >= 12 "
+    Score: 15
+  - ID: 220018
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (5)"
+    Condition: " ARG0 == 3 && ARG1 >= 7 "
+    Score: 15
+  - ID: 220019
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (6)"
+    Condition: " ARG0 == 3 && ARG1 >= 12 "
+    Score: 20
+  - ID: 220020
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (7)"
+    Condition: " ARG0 == 4 && ARG1 >= 7 "
+    Score: 20
+  - ID: 220021
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (8)"
+    Condition: " ARG0 == 4 && ARG1 >= 12 "
+    Score: 30
+  - ID: 220022
+    Group: "AG_ENCHANT_FAIL"
+    Name: "Human's greed has no ending.."
+    Condition: " true "
+    Score: 10
+  - ID: 220023
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (1)"
+    Condition: " ARG0 >= 100 "
+    Score: 10
+  - ID: 220024
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (2)"
+    Condition: " ARG0 >= 1000 "
+    Score: 10
+  - ID: 220025
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (3)"
+    Condition: " ARG0 >= 5000 "
+    Score: 15
+  - ID: 220026
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (4)"
+    Condition: " ARG0 >= 10000 "
+    Score: 15
+  - ID: 220027
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (5)"
+    Condition: " ARG0 >= 50000 "
+    Score: 20
+  - ID: 220028
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (6)"
+    Condition: " ARG0 >= 100000 "
+    Score: 20
+  - ID: 220029
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (7)"
+    Condition: " ARG0 >= 150000 "
+    Score: 30
+  - ID: 220030
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (1)"
+    Condition: " ARG0 >= 10000 "
+    Score: 10
+  - ID: 220031
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (2)"
+    Condition: " ARG0 >= 100000 "
+    Score: 15
+  - ID: 220032
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (3)"
+    Condition: " ARG0 >= 1000000 "
+    Score: 20
+  - ID: 220033
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (4)"
+    Condition: " ARG0 >= 10000000 "
+    Score: 25
+  - ID: 220034
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (5)"
+    Condition: " ARG0 >= 100000000 "
+    Score: 30
+  - ID: 220035
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (6)"
+    Condition: " ARG0 >= 1000000000 "
+    Score: 40
+  - ID: 230200
+    Group: "AG_BATTLE"
+    Name: "Poring seeker"
+    Dependent: [230201, 230202, 230203]
+    Score: 10
+  - ID: 230201
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (1)"
+    Target:
+      - MobID: 1002
+        Count: 10
+    #  - MobID: 2398
+    #    Count: 10
+      - MobID: 1113
+        Count: 10
+      - MobID: 1031
+        Count: 10
+      - MobID: 1242
+        Count: 10
+    Score: 10
+  - ID: 230202
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (2)"
+    Target:
+      - MobID: 1090
+        Count: 1
+      - MobID: 1582
+        Count: 1
+      - MobID: 1096
+        Count: 1
+      - MobID: 1388
+        Count: 1
+      - MobID: 1120
+        Count: 1
+    Score: 15
+  - ID: 230203
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (3)"
+    Target:
+      - MobID: 1613
+        Count: 5
+      - MobID: 1977
+        Count: 5
+      - MobID: 1836
+        Count: 5
+    Score: 20
+  - ID: 240000
+    Group: "AG_GOAL_LEVEL"
+    Name: "Complete challenges after first introduction"
+    Score: 10
+  - ID: 240001
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 1"
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240002
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 2"
+    Dependent: [240001]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240003
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 3"
+    Dependent: [240002]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240004
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 4"
+    Dependent: [240003]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240005
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 5"
+    Dependent: [240004]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240006
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 6"
+    Dependent: [240005]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240007
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 7"
+    Dependent: [240006]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240008
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 8"
+    Dependent: [240007]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240009
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 9"
+    Dependent: [240008]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240010
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 10"
+    Dependent: [240009]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1023
+    Score: 10
+  - ID: 240011
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 11"
+    Dependent: [240010]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240012
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 12"
+    Dependent: [240011]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240013
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 13"
+    Dependent: [240012]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240014
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 14"
+    Dependent: [240013]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240015
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 15"
+    Dependent: [240014]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240016
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 16"
+    Dependent: [240015]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240017
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 17"
+    Dependent: [240016]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240018
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 18"
+    Dependent: [240017]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240019
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 19"
+    Dependent: [240018]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240020
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 20"
+    Dependent: [240019]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1024
+    Score: 10
+  - ID: 220036
+    Group: "AG_EAT"
+    Name: "The beginning of outdoor"
+    Score: 20
+  - ID: 220037
+    Group: "AG_EAT"
+    Name: "The first step becoming a chef"
+    Score: 20

+ 1 - 0
db/pre-re/item_flag.txt

@@ -7,6 +7,7 @@
 //  4 - GUID Item: When this item is obtained, will generates GUID that cannot be stacked even same or stackable item
 //  8 - Item will be bound item when equipped
 // 16 - Special Broadcast: When item dropped by monster and player loot it, will be broadcasted!
+// 32 - Item will not be removed on consumption. Also supports 'itemskill'
 // NOTE: For removing flag by import file, use "-" to remove the flag. Example, 604,-1 will removes flag 1 from Branch_Of_Dead_Tree
 
 // Logged as Dead Branch item

+ 2407 - 0
db/re/achievement_db.yml

@@ -0,0 +1,2407 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# 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/>.
+#
+###########################################################################
+# Custom Achievement Database
+###########################################################################
+#
+# Achievement Settings
+#
+###########################################################################
+# ID - Unique achievement ID.
+###########################################################################
+# Group - Achievement group type. Each achievement type calls a specific
+# objective check.
+# Valid groups:
+#  AG_ADD_FRIEND
+#  AG_ADVENTURE
+#  AG_BABY
+#  AG_BATTLE
+#  AG_CHATTING
+#  AG_CHATTING_COUNT
+#  AG_CHATTING_CREATE
+#  AG_CHATTING_DYING
+#  AG_EAT
+#  AG_GET_ITEM
+#  AG_GET_ZENY
+#  AG_GOAL_ACHIEVE
+#  AG_GOAL_LEVEL
+#  AG_GOAL_STATUS
+#  AG_HEAR
+#  AG_JOB_CHANGE
+#  AG_MARRY
+#  AG_PARTY
+#  AG_ENCHANT_FAIL
+#  AG_ENCHANT_SUCCESS
+#  AG_SEE
+#  AG_SPEND_ZENY
+#  AG_TAMING
+###########################################################################
+# Name - Achievement name. Used when sending rewards through RODEX.
+###########################################################################
+# Target - A list of monster ID and count values that the achievement
+# requires. The target count can also be used for achievements that keep
+# a counter while not being related to monster kills.
+# Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+###########################################################################
+# Condition - A conditional statement that must be met for the achievement
+# to be considered complete.
+###########################################################################
+# Map - A map name that is used for the AG_CHATTING type which increments
+# the counter based on the player's map.
+###########################################################################
+# Dependent: - A list of achievement IDs that need to be completed before
+# this achievement is considered complete.
+###########################################################################
+# Reward - A list of rewards that are given on completion. All fields are
+# optional.
+#   ItemID: Item ID
+#   Amount:  Amount of Item ID (default 1)
+#   Script: Bonus Script
+#   TitleID: Title ID
+###########################################################################
+# Score - Achievement points that are given on completion.
+###########################################################################
+
+Achievements:
+  - ID: 110000
+    Group: "AG_EAT"
+    Name: "At this time I live to eat"
+    Score: 10
+  - ID: 110001
+    Group: "AG_SEE"
+    Name: "A fan of this polarity"
+    Score: 10
+  - ID: 120001
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120002
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120003
+    Group: "AG_ADVENTURE"
+    Name: "North Prontera Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120004
+    Group: "AG_ADVENTURE"
+    Name: "West Prontera Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120005
+    Group: "AG_ADVENTURE"
+    Name: "West Prontera Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120006
+    Group: "AG_ADVENTURE"
+    Name: "East Prontera Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120007
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120008
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120009
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120010
+    Group: "AG_ADVENTURE"
+    Name: "South Prontera Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120011
+    Group: "AG_ADVENTURE"
+    Name: "East Geffen Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120012
+    Group: "AG_ADVENTURE"
+    Name: "Southeast Geffen Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120013
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120014
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120015
+    Group: "AG_ADVENTURE"
+    Name: "Northwest Geffen Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120016
+    Group: "AG_ADVENTURE"
+    Name: "South Geffen Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120017
+    Group: "AG_ADVENTURE"
+    Name: "South Geffen Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120018
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120019
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120020
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120021
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120022
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120023
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Field Exploration(6)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120024
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120025
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120026
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120027
+    Group: "AG_ADVENTURE"
+    Name: "Southwest Payon Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120028
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120029
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120030
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120031
+    Group: "AG_ADVENTURE"
+    Name: "East Payon Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120032
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120033
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120034
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120035
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120036
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120037
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120038
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120039
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120040
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120041
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120042
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Field Exploration(6)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120043
+    Group: "AG_ADVENTURE"
+    Name: "South Aldebaran Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120044
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120045
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120046
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120047
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120048
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120049
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(6)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120050
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(7)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120051
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Field Exploration(8)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120052
+    Group: "AG_ADVENTURE"
+    Name: "Border Checkpoint Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120053
+    Group: "AG_ADVENTURE"
+    Name: "Border Checkpoint Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120054
+    Group: "AG_ADVENTURE"
+    Name: "Kiel Hyre Mansion Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120055
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120056
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120057
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Plateau Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120058
+    Group: "AG_ADVENTURE"
+    Name: "El Mes Gorge Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120059
+    Group: "AG_ADVENTURE"
+    Name: "Kiel Hyre Academy Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120060
+    Group: "AG_ADVENTURE"
+    Name: "Guard Camp Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120061
+    Group: "AG_ADVENTURE"
+    Name: "Yuno Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120062
+    Group: "AG_ADVENTURE"
+    Name: "Front of Thanatos Tower Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120063
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120064
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120065
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120066
+    Group: "AG_ADVENTURE"
+    Name: "Abyss Lake Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120067
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120068
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120069
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120070
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120071
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120072
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(6)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120073
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(7)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120074
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Field Exploration(8)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120075
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120076
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120077
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120078
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Plains Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120079
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120080
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120081
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Plains Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120082
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Grassland Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120083
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Audhumbla Grassland Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120084
+    Group: "AG_ADVENTURE"
+    Name: "Portus Luna Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120085
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120086
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120087
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120088
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120089
+    Group: "AG_ADVENTURE"
+    Name: "Veins Field Exploration(5)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120090
+    Group: "AG_ADVENTURE"
+    Name: "Eclage Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120091
+    Group: "AG_ADVENTURE"
+    Name: "North Bitfrost Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120092
+    Group: "AG_ADVENTURE"
+    Name: "South Bitfrost Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120093
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120094
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120095
+    Group: "AG_ADVENTURE"
+    Name: "Splendide Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120096
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120097
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120098
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Field Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120099
+    Group: "AG_ADVENTURE"
+    Name: "Outskirts of Kamidal Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120100
+    Group: "AG_ADVENTURE"
+    Name: "Outskirts of Kamidal Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120101
+    Group: "AG_ADVENTURE"
+    Name: "Amatsu Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120102
+    Group: "AG_ADVENTURE"
+    Name: "Kunlun Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120103
+    Group: "AG_ADVENTURE"
+    Name: "Gonryun Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120104
+    Group: "AG_ADVENTURE"
+    Name: "Ayothaya Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120105
+    Group: "AG_ADVENTURE"
+    Name: "Moscovia Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120106
+    Group: "AG_ADVENTURE"
+    Name: "Brasilis Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120107
+    Group: "AG_ADVENTURE"
+    Name: "Dewata Field Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120108
+    Group: "AG_ADVENTURE"
+    Name: "Malaya Field Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120109
+    Group: "AG_ADVENTURE"
+    Name: "Malaya Field Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 10
+  - ID: 120110
+    Group: "AG_ADVENTURE"
+    Name: "Abbey Underground Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120111
+    Group: "AG_ADVENTURE"
+    Name: "Abyss Lake Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120112
+    Group: "AG_ADVENTURE"
+    Name: "Clock Tower Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120113
+    Group: "AG_ADVENTURE"
+    Name: "Amatsu Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120114
+    Group: "AG_ADVENTURE"
+    Name: "Ant Hell Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120115
+    Group: "AG_ADVENTURE"
+    Name: "Ayothaya Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120116
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120117
+    Group: "AG_ADVENTURE"
+    Name: "Brasilis Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120118
+    Group: "AG_ADVENTURE"
+    Name: "Clock Tower Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120119
+    Group: "AG_ADVENTURE"
+    Name: "Istana Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120120
+    Group: "AG_ADVENTURE"
+    Name: "Scaraba Hole Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120121
+    Group: "AG_ADVENTURE"
+    Name: "Bitfrost Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120122
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120123
+    Group: "AG_ADVENTURE"
+    Name: "Geffen Underground Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120124
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(1)"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120125
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(2)"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120126
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(3)"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120127
+    Group: "AG_ADVENTURE"
+    Name: "Glastheim Dungeon Exploration(4)"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120128
+    Group: "AG_ADVENTURE"
+    Name: "Kunlun Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120129
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120130
+    Group: "AG_ADVENTURE"
+    Name: "Sphinx Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120131
+    Group: "AG_ADVENTURE"
+    Name: "Izlude Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120132
+    Group: "AG_ADVENTURE"
+    Name: "Robot Factory Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120133
+    Group: "AG_ADVENTURE"
+    Name: "Bio Lab Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120134
+    Group: "AG_ADVENTURE"
+    Name: "Gonryun Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120135
+    Group: "AG_ADVENTURE"
+    Name: "Nogg Road Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120136
+    Group: "AG_ADVENTURE"
+    Name: "Coal Mine Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120137
+    Group: "AG_ADVENTURE"
+    Name: "Pyramid Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120138
+    Group: "AG_ADVENTURE"
+    Name: "Orc Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120139
+    Group: "AG_ADVENTURE"
+    Name: "Payon Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120140
+    Group: "AG_ADVENTURE"
+    Name: "Labyrinth Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120141
+    Group: "AG_ADVENTURE"
+    Name: "Undersea Tunnel Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120142
+    Group: "AG_ADVENTURE"
+    Name: "Thanatos Tower Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120143
+    Group: "AG_ADVENTURE"
+    Name: "Thor Volcano Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120144
+    Group: "AG_ADVENTURE"
+    Name: "Sunken Ship Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120145
+    Group: "AG_ADVENTURE"
+    Name: "Turtle Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 120146
+    Group: "AG_ADVENTURE"
+    Name: "Toy Factory Dungeon Exploration"
+    Reward:
+      ItemID: 22876
+    Score: 20
+  - ID: 127001
+    Group: "AG_CHATTING"
+    Name: "Prontera Contribution"
+    Map: "prontera"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127002
+    Group: "AG_CHATTING"
+    Name: "Geffen Contribution"
+    Map: "geffen"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127003
+    Group: "AG_CHATTING"
+    Name: "Morocc Contribution"
+    Map: "morocc"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127004
+    Group: "AG_CHATTING"
+    Name: "Payon Contribution"
+    Map: "payon"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127005
+    Group: "AG_CHATTING"
+    Name: "Yuno Contribution"
+    Map: "yuno"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127006
+    Group: "AG_CHATTING"
+    Name: "Lighthalzen Contribution"
+    Map: "lighthalzen"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127007
+    Group: "AG_CHATTING"
+    Name: "Einbroch Contribution"
+    Map: "einbroch"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127008
+    Group: "AG_CHATTING"
+    Name: "Rachel Contribution"
+    Map: "rachel"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 127009
+    Group: "AG_CHATTING"
+    Name: "Veins Contribution"
+    Map: "veins"
+    Target:
+      Count: 100000
+    Score: 10
+  - ID: 128000
+    Group: "AG_BATTLE"
+    Name: "Uninvited Guest"
+    Target:
+      - MobID: 2996
+        Count: 1
+    Score: 10
+  - ID: 128001
+    Group: "AG_BATTLE"
+    Name: "Strange Guest"
+    Target:
+      - MobID: 2996
+        Count: 10
+    Score: 10
+  - ID: 128002
+    Group: "AG_BATTLE"
+    Name: "Get along with map..."
+    Target:
+      - MobID: 2996
+        Count: 25
+    Score: 20
+  - ID: 128003
+    Group: "AG_BATTLE"
+    Name: "Welcomed Guest"
+    Target:
+      - MobID: 2996
+        Count: 50
+    Score: 30
+  - ID: 128004
+    Group: "AG_BATTLE"
+    Name: "Kimmy's best friend"
+    Target:
+      - MobID: 2996
+        Count: 100
+    Score: 50
+  - ID: 128005
+    Group: "AG_BATTLE"
+    Name: "Novice Angler"
+    Target:
+      - MobID: 2322
+        Count: 1
+    Score: 10
+  - ID: 128006
+    Group: "AG_BATTLE"
+    Name: "Juicy Hunter"
+    Target:
+      - MobID: 2322
+        Count: 10
+    Score: 20
+  - ID: 128007
+    Group: "AG_BATTLE"
+    Name: "Rhythm Master"
+    Target:
+      - MobID: 2322
+        Count: 50
+    Score: 50
+  - ID: 128008
+    Group: "AG_BATTLE"
+    Name: "Bold Adventurer"
+    Target:
+      - MobID: 1929
+        Count: 1
+    Score: 10
+  - ID: 128009
+    Group: "AG_BATTLE"
+    Name: "Baphomet Hatred"
+    Target:
+      - MobID: 1929
+        Count: 10
+    Score: 20
+  - ID: 128010
+    Group: "AG_BATTLE"
+    Name: "Goat's Nemesis"
+    Target:
+      - MobID: 1929
+        Count: 50
+    Score: 50
+  - ID: 128011
+    Group: "AG_BATTLE"
+    Name: "Ordinary Tourist"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 1
+    Score: 10
+  - ID: 128012
+    Group: "AG_BATTLE"
+    Name: "Backcountry Expert"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 10
+    Score: 20
+  - ID: 128013
+    Group: "AG_BATTLE"
+    Name: "Able to eat more like this"
+    #Target:
+    #  - MobID: 3029
+    #    Count: 50
+    Score: 50
+  - ID: 128014
+    Group: "AG_BATTLE"
+    Name: "Digest hard meat"
+    Target:
+      - MobID: 2319
+        Count: 1
+    Score: 10
+  - ID: 128015
+    Group: "AG_BATTLE"
+    Name: "Master of Escape"
+    Target:
+      - MobID: 2319
+        Count: 10
+    Score: 20
+  - ID: 128016
+    Group: "AG_BATTLE"
+    Name: "Immortal Hunter"
+    Target:
+      - MobID: 2319
+        Count: 50
+    Score: 50
+  - ID: 128017
+    Group: "AG_BATTLE"
+    Name: "Stood up and overcame despair"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 1
+    Score: 10
+  - ID: 128018
+    Group: "AG_BATTLE"
+    Name: "Ember of Hope"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 10
+    Score: 10
+  - ID: 128019
+    Group: "AG_BATTLE"
+    Name: "Pouring Aurora"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 25
+    Score: 20
+  - ID: 128020
+    Group: "AG_BATTLE"
+    Name: "Who is desperate? I am hopeless!"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 50
+    Score: 30
+  - ID: 128021
+    Group: "AG_BATTLE"
+    Name: "I know god will save the world"
+    #Target:
+    #  - MobID: 3097
+    #    Count: 100
+    Score: 50
+  - ID: 128022
+    Group: "AG_BATTLE"
+    Name: "There was mercy in Morocc army"
+    #Target:
+    #  - MobID: 3000
+    #  Count: 1
+    Score: 10
+  - ID: 128023
+    Group: "AG_BATTLE"
+    Name: "There was fear in Morocc army"
+    #Target:
+    #  - MobID: 3000
+    #    Count: 10
+    Score: 20
+  - ID: 128024
+    Group: "AG_BATTLE"
+    Name: "Guard of weak army"
+    #Target:
+    #  - MobID: 3000
+    #    Count: 50
+    Score: 50
+  - ID: 128025
+    Group: "AG_BATTLE"
+    Name: "Audience with the queen"
+    #Target:
+    #  - MobID: 2529
+    #    Count: 1
+    Score: 10
+  - ID: 128026
+    Group: "AG_BATTLE"
+    Name: "Warm earth"
+    #Target:
+    #  - MobID: 2533
+    #    Count: 1
+    Score: 10
+  - ID: 128027
+    Group: "AG_BATTLE"
+    Name: "Water is very good exactly"
+    #Target:
+    #  - MobID: 2534
+    #    Count: 1
+    Score: 10
+  - ID: 128028
+    Group: "AG_BATTLE"
+    Name: "Pleasant breeze"
+    #Target:
+    #  - MobID: 2535
+    #    Count: 1
+    Score: 10
+  - ID: 128029
+    Group: "AG_BATTLE"
+    Name: "Visitor of old castle"
+    Target:
+      - MobID: 2476
+        Count: 1
+    Score: 10
+  - ID: 128030
+    Group: "AG_BATTLE"
+    Name: "Lord of old castle"
+    Target:
+      - MobID: 2476
+        Count: 10
+    Score: 20
+  - ID: 128031
+    Group: "AG_BATTLE"
+    Name: "Conqueror of old castle"
+    Target:
+      - MobID: 2476
+        Count: 50
+    Score: 50
+  - ID: 128032
+    Group: "AG_BATTLE"
+    Name: "Haggard sucker"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 1
+    Score: 10
+  - ID: 128033
+    Group: "AG_BATTLE"
+    Name: "Hope of the Knight"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 10
+    Score: 20
+  - ID: 128034
+    Group: "AG_BATTLE"
+    Name: "Guardian of the Dawn"
+    #Target:
+    #  - MobID: 3150
+    #    Count: 50
+    Score: 50
+  - ID: 128035
+    Group: "AG_BATTLE"
+    Name: "Time Traveler"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 1
+    Score: 10
+  - ID: 128036
+    Group: "AG_BATTLE"
+    Name: "Restore ancient relic"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 10
+    Score: 20
+  - ID: 128037
+    Group: "AG_BATTLE"
+    Name: "Master of relic transport"
+    #Target:
+    #  - MobID: 3190
+    #    Count: 50
+    Score: 50
+  - ID: 128038
+    Group: "AG_BATTLE"
+    Name: "Show Jailbreak to the captain"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 1
+    Score: 10
+  - ID: 128039
+    Group: "AG_BATTLE"
+    Name: "Show Jailbreak to the weak captain"
+    #Target:
+    #  - MobID: 3188
+    #    Count: 1
+    Score: 10
+  - ID: 128040
+    Group: "AG_BATTLE"
+    Name: "Riot on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 1
+    Score: 20
+  - ID: 128041
+    Group: "AG_BATTLE"
+    Name: "Turmoil on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 10
+    Score: 20
+  - ID: 128042
+    Group: "AG_BATTLE"
+    Name: "Rebellion on board"
+    #Target:
+    #  - MobID: 3181
+    #    Count: 50
+    Score: 50
+  - ID: 128043
+    Group: "AG_BATTLE"
+    Name: "Revolt of Riot"
+    #Target:
+    #  - MobID: 3188
+    #    Count: 50
+    Score: 50
+  - ID: 128044
+    Group: "AG_BATTLE"
+    Name: "Magic tournament champion"
+    Target:
+      - MobID: 2564
+        Count: 1
+    Score: 10
+  - ID: 128045
+    Group: "AG_BATTLE"
+    Name: "Gladiator of Coliseum"
+    Target:
+      - MobID: 2564
+        Count: 10
+    Score: 20
+  - ID: 128046
+    Group: "AG_BATTLE"
+    Name: "Slayer of Colosseum"
+    Target:
+      - MobID: 2564
+        Count: 50
+    Score: 50
+  - ID: 128047
+    Group: "AG_BATTLE"
+    Name: "Endless Tower challenger"
+    Target:
+      - MobID: 1956
+        Count: 1
+    Score: 10
+  - ID: 128048
+    Group: "AG_BATTLE"
+    Name: "Endless Tower Slayer"
+    Target:
+      - MobID: 1956
+        Count: 10
+    Score: 20
+  - ID: 128049
+    Group: "AG_BATTLE"
+    Name: "Lord of the tower"
+    Target:
+      - MobID: 1956
+        Count: 50
+    Score: 50
+  - ID: 128050
+    Group: "AG_BATTLE"
+    Name: "Novice Exorcist"
+    Target:
+      - MobID: 2327
+        Count: 1
+    Score: 10
+  - ID: 128051
+    Group: "AG_BATTLE"
+    Name: "Experienced Exorcist"
+    Target:
+      - MobID: 2327
+        Count: 10
+    Score: 20
+  - ID: 128052
+    Group: "AG_BATTLE"
+    Name: "Legendary Exorcist"
+    Target:
+      - MobID: 2327
+        Count: 50
+    Score: 50
+  - ID: 129001
+    Group: "AG_ADVENTURE"
+    Name: "Prontera Explorer"
+    Dependent: [120001, 120002, 120003, 120004, 120005, 120006, 120007, 120008, 120009, 120010]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129002
+    Group: "AG_ADVENTURE"
+    Name: "Geffen Explorer"
+    Dependent: [120011, 120012, 120013, 120014, 120015, 120016, 120017]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129003
+    Group: "AG_ADVENTURE"
+    Name: "Sograt Desert Explorer"
+    Dependent: [120018, 120019, 120020, 120021, 120022, 120023]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129004
+    Group: "AG_ADVENTURE"
+    Name: "Payon Explorer"
+    Dependent: [120024, 120025, 120026, 120027, 120028, 120029, 120030, 120031]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129005
+    Group: "AG_ADVENTURE"
+    Name: "North Mjolnir Explorer"
+    Dependent: [120032, 120033, 120034, 120035, 120036]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129006
+    Group: "AG_ADVENTURE"
+    Name: "South Mjolnir Explorer"
+    Dependent: [120037, 120038, 120039, 120040, 120041, 120042, 120043]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129007
+    Group: "AG_ADVENTURE"
+    Name: "Comodo Explorer"
+    Dependent: [120044, 120045, 120046, 120047, 120048, 120049, 120050, 120051]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129008
+    Group: "AG_ADVENTURE"
+    Name: "Rune Midgard Explorer"
+    Dependent: [129001, 129002, 129003, 129004, 129005, 129006, 129007]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129009
+    Group: "AG_ADVENTURE"
+    Name: "Yuno Explorer"
+    Dependent: [120052, 120053, 120054, 120055, 120056, 120057, 120058, 120059, 120060, 120061]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129010
+    Group: "AG_ADVENTURE"
+    Name: "Hugel Explorer"
+    Dependent: [120062, 120063, 120064, 120065, 120066]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129011
+    Group: "AG_ADVENTURE"
+    Name: "Einbroch Explorer"
+    Dependent: [120067, 120068, 120069, 120070, 120071, 120072, 120073, 120074]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129012
+    Group: "AG_ADVENTURE"
+    Name: "Lighthalzen Explorer"
+    Dependent: [120075, 120076, 120077]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129013
+    Group: "AG_ADVENTURE"
+    Name: "Schwarzwald Explorer"
+    Dependent: [129009, 129010, 129011, 129012]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129014
+    Group: "AG_ADVENTURE"
+    Name: "Rachel Explorer"
+    Dependent: [120078, 120079, 120080, 120081, 120082, 120083, 120084]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129015
+    Group: "AG_ADVENTURE"
+    Name: "Veins Explorer"
+    Dependent: [120085, 120086, 120087, 120088, 120089]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129016
+    Group: "AG_ADVENTURE"
+    Name: "Arunafeltz Explorer"
+    Dependent: [129014, 129015]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129017
+    Group: "AG_ADVENTURE"
+    Name: "Laphine Explorer"
+    Dependent: [120090, 120091, 120092, 120093, 120094, 120095]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129018
+    Group: "AG_ADVENTURE"
+    Name: "Manuk Explorer"
+    Dependent: [120096, 120097, 120098, 120099, 120100]
+    Reward:
+      ItemID: 644
+    Score: 20
+  - ID: 129019
+    Group: "AG_ADVENTURE"
+    Name: "Eclage Explorer"
+    Dependent: [129017, 129018]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 129020
+    Group: "AG_ADVENTURE"
+    Name: "Localizing fields explorer"
+    Dependent: [120101, 120102, 120103, 120104, 120105, 120106, 120107, 120108, 120109]
+    Reward:
+      ItemID: 617
+    Score: 50
+  - ID: 130000 # Talk to Prince NPC (npc/quests/quests_morocc.txt L5288)
+    Group: "AG_CHATTING"
+    Name: "Socialite debut"
+    Reward:
+      TitleID: 1034
+    Score: 10
+  - ID: 170000
+    Group: "AG_HEAR"
+    Name: "Song chamber is not an accident"
+    Score: 10
+  - ID: 190000
+    Group: "AG_CHATTING"
+    Name: "Alliance workers of merchant city"
+    Score: 50
+  - ID: 200000
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the first aura!"
+    Condition: " BaseLevel >= 99 "
+    Reward:
+      ItemID: 12549
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1000
+    Score: 50
+  - ID: 200001
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the second aura!"
+    Condition: " BaseLevel >= 150 "
+    Dependent: [200000]
+    Reward:
+      ItemID: 5364
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1001
+    Score: 60
+  - ID: 200002
+    Group: "AG_GOAL_LEVEL"
+    Name: "Acquire the third aura!"
+    Condition: " BaseLevel >= 175 "
+    Dependent: [200001]
+    Reward:
+      ItemID: 18880
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1002
+    Score: 70
+  - ID: 200003
+    Group: "AG_GOAL_LEVEL"
+    Name: "Master Job level!"
+    Condition: " JobLevel >= 50 "
+    Reward:
+      ItemID: 617
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1003
+    Score: 30
+  - ID: 200004
+    Group: "AG_GOAL_LEVEL"
+    Name: "Grandmaster Job level!"
+    Condition: " JobLevel >= 70 "
+    Dependent: [200003]
+    Reward:
+      ItemID: 12817
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+      TitleID: 1004
+    Score: 50
+  - ID: 200005
+    Group: "AG_JOB_CHANGE"
+    Name: "Official Adventurer"
+    Condition: " Class >= JOB_SWORDMAN && Class <= JOB_THIEF "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 200006
+    Group: "AG_JOB_CHANGE"
+    Name: "First step of job change!"
+    Condition: " Class >= JOB_SWORDMAN && Class <= JOB_THIEF "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 20
+  - ID: 200007
+    Group: "AG_JOB_CHANGE"
+    Name: "Veteran Adventurer! (1)"
+    Condition: " Class >= JOB_KNIGHT && Class <= JOB_ASSASSIN "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 25
+  - ID: 200008
+    Group: "AG_JOB_CHANGE"
+    Name: "Veteran Adventurer! (2)"
+    Condition: " Class >= JOB_CRUSADER && Class <= JOB_DANCER "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 25
+  - ID: 200009
+    Group: "AG_JOB_CHANGE"
+    Name: "Warrior (1)"
+    Condition: " Class >= JOB_LORD_KNIGHT && Class <= JOB_ASSASSIN_CROSS "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 30
+  - ID: 200010
+    Group: "AG_JOB_CHANGE"
+    Name: "Warrior (2)"
+    Condition: " Class >= JOB_PALADIN && Class <= JOB_GYPSY "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 30
+  - ID: 200011
+    Group: "AG_JOB_CHANGE"
+    Name: "Elite Adventurer! (1)"
+    Condition: " Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 50
+  - ID: 200012
+    Group: "AG_JOB_CHANGE"
+    Name: "Transcendentaler! (1)"
+    Condition: " Class >= JOB_RUNE_KNIGHT_T && Class <= JOB_GUILLOTINE_CROSS_T "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 60
+  - ID: 200013
+    Group: "AG_JOB_CHANGE"
+    Name: "Elite Adventurer! (2)"
+    Condition: " Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 50
+  - ID: 200014
+    Group: "AG_JOB_CHANGE"
+    Name: "Transcendentaler! (2)"
+    Condition: " Class >= JOB_ROYAL_GUARD_T && Class <= JOB_SHADOW_CHASER_T "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 60
+  - ID: 200015
+    Group: "AG_JOB_CHANGE"
+    Name: "The way of exceptional character"
+    Condition: " Class == JOB_SUPER_NOVICE || Class == JOB_GUNSLINGER || Class == JOB_NINJA || Class == JOB_TAEKWON "
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 200016
+    Group: "AG_JOB_CHANGE"
+    Name: "This is My way!"
+    Condition: " Class == JOB_STAR_GLADIATOR || Class == JOB_SOUL_LINKER || Class == JOB_KAGEROU || Class == JOB_OBORO || Class == JOB_REBELLION "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 20
+  - ID: 200017
+    Group: "AG_GOAL_STATUS"
+    Name: "Bearish Power!"
+    Condition: " bStr >= 90 "
+    Score: 10
+  - ID: 200018
+    Group: "AG_GOAL_STATUS"
+    Name: "Overflowing Magic!"
+    Condition: " bInt >= 90 "
+    Score: 10
+  - ID: 200019
+    Group: "AG_GOAL_STATUS"
+    Name: "Healthy Body and Mental Health!"
+    Condition: " bVit >= 90 "
+    Score: 10
+  - ID: 200020
+    Group: "AG_GOAL_STATUS"
+    Name: "Speed of Light"
+    Condition: " bAgi >= 90 "
+    Score: 10
+  - ID: 200021
+    Group: "AG_GOAL_STATUS"
+    Name: "Hawk Eyes"
+    Condition: " bDex >= 90 "
+    Score: 10
+  - ID: 200022
+    Group: "AG_GOAL_STATUS"
+    Name: "Maximum Luck"
+    Condition: " bLuk >= 90 "
+    Score: 10
+  - ID: 200023
+    Group: "AG_GOAL_STATUS"
+    Name: "Dragonlike Power!"
+    Condition: " bStr >= 125 "
+    Reward:
+      Script: " sc_start SC_GIANTGROWTH,180000,1; "
+    Score: 20
+  - ID: 200024
+    Group: "AG_GOAL_STATUS"
+    Name: "Magic Insanity"
+    Condition: " bInt >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_HASTEUP; bonus_script \"{ bonus2 bHPLossRate,100,10000; bonus bBaseAtk,20; bonus bAspdRate,25; }\",60,0,0,SI_STEAMPACK; "
+    Score: 20
+  - ID: 200025
+    Group: "AG_GOAL_STATUS"
+    Name: "Rock Alloy"
+    Condition: " bVit >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_HEAL3; sc_start2 SC_S_LIFEPOTION,600000,-5,5; "
+    Score: 20
+  - ID: 200026
+    Group: "AG_GOAL_STATUS"
+    Name: "Speed of Light"
+    Condition: " bAgi >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_STEAL; sc_start SC_INCFLEE2,60000,20; "
+    Score: 20
+  - ID: 200027
+    Group: "AG_GOAL_STATUS"
+    Name: "Falcon's Eyes"
+    Condition: " bDex >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_MAGICALATTHIT; sc_start SC_INCCRI,300000,30; "
+    Score: 20
+  - ID: 200028
+    Group: "AG_GOAL_STATUS"
+    Name: "Lucky Fever"
+    Condition: " bLuk >= 125 "
+    Reward:
+      Script: " specialeffect2 EF_GLORIA; sc_start SC_GLORIA,15000,0; "
+    Score: 20
+  - ID: 200029
+    Group: "AG_GOAL_STATUS"
+    Name: "Incarnation of Love and Hate"
+    Condition: " BaseLevel == 99 && Class == JOB_NOVICE "
+    Reward:
+      ItemID: 16483
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+    Score: 30
+  - ID: 200030
+    Group: "AG_GOAL_STATUS"
+    Name: "I really love it!"
+    Condition: " BaseLevel == 99 && (Class >= JOB_SWORDMAN && Class <= JOB_THIEF) "
+    Reward:
+      ItemID: 16504
+      Script: " specialeffect2 EF_BLESSING; sc_start SC_BLESSING,30000,10; "
+    Score: 30
+  - ID: 200031
+    Group: "AG_JOB_CHANGE"
+    Name: "Reborn in Valhalla!"
+    Condition: " BaseLevel == 99 && Class == JOB_NOVICE_HIGH "
+    Reward:
+      ItemID: 22808
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 230100
+    Group: "AG_TAMING"
+    Name: "Poring is Love"
+    Dependent: [230101, 230102, 230103, 230104]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1025
+    Score: 50
+  - ID: 230110
+    Group: "AG_TAMING"
+    Name: "Entomologist"
+    Dependent: [230111, 230112, 230113, 230114, 230115, 230116]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1026
+    Score: 50
+  - ID: 230120
+    Group: "AG_TAMING"
+    Name: "Animals are also our friend"
+    Dependent: [230121, 230122, 230123, 230124, 230125, 230126, 230127, 230128]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1027
+    Score: 50
+  - ID: 230140
+    Group: "AG_TAMING"
+    Name: "Monster Girls Unite!!"
+    Dependent: [230141, 230142, 230143, 230144, 230145, 230146, 230147]
+    Reward:
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1029
+    Score: 50
+  - ID: 230101
+    Group: "AG_TAMING"
+    Name: "Poring - taming"
+    Target:
+      - MobID: 1002
+        Count: 1
+    Score: 10
+  - ID: 230102
+    Group: "AG_TAMING"
+    Name: "Drops - taming"
+    Target:
+      - MobID: 1113
+        Count: 1
+    Score: 10
+  - ID: 230103
+    Group: "AG_TAMING"
+    Name: "Poporing - taming"
+    Target:
+      - MobID: 1031
+        Count: 1
+    Score: 10
+  - ID: 230104
+    Group: "AG_TAMING"
+    Name: "Novice Poring - taming"
+    Target:
+      - MobID: 2398
+        Count: 1
+    Score: 10
+  - ID: 230111
+    Group: "AG_TAMING"
+    Name: "Chonchon - taming"
+    Target:
+      - MobID: 1011
+        Count: 1
+    Score: 10
+  - ID: 230112
+    Group: "AG_TAMING"
+    Name: "Steel Chonchon - taming"
+    Target:
+      - MobID: 1042
+        Count: 1
+    Score: 10
+  - ID: 230113
+    Group: "AG_TAMING"
+    Name: "Hunter Fly - taming"
+    Target:
+      - MobID: 1035
+        Count: 1
+    Score: 10
+  - ID: 230114
+    Group: "AG_TAMING"
+    Name: "Rocker - taming"
+    Target:
+      - MobID: 1052
+        Count: 1
+    Score: 10
+  - ID: 230115
+    Group: "AG_TAMING"
+    Name: "Spore - taming"
+    Target:
+      - MobID: 1014
+        Count: 1
+    Score: 10
+  - ID: 230116
+    Group: "AG_TAMING"
+    Name: "Poison Spore - taming"
+    Target:
+      - MobID: 1077
+        Count: 1
+    Score: 10
+  - ID: 230121
+    Group: "AG_TAMING"
+    Name: "Lunatic - taming"
+    Target:
+      - MobID: 1063
+        Count: 1
+    Score: 10
+  - ID: 230122
+    Group: "AG_TAMING"
+    Name: "Picky - taming"
+    Target:
+      - MobID: 1049
+        Count: 1
+    Score: 10
+  - ID: 230123
+    Group: "AG_TAMING"
+    Name: "Savage Bebe - taming"
+    Target:
+      - MobID: 1167
+        Count: 1
+    Score: 10
+  - ID: 230124
+    Group: "AG_TAMING"
+    Name: "Baby Desert Wolf - taming"
+    Target:
+      - MobID: 1107
+        Count: 1
+    Score: 10
+  - ID: 230125
+    Group: "AG_TAMING"
+    Name: "Smokie - taming"
+    Target:
+      - MobID: 1056
+        Count: 1
+    Score: 10
+  - ID: 230126
+    Group: "AG_TAMING"
+    Name: "Yoyo - taming"
+    Target:
+      - MobID: 1057
+        Count: 1
+    Score: 10
+  - ID: 230127
+    Group: "AG_TAMING"
+    Name: "Peco Peco - taming"
+    Target:
+      - MobID: 1019
+        Count: 1
+    Score: 10
+  - ID: 230128
+    Group: "AG_TAMING"
+    Name: "Petite - taming"
+    Target:
+      - MobID: 1155
+        Count: 1
+    Score: 10
+  - ID: 230141
+    Group: "AG_TAMING"
+    Name: "Munak - taming"
+    Target:
+      - MobID: 1026
+        Count: 1
+    Score: 10
+  - ID: 230142
+    Group: "AG_TAMING"
+    Name: "Isis - taming"
+    Target:
+      - MobID: 1029
+        Count: 1
+    Score: 10
+  - ID: 230143
+    Group: "AG_TAMING"
+    Name: "Sohee - taming"
+    Target:
+      - MobID: 1170
+        Count: 1
+    Score: 10
+  - ID: 230144
+    Group: "AG_TAMING"
+    Name: "Zherlthsh - taming"
+    Target:
+      - MobID: 1200
+        Count: 1
+    Score: 10
+  - ID: 230145
+    Group: "AG_TAMING"
+    Name: "Alice - taming"
+    Target:
+      - MobID: 1275
+        Count: 1
+    Score: 10
+  - ID: 230146
+    Group: "AG_TAMING"
+    Name: "Succubus - taming"
+    Target:
+      - MobID: 1370
+        Count: 1
+    Score: 10
+  - ID: 230147
+    Group: "AG_TAMING"
+    Name: "Loli Ruri - taming"
+    Target:
+      - MobID: 1505
+        Count: 1
+    Score: 10
+  - ID: 220000
+    Group: "AG_CHATTING_CREATE"
+    Name: "Community begin"
+    Condition: " true "
+    Score: 10
+  - ID: 220001
+    Group: "AG_CHATTING_DYING"
+    Name: "A mouth only moment"
+    Condition: " true "
+    Score: 10
+  - ID: 220002
+    Group: "AG_CHATTING_COUNT"
+    Name: "Admiring the chatter"
+    Condition: " ARG0 == 20 "
+    Score: 10
+  - ID: 220003
+    Group: "AG_ADD_FRIEND"
+    Name: "My friend's friend~"
+    Condition: " ARG0 >= 1 "
+    Score: 10
+  - ID: 220004
+    Group: "AG_ADD_FRIEND"
+    Name: "A competition of popularity"
+    Condition: " ARG0 >= 10 "
+    Score: 10
+  - ID: 220005
+    Group: "AG_PARTY"
+    Name: "Let's Party~"
+    Condition: " true "
+    Score: 10
+  - ID: 220006
+    Group: "AG_MARRY"
+    Name: "Married with who..?"
+    Condition: " true "
+    Reward:
+      TitleID: 1022
+    Score: 20
+  - ID: 220007
+    Group: "AG_BABY"
+    Name: "Can you grow?"
+    Condition: " ARG0 == 1 "
+    Reward:
+      TitleID: 1032
+    Score: 20
+  - ID: 220008
+    Group: "AG_BABY"
+    Name: "Being a parent"
+    Condition: " ARG0 == 2 "
+    Reward:
+      TitleID: 1033
+    Score: 20
+  - ID: 220009
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (1)"
+    Condition: " ARG0 >= 10000 "
+    Target:
+      Count: 10000
+    Score: 10
+  - ID: 220010
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (2)"
+    Condition: " ARG0 >= 100000 "
+    Target:
+      Count: 100000
+    Score: 15
+  - ID: 220011
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (3)"
+    Condition: " ARG0 >= 500000 "
+    Target:
+      Count: 500000
+    Score: 20
+  - ID: 220012
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (4)"
+    Condition: " ARG0 >= 1000000 "
+    Target:
+      Count: 1000000
+    Score: 30
+  - ID: 220013
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (5)"
+    Condition: " ARG0 >= 5000000 "
+    Target:
+      Count: 5000000
+    Score: 50
+  - ID: 220014
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (1)"
+    Condition: " ARG0 == 1 && ARG1 >= 7 "
+    Score: 10
+  - ID: 220015
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (2)"
+    Condition: " ARG0 == 1 && ARG1 >= 12 "
+    Score: 15
+  - ID: 220016
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (3)"
+    Condition: " ARG0 == 2 && ARG1 >= 7 "
+    Score: 10
+  - ID: 220017
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (4)"
+    Condition: " ARG0 == 2 && ARG1 >= 12 "
+    Score: 15
+  - ID: 220018
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (5)"
+    Condition: " ARG0 == 3 && ARG1 >= 7 "
+    Score: 15
+  - ID: 220019
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (6)"
+    Condition: " ARG0 == 3 && ARG1 >= 12 "
+    Score: 20
+  - ID: 220020
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (7)"
+    Condition: " ARG0 == 4 && ARG1 >= 7 "
+    Score: 20
+  - ID: 220021
+    Group: "AG_ENCHANT_SUCCESS"
+    Name: "I can't quit from refining! (8)"
+    Condition: " ARG0 == 4 && ARG1 >= 12 "
+    Score: 30
+  - ID: 220022
+    Group: "AG_ENCHANT_FAIL"
+    Name: "Human's greed has no ending.."
+    Condition: " true "
+    Score: 10
+  - ID: 220023
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (1)"
+    Condition: " ARG0 >= 100 "
+    Score: 10
+  - ID: 220024
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (2)"
+    Condition: " ARG0 >= 1000 "
+    Score: 10
+  - ID: 220025
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (3)"
+    Condition: " ARG0 >= 5000 "
+    Score: 15
+  - ID: 220026
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (4)"
+    Condition: " ARG0 >= 10000 "
+    Score: 15
+  - ID: 220027
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (5)"
+    Condition: " ARG0 >= 50000 "
+    Score: 20
+  - ID: 220028
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (6)"
+    Condition: " ARG0 >= 100000 "
+    Score: 20
+  - ID: 220029
+    Group: "AG_GET_ITEM"
+    Name: "I found it! (7)"
+    Condition: " ARG0 >= 150000 "
+    Score: 30
+  - ID: 220030
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (1)"
+    Condition: " ARG0 >= 10000 "
+    Score: 10
+  - ID: 220031
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (2)"
+    Condition: " ARG0 >= 100000 "
+    Score: 15
+  - ID: 220032
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (3)"
+    Condition: " ARG0 >= 1000000 "
+    Score: 20
+  - ID: 220033
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (4)"
+    Condition: " ARG0 >= 10000000 "
+    Score: 25
+  - ID: 220034
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (5)"
+    Condition: " ARG0 >= 100000000 "
+    Score: 30
+  - ID: 220035
+    Group: "AG_GET_ZENY"
+    Name: "Rich King (6)"
+    Condition: " ARG0 >= 1000000000 "
+    Score: 40
+  - ID: 230200
+    Group: "AG_BATTLE"
+    Name: "Poring seeker"
+    Dependent: [230201, 230202, 230203]
+    Score: 10
+  - ID: 230201
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (1)"
+    Target:
+      - MobID: 1002
+        Count: 10
+      - MobID: 2398
+        Count: 10
+      - MobID: 1113
+        Count: 10
+      - MobID: 1031
+        Count: 10
+      - MobID: 1242
+        Count: 10
+    Score: 10
+  - ID: 230202
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (2)"
+    Target:
+      - MobID: 1090
+        Count: 1
+      - MobID: 1582
+        Count: 1
+      - MobID: 1096
+        Count: 1
+      - MobID: 1388
+        Count: 1
+      - MobID: 1120
+        Count: 1
+    Score: 15
+  - ID: 230203
+    Group: "AG_BATTLE"
+    Name: "Exploring Poring's life (3)"
+    Target:
+      - MobID: 1613
+        Count: 5
+      - MobID: 1977
+        Count: 5
+      - MobID: 1836
+        Count: 5
+    Score: 20
+  - ID: 240000
+    Group: "AG_GOAL_LEVEL"
+    Name: "Complete challenges after first introduction"
+    Score: 10
+  - ID: 240001
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 1"
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240002
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 2"
+    Dependent: [240001]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240003
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 3"
+    Dependent: [240002]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240004
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 4"
+    Dependent: [240003]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240005
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 5"
+    Dependent: [240004]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240006
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 6"
+    Dependent: [240005]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240007
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 7"
+    Dependent: [240006]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240008
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 8"
+    Dependent: [240007]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240009
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 9"
+    Dependent: [240008]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240010
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 10"
+    Dependent: [240009]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1023
+    Score: 10
+  - ID: 240011
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 11"
+    Dependent: [240010]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240012
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 12"
+    Dependent: [240011]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240013
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 13"
+    Dependent: [240012]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240014
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 14"
+    Dependent: [240013]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240015
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 15"
+    Dependent: [240014]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240016
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 16"
+    Dependent: [240015]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240017
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 17"
+    Dependent: [240016]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240018
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 18"
+    Dependent: [240017]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240019
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 19"
+    Dependent: [240018]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+    Score: 10
+  - ID: 240020
+    Group: "AG_GOAL_ACHIEVE"
+    Name: "Reaching Level 20"
+    Dependent: [240019]
+    Reward:
+      ItemID: 644
+      Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
+      TitleID: 1024
+    Score: 10
+  - ID: 220036
+    Group: "AG_EAT"
+    Name: "The beginning of outdoor"
+    Score: 20
+  - ID: 220037
+    Group: "AG_EAT"
+    Name: "The first step becoming a chef"
+    Score: 20

+ 1 - 0
db/re/instance_db.txt

@@ -22,3 +22,4 @@
 15,Geffen Magic Tournament,7200,300,1@gef,119,209,1@gef_in,1@ge_st
 16,Horror Toy Factory,3600,300,1@xm_d,111,22
 17,Faceworm's Nest,3600,300,1@face,112,374
+18,Ghost Palace,3600,300,1@spa,42,196

+ 119 - 97
db/re/item_db.txt

@@ -784,7 +784,7 @@
 1440,Battle_Hook_,Battle Hook,5,20,,900,140,,3,3,0x00004082,18,2,2,4,65,1,4,{ bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bAddRace,RC_Player,20; skill "KN_PIERCE",3; },{},{}
 1441,Blue_Spear,Blue Spear,5,10,,1200,180:170,,3,1,0x00004000,56,2,2,3,100,1,4,{ bonus bDex,5; bonus bInt,5; },{},{}
 1442,Ru_Gold_Spear,Ru Gold Spear,5,0,,1200,180,,3,2,0x00004000,56,2,2,3,120,1,4,{ bonus bStr,8; bonus bAgi,8; },{},{}
-1443,Crimson_Spear,Crimson Spear,5,20,,900,90,,3,2,0x00004082,56,2,2,3,70,1,4,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{}
+1443,Crimson_Spear,Crimson Spear,5,20,,900,90,,3,2,0x00004082,63,2,2,3,70,1,4,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{}
 1446,Requiem_Spear,Requiem Spear,5,20,,1000,130,,3,,0x00004080,63,2,2,4,100,1,4,{ .@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } bonus2 bAddRace2,RC2_BioLab,.@b; },{},{}
 //===================================================================
 // 2-Handed Spears
@@ -1379,12 +1379,12 @@
 2174,Lumiere_Shield,Lumiere Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{}
 2175,Esprit_Shield,Spirit Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{}
 2176,Dark_Book,Black Book,4,20,,500,,80,,1,0xFFFFFFFF,63,2,32,,65,1,5,{ bonus bMdef,5; .@r = getrefine(); bonus3 bAutoSpellWhenHit,"NPC_DRAGONFEAR",1,(.@r<=6)?(10):((.@r<=8)?(20):(30)); },{},{}
-2177,Shield_Of_Death,Shield Of Death,4,20,,2000,,150,,1,0xFFFFFFFF,63,2,32,,90,1,3,{ bonus2 bAddClass,Class_Boss,2; bonus2 bMagicAddClass,Class_Boss,2; bonus2 bAddClass,Class_Normal,10; bonus2 bMagicAddClass,Class_Normal,10; },{},{}
-2178,TE_Woe_Buckler,TE Woe Buckler,4,0,,0,,15,,0,0xFFFFFFFF,63,2,32,1,40,1,2,{ bonus bMdef,15; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_Player,15; },{},{}
-2179,TE_Woe_Shield,TE Woe Shield,4,0,,0,,25,,0,0x000444A2,63,2,32,1,40,1,3,{ bonus bMdef,5; bonus bMaxHP,200; bonus2 bSubRace,RC_Player,20; },{},{}
-2180,TE_Woe_Magic_Guard,TE Woe Magic Guard,4,0,,0,,5,,0,0x00818315,63,2,32,1,40,1,1,{ bonus bMdef,25; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,10; },{},{}
+2177,Shield_Of_Death,Shield Of Death,4,20,,2000,,150,,1,0xFFFFFFFF,63,2,32,,90,1,3,{ bonus2 bAddClass,Class_Boss,2; bonus2 bMagicAddClass,Class_Boss,2; bonus2 bSubClass,Class_Normal,-10; },{},{}
+2178,TE_Woe_Buckler,TE Woe Buckler,4,0,,0,,15,,0,0xFFFFFFFF,63,2,32,,40,1,2,{ bonus bMdef,15; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_Player,15; },{},{}
+2179,TE_Woe_Shield,TE Woe Shield,4,0,,0,,25,,0,0x000444A2,63,2,32,,40,1,3,{ bonus bMdef,5; bonus bMaxHP,200; bonus2 bSubRace,RC_Player,20; },{},{}
+2180,TE_Woe_Magic_Guard,TE Woe Magic Guard,4,0,,0,,5,,0,0x00818315,63,2,32,,40,1,1,{ bonus bMdef,25; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,10; },{},{}
 2181,Hervor,Hervor,4,10,,1500,,100,,0,0xFFFFFFFF,63,2,32,,1,,2,{ bonus bMdef,5; bonus2 bSubRace,RC_All,30; bonus bUnbreakableArmor,1; },{},{}
-2182,Hervor_Alvitr,Hervor Alvitr,4,0,,3000,,150,,0,0x000FDF80,56,2,32,1,100,0,2,{ bonus bMdef,10; bonus bVit,20; bonus2 bSubRace,RC_All,30; bonus bUnbreakableShield,1; autobonus2 "{ sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_CURSE; sc_end SC_STONE; sc_end SC_POISON; sc_end SC_BLIND; sc_end SC_SILENCE; sc_end SC_BLEEDING; sc_end SC_CONFUSION; sc_end SC_FREEZE; bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Sleep,10000; bonus2 bResEff,Eff_Curse,10000; bonus2 bResEff,Eff_Stone,10000; bonus2 bResEff,Eff_Poison,10000; bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Silence,10000; bonus2 bResEff,Eff_Bleeding,10000; bonus2 bResEff,Eff_Confusion,10000; bonus2 bResEff,Eff_Freeze,10000; }",10,60000,BF_SHORT; },{},{}
+2182,Hervor_Alvitr,Hervor Alvitr,4,0,,3000,,150,,0,0x000FDF80,56,2,32,,100,0,2,{ bonus bMdef,10; bonus bVit,20; bonus2 bSubRace,RC_All,30; bonus bUnbreakableShield,1; autobonus2 "{ sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_CURSE; sc_end SC_STONE; sc_end SC_POISON; sc_end SC_BLIND; sc_end SC_SILENCE; sc_end SC_BLEEDING; sc_end SC_CONFUSION; sc_end SC_FREEZE; bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Sleep,10000; bonus2 bResEff,Eff_Curse,10000; bonus2 bResEff,Eff_Stone,10000; bonus2 bResEff,Eff_Poison,10000; bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Silence,10000; bonus2 bResEff,Eff_Bleeding,10000; bonus2 bResEff,Eff_Confusion,10000; bonus2 bResEff,Eff_Freeze,10000; }",10,60000,BF_SHORT; },{},{}
 2183,Impr_Angel's_Safeguard,Advanced Angelic Guard,4,10000,,400,,30,,1,0x00000001,63,2,32,,99,1,1,{ bonus2 bSubRace,RC_Demon,5; bonus2 bSubEle,Ele_All,5; bonus2 bSubEle,Ele_Neutral,-5; },{},{}
 2185,Magic_Reflect,Magic Reflect,4,10,,1000,,50,,1,0xFFFFFFFF,63,2,32,,99,1,3,{ bonus bMdef,10; bonus bMagicDamageReturn,3+((getrefine()>=9) ? 3 : 0); },{},{}
 2186,Great_Encyclopedia_Revision,Great Encyclopedia Revision,4,10,,200,0:5,50,,1,0x00810100,63,2,32,,99,1,4,{ bonus bInt,3; bonus bDex,2; .@r = getrefine(); bonus bCritical,3+((.@r >= 7) ? 2 : 0); if(.@r >= 9) bonus bMatk,5; },{},{}
@@ -1392,7 +1392,7 @@
 2188,Svalinn_J,Svalinn,4,10,,500,,80,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ .@r = getrefine(); bonus bMaxHP,9+.@r/3; bonus2 bAddEle,Ele_Water,4+.@r/3*5; },{},{}
 2189,Mad_Bunny,Mad Bunny Shield,4,10,,100,,40,,1,0xFFFFFFFF,63,2,32,,30,1,6,{ bonus2 bSubEle,Ele_All,5; bonus bMdef,6; bonus bDex,1; },{},{}
 2190,Ancient_Shield_Of_Aeon,Ancient Shield Of Aeon,4,0,,200,,5,,0,0x000FDF80,63,2,32,,130,1,2,{ bonus2 bSubEle,Ele_Neutral,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Wind,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubEle,Ele_Holy,10; bonus2 bSubEle,Ele_Ghost,10; bonus bMaxHP,500; bonus bMaxSP,50; if(getrefine()>=14) skill "MG_STONECURSE",5; },{},{}
-2195,Lian_Shield,Lian Shield,4,0,,1300,,50,,1,0xFFFFFFFF,63,2,32,1,65,1,,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5; },{},{}
+2195,Lian_Shield,Lian Shield,4,0,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5; },{},{}
 2196,White_Gold_Shield,White Gold Shield,4,0,,1800,,140,,1,0xFFFFFFFF,63,2,32,,,1,,{ autobonus2 "{ bonus bMagicDamageReturn,20; }",100,2000,BF_MAGIC; /* Confirm: Success rate? */ },{},{}
 2198,Lapine_Shield,Lapine Shield,4,0,,1000,,25,,1,0xFFFFFFFF,63,2,32,,100,1,,{ bonus bMdef,10; if (getrefine() > 7) { bonus bMatk,20; } },{},{}
 // GM Shield
@@ -1698,9 +1698,9 @@
 2493,Goibne's_Combat_Boots_,Goibne's Greaves,4,30000,,700,,13,,1,0xFFFFFFFE,63,2,64,,54,1,0,{ bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; },{},{}
 2494,Chrystal_Pumps_,Crystal Pumps,4,20,,100,,5,,1,0xFFFFFFFE,63,0,64,,0,1,0,{ bonus bMdef,10; bonus bLuk,5; },{},{}
 2495,Egir_Shoes,Egir Shoes,4,200000,,300,,13,,1,0xFFFFFFFF,63,2,64,,110,1,0,{ if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bMaxHP,BaseLevel*5; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bMaxSP,JobLevel*2; },{},{}
-2496,TE_Woe_Shoes,TE Woe Shoes,4,0,,0,,5,,0,0xFFFFFFFF,63,2,64,0,40,1,,{ bonus bMdef,5; bonus bMaxHP,150; bonus bMaxSP,150; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
-2497,TE_Woe_Boots,TE Woe Boots,4,0,,0,,10,,0,0x000444A2,63,2,64,0,40,1,,{ bonus bMaxHP,200; bonus bMaxSP,100; bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
-2498,TE_Woe_Magic_Sandal,TE Woe Magic Sandal,4,0,,0,,5,,0,0x00818315,63,2,64,1,40,1,,{ bonus bMdef,5; bonus bMaxHP,100; bonus bMaxSP,200; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
+2496,TE_Woe_Shoes,TE Woe Shoes,4,0,,0,,5,,0,0xFFFFFFFF,63,2,64,,40,1,,{ bonus bMdef,5; bonus bMaxHP,150; bonus bMaxSP,150; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
+2497,TE_Woe_Boots,TE Woe Boots,4,0,,0,,10,,0,0x000444A2,63,2,64,,40,1,,{ bonus bMaxHP,200; bonus bMaxSP,100; bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
+2498,TE_Woe_Magic_Sandal,TE Woe Magic Sandal,4,0,,0,,5,,0,0x00818315,63,2,64,,40,1,,{ bonus bMdef,5; bonus bMaxHP,100; bonus bMaxSP,200; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
 2499,Temporal_Boots,Temporal Boots,4,400,,600,,20,,0,0xFFFFFFFF,63,2,64,,10,1,,{ .@r = getrefine(); bonus bMaxHP,300; bonus bMaxSP,30; bonus bMaxHP,100*(.@r/3); bonus bMaxSP,10*(.@r/3); },{},{}
 //===================================================================
 // Garments
@@ -2137,15 +2137,15 @@
 2941,Gunslinger_Manual,Gunslinger Manual,4,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1; },{},{}
 2942,Taekwon_Manual,Taekwon Manual,4,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5; },{},{}
 2943,Critical_Ring_,Critical Ring,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,,,0,,{ bonus bCritical,5;},{},{}
-2944,TE_Ring_Of_Protection,TE Ring Of Protection,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,1,40,0,,{ bonus bMaxHP,100; bonus2 bSubRace,RC_Player,5; },{},{}
-2945,TE_Ring_Of_Rage,TE Ring Of Rage,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,1,40,0,,{ bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; },{},{}
-2946,TE_Ring_Of_Defiance,TE Ring Of Defiance,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,1,40,0,,{ bonus bMdef,5; bonus2 bSubRace,RC_Player,5; },{},{}
+2944,TE_Ring_Of_Protection,TE Ring Of Protection,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,,40,0,,{ bonus bMaxHP,100; bonus2 bSubRace,RC_Player,5; },{},{}
+2945,TE_Ring_Of_Rage,TE Ring Of Rage,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,,40,0,,{ bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; },{},{}
+2946,TE_Ring_Of_Defiance,TE Ring Of Defiance,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,,40,0,,{ bonus bMdef,5; bonus2 bSubRace,RC_Player,5; },{},{}
 2948,Demon_Wing,Demon Wing,4,10,,100,,,,1,0xFFFFFFFF,63,2,136,,70,,,{ bonus bFlee,5; },{},{}
 2949,Silversmith_Bracelet,Silversmith Bracelet,4,10,,100,,3,,1,0xFFFFFFFF,63,2,136,,60,,,{ bonus bAllStats,1; bonus bMdef,3; skill "SA_SPELLBREAKER",5; },{},{}
-2950,Rune_Ring,Rune Ring,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,1,1,0,,{ bonus2 bExpAddClass,Class_Normal,10; },{},{}
-2951,Kvasir_Ring_Blue,Kvasir Ring Blue,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,1,1,0,,{ bonus bMaxSP,30; skill "ECL_SNOWFLIP",1; },{},{}
-2952,Kvasir_Ring_Red,Kvasir Ring Red,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,1,1,0,,{ bonus bMaxSP,30; skill "ECL_PEONYMAMY",1; },{},{}
-2953,Kvasir_Ring_Green,Kvasir Ring Green,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,1,1,0,,{ bonus bMaxHP,100; skill "ECL_SADAGUI",1; },{},{}
+2950,Rune_Ring,Rune Ring,4,0,,0,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bExpAddClass,Class_Normal,10; },{},{}
+2951,Kvasir_Ring_Blue,Kvasir Ring Blue,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus bMaxSP,30; skill "ECL_SNOWFLIP",1; },{},{}
+2952,Kvasir_Ring_Red,Kvasir Ring Red,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus bMaxSP,30; skill "ECL_PEONYMAMY",1; },{},{}
+2953,Kvasir_Ring_Green,Kvasir Ring Green,4,0,,100,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus bMaxHP,100; skill "ECL_SADAGUI",1; },{},{}
 2954,Kvasir_Ring_Brown,Kvasir Ring Brown,4,10,,100,,,,0,0xFFFFFFFF,63,2,136,,1,,,{ bonus bMaxHP,100; },{},{}
 2956,Safety_Ring_,Advanced Safety Ring,4,75000,,100,,10,,1,0xFFFFFFFE,63,2,136,,50,0,0,{ bonus bMdef,5; bonus bAllStats,1; },{},{}
 2957,Good_Ring_Of_Flame_Lord,Advanced Ring Of Flame Lord,4,20,,100,,0,,0,0x7CCFDF80,63,2,136,,85,0,0,{ bonus bStr,3; bonus bVit,2; bonus bBaseAtk,20; bonus2 bSubEle,Ele_Fire,10; bonus3 bAutoSpell,"CH_SOULCOLLECT",1,30; bonus3 bAutoSpell,"MO_EXPLOSIONSPIRITS",1,10; bonus3 bAutoSpell,"PA_PRESSURE",2,30; bonus3 bAutoSpell,"MG_FIREBALL",1,150; bonus3 bAutoSpell,"KN_BOWLINGBASH",5,20; },{},{}
@@ -2178,7 +2178,7 @@
 2995,Supplement_Part_Dex,Supplement Part Dex,4,25000,,100,,0,,1,0x00000400,56,2,136,,100,0,0,{ bonus bUseSPrate,-10; bonus bDelayrate,-10; bonus bVariableCastrate,-10; bonus2 bSkillVariableCast,"NC_AXEBOOMERANG",-2000; },{},{}
 2996,Reinforced_Parts_Gun_Barrel,Reinforced Parts - Gun Barrel,4,10,,500,,,,1,0xFFFFFFFF,63,2,136,,100,,,{ bonus2 bAddClass,Class_All,4; bonus bHit,10; bonus2 bSkillAtk,"NC_BOOSTKNUCKLE",25; },{},{}
 2997,RWC_Gold_Brooch,RWC Gold Brooch,4,10,,200,,0,,1,0xFFFFFFFF,63,2,136,,0,0,,{ bonus bBaseAtk,25; bonus bMatk,20; },{},{}
-2998,Shining_Trapezohedron,Shining Trapezohedron,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,1,90,1,,{ bonus2 bSubEle,Ele_Holy,10; },{},{}
+2998,Shining_Trapezohedron,Shining Trapezohedron,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,,90,1,,{ bonus2 bSubEle,Ele_Holy,10; },{},{}
 2999,RWC_Brooch,RWC Brooch,4,10,,200,,0,,0,0xFFFFFFFF,63,2,136,,0,0,,{ bonus bMaxHP,300; bonus bMaxSP,30; },{},{}
 //===================================================================
 // Cards
@@ -3118,6 +3118,12 @@
 4948,Skill_Delay1,After Skill Delay Lv1,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-2; },{},{}
 4949,Skill_Delay2,After Skill Delay Lv2,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-4; },{},{}
 4950,Skill_Delay3,After Skill Delay Lv3,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-6; },{},{}
+4994,Rune_of_Strength_Lv_1,Rune of Strength Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,5; } if (.@r>=10) { bonus bAtkRate,5; } },{},{}
+4995,Rune_of_Strength_Lv_2,Rune of Strength Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,6; } if (.@r>=11) { bonus bStr,1; bonus bAtkRate,7; } },{},{}
+4996,Rune_of_Strength_Lv_3,Rune of Strength_Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,7; } if (.@r>=12) { bonus bStr,1; bonus bAtkRate,8; } if (.@r>=13) { bonus bStr,1; bonus bAtkRate,2; } },{},{}
+4997,Rune_of_Agility_Lv_1,Rune of Agility Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bAgi,5; } if (.@r>=10) { bonus bFlee2,5; } },{},{}
+4998,Rune_of_Agility_Lv_2,Rune of Agility Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bAgi,6; } if (.@r>=11) { bonus bAgi,1; bonus bFlee2,7; } },{},{}
+4999,Rune_of_Agility_Lv_3,Rune of Agility Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bAgi,7; } if (.@r>=12) { bonus bAgi,1; bonus bFlee2,5; } if (.@r>=13) { bonus bAgi,1; bonus bFlee2,5; } },{},{}
 //===================================================================
 // More Headgears
 //===================================================================
@@ -4000,23 +4006,23 @@
 5894,RCC2013_3RD_CROWN,RCC2013 3RD CROWN,4,20,,2500,,7,,1,0xFFFFFFFF,63,2,256,,1,0,1108,{ bonus bAllStats,3; skill "AL_TELEPORT",1; },{ sc_start SC_SPEEDUP0,-1,25; },{ sc_end SC_SPEEDUP0; }
 5895,RCC2013_ANV_Hat,RCC2013 ANV Hat,4,20,,2500,,7,,1,0xFFFFFFFF,63,2,256,,1,0,1109,{ bonus bAllStats,1; bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; },{},{}
 5906,Oni_Horns_,Oni Horns,4,0,,20,,10,,1,0x00001000,63,2,256,,100,1,1127,{ bonus2 bSkillAtk,"GC_COUNTERSLASH",(10*getskilllv("GC_WEAPONBLOCKING")); .@r = getrefine(); if(.@r > 6){ bonus bAtk,20; bonus bHit,5; } if(.@r > 9){ bonus3 bAutoSpell,"GC_CROSSIMPACT",1,10; } },{},{}
-5914,C_Flutter_Butterfly,C Flutter Butterfly,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,1,1,0,1378,{ hateffect HAT_EF_FLUTTER_BUTTERFLY,true; },{},{ hateffect HAT_EF_FLUTTER_BUTTERFLY,false; }
-5917,Yellow_Scarf,Yellow Scarf,4,0,,100,,,,0,0xFFFFFFFF,63,2,1,0,90,0,1170,{ bonus bLongAtkDef,3; },{},{}
+5914,C_Flutter_Butterfly,C Flutter Butterfly,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,0,1378,{ hateffect HAT_EF_FLUTTER_BUTTERFLY,true; },{},{ hateffect HAT_EF_FLUTTER_BUTTERFLY,false; }
+5917,Yellow_Scarf,Yellow Scarf,4,0,,100,,,,0,0xFFFFFFFF,63,2,1,,90,0,1170,{ bonus bLongAtkDef,3; },{},{}
 5918,Gambler_Seal,Gambler Seal,4,0,,500,,,,0,0xFFFFFFFF,63,2,512,,,0,1202,{ bonus bCritical,3; bonus bCritAtkRate,3; bonus2 bSubSkill,"RA_ARROWSTORM",10; bonus2 bSubSkill,"SR_GATEOFHELL",10; .@dex = readparam(bDex); .@luk = readparam(bLuk); bonus bCritAtkRate,-(.@dex/10)*2; bonus bCritical,.@luk/10; bonus bBaseAtk,(.@luk/10)*2; bonus bMatk,(.@luk/10)*2; if (.@luk > 120) { bonus bCritical,10; bonus bCritAtkRate,10; bonus2 bSubSkill,"RA_ARROWSTORM",30; bonus2 bSubSkill,"SR_GATEOFHELL",30; } else if (.@luk > 108) { bonus bCritical,5; bonus bCritAtkRate,10; } },{},{}
-5919,Camellia_Hair_Pin,Camellia Hair Pin,4,0,,1000,,,,1,0xFFFFFFFF,63,2,256,0,50,1,1203,{ bonus bMdef,20; bonus3 bAutoSpell,"AL_PNEUMA",1,30+getrefine()*5; /* CONFIRM The Rate*/ },{},{}
+5919,Camellia_Hair_Pin,Camellia Hair Pin,4,0,,1000,,,,1,0xFFFFFFFF,63,2,256,,50,1,1203,{ bonus bMdef,20; bonus3 bAutoSpell,"AL_PNEUMA",1,30+getrefine()*5; /* CONFIRM The Rate*/ },{},{}
 5920,Medical_Boots,Medical Boots,4,0,,300,,10,,0,0xFFFFFFFF,63,2,64,,10,1,,{ .@r = getrefine(); bonus bHealPower,10+((.@r/2) * 2); bonus2 bSkillUseSP,"AB_CHEAL",(.@r * 5); },{},{}
-5943,Owlviscount_Silk_Hat,Owl Viscount Silk Hat,4,0,,500,,15,,1,0xFFFFFFFF,63,2,256,0,70,1,1323,{ bonus bInt,1; bonus bAspdRate,10; .@r = getrefine(); bonus bMatk,7*.@r; autobonus "{ .@r = getrefine(); bonus bAspdRate,(.@r >= 9 ? 40 : ((.@r >= 7) ? 10 : ((.@r >= 5) ? 5 : 1))); }",.@r*20,30000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }"; },{},{}
-5966,KarduiEar,KarduiEar,4,0,,300,,,,0,0xFFFFFFFF,63,2,512,0,70,0,1357,{ .@dex = readparam(bDex); bonus bMatk,(.@dex > 10) ? .@dex/10*2 : 0; if (.@dex > 107) { bonus bVariableCastrate,-10; bonus bMatk,60; } if (.@dex > 119) { bonus bVariableCastrate,-5; bonus bMatk,100; } },{},{}
-5967,Flying Galapago,Flying Galapago,4,0,,500,,,,0,0xFFFFFFFF,63,2,1,0,110,0,1358,{ bonus bAgi,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*40; },{},{}
-5968,DVAngelNurseCap,DVAngelNurseCap,4,0,,500,,10,,1,0xFFFFFFFF,63,2,256,0,50,1,1359,{ if (BaseClass == Job_Acolyte) bonus bHealPower,3; bonus bNoCastCancel,1; .@r = getrefine(); bonus bHealPower,(.@r > 8) ? 12 : ((.@r > 6) ? 9 : ((.@r > 4) ? 6 : 0)); },{},{}
-5969,QueenAnzRevenge,QueenAnzRevenge,4,0,,400,,7,,1,0xFFFFFFFF,63,2,256,0,100,1,1360,{ bonus bStr,5; .@r = getrefine(); bonus2 bAddClass,Class_All,7+(.@r > 8 ? 4 : (.@r > 6 ? 3 : (.@r > 4 ? 2 : 0))); bonus bNoSizeFix,1; },{},{}
-5971,Moon_Eyepatch,Moon Eyepatch,4,0,,100,,,,1,0xFFFFFFFF,63,2,512,0,10,0,1370,{ bonus2 bSubEle,Ele_Water,5; },{},{}
-5972,Chatty_Parrot,Chatty Parrot,4,0,,100,,,,0,0xFFFFFFFF,63,2,1,0,80,0,1116,{ bonus bMatkRate,BaseLevel/50; bonus bVariableCast,-readparam(bInt)/30; },{},{}
-5973,Ancient_Elven_Ear_J,Ancient Elven Ear J,4,0,,200,,,,0,0xFFFFFFFF,63,2,512,0,70,0,665,{ bonus bLuk,10; bonus bMdef,10; bonus bFlee2,2; },{},{}
-5978,Syringe_Toy,Toy Syringe,4,0,,100,,3,,0,0xFFFFFFFF,63,2,1,1,70,0,842,{ bonus bMdef,3; bonus2 bAddItemHealRate,545,150; bonus2 bAddItemHealRate,546,150; bonus2 bAddItemHealRate,547,150; },{},{}
-5979,C_Angel_Fluttering,C Angel Fluttering,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,0,1,0,1380,{ hateffect HAT_EF_ANGEL_FLUTTERING,true; },{},{ hateffect HAT_EF_ANGEL_FLUTTERING,false; }
-5980,C_Classical_Fhat,C Classical Fhat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,0,1,0,1381,{},{},{}
-5985,Noble_Mask,Noble Mask,4,0,,200,,,,0,0xFFFFFFFF,63,2,256,0,30,0,1409,{ bonus2 bSkillAtk,"PA_SACRIFICE",BaseLevel*2; bonus2 bSkillVariableCast,"PA_PRESSURE",-2000; bonus2 bSkillVariableCast,"CR_DEVOTION",-2000; if (BaseLevel > 149) { bonus bMaxHPrate,3; bonus bAspdRate,3; } else if (BaseLevel > 99) { bonus bMaxHPrate,2; bonus bAspdRate,2; } else { bonus bMaxHPrate,1; bonus bAspdRate,1; } },{},{}
+5943,Owlviscount_Silk_Hat,Owl Viscount Silk Hat,4,0,,500,,15,,1,0xFFFFFFFF,63,2,256,,70,1,1323,{ bonus bInt,1; bonus bAspdRate,10; .@r = getrefine(); bonus bMatk,7*.@r; autobonus "{ .@r = getrefine(); bonus bAspdRate,(.@r >= 9 ? 40 : ((.@r >= 7) ? 10 : ((.@r >= 5) ? 5 : 1))); }",.@r*20,30000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }"; },{},{}
+5966,KarduiEar,KarduiEar,4,0,,300,,,,0,0xFFFFFFFF,63,2,512,,70,0,1357,{ .@dex = readparam(bDex); bonus bMatk,(.@dex > 10) ? .@dex/10*2 : 0; if (.@dex > 107) { bonus bVariableCastrate,-10; bonus bMatk,60; } if (.@dex > 119) { bonus bVariableCastrate,-5; bonus bMatk,100; } },{},{}
+5967,Flying Galapago,Flying Galapago,4,0,,500,,,,0,0xFFFFFFFF,63,2,1,,110,0,1358,{ bonus bAgi,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*40; },{},{}
+5968,DVAngelNurseCap,DVAngelNurseCap,4,0,,500,,10,,1,0xFFFFFFFF,63,2,256,,50,1,1359,{ if (BaseClass == Job_Acolyte) bonus bHealPower,3; bonus bNoCastCancel,1; .@r = getrefine(); bonus bHealPower,(.@r > 8) ? 12 : ((.@r > 6) ? 9 : ((.@r > 4) ? 6 : 0)); },{},{}
+5969,QueenAnzRevenge,QueenAnzRevenge,4,0,,400,,7,,1,0xFFFFFFFF,63,2,256,,100,1,1360,{ bonus bStr,5; .@r = getrefine(); bonus2 bAddClass,Class_All,7+(.@r > 8 ? 4 : (.@r > 6 ? 3 : (.@r > 4 ? 2 : 0))); bonus bNoSizeFix,1; },{},{}
+5971,Moon_Eyepatch,Moon Eyepatch,4,0,,100,,,,1,0xFFFFFFFF,63,2,512,,10,0,1370,{ bonus2 bSubEle,Ele_Water,5; },{},{}
+5972,Chatty_Parrot,Chatty Parrot,4,0,,100,,,,0,0xFFFFFFFF,63,2,1,,80,0,1116,{ bonus bMatkRate,BaseLevel/50; bonus bVariableCast,-readparam(bInt)/30; },{},{}
+5973,Ancient_Elven_Ear_J,Ancient Elven Ear J,4,0,,200,,,,0,0xFFFFFFFF,63,2,512,,70,0,665,{ bonus bLuk,10; bonus bMdef,10; bonus bFlee2,2; },{},{}
+5978,Syringe_Toy,Toy Syringe,4,0,,100,,3,,0,0xFFFFFFFF,63,2,1,,70,0,842,{ bonus bMdef,3; bonus2 bAddItemHealRate,545,150; bonus2 bAddItemHealRate,546,150; bonus2 bAddItemHealRate,547,150; },{},{}
+5979,C_Angel_Fluttering,C Angel Fluttering,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,0,1380,{ hateffect HAT_EF_ANGEL_FLUTTERING,true; },{},{ hateffect HAT_EF_ANGEL_FLUTTERING,false; }
+5980,C_Classical_Fhat,C Classical Fhat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1381,{},{},{}
+5985,Noble_Mask,Noble Mask,4,0,,200,,,,0,0xFFFFFFFF,63,2,256,,30,0,1409,{ bonus2 bSkillAtk,"PA_SACRIFICE",BaseLevel*2; bonus2 bSkillVariableCast,"PA_PRESSURE",-2000; bonus2 bSkillVariableCast,"CR_DEVOTION",-2000; if (BaseLevel > 149) { bonus bMaxHPrate,3; bonus bAspdRate,3; } else if (BaseLevel > 99) { bonus bMaxHPrate,2; bonus bAspdRate,2; } else { bonus bMaxHPrate,1; bonus bAspdRate,1; } },{},{}
 //===================================================================
 // More Etc Items
 //===================================================================
@@ -4839,7 +4845,8 @@
 6915,Captured_Soul,Captured Soul,3,10,,0,,,,,,,,,,,,,{},{},{}
 6916,Piece_Of_Soul_Monkey,Piece Of Soul Monkey,3,10,,0,,,,,,,,,,,,,{},{},{}
 6917,Piece_Of_Soul_Chicken,Piece Of Soul Chicken,3,10,,0,,,,,,,,,,,,,{},{},{}
-6919,Honor_Proof,Honor Proof,3,10,,10,,,,,,,,,,,,,{},{},{}
+6919,Honor_Proof,Honor Token,3,10,,10,,,,,,,,,,,,,{},{},{}
+6920,Rune_Magic_Powder,Rune Magic Powder,3,10,,10,,,,,,,,,,,,,{},{},{}
 6921,Dehumidifiers,Dehumidifiers,3,10,,10,,,,,,,,,,,,,{},{},{}
 6922,Sandpaper,Sandpaper,3,10,,10,,,,,,,,,,,,,{},{},{}
 6923,Bright_Fire_Lights,Bright Fire Lights,3,10,,10,,,,,,,,,,,,,{},{},{}
@@ -6752,7 +6759,7 @@
 12619,Cgrade_Pocket,C Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Cgrade_Pocket); },{},{}
 12620,Dgrade_Pocket,D Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Dgrade_Pocket); },{},{}
 12621,Egrade_Pocket,E Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Egrade_Pocket); },{},{}
-12622,Boarding_Halter,Reins Of Mount,11,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ setmounting(); },{},{ if (ismounting()) setmounting(); }
+12622,Boarding_Halter,Reins Of Mount,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ setmounting(); },{},{ if (ismounting()) setmounting(); }
 12623,High_Weapon_Box,Advanced Weapons Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getrandgroupitem(IG_Advanced_Weapons_Box,1); },{},{}
 12624,Delicious_Jelly,Delicious Jelly,0,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 3,3; },{},{}
 12625,Sapa_Feat_Cert_Pack,Sapa Feat Cert Pack,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -6763,7 +6770,7 @@
 12630,Teddy_Bear_Scroll,Teddy Bear Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ mercenary_create 2217,1800000; },{},{}
 12631,Macro_Stone_A,Macro Stone A,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12632,Macro_Stone_B,Macro Stone B,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-12633,Malang_Cat_Can,Malangdo Cat Can,2,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus2 bExpAddRace,RC_All,10; }",1200; sc_start SC_ITEMBOOST,1200000,20; },{},{}
+12633,Malang_Cat_Can,Malangdo Cat Can,2,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus2 bExpAddRace,RC_All,10; bonus2 bDropAddRace,RC_All,20; }",1200,1,0,SI_OVERLAPEXPUP; },{},{}
 12634,Macro_Stone_A1,Macro Stone A1,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12635,Macro_Stone_A2,Macro Stone A2,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12636,Malang_Sp_Can,Malangdo Canned Specialties,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "malangdo",140,114; },{},{}
@@ -6807,8 +6814,8 @@
 12674,God_Material_Box,God Material Box,2,20,,500,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_God_Material_Box); },{},{}
 12675,Sg_Weapon_Supply_Box,WoE Weapon Supply Box,2,20,,500,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Sg_Weapon_Supply_Box); },{},{}
 12676,Sg_Violet_Potion_Box,Siege Violet Potion Box,2,20,,500,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11547,50; },{},{}
-12677,Siege_Arrow_Quiver_S,Siege Arrow Quiver S,2,2,,100,,,,,0xFFFFFFFF,63,2,,,130,,,{ getitem 1776,200; },{},{}
-12678,Siege_Arrow_Quiver_A,Siege Arrow Quiver A,2,2,,100,,,,,0xFFFFFFFF,63,2,,,95,,,{ getitem 1775,200; },{},{}
+12677,Siege_Arrow_Quiver_S,Siege Arrow Quiver S,2,2,,100,,,,,0xFFFFFFFF,63,2,,,130,,,{ getitem 1775,200; },{},{}
+12678,Siege_Arrow_Quiver_A,Siege Arrow Quiver A,2,2,,100,,,,,0xFFFFFFFF,63,2,,,95,,,{ getitem 1776,200; },{},{}
 12679,Sg_White_Potion_Box,Siege White Potion Box,2,20,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11548,30; },{},{}
 12680,Sg_Blue_Potion_Box,Siege Blue Potion Box,2,20,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11549,10; },{},{}
 12681,Nestea_Lemon,Nestea Lemon,2,0,,50,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -7007,7 +7014,7 @@
 12884,Infinite_Concentration_Potion,Infinite Concentration Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,4; },{},{}
 12885,Infinite_Awakening_Potion,Infinite Awakening Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION1,1800000,6; },{},{}
 12886,Infinite_Berserk_Potion,Infinite Berserk Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION2,1800000,9; },{},{}
-12887,C_Wing_Of_Fly,Infinite Flywing,11,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ unitskilluseid getcharid(3),"AL_TELEPORT",1; },{},{}
+12887,C_Wing_Of_Fly,Infinite Flywing,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AL_TELEPORT",1; },{},{}
 12888,Siege_Kit_Box,Siege Kit Box,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12889,Weapon_Box_Spear,Weapon Box(Spear),2,10,,200,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12890,Weapon_Box_Mace,Weapon Box(Mace),2,10,,200,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -7296,8 +7303,8 @@
 13195,RAG203_,RAG203,5,1800000,,1300,260,,9,0,0x40000000,63,2,34,3,140,1,18,{ bonus bHit,10; bonus bCriticalRate,15; bonus4 bAutoSpell,"AL_DECAGI",1,10,1; },{},{}
 13196,Peace_Breaker_,Peace Breaker,5,1950000,,1400,250,,9,1,0x41000000,63,2,34,3,140,1,20,{ bonus bHit,-25; bonus bAspdRate,25; },{},{}
 13197,Mini_Mei,Mini Mei,5,1600000,,2500,220,,9,2,0x41000000,63,2,34,2,106,1,19,{},{},{}
-13198,Tempest_,Tempest,5,2200000,,2500,250,,9,0,0x41000000,63,2,34,2,140,1,19,{ bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20; },{},{}
-13199,Tempest,Tempest,5,2200000,,2500,250,,9,1,0x41000000,63,2,34,2,140,1,19,{ bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20; },{},{}
+13198,Tempest_,Tempest,5,2200000,,2500,250,,9,0,0x41000000,63,2,34,4,140,1,19,{ bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20; },{},{}
+13199,Tempest,Tempest,5,2200000,,2500,250,,9,1,0x41000000,63,2,34,4,140,1,19,{ bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20; },{},{}
 //===================================================================
 // Bullets
 //===================================================================
@@ -8598,11 +8605,11 @@
 15059,2011Love_Daddy,2011Love Daddy,4,20,,100,0,80,0,1,0xFFFFFFFF,63,2,16,,0,1,0,{},{},{}
 15060,Sky_Blue_Smock,Sky Blue Smock,4,20,,300,0,1,0,1,0xFFFFFFFF,63,2,16,,0,1,0,{},{},{}
 15061,Egir_Armor,Egir Armor,4,200000,,2600,,55,,1,0xFFFFFFFF,63,2,16,,110,1,0,{ bonus bAllStats,1; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus2 bResEff,Eff_Silence,5000; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus2 bResEff,Eff_Stun,5000; },{},{}
-15062,TE_Woe_Coat,TE Woe Coat,4,0,,0,,15,,0,0xFFFFFFFF,63,2,16,0,40,1,,{ bonus bMdef,15; bonus bMaxHP,250; bonus bMaxSP,250; bonus2 bSubRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
-15063,TE_Woe_Chain_Mail,TE Woe Chain Mail,4,0,,0,,25,,0,0x000444A2,63,2,16,0,40,1,,{ bonus bMdef,5; bonus bMaxHP,450; bonus bMaxSP,50; bonus2 bSubRace,RC_Player,15; bonus2 bResEff,Eff_Freeze,25; },{},{}
-15064,TE_Woe_Mage_Coat,TE Woe Mage Coat,4,0,,0,,5,,0,0x00818315,63,2,16,0,40,1,,{ bonus bMdef,25; bonus bMaxHP,200; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
+15062,TE_Woe_Coat,TE Woe Coat,4,0,,0,,15,,0,0xFFFFFFFF,63,2,16,,40,1,,{ bonus bMdef,15; bonus bMaxHP,250; bonus bMaxSP,250; bonus2 bSubRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
+15063,TE_Woe_Chain_Mail,TE Woe Chain Mail,4,0,,0,,25,,0,0x000444A2,63,2,16,,40,1,,{ bonus bMdef,5; bonus bMaxHP,450; bonus bMaxSP,50; bonus2 bSubRace,RC_Player,15; bonus2 bResEff,Eff_Freeze,25; },{},{}
+15064,TE_Woe_Mage_Coat,TE Woe Mage Coat,4,0,,0,,5,,0,0x00818315,63,2,16,,40,1,,{ bonus bMdef,25; bonus bMaxHP,200; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
 15066,Engraved_Plate_Armor,Engraved Plate Armor,4,100000,,3000,,120,,1,0x00004082,63,2,16,,150,1,,{ bonus bMdef,25; },{},{}
-15067,Rune_Suit,Rune Suit,4,0,,0,,,,0,0xFFFFFFFF,63,2,16,0,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
+15067,Rune_Suit,Rune Suit,4,0,,0,,,,0,0xFFFFFFFF,63,2,16,,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
 15068,Im_Angel's_Protection,Advanced Angelic Protection,4,10000,,600,,40,,1,0x00000001,63,2,16,,99,1,0,{ bonus bMdef,30; },{},{}
 15069,Suit_Of_Sid,Suit Of Sid,4,20,,1000,,30,,0,0xFFFFFFFF,63,2,16,,0,1,0,{},{},{}
 15070,Clothes_of_Happiness,Clothes of Happiness,4,10,,1000,,5,,1,0xFFFFFFFF,63,2,16,,1,1,,{ bonus bMdef,5; bonus bLuk,getrefine(); },{},{}
@@ -9659,10 +9666,10 @@
 18728,Egir_Helm,Egir Helm,4,200000,,800,,10,,1,0xFFFFFFFF,63,2,256,,110,1,870,{ bonus bMdef,5; bonus bUnbreakableHelm,1; },{},{}
 18729,MVP_Basketball,MVP Basketball,4,20,,150,,6,,1,0xFFFFFFFF,63,2,256,,1,1,871,{ bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bAddItemHealRate,522,30; .@r = getrefine(); bonus bVariableCastrate,(.@r>=12)?(-5):((.@r>=10)?(-4):(-3)); },{},{}
 18730,Cryptura_Academy_Hat,Cryptura Academy Hat,4,0,,200,,2,,1,0xFFFFFFFF,63,2,256,,0,1,872,{ bonus bMaxHP,15; bonus bMaxSP,5; },{},{}
-18732,TE_Woe_Cap,TE Woe Cap,4,0,,0,,5,,0,0xFFFFFFFF,63,2,256,0,40,1,14,{ bonus bMdef,5; bonus bBaseAtk,5; bonus bMatk,5; bonus2 bAddRace,RC_Player,10; bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
-18733,TE_Woe_Bone_Helm,TE Woe Bone Helm,4,0,,0,,10,,0,0x000444A2,63,2,256,0,40,1,103,{ bonus bBaseAtk,10; bonus2 bAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25; },{},{}
-18734,TE_Woe_Magic_Eyes,TE Woe Magic Eyes,4,0,,0,,5,,0,0x00818315,63,2,256,0,40,1,209,{ bonus bMdef,5; bonus bMatk,10; bonus2 bMagicAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25; },{},{}
-18736,Censor_Bar_,Censor Bar,4,0,,100,,,,0,0xFFFFFFFF,63,2,512,0,1,0,229,{},{},{}
+18732,TE_Woe_Cap,TE Woe Cap,4,0,,0,,5,,0,0xFFFFFFFF,63,2,256,,40,1,14,{ bonus bMdef,5; bonus bBaseAtk,5; bonus bMatk,5; bonus2 bAddRace,RC_Player,10; bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
+18733,TE_Woe_Bone_Helm,TE Woe Bone Helm,4,0,,0,,10,,0,0x000444A2,63,2,256,,40,1,103,{ bonus bBaseAtk,10; bonus2 bAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25; },{},{}
+18734,TE_Woe_Magic_Eyes,TE Woe Magic Eyes,4,0,,0,,5,,0,0x00818315,63,2,256,,40,1,209,{ bonus bMdef,5; bonus bMatk,10; bonus2 bMagicAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25; },{},{}
+18736,Censor_Bar_,Censor Bar,4,0,,100,,,,0,0xFFFFFFFF,63,2,512,,1,0,229,{},{},{}
 18737,Fortier_Mask,Fortier Masque,4,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,10,0,876,{ bonus bUnbreakableHelm,1; bonus2 bMagicAtkEle,Ele_Fire,4; },{},{}
 18739,Carnation_Hairband,Carnation Hairband,4,20,,100,,0,,0,0xFFFFFFFF,63,2,256,,0,1,878,{ bonus bLuk,1; },{},{}
 18740,Hair_Of_The_Strong,RMSC2012 Special Costume,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,879,{},{},{}
@@ -9679,7 +9686,7 @@
 18752,Cursed_Book,Cursed Book,4,20,,300,,3,,1,0xFFFFFFFE,63,2,256,,99,1,890,{ .@r = getrefine(); bonus2 bHPLossRate,.@r,5000; bonus2 bHPDrainRate,40,4+(.@r/2); bonus2 bSPDrainRate,10,1+(.@r/3); },{},{}
 18753,Tw_Rice_Ball,Tw Rice Ball,4,20,,100,,6,,0,0xFFFFFFFF,63,2,256,,0,0,892,{ bonus bLuk,1; bonus2 bAddMonsterDropItem,564,100; },{},{}
 18754,Blood_Sucker,Blood Sucker,4,20,,300,,0,,0,0xFFFFFFFF,63,2,1,,40,0,893,{ bonus bUnbreakableHelm,1; bonus2 bHPDrainRate,30,5; bonus bHPrecovRate,-100; bonus bSPrecovRate,-100; },{},{}
-18755,Feather_Beret_,Feather Beret,4,0,,600,,1,,1,0xFFFFFFFF,63,2,256,0,1,1,224,{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; },{},{}
+18755,Feather_Beret_,Feather Beret,4,0,,600,,1,,1,0xFFFFFFFF,63,2,256,,1,1,224,{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; },{},{}
 18756,Black_Shiba_Inu_Hat,Black Shiba Inu Hat,4,20,,400,,6,,1,0xFFFFFFFF,63,2,256,,50,1,894,{ bonus bBaseAtk,30; bonus2 bAddRace,RC_Brute,10; },{},{}
 18758,Hat_Of_Scrat,Hat Of Scrat,4,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,0,1,896,{},{},{}
 18759,Stretched_Nose_M,Wood Goblin's Nose,4,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,50,0,737,{ bonus bUnbreakableHelm,1; bonus2 bAddMonsterDropItem,1032,400; bonus2 bAddMonsterDropItem,1033,100; bonus3 bAddMonsterDropItem,576,RC_Plant,40; },{},{}
@@ -9759,7 +9766,7 @@
 18863,Exorcist_Robe,Exorcist Robe,4,10,,1700,,57,,1,0xFFFFFFFF,63,2,16,,60,1,,{ bonus bMdef,5; .@r = getrefine(); if (.@r >= 3) { bonus2 bAddRace,RC_Undead,.@r/3*5; } if (BaseClass==Job_Acolyte) bonus2 bAddRace,RC_Undead,10; },{},{}
 18864,Earth_Goddess_Flower,Earth Goddess Flower,4,10,,250,,6,,0,0xFFFFFFFF,63,2,256,,1,1,864,{ bonus2 bAddEle,Ele_Earth,15; skill "WZ_EARTHSPIKE",5; },{},{}
 18865,Sword_Master_Crown,Sword Master Crown,4,10,,1000,,30,,1,0xFFFFFFFF,63,2,256,,50,1,981,{ .@i = BaseLevel; bonus bBaseAtk,(.@i>150)?(15):((.@i>100)?(10):((.@i>50)?(5):(0))); if(getskilllv("SM_SWORD")==10) bonus bHit,10; if(getskilllv("SM_TWOHAND")==10) bonus bUseSPrate,-5; if(getskilllv("AM_AXEMASTERY")==10) bonus bVariableCastrate,-5; if(getskilllv("AS_KATAR")==10) bonus bCritAtkRate,20; if(getskilllv("PR_MACEMASTERY")==10) bonus bAspdRate,10; },{},{}
-18867,Vajra,Vajra,4,0,,300,,,,0,0xFFFFFFFF,63,2,1,0,48,0,983,{ bonus bDex,1; bonus bLongAtkRate,2; },{},{}
+18867,Vajra,Vajra,4,0,,300,,,,0,0xFFFFFFFF,63,2,1,,48,0,983,{ bonus bDex,1; bonus bLongAtkRate,2; },{},{}
 18868,Assassin_Skull_Mask,Assassin Skull Mask,4,10,,500,,2,,0,0xFFFFFFFF,63,2,513,,70,,984,{ bonus bCritical,5; },{},{}
 18870,Very_Sweet_Candy_Bar,Very Sweet Candy Bar,4,10,,10,,,,0,0xFFFFFFFF,63,2,1,,1,1,446,{ bonus bAllStats,2; bonus bBaseAtk,10; bonus bMatk,10; bonus2 bExpAddClass,Class_All,2; },{},{}
 18871,Very_Sweet_Candy,Very Sweet Candy,4,10,,10,,,,0,0xFFFFFFFF,63,2,1,,1,1,446,{ bonus bAllStats,1; bonus bBaseAtk,5; bonus bMatk,5; },{},{}
@@ -9828,7 +9835,7 @@
 19020,Survive_Circlet,Survive Circlet,4,0,,500,,10,,0,0xFFFFFFFF,63,2,256,,,1,1220,{ .@r = getrefine(); bonus bInt,(3 + (.@r/2)+ (BaseLevel > 130 ? .@r : 0)); bonus bMatkRate,4; },{},{}
 19021,Gigant_Helm,Gigant Helm,4,0,,500,,10,,0,0xFFFFFFFF,63,2,256,,,1,1221,{ bonus bStr,3+((BaseLevel > 130) ? getrefine() : 0); bonus2 bAddClass,Class_All,4; },{},{}
 19022,Floating_Stone_Of_Intelligence,Floating Stone Of Intelligence,4,,,,,,,,0xFFFFFFFF,63,2,256,,,,1230,{},{ sc_start SC_FSTONE,-1,0; },{ sc_end SC_FSTONE; } // jRO Item
-19024,Protect_Feathers,Protect Feathers,4,0,,500,,,,0,0xFFFFFFFF,63,2,512,0,70,0,1232,{ bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; } },{},{}
+19024,Protect_Feathers,Protect Feathers,4,0,,500,,,,0,0xFFFFFFFF,63,2,512,,70,0,1232,{ bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; } },{},{}
 19026,Aegir_Helm,Aegir Helm,4,10,,800,,10,,1,0xFFFFFFFF,63,2,256,,40,1,870,{ bonus bVit,3; },{},{}
 19030,Pretty_Rabbit_Hood,Pretty Rabbit Hood,4,10,,100,,20,,1,0xFFFFFFFF,63,2,769,,1,1,1085,{ bonus bMaxHP,(15*BaseLevel); },{},{}
 19031,Fallen_Angel_Blessing,Fallen Angel Blessing,4,0,,200,,1,,0,0xFFFFFFFF,63,2,512,,,1,1250,{ bonus2 bAddRace,RC_Angel,5; bonus2 bSubRace,RC_Angel,5; },{},{}
@@ -9840,7 +9847,7 @@
 19051,Warrior_Moon_Cat,Warrior Moon Cat,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ /*Enables use of Level 1 Monster's Cry*/ bonus bAllStats,3; bonus2 bHPDrainRate,40,5; bonus2 bSPDrainRate,10,2; },{},{}
 19052,Sigruns_Wing,Rental Sigrun's Wing,4,10,,0,,2,,0,0xFFFFFFFF,63,2,512,,1,0,568,{ if (Class == Job_Swordman || Class == Job_Thief || Class == Job_Merchant || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Star_Gladiator2) bonus bAspd,1; else if (Class == Job_Mage || Class == Job_Acolyte || Class == Job_Ninja || Class == Job_Soul_Linker) { bonus bMatk,5; bonus bHealPower,2; } else if (Class == Job_Archer || Class == Job_Gunslinger) bonus bLongAtkRate,2; else if (Class == Job_Novice || Class == Job_SuperNovice) { bonus bMaxHP,120; bonus bMaxSP,60; } },{},{}
 19053,Fighter_Moon_Cat,Fighter Moon Cat,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ /*Enables use of Level 1 Monster's Cry*/ .@r = getrefine(); bonus bAllStats,3; bonus2 bAddEff,Eff_Stun,500+(.@r*100); },{},{}
-19082,Bio_Protector,Bio Protector,4,0,,500,,3,,0,0xFFFFFFFF,63,2,512,1,50,1,1366,{ bonus bHit,10; bonus bVariableCastrate,-5; bonus bPerfectHitRate,5; },{},{}
+19082,Bio_Protector,Bio Protector,4,0,,500,,3,,0,0xFFFFFFFF,63,2,512,,50,1,1366,{ bonus bHit,10; bonus bVariableCastrate,-5; bonus bPerfectHitRate,5; },{},{}
 19083,Mask_of_Hero,Mask of Hero,4,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,70,0,1367,{ bonus bVit,10; bonus bMdef,10; bonus bShortWeaponDamageReturn,1; },{},{}
 19084,Parfaille_Vigilante_Hat,Parfaille Vigilante Hat,4,0,,100,,2,,0,0x80000000,63,2,256,,20,1,1368,{ bonus bLuk,1; bonus3 bAutoSpell,"AL_BLESSING",3,100; },{},{}
 19085,Sigrun's_Wings_,Sigrun's Wings,4,20,,100,,2,,1,0xFFFFFFFF,63,2,512,,1,0,568,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) { bonus bAspd,1; bonus bAgi,-2; } else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||Class==Job_Ninja||Class==Job_Soul_Linker){ bonus bMatk,3; bonus bHealPower,2; } else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bLongAtkRate,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,60; bonus bMaxSP,30; } },{},{}
@@ -9854,9 +9861,9 @@
 19093,Spinning_Eyes_,Geek Glasses,4,20000,,100,,1,,1,0xFFFFFFFF,63,2,512,,0,0,27,{ bonus2 bResEff,Eff_Blind,800; },{},{}
 19094,Mr_Smile_,Mr. Smile,4,60,,100,,1,,1,0xFFFFFFFF,63,2,513,,0,0,65,{},{},{}
 19095,Happy_Balloon,Happy Balloon,4,0,,10,,0,,0,0xFFFFFFFF,63,2,1,,1,0,1289,{ bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5; },{},{}
-19109,Valhalla_Idol,Valhalla Idol,4,0,,300,,2,,0,0xFFFFFFFF,63,2,512,0,70,0,1423,{ bonus bMaxSP,50; bonus3 bAutoSpell,"MG_SAFETYWALL",10,50; },{},{}
-19111,Laser_Of_Eagle,Laser of Eagle,4,0,,400,,5,,1,0xFFFFFFFF,63,2,256,0,100,1,1424,{ bonus bDex,2; bonus bLongAtkRate,10; bonus4 bAutoSpell,"PR_LEXAETERNA",1,50,BF_LONG; /*TODO: Chance to transform become Shechil while attacking.*/ },{},{}
-19116,Red_Baby_Dragon,Red Baby Dragon,4,0,,700,,,1,1,0xFFFFFFFF,63,2,256,0,90,1,1463,{ .@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; if (.@r>=6) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } if (.@r>=8) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } },{},{}
+19109,Valhalla_Idol,Valhalla Idol,4,0,,300,,2,,0,0xFFFFFFFF,63,2,512,,70,0,1423,{ bonus bMaxSP,50; bonus3 bAutoSpell,"MG_SAFETYWALL",10,50; },{},{}
+19111,Laser_Of_Eagle,Laser of Eagle,4,0,,400,,5,,1,0xFFFFFFFF,63,2,256,,100,1,1424,{ bonus bDex,2; bonus bLongAtkRate,10; bonus4 bAutoSpell,"PR_LEXAETERNA",1,50,BF_LONG; /*TODO: Chance to transform become Shechil while attacking.*/ },{},{}
+19116,Red_Baby_Dragon,Red Baby Dragon,4,0,,700,,,1,1,0xFFFFFFFF,63,2,256,,90,1,1463,{ .@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; if (.@r>=6) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } if (.@r>=8) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } },{},{}
 19117,Poring_Sunglasses,Poring Sunglasses,4,0,,10,,0,,0,0xFFFFFFFF,63,2,512,,1,0,954,{ bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5; },{},{}
 19118,Poring_Sunglasses_,Poring Sunglasses,4,0,,10,,0,,1,0xFFFFFFFF,63,2,512,,1,0,954,{ bonus2 bDropAddRace,RC_All,4; bonus2 bExpAddRace,RC_All,4; },{},{}
 19126,Shadow_Booster_,Magical Booster,4,10,,300,,,,1,0xFFFFFFFF,63,2,512,,1,1,873,{ bonus bAspd,1; bonus bDelayrate,-1; },{},{}
@@ -10389,7 +10396,7 @@
 20096,C_Blue_Ribbon,Costume Blue Ribbon,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,441,{},{},{}
 20097,C_White_Ribbon,Costume White Ribbon,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,442,{},{},{}
 20098,C_Vampire_Hairband,Costume Vampire Hairband,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1238,{},{},{}
-20099,C_Ljosalfar,Flying Ljosalfar,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1239,{},{ sc_start SC_LJOSALFAR,-1,0; },{ sc_end SC_LJOSALFAR; }
+20099,C_Ljosalfar,Flying Ljosalfar,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1239,{},{ sc_start SC_LJOSALFAR,-1,0; },{ sc_end SC_LJOSALFAR; }
 20100,C_Volume_Fhat,Costume Volume Fhat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1240,{},{},{}
 20101,C_Bragi_Wing_Ears,Costume Bragi Wing Ears,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1241,{},{},{}
 20102,C_Horse_King_J,Costume Horse King J,4,0,,0,,,,0,0xFFFFFFFF,63,2,7168,,1,1,1189,{},{},{}
@@ -10405,9 +10412,9 @@
 20112,C_Aqua_Ten_Gallon_Hat,Costume Aqua Ten Gallon Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1256,{},{},{}
 20113,C_Star_Reading_Hat,Costume Star Reading Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1253,{},{},{}
 20114,C_Funeral_Hat,Costume Funeral Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,77,{},{},{}
-20115,C_Under_Rim_Glasses,Under Rim Glasses,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,1,1,1,1255,{},{},{}
-20116,C_Mermaid_Headphone,Mermaid Headphone,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,1,1,1,1254,{},{},{}
-20117,C_Raspberry_Mousse_Hat,Raspberry Mousse Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1257,{},{},{}
+20115,C_Under_Rim_Glasses,Under Rim Glasses,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1255,{},{},{}
+20116,C_Mermaid_Headphone,Mermaid Headphone,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1254,{},{},{}
+20117,C_Raspberry_Mousse_Hat,Raspberry Mousse Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1257,{},{},{}
 20118,C_Cake_Hat,Costume Cake Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,109,{},{},{}
 20119,C_Beanie,Costume Beanie,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,160,{},{},{}
 20120,C_Aerial,Costume Aerial,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,97,{},{},{}
@@ -10508,9 +10515,9 @@
 20215,C_Black_Devil_Mask,Costume Black Devil Mask,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,760,{},{},{}
 20216,C_Rideword_Hat,Costume Rideword Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,890,{},{},{}
 20217,C_Arabian_Veil,Costume Arabian Veil,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1300,{},{},{}
-20218,C_Spell_Circuit,Costume Spell Circuit,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1301,{},{},{}
+20218,C_Spell_Circuit,Costume Spell Circuit,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1301,{},{},{}
 20219,C_Angel_Marcher_Hat,Costume Angel Marcher Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1302,{},{},{}
-20220,C_Dark_Night_Veil,Costume Dark Night Veil,4,0,,0,,,,0,0xFFFFFFFF,63,2,3072,1,1,1,1303,{},{},{}
+20220,C_Dark_Night_Veil,Costume Dark Night Veil,4,0,,0,,,,0,0xFFFFFFFF,63,2,3072,,1,1,1303,{},{},{}
 20221,C_Eyes_Of_Ifrit,C Eyes Of Ifrit,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,886,{},{},{}
 20222,C_Blue_Pigtail_Santa_Hat,Costume Blue Pigtail Santa Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,395,{},{},{}
 20223,C_Romantic_Leaf,Costume Romantic Leaf,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,57,{},{},{}
@@ -10594,8 +10601,8 @@
 20312,C_Barons_Evil_Eye,Costume Baron's Evil Eye,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,989,{},{},{}
 20313,C_CD_in_Mouth,Costume CD in Mouth,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,815,{},{},{}
 20314,C_New_Wave_Sunglasses,Costume New Wave Sunglasses,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,856,{},{},{}
-20315,C_Analyze_Eye,Costume Analyze Eye,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,1,1,1,1351,{},{},{}
-20316,C_Seraph_Wing_Helm,Costume Seraph Wing Helm,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1352,{},{},{}
+20315,C_Analyze_Eye,Costume Analyze Eye,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1351,{},{},{}
+20316,C_Seraph_Wing_Helm,Costume Seraph Wing Helm,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1352,{},{},{}
 20317,C_Nekomimi_Cyber_Headphone,Costume Nekomimi Cyber Headphone,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1353,{},{},{}
 20318,C_Charleston_Antenna,Costume Charleston Antenna,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1354,{},{},{}
 20319,C_Crimson_Booster,Costume Crimson Booster,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1355,{},{},{}
@@ -10603,8 +10610,8 @@
 20321,C_Pterios_Fins,Costume Pterios Fins,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1009,{},{},{}
 20322,C_Seal_Hat,Costume Seal Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,540,{},{},{}
 20323,C_Sparkling_Sound,Costume Sparkling Sound,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1074,{},{},{}
-20324,C_Pigeon_Hat,Costume Pigeon Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1362,{},{},{}
-20325,C_Little_Aquarium,Costume Little Aquarium,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,1,1,1,1363,{},{},{}
+20324,C_Pigeon_Hat,Costume Pigeon Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1362,{},{},{}
+20325,C_Little_Aquarium,Costume Little Aquarium,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1363,{},{},{}
 20326,C_Sailor_Collar,Costume Sailor Collar,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1364,{},{},{}
 20327,C_Marine_Cap,Costume Marine Cap,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1365,{},{},{}
 20328,C_Mackerel_Pike,Costume Mackerel Pike,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1081,{},{},{}
@@ -10746,12 +10753,12 @@
 20510,C_SwordWing,Costume Sword Wing,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,19,{},{},{}
 20600,Fantastic_Aura,Fantastic Aura,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,0,{ /*TODO: View ID*/ bonus bUnbreakableHelm,1; },{},{}
 20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableGarment,1; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); } },{},{}
-20702,TE_Woe_Muffler,TE Woe Muffler,4,0,,0,,5,,0,0xFFFFFFFF,63,2,4,1,40,1,,{ bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
-20703,TE_Woe_Manteau,TE Woe Manteau,4,0,,0,,10,,0,0x000444A2,63,2,4,1,40,1,,{ bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
-20704,TE_Woe_Magic_Manteau,TE Woe Magic Manteau,4,0,,0,,5,,0,0x00818315,63,2,4,1,40,1,,{ bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
+20702,TE_Woe_Muffler,TE Woe Muffler,4,0,,0,,5,,0,0xFFFFFFFF,63,2,4,,40,1,,{ bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
+20703,TE_Woe_Manteau,TE Woe Manteau,4,0,,0,,10,,0,0x000444A2,63,2,4,,40,1,,{ bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
+20704,TE_Woe_Magic_Manteau,TE Woe Magic Manteau,4,0,,0,,5,,0,0x00818315,63,2,4,,40,1,,{ bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
 20706,Amistr_Bag,Amistr Bag,4,10,,500,,18,,0,0xFFFFFFFF,63,2,4,,1,,4,{ bonus bAllStats,1; bonus2 bSubEle,Ele_All,5; },{},{}
 20707,Kirin_Wing,Kirin Wing,4,20,,0,,18,,0,0xFFFFFFFF,63,2,4,,0,1,6,{ bonus bAllStats,1; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; },{},{}
-20709,Mana_Manteau,Mana Manteau,4,0,,0,,,,0,0xFFFFFFFF,63,2,4,0,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
+20709,Mana_Manteau,Mana Manteau,4,0,,0,,,,0,0xFFFFFFFF,63,2,4,,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
 20710,Impr_Angel's_Warmth,Advanced Angelic Cardigan,4,10000,,400,,6,,1,0x00000001,63,2,4,,99,1,0,{ bonus bHPrecovRate,50; },{},{}
 20711,Manteau_Of_Diego,Manteau Of Diego,4,20,,600,,15,,1,0xFFFFFFFF,63,2,4,,0,1,0,{ bonus bInt,1; bonus bDex,1; bonus bMdef,3; },{},{}
 20717,Gigant_Snake_Skin,Gigant Snake Skin,4,10,,400,,38,,0,0xFFFFFFFF,63,2,4,,1,1,0,{ bonus bMdef,10; },{},{}
@@ -10769,7 +10776,7 @@
 20746,C_Rudra_Wings,Costume Rudra Wings,4,10,,0,,,,0,0xFFFFFFFF,63,2,8192,,1,0,8,{},{},{}
 20748,Cloak_Of_Casualties,Cloak Of Casualties,4,10,,600,,20,,0,0xFFFFFFFF,63,2,4,,120,1,,{ .@r = getrefine(); bonus bAgi,5; bonus bFlee,10; if(readparam(bStr)>=90) bonus bBaseAtk,10+(.@r*2); if(readparam(bInt)>=90) bonus bMatk,20+(.@r*3); if(readparam(bVit)>=90) bonus2 bSubEle,Ele_Neutral,3+((.@r>=8)?3:0)+((.@r>=10)?4:0); if(readparam(bAgi)>=90){ bonus bAspdRate,3+(.@r/2); bonus bAspd,((.@r>=10)?1:0); } if(readparam(bDex)>=90) bonus bLongAtkRate,3+(.@r/2); if(readparam(bLuk)>=90) bonus bCriticalRate,5+.@r; },{},{}
 20749,Cloak_Of_Casualties_,Cloak Of Casualties,4,10,,600,,30,,1,0xFFFFFFFF,63,2,4,,170,1,,{ .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bAgi,5; bonus bFlee,10; if(readparam(bStr)>=90) bonus bBaseAtk,10+(.@r*2); if(readparam(bInt)>=90) bonus bMatk,20+(.@r*3); if(readparam(bVit)>=90) bonus2 bSubEle,Ele_Neutral,3+((.@r>=8)?3:0)+((.@r>=10)?4:0); if(readparam(bAgi)>=90){ bonus bAspdRate,3+(.@r/2); bonus bAspd,((.@r>=10)?1:0); } if(readparam(bDex)>=90) bonus bLongAtkRate,3+(.@r/2); if(readparam(bLuk)>=90) bonus bCriticalRate,5+.@r; },{},{}
-20753,Lian_Robe,Lian Robe,4,0,,700,,20,1,1,0xFFFFFFFF,63,2,4,0,65,1,,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5; },{},{}
+20753,Lian_Robe,Lian Robe,4,0,,700,,20,1,1,0xFFFFFFFF,63,2,4,,65,1,,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5; },{},{}
 20756,Aegir_Cloak,Aegir Cloak,4,10,,300,,10,,1,0xFFFFFFFF,63,2,4,,40,1,,{ bonus bUnbreakableGarment,1; bonus bMaxHP,500; bonus bMaxSP,50; },{},{}
 20761,C_Happiness_Wings,Costume Happiness Wings,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,9,{},{},{}
 20762,C_Great_Devil_Wings,Costume Great Devil Wings,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,10,{},{},{}
@@ -10779,12 +10786,12 @@
 20780,Unity_STR_Manteau,Unity STR Manteau,4,32000,,300,,20,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bMaxHPrate,2*(.@r/2); } },{},{}
 20781,Unity_AGI_Manteau,Unity AGI Manteau,4,32000,,300,,20,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bFlee,3*(.@r/2); } },{},{}
 20782,Unity_INT_Muffler,Unity INT Muffler,4,32000,,300,,20,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bUseSPrate,-(.@r/2); } },{},{}
-20783,Hero_Cape,Hero Cape,4,0,,100,,,,1,0xFFFFFFFF,63,2,4,1,10,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,1+(.@r/3); bonus bFlee,1+(.@r/3); if (.@r > 9) { bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; } },{},{}
+20783,Hero_Cape,Hero Cape,4,0,,100,,,,1,0xFFFFFFFF,63,2,4,,10,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,1+(.@r/3); bonus bFlee,1+(.@r/3); if (.@r > 9) { bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; } },{},{}
 20787,Unity_Exquisite_Muffler,Unity Exquisite Muffler,4,32000,,300,,20,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bCritical,2*(.@r/2); } },{},{}
 20788,Private_Doram_Manteau,Private Doram Manteau,4,20,,300,,20,,1,0x80000000,7,2,4,,100,1,,{ bonus bFlee,5; bonus2 bSubEle,Ele_Neutral,2; bonus bFlee2,getrefine()/3; },{},{}
 20789,Luxury_Doram_Manteau,Luxury Doram Manteau,4,20,,400,,25,,1,0x80000000,7,2,4,,140,1,,{ bonus bFlee,7; bonus2 bSubEle,Ele_Neutral,3; .@r = getrefine()/3; bonus bFlee2,.@r; bonus bLuk,.@r; },{},{}
 20790,Elegant_Doram_Manteau,Elegant Doram Manteau,4,20,,500,,30,,1,0x80000000,7,2,4,,175,1,,{ bonus bFlee,10; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine()/2; bonus bFlee2,.@r; bonus bInt,.@r; bonus bDex,.@r; bonus bLuk,.@r; },{},{}
-20797,Etran_Shirt,Etran Shirt,4,0,,150,,,,1,0xFFFFFFFF,63,2,4,1,1,1,,{ bonus bMdef,10; bonus bMaxHPrate,2; .@r = getrefine(); if (.@r >= 6) bonus bMaxHPrate,4; if (.@r >= 7) bonus bMaxHPrate,6; if (.@r >= 8) bonus bMaxHPrate,8; if (.@r >= 9) bonus bNoKnockback,1; },{},{}
+20797,Etran_Shirt,Etran Shirt,4,0,,150,,,,1,0xFFFFFFFF,63,2,4,,1,1,,{ bonus bMdef,10; bonus bMaxHPrate,2; .@r = getrefine(); if (.@r >= 6) bonus bMaxHPrate,4; if (.@r >= 7) bonus bMaxHPrate,6; if (.@r >= 8) bonus bMaxHPrate,8; if (.@r >= 9) bonus bNoKnockback,1; },{},{}
 20798,C_Grim_Reaper_Protection,Costume Grim Reaper Protection,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,0,1450,{},{},{}
 20815,SeraphimRobe,Seraphim Robe,4,0,,300,,18,,1,0xFFFFFFFF,63,2,4,,1,1,,{ bonus bMaxHPrate,10; bonus2 bMagicAtkEle,Ele_Neutral,5; .@r = getrefine(); if (.@r > 6) { bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Holy,20; bonus bMatkRate,10; } if (.@r > 8) { bonus2 bSubEle,Ele_Dark,10; bonus2 bSubEle,Ele_Holy,10; bonus bVariableCastrate,-5; } if (getskilllv("CR_TRUST") > 0) { bonus2 bSubEle,Ele_Holy,.@r*3; } },{},{}
 20819,Oxygen_Bottle,Oxygen Bottle,4,0,,500,,0,,1,0xFFFFFFFF,63,2,4,,40,0,0,{ bonus bFlee,12+getrefine(); bonus bHit,getrefine(); },{},{}
@@ -10830,7 +10837,7 @@
 22009,Temporal_INT_Boots_,Temporal Boots Of Intelligence,4,20,,600,,20,,1,0xFFFFFFFF,56,2,64,,99,1,,{ .@r = getrefine(); bonus bMdef,5; bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bMatk,10*(.@r/3); if(readparam(bInt)>=120) bonus bMatk,60; },{},{}
 22010,Temporal_AGI_Boots_,Temporal Boots Of Agility,4,20,,600,,25,,1,0xFFFFFFFF,56,2,64,,99,1,,{ .@r = getrefine(); bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bAspdRate,3*(.@r/3); if(readparam(bAgi)>=120) bonus bAspd,1; },{},{}
 22011,Temporal_LUK_Boots_,Temporal Boots Of Luck,4,20,,600,,20,,1,0xFFFFFFFF,56,2,64,,99,1,,{ .@r = getrefine(); bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bMdef,5; bonus bCritAtkRate,2*(.@r/3); if(readparam(bLuk)>=120) bonus bCritAtkRate,30; },{},{}
-22012,Mana_Boots,Mana Boots,4,0,,0,,,,0,0xFFFFFFFF,63,2,64,0,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
+22012,Mana_Boots,Mana Boots,4,0,,0,,,,0,0xFFFFFFFF,63,2,64,,1,1,,{ bonus2 bExpAddRace,RC_All,10; },{},{}
 22014,Enhanced_Variant_Shoes,Enhanced Variant Shoes,4,20,,500,,13,,1,0x7CCFDF80,63,2,64,,85,1,0,{ bonus bMaxHPrate,12; bonus bMaxSPrate,12; .@r = getrefine(); bonus bDef,.@r; bonus bMdef,.@r; },{},{}
 22015,Impr_Angel's_Arrival,Advanced Angel's Reincarnation,4,10000,,300,,8,,1,0x00000001,63,2,64,,99,1,0,{ bonus bMaxHP,500; bonus bMaxSP,100; },{},{}
 22018,Shoes_Of_Wise_Man,Shoes Of Wise Man,4,10,,300,,15,,1,0xFFFFFFFF,63,2,64,,50,1,,{ .@r = getrefine(); if(.@r>5){ bonus bInt,.@r-5; bonus bMaxHPrate,-(.@r-5); } },{},{}
@@ -10848,8 +10855,8 @@
 22059,Aegir_Shoes,Aegir Shoes,4,10,,300,,13,,1,0xFFFFFFFF,63,2,64,,40,1,,{ bonus bUnbreakableShoes,1; bonus bMaxHP,500; bonus bMaxSP,50; },{},{}
 22064,Thorny_Shoes,Thorny Shoes,4,0,,1000,,25,,1,0xFFFFFFFF,63,2,64,,,1,,{ bonus bShortWeaponDamageReturn,getrefine()/2; },{},{}
 22067,Shoe_of_Witch,Shoe of Witch,4,10,,400,,10,,0,0xFFFFFFFE,63,2,64,,1,1,,{ skill "ALL_CATCRY",1; },{},{}
-22069,Lian_Shoes,Lian Shoes,4,0,,250,,12,,1,0xFFFFFFFF,63,2,64,1,90,1,,{ bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); bonus bMaxHPrate,.@r; bonus bMaxSPrate,.@r; },{},{}
-22072,Hikingboots,Hikingboots,4,0,,500,,10,,1,0xFFFFFFFF,63,2,64,0,100,1,,{ .@r = getrefine(); bonus bMaxHPRate,4+(.@r/3); bonus bMaxSPRate,4+(.@r/3); if (.@r > 9) bonus bSpeedRate,25; },{},{}
+22069,Lian_Shoes,Lian Shoes,4,0,,250,,12,,1,0xFFFFFFFF,63,2,64,,90,1,,{ bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); bonus bMaxHPrate,.@r; bonus bMaxSPrate,.@r; },{},{}
+22072,Hikingboots,Hikingboots,4,0,,500,,10,,1,0xFFFFFFFF,63,2,64,,100,1,,{ .@r = getrefine(); bonus bMaxHPRate,4+(.@r/3); bonus bMaxSPRate,4+(.@r/3); if (.@r > 9) bonus bSpeedRate,25; },{},{}
 22075,Rift_Shoes,Rift Shoes,4,20,,250,,12,,1,0xFFFFFFFF,63,2,64,,100,1,,{ .@r = getrefine(); bonus bMaxHP,(.@r >= 9 ? 1300 : .@r >= 7 ? 700 : 300); bonus bMaxSP,-50; },{},{}
 22076,Wooden_Slipper,Wooden Slipper,4,20,,50,,10,,1,0x80000000,7,2,64,,9,1,,{ bonus2 bHPRegenRate,2,10000; },{},{}
 22077,Red_Eco-Friendly_Shoes,Red Eco-Friendly Shoes,4,20,,100,,20,,1,0x80000000,7,2,64,,18,1,,{ bonus bCritical,5; bonus2 bHPRegenRate,4,10000; bonus2 bSPRegenRate,1,10000; },{},{}
@@ -10857,13 +10864,13 @@
 22079,Unity_AGI_Boots,Unity AGI Boots,4,10,,300,,20,,1,0xFFFFFFFF,63,2,64,,1,1,,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bAgi,.@r/2; } },{},{}
 22080,Unity_DEX_Boots,Unity DEX Boots,4,10,,300,,20,,1,0xFFFFFFFF,63,2,64,,1,1,,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bDex,.@r/2; } },{},{}
 22081,Unity_INT_Boots,Unity INT Boots,4,10,,300,,20,,1,0xFFFFFFFF,63,2,64,,1,1,,{ .@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bInt,.@r/2; } },{},{}
-22082,Polyhedron_Shoes,Polyhedron Shoes,4,0,,500,,12,,1,0xFFFFFFFF,63,2,64,0,90,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; if (.@r > 4) { .@b = (.@r > 6) ? 10 : 5; bonus2 bAddEle,Ele_Neutral,.@b; bonus2 bAddEle,Ele_Fire,.@b; bonus2 bAddEle,Ele_Water,.@b; bonus2 bAddEle,Ele_Wind,.@b; } },{},{}
+22082,Polyhedron_Shoes,Polyhedron Shoes,4,0,,500,,12,,1,0xFFFFFFFF,63,2,64,,90,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; if (.@r > 4) { .@b = (.@r > 6) ? 10 : 5; bonus2 bAddEle,Ele_Neutral,.@b; bonus2 bAddEle,Ele_Fire,.@b; bonus2 bAddEle,Ele_Water,.@b; bonus2 bAddEle,Ele_Wind,.@b; } },{},{}
 22083,Private_Doram_Shoes,Private Doram Shoes,4,20,,500,,25,,1,0x80000000,7,2,64,,100,1,,{ bonus bMaxHP,100; bonus bMaxSP,50; .@r = getrefine()/3; bonus bHPrecovRate,.@r*10; bonus bSPrecovRate,.@r*10; },{},{}
 22084,Luxury_Doram_Shoes,Luxury Doram Shoes,4,20,,600,,30,,1,0x80000000,7,2,64,,140,1,,{ bonus bMaxHP,300; bonus bMaxSP,100; .@r = getrefine()/3; bonus bHPrecovRate,20*.@r; bonus bSPrecovRate,20*.@r; },{},{}
 22085,Elegant_Doram_Shoes,Elegant Doram Shoes,4,20,,700,,35,,1,0x80000000,7,2,64,,175,1,,{ bonus bMaxHPrate,10; bonus bMaxSPrate,5; .@r = getrefine()/2; bonus bMaxHP,100*.@r; bonus bMaxSP,20*.@r; if(.@r >= 4) bonus2 bSkillUseSP,"SU_LOPE",5; },{},{}
 22089,Crimson_Gaiter_,Crimson Gaiter,4,0,,500,,10,,1,0xFFFFFFFF,63,2,64,,50,1,,{ bonus bCritical,2; bonus bCritAtkRate,2; if(getrefine()>=7){ bonus bCritical,3; bonus bCritAtkRate,3; } },{},{}
 22101,Angel_Poring_Boots,Angel Poring Boots,4,10,,300,,15,,1,0xFFFFFFFF,63,2,64,,1,1,,{ bonus bAllStats,1; skill "AL_HEAL",1; },{},{}
-22103,Excelion_Leg,Excelion Leg,4,0,,500,,13,,0,0xFFFFFFFF,63,2,64,1,100,1,,{ .@r = getrefine(); bonus bMaxHP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; bonus bMaxSP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; },{},{}
+22103,Excelion_Leg,Excelion Leg,4,0,,500,,13,,0,0xFFFFFFFF,63,2,64,,100,1,,{ .@r = getrefine(); bonus bMaxHP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; bonus bMaxSP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; },{},{}
 22106,Giant_Boots,Giant Boots,4,0,,500,,13,,1,0xFFFFFFFF,63,2,64,,1,1,,{ bonus2 bSubRace,RC_All,1; bonus bMaxHPrate,2; bonus bMaxSPrate,2; .@r = getrefine(); if (.@r > 4) { bonus bDefRate,2; bonus bMaxHPrate,4; bonus bMaxSPrate,4; } if (.@r > 6) { bonus bDefRate,2; bonus bMaxHPrate,4; bonus bMaxSPrate,4; } },{},{}
 22122,Para_Team_Boots100,Awakened Eden Group Boots I,4,0,,0,,22,,0,0xFFFFFFFF,63,2,64,,100,1,,{ bonus bAllStats,1; bonus bHPrecovRate,30; bonus bSPrecovRate,14; },{},{}
 22123,Para_Team_Boots115,Awakened Eden Group Boots II,4,0,,0,,25,,0,0xFFFFFFFF,63,2,64,,115,1,,{ bonus bAllStats,1; bonus bHPrecovRate,36; bonus bSPrecovRate,18; },{},{}
@@ -10873,7 +10880,7 @@
 //===================================================================
 // New Usable items
 //===================================================================
-22508,Para_Team_Mark_,Eden Group Mark,11,0,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ warp "moc_para01",171,115; },{},{}
+22508,Para_Team_Mark_,Eden Group Mark,2,0,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ warp "moc_para01",171,115; },{},{}
 22507,ShabbyOldScroll,Old Scroll,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_22507"; },{},{}
 22510,King_Wolf_Scroll,King Wolf Scroll,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ /*TODO, confirm the rates*/ getitem callfunc("F_Rand",6635,19598,5658,6238,6239),1; },{},{}
 22511,Fenrirs_Power_Scroll,Fenrir's Power Scroll,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bMatk,25; bonus bFixedCastRate,-50;",300,1025; },{},{}
@@ -11057,9 +11064,9 @@
 22844,Sealed_Dracula_Card_Album,Sealed Dracula Card Album,2,10,,10,,,,,,,,,,,,,{/*No Info*/},{},{}
 22845,Sealed_Fortune_Egg,Sealed Fortune Egg,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getitem callfunc("F_Rand",4488,4497,4486,4480,4485,4539,4487,4494,4538,4489,4490,4482,4503,22846),1; },{},{}
 22846,Sealed_Dracula_Card_,Sealed Dracula Card,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "{ bonus2 bSPDrainRate,50,5; }",300; },{},{}
-22847,Prontera_Medal,Prontera Medal,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "prontera",0,0; /*No coord info*/ },{},{}
+22847,Prontera_Medal,Prontera Medal,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "prontera",159,192; /*No coord info*/ },{},{}
 22848,Prison_Key,Prison Key,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "prt_prison",0,0; /*No coord info*/ },{},{}
-22849,Prontera_Time_Crystal,Prontera Time Crystal,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "prt_lib_q",0,0; /*No map+coord info*/ },{},{}
+22849,Prontera_Time_Crystal,Prontera Time Crystal,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "prt_q",155,27; },{},{}
 22850,January_Gift_Box_,January Gift Box,2,10,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ rentitem 19052,604800; },{},{}
 22851,February_Gift_Box_,February Gift Box,2,10,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12105,2; },{},{}
 22852,March_Gift_Box_,March Gift Box,2,10,,100,,,,,0xFFFFFFFF,63,2,,,,,,{/*2 Lucky Eggs*/},{},{}
@@ -11078,7 +11085,7 @@
 22873,Sealed_Beelzebub_Scroll_II,Sealed Beelzebub Scroll II,2,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem callfunc("F_Rand",22875,6238,6239,6228,6232,24231,24232,17474,6635),1; },{},{}
 22874,Sealed_Beelzebub_Card_Album,Sealed Beelzebub Card Album,2,10,,50,,,,,0xFFFFFFFF,63,2,,,,,,{/*No Info*/},{},{}
 22875,Sealed_Beelzebub_Card,Sealed Beelzebub Card,6,20,,10,,,,,,,,769,,,,,{ bonus bVariableCastrate,-15; /*Item removed on 2014-12-17*/ },{},{}
-22876,Old_Money_Pocket,Old Money Pocket,3,0,,0,,,,,,,,,,,,,{},{},{}
+22876,Old_Money_Pocket,Old Money Pocket,3,0,,0,,,,,,,,,,,,,{ Zeny += rand(500,550); },{},{}
 22881,Rope_Gallows,Rope Gallows,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{/*Used to catch a Lost Sheep*/},{},{}
 22882,Chocolate_Rice_Cake_Soup,Chocolate Rice Cake Soup,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 10,10; },{},{}
 22883,September_Gift_Box_,September Gift Box,2,10,,100,,,,,0xFFFFFFFF,63,2,,,,,,{/*2 Lucky Eggs*/},{},{}
@@ -11455,27 +11462,30 @@
 28316,RCC2013_ARMLET_,RCC2013_ARMLET_,4,200,,200,,,,1,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
 28317,RCC2013_RING,RCC2013_RING,4,200,,200,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
 28318,RCC2013_RING_,RCC2013_RING_,4,200,,200,,,,1,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
-28310,Sarah's_Left_Earring,Sarah's Left Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,128,,145,0,,{ skill "AL_HEAL",1; },{},{}
-28311,Sarah's_Right_Earring,Sarah's Right Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,8,,145,0,,{ skill "AL_TELEPORT",1; },{},{}
-28321,Falconer_Claw,Falconer Claw,4,0,,100,,5,,1,0x00000800,63,2,136,0,80,0,,{ bonus bDex,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*10; },{},{}
-28322,Falconer_Glove,Falconer Glove,4,0,,100,,5,,1,0x00000800,63,2,136,0,80,0,,{ bonus bDex,1; bonus bUseSPrate,-5; },{},{}
+28310,Sarah's_Left_Earring,Sarah's Left Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,8,,145,0,,{ skill "AL_HEAL",1; },{},{}
+28311,Sarah's_Right_Earring,Sarah's Right Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,128,,145,0,,{ skill "AL_TELEPORT",1; },{},{}
+28321,Falconer_Claw,Falconer Claw,4,0,,100,,5,,1,0x00000800,63,2,136,,80,0,,{ bonus bDex,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*10; },{},{}
+28322,Falconer_Glove,Falconer Glove,4,0,,100,,5,,1,0x00000800,63,2,136,,80,0,,{ bonus bDex,1; bonus bUseSPrate,-5; },{},{}
 28326,Broken_Chips_01,Broken Chips 01,4,10,,100,,,,1,0xFFFFFFFF,63,2,136,,100,0,,{ bonus bStr,4; },{},{}
 28327,Broken_Chips_02,Broken Chips 02,4,10,,100,,,,1,0xFFFFFFFF,63,2,136,,100,0,,{ bonus bInt,4; },{},{}
 28332,Jewerly_Ring,Jewerly Ring,4,10,,100,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus bLuk,20; autobonus "{ bonus bAspd,2; }",50,2000,BF_WEAPON|BF_MAGIC; },{},{}
 28333,Gold_PC_Room_Ring,Gold PC Room Ring,4,10,,0,,,,1,0xFFFFFFFF,63,2,136,,1,0,,{ bonus bMaxHPrate,3; bonus bMaxSPrate,3; },{},{}
 28342,Critical_Anklet,Critical Anklet,4,0,,200,,3,,1,0xFFFFFFFF,63,2,136,,,0,,{ bonus bCritical,5; },{},{}
-28358,Cursed_Lucky_Clover,Cursed Lucky Clover,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,0,100,0,,{ bonus bLuk,2; bonus bFlee,3; bonus2 bAddEff2,Eff_Curse,5; },{},{ sc_end SC_CLOAKING; /*FIXME: Because the combo has Cloaking skill*/ }
-28372,Imperial_Ring,Imperial Ring,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,0,50,0,,{ bonus bStr,1; bonus bInt,1; bonus bMaxHPRate,3; bonus bMaxSPRate,3; },{},{}
+28354,City_Map,City Map,4,0,,100,,0,,1,0xFFFFFFFF,63,2,136,,1,0,0,{ /* todo */ },{},{}
+28355,Shining_Holy_Water,Shining Holy Water,4,0,,100,,0,,1,0xFFFFFFFF,63,2,136,,1,0,0,{ /* todo */ },{},{}
+28356,Prontera_Badge,Prontera Badge,4,0,,100,,0,,0,0xFFFFFFFF,63,2,136,,1,0,0,{ /*warp "prontera",159,192;  15 mins cooldown */ },{},{}
+28358,Cursed_Lucky_Clover,Cursed Lucky Clover,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,,100,0,,{ bonus bLuk,2; bonus bFlee,3; bonus2 bAddEff2,Eff_Curse,5; },{},{ sc_end SC_CLOAKING; /*FIXME: Because the combo has Cloaking skill*/ }
+28372,Imperial_Ring,Imperial Ring,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,,50,0,,{ bonus bStr,1; bonus bInt,1; bonus bMaxHPRate,3; bonus bMaxSPRate,3; },{},{}
 28374,Foxtail_Ring,Foxtail Ring,4,20,,100,,0,,0,0x80000000,7,2,136,,1,0,,{ bonus2 bExpAddRace,RC_All,5; .@lvl = min(BaseLevel/5,10); bonus bAtk,2*.@lvl; bonus bMatk,2*.@lvl; bonus bMaxHP,10*.@lvl; bonus bMaxSP,5*.@lvl; },{},{}
-28377,Magical_Ring,Magical Ring,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,0,20,0,,{ bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Water,5; bonus2 bMagicAddEle,Ele_Earth,5; bonus2 bMagicAddEle,Ele_Wind,5; if (BaseLevel > 4) { bonus2 bSkillAtk,"MG_FIREBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_COLDBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_LIGHTNINGBOLT",BaseLevel/5; bonus2 bSkillAtk,"WZ_EARTHSPIKE",BaseLevel/5; } },{},{}
+28377,Magical_Ring,Magical Ring,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,,20,0,,{ bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Water,5; bonus2 bMagicAddEle,Ele_Earth,5; bonus2 bMagicAddEle,Ele_Wind,5; if (BaseLevel > 4) { bonus2 bSkillAtk,"MG_FIREBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_COLDBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_LIGHTNINGBOLT",BaseLevel/5; bonus2 bSkillAtk,"WZ_EARTHSPIKE",BaseLevel/5; } },{},{}
 28380,Fresh_Grass_Necklace,Fresh Grass Necklace,4,20,,100,,0,,1,0x80000000,7,2,136,,100,0,,{ bonus bFlee2,5; bonus2 bSkillCooldown,"SU_SCAROFTAROU",-5000; },{},{}
 28381,Cute_Grass_Necklace,Cute Grass Necklace,4,20,,10,,0,,1,0x80000000,7,2,136,,100,0,,{ bonus bHealPower,5; bonus2 bSkillCooldown,"SU_TUNAPARTY",-7000; },{},{}
 28382,Charm_Grass_Necklace,Charm Grass Necklace,4,20,,10,,0,,1,0x80000000,7,2,136,,100,0,,{ bonus bMdef,5; bonus2 bVariableCastrate,"SU_CN_METEOR",-1000; },{},{}
-28386,Fallen_Monk_Rosary,Fallen Monk Rosary,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,0,20,0,,{ bonus bAspdRate,5; bonus bCritical,5; bonus2 bSkillUseSP,"CH_SOULCOLLECT",-5; if (BaseLevel > 14) bonus2 bSkillAtk,"SR_DRAGONCOMBO",BaseLevel/15; if (BaseLevel > 19) bonus2 bSkillAtk,"SR_KNUCKLEARROW",BaseLevel/20; if (BaseLevel > 29) bonus2 bSkillAtk,"SR_SKYNETBLOW",BaseLevel/30; },{},{}
+28386,Fallen_Monk_Rosary,Fallen Monk Rosary,4,0,,100,,,,1,0xFFFFFFFF,63,2,136,,20,0,,{ bonus bAspdRate,5; bonus bCritical,5; bonus2 bSkillUseSP,"CH_SOULCOLLECT",-5; if (BaseLevel > 14) bonus2 bSkillAtk,"SR_DRAGONCOMBO",BaseLevel/15; if (BaseLevel > 19) bonus2 bSkillAtk,"SR_KNUCKLEARROW",BaseLevel/20; if (BaseLevel > 29) bonus2 bSkillAtk,"SR_SKYNETBLOW",BaseLevel/30; },{},{}
 28391,S_Thief_Earring,Thief Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); autobonus3 "{ bonus bBaseAtk,30+(.@r*10); bonus bFlee,30+(.@r*10); }",200,5000,"TF_THROWSTONE","{ specialeffect2 EF_ENHANCE; }"; },{},{}
 28392,S_Archer_Earring,Archer Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); autobonus3 "{ bonus bBaseAtk,30+(.@r*10); bonus bHit,30+(.@r*10); }",200,5000,"AC_DOUBLE","{ specialeffect2 EF_ENHANCE; }"; },{},{}
-28410,Sapphire_Wrist,Sapphire Wrist,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,0,50,0,,{ bonus bDex,5; bonus bLuk,5; bonus bInt,5; bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",BaseLevel/5; bonus2 bVariableCastrate,"CR_ACIDDEMONSTRATION",-(BaseLevel/4); .@n = getskilllv("CR_SLIMPITCHER"); bonus bDex,.@n/2; bonus bLuk,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20; },{},{}
-28411,Emerald_Earring,Emerald Earring,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,0,50,0,,{ bonus bDex,5; bonus bAgi,5; bonus bInt,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",BaseLevel; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",BaseLevel; bonus2 bSkillAtk,"DC_THROWARROW",BaseLevel; bonus2 bSkillAtk,"WM_METALICSOUND",2*(BaseLevel/5); .@n = getskilllv("WM_METALICSOUND"); bonus2 bVariableCastrate,"WM_METALICSOUND",.@n/2; bonus bDex,.@n/2; bonus bAgi,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20; },{},{}
+28410,Sapphire_Wrist,Sapphire Wrist,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,,50,0,,{ bonus bDex,5; bonus bLuk,5; bonus bInt,5; bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",BaseLevel/5; bonus2 bVariableCastrate,"CR_ACIDDEMONSTRATION",-(BaseLevel/4); .@n = getskilllv("CR_SLIMPITCHER"); bonus bDex,.@n/2; bonus bLuk,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20; },{},{}
+28411,Emerald_Earring,Emerald Earring,4,0,,500,,3,,1,0xFFFFFFFF,63,2,136,,50,0,,{ bonus bDex,5; bonus bAgi,5; bonus bInt,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",BaseLevel; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",BaseLevel; bonus2 bSkillAtk,"DC_THROWARROW",BaseLevel; bonus2 bSkillAtk,"WM_METALICSOUND",2*(BaseLevel/5); .@n = getskilllv("WM_METALICSOUND"); bonus2 bVariableCastrate,"WM_METALICSOUND",.@n/2; bonus bDex,.@n/2; bonus bAgi,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20; },{},{}
 28413,Lesser_Mackerel_Talisman,Lesser Mackerel Talisman,4,0,,100,,1,,1,0x80000000,63,2,136,,100,,,{ bonus bVit,1; },{},{}
 28414,Intermediate_Mackerel_Talisman,Intermediate Mackerel Talisman,4,0,,100,,1,,1,0x80000000,63,2,136,,140,,,{ bonus bVit,2; },{},{}
 28415,Greater_Mackerel_Talisman,Greater Mackerel Talisman,4,0,,100,,1,,1,0x80000000,63,2,136,,175,,,{ bonus bVit,3; },{},{}
@@ -11544,13 +11554,13 @@
 28900,Guardsmen's_Shield,Guardsmen's Shield,4,20,,3000,,30,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ .@r = getrefine(); skill "LG_SHIELDSPELL",1; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,(10+(.@r*10)); bonus bDef,(.@r*10); bonus bMdef,.@r; },{},{}
 28901,Cursed_Mad_Bunny,Cursed Mad Bunny,4,20,,100,,0,,0,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus bAspd,3; bonus2 bAddRace,RC_All,5; bonus2 bMagicAddRace,RC_All,5; bonus bShortWeaponDamageReturn,10; autobonus2 "{ bonus bMagicDamageReturn,60; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_WIND; }"; .@r = getrefine(); if(.@r>=7) { bonus bBaseAtk,5; bonus bMatk,5; } if(.@r>=9) { bonus bBaseAtk,15; bonus bMatk,15; } if(.@r>=12) { bonus bCritical,10; bonus bNoCastCancel,0; } },{},{}
 28902,Mad_Bunny_,Mad Bunny,4,20,,100,,0,,1,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus2 bAddRace,RC_All,5; bonus2 bMagicAddRace,RC_All,5; bonus bShortWeaponDamageReturn,10; autobonus2 "{ bonus bMagicDamageReturn,60; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_WIND; }"; .@r = getrefine(); if(.@r>=7) { bonus bBaseAtk,5; bonus bMatk,5; } if(.@r>=9) { bonus bBaseAtk,15; bonus bMatk,15; } if(.@r>=12) { bonus bCritical,10; bonus bNoCastCancel,0; } },{},{}
-28903,Scutum,Scutum,4,0,,500,,1,,1,0xFFFFFFFF,63,2,32,1,1,1,,{ .@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; } },{},{}
+28903,Scutum,Scutum,4,0,,500,,1,,1,0xFFFFFFFF,63,2,32,,1,1,1,{ .@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; } },{},{}
 28904,Unity_Guard,Unity Guard,4,20,,300,,60,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ if(BaseLevel<100) { bonus bDef,12*getrefine(); } },{},{}
 28905,Unity_Buckler,Unity Buckler,4,20,,300,,60,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ if(BaseLevel<100) { bonus bMaxSPrate,2*getrefine(); } },{},{}
-28906,Shield_Of_Flame,Shield Of Flame,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,1,90,1,,{ bonus2 bSubEle,Ele_Fire,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
-28907,Shield_Of_Gust,Shield Of Gust,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,1,90,1,,{ bonus2 bSubEle,Ele_Wind,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
-28908,Shield_Of_Water,Shield Of Water,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,1,90,1,,{ bonus2 bSubEle,Ele_Water,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
-28909,Shield_Of_Earth,Shield Of Earth,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,1,90,1,,{ bonus2 bSubEle,Ele_Earth,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
+28906,Shield_Of_Flame,Shield Of Flame,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,,90,1,1,{ bonus2 bSubEle,Ele_Fire,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
+28907,Shield_Of_Gust,Shield Of Gust,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,,90,1,1,{ bonus2 bSubEle,Ele_Wind,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
+28908,Shield_Of_Water,Shield Of Water,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,,90,1,1,{ bonus2 bSubEle,Ele_Water,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
+28909,Shield_Of_Earth,Shield Of Earth,4,0,,500,,80,,1,0xFFFFFFFF,63,2,32,,90,1,1,{ bonus2 bSubEle,Ele_Earth,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); } },{},{}
 28910,Rectangular_Large_Sleeve,Rectangular Large Sleeve,4,20,,800,,80,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ bonus bLongAtkDef,5; .@r = getrefine(); if(.@r>=5) { bonus bLongAtkDef,5; } if(.@r>=7) { bonus bLongAtkDef,10; } if(.@r>=9) { bonus bLongAtkDef,15; } },{},{}
 28913,Ultralight_Magic_Shield,Ultralight Magic Shield,4,20,,100,,50,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ bonus bAspdRate,5; bonus2 bIgnoreDefClassRate,Class_Normal,10; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); if(.@r>=7) { bonus2 bIgnoreDefClassRate,Class_Normal,2; bonus bAspdRate,2; } if(.@r>=9) { bonus2 bIgnoreDefClassRate,Class_Normal,3; bonus bAspdRate,3; } },{},{}
 28915,Bunker_Shield,Bunker Shield,4,20,,3500,,90,,1,0xFFFFFFFF,63,2,32,,50,1,1,{ bonus2 bAddRace,RC_All,4; bonus bAspdRate,5; .@r = getrefine(); if(.@r>=5) { bonus2 bAddRace,RC_All,.@r; } },{},{}
@@ -11559,6 +11569,18 @@
 //===================================================================
 // Enchantment stones
 //===================================================================
+29000,Rune_of_Intellect_Lv_1,Rune of Intellect Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bInt,5; } if (.@r>=10) { bonus bMatkRate,5; } },{},{}
+29001,Rune_of_Intellect_Lv_2,Rune of Intellect Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bInt,6; } if (.@r>=11) { bonus bInt,1; bonus bMatkRate,7; } },{},{}
+29002,Rune_of_Intellect_Lv_3,Rune of Intellect Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bInt,7; } if (.@r>=12) { bonus bInt,1; bonus bMatkRate,8; } if (.@r>=13) { bonus bInt,1; bonus bMatkRate,2; } },{},{}
+29003,Rune_of_Dexterity_Lv_1,Rune of Dexterity Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bDex,5; } if (.@r>=10) { bonus bLongAtkRate,5; } },{},{}
+29004,Rune_of_Dexterity_Lv_2,Rune of Dexterity Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bDex,6; } if (.@r>=11) { bonus bDex,1; bonus bLongAtkRate,7; } },{},{}
+29005,Rune_of_Dexterity_Lv_3,Rune of Dexterity Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bDex,7; } if (.@r>=12) { bonus bDex,1; bonus bLongAtkRate,8; } if (.@r>=13) { bonus bDex,1; bonus bLongAtkRate,2; } },{},{}
+29006,Rune_of_Luck_Lv_1,Rune of Luck Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bLuk,5; } if (.@r>=10) { bonus bCritAtkRate,5; } },{},{}
+29007,Rune_of_Luck_Lv_2,Rune of Luck Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bLuk,6; } if (.@r>=11) { bonus bLuk,1; bonus bCritAtkRate,7; } },{},{}
+29008,Rune_of_Luck_Lv_3,Rune of Luck Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bLuk,7; } if (.@r>=12) { bonus bLuk,1; bonus bCritAtkRate,8; } if (.@r>=13) { bonus bLuk,1; bonus bCritAtkRate,6; } },{},{}
+29009,Rune_of_Vitality_Lv_1,Rune of Vitality Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,5; } if (.@r>=10) { bonus bMaxHPrate,5; } },{},{}
+29010,Rune_of_Vitality_Lv_2,Rune of Vitality Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,6; } if (.@r>=11) { bonus bVit,1; bonus bMaxHPrate,7; } },{},{}
+29011,Rune_of_Vitality_Lv_3,Rune of Vitality Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,7; } if (.@r>=12) { bonus bVit,1; bonus bMaxHPrate,8; } if (.@r>=13) { bonus bVit,1; bonus bMaxHPrate,2; } },{},{}
 29061,Ambition1Lv,Ambition1Lv,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,3; bonus bHit,3; },{},{}
 29062,Ambition2Lv,Ambition2Lv,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,6; bonus bHit,6; },{},{}
 29063,Ambition3Lv,Ambition3Lv,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,9; bonus bHit,9; },{},{}

+ 6 - 0
db/re/item_flag.txt

@@ -7,6 +7,7 @@
 //  4 - GUID Item: When this item is obtained, will generates GUID that cannot be stacked even same or stackable item
 //  8 - Item will be bound item when equipped
 // 16 - Special Broadcast: When item dropped by monster and player loot it, will be broadcasted!
+// 32 - Item will not be removed on consumption. Also supports 'itemskill'
 // NOTE: For removing flag by import file, use "-" to remove the flag. Example, 604,-1 will removes flag 1 from Branch_Of_Dead_Tree
 
 // Logged as Dead Branch item
@@ -1772,3 +1773,8 @@
 // Special Broadcast
 7782,16 //Gold_Key77
 7783,16 //Silver_Key77
+
+// Not removed after consumption
+12622,32 //Boarding_Halter
+12887,32 //C_Wing_Of_Fly
+22508,32 //Para_Team_Mark_

+ 1 - 1
db/re/item_trade.txt

@@ -914,7 +914,7 @@
 6916,499,100	// Piece_Of_Soul_Monkey
 6917,499,100	// Piece_Of_Soul_Chicken
 6919,499,100	// Honor_Proof
-//6920,467,100	//
+6920,499,100	// Rune_Magic_Powder
 6923,499,100	// Bright_Fire_Lights
 6925,499,100	// Letter_Of_Prisoner
 6926,499,100	// Rune-Midgard_History_Book

+ 63 - 14
db/re/mob_db.txt

@@ -2102,20 +2102,20 @@
 //2945,J_MUMMY
 //2946,J_ANUBIS
 //2947,J_EGGYRA
-//2948,CURSED_SOLDIER
-//2949,CURSED_SENTINEL
-//2950,BROKEN_MIND
-//2951,FLOATING_WORD
-//2952,LIKE_LOVE
-//2953,CURSED_MEMORY
-//2954,COLORLESS_VOW
-//2955,OLD_FRIENDSHIP
-//2956,SWEET_SLAUGHTER
-//2957,FORGOTTEN_NAME
-//2958,FATAL_DAYS
-//2959,TORTUROUS_REDEEMER
+2948,CURSED_SOLDIER,Cursed Soldier,Cursed Soldier,110,18574,1,1907,1851,9,1258,1791,85,35,81,50,64,56,178,23,10,12,1,1,69,0x3885,150,1960,576,420,0,0,0,0,0,0,0,6672,1000,957,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2949,CURSED_SENTINEL,Cursed Sentinel,Cursed Sentinel,110,14099,1,1634,1346,2,1347,1906,84,41,120,65,66,41,107,26,10,12,2,7,67,0x3885,175,914,1344,384,0,0,0,0,0,0,0,6672,1000,934,2500,1097,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2950,BROKEN_MIND,Broken Mind,Broken Mind,110,13520,1,1545,1557,1,1259,1799,67,27,69,37,36,10,64,5,10,12,1,6,67,0x2003885,200,920,720,200,0,0,0,0,0,0,0,6672,1000,6086,2500,683,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2951,FLOATING_WORD,Floating Word,Floating Word,110,11276,1,1166,1034,1,1080,1509,93,40,111,90,60,70,139,65,10,12,0,6,68,0x2003885,150,972,648,432,0,0,0,0,0,0,0,6672,1000,938,3000,947,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2952,LIKE_LOVE,Like Love,Like Love,110,14008,1,1505,1667,2,1182,1183,64,51,62,27,25,55,102,20,10,12,1,6,64,0x2003885,150,1056,1056,336,0,0,0,0,0,0,0,6672,1000,929,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2953,CURSED_MEMORY,Cursed Memory,Cursed Memory,110,18045,1,1802,1623,1,1310,1867,89,28,87,39,58,5,82,10,10,12,1,1,69,0x3885,350,1768,500,192,0,0,0,0,0,0,0,6672,1000,957,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2954,COLORLESS_VOW,Colorless Vow,Colorless Vow,110,19194,0,1939,1881,1,1478,2121,95,41,84,35,60,20,85,15,10,12,1,1,69,0x3885,350,0,500,0,0,0,0,0,0,0,0,6672,1000,958,3500,1063,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2955,OLD_FRIENDSHIP,Old Friendship,Old Friendship,110,12614,0,1306,1328,0,1147,1638,78,5,56,12,19,11,30,10,10,12,1,1,49,0x3885,250,2460,912,0,0,0,0,0,0,0,0,6672,1000,932,3500,1098,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2956,SWEET_SLAUGHTER,Sweet Slaughter,Sweet Slaughter,110,13986,0,1960,1587,0,1216,1709,125,10,121,48,40,31,125,32,10,12,2,1,29,0x3885,350,1538,1000,396,0,0,0,0,0,0,0,6672,1000,929,2000,682,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2957,FORGOTTEN_NAME,Forgotten Name,Forgotten Name,120,19546,1,1505,1485,2,1093,1520,111,38,121,29,51,43,100,3,10,12,1,1,49,0x3885,155,1169,1152,480,0,0,0,0,0,0,0,6672,1500,682,5000,683,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2958,FATAL_DAYS,Fatal Days,Fatal Days,120,24240,1,2052,2026,2,1025,1428,72,15,100,71,63,85,115,37,10,12,1,6,67,0x2003885,190,720,384,480,0,0,0,0,0,0,0,6672,1500,1050,2500,1038,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2959,TORTUROUS_REDEEMER,Torturous Redeemer,Torturous Redeemer,120,103342,0,10590,8378,0,1253,1753,144,28,133,69,72,55,165,44,10,12,1,7,62,0x3885,200,672,420,360,0,0,0,0,0,0,0,6672,10000,6672,10000,923,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //2960,MM_FLAMECROSS
-//2961,E_TORTUROUS_REDEEMER
+2961,E_TORTUROUS_REDEEMER,Torturous Redeemer,Torturous Redeemer,120,103342,1,10590,8378,1,1253,1753,144,28,133,69,72,55,165,44,10,12,1,7,62,0x3885,200,672,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //2962,E_DEVILING
 //2963,WOODIE
 //2964,EXP_1000
@@ -3034,7 +3034,17 @@
 //3874,AB_MOB_048
 //3875,AB_MOB_049
 //3876,AB_MOB_050
-
+//3877,E_NYAIL_PIG
+//3878,E_PIT
+//3879,E_SEA_WORMS
+//3880,E_SMALL_SWIRL
+//3881,E_RIPE_WATERMELON
+//3882,E_MD_NYAILO
+//3883,E_MD_NYAILO_LEG
+//3884,E_MD_S_TREASURE_BOX
+//3885,E_MD_B_TREASURE_BOX
+//3886,E_MD_BOX_PUPPET
+//3887,E_MD_DEPRESS_SOUL
 //3888,TW_I_QUEEN_SCARABA
 //3889,TW_GIOIA
 //3890,TW_TIMEHOLDER
@@ -3051,3 +3061,42 @@
 //3901,MD_ORK_HERO
 //3902,MD_ORC_LORD
 //3903,MD_ORC_FLOWER
+
+//3910,E_EMPEL_1
+//3911,E_GIBBET
+//3912,E_LOLI_RURI
+//3913,E_DULLAHAN
+//3914,E_BLOODY_MURDERER
+//3915,E_EMPEL_1B
+//3916,JP_E_MONSTER_74
+//3917,JP_E_MONSTER_75
+//3918,JP_E_MONSTER_76
+//3919,JP_E_MONSTER_77
+//3920,JP_E_MONSTER_78
+//3921,JP_E_MONSTER_79
+//3922,JP_E_MONSTER_80
+//3923,JP_E_MONSTER_81
+//3924,JP_E_MONSTER_82
+//3925,JP_E_MONSTER_83
+//3926,JP_E_MONSTER_84
+//3927,JP_E_MONSTER_85
+//3928,JP_E_MONSTER_86
+//3929,JP_E_MONSTER_87
+//3930,JP_E_MONSTER_88
+//3931,JP_E_MONSTER_89
+//3932,JP_E_MONSTER_90
+//3933,JP_E_MONSTER_91
+//3934,JP_E_MONSTER_92
+//3935,JP_E_MONSTER_93
+//3936,JP_E_MONSTER_94
+//3937,JP_E_MONSTER_95
+//3938,JP_E_MONSTER_96
+//3939,JP_E_MONSTER_97
+//3940,JP_E_MONSTER_98
+//3941,JP_E_MONSTER_99
+//3942,JP_E_MONSTER_100
+//3943,JP_E_MONSTER_101
+//3944,JP_E_MONSTER_102
+//3945,JP_E_MONSTER_103
+//3946,JP_E_MONSTER_104
+//3947,JP_E_MONSTER_105

+ 4 - 4
db/re/mob_drop.txt

@@ -46,11 +46,11 @@
 2700,28705,250,RDMOPTG_Crimson_Weapon // C2_PORCELLIO
 2745,13127,250,RDMOPTG_None // C2_MOLE
 2746,1939,250,RDMOPTG_Crimson_Weapon // C3_MIYABI_NINGYO
-1102,2009,50,RDMOPTG_None // BATHORY
+1102,1680,50,RDMOPTG_None // BATHORY
 1155,16040,50,RDMOPTG_Crimson_Weapon // PETIT
 2714,16040,250,RDMOPTG_Crimson_Weapon // C1_PETIT
 2715,16040,250,RDMOPTG_Crimson_Weapon // C2_PETIT
-2885,2009,250,RDMOPTG_None // C4_BATHORY
+2885,1680,250,RDMOPTG_None // C4_BATHORY
 2199,28705,50,RDMOPTG_Crimson_Weapon // SIORAVA
 1143,16040,50,RDMOPTG_Crimson_Weapon // MARIONETTE
 1413,1995,50,RDMOPTG_Crimson_Weapon // WILD_GINSENG
@@ -106,9 +106,9 @@
 1653,28705,50,RDMOPTG_Crimson_Weapon // WHIKEBAIN
 1655,1839,50,RDMOPTG_Crimson_Weapon // EREND
 1655,16040,50,RDMOPTG_Crimson_Weapon // EREND
-1657,2009,50,RDMOPTG_None // RAWREL
+1657,1680,50,RDMOPTG_None // RAWREL
 1829,21015,50,RDMOPTG_Crimson_Weapon // SWORD_GUARDIAN
-2692,2009,250,RDMOPTG_None // C3_RAWREL
+2692,1680,250,RDMOPTG_None // C3_RAWREL
 1654,13454,50,RDMOPTG_Crimson_Weapon // ARMAIA
 1654,28106,50,RDMOPTG_Crimson_Weapon // ARMAIA
 1656,1939,50,RDMOPTG_Crimson_Weapon // KAVAC

+ 48 - 0
db/re/mob_skill_db.txt

@@ -10916,6 +10916,54 @@
 2923,Owl Marquees@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,6,0x3695,,,,,
 2923,Owl Marquees@NPC_SUMMONSLAVE,idle,196,2,10000,2000,60000,no,self,slavele,0,2922,,,,,,
 
+// Ghost Palace Memorial
+2948,Cursed Soldier@NPC_BLINDATTACK,attack,177,5,500,0,5000,no,target,always,0,,,,,,,
+2948,Cursed Soldier@AC_DOUBLE,attack,46,5,500,0,5000,no,target,always,0,,,,,,,
+2948,Cursed Soldier@NPC_MAGICALATTACK,attack,192,1,500,800,5000,yes,target,always,0,,,,,,,
+2948,Cursed Soldier@AC_SHOWER,attack,47,3,500,0,5000,no,target,always,0,,,,,,,
+2949,Cursed Sentinel@AS_SONICBLOW,attack,136,7,500,800,5000,yes,target,always,0,,,,,,29,
+2949,Cursed Sentinel@NPC_CURSEATTACK,attack,181,5,500,800,5000,yes,target,always,0,,,,,,29,
+2950,Broken Mind@NPC_BLINDATTACK,attack,177,3,1500,0,5000,no,target,always,0,,,,,,1,
+2950,Broken Mind@NPC_BLINDATTACK,chase,177,3,1500,0,5000,no,target,always,0,,,,,,1,
+2950,Broken Mind@NPC_BLOODDRAIN,attack,199,1,500,0,5000,no,target,always,0,,,,,,26,
+2950,Broken Mind@NPC_CURSEATTACK,attack,181,3,500,800,5000,yes,target,always,0,,,,,,0,
+2950,Broken Mind@NPC_CURSEATTACK,chase,181,3,500,800,5000,yes,target,always,0,,,,,,0,
+2950,Broken Mind@CR_REFLECTSHIELD,attack,252,2,500,0,300000,yes,self,always,0,,,,,,7,
+2950,Broken Mind@NPC_PETRIFYATTACK,attack,180,3,500,500,5000,yes,target,always,0,,,,,,2,
+2950,Broken Mind@NPC_PETRIFYATTACK,chase,180,3,500,500,5000,yes,target,always,0,,,,,,2,
+2951,Floating Word@NPC_BLOODDRAIN,attack,199,1,500,0,5000,no,target,always,0,,,,,,2,
+2951,Floating Word@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,29,,,,,,
+2951,Floating Word@MG_FIREBALL,chase,17,5,1500,500,5000,yes,target,always,0,,,,,,,
+2951,Floating Word@MO_BODYRELOCATION,chase,264,1,2000,500,5000,yes,target,always,0,,,,,,,
+2952,Like Love@HT_SHOCKWAVE,idle,118,5,500,0,300000,no,around2,always,0,,,,,,29,
+2952,Like Love@MG_LIGHTNINGBOLT,attack,20,5,500,1500,5000,no,target,always,0,,,,,,6,
+2952,Like Love@MG_LIGHTNINGBOLT,chase,20,5,500,1500,5000,no,target,always,0,,,,,,6,
+2952,Like Love@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,29,,,,,,
+2952,Like Love@NPC_MAGICALATTACK,attack,192,1,500,1000,5000,yes,target,always,0,,,,,,9,
+2952,Like Love@NPC_UNDEADATTACK,attack,347,2,2000,0,5000,no,target,always,0,,,,,,,
+2952,Like Love@WZ_JUPITEL,attack,84,3,500,1500,5000,no,target,always,0,,,,,,6,
+2952,Like Love@WZ_JUPITEL,chase,84,3,500,1500,5000,no,target,always,0,,,,,,6,
+2953,Cursed Memory@NPC_POISON,attack,176,3,500,800,5000,yes,target,always,0,,,,,,,
+2953,Cursed Memory@NPC_POISONATTACK,attack,188,3,500,800,5000,yes,target,always,0,,,,,,,
+2953,Cursed Memory@NPC_UNDEADATTACK,attack,347,2,500,500,5000,yes,target,always,0,,,,,,,
+2954,Colorless Vow@NPC_CRITICALSLASH,attack,170,1,500,500,5000,yes,target,always,0,,,,,,,
+2954,Colorless Vow@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,no,target,always,0,,,,,,,
+2955,Old Friendship@NPC_POISON,attack,176,3,500,800,5000,yes,target,always,0,,,,,,,
+2955,Old Friendship@NPC_POISON,angry,176,3,500,800,5000,yes,target,always,0,,,,,,,
+2956,Sweet Slaughter@AS_GRIMTOOTH,chase,137,5,2000,0,5000,no,target,always,0,,,,,,,
+2956,Sweet Slaughter@BS_MAXIMIZE,attack,114,5,500,1000,5000,yes,self,always,0,,,,,,,
+2956,Sweet Slaughter@BS_MAXIMIZE,chase,114,5,500,1000,5000,yes,self,always,0,,,,,,,
+2956,Sweet Slaughter@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,no,target,always,0,,,,,,9,
+2956,Sweet Slaughter@NPC_STUNATTACK,attack,179,3,500,1500,5000,yes,target,always,0,,,,,,,
+2957,Forgotten Name@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,yes,target,always,0,,,,,,,
+2957,Forgotten Name@NPC_DARKNESSATTACK,attack,190,3,500,500,5000,yes,target,always,0,,,,,,6,
+2958,Fatal Days@MG_SOULSTRIKE,chase,13,5,2000,0,3000,no,target,always,0,,,,,,,
+2958,Fatal Days@AS_GRIMTOOTH,attack,137,5,10000,0,700,no,target,always,0,,,,,,,
+2959,Torturous Redeemer@SM_MAGNUM,attack,7,5,500,0,10000,no,self,always,0,,,,,,,
+2959,Torturous Redeemer@NPC_FIREATTACK,attack,186,3,1000,1000,200000,yes,target,always,0,,,,,,,
+2959,Torturous Redeemer@WZ_FIREPILLAR,attack,80,5,500,0,10000,no,around2,always,0,,,,,,,
+2959,Torturous Redeemer@SM_BASH,attack,5,5,500,0,5000,no,target,always,0,,,,,,,
+
 // Horror Toy Factory
 2987,Decorated Evil Tree@AS_GRIMTOOTH,chase,137,5,2000,0,5000,yes,target,always,0,,,,,,,
 2987,Decorated Evil Tree@NPC_CURSEATTACK,attack,181,3,1000,0,5000,yes,target,always,0,,,,,,6,

+ 4 - 0
db/re/quest_db.txt

@@ -136,6 +136,10 @@
 1239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
 1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
 
+// Ghost Palace memorial
+1261,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Cursed Swordman"
+1263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Cursed Swordman"
+
 2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"
 2001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"
 2002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"

+ 106 - 0
db/readme.md

@@ -0,0 +1,106 @@
+# Import Directories
+
+## What is the import directory for?
+
+The `import/` directory provides a way for you to change your config settings without the need to even touch the main `/conf/` and `/db/` files.
+
+By placing your custom entries into the `import/` directory within these two locations, your core files will not need to have any conflicts resolved when you update your server. You store your changes, and the rest is updated with rAthena.
+
+## How does this work?
+
+Think of "import" as in "override". Place only the settings you have changed in the import files, or settings you are "overriding".
+
+For example, when setting up a server there are always a few config settings that users would like to change in order for rAthena to suit their needs. The following example will show you how to use the `/db/import/` directory correctly. (for `/conf/import/` examples, see [/conf/readme.md](/conf/readme.md))
+
+### Achievements
+---
+We want to add our own custom achievement that can be given to a player via an NPC Script and another that we can give to our GMs.
+
+#### /db/import/achievement_db.yml
+
+
+    Achievements:
+      - ID: 280000
+        Group: "AG_GOAL_ACHIEVE"
+        Name: "Emperio"
+        Reward:
+          TitleID: 1035
+        Score: 50
+      - ID: 280001
+        Group: "AG_GOAL_ACHIEVE"
+        Name: "Staff"
+        Reward:
+          TitleID: 1036
+        Score: 50
+
+
+### Instances
+---
+We want to add our own customized Housing Instance.
+
+#### /db/import/instance_db.txt
+
+    // ID,Name,LimitTime,IdleTimeOut,EnterMap,EnterX,EnterY,Map2,Map3,...,Map255
+    35,Home,3600,900,1@home,24,6,2@home,3@home
+
+
+### Mob Alias
+---
+We want to give a custom mob a Novice player sprite.
+
+#### /db/import/mob_avail.txt
+
+    // Structure of Database:
+    // MobID,SpriteID{,Equipment}
+    3850,0
+
+
+### Custom Maps
+---
+We want to add our own custom maps. For this we need to add our map names to `import/map_index.txt` and then to the `import/map_cache.dat` file for the Map Server to load.
+
+#### /db/import/map_index.txt
+
+    1@home	1250
+    2@home
+    3@home
+    ev_has
+    shops
+    prt_pvp
+
+
+### Item Trade Restrictions
+---
+We want to ensure that specific items cannot be traded, sold, dropped, placed in storage, etc.
+
+#### /db/import/item_trade.txt
+
+    // Legend for 'TradeMask' field (bitmask):
+    // 1   - item can't be dropped
+    // 2   - item can't be traded (nor vended)
+    // 4   - wedded partner can override restriction 2
+    // 8   - item can't be sold to npcs
+    // 16  - item can't be placed in the cart
+    // 32  - item can't be placed in the storage
+    // 64  - item can't be placed in the guild storage
+    // 128 - item can't be attached to mail
+    // 256 - item can't be auctioned
+    // Full outright value = 511
+    34000,511,100	// Old Green Box
+    34001,511,100	// House Keys
+    34002,511,100	// Reputation Journal
+
+
+### Custom Quests
+---
+We want to add our own custom quests to the quest_db.
+
+#### /db/import/quest_db.txt
+
+    // Quest ID,Time Limit,Target1,Val1,Target2,Val2,Target3,Val3,MobID1,NameID1,Rate1,MobID2,NameID2,Rate2,MobID3,NameID3,Rate3,Quest Title
+    89001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Reputation Quest"
+    89002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Reputation Quest"
+
+
+
+We cannot stress enough how helpful this system is for everyone. The majority of git conflicts will simply go away if users make use of the `import/` system.

+ 102 - 0
doc/achievements.txt

@@ -0,0 +1,102 @@
+//===== rAthena Documentation ================================
+//= Achievement Database Structure
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Last Updated: ========================================
+//= 20170531
+//===== Description: =========================================
+//= Explanation of the achievements_db.yml file and structure.
+//============================================================
+
+---------------------------------------
+
+ID: Unique achievement ID.
+
+---------------------------------------
+
+Group: Achievement group type. Each achievement type calls a specific objective check.
+Valid groups:
+	AG_ADD_FRIEND - Triggered when a player adds a friend.
+	AG_ADVENTURE - Does not trigger automatically. These are triggered by the achievementcomplete script command.
+	AG_BABY - Triggered when a player becomes a baby job.
+	AG_BATTLE - Triggered when a player kills a monster.
+	AG_CHATTING - Unknown.
+	AG_CHATTING_COUNT - Triggered when a player has a chatroom open and others join.
+	AG_CHATTING_CREATE - Triggered when a player creates a chatroom.
+	AG_CHATTING_DYING - Triggered when a player creates a chatroom and dies with it open.
+	AG_EAT - Unknown.
+	AG_GET_ITEM - Triggered when a player gets an item that has a specific sell value.
+	AG_GET_ZENY - Triggered when a player gets a specific amount of zeny at once.
+	AG_GOAL_ACHIEVE - Triggered when a player's achievement rank levels up.
+	AG_GOAL_LEVEL - Triggered when a player's base level or job level changes.
+	AG_GOAL_STATUS - Triggered when a player's base stats changes.
+	AG_HEAR - Unknown.
+	AG_JOB_CHANGE - Triggered when a player's job changes.
+	AG_MARRY - Triggered when two players get married.
+	AG_PARTY - Triggered when a player creates a party.
+	AG_ENCHANT_FAIL - Triggered when a player fails to refine an equipment.
+	AG_ENCHANT_SUCCESS - Triggered when a player successfully refines an equipment.
+	AG_SEE - Unknown.
+	AG_SPEND_ZENY - Triggered when a player spends any amount of zeny on vendors.
+	AG_TAMING - Triggered when a player tames a monster.
+
+---------------------------------------
+
+Name: Achievement name. Not read into source but used for quick look ups.
+
+---------------------------------------
+
+Target: A list of monster ID and count values that the achievement requires.
+		The target count can also be used for achievements that keep a counter while not being related to monster kills.
+		Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+
+Example:
+  // Player must kill 5 Scorpions and 10 Poring.
+  Target:
+    - MobID: 1001
+      Count: 5
+    - MobID: 1002
+      Count: 10
+
+Example 2:
+  // Player must have 100 or more of ARG0 value. Using the count target value is useful for achievements that are increased in increments
+  // and not checked for a total (UI_Type = 1).
+  // IE: In the achievement_list.lub file, UI_Type 0 is displayed as non-incremental while 1 shows a progress bar of completion for the achievement.
+  Condition: " ARG0 >= 100 "
+  Target:
+    Count: 100
+
+---------------------------------------
+
+Condition: A conditional statement that must be met for the achievement to be considered complete. Accepts script constants, player variables, and
+		   ARGX (where X is the argument vector value). The ARGX values are sent from the server to the achievement script engine on special events.
+		   Below are two examples of how the ARGX feature works.
+
+Example:
+	// This function will send 1 argument (ARG0) with a value of i + 1 when a friend is added.
+	achievement_update_objective(f_sd, AG_ADD_FRIEND, 1, i + 1);
+
+Example 2:
+	// This function will send 2 arguments (ARG0 and ARG1) with values of weapon level and refine level, respectively, when an equipment is
+	// successfully refined.
+	achievement_update_objective(sd, AG_REFINE_SUCCESS, 2, sd->inventory_data[i]->wlv, sd->inventory.u.items_inventory[i].refine);
+
+---------------------------------------
+
+Map: A map name that is used for the AG_CHATTING type which increments the counter based on the player's map.
+
+---------------------------------------
+
+Dependent: A list of achievement IDs that need to be completed before this achievement is considered complete.
+
+---------------------------------------
+
+Reward: A list of rewards that are given on completion. All fields are optional.
+  ItemID: Item ID
+  Amount:	Amount of Item ID (default 1)
+  Script: Bonus Script
+  TitleID: Title ID
+
+---------------------------------------
+
+Score: Achievement points that are given on completion.

+ 4 - 4
doc/atcommands.txt

@@ -1320,12 +1320,12 @@ This will also send a packet to clients causing them to close.
 @reloadmobdb
 @reloadmotd
 @reloadmsgconf
-@reloadpacketdb
 @reloadpcdb
 @reloadquestdb
 @reloadscript
 @reloadskilldb
 @reloadstatusdb
+@reloadachievementdb
 
 Reloads a database or configuration file.
 
@@ -1333,10 +1333,10 @@ Databases:
 -- instancedb: Instance Database
 -- itemdb: Item Database
 -- mobdb: Monster Database
--- packetdb: Packet Database
 -- questdb: Quest Database
 -- script: NPC Scripts
 -- skilldb: Skill Database
+-- achievementdb: Achievement Database
 
 Configuration files:
 -- atcommand: Atcommand Settings
@@ -1354,12 +1354,12 @@ Affected files:
 -- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.txt, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
 -- motd: motd.txt
 -- msgconf: atcommand_athena.conf
--- packetdb: packet_db.txt
 -- pcdb: statpoint.txt, job_exp.txt, skill_tree.txt, attr_fix.txt, job_db1.txt, job_db2.txt, job_basehpsp_db.txt, job_maxhpsp_db.txt, job_param_db.txt, level_penalty.txt
 -- questdb: quest_db.txt
 -- script: /npc/*.txt, /npc/*.conf
 -- skilldb: skill_db.txt, const.txt, skill_require_db.txt, skill_cast_db.txt, skill_castnodex_db.txt, skill_nocast_db.txt, skill_copyable_db.txt, skill_improvise_db.txt, skill_changematerial_db.txt, skill_nonearnpc_db.txt, skill_damage_db.txt, skill_unit_db.txt, abra_db.txt, create_arrow_db.txt, produce_db.txt, spellbook_db.txt, magicmushroom_db.txt
--- statusdb: attr_fix.txt, size_fix.txt, refine_db.tx
+-- statusdb: attr_fix.txt, size_fix.txt, refine_db.txt
+-- achievementdb: achievement_db.conf
 
 Restriction:
 	- Used from 'atcommand' or 'useatcmd'. For @reload & @reloadscript

+ 27 - 8
doc/packet_interserv.txt

@@ -47,9 +47,9 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 
 0x2713:
 	Type: AH
-	Structure: <cmd>.W <aid>.L <login_id1>.L <login_id2>.L <sex>.B <auth>.B <request_id>.L <version>.L <clienttype>.B
-	index: 0,2,6,10,14,15,16,20,24
-	len: 25
+	Structure: <cmd>.W <aid>.L <login_id1>.L <login_id2>.L <sex>.B <auth>.B <request_id>.L <clienttype>.B
+	index: 0,2,6,10,14,15,16,20
+	len: 21
 	parameter:
 		- cmd : packet identification (0x2713)
 		- aid : account identification
@@ -58,7 +58,6 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 		- sex: the sex of the account
 		- ok : 1=auth failed, 1=ok
 		- request_id: unknown @FIXME
-		- version: client version, (clientinfo version)
 		- clienttype: unknown @FIXME
 	desc:
 		- Acknowledge the authentication request from char-serv
@@ -1190,6 +1189,27 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 	desc:
 		- Requests to the inter server to save a character's quest log entries.
 
+0x3062
+	Type: ZI
+	Structure: <cmd>.W <cid>.L
+	index: 0,2
+	len: 6
+	parameter:
+		- cmd : packet identification (0x3062)
+		- cid
+	desc:
+		- Requests a character's achievement log entries to the inter server.
+
+0x3063
+	Type: ZI
+	Structure: <cmd>.W <len>.W <cid>.L <achievement_log>.?B
+	index: 0,2,4,8
+	len: variable: 8+count
+	parameter:
+		- cmd : packet identification (0x3063)
+	desc:
+		- Requests to the inter server to save a character's achievement log entries.
+
 0x3070
 	Type: ZI
 	Structure: <cmd>.W <size>.W <merc>.?B
@@ -2769,16 +2789,15 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 
 0x2b02
 	Type: ZA
-	Structure: <cmd>.W <id>.L <login_id1>.L <login_id2>.L <s_ip>.L <packet_ver>.B
-	index: 0,2,6,10,14,18
-	len: 19
+	Structure: <cmd>.W <id>.L <login_id1>.L <login_id2>.L <s_ip>.L
+	index: 0,2,6,10,14
+	len: 18
 	parameter:
 		- cmd : packet identification (0x2b02)
 		- id
 		- login_id1
 		- login_id2
 		- s_ip
-		- packet_ver
 	desc:
 		- chrif_charselectreq
 

+ 127 - 24
doc/script_commands.txt

@@ -1037,6 +1037,7 @@ From here on, we will have the commands sorted as follow:
 12.- Mercenary commands.
 13.- Party commands.
 14.- Channel commands.
+15.- Achievement commands.
 
 =====================
 |1.- Basic commands.|
@@ -3018,10 +3019,10 @@ It will only return numbers. If another type is supplied -1 will be returned.
 
 ---------------------------------------
 
-*gettimestr(<format string>,<max length>)
+*gettimestr(<"time format">,<max length>{,<time_tick>})
 
 This function will return a string containing time data as specified by the
-format string.
+time format.
 
 This uses the C function 'strfmtime', which obeys special format characters. For
 a full description see, for example, the description of 'strfmtime' at
@@ -3033,7 +3034,11 @@ The example given in rAthena sample scripts works like this:
 
   mes gettimestr("%Y-%m/%d %H:%M:%S",21);
 
-This will print a full date and time like 'YYYY-MM/DD HH:MM:SS'.
+The example above will print the current date and time like 'YYYY-MM/DD HH:MM:SS'.
+The following example will print the date and time when the player's VIP status
+expires by the given <time_tick>:
+
+  mes gettimestr("%Y-%m/%d %H:%M:%S",21,vip_status(VIP_STATUS_EXPIRE));
 
 ---------------------------------------
 
@@ -3723,18 +3728,6 @@ The renewal feature to check is determined by type.
  4 - RENEWAL_LVDMG (renewal level modifier on damage)
  5 - RENEWAL_ASPD (renewal ASPD)
 
----------------------------------------
-
-*is_clientver(<type>,<value>{,<char id>})
-
-Checks a character's client version against a specified value. If no char id is
-given, the command will run for the invoking character. The function will return
-1 if the player's version is greater than or equal to the value, and 0 otherwise.
-
-Available types are:
- 0 - version number (packet_db_ver)
- 1 - client date (YYYYMMDD)
-
 ---------------------------------------
 \\
 3,1.- Item-related commands
@@ -5169,7 +5162,7 @@ window, to avoid any disruption when both windows overlap.
 *openstorage2 <storage_id>,<mode>{,<account_id>};
 
 Just like the 'openstorage' command, except this command can open additional storages
-by the specified <storage_id>. For <storage_id>, please read the conf/inter_server.conf
+by the specified <storage_id>. For <storage_id>, please read the conf/inter_server.yml
 for storage groups.
 
 Values for <mode> are:
@@ -5323,10 +5316,11 @@ Used in reset NPC's (duh!)
 
 ---------------------------------------
 
-*sc_start 	<effect type>,<ticks>,<value 1>{,<rate>,<flag>{,<GID>}};
-*sc_start2 	<effect type>,<ticks>,<value 1>,<value 2>{,<rate>,<flag>{,<GID>}};
-*sc_start4 	<effect type>,<ticks>,<value 1>,<value 2>,<value 3>,<value 4>{,<rate>,<flag>{,<GID>}};
-*sc_end 	<effect type>{,<GID>};
+*sc_start <effect type>,<ticks>,<value 1>{,<rate>,<flag>{,<GID>}};
+*sc_start2 <effect type>,<ticks>,<value 1>,<value 2>{,<rate>,<flag>{,<GID>}};
+*sc_start4 <effect type>,<ticks>,<value 1>,<value 2>,<value 3>,<value 4>{,<rate>,<flag>{,<GID>}};
+*sc_end <effect type>{,<GID>};
+*sc_end_class {<char_id>};
 
 These commands will bestow a status effect on a character.
 
@@ -5364,6 +5358,9 @@ and theirs val1, val2, val3, and val4 usage in source.
 'sc_end' will remove a specified status effect. If SC_ALL (-1) is given, it will
 perform a complete removal of all statuses (although permanent ones will re-apply).
 
+'sc_end_class' works like 'sc_end' but will remove all status effects from any learned
+skill on the invoking character.
+
 Examples:
 	// This will poison the invoking character for 10 minutes at 50% chance.
 	sc_start SC_POISON,600000,0,5000;
@@ -6404,9 +6401,22 @@ This command works almost like sleep2, but displays a progress bar
 above the head of the currently attached character (like cast bar).
 Once the given amount of seconds passes, the script resumes. If the
 character moves while the progress bar progresses, it is aborted and
-the script ends. The color format is in RGB (0xRRGGBB). The color is
+the script ends. The color format is in RGB (RRGGBB). The color is
 currently ignored by the client and appears always green.
 
+---------------------------------------
+
+*progressbar_npc "<color>",<seconds>{,<"NPC Name">};
+
+This command works like progressbar, but displays a progress bar
+above the head of the currently attached (or given) NPC. Once the
+given amount of seconds passes, the script resumes. The color format
+is in RGB (RRGGBB). The color is currently ignored by the client and
+appears always green.
+
+Note: If a player is attached to the NPC, they are detached from the NPC
+as soon as the progress bar activates.
+
 ---------------------------------------
 //
 5,1.- End of time-related commands
@@ -7350,12 +7360,17 @@ Examples:
 *unitattack <GID>,<Target ID>{,<action type>};
 *unitattack <GID>,"<Target Name>"{,<action type>};
 
-This command will make a <GID> attack the specified target. It returns 1 upon
-success and 0 for all failures.
+This command will make a <GID> attack the specified target. It returns true upon
+success and false for all failures.
 
 If <GID> is a player and a non-zero <action type> is given, the unit will perform a
 continuous attack instead of a single attack.
 
+Note:
+Using unitattack with <GID> 0 means that it will use the currently attached unit.
+For players any attack requests will fail, because talking to an NPC prevents attacking a monster.
+Therefore you need to detach the player from the NPC before using this command.
+
 ---------------------------------------
 
 *unitkill <GID>;
@@ -7382,7 +7397,7 @@ This command will make a <GID> stop attacking.
 
 ---------------------------------------
 
-*unitstopwalk <GID>;
+*unitstopwalk <GID>{,<flag>};
 
 This command will make a <GID> stop moving.
 
@@ -7390,6 +7405,14 @@ Note: If this is called from OnTouch, then the walktimer attached to the unit is
 removed from OnTouch which causes this command to not stop the unit from walking.
 Suggest to use 'unitblockmove' to forcefully stop the unit with OnTouch.
 
+The <flag> value affects how the unit is stopped. The following flags are bitwise
+values (can be combined using the pipe operator):
+	USW_NONE = Unit will keep walking to their original destination.
+	USW_FIXPOS = Issue a fixpos packet afterwards.
+	USW_MOVE_ONCE = Force the unit to move one cell if it hasn't yet.
+	USW_MOVE_FULL_CELL = Enable moving to the next cell when unit was already half-way there (may cause on-touch/place side-effects, such as a scripted map change).
+	USW_FORCE_STOP = Force stop moving.
+
 ---------------------------------------
 
 *unittalk <GID>,"<text>"{,flag};
@@ -9724,3 +9747,83 @@ local map channel.
 Returns 0 on success.
 
 ---------------------------------------
+
+============================
+|15.- Achievement commands.|
+============================
+---------------------------------------
+
+*achievementadd(<achievement id>{,<char id>})
+
+This function will add an achievement to the player's log for the attached
+player or the supplied <char id>. The objective requirements are not ignored
+when using this function.
+Returns true on success and false on failure.
+
+---------------------------------------
+
+*achievementremove(<achievement id>{,<char id>})
+
+This function will remove an achievement from the player's log for the attached
+player or the supplied <char id>.
+Returns true on success and false on failure.
+
+---------------------------------------
+
+*achievementinfo(<achievement id>,<type>{,<char id>})
+
+This function will return the specified <type> value for an achievement of the
+attached player or the supplied <char id>. If the player doesn't have the
+achievement active (no progress has been made): if the achievement doesn't
+exist -1 will be returned, or -2 will be returned on any other error such as
+an invalid <type>.
+
+Valid types:
+- ACHIEVEINFO_COUNT1
+- ACHIEVEINFO_COUNT2
+- ACHIEVEINFO_COUNT3
+- ACHIEVEINFO_COUNT4
+- ACHIEVEINFO_COUNT5
+- ACHIEVEINFO_COUNT6
+- ACHIEVEINFO_COUNT7
+- ACHIEVEINFO_COUNT8
+- ACHIEVEINFO_COUNT9
+- ACHIEVEINFO_COUNT10
+- ACHIEVEINFO_COMPLETE
+- ACHIEVEINFO_COMPLETEDATE
+- ACHIEVEINFO_GOTREWARD
+- ACHIEVEINFO_LEVEL (<achievement id> is useless for this)
+- ACHIEVEINFO_SCORE (<achievement id> is useless for this)
+
+---------------------------------------
+
+*achievementcomplete(<achievement id>{,<char id>})
+
+This function will complete an achievement for the attached player or the supplied
+<char id>. The objective requirements are ignored when using this function.
+Returns true on success and false on failure.
+
+---------------------------------------
+
+*achievementexists(<achievement id>{,<char id>});
+
+This function will return if the achievement exists on the player or the supplied
+<char id>.
+Returns true on success and false on failure.
+
+---------------------------------------
+
+*achievementupdate(<achievement id>,<type>,<value>{,<char id>})
+
+This function will update an achievement's value for an achievement of the attached
+player or the supplied <char id>. If the player does not have the achievement active
+(no progress has been made) it will be added to the player's log first before updating
+the <type> value.
+Returns true on success and false on failure.
+
+See 'achievementinfo' for valid <type> values.
+- ACHIEVEINFO_COMPLETE, ACHIEVEINFO_COMPLETEDATE, and ACHIEVEINFO_GOTREWARD require the
+  specific value returned from 'gettimetick(2)'.
+- Excludes ACHIEVEINFO_LEVEL and ACHIEVEINFO_SCORE.
+
+---------------------------------------

+ 1 - 1
npc/custom/quests/hunting_missions.txt

@@ -287,7 +287,7 @@ OnNPCKillEvent:
 			if (isloggedin($@partymemberaid[.@i], $@partymembercid[.@i])) {
 				set .@Mission_Count, getvar(#Mission_Count, $@partymembercid[.@i]);
 				set .@Mission0, getvar(Mission0, $@partymembercid[.@i]);
-				set .@HP, getvar(HP, $@partymembercid[.@i]);
+				set .@HP, readparam(HP, $@partymembercid[.@i]);
 
 				if (.@Mission_Count && .@Mission0 && .@HP > 0) {
 					getmapxy(.@map2$,.@x2,.@y2,UNITTYPE_PC);

+ 2 - 7
npc/custom/resetnpc.txt

@@ -1,11 +1,5 @@
 //===== rAthena Script =======================================
 //= Reset NPC
-//===== By: ==================================================
-//= rAthena Dev Team
-//===== Current Version: =====================================
-//= 1.4
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //= Resets skills, stats, or both.
 //===== Additional Comments: =================================
@@ -15,6 +9,7 @@
 //= 1.3 All statuses removed upon skill reset. [Euphy]
 //= 1.4 Compressed Script, Added limit use option [Stolao]
 //=	Changed set -> setarray, Improved text with F_InsertPlural
+//= 1.5 Added sc_end_class to reset related status changes [sader1992]
 //============================================================
 prontera,150,193,4	script	Reset Girl	124,{
 	//	 		Skills,	Stats,	Both,	Limit
@@ -44,7 +39,7 @@ prontera,150,193,4	script	Reset Girl	124,{
 	}
 	set Zeny, Zeny-.@Reset[.@i-1];
 	if(.@i&1){
-		sc_end SC_ALL;// TODO make a sc_end current classes sc only
+		sc_end_class;
 		ResetSkill;
 	}
 	if(.@i&2) ResetStatus;

+ 6 - 13
npc/merchants/old_pharmacist.txt

@@ -36,9 +36,9 @@ alberta_in,16,28,4	script	Pharmacist	61,{
 	mes "[Old Pharmacist]";
 	mes "Ummmm...";
 	mes "What brings you here...?";
+	next;
 	switch(select("Make Potion:Talk.:Mixing Information:Cancel")) {
 	case 1:
-		next;
 		if (MaxWeight - Weight < 5000) {
 			mes "[Old Pharmacist]";
 			mes "Why are you carrying these so many!";
@@ -51,11 +51,11 @@ alberta_in,16,28,4	script	Pharmacist	61,{
 		} else {
 			mes "[Old Pharmacist]";
 			mes "You have all the stuff ready, right? Which one would you like?";
+			next;
 			switch(select("Red Potion.:Orange Potion.:Yellow Potion.:White Potion.:Blue Potion.:Green Potion.:Actually, I don't want anything.")) {
 			case 1:
 				callsub L_Making,507,3,501;
 			case 2:
-				next;
 				mes "[Old Pharmacist]";
 				if (countitem(507) < countitem(713)) {
 					set .@max,countitem(507);
@@ -77,9 +77,9 @@ alberta_in,16,28,4	script	Pharmacist	61,{
 					close;
 				}
 				mes "How many?";
+				next;
 				switch(select("Make as many as I can.:I want to choose an amount.:Actually, I don't want anything.")) {
 				case 1:
-					next;
 					if ((countitem(507) < .@max) || (countitem(508) < .@max) || (countitem(713) < .@max) || (Zeny < .@max*3)) {
 						mes "[Old Pharmacist]";
 						mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
@@ -92,24 +92,21 @@ alberta_in,16,28,4	script	Pharmacist	61,{
 					getitem 502,.@max; //Orange_Potion
 					break;
 				case 2:
-					next;
 					mes "[Old Pharmacist]";
 					mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
+					next;
 					input .@amount,0,101;
 					if (.@amount == 0) {
-						next;
 						mes "[Old Pharmacist]";
 						mes "Make up your mind, will you?!";
 						close;
 					}
 					if (.@amount > 100) {
-						next;
 						mes "[Old Pharmacist]";
 						mes "Are you deaf? I said less than 100!";
 						close;
 					}
 					if ((countitem(507) < .@amount) || (countitem(508) < .@amount) || (countitem(713) < .@amount) || (Zeny < .@amount*3)) {
-						next;
 						mes "[Old Pharmacist]";
 						mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
 						close;
@@ -122,7 +119,6 @@ alberta_in,16,28,4	script	Pharmacist	61,{
 					getitem 502,.@amount; //Orange_Potion
 					break;
 				case 3:
-					next;
 					mes "[Old Pharmacist]";
 					mes "What?!";
 					mes "Grrr...";
@@ -188,7 +184,6 @@ L_Making:
 	.@item_req = getarg(0);
 	.@req_amount = getarg(1);
 
-	next;
 	mes "[Old Pharmacist]";
 	if ((countitem(.@item_req)/2) < countitem(713)) {
 		.@max = countitem(.@item_req) /2;
@@ -206,9 +201,9 @@ L_Making:
 		close;
 	}
 	mes "How many?";
+	next;
 	switch(select("Make as many as I can.:I want to choose an amount.:Actually, I don't want anything.")) {
 	case 1:
-		next;
 		if ((countitem(.@item_req) < .@max*2) || countitem(713) < .@max || (Zeny < .@max*.@req_amount)) {
 			mes "[Old Pharmacist]";
 			mes "You rascal! You don't even have all the materials and you want me to make you potions?!";
@@ -220,11 +215,10 @@ L_Making:
 		getitem getarg(2),.@max; 
 		break;
 	case 2:
-		next;
 		mes "[Old Pharmacist]";
 		mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
-		input .@amount;
 		next;
+		input .@amount;
 		if (.@amount == 0) {
 			mes "[Old Pharmacist]";
 			mes "Make up your mind, will you?!";
@@ -246,7 +240,6 @@ L_Making:
 		getitem getarg(2),.@amount; 
 		break;
 	case 3:
-		next;
 		mes "[Old Pharmacist]";
 		mes "What?!";
 		mes "Grrr...";

+ 3 - 3
npc/quests/quests_moscovia.txt

@@ -9075,7 +9075,7 @@ OnTouch_:
 		}
 	}
 	emotion e_what,1;
-	close;
+	end;
 }
 
 mosk_que,45,131,0	script	Stone Furnace#rus28	HIDDEN_NPC,{
@@ -9124,7 +9124,7 @@ mosk_que,45,131,0	script	Stone Furnace#rus28	HIDDEN_NPC,{
 		}
 	}
 	emotion e_what,1;
-	close;
+	end;
 
 OnMyMobDead:
 	stopnpctimer;
@@ -9173,7 +9173,7 @@ mosk_que,56,202,0	script	Occult Apple Tree#rus29	HIDDEN_NPC,{
 		}
 	}
 	emotion e_what,1;
-	close;
+	end;
 }
 
 mosk_que,47,217,0	warp	Escape#rus30	3,3,mosk_fild02,237,266

+ 10 - 4
npc/re/custom/lasagna/lasagna_npcs.txt

@@ -1628,12 +1628,18 @@ lasagna,208,188,3	script	Cat Paw Service#lasagna	4_M_MERCAT1,4,4,{
 		savepoint "lasagna",193,183,1,1;
 		close;
 	case 2:
-		if (getskilllv("SU_BASIC_SKILL") < 1) {
+		if (!callfunc("F_CanOpenStorage")) {
 			mes "[Cat Paw Commerce Group]";
 			mes "I'm sorry, but...";
-			mes "You should learn some basic skills first if you want to use the warehouse.";
-			mes "Go and learn the skills until you reach the level to use the warehouse.";
-			mes "I believe it should be ^4d4dffbasic level 6^000000 for humans.";
+			if (Class == Job_Summoner) {
+				mes "You should learn the new basic skill first.";
+				mes "Go and learn the skill if you want to use the warehouse.";
+			}
+			else {
+				mes "You should learn some basic skills first if you want to use the warehouse.";
+				mes "Go and learn the skills until you reach the level to use the warehouse.";
+				mes "I believe it should be ^4d4dffbasic level 6^000000 for humans.";
+			}
 			close;
 		}
 		if (countitem(7059) > 0)// Free Ticket for Kafra Storage

+ 2 - 1
npc/re/guides/navigation.txt

@@ -13,11 +13,12 @@
 //===== Additional Comments: ================================= 
 //= 1.0 First version.
 //= 1.1 Added 'is_clientver' command. [Euphy]
+//= 1.2 Dropped 'is_clientver' command. [Lemongrass]
 //============================================================ 
 
 function	script	F_Navi	{
 
-	if (!is_clientver(1,20111010))
+	if ( PACKETVER < 20111010 )
 		set .@disabled,1;
 
 	// This function takes 0 ~ 3 parameters.

+ 991 - 0
npc/re/instances/GhostPalace.txt

@@ -0,0 +1,991 @@
+//===== rAthena Script =======================================
+//= Ghost Palace
+//===== Description: =========================================
+//= [Walkthrough Conversion]
+//= Ghost Palace Instance
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//============================================================
+
+dali02,43,129,5	script	Unpleasant Royal Guard#	4_M_SAKRAYROYAL,{
+	if (BaseLevel < 120) {
+		mes "[Unpleasant Royal Guard]";
+		mes "Althought I need help with a task, you are not strong enough to assist me, noob~!";
+		next;
+		mes "[Unpleasant Royal Guard]";
+		mes "Come back later when you have done some training and are at least level 120!";
+		close;
+	}
+	.@party_id = getcharid(1);
+	if (getcharid(0) != getpartyleader(.@party_id,2) || .@party_id < 1) {
+		mes "[Unpleasant Royal Guard]";
+		mes "I can only open the secret passage for party leaders. Please have your party leader talk to me.";
+		close;
+	}
+	switch( checkquest(1261,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Unpleasant Royal Guard]";
+		mes "Have you found the princess yet?! Is she safe?";
+		close;
+	case 2:
+		mes "[Unpleasant Royal Guard]";
+		mes "The monsters around the secret passage have disappeared. Now is our chance to save the princess!";
+		erasequest 1261;// Cursed Swordman
+		close;
+	}
+	mes "[Unpleasant Royal Guard]";
+	mes "I need help, even from the likes of you.";
+	next;
+	mes "[Unpleasant Royal Guard]";
+	mes "In the middle of battle the princess disappeared while I was guarding the palace.";
+	next;
+	mes "[Unpleasant Royal Guard]";
+	mes "You run ahead and I will catch up. We must save her.";
+	next;
+	if (select( "I will help.", "This is not a good time." ) == 2) {
+		mes "[Unpleasant Royal Guard]";
+		mes "Even now all the royal guards are fighting and dying from the monsters.";
+		next;
+		mes "[Unpleasant Royal Guard]";
+		mes "We must, no matter how much fear grips our hearts, save the princess!";
+		close;
+	}
+	instance_create("Ghost Palace");
+	mes "[Unpleasant Royal Guard]";
+	mes "Thank you..";
+	mes "I will open the secret passage to the ^0000ffGhost Palace^000000.";
+	mes "Please be ready!";
+	close;
+}
+
+dali02,40,134,5	script	Interdimensional Device#dk	PORTAL,{
+	if (BaseLevel < 120) {
+		mes "[Unpleasant Royal Guard]";
+		mes "Althought I need help with a task, you are not strong enough to assist me, noob~!";
+		next;
+		mes "[Unpleasant Royal Guard]";
+		mes "Come back later when you have done some training and are at least level 120!";
+		close;
+	}
+	mes "[Unpleasant Royal Guard]";
+	mes "I can see the secret passage into the palace. Are you ready to save the princess?!";
+	next;
+	if (select( "Enter", "Stop" ) == 2) {
+		mes "[Unpleasant Royal Guard]";
+		mes "Even now all the royal guards are fighting and dying from the monsters.";
+		next;
+		mes "[Unpleasant Royal Guard]";
+		mes "We must, no matter how much fear grips our hearts, save the princess!";
+		close;
+	}
+	switch( checkquest(1261,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Unpleasant Royal Guard]";
+		mes "The monsters that attacked the palace are wandering around the secret entrance. It would be very bad if they spotted us... Please wait.";
+		next;
+		mes "When the time limit for the entrance is up";
+		mes "let's try to re-enter.";
+		close;
+	case 2:
+		mes "^0000ffThe time limit for entering to the Curse of the Swordsman is finished. Please try to talk to the Unpleasent Royal Guard again..^000000";
+		erasequest 1261;// Cursed Swordman
+		close;
+	}
+	.@party_id = getcharid(1);
+	if (getcharid(0) != getpartyleader(.@party_id,2) || .@party_id < 1) {
+		mes "[Unpleasant Royal Guard]";
+		mes "I can only open the secret passage for party leaders. Please have your party leader talk to me.";
+		close;
+	}
+
+	.@md_name$ = "Ghost Palace";
+	switch( instance_enter(.@md_name$) ) {
+	case IE_OTHER:
+		mes "An unknown error occurred.";
+		close;
+	case IE_NOINSTANCE:
+		mes "^ff0000Inside the devices you see a dark hole. If you wish to enter you must to talk to the Unpleasent Royal Guard first.^000000";
+		close;
+	case IE_NOMEMBER:
+		mes "Only registered members can enter the " + .@md_name$ + " instance.";
+		close;
+	case IE_OK:
+		mapannounce "dali", "" + strcharinfo(0) + " of the party, " + getpartyname(.@party_id) + ", is entering the Ghost Palace.", bc_map, 0x00ff99;
+		// warp "1@spa",42,196;
+		setquest 1261;// Cursed Swordman
+		end;
+	}
+}
+
+// 1st floor
+1@spa,41,204,5	script	King#dk	4_M_RUSKING,{
+	mes "[King]";
+	mes "You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else.";
+	npctalk "King: You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else.";
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "I will protect the princess with my life.";
+	npctalk "Lurid Royal Guard: I will protect the princess with my life.", instance_npcname("Lurid Royal Guard#dk");
+	next;
+	mes "[King]";
+	mes "The marriage arrangements are going as planned. The prince is here to meet with the princess.";
+	npctalk "King: The marriage arrangements are going as planned. The prince is here to meet with the princess.";
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "...Yes, your majesty.";
+	npctalk "Lurid Royal Guard: ...Yes, your majesty.", instance_npcname("Lurid Royal Guard#dk");
+	next;
+	mes "[King]";
+	mes "My gods, there are monsters in the castle! Get rid of them now!";
+	npctalk "King: My gods, there are monsters in the castle! Get rid of them now!";
+	close2;
+	donpcevent instance_npcname("#gp_control_1") + "::OnStart";
+	end;
+
+OnInstanceInit:
+	// 1: enabled potential double spawn (official), 0: disabled
+	'bool_double_spawn = 1;
+
+	'map_spa$ = instance_mapname("1@spa");
+
+	// warps
+	disablenpc instance_npcname("The second floor of Palace");
+	disablenpc instance_npcname("3rd floor in the palace");
+	disablenpc instance_npcname("4th floor in the palace");
+	disablenpc instance_npcname("5th floor of Palace");
+	disablenpc instance_npcname("Way out of Palace");
+
+	// first floor
+	disablenpc instance_npcname("#gp_control_1");
+
+	// second floor
+	disablenpc instance_npcname("Lurid Royal Guard#dk1");
+	disablenpc instance_npcname("Princess Tiara#dk");
+	disablenpc instance_npcname("#gp_control_2");
+
+	// 3rd floor
+	disablenpc instance_npcname("King#dk1");
+	disablenpc instance_npcname("Lurid Royal Guard#dk2");
+	disablenpc instance_npcname("Captain of the Guard#dk");
+	disablenpc instance_npcname("Soldier#dk1");
+	disablenpc instance_npcname("Soldier#dk2");
+	disablenpc instance_npcname("Soldier#dk3");
+	disablenpc instance_npcname("Lurid Royal Guard#dk3");
+	disablenpc instance_npcname("Thanatos Magic Trace#dk1");
+	disablenpc instance_npcname("#gp_control_3");
+
+	// 4th floor
+	disablenpc instance_npcname("#gp_control_4");
+	disablenpc instance_npcname("#gp_control_5");
+	disablenpc instance_npcname("Thanatos Magic Trace#dk2");
+	disablenpc instance_npcname("Visiting Prince#dk");
+	disablenpc instance_npcname("Lurid Royal Guard#dk4");
+	disablenpc instance_npcname("King's Corpse#dk");
+	disablenpc instance_npcname("Captain's Corpse#dk");
+	disablenpc instance_npcname("Soldier's Corpse#dk");
+	disablenpc instance_npcname("Soldier's Corpse#dk1");
+	disablenpc instance_npcname("Soldier's Corpse#dk2");
+	disablenpc instance_npcname("Soldier's Corpse#dk3");
+	disablenpc instance_npcname("Soldier's Corpse#dk4");
+
+	// 5th floor
+	disablenpc instance_npcname("#gp_control_6");
+	disablenpc instance_npcname("Princess Tiara#dk1");
+	disablenpc instance_npcname("Lurid Royal Guard#dk5");
+	disablenpc instance_npcname("King#dk11");
+	disablenpc instance_npcname("Sakray#dk");
+	disablenpc instance_npcname("Thanatos Magic Trace#dk3");
+	disablenpc instance_npcname("#tb");
+	disablenpc instance_npcname("#sv");
+	disablenpc instance_npcname("#tv");
+	end;
+}
+
+1@spa,42,201,1	script	Lurid Royal Guard#dk	4_M_SAKRAYROYAL,{ end; }
+
+1@spa,1,1,1	script	#gp_control_1	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_1");
+	disablenpc instance_npcname("King#dk");
+	disablenpc instance_npcname("Lurid Royal Guard#dk");
+	initnpctimer;
+	end;
+OnTimer2000:
+	.@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead1";
+	monster 'map_spa$,50,194,"Cursed Soldier",2948,1, .@label$;		// CURSED_SOLDIER
+	monster 'map_spa$,34,208,"Cursed Soldier",2948,1, .@label$;		// CURSED_SOLDIER
+	monster 'map_spa$,32,194,"Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	monster 'map_spa$,52,209,"Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	stopnpctimer;
+	end;
+OnMyMobDead1:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead1") < (1 + 'bool_double_spawn)) {
+		deltimer instance_npcname("#gp_control_1") + "::OnSpawn1";	// stop double spawn if timer is running
+		addtimer 2000, instance_npcname("#gp_control_1") + "::OnSpawn1";
+	}
+	end;
+OnSpawn1:
+	.@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead2";
+	monster 'map_spa$,37,182,"Cursed Soldier",2948,1, .@label$;		// CURSED_SOLDIER
+	monster 'map_spa$,46,182,"Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	end;
+OnMyMobDead2:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead2") < 1) {
+		deltimer instance_npcname("#gp_control_1") + "::OnSpawn1";	// stop double spawn if timer is running
+		deltimer instance_npcname("#gp_control_1") + "::OnSpawn2";
+		addtimer 2000, instance_npcname("#gp_control_1") + "::OnSpawn2";
+	}
+	end;
+OnSpawn2:
+	.@label$ = instance_npcname("#gp_control_1") + "::OnMyMobDead3";
+	monster 'map_spa$,30,200,"Cursed Soldier",2948,1, .@label$;		// CURSED_SOLDIER
+	monster 'map_spa$,51,200,"Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	monster 'map_spa$,53,199,"Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	end;
+OnMyMobDead3:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead3") < 1) {
+		mapannounce 'map_spa$, "The passage on the 2nd floor in the palace of ghost is open .", bc_map,0xFFFF00;
+		enablenpc instance_npcname("The second floor of Palace");
+		enablenpc instance_npcname("Lurid Royal Guard#dk1");
+		enablenpc instance_npcname("Princess Tiara#dk");
+	}
+	end;
+}
+
+// 2nd floor
+1@spa,132,122,7	script	Lurid Royal Guard#dk1	4_M_SAKRAYROYAL,{
+	.@tiara$ = instance_npcname("Princess Tiara#dk");
+	cutin "npc-tiara.bmp",3;
+	mes "[Lurid Royal Guard]";
+	mes "Your highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him...";
+	npctalk "Lurid Royal Guard: Your highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him...";
+	next;
+	mes "[Princess Tiara]";
+	mes "If...If a marriage is arranged what should I do?";
+	npctalk "Princess Tiara: If...If a marriage is arranged what should I do?", .@tiara$;
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "The only thing I can do is protect you from physical harm.";
+	npctalk "Lurid Royal Guard: The only thing I can do is protect you from physical harm.";
+	next;
+	mes "[Princess Tiara]";
+	mes "Then, what can I do?";
+	npctalk "Princess Tiara: Then, what can I do?", .@tiara$;
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "You must decide that for yourself your highness...";
+	npctalk "Lurid Royal Guard: You must decide that for yourself your highness...";
+	next;
+	mes "[Princess Tiara]";
+	mes "Would it be easier for you if I were married and sent off to another country?";
+	npctalk "Princess Tiara: Would it be easier for you if I were married and sent off to another country?", .@tiara$;
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "I will always stand by you and protect you forever.";
+	npctalk "Lurid Royal Guard: I will always stand by you and protect you forever.";
+	cutin "npc-tiara.bmp",255;
+	next;
+	mes "[Princess Tiara]";
+	mes "Monsters have gotten inside the castle? Please, protect me!";
+	npctalk "Princess Tiara: Monsters have gotten inside the castle? Please, protect me!", .@tiara$;
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "Stay behind me. Let's go!";
+	npctalk "Lurid Royal Guard: Stay behind me. Let's go!";
+	close2;
+	donpcevent instance_npcname("#gp_control_2") + "::OnStart";
+	end;
+}
+
+1@spa,135,125,3	duplicate(Lurid Royal Guard#dk)	Princess Tiara#dk	4_F_MAYSEL
+
+1@spa,1,1,1	script	#gp_control_2	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_2");
+	disablenpc instance_npcname("Lurid Royal Guard#dk1");
+	disablenpc instance_npcname("Princess Tiara#dk");
+	disablenpc instance_npcname("The second floor of Palace");
+
+	killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead1";
+	killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead2";
+	killmonster 'map_spa$, instance_npcname("#gp_control_1") + "::OnMyMobDead3";
+	disablenpc instance_npcname("#gp_control_1");
+	initnpctimer;
+	end;
+OnTimer2000:
+	.@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead1";
+	monster 'map_spa$,135,116,"Broken Promise",2950,1, .@label$;	// BROKEN_MIND
+	monster 'map_spa$,110,120,"Broken Promise",2950,1, .@label$;	// BROKEN_MIND
+	monster 'map_spa$,122,112,"Floating Sorrow",2951,1, .@label$;	// FLOATING_WORD
+	monster 'map_spa$,121,129,"Unfulfilled Love",2952,1, .@label$;	// LIKE_LOVE
+	stopnpctimer;
+	end;
+OnMyMobDead1:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead1") < 1) {
+		sleep 2000;
+		.@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead2";
+		monster 'map_spa$,120,103,"Broken Promise",2950,1, .@label$;	// BROKEN_MIND
+		monster 'map_spa$,115,137,"Floating Sorrow",2951,1, .@label$;	// FLOATING_WORD
+		monster 'map_spa$,103,130,"Unfulfilled Love",2952,1, .@label$;	// LIKE_LOVE
+	}
+	end;
+OnMyMobDead2:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead2") < 1) {
+		sleep 2000;
+		.@label$ = instance_npcname("#gp_control_2") + "::OnMyMobDead3";
+		monster 'map_spa$,98,119,"Floating Sorrow",2951,1, .@label$;	// FLOATING_WORD
+		monster 'map_spa$,98,120,"Floating Sorrow",2951,1, .@label$;	// FLOATING_WORD
+		monster 'map_spa$,103,109,"Unfulfilled Love",2952,1, .@label$;	// LIKE_LOVE
+	}
+	end;
+OnMyMobDead3:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_2") + "::OnMyMobDead3") < 1) {
+		mapannounce 'map_spa$, "The passage on the 3rd floor of the palace is open.", bc_map,0xFFFF00;
+		enablenpc instance_npcname("3rd floor in the palace");
+		enablenpc instance_npcname("King#dk1");
+		enablenpc instance_npcname("Lurid Royal Guard#dk2");
+		enablenpc instance_npcname("Captain of the Guard#dk");
+		enablenpc instance_npcname("Soldier#dk1");
+		enablenpc instance_npcname("Soldier#dk2");
+		enablenpc instance_npcname("Soldier#dk3");
+		disablenpc instance_npcname("#gp_control_2");
+	}
+	end;
+}
+
+// 3rd floor
+1@spa,32,54,1	script	King#dk1	4_M_RUSKING,{
+	mes "[King]";
+	mes "It was you who brought the monsters here! You want to get rid of me and have the princess for yourself?";
+	npctalk "King: It was you who brought the monsters here! You want to get rid of me and have the princess for yourself?";
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "It is a trap your majesty! You must trust me!";
+	npctalk "Lurid Royal Guard: It is a trap your majesty! You must trust me!", instance_npcname("Lurid Royal Guard#dk2");
+	next;
+	mes "[King]";
+	mes "Shut up! You've betrayed me! I trusted you... you must pay for your disgrace.";
+	npctalk "King: Shut up! You've betrayed me! I trusted you... you must pay for your disgrace.";
+	next;
+	mes "[King]";
+	mes "You will suffer for the rest of your life.";
+	npctalk "King: You will suffer for the rest of your life.";
+	close2;
+	disablenpc instance_npcname("3rd floor in the palace");
+	disablenpc instance_npcname("King#dk1");
+	disablenpc instance_npcname("Captain of the Guard#dk");
+	disablenpc instance_npcname("Soldier#dk1");
+	disablenpc instance_npcname("Soldier#dk2");
+	disablenpc instance_npcname("Soldier#dk3");
+	disablenpc instance_npcname("Lurid Royal Guard#dk2");
+	donpcevent instance_npcname("Thanatos Magic Trace#dk1") + "::OnStart";
+	end;
+}
+
+1@spa,35,56,5	script	Thanatos Magic Trace#dk1	4_TRACE,{
+	end;
+OnStart:
+	enablenpc instance_npcname("Thanatos Magic Trace#dk1");
+	enablenpc instance_npcname("Lurid Royal Guard#dk3");
+	initnpctimer;
+	end;
+OnTimer5000:
+	npctalk "Ominous Voice: Oh, faithful royal guard, you are trapped.";
+	end;
+OnTimer8000:
+	npctalk "Ominous Voice: The conspiracy in the palace has your princess in grave danger...";
+	end;
+OnTimer12000:
+	npctalk "Lurid Royal Guard: Who are you? Show yourself!", instance_npcname("Lurid Royal Guard#dk3");
+	end;
+OnTimer15000:
+	npctalk "Ominous Voice: Ah... so you do you hear me?";
+	end;
+OnTimer20000:
+	npctalk "Lurid Royal Guard: ...?", instance_npcname("Lurid Royal Guard#dk3");
+	end;
+OnTimer23000:
+	npctalk "Ominous Voice: I can give you unlimited power. If you make a pact with me.";
+	end;
+OnTimer28000:
+	npctalk "Lurid Royal Guard: I..I...", instance_npcname("Lurid Royal Guard#dk3");
+	end;
+OnTimer33000:
+	npctalk "Thanatos Magic Trace: Kukuku... What do you want boy?";
+	end;
+OnTimer34000:
+	stopnpctimer;
+	disablenpc instance_npcname("Thanatos Magic Trace#dk1");
+	disablenpc instance_npcname("Lurid Royal Guard#dk3");
+	donpcevent instance_npcname("#gp_control_3") + "::OnStart";
+	end;
+}
+
+1@spa,28,52,7	duplicate(Lurid Royal Guard#dk)	Captain of the Guard#dk	4_M_KY_KNT
+1@spa,25,53,7	duplicate(Lurid Royal Guard#dk)	Soldier#dk1	4_M_CRU_SOLD
+1@spa,34,53,1	duplicate(Lurid Royal Guard#dk)	Soldier#dk2	4_M_CRU_SOLD
+1@spa,30,52,7	duplicate(Lurid Royal Guard#dk)	Soldier#dk3	4_M_KY_SOLD
+1@spa,30,58,5	duplicate(Lurid Royal Guard#dk)	Lurid Royal Guard#dk2	4_M_SAKRAY_TIED
+1@spa,31,57,5	duplicate(Lurid Royal Guard#dk)	Lurid Royal Guard#dk3	4_M_SAKRAY_TIED
+
+1@spa,1,1,1	script	#gp_control_3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_3");
+	initnpctimer;
+	end;
+OnTimer2000:
+	.@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead1";
+	monster 'map_spa$,31,57, "Regretful Memory",2953,1, .@label$; 	// CURSED_MEMORY
+	monster 'map_spa$,59,24, "Regretful Memory",2953,1, .@label$; 	// CURSED_MEMORY
+	monster 'map_spa$,23,40, "Wasted Friendship",2955,1, .@label$; 	// OLD_FRIENDSHIP
+	monster 'map_spa$,54,45, "Tarnished Oath",2954,1, .@label$; 	// COLORLESS_VOW
+	monster 'map_spa$,26,20, "Tarnished Oath",2954,1, .@label$; 	// COLORLESS_VOW
+	stopnpctimer;
+	end;
+OnMyMobDead1:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead1") < 1)
+		addtimer 2000, instance_npcname("#gp_control_3") + "::OnSpawn1";
+	end;
+OnSpawn1:
+	.@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead2";
+	monster 'map_spa$,30,52, "Tarnished Oath",2954,1, .@label$; 	// COLORLESS_VOW
+	monster 'map_spa$,58,58, "Wasted Friendship",2955,1, .@label$; 	// OLD_FRIENDSHIP
+	monster 'map_spa$,54,24, "Regretful Memory",2953,1, .@label$; 	// CURSED_MEMORY
+	end;
+OnMyMobDead2:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead2") < (1 + 'bool_double_spawn)) {
+		deltimer instance_npcname("#gp_control_3") + "::OnAnnounce";
+		addtimer 500, instance_npcname("#gp_control_3") + "::OnAnnounce";
+	}
+	end;
+OnAnnounce:
+	mapannounce 'map_spa$, "The passage on the 4th floor of the palace is open.", bc_map,0xFFFF00;
+	enablenpc instance_npcname("4th floor in the palace");
+	deltimer instance_npcname("#gp_control_3") + "::OnSpawn2";	// stop double spawn if timer is running
+	addtimer 2000, instance_npcname("#gp_control_3") + "::OnSpawn2";
+	end;
+OnSpawn2:
+	donpcevent instance_npcname("#gp_control_4") + "::OnStart";
+	// 35 mobs
+	.@label$ = instance_npcname("#gp_control_3") + "::OnMyMobDead3";
+	monster 'map_spa$,67,46, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,62,48, "Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,57,46, "Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,51,48, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "Faithful royal guard...";
+	monster 'map_spa$,56,55, "Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,62,56, "Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,66,58, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You put your princess in grave danger...";
+	monster 'map_spa$,66,64, "Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Faithful royal guard...";
+	monster 'map_spa$,62,65, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,57,67, "Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,49,66, "Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,44,66, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,45,20, "Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,38,20, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,32,20, "Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,51,22, "Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,26,34,"Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,21,37,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Faithful royal guard...";
+	monster 'map_spa$,18,39,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,21,45,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,23,49,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,25,54,"Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,29,54,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "You put your princess in grave danger...";
+	monster 'map_spa$,56,39,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,61,36,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Faithful royal guard...";
+	monster 'map_spa$,66,38,"Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away quickly!";
+	monster 'map_spa$,42,54,"Wasted Friendship",2955,1, .@label$;	// OLD_FRIENDSHIP
+	unittalk $@mobid[0], "Run away!";
+	monster 'map_spa$,35,54,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,43,60,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "Faithful royal guard...";
+	monster 'map_spa$,30,25,"Tarnished Oath",2954,1, .@label$;		// COLORLESS_VOW
+	unittalk $@mobid[0], "You put your princess in grave danger...";
+	monster 'map_spa$,30,31,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	unittalk $@mobid[0], "You are trapped...";
+	monster 'map_spa$,65,64, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	monster 'map_spa$,65,67, "Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	monster 'map_spa$,18,43,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	monster 'map_spa$,21,43,"Regretful Memory",2953,1, .@label$;	// CURSED_MEMORY
+	end;
+OnMyMobDead3:
+	end;
+}
+
+// 4th floor
+1@spa,1,1,1	script	#gp_control_4	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_4");
+	.@label$ = instance_npcname("#gp_control_4") + "::OnMyMobDead1";
+	monster 'map_spa$,215,194, "Sweet Slaughter",2956,1, .@label$;		// SWEET_SLAUGHTER
+	monster 'map_spa$,194,178, "Sweet Slaughter",2956,1, .@label$;		// SWEET_SLAUGHTER
+	monster 'map_spa$,191,211, "Sweet Slaughter",2956,1, .@label$;		// SWEET_SLAUGHTER
+	monster 'map_spa$,185,203, "Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	monster 'map_spa$,209,218, "Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	end;
+OnMyMobDead1:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead1") < (1 + 'bool_double_spawn)) {
+		deltimer instance_npcname("#gp_control_4") + "::OnSpawn1";
+		addtimer 2000, instance_npcname("#gp_control_4") + "::OnSpawn1";
+	}
+	end;
+OnSpawn1:
+	.@label$ = instance_npcname("#gp_control_4") + "::OnMyMobDead2";
+	monster 'map_spa$,189,192, "Cursed Gatekeeper",2949,1, .@label$;	// CURSED_SENTINEL
+	monster 'map_spa$,211,209, "Sweet Slaughter",2956,1, .@label$;		// SWEET_SLAUGHTER
+	end;
+OnMyMobDead2:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead2") < 1) {
+		enablenpc instance_npcname("Thanatos Magic Trace#dk2");
+		enablenpc instance_npcname("Visiting Prince#dk");
+		enablenpc instance_npcname("Lurid Royal Guard#dk4");
+		enablenpc instance_npcname("King's Corpse#dk");
+		enablenpc instance_npcname("Captain's Corpse#dk");
+		enablenpc instance_npcname("Soldier's Corpse#dk");
+		enablenpc instance_npcname("Soldier's Corpse#dk1");
+		enablenpc instance_npcname("Soldier's Corpse#dk2");
+		enablenpc instance_npcname("Soldier's Corpse#dk3");
+		enablenpc instance_npcname("Soldier's Corpse#dk4");
+	}
+	end;
+}
+
+1@spa,199,214,1	script	Lurid Royal Guard#dk4	4_M_SAKRAYROYAL,{
+	.@prince$ = instance_npcname("Visiting Prince#dk");
+	mes "[Lurid Royal Guard]";
+	mes "Where is Princess Tiara?";
+	npctalk "Lurid Royal Guard: Where is Princess Tiara?";
+	next;
+	mes "[Visiting Prince]";
+	mes "You are too late... but you brought what I was looking for. Thanks for your help.";
+	npctalk "Visiting Prince: You are too late... but you brought what I was looking for. Thanks for your help.", .@prince$;
+	next;
+	mes "[Visiting Prince]";
+	mes "Cursed Thanatos Magic Trace! Are you ready to have a new master?";
+	npctalk "Visiting Prince: Cursed Thanatos Magic Trace! Are you ready to have a new master?", .@prince$;
+	next;
+	cutin "tartanos.bmp",3;
+	mes "[Thanatos Magic Trace]";
+	mes "How dare you!";
+	npctalk "Thanatos Magic Trace: How dare you!", instance_npcname("Thanatos Magic Trace#dk2");
+	next;
+	mes "[Visiting Prince]";
+	mes "aah, aah !!!";
+	npctalk "Visiting Prince: Aah, aah!!!", .@prince$;
+	donpcevent instance_npcname("#gp_control_5") + "::OnStart";
+	close2;
+	cutin "",255;
+	end;
+}
+1@spa,201,214,1	duplicate(Lurid Royal Guard#dk)	Thanatos Magic Trace#dk2	CLEAR_NPC
+1@spa,197,218,5	duplicate(Lurid Royal Guard#dk)	Visiting Prince#dk	4_M_KNIGHT_SILVER
+1@spa,194,214,5	duplicate(Lurid Royal Guard#dk)	King's Corpse#dk	4_M_TRISTAN
+1@spa,211,194,3	duplicate(Lurid Royal Guard#dk)	Captain's Corpse#dk	4_M_LIEMAN
+1@spa,201,198,1	duplicate(Lurid Royal Guard#dk)	Soldier's Corpse#dk	4_M_DIEMAN
+1@spa,197,190,1	duplicate(Lurid Royal Guard#dk)	Soldier's Corpse#dk1	4_M_DIEMAN
+1@spa,191,207,7	duplicate(Lurid Royal Guard#dk)	Soldier's Corpse#dk2	4_M_DIEMAN
+1@spa,206,209,7	duplicate(Lurid Royal Guard#dk)	Soldier's Corpse#dk3	4_M_DIEMAN
+1@spa,189,195,1	duplicate(Lurid Royal Guard#dk)	Soldier's Corpse#dk4	4_M_DIEMAN
+
+1@spa,1,1,1	script	#gp_control_5	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_5");
+	disablenpc instance_npcname("Thanatos Magic Trace#dk2");
+	disablenpc instance_npcname("Visiting Prince#dk");
+	disablenpc instance_npcname("Lurid Royal Guard#dk4");
+	disablenpc instance_npcname("King's Corpse#dk");
+	disablenpc instance_npcname("Captain's Corpse#dk");
+	disablenpc instance_npcname("Soldier's Corpse#dk");
+	disablenpc instance_npcname("Soldier's Corpse#dk1");
+	disablenpc instance_npcname("Soldier's Corpse#dk2");
+	disablenpc instance_npcname("Soldier's Corpse#dk3");
+	disablenpc instance_npcname("Soldier's Corpse#dk4");
+	sleep 1000;
+	.@label$ = instance_npcname("#gp_control_5") + "::OnMyMobDead";
+	monster 'map_spa$,198,218, "Torturous Redeemer",2959,1, .@label$;	// TORTUROUS_REDEEMER
+	monster 'map_spa$,198,182, "Sweet Slaughter",2956,1, .@label$;		// SWEET_SLAUGHTER
+	end;
+OnMyMobDead:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_5") + "::OnMyMobDead") < 1) {
+		deltimer instance_npcname("#gp_control_4") + "::OnSpawn1";	// stop double spawn if timer is running
+		mapannounce 'map_spa$, "The passage on the 5th floor of the palace is open.", bc_map,0xFFFF00;
+		disablenpc instance_npcname("4th floor in the palace");
+		enablenpc instance_npcname("5th floor of Palace");
+		enablenpc instance_npcname("Princess Tiara#dk1");
+		enablenpc instance_npcname("Lurid Royal Guard#dk5");
+
+		killmonster 'map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead2";
+		killmonster 'map_spa$, instance_npcname("#gp_control_3") + "::OnMyMobDead3";
+		disablenpc instance_npcname("#gp_control_3");
+	}
+	end;
+}
+
+// 5th floor
+1@spa,216,43,3	script	Princess Tiara#dk1	4_F_MAYSEL,{
+	.@guard$ = instance_npcname("Lurid Royal Guard#dk5");
+	mes "[Princess Tiara]";
+	mes "You kept your promise.";
+	npctalk "Princess Tiara: You kept your promise.";
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "princess!";
+	npctalk "Lurid Royal Guard: Princess!", .@guard$;
+	next;
+	cutin "npc-tiara.bmp",3;
+	mes "[Princess Tiara]";
+	mes "Thank you... now I can rest beside you...";
+	npctalk "Princess Tiara: Thank you... now I can rest beside you...";
+	next;
+	mes "[Lurid Royal Guard]";
+	mes "No..No!!!!!";
+	npctalk "Lurid Royal Guard: No..No!!!!!", .@guard$;
+	next;
+	mes "[The voice of Princess Tiara]";
+	mes "I want to be with you forever in peace...forever...";
+	npctalk "Princess Tiara: I want to be with you forever in peace...forever...";
+	next;
+	cutin "b-tiara.BMP",3;
+	mes "[Lurid Royal Guard]";
+	mes "no.....Ahh ahh ahh!!!!~!";
+	npctalk "Lurid Royal Guard: no.....Ahh ahh ahh!!!!~!", .@guard$;
+	next;
+	mes "[The voice of Princess Tiara]";
+	mes "I love you...";
+	npctalk "Princess Tiara: I love you...";
+	cutin "",255;
+	close2;
+	donpcevent instance_npcname("#gp_control_6") + "::OnStart";
+	end;
+}
+
+1@spa,213,42,7	duplicate(Lurid Royal Guard#dk)	Lurid Royal Guard#dk5	4_M_SAKRAYROYAL
+
+1@spa,1,1,1	script	#gp_control_6	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#gp_control_6");
+	disablenpc instance_npcname("Princess Tiara#dk1");
+	disablenpc instance_npcname("Lurid Royal Guard#dk5");
+
+	killmonster 'map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead1";
+	killmonster 'map_spa$, instance_npcname("#gp_control_4") + "::OnMyMobDead2";
+	killmonster 'map_spa$, instance_npcname("#gp_control_5") + "::OnMyMobDead";
+	disablenpc instance_npcname("#gp_control_4");
+	disablenpc instance_npcname("#gp_control_5");
+	disablenpc instance_npcname("5th floor of Palace");
+	sleep 2000;
+	.@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead1";
+	monster 'map_spa$,217,52, "Forgotten Name" ,2957,1, .@label$;	// FORGOTTEN_NAME
+	unittalk $@mobid[0], "Wake up! look at us... We are monsters?";
+	monster 'map_spa$,190,21, "Tarnished Oath" ,2954,1, .@label$;	// COLORLESS_VOW
+	unittalk $@mobid[0], "Sakray killed the King and tried to kill us!";
+	monster 'map_spa$,198,49, "Tarnished Oath" ,2954,1, .@label$;	// COLORLESS_VOW
+	unittalk $@mobid[0], "What is this..??";
+	monster 'map_spa$,212,28, "Fatal Days" ,2958,1, .@label$;		// FATAL_DAYS
+	unittalk $@mobid[0], "Sakray killed a princess!";
+	end;
+OnMyMobDead1:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead1") < 1) {
+		sleep 2000;
+		.@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead2";
+		monster 'map_spa$,217,43, "Forgotten Name" ,2957,1, .@label$;	// FORGOTTEN_NAME
+		unittalk $@mobid[0], "Wake up! look at us... We are monsters?";
+		monster 'map_spa$,193,24, "Forgotten Name" ,2957,1, .@label$;	// FORGOTTEN_NAME
+		unittalk $@mobid[0], "Sakray..?? why.....Sakray!";
+		monster 'map_spa$,216,59, "Tarnished Oath" ,2954,1, .@label$;	// COLORLESS_VOW
+		unittalk $@mobid[0], "Sakray killed the King and tried to kill us!";
+		monster 'map_spa$,197,57, "Fatal Days" ,2958,1, .@label$;		// FATAL_DAYS
+		unittalk $@mobid[0], "Sakray killed a princess!";
+	}
+	end;
+OnMyMobDead2:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead2") < 1) {
+		sleep 2000;
+		.@label$ = instance_npcname("#gp_control_6") + "::OnMyMobDead3";
+		monster 'map_spa$,193,39, "Forgotten Name" ,2957,1, .@label$;	// FORGOTTEN_NAME
+		unittalk $@mobid[0], "Wake up! look at us... We are monsters?";
+		monster 'map_spa$,212,34, "Forgotten Name" ,2957,1, .@label$;	// FORGOTTEN_NAME
+		unittalk $@mobid[0], "Sakray..?? why.....Sakray!";
+		monster 'map_spa$,201,64, "Tarnished Oath" ,2954,1, .@label$;	// COLORLESS_VOW
+		unittalk $@mobid[0], "Sakray killed the King and tried to kill us!";
+		monster 'map_spa$,175,44, "Fatal Days" ,2958,1, .@label$;		// FATAL_DAYS
+		unittalk $@mobid[0], "Sakray killed a princess!";
+	}
+	end;
+OnMyMobDead3:
+	if (mobcount('map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead3") < 1) {
+		sleep 2000;
+		monster 'map_spa$,200,45, "Torturous Redeemer" ,2961,1, instance_npcname("#gp_control_6") + "::OnMyMobDead4";	// E_TORTUROUS_REDEEMER
+		unittalk $@mobid[0], "Thanatos Magic Trace! I will destroy you if I can't have you... Oh no! How could this be?";
+		sleep 5000;
+		killmonster 'map_spa$, instance_npcname("#gp_control_6") + "::OnMyMobDead4";
+		enablenpc instance_npcname("Sakray#dk");
+		enablenpc instance_npcname("Thanatos Magic Trace#dk3");
+		disablenpc instance_npcname("#gp_control_6");
+	}
+	end;
+OnMyMobDead4:
+	end;
+}
+
+1@spa,196,44,5	script	Sakray#dk	4_M_SAKRAY,{
+	mes "[Lurid Royal Guard]";
+	mes "Are you satisfied..? Thanatos Magic Trace?";
+	npctalk "Lurid Royal Guard: Are you satisfied..? Thanatos Magic Trace?";
+	next;
+	mes "[Thanatos Magic Trace]";
+	mes "I need more blood..Sakray, offer me his blood.";
+	npctalk "Thanatos Magic Trace: I need more blood..Sakray, offer me his blood.", instance_npcname("Thanatos Magic Trace#dk3");
+	next;
+	mes "[Sakray]";
+	mes "Okay, that is good. A traveller. Did you see?";
+	npctalk "Sakray: Okay, that is good. A traveller. Did you see?";
+	next;
+	mes "[" + strcharinfo(0) + "]";
+	mes "Sakray, what do you want? Sympathy? Or is it a trap?";
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Sakray, what do you want? Sympathy? Or is it a trap?";
+	next;
+	mes "[Sakray]";
+	mes "No... I do not need to make any effort to catch a novice.";
+	npctalk "Sakray: No... I do not need to make any effort to catch a novice.";
+	next;
+	mes "[" + strcharinfo(0) + "]";
+	mes "If so... then why...?";
+	unittalk getcharid(3), "" + strcharinfo(0) + " : If so... then why...?";
+	next;
+	cutin "cry-b.bmp",2;
+	mes "[Sakray]";
+	mes "I wanted to get rid of a piece of humanity inside of me through you.";
+	npctalk "Sakray: I wanted to get rid of a piece of humanity inside of me through you.";
+	next;
+	mes "[Sakray]";
+	mes "I am quite satisfied with the result.";
+	npctalk "Sakray: I am quite satisfied with the result.";
+	next;
+	mes "[Thanatos Magic Trace]";
+	mes "Sakray, offer the blood to me now!";
+	npctalk "Thanatos Magic Trace: Sakray, offer the blood to me now!", instance_npcname("Thanatos Magic Trace#dk3");
+	next;
+	mes "[Sakray]";
+	mes "If you were me, what would you do?";
+	npctalk "Sakray: If you were me, what would you do?";
+	next;
+	mes "[Sakray]";
+	mes "Can you set yourself free from this curse?";
+	npctalk "Sakray: Can you set yourself free from this curse?";
+	next;
+	mes "[" + strcharinfo(0) + "]";
+	mes "...";
+	unittalk getcharid(3), "" + strcharinfo(0) + " : ...";
+	next;
+	mes "[Sakray]";
+	mes "Heh heh... I will keep watching you until the day comes when you are old enough.";
+	npctalk "Sakray: Heh heh... I will keep watching you until the day comes when you are old enough.";
+	next;
+	mes "[Sakray]";
+	mes "I am willing to hunt you later for Thanatos.";
+	npctalk "Sakray: I am willing to hunt you later for Thanatos.";
+	cutin "",255;
+	next;
+	mes "[Sakray]";
+	mes "Farewell then.";
+	npctalk "Sakray: Farewell then.";
+	close2;
+	donpcevent instance_npcname("#tb") + "::OnStart";
+	end;
+}
+
+1@spa,196,46,1	script	#tb	CLEAR_NPC,{
+	end;
+OnStart:
+	disablenpc instance_npcname("Sakray#dk");
+	disablenpc instance_npcname("Thanatos Magic Trace#dk3");
+	enablenpc instance_npcname("#tb");
+	enablenpc instance_npcname("#sv");
+	enablenpc instance_npcname("#tv");
+	initnpctimer;
+	end;
+OnTimer3000:
+	npctalk "Voice of Princess Tiara : What can I do for you?";
+	end;
+OnTimer8000:
+	npctalk "Voice of Sakray : I will always stand by you. Please rest beside me.", instance_npcname("#sv");
+	end;
+OnTimer13000:
+	npctalk "Thanatos Magic Trace: Sakray, do not forget the covenant of blood between us.", instance_npcname("#tv");
+	end;
+OnTimer17000:
+	npctalk "Thanatos Magic Trace: Your soul is mine until you find the blood that satisfies me...", instance_npcname("#tv");
+	end;
+OnTimer22000:
+	npctalk "Voice of Sakray : Rest in the shadow with me.", instance_npcname("#sv");
+	end;
+OnTimer25000:
+	npctalk "Voice of Sakray : In the dark forever...", instance_npcname("#sv");
+	end;
+OnTimer28500:
+	disablenpc instance_npcname("#tb");
+	disablenpc instance_npcname("#sv");
+	disablenpc instance_npcname("#tv");
+	mapannounce 'map_spa$, "It is time to leave the Ghost Palace.", bc_map,0xFFFF00;
+	enablenpc instance_npcname("Way out of Palace");
+	enablenpc instance_npcname("King#dk11");
+	end;
+}
+
+1@spa,195,41,1	duplicate(Lurid Royal Guard#dk)	Thanatos Magic Trace#dk3	CLEAR_NPC
+1@spa,198,43,1	duplicate(Lurid Royal Guard#dk)	#sv	CLEAR_NPC
+1@spa,196,41,1	duplicate(Lurid Royal Guard#dk)	#tv	CLEAR_NPC
+
+1@spa,204,29,1	script	King#dk11	4_M_RUSKING,{
+	disable_items;
+	mes "[King]";
+	mes "Hey there, are you alive?";
+	mes "I did not expect to meet someone who is still alive.";
+	next;
+	mes "[King]";
+	mes "Do you possibly have the ^006400Gray Shard^000000?";
+	mes "Can you give it to me?";
+	mes "The memories of the faithful royal guard";
+	mes "and the memories of everyone he loved";
+	mes "are contained inside of these shards.";
+	next;
+	mes "[King]";
+	mes "Will you give the ^006400Gray Shard^000000 to me?";
+	mes "The guilt is eating my soul.";
+	mes "My soul is stuck within the Ghost Palace.";
+	next;
+	mes "[King]";
+	mes "I am collecting Sakray's abandoned memories from these shards.";
+	next;
+	mes "[King]";
+	mes "If you give any ^006400Gray Shard^000000s to me, I can make equipment for you.";
+	next;
+	mes "[King]";
+	mes "The cursed knight...";
+	mes "Please help me save the soul of Sakray.";
+	next;
+	setarray .@item_name$[0],
+		"Thanatos Sword", "Thanatos Great Sword", "Thanatos Spear", "Thanatos Long Spear", "Thanatos Staff",
+		"Thanatos Two-handed Staff", "Thanatos Bow", "Thanatos Dagger", "Thanatos Katar", "Thanatos Knuckle",
+		"Thanatos Hammer", "Thanatos Axe", "Thanatos Violin", "Thanatos Whip",
+		"Gray Shield", "Gray Armor", "Gray Robe", "Gray Cloak", "Gray Shoes", "Gray Helmet";
+	setarray .@items_list[0],13441,21009,1438,1496,1669,2023,18119,13093,28000,1836,16028,28100,1933,1988,2187,15090,15091,20721,22033,18820;
+
+	for ( .@i = 0; .@i < 20; .@i++ )
+		.@menu$ += .@item_name$[.@i] + ":";
+	.@menu$ += "Cancel";
+
+	while(true) {
+		.@s = select(.@menu$) - 1;
+		if (.@s == 20) {
+			mes "[King]";
+			mes "Someday, Sakray will";
+			mes "get out of this curse for sure.";
+			mes "I believe";
+			mes "^006400Gray Shard^000000s are the only method";
+			mes "to save him....";
+			close;
+		}
+		.@cost = ( .@s > 13 ? 100 : 200 );
+		mes "[King]";
+		mes "To make a ^FF0000" + .@item_name$[.@s] + "^000000";
+		mes "I need " + .@cost + " ^006400Gray Shard^000000.";
+		next;
+		if (select( "Cancel", "Hand over " + .@cost + " Gray Shard." ) == 1) {
+			mes "[King]";
+			mes "Someday, Sakray will";
+			mes "get out of this curse for sure.";
+			next;
+			continue;
+		}
+		if (countitem(6672) < .@cost) {
+			mes "[King]";
+			mes "You do not have enough ^006400Gray Shard^000000";
+			mes "to make a ^FF0000" + .@item_name$[.@s] + "^000000.";
+			mes "I need " + .@cost + " ^006400Gray Shard^000000.";
+			next;
+			continue;
+		}
+		mes "[King]";
+		mes "I will make a ^FF0000" + .@item_name$[.@s] + "^000000";
+		mes "with " + .@cost + " ^006400Gray Shard^000000.";
+		next;
+		mes "You see a light through the folded hands of the king and it gradually takes on a shape.";
+		next;
+		mes "[King]";
+		mes "All right, it is done.";
+		mes "Take this ^FF0000" + .@item_name$[.@s] + "^000000";
+		mes "to confront Sakray and Thanatos.";
+		next;
+		mes "[King]";
+		mes "The power requires a sacrifice.";
+		mes "Please be careful...";
+		delitem 6672,.@cost;// Gray Shard
+		getitem .@items_list[.@s],1;
+		close;
+	}
+}
+
+1@spa,210,28,0	script	Way out of Palace	WARPNPC,2,2,{
+	end;
+OnTouch_:
+	mes "It is time to leave the Ghost Palace.";
+	mes "Everything is now complete";
+	mes "and will vanish..";
+	close2;
+	if (isbegin_quest(1263) == 2)
+		getitem 6672,1;// Gray Shard
+	else {
+		setquest 1263;// Cursed Swordman
+		completequest 1263;
+		getexp 900000,500000;
+		getitem 6672,2;// Gray Shard
+	}
+	warp "dali02",46,129;
+	end;
+}
+
+1@spa,41,217,0	warp	The second floor of Palace	2,2,1@spa,114,120
+1@spa,117,137,0	warp	3rd floor in the palace	2,2,1@spa,60,43
+1@spa,54,28,0	warp	4th floor in the palace	2,2,1@spa,218,186
+1@spa,178,186,0	warp	5th floor of Palace	2,2,1@spa,186,57

+ 278 - 0
npc/re/other/achievements.txt

@@ -0,0 +1,278 @@
+//===== rAthena Script =======================================
+//= Adventure Achievements
+//===== Description: =========================================
+//= Spawns Adventure group type treasure chests.
+//===== Changelogs: ==========================================
+//= 1.0 Initial release. [Aleos]
+//============================================================
+
+-	script	ach_treasure#core	-1,{
+	if (strnpcinfo(3) == "")
+		end;
+	achievementcomplete(atoi(strnpcinfo(3)));
+	classchange HIDDEN_WARP_NPC;
+	initnpctimer;
+	end;
+
+OnTouch:
+	if (getnpctimer(1)) // Don't trigger touch if the delay timer is active.
+		end;
+	if (achievementexists(atoi(strnpcinfo(3)))) // Don't trigger if the player has already completed.
+		end;
+	classchange 4_TREASURE_BOX,"",bc_self;
+	end;
+
+OnTimer5000:
+	stopnpctimer;
+	end;
+}
+
+//-----------------
+// --- Dungeons ---
+//-----------------
+
+// Abbey Underground
+abbey03,26,72,0	duplicate(ach_treasure#core)	#abb_ach1::120110	HIDDEN_WARP_NPC,5,5
+
+// Abyss Lake
+abyss_03,86,55,0	duplicate(ach_treasure#core)	#aby_ach1::120111	HIDDEN_WARP_NPC,5,5
+
+// Amatsu Dungeon
+ama_dun03,60,163,0	duplicate(ach_treasure#core)	#ama_ach1::120113	HIDDEN_WARP_NPC,5,5
+
+// Ant Hell
+anthell02,253,41,0	duplicate(ach_treasure#core)	#ant_ach1::120114	HIDDEN_WARP_NPC,5,5
+
+// Ayothaya Dungeon
+ayo_dun02,150,256,0	duplicate(ach_treasure#core)	#ayo_ach1::120115	HIDDEN_WARP_NPC,5,5
+
+// Bifrost
+ecl_tdun04,37,37,0	duplicate(ach_treasure#core)	#ecl_ach1::120121	HIDDEN_WARP_NPC,5,5
+
+// Brasilis Dungeon
+bra_dun02,171,121,0	duplicate(ach_treasure#core)	#bra_ach1::120117	HIDDEN_WARP_NPC,5,5
+
+// Byalan Dungeon
+iz_dun05,64,223,0	duplicate(ach_treasure#core)	#iz_ach2::120141	HIDDEN_WARP_NPC,5,5
+
+// Clock Tower
+c_tower4,37,158,0	duplicate(ach_treasure#core)	#ct_ach1::120112	HIDDEN_WARP_NPC,5,5
+alde_dun04,90,107,0	duplicate(ach_treasure#core)	#ct_ach2::120118	HIDDEN_WARP_NPC,5,5
+
+// Coal Mine
+mjo_dun03,76,220,0	duplicate(ach_treasure#core)	#mjo_ach1::120136	HIDDEN_WARP_NPC,5,5
+
+// Comodo Dungeon
+beach_dun3,102,71,0	duplicate(ach_treasure#core)	#bea_ach1::120116	HIDDEN_WARP_NPC,5,5
+
+// Einbech
+ein_dun02,31,255,0	duplicate(ach_treasure#core)	#eind_ach1::120122	HIDDEN_WARP_NPC,5,5
+
+// Geffen Dungeon
+gef_dun02,222,163,0	duplicate(ach_treasure#core)	#gefd_ach1::120123	HIDDEN_WARP_NPC,5,5
+
+// Glastheim
+gl_cas02,53,151,0	duplicate(ach_treasure#core)	#gl_ach1::120124	HIDDEN_WARP_NPC,5,5
+gl_sew04,288,6,0	duplicate(ach_treasure#core)	#gl_ach2::120125	HIDDEN_WARP_NPC,5,5
+gl_knt02,126,235,0	duplicate(ach_treasure#core)	#gl_ach3::120126	HIDDEN_WARP_NPC,5,5
+gl_prison1,125,159,0	duplicate(ach_treasure#core)	#gl_ach4:120127	HIDDEN_WARP_NPC,5,5
+
+// Gonryun Dungeon
+gon_dun03,167,232,0	duplicate(ach_treasure#core)	#gon_ach1::120128	HIDDEN_WARP_NPC,5,5
+
+// Istana
+dew_dun02,87,272,0	duplicate(ach_treasure#core)	#dew_ach1::120119	HIDDEN_WARP_NPC,5,5
+
+// Labyrinth
+prt_maze03,11,14,0	duplicate(ach_treasure#core)	#maze_ach1::120140	HIDDEN_WARP_NPC,5,5
+
+// Louyang Dungeon
+lou_dun03,29,228,0	duplicate(ach_treasure#core)	#lou_ach1::120134	HIDDEN_WARP_NPC,5,5
+
+// Nogg Road
+mag_dun02,192,72,0	duplicate(ach_treasure#core)	#mag_ach1::120135	HIDDEN_WARP_NPC,5,5
+
+// Orc Dungeon
+orcsdun02,32,72,0	duplicate(ach_treasure#core)	#orc_ach1::120138	HIDDEN_WARP_NPC,5,5
+
+// Payon Dungeon
+pay_dun04,120,124,0	duplicate(ach_treasure#core)	#payd_ach1::120139	HIDDEN_WARP_NPC,5,5
+
+// Prontera Culvert
+prt_sewb4,19,183,0	duplicate(ach_treasure#core)	#iz_ach1::120131	HIDDEN_WARP_NPC,5,5
+
+// Pyramid
+moc_pryd06,102,121,0	duplicate(ach_treasure#core)	#pyr_ach1::120137	HIDDEN_WARP_NPC,5,5
+
+// Rachel Dungeon
+ice_dun03,44,261,0	duplicate(ach_treasure#core)	#rad_ach1::120129	HIDDEN_WARP_NPC,5,5
+
+// Robot Factory
+kh_dun02,70,106,0	duplicate(ach_treasure#core)	#jup_ach1::120132	HIDDEN_WARP_NPC,5,5
+
+// Scaraba Hall
+dic_dun03,216,211,0	duplicate(ach_treasure#core)	#dic_ach1::120120	HIDDEN_WARP_NPC,5,5
+
+// Somatology Lab
+lhz_dun03,240,221,0	duplicate(ach_treasure#core)	#lhzd_ach1::120133	HIDDEN_WARP_NPC,5,5
+
+// Sphinx
+in_sphinx5,154,107,0	duplicate(ach_treasure#core)	#sph_ach1::120130	HIDDEN_WARP_NPC,5,5
+
+// Sunken Ship
+treasure02,18,142,0	duplicate(ach_treasure#core)	#iz_ach3::120144	HIDDEN_WARP_NPC,5,5
+
+// Thanatos Tower
+tha_t06,150,176,0	duplicate(ach_treasure#core)	#tha_ach1::120142	HIDDEN_WARP_NPC,5,5
+
+// Thors Volcano
+thor_v03,220,221,0	duplicate(ach_treasure#core)	#thor_ach1::120143	HIDDEN_WARP_NPC,5,5
+
+// Toy Factory
+xmas_dun02,120,224,0	duplicate(ach_treasure#core)	#xmas_ach1::120146	HIDDEN_WARP_NPC,5,5
+
+// Turtle Island Dungeon
+tur_dun04,134,130,0	duplicate(ach_treasure#core)	#tur_ach1::120145	HIDDEN_WARP_NPC,5,5
+
+//---------------
+// --- Fields ---
+//---------------
+
+// Comodo
+cmd_fild01,112,200,0	duplicate(ach_treasure#core)	#cmd_ach1::120044	HIDDEN_WARP_NPC,5,5
+cmd_fild02,86,94,0	duplicate(ach_treasure#core)	#cmd_ach2::120045	HIDDEN_WARP_NPC,5,5
+cmd_fild03,144,190,0	duplicate(ach_treasure#core)	#cmd_ach3::120046	HIDDEN_WARP_NPC,5,5
+cmd_fild04,151,191,0	duplicate(ach_treasure#core)	#cmd_ach4::120047	HIDDEN_WARP_NPC,5,5
+cmd_fild06,221,108,0	duplicate(ach_treasure#core)	#cmd_ach5::120048	HIDDEN_WARP_NPC,5,5
+cmd_fild07,269,322,0	duplicate(ach_treasure#core)	#cmd_ach6::120049	HIDDEN_WARP_NPC,5,5
+cmd_fild08,181,136,0	duplicate(ach_treasure#core)	#cmd_ach7::120050	HIDDEN_WARP_NPC,5,5
+cmd_fild09,211,266,0	duplicate(ach_treasure#core)	#cmd_ach8::120051	HIDDEN_WARP_NPC,5,5
+
+// Einbroch
+ein_fild01,266,277,0	duplicate(ach_treasure#core)	#ein_ach1::120067	HIDDEN_WARP_NPC,5,5
+ein_fild03,99,332,0	duplicate(ach_treasure#core)	#ein_ach2::120068	HIDDEN_WARP_NPC,5,5
+ein_fild04,334,305,0	duplicate(ach_treasure#core)	#ein_ach3::120069	HIDDEN_WARP_NPC,5,5
+ein_fild05,337,233,0	duplicate(ach_treasure#core)	#ein_ach4::120070	HIDDEN_WARP_NPC,5,5
+ein_fild06,174,245,0	duplicate(ach_treasure#core)	#ein_ach5::120071	HIDDEN_WARP_NPC,5,5
+ein_fild07,188,50,0	duplicate(ach_treasure#core)	#ein_ach6::120072	HIDDEN_WARP_NPC,5,5
+ein_fild08,258,78,0	duplicate(ach_treasure#core)	#ein_ach7::120073	HIDDEN_WARP_NPC,5,5
+ein_fild09,330,76,0	duplicate(ach_treasure#core)	#ein_ach8::120074	HIDDEN_WARP_NPC,5,5
+
+// Geffen
+gef_fild00,74,119,0	duplicate(ach_treasure#core)	#gef_ach1::120011	HIDDEN_WARP_NPC,5,5
+gef_fild01,223,223,0	duplicate(ach_treasure#core)	#gef_ach2::120012	HIDDEN_WARP_NPC,5,5
+gef_fild05,202,292,0	duplicate(ach_treasure#core)	#gef_ach3::120013	HIDDEN_WARP_NPC,5,5
+gef_fild06,279,104,0	duplicate(ach_treasure#core)	#gef_ach4::120014	HIDDEN_WARP_NPC,5,5
+gef_fild07,181,250,0	duplicate(ach_treasure#core)	#gef_ach5::120015	HIDDEN_WARP_NPC,5,5
+gef_fild09,170,73,0	duplicate(ach_treasure#core)	#gef_ach6::120016	HIDDEN_WARP_NPC,5,5
+gef_fild11,238,249,0	duplicate(ach_treasure#core)	#gef_ach7::120017	HIDDEN_WARP_NPC,5,5
+
+// Hugel
+hu_fild01,347,312,0	duplicate(ach_treasure#core)	#hu_ach1::120062	HIDDEN_WARP_NPC,5,5
+hu_fild02,80,152,0	duplicate(ach_treasure#core)	#hu_ach2::120063	HIDDEN_WARP_NPC,5,5
+hu_fild04,322,313,0	duplicate(ach_treasure#core)	#hu_ach3::120064	HIDDEN_WARP_NPC,5,5
+hu_fild06,204,228,0	duplicate(ach_treasure#core)	#hu_ach4::120065	HIDDEN_WARP_NPC,5,5
+hu_fild05,197,210,0	duplicate(ach_treasure#core)	#hu_ach5::120066	HIDDEN_WARP_NPC,5,5
+
+// Laphine
+ecl_fild01,155,322,0	duplicate(ach_treasure#core)	#ecl_ach1::120090	HIDDEN_WARP_NPC,5,5
+bif_fild01,147,64,0	duplicate(ach_treasure#core)	#ecl_ach2::120091	HIDDEN_WARP_NPC,5,5
+bif_fild02,155,322,0	duplicate(ach_treasure#core)	#ecl_ach3::120092	HIDDEN_WARP_NPC,5,5
+spl_fild01,335,315,0	duplicate(ach_treasure#core)	#ecl_ach4::120093	HIDDEN_WARP_NPC,5,5
+spl_fild02,153,358,0	duplicate(ach_treasure#core)	#ecl_ach5::120094	HIDDEN_WARP_NPC,5,5
+spl_fild03,61,286,0	duplicate(ach_treasure#core)	#ecl_ach6::120095	HIDDEN_WARP_NPC,5,5
+
+// Lighthalzen
+lhz_fild01,118,73,0	duplicate(ach_treasure#core)	#lhz_ach1::120075	HIDDEN_WARP_NPC,5,5
+lhz_fild02,239,243,0	duplicate(ach_treasure#core)	#lhz_ach2::120076	HIDDEN_WARP_NPC,5,5
+lhz_fild03,313,132,0	duplicate(ach_treasure#core)	#lhz_ach3::120077	HIDDEN_WARP_NPC,5,5
+
+// Manuk
+man_fild01,41,172,0	duplicate(ach_treasure#core)	#man_ach1::120096	HIDDEN_WARP_NPC,5,5
+man_fild02,268,355,0	duplicate(ach_treasure#core)	#man_ach2::120097	HIDDEN_WARP_NPC,5,5
+man_fild03,198,91,0	duplicate(ach_treasure#core)	#man_ach3::120098	HIDDEN_WARP_NPC,5,5
+dic_fild01,227,82,0	duplicate(ach_treasure#core)	#man_ach4::120099	HIDDEN_WARP_NPC,5,5
+dic_fild02,147,196,0	duplicate(ach_treasure#core)	#man_ach5::120100	HIDDEN_WARP_NPC,5,5
+
+// Misc
+ama_fild01,187,337,0	duplicate(ach_treasure#core)	#misc_ach1::120101	HIDDEN_WARP_NPC,5,5
+gon_fild01,171,332,0	duplicate(ach_treasure#core)	#misc_ach2::120102	HIDDEN_WARP_NPC,5,5
+lou_fild01,104,232,0	duplicate(ach_treasure#core)	#misc_ach3::120103	HIDDEN_WARP_NPC,5,5
+ayo_fild01,289,70,0	duplicate(ach_treasure#core)	#misc_ach4::120104	HIDDEN_WARP_NPC,5,5
+mosk_fild02,176,77,0	duplicate(ach_treasure#core)	#misc_ach5::120105	HIDDEN_WARP_NPC,5,5
+bra_fild01,99,193,0	duplicate(ach_treasure#core)	#misc_ach6::120106	HIDDEN_WARP_NPC,5,5
+dew_fild01,175,287,0	duplicate(ach_treasure#core)	#misc_ach7::120107	HIDDEN_WARP_NPC,5,5
+ma_fild01,308,206,0	duplicate(ach_treasure#core)	#misc_ach8::120108	HIDDEN_WARP_NPC,5,5
+ma_fild02,176,77,0	duplicate(ach_treasure#core)	#misc_ach9::120109	HIDDEN_WARP_NPC,5,5
+
+// Mjolnir
+mjolnir_01,47,60,0	duplicate(ach_treasure#core)	#nmjo_ach1::120032	HIDDEN_WARP_NPC,5,5
+mjolnir_02,77,49,0	duplicate(ach_treasure#core)	#nmjo_ach2::120033	HIDDEN_WARP_NPC,5,5
+mjolnir_03,190,200,0	duplicate(ach_treasure#core)	#nmjo_ach3::120034	HIDDEN_WARP_NPC,5,5
+mjolnir_04,201,146,0	duplicate(ach_treasure#core)	#nmjo_ach4::120035	HIDDEN_WARP_NPC,5,5
+mjolnir_05,43,327,0	duplicate(ach_treasure#core)	#nmjo_ach5::120036	HIDDEN_WARP_NPC,5,5
+mjolnir_06,162,290,0	duplicate(ach_treasure#core)	#smjo_ach1::120037	HIDDEN_WARP_NPC,5,5
+mjolnir_07,321,127,0	duplicate(ach_treasure#core)	#smjo_ach2::120038	HIDDEN_WARP_NPC,5,5
+mjolnir_08,175,225,0	duplicate(ach_treasure#core)	#smjo_ach3::120039	HIDDEN_WARP_NPC,5,5
+mjolnir_09,299,123,0	duplicate(ach_treasure#core)	#smjo_ach4::120040	HIDDEN_WARP_NPC,5,5
+mjolnir_10,353,371,0	duplicate(ach_treasure#core)	#smjo_ach5::120041	HIDDEN_WARP_NPC,5,5
+mjolnir_11,329,182,0	duplicate(ach_treasure#core)	#smjo_ach6::120042	HIDDEN_WARP_NPC,5,5
+mjolnir_12,110,298,0	duplicate(ach_treasure#core)	#smjo_ach7::120043	HIDDEN_WARP_NPC,5,5
+
+// Morocc
+moc_fild11,188,218,0	duplicate(ach_treasure#core)	#moc_ach1::120018	HIDDEN_WARP_NPC,5,5
+moc_fild12,234,96,0	duplicate(ach_treasure#core)	#moc_ach2::120019	HIDDEN_WARP_NPC,5,5
+moc_fild13,290,207,0	duplicate(ach_treasure#core)	#moc_ach3::120020	HIDDEN_WARP_NPC,5,5
+moc_fild16,196,108,0	duplicate(ach_treasure#core)	#moc_ach4::120021	HIDDEN_WARP_NPC,5,5
+moc_fild17,269,105,0	duplicate(ach_treasure#core)	#moc_ach5::120022	HIDDEN_WARP_NPC,5,5
+moc_fild18,54,284,0	duplicate(ach_treasure#core)	#moc_ach6::120023	HIDDEN_WARP_NPC,5,5
+
+// Payon
+pay_fild01,167,243,0	duplicate(ach_treasure#core)	#pay_ach1::120024	HIDDEN_WARP_NPC,5,5
+pay_fild02,105,240,0	duplicate(ach_treasure#core)	#pay_ach2::120025	HIDDEN_WARP_NPC,5,5
+pay_fild03,144,97,0	duplicate(ach_treasure#core)	#pay_ach3::120026	HIDDEN_WARP_NPC,5,5
+pay_fild04,257,95,0	duplicate(ach_treasure#core)	#pay_ach4::120027	HIDDEN_WARP_NPC,5,5
+pay_fild07,365,37,0	duplicate(ach_treasure#core)	#pay_ach5::120028	HIDDEN_WARP_NPC,5,5
+pay_fild08,237,345,0	duplicate(ach_treasure#core)	#pay_ach6::120029	HIDDEN_WARP_NPC,5,5
+pay_fild09,251,42,0	duplicate(ach_treasure#core)	#pay_ach7::120030	HIDDEN_WARP_NPC,5,5
+pay_fild10,196,38,0	duplicate(ach_treasure#core)	#pay_ach8::120031	HIDDEN_WARP_NPC,5,5
+
+// Prontera
+prt_fild01,147,126,0	duplicate(ach_treasure#core)	#prt_ach1::120001	HIDDEN_WARP_NPC,5,5
+prt_fild02,140,219,0	duplicate(ach_treasure#core)	#prt_ach2::120002	HIDDEN_WARP_NPC,5,5
+prt_fild03,172,139,0	duplicate(ach_treasure#core)	#prt_ach3::120003	HIDDEN_WARP_NPC,5,5
+prt_fild04,119,291,0	duplicate(ach_treasure#core)	#prt_ach4::120004	HIDDEN_WARP_NPC,5,5
+prt_fild05,190,291,0	duplicate(ach_treasure#core)	#prt_ach5::120005	HIDDEN_WARP_NPC,5,5
+prt_fild06,296,303,0	duplicate(ach_treasure#core)	#prt_ach6::120006	HIDDEN_WARP_NPC,5,5
+prt_fild07,45,104,0	duplicate(ach_treasure#core)	#prt_ach7::120007	HIDDEN_WARP_NPC,5,5
+prt_fild08,203,223,0	duplicate(ach_treasure#core)	#prt_ach8::120008	HIDDEN_WARP_NPC,5,5
+prt_fild09,37,354,0	duplicate(ach_treasure#core)	#prt_ach9::120009	HIDDEN_WARP_NPC,5,5
+prt_fild10,177,206,0	duplicate(ach_treasure#core)	#prt_ach10::12010	HIDDEN_WARP_NPC,5,5
+
+// Rachel
+ra_fild01,138,166,0	duplicate(ach_treasure#core)	#ra_ach1::120078	HIDDEN_WARP_NPC,5,5
+ra_fild03,224,275,0	duplicate(ach_treasure#core)	#ra_ach2::120079	HIDDEN_WARP_NPC,5,5
+ra_fild08,326,45,0	duplicate(ach_treasure#core)	#ra_ach3::120080	HIDDEN_WARP_NPC,5,5
+ra_fild12,352,165,0	duplicate(ach_treasure#core)	#ra_ach4::120081	HIDDEN_WARP_NPC,5,5
+ra_fild04,92,302,0	duplicate(ach_treasure#core)	#ra_ach5::120082	HIDDEN_WARP_NPC,5,5
+ra_fild05,59,59,0	duplicate(ach_treasure#core)	#ra_ach6::120083	HIDDEN_WARP_NPC,5,5
+ra_fild06,362,230,0	duplicate(ach_treasure#core)	#ra_ach7::120084	HIDDEN_WARP_NPC,5,5
+
+// Veins
+ve_fild01,180,234,0	duplicate(ach_treasure#core)	#ve_ach1::120085	HIDDEN_WARP_NPC,5,5
+ve_fild02,65,194,0	duplicate(ach_treasure#core)	#ve_ach2::120086	HIDDEN_WARP_NPC,5,5
+ve_fild03,197,242,0	duplicate(ach_treasure#core)	#ve_ach3::120087	HIDDEN_WARP_NPC,5,5
+ve_fild04,288,279,0	duplicate(ach_treasure#core)	#ve_ach4::120088	HIDDEN_WARP_NPC,5,5
+ve_fild07,33,113,0	duplicate(ach_treasure#core)	#ve_ach5::120089	HIDDEN_WARP_NPC,5,5
+
+// Yuno
+yuno_fild01,284,138,0	duplicate(ach_treasure#core)	#yuno_ach1::120052	HIDDEN_WARP_NPC,5,5
+yuno_fild12,76,268,0	duplicate(ach_treasure#core)	#yuno_ach2::120053	HIDDEN_WARP_NPC,5,5
+yuno_fild02,142,191,0	duplicate(ach_treasure#core)	#yuno_ach3::120054	HIDDEN_WARP_NPC,5,5
+yuno_fild03,135,329,0	duplicate(ach_treasure#core)	#yuno_ach4::120055	HIDDEN_WARP_NPC,5,5
+yuno_fild04,35,369,0	duplicate(ach_treasure#core)	#yuno_ach5::120056	HIDDEN_WARP_NPC,5,5
+yuno_fild06,262,220,0	duplicate(ach_treasure#core)	#yuno_ach6::120057	HIDDEN_WARP_NPC,5,5
+yuno_fild07,113,339,0	duplicate(ach_treasure#core)	#yuno_ach7::120058	HIDDEN_WARP_NPC,5,5
+yuno_fild08,179,209,0	duplicate(ach_treasure#core)	#yuno_ach8::120059	HIDDEN_WARP_NPC,5,5
+yuno_fild09,166,228,0	duplicate(ach_treasure#core)	#yuno_ach9::120060	HIDDEN_WARP_NPC,5,5
+yuno_fild11,141,357,0	duplicate(ach_treasure#core)	#yuno_ach10::120061	HIDDEN_WARP_NPC,5,5

+ 1 - 2
npc/re/quests/quests_eclage.txt

@@ -2105,11 +2105,10 @@ ecl_fild01,97,315,4	script	Traveler#ep14_2	4_M_JOB_HUNTER,{
 		mes "Oh, you came to ask me about the feather, too?";
 		mes "It's just a plain old decoration, but everyone really likes to bother me about it.";
 		next;
-		mes "Traveler#ep14_2fl";
 		mes "[Traveler]";
 		mes "If you are thinking about selling it, you should just give up.";
-		next;
 		mes "I have no wishes to sell it no matter how much you beg.";
+		next;
 		mes "[Traveler]";
 		mes "This feather..";
 	}

+ 2 - 0
npc/re/scripts_athena.conf

@@ -55,6 +55,7 @@ npc: npc/re/instances/BakonawaLake.txt
 npc: npc/re/instances/BangungotHospital.txt
 npc: npc/re/instances/BuwayaCave.txt
 npc: npc/re/instances/FacewormsNest.txt
+npc: npc/re/instances/GhostPalace.txt
 npc: npc/re/instances/HazyForest.txt
 npc: npc/re/instances/HorrorToyFactory.txt
 npc: npc/re/instances/MalangdoCulvert.txt
@@ -99,6 +100,7 @@ npc: npc/re/merchants/shops.txt
 npc: npc/re/merchants/te_merchant.txt
 
 // --------------------------- Others ---------------------------
+npc: npc/re/other/achievements.txt
 npc: npc/re/other/adven_boards.txt
 npc: npc/re/other/bulletin_boards.txt
 npc: npc/re/other/Global_Functions.txt

+ 10 - 0
rAthena.sln

@@ -21,6 +21,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{60D331
 		src\config\const.h = src\config\const.h
 		src\config\core.h = src\config\core.h
 		src\config\classes\general.h = src\config\classes\general.h
+		src\config\packets.h = src\config\packets.h
 		src\config\renewal.h = src\config\renewal.h
 		src\config\secure.h = src\config\secure.h
 	EndProjectSection
@@ -42,6 +43,7 @@ EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "src\char\char-server.vcxproj", "{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559} = {F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}
+		{61D6A599-6BED-4154-A9FC-40553BD972E0} = {61D6A599-6BED-4154-A9FC-40553BD972E0}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "src\map\map-server.vcxproj", "{B4114A9C-EEA4-433C-A830-56119A984F24}"
@@ -75,6 +77,7 @@ Global
 		{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}.Release|Win32.ActiveCfg = Release|Win32
 		{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}.Release|Win32.Build.0 = Release|Win32
 		{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}.Release|x64.ActiveCfg = Release|x64
+		{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}.Release|x64.Build.0 = Release|x64
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Debug|Win32.Build.0 = Debug|Win32
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Debug|x64.ActiveCfg = Debug|x64
@@ -82,6 +85,7 @@ Global
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Release|Win32.ActiveCfg = Release|Win32
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Release|Win32.Build.0 = Release|Win32
 		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Release|x64.ActiveCfg = Release|x64
+		{F6CC5F60-BD13-41B1-81D3-822A45EC0DBD}.Release|x64.Build.0 = Release|x64
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Debug|Win32.ActiveCfg = Debug|Win32
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Debug|Win32.Build.0 = Debug|Win32
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Debug|x64.ActiveCfg = Debug|x64
@@ -89,6 +93,7 @@ Global
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Release|Win32.ActiveCfg = Release|Win32
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Release|Win32.Build.0 = Release|Win32
 		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Release|x64.ActiveCfg = Release|x64
+		{7AE31676-6137-4FB3-AE9C-AD47D8A861CF}.Release|x64.Build.0 = Release|x64
 		{864805EA-FD39-453D-9248-C581951BA058}.Debug|Win32.ActiveCfg = Debug|Win32
 		{864805EA-FD39-453D-9248-C581951BA058}.Debug|Win32.Build.0 = Debug|Win32
 		{864805EA-FD39-453D-9248-C581951BA058}.Debug|x64.ActiveCfg = Debug|x64
@@ -96,6 +101,7 @@ Global
 		{864805EA-FD39-453D-9248-C581951BA058}.Release|Win32.ActiveCfg = Release|Win32
 		{864805EA-FD39-453D-9248-C581951BA058}.Release|Win32.Build.0 = Release|Win32
 		{864805EA-FD39-453D-9248-C581951BA058}.Release|x64.ActiveCfg = Release|x64
+		{864805EA-FD39-453D-9248-C581951BA058}.Release|x64.Build.0 = Release|x64
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Debug|Win32.ActiveCfg = Debug|Win32
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Debug|Win32.Build.0 = Debug|Win32
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Debug|x64.ActiveCfg = Debug|x64
@@ -103,6 +109,7 @@ Global
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Release|Win32.ActiveCfg = Release|Win32
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Release|Win32.Build.0 = Release|Win32
 		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Release|x64.ActiveCfg = Release|x64
+		{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23}.Release|x64.Build.0 = Release|x64
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Debug|Win32.ActiveCfg = Debug|Win32
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Debug|Win32.Build.0 = Debug|Win32
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Debug|x64.ActiveCfg = Debug|x64
@@ -110,6 +117,7 @@ Global
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|Win32.ActiveCfg = Release|Win32
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|Win32.Build.0 = Release|Win32
 		{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|x64.ActiveCfg = Release|x64
+		{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|x64.Build.0 = Release|x64
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|Win32.ActiveCfg = Debug|Win32
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|Win32.Build.0 = Debug|Win32
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|x64.ActiveCfg = Debug|x64
@@ -117,6 +125,7 @@ Global
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Release|Win32.ActiveCfg = Release|Win32
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Release|Win32.Build.0 = Release|Win32
 		{352B45B3-FE88-4431-9D89-48CF811446DB}.Release|x64.ActiveCfg = Release|x64
+		{352B45B3-FE88-4431-9D89-48CF811446DB}.Release|x64.Build.0 = Release|x64
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Debug|Win32.ActiveCfg = Debug|Win32
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Debug|Win32.Build.0 = Debug|Win32
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Debug|x64.ActiveCfg = Debug|x64
@@ -124,6 +133,7 @@ Global
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Release|Win32.ActiveCfg = Release|Win32
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Release|Win32.Build.0 = Release|Win32
 		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Release|x64.ActiveCfg = Release|x64
+		{FC4C071B-2C26-4B03-948A-335C94A88B5E}.Release|x64.Build.0 = Release|x64
 		{61D6A599-6BED-4154-A9FC-40553BD972E0}.Debug|Win32.ActiveCfg = Debug|Win32
 		{61D6A599-6BED-4154-A9FC-40553BD972E0}.Debug|Win32.Build.0 = Debug|Win32
 		{61D6A599-6BED-4154-A9FC-40553BD972E0}.Debug|x64.ActiveCfg = Debug|x64

+ 119 - 97
sql-files/item_db_re.sql

@@ -816,7 +816,7 @@ REPLACE INTO `item_db_re` VALUES (1439,'Half_BF_Spear1','Half BF Spear1',5,20,NU
 REPLACE INTO `item_db_re` VALUES (1440,'Battle_Hook_','Battle Hook',5,20,NULL,900,'140',NULL,3,3,0x00004082,18,2,2,4,'65',1,4,'bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bAddRace,RC_Player,20; skill "KN_PIERCE",3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1441,'Blue_Spear','Blue Spear',5,10,NULL,1200,'180:170',NULL,3,1,0x00004000,56,2,2,3,'100',1,4,'bonus bDex,5; bonus bInt,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1442,'Ru_Gold_Spear','Ru Gold Spear',5,0,NULL,1200,'180',NULL,3,2,0x00004000,56,2,2,3,'120',1,4,'bonus bStr,8; bonus bAgi,8;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1443,'Crimson_Spear','Crimson Spear',5,20,NULL,900,'90',NULL,3,2,0x00004082,56,2,2,3,'70',1,4,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1443,'Crimson_Spear','Crimson Spear',5,20,NULL,900,'90',NULL,3,2,0x00004082,63,2,2,3,'70',1,4,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1446,'Requiem_Spear','Requiem Spear',5,20,NULL,1000,'130',NULL,3,NULL,0x00004080,63,2,2,4,'100',1,4,'.@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } bonus2 bAddRace2,RC2_BioLab,.@b;',NULL,NULL);
 #===================================================================
 # 2-Handed Spears
@@ -1411,12 +1411,12 @@ REPLACE INTO `item_db_re` VALUES (2173,'Crescent_Armguard','Crescent Wrist Guard
 REPLACE INTO `item_db_re` VALUES (2174,'Lumiere_Shield','Lumiere Shield',4,20,NULL,1300,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,NULL,'65',1,3,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2175,'Esprit_Shield','Spirit Shield',4,20,NULL,1300,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,NULL,'65',1,3,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2176,'Dark_Book','Black Book',4,20,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'65',1,5,'bonus bMdef,5; .@r = getrefine(); bonus3 bAutoSpellWhenHit,"NPC_DRAGONFEAR",1,(.@r<=6)?(10):((.@r<=8)?(20):(30));',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2177,'Shield_Of_Death','Shield Of Death',4,20,NULL,2000,NULL,150,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,3,'bonus2 bAddClass,Class_Boss,2; bonus2 bMagicAddClass,Class_Boss,2; bonus2 bAddClass,Class_Normal,10; bonus2 bMagicAddClass,Class_Normal,10;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2178,'TE_Woe_Buckler','TE Woe Buckler',4,0,NULL,0,NULL,15,NULL,0,0xFFFFFFFF,63,2,32,1,'40',1,2,'bonus bMdef,15; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_Player,15;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2179,'TE_Woe_Shield','TE Woe Shield',4,0,NULL,0,NULL,25,NULL,0,0x000444A2,63,2,32,1,'40',1,3,'bonus bMdef,5; bonus bMaxHP,200; bonus2 bSubRace,RC_Player,20;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2180,'TE_Woe_Magic_Guard','TE Woe Magic Guard',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,32,1,'40',1,1,'bonus bMdef,25; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2177,'Shield_Of_Death','Shield Of Death',4,20,NULL,2000,NULL,150,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,3,'bonus2 bAddClass,Class_Boss,2; bonus2 bMagicAddClass,Class_Boss,2; bonus2 bSubClass,Class_Normal,-10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2178,'TE_Woe_Buckler','TE Woe Buckler',4,0,NULL,0,NULL,15,NULL,0,0xFFFFFFFF,63,2,32,NULL,'40',1,2,'bonus bMdef,15; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_Player,15;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2179,'TE_Woe_Shield','TE Woe Shield',4,0,NULL,0,NULL,25,NULL,0,0x000444A2,63,2,32,NULL,'40',1,3,'bonus bMdef,5; bonus bMaxHP,200; bonus2 bSubRace,RC_Player,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2180,'TE_Woe_Magic_Guard','TE Woe Magic Guard',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,32,NULL,'40',1,1,'bonus bMdef,25; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2181,'Hervor','Hervor',4,10,NULL,1500,NULL,100,NULL,0,0xFFFFFFFF,63,2,32,NULL,'1',NULL,2,'bonus bMdef,5; bonus2 bSubRace,RC_All,30; bonus bUnbreakableArmor,1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2182,'Hervor_Alvitr','Hervor Alvitr',4,0,NULL,3000,NULL,150,NULL,0,0x000FDF80,56,2,32,1,'100',0,2,'bonus bMdef,10; bonus bVit,20; bonus2 bSubRace,RC_All,30; bonus bUnbreakableShield,1; autobonus2 "{ sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_CURSE; sc_end SC_STONE; sc_end SC_POISON; sc_end SC_BLIND; sc_end SC_SILENCE; sc_end SC_BLEEDING; sc_end SC_CONFUSION; sc_end SC_FREEZE; bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Sleep,10000; bonus2 bResEff,Eff_Curse,10000; bonus2 bResEff,Eff_Stone,10000; bonus2 bResEff,Eff_Poison,10000; bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Silence,10000; bonus2 bResEff,Eff_Bleeding,10000; bonus2 bResEff,Eff_Confusion,10000; bonus2 bResEff,Eff_Freeze,10000; }",10,60000,BF_SHORT;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2182,'Hervor_Alvitr','Hervor Alvitr',4,0,NULL,3000,NULL,150,NULL,0,0x000FDF80,56,2,32,NULL,'100',0,2,'bonus bMdef,10; bonus bVit,20; bonus2 bSubRace,RC_All,30; bonus bUnbreakableShield,1; autobonus2 "{ sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_CURSE; sc_end SC_STONE; sc_end SC_POISON; sc_end SC_BLIND; sc_end SC_SILENCE; sc_end SC_BLEEDING; sc_end SC_CONFUSION; sc_end SC_FREEZE; bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Sleep,10000; bonus2 bResEff,Eff_Curse,10000; bonus2 bResEff,Eff_Stone,10000; bonus2 bResEff,Eff_Poison,10000; bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Silence,10000; bonus2 bResEff,Eff_Bleeding,10000; bonus2 bResEff,Eff_Confusion,10000; bonus2 bResEff,Eff_Freeze,10000; }",10,60000,BF_SHORT;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2183,'Impr_Angel\'s_Safeguard','Advanced Angelic Guard',4,10000,NULL,400,NULL,30,NULL,1,0x00000001,63,2,32,NULL,'99',1,1,'bonus2 bSubRace,RC_Demon,5; bonus2 bSubEle,Ele_All,5; bonus2 bSubEle,Ele_Neutral,-5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2185,'Magic_Reflect','Magic Reflect',4,10,NULL,1000,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,NULL,'99',1,3,'bonus bMdef,10; bonus bMagicDamageReturn,3+((getrefine()>=9) ? 3 : 0);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2186,'Great_Encyclopedia_Revision','Great Encyclopedia Revision',4,10,NULL,200,'0:5',50,NULL,1,0x00810100,63,2,32,NULL,'99',1,4,'bonus bInt,3; bonus bDex,2; .@r = getrefine(); bonus bCritical,3+((.@r >= 7) ? 2 : 0); if(.@r >= 9) bonus bMatk,5;',NULL,NULL);
@@ -1424,7 +1424,7 @@ REPLACE INTO `item_db_re` VALUES (2187,'Shield_of_Gray','Shield of Gray',4,10,NU
 REPLACE INTO `item_db_re` VALUES (2188,'Svalinn_J','Svalinn',4,10,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'65',1,3,'.@r = getrefine(); bonus bMaxHP,9+.@r/3; bonus2 bAddEle,Ele_Water,4+.@r/3*5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2189,'Mad_Bunny','Mad Bunny Shield',4,10,NULL,100,NULL,40,NULL,1,0xFFFFFFFF,63,2,32,NULL,'30',1,6,'bonus2 bSubEle,Ele_All,5; bonus bMdef,6; bonus bDex,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2190,'Ancient_Shield_Of_Aeon','Ancient Shield Of Aeon',4,0,NULL,200,NULL,5,NULL,0,0x000FDF80,63,2,32,NULL,'130',1,2,'bonus2 bSubEle,Ele_Neutral,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Wind,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubEle,Ele_Holy,10; bonus2 bSubEle,Ele_Ghost,10; bonus bMaxHP,500; bonus bMaxSP,50; if(getrefine()>=14) skill "MG_STONECURSE",5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2195,'Lian_Shield','Lian Shield',4,0,NULL,1300,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,1,'65',1,NULL,'bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2195,'Lian_Shield','Lian Shield',4,0,NULL,1300,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,NULL,'65',1,NULL,'bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2196,'White_Gold_Shield','White Gold Shield',4,0,NULL,1800,NULL,140,NULL,1,0xFFFFFFFF,63,2,32,NULL,NULL,1,NULL,'autobonus2 "{ bonus bMagicDamageReturn,20; }",100,2000,BF_MAGIC; /* Confirm: Success rate? */',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2198,'Lapine_Shield','Lapine Shield',4,0,NULL,1000,NULL,25,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,NULL,'bonus bMdef,10; if (getrefine() > 7) { bonus bMatk,20; }',NULL,NULL);
 # GM Shield
@@ -1730,9 +1730,9 @@ REPLACE INTO `item_db_re` VALUES (2492,'Bayani_Bangungot_Boots','Bayani Bangungo
 REPLACE INTO `item_db_re` VALUES (2493,'Goibne\'s_Combat_Boots_','Goibne\'s Greaves',4,30000,NULL,700,NULL,13,NULL,1,0xFFFFFFFE,63,2,64,NULL,'54',1,0,'bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2494,'Chrystal_Pumps_','Crystal Pumps',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFE,63,0,64,NULL,'0',1,0,'bonus bMdef,10; bonus bLuk,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2495,'Egir_Shoes','Egir Shoes',4,200000,NULL,300,NULL,13,NULL,1,0xFFFFFFFF,63,2,64,NULL,'110',1,0,'if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bMaxHP,BaseLevel*5; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bMaxSP,JobLevel*2;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2496,'TE_Woe_Shoes','TE Woe Shoes',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,64,0,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,150; bonus bMaxSP,150; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2497,'TE_Woe_Boots','TE Woe Boots',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,64,0,'40',1,NULL,'bonus bMaxHP,200; bonus bMaxSP,100; bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2498,'TE_Woe_Magic_Sandal','TE Woe Magic Sandal',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,64,1,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,100; bonus bMaxSP,200; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2496,'TE_Woe_Shoes','TE Woe Shoes',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,64,NULL,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,150; bonus bMaxSP,150; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2497,'TE_Woe_Boots','TE Woe Boots',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,64,NULL,'40',1,NULL,'bonus bMaxHP,200; bonus bMaxSP,100; bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2498,'TE_Woe_Magic_Sandal','TE Woe Magic Sandal',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,64,NULL,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,100; bonus bMaxSP,200; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2499,'Temporal_Boots','Temporal Boots',4,400,NULL,600,NULL,20,NULL,0,0xFFFFFFFF,63,2,64,NULL,'10',1,NULL,'.@r = getrefine(); bonus bMaxHP,300; bonus bMaxSP,30; bonus bMaxHP,100*(.@r/3); bonus bMaxSP,10*(.@r/3);',NULL,NULL);
 #===================================================================
 # Garments
@@ -2169,15 +2169,15 @@ REPLACE INTO `item_db_re` VALUES (2940,'Ninja_Manual','Ninja Manual',4,0,NULL,10
 REPLACE INTO `item_db_re` VALUES (2941,'Gunslinger_Manual','Gunslinger Manual',4,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2942,'Taekwon_Manual','Taekwon Manual',4,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2943,'Critical_Ring_','Critical Ring',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,NULL,0,NULL,'bonus bCritical,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2944,'TE_Ring_Of_Protection','TE Ring Of Protection',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'40',0,NULL,'bonus bMaxHP,100; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2945,'TE_Ring_Of_Rage','TE Ring Of Rage',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'40',0,NULL,'bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2946,'TE_Ring_Of_Defiance','TE Ring Of Defiance',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'40',0,NULL,'bonus bMdef,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2944,'TE_Ring_Of_Protection','TE Ring Of Protection',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'40',0,NULL,'bonus bMaxHP,100; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2945,'TE_Ring_Of_Rage','TE Ring Of Rage',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'40',0,NULL,'bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2946,'TE_Ring_Of_Defiance','TE Ring Of Defiance',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'40',0,NULL,'bonus bMdef,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2948,'Demon_Wing','Demon Wing',4,10,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'70',NULL,NULL,'bonus bFlee,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2949,'Silversmith_Bracelet','Silversmith Bracelet',4,10,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,'60',NULL,NULL,'bonus bAllStats,1; bonus bMdef,3; skill "SA_SPELLBREAKER",5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2950,'Rune_Ring','Rune Ring',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'1',0,NULL,'bonus2 bExpAddClass,Class_Normal,10;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2951,'Kvasir_Ring_Blue','Kvasir Ring Blue',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'1',0,NULL,'bonus bMaxSP,30; skill "ECL_SNOWFLIP",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2952,'Kvasir_Ring_Red','Kvasir Ring Red',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'1',0,NULL,'bonus bMaxSP,30; skill "ECL_PEONYMAMY",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2953,'Kvasir_Ring_Green','Kvasir Ring Green',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,1,'1',0,NULL,'bonus bMaxHP,100; skill "ECL_SADAGUI",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2950,'Rune_Ring','Rune Ring',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bExpAddClass,Class_Normal,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2951,'Kvasir_Ring_Blue','Kvasir Ring Blue',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus bMaxSP,30; skill "ECL_SNOWFLIP",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2952,'Kvasir_Ring_Red','Kvasir Ring Red',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus bMaxSP,30; skill "ECL_PEONYMAMY",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2953,'Kvasir_Ring_Green','Kvasir Ring Green',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus bMaxHP,100; skill "ECL_SADAGUI",1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2954,'Kvasir_Ring_Brown','Kvasir Ring Brown',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',NULL,NULL,'bonus bMaxHP,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2956,'Safety_Ring_','Advanced Safety Ring',4,75000,NULL,100,NULL,10,NULL,1,0xFFFFFFFE,63,2,136,NULL,'50',0,0,'bonus bMdef,5; bonus bAllStats,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2957,'Good_Ring_Of_Flame_Lord','Advanced Ring Of Flame Lord',4,20,NULL,100,NULL,0,NULL,0,0x7CCFDF80,63,2,136,NULL,'85',0,0,'bonus bStr,3; bonus bVit,2; bonus bBaseAtk,20; bonus2 bSubEle,Ele_Fire,10; bonus3 bAutoSpell,"CH_SOULCOLLECT",1,30; bonus3 bAutoSpell,"MO_EXPLOSIONSPIRITS",1,10; bonus3 bAutoSpell,"PA_PRESSURE",2,30; bonus3 bAutoSpell,"MG_FIREBALL",1,150; bonus3 bAutoSpell,"KN_BOWLINGBASH",5,20;',NULL,NULL);
@@ -2210,7 +2210,7 @@ REPLACE INTO `item_db_re` VALUES (2992,'Pendant_of_Maelstrom','Pendant of Maelst
 REPLACE INTO `item_db_re` VALUES (2995,'Supplement_Part_Dex','Supplement Part Dex',4,25000,NULL,100,NULL,0,NULL,1,0x00000400,56,2,136,NULL,'100',0,0,'bonus bUseSPrate,-10; bonus bDelayrate,-10; bonus bVariableCastrate,-10; bonus2 bSkillVariableCast,"NC_AXEBOOMERANG",-2000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2996,'Reinforced_Parts_Gun_Barrel','Reinforced Parts - Gun Barrel',4,10,NULL,500,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'100',NULL,NULL,'bonus2 bAddClass,Class_All,4; bonus bHit,10; bonus2 bSkillAtk,"NC_BOOSTKNUCKLE",25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2997,'RWC_Gold_Brooch','RWC Gold Brooch',4,10,NULL,200,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'0',0,NULL,'bonus bBaseAtk,25; bonus bMatk,20;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2998,'Shining_Trapezohedron','Shining Trapezohedron',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,1,'90',1,NULL,'bonus2 bSubEle,Ele_Holy,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2998,'Shining_Trapezohedron','Shining Trapezohedron',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'90',1,NULL,'bonus2 bSubEle,Ele_Holy,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2999,'RWC_Brooch','RWC Brooch',4,10,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,NULL,'bonus bMaxHP,300; bonus bMaxSP,30;',NULL,NULL);
 #===================================================================
 # Cards
@@ -3150,6 +3150,12 @@ REPLACE INTO `item_db_re` VALUES (4947,'Thrift3','Economy Lv3',6,10,NULL,0,NULL,
 REPLACE INTO `item_db_re` VALUES (4948,'Skill_Delay1','After Skill Delay Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4949,'Skill_Delay2','After Skill Delay Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4950,'Skill_Delay3','After Skill Delay Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-6;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4994,'Rune_of_Strength_Lv_1','Rune of Strength Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,5; } if (.@r>=10) { bonus bAtkRate,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4995,'Rune_of_Strength_Lv_2','Rune of Strength Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,6; } if (.@r>=11) { bonus bStr,1; bonus bAtkRate,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4996,'Rune_of_Strength_Lv_3','Rune of Strength_Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,7; } if (.@r>=12) { bonus bStr,1; bonus bAtkRate,8; } if (.@r>=13) { bonus bStr,1; bonus bAtkRate,2; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4997,'Rune_of_Agility_Lv_1','Rune of Agility Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bAgi,5; } if (.@r>=10) { bonus bFlee2,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4998,'Rune_of_Agility_Lv_2','Rune of Agility Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bAgi,6; } if (.@r>=11) { bonus bAgi,1; bonus bFlee2,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4999,'Rune_of_Agility_Lv_3','Rune of Agility Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bAgi,7; } if (.@r>=12) { bonus bAgi,1; bonus bFlee2,5; } if (.@r>=13) { bonus bAgi,1; bonus bFlee2,5; }',NULL,NULL);
 #===================================================================
 # More Headgears
 #===================================================================
@@ -4032,23 +4038,23 @@ REPLACE INTO `item_db_re` VALUES (5893,'RCC2013_2ND_CROWN','RCC2013 2ND CROWN',4
 REPLACE INTO `item_db_re` VALUES (5894,'RCC2013_3RD_CROWN','RCC2013 3RD CROWN',4,20,NULL,2500,NULL,7,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',0,1108,'bonus bAllStats,3; skill "AL_TELEPORT",1;','sc_start SC_SPEEDUP0,-1,25;','sc_end SC_SPEEDUP0;');
 REPLACE INTO `item_db_re` VALUES (5895,'RCC2013_ANV_Hat','RCC2013 ANV Hat',4,20,NULL,2500,NULL,7,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',0,1109,'bonus bAllStats,1; bonus2 bAddClass,Class_All,2; bonus bMatkRate,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5906,'Oni_Horns_','Oni Horns',4,0,NULL,20,NULL,10,NULL,1,0x00001000,63,2,256,NULL,'100',1,1127,'bonus2 bSkillAtk,"GC_COUNTERSLASH",(10*getskilllv("GC_WEAPONBLOCKING")); .@r = getrefine(); if(.@r > 6){ bonus bAtk,20; bonus bHit,5; } if(.@r > 9){ bonus3 bAutoSpell,"GC_CROSSIMPACT",1,10; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5914,'C_Flutter_Butterfly','C Flutter Butterfly',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,1,'1',0,1378,'hateffect HAT_EF_FLUTTER_BUTTERFLY,true;',NULL,'hateffect HAT_EF_FLUTTER_BUTTERFLY,false;');
-REPLACE INTO `item_db_re` VALUES (5917,'Yellow_Scarf','Yellow Scarf',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,0,'90',0,1170,'bonus bLongAtkDef,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5914,'C_Flutter_Butterfly','C Flutter Butterfly',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1378,'hateffect HAT_EF_FLUTTER_BUTTERFLY,true;',NULL,'hateffect HAT_EF_FLUTTER_BUTTERFLY,false;');
+REPLACE INTO `item_db_re` VALUES (5917,'Yellow_Scarf','Yellow Scarf',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'90',0,1170,'bonus bLongAtkDef,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5918,'Gambler_Seal','Gambler Seal',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,NULL,0,1202,'bonus bCritical,3; bonus bCritAtkRate,3; bonus2 bSubSkill,"RA_ARROWSTORM",10; bonus2 bSubSkill,"SR_GATEOFHELL",10; .@dex = readparam(bDex); .@luk = readparam(bLuk); bonus bCritAtkRate,-(.@dex/10)*2; bonus bCritical,.@luk/10; bonus bBaseAtk,(.@luk/10)*2; bonus bMatk,(.@luk/10)*2; if (.@luk > 120) { bonus bCritical,10; bonus bCritAtkRate,10; bonus2 bSubSkill,"RA_ARROWSTORM",30; bonus2 bSubSkill,"SR_GATEOFHELL",30; } else if (.@luk > 108) { bonus bCritical,5; bonus bCritAtkRate,10; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5919,'Camellia_Hair_Pin','Camellia Hair Pin',4,0,NULL,1000,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,256,0,'50',1,1203,'bonus bMdef,20; bonus3 bAutoSpell,"AL_PNEUMA",1,30+getrefine()*5; /* CONFIRM The Rate*/',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5919,'Camellia_Hair_Pin','Camellia Hair Pin',4,0,NULL,1000,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,1203,'bonus bMdef,20; bonus3 bAutoSpell,"AL_PNEUMA",1,30+getrefine()*5; /* CONFIRM The Rate*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5920,'Medical_Boots','Medical Boots',4,0,NULL,300,NULL,10,NULL,0,0xFFFFFFFF,63,2,64,NULL,'10',1,NULL,'.@r = getrefine(); bonus bHealPower,10+((.@r/2) * 2); bonus2 bSkillUseSP,"AB_CHEAL",(.@r * 5);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5943,'Owlviscount_Silk_Hat','Owl Viscount Silk Hat',4,0,NULL,500,NULL,15,NULL,1,0xFFFFFFFF,63,2,256,0,'70',1,1323,'bonus bInt,1; bonus bAspdRate,10; .@r = getrefine(); bonus bMatk,7*.@r; autobonus "{ .@r = getrefine(); bonus bAspdRate,(.@r >= 9 ? 40 : ((.@r >= 7) ? 10 : ((.@r >= 5) ? 5 : 1))); }",.@r*20,30000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }";',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5966,'KarduiEar','KarduiEar',4,0,NULL,300,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,0,'70',0,1357,'.@dex = readparam(bDex); bonus bMatk,(.@dex > 10) ? .@dex/10*2 : 0; if (.@dex > 107) { bonus bVariableCastrate,-10; bonus bMatk,60; } if (.@dex > 119) { bonus bVariableCastrate,-5; bonus bMatk,100; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5967,'Flying Galapago','Flying Galapago',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,0,'110',0,1358,'bonus bAgi,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*40;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5968,'DVAngelNurseCap','DVAngelNurseCap',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,0,'50',1,1359,'if (BaseClass == Job_Acolyte) bonus bHealPower,3; bonus bNoCastCancel,1; .@r = getrefine(); bonus bHealPower,(.@r > 8) ? 12 : ((.@r > 6) ? 9 : ((.@r > 4) ? 6 : 0));',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5969,'QueenAnzRevenge','QueenAnzRevenge',4,0,NULL,400,NULL,7,NULL,1,0xFFFFFFFF,63,2,256,0,'100',1,1360,'bonus bStr,5; .@r = getrefine(); bonus2 bAddClass,Class_All,7+(.@r > 8 ? 4 : (.@r > 6 ? 3 : (.@r > 4 ? 2 : 0))); bonus bNoSizeFix,1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5971,'Moon_Eyepatch','Moon Eyepatch',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,512,0,'10',0,1370,'bonus2 bSubEle,Ele_Water,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5972,'Chatty_Parrot','Chatty Parrot',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,0,'80',0,1116,'bonus bMatkRate,BaseLevel/50; bonus bVariableCast,-readparam(bInt)/30;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5973,'Ancient_Elven_Ear_J','Ancient Elven Ear J',4,0,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,0,'70',0,665,'bonus bLuk,10; bonus bMdef,10; bonus bFlee2,2;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5978,'Syringe_Toy','Toy Syringe',4,0,NULL,100,NULL,3,NULL,0,0xFFFFFFFF,63,2,1,1,'70',0,842,'bonus bMdef,3; bonus2 bAddItemHealRate,545,150; bonus2 bAddItemHealRate,546,150; bonus2 bAddItemHealRate,547,150;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5979,'C_Angel_Fluttering','C Angel Fluttering',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,0,'1',0,1380,'hateffect HAT_EF_ANGEL_FLUTTERING,true;',NULL,'hateffect HAT_EF_ANGEL_FLUTTERING,false;');
-REPLACE INTO `item_db_re` VALUES (5980,'C_Classical_Fhat','C Classical Fhat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,0,'1',0,1381,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5985,'Noble_Mask','Noble Mask',4,0,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,256,0,'30',0,1409,'bonus2 bSkillAtk,"PA_SACRIFICE",BaseLevel*2; bonus2 bSkillVariableCast,"PA_PRESSURE",-2000; bonus2 bSkillVariableCast,"CR_DEVOTION",-2000; if (BaseLevel > 149) { bonus bMaxHPrate,3; bonus bAspdRate,3; } else if (BaseLevel > 99) { bonus bMaxHPrate,2; bonus bAspdRate,2; } else { bonus bMaxHPrate,1; bonus bAspdRate,1; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5943,'Owlviscount_Silk_Hat','Owl Viscount Silk Hat',4,0,NULL,500,NULL,15,NULL,1,0xFFFFFFFF,63,2,256,NULL,'70',1,1323,'bonus bInt,1; bonus bAspdRate,10; .@r = getrefine(); bonus bMatk,7*.@r; autobonus "{ .@r = getrefine(); bonus bAspdRate,(.@r >= 9 ? 40 : ((.@r >= 7) ? 10 : ((.@r >= 5) ? 5 : 1))); }",.@r*20,30000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }";',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5966,'KarduiEar','KarduiEar',4,0,NULL,300,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,'70',0,1357,'.@dex = readparam(bDex); bonus bMatk,(.@dex > 10) ? .@dex/10*2 : 0; if (.@dex > 107) { bonus bVariableCastrate,-10; bonus bMatk,60; } if (.@dex > 119) { bonus bVariableCastrate,-5; bonus bMatk,100; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5967,'Flying Galapago','Flying Galapago',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'110',0,1358,'bonus bAgi,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*40;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5968,'DVAngelNurseCap','DVAngelNurseCap',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,1359,'if (BaseClass == Job_Acolyte) bonus bHealPower,3; bonus bNoCastCancel,1; .@r = getrefine(); bonus bHealPower,(.@r > 8) ? 12 : ((.@r > 6) ? 9 : ((.@r > 4) ? 6 : 0));',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5969,'QueenAnzRevenge','QueenAnzRevenge',4,0,NULL,400,NULL,7,NULL,1,0xFFFFFFFF,63,2,256,NULL,'100',1,1360,'bonus bStr,5; .@r = getrefine(); bonus2 bAddClass,Class_All,7+(.@r > 8 ? 4 : (.@r > 6 ? 3 : (.@r > 4 ? 2 : 0))); bonus bNoSizeFix,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5971,'Moon_Eyepatch','Moon Eyepatch',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,512,NULL,'10',0,1370,'bonus2 bSubEle,Ele_Water,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5972,'Chatty_Parrot','Chatty Parrot',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'80',0,1116,'bonus bMatkRate,BaseLevel/50; bonus bVariableCast,-readparam(bInt)/30;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5973,'Ancient_Elven_Ear_J','Ancient Elven Ear J',4,0,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,'70',0,665,'bonus bLuk,10; bonus bMdef,10; bonus bFlee2,2;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5978,'Syringe_Toy','Toy Syringe',4,0,NULL,100,NULL,3,NULL,0,0xFFFFFFFF,63,2,1,NULL,'70',0,842,'bonus bMdef,3; bonus2 bAddItemHealRate,545,150; bonus2 bAddItemHealRate,546,150; bonus2 bAddItemHealRate,547,150;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5979,'C_Angel_Fluttering','C Angel Fluttering',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1380,'hateffect HAT_EF_ANGEL_FLUTTERING,true;',NULL,'hateffect HAT_EF_ANGEL_FLUTTERING,false;');
+REPLACE INTO `item_db_re` VALUES (5980,'C_Classical_Fhat','C Classical Fhat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1381,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5985,'Noble_Mask','Noble Mask',4,0,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',0,1409,'bonus2 bSkillAtk,"PA_SACRIFICE",BaseLevel*2; bonus2 bSkillVariableCast,"PA_PRESSURE",-2000; bonus2 bSkillVariableCast,"CR_DEVOTION",-2000; if (BaseLevel > 149) { bonus bMaxHPrate,3; bonus bAspdRate,3; } else if (BaseLevel > 99) { bonus bMaxHPrate,2; bonus bAspdRate,2; } else { bonus bMaxHPrate,1; bonus bAspdRate,1; }',NULL,NULL);
 #===================================================================
 # More Etc Items
 #===================================================================
@@ -4871,7 +4877,8 @@ REPLACE INTO `item_db_re` VALUES (6914,'Black_Horn','Black Horn',3,10,NULL,0,NUL
 REPLACE INTO `item_db_re` VALUES (6915,'Captured_Soul','Captured Soul',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6916,'Piece_Of_Soul_Monkey','Piece Of Soul Monkey',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6917,'Piece_Of_Soul_Chicken','Piece Of Soul Chicken',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6919,'Honor_Proof','Honor Proof',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6919,'Honor_Proof','Honor Token',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6920,'Rune_Magic_Powder','Rune Magic Powder',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6921,'Dehumidifiers','Dehumidifiers',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6922,'Sandpaper','Sandpaper',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6923,'Bright_Fire_Lights','Bright Fire Lights',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -6784,7 +6791,7 @@ REPLACE INTO `item_db_re` VALUES (12618,'Bgrade_Pocket','B Grade Coin Bag',2,20,
 REPLACE INTO `item_db_re` VALUES (12619,'Cgrade_Pocket','C Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Cgrade_Pocket);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12620,'Dgrade_Pocket','D Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Dgrade_Pocket);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12621,'Egrade_Pocket','E Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Egrade_Pocket);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12622,'Boarding_Halter','Reins Of Mount',11,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'setmounting();',NULL,'if (ismounting()) setmounting();');
+REPLACE INTO `item_db_re` VALUES (12622,'Boarding_Halter','Reins Of Mount',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'setmounting();',NULL,'if (ismounting()) setmounting();');
 REPLACE INTO `item_db_re` VALUES (12623,'High_Weapon_Box','Advanced Weapons Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Advanced_Weapons_Box,1);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12624,'Delicious_Jelly','Delicious Jelly',0,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'percentheal 3,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12625,'Sapa_Feat_Cert_Pack','Sapa Feat Cert Pack',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -6795,7 +6802,7 @@ REPLACE INTO `item_db_re` VALUES (12629,'Salamander_Scroll','Salamander Scroll',
 REPLACE INTO `item_db_re` VALUES (12630,'Teddy_Bear_Scroll','Teddy Bear Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'mercenary_create 2217,1800000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12631,'Macro_Stone_A','Macro Stone A',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12632,'Macro_Stone_B','Macro Stone B',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12633,'Malang_Cat_Can','Malangdo Cat Can',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus2 bExpAddRace,RC_All,10; }",1200; sc_start SC_ITEMBOOST,1200000,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12633,'Malang_Cat_Can','Malangdo Cat Can',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus2 bExpAddRace,RC_All,10; bonus2 bDropAddRace,RC_All,20; }",1200,1,0,SI_OVERLAPEXPUP;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12634,'Macro_Stone_A1','Macro Stone A1',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12635,'Macro_Stone_A2','Macro Stone A2',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12636,'Malang_Sp_Can','Malangdo Canned Specialties',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "malangdo",140,114;',NULL,NULL);
@@ -6839,8 +6846,8 @@ REPLACE INTO `item_db_re` VALUES (12673,'Lucky_Egg_C10','Lucky Egg C10',2,20,NUL
 REPLACE INTO `item_db_re` VALUES (12674,'God_Material_Box','God Material Box',2,20,NULL,500,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_God_Material_Box);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12675,'Sg_Weapon_Supply_Box','WoE Weapon Supply Box',2,20,NULL,500,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Sg_Weapon_Supply_Box);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12676,'Sg_Violet_Potion_Box','Siege Violet Potion Box',2,20,NULL,500,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 11547,50;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12677,'Siege_Arrow_Quiver_S','Siege Arrow Quiver S',2,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'130',NULL,NULL,'getitem 1776,200;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12678,'Siege_Arrow_Quiver_A','Siege Arrow Quiver A',2,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'95',NULL,NULL,'getitem 1775,200;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12677,'Siege_Arrow_Quiver_S','Siege Arrow Quiver S',2,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'130',NULL,NULL,'getitem 1775,200;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12678,'Siege_Arrow_Quiver_A','Siege Arrow Quiver A',2,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'95',NULL,NULL,'getitem 1776,200;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12679,'Sg_White_Potion_Box','Siege White Potion Box',2,20,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 11548,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12680,'Sg_Blue_Potion_Box','Siege Blue Potion Box',2,20,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 11549,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12681,'Nestea_Lemon','Nestea Lemon',2,0,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -7039,7 +7046,7 @@ REPLACE INTO `item_db_re` VALUES (12883,'Almighty','Almighty',2,20,NULL,10,NULL,
 REPLACE INTO `item_db_re` VALUES (12884,'Infinite_Concentration_Potion','Infinite Concentration Potion',11,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_ASPDPOTION0,1800000,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12885,'Infinite_Awakening_Potion','Infinite Awakening Potion',11,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_ASPDPOTION1,1800000,6;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12886,'Infinite_Berserk_Potion','Infinite Berserk Potion',11,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_ASPDPOTION2,1800000,9;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12887,'C_Wing_Of_Fly','Infinite Flywing',11,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'unitskilluseid getcharid(3),"AL_TELEPORT",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12887,'C_Wing_Of_Fly','Infinite Flywing',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'itemskill "AL_TELEPORT",1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12888,'Siege_Kit_Box','Siege Kit Box',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12889,'Weapon_Box_Spear','Weapon Box(Spear)',2,10,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12890,'Weapon_Box_Mace','Weapon Box(Mace)',2,10,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -7328,8 +7335,8 @@ REPLACE INTO `item_db_re` VALUES (13194,'Peace_Breaker','Peace Breaker',5,195000
 REPLACE INTO `item_db_re` VALUES (13195,'RAG203_','RAG203',5,1800000,NULL,1300,'260',NULL,9,0,0x40000000,63,2,34,3,'140',1,18,'bonus bHit,10; bonus bCriticalRate,15; bonus4 bAutoSpell,"AL_DECAGI",1,10,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (13196,'Peace_Breaker_','Peace Breaker',5,1950000,NULL,1400,'250',NULL,9,1,0x41000000,63,2,34,3,'140',1,20,'bonus bHit,-25; bonus bAspdRate,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (13197,'Mini_Mei','Mini Mei',5,1600000,NULL,2500,'220',NULL,9,2,0x41000000,63,2,34,2,'106',1,19,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (13198,'Tempest_','Tempest',5,2200000,NULL,2500,'250',NULL,9,0,0x41000000,63,2,34,2,'140',1,19,'bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (13199,'Tempest','Tempest',5,2200000,NULL,2500,'250',NULL,9,1,0x41000000,63,2,34,2,'140',1,19,'bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (13198,'Tempest_','Tempest',5,2200000,NULL,2500,'250',NULL,9,0,0x41000000,63,2,34,4,'140',1,19,'bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (13199,'Tempest','Tempest',5,2200000,NULL,2500,'250',NULL,9,1,0x41000000,63,2,34,4,'140',1,19,'bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;',NULL,NULL);
 #===================================================================
 # Bullets
 #===================================================================
@@ -8630,11 +8637,11 @@ REPLACE INTO `item_db_re` VALUES (15058,'Rider_Suit','Rider Suit',4,20,NULL,1000
 REPLACE INTO `item_db_re` VALUES (15059,'2011Love_Daddy','2011Love Daddy',4,20,NULL,100,'0',80,0,1,0xFFFFFFFF,63,2,16,NULL,'0',1,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15060,'Sky_Blue_Smock','Sky Blue Smock',4,20,NULL,300,'0',1,0,1,0xFFFFFFFF,63,2,16,NULL,'0',1,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15061,'Egir_Armor','Egir Armor',4,200000,NULL,2600,NULL,55,NULL,1,0xFFFFFFFF,63,2,16,NULL,'110',1,0,'bonus bAllStats,1; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus2 bResEff,Eff_Silence,5000; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus2 bResEff,Eff_Stun,5000;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (15062,'TE_Woe_Coat','TE Woe Coat',4,0,NULL,0,NULL,15,NULL,0,0xFFFFFFFF,63,2,16,0,'40',1,NULL,'bonus bMdef,15; bonus bMaxHP,250; bonus bMaxSP,250; bonus2 bSubRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (15063,'TE_Woe_Chain_Mail','TE Woe Chain Mail',4,0,NULL,0,NULL,25,NULL,0,0x000444A2,63,2,16,0,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,450; bonus bMaxSP,50; bonus2 bSubRace,RC_Player,15; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (15064,'TE_Woe_Mage_Coat','TE Woe Mage Coat',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,16,0,'40',1,NULL,'bonus bMdef,25; bonus bMaxHP,200; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (15062,'TE_Woe_Coat','TE Woe Coat',4,0,NULL,0,NULL,15,NULL,0,0xFFFFFFFF,63,2,16,NULL,'40',1,NULL,'bonus bMdef,15; bonus bMaxHP,250; bonus bMaxSP,250; bonus2 bSubRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (15063,'TE_Woe_Chain_Mail','TE Woe Chain Mail',4,0,NULL,0,NULL,25,NULL,0,0x000444A2,63,2,16,NULL,'40',1,NULL,'bonus bMdef,5; bonus bMaxHP,450; bonus bMaxSP,50; bonus2 bSubRace,RC_Player,15; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (15064,'TE_Woe_Mage_Coat','TE Woe Mage Coat',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,16,NULL,'40',1,NULL,'bonus bMdef,25; bonus bMaxHP,200; bonus bMaxSP,200; bonus2 bSubRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15066,'Engraved_Plate_Armor','Engraved Plate Armor',4,100000,NULL,3000,NULL,120,NULL,1,0x00004082,63,2,16,NULL,'150',1,NULL,'bonus bMdef,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (15067,'Rune_Suit','Rune Suit',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,16,0,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (15067,'Rune_Suit','Rune Suit',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,16,NULL,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15068,'Im_Angel\'s_Protection','Advanced Angelic Protection',4,10000,NULL,600,NULL,40,NULL,1,0x00000001,63,2,16,NULL,'99',1,0,'bonus bMdef,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15069,'Suit_Of_Sid','Suit Of Sid',4,20,NULL,1000,NULL,30,NULL,0,0xFFFFFFFF,63,2,16,NULL,'0',1,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (15070,'Clothes_of_Happiness','Clothes of Happiness',4,10,NULL,1000,NULL,5,NULL,1,0xFFFFFFFF,63,2,16,NULL,'1',1,NULL,'bonus bMdef,5; bonus bLuk,getrefine();',NULL,NULL);
@@ -9691,10 +9698,10 @@ REPLACE INTO `item_db_re` VALUES (18727,'Sedora_Hat','Sedora Hat',4,20,NULL,300,
 REPLACE INTO `item_db_re` VALUES (18728,'Egir_Helm','Egir Helm',4,200000,NULL,800,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'110',1,870,'bonus bMdef,5; bonus bUnbreakableHelm,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18729,'MVP_Basketball','MVP Basketball',4,20,NULL,150,NULL,6,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,871,'bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bAddItemHealRate,522,30; .@r = getrefine(); bonus bVariableCastrate,(.@r>=12)?(-5):((.@r>=10)?(-4):(-3));',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18730,'Cryptura_Academy_Hat','Cryptura Academy Hat',4,0,NULL,200,NULL,2,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,872,'bonus bMaxHP,15; bonus bMaxSP,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18732,'TE_Woe_Cap','TE Woe Cap',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,0,'40',1,14,'bonus bMdef,5; bonus bBaseAtk,5; bonus bMatk,5; bonus2 bAddRace,RC_Player,10; bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18733,'TE_Woe_Bone_Helm','TE Woe Bone Helm',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,256,0,'40',1,103,'bonus bBaseAtk,10; bonus2 bAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18734,'TE_Woe_Magic_Eyes','TE Woe Magic Eyes',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,256,0,'40',1,209,'bonus bMdef,5; bonus bMatk,10; bonus2 bMagicAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18736,'Censor_Bar_','Censor Bar',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,0,'1',0,229,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18732,'TE_Woe_Cap','TE Woe Cap',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,NULL,'40',1,14,'bonus bMdef,5; bonus bBaseAtk,5; bonus bMatk,5; bonus2 bAddRace,RC_Player,10; bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18733,'TE_Woe_Bone_Helm','TE Woe Bone Helm',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,256,NULL,'40',1,103,'bonus bBaseAtk,10; bonus2 bAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18734,'TE_Woe_Magic_Eyes','TE Woe Magic Eyes',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,256,NULL,'40',1,209,'bonus bMdef,5; bonus bMatk,10; bonus2 bMagicAddRace,RC_Player,20; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18736,'Censor_Bar_','Censor Bar',4,0,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,229,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18737,'Fortier_Mask','Fortier Masque',4,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'10',0,876,'bonus bUnbreakableHelm,1; bonus2 bMagicAtkEle,Ele_Fire,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18739,'Carnation_Hairband','Carnation Hairband',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,878,'bonus bLuk,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18740,'Hair_Of_The_Strong','RMSC2012 Special Costume',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,879,NULL,NULL,NULL);
@@ -9711,7 +9718,7 @@ REPLACE INTO `item_db_re` VALUES (18750,'Poker_Card_In_Mouth','Poker Card In Mou
 REPLACE INTO `item_db_re` VALUES (18752,'Cursed_Book','Cursed Book',4,20,NULL,300,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'99',1,890,'.@r = getrefine(); bonus2 bHPLossRate,.@r,5000; bonus2 bHPDrainRate,40,4+(.@r/2); bonus2 bSPDrainRate,10,1+(.@r/3);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18753,'Tw_Rice_Ball','Tw Rice Ball',4,20,NULL,100,NULL,6,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',0,892,'bonus bLuk,1; bonus2 bAddMonsterDropItem,564,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18754,'Blood_Sucker','Blood Sucker',4,20,NULL,300,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'40',0,893,'bonus bUnbreakableHelm,1; bonus2 bHPDrainRate,30,5; bonus bHPrecovRate,-100; bonus bSPrecovRate,-100;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18755,'Feather_Beret_','Feather Beret',4,0,NULL,600,NULL,1,NULL,1,0xFFFFFFFF,63,2,256,0,'1',1,224,'bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18755,'Feather_Beret_','Feather Beret',4,0,NULL,600,NULL,1,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,224,'bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18756,'Black_Shiba_Inu_Hat','Black Shiba Inu Hat',4,20,NULL,400,NULL,6,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,894,'bonus bBaseAtk,30; bonus2 bAddRace,RC_Brute,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18758,'Hat_Of_Scrat','Hat Of Scrat',4,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,896,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18759,'Stretched_Nose_M','Wood Goblin\'s Nose',4,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,737,'bonus bUnbreakableHelm,1; bonus2 bAddMonsterDropItem,1032,400; bonus2 bAddMonsterDropItem,1033,100; bonus3 bAddMonsterDropItem,576,RC_Plant,40;',NULL,NULL);
@@ -9791,7 +9798,7 @@ REPLACE INTO `item_db_re` VALUES (18861,'Zaha_Doll_J_Hat','Zaha Doll J Hat',4,10
 REPLACE INTO `item_db_re` VALUES (18863,'Exorcist_Robe','Exorcist Robe',4,10,NULL,1700,NULL,57,NULL,1,0xFFFFFFFF,63,2,16,NULL,'60',1,NULL,'bonus bMdef,5; .@r = getrefine(); if (.@r >= 3) { bonus2 bAddRace,RC_Undead,.@r/3*5; } if (BaseClass==Job_Acolyte) bonus2 bAddRace,RC_Undead,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18864,'Earth_Goddess_Flower','Earth Goddess Flower',4,10,NULL,250,NULL,6,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,864,'bonus2 bAddEle,Ele_Earth,15; skill "WZ_EARTHSPIKE",5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18865,'Sword_Master_Crown','Sword Master Crown',4,10,NULL,1000,NULL,30,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,981,'.@i = BaseLevel; bonus bBaseAtk,(.@i>150)?(15):((.@i>100)?(10):((.@i>50)?(5):(0))); if(getskilllv("SM_SWORD")==10) bonus bHit,10; if(getskilllv("SM_TWOHAND")==10) bonus bUseSPrate,-5; if(getskilllv("AM_AXEMASTERY")==10) bonus bVariableCastrate,-5; if(getskilllv("AS_KATAR")==10) bonus bCritAtkRate,20; if(getskilllv("PR_MACEMASTERY")==10) bonus bAspdRate,10;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18867,'Vajra','Vajra',4,0,NULL,300,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,0,'48',0,983,'bonus bDex,1; bonus bLongAtkRate,2;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18867,'Vajra','Vajra',4,0,NULL,300,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'48',0,983,'bonus bDex,1; bonus bLongAtkRate,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18868,'Assassin_Skull_Mask','Assassin Skull Mask',4,10,NULL,500,NULL,2,NULL,0,0xFFFFFFFF,63,2,513,NULL,'70',NULL,984,'bonus bCritical,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18870,'Very_Sweet_Candy_Bar','Very Sweet Candy Bar',4,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',1,446,'bonus bAllStats,2; bonus bBaseAtk,10; bonus bMatk,10; bonus2 bExpAddClass,Class_All,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18871,'Very_Sweet_Candy','Very Sweet Candy',4,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',1,446,'bonus bAllStats,1; bonus bBaseAtk,5; bonus bMatk,5;',NULL,NULL);
@@ -9860,7 +9867,7 @@ REPLACE INTO `item_db_re` VALUES (19019,'Elemental_Crown','Elemental Crown',4,0,
 REPLACE INTO `item_db_re` VALUES (19020,'Survive_Circlet','Survive Circlet',4,0,NULL,500,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,NULL,1,1220,'.@r = getrefine(); bonus bInt,(3 + (.@r/2)+ (BaseLevel > 130 ? .@r : 0)); bonus bMatkRate,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19021,'Gigant_Helm','Gigant Helm',4,0,NULL,500,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,NULL,1,1221,'bonus bStr,3+((BaseLevel > 130) ? getrefine() : 0); bonus2 bAddClass,Class_All,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19022,'Floating_Stone_Of_Intelligence','Floating Stone Of Intelligence',4,NULL,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,NULL,NULL,1230,NULL,'sc_start SC_FSTONE,-1,0;','sc_end SC_FSTONE;');
-REPLACE INTO `item_db_re` VALUES (19024,'Protect_Feathers','Protect Feathers',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,0,'70',0,1232,'bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19024,'Protect_Feathers','Protect Feathers',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,'70',0,1232,'bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19026,'Aegir_Helm','Aegir Helm',4,10,NULL,800,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'40',1,870,'bonus bVit,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19030,'Pretty_Rabbit_Hood','Pretty Rabbit Hood',4,10,NULL,100,NULL,20,NULL,1,0xFFFFFFFF,63,2,769,NULL,'1',1,1085,'bonus bMaxHP,(15*BaseLevel);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19031,'Fallen_Angel_Blessing','Fallen Angel Blessing',4,0,NULL,200,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,NULL,1,1250,'bonus2 bAddRace,RC_Angel,5; bonus2 bSubRace,RC_Angel,5;',NULL,NULL);
@@ -9872,7 +9879,7 @@ REPLACE INTO `item_db_re` VALUES (19048,'Elemental_Clothe','Elemental Clothes',4
 REPLACE INTO `item_db_re` VALUES (19051,'Warrior_Moon_Cat','Warrior Moon Cat',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,1308,'/*Enables use of Level 1 Monster\'s Cry*/ bonus bAllStats,3; bonus2 bHPDrainRate,40,5; bonus2 bSPDrainRate,10,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19052,'Sigruns_Wing','Rental Sigrun\'s Wing',4,10,NULL,0,NULL,2,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,568,'if (Class == Job_Swordman || Class == Job_Thief || Class == Job_Merchant || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Star_Gladiator2) bonus bAspd,1; else if (Class == Job_Mage || Class == Job_Acolyte || Class == Job_Ninja || Class == Job_Soul_Linker) { bonus bMatk,5; bonus bHealPower,2; } else if (Class == Job_Archer || Class == Job_Gunslinger) bonus bLongAtkRate,2; else if (Class == Job_Novice || Class == Job_SuperNovice) { bonus bMaxHP,120; bonus bMaxSP,60; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19053,'Fighter_Moon_Cat','Fighter Moon Cat',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,1308,'/*Enables use of Level 1 Monster\'s Cry*/ .@r = getrefine(); bonus bAllStats,3; bonus2 bAddEff,Eff_Stun,500+(.@r*100);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (19082,'Bio_Protector','Bio Protector',4,0,NULL,500,NULL,3,NULL,0,0xFFFFFFFF,63,2,512,1,'50',1,1366,'bonus bHit,10; bonus bVariableCastrate,-5; bonus bPerfectHitRate,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19082,'Bio_Protector','Bio Protector',4,0,NULL,500,NULL,3,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',1,1366,'bonus bHit,10; bonus bVariableCastrate,-5; bonus bPerfectHitRate,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19083,'Mask_of_Hero','Mask of Hero',4,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'70',0,1367,'bonus bVit,10; bonus bMdef,10; bonus bShortWeaponDamageReturn,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19084,'Parfaille_Vigilante_Hat','Parfaille Vigilante Hat',4,0,NULL,100,NULL,2,NULL,0,0x80000000,63,2,256,NULL,'20',1,1368,'bonus bLuk,1; bonus3 bAutoSpell,"AL_BLESSING",3,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19085,'Sigrun\'s_Wings_','Sigrun\'s Wings',4,20,NULL,100,NULL,2,NULL,1,0xFFFFFFFF,63,2,512,NULL,'1',0,568,'if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) { bonus bAspd,1; bonus bAgi,-2; } else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||Class==Job_Ninja||Class==Job_Soul_Linker){ bonus bMatk,3; bonus bHealPower,2; } else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bLongAtkRate,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,60; bonus bMaxSP,30; }',NULL,NULL);
@@ -9886,9 +9893,9 @@ REPLACE INTO `item_db_re` VALUES (19092,'Machoman_Glasses_','Machoman\'s Glasses
 REPLACE INTO `item_db_re` VALUES (19093,'Spinning_Eyes_','Geek Glasses',4,20000,NULL,100,NULL,1,NULL,1,0xFFFFFFFF,63,2,512,NULL,'0',0,27,'bonus2 bResEff,Eff_Blind,800;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19094,'Mr_Smile_','Mr. Smile',4,60,NULL,100,NULL,1,NULL,1,0xFFFFFFFF,63,2,513,NULL,'0',0,65,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19095,'Happy_Balloon','Happy Balloon',4,0,NULL,10,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',0,1289,'bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (19109,'Valhalla_Idol','Valhalla Idol',4,0,NULL,300,NULL,2,NULL,0,0xFFFFFFFF,63,2,512,0,'70',0,1423,'bonus bMaxSP,50; bonus3 bAutoSpell,"MG_SAFETYWALL",10,50;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (19111,'Laser_Of_Eagle','Laser of Eagle',4,0,NULL,400,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,0,'100',1,1424,'bonus bDex,2; bonus bLongAtkRate,10; bonus4 bAutoSpell,"PR_LEXAETERNA",1,50,BF_LONG; /*TODO: Chance to transform become Shechil while attacking.*/',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (19116,'Red_Baby_Dragon','Red Baby Dragon',4,0,NULL,700,NULL,NULL,1,1,0xFFFFFFFF,63,2,256,0,'90',1,1463,'.@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; if (.@r>=6) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } if (.@r>=8) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19109,'Valhalla_Idol','Valhalla Idol',4,0,NULL,300,NULL,2,NULL,0,0xFFFFFFFF,63,2,512,NULL,'70',0,1423,'bonus bMaxSP,50; bonus3 bAutoSpell,"MG_SAFETYWALL",10,50;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19111,'Laser_Of_Eagle','Laser of Eagle',4,0,NULL,400,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'100',1,1424,'bonus bDex,2; bonus bLongAtkRate,10; bonus4 bAutoSpell,"PR_LEXAETERNA",1,50,BF_LONG; /*TODO: Chance to transform become Shechil while attacking.*/',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19116,'Red_Baby_Dragon','Red Baby Dragon',4,0,NULL,700,NULL,NULL,1,1,0xFFFFFFFF,63,2,256,NULL,'90',1,1463,'.@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; if (.@r>=6) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } if (.@r>=8) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19117,'Poring_Sunglasses','Poring Sunglasses',4,0,NULL,10,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,954,'bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19118,'Poring_Sunglasses_','Poring Sunglasses',4,0,NULL,10,NULL,0,NULL,1,0xFFFFFFFF,63,2,512,NULL,'1',0,954,'bonus2 bDropAddRace,RC_All,4; bonus2 bExpAddRace,RC_All,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19126,'Shadow_Booster_','Magical Booster',4,10,NULL,300,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,512,NULL,'1',1,873,'bonus bAspd,1; bonus bDelayrate,-1;',NULL,NULL);
@@ -10421,7 +10428,7 @@ REPLACE INTO `item_db_re` VALUES (20095,'C_Red_Ribbon','Costume Red Ribbon',4,0,
 REPLACE INTO `item_db_re` VALUES (20096,'C_Blue_Ribbon','Costume Blue Ribbon',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,441,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20097,'C_White_Ribbon','Costume White Ribbon',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,442,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20098,'C_Vampire_Hairband','Costume Vampire Hairband',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1238,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20099,'C_Ljosalfar','Flying Ljosalfar',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1239,NULL,'sc_start SC_LJOSALFAR,-1,0;','sc_end SC_LJOSALFAR;');
+REPLACE INTO `item_db_re` VALUES (20099,'C_Ljosalfar','Flying Ljosalfar',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1239,NULL,'sc_start SC_LJOSALFAR,-1,0;','sc_end SC_LJOSALFAR;');
 REPLACE INTO `item_db_re` VALUES (20100,'C_Volume_Fhat','Costume Volume Fhat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1240,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20101,'C_Bragi_Wing_Ears','Costume Bragi Wing Ears',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1241,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20102,'C_Horse_King_J','Costume Horse King J',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,7168,NULL,'1',1,1189,NULL,NULL,NULL);
@@ -10437,9 +10444,9 @@ REPLACE INTO `item_db_re` VALUES (20111,'C_Coiledup_Snake_Hat2','Costume Coiledu
 REPLACE INTO `item_db_re` VALUES (20112,'C_Aqua_Ten_Gallon_Hat','Costume Aqua Ten Gallon Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1256,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20113,'C_Star_Reading_Hat','Costume Star Reading Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1253,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20114,'C_Funeral_Hat','Costume Funeral Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,77,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20115,'C_Under_Rim_Glasses','Under Rim Glasses',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,1,'1',1,1255,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20116,'C_Mermaid_Headphone','Mermaid Headphone',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,1,'1',1,1254,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20117,'C_Raspberry_Mousse_Hat','Raspberry Mousse Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1257,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20115,'C_Under_Rim_Glasses','Under Rim Glasses',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1255,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20116,'C_Mermaid_Headphone','Mermaid Headphone',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1254,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20117,'C_Raspberry_Mousse_Hat','Raspberry Mousse Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1257,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20118,'C_Cake_Hat','Costume Cake Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,109,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20119,'C_Beanie','Costume Beanie',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,160,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20120,'C_Aerial','Costume Aerial',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,97,NULL,NULL,NULL);
@@ -10540,9 +10547,9 @@ REPLACE INTO `item_db_re` VALUES (20214,'C_Evil_Marcher_Hat_J','Costume Evil Mar
 REPLACE INTO `item_db_re` VALUES (20215,'C_Black_Devil_Mask','Costume Black Devil Mask',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,760,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20216,'C_Rideword_Hat','Costume Rideword Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,890,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20217,'C_Arabian_Veil','Costume Arabian Veil',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1300,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20218,'C_Spell_Circuit','Costume Spell Circuit',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1301,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20218,'C_Spell_Circuit','Costume Spell Circuit',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1301,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20219,'C_Angel_Marcher_Hat','Costume Angel Marcher Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1302,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20220,'C_Dark_Night_Veil','Costume Dark Night Veil',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,3072,1,'1',1,1303,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20220,'C_Dark_Night_Veil','Costume Dark Night Veil',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',1,1303,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20221,'C_Eyes_Of_Ifrit','C Eyes Of Ifrit',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,886,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20222,'C_Blue_Pigtail_Santa_Hat','Costume Blue Pigtail Santa Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,NULL,1,395,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20223,'C_Romantic_Leaf','Costume Romantic Leaf',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,57,NULL,NULL,NULL);
@@ -10626,8 +10633,8 @@ REPLACE INTO `item_db_re` VALUES (20311,'C_Magical_Booster','Costume Magical Boo
 REPLACE INTO `item_db_re` VALUES (20312,'C_Barons_Evil_Eye','Costume Baron\'s Evil Eye',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,989,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20313,'C_CD_in_Mouth','Costume CD in Mouth',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,815,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20314,'C_New_Wave_Sunglasses','Costume New Wave Sunglasses',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,856,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20315,'C_Analyze_Eye','Costume Analyze Eye',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,1,'1',1,1351,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20316,'C_Seraph_Wing_Helm','Costume Seraph Wing Helm',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1352,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20315,'C_Analyze_Eye','Costume Analyze Eye',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,1351,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20316,'C_Seraph_Wing_Helm','Costume Seraph Wing Helm',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1352,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20317,'C_Nekomimi_Cyber_Headphone','Costume Nekomimi Cyber Headphone',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1353,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20318,'C_Charleston_Antenna','Costume Charleston Antenna',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1354,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20319,'C_Crimson_Booster','Costume Crimson Booster',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1355,NULL,NULL,NULL);
@@ -10635,8 +10642,8 @@ REPLACE INTO `item_db_re` VALUES (20320,'C_Red_Bandana','Costume Red Bandana',4,
 REPLACE INTO `item_db_re` VALUES (20321,'C_Pterios_Fins','Costume Pterios Fins',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1009,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20322,'C_Seal_Hat','Costume Seal Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,540,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20323,'C_Sparkling_Sound','Costume Sparkling Sound',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,1074,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20324,'C_Pigeon_Hat','Costume Pigeon Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1362,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20325,'C_Little_Aquarium','Costume Little Aquarium',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,1,'1',1,1363,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20324,'C_Pigeon_Hat','Costume Pigeon Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1362,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20325,'C_Little_Aquarium','Costume Little Aquarium',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1363,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20326,'C_Sailor_Collar','Costume Sailor Collar',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,1364,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20327,'C_Marine_Cap','Costume Marine Cap',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1365,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20328,'C_Mackerel_Pike','Costume Mackerel Pike',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',1,1081,NULL,NULL,NULL);
@@ -10778,12 +10785,12 @@ REPLACE INTO `item_db_re` VALUES (20509,'C_Wings_of_Uriel','Costume Wings of Uri
 REPLACE INTO `item_db_re` VALUES (20510,'C_SwordWing','Costume Sword Wing',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,19,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20600,'Fantastic_Aura','Fantastic Aura',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,0,'/*TODO: View ID*/ bonus bUnbreakableHelm,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20700,'Egir_Manteau','Egir Manteau',4,200000,NULL,300,NULL,10,NULL,1,0xFFFFFFFF,63,2,4,NULL,'110',1,0,'bonus bUnbreakableGarment,1; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20702,'TE_Woe_Muffler','TE Woe Muffler',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,4,1,'40',1,NULL,'bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20703,'TE_Woe_Manteau','TE Woe Manteau',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,4,1,'40',1,NULL,'bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20704,'TE_Woe_Magic_Manteau','TE Woe Magic Manteau',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,4,1,'40',1,NULL,'bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20702,'TE_Woe_Muffler','TE Woe Muffler',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,4,NULL,'40',1,NULL,'bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20703,'TE_Woe_Manteau','TE Woe Manteau',4,0,NULL,0,NULL,10,NULL,0,0x000444A2,63,2,4,NULL,'40',1,NULL,'bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20704,'TE_Woe_Magic_Manteau','TE Woe Magic Manteau',4,0,NULL,0,NULL,5,NULL,0,0x00818315,63,2,4,NULL,'40',1,NULL,'bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20706,'Amistr_Bag','Amistr Bag',4,10,NULL,500,NULL,18,NULL,0,0xFFFFFFFF,63,2,4,NULL,'1',NULL,4,'bonus bAllStats,1; bonus2 bSubEle,Ele_All,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20707,'Kirin_Wing','Kirin Wing',4,20,NULL,0,NULL,18,NULL,0,0xFFFFFFFF,63,2,4,NULL,'0',1,6,'bonus bAllStats,1; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20709,'Mana_Manteau','Mana Manteau',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4,0,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20709,'Mana_Manteau','Mana Manteau',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4,NULL,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20710,'Impr_Angel\'s_Warmth','Advanced Angelic Cardigan',4,10000,NULL,400,NULL,6,NULL,1,0x00000001,63,2,4,NULL,'99',1,0,'bonus bHPrecovRate,50;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20711,'Manteau_Of_Diego','Manteau Of Diego',4,20,NULL,600,NULL,15,NULL,1,0xFFFFFFFF,63,2,4,NULL,'0',1,0,'bonus bInt,1; bonus bDex,1; bonus bMdef,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20717,'Gigant_Snake_Skin','Gigant Snake Skin',4,10,NULL,400,NULL,38,NULL,0,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'bonus bMdef,10;',NULL,NULL);
@@ -10801,7 +10808,7 @@ REPLACE INTO `item_db_re` VALUES (20744,'Tarlock\'s_Cloak','Tarlock\'s Cloak',4,
 REPLACE INTO `item_db_re` VALUES (20746,'C_Rudra_Wings','Costume Rudra Wings',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,8,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20748,'Cloak_Of_Casualties','Cloak Of Casualties',4,10,NULL,600,NULL,20,NULL,0,0xFFFFFFFF,63,2,4,NULL,'120',1,NULL,'.@r = getrefine(); bonus bAgi,5; bonus bFlee,10; if(readparam(bStr)>=90) bonus bBaseAtk,10+(.@r*2); if(readparam(bInt)>=90) bonus bMatk,20+(.@r*3); if(readparam(bVit)>=90) bonus2 bSubEle,Ele_Neutral,3+((.@r>=8)?3:0)+((.@r>=10)?4:0); if(readparam(bAgi)>=90){ bonus bAspdRate,3+(.@r/2); bonus bAspd,((.@r>=10)?1:0); } if(readparam(bDex)>=90) bonus bLongAtkRate,3+(.@r/2); if(readparam(bLuk)>=90) bonus bCriticalRate,5+.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20749,'Cloak_Of_Casualties_','Cloak Of Casualties',4,10,NULL,600,NULL,30,NULL,1,0xFFFFFFFF,63,2,4,NULL,'170',1,NULL,'.@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bAgi,5; bonus bFlee,10; if(readparam(bStr)>=90) bonus bBaseAtk,10+(.@r*2); if(readparam(bInt)>=90) bonus bMatk,20+(.@r*3); if(readparam(bVit)>=90) bonus2 bSubEle,Ele_Neutral,3+((.@r>=8)?3:0)+((.@r>=10)?4:0); if(readparam(bAgi)>=90){ bonus bAspdRate,3+(.@r/2); bonus bAspd,((.@r>=10)?1:0); } if(readparam(bDex)>=90) bonus bLongAtkRate,3+(.@r/2); if(readparam(bLuk)>=90) bonus bCriticalRate,5+.@r;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20753,'Lian_Robe','Lian Robe',4,0,NULL,700,NULL,20,1,1,0xFFFFFFFF,63,2,4,0,'65',1,NULL,'bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20753,'Lian_Robe','Lian Robe',4,0,NULL,700,NULL,20,1,1,0xFFFFFFFF,63,2,4,NULL,'65',1,NULL,'bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubRace,RC_Formless,-5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20756,'Aegir_Cloak','Aegir Cloak',4,10,NULL,300,NULL,10,NULL,1,0xFFFFFFFF,63,2,4,NULL,'40',1,NULL,'bonus bUnbreakableGarment,1; bonus bMaxHP,500; bonus bMaxSP,50;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20761,'C_Happiness_Wings','Costume Happiness Wings',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,9,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20762,'C_Great_Devil_Wings','Costume Great Devil Wings',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,10,NULL,NULL,NULL);
@@ -10811,12 +10818,12 @@ REPLACE INTO `item_db_re` VALUES (20779,'Rift_Manteau','Rift Manteau',4,20,NULL,
 REPLACE INTO `item_db_re` VALUES (20780,'Unity_STR_Manteau','Unity STR Manteau',4,32000,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bMaxHPrate,2*(.@r/2); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20781,'Unity_AGI_Manteau','Unity AGI Manteau',4,32000,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bFlee,3*(.@r/2); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20782,'Unity_INT_Muffler','Unity INT Muffler',4,32000,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bUseSPrate,-(.@r/2); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20783,'Hero_Cape','Hero Cape',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,4,1,'10',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,1+(.@r/3); bonus bFlee,1+(.@r/3); if (.@r > 9) { bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20783,'Hero_Cape','Hero Cape',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,4,NULL,'10',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,1+(.@r/3); bonus bFlee,1+(.@r/3); if (.@r > 9) { bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20787,'Unity_Exquisite_Muffler','Unity Exquisite Muffler',4,32000,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bCritical,2*(.@r/2); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20788,'Private_Doram_Manteau','Private Doram Manteau',4,20,NULL,300,NULL,20,NULL,1,0x80000000,7,2,4,NULL,'100',1,NULL,'bonus bFlee,5; bonus2 bSubEle,Ele_Neutral,2; bonus bFlee2,getrefine()/3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20789,'Luxury_Doram_Manteau','Luxury Doram Manteau',4,20,NULL,400,NULL,25,NULL,1,0x80000000,7,2,4,NULL,'140',1,NULL,'bonus bFlee,7; bonus2 bSubEle,Ele_Neutral,3; .@r = getrefine()/3; bonus bFlee2,.@r; bonus bLuk,.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20790,'Elegant_Doram_Manteau','Elegant Doram Manteau',4,20,NULL,500,NULL,30,NULL,1,0x80000000,7,2,4,NULL,'175',1,NULL,'bonus bFlee,10; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine()/2; bonus bFlee2,.@r; bonus bInt,.@r; bonus bDex,.@r; bonus bLuk,.@r;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20797,'Etran_Shirt','Etran Shirt',4,0,NULL,150,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,4,1,'1',1,NULL,'bonus bMdef,10; bonus bMaxHPrate,2; .@r = getrefine(); if (.@r >= 6) bonus bMaxHPrate,4; if (.@r >= 7) bonus bMaxHPrate,6; if (.@r >= 8) bonus bMaxHPrate,8; if (.@r >= 9) bonus bNoKnockback,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20797,'Etran_Shirt','Etran Shirt',4,0,NULL,150,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,NULL,'bonus bMdef,10; bonus bMaxHPrate,2; .@r = getrefine(); if (.@r >= 6) bonus bMaxHPrate,4; if (.@r >= 7) bonus bMaxHPrate,6; if (.@r >= 8) bonus bMaxHPrate,8; if (.@r >= 9) bonus bNoKnockback,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20798,'C_Grim_Reaper_Protection','Costume Grim Reaper Protection',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1450,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20815,'SeraphimRobe','Seraphim Robe',4,0,NULL,300,NULL,18,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,NULL,'bonus bMaxHPrate,10; bonus2 bMagicAtkEle,Ele_Neutral,5; .@r = getrefine(); if (.@r > 6) { bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Holy,20; bonus bMatkRate,10; } if (.@r > 8) { bonus2 bSubEle,Ele_Dark,10; bonus2 bSubEle,Ele_Holy,10; bonus bVariableCastrate,-5; } if (getskilllv("CR_TRUST") > 0) { bonus2 bSubEle,Ele_Holy,.@r*3; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20819,'Oxygen_Bottle','Oxygen Bottle',4,0,NULL,500,NULL,0,NULL,1,0xFFFFFFFF,63,2,4,NULL,'40',0,0,'bonus bFlee,12+getrefine(); bonus bHit,getrefine();',NULL,NULL);
@@ -10862,7 +10869,7 @@ REPLACE INTO `item_db_re` VALUES (22008,'Temporal_DEX_Boots_','Temporal Boots Of
 REPLACE INTO `item_db_re` VALUES (22009,'Temporal_INT_Boots_','Temporal Boots Of Intelligence',4,20,NULL,600,NULL,20,NULL,1,0xFFFFFFFF,56,2,64,NULL,'99',1,NULL,'.@r = getrefine(); bonus bMdef,5; bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bMatk,10*(.@r/3); if(readparam(bInt)>=120) bonus bMatk,60;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22010,'Temporal_AGI_Boots_','Temporal Boots Of Agility',4,20,NULL,600,NULL,25,NULL,1,0xFFFFFFFF,56,2,64,NULL,'99',1,NULL,'.@r = getrefine(); bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bAspdRate,3*(.@r/3); if(readparam(bAgi)>=120) bonus bAspd,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22011,'Temporal_LUK_Boots_','Temporal Boots Of Luck',4,20,NULL,600,NULL,20,NULL,1,0xFFFFFFFF,56,2,64,NULL,'99',1,NULL,'.@r = getrefine(); bonus bMaxHP,300+(100*(.@r/3)); bonus bMaxSP,30+(10*(.@r/3)); bonus bMdef,5; bonus bCritAtkRate,2*(.@r/3); if(readparam(bLuk)>=120) bonus bCritAtkRate,30;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22012,'Mana_Boots','Mana Boots',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,64,0,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22012,'Mana_Boots','Mana Boots',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22014,'Enhanced_Variant_Shoes','Enhanced Variant Shoes',4,20,NULL,500,NULL,13,NULL,1,0x7CCFDF80,63,2,64,NULL,'85',1,0,'bonus bMaxHPrate,12; bonus bMaxSPrate,12; .@r = getrefine(); bonus bDef,.@r; bonus bMdef,.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22015,'Impr_Angel\'s_Arrival','Advanced Angel\'s Reincarnation',4,10000,NULL,300,NULL,8,NULL,1,0x00000001,63,2,64,NULL,'99',1,0,'bonus bMaxHP,500; bonus bMaxSP,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22018,'Shoes_Of_Wise_Man','Shoes Of Wise Man',4,10,NULL,300,NULL,15,NULL,1,0xFFFFFFFF,63,2,64,NULL,'50',1,NULL,'.@r = getrefine(); if(.@r>5){ bonus bInt,.@r-5; bonus bMaxHPrate,-(.@r-5); }',NULL,NULL);
@@ -10880,8 +10887,8 @@ REPLACE INTO `item_db_re` VALUES (22047,'Tarlock\'s_Boots','Tarlock\'s Boots',4,
 REPLACE INTO `item_db_re` VALUES (22059,'Aegir_Shoes','Aegir Shoes',4,10,NULL,300,NULL,13,NULL,1,0xFFFFFFFF,63,2,64,NULL,'40',1,NULL,'bonus bUnbreakableShoes,1; bonus bMaxHP,500; bonus bMaxSP,50;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22064,'Thorny_Shoes','Thorny Shoes',4,0,NULL,1000,NULL,25,NULL,1,0xFFFFFFFF,63,2,64,NULL,NULL,1,NULL,'bonus bShortWeaponDamageReturn,getrefine()/2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22067,'Shoe_of_Witch','Shoe of Witch',4,10,NULL,400,NULL,10,NULL,0,0xFFFFFFFE,63,2,64,NULL,'1',1,NULL,'skill "ALL_CATCRY",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22069,'Lian_Shoes','Lian Shoes',4,0,NULL,250,NULL,12,NULL,1,0xFFFFFFFF,63,2,64,1,'90',1,NULL,'bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); bonus bMaxHPrate,.@r; bonus bMaxSPrate,.@r;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22072,'Hikingboots','Hikingboots',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,64,0,'100',1,NULL,'.@r = getrefine(); bonus bMaxHPRate,4+(.@r/3); bonus bMaxSPRate,4+(.@r/3); if (.@r > 9) bonus bSpeedRate,25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22069,'Lian_Shoes','Lian Shoes',4,0,NULL,250,NULL,12,NULL,1,0xFFFFFFFF,63,2,64,NULL,'90',1,NULL,'bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); bonus bMaxHPrate,.@r; bonus bMaxSPrate,.@r;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22072,'Hikingboots','Hikingboots',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,64,NULL,'100',1,NULL,'.@r = getrefine(); bonus bMaxHPRate,4+(.@r/3); bonus bMaxSPRate,4+(.@r/3); if (.@r > 9) bonus bSpeedRate,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22075,'Rift_Shoes','Rift Shoes',4,20,NULL,250,NULL,12,NULL,1,0xFFFFFFFF,63,2,64,NULL,'100',1,NULL,'.@r = getrefine(); bonus bMaxHP,(.@r >= 9 ? 1300 : .@r >= 7 ? 700 : 300); bonus bMaxSP,-50;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22076,'Wooden_Slipper','Wooden Slipper',4,20,NULL,50,NULL,10,NULL,1,0x80000000,7,2,64,NULL,'9',1,NULL,'bonus2 bHPRegenRate,2,10000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22077,'Red_Eco-Friendly_Shoes','Red Eco-Friendly Shoes',4,20,NULL,100,NULL,20,NULL,1,0x80000000,7,2,64,NULL,'18',1,NULL,'bonus bCritical,5; bonus2 bHPRegenRate,4,10000; bonus2 bSPRegenRate,1,10000;',NULL,NULL);
@@ -10889,13 +10896,13 @@ REPLACE INTO `item_db_re` VALUES (22078,'Unity_STR_Boots','Unity STR Boots',4,10
 REPLACE INTO `item_db_re` VALUES (22079,'Unity_AGI_Boots','Unity AGI Boots',4,10,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bAgi,.@r/2; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22080,'Unity_DEX_Boots','Unity DEX Boots',4,10,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bDex,.@r/2; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22081,'Unity_INT_Boots','Unity INT Boots',4,10,NULL,300,NULL,20,NULL,1,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'.@r = getrefine(); if(BaseLevel<100) { bonus2 bExpAddRace,RC_All,4; bonus bInt,.@r/2; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22082,'Polyhedron_Shoes','Polyhedron Shoes',4,0,NULL,500,NULL,12,NULL,1,0xFFFFFFFF,63,2,64,0,'90',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; if (.@r > 4) { .@b = (.@r > 6) ? 10 : 5; bonus2 bAddEle,Ele_Neutral,.@b; bonus2 bAddEle,Ele_Fire,.@b; bonus2 bAddEle,Ele_Water,.@b; bonus2 bAddEle,Ele_Wind,.@b; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22082,'Polyhedron_Shoes','Polyhedron Shoes',4,0,NULL,500,NULL,12,NULL,1,0xFFFFFFFF,63,2,64,NULL,'90',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; if (.@r > 4) { .@b = (.@r > 6) ? 10 : 5; bonus2 bAddEle,Ele_Neutral,.@b; bonus2 bAddEle,Ele_Fire,.@b; bonus2 bAddEle,Ele_Water,.@b; bonus2 bAddEle,Ele_Wind,.@b; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22083,'Private_Doram_Shoes','Private Doram Shoes',4,20,NULL,500,NULL,25,NULL,1,0x80000000,7,2,64,NULL,'100',1,NULL,'bonus bMaxHP,100; bonus bMaxSP,50; .@r = getrefine()/3; bonus bHPrecovRate,.@r*10; bonus bSPrecovRate,.@r*10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22084,'Luxury_Doram_Shoes','Luxury Doram Shoes',4,20,NULL,600,NULL,30,NULL,1,0x80000000,7,2,64,NULL,'140',1,NULL,'bonus bMaxHP,300; bonus bMaxSP,100; .@r = getrefine()/3; bonus bHPrecovRate,20*.@r; bonus bSPrecovRate,20*.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22085,'Elegant_Doram_Shoes','Elegant Doram Shoes',4,20,NULL,700,NULL,35,NULL,1,0x80000000,7,2,64,NULL,'175',1,NULL,'bonus bMaxHPrate,10; bonus bMaxSPrate,5; .@r = getrefine()/2; bonus bMaxHP,100*.@r; bonus bMaxSP,20*.@r; if(.@r >= 4) bonus2 bSkillUseSP,"SU_LOPE",5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22089,'Crimson_Gaiter_','Crimson Gaiter',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,64,NULL,'50',1,NULL,'bonus bCritical,2; bonus bCritAtkRate,2; if(getrefine()>=7){ bonus bCritical,3; bonus bCritAtkRate,3; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22101,'Angel_Poring_Boots','Angel Poring Boots',4,10,NULL,300,NULL,15,NULL,1,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'bonus bAllStats,1; skill "AL_HEAL",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22103,'Excelion_Leg','Excelion Leg',4,0,NULL,500,NULL,13,NULL,0,0xFFFFFFFF,63,2,64,1,'100',1,NULL,'.@r = getrefine(); bonus bMaxHP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; bonus bMaxSP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22103,'Excelion_Leg','Excelion Leg',4,0,NULL,500,NULL,13,NULL,0,0xFFFFFFFF,63,2,64,NULL,'100',1,NULL,'.@r = getrefine(); bonus bMaxHP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3; bonus bMaxSP,5+((BaseLevel > 129) ? 4 : 0)+(.@r/3)*3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22106,'Giant_Boots','Giant Boots',4,0,NULL,500,NULL,13,NULL,1,0xFFFFFFFF,63,2,64,NULL,'1',1,NULL,'bonus2 bSubRace,RC_All,1; bonus bMaxHPrate,2; bonus bMaxSPrate,2; .@r = getrefine(); if (.@r > 4) { bonus bDefRate,2; bonus bMaxHPrate,4; bonus bMaxSPrate,4; } if (.@r > 6) { bonus bDefRate,2; bonus bMaxHPrate,4; bonus bMaxSPrate,4; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22122,'Para_Team_Boots100','Awakened Eden Group Boots I',4,0,NULL,0,NULL,22,NULL,0,0xFFFFFFFF,63,2,64,NULL,'100',1,NULL,'bonus bAllStats,1; bonus bHPrecovRate,30; bonus bSPrecovRate,14;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22123,'Para_Team_Boots115','Awakened Eden Group Boots II',4,0,NULL,0,NULL,25,NULL,0,0xFFFFFFFF,63,2,64,NULL,'115',1,NULL,'bonus bAllStats,1; bonus bHPrecovRate,36; bonus bSPrecovRate,18;',NULL,NULL);
@@ -10905,7 +10912,7 @@ REPLACE INTO `item_db_re` VALUES (22126,'Para_Team_Boots160','Awakened Eden Grou
 #===================================================================
 # New Usable items
 #===================================================================
-REPLACE INTO `item_db_re` VALUES (22508,'Para_Team_Mark_','Eden Group Mark',11,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "moc_para01",171,115;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22508,'Para_Team_Mark_','Eden Group Mark',2,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "moc_para01",171,115;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22507,'ShabbyOldScroll','Old Scroll',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'callfunc "F_22507";',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22510,'King_Wolf_Scroll','King Wolf Scroll',2,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*TODO, confirm the rates*/ getitem callfunc("F_Rand",6635,19598,5658,6238,6239),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22511,'Fenrirs_Power_Scroll','Fenrir\'s Power Scroll',2,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'bonus_script "bonus bMatk,25; bonus bFixedCastRate,-50;",300,1025;',NULL,NULL);
@@ -11089,9 +11096,9 @@ REPLACE INTO `item_db_re` VALUES (22843,'Superstar_Snack','Superstar Snack',2,10
 REPLACE INTO `item_db_re` VALUES (22844,'Sealed_Dracula_Card_Album','Sealed Dracula Card Album',2,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*No Info*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22845,'Sealed_Fortune_Egg','Sealed Fortune Egg',2,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,'1',NULL,NULL,'getitem callfunc("F_Rand",4488,4497,4486,4480,4485,4539,4487,4494,4538,4489,4490,4482,4503,22846),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22846,'Sealed_Dracula_Card_','Sealed Dracula Card',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'bonus_script "{ bonus2 bSPDrainRate,50,5; }",300;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22847,'Prontera_Medal','Prontera Medal',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "prontera",0,0; /*No coord info*/',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22847,'Prontera_Medal','Prontera Medal',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "prontera",159,192; /*No coord info*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22848,'Prison_Key','Prison Key',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "prt_prison",0,0; /*No coord info*/',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22849,'Prontera_Time_Crystal','Prontera Time Crystal',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "prt_lib_q",0,0; /*No map+coord info*/',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22849,'Prontera_Time_Crystal','Prontera Time Crystal',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'warp "prt_q",155,27;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22850,'January_Gift_Box_','January Gift Box',2,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'rentitem 19052,604800;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22851,'February_Gift_Box_','February Gift Box',2,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12105,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22852,'March_Gift_Box_','March Gift Box',2,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*2 Lucky Eggs*/',NULL,NULL);
@@ -11110,7 +11117,7 @@ REPLACE INTO `item_db_re` VALUES (22870,'Christmas_Package','Christmas Package',
 REPLACE INTO `item_db_re` VALUES (22873,'Sealed_Beelzebub_Scroll_II','Sealed Beelzebub Scroll II',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem callfunc("F_Rand",22875,6238,6239,6228,6232,24231,24232,17474,6635),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22874,'Sealed_Beelzebub_Card_Album','Sealed Beelzebub Card Album',2,10,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*No Info*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22875,'Sealed_Beelzebub_Card','Sealed Beelzebub Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bVariableCastrate,-15; /*Item removed on 2014-12-17*/',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (22876,'Old_Money_Pocket','Old Money Pocket',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22876,'Old_Money_Pocket','Old Money Pocket',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Zeny += rand(500,550);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22881,'Rope_Gallows','Rope Gallows',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*Used to catch a Lost Sheep*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22882,'Chocolate_Rice_Cake_Soup','Chocolate Rice Cake Soup',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'percentheal 10,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22883,'September_Gift_Box_','September Gift Box',2,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*2 Lucky Eggs*/',NULL,NULL);
@@ -11487,27 +11494,30 @@ REPLACE INTO `item_db_re` VALUES (28315,'RCC2013_ARMLET','RCC2013_ARMLET',4,200,
 REPLACE INTO `item_db_re` VALUES (28316,'RCC2013_ARMLET_','RCC2013_ARMLET_',4,200,NULL,200,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28317,'RCC2013_RING','RCC2013_RING',4,200,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28318,'RCC2013_RING_','RCC2013_RING_',4,200,NULL,200,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28310,'Sarah\'s_Left_Earring','Sarah\'s Left Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,128,NULL,'145',0,NULL,'skill "AL_HEAL",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28311,'Sarah\'s_Right_Earring','Sarah\'s Right Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,8,NULL,'145',0,NULL,'skill "AL_TELEPORT",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28321,'Falconer_Claw','Falconer Claw',4,0,NULL,100,NULL,5,NULL,1,0x00000800,63,2,136,0,'80',0,NULL,'bonus bDex,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*10;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28322,'Falconer_Glove','Falconer Glove',4,0,NULL,100,NULL,5,NULL,1,0x00000800,63,2,136,0,'80',0,NULL,'bonus bDex,1; bonus bUseSPrate,-5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28310,'Sarah\'s_Left_Earring','Sarah\'s Left Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,8,NULL,'145',0,NULL,'skill "AL_HEAL",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28311,'Sarah\'s_Right_Earring','Sarah\'s Right Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,128,NULL,'145',0,NULL,'skill "AL_TELEPORT",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28321,'Falconer_Claw','Falconer Claw',4,0,NULL,100,NULL,5,NULL,1,0x00000800,63,2,136,NULL,'80',0,NULL,'bonus bDex,1; bonus2 bSkillAtk,"HT_BLITZBEAT",getskilllv("HT_STEELCROW")*10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28322,'Falconer_Glove','Falconer Glove',4,0,NULL,100,NULL,5,NULL,1,0x00000800,63,2,136,NULL,'80',0,NULL,'bonus bDex,1; bonus bUseSPrate,-5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28326,'Broken_Chips_01','Broken Chips 01',4,10,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'100',0,NULL,'bonus bStr,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28327,'Broken_Chips_02','Broken Chips 02',4,10,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'100',0,NULL,'bonus bInt,4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28332,'Jewerly_Ring','Jewerly Ring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus bLuk,20; autobonus "{ bonus bAspd,2; }",50,2000,BF_WEAPON|BF_MAGIC;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28333,'Gold_PC_Room_Ring','Gold PC Room Ring',4,10,NULL,0,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus bMaxHPrate,3; bonus bMaxSPrate,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28342,'Critical_Anklet','Critical Anklet',4,0,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,NULL,0,NULL,'bonus bCritical,5;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28358,'Cursed_Lucky_Clover','Cursed Lucky Clover',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,0,'100',0,NULL,'bonus bLuk,2; bonus bFlee,3; bonus2 bAddEff2,Eff_Curse,5;',NULL,'sc_end SC_CLOAKING; /*FIXME: Because the combo has Cloaking skill*/');
-REPLACE INTO `item_db_re` VALUES (28372,'Imperial_Ring','Imperial Ring',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,0,'50',0,NULL,'bonus bStr,1; bonus bInt,1; bonus bMaxHPRate,3; bonus bMaxSPRate,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28354,'City_Map','City Map',4,0,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'/* todo */',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28355,'Shining_Holy_Water','Shining Holy Water',4,0,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'/* todo */',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28356,'Prontera_Badge','Prontera Badge',4,0,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'/*warp "prontera",159,192;  15 mins cooldown */',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28358,'Cursed_Lucky_Clover','Cursed Lucky Clover',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'100',0,NULL,'bonus bLuk,2; bonus bFlee,3; bonus2 bAddEff2,Eff_Curse,5;',NULL,'sc_end SC_CLOAKING; /*FIXME: Because the combo has Cloaking skill*/');
+REPLACE INTO `item_db_re` VALUES (28372,'Imperial_Ring','Imperial Ring',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,'50',0,NULL,'bonus bStr,1; bonus bInt,1; bonus bMaxHPRate,3; bonus bMaxSPRate,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28374,'Foxtail_Ring','Foxtail Ring',4,20,NULL,100,NULL,0,NULL,0,0x80000000,7,2,136,NULL,'1',0,NULL,'bonus2 bExpAddRace,RC_All,5; .@lvl = min(BaseLevel/5,10); bonus bAtk,2*.@lvl; bonus bMatk,2*.@lvl; bonus bMaxHP,10*.@lvl; bonus bMaxSP,5*.@lvl;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28377,'Magical_Ring','Magical Ring',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,0,'20',0,NULL,'bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Water,5; bonus2 bMagicAddEle,Ele_Earth,5; bonus2 bMagicAddEle,Ele_Wind,5; if (BaseLevel > 4) { bonus2 bSkillAtk,"MG_FIREBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_COLDBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_LIGHTNINGBOLT",BaseLevel/5; bonus2 bSkillAtk,"WZ_EARTHSPIKE",BaseLevel/5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28377,'Magical_Ring','Magical Ring',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'20',0,NULL,'bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Water,5; bonus2 bMagicAddEle,Ele_Earth,5; bonus2 bMagicAddEle,Ele_Wind,5; if (BaseLevel > 4) { bonus2 bSkillAtk,"MG_FIREBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_COLDBOLT",BaseLevel/5; bonus2 bSkillAtk,"MG_LIGHTNINGBOLT",BaseLevel/5; bonus2 bSkillAtk,"WZ_EARTHSPIKE",BaseLevel/5; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28380,'Fresh_Grass_Necklace','Fresh Grass Necklace',4,20,NULL,100,NULL,0,NULL,1,0x80000000,7,2,136,NULL,'100',0,NULL,'bonus bFlee2,5; bonus2 bSkillCooldown,"SU_SCAROFTAROU",-5000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28381,'Cute_Grass_Necklace','Cute Grass Necklace',4,20,NULL,10,NULL,0,NULL,1,0x80000000,7,2,136,NULL,'100',0,NULL,'bonus bHealPower,5; bonus2 bSkillCooldown,"SU_TUNAPARTY",-7000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28382,'Charm_Grass_Necklace','Charm Grass Necklace',4,20,NULL,10,NULL,0,NULL,1,0x80000000,7,2,136,NULL,'100',0,NULL,'bonus bMdef,5; bonus2 bVariableCastrate,"SU_CN_METEOR",-1000;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28386,'Fallen_Monk_Rosary','Fallen Monk Rosary',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,0,'20',0,NULL,'bonus bAspdRate,5; bonus bCritical,5; bonus2 bSkillUseSP,"CH_SOULCOLLECT",-5; if (BaseLevel > 14) bonus2 bSkillAtk,"SR_DRAGONCOMBO",BaseLevel/15; if (BaseLevel > 19) bonus2 bSkillAtk,"SR_KNUCKLEARROW",BaseLevel/20; if (BaseLevel > 29) bonus2 bSkillAtk,"SR_SKYNETBLOW",BaseLevel/30;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28386,'Fallen_Monk_Rosary','Fallen Monk Rosary',4,0,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'20',0,NULL,'bonus bAspdRate,5; bonus bCritical,5; bonus2 bSkillUseSP,"CH_SOULCOLLECT",-5; if (BaseLevel > 14) bonus2 bSkillAtk,"SR_DRAGONCOMBO",BaseLevel/15; if (BaseLevel > 19) bonus2 bSkillAtk,"SR_KNUCKLEARROW",BaseLevel/20; if (BaseLevel > 29) bonus2 bSkillAtk,"SR_SKYNETBLOW",BaseLevel/30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28391,'S_Thief_Earring','Thief Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); autobonus3 "{ bonus bBaseAtk,30+(.@r*10); bonus bFlee,30+(.@r*10); }",200,5000,"TF_THROWSTONE","{ specialeffect2 EF_ENHANCE; }";',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28392,'S_Archer_Earring','Archer Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); autobonus3 "{ bonus bBaseAtk,30+(.@r*10); bonus bHit,30+(.@r*10); }",200,5000,"AC_DOUBLE","{ specialeffect2 EF_ENHANCE; }";',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28410,'Sapphire_Wrist','Sapphire Wrist',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,0,'50',0,NULL,'bonus bDex,5; bonus bLuk,5; bonus bInt,5; bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",BaseLevel/5; bonus2 bVariableCastrate,"CR_ACIDDEMONSTRATION",-(BaseLevel/4); .@n = getskilllv("CR_SLIMPITCHER"); bonus bDex,.@n/2; bonus bLuk,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28411,'Emerald_Earring','Emerald Earring',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,0,'50',0,NULL,'bonus bDex,5; bonus bAgi,5; bonus bInt,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",BaseLevel; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",BaseLevel; bonus2 bSkillAtk,"DC_THROWARROW",BaseLevel; bonus2 bSkillAtk,"WM_METALICSOUND",2*(BaseLevel/5); .@n = getskilllv("WM_METALICSOUND"); bonus2 bVariableCastrate,"WM_METALICSOUND",.@n/2; bonus bDex,.@n/2; bonus bAgi,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28410,'Sapphire_Wrist','Sapphire Wrist',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,'50',0,NULL,'bonus bDex,5; bonus bLuk,5; bonus bInt,5; bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",BaseLevel/5; bonus2 bVariableCastrate,"CR_ACIDDEMONSTRATION",-(BaseLevel/4); .@n = getskilllv("CR_SLIMPITCHER"); bonus bDex,.@n/2; bonus bLuk,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28411,'Emerald_Earring','Emerald Earring',4,0,NULL,500,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,'50',0,NULL,'bonus bDex,5; bonus bAgi,5; bonus bInt,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",BaseLevel; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",BaseLevel; bonus2 bSkillAtk,"DC_THROWARROW",BaseLevel; bonus2 bSkillAtk,"WM_METALICSOUND",2*(BaseLevel/5); .@n = getskilllv("WM_METALICSOUND"); bonus2 bVariableCastrate,"WM_METALICSOUND",.@n/2; bonus bDex,.@n/2; bonus bAgi,.@n/2; bonus bInt,.@n/2; bonus bMatk,(.@n/2)*20;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28413,'Lesser_Mackerel_Talisman','Lesser Mackerel Talisman',4,0,NULL,100,NULL,1,NULL,1,0x80000000,63,2,136,NULL,'100',NULL,NULL,'bonus bVit,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28414,'Intermediate_Mackerel_Talisman','Intermediate Mackerel Talisman',4,0,NULL,100,NULL,1,NULL,1,0x80000000,63,2,136,NULL,'140',NULL,NULL,'bonus bVit,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28415,'Greater_Mackerel_Talisman','Greater Mackerel Talisman',4,0,NULL,100,NULL,1,NULL,1,0x80000000,63,2,136,NULL,'175',NULL,NULL,'bonus bVit,3;',NULL,NULL);
@@ -11576,13 +11586,13 @@ REPLACE INTO `item_db_re` VALUES (28706,'Dagger_of_Vicious_Mind','Dagger of Vici
 REPLACE INTO `item_db_re` VALUES (28900,'Guardsmen\'s_Shield','Guardsmen\'s Shield',4,20,NULL,3000,NULL,30,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'.@r = getrefine(); skill "LG_SHIELDSPELL",1; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,(10+(.@r*10)); bonus bDef,(.@r*10); bonus bMdef,.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28901,'Cursed_Mad_Bunny','Cursed Mad Bunny',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,32,NULL,'1',1,1,'bonus bAspd,3; bonus2 bAddRace,RC_All,5; bonus2 bMagicAddRace,RC_All,5; bonus bShortWeaponDamageReturn,10; autobonus2 "{ bonus bMagicDamageReturn,60; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_WIND; }"; .@r = getrefine(); if(.@r>=7) { bonus bBaseAtk,5; bonus bMatk,5; } if(.@r>=9) { bonus bBaseAtk,15; bonus bMatk,15; } if(.@r>=12) { bonus bCritical,10; bonus bNoCastCancel,0; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28902,'Mad_Bunny_','Mad Bunny',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,32,NULL,'1',1,1,'bonus2 bAddRace,RC_All,5; bonus2 bMagicAddRace,RC_All,5; bonus bShortWeaponDamageReturn,10; autobonus2 "{ bonus bMagicDamageReturn,60; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_WIND; }"; .@r = getrefine(); if(.@r>=7) { bonus bBaseAtk,5; bonus bMatk,5; } if(.@r>=9) { bonus bBaseAtk,15; bonus bMatk,15; } if(.@r>=12) { bonus bCritical,10; bonus bNoCastCancel,0; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28903,'Scutum','Scutum',4,0,NULL,500,NULL,1,NULL,1,0xFFFFFFFF,63,2,32,1,'1',1,NULL,'.@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28903,'Scutum','Scutum',4,0,NULL,500,NULL,1,NULL,1,0xFFFFFFFF,63,2,32,NULL,'1',1,1,'.@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28904,'Unity_Guard','Unity Guard',4,20,NULL,300,NULL,60,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'if(BaseLevel<100) { bonus bDef,12*getrefine(); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28905,'Unity_Buckler','Unity Buckler',4,20,NULL,300,NULL,60,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'if(BaseLevel<100) { bonus bMaxSPrate,2*getrefine(); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28906,'Shield_Of_Flame','Shield Of Flame',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,1,'90',1,NULL,'bonus2 bSubEle,Ele_Fire,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28907,'Shield_Of_Gust','Shield Of Gust',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,1,'90',1,NULL,'bonus2 bSubEle,Ele_Wind,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28908,'Shield_Of_Water','Shield Of Water',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,1,'90',1,NULL,'bonus2 bSubEle,Ele_Water,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (28909,'Shield_Of_Earth','Shield Of Earth',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,1,'90',1,NULL,'bonus2 bSubEle,Ele_Earth,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28906,'Shield_Of_Flame','Shield Of Flame',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,1,'bonus2 bSubEle,Ele_Fire,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28907,'Shield_Of_Gust','Shield Of Gust',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,1,'bonus2 bSubEle,Ele_Wind,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28908,'Shield_Of_Water','Shield Of Water',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,1,'bonus2 bSubEle,Ele_Water,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (28909,'Shield_Of_Earth','Shield Of Earth',4,0,NULL,500,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'90',1,1,'bonus2 bSubEle,Ele_Earth,25; .@r = getrefine(); if(.@r > 4) { bonus bAspd,1+((.@r > 6) ? 1 : 0); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28910,'Rectangular_Large_Sleeve','Rectangular Large Sleeve',4,20,NULL,800,NULL,80,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'bonus bLongAtkDef,5; .@r = getrefine(); if(.@r>=5) { bonus bLongAtkDef,5; } if(.@r>=7) { bonus bLongAtkDef,10; } if(.@r>=9) { bonus bLongAtkDef,15; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28913,'Ultralight_Magic_Shield','Ultralight Magic Shield',4,20,NULL,100,NULL,50,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'bonus bAspdRate,5; bonus2 bIgnoreDefClassRate,Class_Normal,10; bonus2 bSubEle,Ele_Neutral,5; .@r = getrefine(); if(.@r>=7) { bonus2 bIgnoreDefClassRate,Class_Normal,2; bonus bAspdRate,2; } if(.@r>=9) { bonus2 bIgnoreDefClassRate,Class_Normal,3; bonus bAspdRate,3; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (28915,'Bunker_Shield','Bunker Shield',4,20,NULL,3500,NULL,90,NULL,1,0xFFFFFFFF,63,2,32,NULL,'50',1,1,'bonus2 bAddRace,RC_All,4; bonus bAspdRate,5; .@r = getrefine(); if(.@r>=5) { bonus2 bAddRace,RC_All,.@r; }',NULL,NULL);
@@ -11591,6 +11601,18 @@ REPLACE INTO `item_db_re` VALUES (28920,'Diamond_Shield','Diamond Shield',4,20,N
 #===================================================================
 # Enchantment stones
 #===================================================================
+REPLACE INTO `item_db_re` VALUES (29000,'Rune_of_Intellect_Lv_1','Rune of Intellect Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bInt,5; } if (.@r>=10) { bonus bMatkRate,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29001,'Rune_of_Intellect_Lv_2','Rune of Intellect Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bInt,6; } if (.@r>=11) { bonus bInt,1; bonus bMatkRate,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29002,'Rune_of_Intellect_Lv_3','Rune of Intellect Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bInt,7; } if (.@r>=12) { bonus bInt,1; bonus bMatkRate,8; } if (.@r>=13) { bonus bInt,1; bonus bMatkRate,2; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29003,'Rune_of_Dexterity_Lv_1','Rune of Dexterity Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bDex,5; } if (.@r>=10) { bonus bLongAtkRate,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29004,'Rune_of_Dexterity_Lv_2','Rune of Dexterity Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bDex,6; } if (.@r>=11) { bonus bDex,1; bonus bLongAtkRate,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29005,'Rune_of_Dexterity_Lv_3','Rune of Dexterity Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bDex,7; } if (.@r>=12) { bonus bDex,1; bonus bLongAtkRate,8; } if (.@r>=13) { bonus bDex,1; bonus bLongAtkRate,2; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29006,'Rune_of_Luck_Lv_1','Rune of Luck Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bLuk,5; } if (.@r>=10) { bonus bCritAtkRate,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29007,'Rune_of_Luck_Lv_2','Rune of Luck Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bLuk,6; } if (.@r>=11) { bonus bLuk,1; bonus bCritAtkRate,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29008,'Rune_of_Luck_Lv_3','Rune of Luck Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bLuk,7; } if (.@r>=12) { bonus bLuk,1; bonus bCritAtkRate,8; } if (.@r>=13) { bonus bLuk,1; bonus bCritAtkRate,6; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29009,'Rune_of_Vitality_Lv_1','Rune of Vitality Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bVit,5; } if (.@r>=10) { bonus bMaxHPrate,5; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29010,'Rune_of_Vitality_Lv_2','Rune of Vitality Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bVit,6; } if (.@r>=11) { bonus bVit,1; bonus bMaxHPrate,7; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (29011,'Rune_of_Vitality_Lv_3','Rune of Vitality Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bVit,7; } if (.@r>=12) { bonus bVit,1; bonus bMaxHPrate,8; } if (.@r>=13) { bonus bVit,1; bonus bMaxHPrate,2; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (29061,'Ambition1Lv','Ambition1Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,3; bonus bHit,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (29062,'Ambition2Lv','Ambition2Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,6; bonus bHit,6;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (29063,'Ambition3Lv','Ambition3Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,9; bonus bHit,9;',NULL,NULL);

+ 25 - 0
sql-files/main.sql

@@ -24,6 +24,29 @@ CREATE TABLE IF NOT EXISTS `acc_reg_str` (
   KEY `account_id` (`account_id`)
 ) ENGINE=MyISAM;
 
+--
+-- Table structure for table `achievement`
+--
+
+CREATE TABLE IF NOT EXISTS `achievement` (
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `id` bigint(11) unsigned NOT NULL,
+  `count1` mediumint(8) unsigned NOT NULL default '0',
+  `count2` mediumint(8) unsigned NOT NULL default '0',
+  `count3` mediumint(8) unsigned NOT NULL default '0',
+  `count4` mediumint(8) unsigned NOT NULL default '0',
+  `count5` mediumint(8) unsigned NOT NULL default '0',
+  `count6` mediumint(8) unsigned NOT NULL default '0',
+  `count7` mediumint(8) unsigned NOT NULL default '0',
+  `count8` mediumint(8) unsigned NOT NULL default '0',
+  `count9` mediumint(8) unsigned NOT NULL default '0',
+  `count10` mediumint(8) unsigned NOT NULL default '0',
+  `completed` datetime,
+  `rewarded` datetime,
+  PRIMARY KEY (`char_id`,`id`),
+  KEY `char_id` (`char_id`)
+) ENGINE=MyISAM;
+
 --
 -- Table structure for table `auction`
 --
@@ -231,6 +254,8 @@ CREATE TABLE IF NOT EXISTS `char` (
   `hotkey_rowshift` tinyint(3) unsigned NOT NULL default '0',
   `clan_id` int(11) unsigned NOT NULL default '0',
   `last_login` datetime DEFAULT NULL,
+  `title_id` INT(11) unsigned NOT NULL default '0',
+  `show_equip` tinyint(3) unsigned NOT NULL default '0',
   PRIMARY KEY  (`char_id`),
   UNIQUE KEY `name_key` (`name`),
   KEY `account_id` (`account_id`),

+ 63 - 14
sql-files/mob_db_re.sql

@@ -2168,20 +2168,20 @@ REPLACE INTO `mob_db_re` VALUES (2936,'E_GHOSTRING','Ghostring','Ghostring',1,10
 #2945,J_MUMMY
 #2946,J_ANUBIS
 #2947,J_EGGYRA
-#2948,CURSED_SOLDIER
-#2949,CURSED_SENTINEL
-#2950,BROKEN_MIND
-#2951,FLOATING_WORD
-#2952,LIKE_LOVE
-#2953,CURSED_MEMORY
-#2954,COLORLESS_VOW
-#2955,OLD_FRIENDSHIP
-#2956,SWEET_SLAUGHTER
-#2957,FORGOTTEN_NAME
-#2958,FATAL_DAYS
-#2959,TORTUROUS_REDEEMER
+REPLACE INTO `mob_db_re` VALUES (2948,'CURSED_SOLDIER','Cursed Soldier','Cursed Soldier',110,18574,1,1907,1851,9,1258,1791,85,35,81,50,64,56,178,23,10,12,1,1,69,0x3885,150,1960,576,420,0,0,0,0,0,0,0,6672,1000,957,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2949,'CURSED_SENTINEL','Cursed Sentinel','Cursed Sentinel',110,14099,1,1634,1346,2,1347,1906,84,41,120,65,66,41,107,26,10,12,2,7,67,0x3885,175,914,1344,384,0,0,0,0,0,0,0,6672,1000,934,2500,1097,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2950,'BROKEN_MIND','Broken Mind','Broken Mind',110,13520,1,1545,1557,1,1259,1799,67,27,69,37,36,10,64,5,10,12,1,6,67,0x2003885,200,920,720,200,0,0,0,0,0,0,0,6672,1000,6086,2500,683,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2951,'FLOATING_WORD','Floating Word','Floating Word',110,11276,1,1166,1034,1,1080,1509,93,40,111,90,60,70,139,65,10,12,0,6,68,0x2003885,150,972,648,432,0,0,0,0,0,0,0,6672,1000,938,3000,947,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2952,'LIKE_LOVE','Like Love','Like Love',110,14008,1,1505,1667,2,1182,1183,64,51,62,27,25,55,102,20,10,12,1,6,64,0x2003885,150,1056,1056,336,0,0,0,0,0,0,0,6672,1000,929,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2953,'CURSED_MEMORY','Cursed Memory','Cursed Memory',110,18045,1,1802,1623,1,1310,1867,89,28,87,39,58,5,82,10,10,12,1,1,69,0x3885,350,1768,500,192,0,0,0,0,0,0,0,6672,1000,957,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2954,'COLORLESS_VOW','Colorless Vow','Colorless Vow',110,19194,0,1939,1881,1,1478,2121,95,41,84,35,60,20,85,15,10,12,1,1,69,0x3885,350,0,500,0,0,0,0,0,0,0,0,6672,1000,958,3500,1063,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2955,'OLD_FRIENDSHIP','Old Friendship','Old Friendship',110,12614,0,1306,1328,0,1147,1638,78,5,56,12,19,11,30,10,10,12,1,1,49,0x3885,250,2460,912,0,0,0,0,0,0,0,0,6672,1000,932,3500,1098,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2956,'SWEET_SLAUGHTER','Sweet Slaughter','Sweet Slaughter',110,13986,0,1960,1587,0,1216,1709,125,10,121,48,40,31,125,32,10,12,2,1,29,0x3885,350,1538,1000,396,0,0,0,0,0,0,0,6672,1000,929,2000,682,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2957,'FORGOTTEN_NAME','Forgotten Name','Forgotten Name',120,19546,1,1505,1485,2,1093,1520,111,38,121,29,51,43,100,3,10,12,1,1,49,0x3885,155,1169,1152,480,0,0,0,0,0,0,0,6672,1500,682,5000,683,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2958,'FATAL_DAYS','Fatal Days','Fatal Days',120,24240,1,2052,2026,2,1025,1428,72,15,100,71,63,85,115,37,10,12,1,6,67,0x2003885,190,720,384,480,0,0,0,0,0,0,0,6672,1500,1050,2500,1038,2500,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2959,'TORTUROUS_REDEEMER','Torturous Redeemer','Torturous Redeemer',120,103342,0,10590,8378,0,1253,1753,144,28,133,69,72,55,165,44,10,12,1,7,62,0x3885,200,672,420,360,0,0,0,0,0,0,0,6672,10000,6672,10000,923,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #2960,MM_FLAMECROSS
-#2961,E_TORTUROUS_REDEEMER
+REPLACE INTO `mob_db_re` VALUES (2961,'E_TORTUROUS_REDEEMER','Torturous Redeemer','Torturous Redeemer',120,103342,1,10590,8378,1,1253,1753,144,28,133,69,72,55,165,44,10,12,1,7,62,0x3885,200,672,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #2962,E_DEVILING
 #2963,WOODIE
 #2964,EXP_1000
@@ -3100,7 +3100,17 @@ REPLACE INTO `mob_db_re` VALUES (3508,'DR_EGGRING_G','Eggring','Eggring',20,220,
 #3874,AB_MOB_048
 #3875,AB_MOB_049
 #3876,AB_MOB_050
-
+#3877,E_NYAIL_PIG
+#3878,E_PIT
+#3879,E_SEA_WORMS
+#3880,E_SMALL_SWIRL
+#3881,E_RIPE_WATERMELON
+#3882,E_MD_NYAILO
+#3883,E_MD_NYAILO_LEG
+#3884,E_MD_S_TREASURE_BOX
+#3885,E_MD_B_TREASURE_BOX
+#3886,E_MD_BOX_PUPPET
+#3887,E_MD_DEPRESS_SOUL
 #3888,TW_I_QUEEN_SCARABA
 #3889,TW_GIOIA
 #3890,TW_TIMEHOLDER
@@ -3118,3 +3128,42 @@ REPLACE INTO `mob_db_re` VALUES (3508,'DR_EGGRING_G','Eggring','Eggring',20,220,
 #3902,MD_ORC_LORD
 #3903,MD_ORC_FLOWER
 
+#3910,E_EMPEL_1
+#3911,E_GIBBET
+#3912,E_LOLI_RURI
+#3913,E_DULLAHAN
+#3914,E_BLOODY_MURDERER
+#3915,E_EMPEL_1B
+#3916,JP_E_MONSTER_74
+#3917,JP_E_MONSTER_75
+#3918,JP_E_MONSTER_76
+#3919,JP_E_MONSTER_77
+#3920,JP_E_MONSTER_78
+#3921,JP_E_MONSTER_79
+#3922,JP_E_MONSTER_80
+#3923,JP_E_MONSTER_81
+#3924,JP_E_MONSTER_82
+#3925,JP_E_MONSTER_83
+#3926,JP_E_MONSTER_84
+#3927,JP_E_MONSTER_85
+#3928,JP_E_MONSTER_86
+#3929,JP_E_MONSTER_87
+#3930,JP_E_MONSTER_88
+#3931,JP_E_MONSTER_89
+#3932,JP_E_MONSTER_90
+#3933,JP_E_MONSTER_91
+#3934,JP_E_MONSTER_92
+#3935,JP_E_MONSTER_93
+#3936,JP_E_MONSTER_94
+#3937,JP_E_MONSTER_95
+#3938,JP_E_MONSTER_96
+#3939,JP_E_MONSTER_97
+#3940,JP_E_MONSTER_98
+#3941,JP_E_MONSTER_99
+#3942,JP_E_MONSTER_100
+#3943,JP_E_MONSTER_101
+#3944,JP_E_MONSTER_102
+#3945,JP_E_MONSTER_103
+#3946,JP_E_MONSTER_104
+#3947,JP_E_MONSTER_105
+

+ 0 - 1
sql-files/upgrades/upgrade_20140104.sql

@@ -1 +0,0 @@
-ALTER TABLE  `item_db_re` CHANGE  `atk:matk`  `atk:matk` VARCHAR( 11 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL

+ 0 - 20
sql-files/upgrades/upgrade_20140114.sql

@@ -1,20 +0,0 @@
-CREATE TABLE IF NOT EXISTS `vending_items` (
-  `vending_id` int(10) unsigned NOT NULL,
-  `index` smallint(5) unsigned NOT NULL,
-  `cartinventory_id` int(10) unsigned NOT NULL,
-  `amount` smallint(5) unsigned NOT NULL,
-  `price` int(10) unsigned NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `vendings` (
-  `id` int(10) unsigned NOT NULL,
-  `account_id` int(11) unsigned NOT NULL,
-  `char_id` int(10) unsigned NOT NULL,
-  `sex` enum('F','M') NOT NULL DEFAULT 'M',
-  `map` varchar(20) NOT NULL,
-  `x` smallint(5) unsigned NOT NULL,
-  `y` smallint(5) unsigned NOT NULL,
-  `title` varchar(80) NOT NULL,
-  `autotrade` tinyint(4) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM;

+ 0 - 21
sql-files/upgrades/upgrade_20140205.sql

@@ -1,21 +0,0 @@
-CREATE TABLE IF NOT EXISTS `buyingstore_items` (
-  `buyingstore_id` int(10) unsigned NOT NULL,
-  `index` smallint(5) unsigned NOT NULL,
-  `item_id` int(10) unsigned NOT NULL,
-  `amount` smallint(5) unsigned NOT NULL,
-  `price` int(10) unsigned NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `buyingstores` (
-  `id` int(10) unsigned NOT NULL,
-  `account_id` int(11) unsigned NOT NULL,
-  `char_id` int(10) unsigned NOT NULL,
-  `sex` enum('F','M') NOT NULL DEFAULT 'M',
-  `map` varchar(20) NOT NULL,
-  `x` smallint(5) unsigned NOT NULL,
-  `y` smallint(5) unsigned NOT NULL,
-  `title` varchar(80) NOT NULL,
-  `limit` int(10) unsigned NOT NULL,
-  `autotrade` tinyint(4) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM;

+ 0 - 1
sql-files/upgrades/upgrade_20140523.sql

@@ -1 +0,0 @@
-ALTER TABLE `char` ADD `font` tinyint(3) unsigned NOT NULL default '0';

+ 0 - 118
sql-files/upgrades/upgrade_20140612.sql

@@ -1,118 +0,0 @@
-UPDATE `auction` SET `card0` = 256 WHERE `card0` = -256;
-UPDATE `cart_inventory` SET `card0` = 256 WHERE `card0` = -256;
-UPDATE `guild_storage` SET `card0` = 256 WHERE `card0` = -256;
-UPDATE `inventory` SET `card0` = 256 WHERE `card0` = -256;
-UPDATE `mail` SET `card0` = 256 WHERE `card0` = -256;
-UPDATE `storage` SET `card0` = 256 WHERE `card0` = -256;
-
-UPDATE `auction` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `auction` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `auction` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-UPDATE `cart_inventory` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `cart_inventory` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `cart_inventory` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-UPDATE `guild_storage` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `guild_storage` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `guild_storage` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-UPDATE `inventory` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `inventory` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `inventory` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-UPDATE `mail` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `mail` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `mail` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-UPDATE `storage` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `storage` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `storage` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-ALTER TABLE `auction` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `auction` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `auction` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `auction` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `auction` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `cart_inventory` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `cart_inventory` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `cart_inventory` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `cart_inventory` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `cart_inventory` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `guild_storage` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `guild_storage` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `guild_storage` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `guild_storage` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `guild_storage` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `inventory` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `inventory` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `inventory` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `inventory` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `inventory` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mail` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mail` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mail` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mail` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mail` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `pet` MODIFY `egg_id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `storage` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `storage` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `storage` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `storage` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `storage` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-
-ALTER TABLE `mob_db` MODIFY `MVP1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `MVP2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `MVP3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop4id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop5id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop6id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop7id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop8id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `Drop9id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db` MODIFY `DropCardid` smallint(5) unsigned NOT NULL default '0';
-
-ALTER TABLE `mob_db2` MODIFY `MVP1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `MVP2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `MVP3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop4id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop5id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop6id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop7id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop8id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `Drop9id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2` MODIFY `DropCardid` smallint(5) unsigned NOT NULL default '0';
-
-ALTER TABLE `mob_db2_re` MODIFY `MVP1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `MVP2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `MVP3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop4id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop5id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop6id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop7id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop8id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `Drop9id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db2_re` MODIFY `DropCardid` smallint(5) unsigned NOT NULL default '0';
-
-ALTER TABLE `mob_db_re` MODIFY `MVP1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `MVP2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `MVP3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop1id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop2id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop3id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop4id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop5id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop6id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop7id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop8id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `Drop9id` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mob_db_re` MODIFY `DropCardid` smallint(5) unsigned NOT NULL default '0';

+ 0 - 12
sql-files/upgrades/upgrade_20140612_log.sql

@@ -1,12 +0,0 @@
-UPDATE `picklog` SET `card0` = 256 WHERE `card0` = -256;
-
-UPDATE `picklog` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
-UPDATE `picklog` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
-UPDATE `picklog` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
-
-ALTER TABLE `picklog` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `picklog` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `picklog` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `picklog` MODIFY `card2` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `picklog` MODIFY `card3` smallint(5) unsigned NOT NULL default '0';
-ALTER TABLE `mvplog` MODIFY `prize` smallint(5) unsigned NOT NULL default '0';

+ 0 - 6
sql-files/upgrades/upgrade_20140616.sql

@@ -1,6 +0,0 @@
-UPDATE `auction` SET `card0` = 256 WHERE `card0` = 65280;
-UPDATE `cart_inventory` SET `card0` = 256 WHERE `card0` = 65280;
-UPDATE `guild_storage` SET `card0` = 256 WHERE `card0` = 65280;
-UPDATE `inventory` SET `card0` = 256 WHERE `card0` = 65280;
-UPDATE `mail` SET `card0` = 256 WHERE `card0` = 65280;
-UPDATE `storage` SET `card0` = 256 WHERE `card0` = 65280;

+ 0 - 1
sql-files/upgrades/upgrade_20140627.sql

@@ -1 +0,0 @@
-ALTER TABLE `pet` CHANGE `incuvate` `incubate` int(11) unsigned NOT NULL default '0';

+ 0 - 1
sql-files/upgrades/upgrade_20140713_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `zenylog` CHANGE `type` `type` ENUM('T','V','P','M','S','N','D','C','A','E','I','B','K') NOT NULL DEFAULT 'S';

+ 0 - 7
sql-files/upgrades/upgrade_20140723.sql

@@ -1,7 +0,0 @@
-ALTER TABLE `vendings` ADD `body_direction` CHAR( 1 ) NOT NULL DEFAULT '4',
-ADD `head_direction` CHAR( 1 ) NOT NULL DEFAULT '0',
-ADD `sit` CHAR( 1 ) NOT NULL DEFAULT '1';
-
-ALTER TABLE `buyingstores` ADD `body_direction` CHAR( 1 ) NOT NULL DEFAULT '4',
-ADD `head_direction` CHAR( 1 ) NOT NULL DEFAULT '0',
-ADD `sit` CHAR( 1 ) NOT NULL DEFAULT '1';

+ 0 - 1
sql-files/upgrades/upgrade_20140822.sql

@@ -1 +0,0 @@
-ALTER TABLE `char` ADD COLUMN `uniqueitem_counter` bigint(20) NOT NULL AFTER `font`;

+ 0 - 1
sql-files/upgrades/upgrade_20140826.sql

@@ -1 +0,0 @@
-ALTER TABLE `char` MODIFY COLUMN `uniqueitem_counter` int(11) unsigned NOT NULL default '0';

+ 0 - 1
sql-files/upgrades/upgrade_20140915.sql

@@ -1 +0,0 @@
-ALTER TABLE `mail` ADD `bound` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';

+ 0 - 1
sql-files/upgrades/upgrade_20140915_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` ADD `bound` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';

+ 0 - 1
sql-files/upgrades/upgrade_20150103_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` MODIFY `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$') NOT NULL DEFAULT 'S';

+ 0 - 6
sql-files/upgrades/upgrade_20150131.sql

@@ -1,6 +0,0 @@
-ALTER TABLE `bonus_script` MODIFY COLUMN `char_id` INT(11) UNSIGNED NOT NULL;
-ALTER TABLE `bonus_script` MODIFY COLUMN `script` TEXT NOT NULL;
-ALTER TABLE `bonus_script` MODIFY COLUMN `tick` INT(11) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `bonus_script` MODIFY COLUMN `flag` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `bonus_script` MODIFY COLUMN `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `bonus_script` MODIFY COLUMN `icon` SMALLINT(3) NOT NULL DEFAULT '-1';

+ 0 - 6
sql-files/upgrades/upgrade_20150211_skillset.sql

@@ -1,6 +0,0 @@
--- Resetting all `lv` of skills that has `flag` >= 3 (the skill that its `learned_lv` has been changed by script or special case by `learned_lv` + SKILL_FLAG_REPLACED_LV_0)
--- If there's ALL_INCCARRY and ALL_BUYING_STORE, set the `flag` to SKILL_FLAG_PERM_GRANTED (new value is 3), those are exclusive skills given in our official scripts!
-
-UPDATE `skill` SET `lv` = `flag` - 3 WHERE `flag` >= 3;
-UPDATE `skill` SET `flag` = 0 WHERE `flag` >= 3;
-UPDATE `skill` SET `flag` = 3 WHERE `id` = 681 OR `id` = 2535;

+ 0 - 12
sql-files/upgrades/upgrade_20150327_market.sql

@@ -1,12 +0,0 @@
---
--- Table `market` for market shop persistency
---
-
-CREATE TABLE IF NOT EXISTS `market` (
-  `name` varchar(32) NOT NULL DEFAULT '',
-  `nameid` SMALLINT(5) UNSIGNED NOT NULL,
-  `price` INT(11) UNSIGNED NOT NULL,
-  `amount` SMALLINT(5) UNSIGNED NOT NULL,
-  `flag` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
-  PRIMARY KEY  (`name`,`nameid`)
-) ENGINE = MyISAM;

+ 0 - 9
sql-files/upgrades/upgrade_20150408.sql

@@ -1,9 +0,0 @@
--- Move `bank_vault` value from `login` to `global_reg_value`.
--- Please be careful if you're running multi char-server, better you do this step manually to move the `bank_vault`
--- to proper `global_reg_value` tables of char-servers used.
-INSERT INTO `global_reg_value` (`char_id`, `str`, `value`, `type`, `account_id`)
-    SELECT '0', '#BANKVAULT', `bank_vault`, '2', `account_id`
-	    FROM `login` WHERE `bank_vault` != 0;
-
--- Remove `bank_vault` from `login` table, login-server side.
-ALTER TABLE `login` DROP `bank_vault`;

+ 0 - 1
sql-files/upgrades/upgrade_20150408_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` CHANGE `type` `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F') NOT NULL DEFAULT 'P';

+ 0 - 68
sql-files/upgrades/upgrade_20150619.sql

@@ -1,68 +0,0 @@
-ALTER TABLE  `char` ADD COLUMN `sex` ENUM('M','F','U') NOT NULL default 'U';
-
---
--- Table structure for `db_roulette`
---
-
-CREATE TABLE `db_roulette` (
-  `index` int(11) NOT NULL default '0',
-  `level` smallint(5) unsigned NOT NULL,
-  `item_id` smallint(5) unsigned NOT NULL,
-  `amount` smallint(5) unsigned NOT NULL DEFAULT '1',
-  `flag` smallint(5) unsigned NOT NULL DEFAULT '1',
-  PRIMARY KEY (`index`)
-) ENGINE=MyISAM;
-
--- ----------------------------
--- Records of db_roulette
--- ----------------------------
--- Info: http://ro.gnjoy.com/news/update/View.asp?seq=157&curpage=1
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 0, 1, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 1, 1, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 9, 2, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 10, 2, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 11, 2, 603, 1, 0 ); -- Old_Blue_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 12, 2, 608, 1, 0 ); -- Seed_Of_Yggdrasil
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 13, 2, 607, 1, 0 ); -- Yggdrasilberry
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 14, 2, 12522, 1, 0 ); -- E_Blessing_10_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 15, 2, 6223, 1, 0 ); -- Carnium
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 16, 2, 6224, 1, 0 ); -- Bradium
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 17, 3, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 18, 3, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 19, 3, 12108, 1, 0 ); -- Bundle_Of_Magic_Scroll
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 20, 3, 617, 1, 0 ); -- Old_Violet_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 21, 3, 12514, 1, 0 ); -- E_Abrasive
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 22, 3, 7444, 1, 0 ); -- Treasure_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 23, 3, 969, 1, 0 ); -- Gold
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 24, 4, 675, 1, 1 ); -- Silver_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 25, 4, 671, 1, 0 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 26, 4, 616, 1, 0 ); -- Old_Card_Album
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 27, 4, 12516, 1, 0 ); -- E_Small_Life_Potion
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 28, 4, 22777, 1, 0 ); -- Gift_Buff_Set
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 29, 4, 6231, 1, 0 ); -- Guarantee_Weapon_6Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 36, 6, 12766, 1, 0 ); -- Reward_Job_BM25
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 37, 6, 6234, 1, 0 ); -- Guarantee_Armor_7Up
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 38, 6, 6233, 1, 0 ); -- Guarantee_Armor_8Up
-
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 39, 7, 671, 1, 1 ); -- Gold_Coin
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 40, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up
-INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 41, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up	// KRO lists this twice

+ 0 - 1
sql-files/upgrades/upgrade_20150619_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` MODIFY `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Y') NOT NULL default 'P';

+ 0 - 1
sql-files/upgrades/upgrade_20150804_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` CHANGE `type` `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Z') NOT NULL DEFAULT 'P';

+ 0 - 1
sql-files/upgrades/upgrade_20150828.sql

@@ -1 +0,0 @@
-ALTER TABLE `char` ADD COLUMN `hotkey_rowshift` TINYINT(3) UNSIGNED NOT NULL DEFAULT  '0';

+ 0 - 66
sql-files/upgrades/upgrade_20150831.sql

@@ -1,66 +0,0 @@
-ALTER TABLE `mapreg` ADD PRIMARY KEY (`varname`, `index`);
-ALTER TABLE `mapreg` DROP INDEX `varname`;
-ALTER TABLE `mapreg` DROP INDEX `index`;
-ALTER TABLE `mapreg` MODIFY `varname` varchar(32) binary NOT NULL;
-
-CREATE TABLE IF NOT EXISTS `acc_reg_num` (
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` int(11) NOT NULL default '0',
-  PRIMARY KEY (`account_id`,`key`,`index`),
-  KEY `account_id` (`account_id`)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `acc_reg_str` (
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` varchar(254) NOT NULL default '0',
-  PRIMARY KEY (`account_id`,`key`,`index`),
-  KEY `account_id` (`account_id`)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `char_reg_num` (
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` int(11) NOT NULL default '0',
-  PRIMARY KEY (`char_id`,`key`,`index`),
-  KEY `char_id` (`char_id`)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `char_reg_str` (
-  `char_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` varchar(254) NOT NULL default '0',
-  PRIMARY KEY (`char_id`,`key`,`index`),
-  KEY `char_id` (`char_id`)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `global_acc_reg_num` (
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` int(11) NOT NULL default '0',
-  PRIMARY KEY (`account_id`,`key`,`index`),
-  KEY `account_id` (`account_id`)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `global_acc_reg_str` (
-  `account_id` int(11) unsigned NOT NULL default '0',
-  `key` varchar(32) binary NOT NULL default '',
-  `index` int(11) unsigned NOT NULL default '0',
-  `value` varchar(254) NOT NULL default '0',
-  PRIMARY KEY (`account_id`,`key`,`index`),
-  KEY `account_id` (`account_id`)
-) ENGINE=MyISAM;
-
-INSERT INTO `acc_reg_num` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` NOT LIKE '%$';
-INSERT INTO `acc_reg_str` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` LIKE '%$';
-INSERT INTO `char_reg_num` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` NOT LIKE '%$';
-INSERT INTO `char_reg_str` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` LIKE '%$';
-INSERT INTO `global_acc_reg_num` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` NOT LIKE '%$';
-INSERT INTO `global_acc_reg_str` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` LIKE '%$';
-# DROP TABLE `global_reg_value`;

+ 0 - 1
sql-files/upgrades/upgrade_20150917_log.sql

@@ -1 +0,0 @@
-ALTER TABLE `picklog` MODIFY `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Z','Q') NOT NULL default 'P';

+ 0 - 19
sql-files/upgrades/upgrade_20151230_log.sql

@@ -1,19 +0,0 @@
---
--- Table structure for table `feedinglog`
---
-
-CREATE TABLE IF NOT EXISTS `feedinglog` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  `time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
-  `char_id` INT(11) NOT NULL,
-  `target_id` INT(11) NOT NULL,
-  `target_class` SMALLINT(11) NOT NULL,
-  `type` ENUM('P','H','O') NOT NULL, -- P: Pet, H: Homunculus, O: Other
-  `intimacy` INT(11) UNSIGNED NOT NULL,
-  `item_id` SMALLINT(5) UNSIGNED NOT NULL,
-  `map` VARCHAR(11) NOT NULL,
-  `x` SMALLINT(5) UNSIGNED NOT NULL,
-  `y` SMALLINT(5) UNSIGNED NOT NULL,
-  PRIMARY KEY  (`id`)
-) ENGINE = MyISAM AUTO_INCREMENT = 1;
-

+ 25 - 0
sql-files/upgrades/upgrade_20170727.sql

@@ -0,0 +1,25 @@
+ALTER TABLE `char`
+	ADD COLUMN `title_id` int(11) unsigned NOT NULL default '0' AFTER `clan_id`;
+
+--
+-- Table structure for table `achievement`
+--
+
+CREATE TABLE IF NOT EXISTS `achievement` (
+  `char_id` int(11) unsigned NOT NULL default '0',
+  `id` bigint(11) unsigned NOT NULL,
+  `count1` mediumint(8) unsigned NOT NULL default '0',
+  `count2` mediumint(8) unsigned NOT NULL default '0',
+  `count3` mediumint(8) unsigned NOT NULL default '0',
+  `count4` mediumint(8) unsigned NOT NULL default '0',
+  `count5` mediumint(8) unsigned NOT NULL default '0',
+  `count6` mediumint(8) unsigned NOT NULL default '0',
+  `count7` mediumint(8) unsigned NOT NULL default '0',
+  `count8` mediumint(8) unsigned NOT NULL default '0',
+  `count9` mediumint(8) unsigned NOT NULL default '0',
+  `count10` mediumint(8) unsigned NOT NULL default '0',
+  `completed` datetime,
+  `rewarded` datetime,
+  PRIMARY KEY (`char_id`,`id`),
+  KEY `char_id` (`char_id`)
+) ENGINE=MyISAM;

+ 2 - 0
sql-files/upgrades/upgrade_20170806.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `char`
+	ADD COLUMN `show_equip` tinyint(3) unsigned NOT NULL default '0' AFTER `title_id`;

+ 15 - 8
src/char/Makefile.in

@@ -18,6 +18,12 @@ CHAR_OBJ = $(shell ls *.c | sed -e "s/\.c/\.o/g") $(shell ls *.cpp | sed -e "s/\
 CHAR_DIR_OBJ = $(CHAR_OBJ:%=obj/%)
 CHAR_H = $(shell ls ../char/*.h)
 
+YAML_CPP_OBJ = $(shell find ../../3rdparty/yaml-cpp/ -type f -name "*.cpp" | sed -e "s/\.cpp/\.o/g" )
+YAML_CPP_DIR_OBJ = $(YAML_CPP_OBJ:%=obj/%)
+YAML_CPP_AR = ../../3rdparty/yaml-cpp/obj/yaml-cpp.a
+YAML_CPP_H = $(shell find ../../3rdparty/yaml-cpp/ -type f -name "*.h")
+YAML_CPP_INCLUDE = -I../../3rdparty/yaml-cpp/include
+
 HAVE_MYSQL=@HAVE_MYSQL@
 ifeq ($(HAVE_MYSQL),yes)	
 	SERVER_DEPENDS=char-server
@@ -26,8 +32,6 @@ else
 endif
 ALL_DEPENDS=server
 
-CXXFLAGS=-std=c++11
-
 @SET_MAKE@
 
 #####################################################################
@@ -51,9 +55,9 @@ help:
 #####################################################################
 
 
-char-server: obj $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR)
+char-server: obj $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(YAML_CPP_AR)
 	@echo "	LD	@OCHR@@EXEEXT@"
-	@@CXX@ @LDFLAGS@ -o ../../@OCHR@@EXEEXT@ $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@
+	@@CXX@ @LDFLAGS@ -o ../../@OCHR@@EXEEXT@ $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(YAML_CPP_AR) @LIBS@ @MYSQL_LIBS@
 
 needs_mysql:
 	@echo "MySQL not found or disabled by the configure script"
@@ -63,13 +67,13 @@ obj:
 	@echo "	MKDIR	obj"
 	@-mkdir obj
 
-obj/%.o: %.c $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H)
+obj/%.o: %.c $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H) $(YAML_CPP_H)
 	@echo "	CC	$<"
-	@@CC@ @CFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CC@ @CFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
 	
-obj/%.o: %.cpp $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H)
+obj/%.o: %.cpp $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H) $(YAML_CPP_H)
 	@echo "	CXX	$<"
-	@@CXX@ @CXXFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
+	@@CXX@ @CXXFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
 
 # missing object files
 $(COMMON_AR):
@@ -80,3 +84,6 @@ $(MT19937AR_OBJ):
 
 $(LIBCONFIG_AR):
 	@$(MAKE) -C ../../3rdparty/libconfig
+	
+$(YAML_CPP_AR):
+	@$(MAKE) -C ../../3rdparty/yaml-cpp

+ 8 - 2
src/char/char-server.vcxproj

@@ -94,6 +94,7 @@
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>$(DefineConstants);WIN32;FD_SETSIZE=4096;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -109,6 +110,7 @@
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>$(DefineConstants);WIN32;FD_SETSIZE=4096;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -126,6 +128,7 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>$(DefineConstants);WIN32;FD_SETSIZE=4096;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -145,6 +148,7 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>$(DefineConstants);WIN32;FD_SETSIZE=4096;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\yaml-cpp\include\</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -161,6 +165,7 @@
     <ClInclude Include="char_logif.h" />
     <ClInclude Include="char_mapif.h" />
     <ClInclude Include="inter.h" />
+    <ClInclude Include="int_achievement.h" />
     <ClInclude Include="int_auction.h" />
     <ClInclude Include="int_clan.h" />
     <ClInclude Include="int_elemental.h" />
@@ -181,7 +186,8 @@
     <ClCompile Include="char_cnslif.c" />
     <ClCompile Include="char_logif.c" />
     <ClCompile Include="char_mapif.c" />
-    <ClCompile Include="inter.c" />
+    <ClCompile Include="inter.cpp" />
+    <ClCompile Include="int_achievement.c" />
     <ClCompile Include="int_auction.c" />
     <ClCompile Include="int_clan.c" />
     <ClCompile Include="int_elemental.c" />
@@ -192,7 +198,7 @@
     <ClCompile Include="int_party.c" />
     <ClCompile Include="int_pet.c" />
     <ClCompile Include="int_quest.c" />
-    <ClCompile Include="int_storage.c" />
+    <ClCompile Include="int_storage.cpp" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">

+ 8 - 2
src/char/char-server.vcxproj.filters

@@ -26,6 +26,9 @@
     <ClInclude Include="char_mapif.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="int_achievement.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="int_auction.h">
       <Filter>Header Files</Filter>
     </ClInclude>
@@ -79,6 +82,9 @@
     <ClCompile Include="char_mapif.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="int_achievement.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="int_auction.c">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -106,10 +112,10 @@
     <ClCompile Include="int_quest.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="int_storage.c">
+    <ClCompile Include="int_storage.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="inter.c">
+    <ClCompile Include="inter.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="int_clan.c">

+ 66 - 20
src/char/char.cpp

@@ -300,7 +300,8 @@ int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p){
 		(p->head_mid != cp->head_mid) || (p->head_bottom != cp->head_bottom) || (p->delete_date != cp->delete_date) ||
 		(p->rename != cp->rename) || (p->robe != cp->robe) || (p->character_moves != cp->character_moves) ||
 		(p->unban_time != cp->unban_time) || (p->font != cp->font) || (p->uniqueitem_counter != cp->uniqueitem_counter) ||
-		(p->hotkey_rowshift != cp->hotkey_rowshift) || (p->clan_id != cp->clan_id )
+		(p->hotkey_rowshift != cp->hotkey_rowshift) || (p->clan_id != cp->clan_id ) || (p->title_id != cp->title_id) ||
+		(p->show_equip != cp->show_equip)
 	)
 	{	//Save status
 		if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `base_level`='%d', `job_level`='%d',"
@@ -311,7 +312,7 @@ int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p){
 			"`weapon`='%d',`shield`='%d',`head_top`='%d',`head_mid`='%d',`head_bottom`='%d',"
 			"`last_map`='%s',`last_x`='%d',`last_y`='%d',`save_map`='%s',`save_x`='%d',`save_y`='%d', `rename`='%d',"
 			"`delete_date`='%lu',`robe`='%d',`moves`='%d',`font`='%u',`uniqueitem_counter`='%u',"
-			"`hotkey_rowshift`='%d', `clan_id`='%d'"
+			"`hotkey_rowshift`='%d', `clan_id`='%d', `title_id`='%lu', `show_equip`='%d'"
 			" WHERE `account_id`='%d' AND `char_id` = '%d'",
 			schema_config.char_db, p->base_level, p->job_level,
 			p->base_exp, p->job_exp, p->zeny,
@@ -323,7 +324,7 @@ int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p){
 			mapindex_id2name(p->save_point.map), p->save_point.x, p->save_point.y, p->rename,
 			(unsigned long)p->delete_date, // FIXME: platform-dependent size
 			p->robe, p->character_moves, p->font, p->uniqueitem_counter,
-			p->hotkey_rowshift, p->clan_id,
+			p->hotkey_rowshift, p->clan_id, p->title_id, p->show_equip,
 			p->account_id, p->char_id) )
 		{
 			Sql_ShowDebug(sql_handle);
@@ -917,7 +918,7 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
 		"`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,"
 		"`status_point`,`skill_point`,`option`,`karma`,`manner`,`hair`,`hair_color`,"
 		"`clothes_color`,`body`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`rename`,`delete_date`,"
-		"`robe`,`moves`,`unban_time`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`"
+		"`robe`,`moves`,`unban_time`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`,`title_id`,`show_equip`"
 		" FROM `%s` WHERE `account_id`='%d' AND `char_num` < '%d'", schema_config.char_db, sd->account_id, MAX_CHARS)
 	||	SQL_ERROR == SqlStmt_Execute(stmt)
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 0,  SQLDT_INT,    &p.char_id, 0, NULL, NULL)
@@ -962,7 +963,9 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 39, SQLDT_UCHAR,  &p.font, 0, NULL, NULL)
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 40, SQLDT_UINT,   &p.uniqueitem_counter, 0, NULL, NULL)
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 41, SQLDT_ENUM,   &sex, sizeof(sex), NULL, NULL)
-	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 42, SQLDT_UCHAR,   &p.hotkey_rowshift, 0, NULL, NULL)
+	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 42, SQLDT_UCHAR,  &p.hotkey_rowshift, 0, NULL, NULL)
+	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 43, SQLDT_ULONG,  &p.title_id, 0, NULL, NULL)
+	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 44, SQLDT_UINT16, &p.show_equip, 0, NULL, NULL)
 	)
 	{
 		SqlStmt_ShowDebug(stmt);
@@ -1026,7 +1029,7 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
 		"`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,"
 		"`hair_color`,`clothes_color`,`body`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
 		"`save_map`,`save_x`,`save_y`,`partner_id`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,`robe`, `moves`,"
-		"`unban_time`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`,`clan_id`"
+		"`unban_time`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`,`clan_id`,`title_id`,`show_equip`"
 		" FROM `%s` WHERE `char_id`=? LIMIT 1", schema_config.char_db)
 	||	SQL_ERROR == SqlStmt_BindParam(stmt, 0, SQLDT_INT, &char_id, 0)
 	||	SQL_ERROR == SqlStmt_Execute(stmt)
@@ -1090,6 +1093,8 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 57, SQLDT_ENUM,   &sex, sizeof(sex), NULL, NULL)
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 58, SQLDT_UCHAR,  &p->hotkey_rowshift, 0, NULL, NULL)
 	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 59, SQLDT_INT,    &p->clan_id, 0, NULL, NULL)
+	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 60, SQLDT_ULONG,  &p->title_id, 0, NULL, NULL)
+	||	SQL_ERROR == SqlStmt_BindColumn(stmt, 61, SQLDT_UINT16, &p->show_equip, 0, NULL, NULL)
 	)
 	{
 		SqlStmt_ShowDebug(stmt);
@@ -1423,12 +1428,16 @@ int char_make_new_char_sql(struct char_session_data* sd, char* name_, int str, i
 		return -2; // invalid input
 #endif
 
-
 	// check the number of already existing chars in this account
 	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT 1 FROM `%s` WHERE `account_id` = '%d'", schema_config.char_db, sd->account_id) )
 		Sql_ShowDebug(sql_handle);
+#ifdef VIP_ENABLE
+	if( Sql_NumRows(sql_handle) >= MAX_CHARS )
+		return -2; // character account limit exceeded
+#else
 	if( Sql_NumRows(sql_handle) >= sd->char_slots )
 		return -2; // character account limit exceeded
+#endif
 
 	// check char slot
 	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT 1 FROM `%s` WHERE `account_id` = '%d' AND `char_num` = '%d' LIMIT 1", schema_config.char_db, sd->account_id, slot) )
@@ -1516,22 +1525,34 @@ int char_divorce_char_sql(int partner_id1, int partner_id2){
 /* Returns 0 if successful
  * Returns < 0 for error
  */
-int char_delete_char_sql(uint32 char_id){
+enum e_char_del_response char_delete(struct char_session_data* sd, uint32 char_id){
 	char name[NAME_LENGTH];
 	char esc_name[NAME_LENGTH*2+1]; //Name needs be escaped.
 	uint32 account_id;
 	int party_id, guild_id, hom_id, base_level, partner_id, father_id, mother_id, elemental_id;
+	time_t delete_date;
 	char *data;
 	size_t len;
+	int i, k;
+
+	ARR_FIND(0, MAX_CHARS, i, sd->found_char[i] == char_id);
 
-	if (SQL_ERROR == Sql_Query(sql_handle, "SELECT `name`,`account_id`,`party_id`,`guild_id`,`base_level`,`homun_id`,`partner_id`,`father`,`mother`,`elemental_id` FROM `%s` WHERE `char_id`='%d'", schema_config.char_db, char_id))
+	// Such a character does not exist in the account
+	if (i == MAX_CHARS) {
+		ShowInfo("Char deletion aborted: %s, Account ID: %u, Character ID: %u\n", name, sd->account_id, char_id);
+		return CHAR_DELETE_NOTFOUND;
+	}
+
+	if (SQL_ERROR == Sql_Query(sql_handle, "SELECT `name`,`account_id`,`party_id`,`guild_id`,`base_level`,`homun_id`,`partner_id`,`father`,`mother`,`elemental_id`,`delete_date` FROM `%s` WHERE `account_id`='%u' AND `char_id`='%u'", schema_config.char_db, sd->account_id, char_id)){
 		Sql_ShowDebug(sql_handle);
+		return CHAR_DELETE_DATABASE;
+	}
 
 	if( SQL_SUCCESS != Sql_NextRow(sql_handle) )
 	{
-		ShowError("delete_char_sql: Unable to fetch character data, deletion aborted.\n");
+		ShowInfo("Char deletion aborted: %s, Account ID: %u, Character ID: %u\n", name, sd->account_id, char_id);
 		Sql_FreeResult(sql_handle);
-		return -1;
+		return CHAR_DELETE_NOTFOUND;
 	}
 
 	Sql_GetData(sql_handle, 0, &data, &len); safestrncpy(name, data, NAME_LENGTH);
@@ -1544,29 +1565,34 @@ int char_delete_char_sql(uint32 char_id){
 	Sql_GetData(sql_handle, 7, &data, NULL); father_id = atoi(data);
 	Sql_GetData(sql_handle, 8, &data, NULL); mother_id = atoi(data);
 	Sql_GetData(sql_handle, 9, &data, NULL); elemental_id = atoi(data);
+	Sql_GetData(sql_handle,10, &data, NULL); delete_date = strtoul(data, NULL, 10);
 
 	Sql_EscapeStringLen(sql_handle, esc_name, name, zmin(len, NAME_LENGTH));
 	Sql_FreeResult(sql_handle);
 
 	//check for config char del condition [Lupus]
-	// TODO: Move this out to packet processing (0x68/0x1fb).
 	if( ( charserv_config.char_config.char_del_level > 0 && base_level >= charserv_config.char_config.char_del_level )
 	 || ( charserv_config.char_config.char_del_level < 0 && base_level <= -charserv_config.char_config.char_del_level )
 	) {
 			ShowInfo("Char deletion aborted: %s, BaseLevel: %i\n", name, base_level);
-			return -1;
+			return CHAR_DELETE_BASELEVEL;
 	}
 
 	if (charserv_config.char_config.char_del_restriction&CHAR_DEL_RESTRICT_GUILD && guild_id) // character is in guild
 	{
 		ShowInfo("Char deletion aborted: %s, Guild ID: %i\n", name, guild_id);
-		return -1;
+		return CHAR_DELETE_GUILD;
 	}
 
 	if (charserv_config.char_config.char_del_restriction&CHAR_DEL_RESTRICT_PARTY && party_id) // character is in party
 	{
 		ShowInfo("Char deletion aborted: %s, Party ID: %i\n", name, party_id);
-		return -1;
+		return CHAR_DELETE_PARTY;
+	}
+
+	if( charserv_config.char_config.char_del_delay > 0 && ( !delete_date || delete_date > time(NULL) ) ){ // not queued or delay not yet passed
+		ShowInfo("Char deletion aborted: %s, Time was not set or has not been reached ye\n", name );
+		return CHAR_DELETE_TIME;
 	}
 
 	/* Divorce [Wizputer] */
@@ -1580,7 +1606,7 @@ int char_delete_char_sql(uint32 char_id){
 
 		if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `child`='0' WHERE `char_id`='%d' OR `char_id`='%d'", schema_config.char_db, father_id, mother_id) )
 			Sql_ShowDebug(sql_handle);
-		if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `id` = '410'AND (`char_id`='%d' OR `char_id`='%d')", schema_config.skill_db, father_id, mother_id) )
+		if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `id` = '410' AND (`char_id`='%d' OR `char_id`='%d')", schema_config.skill_db, father_id, mother_id) )
 			Sql_ShowDebug(sql_handle);
 
 		WBUFW(buf,0) = 0x2b25;
@@ -1671,6 +1697,10 @@ int char_delete_char_sql(uint32 char_id){
 	if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d'", schema_config.bonus_script_db, char_id) )
 		Sql_ShowDebug(sql_handle);
 
+	/* Achievement Data */
+	if (SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d'", schema_config.achievement_table, char_id))
+		Sql_ShowDebug(sql_handle);
+
 	if (charserv_config.log_char) {
 		if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s`(`time`, `account_id`,`char_num`,`char_msg`,`name`) VALUES (NOW(), '%d', '%d', 'Deleted char (CID %d)', '%s')",
 			schema_config.charlog_db, account_id, 0, char_id, esc_name) )
@@ -1693,7 +1723,14 @@ int char_delete_char_sql(uint32 char_id){
 		mapif_parse_BreakGuild(0,guild_id);
 	else if( guild_id )
 		inter_guild_leave(guild_id, account_id, char_id);// Leave your guild.
-	return 0;
+
+	// refresh character list cache
+	for(k = i; k < MAX_CHARS-1; k++){
+		sd->found_char[k] = sd->found_char[k+1];
+	}
+	sd->found_char[MAX_CHARS-1] = -1;
+
+	return CHAR_DELETE_OK;
 }
 
 /**
@@ -2236,7 +2273,7 @@ bool char_checkdb(void){
                 schema_config.auction_db, schema_config.quest_db, schema_config.homunculus_db, schema_config.skill_homunculus_db,
                 schema_config.mercenary_db, schema_config.mercenary_owner_db,
 		schema_config.elemental_db, schema_config.ragsrvinfo_db, schema_config.skillcooldown_db, schema_config.bonus_script_db,
-		schema_config.clan_table, schema_config.clan_alliance_table, schema_config.mail_attachment_db
+		schema_config.clan_table, schema_config.clan_alliance_table, schema_config.mail_attachment_db, schema_config.achievement_table
 	};
 	ShowInfo("Start checking DB integrity\n");
 	for (i=0; i<ARRAYLENGTH(sqltable); i++){ //check if they all exist and we can acces them in sql-server
@@ -2252,7 +2289,7 @@ bool char_checkdb(void){
 		"`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,`hair_color`,`clothes_color`,`weapon`,"
 		"`shield`,`head_top`,`head_mid`,`head_bottom`,`robe`,`last_map`,`last_x`,`last_y`,`save_map`,"
 		"`save_x`,`save_y`,`partner_id`,`online`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,"
-		"`moves`,`unban_time`,`font`,`sex`,`hotkey_rowshift`,`clan_id`,`last_login`"
+		"`moves`,`unban_time`,`font`,`sex`,`hotkey_rowshift`,`clan_id`,`last_login`,`title_id`,`show_equip`"
 		" FROM `%s` LIMIT 1;", schema_config.char_db) ){
 		Sql_ShowDebug(sql_handle);
 		return false;
@@ -2314,7 +2351,7 @@ bool char_checkdb(void){
 	//checking guild_db
 	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT  `guild_id`,`name`,`char_id`,`master`,`guild_lv`,"
 			"`connect_member`,`max_member`,`average_lv`,`exp`,`next_exp`,`skill_point`,`mes1`,`mes2`,"
-			"`emblem_len`,`emblem_id`,`emblem_data`"
+			"`emblem_len`,`emblem_id`,`emblem_data`,`last_master_change`"
 			" FROM `%s` LIMIT 1;", schema_config.guild_db) ){
 		Sql_ShowDebug(sql_handle);
 		return false;
@@ -2478,6 +2515,12 @@ bool char_checkdb(void){
 		Sql_ShowDebug(sql_handle);
 		return false;
 	}
+	//checking achievement_table
+	if (SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`id`,`count1`,`count2`,`count3`,`count4`,`count5`,`count6`,`count7`,`count8`,`count9`,`count10`,`completed`,`rewarded`"
+		" FROM `%s` LIMIT 1;", schema_config.achievement_table)) {
+		Sql_ShowDebug(sql_handle);
+		return false;
+	}
 	Sql_FreeResult(sql_handle);
 	ShowInfo("DB integrity check finished with success\n");
 	return true;
@@ -2573,6 +2616,8 @@ void char_sql_config_read(const char* cfgName) {
 			safestrncpy(schema_config.clan_table, w2, sizeof(schema_config.clan_table));
 		else if(!strcmpi(w1,"clan_alliance_table"))
 			safestrncpy(schema_config.clan_alliance_table, w2, sizeof(schema_config.clan_alliance_table));
+		else if(!strcmpi(w1,"achievement_table"))
+			safestrncpy(schema_config.achievement_table, w2, sizeof(schema_config.achievement_table));
 		//support the import command, just like any other config
 		else if(!strcmpi(w1,"import"))
 			char_sql_config_read(w2);
@@ -2622,6 +2667,7 @@ void char_set_default_sql(){
 	safestrncpy(schema_config.acc_reg_num_table,"acc_reg_num",sizeof(schema_config.acc_reg_num_table));
 	safestrncpy(schema_config.clan_table,"clan",sizeof(schema_config.clan_table));
 	safestrncpy(schema_config.clan_table,"clan_alliance",sizeof(schema_config.clan_alliance_table));
+	safestrncpy(schema_config.achievement_table,"achievement",sizeof(schema_config.achievement_table));
 }
 
 //set default config

+ 12 - 2
src/char/char.h

@@ -38,6 +38,16 @@ enum e_char_delete_restriction {
 	CHAR_DEL_RESTRICT_ALL
 };
 
+enum e_char_del_response {
+	CHAR_DELETE_OK = 0,
+	CHAR_DELETE_DATABASE,
+	CHAR_DELETE_NOTFOUND,
+	CHAR_DELETE_BASELEVEL,
+	CHAR_DELETE_GUILD,
+	CHAR_DELETE_PARTY,
+	CHAR_DELETE_TIME,
+};
+
 struct Schema_Config {
 	int db_use_sqldbs;
 	char db_path[1024];
@@ -80,6 +90,7 @@ struct Schema_Config {
 	char char_reg_num_table[DB_NAME_LEN];
 	char clan_table[DB_NAME_LEN];
 	char clan_alliance_table[DB_NAME_LEN];
+	char achievement_table[DB_NAME_LEN];
 };
 extern struct Schema_Config schema_config;
 
@@ -222,7 +233,6 @@ struct char_session_data {
 	uint8 char_slots; // total number of characters that can be created
 	uint8 chars_vip;
 	uint8 chars_billing;
-	uint32 version;
 	uint8 clienttype;
 	char new_name[NAME_LENGTH];
 	char birthdate[10+1];  // YYYY-MM-DD
@@ -272,7 +282,7 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p);
 int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p);
 int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_everything);
 int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf);
-int char_delete_char_sql(uint32 char_id);
+enum e_char_del_response char_delete(struct char_session_data* sd, uint32 char_id);
 int char_rename_char_sql(struct char_session_data *sd, uint32 char_id);
 int char_divorce_char_sql(int partner_id1, int partner_id2);
 int char_memitemdata_to_sql(const struct item items[], int max, int id, enum storage_type tableswitch, uint8 stor_id);

+ 75 - 94
src/char/char_clif.c

@@ -303,8 +303,7 @@ int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd ){
 //----------------------------------------
 void chclif_charlist_notify( int fd, struct char_session_data* sd ){
 // This is needed on RE clients from october 2015 onwards
-// If you want to use one replace false by true here
-#if false && PACKETVER >= 20151001
+#if defined(PACKETVER_RE) && PACKETVER >= 20151001
 	WFIFOHEAD(fd, 10);
 	WFIFOW(fd, 0) = 0x9a0;
 	// pages to req / send them all in 1 until mmo_chars_fromsql can split them up
@@ -324,21 +323,25 @@ void chclif_charlist_notify( int fd, struct char_session_data* sd ){
 // Function to send characters to a player
 //----------------------------------------
 int chclif_mmo_send006b(int fd, struct char_session_data* sd){
-	int j, offset = 0;
-	bool newvers = (sd->version >= date2version(20100413) );
-	if(newvers) //20100413
-		offset += 3;
+	int j, offset;
+
+#if PACKETVER >= 20100413
+	offset = 3;
+#else
+	offset = 0;
+#endif
+
 	if (charserv_config.save_log)
 		ShowInfo("Loading Char Data ("CL_BOLD"%d"CL_RESET")\n",sd->account_id);
 
 	j = 24 + offset; // offset
 	WFIFOHEAD(fd,j + MAX_CHARS*MAX_CHAR_BUF);
 	WFIFOW(fd,0) = 0x6b;
-	if(newvers){ //20100413
+#if PACKETVER >= 20100413
 		WFIFOB(fd,4) = MAX_CHARS; // Max slots.
 		WFIFOB(fd,5) = MIN_CHARS; // Available slots. (PremiumStartSlot)
 		WFIFOB(fd,6) = MIN_CHARS+sd->chars_vip; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red)
-	}
+#endif
 	memset(WFIFOP(fd,4 + offset), 0, 20); // unknown bytes
 	j+=char_mmo_chars_fromsql(sd, WFIFOP(fd,j));
 	WFIFOW(fd,2) = j; // packet len
@@ -377,16 +380,18 @@ void chclif_mmo_send099d(int fd, struct char_session_data *sd) {
  * Function to choose wich kind of charlist to send to client depending on his version
  */
 void chclif_mmo_char_send(int fd, struct char_session_data* sd){
-	ShowInfo("sd->version = %d\n",sd->version);
-	if(sd->version >= date2version(20130000) ){
-		chclif_mmo_send082d(fd,sd);
-		chclif_mmo_send006b(fd,sd);
-		chclif_charlist_notify(fd,sd);
-	} else
-		chclif_mmo_send006b(fd,sd);
+#if PACKETVER >= 20130000
+	chclif_mmo_send082d(fd, sd);
+	chclif_mmo_send006b(fd, sd);
+	chclif_charlist_notify(fd, sd);
+#else
+	chclif_mmo_send006b(fd,sd);
 	//@FIXME dump from kro doesn't show 6b transmission
-	if(sd->version >= date2version(20060819) )
- 		chclif_block_character(fd,sd);
+#endif
+
+#if PACKETVER >= 20060819
+ 	chclif_block_character(fd,sd);
+#endif
 }
 
 /*
@@ -432,17 +437,16 @@ void chclif_char_delete2_ack(int fd, uint32 char_id, uint32 result, time_t delet
 /// 3 (0x719): A database error occurred.
 /// 4 (0x71d): Deleting not yet possible time.
 /// 5 (0x71e): Date of birth do not match.
+/// 6 Name does not match.
+/// 7 Character Deletion has failed because you have entered an incorrect e-mail address.
 /// Any (0x718): An unknown error has occurred.
-/// HC: <082a>.W <char id>.L <Msg:0-5>.L
+/// HC: <082a>.W <char id>.L <Msg>.L
 void chclif_char_delete2_accept_ack(int fd, uint32 char_id, uint32 result) {
+#if PACKETVER >= 20130000
 	if(result == 1 ){
-		struct char_session_data* sd;
-		sd = (struct char_session_data*)session[fd]->session_data;
-
-		if( sd->version >= date2version(20130000) ){
-			chclif_mmo_char_send(fd, sd);
-		}
+		chclif_mmo_char_send(fd, session[fd]->session_data);
 	}
+#endif
 
 	WFIFOHEAD(fd,10);
 	WFIFOW(fd,0) = 0x82a;
@@ -561,10 +565,7 @@ int chclif_parse_char_delete2_accept(int fd, struct char_session_data* sd) {
 	FIFOSD_CHECK(12)
 	{
 		char birthdate[8+1];
-		uint32 char_id, i, k;
-		unsigned int base_level;
-		char* data;
-		time_t delete_date;
+		uint32 char_id;
 		char_id = RFIFOL(fd,2);
 
 		ShowInfo(CL_RED"Request Char Deletion: "CL_GREEN"%d (%d)"CL_RESET"\n", sd->account_id, char_id);
@@ -581,54 +582,36 @@ int chclif_parse_char_delete2_accept(int fd, struct char_session_data* sd) {
 		birthdate[8] = 0;
 		RFIFOSKIP(fd,12);
 
-		ARR_FIND( 0, MAX_CHARS, i, sd->found_char[i] == char_id );
-		if( i == MAX_CHARS )
-		{// character not found
-			chclif_char_delete2_accept_ack(fd, char_id, 3);
-			return 1;
-		}
-
-		if( SQL_SUCCESS != Sql_Query(sql_handle, "SELECT `base_level`,`delete_date` FROM `%s` WHERE `char_id`='%d'", schema_config.char_db, char_id) || SQL_SUCCESS != Sql_NextRow(sql_handle) )
-		{// data error
-			Sql_ShowDebug(sql_handle);
-			chclif_char_delete2_accept_ack(fd, char_id, 3);
-			return 1;
-		}
-
-		Sql_GetData(sql_handle, 0, &data, NULL); base_level = (unsigned int)strtoul(data, NULL, 10);
-		Sql_GetData(sql_handle, 1, &data, NULL); delete_date = strtoul(data, NULL, 10);
-
-		if( !delete_date || delete_date>time(NULL) )
-		{// not queued or delay not yet passed
-			chclif_char_delete2_accept_ack(fd, char_id, 4);
-			return 1;
-		}
-
-		if (!chclif_delchar_check(sd, birthdate, CHAR_DEL_BIRTHDATE)) { // Only check for birthdate
+		// Only check for birthdate
+		if (!chclif_delchar_check(sd, birthdate, CHAR_DEL_BIRTHDATE)) {
 			chclif_char_delete2_accept_ack(fd, char_id, 5);
 			return 1;
 		}
 
-		if( ( charserv_config.char_config.char_del_level > 0 && base_level >= (unsigned int)charserv_config.char_config.char_del_level )
-		|| ( charserv_config.char_config.char_del_level < 0 && base_level <= (unsigned int)(-charserv_config.char_config.char_del_level) ) )
-		{// character level config restriction
-			chclif_char_delete2_accept_ack(fd, char_id, 2);
-			return 1;
-		}
-
-		// success
-		if( char_delete_char_sql(char_id) < 0 ){
-			chclif_char_delete2_accept_ack(fd, char_id, 3);
-			return 1;
-		}
-
-		// refresh character list cache
-		for(k = i; k < MAX_CHARS-1; k++){
-			sd->found_char[k] = sd->found_char[k+1];
+		switch( char_delete(sd,char_id) ){
+			// success
+			case CHAR_DELETE_OK:
+				chclif_char_delete2_accept_ack(fd, char_id, 1);
+				break;
+			// data error
+			case CHAR_DELETE_DATABASE:
+			// character not found
+			case CHAR_DELETE_NOTFOUND:
+				chclif_char_delete2_accept_ack(fd, char_id, 3);
+				break;
+			// in a party
+			case CHAR_DELETE_PARTY:
+			// in a guild
+			case CHAR_DELETE_GUILD:
+			// character level config restriction
+			case CHAR_DELETE_BASELEVEL:
+				chclif_char_delete2_accept_ack(fd, char_id, 2);
+				break;
+			// not queued or delay not yet passed
+			case CHAR_DELETE_TIME:
+				chclif_char_delete2_accept_ack(fd, char_id, 4);
+				break;
 		}
-		sd->found_char[MAX_CHARS-1] = -1;
-
-		chclif_char_delete2_accept_ack(fd, char_id, 1);
 	}
 	return 1;
 }
@@ -751,7 +734,6 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){
 			node->login_id2  == login_id2 /*&&
 			node->ip         == ipl*/ )
 		{// authentication found (coming from map server)
-			sd->version = node->version;
 			idb_remove(auth_db, account_id);
 			char_auth_ok(fd, sd);
 		}
@@ -992,7 +974,9 @@ int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){
  * 0x70 <ErrorCode>B HC_REFUSE_DELETECHAR
  * @param fd
  * @param ErrorCode
- *   00 = Incorrect Email address
+ *	00 = Incorrect Email address
+ *	01 = Invalid Slot
+ *	02 = In a party or guild
  */
 void chclif_refuse_delchar(int fd, uint8 errCode){
 	WFIFOHEAD(fd,3);
@@ -1007,10 +991,9 @@ int chclif_parse_delchar(int fd,struct char_session_data* sd, int cmd){
 	else return 0;
 	{
 		char email[40];
-		int i, ch;
-		int cid = RFIFOL(fd,2);
+		uint32 cid = RFIFOL(fd,2);
 
-		ShowInfo(CL_RED"Request Char Deletion: "CL_GREEN"%d (%d)"CL_RESET"\n", sd->account_id, cid);
+		ShowInfo(CL_RED"Request Char Deletion: "CL_GREEN"%u (%u)"CL_RESET"\n", sd->account_id, cid);
 		memcpy(email, RFIFOP(fd,6), 40);
 		RFIFOSKIP(fd,( cmd == 0x68) ? 46 : 56);
 
@@ -1019,26 +1002,24 @@ int chclif_parse_delchar(int fd,struct char_session_data* sd, int cmd){
 			return 1;
 		}
 
-		// check if this char exists
-		ARR_FIND( 0, MAX_CHARS, i, sd->found_char[i] == cid );
-		if( i == MAX_CHARS ) { // Such a character does not exist in the account
-			chclif_refuse_delchar(fd,0);
-			return 1;
-		}
-
-		// remove char from list and compact it
-		for(ch = i; ch < MAX_CHARS-1; ch++)
-			sd->found_char[ch] = sd->found_char[ch+1];
-		sd->found_char[MAX_CHARS-1] = -1;
-
 		/* Delete character */
-		if(char_delete_char_sql(cid)<0){
-			//can't delete the char
-			//either SQL error or can't delete by some CONFIG conditions
-			//del fail
-			chclif_refuse_delchar(fd,0);
-			return 1;
+		switch( char_delete(sd,cid) ){
+			case CHAR_DELETE_OK:
+				break;
+			case CHAR_DELETE_DATABASE:
+			case CHAR_DELETE_BASELEVEL:
+			case CHAR_DELETE_TIME:
+				chclif_refuse_delchar(fd, 0);
+				return 1;
+			case CHAR_DELETE_NOTFOUND:
+				chclif_refuse_delchar(fd, 1);
+				return 1;
+			case CHAR_DELETE_GUILD:
+			case CHAR_DELETE_PARTY:
+				chclif_refuse_delchar(fd, 2);
+				return 1;
 		}
+
 		/* Char successfully deleted.*/
 		WFIFOHEAD(fd,2);
 		WFIFOW(fd,0) = 0x6f;

+ 4 - 10
src/char/char_logif.c

@@ -295,7 +295,7 @@ int chlogif_parse_ackconnect(int fd, struct char_session_data* sd){
 }
 
 int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){
-	if (RFIFOREST(fd) < 25)
+	if (RFIFOREST(fd) < 21)
 		return 0;
 	{
 		uint32 account_id = RFIFOL(fd,2);
@@ -304,19 +304,14 @@ int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){
 		uint8 sex = RFIFOB(fd,14);
 		uint8 result = RFIFOB(fd,15);
 		int request_id = RFIFOL(fd,16);
-		uint32 version = RFIFOL(fd,20);
-		uint8 clienttype = RFIFOB(fd,24);
-		RFIFOSKIP(fd,25);
+		uint8 clienttype = RFIFOB(fd,20);
+		RFIFOSKIP(fd,21);
 
 		if( session_isActive(request_id) && (sd=(struct char_session_data*)session[request_id]->session_data) &&
 			!sd->auth && sd->account_id == account_id && sd->login_id1 == login_id1 && sd->login_id2 == login_id2 && sd->sex == sex )
 		{
 			int client_fd = request_id;
-			sd->version = version;
 			sd->clienttype = clienttype;
-			if(sd->version != date2version(PACKETVER))
-				ShowWarning("aid=%d has an incorect version=%d in clientinfo. Server compiled for %d\n",
-					sd->account_id,sd->version,date2version(PACKETVER));
 
 			switch( result )
 			{
@@ -372,8 +367,7 @@ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){
 			// send characters to player
 			chclif_mmo_char_send(u_fd, sd);
 #if PACKETVER_SUPPORTS_PINCODE
-			if(sd->version >= date2version(20110309))
-				chlogif_pincode_start(u_fd,sd);
+			chlogif_pincode_start(u_fd,sd);
 #endif
 		}
 	}

+ 2 - 4
src/char/char_mapif.c

@@ -453,15 +453,14 @@ void chmapif_charselres(int fd, uint32 aid, uint8 res){
  * @return : 0 not enough data received, 1 success
  */
 int chmapif_parse_authok(int fd){
-	if( RFIFOREST(fd) < 19 )
+	if( RFIFOREST(fd) < 18 )
 		return 0;
 	else{
 		uint32 account_id = RFIFOL(fd,2);
 		uint32 login_id1 = RFIFOL(fd,6);
 		uint32 login_id2 = RFIFOL(fd,10);
 		uint32 ip = RFIFOL(fd,14);
-		int version = RFIFOB(fd,18);
-		RFIFOSKIP(fd,19);
+		RFIFOSKIP(fd,18);
 
 		if( runflag != CHARSERVER_ST_RUNNING ){
 			chmapif_charselres(fd,account_id,0);
@@ -478,7 +477,6 @@ int chmapif_parse_authok(int fd){
 			node->login_id2 = login_id2;
 			//node->sex = 0;
 			node->ip = ntohl(ip);
-			node->version = version; //upd version for mapserv
 			//node->expiration_time = 0; // unlimited/unknown time by default (not display in map-server)
 			//node->gmlevel = 0;
 			idb_put(auth_db, account_id, node);

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików