Ver código fonte

Merge branch 'master' into feature/store_taxes

Cydh 5 anos atrás
pai
commit
812895b98a
100 arquivos alterados com 5788 adições e 2462 exclusões
  1. 6 0
      .editorconfig
  2. 1 1
      .gitattributes
  3. 3 0
      .gitignore
  4. 61 194
      README.md
  5. 15 36
      appveyor.yml
  6. BIN
      branding/logo.png
  7. 2 1
      conf/battle/battle.conf
  8. 0 3
      conf/battle/guild.conf
  9. 1 0
      conf/battle/pet.conf
  10. 1 1
      conf/battle/player.conf
  11. 1 0
      conf/groups.conf
  12. 0 1
      conf/inter_athena.conf
  13. 40 0
      db/achievement_level_db.yml
  14. 32 0
      db/import-tmpl/achievement_level_db.yml
  15. 1 0
      db/import-tmpl/item_db.txt
  16. 238 197
      db/pre-re/achievement_db.yml
  17. 74 0
      db/pre-re/achievement_level_db.yml
  18. 4 4
      db/pre-re/skill_cast_db.txt
  19. 20 19
      db/pre-re/skill_db.txt
  20. 9 9
      db/pre-re/skill_require_db.txt
  21. 39 39
      db/pre-re/skill_tree.txt
  22. 238 197
      db/re/achievement_db.yml
  23. 74 0
      db/re/achievement_level_db.yml
  24. 323 5
      db/re/item_combo_db.txt
  25. 348 263
      db/re/item_db.txt
  26. 4 0
      db/re/item_delay.txt
  27. 1 0
      db/re/item_noequip.txt
  28. 10 10
      db/re/item_randomopt_db.txt
  29. 12 12
      db/re/item_trade.txt
  30. 147 18
      db/re/mob_db.txt
  31. 12 0
      db/re/mob_race2_db.txt
  32. 45 45
      db/re/mob_skill_db.txt
  33. 333 136
      db/re/pet_db.yml
  34. 13 13
      db/re/skill_cast_db.txt
  35. 26 25
      db/re/skill_db.txt
  36. 14 14
      db/re/skill_require_db.txt
  37. 39 39
      db/re/skill_tree.txt
  38. 0 1
      db/re/skill_unit_db.txt
  39. 4 2
      doc/item_bonus.txt
  40. 90 59
      doc/script_commands.txt
  41. 15 0
      doc/yaml/db/guild_skill_tree.yml
  42. 17 0
      doc/yaml/db/license.yml
  43. 34 0
      doc/yaml/db/pet_db.yml
  44. 3 3
      npc/cities/aldebaran.txt
  45. 4 4
      npc/custom/jobmaster.txt
  46. 24 21
      npc/custom/official/GeffenMagicTournament.txt
  47. 4 5
      npc/custom/quests/questboard.txt
  48. 36 15
      npc/custom/woe_controller.txt
  49. 5 5
      npc/instances/NydhoggsNest.txt
  50. 1 1
      npc/instances/SealedShrine.txt
  51. 1 1
      npc/jobs/1-1e/ninja.txt
  52. 3 1
      npc/merchants/icecream.txt
  53. 1 1
      npc/other/arena/arena_party.txt
  54. 1 1
      npc/other/monster_race.txt
  55. 7 0
      npc/pre-re/quests/quest_payon.txt
  56. 1 1
      npc/pre-re/quests/quests_morocc.txt
  57. 1 0
      npc/pre-re/scripts_athena.conf
  58. 4 5
      npc/quests/dandelion_request.txt
  59. 1 1
      npc/quests/gunslinger_quests.txt
  60. 105 104
      npc/quests/quests_lighthalzen.txt
  61. 4 15
      npc/quests/quests_morocc.txt
  62. 2 1
      npc/quests/quests_payon.txt
  63. 1 1
      npc/re/cities/brasilis.txt
  64. 35 63
      npc/re/custom/lasagna/lasagna_npcs.txt
  65. 135 0
      npc/re/guides/guides_malangdo.txt
  66. 3 3
      npc/re/instances/HorrorToyFactory.txt
  67. 2 2
      npc/re/instances/MorseCave.txt
  68. 1 1
      npc/re/instances/OctopusCave.txt
  69. 34 72
      npc/re/jobs/novice/academy.txt
  70. 1956 0
      npc/re/merchants/eden_market.txt
  71. 10 2
      npc/re/merchants/nightmare_biolab.txt
  72. 7 0
      npc/re/quests/quest_payon.txt
  73. 1 2
      npc/re/quests/quests_14_3.txt
  74. 9 37
      npc/re/quests/quests_14_3_bis.txt
  75. 20 29
      npc/re/quests/quests_15_1.txt
  76. 92 91
      npc/re/quests/quests_16_1.txt
  77. 263 236
      npc/re/quests/quests_rockridge.txt
  78. 3 0
      npc/re/scripts_athena.conf
  79. 4 3
      npc/warps/cities/yuno.txt
  80. 348 263
      sql-files/item_db_re.sql
  81. 1 13
      sql-files/main.sql
  82. 3 2
      sql-files/mob_db.sql
  83. 3 2
      sql-files/mob_db2.sql
  84. 3 2
      sql-files/mob_db2_re.sql
  85. 150 20
      sql-files/mob_db_re.sql
  86. 45 45
      sql-files/mob_skill_db_re.sql
  87. 29 0
      sql-files/upgrades/upgrade_20190309.sql
  88. 19 0
      sql-files/upgrades/upgrade_20190628.sql
  89. 2 0
      sql-files/upgrades/upgrade_20190814.sql
  90. 1 0
      sql-files/upgrades/upgrade_20190815.sql
  91. 1 10
      src/char/char.cpp
  92. 0 1
      src/char/char.hpp
  93. 1 1
      src/char/char_clif.cpp
  94. 3 2
      src/char/char_logif.cpp
  95. 0 23
      src/char/char_mapif.cpp
  96. 0 1
      src/char/char_mapif.hpp
  97. 7 0
      src/char/int_achievement.cpp
  98. 2 2
      src/common/common-minicore.vcxproj.filters
  99. 2 2
      src/common/common.vcxproj.filters
  100. 37 2
      src/common/database.cpp

+ 6 - 0
.editorconfig

@@ -6,9 +6,15 @@ root = true
 
 # Add a blank newline to the end of every file after saving
 # Trim trailing whitespace
+# Adjust character set
 [*]
 insert_final_newline = true
 trim_trailing_whitespace = true
+charset = utf-8
+
+# Use tabs in source
+[*.{cpp,c,hpp,h}]
+indent_style = tab
 
 # YAML does not support hard tabs.
 [*.{yml,yaml}]

+ 1 - 1
.gitattributes

@@ -1,6 +1,6 @@
 *        text=auto
 *.cpp diff=cpp
-*.yml diff
+*.yml diff text eol=lf
 *.sln    merge=union
 *.vcproj merge=union
 *.vcxproj merge=union

+ 3 - 0
.gitignore

@@ -124,3 +124,6 @@ Thumbs.db
 /libmysql.dll
 /pcre8.dll
 /zlib.dll
+
+# CMakeFiles
+/CMakeFiles/

+ 61 - 194
README.md

@@ -1,205 +1,72 @@
-rAthena
-=======
+<img src="branding/logo.png" align="right" height="90" />
+
+# rAthena
+[![Build Status](https://travis-ci.org/rathena/rathena.png?branch=master)](https://travis-ci.org/rathena/rathena) [![Build status](https://ci.appveyor.com/api/projects/status/8574b8nlwd57loda/branch/master?svg=true)](https://ci.appveyor.com/project/rAthenaAPI/rathena/branch/master) [![Total alerts](https://img.shields.io/lgtm/alerts/g/rathena/rathena.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rathena/rathena/alerts/) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/rathena/rathena.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rathena/rathena/context:cpp) ![GitHub](https://img.shields.io/github/license/rathena/rathena.svg) ![GitHub repo size](https://img.shields.io/github/repo-size/rathena/rathena.svg)
+> rAthena is a collaborative software development project revolving around the creation of a robust massively multiplayer online role playing game (MMORPG) server package. Written in C, the program is very versatile and provides NPCs, warps and modifications. The project is jointly managed by a group of volunteers located around the world as well as a tremendous community providing QA and support. rAthena is a continuation of the eAthena project.
+
+[Forum](https://rathena.org/board)|[Discord](https://rathena.org/discord)|[Wiki](https://github.com/rathena/rathena/wiki)|[FluxCP](https://github.com/rathena/FluxCP)|[Crowdfunding](https://rathena.org/board/crowdfunding/)|[Fork and Pull Request Q&A](https://rathena.org/board/topic/86913-pull-request-qa/)
+--------|--------|--------|--------|--------|--------
+
+### Table of Contents
+1. [Prerequisites](#1-prerequisites)
+2. [Installation](#2-installation)
+3. [Troubleshooting](#3-troubleshooting)
+4. [More Documentation](#4-more-documentation)
+5. [How to Contribute](#5-how-to-contribute)
+6. [License](#6-license)
+
+## 1. Prerequisites
+Before installing rAthena there are certain tools and applications you will need which
+differs between the varying operating systems available.
+
+### Hardware
+Hardware Type | Minimum | Recommended
+------|------|------
+CPU | 1 Core | 2 Cores
+RAM | 1 GB | 2 GB
+Disk Space | 300 MB | 500 MB
+
+### Operating System & Preferred Compiler
+Operating System | Compiler
+------|------
+Linux  | [gcc-5 or newer](https://www.gnu.org/software/gcc/gcc-5/) / [Make](https://www.gnu.org/software/make/)
+Windows | [MS Visual Studio 2013, 2015, 2017](https://www.visualstudio.com/downloads/)
+
+### Required Applications
+Application | Name
+------|------
+Database | [MySQL 5 or newer](https://www.mysql.com/downloads/) / [MariaDB 5 or newer](https://downloads.mariadb.org/)
+Git | [Windows](https://gitforwindows.org/) / [Linux](https://git-scm.com/download/linux)
+
+### Optional Applications
+Application | Name
+------|------
+Database | [MySQL Workbench 5 or newer](http://www.mysql.com/downloads/workbench/)
+
+## 2. Installation 
+
+### Full Installation Instructions
+  * [Windows](https://github.com/rathena/rathena/wiki/Install-on-Windows)
+  * [CentOS](https://github.com/rathena/rathena/wiki/Install-on-Centos)
+  * [Debian](https://github.com/rathena/rathena/wiki/Install-on-Debian)
+  * [FreeBSD](https://github.com/rathena/rathena/wiki/Install-on-FreeBSD)
+
+## 3. Troubleshooting
 
-Build Status: [![Build Status](https://travis-ci.org/rathena/rathena.png?branch=master)](https://travis-ci.org/rathena/rathena) [![Build status](https://ci.appveyor.com/api/projects/status/8574b8nlwd57loda/branch/master?svg=true)](https://ci.appveyor.com/project/rAthenaAPI/rathena/branch/master) [![Total alerts](https://img.shields.io/lgtm/alerts/g/rathena/rathena.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rathena/rathena/alerts/) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/rathena/rathena.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rathena/rathena/context:cpp)
-
-Table of Contents
----------
-1. What is rAthena?
-2. Prerequisites
-3. Installation
-4. Troubleshooting
-5. Helpful Links
-6. More Documentation
-7. How to Contribute
-
-1. What is rAthena?
----------
-rAthena is a collaborative software development project revolving around the
-creation of a robust massively multiplayer online role playing game (MMORPG)
-server package. Written in C, the program is very versatile and provides NPCs,
-warps and modifications. The project is jointly managed by a group of volunteers
-located around the world as well as a tremendous community providing QA and
-support. rAthena is a continuation of the eAthena project.
-
-2. Prerequisites
----------
-Before installing rAthena there are certain tools and applications you will need.
-This differs between the varying operating systems available, so the following
-is broken down into Windows and Linux prerequisites.
-
-* Windows
-	* MySQL ( http://www.mysql.com/downloads/mysql/ )
-	* MySQL Workbench ( http://www.mysql.com/downloads/workbench/ )
-	* MS Visual Studio ( https://www.visualstudio.com/downloads/ )
-	* TortoiseGIT ( http://code.google.com/p/tortoisegit/ )
-	* git for Windows ( https://gitforwindows.org/ )
-
-* Linux (names of packages may require specific version numbers on certain distributions)
-	* gcc
-	* g++
-	* make
-	* mysql
-	* mysql-devel
-	* mysql-server
-	* pcre-devel
-	* zlib-devel
-	* git
-
-3. Installation 
----------
-This section is a very brief set of installation instructions. For more concise guides
-relevant to your Operation System, please refer to the Wiki (links at the end of this file).
-
-* Windows
-	* Install prerequisites
-	* Create a folder to download rAthena into (e.g. C:\rAthena)
-	* Right click this folder and select "Git Clone"
-	* Paste the GitHub URL into the box:
-
-				https://github.com/rathena/rathena.git
-				
-	* Open MySQL Workbench and create an instance to connect to your MySQL Server
-	* Create a database (rathena), a user (rathena), give permissions (GRANT SELECT,INSERT,UPDATE,DELETE)
-		and then login using the new user
-	* Use MySQL Workbench to run the .sql files in /sql-files/ on the new rathena database
-
-* Linux
-	* Type:
-		* (For CentOS)
-
-				yum install gcc g++ make mysql mysql-devel mysql-server pcre-devel zlib-devel git
-		* (For Debian)
-
-				apt-get install git make gcc g++ libmysqlclient-dev zlib1g-dev libpcre3-dev
-	* Type:
-
-				mysql_secure_installation
-	* Start your MySQL server
-	* Setup a MySQL user:
-
-				CREATE USER 'rathena'@'localhost' IDENTIFIED BY 'password';
-	* Assign permissions:
-
-				GRANT SELECT,INSERT,UPDATE,DELETE ON `rathena\_rag`.* TO 'rathena'@'localhost';
-	* Clone a GIT repository:
-
-				git clone https://github.com/rathena/rathena.git ~/rathena
-	* Insert SQL files:
-
-				mysql --user=root -p rathena_rag < trunk/sql-files/main.sql (and others)
-	* 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
-
-* Optional
-	* If you want to have your own forked version but still get updates from the main rAthena repository
-		* Fork this repository to your GitHub account
-		* List the current configured remote repository for your fork:
-		
-				git remote -v
-
-		* Specify a new remote upstream repository that will be synced with your fork:
-		
-				git remote add upstream https://github.com/rathena/rathena.git
-				
-		* Verify the new upstream repository you've specified for your fork:
-		
-				git remote -v
-				
-		* You should see the main rAthena repository as well as your forked repository
-		* Now, when you want to get updates from rAthena, simply do:
-		
-				git pull upstream master
-
-	* Remember that rAthena falls under [GNU GPLv3](https://github.com/rathena/rathena/blob/master/LICENSE).
-
-4. Troubleshooting
----------
 If you're having problems with starting your server, the first thing you should
 do is check what's happening on your consoles. More often that not, all support issues
-can be solved simply by looking at the error messages given.
-
-Examples:
-
-* You get an error on your map-server that looks something like this:
-
-			[Error]: npc_parsesrcfile: Unable to parse, probably a missing or extra TAB in 
-				file 'npc/custom/jobmaster.txt', line '17'. Skipping line...
-				* w1=prontera,153,193,6 script
-				* w2=Job Master
-				* w3=123,{
-				* w4=
-
-    If you look at the error, it's telling you that you're missing (or have an extra) TAB.
-		This is easily fixed by looking at this part of the error:
-
-				* w1=prontera,153,193,6 script
-
-	If there was a TAB where it's supposed to be, that line would have prontera,153,193,6 at w1
-		and 'script' at w2. As there's a space instead of a TAB, the two sections are read as a
-		single parameter.
-
-* You have a default user/password warning similar to the following:
-
-			[Warning]: Using the default user/password s1/p1 is NOT RECOMMENDED.
-			[Notice]: Please edit your 'login' table to create a proper inter-server user/pa
-			ssword (gender 'S')
-			[Notice]: and then edit your user/password in conf/map_athena.conf (or conf/impo
-			rt/map_conf.txt)
-
-    Relax. This is just indicating that you're using the default username and password. To
-		fix this, check over the part in the installation instructions relevant to the `login` table.
-	
-* Your map-server outputs the following:
-
-			[Error]: make_connection: connect failed (socket #2, error 10061: No connection
-			could be made because the target machine actively refused it.
-			)!
+can be solved simply by looking at the error messages given. Check out the [wiki](https://github.com/rathena/rathena/wiki)
+or [forums](https://rathena.org/forum) if you need more support on troubleshooting.
 
-    If this shows up on the map server, it generally means that there is no Char Server available
-		to accept the connection.
-
-
-
-5. Helpful Links
----------
-* rAthena Forums
-	* https://rathena.org/
-
-* GIT Repository
-	* https://github.com/rathena/rathena
-
-* Full Installation Instructions
-	* [Windows](https://github.com/rathena/rathena/wiki/Install-on-Windows)
-	* [CentOS](https://github.com/rathena/rathena/wiki/Install-on-Centos)
-	* [Debian](https://github.com/rathena/rathena/wiki/Install-on-Debian)
-	* [FreeBSD](https://github.com/rathena/rathena/wiki/Install-on-FreeBSD)
-
-* rAthena Discord Chat
-	https://rathena.org/discord
-
-* rAthena Wiki
-	https://github.com/rathena/rathena/wiki
-
-* Fork and Pull Request Q&A
-	https://rathena.org/board/topic/86913-pull-request-qa/
-
-
-6. More Documentation
----------
+## 4. More Documentation
 rAthena has a large collection of help files and sample NPC scripts located in the /doc/
 directory. These include detailed explanations of NPC script commands, atcommands (@),
 group permissions, item bonuses, and packet structures, among many other topics. We
 recommend that all users take the time to look over this directory before asking for
 assistance elsewhere.
 
-7. How to Contribute
----------
+## 5. How to Contribute
 Details on how to contribute to rAthena can be found in [CONTRIBUTING.md](https://github.com/rathena/rathena/blob/master/.github/CONTRIBUTING.md)!
+
+## 6. License
+Copyright (c) rAthena Development Team - Licensed under [GNU General Public License v3.0](https://github.com/rathena/rathena/blob/master/LICENSE)

+ 15 - 36
appveyor.yml

@@ -26,8 +26,12 @@ build_script:
 services: mysql
 test_script:
 - cmd: >-
+    rem ========================================================================
+    
     rem Set up the environment variables we need
     
+    rem ========================================================================
+    
     set DB_HOST=127.0.0.1
     
     set DB_ROOT=root
@@ -44,53 +48,28 @@ test_script:
     
     cd C:\projects\rathena
     
-    rem TODO should be replace with tools\ci\sql.bat as soon as possible
-    rem MySQL database setup
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% -e "CREATE DATABASE %DB_NAME%;"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\main.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\logs.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_cash_db.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_cash_db2.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_db.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_db2.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_db_re.sql"
+    rem ========================================================================
     
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\item_db2_re.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_db.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_db2.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_db_re.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_db2_re.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_skill_db.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_skill_db2.sql"
-    
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_skill_db_re.sql"
+    rem MySQL database setup
     
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\mob_skill_db2_re.sql"
+    rem ========================================================================
     
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% %DB_NAME% -e "source sql-files\roulette_default_data.sql"
+    call tools\ci\sql.bat
     
-    %MYSQL% -u %DB_ROOT% -p%DB_ROOTPW% -e "GRANT SELECT,INSERT,UPDATE,DELETE ON %DB_NAME%.* TO '%DB_USER%'@'%DB_HOST%' IDENTIFIED BY '%DB_USERPW%';"
+    rem ========================================================================
     
     rem Activate all custom and test scripts
     
+    rem ========================================================================
+    
     start /d tools\ci npc.bat
     
+    rem ========================================================================
+    
     rem Start the map server
     
+    rem ========================================================================
+    
     login-server.exe --run-once
     
     char-server.exe --run-once

BIN
branding/logo.png


+ 2 - 1
conf/battle/battle.conf

@@ -10,7 +10,8 @@
 //--------------------------------------------------------------
 
 // Who should have a baseatk value (makes str affect damage)? (Note 3)
-enable_baseatk: 0x29F
+enable_baseatk: 0x9
+enable_baseatk_renewal: 0x29F
 
 // Who can have perfect flee? (Note 3)
 enable_perfect_flee: 1

+ 0 - 3
conf/battle/guild.conf

@@ -20,9 +20,6 @@ guild_max_castles: 0
 // Official setting is 5 minutes (300000 ms), otherwise allow guild leaders to relog to cancel the 5 minute delay.
 guild_skill_relog_delay: 300000
 
-// Damage adjustments for WOE battles against defending Guild monsters (Note 2)
-castle_defense_rate: 100
-
 // Melee damage adjustments (non skills) for WoE battles (Guild Vs Guild) (Note 2)
 gvg_short_attack_damage_rate: 80
 

+ 1 - 0
conf/battle/pet.conf

@@ -22,6 +22,7 @@ pet_friendly_rate: 100
 pet_hungry_delay_rate: 100
 
 // Does the pet need its equipment before it does its skill? (Note 1)
+// These bonuses are unofficial and found in the import/pet_db.yml
 pet_equip_required: yes
 
 // When the master attacks a monster, whether or not the pet will also attack. (Note 1)

+ 1 - 1
conf/battle/player.conf

@@ -244,7 +244,7 @@ fame_taekwon_mission: 1
 // Refined own forged weapon to +10
 fame_refine_lv1: 1
 fame_refine_lv2: 25
-fame_refine_lv3: 10000
+fame_refine_lv3: 1000
 // Success to forge a lv3 weapon with 3 additional ingredients
 fame_forge: 10
 // Success to prepare 'n' Condensed Potions in a row

+ 1 - 0
conf/groups.conf

@@ -87,6 +87,7 @@ groups: (
 	inherit: ( /*empty list*/ )
 	commands: {
 		changedress: true
+		resurrect: true
 	}
 	permissions: {
 		/* without this basic permissions regular players could not 

+ 0 - 1
conf/inter_athena.conf

@@ -116,7 +116,6 @@ skill_homunculus_db: skill_homunculus
 mercenary_db: mercenary
 mercenary_owner_db: mercenary_owner
 elemental_db: elemental
-ragsrvinfo_db: ragsrvinfo
 skillcooldown_db: skillcooldown
 bonus_script_db: bonus_script
 acc_reg_num_table: acc_reg_num

+ 40 - 0
db/achievement_level_db.yml

@@ -0,0 +1,40 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 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/>.
+#
+###########################################################################
+# Achievement Level Database
+###########################################################################
+#
+# Achievement Level Settings
+#
+###########################################################################
+# Level - Achievement Level
+###########################################################################
+# Points - Required total scoring points to reach this level.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_LEVEL_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/achievement_level_db.yml
+    Mode: Prerenewal
+  - Path: db/re/achievement_level_db.yml
+    Mode: Renewal
+  - Path: db/import/achievement_level_db.yml

+ 32 - 0
db/import-tmpl/achievement_level_db.yml

@@ -0,0 +1,32 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 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/>.
+#
+###########################################################################
+# Import Achievement Level Database
+###########################################################################
+#
+# Achievement Level Settings
+#
+###########################################################################
+# Level - Achievement Level
+###########################################################################
+# Points - Required total scoring points to reach this level.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_LEVEL_DB
+  Version: 1

+ 1 - 0
db/import-tmpl/item_db.txt

@@ -25,6 +25,7 @@
 //5204,Event_Pierrot_Nose,Rudolf's Red Nose,4,20,,100,,0,,0,0xFFFFFFFF,63,2,1,,0,0,49,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30; },{},{}
 //5264,Aussie_Flag_Hat,Australian Flag Hat,4,20,,500,,4,,0,0xFFFFFFFF,63,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
 //5356,Pumpkin_Hat_H,Pumpkin Hat,4,20,,200,,2,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5; },{},{}
+//5384,Santa_Hat_1,Twin Pompom By JB,4,20,,200,,2,,1,0xFFFFFFFF,63,2,256,,20,1,390,{ bonus bLuk,3; bonus2 bResEff,Eff_Curse,2000; bonus bVariableCastrate,-2; bonus bAspdRate,4; bonus2 bAddMonsterDropItem,539,100; bonus2 bAddMonsterDropItem,529,200; bonus2 bAddMonsterDropItem,530,200; autobonus "{ bonus bCritical,10; }",10,5000; },{},{}
 //5811,Santa_Beard,Santa Beard,4,20,,100,,5,,0,0xFFFFFFFF,63,2,1,,0,0,25,{ bonus2 bSubRace,RC_Brute,5; },{},{}
 
 //11702,Moon_Cookie,Moon Cookie,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_HALLUCINATION; itemskill "AL_BLESSING",7; },{},{}

+ 238 - 197
db/pre-re/achievement_db.yml

@@ -1726,6 +1726,12 @@ Body:
     Reward:
       ItemID: 617
     Score: 50
+  - ID: 129021
+    Group: "AG_BATTLE"
+    Name: "Glastheim Challenge Mode" # Complete 100 times?
+    Reward:
+      TitleID: 1045
+    Score: 10
   - ID: 130000 # Talk to Prince NPC (npc/quests/quests_morocc.txt L5288)
     Group: "AG_CHATTING"
     Name: "Socialite debut"
@@ -1983,6 +1989,216 @@ Body:
     #Reward:
     #  ItemID: 23585
     Score: 10
+  - ID: 200033
+    Group: "AG_GOAL_LEVEL"
+    Name: "With a new mind!(1)"
+    Condition: " BaseLevel == 170 && (Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS_T) "
+    #Reward:
+    #  ItemID: 6959
+    Score: 50
+  - ID: 200034
+    Group: "AG_GOAL_LEVEL"
+    Name: "With a new mind!(2)"
+    Condition: " BaseLevel == 170 && (Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER_T) "
+    #Reward:
+    #  ItemID: 6959
+    Score: 50
+  - ID: 220000
+    Group: "AG_CHATTING_CREATE"
+    Name: "Community begin"
+    Score: 10
+  - ID: 220001
+    Group: "AG_CHATTING_DYING"
+    Name: "A mouth only moment"
+    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~"
+    Score: 10
+  - ID: 220006
+    Group: "AG_MARRY"
+    Name: "Married with who..?"
+    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:
+      - Id: 0
+        Count: 10000
+    Score: 10
+  - ID: 220010
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (2)"
+    Condition: " ARG0 >= 100000 "
+    Target:
+      - Id: 0
+        Count: 100000
+    Score: 15
+  - ID: 220011
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (3)"
+    Condition: " ARG0 >= 500000 "
+    Target:
+      - Id: 0
+        Count: 500000
+    Score: 20
+  - ID: 220012
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (4)"
+    Condition: " ARG0 >= 1000000 "
+    Target:
+      - Id: 0
+        Count: 1000000
+    Score: 30
+  - ID: 220013
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (5)"
+    Condition: " ARG0 >= 5000000 "
+    Target:
+      - Id: 0
+        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.."
+    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: 230100
     Group: "AG_TAMING"
     Name: "Poring is Love"
@@ -2240,202 +2456,6 @@ Body:
         MobID: 1505
         Count: 1
     Score: 10
-  - ID: 220000
-    Group: "AG_CHATTING_CREATE"
-    Name: "Community begin"
-    Score: 10
-  - ID: 220001
-    Group: "AG_CHATTING_DYING"
-    Name: "A mouth only moment"
-    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~"
-    Score: 10
-  - ID: 220006
-    Group: "AG_MARRY"
-    Name: "Married with who..?"
-    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:
-      - Id: 0
-        Count: 10000
-    Score: 10
-  - ID: 220010
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (2)"
-    Condition: " ARG0 >= 100000 "
-    Target:
-      - Id: 0
-        Count: 100000
-    Score: 15
-  - ID: 220011
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (3)"
-    Condition: " ARG0 >= 500000 "
-    Target:
-      - Id: 0
-        Count: 500000
-    Score: 20
-  - ID: 220012
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (4)"
-    Condition: " ARG0 >= 1000000 "
-    Target:
-      - Id: 0
-        Count: 1000000
-    Score: 30
-  - ID: 220013
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (5)"
-    Condition: " ARG0 >= 5000000 "
-    Target:
-      - Id: 0
-        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.."
-    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"
@@ -2500,11 +2520,13 @@ Body:
     Score: 20
   - ID: 240000
     Group: "AG_GOAL_LEVEL"
-    Name: "Complete challenges after first introduction"
+    Name: "First Login after the introduction of Achievement Tasks"
     Score: 10
+    Condition: " true "
   - ID: 240001
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 1"
+    Condition: " AchievementLevel >= 1 "
     Reward:
       ItemID: 644
       Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
@@ -2512,6 +2534,7 @@ Body:
   - ID: 240002
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 2"
+    Condition: " AchievementLevel >= 2 "
     Dependent:
       - Id: 240001
     Reward:
@@ -2521,6 +2544,7 @@ Body:
   - ID: 240003
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 3"
+    Condition: " AchievementLevel >= 3 "
     Dependent:
       - Id: 240002
     Reward:
@@ -2530,6 +2554,7 @@ Body:
   - ID: 240004
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 4"
+    Condition: " AchievementLevel >= 4 "
     Dependent:
       - Id: 240003
     Reward:
@@ -2539,6 +2564,7 @@ Body:
   - ID: 240005
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 5"
+    Condition: " AchievementLevel >= 5 "
     Dependent:
       - Id: 240004
     Reward:
@@ -2548,6 +2574,7 @@ Body:
   - ID: 240006
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 6"
+    Condition: " AchievementLevel >= 6 "
     Dependent:
       - Id: 240005
     Reward:
@@ -2557,6 +2584,7 @@ Body:
   - ID: 240007
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 7"
+    Condition: " AchievementLevel >= 7 "
     Dependent:
       - Id: 240006
     Reward:
@@ -2566,6 +2594,7 @@ Body:
   - ID: 240008
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 8"
+    Condition: " AchievementLevel >= 8 "
     Dependent:
       - Id: 240007
     Reward:
@@ -2575,6 +2604,7 @@ Body:
   - ID: 240009
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 9"
+    Condition: " AchievementLevel >= 9 "
     Dependent:
       - Id: 240008
     Reward:
@@ -2584,6 +2614,7 @@ Body:
   - ID: 240010
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 10"
+    Condition: " AchievementLevel >= 10 "
     Dependent:
       - Id: 240009
     Reward:
@@ -2594,6 +2625,7 @@ Body:
   - ID: 240011
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 11"
+    Condition: " AchievementLevel >= 11 "
     Dependent:
       - Id: 240010
     Reward:
@@ -2603,6 +2635,7 @@ Body:
   - ID: 240012
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 12"
+    Condition: " AchievementLevel >= 12 "
     Dependent:
       - Id: 240011
     Reward:
@@ -2612,6 +2645,7 @@ Body:
   - ID: 240013
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 13"
+    Condition: " AchievementLevel >= 13 "
     Dependent:
       - Id: 240012
     Reward:
@@ -2621,6 +2655,7 @@ Body:
   - ID: 240014
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 14"
+    Condition: " AchievementLevel >= 14 "
     Dependent:
       - Id: 240013
     Reward:
@@ -2630,6 +2665,7 @@ Body:
   - ID: 240015
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 15"
+    Condition: " AchievementLevel >= 15 "
     Dependent:
       - Id: 240014
     Reward:
@@ -2639,6 +2675,7 @@ Body:
   - ID: 240016
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 16"
+    Condition: " AchievementLevel >= 16 "
     Dependent:
       - Id: 240015
     Reward:
@@ -2648,6 +2685,7 @@ Body:
   - ID: 240017
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 17"
+    Condition: " AchievementLevel >= 17 "
     Dependent:
       - Id: 240016
     Reward:
@@ -2657,6 +2695,7 @@ Body:
   - ID: 240018
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 18"
+    Condition: " AchievementLevel >= 18 "
     Dependent:
       - Id: 240017
     Reward:
@@ -2666,6 +2705,7 @@ Body:
   - ID: 240019
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 19"
+    Condition: " AchievementLevel >= 19 "
     Dependent:
       - Id: 240018
     Reward:
@@ -2675,6 +2715,7 @@ Body:
   - ID: 240020
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 20"
+    Condition: " AchievementLevel >= 20 "
     Dependent:
       - Id: 240019
     Reward:

+ 74 - 0
db/pre-re/achievement_level_db.yml

@@ -0,0 +1,74 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 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/>.
+#
+###########################################################################
+# Pre-Renewal Achievement Level Database
+###########################################################################
+#
+# Achievement Level Settings
+#
+###########################################################################
+# Level - Achievement Level
+###########################################################################
+# Points - Required total scoring points to reach this level.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_LEVEL_DB
+  Version: 1
+
+Body:
+  - Level: 1
+    Points: 18
+  - Level: 2
+    Points: 49
+  - Level: 3
+    Points: 98
+  - Level: 4
+    Points: 171
+  - Level: 5
+    Points: 306
+  - Level: 6
+    Points: 410
+  - Level: 7
+    Points: 550
+  - Level: 8
+    Points: 728
+  - Level: 9
+    Points: 942
+  - Level: 10
+    Points: 1247
+  - Level: 11
+    Points: 1504
+  - Level: 12
+    Points: 1804
+  - Level: 13
+    Points: 2152
+  - Level: 14
+    Points: 2550
+  - Level: 15
+    Points: 3070
+  - Level: 16
+    Points: 3522
+  - Level: 17
+    Points: 4030
+  - Level: 18
+    Points: 4592
+  - Level: 19
+    Points: 5210
+  - Level: 20
+    Points: 5980

+ 4 - 4
db/pre-re/skill_cast_db.txt

@@ -20,7 +20,7 @@
 //-- SM_PROVOKE
 6,0,0,0,30000,0,1000
 //-- SM_MAGNUM
-7,0,0,0,2000,10000,2000
+7,0,2000,0,0,10000,0
 //-- SM_ENDURE
 8,0,0,0,10000:13000:16000:19000:22000:25000:28000:31000:34000:37000,10000,10000
 //==========================================
@@ -1449,11 +1449,11 @@
 //-- SR_GENTLETOUCH_CURE
 2345,0,1000,0,0,0,1000:1500:2000:2500:3000
 //-- SR_GENTLETOUCH_ENERGYGAIN
-2346,1000,1000,0,240000,600000,0
+2346,1000,1000,0,240000,600000,1000
 //-- SR_GENTLETOUCH_CHANGE
-2347,1000,1000,0,240000,0,200000:180000:160000:140000:120000
+2347,1000,1000,0,240000,0,1000
 //-- SR_GENTLETOUCH_REVITALIZE
-2348,1000,1000,0,240000,0,200000:180000:160000:140000:120000
+2348,1000,1000,0,240000,0,1000
 //-- SR_FLASHCOMBO
 5009,0,1000,0,3000,0,12000:10000:8000:6000:4000
 //==========================================

+ 20 - 19
db/pre-re/skill_db.txt

@@ -16,6 +16,7 @@
 //    0x20 - Skill ignores target's defense (misc type always ignores)
 //    0x40 - Skill ignores target's flee (magic type always ignores)
 //    0x80 - Skill ignores target's def cards
+//    0x100 - Skill can critical
 // 07 splash/effect range
 //      -1 - for screen-wide
 //       0 - no splash
@@ -160,7 +161,7 @@
 58,-4,6,1,-1,0x2,0,10,1,no,0,0x40000,0,weapon,6,0x0,	KN_SPEARSTAB,Spear Stab
 59,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	KN_SPEARBOOMERANG,Spear Boomerang
 60,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0,		KN_TWOHANDQUICKEN,Twohand Quicken
-61,0,6,4,-1,0x20,0,5,1,no,0,0,0,weapon,0,0x0,	KN_AUTOCOUNTER,Counter Attack
+61,0,6,4,-1,0x120,0,5,1,no,0,0,0,weapon,0,0x0,	KN_AUTOCOUNTER,Counter Attack
 62,-2,6,1,-1,0x2,1,10,1,no,0,0x40000,0,weapon,1,0x0,	KN_BOWLINGBASH,Bowling Bash
 63,0,0,0,0,0,0,1,0,no,0,0,0,weapon,0,0x0,		KN_RIDING,Peco Peco Riding
 64,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0,		KN_CAVALIERMASTERY,Cavalier Mastery
@@ -558,7 +559,7 @@
 // Sniper
 380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0,	SN_SIGHT,Falcon Eyes
 381,9,8,1,0,0x40,0,5,1,yes,0,0,0,misc,0,0x0,		SN_FALCONASSAULT,Falcon Assault
-382,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	SN_SHARPSHOOTING,Focused Arrow Strike
+382,9,8,1,-1,0x100,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	SN_SHARPSHOOTING,Focused Arrow Strike
 383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0,	SN_WINDWALK,Wind Walker
 
 //****
@@ -741,7 +742,7 @@
 508,-9,6,1,-1,0x1,0,1,1,no,0,0,0,weapon,0,0x0,	GS_CRACKER,Cracker
 509,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SINGLEACTION,Single Action
 510,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SNAKEEYE,Snake Eye
-511,-9,8,0,-1,0,0,10,2,no,0,0,0,weapon,0,0x0,	GS_CHAINACTION,Chain Action
+511,-9,8,0,-1,0x100,0,10,2,no,0,0,0,weapon,0,0x0,	GS_CHAINACTION,Chain Action
 512,-9,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x0,	GS_TRACKING,Tracking
 513,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,		GS_DISARM,Disarm
 514,-9,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,0,0x100,	GS_PIERCINGSHOT,Piercing Shot
@@ -763,7 +764,7 @@
 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3,0x0,		NJ_TATAMIGAESHI,Improvised Defense
 528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0,	NJ_KASUMIKIRI,Vanishing Slash
 529,7:9:11:13:15,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x4,	NJ_SHADOWJUMP,Shadow Leap
-530,7:9:11:13:15,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x204,	NJ_KIRIKAGE,Shadow Slash
+530,7:9:11:13:15,6,1,-1,0x100,0,5,1,no,0,0,0,weapon,0,0x204,	NJ_KIRIKAGE,Shadow Slash
 531,0,6,4,0,0x1,0,5,1,no,0,0,0,none,7,0x0,		NJ_UTSUSEMI,Cicada Skin Sheeding
 532,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0,	NJ_BUNSINJYUTSU,Mirror Image
 533,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		NJ_NINPOU,Spirit of the Blade
@@ -1130,28 +1131,28 @@
 //****
 // SR Sura
 2326,1,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0,	SR_DRAGONCOMBO,Dragon Combo
-2327,0,8,4,-1,0x2,2,5,-3,no,0,0x40000,0,weapon,3,0x0,	SR_SKYNETBLOW,Sky Net Blow
-2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_EARTHSHAKER,Earth Shaker
+2327,1,8,4,-1,0x2,2,5,-3,no,0,0x40000,0,weapon,0,0x0,	SR_SKYNETBLOW,Sky Net Blow
+2328,1,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_EARTHSHAKER,Earth Shaker
 2329,1,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0,	SR_FALLENEMPIRE,Fallen Empire
 2330,1,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0x40000,0,weapon,0,0x0,	SR_TIGERCANNON,Tiger Cannon
 2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		SR_HELLGATE,Hell Gate
-2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_RAMPAGEBLASTER,Rampage Blaster
-2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_CRESCENTELBOW,Crescent Elbow
-2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0,	SR_CURSEDCIRCLE,Cursed Circle
-2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_LIGHTNINGWALK,Lightning Walk
-2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0,	SR_KNUCKLEARROW,Knuckle Arrow
-2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000,	SR_WINDMILL,Windmill
-2338,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	SR_RAISINGDRAGON,Raising Dragon
+2332,1,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_RAMPAGEBLASTER,Rampage Blaster
+2333,1,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_CRESCENTELBOW,Crescent Elbow
+2334,1,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0,	SR_CURSEDCIRCLE,Cursed Circle
+2335,1,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_LIGHTNINGWALK,Lightning Walk
+2336,8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0,	SR_KNUCKLEARROW,Knuckle Arrow
+2337,1,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000,	SR_WINDMILL,Windmill
+2338,1,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	SR_RAISINGDRAGON,Raising Dragon
 2339,0,0,0,0,0,0,5,1,no,0,0,0,none,0,0x0,		SR_GENTLETOUCH,Gentle Touch
-2340,0,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0,	SR_ASSIMILATEPOWER,Assimilate Power
+2340,1,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0,	SR_ASSIMILATEPOWER,Assimilate Power
 2341,3,6,16,0,0x1,0,1,1,yes,0,0x200,0,none,0,0x0,	SR_POWERVELOCITY,Power Velocity
 2342,1,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,7,0x0,	SR_CRESCENTELBOW_AUTOSPELL,Crescent Elbow Autospell
-2343,1:2:3:3:4:4:5:5:6:7,8,1,-1,0,0,10,-7,yes,0,0,0,weapon,0,0x0,	SR_GATEOFHELL,Gate of Hell
+2343,7,8,1,-1,0,0,10,-7,yes,0,0,0,weapon,0,0x0,	SR_GATEOFHELL,Gate of Hell
 2344,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	SR_GENTLETOUCH_QUIET,Gentle Touch - Quiet
 2345,2,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CURE,Gentle Touch - Cure
-2346,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
-2347,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CHANGE,Gentle Touch - Change
-2348,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_REVITALIZE,Gentle Touch - Revitalize
+2346,1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
+2347,2,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CHANGE,Gentle Touch - Change
+2348,2,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_REVITALIZE,Gentle Touch - Revitalize
 //More from Sura but not following ID order
 2517,0,6,4,-1,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0,	SR_HOWLINGOFLION,Howling of Lion
 2518,11,6,2,-1,0x2,1:1:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	SR_RIDEINLIGHTNING,Ride In Lightening
@@ -1469,7 +1470,7 @@
 8212,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800,	MA_FREEZINGTRAP,Freezing_Trap
 8213,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0,	MA_REMOVETRAP,Remove_Trap
 8214,-9,6,1,-1,0x2,0,1,1,no,0,0x1,0,weapon,6,0x80,	MA_CHARGEARROW,Arrow_Repel
-8215,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	MA_SHARPSHOOTING,Focused_Arrow_Strike
+8215,9,8,1,-1,0x100,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	MA_SHARPSHOOTING,Focused_Arrow_Strike
 8216,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0,	ML_PIERCE,Pierce
 8217,-2,6,1,-1,0x1,2,10,1,no,0,0,5,weapon,2,0x20000,	ML_BRANDISH,Brandish_Spear
 8218,5,8,1,-1,0x20,0,5,5,no,0,0x40000,0,weapon,0,0x20000,	ML_SPIRALPIERCE,Spiral_Pierce

+ 9 - 9
db/pre-re/skill_require_db.txt

@@ -756,15 +756,15 @@
 //****
 // SR Sura
 2326,0,0,3:4:5:6:7:8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_DRAGONCOMBO
-2327,0,0,8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_SKYNETBLOW
-2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_EARTHSHAKER
-2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_FALLENEMPIRE
-2330,0,0,1:2:3:4:5:6:7:8:9:10,-12:-14:-16:-18:-20:-22:-24:-26:-28:-30,-6:-7:-8:-9:-10:-11:-12:-13:-14:-15,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_TIGERCANNON
+2327,0,0,12:14:16:18:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_SKYNETBLOW
+2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_EARTHSHAKER
+2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_FALLENEMPIRE
+2330,0,0,30:35:40:45:50:55:60:65:70:75,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_TIGERCANNON
 2331,0,0,1,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_HELLGATE
-2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAMPAGEBLASTER
+2332,0,0,100,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_RAMPAGEBLASTER
 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW
 2334,0,0,40:60:80:100:120,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_CURSEDCIRCLE
-2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
+2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_LIGHTNINGWALK
 2336,0,0,10:15:20:25:30,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_KNUCKLEARROW
 2337,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_WINDMILL
 2338,0,0,120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAISINGDRAGON
@@ -772,12 +772,12 @@
 2340,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_ASSIMILATEPOWER
 2341,0,0,50,0,0,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_POWERVELOCITY
 2342,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW_AUTOSPELL
-2343,0,0,30,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GATEOFHELL
+2343,0,0,100,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_GATEOFHELL
 2344,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_QUIET
 2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_CURE
 2346,0,0,40:50:60:70:80,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_ENERGYGAIN
-2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_CHANGE
-2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_GENTLETOUCH_REVITALIZE
+2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_CHANGE
+2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_REVITALIZE
 //More from SR Sura (but not following ID order)
 2517,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_HOWLINGOFLION
 2518,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_RIDEINLIGHTNING

+ 39 - 39
db/pre-re/skill_tree.txt

@@ -3333,27 +3333,27 @@
 4070,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4070,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4070,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4070,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4070,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4070,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4070,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4070,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4070,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4070,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4070,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4070,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4070,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4070,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4070,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4070,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4070,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4070,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4070,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4070,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4070,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4070,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4070,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4070,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4070,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4070,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4070,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4070,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4070,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4070,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4070,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4070,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4070,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4070,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4070,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4070,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4070,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4070,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 //Genetic (Regular)
 4071,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -3773,27 +3773,27 @@
 4077,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4077,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4077,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4077,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4077,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4077,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4077,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4077,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4077,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4077,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4077,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4077,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4077,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4077,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4077,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4077,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4077,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4077,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4077,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4077,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4077,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4077,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4077,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4077,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4077,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4077,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4077,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4077,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4077,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4077,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4077,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4077,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4077,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4077,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4077,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4077,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4077,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4077,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 //Genetic (Trans)
 4078,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -4985,27 +4985,27 @@
 4106,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
 4106,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4106,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4106,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4106,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4106,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4106,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4106,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4106,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4106,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4106,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4106,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4106,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4106,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4106,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4106,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4106,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4106,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4106,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4106,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4106,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4106,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4106,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4106,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4106,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4106,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4106,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4106,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4106,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4106,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4106,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4106,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4106,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4106,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4106,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4106,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4106,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4106,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 //Baby Genetic
 4107,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#

+ 238 - 197
db/re/achievement_db.yml

@@ -1726,6 +1726,12 @@ Body:
     Reward:
       ItemID: 617
     Score: 50
+  - ID: 129021
+    Group: "AG_BATTLE"
+    Name: "Glastheim Challenge Mode" # Complete 100 times?
+    Reward:
+      TitleID: 1045
+    Score: 10
   - ID: 130000 # Talk to Prince NPC (npc/quests/quests_morocc.txt L5288)
     Group: "AG_CHATTING"
     Name: "Socialite debut"
@@ -1983,6 +1989,216 @@ Body:
     #Reward:
     #  ItemID: 23585
     Score: 10
+  - ID: 200033
+    Group: "AG_GOAL_LEVEL"
+    Name: "With a new mind!(1)"
+    Condition: " BaseLevel == 170 && (Class >= JOB_RUNE_KNIGHT && Class <= JOB_GUILLOTINE_CROSS_T) "
+    #Reward:
+    #  ItemID: 6959
+    Score: 50
+  - ID: 200034
+    Group: "AG_GOAL_LEVEL"
+    Name: "With a new mind!(2)"
+    Condition: " BaseLevel == 170 && (Class >= JOB_ROYAL_GUARD && Class <= JOB_SHADOW_CHASER_T) "
+    #Reward:
+    #  ItemID: 6959
+    Score: 50
+  - ID: 220000
+    Group: "AG_CHATTING_CREATE"
+    Name: "Community begin"
+    Score: 10
+  - ID: 220001
+    Group: "AG_CHATTING_DYING"
+    Name: "A mouth only moment"
+    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~"
+    Score: 10
+  - ID: 220006
+    Group: "AG_MARRY"
+    Name: "Married with who..?"
+    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:
+      - Id: 0
+        Count: 10000
+    Score: 10
+  - ID: 220010
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (2)"
+    Condition: " ARG0 >= 100000 "
+    Target:
+      - Id: 0
+        Count: 100000
+    Score: 15
+  - ID: 220011
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (3)"
+    Condition: " ARG0 >= 500000 "
+    Target:
+      - Id: 0
+        Count: 500000
+    Score: 20
+  - ID: 220012
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (4)"
+    Condition: " ARG0 >= 1000000 "
+    Target:
+      - Id: 0
+        Count: 1000000
+    Score: 30
+  - ID: 220013
+    Group: "AG_SPEND_ZENY"
+    Name: "Activating the market economy (5)"
+    Condition: " ARG0 >= 5000000 "
+    Target:
+      - Id: 0
+        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.."
+    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: 230100
     Group: "AG_TAMING"
     Name: "Poring is Love"
@@ -2240,202 +2456,6 @@ Body:
         MobID: 1505
         Count: 1
     Score: 10
-  - ID: 220000
-    Group: "AG_CHATTING_CREATE"
-    Name: "Community begin"
-    Score: 10
-  - ID: 220001
-    Group: "AG_CHATTING_DYING"
-    Name: "A mouth only moment"
-    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~"
-    Score: 10
-  - ID: 220006
-    Group: "AG_MARRY"
-    Name: "Married with who..?"
-    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:
-      - Id: 0
-        Count: 10000
-    Score: 10
-  - ID: 220010
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (2)"
-    Condition: " ARG0 >= 100000 "
-    Target:
-      - Id: 0
-        Count: 100000
-    Score: 15
-  - ID: 220011
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (3)"
-    Condition: " ARG0 >= 500000 "
-    Target:
-      - Id: 0
-        Count: 500000
-    Score: 20
-  - ID: 220012
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (4)"
-    Condition: " ARG0 >= 1000000 "
-    Target:
-      - Id: 0
-        Count: 1000000
-    Score: 30
-  - ID: 220013
-    Group: "AG_SPEND_ZENY"
-    Name: "Activating the market economy (5)"
-    Condition: " ARG0 >= 5000000 "
-    Target:
-      - Id: 0
-        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.."
-    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"
@@ -2500,11 +2520,13 @@ Body:
     Score: 20
   - ID: 240000
     Group: "AG_GOAL_LEVEL"
-    Name: "Complete challenges after first introduction"
+    Name: "First Login after the introduction of Achievement Tasks"
     Score: 10
+    Condition: " true "
   - ID: 240001
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 1"
+    Condition: " AchievementLevel >= 1 "
     Reward:
       ItemID: 644
       Script: " specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,30000,10; "
@@ -2512,6 +2534,7 @@ Body:
   - ID: 240002
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 2"
+    Condition: " AchievementLevel >= 2 "
     Dependent:
       - Id: 240001
     Reward:
@@ -2521,6 +2544,7 @@ Body:
   - ID: 240003
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 3"
+    Condition: " AchievementLevel >= 3 "
     Dependent:
       - Id: 240002
     Reward:
@@ -2530,6 +2554,7 @@ Body:
   - ID: 240004
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 4"
+    Condition: " AchievementLevel >= 4 "
     Dependent:
       - Id: 240003
     Reward:
@@ -2539,6 +2564,7 @@ Body:
   - ID: 240005
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 5"
+    Condition: " AchievementLevel >= 5 "
     Dependent:
       - Id: 240004
     Reward:
@@ -2548,6 +2574,7 @@ Body:
   - ID: 240006
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 6"
+    Condition: " AchievementLevel >= 6 "
     Dependent:
       - Id: 240005
     Reward:
@@ -2557,6 +2584,7 @@ Body:
   - ID: 240007
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 7"
+    Condition: " AchievementLevel >= 7 "
     Dependent:
       - Id: 240006
     Reward:
@@ -2566,6 +2594,7 @@ Body:
   - ID: 240008
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 8"
+    Condition: " AchievementLevel >= 8 "
     Dependent:
       - Id: 240007
     Reward:
@@ -2575,6 +2604,7 @@ Body:
   - ID: 240009
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 9"
+    Condition: " AchievementLevel >= 9 "
     Dependent:
       - Id: 240008
     Reward:
@@ -2584,6 +2614,7 @@ Body:
   - ID: 240010
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 10"
+    Condition: " AchievementLevel >= 10 "
     Dependent:
       - Id: 240009
     Reward:
@@ -2594,6 +2625,7 @@ Body:
   - ID: 240011
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 11"
+    Condition: " AchievementLevel >= 11 "
     Dependent:
       - Id: 240010
     Reward:
@@ -2603,6 +2635,7 @@ Body:
   - ID: 240012
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 12"
+    Condition: " AchievementLevel >= 12 "
     Dependent:
       - Id: 240011
     Reward:
@@ -2612,6 +2645,7 @@ Body:
   - ID: 240013
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 13"
+    Condition: " AchievementLevel >= 13 "
     Dependent:
       - Id: 240012
     Reward:
@@ -2621,6 +2655,7 @@ Body:
   - ID: 240014
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 14"
+    Condition: " AchievementLevel >= 14 "
     Dependent:
       - Id: 240013
     Reward:
@@ -2630,6 +2665,7 @@ Body:
   - ID: 240015
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 15"
+    Condition: " AchievementLevel >= 15 "
     Dependent:
       - Id: 240014
     Reward:
@@ -2639,6 +2675,7 @@ Body:
   - ID: 240016
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 16"
+    Condition: " AchievementLevel >= 16 "
     Dependent:
       - Id: 240015
     Reward:
@@ -2648,6 +2685,7 @@ Body:
   - ID: 240017
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 17"
+    Condition: " AchievementLevel >= 17 "
     Dependent:
       - Id: 240016
     Reward:
@@ -2657,6 +2695,7 @@ Body:
   - ID: 240018
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 18"
+    Condition: " AchievementLevel >= 18 "
     Dependent:
       - Id: 240017
     Reward:
@@ -2666,6 +2705,7 @@ Body:
   - ID: 240019
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 19"
+    Condition: " AchievementLevel >= 19 "
     Dependent:
       - Id: 240018
     Reward:
@@ -2675,6 +2715,7 @@ Body:
   - ID: 240020
     Group: "AG_GOAL_ACHIEVE"
     Name: "Reaching Level 20"
+    Condition: " AchievementLevel >= 20 "
     Dependent:
       - Id: 240019
     Reward:

+ 74 - 0
db/re/achievement_level_db.yml

@@ -0,0 +1,74 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 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/>.
+#
+###########################################################################
+# Renewal Achievement Level Database
+###########################################################################
+#
+# Achievement Level Settings
+#
+###########################################################################
+# Level - Achievement Level
+###########################################################################
+# Points - Required total scoring points to reach this level.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_LEVEL_DB
+  Version: 1
+
+Body:
+  - Level: 1
+    Points: 18
+  - Level: 2
+    Points: 49
+  - Level: 3
+    Points: 98
+  - Level: 4
+    Points: 171
+  - Level: 5
+    Points: 306
+  - Level: 6
+    Points: 410
+  - Level: 7
+    Points: 550
+  - Level: 8
+    Points: 728
+  - Level: 9
+    Points: 942
+  - Level: 10
+    Points: 1247
+  - Level: 11
+    Points: 1504
+  - Level: 12
+    Points: 1804
+  - Level: 13
+    Points: 2152
+  - Level: 14
+    Points: 2550
+  - Level: 15
+    Points: 3070
+  - Level: 16
+    Points: 3522
+  - Level: 17
+    Points: 4030
+  - Level: 18
+    Points: 4592
+  - Level: 19
+    Points: 5210
+  - Level: 20
+    Points: 5980

+ 323 - 5
db/re/item_combo_db.txt

@@ -43,6 +43,9 @@
 15141:20779:22075,{ .@r = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMaxHP,1000; bonus bHealPower,min(5+.@r,30); bonus bHealPower2,min(5+.@r,30); }
 15186:19168,{ bonus2 bExpAddClass,Class_All,5; bonus2 bDropAddClass,Class_All,5; }
 1535:4361,{ bonus bBreakArmorRate,900; bonus bBreakWeaponRate,900; }
+15384:4119,{ bonus2 bResEff,Eff_Freeze,10000; }
+15409:18849,{ .@r = getequiprefinerycnt(EQI_ARMOR); .@a = getequiprefinerycnt(EQI_HEAD_TOP); bonus bMatk,20*.@r; bonus bAllStats,.@r; if (.@a>=7) bonus2 bMagicAddClass,Class_Boss,15; if (.@a>=9) bonus2 bMagicAddClass,Class_Boss,15; }
+15409:2980,{ bonus bBaseAtk,50; bonus bMatk,50; bonus bAspd,1; bonus5 bAutoSpell,"WL_SOULEXPANSION",1,60,BF_WEAPON,1; bonus5 bAutoSpell,"WL_TELEKINESIS_INTENSE",1,60,BF_MAGIC,0; bonus5 bAutoSpellWhenHit,"AL_HEAL",5,60,BF_WEAPON|BF_MAGIC,0; }
 1558:27085,{ bonus bBaseAtk,100; bonus bMatk,100; }
 1559:5467,{ bonus bAspd,1; bonus bFlee2,3; }
 1564:2186,{ bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R); }
@@ -53,13 +56,19 @@
 1580:2186,{ bonus bAspdRate,15; }
 1615:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bVariableCastrate,-10; }
 1616:2515,{ bonus bSpeedRate,25; }
-1617:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bMatk,.@r; if (.@r >= 10) { autobonus "{ bonus bVariableCastrate,-50; }",100,5000,BF_MAGIC; /* Confirm: Success rate? */ } }
 1618:2509,{ bonus bMaxHP,300; bonus bMatkRate,min(5, getequiprefinerycnt(EQI_HAND_R)-5); bonus2 bSubEle,Ele_Neutral,min(30, getequiprefinerycnt(EQI_GARMENT)*3); }
+1618:2509:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatkRate,1; if (.@r >= 5) { bonus bMatkRate,2; if (.@r >= 7) { bonus bMatkRate,2; } } }
 1618:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
 1618:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bMatk,.@r; if (.@r >= 10) { autobonus "{ bonus bVariableCastrate,-50; }",100,5000,BF_MAGIC; /* Confirm: Success rate? */ } }
+1618:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatk,10*.@r; if (.@r>=10) { bonus bVariableCastrate,-3; bonus2 bSkillAtk,"WL_EARTHSTRAIN",15; bonus2 bSkillAtk,"WL_CHAINLIGHTNING",15; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",70; bonus2 bSkillAtk,"WZ_JUPITEL",70; } if (BaseLevel>=100) { bonus bVariableCastrate,-3; bonus2 bSkillAtk,"WL_EARTHSTRAIN",30; bonus2 bSkillAtk,"WL_CHAINLIGHTNING",30; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",140; bonus2 bSkillAtk,"WZ_JUPITEL",140; } }
+1618:20813,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_GARMENT)*3; }
+1618:20813:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatkRate,1; if (.@r >= 5) { bonus bMatkRate,2; if (.@r >= 7) { bonus bMatkRate,2; } } }
 1618:20847,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = min(.@weapon,10); bonus bMaxHP,1000; bonus bMatk,(-50+(20*.@weapon)); bonus bDelayrate,-(3*(.@weapon/3)); bonus2 bSubEle,Ele_Neutral,(min(.@eq,10)/2); }
-1619:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bMatk,.@r; if (.@r >= 10) { autobonus "{ bonus bVariableCastrate,-50; }",100,5000,BF_MAGIC; /* Confirm: Success rate? */ } }
+1620:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatk,10*.@r; if (.@r>=10) { bonus bVariableCastrate,-3; bonus2 bSkillAtk,"WL_EARTHSTRAIN",15; bonus2 bSkillAtk,"WL_CHAINLIGHTNING",15; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",70; bonus2 bSkillAtk,"WZ_JUPITEL",70; } if (BaseLevel>=100) { bonus bVariableCastrate,-3; bonus2 bSkillAtk,"WL_EARTHSTRAIN",30; bonus2 bSkillAtk,"WL_CHAINLIGHTNING",30; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",140; bonus2 bSkillAtk,"WZ_JUPITEL",140; } }
+1620:20813,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_GARMENT)*3; }
+1620:20813:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatkRate,1; if (.@r >= 5) { bonus bMatkRate,2; if (.@r >= 7) { bonus bMatkRate,2; } } }
 1620:2509,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; if(getequiprefinerycnt(EQI_GARMENT) > 10) { bonus2 bSubEle,Ele_Neutral,30; } else { bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_GARMENT)*3; } }
+1620:2509:19139,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatkRate,1; if (.@r >= 5) { bonus bMatkRate,2; if (.@r >= 7) { bonus bMatkRate,2; } } }
 1620:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
 1620:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bMatk,.@r; if (.@r >= 10) { autobonus "{ bonus bVariableCastrate,-50; }",100,5000,BF_MAGIC; /* Confirm: Success rate? */ } }
 1629:5045,{ bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R); }
@@ -197,12 +206,63 @@
 2425:2530,{ bonus bFlee,10; }
 2425:2551,{ bonus bFlee,10; }
 2425:15058,{ bonus bAgi,2; bonus bFlee,5; }
+24255:28392:24266:24279:24298:24311,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24255:28392:24267:24280:24299:24312,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24255:28392:24268:24281:24300:24313,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24256:24269,{ bonus2 bSkillAtk,"KN_BOWLINGBASH",20; bonus2 bSkillUseSPrate,"KN_PIERCE",20; }
+24257:24270,{ bonus2 bSkillAtk,"CR_HOLYCROSS",20; bonus2 bSkillUseSPrate,"CR_GRANDCROSS",20; }
+24258:24271,{ if (BaseJob == Job_Blacksmith) { bonus2 bAddSize,Size_All,3; bonus2 bMagicAddSize,Size_All,3;  bonus2 bSkillUseSPrate,"BS_WEAPONPERFECT",20; } }
+24259:24272,{ if (BaseJob == Job_Alchemist) { skill "BS_ADRENALINE",3; } }
+24260:24273,{ if (BaseJob == Job_Priest) { bonus bMatkRate,3; bonus2 bVariableCastrate,"PR_MAGNUS",-40; } }
+24261:24274,{ bonus2 bSkillUseSPrate,"MO_INVESTIGATE",20; bonus2 bSkillUseSPrate,"MO_FINGEROFFENSIVE",20; bonus2 bSkillUseSPrate,"MO_CHAINCOMBO",20; }
+24262:24275,{ bonus2 bSkillUseSPrate,"AS_GRIMTOOTH",20; bonus2 bSkillAtk,"AS_SONICBLOW",20; }
+24263:24276,{ if (BaseJob == Job_Rogue) { bonus2 bAddSize,Size_All,3; bonus2 bMagicAddSize,Size_All,3;  bonus2 bSkillUseSPrate,"RG_RAID",20; } }
+24264:24277,{ bonus2 bSkillAtk,"WZ_VERMILION",20; bonus2 bSkillAtk,"WZ_METEOR",20; bonus2 bSkillAtk,"WZ_STORMGUST",20; bonus2 bVariableCastrate,"WZ_JUPITEL",-40; }
+24265:24278,{ bonus2 bVariableCastrate,"WZ_HEAVENDRIVE",-40; if (BaseJob == Job_Sage) { bonus bMatkRate,3; } }
+24266:24279,{ if (BaseJob == Job_Hunter) { bonus2 bAddSize,Size_All,3; bonus2 bMagicAddSize,Size_All,3; bonus2 bSkillUseSPrate,"HT_CLAYMORETRAP",20; bonus2 bSkillUseSPrate,"HT_LANDMINE",20; } }
+24267:24280,{ autobonus3 "{ bonus bAspdRate,10; bonus bSpeedRate,25; }",1000,5000,"BD_ADAPTATION"; /* Unknow Specialeffect */ }
+24268:24281,{ autobonus3 "{ bonus bAspdRate,10; bonus bSpeedRate,25; }",1000,5000,"BD_ADAPTATION"; /* Unknow Specialeffect */ }
+24282:24318,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24283:24319,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24284:24315,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24285:24314,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24286:24317,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24287:24316,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bAllStats,3; bonus bUseSPrate,-10; }
+24288:24301,{ bonus2 bSkillUseSPrate,"RK_SONICWAVE",20; bonus3 bAutoSpell,"RK_IGNITIONBREAK",3,20; }
+24288:24301:24246:24250:24256:24269,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24289:24302,{ bonus2 bSkillUseSPrate,"LG_CANNONSPEAR",20; skill "AM_CP_SHIELD",3; }
+24289:24302:24246:24250:24257:24270,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24290:24303,{ bonus2 bSkillAtk,"NC_VULCANARM",20; bonus2 bSkillUseSPrate,"NC_FLAMELAUNCHER",20; }
+24291:24304,{ bonus bMaxHPrate,2; bonus2 bSkillCooldown,"GN_CART_TORNADO",-1000; bonus2 bVariableCastrate,"GN_CARTBOOST",-100; }
+24292:24305,{ bonus2 bSkillAtk,"AB_DUPLELIGHT",20; bonus2 bSkillCooldown,"AB_ADORAMUS",-1000; }
+24293:24306,{ bonus2 bSkillAtk,"SR_RAMPAGEBLASTER",20; bonus2 bSkillUseSPrate,"SR_SKYNETBLOW",20; }
+24294:24307,{ bonus2 bSkillAtk,"GC_DARKILLUSION",20; bonus3 bAutoSpell,"GC_DARKCROW",1,10; }
+24295:24308,{ bonus2 bSkillAtk,"SC_TRIANGLESHOT",20; bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; bonus bLongAtkRate,2; }
+24296:24309,{ bonus2 bSkillCooldown,"WL_DRAINLIFE",-1000; bonus2 bSkillCooldown,"WL_EARTHSTRAIN",-4000; }
+24297:24310,{ bonus2 bSkillAtk,"SO_EARTHGRAVE",20; bonus2 bSkillAtk,"SO_DIAMONDDUST",20; }
+24298:24311,{ bonus2 bSkillAtk,"RA_CLUSTERBOMB",20; bonus2 bSkillAtk,"RA_AIMEDBOLT",20; }
+24299:24312,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bLongAtkRate,getskilllv("WM_LESSON")/2; }
+24300:24313,{ bonus bMaxHPrate,2; bonus bMaxSPrate,2; bonus bLongAtkRate,getskilllv("WM_LESSON")/2; }
 2433:2537,{ bonus bMaxHPRate,6; }
 2434:2529,{ bonus bFlee,10; }
 2434:2530,{ bonus bFlee,10; }
 2434:2551,{ bonus bFlee,10; }
 2434:15058,{ bonus bAgi,2; bonus bFlee,5; }
+24402:24405,{ bonus2 bSkillCooldown,"RL_HEAT_BARREL",-4000; bonus2 bSkillCooldown,"RL_HAMMER_OF_GOD",-2000; }
+24402:24405:24283:24319,{ bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
+24403:24406,{ bonus2 bSkillCooldown,"KO_JYUMONJIKIRI",-1000; bonus bLongAtkRate,5; }
+24403:24406:24285:24314,{ bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
+24404:24407,{ bonus2 bSkillCooldown,"KO_ZANZOU",-3000; bonus2 bMagicAtkEle,Ele_Fire,5; bonus2 bMagicAtkEle,Ele_Water,5; bonus2 bMagicAtkEle,Ele_Wind,5; }
+24404:24407:24285:24314,{ bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
+24408:24409,{ bonus2 bSkillCooldown,"SU_LUNATICCARROTBEAT",-3000; }
+24408:24409:24287:24316,{ bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
 2441:2546,{ bonus bFlee,5; }
+24410:24411,{ bonus2 bSkillCooldown,"SU_SV_STEMSPEAR",-1000; }
+24410:24411:24286:24317,{ bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
+24412:24413,{ bonus2 bSkillCooldown,"SJ_DOCUMENT",-2000; }
+24412:24413:24284:24315,{ bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
+24414:24415,{ bonus2 bSkillCooldown,"SP_SOULREAPER",-2000; }
+24414:24415:24284:24315,{ bonus bAllStats,7; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }
 2472:2570:15030:16013,{ bonus2 bAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bSkillAtk,"AB_ADORAMUS",200; bonus2 bSkillUseSP,"AB_ADORAMUS",-30; }
 2472:2570:15030:16018,{ bonus2 bAddRace,RC_Undead,30; bonus2 bMagicAddRace,RC_Undead,30; bonus2 bSkillAtk,"AB_ADORAMUS",200; bonus2 bSkillUseSP,"AB_ADORAMUS",-30; bonus2 bVariableCastrate,"AL_HOLYLIGHT",-50; bonus2 bVariableCastrate,"PR_TURNUNDEAD",-50; bonus2 bVariableCastrate,"PR_MAGNUS",-50; bonus2 bVariableCastrate,"AB_JUDEX",-50; bonus2 bVariableCastrate,"AB_ADORAMUS",-50; }
 2475:2574:2883:15036,{ bonus bMaxHPRate,14; bonus2 bSubEle,Ele_Neutral,10; bonus2 bSkillAtk,"RK_HUNDREDSPEAR",50; skill "CR_AUTOGUARD",1; bonus bUseSPrate,10; }
@@ -221,6 +281,7 @@
 2507:15146,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bMaxSPrate,10+.@r; bonus bFlee,10+.@r; }
 2507:15163,{ bonus bVariableCastrate,-(2*getequiprefinerycnt(EQI_ARMOR)); bonus bNoCastCancel; }
 2509:15146,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bMaxHPrate,10+.@r; bonus bMatkRate,2+.@r; }
+2509:22170,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus bMatkRate,10; if (.@r>=7) { bonus2 bSubEle,Ele_Earth,15; bonus2 bSubEle,Ele_Wind,15; } if (.@r>=9) { bonus2 bSubEle,Ele_Earth,15; bonus2 bSubEle,Ele_Wind,15; } }
 2518:2648:2649:5126,{ bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel; bonus bVariableCastrate,25; }
 2519:2650:2651:5127,{ bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; }
 2519:15147,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,15; bonus2 bIgnoreDefRaceRate,RC_Demon,15; bonus2 bIgnoreDefRaceRate,RC_Undead,15; bonus bLuk,3+.@r; bonus bCritical,10+.@r; }
@@ -283,6 +344,16 @@
 2733:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
 2733:2773,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
 2733:2774,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
+27347:27028,{ bonus2 bMagicAddEle,Ele_Earth,8; }
+27351:4582,{ bonus bMaxHPrate,5; }
+27352:4127,{ bonus bMaxSPrate,10; }
+27352:4166,{ bonus2 bAddClass,Class_All,10; }
+27354:4133,{ bonus2 bAddClass,Class_All,5; bonus2 bSubEle,Ele_Neutral,10; }
+27355:4633,{ bonus bLongAtkRate,5; }
+27357:4226,{ bonus bDef,150; bonus bMdef,20; }
+27359:27122,{ bonus2 bMagicAddEle,Ele_Water,8; }
+27360:4670,{ bonus2 bMagicAddEle,Ele_Fire,8; }
+27363:4168,{ bonus2 bMagicAtkEle,Ele_Fire,15; bonus2 bSkillAtk,"WZ_METEOR",15; }
 2747:13061,{ bonus bHit,5; bonus bMatk,5; bonus2 bSkillUseSP,"SC_ENERVATION",20; bonus2 bSkillUseSP,"SC_GROOMY",20; }
 2751:2888,{ bonus bAspdRate,3; bonus bVariableCastrate,-3; }
 2777:2778:5479,{ bonus bMaxHP,10*getequiprefinerycnt(EQI_HEAD_TOP); bonus bMaxSP,2*getequiprefinerycnt(EQI_ACC_L); bonus bNoCastCancel; bonus bCastrate,15; }
@@ -293,11 +364,39 @@
 2780:2826:5577,{ autobonus "{ bonus bAspdRate,2; }",50,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bMaxHP,BaseLevel*15; bonus bMaxSP,(BaseLevel*12)/10; bonus2 bAddClass,Class_All,3; }
 2782:19156,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r < 4) { .@a = 4; } else { .@a = min(.@r,10); } bonus3 bAutoSpell,"WZ_WATERBALL",.@a,(.@a*10); }
 2826:2827:5577,{ autobonus "{ bonus bAspdRate,2; }",50,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bMaxHP,BaseLevel*15; bonus bMaxSP,(BaseLevel*12)/10; bonus2 bAddClass,Class_All,3; }
+28513:18848,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); .@a = min(.@r,10); bonus bAllStats,.@a; bonus bFixedCastrate,-50; if (.@r>=7) { bonus2 bMagicAddClass,Class_Boss,20; } }
+28513:18849,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bAllStats,.@r; bonus2 bMagicAddClass,Class_Boss,10; bonus bFixedCastrate,-50; if (.@r>=7) { bonus2 bMagicAddClass,Class_Boss,20; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; } if (.@r>=9) { bonus2 bMagicAddClass,Class_Boss,20; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } }
+28513:2980,{ bonus bBaseAtk,50; bonus bMatk,50; bonus bAspd,2; bonus3 bAutoSpell,"SO_EARTHGRAVE",1,20; bonus3 bAutoSpell,"SO_VARETYR_SPEAR",1,20; bonus3 bAutoSpell,"WL_RECOGNIZEDSPELL",1,10; bonus3 bAutoSpell,"WZ_QUAGMIRE",3,50; }
+28520:15061,{ .@r = getequiprefinerycnt(EQI_ARMOR); if (.@r >= 7) { .@val = 5000; } else { .@val = 2500; } bonus2 bResEff,Eff_Stun,.@val; bonus2 bResEff,Eff_Silence,.@val; }
+28520:15061:18728:20700:2495,{ bonus bFlee2,30; bonus2 bSubEle,Ele_Water,15; bonus2 bResEff,Eff_Freeze,10000; }
+28520:18728,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bAllStats,5; if (getequiprefinerycnt(EQI_HEAD_TOP)>=7) { bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bAllStats,5; } }
+28520:20700,{ if (getequiprefinerycnt(EQI_GARMENT)>=7) .@val = 2; else .@val = 1; bonus2 bSubEle,Ele_Fire,25*.@val; bonus2 bSubEle,Ele_Water,25*.@val; }
+28520:2495,{ if (getequiprefinerycnt(EQI_SHOES)>=7) .@val = 2; else .@val = 1; bonus bMaxHPrate,10*.@val; bonus bMaxSPrate,10*.@val; }
+28520:4525,{ bonus bMdef,15; bonus bFlee,100; bonus bMaxHPrate,15; skill "RG_TUNNELDRIVE",1; bonus bIntravision; }
+28521:1387,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; if (.@r>=7) { bonus2 bAddClass,Class_Boss,5; bonus2 bSkillAtk,"WS_CARTTERMINATION",5; } if (.@r>=9) { bonus2 bAddClass,Class_Boss,10; bonus2 bSkillAtk,"WS_CARTTERMINATION",10; } }
+28521:1490,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; if (.@r>=7) { bonus2 bAddClass,Class_Boss,5; bonus2 bSkillAtk,"LK_SPIRALPIERCE",5; bonus2 bSkillAtk,"RK_SONICWAVE",5; } if (.@r>=9) { bonus2 bAddClass,Class_Boss,10; bonus2 bSkillAtk,"LK_SPIRALPIERCE",10; bonus2 bSkillAtk,"RK_SONICWAVE",10; } }
+28521:18122,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bLongAtkRate,2*(readparam(bStr)/10); if (.@r>=7) { bonus2 bAddClass,Class_Boss,5; bonus2 bSkillAtk,"RA_ARROWSTORM",5; bonus2 bSkillAtk,"RA_AIMEDBOLT",5; } if (.@r>=9) { bonus2 bAddClass,Class_Boss,10; bonus2 bSkillAtk,"RA_ARROWSTORM",10; bonus2 bSkillAtk,"RA_AIMEDBOLT",10; } }
 2855:5360,{ bonus bCritAtkRate,10; if(getequiprefinerycnt(EQI_HEAD_TOP)>5) bonus bCritical,5; }
 2913:2710,{ bonus bBaseAtk,10; }
+28910:20800,{ bonus bLongAtkDef,-35; }
+28918:2998,{ bonus2 bSubRace,RC_Undead,4; bonus2 bSubRace,RC_Demon,4; bonus2 bSubRace,RC_Demihuman,3; bonus2 bSubRace,RC_Player,3; }
+28929:4058,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_DemiHuman,5; if (.@r>=6) bonus2 bExpAddRace,RC_DemiHuman,5; if (.@r>=8) bonus2 bExpAddRace,RC_DemiHuman,5; }
+28929:4066,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Brute,5; if (.@r>=6) bonus2 bExpAddRace,RC_Brute,5; if (.@r>=8) bonus2 bExpAddRace,RC_Brute,5; }
+28929:4074,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Insect,5; if (.@r>=6) bonus2 bExpAddRace,RC_Insect,5; if (.@r>=8) bonus2 bExpAddRace,RC_Insect,5; }
+28929:4083,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Fish,5; if (.@r>=6) bonus2 bExpAddRace,RC_Fish,5; if (.@r>=8) bonus2 bExpAddRace,RC_Fish,5; }
+28929:4120,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Dragon,5; if (.@r>=6) bonus2 bExpAddRace,RC_Dragon,5; if (.@r>=8) bonus2 bExpAddRace,RC_Dragon,5; }
+28929:4136,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Demon,5; if (.@r>=6) bonus2 bExpAddRace,RC_Demon,5; if (.@r>=8) bonus2 bExpAddRace,RC_Demon,5; }
+28929:4138,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Angel,5; if (.@r>=6) bonus2 bExpAddRace,RC_Angel,5; if (.@r>=8) bonus2 bExpAddRace,RC_Angel,5; }
+28929:4314,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Formless,5; if (.@r>=6) bonus2 bExpAddRace,RC_Formless,5; if (.@r>=8) bonus2 bExpAddRace,RC_Formless,5; }
+28929:4340,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Undead,5; if (.@r>=6) bonus2 bExpAddRace,RC_Undead,5; if (.@r>=8) bonus2 bExpAddRace,RC_Undead,5; }
+28929:4515,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bExpAddRace,RC_Plant,5; if (.@r>=6) bonus2 bExpAddRace,RC_Plant,5; if (.@r>=8) bonus2 bExpAddRace,RC_Plant,5; }
 2913:15040,{ bonus bBaseAtk,2*getequiprefinerycnt(EQI_ARMOR); }
 2913:2408,{ bonus bBaseAtk,getequiprefinerycnt(EQI_SHOES); }
 2913:5104,{ bonus bBaseAtk,10; }
+2935:2387,{ bonus bMaxHPrate,3; if (getequiprefinerycnt(EQI_ARMOR)>=7) { bonus bMaxSPrate,2; } }
+2935:2387:2440,{ bonus bVariableCastrate,-5; bonus bDelayRate,-5; }
+2935:2440,{ bonus bMaxSPrate,3; if (getequiprefinerycnt(EQI_SHOES)>=7) { bonus bMaxHPrate,2; } }
+2935:2744,{ bonus bVariableCastrate,-4; bonus bDelayRate,-4; }
 2950:15067:20709:22012,{ bonus2 bExpAddRace,RC_All,30; }
 2957:2958,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
 2959:18756,{ .@r = 3+(3*getequiprefinerycnt(EQI_HEAD_TOP)); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,30; }",.@r,5000,BF_WEAPON,"{ transform 1785,5000; specialeffect2 EF_POTION_BERSERK; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,30; }",.@r,5000,BF_WEAPON,"{ transform 1785,5000; specialeffect2 EF_POTION_BERSERK; }"; }
@@ -349,6 +448,20 @@
 2990:2991,{ bonus bAllStats,5; bonus5 bAutoSpellWhenHit,"SC_MAELSTROM",1,100,BF_MAGIC,0; }
 2995:15110,{ bonus2 bSkillAtk,"NC_AXEBOOMERANG",100; }
 2997:2999,{ bonus2 bAddClass,Class_All,10; bonus bMatkRate,10; }
+32242:18971,{ bonus2 bFixedCastrate,"RK_STORMBLAST",-100; }
+32242:18972,{ bonus bMaxHPRate,50; }
+32242:18973,{ bonus2 bSkillAtk,"NC_FLAMELAUNCHER",70; bonus2 bSkillAtk,"NC_COLDSLOWER",70; }
+32242:18974,{ bonus2 bSkillAtk,"NC_FLAMELAUNCHER",70; bonus2 bSkillAtk,"NC_COLDSLOWER",70; }
+32242:18975,{ bonus2 bSkillAtk,"SC_TRIANGLESHOT",70; }
+32242:18976,{ bonus2 bResEff,Eff_Freeze,10000; }
+32242:18977,{ bonus2 bVariableCastrate,"GN_MANDRAGORA",-100; }
+32242:18978,{ bonus bMatk,100; bonus2 bSkillCooldown,"WL_CRIMSONROCK",-500; }
+32242:18979,{ bonus2 bSkillAtk,"SR_RIDEINLIGHTNING",70; }
+32242:18980,{ skill "LG_TRAMPLE",3; }
+32242:18981,{ bonus2 bResEff,Eff_Stun,10000; }
+32242:18982,{ autobonus3 "{ bonus bStr,200; }",1000,20000,"GC_COUNTERSLASH","{}"; }
+32242:18983,{ bonus2 bSkillAtk,"LG_CANNONSPEAR",70; }
+32242:18984,{ bonus bCritical,70; bonus bCritAtkRate,70; }
 4001:4197,{ bonus bFlee,18; }
 4006:4266,{ bonus bFlee,18; }
 4009:4179,{ bonus bFlee,18; }
@@ -376,6 +489,7 @@
 4129:27335,{ bonus bCritAtkRate,15; }
 4131:27081,{ autobonus "{ bonus bFlee2,10; }",70,5000,BF_SHORT; }
 4139:18619,{ bonus3 bAutoSpell,"RG_SNATCHER",5,20; bonus bDex,2; bonus bAgi,1; bonus bInt,-1; }
+4144:20932,{ bonus bMaxHPrate,15; bonus2 bSubEle,Ele_Dark,100; bonus2 bSubEle,Ele_Fire,50; bonus2 bResEff,Eff_Curse,10000; }
 4152:5967,{ bonus2 bAddItemGroupHealRate,IG_Juice,1000; }
 4153:4247:4273,{ bonus3 bAddMonsterDropItem,544,RC_Fish,3000; bonus2 bAddEle,Ele_Water,30; }
 4153:18554,{ bonus2 bAddEle,Ele_Water,10; }
@@ -499,6 +613,7 @@
 5548:5766,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bBaseAtk,min(.@r,10); bonus bMatk,min(.@r,10); }
 5917:1525,{ bonus bLongAtkDef,10; }
 5920:18542,{ bonus bHealPower,2*getequiprefinerycnt(EQI_HEAD_TOP); }
+5933:19112,{ bonus2 bAddSize,Size_All,1; bonus bLongAtkRate,1; if(readparam(bStr)>=108) { bonus2 bAddSize,Size_All,2; bonus bLongAtkRate,1; } if(readparam(bStr)>=120) { bonus2 bAddSize,Size_All,3; bonus bLongAtkRate,1; } }
 5967:28321,{ bonus2 bSubSkill,"HT_BLITZBEAT",200; }
 5918:19306,{ .@aspd = 1; .@crit_dmg = 2 + 2 * (readparam(bDex) / 10); .@sub_demi = 2; .@luk = readparam(bLuk); if (.@luk > 107) { .@aspd += 1; .@crit_dmg += 2; .@sub_demi += 2; } if (.@luk > 119) { .@aspd += 2; .@crit_dmg += 4; .@sub_demi += 4; bonus bSplashRange,1; } bonus bAspd,.@aspd; bonus bCritAtkRate,.@crit_dmg; bonus2 bSubRace,RC_DemiHuman,.@sub_demi; bonus2 bSubSkill,"NPC_CRITICALSLASH",100; }
 //9024:18832,{ bonus3 bAutoSpell,"BS_ADRENALINE",2,(GetPetRelationship >= 3)?15:10; }
@@ -532,10 +647,17 @@
 15129:20789:22084:28381:28414,{ bonus bMaxHPrate,20; bonus bMaxSPrate,10; bonus bHealPower,20; skill "AL_HEAL",7,1; }
 15138:19026,{ bonus2 bSubRace,RC_Fish,(10+getequiprefinerycnt(EQI_ARMOR)); }
 15138:19026:20756:22059,{ bonus bMaxHP,1000; bonus bMaxSP,100; bonus2 bExpAddRace,RC_Fish,20; bonus2 bMagicAddRace,RC_Fish,50; bonus2 bSubEle,Ele_Water,50; }
+15145:18652,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r >= 9 ) { bonus2 bHPDrainRate,-60,-8; bonus2 bSPDrainRate,-20,-4; } else if (.@r >= 8 ) { bonus2 bHPDrainRate,-50,-5; bonus2 bSPDrainRate,-10,-2; } else if (.@r >= 7 ) { bonus2 bHPDrainRate,-30,-5; bonus2 bSPDrainRate,-10,-2; } else if (.@r >= 5 ) { bonus2 bHPDrainRate,-10,-3; bonus2 bSPDrainRate,-10,-1; } else { bonus2 bHPDrainRate,-10,-1; bonus2 bSPDrainRate,-10,-1; } }
+15145:2554,{ bonus2 bSPDrainRate,-10,1; }
+15145:5208,{ .@i = (getequiprefinerycnt(EQI_HEAD_TOP)>8)?2:1; bonus2 bHPDrainRate,-50,8*.@i; bonus2 bSPDrainRate,-10,4*.@i; }
 15156:20790:22085,{ bonus bMaxHP,4000; bonus bNoCastCancel; bonus bFixedCastrate,-25-(getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES)); }
 15156:20790:22085:28382:28418,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus2 bSkillAtk,"SU_CN_METEOR",200; }
 15156:20790:22085:28380:28421,{ bonus bMaxHPrate,30; bonus bMaxSPrate,9; bonus2 bSkillAtk,"SU_LUNATICCARROTBEAT",200; }
 15156:20790:22085:28381:28415,{ bonus bMaxHPrate,25; bonus bMaxSPrate,15; bonus bHealPower,30; skill "AL_HEAL",9,1; }
+15166:1647,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bHealPower,4*.@r; }
+15166:5968,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bFlee2,.@r; bonus bHealPower,2*.@r; }
+15169:1649,{ .@r = getequiprefinerycnt(EQI_HAND_R); .@b = getequiprefinerycnt(EQI_ARMOR); bonus bMatk,(3*.@r); if(.@b >=7) { bonus bMatk,(5*.@r); } if(.@b >=8) { bonus bMatk,(7*.@r); } }
+15169:4054,{ if(getequiprefinerycnt(EQI_ARMOR) >=9) { bonus2 bResEff,Eff_Freeze,10000; } }
 15176:18145:28441,{ bonus2 bSkillAtk,"AC_DOUBLE",50; bonus2 bSkillUseSP,"SC_TRIANGLESHOT",10; }
 15177:20820:28608,{ bonus5 bAutoSpell,"MG_FIREBALL",max(5,getskilllv("MG_FIREBALL")),50,BF_MAGIC,1; autobonus3 "{ bonus bMatk,50; }",1000,60000,"PF_DOUBLECASTING","{ specialeffect2 EF_ENCHANCE; }"; }
 15178:20821:28721,{ bonus2 bSkillAtk,"KO_BAKURETSU",20; bonus2 bSkillAtk,"KO_HAPPOKUNAI",50; }
@@ -556,9 +678,13 @@
 15183:28467:28468,{ bonus bAtk,40; bonus2 bSubEle,Ele_All,4; bonus2 bSubEle,Ele_Neutral,-4; bonus2 bExpAddClass,Class_All,2; }
 15184:28469:28470,{ bonus bAtk,50; bonus2 bSubEle,Ele_All,5; bonus2 bSubEle,Ele_Neutral,-5; bonus2 bExpAddClass,Class_All,2; }
 15185:28471:28472,{ bonus bAtk,50; bonus2 bSubEle,Ele_All,5; bonus2 bSubEle,Ele_Neutral,-5; bonus2 bExpAddClass,Class_All,2; bonus bNoCastCancel; }
+15189:20748,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus bBaseAtk,3*.@r; if (.@r >= 7) bonus bBaseAtk,5*(readparam(bStr)/10); if (.@r >= 8) bonus bBaseAtk,7*(readparam(bStr)/10); }
+15189:20749,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus bBaseAtk,3*.@r; if (.@r >= 7) bonus bBaseAtk,5*(readparam(bStr)/10); if (.@r >= 8) bonus bBaseAtk,7*(readparam(bStr)/10); }
+15189:4141,{ if (getequiprefinerycnt(EQI_ARMOR) >= 9) bonus2 bResEff,Eff_Curse,10000; }
 15195:16063,{ .@matk = 100; .@recovery = 20; .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_ARMOR); if (.@weapon >= 7 && .@eq >= 7) { .@matk += 50; } if ((.@weapon + .@eq) >= 18) { .@recovery += 15; if ((.@weapon + .@eq) >= 22) { bonus bDelayrate,-15; } } bonus bMatk,.@matk; bonus bHealPower2,.@recovery; }
 15195:19209,{ bonus bSpeedRate,25; /* unknown speed value */ bonus bHealPower,10; }
 15212:22141,{ bonus bAspdRate,getequiprefinerycnt(EQI_SHOES); }
+15205:4114,{ if (getequiprefinerycnt(EQI_ARMOR)>=9) { bonus2 bResEff,Eff_Freeze,10000; } }
 15212:20856,{ bonus bDelayrate,-getequiprefinerycnt(EQI_GARMENT); }
 15212:20856:22141,{ if ((getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES)) >= 39) { autobonus "{ bonus bIgnoreDefClass,Class_Normal; bonus bIgnoreDefClass,Class_Boss; }",50,5000; } }
 15348:19366:20923:22192,{ bonus bVit,5; bonus bMaxSPrate,5; bonus bDef,5; bonus bMdef,15; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Wind,10; .@hp = 15; .@r[0] = getequiprefinerycnt(EQI_ARMOR); .@r[1] = getequiprefinerycnt(EQI_HEAD_TOP); .@r[2] = getequiprefinerycnt(EQI_GARMENT); .@r[3] = getequiprefinerycnt(EQI_SHOES); .@sum = .@r[0]+.@r[1]+.@r[2]+.@r[3]; if (.@r[0] >= 7 && .@r[1] >= 7 && .@r[2] >= 7 && .@r[3] >= 7) { .@hp += 10; } bonus bMaxHPrate,.@hp; if (.@sum >= 36) { bonus bFixedCast,-700; if (.@sum >= 40) { bonus bDelayrate,-20; } } }
@@ -570,6 +696,7 @@
 15377:20934,{ bonus bMatk,50; }
 15377:22196,{ bonus bAspdRate,5; }
 15377:22197,{ bonus bMatkRate,5; }
+15388:15389,{ .@r = getequiprefinerycnt(EQI_ARMOR) + getequiprefinerycnt(EQI_GARMENT); bonus bMaxHPrate,5; bonus bMaxSPrate,5; if(.@r > 21){ bonus bDelayrate,-15; } }
 16065:20838,{ bonus bAspdRate,10; .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"AB_DUPLELIGHT_MELEE",25; bonus2 bSkillAtk,"AB_DUPLELIGHT_MAGIC",25; } if ((.@eq + .@weapon) >= 18) { bonus bCritical,15; if ((.@eq + .@weapon) >= 22) { bonus bCritAtkRate,20; } } }
 18137:1752,{ bonus bLongAtkRate,25; }
 18137:1752:19048,{ bonus bLongAtkRate,20; bonus2 bSubEle,Ele_Fire,-10; if (getequiprefinerycnt(EQI_HAND_R) >= 10) bonus bAspd,1; }
@@ -588,6 +715,7 @@
 18507:18539,{ bonus bUseSPrate,-3; }
 18559:18560,{ bonus bCritAtkRate,5; }
 18563:18564,{ bonus bFixedCastrate,-10; }
+18652:32227,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r>=6) { bonus bDelayrate,-5; bonus bAspdRate,5; bonus2 bAddClass,Class_All,5; bonus2 bIgnoreDefClassRate,Class_All,25; } if (.@r>=8) { bonus bDelayrate,-10; bonus bAspdRate,10; bonus2 bAddClass,Class_All,5; bonus2 bIgnoreDefClassRate,Class_All,25; } }
 18776:20710,{ bonus bBaseAtk,10; }
 18776:22015,{ bonus bMatk,20; }
 18823:19246,{ .@atk = 40; .@aspd = 3; .@dmg = 2; .@agi = readparam(bAgi); if (.@agi > 107) { .@atk += 60; .@aspd += 5; .@dmg += 2; } if (.@agi > 119) { .@atk += 80; .@aspd += 7; .@dmg += 4; } bonus bBaseAtk,.@atk; bonus bAspdRate,.@aspd; bonus2 bSubRace,RC_Player,.@dmg; bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Silence,10000; }
@@ -595,25 +723,57 @@
 18823:28551,{ bonus2 bSkillDelay,"LG_OVERBRAND",-2000; bonus bLongAtkRate,getskilllv("LG_CANNONSPEAR") * 2; bonus bLongAtkRate,getskilllv("LG_OVERBRAND") * 2; bonus2 bSkillAtk,"LG_CANNONSPEAR",30; bonus2 bSkillAtk,"LG_OVERBRAND",20; }
 18849:32237,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bFixedCast,-300; if (.@r > 0) { bonus bMatk,(10*.@r); if (.@r >= 7) { bonus2 bMagicAddRace,RC_DemiHuman,10; bonus2 bMagicAddRace,RC_Player,10; bonus2 bMagicAddRace,RC_Demon,10; if (.@r >= 9) { bonus2 bMagicAtkEle,Ele_Water,10; bonus2 bMagicAtkEle,Ele_Wind,10; bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Fire,10; bonus2 bMagicAtkEle,Ele_Neutral,10; if (.@r >= 11) { bonus2 bMagicAddClass,Class_Boss,20; } } } } }
 18867:1720,{ bonus bLongAtkRate,3+(getequiprefinerycnt(EQI_HAND_R) > 6 ? 5:0); }
+18868:28320,{ bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; }
+18933:19082,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",(5*.@r); }
+18933:2268,{ bonus bDelayrate,-5; }
+18933:4229,{ bonus bVariableCastrate,-10; }
 18937:28302,{ bonus bInt,8; bonus bMaxSPrate,5;}
 18937:28303,{ bonus bInt,8; bonus bBaseAtk,20;}
 18937:28304,{ bonus bInt,8; bonus bFlee,15;}
 18937:28305,{ bonus bInt,8; bonus bHit,10;}
+18937:28352,{ bonus bMaxSPrate,5; if (BaseLevel>=20) { bonus bInt,(BaseLevel/20); } }
+18937:28353,{ bonus bMaxHPrate,5; if (BaseLevel>=20) { bonus bStr,(BaseLevel/20); } }
+18937:28357,{ bonus bAspdRate,5; if (BaseLevel>=20) { bonus bAgi,(BaseLevel/20); } }
+18937:28359,{ bonus bVariableCastrate,-5; if (BaseLevel>=20) { bonus bDex,(BaseLevel/20); } }
 18985:28321,{ bonus2 bSkillAtk,"HT_BLITZBEAT",100; }
 18985:28321:28322,{ bonus2 bSkillAtk,"HT_BLITZBEAT",200; }
 18985:28322,{ bonus2 bSkillAtk,"SN_FALCONASSAULT",50; }
 18997:28326:28327,{ bonus bSpeedRate,10; bonus bBaseAtk,50; bonus bMatk,50; if(getequiprefinerycnt(EQI_HEAD_TOP)>=9){ bonus bMaxHPrate,10; bonus bMaxSPrate,50; } }
+19024:19381,{ bonus bMdef,5; bonus bDef,50; bonus bAspdRate,5; bonus bVit,5; bonus2 bSubRace,RC_Player,3; if (readparam(bVit)>=108) { bonus bMdef,5; bonus bDef,50; bonus bAspdRate,5; bonus bVit,5; } if (readparam(bVit)>=120) { bonus bMdef,10; bonus bDef,100; bonus bVit,10; } }
 19026:20756,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSPGainRace,RC_Fish,10; bonus3 bAddMonsterDropItem,544,RC_Fish,(5+.@r); bonus3 bAddMonsterDropItem,551,RC_Fish,(5+.@r); bonus2 bAddItemHealRate,544,5*(1+.@r); bonus2 bAddItemHealRate,551,5*(1+.@r); }
 19026:22059,{ bonus2 bCriticalAddRace,RC_Fish,(10+getequiprefinerycnt(EQI_SHOES)); }
 19038:19039,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP)+getequiprefinerycnt(EQI_HEAD_MID); if((.@r==7)||(.@r==8)){ bonus bCritical,12; bonus bHit,12; } if(.@r>=9){ bonus bMaxHP,1200; bonus bMaxSP,120; } }
+19082:18933:2268,{ bonus2 bSkillUseSP,"GN_SPORE_EXPLOSION",20; }
+19114:4226,{ bonus2 bSubSize,Size_All,10; }
+19114:5548,{ bonus2 bSubSize,Size_All,5; }
 19117:22101,{ bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5; if(getequiprefinerycnt(EQI_SHOES) >= 12) { bonus bFixedCast,-400; } }
 19118:22101,{ bonus2 bDropAddRace,RC_All,4; bonus2 bExpAddRace,RC_All,4; if(getequiprefinerycnt(EQI_SHOES) >= 12) { bonus bFixedCast,-400; } }
+19138:19327,{ .@cast = -(readparam(bInt)/8); .@sub = 2; .@heal = 5; if (.@i >= 120) { .@cast -= 10; .@sub += 6; .@heal += 25; } else if (.@i >= 108) { .@cast -= 4; .@sub += 2; .@heal += 10; } bonus bVariableCastrate,.@cast; bonus2 bSubRace,RC_DemiHuman,.@sub; bonus2 bSubRace,RC_Player,.@sub; bonus bHealPower,.@heal; bonus bAddItemHealRate,.@heal; bonus2 bVariableCastrate,"AB_CHEAL",-100; bonus2 bResEff,EFF_Bleeding,10000; bonus2 bResEff,Eff_Confusion,10000; }
+19139:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus bVit,4; bonus bVariableCastrate,-6; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; bonus2 bMagicAtkEle,Ele_Earth,20; bonus2 bMagicAtkEle,Ele_Wind,20; if (.@r>=7) { bonus bVit,4; bonus bVariableCastrate,-6; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; } if (.@r>=9) { bonus bVit,4; bonus bVariableCastrate,-6; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; } }
+19139:20813,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus bFixedCastrate,-50; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; if (.@r>=5) { bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } if (.@r>=7) { bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } }
+19139:22170,{ bonus bVit,4; bonus bInt,5; bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; }
+19172:28500,{ bonus bDelayrate,-15; }
+19172:4403,{ bonus bDelayrate,30; }
 19247:28762,{ bonus bMatk,50; .@eq = getequiprefinerycnt(EQI_HEAD_TOP); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus bVariableCastrate,-10; } if ((.@eq + .@weapon) >= 18) { bonus2 bMagicAddSize,Size_Small,15; bonus2 bMagicAddSize,Size_Medium,15; if ((.@eq + .@weapon) >= 22) { autobonus "{ bonus bMatk,50; bonus2 bMagicAtkEle,Ele_Fire,20; }",5,10000,BF_MAGIC; /* unknown rate */ } } }
+19272:4365,{ bonus bVariableCastrate,-100; bonus2 bSkillCooldown,"WL_TELEKINESIS_INTENSE",-120000; }
+19299:4463,{ .@type = getiteminfo(getequipid(EQI_COMPOUND_ON),11); if (.@type == W_BOOK || .@type == W_STAFF || .@type == W_2HSTAFF) { bonus2 bMagicAddRace,RC_Player, getequiprefinerycnt(EQI_HAND_R)*2; } }
+19299:5966,{ .@a = readparam(bDex); bonus bMatk,10; bonus bVariableCastrate,-2; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; if (.@a>=108) { bonus bMatk,20; bonus bVariableCastrate,-3; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } if (.@a>=120) { bonus bMatk,30; bonus bVariableCastrate,-5; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; } }
+19326:4187,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_DEMON,5; if (.@r>=6) bonus2 bExpAddRace,RC_DEMON,5; if (.@r>=8) bonus2 bExpAddRace,RC_DEMON,5; }
+19326:4190,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_Undead,5; if (.@r>=6) bonus2 bExpAddRace,RC_Undead,5; if (.@r>=8) bonus2 bExpAddRace,RC_Undead,5; }
+19326:4224,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_Brute,5; if (.@r>=6) bonus2 bExpAddRace,RC_Brute,5; if (.@r>=8) bonus2 bExpAddRace,RC_Brute,5; }
+19326:4256,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_DemiHuman,5; if (.@r>=6) bonus2 bExpAddRace,RC_DemiHuman,5; if (.@r>=8) bonus2 bExpAddRace,RC_DemiHuman,5; }
+19326:4262,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_PLANT,5; if (.@r>=6) bonus2 bExpAddRace,RC_PLANT,5; if (.@r>=8) bonus2 bExpAddRace,RC_PLANT,5; }
+19326:4344,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_Insect,5; if (.@r>=6) bonus2 bExpAddRace,RC_Insect,5; if (.@r>=8) bonus2 bExpAddRace,RC_Insect,5; }
+19326:4347,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_FISH,5; if (.@r>=6) bonus2 bExpAddRace,RC_FISH,5; if (.@r>=8) bonus2 bExpAddRace,RC_FISH,5; }
+19326:4377,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_FORMLESS,5; if (.@r>=6) bonus2 bExpAddRace,RC_FORMLESS,5; if (.@r>=8) bonus2 bExpAddRace,RC_FORMLESS,5; }
+19326:4385,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_DRAGON,5; if (.@r>=6) bonus2 bExpAddRace,RC_DRAGON,5; if (.@r>=8) bonus2 bExpAddRace,RC_DRAGON,5; }
+19326:4391,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_ANGEL,5; if (.@r>=6) bonus2 bExpAddRace,RC_ANGEL,5; if (.@r>=8) bonus2 bExpAddRace,RC_ANGEL,5; }
 19344:28244,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bAddClass,Class_All,10; if (.@weapon >= 7 && .@eq >= 7) { bonus bAspd,2; } if ((.@weapon + .@eq) >= 18) { bonus bLongAtkRate,10; if ((.@weapon + .@eq) >= 22) { bonus2 bSkillAtk,"GS_SPREADATTACK",30; } } }
 19344:32301,{ bonus bBaseAtk,30; .@eq = getequiprefinerycnt(EQI_HEAD_TOP); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bAddClass,Class_All,5; } if ((.@eq + .@weapon) >= 18) { bonus2 bSubSize,Size_Small,20; bonus2 bSubSize,Size_Medium,20; if ((.@eq + .@weapon) >= 22) { autobonus3 "{ bonus bBaseAtk,100; bonus bLongAtkRate,15; }",5,10000,"RL_FIREDANCE"; /* unknown rate */ } } }
 19428:20948:32238:32239,{ bonus bInt,5; bonus bMaxSPrate,10; bonus bDef,100; bonus2 bMagicAtkEle,Ele_Water,10; bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Neutral,10; .@head = getequiprefinerycnt(EQI_HEAD_TOP); .@garment = getequiprefinerycnt(EQI_GARMENT); if (.@head >= 7 && .@garment >= 7) { .@matk = 40; } if ((.@head + .@garment) >= 18) { .@matk += 40; bonus2 bMagicAtkEle,Ele_Ghost,15; bonus2 bMagicAtkEle,Ele_Wind,15; bonus2 bMagicAtkEle,Ele_Holy,15; if ((.@head + .@garment) >= 22) { bonus bMatkRate,10; bonus2 bIgnoreMdefRaceRate,RC_Formless,50; bonus2 bIgnoreMdefRaceRate,RC_Demon,50; bonus2 bIgnoreMdefRaceRate,RC_Brute,50; } } bonus bMatk,.@matk; }
 20135:20136,{ bonus bAllStats,12; }
 20701:2165,{ .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_HAND_L); bonus2 bAddEle,Ele_Earth,.@b; bonus2 bSubRace,RC_Fish,.@a; }
+20714:28320,{ .@val = min(12,getequiprefinerycnt(EQI_GARMENT)); bonus2 bAddRace,RC_DemiHuman,.@val; bonus2 bAddRace,RC_Player,.@val; }
 20717:22000,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20717:22001,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20717:22002,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
@@ -662,18 +822,61 @@
 20718:22116,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20718:22117,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20718:22118,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
-20725:2189,{ .@a = getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bHPLossRate,30,1000; bonus bMatk,5*(.@a/3); }",30+.@a,10000,BF_MAGIC,"{ active_transform 1930,10000; specialeffect2 EF_POTION_BERSERK; /*Confirm Special Effect*/ }"; .@b = getequiprefinerycnt(EQI_HAND_L); if(.@b>=7) bonus2 bSubEle,Ele_All,2*.@b; }
+20725:2189,{ .@a = getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bHPLossRate,30,1000; bonus bMatk,5*("+.@a+"/3); }",30+.@a,10000,BF_MAGIC,"{ active_transform 1930,10000; specialeffect2 EF_POTION_BERSERK; /*Confirm Special Effect*/ }"; .@b = getequiprefinerycnt(EQI_HAND_L); if(.@b>=7) bonus2 bSubEle,Ele_All,2*.@b; }
+20778:4606,{ bonus bSPGainValue,-1*(20+(getequiprefinerycnt(EQI_GARMENT)/2)); bonus bMaxSPrate,44; }
 20783:4174,{ bonus2 bSubEle,Ele_Neutral,-50; }
 20797:2339,{ bonus bInt,15; bonus bMaxHPrate,5; bonus bMaxSPrate,5; if (getequiprefinerycnt(EQI_ARMOR) > 6) bonus bNoCastCancel; }
 20797:4174,{ bonus2 bSubEle,Ele_All,50; bonus2 bSubEle,Ele_Neutral,-50; }
+20799:1752:1730,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSkillAtk,"RA_ARROWSTORM",(5*.@r); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",(5*.@r); if(getequiprefinerycnt(EQI_HAND_R)>=10) { bonus bAspd,1; } }
+20799:1754:1731,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSkillAtk,"RA_ARROWSTORM",(5*.@r); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",(5*.@r); if(getequiprefinerycnt(EQI_HAND_R)>=10) { bonus bAspd,1; } }
+20799:1755:1733,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSkillAtk,"RA_ARROWSTORM",(5*.@r); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",(5*.@r); if(getequiprefinerycnt(EQI_HAND_R)>=10) { bonus bAspd,1; } }
+20799:1756:1732,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSkillAtk,"RA_ARROWSTORM",(5*.@r); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",(5*.@r); if(getequiprefinerycnt(EQI_HAND_R)>=10) { bonus bAspd,1; } }
+20800:4045,{ bonus bLongAtkDef,-35; }
+20813:22170,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus bMatkRate,10; if (.@r>=7) { bonus2 bSubEle,Ele_Earth,15; bonus2 bSubEle,Ele_Wind,15; } if (.@r>=9) { bonus2 bSubEle,Ele_Earth,15; bonus2 bSubEle,Ele_Wind,15; } }
+20813:4174,{ bonus2 bSubEle,Ele_Neutral,-30; }
+20814:4588,{ bonus bBaseAtk,-5*readparam(bStr)/10; }
 20819:5397,{ bonus bAspd,1; bonus bNoCastCancel; }
+20831:4596,{ bonus bMatk,-5*(readparam(bInt)/10); }
 20838:26109,{ bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",10; .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"SO_EARTHGRAVE",40; } if ((.@eq + .@weapon) >= 18) { bonus2 bMagicAtkEle,Ele_Neutral,10; bonus2 bMagicAtkEle,Ele_Earth,10; if ((.@eq + .@weapon) >= 22) { bonus2 bMagicAtkEle,Ele_Water,10; } } }
 20840:28725,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); .@val = 80; if (.@weapon >= 7 && .@eq >= 7) { .@val += 80; } if ((.@weapon + .@eq) >= 18) { .@val += 40; } if ((.@weapon + .@eq) >= 22) { bonus2 bMagicAtkEle,Ele_Fire,15; } bonus bMatk,.@val; }
+20846:22000,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bBaseAtk,30; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22001,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bMatk,30; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22002,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bAspdRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22003,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bAddItemHealRate,10; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22004,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bLongAtkRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22005,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bCritAtkRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22006,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bBaseAtk,30; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22007,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bAddItemHealRate,10; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22008,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bLongAtkRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22009,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bMatk,30; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22010,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bAspdRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
+20846:22011,{ bonus bMaxHPrate,15; bonus bMdef,10; bonus bCritAtkRate,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; }
 20847:28745,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); .@val = 10; if (.@weapon >= 7 && .@eq >= 7) { bonus bCritAtkRate,15; } if ((.@weapon + .@eq) >= 18) { .@val += 15; if ((.@weapon + .@eq) >= 22) { skill "TF_DOUBLE",4; bonus bDoubleRate,20; } } bonus bAspdRate,.@val; }
+20859:4121,{ bonus bPerfectHitAddRate,50; bonus2 bResEff,Eff_Stone,10000; }
+20863:4593,{ bonus bLongAtkRate,-1*readparam(bDex)/10; }
+20922:4306,{ bonus2 bSubEle,Ele_Neutral,20; bonus bMaxHPrate,10; bonus bMdef,10; }
+20925:22035,{ bonus bAgi,10; bonus bInt,10; bonus bVariableCastrate,-10; bonus2 bSubRace,RC_Player,5; }
+20925:22036,{ bonus bStr,10; bonus bDex,10; bonus bDelayrate,-20; bonus2 bSubRace,RC_Player,5; }
+20925:22037,{ bonus bVit,10; bonus bLuk,10; bonus bHealPower,20; bonus2 bSubRace,RC_Player,5; bonus bUseSPrate,-10; }
+20931:1752,{ bonus2 bSubEle,Ele_Fire,75; }
+20931:1754,{ bonus2 bSubEle,Ele_Water,75; }
+20931:1755,{ bonus2 bSubEle,Ele_Wind,75; }
+20931:1756,{ bonus2 bSubEle,Ele_Earth,75; }
 20933:22196,{ bonus bCritAtkRate,10; }
 20933:22197,{ bonus bVariableCastrate,-10; }
 20934:22196,{ bonus bLongAtkRate,10; }
 20934:22197,{ bonus2 bMagicAtkEle,Ele_All,10; }
+20935:22199,{ bonus bHit,5; }
+20935:22199:15378,{ bonus2 bAddClass,Class_All,2; .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_SHOES); .@c = getequiprefinerycnt(EQI_ARMOR); if (.@a>=7 && .@b>=7 &&.@c>=7) bonus2 bAddClass,Class_All,3; if (.@a+.@b+.@c >= 27) bonus bDelayrate,-20; }
+20936:22200,{ bonus bCritAtkRate,5; }
+20936:22200:15379,{ bonus2 bAddClass,Class_All,2; .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_SHOES); .@c = getequiprefinerycnt(EQI_ARMOR); if (.@a>=7 && .@b>=7 &&.@c>=7) bonus2 bAddClass,Class_All,3; if (.@a+.@b+.@c >= 27) bonus bCritAtkRate,20; }
+20937:22201,{ bonus bVariableCastrate,-5; }
+20937:22201:15380,{ bonus bMatkRate,2; .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_SHOES); .@c = getequiprefinerycnt(EQI_ARMOR); if (.@a>=7 && .@b>=7 &&.@c>=7) bonus bMatkRate,3; if (.@a+.@b+.@c >= 27) bonus2 bMagicAtkEle,Ele_Fire,15; }
+20941:4197,{ bonus bFlee,20; bonus bMaxHPrate,10; bonus bMdef,10; }
+20969:1752,{ bonus2 bSubEle,Ele_Fire,75; }
+20969:1754,{ bonus2 bSubEle,Ele_Water,75; }
+20969:1755,{ bonus2 bSubEle,Ele_Wind,75; }
+20969:1756,{ bonus2 bSubEle,Ele_Earth,75; }
 21050:22190,{ bonus bLongAtkRate,3; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus bVariableCastrate,-10; } if ((.@eq + .@weapon) >= 18) { bonus bFixedCast,-500; if ((.@eq + .@weapon) >= 22) { bonus2 bSkillAtk,"RK_DRAGONBREATH",20; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",20; } } }
 22069:2195,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bAddEle,Ele_Neutral,getequiprefinerycnt(EQI_HAND_L); }
 22069:20753,{ bonus2 bAddEle,Ele_Neutral,5; .@r = getequiprefinerycnt(EQI_GARMENT); bonus bMaxHPrate,.@r; bonus bMaxSPrate,.@r; }
@@ -683,7 +886,12 @@
 22101:29151,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; .@r = getequiprefinerycnt(EQI_SHOES); if(.@r >= 7) { bonus2 bSubEle,Ele_Neutral,2; } if(.@r >= 9) { bonus2 bSubEle,Ele_Neutral,3; } if(.@r >= 12) { bonus bDelayrate,-5; } }
 22101:29152,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; .@r = getequiprefinerycnt(EQI_SHOES); if(.@r >= 7) { bonus bLongAtkRate,2; } if(.@r >= 9) { bonus bLongAtkRate,3; } if(.@r >= 12) { bonus bDelayrate,-5; } }
 22101:29153,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; .@r = getequiprefinerycnt(EQI_SHOES); if(.@r >= 7) { bonus bCritAtkRate,2; } if(.@r >= 9) { bonus bCritAtkRate,3; } if(.@r >= 12) { bonus bDelayrate,-5; } }
+22104:1646,{ .@r = getequiprefinerycnt(EQI_HAND_R); .@b = getskilllv("WZ_FROSTNOVA"); .@c = getskilllv("WZ_WATERBALL"); bonus2 bMagicAtkEle,Ele_Water,4*.@r; bonus2 bIgnoreMdefClassRate,Class_Normal,5*.@b; bonus2 bIgnoreMdefClassRate,Class_Boss,5*.@b; bonus2 bSkillAtk,"WZ_WATERBALL",(30*.@c)+(20*.@r); }
+22106:1387,{ .@r = getequiprefinerycnt(EQI_SHOES); .@b = getequiprefinerycnt(EQI_HAND_R); if (.@r>=7) { bonus2 bSubRace,RC_DemiHuman,30; bonus2 bSubRace,RC_Player,30; if (.@b>=7) { bonus2 bSkillAtk,"WS_CARTTERMINATION",8; bonus2 bAddClass,Class_Boss,20; } if (.@b>=9) { bonus2 bSkillAtk,"WS_CARTTERMINATION",12; bonus2 bAddClass,Class_Boss,30; } } }
+22106:1490,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,40; bonus2 bSubRace,RC_Player,40; bonus4 bAutoSpellOnSkill,"LK_SPIRALPIERCE","RK_SONICWAVE",getskilllv("RK_SONICWAVE"),10000; if (.@r>=7) { bonus2 bSkillAtk,"RK_SONICWAVE",20; bonus2 bSkillAtk,"LK_SPIRALPIERCE",20; bonus2 bSubClass,Class_Boss,20; } if (.@r>=9) { bonus2 bSkillAtk,"RK_SONICWAVE",30; bonus2 bSkillAtk,"LK_SPIRALPIERCE",30; bonus2 bSubClass,Class_Boss,30; } }
+22106:18122,{ .@r = getequiprefinerycnt(EQI_SHOES); .@b = getequiprefinerycnt(EQI_HAND_R); if (.@r>=7) { bonus bLongAtkRate,3*(readparam(bStr)/10); if (.@b>=7) { bonus2 bSkillAtk,"RA_ARROWSTORM",20; bonus2 bSkillAtk,"RA_AIMEDBOLT",20; bonus2 bAddClass,Class_Boss,20; } if (.@b>=9) { bonus2 bSkillAtk,"RA_ARROWSTORM",30; bonus2 bSkillAtk,"RA_AIMEDBOLT",30; bonus2 bAddClass,Class_Boss,30; } } }
 22106:2160,{ .@r = getequiprefinerycnt(EQI_SHOES); if (.@r > 6) { bonus2 bSubSize,Size_Large,2; bonus2 bSubClass,Class_Boss,2; } if (.@r > 8) { bonus2 bSubSize,Size_Large,2; bonus2 bSubClass,Class_Boss,2; } }
+22120:1631,{ .@r = getequiprefinerycnt(EQI_HAND_R); .@cast = -5*getskilllv("AB_ORATIO"); bonus2 bVariableCastrate,"AB_JUDEX",.@cast; bonus2 bVariableCastrate,"AB_ADORAMUS",.@cast; if (.@r >= 7) { .@magic = 30; if (.@r >= 9) { .@magic += 20; .@dmg = 20; } bonus2 bMagicAddRace,RC_Demon,.@magic; bonus2 bMagicAddRace,RC_Undead,.@magic; bonus2 bMagicAddEle,Ele_Undead,.@magic; bonus2 bMagicAddEle,Ele_Dark,.@magic; } bonus2 bSkillAtk,"AB_ADORAMUS",.@dmg + 10*(getskilllv("AB_LAUDAAGNUS")+getskilllv("AB_LAUDARAMUS")+getskilllv("AB_CLEARANCE")); }
 22122:28443:28444,{ bonus bAspdRate,4; bonus bHit,4; }
 22123:28445:28446,{ bonus bAspdRate,8; bonus bHit,8; }
 22124:28447:28448,{ bonus bAspdRate,8; bonus bHit,8; bonus2 bExpAddClass,Class_All,2; }
@@ -701,6 +909,12 @@
 22126:28471:28472,{ bonus bAspdRate,10; bonus bHit,10; bonus2 bExpAddClass,Class_All,2; bonus bSpeedAddRate,25; }
 22133:26007,{ bonus bAspdRate,8; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus bLongAtkRate,10; if ((.@eq + .@weapon) >= 22) { .@val += 30; } } if (.@val) { bonus2 bSkillAtk,"LG_BANISHINGPOINT",.@val; } }
 22133:32005,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus2 bAddClass,Class_All,10; if ((.@eq + .@weapon) >= 22) { .@val += 20; } } if (.@val) { bonus2 bSkillAtk,"RK_HUNDREDSPEAR",.@val; } }
+22138:20815,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bSubEle,Ele_Holy,30-(2*getskilllv("CR_TRUST")); bonus2 bSubEle,Ele_Dark,30; bonus bFixedCastrate,-50; if (.@r > 8) .@val = 20; else if (.@r > 6) .@val = 10; bonus2 bMagicAtkEle,Ele_Fire,.@val; bonus2 bMagicAtkEle,Ele_Neutral,.@val; bonus2 bMagicAtkEle,Ele_Dark,.@val; }
+22138:20815:1643,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bMagicAtkEle,Ele_Fire,4*getskilllv("WZ_FIREPILLAR"); bonus2 bMagicAtkEle,Ele_Neutral,6*getskilllv("HW_GRAVITATION"); if (.@r > 8) .@val = 2; else if (.@r > 6) .@val = 1; bonus2 bSkillAtk,"WL_HELLINFERNO",100*.@val; bonus2 bMagicAddRace,RC_DemiHuman,20*.@val; bonus2 bMagicAddRace,RC_Player,20*.@val; }
+22138:4876,{ bonus2 bMagicAtkEle,Ele_Fire,-50; bonus2 bMagicAtkEle,Ele_Neutral,-50; bonus2 bMagicAtkEle,Ele_Dark,-50; }
+22170:1618,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bIgnoreMdefClassRate,Class_All,50; if (.@r>=10) { bonus2 bMagicAtkEle,Ele_Neutral,80; bonus2 bMagicAddRace,RC_Demihuman,20; bonus2 bMagicAddRace,RC_Player,20; bonus2 bSkillCooldown,"WL_EARTHSTRAIN",-2400; bonus2 bSkillCooldown,"WL_CHAINLIGHTNING",-1000; autobonus "{ bonus2 bSkillAtk,\"WL_CHAINLIGHTNING\",100; }",60,5000,BF_MAGIC; } }
+22170:1620,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; bonus2 bIgnoreMdefClassRate,Class_All,50; if (.@r>=10) { bonus2 bMagicAtkEle,Ele_Neutral,80; bonus2 bMagicAddRace,RC_Demihuman,20; bonus2 bMagicAddRace,RC_Player,20; bonus2 bSkillCooldown,"WL_EARTHSTRAIN",-2400; bonus2 bSkillCooldown,"WL_CHAINLIGHTNING",-1000; autobonus "{ bonus2 bSkillAtk,\"WL_CHAINLIGHTNING\",100; }",60,5000,BF_MAGIC; } }
+22170:19020,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Wind,10; if (.@r>=7) { bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Wind,10; } if (.@r>=9) { bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Wind,10; } }
 22171:13345,{ autobonus "{ bonus bStr,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
 //22171:26154,{ autobonus "{ bonus bInt,20; bonus bMatkRate,15; }",20,7000,BF_MAGIC; /* unknown rate */ }
 22171:26155,{ autobonus "{ bonus bLuk,20; bonus bMatkRate,15; bonus2 bAddClass,Class_All,15; }",20,7000,BF_MAGIC|BF_WEAPON; /* unknown rate */ }
@@ -711,6 +925,8 @@
 //22171:28631,{ autobonus "{ bonus bStr,20; bonus2 bAddClass,Class_All,15; }",3,7000,BF_WEAPON; /* unknown rate */ }
 22171:28763:28764,{ autobonus "{ bonus bStr,20; bonus2 bAddClass,Class_All,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
 22171:32302,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
+22172:15042,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bSpeedRate,25; bonus bCritAtkRate,4*(readparam(bluk)/20); if (.@r>=7) { bonus bAspdRate,8; bonus2 bSubRace,RC_DemiHuman,8; bonus2 bSubRace,RC_Player,8; bonus2 bSkillAtk,"HT_BLITZBEAT",40; bonus2 bSkillAtk,"SN_SHARPSHOOTING",50; } if (.@r>=9) { bonus bAspdRate,4; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; bonus2 bSkillAtk,"HT_BLITZBEAT",20; bonus2 bSkillAtk,"SN_SHARPSHOOTING",25; } }
+22172:15043,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bHPGainValue,500; bonus bSpeedRate,25; bonus2 bSkillAtk,"RA_CLUSTERBOMB",30*(readparam(bint)/20); bonus2 bSkillUseSP,"RA_ELECTRICSHOCKER",30; if (.@r>=7) { bonus bFlee2,6; bonus2 bSubRace,RC_DemiHuman,8; bonus2 bSubRace,RC_Player,8; bonus2 bSkillAtk,"RA_CLUSTERBOMB",400; bonus2 bSkillAtk,"RA_AIMEDBOLT",20; } if (.@r>=9) { bonus bFlee2,3; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; bonus2 bSkillAtk,"RA_CLUSTERBOMB",200; bonus2 bSkillAtk,"RA_AIMEDBOLT",10; } }
 22190:28254,{ bonus2 bAddClass,Class_All,10; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus bLongAtkRate,5; } if ((.@eq + .@weapon) >= 18) { bonus2 bSkillAtk,"RL_FIRE_RAIN",20; bonus2 bSkillCooldown,"RL_FIRE_RAIN",-2000; if ((.@eq + .@weapon) >= 22) { autobonus3 "{ bonus bBaseAtk,50; bonus2 bAddRace,RC_Brute,50; bonus2 bAddRace,RC_Demon,50; }",5,10000,"RL_R_TRIP"; /* unknown rate */ } } }
 24012:24013:24014:24015:24016:24017,{ bonus bAllStats,3; }
 24018:24019:24020,{ if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) + getequiprefinerycnt(EQI_SHADOW_WEAPON) >= 23) { bonus2 bAddClass,Class_All,1; } }
@@ -719,6 +935,7 @@
 24026:24027,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHIELD); bonus bDef,.@r; if(.@r >= 15) { bonus2 bSubEle,Ele_Neutral,1; } }
 24029:24031,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bBaseAtk,.@r; if(.@r >= 15) { bonus bLongAtkRate,1; } }
 24030:24032,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bCritical,.@r; bonus bBaseAtk,.@r; if(.@r >= 15) { bonus bCritAtkRate,1; } }
+24033:24366:24367,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); .@val = 5; if (.@r >= 25) { .@val += 15; } bonus bHealPower,.@val; }
 24034:24040,{ bonus bLuk,1; }
 24035:24041,{ bonus bStr,1; }
 24036:24042,{ bonus bInt,1; }
@@ -740,8 +957,12 @@
 24073:24076,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
 24074:24077,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
 24078:24079:24080,{ bonus2 bSPDrainRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)/10); }
+24079:24080:24324,{ bonus2 bSPDrainRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L))/10; }
+24079:24080:24329,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if (.@r >= 25) { bonus bMatkRate,2; } else if (.@r >= 20) { bonus bMatkRate,1; } bonus bMatk,10; }
 24081:24082:24083,{ bonus2 bHPDrainRate,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)/5); }
+24082:24083:24325,{ bonus2 bHPDrainRate,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES))/5; }
 24084:24085:24086:24087:24088:24089,{ bonus bAllStats,1; .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if (.@r >= 45) { bonus bNoGemStone; } bonus bUseSPrate,100-.@r; }
+24084:24085:24086:24087:24089:24322,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if (.@r >= 45) { bonus bNoGemStone; bonus bUseSPrate,(100-.@r); } }
 24090:24091:24092,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Stone,10000; }
 24090:24093:24094,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Sleep,10000; }
 24090:24095:24096,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Silence,10000; }
@@ -750,8 +971,17 @@
 24090:24102:24103,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 20) bonus2 bResEff,Eff_Bleeding,10000; }
 24090:24104:24105:24106,{ bonus bDef,4; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 30) bonus2 bResEff,Eff_Stun,10000; }
 24090:24107:24108,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 20) bonus2 bResEff,Eff_Curse,10000; }
+24090:24352,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Stone,10000; } }
+24090:24353,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Sleep,10000; } }
+24090:24354,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Silence,10000; } }
+24090:24355,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Blind,10000; } }
+24090:24356,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Freeze,10000; } }
+24090:24357,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_ACC_R); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Bleeding,10000; } }
+24090:24358,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Stun,10000; } }
+24090:24359,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bDef,50; if (.@r >= 15) { bonus2 bResEff,Eff_Curse,10000; } }
 24048:24109:24110,{ bonus bNoCastCancel2; bonus bVariableCastrate,40-(getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)); }
 24111:24112:24113,{ bonus bNoCastCancel; bonus bUseSPrate,40-getequiprefinerycnt(EQI_SHADOW_SHIELD)-getequiprefinerycnt(EQI_SHADOW_ARMOR)-getequiprefinerycnt(EQI_SHADOW_SHOES); }
+24111:24112:24323,{ bonus bNoCastCancel; bonus bUseSPrate,40-getequiprefinerycnt(EQI_SHADOW_SHIELD)-getequiprefinerycnt(EQI_SHADOW_ARMOR)-getequiprefinerycnt(EQI_SHADOW_SHOES); }
 24150:24151,{ bonus2 bAddClass,Class_All,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) bonus bNoSizeFix; }
 24152:24153,{ bonus bAtk,getequiprefinerycnt(EQI_SHADOW_WEAPON); if (getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 15) bonus bUnbreakableWeapon; }
 24154:24155,{ bonus bDef,getequiprefinerycnt(EQI_SHADOW_ARMOR); if (getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) bonus bUnbreakableArmor; }
@@ -765,6 +995,8 @@
 24163:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Formless; }
 24164:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Undead; }
 24165:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Plant; }
+24166:24167:24328,{ if (getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 25) { bonus bIgnoreDefRace,RC_DemiHuman; } }
+24168:24169:24329,{ if (getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 25) { bonus bIgnoreMDefRace,RC_DemiHuman; } }
 24168:24169:24170,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_DemiHuman; }
 24168:24169:24171,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Demon; }
 24168:24169:24172,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Brute; }
@@ -775,7 +1007,9 @@
 24168:24169:24177,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Formless; }
 24168:24169:24178,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Undead; }
 24168:24169:24179,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Plant; }
+24168:24169:24345:24346:24423:24424,{ if ((getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)) >= 54) { bonus2 bIgnoreDefClassRate,Class_Normal,20; } }
 24180:24181:24182:24183:24184:24185,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if(.@r>=45) { bonus bMaxHPrate,(.@r-60); bonus bNoWalkDelay; } }
+24180:24181:24182:24183:24184:24321,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if (.@r >= 45) { bonus bMaxHPrate,(.@r-60); bonus bNoWalkDelay; } }
 24186:24198,{ bonus2 bSubEle,Ele_Neutral,2; }
 24187:24199,{ bonus2 bSubEle,Ele_Dark,2; }
 24188:24200,{ bonus2 bSubEle,Ele_Water,2; }
@@ -787,6 +1021,7 @@
 24194:24206,{ bonus2 bSubEle,Ele_Ghost,2; }
 24195:24207,{ bonus2 bSubEle,Ele_Undead,2; }
 24196:24197,{ bonus bFlee,5; if(getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ARMOR)>=15) bonus bSpeedAddRate,3; }
+24197:24320,{ bonus bFlee,5; if ((getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHOES)) >= 15) { bonus bSpeedRate,25; /* unknown value */ } }
 24208:24209,{ bonus2 bExpAddRace,RC_All,((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?10:1); }
 24210:24211,{ bonus2 bExpAddRace,RC_All,((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?20:10); }
 24212:24213,{ bonus2 bExpAddRace,RC_All,((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?10:5); }
@@ -794,6 +1029,7 @@
 24217:24218,{ if(getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=15) bonus bAspd,1; }
 24223:24225:24226,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@r>=25) {bonus2 bAddClass,Class_All,2;} else if(.@r>=20) {bonus2 bAddClass,Class_All,1;} bonus2 bAddClass,Class_All,1; }
 24224:24225:24226,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@r>=25) {bonus2 bAddClass,Class_All,2;} else if(.@r>=20) {bonus2 bAddClass,Class_All,1;} bonus bAtk2,10; }
+24225:24226:24328,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if (.@r >= 25) { bonus2 bAddClass,Class_All,2; } else if (.@r >= 20) { bonus2 bAddClass,Class_All,1; } bonus bBaseAtk,10; }
 24227:24229:24230,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@r>=25) {bonus bMatkRate,2;} else if(.@r>=20) {bonus bMatkRate,1;} bonus bMatkRate,1; }
 24228:24229:24230,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@r>=25) {bonus bMatkRate,2;} else if(.@r>=20) {bonus bMatkRate,1;} bonus bMatk,10; }
 24231:24232,{ bonus bFlee,5; if (getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD)>=15) { bonus bAspd,1; } }
@@ -803,12 +1039,48 @@
 24240:24241:24242,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bVariableCastrate,-.@r/5; if(.@r>=25) { bonus bUseSPrate,-2; } else bonus bUseSPrate,-1; }
 24240:24241:24330,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bVariableCastrate,-.@r/5; if(.@r>=25) { bonus bUseSPrate,-2; } else bonus bUseSPrate,-1; }
 24243:24244:24245,{ bonus bDelayrate,(getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)>=25?-5:-1); }
+24243:24244:24331,{ bonus bDelayrate,(getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)>=25?-6:-1); }
 24246:24250,{ bonus2 bAddRace,RC_All,1; bonus bMaxHPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bAddRace,RC_All,2; bonus bMaxHPrate,2; } }
 24247:24251,{ bonus2 bAddRace,RC_All,1; bonus bMaxHPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bAddRace,RC_All,2; bonus bMaxHPrate,2; } }
 24248:24252,{ bonus2 bMagicAddRace,RC_All,1; bonus bMaxSPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bMagicAddRace,RC_All,2; bonus bMaxSPrate,2; } }
 24249:24254,{ bonus2 bMagicAddRace,RC_All,1; bonus bMaxSPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bMagicAddRace,RC_All,2; bonus bMaxSPrate,2; } }
-24253:28391,{ bonus2 bAddRace,RC_All,1; bonus bMaxHPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bAddRace,RC_All,2; bonus bMaxHPrate,2; } }
-24255:28392,{ bonus2 bAddRace,RC_All,1; bonus bMaxHPrate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=10) { bonus2 bAddRace,RC_All,2; bonus bMaxHPrate,2; } }
+24251:24247:24259:24272:24291:24304,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24251:24247:24271:24258:24303:24290,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24252:24248:24260:24273:24292:24305,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24252:24248:24261:24274:24293:24306,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24253:28391,{ .@val = 1; if ((getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R)) >= 10) { .@val += 2; } bonus2 bAddClass,Class_All,.@val; bonus bMaxHPrate,.@val; }
+24253:28391:24262:24275:24294:24307,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24253:28391:24263:24276:24295:24308,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24254:24249:24264:24277:24296:24309,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24254:24249:24265:24278:24297:24310,{ bonus bAllStats,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bIgnoreDefClassRate,Class_Normal,50; bonus2 bIgnoreMDefClassRate,Class_Normal,50; }
+24255:28392,{ .@val = 1; if ((getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R)) >= 10) { .@val += 2; } bonus2 bAddClass,Class_All,.@val; bonus bMaxHPrate,.@val; }
+24321:24337:24338,{ bonus bAllStats,1; .@r = getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ACC_L) + getequiprefinerycnt(EQI_SHADOW_ARMOR); if (.@r >= 25) { bonus bNoWalkDelay; bonus bMaxHPrate,.@r-35; } }
+24326:24327,{ .@r1 = getequiprefinerycnt(EQI_SHADOW_ARMOR) .@r2 = getequiprefinerycnt(EQI_SHADOW_SHIELD); if ((.@r1+.@r2) >= 17) { bonus bLuk,1; bonus bVit,1; bonus bHit,.@r1; bonus bDef,5*.@r2; if (BaseClass == Job_Swordman || BaseClass == Job_Thief || (BaseClass == Job_Taekwon && BaseJob != Job_Soul_Linker)) { bonus bBaseAtk,15; bonus bAspd,1; } else if (BaseClass == Job_Merchant || BaseClass == Job_Archer || BaseClass == Job_Gunslinger) { bonus bFlee,15; bonus bLongAtkRate,3; } else if (BaseClass == Job_Mage || BaseClass == Job_Acolyte || BaseClass == Job_Ninja || BaseJob == Job_Soul_Linker) { bonus bMatk,15; bonus bMaxSPrate,2; bonus bHealPower,3; } else if (BaseClass == Job_Novice || BaseJob == Job_Summoner) { bonus bAspdRate,5; bonus bMaxHP,1000; bonus bVariableCastrate,-5; bonus bMaxSP,300; } } }
+24332:24333,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_SHIELD); bonus bBaseAtk,.@r; if (.@r >= 15) { bonus bCritAtkRate,1; } }
+24322:24335:24336,{ bonus bAllStats,1; .@r = getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_SHIELD); if (.@r >= 25) { bonus bNoGemStone; bonus bUseSPrate,70-.@r; } }
+24341:24342,{ bonus2 bExpAddClass,Class_All,3; }
+24343:24344,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,.@r; if (.@r >= 15) { bonus bAspd,1; bonus bDelayrate,-1; } }
+24345:24346:24347,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,5; if (.@r >= 25) { bonus bIgnoreMDefRace,RC_DemiHuman; bonus bIgnoreMDefRace,RC_Undead; } }
+24345:24346:24348,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,5; if (.@r >= 25) { bonus bIgnoreMDefRace,RC_Demon; bonus bIgnoreMDefRace,RC_Angel; } }
+24345:24346:24349,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,5; if (.@r >= 25) { bonus bIgnoreMDefRace,RC_Formless; bonus bIgnoreMDefRace,RC_Dragon; } }
+24345:24346:24350,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,5; if (.@r >= 25) { bonus bIgnoreMDefRace,RC_Plant; bonus bIgnoreMDefRace,RC_Brute; } }
+24345:24346:24351,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bMDef,5; if (.@r >= 25) { bonus bIgnoreMDefRace,RC_Fish; bonus bIgnoreMDefRace,RC_Insect; } }
+24360:24361:24362,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L); .@rate = 20 + 10*(.@r/10); if (.@r >= 25) { .@hp = 500; } else { .@hp = 100; } autobonus "{ bonus2 bHPRegenRate,"+.@hp+",1000; }",.@rate,5000; }
+24363:24364:24365,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L); .@rate = 10 + 10*(.@r/15); if (.@r >= 25) { .@hp = 250; } else { .@hp = 100; } autobonus "{ bonus2 bHPRegenRate,"+.@hp+",1000; }",.@rate,5000,BF_MAGIC; }
+24368:24369,{ if ((getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L)) >= 15) { bonus bHPrecovRate,50; bonus bSPrecovRate,50; } }
+24370:24371:24372,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L); .@val = 2; if (.@r >= 25) { .@val += 10; if (.@r >= 30) { bonus bAspd,3; } } bonus bCritAtkRate,.@val; }
+24373:24374:24375,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,5; if (.@r >= 25) { bonus bIgnoreDefRace,RC_DemiHuman; bonus bIgnoreDefRace,RC_Undead; } }
+24373:24374:24376,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,5; if (.@r >= 25) { bonus bIgnoreDefRace,RC_Demon; bonus bIgnoreDefRace,RC_Angel; } }
+24373:24374:24377,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,5; if (.@r >= 25) { bonus bIgnoreDefRace,RC_Formless; bonus bIgnoreDefRace,RC_Dragon; } }
+24373:24374:24378,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,5; if (.@r >= 25) { bonus bIgnoreDefRace,RC_Plant; bonus bIgnoreDefRace,RC_Brute; } }
+24373:24374:24379,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_ARMOR); bonus bDef,5; if (.@r >= 25) { bonus bIgnoreDefRace,RC_Fish; bonus bIgnoreDefRace,RC_Insect; } }
+24380:24381:24382,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L); .@rate = 20 + 10*(.@r/10); if (.@r >= 25) { .@sp = 30; } else { .@sp = 10; } autobonus "{ bonus2 bSPRegenRate,"+.@sp+",1000; }",.@rate,5000; }
+24383:24384:24385,{ .@r = getequiprefinerycnt(EQI_SHADOW_WEAPON) + getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L); .@rate = 10 + 10*(.@r/15); if (.@r >= 25) { .@sp = 30; } else { .@sp = 10; } autobonus "{ bonus2 bSPRegenRate,"+.@sp+",1000; }",.@rate,5000,BF_MAGIC; }
+24387:24388:24389:24390:24391:24392,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); .@val = 20 + min(30,.@r); if (BaseLevel >= 130) { .@val += 6; } else if (BaseLevel >= 125) { .@val += 3; } bonus2 bIgnoreDefRaceRate,RC_All,.@val; bonus2 bIgnoreMdefRaceRate,RC_All,.@val; bonus2 bIgnoreDefRaceRate,RC_Player,-.@val; bonus2 bIgnoreMdefRaceRate,RC_Player,-.@val; }
+24393:24394:24395,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bBaseAtk,.@r*2; if (.@r >= 25) { bonus2 bAddClass,Class_All,5; } else if (.@r >= 23) { bonus2 bAddClass,Class_All,2; } }
+24396:24397:24398,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bMatk,.@r*2; if (.@r >= 25) { bonus bMatkRate,5; } else if (.@r >= 23) { bonus bMatkRate,2; } }
+24399:24400,{ .@r = getequiprefinerycnt(EQI_SHADOW_SHIELD) + getequiprefinerycnt(EQI_SHADOW_SHOES); if (.@r >= 16) { bonus bDef,100; bonus bMaxHPrate,4; bonus bMaxSPrate,4; } else { bonus bDef,50; bonus bMaxHPrate,2; bonus bMaxSPrate,2; } }
+24416:24417:24418:24419:24420:24421,{ bonus bAspd,2; bonus bVariableCastrate,-10; bonus2 bIgnoreDefRaceRate,RC_All,70; bonus2 bIgnoreMdefRaceRate,RC_All,70; bonus2 bIgnoreDefRaceRate,RC_Player,-70; bonus2 bIgnoreMdefRaceRate,RC_Player,-70; }
 27101:28510,{ bonus bMatkRate,(getrefine()/3); }
 27102:28510,{ bonus bFlee2,5; }
 27103:28510,{ bonus2 bAddClass,Class_All,(getrefine()/3); }
@@ -839,15 +1111,61 @@
 28022:28509,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bAspdRate,10; if (.@r >= 9) { bonus bCritAtkRate,10; if (.@r >= 11) { bonus2 bAddRace,RC_Brute,25; } } }
 28315:28317,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
 28316:28318,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
+28320:22016,{ .@val = min(12,getequiprefinerycnt(EQI_SHOES)); bonus2 bAddRace,RC_DemiHuman,.@val; bonus2 bAddRace,RC_Player,.@val; }
 28321:28322,{ bonus bUseSPrate,-(getskilllv("HT_BEASTBANE") * 2); }
 28326:28327,{ bonus bInt,8; bonus bStr,8; }
 28358:18521,{ skill "AS_CLOAKING",1; }
+28430:4803,{ bonus bLuk,2; bonus bFlee2,5; bonus bUseSPrate,-5; bonus bHealPower,3; bonus2 bSkillUseSP,"AB_EPICLESIS",100; bonus2 bSkillCooldown,"AB_EPICLESIS",-10000; }
+28430:4804,{ bonus bLuk,2; bonus bFlee2,5; bonus bUseSPrate,-5; bonus bHealPower,3; bonus2 bVariableCastrate,"AB_CHEAL",-100; bonus2 bSkillUseSP,"AB_CHEAL",20; }
+28430:4805,{ bonus bLuk,2; bonus bFlee2,5; bonus bUseSPrate,-5; bonus bHealPower,3; bonus2 bVariableCastrate,"AB_HIGHNESSHEAL",-100; }
+28430:4850,{ bonus bLuk,2; bonus bFlee2,5; bonus bUseSPrate,-5; bonus bHealPower,3; bonus2 bSkillCooldown,"AB_HIGHNESSHEAL",-1000; }
+28433:4817,{ bonus bCritAtkRate,10; }
+28433:4818,{ bonus bCritAtkRate,10; }
+28434:4810,{ bonus bMaxSP,100; bonus2 bAddClass,Class_All,5; }
+28434:4811,{ bonus bMaxSP,100; bonus2 bAddClass,Class_All,5; }
+28437:4814,{ bonus bVariableCastrate,-5; bonus2 bMagicAddRace,RC_All,5; }
+28437:4815,{ bonus bVariableCastrate,-5; bonus2 bMagicAddRace,RC_All,5; }
+28438:4832,{ bonus bDelayrate,-5; bonus bLongAtkRate,5; }
+28438:4833,{ bonus bDelayrate,-5; bonus bLongAtkRate,5; }
+28491:4817,{ bonus bHit,15; bonus bCriticalLong,10; }
+28491:4818,{ bonus bHit,15; bonus bCriticalLong,10; }
 28499:28920,{ bonus bFlee2,10; }
+28501:4807,{ bonus bAspd,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Brute,1; bonus2 bSubRace,RC_Fish,1; bonus2 bSubRace,RC_Player,1; bonus2 bSubRace,RC_Demon,1; bonus2 bSubRace,RC_Undead,1; }
+28501:4842,{ bonus bAspd,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Brute,1; bonus2 bSubRace,RC_Fish,1; bonus2 bSubRace,RC_Player,1; bonus2 bSubRace,RC_Demon,1; bonus2 bSubRace,RC_Undead,1; }
+28502:2201,{ .@a = (readparam(bStr)+readparam(bLuk))/80; .@b = (readparam(bAgi)+readparam(bVit))/80; .@c = (readparam(bInt)+readparam(bDex))/80; bonus bMaxHPrate,5*.@b; bonus2 bAddClass,Class_All,6*.@a; bonus bMatk,120*.@c; bonus bCritical,5*.@a; bonus bAspdRate,5*.@b; bonus bVariableCastrate,-3*.@c; bonus bCritAtkRate,10*.@a; bonus2 bSubRace,RC_DemiHuman,((2*.@b)+2); bonus2 bSubRace,RC_Player,((2*.@b)+2); bonus bHealPower,10*.@c; }
+28502:2202,{ .@a = (readparam(bStr)+readparam(bLuk))/80; .@b = (readparam(bAgi)+readparam(bVit))/80; .@c = (readparam(bInt)+readparam(bDex))/80; bonus bMaxHPrate,5*.@b; bonus2 bAddClass,Class_All,6*.@a; bonus bMatk,120*.@c; bonus bCritical,5*.@a; bonus bAspdRate,5*.@b; bonus bVariableCastrate,-3*.@c; bonus bCritAtkRate,10*.@a; bonus2 bSubRace,RC_DemiHuman,((2*.@b)+2); bonus2 bSubRace,RC_Player,((2*.@b)+2); bonus bHealPower,10*.@c; }
+28502:2203,{ .@a = (readparam(bStr)+readparam(bLuk))/80; .@b = (readparam(bAgi)+readparam(bVit))/80; .@c = (readparam(bInt)+readparam(bDex))/80; bonus bMaxHPrate,5*.@b; bonus2 bAddClass,Class_All,6*.@a; bonus bMatk,120*.@c; bonus bCritical,5*.@a; bonus bAspdRate,5*.@b; bonus bVariableCastrate,-3*.@c; bonus bCritAtkRate,10*.@a; bonus2 bSubRace,RC_DemiHuman,((2*.@b)+2); bonus2 bSubRace,RC_Player,((2*.@b)+2); bonus bHealPower,10*.@c; }
+28502:2204,{ .@a = (readparam(bStr)+readparam(bLuk))/80; .@b = (readparam(bAgi)+readparam(bVit))/80; .@c = (readparam(bInt)+readparam(bDex))/80; bonus bMaxHPrate,5*.@b; bonus2 bAddClass,Class_All,6*.@a; bonus bMatk,120*.@c; bonus bCritical,5*.@a; bonus bAspdRate,5*.@b; bonus bVariableCastrate,-3*.@c; bonus bCritAtkRate,10*.@a; bonus2 bSubRace,RC_DemiHuman,((2*.@b)+2); bonus2 bSubRace,RC_Player,((2*.@b)+2); bonus bHealPower,10*.@c; }
+28506:1414,{ .@r = getequiprefinerycnt(EQI_HAND_R); if (.@r>=7) { .@val = 30; if (.@r>=9) { @val += 20; bonus2 bAddClass,Class_Boss,.@val; bonus2 bAddEle,Ele_Water,.@val; bonus2 bAddEle,Ele_Wind,.@val; bonus2 bAddRace,RC_Fish,.@val; bonus2 bAddRace,RC_Insect,.@val; bonus2 bSkillAtk,"RK_WINDCUTTER",.@val; if (.@r>=10) { bonus2 bVariableCastrate,"RK_WINDCUTTER",-50; } } } }
+28506:1449,{ .@r = getequiprefinerycnt(EQI_HAND_R); if (.@r>=7) { .@val = 30; if (.@r>=9) { @val += 20; bonus2 bAddClass,Class_Boss,.@val; bonus2 bAddEle,Ele_Water,.@val; bonus2 bAddEle,Ele_Wind,.@val; bonus2 bAddRace,RC_Fish,.@val; bonus2 bAddRace,RC_Insect,.@val; bonus2 bSkillAtk,"RK_WINDCUTTER",.@val; if (.@r>=10) { bonus2 bVariableCastrate,"RK_WINDCUTTER",-50; } } } }
+28506:15037,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus2 bResEff,Eff_Freeze,10000; bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; if (.@r>=7) { bonus bMaxHPrate,15; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } if (.@r>=9) { bonus bMaxHPrate,15; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; } }
+28506:15037:2476:2575:2884,{ autobonus3 "{bonus bDelayrate,-70;}",1000,10000,"LK_AURABLADE","{specialeffect2 EF_ENHANCE;}"; }
+28506:2476,{ .@r = getequiprefinerycnt(EQI_SHOES); bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; if (.@r>=7) { bonus bAspdRate,10; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; } if (.@r>=9) { bonus bAspdRate,10; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; } }
+28506:2575,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSkillUseSP,"RK_WINDCUTTER",18; bonus2 bSubRace,RC_Player,3; if (.@r>=7) { bonus bLongAtkDef,10; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; } if (.@r>=9) { bonus bLongAtkDef,10; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; } }
+28506:2884,{ bonus2 bAddClass,Class_All,5; bonus bMaxSPrate,5; bonus bAspdRate,5; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player,4; }
 28508:28612,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bAspdRate,8; bonus bCritAtkRate,(5*(.@r/2)); if (.@r >= 9) { bonus bCritical,15; bonus2 bResEff,Eff_Curse,10000; if (.@r >= 11) { bonus bBaseAtk,100; } } }
 28509:28626,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bAspdRate,8; bonus bCritAtkRate,(5*(.@r/2)); if (.@r >= 9) { bonus bCritical,15; if (.@r >= 11) { bonus bBaseAtk,100; } } }
+28594:4875,{ bonus bStr,40; bonus bMaxHPrate,10; }
+28594:4876,{ bonus bInt,40; bonus bMaxSPrate,10; }
+28594:4877,{ bonus bDelayrate,-30; bonus bFlee,40; }
+28594:4878,{ bonus bMdef,40; bonus bVariableCastrate,-20; }
+28594:4879,{ bonus bDex,40; bonus bHit,50; }
+28594:4880,{ bonus bLuk,40; bonus bCritAtkRate,30; }
 28763:28764,{ .@r = getequiprefinerycnt(EQI_HAND_R) + getequiprefinerycnt(EQI_HAND_L); bonus bBaseAtk,10*(.@r/3); bonus2 bAddClass,Class_All,2*(.@r/5); if (.@r >= 14) { .@val = 25; if (.@r >= 16) { bonus2 bSkillCooldown,"KO_JYUMONJIKIRI",-2000; if (.@r >= 18) { .@lvl = max(getskilllv("KG_KAGEHUMI"),getskilllv("OB_ZANGETSU")); skill "KG_KAGEHUMI",.@lvl; skill "OB_ZANGETSU",.@lvl; if (.@r >= 20) { .@val += 25; } } } bonus2 bSkillAtk,"KO_JYUMONJIKIRI",.@val; } }
 28906:2998,{ bonus bLongAtkRate,10; }
 28907:2998,{ bonus bSpeedRate,25; }
 28908:2998,{ bonus bDelayrate,-10; }
 28909:2998,{ bonus bUseSPrate,-10; bonus bMaxSPrate,10; }
+32228:15388:15389,{ bonus bBaseAtk,25; bonus bHit,10; }
+32229:15388:15389,{ bonus bMatk,25; bonus bVariableCastrate,-8; }
+32230:15388:15389,{ bonus bCritAtkRate,7; bonus2 bAddClass,Class_All,5; }
+32231:15388:15389,{ bonus bMaxHPrate,5; bonus bDelayrate,-5; }
+32232:15388:15389,{ bonus bAspdRate,3; bonus bCritical,7; }
+32233:15388:15389,{ bonus bLongAtkRate,7; bonus bAspd,1; }
+32204:2027,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bInt,2*.@r; bonus2 bSkillAtk,"WL_CRIMSONROCK",.@r; if (.@r>=9) { bonus bMagicHPGainValue,500; bonus bHPGainValue,500; autobonus "{ bonus2 bMagicAtkEle,Ele_Fire,50; }",10,10000,BF_MAGIC,"{ specialeffect2 255; }"; } }
+32204:21018,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bCritAtkRate,3*.@r; if (.@r>=9) { bonus bCritical,50; bonus2 bAddClass,Class_Boss,25; } }
+32204:28010,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bAddClass,Class_All,5*.@r; if (.@r>=9) bonus4 bAutoSpellOnSkill,"GC_ROLLINGCUTTER","AB_ORATIO",10,100; }
+32222:15093,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus5 bAutoSpell,"AL_HEAL",10,-(50+.@r),BF_SHORT,0; bonus5 bAutoSpell,"WZ_STORMGUST",10,-(50+.@r),BF_SHORT,1; bonus2 bSkillAtk,"RK_STORMBLAST",5*.@r; bonus2 bSkillAtk,"LG_BANISHINGPOINT",5*.@r; }
+32222:15095,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus5 bAutoSpell,"PR_KYRIE",10,-(50+.@r),BF_SHORT,0; bonus2 bSkillAtk,"AB_JUDEX",5*.@r; bonus2 bSkillAtk,"AB_ADORAMUS",5*.@r; bonus2 bSkillAtk,"SR_DRAGONCOMBO",5*.@r; bonus2 bSkillAtk,"SR_SKYNETBLOW",5*.@r; bonus2 bSkillAtk,"SR_EARTHSHAKER",5*.@r; }
+32222:15096,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bAllStats,2*.@r; bonus3 bAddEff,Eff_Stun,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@r*50,ATF_SHORT; /* Unknow rates */ }
 32238:32239,{ bonus bVariableCastrate,-10; bonus bMatkRate,10;  }

Diferenças do arquivo suprimidas por serem muito extensas
+ 348 - 263
db/re/item_db.txt


+ 4 - 0
db/re/item_delay.txt

@@ -86,6 +86,10 @@
 12970,300000,SC_REUSE_LIMIT_RECALL	//Emergency_Scroll3
 
 // Misc
+11621,10000	//Red_Syrup
+11622,10000	//Yellow_Syrup
+11623,10000	//White_Syrup
+11624,10000	//Blue_Syrup
 12135,10000	//Green_Ale
 //12202,60000	//Str_Dish10_
 //12203,60000	//Agi_Dish10_

+ 1 - 0
db/re/item_noequip.txt

@@ -126,6 +126,7 @@
 13416,16	// Krieger_Onehand_Sword1
 13417,16	// Krieger_Onehand_Sword2
 13418,16	// Krieger_Onehand_Sword3
+28918,16	// Shield_of_Chaos
 
 // Vellum Gear
 1293,16		// Velum_Jamadhar

+ 10 - 10
db/re/item_randomopt_db.txt

@@ -39,25 +39,25 @@ RDMOPT_ATTR_TOLERACE_UNDEAD,{ bonus2 bSubEle,Ele_Undead,getrandomoptinfo(ROA_VAL
 RDMOPT_ATTR_TOLERACE_ALL,{ bonus2 bSubEle,Ele_All,getrandomoptinfo(ROA_VALUE); }
 // TODO: Confirm if damage reduction is implemented correctly.
 // kRO desc : <ELEMENT> 몬스터로부터 받는 물리 데미지 %d%% 감소.
-RDMOPT_DAMAGE_PROPERTY_NOTHING_USER,{ bonus3 bSubEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_NOTHING_USER,{ bonus2 bSubDefEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET,{ bonus2 bAddEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_WATER_USER,{ bonus3 bSubEle,Ele_Water,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_WATER_USER,{ bonus2 bSubDefEle,Ele_Water,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_WATER_TARGET,{ bonus2 bAddEle,Ele_Water,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_GROUND_USER,{ bonus3 bSubEle,Ele_Earth,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_GROUND_USER,{ bonus2 bSubDefEle,Ele_Earth,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET,{ bonus2 bAddEle,Ele_Earth,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_FIRE_USER,{ bonus3 bSubEle,Ele_Fire,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_FIRE_USER,{ bonus2 bSubDefEle,Ele_Fire,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET,{ bonus2 bAddEle,Ele_Fire,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_WIND_USER,{ bonus3 bSubEle,Ele_Wind,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_WIND_USER,{ bonus2 bSubDefEle,Ele_Wind,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_WIND_TARGET,{ bonus2 bAddEle,Ele_Wind,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_POISON_USER,{ bonus3 bSubEle,Ele_Poison,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_POISON_USER,{ bonus2 bSubDefEle,Ele_Poison,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_POISON_TARGET,{ bonus2 bAddEle,Ele_Poison,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_SAINT_USER,{ bonus3 bSubEle,Ele_Holy,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_SAINT_USER,{ bonus2 bSubDefEle,Ele_Holy,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET,{ bonus2 bAddEle,Ele_Holy,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_DARKNESS_USER,{ bonus3 bSubEle,Ele_Dark,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_DARKNESS_USER,{ bonus2 bSubDefEle,Ele_Dark,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET,{ bonus2 bAddEle,Ele_Dark,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_USER,{ bonus3 bSubEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_USER,{ bonus2 bSubDefEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,{ bonus2 bAddEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE); }
-RDMOPT_DAMAGE_PROPERTY_UNDEAD_USER,{ bonus3 bSubEle,Ele_Undead,getrandomoptinfo(ROA_VALUE),BF_NORMAL; }
+RDMOPT_DAMAGE_PROPERTY_UNDEAD_USER,{ bonus2 bSubDefEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET,{ bonus2 bAddEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); }
 RDMOPT_MDAMAGE_PROPERTY_NOTHING_USER,{ bonus3 bSubEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE),BF_MAGIC; }
 RDMOPT_MDAMAGE_PROPERTY_NOTHING_TARGET,{ bonus2 bMagicAddEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE); }

+ 12 - 12
db/re/item_trade.txt

@@ -4527,18 +4527,18 @@
 //23901,507,100	//
 //23914,475,100	//
 //23919,475,100	//
-//24387,499,100	//
-//24388,499,100	//
-//24389,499,100	//
-//24390,499,100	//
-//24391,499,100	//
-//24392,499,100	//
-//24416,499,100	//
-//24417,499,100	//
-//24418,499,100	//
-//24419,499,100	//
-//24420,499,100	//
-//24421,499,100	//
+24387,499,100	// S_Beginner's_Armor
+24388,499,100	// S_Beginner's_Shield
+24389,499,100	// S_Beginner's_Shoes
+24390,499,100	// S_Beginner's_Weapon
+24391,499,100	// S_Beginner's_Earring
+24392,499,100	// S_Beginner's_Pendant
+24416,499,100	// S_Temporal_Transcendent_Weapon
+24417,499,100	// S_Temporal_Transcendent_Armor
+24418,499,100	// S_Temporal_Transcendent_Shield
+24419,499,100	// S_Temporal_Transcendent_Shoes
+24420,499,100	// S_Temporal_Transcendent_Earring
+24421,499,100	// S_Temporal_Transcendent_Pendant
 //25038,499,100	//
 //25039,499,100	//
 //25042,475,100	//

+ 147 - 18
db/re/mob_db.txt

@@ -1306,13 +1306,13 @@
 2174,MD_VADON,Ancient Crustacean,Deep Sea Vadon,95,120000,1,750,750,1,778,225,154,21,145,91,138,60,113,45,10,12,0,5,21,0x6203295,300,1632,432,540,0,0,0,0,0,0,0,991,20,960,4500,910,1500,2313,3,943,50,757,20,0,0,12615,2,0,0,0,0
 2175,MD_MARSE,Deepsea Marse,Deep Sea Marse,95,120000,1,750,750,1,500,820,58,218,133,37,85,156,133,60,10,12,0,5,41,0x6203295,300,1956,756,528,0,0,0,0,0,0,0,1024,4500,962,1500,0,0,720,5,995,6,1007,3,514,150,12615,2,0,0,0,0
 2176,MD_CRAB,Deepsea Crab,Deep Sea Crab,95,120000,1,750,750,1,696,234,136,15,122,54,84,37,98,65,7,12,0,5,21,0x6203295,200,992,792,360,0,0,0,0,0,0,0,964,2750,960,750,7049,350,1001,7,0,0,0,0,757,19,12615,2,0,0,0,0
-2177,MD_CORNUTUS,Deepsea Cornutus,Deep Sea Cornutus,100,160000,1,750,750,1,1129,237,342,48,122,87,135,66,137,75,10,12,0,5,21,0x6203295,200,1248,48,480,0,0,0,0,0,0,0,991,23,961,2750,911,400,757,27,2106,3,943,500,0,0,12615,3,0,0,0,0
-2178,MD_SHELLFISH,Deepsea Shellfish,Deep Sea Shellfish,100,160000,1,750,750,1,720,1122,43,215,72,31,68,225,166,60,10,12,0,5,41,0x6203295,200,864,864,384,0,0,0,0,0,0,0,965,2750,966,500,7049,250,1056,500,1001,5,0,0,757,9,12615,2,0,0,0,0
+2177,MD_CORNUTUS,Deepsea Cornutus,Deep Sea Cornutus,100,160000,1,750,750,1,1129,237,342,48,122,87,135,66,137,75,10,12,0,5,21,0x6223295,200,1248,48,480,0,0,0,0,0,0,0,991,23,961,2750,911,400,757,27,2106,3,943,500,0,0,12615,3,0,0,0,0
+2178,MD_SHELLFISH,Deepsea Shellfish,Deep Sea Shellfish,100,160000,1,750,750,1,720,1122,43,215,72,31,68,225,166,60,10,12,0,5,41,0x6253295,200,864,864,384,0,0,0,0,0,0,0,965,2750,966,500,7049,250,1056,500,1001,5,0,0,757,9,12615,2,0,0,0,0
 2179,MD_KUKRE,Ancient Kukre,Deep Sea Kukre,100,160000,1,750,750,1,975,118,123,33,125,80,112,60,102,30,10,12,0,4,21,0x6203295,150,1776,576,288,0,0,0,0,0,0,0,991,15,955,2750,910,200,528,250,0,0,928,225,623,10,12615,2,0,0,0,0
 2180,MD_STROUF,Ancient Sea Lord,Deep Sea Strouf,145,400000,1,1000,1000,1,1200,3500,67,221,149,126,81,252,183,66,10,12,2,5,61,0x6203295,150,1872,672,384,0,0,0,0,0,0,0,951,2668,756,58,0,0,1461,1,949,1500,720,10,956,750,12614,3,0,0,0,0
-2181,MD_SWORD_FISH,Ancient Sword Fish,Deep Sea Sword Fish,145,400000,1,1000,1000,1,1849,235,255,17,155,156,115,85,194,65,10,12,2,5,41,0x6203295,200,1968,768,384,0,0,0,0,0,0,0,995,5,963,4500,756,17,2257,1,757,25,0,0,956,300,12614,3,0,0,0,0
+2181,MD_SWORD_FISH,Ancient Sword Fish,Deep Sea Sword Fish,145,400000,1,1000,1000,1,1849,235,255,17,155,156,115,85,194,65,10,12,2,5,41,0x6253295,200,1968,768,384,0,0,0,0,0,0,0,995,5,963,4500,756,17,2257,1,757,25,0,0,956,300,12614,3,0,0,0,0
 2182,MD_MARC,Ancient Seahorse,Deep Sea Marc,145,400000,1,1000,1000,1,1423,331,255,51,150,145,221,83,148,66,10,12,1,5,41,0x6203295,150,1272,72,480,0,0,0,0,0,0,0,995,9,956,4500,756,48,951,500,720,5,0,0,509,350,12612,3,0,0,0,0
-2183,MD_ANOLIAN,Mutant Anolian,Deep Sea Anolian,151,700000,1,1100,1100,1,2122,312,268,22,177,188,205,126,198,61,10,12,1,5,41,0x6203295,190,900,500,864,0,0,0,0,0,0,0,7003,2425,1754,1000,0,0,10019,5,16003,3,2625,1,984,67,12614,3,0,0,0,0
+2183,MD_ANOLIAN,Mutant Anolian,Deep Sea Anolian,151,700000,1,1100,1100,1,2122,312,268,22,177,188,205,126,198,61,10,12,1,5,41,0x6223295,190,900,500,864,0,0,0,0,0,0,0,7003,2425,1754,1000,0,0,10019,5,16003,3,2625,1,984,67,12614,3,0,0,0,0
 2184,MD_OBEAUNE,Deepsea Mermaid,Deep Sea Obeaune,151,700000,1,1100,1100,1,1502,3845,68,326,166,87,101,233,196,55,10,12,1,6,61,0x6203295,200,1872,672,288,0,0,0,0,0,0,0,995,7,950,4500,0,0,2326,5,720,5,951,250,748,15,12614,3,0,0,0,0
 2185,MD_KAPHA,Transform Kapha,Deep Sea Kapha,151,700000,1,1100,1100,1,2590,256,261,58,167,209,128,61,191,20,10,12,1,6,41,0x6203295,165,2012,1728,672,0,0,0,0,0,0,0,7149,3250,7053,1750,0,0,521,1150,708,1,1915,5,13008,3,12612,3,0,0,0,0
 2186,COELACANTH_N_E,Coelacanth,Coelacanth,100,1200000,1,200000,200000,1,1290,1290,280,280,160,160,160,160,160,160,10,12,2,5,41,0x6203695,165,864,864,432,0,0,0,0,0,0,0,12617,5000,12614,2000,12615,2000,12623,700,12614,2000,12615,2000,12615,2000,12615,2000,0,0,0,0
@@ -2365,12 +2365,12 @@
 //3205,PIXY_BLUE_PORING,Poring,Poring,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,0,0,0,0,0,0,0,0,0,0,0,12418,1000,12422,1500,12425,1500,12208,500,22553,1000,12919,1000,16640,5,0,0,0,0,0,0
 //3206,LITTLE_GOLDPORING,Poring,Poring,100,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,200,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,0,0,0
 //3207,E_AQUA_ELEMENTAL,Poring,Poring,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,200,0,0,0,0,0,0,0,0,0,0,969,3000,7444,3000,22537,1000,6635,1000,18570,500,19539,500,0,0,0,0,0,0,0,0
-3208,V_EREMES,V Eremes,Eremes Guille,179,2380000,1,70000,35000,1,5333,2000,180,100,150,190,60,70,200,80,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6816,100,19973,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4684,1
-3209,V_MAGALETA,V Magaleta,Margaretha Sorin,177,2448000,1,80000,40000,1,1667,7000,160,400,130,80,120,160,150,70,10,12,1,7,86,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6819,100,19962,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4685,1
-3210,V_KATRINN,V Katrinn,Kathryne Cheiron,177,2040000,1,60000,30000,1,1333,6000,110,400,110,80,60,200,210,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6817,100,19968,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4686,1
-3211,V_SHECIL,V Shecil,Shecil Damon,179,2142000,1,70000,35000,14,4667,2000,100,100,130,130,70,80,300,50,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,20392,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4687,1
-3212,V_HARWORD,V Harword,Harword Alt-Eisen,177,2720000,1,100000,50000,1,3333,3000,200,100,160,80,200,60,130,50,10,12,1,7,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6815,100,19963,100,19964,100,22679,10,22687,10,0,0,0,0,0,0,0,0,4688,1
-3213,V_SEYREN,V Seyren,Seyren Windsor,179,2448000,1,80000,40000,1,6000,4000,400,200,170,100,200,50,200,60,10,12,1,6,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6814,100,19961,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4689,1
+3208,V_EREMES,V Eremes,Eremes Guille,179,2380000,1,70000,35000,1,5333,2000,180,100,150,190,60,70,200,80,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6816,500,20391,50,19973,50,4684,1
+3209,V_MAGALETA,V Magaleta,Margaretha Sorin,177,2448000,1,80000,40000,1,1667,7000,160,400,130,80,120,160,150,70,10,12,1,7,86,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6819,500,19962,50,4685,1
+3210,V_KATRINN,V Katrinn,Kathryne Cheiron,177,2040000,1,60000,30000,1,1333,6000,110,400,110,80,60,200,210,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6817,500,19968,50,4686,1
+3211,V_SHECIL,V Shecil,Shecil Damon,179,2142000,1,70000,35000,14,4667,2000,100,100,130,130,70,80,300,50,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19974,50,4687,1
+3212,V_HARWORD,V Harword,Harword Alt-Eisen,177,2720000,1,100000,50000,1,3333,3000,200,100,160,80,200,60,130,50,10,12,1,7,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6815,500,19963,50,19964,50,4688,1
+3213,V_SEYREN,V Seyren,Seyren Windsor,179,2448000,1,80000,40000,1,6000,4000,400,200,170,100,200,50,200,60,10,12,1,6,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6814,500,19961,50,4689,1
 3214,V_G_EREMES,V G Eremes,Assassin Cross Eremes,189,2100000,1,0,0,1,8000,4000,360,200,300,380,120,140,400,160,10,12,1,6,85,0x6203695,100,76,384,288,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
 3215,V_G_MAGALETA,V G Magaleta,High Priest Margaretha,187,2400000,1,0,0,1,2500,14000,320,800,260,160,240,320,300,140,10,12,1,7,86,0x6203695,100,576,384,288,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
 3216,V_G_KATRINN,V G Katrinn,High Wizard Kathryne,187,1800000,1,0,0,1,2000,12000,220,800,220,160,120,400,420,100,10,12,1,7,88,0x6203695,100,576,384,288,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
@@ -2383,13 +2383,13 @@
 3223,V_B_HARWORD,Mechanic Harword,Mechanic Howard,187,18000000,1,3000000,3000000,1,10000,6000,400,200,320,160,400,120,260,100,10,12,1,7,81,0x6283695,100,76,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4677,1
 3224,V_B_KATRINN,Warlock Katrinn,Warlock Kathryne,187,10800000,1,3000000,3000000,1,4000,12000,220,800,220,160,120,400,420,100,10,12,1,7,88,0x6283695,100,576,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4678,1
 3225,V_B_SEYREN,Rune Knight Seyren,Rune Knight Seyren,189,14400000,1,3000000,3000000,1,9000,8000,800,400,340,200,400,100,400,120,10,12,1,7,83,0x6283695,100,76,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4679,1
-3226,V_RANDEL,V Randel,Randel Lawrence,178,2550000,1,100000,50000,1,4000,2000,300,200,200,80,200,50,190,70,10,12,1,7,86,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6814,100,20393,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4690,1
-3227,V_FLAMEL,V Flamel,Flamel Emule,176,2312000,1,80000,40000,1,3333,5000,130,100,140,80,70,150,200,50,10,12,1,7,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6815,100,19967,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4691,1
-3228,V_CELIA,V Celia,Celia Alde,178,2295000,1,90000,45000,1,2000,5000,110,800,140,100,60,150,120,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6817,100,19970,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4692,1
-3229,V_CHEN,V Chen,Chen Liu,178,2261000,1,70000,35000,1,5333,3000,180,100,150,80,90,130,200,60,10,12,1,6,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6819,100,19969,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4693,1
-3230,V_GERTIE,V Gertie,Gertie Wie,178,2040000,1,80000,40000,1,4667,2500,160,100,180,130,60,50,210,50,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6816,100,19965,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4694,1
-3231,V_ALPHOCCIO,V Alphoccio,Alphoccio Basil,176,2040000,1,60000,30000,1,2667,6000,120,100,120,150,70,200,150,90,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,19966,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4696,1
-3232,V_TRENTINI,V Trentini,Trentini,176,2040000,1,60000,30000,2,2667,6000,100,100,110,150,70,200,150,80,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,19971,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4695,1
+3226,V_RANDEL,V Randel,Randel Lawrence,178,2550000,1,100000,50000,1,4000,2000,300,200,200,80,200,50,190,70,10,12,1,7,86,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6814,500,19972,50,4690,1
+3227,V_FLAMEL,V Flamel,Flamel Emule,176,2312000,1,80000,40000,1,3333,5000,130,100,140,80,70,150,200,50,10,12,1,7,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6815,500,19967,50,4691,1
+3228,V_CELIA,V Celia,Celia Alde,178,2295000,1,90000,45000,1,2000,5000,110,800,140,100,60,150,120,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6817,500,19970,50,4692,1
+3229,V_CHEN,V Chen,Chen Liu,178,2261000,1,70000,35000,1,5333,3000,180,100,150,80,90,130,200,60,10,12,1,6,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6819,500,19969,50,4693,1
+3230,V_GERTIE,V Gertie,Gertie Wie,178,2040000,1,80000,40000,1,4667,2500,160,100,180,130,60,50,210,50,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6816,500,19965,50,4694,1
+3231,V_ALPHOCCIO,V Alphoccio,Alphoccio Basil,176,2040000,1,60000,30000,1,2667,6000,120,100,120,150,70,200,150,90,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19966,50,4696,1
+3232,V_TRENTINI,V Trentini,Trentini,176,2040000,1,60000,30000,2,2667,6000,100,100,110,150,70,200,150,80,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19971,50,4695,1
 3233,V_G_RANDEL,V G Randel,Paladin Randel,188,3000000,1,0,0,1,12000,4000,600,400,400,160,400,100,380,140,10,12,1,7,86,0x6203695,100,76,864,288,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
 3234,V_G_FLAMEL,V G Flamel,Creator Flamel,186,2400000,1,0,0,1,5000,10000,260,200,280,160,140,300,400,100,10,12,1,7,83,0x6203695,100,76,864,288,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
 3235,V_G_CELIA,V G Celia,Sorcerer Celia,188,4050000,1,0,0,1,3000,10000,220,800,280,200,120,300,240,100,10,12,1,7,88,0x6203695,100,576,384,288,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
@@ -3711,8 +3711,137 @@
 //20567,CHUNG_E_TW
 //20568,GULLINBURSTI_TW
 //20569,MISSING_OCTOPIG
-
+//20570,SAECOM
 //20571,ORK_HERO2
+//20572,MD_C_HEMEL
+//20573,MD_C_AMDARAIS
+//20574,MD_C_WHITEKNIGHT
+//20575,MD_C_CORRUPTION_ROOT
+//20576,MD_C_KHALITZBURG
+//20577,MD_C_RAYDRIC
+//20578,MD_C_RAYDRIC_ARCHER
+//20579,MD_C_ZOMBIE
+//20580,MD_C_GHOUL
+//20581,MD_C_THORN
+//20582,MD_MANHOLE4
+//20583,MD_C_WHITEKNIGHT_G
+//20584,MD_C_KHALITZBURG_G
+//20585,MD_C_RAY_ARCHER_G
+//20586,NYA_BRZ
+//20587,WITCH_BRZ
+//20588,ELDER_BRZ
+//20589,SWING_TALE
+//20590,RU_E_ECLIPS
+//20591,PAPARE
+//20592,POISONOUS
+//20593,TOXIOUS
+//20594,MINERAL_G
+//20595,MINERAL_R
+//20596,MINERAL_W
+//20597,MINERAL_P
+//20598,JEWELIANT
+//20599,G_JEWELIANT
+//20600,JEWEL
+//20601,JUNGOLIANT
+//20602,PORCELLIO_W
+//20603,ABYSSMAN
+//20604,ANGELGOLT
+//20605,ANGELGOLT2
+//20606,HOLY_FRUS
+//20607,HOLY_SKOGUL
+//20608,PLASMA_ARCH
+//20609,PLASMA_SPT
+//20610,REGINLEIF
+//20611,INGRID
+//20612,FERUS_P
+//20613,TREASURE_MIMIC
+//20614,ACIDUS_B
+//20615,ACIDUS_S
+//20616,BONE_FERUS
+//20617,BONE_ACIDUS
+//20618,BONE_DETALE
+//20619,GLOOMUNDERNIGHT2
+//20620,MD_REDPEPPER
+//20621,MD_REDPEPPER_H
+//20622,MD_ASSISTANT
+//20623,MD_ASSISTANT_H
+//20624,MD_DRY_RAFFLESIA
+//20625,MD_DRY_RAFFLESIA_H
+//20626,MD_ALNOLDI_EX
+//20627,MD_ALNOLDI_EX_H
+//20628,EP17_2_ALPHA_MASTER
+//20629,EP17_2_BETA_BASIC
+//20630,EP17_2_BETA_BASIC_NG
+//20631,MD_BETA_SCISSORE_NG
+//20632,MD_BETA_SCISSORE_NG_H
+//20633,EP17_2_BETA_CLEANER_A
+//20634,EP17_2_BETA_CLEANER_B
+//20635,EP17_2_BETA_BATHS_A
+//20636,EP17_2_BETA_BATHS_B
+//20637,EP17_2_BETA_ITEMKEEPER
+//20638,EP17_2_BETA_GUARDS
+//20639,EP17_2_BETA_GUARDS_NG
+//20640,EP17_2_OMEGA_CLEANER
+//20641,EP17_2_OMEGA_CLEANER_NG
+//20642,MD_SWEETY
+//20643,EP17_2_PHEN
+//20644,EP17_2_MARC
+//20645,EP17_2_SWORD_FISH
+//20646,EP17_2_PIRANHA
+//20647,EP17_2_BATH_MERMAID
+//20648,EP17_2_PITAYA_BOSS
+//20649,EP17_2_PITAYA_R
+//20650,EP17_2_PITAYA_Y
+//20651,EP17_2_PITAYA_B
+//20652,EP17_2_PITAYA_V
+//20653,EP17_2_PITAYA_G
+//20654,G_PITAYA_R
+//20655,G_PITAYA_Y
+//20656,G_PITAYA_B
+//20657,G_PITAYA_V
+//20658,G_PITAYA_G
+//20659,MD_PITAYA_BOSS
+//20660,MD_PITAYA_R
+//20661,MD_PITAYA_Y
+//20662,MD_PITAYA_B
+//20663,MD_PITAYA_V
+//20664,MD_PITAYA_G
+//20665,MD_VERPORTA
+//20666,MD_VERPORTE_H
+//20667,MD_SILVA_PAPILIA
+//20668,MD_GRAN_PAPILIA
+//20669,MD_PAPILA
+//20670,MD_PAPILA_H
+//20671,MD_PAPILA_RUBA
+//20672,MD_PAPILA_RUBA_H
+//20673,MD_PAPILA_RUBA2
+//20674,MD_PAPILA_CAE
+//20675,MD_PAPILA_CAE_H
+//20676,MD_PAPILA_CAE2
+//20677,MD_ARIES
+//20678,MD_ARIES_H
+//20679,EP17_2_GUARDIAN_PARTS
+//20680,EP17_2_HEART_HUNTER
+//20681,G_EP17_2_HEART_HUNTER
+//20682,EP17_2_HEART_HUNTER_H
+//20683,EP17_2_BOOKWORM
+//20684,EP17_2_ROAMING_SPLBOOK
+//20685,EP17_2_VENENUM3
+//20686,EP17_2_CRAMP
+//20687,EP17_2_WATERFALL
+//20688,EP17_2_BELLARE3
+//20689,EP17_2_DOLOR3
+//20690,EP17_2_PLASMA_Y
+//20691,EP17_2_PLAGA3
+//20692,EP17_2_SANARE3
+//20693,EP17_2_PLASMA_R
+//20694,EP17_2_PLASMA_R2
+//20695,E_GARLING
+//20696,EP17_2_CHILD_ADMIN1
+//20697,EP17_2_CHILD_ADMIN2
+//20698,G_ASSISTANT
+//20699,G_BELLARE3
+//20700,G_BETA_SCISSORE_NG
 
 //31999,HUNTING_GID_DEFAULT
 //32000,MONSTER_2ND_END

+ 12 - 0
db/re/mob_race2_db.txt

@@ -39,3 +39,15 @@ RC2_BIO5_SWORDMAN_THIEF,1640,2228,3213,3219,3226,3233,1641,2232,3208,3214,3230,3
 RC2_BIO5_ACOLYTE_MERCHANT,1643,2231,3209,3215,3229,3236,1642,2229,3212,3218,3227,3234				// Acolyte, Merchant monsters
 RC2_BIO5_MAGE_ARCHER,1645,2230,3210,3216,3228,3235,3211,1644,2233,2234,3217,3231,3232,3238,3239		// Mage, Archer monsters
 RC2_BIO5_MVP,3220,3221,3222,3223,3224,3225,3240,3241,3242,3243,3244,3245,3246						// MvPs
+// THANATOS
+RC2_THANATOS,1704,1705,1706,1707,1708,1709,1710,1711,1712
+// Faceworm
+RC2_FACEWORM,2528,2529,2530,2532,2533,2534,2535,2540,2541
+// Clock Tower (Need to confirm: Owl duke, Owl baron, Nightmare Mimic, Nightmare Rideword)
+RC2_CLOCKTOWER,1193,1199,1269,1270,1295,2870,2871,2910,2916,2917,2918,2919,2920,2921,2922,2923,3074
+// Rock Ridge
+RC2_ROCKRIDGE,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749
+// Heart Hunter
+//RC2_HEARTHUNTER,3626,3627,3628,3629
+// Werner Laboratory
+//RC2_WERNER_LAB,3621,3622,3631,3632,3633 // miss ID 3826 - YSF Seyren monster

+ 45 - 45
db/re/mob_skill_db.txt

@@ -8970,51 +8970,51 @@
 //2542,Irene Elder@NPC_MILLENNIUMSHIELD,chase,707,1,5000,1000,30000,no,self,always,0,,,,,,,
 
 //Geffen Magic Tournament
-2549,[PH] 게펜마법사1@MG_FIREBOLT,attack,19,5,3000,1000,3000,yes,target,always,0,,,,,,,
-2549,[PH] 게펜마법사1@MG_FIREWALL,attack,18,1,3000,2000,3000,yes,target,always,0,,,,,,,
-2550,[PH] 게펜마법사2@MG_FROSTDIVER,attack,15,5,3000,1000,3000,yes,target,always,0,,,,,,,
-2550,[PH] 게펜마법사2@MG_THUNDERSTORM,attack,21,3,3000,2000,3000,yes,target,always,0,,,,,,,
-2551,[PH] 게펜마법사3 1@NPC_COMBOATTACK,attack,171,2,5000,0,3000,yes,target,always,0,,,,,,,
-2551,[PH] 게펜마법사3 1@MG_STONECURSE,attack,16,5,5000,1000,5000,yes,target,always,0,,,,,,,
-2551,[PH] 게펜마법사3 1@TF_POISON,attack,52,3,3000,0,5000,yes,target,always,0,,,,,,,
-2552,[PH] 게펜마법사3 2@BS_HAMMERFALL,attack,110,5,5000,1000,10000,yes,target,always,0,,,,,,,
-2552,[PH] 게펜마법사3 2@NPC_POWERUP,attack,349,5,5000,1000,25000,yes,self,always,0,,,,,,,
-2553,[PH] 게펜마법사3 3@ASC_BREAKER,attack,379,1,3000,1000,5000,yes,target,always,0,,,,,,,
-2553,[PH] 게펜마법사3 3@AS_VENOMDUST,attack,140,10,3000,1000,5000,yes,target,always,0,,,,,,,
-2554,[PH] 게펜마법사4@AL_INCAGI,idle,29,10,10000,1000,10000,yes,self,always,0,,,,,,,
-2554,[PH] 게펜마법사4@AL_INCAGI,attack,29,10,3000,1000,10000,yes,self,always,0,,,,,,,
-2554,[PH] 게펜마법사4@AL_DECAGI,attack,30,48,3000,1000,10000,yes,target,always,0,,,,,,,
-2554,[PH] 게펜마법사4@NPC_COMBOATTACK,attack,171,3,5000,0,3000,yes,target,always,0,,,,,,,
-2555,[PH] 게펜마법사5@MG_COLDBOLT,attack,14,5,3000,1000,5000,yes,target,always,0,,,,,,,
-2555,[PH] 게펜마법사5@WZ_STORMGUST,attack,89,1,3000,3000,10000,yes,target,always,0,,,,,,,
-2555,[PH] 게펜마법사5@WZ_FROSTNOVA,attack,88,5,3000,1000,5000,yes,self,always,0,,,,,,,
-2556,[PH] 게펜마법사6@CR_AUTOGUARD,attack,249,5,3000,500,5000,yes,self,always,0,,,,,,,
-2556,[PH] 게펜마법사6@CR_GRANDCROSS,attack,254,5,3000,1000,10000,yes,self,always,0,,,,,,,
-2557,[PH] 게펜마법사7@NPC_BLEEDING,attack,660,5,5000,0,10000,yes,target,always,0,,,,,,,
-2557,[PH] 게펜마법사7@NPC_WIDESOULDRAIN,attack,680,3,3000,500,10000,no,self,always,0,,,,,,,
-2557,[PH] 게펜마법사7@NPC_COMBOATTACK,attack,171,10,3000,1000,10000,yes,target,always,0,,,,,,,
-2557,[PH] 게펜마법사7@NPC_INVISIBLE,attack,353,1,2000,1000,60000,yes,self,always,0,,,,,,,
-2558,[PH] 게펜마법사8@LK_SPIRALPIERCE,attack,397,5,3000,1000,10000,yes,target,always,0,,,,,,,
-2558,[PH] 게펜마법사8@SM_ENDURE,attack,8,10,3000,0,10000,yes,self,always,0,,,,,,,
-2558,[PH] 게펜마법사8@SM_MAGNUM,attack,7,25,3000,500,5000,yes,self,always,0,,,,,,,
-//2558,[PH] 게펜마법사8@NPC_MILLENNIUMSHIELD,attack,707,1,3000,1000,10000,yes,self,always,0,,,,,,,
-2559,[PH] 게펜마법사9@NPC_HOLYATTACK,attack,189,10,3000,500,5000,yes,target,always,0,,,,,,,
-2559,[PH] 게펜마법사9@AL_HEAL,attack,28,8,3000,0,5000,yes,self,always,0,,,,,,,
-2559,[PH] 게펜마법사9@AL_PNEUMA,attack,25,1,3000,1000,10000,yes,self,always,0,,,,,,,
-2560,[PH] 게펜마법사10@NPC_MENTALBREAKER,attack,159,4,2000,1500,10000,no,target,always,0,,,,,,,
-2560,[PH] 게펜마법사10@AC_DOUBLE,attack,46,5,3000,500,5000,yes,target,always,0,,,,,,,
-2560,[PH] 게펜마법사10@HT_ANKLESNARE,attack,117,1,2000,1000,10000,yes,around2,always,0,,,,,,,
-2560,[PH] 게펜마법사10@HT_FLASHER,attack,120,1,2000,1000,10000,yes,around2,always,0,,,,,,,
-2561,[PH] 게펜마법사11@MG_FIREBOLT,attack,19,5,1000,500,15000,yes,target,always,0,,,,,,,
-2561,[PH] 게펜마법사11@MG_COLDBOLT,attack,14,5,1000,500,15000,yes,target,always,0,,,,,,,
-2561,[PH] 게펜마법사11@MG_LIGHTNINGBOLT,attack,20,5,1000,500,10000,yes,target,always,0,,,,,,,
-2561,[PH] 게펜마법사11@WZ_EARTHSPIKE,attack,90,5,1000,500,15000,yes,target,always,0,,,,,,,
-2561,[PH] 게펜마법사11@PF_SPIDERWEB,attack,405,1,1000,1000,15000,yes,target,always,0,,,,,,,
-2561,[PH] 게펜마법사11@RG_STRIPSHIELD,attack,216,5,3000,1000,30000,yes,target,always,0,,,,,,,
-2562,[PH] 게펜마법사12@NPC_SLOWCAST,attack,672,5,1000,1000,15000,yes,self,always,0,,,,,,,
-2562,[PH] 게펜마법사12@MG_SOULSTRIKE,attack,13,10,1000,500,10000,yes,target,always,0,,,,,,,
-2562,[PH] 게펜마법사12@WZ_FIREPILLAR,attack,80,5,3000,500,5000,yes,around2,always,0,,,,,,,
-2562,[PH] 게펜마법사12@WZ_VERMILION,attack,85,5,1000,2000,15000,yes,target,always,0,,,,,,,
+2549,Arhi@MG_FIREBOLT,attack,19,5,3000,1000,3000,yes,target,always,0,,,,,,,
+2549,Arhi@MG_FIREWALL,attack,18,1,3000,2000,3000,yes,target,always,0,,,,,,,
+2550,Dio Anemos@MG_FROSTDIVER,attack,15,5,3000,1000,3000,yes,target,always,0,,,,,,,
+2550,Dio Anemos@MG_THUNDERSTORM,attack,21,3,3000,2000,3000,yes,target,always,0,,,,,,,
+2551,Geffen Shoplifter@NPC_COMBOATTACK,attack,171,2,5000,0,3000,yes,target,always,0,,,,,,,
+2551,Geffen Shoplifter@MG_STONECURSE,attack,16,5,5000,1000,5000,yes,target,always,0,,,,,,,
+2551,Geffen Shoplifter@TF_POISON,attack,52,3,3000,0,5000,yes,target,always,0,,,,,,,
+2552,Geffen Bully@BS_HAMMERFALL,attack,110,5,5000,1000,10000,yes,target,always,0,,,,,,,
+2552,Geffen Bully@NPC_POWERUP,attack,349,5,5000,1000,25000,yes,self,always,0,,,,,,,
+2553,Geffen Gang Member@ASC_BREAKER,attack,379,1,3000,1000,5000,yes,target,always,0,,,,,,,
+2553,Geffen Gang Member@AS_VENOMDUST,attack,140,10,3000,1000,5000,yes,target,always,0,,,,,,,
+2554,Faymont@AL_INCAGI,idle,29,10,10000,1000,10000,yes,self,always,0,,,,,,,
+2554,Faymont@AL_INCAGI,attack,29,10,3000,1000,10000,yes,self,always,0,,,,,,,
+2554,Faymont@AL_DECAGI,attack,30,48,3000,1000,10000,yes,target,always,0,,,,,,,
+2554,Faymont@NPC_COMBOATTACK,attack,171,3,5000,0,3000,yes,target,always,0,,,,,,,
+2555,Ordre@MG_COLDBOLT,attack,14,5,3000,1000,5000,yes,target,always,0,,,,,,,
+2555,Ordre@WZ_STORMGUST,attack,89,1,3000,3000,10000,yes,target,always,0,,,,,,,
+2555,Ordre@WZ_FROSTNOVA,attack,88,5,3000,1000,5000,yes,self,always,0,,,,,,,
+2556,Blut Hase@CR_AUTOGUARD,attack,249,5,3000,500,5000,yes,self,always,0,,,,,,,
+2556,Blut Hase@CR_GRANDCROSS,attack,254,5,3000,1000,10000,yes,self,always,0,,,,,,,
+2557,Kuro Akuma@NPC_BLEEDING,attack,660,5,5000,0,10000,yes,target,always,0,,,,,,,
+2557,Kuro Akuma@NPC_WIDESOULDRAIN,attack,680,3,3000,500,10000,no,self,always,0,,,,,,,
+2557,Kuro Akuma@NPC_COMBOATTACK,attack,171,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2557,Kuro Akuma@NPC_INVISIBLE,attack,353,1,2000,1000,60000,yes,self,always,0,,,,,,,
+2558,Ifodes@LK_SPIRALPIERCE,attack,397,5,3000,1000,10000,yes,target,always,0,,,,,,,
+2558,Ifodes@SM_ENDURE,attack,8,10,3000,0,10000,yes,self,always,0,,,,,,,
+2558,Ifodes@SM_MAGNUM,attack,7,25,3000,500,5000,yes,self,always,0,,,,,,,
+//2558,Ifodes@NPC_MILLENNIUMSHIELD,attack,707,1,3000,1000,10000,yes,self,always,0,,,,,,,
+2559,Licheniyes@NPC_HOLYATTACK,attack,189,10,3000,500,5000,yes,target,always,0,,,,,,,
+2559,Licheniyes@AL_HEAL,attack,28,8,3000,0,5000,yes,self,always,0,,,,,,,
+2559,Licheniyes@AL_PNEUMA,attack,25,1,3000,1000,10000,yes,self,always,0,,,,,,,
+2560,Odoric@NPC_MENTALBREAKER,attack,159,4,2000,1500,10000,no,target,always,0,,,,,,,
+2560,Odoric@AC_DOUBLE,attack,46,5,3000,500,5000,yes,target,always,0,,,,,,,
+2560,Odoric@HT_ANKLESNARE,attack,117,1,2000,1000,10000,yes,around2,always,0,,,,,,,
+2560,Odoric@HT_FLASHER,attack,120,1,2000,1000,10000,yes,around2,always,0,,,,,,,
+2561,Ju@MG_FIREBOLT,attack,19,5,1000,500,15000,yes,target,always,0,,,,,,,
+2561,Ju@MG_COLDBOLT,attack,14,5,1000,500,15000,yes,target,always,0,,,,,,,
+2561,Ju@MG_LIGHTNINGBOLT,attack,20,5,1000,500,10000,yes,target,always,0,,,,,,,
+2561,Ju@WZ_EARTHSPIKE,attack,90,5,1000,500,15000,yes,target,always,0,,,,,,,
+2561,Ju@PF_SPIDERWEB,attack,405,1,1000,1000,15000,yes,target,always,0,,,,,,,
+2561,Ju@RG_STRIPSHIELD,attack,216,5,3000,1000,30000,yes,target,always,0,,,,,,,
+2562,Dwigh@NPC_SLOWCAST,attack,672,5,1000,1000,15000,yes,self,always,0,,,,,,,
+2562,Dwigh@MG_SOULSTRIKE,attack,13,10,1000,500,10000,yes,target,always,0,,,,,,,
+2562,Dwigh@WZ_FIREPILLAR,attack,80,5,3000,500,5000,yes,around2,always,0,,,,,,,
+2562,Dwigh@WZ_VERMILION,attack,85,5,1000,2000,15000,yes,target,always,0,,,,,,,
 2563,Fei Kanabian@AM_DEMONSTRATION,attack,229,5,2000,500,15000,yes,target,always,0,,,,,,,
 2563,Fei Kanabian@AM_ACIDTERROR,attack,230,5,2000,1000,15000,yes,target,always,0,,,,,,,
 2563,Fei Kanabian@AM_POTIONPITCHER,attack,231,4,3000,1000,10000,yes,self,always,0,,,,,,,

Diferenças do arquivo suprimidas por serem muito extensas
+ 333 - 136
db/re/pet_db.yml


+ 13 - 13
db/re/skill_cast_db.txt

@@ -21,7 +21,7 @@
 //-- SM_PROVOKE
 6,0,0,0,30000,0,0,0
 //-- SM_MAGNUM
-7,0,2000,0,2000,10000,0,0
+7,0,2000,0,0,10000,2000,0
 //-- SM_ENDURE
 8,0,0,0,10000:13000:16000:19000:22000:25000:28000:31000:34000:37000,10000,10000,0
 //==========================================
@@ -879,15 +879,15 @@
 
 //===== Ninja ==============================
 //-- NJ_KUNAI
-524,0,1000,0,0,0,0,0
+524,0,0,0,0,0,200,0
 //-- NJ_HUUMA
-525,2400,2000,0,100,0,0,600
+525,1000,500,0,100,0,0,500
 //-- NJ_ZENYNAGE
 526,0,5000,0,0,0,0,0
 //-- NJ_TATAMIGAESHI
 527,0,3000,0,3000,3000,0,0
 //-- NJ_KASUMIKIRI
-528,0,1000,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0,0
+528,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,500,0
 //-- NJ_SHADOWJUMP
 529,0,1000,0,0,0,0,0
 //-- NJ_UTSUSEMI
@@ -899,19 +899,19 @@
 //-- NJ_KAENSIN
 535,4800:4400:4000:3600:3200:2800:2400:2000:1600:1200,1000,0,20000,0,0,1200:1100:1000:900:800:700:600:500:400:300
 //-- NJ_BAKUENRYU
-536,2400,2000,0,100,0,0,600
+536,2000,500,0,100,0,300,800
 //-- NJ_HYOUSENSOU
 537,560:1120:1680:2240:2800:3360:3840:4480:5040:5600,0,0,0,0,0,140:280:420:560:700:840:960:1120:1260:1400
 //-- NJ_SUITON
 538,2400,2000,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,600
 //-- NJ_HYOUSYOURAKU
-539,1600:2000:2400:2800:3200,2000,0,100,7500:12500:17500:22500:27500,0,400:500:600:700:800
+539,1700:1900:2100:2300:2500,500,0,100,7500:12500:17500:22500:27500,300,800
 //-- NJ_HUUJIN
 540,800:1200:1600:2000:2400:2800:3200:3600:4000:4400,1000,0,0,0,0,200:300:400:500:600:700:800:900:1000:1100
 //-- NJ_RAIGEKISAI
-541,3200,0,0,100,0,0,800
+541,1700,0,0,100,0,0,300
 //-- NJ_KAMAITACHI
-542,3200,0,0,0,0,0,800
+542,1200,0,0,0,0,0,300
 //-- NJ_NEN
 543,4000:3200:2400:1600:800,0,0,30000:45000:60000:75000:90000,0,0,1000:800:600:400:200
 //==========================================
@@ -1448,7 +1448,7 @@
 //-- SR_SKYNETBLOW
 2327,0,500,0,0,0,0,-1
 //-- SR_EARTHSHAKER
-2328,0,0,0,1000:2000:2000:3000:3000,0,3000,-1
+2328,0,0,0,1000:2000:2000:3000:3000,5000,3000,-1
 //-- SR_FALLENEMPIRE
 2329,0,0,0,500:1000:1500:2000:2500,0,0,-1
 //-- SR_TIGERCANNON
@@ -1478,11 +1478,11 @@
 //-- SR_GENTLETOUCH_CURE
 2345,0,1000,0,0,0,1000:1500:2000:2500:3000,-1
 //-- SR_GENTLETOUCH_ENERGYGAIN
-2346,1000,1000,0,240000,600000,0,1000:1500:2000:2500:3000
+2346,1000,1000,0,240000,600000,1000,1000:1500:2000:2500:3000
 //-- SR_GENTLETOUCH_CHANGE
-2347,1000,1000,0,240000,0,200000:180000:160000:140000:120000,1000
+2347,1000,1000,0,240000,0,1000,1000
 //-- SR_GENTLETOUCH_REVITALIZE
-2348,1000,1000,0,240000,0,200000:180000:160000:140000:120000,1000
+2348,1000,1000,0,240000,0,1000,1000
 //-- SR_FLASHCOMBO
 5009,0,1000,0,3000,0,12000:10000:8000:6000:4000,-1
 //==========================================
@@ -1824,7 +1824,7 @@
 //-- SU_GROOMING
 5049,1000,1000,0,3000:4000:5000:6000:7000,0,60000:50000:40000:30000:20000,0
 //-- SU_PURRING
-5050,1000,1000,0,3000:4000:5000:6000:7000,0,65000:60000:55000:50000:45000,-1
+5050,1000,1000,0,7000:9000:11000:13000:15000,0,65000:60000:55000:50000:45000,-1
 //-- SU_SHRIMPARTY
 5051,3500:3000:2500:2000:1500,1000,0,12000:14000:16000:18000:20000,0,65000:60000:55000:50000:45000,-1
 //-- SU_MEOWMEOW

+ 26 - 25
db/re/skill_db.txt

@@ -16,6 +16,7 @@
 //    0x20 - Skill ignores target's defense (misc type always ignores)
 //    0x40 - Skill ignores target's flee (magic type always ignores)
 //    0x80 - Skill ignores target's def cards
+//    0x100 - Skill can critical
 // 07 splash/effect range
 //      -1 - for screen-wide
 //       0 - no splash
@@ -143,7 +144,7 @@
 
 //****
 // Thief
-48,-1,8,0,-1,0,0,10,2,no,0,0,0,weapon,0,0x0,		TF_DOUBLE,Double Attack
+48,-1,8,0,-1,0x100,0,10,2,no,0,0,0,weapon,0,0x0,		TF_DOUBLE,Double Attack
 49,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0,		TF_MISS,Improve Dodge
 50,1,6,1,0,1,0,10,1,no,0,0,0,weapon,0,0x0,		TF_STEAL,Steal
 51,1,6,4,0,1,0,10,1,no,0,0,0,none,0,0x80044,		TF_HIDING,Hiding
@@ -160,7 +161,7 @@
 58,-4,6,1,-1,0x2,0,10,1,no,0,0x40000,0,weapon,6,0x0,	KN_SPEARSTAB,Spear Stab
 59,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	KN_SPEARBOOMERANG,Spear Boomerang
 60,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0,		KN_TWOHANDQUICKEN,Twohand Quicken
-61,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	KN_AUTOCOUNTER,Counter Attack
+61,0,6,4,-1,0x100,0,5,1,no,0,0,0,weapon,0,0x0,	KN_AUTOCOUNTER,Counter Attack
 62,-2,6,1,-1,0x2,1,10,1,no,0,0x40000,0,weapon,1,0x0,	KN_BOWLINGBASH,Bowling Bash
 63,0,0,0,0,0,0,1,0,no,0,0,0,weapon,0,0x0,		KN_RIDING,Peco Peco Riding
 64,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0,		KN_CAVALIERMASTERY,Cavalier Mastery
@@ -558,7 +559,7 @@
 // Sniper
 380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0,	SN_SIGHT,Falcon Eyes
 381,9,8,1,0,0xC0,0,5,1,yes,0,0,0,misc,0,0x0,		SN_FALCONASSAULT,Falcon Assault
-382,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	SN_SHARPSHOOTING,Focused Arrow Strike
+382,9,8,1,-1,0x100,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	SN_SHARPSHOOTING,Focused Arrow Strike
 383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0,	SN_WINDWALK,Wind Walker
 
 //****
@@ -741,7 +742,7 @@
 508,-9,6,1,-1,0x1,0,1,1,no,0,0,0,weapon,0,0x0,	GS_CRACKER,Cracker
 509,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SINGLEACTION,Single Action
 510,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SNAKEEYE,Snake Eye
-511,-9,8,0,-1,0,0,10,2,no,0,0,0,weapon,0,0x0,	GS_CHAINACTION,Chain Action
+511,-9,8,0,-1,0x100,0,10,2,no,0,0,0,weapon,0,0x0,	GS_CHAINACTION,Chain Action
 512,-9,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x0,	GS_TRACKING,Tracking
 513,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,		GS_DISARM,Disarm
 514,-9,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,0,0x100,	GS_PIERCINGSHOT,Piercing Shot
@@ -758,12 +759,12 @@
 522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0,0x0,		NJ_TOBIDOUGU,Shuriken Training
 523,9,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0,0x0,	NJ_SYURIKEN,Throw Shuriken
 524,9,8,1,-1,0x40,0,5,3,no,0,0,0,weapon,0,0x0,	NJ_KUNAI,Throw Kunai
-525,9,8,2,-1,0x2,0,5,-3:-3:-4:-4:-5,no,0,0x40000,0,weapon,0,0x0,	NJ_HUUMA,Throw Huuma Shuriken
+525,9,8,1,-1,0x2,1:1:1:2:2,5,-3:-3:-4:-4:-5,no,0,0x40000,0,weapon,0,0x0,	NJ_HUUMA,Throw Huuma Shuriken
 526,9,6,1,0,0x50,0,10,1,no,0,0x18000,0,misc,0,0x0,		NJ_ZENYNAGE,Throw Zeny
 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,4,0x0,		NJ_TATAMIGAESHI,Improvised Defense
-528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0,	NJ_KASUMIKIRI,Vanishing Slash
+528,-1,6,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0,	NJ_KASUMIKIRI,Vanishing Slash
 529,7:9:11:13:15,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x4,	NJ_SHADOWJUMP,Shadow Leap
-530,7:9:11:13:15,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x204,	NJ_KIRIKAGE,Shadow Slash
+530,7:9:11:13:15,6,1,-1,0x100,0,5,-3,no,0,0,0,weapon,0,0x204,	NJ_KIRIKAGE,Shadow Slash
 531,0,6,4,0,0x1,0,5,1,no,0,0,0,none,7,0x0,		NJ_UTSUSEMI,Cicada Skin Sheeding
 532,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0,	NJ_BUNSINJYUTSU,Mirror Image
 533,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		NJ_NINPOU,Spirit of the Blade
@@ -774,8 +775,8 @@
 538,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x1000,	NJ_SUITON,Hidden Water
 539,0,6,4,1,0,0,5,1,yes,0,0,0,magic,0,0x0,		NJ_HYOUSYOURAKU,Ice Meteor
 540,9,8,1,4,0,0,10,1:2:2:3:3:4:4:5:5:6,yes,0,0,0,magic,0,0x0,	NJ_HUUJIN,Wind Blade
-541,9,6,2,4,0,0,5,1,yes,0,0,0,magic,0,0x0,	NJ_RAIGEKISAI,Lightning Strike of Destruction
-542,5:6:7:8:9,8,1,4,0,1,5,1,yes,0,0x40000,5:6:7:8:9,magic,0,0x0,	NJ_KAMAITACHI,Kamaitachi
+541,9,6,2,4,0,0,5,-3,yes,0,0,0,magic,0,0x0,	NJ_RAIGEKISAI,Lightning Strike of Destruction
+542,5:6:7:8:9,8,1,4,0,1,5,-5,yes,0,0x40000,5:6:7:8:9,magic,0,0x0,	NJ_KAMAITACHI,Kamaitachi
 543,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,		NJ_NEN,Soul
 544,-5,8,1,0,0x40,0,10,1,no,0,0,0,misc,0,0x0,	NJ_ISSEN,Final Strike
 
@@ -1032,7 +1033,7 @@
 //****
 // RA Ranger
 2233,9,8,1,-1,0x2,3:3:3:3:3:4:4:4:4:5,10,-3,yes,0,0,0,weapon,0,0x80,		RA_ARROWSTORM,Arrow Storm
-2234,0,6,4,0,0,0,5,1,yes,0,0,0,none,0,0x0,		RA_FEARBREEZE,Fear Breeze
+2234,0,6,4,0,0x100,0,5,1,yes,0,0,0,none,0,0x0,		RA_FEARBREEZE,Fear Breeze
 2235,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		RA_RANGERMAIN,Ranger Main
 2236,9,8,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x80,	RA_AIMEDBOLT,Aimed Bolt
 2237,9,6,2,0,0x3,3,1,1,no,0,0x40000,0,none,0,0x2000,		RA_DETONATOR,Detonator
@@ -1137,28 +1138,28 @@
 //****
 // SR Sura
 2326,1,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0,	SR_DRAGONCOMBO,Dragon Combo
-2327,0,8,4,-1,0x2,2,5,-3,no,0,0x40000,0,weapon,3,0x0,	SR_SKYNETBLOW,Sky Net Blow
-2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_EARTHSHAKER,Earth Shaker
+2327,1,8,4,-1,0x2,2,5,-3,no,0,0x40000,0,weapon,0,0x0,	SR_SKYNETBLOW,Sky Net Blow
+2328,1,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_EARTHSHAKER,Earth Shaker
 2329,1,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0,	SR_FALLENEMPIRE,Fallen Empire
 2330,1,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0x40000,0,weapon,0,0x0,	SR_TIGERCANNON,Tiger Cannon
 2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		SR_HELLGATE,Hell Gate
-2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_RAMPAGEBLASTER,Rampage Blaster
-2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_CRESCENTELBOW,Crescent Elbow
-2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0,	SR_CURSEDCIRCLE,Cursed Circle
-2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_LIGHTNINGWALK,Lightning Walk
-2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0,	SR_KNUCKLEARROW,Knuckle Arrow
-2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000,	SR_WINDMILL,Windmill
-2338,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	SR_RAISINGDRAGON,Raising Dragon
+2332,1,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0,	SR_RAMPAGEBLASTER,Rampage Blaster
+2333,1,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_CRESCENTELBOW,Crescent Elbow
+2334,1,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0,	SR_CURSEDCIRCLE,Cursed Circle
+2335,1,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		SR_LIGHTNINGWALK,Lightning Walk
+2336,8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0,	SR_KNUCKLEARROW,Knuckle Arrow
+2337,1,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000,	SR_WINDMILL,Windmill
+2338,1,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	SR_RAISINGDRAGON,Raising Dragon
 2339,0,0,0,0,0,0,5,1,no,0,0,0,none,0,0x0,		SR_GENTLETOUCH,Gentle Touch
-2340,0,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0,	SR_ASSIMILATEPOWER,Assimilate Power
+2340,1,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0,	SR_ASSIMILATEPOWER,Assimilate Power
 2341,3,6,16,0,0x1,0,1,1,yes,0,0x200,0,none,0,0x0,	SR_POWERVELOCITY,Power Velocity
 2342,1,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,7,0x0,	SR_CRESCENTELBOW_AUTOSPELL,Crescent Elbow Autospell
-2343,1:2:3:3:4:4:5:5:6:7,8,1,-1,0,0,10,-7,yes,0,0,0,weapon,0,0x0,	SR_GATEOFHELL,Gate of Hell
+2343,7,8,1,-1,0,0,10,-7,yes,0,0,0,weapon,0,0x0,	SR_GATEOFHELL,Gate of Hell
 2344,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	SR_GENTLETOUCH_QUIET,Gentle Touch - Quiet
 2345,2,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CURE,Gentle Touch - Cure
-2346,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
-2347,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CHANGE,Gentle Touch - Change
-2348,2,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_REVITALIZE,Gentle Touch - Revitalize
+2346,1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_ENERGYGAIN,Gentle Touch - Energy Gain
+2347,2,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_CHANGE,Gentle Touch - Change
+2348,2,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,	SR_GENTLETOUCH_REVITALIZE,Gentle Touch - Revitalize
 //More from Sura but not following ID order
 2517,0,6,4,-1,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0,	SR_HOWLINGOFLION,Howling of Lion
 2518,11,6,2,-1,0x2,1:1:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	SR_RIDEINLIGHTNING,Ride In Lightening
@@ -1523,7 +1524,7 @@
 8212,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800,	MA_FREEZINGTRAP,Freezing_Trap
 8213,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0,	MA_REMOVETRAP,Remove_Trap
 8214,-9,6,1,-1,0x2,0,1,1,no,0,0x1,0,weapon,6,0x80,	MA_CHARGEARROW,Arrow_Repel
-8215,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	MA_SHARPSHOOTING,Focused_Arrow_Strike
+8215,9,8,1,-1,0x100,1,5,1,yes,0,0x40000,14,weapon,0,0x0,	MA_SHARPSHOOTING,Focused_Arrow_Strike
 8216,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0,	ML_PIERCE,Pierce
 8217,-2,6,1,-1,0x1,2,10,1,no,0,0,5,weapon,2,0x20000,	ML_BRANDISH,Brandish_Spear
 8218,5,8,1,-1,0,0,5,5,no,0,0x40000,0,weapon,0,0x20000,	ML_SPIRALPIERCE,Spiral_Pierce

+ 14 - 14
db/re/skill_require_db.txt

@@ -507,14 +507,14 @@
 
 //****
 // NJ Ninja
-523,0,0,2,0,0,0,99,6,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_SYURIKEN
-524,0,0,30:25:20:15:10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NJ_KUNAI
-525,0,0,20:25:30:35:40,0,0,0,22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NJ_HUUMA
+523,0,0,5,0,0,0,99,6,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_SYURIKEN
+524,0,0,10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_KUNAI
+525,0,0,15:20:25:30:35,0,0,0,22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NJ_HUUMA
 526,0,0,50,0,0,500:1000:1500:2000:2500:3000:3500:4000:4500:5000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_ZENYNAGE
 527,0,0,15,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_TATAMIGAESHI
-528,0,0,15,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_KASUMIKIRI
+528,0,0,8,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NJ_KASUMIKIRI
 529,0,0,10,0,0,0,99,0,0,none,SC_HIDING,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NJ_SHADOWJUMP
-530,0,0,14:16:18:20:22,0,0,0,99,0,0,none,SC_HIDING,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//NJ_KIRIKAGE
+530,0,0,10:11:12:13:14,0,0,0,99,0,0,none,SC_HIDING,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//NJ_KIRIKAGE
 531,0,0,12:15:18:21:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NJ_UTSUSEMI
 532,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,99,0,0,none,0,0,7524,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_BUNSINJYUTSU
 534,0,0,18:20:22:24:26:28:30:32:34:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_KOUENKA
@@ -755,15 +755,15 @@
 //****
 // SR Sura
 2326,0,0,3:4:5:6:7:8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_DRAGONCOMBO
-2327,0,0,8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_SKYNETBLOW
-2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_EARTHSHAKER
-2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_FALLENEMPIRE
-2330,0,0,1:2:3:4:5:6:7:8:9:10,-12:-14:-16:-18:-20:-22:-24:-26:-28:-30,-6:-7:-8:-9:-10:-11:-12:-13:-14:-15,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_TIGERCANNON
+2327,0,0,12:14:16:18:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_SKYNETBLOW
+2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_EARTHSHAKER
+2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_FALLENEMPIRE
+2330,0,0,30:35:40:45:50:55:60:65:70:75,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_TIGERCANNON
 2331,0,0,1,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_HELLGATE
-2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAMPAGEBLASTER
+2332,0,0,100,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_RAMPAGEBLASTER
 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW
 2334,0,0,40:60:80:100:120,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_CURSEDCIRCLE
-2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
+2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_LIGHTNINGWALK
 2336,0,0,10:15:20:25:30,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_KNUCKLEARROW
 2337,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_WINDMILL
 2338,0,0,120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAISINGDRAGON
@@ -771,12 +771,12 @@
 2340,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_ASSIMILATEPOWER
 2341,0,0,50,0,0,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_POWERVELOCITY
 2342,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW_AUTOSPELL
-2343,0,0,30,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GATEOFHELL
+2343,0,0,100,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_GATEOFHELL
 2344,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_QUIET
 2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_CURE
 2346,0,0,40:50:60:70:80,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_ENERGYGAIN
-2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_CHANGE
-2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_GENTLETOUCH_REVITALIZE
+2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_GENTLETOUCH_CHANGE
+2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_GENTLETOUCH_REVITALIZE
 //More from SR Sura (but not following ID order)
 2517,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_HOWLINGOFLION
 2518,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0			//SR_RIDEINLIGHTNING

+ 39 - 39
db/re/skill_tree.txt

@@ -3362,27 +3362,27 @@
 4070,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4070,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4070,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4070,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4070,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4070,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4070,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4070,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4070,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4070,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4070,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4070,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4070,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4070,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4070,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4070,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4070,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4070,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4070,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4070,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4070,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4070,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4070,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4070,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4070,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4070,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4070,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4070,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4070,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4070,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4070,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4070,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4070,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4070,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4070,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4070,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4070,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4070,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 //Genetic (Regular)
 4071,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -3802,27 +3802,27 @@
 4077,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4077,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4077,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4077,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4077,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4077,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4077,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4077,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4077,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4077,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4077,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4077,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4077,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4077,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4077,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4077,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4077,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4077,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4077,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4077,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4077,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4077,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4077,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4077,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4077,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4077,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4077,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4077,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4077,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4077,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4077,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4077,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4077,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4077,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4077,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4077,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4077,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4077,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 //Genetic (Trans)
 4078,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -5026,27 +5026,27 @@
 4106,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
 4106,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
 4106,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Net Blow#
-4106,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4106,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
+4106,2328,5,2326,3,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
+4106,2329,5,2326,3,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
 4106,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
 4106,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4106,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4106,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
+4106,2333,5,2337,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
+4106,2334,5,269,2,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
 4106,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4106,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
+4106,2336,5,2335,1,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
 4106,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Windmill#
-4106,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
+4106,2338,10,2341,1,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON#Raising Dragon#
 4106,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Assimilate Power#
 4106,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Velocity#
-4106,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
-4106,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
-4106,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
-4106,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
-4106,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
-4106,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
+4106,2343,10,2332,1,2330,5,0,0,0,0,0,0 //SR_GATEOFHELL#Gate Of Hell#
+4106,2344,5,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
+4106,2345,5,2344,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
+4106,2346,5,2345,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
+4106,2347,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
+4106,2348,5,2346,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#
 4106,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Howling Of Lion#
 4106,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Ride In Lightening#
-4106,5009,5,2326,3,2329,3,2330,1,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
+4106,5009,5,2326,3,2329,3,2330,5,2327,1,0,0 //SR_FLASHCOMBO#Flash Combo#
 4106,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 4106,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Genetic

+ 0 - 1
db/re/skill_unit_db.txt

@@ -99,7 +99,6 @@
 488,0xb9,    ,  3, 0,  -1,all,   0x200	//CG_HERMODE
 516,0x86,    ,  3, 0, 100,enemy, 0x000	//GS_DESPERADO
 521,0xbe,    ,  0, 1,1000,enemy, 0x000	//GS_GROUNDDRIFT
-525,0x86,    ,  0, 2,1000,enemy, 0x018	//NJ_HUUMA
 527,0xbc,    , -1, 0,2000,enemy, 0x018	//NJ_TATAMIGAESHI
 535,0xbd,    , -1, 0, 100,enemy, 0x8010	//NJ_KAENSIN
 536,0x86,    ,  2, 0,1000,enemy, 0x010	//NJ_BAKUENRYU

+ 4 - 2
doc/item_bonus.txt

@@ -203,8 +203,8 @@ bonus2 bVariableCastrate,sk,n; 		Increases variable cast time of skill sk by n%
 
 bonus bFixedCast,t;            		Increases fixed cast time of all skills by t milliseconds (has effect in RENEWAL_CAST only)
 bonus2 bSkillFixedCast,sk,t;   		Increases fixed cast time of skill sk by t milliseconds (has effect in RENEWAL_CAST only)
-bonus bVariableCast,t;         		Increases variable cast time of all skills by t milliseconds (has effect in RENEWAL_CAST only)
-bonus2 bSkillVariableCast,sk,t;		Increases variable cast time of skill sk by t milliseconds (has effect in RENEWAL_CAST only)
+bonus bVariableCast,t;         		Increases variable cast time of all skills by t milliseconds
+bonus2 bSkillVariableCast,sk,t;		Increases variable cast time of skill sk by t milliseconds
 
 bonus bNoCastCancel; 			Prevents casting from being interrupted when hit (does not work in GvG)
 bonus bNoCastCancel2;			Prevents casting from being interrupted when hit (works even in GvG)
@@ -389,6 +389,8 @@ HP/SP gain
 bonus bHPGainValue,n;     		Heals +n HP when killing an enemy with a melee-physical attack
 bonus bSPGainValue,n;     		Heals +n SP when killing an enemy with a melee-physical attack
 bonus2 bSPGainRace,r,n;   		Heals +n SP when killing an enemy of race r with a melee-physical attack
+bonus bLongHPGainValue,n;     		Heals +n HP when killing an enemy with a range-physical attack
+bonus bLongSPGainValue,n;     		Heals +n SP when killing an enemy with a range-physical attack
 bonus bMagicHPGainValue,n;		Heals +n HP when killing an enemy with a magical attack
 bonus bMagicSPGainValue,n;		Heals +n SP when killing an enemy with a magical attack
 

+ 90 - 59
doc/script_commands.txt

@@ -2338,6 +2338,22 @@ returned when requesting that information.
 
 ---------------------------------------
 
+*convertpcinfo(<char_id>,<type>)
+*convertpcinfo(<account_id>,<type>)
+*convertpcinfo(<player_name>,<type>)
+
+This function will return the information <type> for the
+specified character. Whatever it returns is determined by type.
+
+ CPC_NAME    - Character's name.
+ CPC_CHAR    - Character ID.
+ CPC_ACCOUNT - Account ID.
+
+If a character is not found (or not online) when requesting that information,
+an empty string will be returned for CPC_NAME, 0 for other <type>.
+
+---------------------------------------
+
 *strnpcinfo(<type>)
 
 This function will return the various parts of the name of the calling NPC.
@@ -3610,7 +3626,7 @@ You can see the full list of available effect types you can possibly inflict in
 ========================
 |3.- Checking commands.|
 ========================
--------------------------
+---------------------------------------
 
 *playerattached()
 
@@ -3939,7 +3955,7 @@ The renewal feature to check is determined by type.
 \\
 ---------------------------------------
 
-*isequipped(<id>{,<id>{,<id>{,<id>}}})
+*isequipped(<id>{,<id>{,..}})
 
 This function will return 1 if the invoking character has all of the item
 IDs given equipped (if card IDs are passed, then it checks if the cards are
@@ -3957,15 +3973,14 @@ in February 2005, but it will work just fine in normal NPC scripts.
 
 ---------------------------------------
 
-*isequippedcnt(<card id>{,<card id>{,<card id>{,<card id>}}})
+*isequippedcnt(<id>{,<id>{,..}})
 
 This function is similar to 'isequipped', but instead of 1 or 0, it will return
-the number of cards in the list given that were found on the invoking character.
-
-If a given parameter is not a card, the function returns the amount of that
-item equipped on the invoking character.
+the amount of item/card equipped that were found on the invoking character from the given list.
 
-    if (isequippedcnt(4001,4005,4033,4196) == 4) mes "Finally got all four poring cards?";
+Example:
+    if (isequippedcnt(4001,4005,4033,4196) == 5)
+		mes "Finally got 5 cards from poring monsters type?";
 
 ---------------------------------------
 
@@ -3984,7 +3999,7 @@ not.
 ==============================
 |4.- Player-related commands.|
 ==============================
--------------------------
+---------------------------------------
 
 *attachrid(<account ID>{,force})
 *detachrid;
@@ -4002,7 +4017,7 @@ even if he is currently attached to another script. Since this is not always the
 desired behavior you can also specify false to the command and it will only return 
 true if the player is online and was not attached to another script.
 
--------------------------
+---------------------------------------
 
 *addrid(<type>{,<flag>{,<parameters>}});
 
@@ -7489,7 +7504,7 @@ rand(2,5) would result in 2,3,4 or 5
 
 ---------------------------------------
 
-*viewpoint <action>,<x>,<y>,<point number>,<color>;
+*viewpoint <action>,<x>,<y>,<point number>,<color>{,<Char ID>};
 
 This command will mark places on the mini map in the client connected to the
 invoking character. It uses the normal X and Y coordinates from the main map.
@@ -9057,6 +9072,33 @@ mes .@name$ + " will be destroyed if no one is in the instance for " + instance_
 
 ---------------------------------------
 
+*instance_live_info(<info type>{,<instance id>});
+
+Returns the specified <info type> of instance attached to the npc or, if
+an instance ID is specified, of that instance.
+
+Valid <info type>:
+ILI_NAME	- Instance Name
+			  Return the name of the instance or "" if that fails.
+ILI_MODE	- Instance Mode
+			  Return IM_NONE, IM_CHAR, IM_PARTY, IM_GUILD, IM_CLAN or -1 if that fails.
+ILI_OWNER	- Owner ID
+			  Return an ID according to the instance mode of the instance attached/specified or -1 if that fails.
+			  When the instance mode is IM_NONE, ILI_OWNER will return the npc ID that created the instance,
+			  IM_CHAR	- the owner char ID
+			  IM_PARTY	- the party ID
+			  IM_GUILD	- the guild ID
+			  IM_CLAN	- the clan ID
+
+Examples:
+	// Return the instance name of the instance attached to the npc.
+	.@instance_name$ = instance_live_info(ILI_NAME);
+
+	// Return the guild owner ID of the given instance ID.
+	.@owner = instance_live_info(ILI_OWNER, instance_id(IM_GUILD));
+
+---------------------------------------
+
 *getvariableofinstance(<variable>,<instance id>);
 
 Returns a reference to an instance variable (' prefix) of the specific instance ID.
@@ -9076,13 +9118,15 @@ Examples:
 =========================
 ---------------------------------------
 
-*questinfo <Quest ID>,<Icon>{,<Map Mark Color>{,<Job Class>}};
+*questinfo <Icon>{,<Map Mark Color>{,"<condition>"}};
 
-This is esentially a combination of checkquest and showevent. Use this only
-in an OnInit label. For the Quest ID, specify the quest ID that you want
-checked if it has been started yet.
+This command should only be used in an OnInit label.
+Show an emotion on top of a NPC, and optionally, a colored mark in the mini-map like "viewpoint".
+When a user is doing some action, each NPC is checked for questinfo that has been set on the map.
+If questinfo is present, it will check if the player fulfill the condition.
+If he/she does or no condition has been set, the bubble will appear.
 
-For Icon, use one of the following:
+Available <Icon>:
 
 No Icon			: QTYPE_NONE
 ! Quest Icon	: QTYPE_QUEST
@@ -9099,59 +9143,46 @@ Daily Quest		: QTYPE_DAILYQUEST (Only for packetver >= 20170315)
 Job Quest		: QTYPE_JOBQUEST (Only for packetver >= 20170315)
 Jumping Poring	: QTYPE_JUMPING_PORING (Only for packetver >= 20170315)
 
-Map Mark Color, when used, creates a mark in the user's mini map on the position of the NPC,
+<Map Mark Color>, when used, creates a mark in the user's mini map on the position of the NPC,
 the available color values are:
 
-0 - No Marker (default)
-1 - Yellow Marker
-2 - Green Marker
-3 - Purple Marker
+QMARK_NONE   - No Marker (default)
+QMARK_YELLOW - Yellow Marker
+QMARK_GREEN  - Green Marker
+QMARK_PURPLE - Purple Marker
+
+<condition> can be any expression similarly to the <condition> in the 'if' command.
 
-When a user shows up on a map, each NPC is checked for questinfo that has been set.
-If questinfo is present, it will check if the quest has been started, if it has not, the bubble will appear.
+List of the player's actions to trigger the questinfo condition:
+-	Item added to/removed from player inventory
+-	Base/Job level change
+-	Job change
+-	Quest given/erased/completed
+-	Quest objective updated (character killed a monster quest target)
+-	Warp
 
-Optionally, you can also specify a Job Class if the quest bubble should only appear for a certain class.
 
-Example
+Example:
 izlude,100,100,4	script	Test	844,{
 	mes "[Test]";
 	mes "Hello World.";
 	close;
 
-	OnInit:
-		questinfo 1001, QTYPE_QUEST, 0, Job_Novice;
-		end;
-}
-
----------------------------------------
-
-*setquestinfo_level <quest_id>,<min_level>,<max_level>;
-
-Add level range criteria for quest info with quest id 'quest_id'.
-
-This command must be used after 'questinfo'.
-
----------------------------------------
-
-*setquestinfo_req <quest_id>,<req_quest_id>,<state>{,<req_quest_id>,<state>,...};
-
-Add 'req_quest_id' as requirement for quest info with quest id 'quest_id'.
-
-Value os 'state' are:
-    0: Player doesn't started 'req_quest_id'.
-    1: Player has 'req_quest_id' (state is either "inactive" or "active").
-    2: Player has 'req_quest_id' completed
+OnInit:
+	// Display an icon if the player has completed the given hunting quest and his/her variable 'unknown_var' is above 0
+	questinfo QTYPE_QUEST, QMARK_YELLOW, "checkquest(1001,HUNTING) == 2 && unknown_var > 0";
 
-This command must be used after 'questinfo'.
+	//.. or display an icon if the player didn't start the given quest and he/she has one red potion in inventory
+	questinfo QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(1001) && countitem(501) == 1";
+	end;
+}
 
 ---------------------------------------
 
-*setquestinfo_job <quest_id>,<job_id>{,<job_id>...};
-
-Add job criteria for quest info with quest id 'quest_id'.
-The job criteria may more than one job_id.
+*questinfo_refresh {<char_id>};
 
-This command must be used after 'questinfo'.
+This command refreshes each quest bubble that has been set on the map according
+to the questinfo condition for the attached/given player.
 
 ---------------------------------------
 
@@ -9233,10 +9264,10 @@ Warg			: QTYPE_WARG
 Warg Face		: QTYPE_WARG2 (Only for packetver >= 20120410)
 
 Mark Color:
-0 - No Mark
-1 - Yellow Mark
-2 - Green Mark
-3 - Purple Mark
+QMARK_NONE   - No Marker (default)
+QMARK_YELLOW - Yellow Marker
+QMARK_GREEN  - Green Marker
+QMARK_PURPLE - Purple Marker
 
 ---------------------------------------
 
@@ -10320,7 +10351,7 @@ 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>.
+<char id> and is completed.
 Returns true on success and false on failure.
 
 ---------------------------------------

+ 15 - 0
doc/yaml/db/guild_skill_tree.yml

@@ -0,0 +1,15 @@
+###########################################################################
+# Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################

+ 17 - 0
doc/yaml/db/license.yml

@@ -0,0 +1,17 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 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/>.
+#

+ 34 - 0
doc/yaml/db/pet_db.yml

@@ -0,0 +1,34 @@
+###########################################################################
+# Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################

+ 3 - 3
npc/cities/aldebaran.txt

@@ -1492,17 +1492,17 @@ alde_dun03,264,16,4	script	Gatekeeper#ct1	101,{
 }
 
 function	script	F_ClockTowerGate	{
-	.@floor = getarg(0);
+	.@floor$ = getarg(0);
 	.@item_req = getarg(1);
 
 	mes "[Gatekeeper Boy]";
 	mes "Welcome to";
 	mes "Kinase - Blue Gallino";
 	mes "The one of Local Speciality in Aldebaran.";
-	mes "You can't go through from "+ .@floor +" Floor,";
+	mes "You can't go through from "+ .@floor$ +" Floor,";
 	mes "Please go back.";
 	next;
-	switch(select("About Clock Tower:About the "+ .@floor +" Floor:Move to the "+ .@floor +" Floor:End Dialogue")) {
+	switch(select("About Clock Tower:About the "+ .@floor$ +" Floor:Move to the "+ .@floor$ +" Floor:End Dialogue")) {
 	case 1:
 		mes "[Gatekeeper Boy]";
 		mes "Homeland of Alchemy,Aldebaran!";

+ 4 - 4
npc/custom/jobmaster.txt

@@ -418,10 +418,6 @@ function	Get_Job_Equip	{
 				getitem 1960,1;	break;	//	Whip [1]
 			case Job_Super_Novice:
 				getitem 1208,1;	break;	//	Main Gauche [4]
-			case Job_Gunslinger:
-				getitem 13101,1; break;	//	Six Shooter [2]
-			case Job_Ninja:
-				getitem 13010,1; break;	//	Asura [2]
 			case Job_Star_Gladiator:
 				getitem 1550,1;	break;	//	Book [3]
 			case Job_Soul_Linker:
@@ -444,6 +440,10 @@ function	Get_Job_Equip	{
 				getitem 1302,1;	break;	//	Axe [4]
 			case Job_Thief:
 				getitem 1208,1;	break;	//	Main Gauche [4]
+			case Job_Gunslinger:
+				getitem 13101,1; break;	//	Six Shooter [2]
+			case Job_Ninja:
+				getitem 13010,1; break;	//	Asura [2]
 		}
 	}
 	return;

+ 24 - 21
npc/custom/official/GeffenMagicTournament.txt

@@ -711,7 +711,7 @@ dali,98,141,3	script	Emmitt White	4_M_KHKYEL,{
 						erasequest .@i;
 					}
 				}
-				
+		if (checkquest(9315) != -1)
 			changequest 9315,9316;
 	}
 	
@@ -730,7 +730,7 @@ dali,98,141,3	script	Emmitt White	4_M_KHKYEL,{
 						erasequest .@i;
 					}
 				}
-				
+		if (checkquest(9315) != -1)
 			changequest 9315,9316;
 	}
 	
@@ -1380,7 +1380,8 @@ OnTouch_:
 		cutin "acamaster_a.bmp", 255;
 		hideonnpc "Geffen Academy Master";
 		'GMT_1QUE = 11;
-		changequest 9294,9295;
+		if (checkquest(9294) != -1)
+			changequest 9294,9295;
 		donpcevent instance_npcname("Geffen Academy Master")+"::OnStart";
 		'charname$ = strcharinfo(0);
 		'sex = Sex;
@@ -1539,7 +1540,8 @@ end;
 OnStart:
 	if ( 'GMT_1QUE != 11 ){
 		attachrid('gmt_account_id);
-		changequest 9283 + 'GMT_1QUE, 9284 +'GMT_1QUE;
+		if (checkquest(9283 + 'GMT_1QUE) != -1)
+			changequest 9283 + 'GMT_1QUE, 9284 +'GMT_1QUE;
 		detachrid;
 	}
 
@@ -2529,7 +2531,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Yahoo!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -2586,7 +2588,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Time to get ready for my next match.";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -2641,7 +2643,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Hu hu hu hu hu...";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 }
 
@@ -2693,7 +2695,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Never show your face in Geffen again!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -2748,7 +2750,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "You should go home~ Bye~!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 }
 
@@ -2805,7 +2807,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "No matter, I'll just prepare for the next match.";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 }
 
@@ -2864,7 +2866,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I'm ready for the next match!!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 }
 
@@ -2924,7 +2926,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Ha ha ha ha ha~!!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 }
 
@@ -2978,7 +2980,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Now, I shall prepare for my next match~!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3031,7 +3033,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "Wahahaha~!!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3087,7 +3089,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I'm so giddy to find out who I'm up against next!~";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3144,7 +3146,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I need to get ready for my next match now~";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3200,7 +3202,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "The real game is battle!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3268,7 +3270,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I have just one more match to win!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3335,7 +3337,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I will defeat her and win this tournament!";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }
@@ -3417,7 +3419,8 @@ OnTalk2:
     npctalk "However, next time, I won't lose!";
     sleep2 2000;
     cutin "", 255;
-    changequest 9307,9308;
+	if (checkquest(9307) != -1)
+		changequest 9307,9308;
     warp instance_mapname("1@ge_st"), 109,50;
 	donpcevent instance_npcname("#win")+"::OnEnable";
 	movenpc instance_npcname("#gefmagic_warp02"),120,213;
@@ -3434,7 +3437,7 @@ OnVictory:
 	sleep 3000;
 	npctalk "I have to go... My friends are waiting for me.";
 	sleep 5000;
-	instance_warpall instance_mapname("1@gef"),120,61;
+	instance_warpall instance_mapname("1@gef"),120,61, instance_id();
 	end;
 	
 }

+ 4 - 5
npc/custom/quests/questboard.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= tr0n
 //===== Current Version: =====================================
-//= 1.6.5
+//= 1.6.6
 //===== Description: =========================================
 //= Easily add collection and hunting quests.
 //===== Changelogs: ==========================================
@@ -16,6 +16,7 @@
 // 1.5.4 Added repeatable Quests
 // 1.6.4 Added party support
 // 1.6.5 Bug fixes for party support
+// 1.6.6 Bug fixes for delay time does not appear [mazvi]
 //============================================================
 prontera,129,215,5	script	Questboard	4_BOARD3,{
 
@@ -91,9 +92,8 @@ prontera,129,215,5	script	Questboard	4_BOARD3,{
 		set .@selection,select(.@collectmenu$);
 		if(.quest_repeat == true){
 			if(gettimetick(2) < getd(.@selection + "_collection_delay")){
-				set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
 				mes "[^FF7700Questboard^000000]";
-				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				mes "You have to wait ^0000FF"+Time2Str(getd(.@selection + "_collection_delay"))+"^000000 to do this quest again.";
 				close;
 			}
 		}
@@ -145,9 +145,8 @@ prontera,129,215,5	script	Questboard	4_BOARD3,{
 		set .@selection,select(.@huntmenu$);
 		if(.quest_repeat == true){
 			if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
-				set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
 				mes "[^FF7700Questboard^000000]";
-				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				mes "You have to wait ^0000FF"+Time2Str(getd(.@selection + "_hunting_delay"))+"^000000 to do this quest again.";
 				close;
 			}
 		}

+ 36 - 15
npc/custom/woe_controller.txt

@@ -53,7 +53,7 @@ OnInit:
 //  [1] Enable rewards.
 //  [2] Mail all rewards.
 //      - If not set, players receive items in their inventory.
-//      - Only ONE item can be sent via mail, plus Zeny.
+//      - Only ONE item can be sent via mail for PACKETVER < 20150513 while later clients are limited to MAIL_MAX_ITEM (5).
 //      - Note that offline players do NOT receive rewards.
 //  [4] Only reward Guild Masters.
 //      - If not set, all guild members are rewarded.
@@ -67,9 +67,13 @@ OnInit:
 	set .Options, 1|8;
 
 	// Rewards per castle.
-	// -- when given directly: <itemID>,<amount>{,<itemID>,<amount>,...}
-	// -- via mail (option 2): <itemID>,<amount>,<Zeny>
-	setarray .Reward[0],14001,1;
+	//   setarray .reward_id[0],     <itemID>{,<itemID>,...}
+	//   setarray .reward_amount[0], <amount>{,<amount>,...}
+	setarray .reward_id[0],14001;
+	setarray .reward_amount[0],1;
+
+	// Zeny reward:
+	.reward_zeny = 0;
 
 // -----------------------------------------------------------
 //  Constants (leave this section alone).
@@ -91,6 +95,7 @@ OnInit:
 
 // -----------------------------------------------------------
 
+	.reward_id_size = getarraysize(.reward_id);
 	set .Size, getarraysize($WOE_CONTROL);
 	if (.AutoKick || .NoOwner)
 		for(set .@i,0; .@i<30; set .@i,.@i+1) {
@@ -160,10 +165,13 @@ function Add_Zero {
 }
 
 OnReward:
+	if (!.reward_id_size && !.reward_zeny)
+		return;
+
 	set .@sql$, ((.Options&4)?"position = 0":"online = 1");
 	if (.Options&2) set .@str$,gettimestr("%B %d, %Y",21);
 	freeloop(1);
-	for(set .@i,0; .@i<30; set .@i,.@i+1)
+	for(set .@i,0; .@i<30; set .@i,.@i+1) {
 		if (getarg(0)&(1<<.@i)) {
 			set .@gid, getcastledata(.Castles$[.@i],1);
 			if (!.@gid) continue;
@@ -175,22 +183,35 @@ OnReward:
 					setd ".@ip_"+.@i+"_"+.@ip$,1;
 				}
 				if (.Options&2) {
-					query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+
-					          "'no-reply',"+.@cid[.@j]+",'** Siege Reward: "+getcastlename(.Castles$[.@i])+" **',"+
-					          "'Brave one,% % Congratulations!% Your guild has successfully occupied% territory in the War of Emperium on% "+.@str$+".% % % % % [ Your reward is attached. ]',"+
-					          .Reward[0]+","+.Reward[1]+",0,"+.Reward[2]+",UNIX_TIMESTAMP(NOW()))");
-					if (!getd(".@str_"+.@cid[.@j]) && isloggedin(.@aid[.@j],.@cid[.@j])) {
+					.@charid = .@cid[.@j];
+					.@sender$ = "no-reply";
+					.@title$ = "** Siege Reward: "+getcastlename(.Castles$[.@i])+" **";
+					.@body$ = "Brave one,\r\n \r\n Congratulations!\r\n Your guild has successfully occupied\r\n territory in the War of Emperium on\r\n "+.@str$+".\r\n \r\n \r\n \r\n \r\n [ Your reward is attached. ]";
+
+					if (.reward_id_size)
+						mail .@charid, .@sender$, .@title$, .@body$, .reward_zeny, .reward_id, .reward_amount;
+					else
+						mail .@charid, .@sender$, .@title$, .@body$, .reward_zeny;
+
+					if (PACKETVER < 20150513 && !getd(".@str_"+.@cid[.@j]) && isloggedin(.@aid[.@j],.@cid[.@j])) {
 						setd ".@str_"+.@cid[.@j],1;
-						message rid2name(.@aid[.@j]),"You've got mail! Please re-login to update your mailing list.";
+						message rid2name(.@aid[.@j]),"You've got mail!";
 					}
 				} else if (isloggedin(.@aid[.@j])) {
-					for(set .@k,0; .@k<getarraysize(.Reward); set .@k,.@k+2)
-						getitem .Reward[.@k], .Reward[.@k+1], .@aid[.@j];
-					message rid2name(.@aid[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+".";
+					.@name$ = rid2name(.@aid[.@j]);
+					.@castle_name$ = getcastlename(.Castles$[.@i]);
+					for ( .@k = 0; .@k < .reward_id_size; .@k++ ) {
+						if (checkweight(.reward_id[.@k], .reward_amount[.@k]))
+							getitem .reward_id[.@k], .reward_amount[.@k], .@aid[.@j];
+						else
+							message .@name$, "You can't receive x" + .reward_amount[.@k] + " " + getitemname(.reward_id[.@k]) + " for conquering " + .@castle_name$ + " because you're overweight.";
+					}
+					Zeny += .reward_zeny;
+					message .@name$, "You have been rewarded for conquering " + .@castle_name$ + ".";
 				}
 			}
 		}
-	if (.Options&2) query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'");
+	}
 	return;
 
 OnPCLoadMapEvent:

+ 5 - 5
npc/instances/NydhoggsNest.txt

@@ -1750,7 +1750,7 @@ OnTimer1830000:
 OnTimer1850000:
 	donpcevent instance_npcname("ins_nyd_1f_timer")+"::OnDisable";
 	donpcevent instance_npcname("nyd_call_mon_1")+"::OnDisable";
-	instance_warpall "mid_camp",310,150;
+	instance_warpall "mid_camp",310,150, instance_id();
 	stopnpctimer;
 	end;
 }
@@ -1888,7 +1888,7 @@ OnWarpColor:
 		donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_red")+"::OnEnable";
-		instance_warpall .@map$,115,278;
+		instance_warpall .@map$,115,278, instance_id();
 		end;
 	case 2:
 		mapannounce .@map$, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
@@ -1896,7 +1896,7 @@ OnWarpColor:
 		donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_white")+"::OnEnable";
-		instance_warpall .@map$,115,373;
+		instance_warpall .@map$,115,373, instance_id();
 		end;
 	case 3:
 		mapannounce .@map$, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
@@ -1904,7 +1904,7 @@ OnWarpColor:
 		donpcevent instance_npcname("nyd_2f_white")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_yellow")+"::OnEnable";
-		instance_warpall .@map$,284,278;
+		instance_warpall .@map$,284,278, instance_id();
 		end;
 	case 4:
 		mapannounce .@map$, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
@@ -1912,7 +1912,7 @@ OnWarpColor:
 		donpcevent instance_npcname("nyd_2f_white")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
 		donpcevent instance_npcname("nyd_2f_green")+"::OnEnable";
-		instance_warpall .@map$,284,374;
+		instance_warpall .@map$,284,374, instance_id();
 		end;
 	}
 	end;

+ 1 - 1
npc/instances/SealedShrine.txt

@@ -965,7 +965,7 @@ OnTimer3100000:
 	end;
 
 OnTimer3500000:
-	instance_warpall "monk_test",310,150;
+	instance_warpall "monk_test",310,150, instance_id();
 	stopnpctimer;
 	end;
 }

+ 1 - 1
npc/jobs/1-1e/ninja.txt

@@ -374,7 +374,7 @@ que_ng,30,65,3	script	Kuuga Gai#nq	730,{
 	}
 }
 
-einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
+einbroch,184,194,3	script	Suspicious Man#nq	881,{
 	if (NINJ_Q == 1) {
 		mes "[Suspicious Man]";
 		mes "I've traveled to many";

+ 3 - 1
npc/merchants/icecream.txt

@@ -36,7 +36,7 @@
 	mes "but we have a limited amount,";
 	mes "so you can only purchase 5 at a time!!";
 	next;
-	while(1) {
+	while(true) {
 		input .@input;
 		if(.@input < 1) {
 			mes "[Ice Cream Maker]";
@@ -55,7 +55,9 @@
 			mes "If you might haveto make a lot of trips";
 			mes "to the bathroom tonight.";
 			next;
+			continue;
 		}
+		break;
 	}
 	if(Zeny<.@input*100) {
 		mes "[Ice Cream Maker]";

+ 1 - 1
npc/other/arena/arena_party.txt

@@ -40,7 +40,7 @@ OnStart:
 	end;
 }
 
-prt_are_in,76,87,3	script	Helper#party	 67,4,4,{
+prt_are_in,76,87,3	script	Helper#party	67,4,4,{
 	if($arn_partywait == 0) {
 		set $arn_partywait,1;
 		emotion ET_SURPRISE;

+ 1 - 1
npc/other/monster_race.txt

@@ -1578,7 +1578,7 @@ p_track02,67,45,5	script	Medal Distributor#medal	845,{
 	mes "Medals may be given to Wayne";
 	mes "in Hugel in exchange for items.";
 	next;
-	if (monster_race_2_1 == $@mon_race_2_1 && monster_race_2_2 == $@mon_race_2_2) {
+	if ((monster_race_2_1 == $@mon_race_2_1 && monster_race_2_2 == $@mon_race_2_2) || (monster_race_2_1 == $@mon_race_2_2 && monster_race_2_2 == $@mon_race_2_1)) {
 		mes "[Medal Distributor]";
 		mes "Congratulations! It's really";
 		mes "difficult to guess the winners";

+ 7 - 0
npc/pre-re/quests/quest_payon.txt

@@ -0,0 +1,7 @@
+//===== rAthena Script ======================================= 
+//= Quest Payon Pre-Renewal
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [JohnnyPlayy]
+//============================================================
+
+payon_in01,56,12,7	duplicate(Young man#12)	Young man#1	4_M_ORIENT02

+ 1 - 1
npc/pre-re/quests/quests_morocc.txt

@@ -2643,7 +2643,7 @@ OnTouch:
 		next;
 		mes "[A man of Riehart Family]";
 		mes "Never mind...";
-		donpcevent "YoungNoble#valter::OnDisable";
+		donpcevent "Young Noble#valter::OnDisable";
 		donpcevent "Aged Noble#rihart::OnDisable";
 		next;
 		mes "[" + strcharinfo(0) + "]";

+ 1 - 0
npc/pre-re/scripts_athena.conf

@@ -87,6 +87,7 @@ npc: npc/pre-re/quests/seals/megingard_seal.txt
 npc: npc/pre-re/quests/cooking_quest.txt
 npc: npc/pre-re/quests/monstertamers.txt
 npc: npc/pre-re/quests/mrsmile.txt
+npc: npc/pre-re/quests/quest_payon.txt
 npc: npc/pre-re/quests/quests_13_1.txt
 npc: npc/pre-re/quests/quests_izlude.txt
 npc: npc/pre-re/quests/quests_lighthalzen.txt

+ 4 - 5
npc/quests/dandelion_request.txt

@@ -2778,7 +2778,7 @@ OnStop:
 	donpcevent "Kidd#2::OnInit";
 	donpcevent "Marjana#poison::OnInit";
 	donpcevent "#mao_table::OnInit";
-	donpcevent "#roombar1::OnInit";
+	$@maobar_room = 0;
 	stopnpctimer;
 	end;
 	
@@ -2800,7 +2800,7 @@ OnTimer245000:
 	
 OnTimer250000:
 	mapannounce "que_job01","The security magic in the Master Zone, Area 1 is deactivated.",1,0x70DBDB;
-	donpcevent "#roombar1::OnInit";
+	$@maobar_room = 0;
 	stopnpctimer;
 	end;
 }
@@ -2907,7 +2907,7 @@ OnStop:
 	donpcevent "Kidd#3::OnInit";
 	donpcevent "#Rabsent::OnInit";
 	donpcevent "#mao_empty::OnInit";
-	donpcevent "#roombar2::OnInit";
+	$@maobar_room2 = 0;
 	stopnpctimer;
 	end;
 	
@@ -2924,12 +2924,11 @@ OnTimer245000:
 	donpcevent "Kidd#3::OnInit";
 	donpcevent "#Rabsent::OnInit";
 	donpcevent "#mao_empty::OnInit";
-	donpcevent "#roombar2::OnInit";
 	end;
 	
 OnTimer250000:
 	mapannounce "que_job01","Security Level in the Master Zone, Area 2 deactivated.",1,0x70DBDB;
-	donpcevent "#roombar2::OnInit";
+	$@maobar_room2 = 0;
 	stopnpctimer;
 	end;
 }

+ 1 - 1
npc/quests/gunslinger_quests.txt

@@ -383,7 +383,7 @@ SubGarrison_:
 	}
 }
 
-lighthalzen,322,247,6	script	Ravey	 86,{
+lighthalzen,322,247,6	script	Ravey	86,{
 
 	if(gun_gs == 2)
 	{

+ 105 - 104
npc/quests/quests_lighthalzen.txt

@@ -23,11 +23,12 @@
 //= 5.0 Updated RE/Pre-RE EXP. [Euphy]
 //= 5.1 Added GM management NPCs. [Euphy]
 //= 5.2 Fixed some quest log issues. [Capuche]
+//= 5.3 Changing NPC_ID to NPC_NAME [JohnnyPlayy]
 //============================================================
 
 // Gangster Alert [Official Conversion]
 //============================================================
-lighthalzen,1,1,0	script	Law Enforcement	-1,{
+lighthalzen,1,1,0	script	Law Enforcement	HIDDEN_NPC,{
 	end;
 
 OnEnable:
@@ -48,7 +49,7 @@ OnMyMobDead:
 	end;
 }
 
-lighthalzen,267,200,3	script	Guard#lhz01	868,{
+lighthalzen,267,200,3	script	Guard#lhz01	4_M_LGTGUARD,{
 	if (countitem(7350) > 0) {
 		mes "[Guard]";
 		mes "Hold it right th--!";
@@ -115,7 +116,7 @@ lighthalzen,267,200,3	script	Guard#lhz01	868,{
 	}
 }
 
-lighthalzen,294,223,7	script	Guard#lhz02	868,{
+lighthalzen,294,223,7	script	Guard#lhz02	4_M_LGTGUARD,{
 	if (countitem(7350) > 0) {
 		mes "[Guard]";
 		mes "Hold it right th--!";
@@ -184,7 +185,7 @@ lighthalzen,294,223,7	script	Guard#lhz02	868,{
 
 // Cube Room Quest
 //============================================================
-lighthalzen,341,224,3	script	Fishbone	868,{
+lighthalzen,341,224,3	script	Fishbone	4_M_LGTGUARD,{
 	// Quest is finished.
 	if (MISC_QUEST&512) {
 		mes "[Fishbone]";
@@ -645,7 +646,7 @@ lighthalzen,341,224,3	script	Fishbone	868,{
 	}
 }
 
-lhz_cube,237,198,0	script	Bundle of Files#cube	111,{
+lhz_cube,237,198,0	script	Bundle of Files#cube	HIDDEN_NPC,{
 	if (lhz_sincube < 7) {
 		mes "^3355FFThere are a bunch";
 		mes "of files scattered";
@@ -687,7 +688,7 @@ lhz_cube,237,198,0	script	Bundle of Files#cube	111,{
 	close;
 }
 
-lhz_cube,234,202,0	script	Picture#cube	111,{
+lhz_cube,234,202,0	script	Picture#cube	HIDDEN_NPC,{
 	if (lhz_secret01 < 2) {
 		mes "^3355FFThis picture hanging";
 		mes "on the wall catches";
@@ -780,7 +781,7 @@ lhz_cube,234,202,0	script	Picture#cube	111,{
 	close;
 }
 
-lhz_cube,242,201,0	script	Drawer#cube	111,{
+lhz_cube,242,201,0	script	Drawer#cube	HIDDEN_NPC,{
 	if (lhz_secret01 < 1) {
 		mes "^3355FFThe drawer here";
 		mes "looks interesting,";
@@ -820,7 +821,7 @@ lhz_cube,242,201,0	script	Drawer#cube	111,{
 	close;
 }
 
-lhz_cube,248,179,0	script	Chest#cube	111,{
+lhz_cube,248,179,0	script	Chest#cube	HIDDEN_NPC,{
 	if (lhz_sincube < 7) {
 		mes "^3355FFYou've found a chest";
 		mes "with an axe laid on";
@@ -851,7 +852,7 @@ lhz_cube,248,179,0	script	Chest#cube	111,{
 	close;
 }
 
-lhz_cube,237,183,0	script	Barrel#cube	111,{
+lhz_cube,237,183,0	script	Barrel#cube	HIDDEN_NPC,{
 	if (lhz_sincube < 8) {
 		mes "^3355FFYou have";
 		mes "found a shabbily";
@@ -948,7 +949,7 @@ lhz_cube,237,183,0	script	Barrel#cube	111,{
 	close;
 }
 
-lhz_cube,224,192,0	script	Power Generator#cube	111,{
+lhz_cube,224,192,0	script	Power Generator#cube	HIDDEN_NPC,{
 	if (lhz_secret01 < 6) {
 		mes "^3355FFThis is a noisily";
 		mes "operating huge machine";
@@ -997,7 +998,7 @@ lhz_cube,224,192,0	script	Power Generator#cube	111,{
 	close;
 }
 
-lhz_cube,244,201,0	script	Status Light#cube	111,{
+lhz_cube,244,201,0	script	Status Light#cube	HIDDEN_NPC,{
 	if (lhz_secret01 < 7) {
 		mes "^3355FFThe Status Light is";
 		mes "on. It looks like there's";
@@ -1032,7 +1033,7 @@ lhz_cube,244,201,0	script	Status Light#cube	111,{
 	close;
 }
 
-lhz_cube,234,200,0	script	Desk#cube	111,{
+lhz_cube,234,200,0	script	Desk#cube	HIDDEN_NPC,{
 	if (lhz_secret02 < 2) {
 		mes "^3355FFYou've found";
 		mes "a completely";
@@ -1169,7 +1170,7 @@ lhz_cube,234,200,0	script	Desk#cube	111,{
 	}
 }
 
-lhz_cube,247,198,0	script	Bed#cube	111,{
+lhz_cube,247,198,0	script	Bed#cube	HIDDEN_NPC,{
 	if (lhz_secret02 == 0) {
 		mes "^3355FFYou've found a bed";
 		mes "in which the sheets";
@@ -1317,7 +1318,7 @@ lhz_cube,247,198,0	script	Bed#cube	111,{
 	close;
 }
 
-lhz_cube,229,184,0	script	Goblet#cube	111,{
+lhz_cube,229,184,0	script	Goblet#cube	HIDDEN_NPC,{
 	if (lhz_sincube < 10) {
 		if (lhz_secret03 == 0) {
 			mes "^3355FFYou see an empty";
@@ -1346,7 +1347,7 @@ lhz_cube,229,184,0	script	Goblet#cube	111,{
 	close;
 }
 
-lhz_cube,231,202,0	script	Chemicals#cube	111,{
+lhz_cube,231,202,0	script	Chemicals#cube	HIDDEN_NPC,{
 	if (lhz_secret03 < 1) {
 		mes "^3355FFThere is a bottle";
 		mes "containing slightly";
@@ -1394,7 +1395,7 @@ lhz_cube,231,202,0	script	Chemicals#cube	111,{
 	close;
 }
 
-lhz_cube,249,191,0	script	Cabinet#cube	111,{
+lhz_cube,249,191,0	script	Cabinet#cube	HIDDEN_NPC,{
 	if (lhz_secret03 < 2) {
 		mes "^3355FFYou've found a";
 		mes "cabinet that contains";
@@ -1446,7 +1447,7 @@ lhz_cube,249,191,0	script	Cabinet#cube	111,{
 	close;
 }
 
-lhz_cube,224,197,0	script	Experiment Tube#cube	111,{
+lhz_cube,224,197,0	script	Experiment Tube#cube	HIDDEN_NPC,{
 	if (lhz_secret01 < 8) {
 		mes "^3355FFYou find a strange";
 		mes "tube that seems to";
@@ -1545,7 +1546,7 @@ lhz_cube,224,197,0	script	Experiment Tube#cube	111,{
 	}
 }
 
-lhz_cube,248,193,0	script	Box#cube1	111,{
+lhz_cube,248,193,0	script	Box#cube1	HIDDEN_NPC,{
 	if (lhz_secret01 < 9 && lhz_secret02 < 4 && lhz_secret03 < 3) {
 		mes "^3355FFYou find a box with";
 		mes "three distinctively";
@@ -1671,7 +1672,7 @@ lhz_cube,248,193,0	script	Box#cube1	111,{
 	close;
 }
 
-lhz_cube,250,184,0	script	Door#cube	111,{
+lhz_cube,250,184,0	script	Door#cube	HIDDEN_NPC,{
 	mes "^3355FFYou've come upon a";
 	mes "door that leads outside.^000000";
 	next;
@@ -1682,7 +1683,7 @@ lhz_cube,250,184,0	script	Door#cube	111,{
 	close;
 }
 
-lhz_dun02,224,6,0	script	Exit1#lt	45,1,1,{
+lhz_dun02,224,6,0	script	Exit1#lt	WARPNPC,1,1,{
 	end;
 OnTouch_:
 	if (MISC_QUEST&512) {
@@ -1698,7 +1699,7 @@ OnTouch_:
 
 // Lighthalzen Pickpocket Mini-Quest
 //============================================================
-lighthalzen,240,216,4	script	Suspicious Guy#lhz_01	870,2,2,{
+lighthalzen,240,216,4	script	Suspicious Guy#lhz_01	4_M_LGTPOOR,2,2,{
 	end;
 
 OnTouch_:
@@ -1767,7 +1768,7 @@ OnTouch_:
 	}
 }
 
-lighthalzen,220,169,3	script	Suspicious Guy#lhz_02	870,2,2,{
+lighthalzen,220,169,3	script	Suspicious Guy#lhz_02	4_M_LGTPOOR,2,2,{
 	end;
 
 OnInit:
@@ -1839,7 +1840,7 @@ OnTouch_:
 	}
 }
 
-lighthalzen,164,127,4	script	Suspicious Guy#lhz_03	870,2,2,{
+lighthalzen,164,127,4	script	Suspicious Guy#lhz_03	4_M_LGTPOOR,2,2,{
 	end;
 
 OnInit:
@@ -2023,7 +2024,7 @@ OnTouch_:
 
 // Friendship Quest
 //============================================================
-lhz_in02,201,210,5	script	Digotz	869,{
+lhz_in02,201,210,5	script	Digotz	4_M_LGTMAN,{
 	if (BaseLevel < 50) {
 		mes "[Digotz]";
 		mes "Oh, an adventurer?";
@@ -2502,7 +2503,7 @@ lhz_in02,201,210,5	script	Digotz	869,{
 	close;
 }
 
-lighthalzen,337,232,3	script	Maku	870,{
+lighthalzen,337,232,3	script	Maku	4_M_LGTPOOR,{
 	mes "[Maku]";
 	if (friendship > 14) {
 		cutin "lhz_macu07",2;
@@ -2980,7 +2981,7 @@ lighthalzen,337,232,3	script	Maku	870,{
 }
 
 
-yuno_in04,107,14,5	script	Student	754,{
+yuno_in04,107,14,5	script	Student	4_M_SAGE_A,{
 	if (friendship == 7 || friendship == 8) {
 		mes "[Joey Choryee]";
 		mes "This is a study area where";
@@ -3009,7 +3010,7 @@ yuno_in04,107,14,5	script	Student	754,{
 	close;
 }
 
-yuno_in04,96,106,5	script	Passionate Student	754,{
+yuno_in04,96,106,5	script	Passionate Student	4_M_SAGE_A,{
 	if ((MaxWeight-Weight) < 300 || checkweight(1201,1) == 0) {
 		mes "^3355FFWait a second!";
 		mes "Right now, you're carrying";
@@ -3230,7 +3231,7 @@ yuno_in04,96,106,5	script	Passionate Student	754,{
 	close;
 }
 
-yuno_in04,168,117,3	script	Book#lhz	111,{
+yuno_in04,168,117,3	script	Book#lhz	HIDDEN_NPC,{
 	if (friendship == 11) {
 		mes "^3355FFThere's nothing";
 		mes "over here that you";
@@ -3256,7 +3257,7 @@ yuno_in04,168,117,3	script	Book#lhz	111,{
 
 // Cursed Spirit Quest
 //============================================================
-lhz_dun01,147,106,0	script	#kiz01-1	-1,3,3,{
+lhz_dun01,147,106,0	script	#kiz01-1	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3292,11 +3293,11 @@ OnTouch_:
 	end;
 }
 
-lhz_dun01,239,135,0	duplicate(#kiz01-1)	#kiz01-2	-1,3,3
-lhz_dun01,66,213,0	duplicate(#kiz01-1)	#kiz01-3	-1,3,3
-lhz_dun01,225,198,0	duplicate(#kiz01-1)	#kiz01-4	-1,3,3
+lhz_dun01,239,135,0	duplicate(#kiz01-1)	#kiz01-2	HIDDEN_NPC,3,3
+lhz_dun01,66,213,0	duplicate(#kiz01-1)	#kiz01-3	HIDDEN_NPC,3,3
+lhz_dun01,225,198,0	duplicate(#kiz01-1)	#kiz01-4	HIDDEN_NPC,3,3
 
-lhz_dun02,244,229,0	script	#kiz02-1	-1,3,3,{
+lhz_dun02,244,229,0	script	#kiz02-1	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3332,11 +3333,11 @@ OnTouch_:
 	end;
 }
 
-lhz_dun02,60,293,0	duplicate(#kiz02-1)	#kiz02-2	-1,3,3
-lhz_dun02,267,278,0	duplicate(#kiz02-1)	#kiz02-3	-1,3,3
-lhz_dun02,94,199,0	duplicate(#kiz02-1)	#kiz02-4	-1,3,3
+lhz_dun02,60,293,0	duplicate(#kiz02-1)	#kiz02-2	HIDDEN_NPC,3,3
+lhz_dun02,267,278,0	duplicate(#kiz02-1)	#kiz02-3	HIDDEN_NPC,3,3
+lhz_dun02,94,199,0	duplicate(#kiz02-1)	#kiz02-4	HIDDEN_NPC,3,3
 
-lhz_dun03,244,51,0	script	#kiz03-1	-1,3,3,{
+lhz_dun03,244,51,0	script	#kiz03-1	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3372,10 +3373,10 @@ OnTouch_:
 	end;
 }
 
-lhz_dun03,123,191,0	duplicate(#kiz03-1)	#kiz03-2	-1,3,3
-lhz_dun03,74,140,0	duplicate(#kiz03-1)	#kiz03-3	-1,3,3
+lhz_dun03,123,191,0	duplicate(#kiz03-1)	#kiz03-2	HIDDEN_NPC,3,3
+lhz_dun03,74,140,0	duplicate(#kiz03-1)	#kiz03-3	HIDDEN_NPC,3,3
 
-lighthalzen,344,278,0	script	#kiz03	-1,2,2,{
+lighthalzen,344,278,0	script	#kiz03	HIDDEN_NPC,2,2,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3426,7 +3427,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in03,178,22,0	script	#kiz04	-1,2,2,{
+lhz_in03,178,22,0	script	#kiz04	HIDDEN_NPC,2,2,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3505,7 +3506,7 @@ OnTouch_:
 	end;
 }
 
-lighthalzen,295,227,0	script	#kiz05	-1,2,2,{
+lighthalzen,295,227,0	script	#kiz05	HIDDEN_NPC,2,2,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3551,7 +3552,7 @@ OnTouch_:
 	end;
 }
 
-lighthalzen,364,315,0	script	#kiz06	-1,3,3,{
+lighthalzen,364,315,0	script	#kiz06	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3610,7 +3611,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,113,150,0	script	#kiz07	-1,3,3,{
+lhz_in01,113,150,0	script	#kiz07	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3664,7 +3665,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,272,227,0	script	#kiz08	-1,2,2,{
+lhz_in01,272,227,0	script	#kiz08	HIDDEN_NPC,2,2,{
 OnTouch_:
 	if (countitem(7345) > 0 ) {
 		if (lhz_curse == 0) {
@@ -3748,7 +3749,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,206,129,0	script	#kiz09	-1,5,5,{
+lhz_in01,206,129,0	script	#kiz09	HIDDEN_NPC,5,5,{
 OnTouch_:
 	if (countitem(7345) > 0) {
 		if (lhz_curse == 12) {
@@ -3767,7 +3768,7 @@ OnTouch_:
 	end;
 }
 
-lhz_que01,21,31,5	script	#li_Varmunt	755,{
+lhz_que01,21,31,5	script	#li_Varmunt	4_M_SAGE_C,{
 	if (countitem(7345) > 0) {
 		if (lhz_curse == 12) {
 			mes "[??]";
@@ -3903,7 +3904,7 @@ lhz_que01,21,31,5	script	#li_Varmunt	755,{
 	end;
 }
 
-lhz_que01,29,24,3	script	#li_researcher	754,{
+lhz_que01,29,24,3	script	#li_researcher	4_M_SAGE_A,{
 	if (countitem(7345) > 0) {
 		if (lhz_curse == 12) {
 			mes "Doctor Varmunt,";
@@ -4038,7 +4039,7 @@ lhz_que01,29,24,3	script	#li_researcher	754,{
 	end;
 }
 
-lhz_in01,282,166,0	script	#kiz10	-1,3,3,{
+lhz_in01,282,166,0	script	#kiz10	HIDDEN_NPC,3,3,{
 OnTouch_:
 	if (countitem(7345) > 0) {
 		if (lhz_curse == 16) {
@@ -4070,7 +4071,7 @@ OnTouch_:
 	end;
 }
 
-lhz_que01,99,74,5	script	#li_Man	48,{
+lhz_que01,99,74,5	script	#li_Man	1_M_02,{
 	if (lhz_curse == 16) {
 		mes "[???]";
 		mes "It's over.";
@@ -4221,7 +4222,7 @@ OnTouch_:
 	close;
 }
 
-lighthalzen,346,263,3	script	Elder#lhz	846,{
+lighthalzen,346,263,3	script	Elder#lhz	4_F_EINOLD,{
 	if (countitem(7345) > 0) {
 		if ((lhz_curse == 1) && (lhz_spi01 == 1) && (lhz_spi02 == 1) && (lhz_spi03 == 1) && (lhz_spi04 == 1)) {
 			mes "[Elder]";
@@ -4689,7 +4690,7 @@ lighthalzen,346,263,3	script	Elder#lhz	846,{
 	}
 }
 
-lhz_in03,32,162,3	script	Crippled Girl#li_tre	53,{
+lhz_in03,32,162,3	script	Crippled Girl#li_tre	1_M_INNKEEPER,{
 	if (lhz_curse == 23) {
 		if (countitem(7341) > 0) {
 			mes "["+strcharinfo(0)+"]";
@@ -5054,7 +5055,7 @@ lhz_in03,32,162,3	script	Crippled Girl#li_tre	53,{
 	}
 }
 
-lighthalzen,324,322,0	script	#li_door	45,2,2,{
+lighthalzen,324,322,0	script	#li_door	WARPNPC,2,2,{
 OnTouch_:
 	if ((lhz_curse > 19) && (lhz_curse < 23)) {
 		mes "^3355FFThe door is locked.^000000";
@@ -5086,7 +5087,7 @@ OnTouch_:
 
 lhz_in03,12,162,0	warp	#to_lhz		1,1,lighthalzen,321,322
 
-lighthalzen,319,321,0	script	#li_bother	-1,2,2,{ //3,3
+lighthalzen,319,321,0	script	#li_bother	HIDDEN_NPC,2,2,{ //3,3
 OnTouch_:
 	if ((lhz_curse == 24 ) || (lhz_curse == 25)) {
 		mes ".............";
@@ -5141,7 +5142,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,114,181,5	script	Representative#li_01	71,{
+lhz_in01,114,181,5	script	Representative#li_01	1_F_LIBRARYGIRL,{
 	if (lhz_curse == 7) {
 		mes "[Representative]";
 		mes "Greetings, and welcome";
@@ -5300,7 +5301,7 @@ lhz_in01,114,181,5	script	Representative#li_01	71,{
 	}
 }
 
-lhz_in01,27,247,5	script	Representative#li_02	71,{
+lhz_in01,27,247,5	script	Representative#li_02	1_F_LIBRARYGIRL,{
 	if (lhz_curse > 6) {
 		mes "[Representative]";
 		mes "Welcome to the";
@@ -5443,7 +5444,7 @@ lhz_in01,27,247,5	script	Representative#li_02	71,{
 	}
 }
 
-lhz_in01,25,251,3	script	Rekenber Guidebook#li	111,{
+lhz_in01,25,251,3	script	Rekenber Guidebook#li	HIDDEN_NPC,{
 	mes "..............";
 	next;
 	mes "^3131FF#The Vision^000000";
@@ -5479,7 +5480,7 @@ lhz_in01,25,251,3	script	Rekenber Guidebook#li	111,{
 	close;
 }
 
-lhz_in01,273,121,1	script	Mad Scientist#li	865,{
+lhz_in01,273,121,1	script	Mad Scientist#li	4_LGTSCIENCE,{
 	if (lhz_curse == 13) {
 		mes "[Wolfchev]";
 		mes "No one shall";
@@ -5678,7 +5679,7 @@ lhz_in01,273,121,1	script	Mad Scientist#li	865,{
 	}
 }
 
-lhz_in01,286,226,3	script	Secretary Slierre#li	831,{
+lhz_in01,286,226,3	script	Secretary Slierre#li	4_F_ZONDAGIRL,{
 	if (lhz_curse == 26) {
 		mes "[Sueii Slierre]";
 		mes "Excuse me, but you are";
@@ -6161,7 +6162,7 @@ lhz_in01,286,226,3	script	Secretary Slierre#li	831,{
 	}
 }
 
-lhz_que01,94,24,0	script	#li_end	-1,2,2,{
+lhz_que01,94,24,0	script	#li_end	HIDDEN_NPC,2,2,{
 OnTouch_:
 	if (lhz_curse > 30) {
 		mes "^3131FFThere's no trace of";
@@ -6177,7 +6178,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,43,114,0	script	#li_toend	45,1,1,{
+lhz_in01,43,114,0	script	#li_toend	WARPNPC,1,1,{
 OnTouch_:
 	if (lhz_curse > 30) {
 		warp "lhz_que01",97,30;
@@ -6191,7 +6192,7 @@ OnTouch_:
 lhz_que01,97,33,0	warp	#li_toin01	1,1,lhz_in01,43,120
 lhz_in01,278,132,0	warp	#li_toin02	1,1,lhz_in01,43,120
 
-lhz_que01,89,15,3	script	File#li	111,{
+lhz_que01,89,15,3	script	File#li	HIDDEN_NPC,{
 	mes "Name: Engeod";
 	mes "Age: XX";
 	mes "Height: XXX";
@@ -6209,7 +6210,7 @@ lhz_que01,89,15,3	script	File#li	111,{
 	close;
 }
 
-lhz_in01,269,114,3	script	A File#li-1	111,{
+lhz_in01,269,114,3	script	A File#li-1	HIDDEN_NPC,{
 	mes "Name: Engeod";
 	mes "Age: XX";
 	mes "Height: XXX";
@@ -6229,7 +6230,7 @@ lhz_in01,269,114,3	script	A File#li-1	111,{
 
 // President Quest, a.k.a. Schwartzvalt Triology Quest
 //============================================================
-lighthalzen,179,170,4	script	Ordinary Man	98,{
+lighthalzen,179,170,4	script	Ordinary Man	4W_M_02,{
 
 	if(!lhz_boss)
 	{
@@ -6926,7 +6927,7 @@ lighthalzen,179,170,4	script	Ordinary Man	98,{
 	}
 }
 
-lighthalzen,173,167,1	script	Switch	-1,2,4,{
+lighthalzen,173,167,1	script	Switch	HIDDEN_NPC,2,4,{
 
 OnTouch_:
 	if(lhz_boss == 1)
@@ -7011,7 +7012,7 @@ OnTouch_:
 	}
 }
 
-yuno_fild04,165,245,4	script	Dismal Guy	89,{
+yuno_fild04,165,245,4	script	Dismal Guy	4_M_ORIENT02,{
 
 	if(lhz_boss < 8)
 	{
@@ -7191,7 +7192,7 @@ yuno_fild04,165,245,4	script	Dismal Guy	89,{
 	}
 }
 
-yuno_pre,69,20,4	script	Secretary#1	862,{
+yuno_pre,69,20,4	script	Secretary#1	4_F_LGTGIRL,{
 
 	if(lhz_boss < 11)
 	{
@@ -7447,7 +7448,7 @@ yuno_pre,69,20,4	script	Secretary#1	862,{
 	}
 }
 
-yuno_pre,95,71,5	script	Guard	852,{
+yuno_pre,95,71,5	script	Guard	4_M_EIN_SOLDIER,{
 
 	if(lhz_boss < 11)
 	{
@@ -7577,14 +7578,14 @@ yuno_pre,95,71,5	script	Guard	852,{
 	}
 }
 
-yuno_pre,96,69,2	script	A Fine Gentleman	754,{
+yuno_pre,96,69,2	script	A Fine Gentleman	4_M_SAGE_A,{
 
 OnInit:
 	disablenpc "A Fine Gentleman";
 	end;
 }
 
-yuno_pre,69,79,4	script	Mr. President	872,{
+yuno_pre,69,79,4	script	Mr. President	4_M_PRESIDENT,{
 
 	if(checkweight(7342,1) != 1)
 	{
@@ -8501,21 +8502,21 @@ L_Mission:
 	}
 }
 
-yuno_pre,77,68,0	script	Secretary#2	862,{
+yuno_pre,77,68,0	script	Secretary#2	4_F_LGTGIRL,{
 
 OnInit:
 	disablenpc "Secretary#2";
 	end;
 }
 
-yuno_pre,75,73,0	script	A Neat Gentleman	109,{
+yuno_pre,75,73,0	script	A Neat Gentleman	4_M_MANAGER,{
 
 OnInit:
 	disablenpc "A Neat Gentleman";
 	end;
 }
 
-yuno_pre,117,60,0	script	Eavesdrop	-1,10,5,{
+yuno_pre,117,60,0	script	Eavesdrop	HIDDEN_NPC,10,5,{
 
 OnTouch_:
 	if(lhz_boss == 16)
@@ -8551,7 +8552,7 @@ OnTouch_:
 	}
 }
 
-aldebaran,58,225,4	script	Kafra Employee#l1	116,{
+aldebaran,58,225,4	script	Kafra Employee#l1	4_F_KAFRA2,{
 
 	if(lhz_boss != 17)
 	{
@@ -8621,7 +8622,7 @@ aldebaran,58,225,4	script	Kafra Employee#l1	116,{
 	}
 }
 
-aldeba_in,155,240,5	script	Kafra Employee#l2	859,{
+aldeba_in,155,240,5	script	Kafra Employee#l2	4_F_AGENTKAFRA,{
 
 	if(checkweight(7343,1) != 1)
 	{
@@ -8904,7 +8905,7 @@ aldeba_in,155,240,5	script	Kafra Employee#l2	859,{
 	}
 }
 
-lhz_fild02,228,214,0	script	Wounded Man	849,{
+lhz_fild02,228,214,0	script	Wounded Man	4_M_DIEMAN,{
 
 	if(checkweight(7343,1) != 1)
 	{
@@ -9006,7 +9007,7 @@ OnInit:
 	end;
 }
 
-lhz_fild02,224,220,0	script	Wounded Man Switch	-1,3,3,{
+lhz_fild02,224,220,0	script	Wounded Man Switch	HIDDEN_NPC,3,3,{
 
 OnTouch_:
 	if(lhz_boss == 18)
@@ -9020,7 +9021,7 @@ OnTouch_:
 	}
 }
 
-lhz_fild01,76,214,0	script	Esuna Trigger	-1,5,5,{
+lhz_fild01,76,214,0	script	Esuna Trigger	HIDDEN_NPC,5,5,{
 
 OnTouch_:
 	if((lhz_boss == 26) || (lhz_boss == 36) || (lhz_boss == 38) || (lhz_boss == 40))
@@ -9035,7 +9036,7 @@ OnTouch_:
 	}
 }
 
-lhz_fild01,66,219,4	script	Mysterious Woman	859,{
+lhz_fild01,66,219,4	script	Mysterious Woman	4_F_AGENTKAFRA,{
 
 	if(lhz_boss == 26)
 	{
@@ -9251,7 +9252,7 @@ OnInit:
 	end;
 }
 
-lhz_in01,93,45,4	script	Researcher#1	865,{
+lhz_in01,93,45,4	script	Researcher#1	4_LGTSCIENCE,{
 
 	if(lhz_boss < 28)
 	{
@@ -9353,7 +9354,7 @@ lhz_in01,93,45,4	script	Researcher#1	865,{
 	}
 }
 
-lhz_in01,285,169,3	script	Researcher#2	865,{
+lhz_in01,285,169,3	script	Researcher#2	4_LGTSCIENCE,{
 
 	if(checkweight(7349,1) != 1)
 	{
@@ -9506,7 +9507,7 @@ lhz_in01,285,169,3	script	Researcher#2	865,{
 	}
 }
 
-lhz_in01,187,31,0	script	#Sneak	111,4,3,{
+lhz_in01,187,31,0	script	#Sneak	HIDDEN_NPC,4,3,{
 
 	end;
 
@@ -9663,7 +9664,7 @@ L_Enter:
 	}
 }
 
-lhz_in01,177,44,0	script	Timer_Sneak	-1,8,12,{
+lhz_in01,177,44,0	script	Timer_Sneak	HIDDEN_NPC,8,12,{
 
 OnTouch_:
 	warp "lhz_in01",191,49;
@@ -9690,7 +9691,7 @@ OnTimer190000:
 
 
 
-lhz_in01,182,35,0	script	File Search Engine	111,{
+lhz_in01,182,35,0	script	File Search Engine	HIDDEN_NPC,{
 
 	if((lhz_boss > 28) && (lhz_boss < 35))
 	{
@@ -9820,7 +9821,7 @@ L_Search:
 	close;
 }
 
-lhz_in01,177,31,0	script	Door#sneak	111,{
+lhz_in01,177,31,0	script	Door#sneak	HIDDEN_NPC,{
 
 	if(lhz_boss < 29)
 	{
@@ -9858,7 +9859,7 @@ lhz_in01,177,31,0	script	Door#sneak	111,{
 	}
 }
 
-lhz_in01,184,40,0	script	Area 1-5	111,{
+lhz_in01,184,40,0	script	Area 1-5	HIDDEN_NPC,{
 
 	if(checkweight(7344,1) != 1)
 	{
@@ -9907,7 +9908,7 @@ lhz_in01,184,40,0	script	Area 1-5	111,{
 	}
 }
 
-lhz_in01,184,52,0	script	Area 1-7	111,{
+lhz_in01,184,52,0	script	Area 1-7	HIDDEN_NPC,{
 
 	if((lhz_boss > 28) && (lhz_boss < 32))
 	{
@@ -9969,7 +9970,7 @@ lhz_in01,184,52,0	script	Area 1-7	111,{
 	}
 }
 
-lhz_in01,184,46,0	script	Area 3-2	111,{
+lhz_in01,184,46,0	script	Area 3-2	HIDDEN_NPC,{
 
 	if((lhz_boss > 28) && (lhz_boss < 30))
 	{
@@ -10034,7 +10035,7 @@ lhz_in01,184,46,0	script	Area 3-2	111,{
 	}
 }
 
-lhz_in01,184,48,0	script	Area 3-3	111,{
+lhz_in01,184,48,0	script	Area 3-3	HIDDEN_NPC,{
 
 	if((lhz_boss > 28) && (lhz_boss < 34))
 	{
@@ -10082,7 +10083,7 @@ lhz_in01,184,48,0	script	Area 3-3	111,{
 	}
 }
 
-lhz_in01,177,56,0	script	Area 6-1	111,{
+lhz_in01,177,56,0	script	Area 6-1	HIDDEN_NPC,{
 
 	if((lhz_boss > 28) && (lhz_boss < 33))
 	{
@@ -10129,7 +10130,7 @@ lhz_in01,177,56,0	script	Area 6-1	111,{
 	}
 }
 
-lhz_dun02,282,278,0	script	Broken Machine	111,{
+lhz_dun02,282,278,0	script	Broken Machine	HIDDEN_NPC,{
 
 	if(checkweight(7346,1) != 1)
 	{
@@ -10209,7 +10210,7 @@ lhz_dun02,282,278,0	script	Broken Machine	111,{
 	}
 }
 
-sec_in02,17,170,4	script	boss::lght_boss_admin	809,{
+sec_in02,17,170,4	script	boss::lght_boss_admin	1_M_SIGNMONK,{
 	callfunc "F_GM_NPC";
 	mes "[Patch]";
 	mes "Tell me what you want.";
@@ -10230,7 +10231,7 @@ sec_in02,17,170,4	script	boss::lght_boss_admin	809,{
 	close;
 }
 
-lhz_in02,19,274,2	script	Maintenance Guy	851,{
+lhz_in02,19,274,2	script	Maintenance Guy	4_M_REPAIR,{
 
 	mes "[Kudiuu]";
 	mes "Holy...!";
@@ -10244,7 +10245,7 @@ lhz_in02,19,274,2	script	Maintenance Guy	851,{
 
 // Rekenber Job Quest
 //============================================================
-lhz_in01,174,258,3	script	Young Man#reken	868,{
+lhz_in01,174,258,3	script	Young Man#reken	4_M_LGTGUARD,{
 
 	if(lhz_rekenber > 21)
 	{
@@ -10986,7 +10987,7 @@ lhz_in01,174,258,3	script	Young Man#reken	868,{
 	end;
 }
 
-lighthalzen,141,162,3	script	Old Man#reken	85,{
+lighthalzen,141,162,3	script	Old Man#reken	4_M_03,{
 
 	mes "[Old Man]";
 	mes "Lately, Kazien seems";
@@ -11016,7 +11017,7 @@ lighthalzen,141,162,3	script	Old Man#reken	85,{
 	close;
 }
 
-einbroch,55,52,3	script	Laboratory Guard#reken	 852,{
+einbroch,55,52,3	script	Laboratory Guard#reken	4_M_EIN_SOLDIER,{
 
 	if(lhz_rekenber == 3)
 	{
@@ -11099,7 +11100,7 @@ einbroch,55,52,3	script	Laboratory Guard#reken	 852,{
 	close;
 }
 
-airplane_01,96,48,3	script	Man#Lyozien	868,{
+airplane_01,96,48,3	script	Man#Lyozien	4_M_LGTMAN,{
 
 	if(lhz_rekenber > 21)
 	{
@@ -11537,7 +11538,7 @@ OnStop:
 	end;
 }
 
--	script	::Scamp	-1,{
+-	script	::Scamp	HIDDEN_NPC,{
 
 	if(lhz_rekenber > 21)
 	{
@@ -11720,7 +11721,7 @@ OnStop:
 	close;
 }
 
-airplane_01,1,1,1	script	#bully1	-1,{
+airplane_01,1,1,1	script	#bully1	HIDDEN_NPC,{
 
 OnInit:
 	disablenpc "#bully1";
@@ -11763,7 +11764,7 @@ OnTimer120000:
 	end;
 }
 
-airplane_01,2,2,1	script	#bully2	-1,{
+airplane_01,2,2,1	script	#bully2	HIDDEN_NPC,{
 
 OnInit:
 	disablenpc "#bully2";
@@ -11806,7 +11807,7 @@ OnTimer120000:
 	end;
 }
 
-airplane_01,99,47,3	script	#packidentity	139,2,2,{
+airplane_01,99,47,3	script	#packidentity	HIDDEN_WARP_NPC,2,2,{
 	end;
 
 OnInit:
@@ -11846,7 +11847,7 @@ OnTimer120000:
 	end;
 }
 
-lhz_in01,187,247,3	script	#flashback1	139,2,2,{
+lhz_in01,187,247,3	script	#flashback1	HIDDEN_WARP_NPC,2,2,{
 
 OnTouch_:
 	if(lhz_rekenber == 22)
@@ -11868,7 +11869,7 @@ OnTouch_:
 	end;
 }
 
-lhz_in01,75,248,3	script	#flashback2	139,2,2,{
+lhz_in01,75,248,3	script	#flashback2	HIDDEN_WARP_NPC,2,2,{
 
 OnTouch_:
 	if(lhz_rekenber == 22)
@@ -11906,7 +11907,7 @@ OnTouch_:
 	end;
 }
 
-airplane_01,10,10,3	script	#LyozienSwitch	111,{
+airplane_01,10,10,3	script	#LyozienSwitch	HIDDEN_NPC,{
 	callfunc "F_GM_NPC";
 	mes "[Lyozien Switch]";
 	mes "Input password.";

+ 4 - 15
npc/quests/quests_morocc.txt

@@ -1893,6 +1893,7 @@ OnTimer25000:
 	end;
 
 OnDisable:
+	stopnpctimer;
 	disablenpc "Satan Broadcast#edq";
 	end;
 }
@@ -1919,19 +1920,10 @@ moc_fild21,178,239,0	script	Group of Evil#edq	844,1,1,{
 		close;
 	}
 
-OnInit:
-	enablenpc "Group of Evil#edq";
-	end;
-
 OnEnable:
 	enablenpc "Group of Evil#edq";
 	set $@re_moc_time$,"";
 	end;
-
-OnDisable:
-	disablenpc "Group of Evil#edq";
-	donpcevent "Time-Space Gap#edq::OnEnable";
-	end;
 }
 
 moc_fild21,177,239,0	script	Time-Space Gap#edq	844,1,1,{
@@ -1974,8 +1966,6 @@ OnTimer1800000:
 	end;
 
 OnTimer21600000:
-	stopnpctimer;
-	set $@re_moc,0;
 	donpcevent "Time-Space Gap#edq::OnDisable";
 	end;
 }
@@ -2004,7 +1994,9 @@ OnMyMobDead:
 	mapannounce "moc_fild21","I'll let live just a little longer. You'll never find me through this time-space gap!",bc_map,"0xFFFF00";
 	donpcevent "Time-Space Gap#edq::OnEnable";
 	donpcevent "Satan Broadcast#edq::OnDisable";
-	donpcevent "Group of Evil#edq::OnDisable";
+	disablenpc "Group of Evil#edq";
+	stopnpctimer;
+	killmonster "moc_fild21","Satan Summon#edq::OnMyMobDead";
 	disablenpc "Satan Summon#edq";
 	end;
 
@@ -2014,9 +2006,6 @@ OnTimer5400000:
 
 OnTimer5415000:
 	mapannounce "moc_fild21","I don't have time for this! Go away!",bc_map,"0xFFFF00";
-	stopnpctimer;
-	killmonster "moc_fild21","Satan Summon#edq::OnMyMobDead";
-	set $@re_moc,0;
 	donpcevent "Satan Summon#edq::OnDisable";
 	end;
 }

+ 2 - 1
npc/quests/quests_payon.txt

@@ -17,6 +17,7 @@
 //= 1.5a replaced item "names" with item id. [Lupus]
 //= 1.6 Updated Dialogs from "Oxygen Mask Quest" [Samuray22]
 //= 1.7 Updated headgear quests. [L0ne_W0lf]
+//= 1.8 Updating NPC Position. [JohnnyPlayy]
 //============================================================ 
 
 // 'Pretend Murdered' Quest
@@ -216,7 +217,7 @@ payon_in02,25,71,4	script	Boy	86,{
 
 // 'Helm of Angel' and 'Deviruchi Cap' Quest
 //============================================================
-payon_in01,56,12,7	script	Young man#12	89,{
+-	script	Young man#12	89,{
 	mes "[Young man]";
 	mes "...What is it?";
 	next;

+ 1 - 1
npc/re/cities/brasilis.txt

@@ -85,7 +85,7 @@ brasilis,155,165,3	script	Signpost#bra1	858,{
 	close;
 }
 
-brasilis,195,231,3	script	Signpost#bra2	858,{
+brasilis,191,239,3	script	Signpost#bra2	858,{
 	mes ":: Verass Monument ::";
 	close;
 }

+ 35 - 63
npc/re/custom/lasagna/lasagna_npcs.txt

@@ -89,7 +89,7 @@ lasa_fild01,49,304,3	script	Vigilante Ajegna#doram0	4_DR_SOLDIER,{
 		close;
 	}
 OnInit:
-	questinfo 7712, QTYPE_QUEST, 1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7712)" );
 	end;
 }
 
@@ -165,7 +165,7 @@ OnTouch:
 	end;
 OnInit:
 	if (strnpcinfo(0) == "Applicant Paul#doramt13")
-		questinfo 7723, QTYPE_QUEST, 1;
+		questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7723)" );
 	end;
 }
 lasa_fild01,50,321,6	duplicate(Applicant Paul#doramt13)	Applicant MacCarnie#doramt13	4_M_MERCAT1
@@ -236,8 +236,7 @@ lasa_fild01,54,325,3	script	Vigilante Gnocchi#doramt13	4_DR_SOLDIER,{
 	}
 	close;
 OnInit:
-	questinfo 7723, QTYPE_QUEST, 1;
-	setquestinfo_req 7723, 7723,1;// todo : display when isbegin_quest(7723) == 1 only
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7723) == 1" );
 	end;
 }
 
@@ -393,7 +392,7 @@ lasa_fild01,60,322,3	script	Vigilante Aglio#doram02	4_DR_AGLIO,{
 			mes "Also, I'll give you a new staff.";
 			mes "It should be better than that sprout you brought with you.";
 			mes "Now you know how to equip an item because I already explained it to you, don't you?";
-			completequest 7714;// Refreshing Apple Juice
+			erasequest 7714;// Refreshing Apple Juice
 			getitem 569,30;// Novice Potion
 			getitem 1687,1;// Beginner Foxtail Staff [1]
 			getexp 70,70;
@@ -532,12 +531,7 @@ lasa_fild01,60,322,3	script	Vigilante Aglio#doram02	4_DR_AGLIO,{
 	mes "Well, problems do occur at the harbor from time to time, but I thought it wouldn't be an issue for you.";
 	close;
 OnInit:
-	questinfo 7715, QTYPE_QUEST, 1;
-	setquestinfo_req 7715, 7713,2;
-	questinfo 7712, QTYPE_QUEST, 1;
-	setquestinfo_req 7712, 7712,1;
-	// questinfo 7713, QTYPE_QUEST, 1;
-	// setquestinfo_req 7713, 7713,2;// todo display when HUNTING is QUEST_COMPLETE
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7712) > 0 && (checkquest(7713,HUNTING) == -1 || checkquest(7713,HUNTING) == 2)" );
 	end;
 }
 
@@ -646,7 +640,7 @@ OnTouch:
 		npctalk "Hey, there! Get over here for a minute!", "", bc_self;
 	end;
 OnInit:
-	questinfo 7719, QTYPE_QUEST, 1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7719)" );
 	end;
 }
 
@@ -818,8 +812,7 @@ OnTouch:
 	end;
 
 OnInit:
-	questinfo 7721, QTYPE_QUEST, 1;
-	setquestinfo_req 7721, 7716,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7716) == 1 && isbegin_quest(7721) != 2" );
 	end;
 }
 
@@ -876,8 +869,7 @@ lasagna,168,125,3	script	Kid#doram04t	4_DR_KID_01,{
 	npctalk "You're too young! Just join the Vigilante Corp.", "Tool Merchant#doram05t", bc_self;
 	end;
 OnInit:
-	questinfo 7716, QTYPE_QUEST, 1;
-	setquestinfo_req 7716, 7716,1;// todo display when Active, removed when completed
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7716) == 1" );
 	end;
 }
 
@@ -992,6 +984,10 @@ lasagna,165,125,5	script	Tool Merchant#doram05t	4_DR_M_01,{
 	close2;
 	callshop "tool_shop_lasagna",2;
 	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7717) == 1" );
+	end;
 }
 
 -	shop	tool_shop_lasagna	-1,1750:-1,611:-1,501:-1,502:-1,503:-1,504:-1,645:-1,656:-1,713:-1,601:-1,602:-1,1065:-1
@@ -1215,7 +1211,8 @@ lasagna,224,126,5	script	Healer Haru#doram07t	4_DR_M_02,{
 	}
 
 OnInit:
-	questinfo 7722, QTYPE_QUEST, 1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7722) == 0" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7717) == 1" );
 	end;
 }
 
@@ -1332,7 +1329,7 @@ malaya,286,175,3	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#m
 mora,110,118,3	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#mora	4_M_MERCAT1
 morocc,169,105,3	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#moro	4_M_MERCAT1
 mosk_in,30,246,3	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#mosk	4_M_MERCAT1
-payon,157,96,5	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#pay	4_M_MERCAT1
+payon,155,96,5	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#pay	4_M_MERCAT1
 prontera,137,223,5	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#prt	4_M_MERCAT1
 ra_in01,243,272,5	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#ra	4_M_MERCAT1
 um_in,104,118,3	duplicate(Cat Paw Shrimp Merchant#iz)	Cat Paw Shrimp Merchant#um	4_M_MERCAT1
@@ -1674,7 +1671,8 @@ OnTouch:
 		npctalk "Meow! Hey, a new friend! I've got a story to tell you. You don't want to miss this!", "", bc_self;
 	end;
 OnInit:
-	questinfo 7720, QTYPE_QUEST, 1;// perma for human
+	// note: permanent for human
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7720)" );
 	end;
 }
 
@@ -1731,8 +1729,7 @@ OnTouch:
 		npctalk "Please don't miss the announcement about the details of Con-Chliina!", "", bc_self;
 	end;
 OnInit:
-	questinfo 14545, QTYPE_QUEST, 1;
-	setquestinfo_req 14545, 11445,2;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14545)" );
 	end;
 }
 
@@ -2635,9 +2632,7 @@ lasa_fild01,353,370,5	script	Shepherd#dorcon	4_DR_KID_01,{
 		close;
 	}
 OnInit:
-	questinfo 14546, QTYPE_QUEST, 1;
-	setquestinfo_req 14546, 14592,0;
-	setquestinfo_level 14546,6,9;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14546) && !isbegin_quest(14592) && BaseLevel >= 6 && BaseLevel <= 9" );
 	end;
 }
 
@@ -2784,9 +2779,7 @@ lasa_fild02,102,372,5	script	Florin#dorcon	4_DR_F_01,{
 	}
 
 OnInit:
-	questinfo 14588, QTYPE_QUEST, 1;
-	setquestinfo_req 14588, 14592,0;
-	setquestinfo_level 14588,10,13;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14588) && !isbegin_quest(14592) && BaseLevel >= 10 && BaseLevel <= 13" );
 	end;
 }
 
@@ -2928,9 +2921,7 @@ lasa_fild02,177,241,5	script	Prok#dorcon	4_DR_M_02,{
 	}
 
 OnInit:
-	questinfo 14589, QTYPE_QUEST, 1;
-	setquestinfo_req 14589, 14592,0;
-	setquestinfo_level 14589,14,15;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14589) && !isbegin_quest(14592) && (BaseLevel == 14 || BaseLevel == 15)" );
 	end;
 }
 
@@ -3056,9 +3047,7 @@ lasa_fild02,326,170,5	script	Fisher#dorcon	4_CAT_ADV2,{
 	}
 
 OnInit:
-	questinfo 14590, QTYPE_QUEST, 1;
-	setquestinfo_req 14590, 14592,0;
-	setquestinfo_level 14590,16,19;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14590) && !isbegin_quest(14592) && BaseLevel >= 16 && BaseLevel <= 19" );
 	end;
 }
 
@@ -3245,9 +3234,7 @@ lasa_fild02,331,251,5	script	Sleepy meow#dorcon	4_CAT_REST,{
 	}
 
 OnInit:
-	questinfo 14591, QTYPE_QUEST, 1;
-	setquestinfo_req 14591, 14592,0;
-	setquestinfo_level 14591,20,20;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14591) && !isbegin_quest(14592) && BaseLevel == 20" );
 	end;
 }
 
@@ -3740,21 +3727,8 @@ lasagna,222,187,3	script	Chef#dorcon	4_CAT_CHEF,{
 	end;
 
 OnInit:
-	questinfo 14546, QTYPE_QUEST, 1;
-	setquestinfo_req 14546, 14592,0, 14588,0, 14589,0, 14590,0;
-	setquestinfo_level 14546,6,9;
-
-	questinfo 14588, QTYPE_QUEST, 1;
-	setquestinfo_req 14588, 14592,0, 14546,0, 14589,0, 14590,0;
-	setquestinfo_level 14588,10,13;
-
-	questinfo 14589, QTYPE_QUEST, 1;
-	setquestinfo_req 14589, 14592,0, 14546,0, 14588,0, 14590,0;
-	setquestinfo_level 14589,14,15;
-
-	questinfo 14590, QTYPE_QUEST, 1;
-	setquestinfo_req 14590, 14592,0, 14546,0, 14588,0, 14589,0;
-	setquestinfo_level 14590,16,19;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW,
+		"BaseLevel >= 6 && BaseLevel <= 19 && !isbegin_quest(14546) && !isbegin_quest(14592) && !isbegin_quest(14588) && !isbegin_quest(14589) && !isbegin_quest(14590)" );
 	end;
 }
 
@@ -4030,7 +4004,7 @@ OnTouch:
 	npctalk "Vigilante Guide: If you're ever in need of help, please visit the Vigilante Corp at any time.", "", bc_self;
 	end;
 OnInit:
-	questinfo 11435, QTYPE_QUEST, 1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(11435)" );
 	end;
 }
 lasagna,202,291,3	duplicate(Vigilante Guide#lasa)	Vigilante Guide#lasa2	4_DR_SOLDIER,5,5
@@ -5044,7 +5018,7 @@ OnTouch:
 	callsub S_quest21;
 	end;
 OnInit:
-	questinfo 14545, QTYPE_QUEST, 1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14545)" );
 	end;
 }
 
@@ -5256,12 +5230,7 @@ conch_in,65,58,3	script	Purser#dorcon	4_CAT_ADV1,{
 	close;
 
 OnInit:
-	questinfo 14532, QTYPE_QUEST, 1;
-	setquestinfo_req 14532,14531,1;
-	questinfo 14536, QTYPE_QUEST, 1;
-	setquestinfo_req 14536,14535,1;
-	questinfo 14547, QTYPE_QUEST, 1;
-	setquestinfo_req 14547,14531,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(14531) == 1" );
 	end;
 }
 
@@ -7861,8 +7830,7 @@ lasagna,298,84,5	script	Vigilante#dorcon01	4_DR_SOLDIER,{
 	mes "The wind is very uneasy today.";
 	close;
 OnInit:
-	questinfo 14541, QTYPE_QUEST, 1;
-	setquestinfo_req 14541,14539,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(14548) == 1 || isbegin_quest(14539) == 1" );
 	end;
 }
 
@@ -8080,6 +8048,9 @@ lasa_dun01,153,103,3	script	Vigilante#dorcon02	4_DR_SOLDIER,{
 	mes "[Machie]";
 	mes "Tut.";
 	close;
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(14541) == 1 || isbegin_quest(14549) == 1" );
+	end;
 }
 
 lasa_dun_q,162,158,3	script	Tartufi#dorcon01	4_TARUTUPI,{
@@ -8963,6 +8934,8 @@ lasagna,226,181,3	script	Kalu#dorcon	4_CAT_CHEF,{
 	if (lasagna_quest[2] == 8) {
 		mes "[Kalu]";
 		mes "Just deliver this big lunchbox to Panna who's out on a cave patrol.";
+		if (countitem(25048) < 1)
+			getitem 25048,1;// Hearty Lunchbox
 		close;
 	}
 	if (lasagna_quest[2] == 9) {
@@ -9088,8 +9061,7 @@ lasagna,226,181,3	script	Kalu#dorcon	4_CAT_CHEF,{
 	end;
 
 OnInit:
-	questinfo 14567, QTYPE_QUEST, 1;
-	setquestinfo_level 14567,140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(14567) && BaseLevel >= 140" );
 	end;
 }
 

+ 135 - 0
npc/re/guides/guides_malangdo.txt

@@ -0,0 +1,135 @@
+//===== rAthena Script ======================================= 
+//= Malangdo Guide
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [JohnnyPlayy]
+//============================================================
+
+malangdo,218,101,3	script	Malangdo Guide#Malangdo	4_CAT_SAILOR3,{
+	mes "[Malangdo Guide]";
+	mes "Nice to meet you, welcome to ^8C4210Malangdo^000000. The island of cat paw!";
+	mes "Need some guidance?";
+	F_Navi("[Malangdo Guide]");
+	while(1) {
+		next;
+		switch(select("[ Major Facilities ]:[ Trader & Assistant ]:Clear Mini-Map:Cancel")) {
+		case 1:
+			set .@loop,1;
+			while (.@loop) {
+				switch(select("[ Cat Gamers Director ]:[ Special Vending Machine ]:[ Coin Exchanger ]:[ Starry Coral ]:Previous Menu")) {
+				case 1:
+					callsub L_Mark, F_Navi("Cat Gamers Director","malangdo,119,137","FF0000");
+					viewpoint 1,119,137,0,0xFF0000;
+					next;
+					break;
+				case 2:
+					callsub L_Mark, F_Navi("Special Vending Machine","malangdo,216,165","FF4500");
+					viewpoint 1,216,165,1,0xFF4500;
+					next;
+					break;
+				case 3:
+					callsub L_Mark, F_Navi("Coin Exchanger","malangdo,216,165","DAA520");
+					viewpoint 1,216,165,2,0xDAA520;
+					next;
+					break;
+				case 4:
+					callsub L_Mark, F_Navi("Starry Coral","malangdo,73,238","7B68EE");
+					next;
+					viewpoint 1,73,238,3,0x7B68EE;
+					break;
+				case 5:
+					set .@loop,0;
+					break;
+				}
+			}
+			break;
+		case 2:
+			set .@loop,1;
+			while (.@loop) {
+				switch(select("[ Chief Thomas ]:[ Stinky Merchant ]:[ Wandering Merchant ]:[ Inn Owner ]:[ Storekeeper ]:[ Tool Dealer ]:[ Portali ]:[ Clink ]:[ Holink ]:[ Roving Merchant ]:Previous Menu")) {
+				case 1:
+					callsub L_Mark, F_Navi("Chief Thomas","malangdo,164,163","0A9696");
+					viewpoint 1,164,163,4,0x0A9696;
+					next;
+					break;
+				case 2:
+					callsub L_Mark, F_Navi("Stinky Merchant","malangdo,173,145","4B0082");
+					viewpoint 1,173,145,5,0x4B0082;
+					next;
+					break;
+				case 3:
+					callsub L_Mark, F_Navi("Wandering Merchant","malangdo,162,145","FF4500");
+					viewpoint 1,162,145,6,0x7B68EE;
+					next;
+					break;
+				case 4:
+					callsub L_Mark, F_Navi("Inn Owner","malangdo,147,120","FF6A00");
+					viewpoint 1,147,120,7,FF6A00;
+					next;
+					break;
+				case 5:
+					callsub L_Mark, F_Navi("Storekeeper","malangdo,184,138","7F3300");
+					viewpoint 1,184,138,8,0x7F3300;
+					next;
+					break;
+				case 6:
+					callsub L_Mark, F_Navi("Tool Dealer","malangdo,232,160","7B68EE");
+					viewpoint 1,232,160,9,0x7B68EE;
+					next;
+					break;
+				case 7:
+					callsub L_Mark, F_Navi("Portali","malangdo,190,167","FF4500");
+					viewpoint 1,190,167,10,0x7B68EE;
+					next;
+					break;
+				case 8:
+					callsub L_Mark, F_Navi("Clink","malangdo,225,174","0A9696");
+					viewpoint 1,225,174,11,0x0A9696;
+					next;
+					break;
+				case 9:
+					callsub L_Mark, F_Navi("Holink","malangdo,221,176","DA70D6");
+					viewpoint 1,221,176,12,0xDA70D6;
+					next;
+					break;
+				case 10:
+					callsub L_Mark, F_Navi("Roving Merchant","malangdo,150,132","3131FF");
+					viewpoint 1,150,132,13,0x3131FF;
+					next;
+					break;
+				case 11:
+					set .@loop,0;
+					break;
+				}
+			}
+			break;
+		case 3:
+			mes "[Malangdo Guide]";
+			mes "I will remove all marks from your Mini-Map.";
+			mes "Need more help?";
+			viewpoint 2,1,1,0,0xFFFFFF;
+			viewpoint 2,1,1,1,0xFFFFFF;
+			viewpoint 2,1,1,2,0xFFFFFF;
+			viewpoint 2,1,1,3,0xFFFFFF;
+			viewpoint 2,1,1,4,0xFFFFFF;
+			viewpoint 2,1,1,5,0xFFFFFF;
+			viewpoint 2,1,1,6,0xFFFFFF;
+			viewpoint 2,1,1,7,0xFFFFFF;
+			viewpoint 2,1,1,8,0xFFFFFF;
+			viewpoint 2,1,1,9,0xFFFFFF;
+			viewpoint 2,1,1,10,0xFFFFFF;
+			viewpoint 2,1,1,11,0xFFFFFF;
+			viewpoint 2,1,1,12,0xFFFFFF;
+			viewpoint 2,1,1,13,0xFFFFFF;
+			break;
+		case 4:
+			mes "[Malangdo Guide]";
+			mes "I wish you a pleasant trip.";
+			close;
+		}
+	}
+L_Mark:
+	mes "[Malangdo Guide]";
+	mes "I will show you the location of the " + getarg(0);
+	mes "Do you need other information?";
+	return;
+}

+ 3 - 3
npc/re/instances/HorrorToyFactory.txt

@@ -1214,7 +1214,7 @@ OnStart:
 OnStart:
 	.@event$ = instance_npcname( strnpcinfo(0) ) + "::OnMyMobDead";
 	killmonster 'xm_d_map$, .@event$;
-	while (1) {
+	while (unitexists('celene_id) == true) {
 		getunitdata 'celene_id, .@data;
 		.@x = .@data[UMOB_X] + rand(1,20) - 10;
 		.@y = .@data[UMOB_Y] + rand(1,20) - 10;
@@ -1542,7 +1542,8 @@ OnTimer1000:
 
 1@xm_d,3,1,3	script	#adsw2	CLEAR_NPC,{
 	if (callfunc("F_GM_NPC",1854,0) == 1) {
-		getunitdata 'Antonio, .@mob;
+		if (unitexists('Antonio) == true)
+			getunitdata 'Antonio, .@mob;
 		mapannounce 'xm_d_map$, "Factory announcement: Exist in " + .@mob[UMOB_X] + " - " + .@mob[UMOB_Y] + ".",bc_map,"0x00ff44";
 	}
 	end;
@@ -1601,7 +1602,6 @@ OnInstanceInit:
 		hideonnpc instance_npcname("#eff_f0" + .@i);
 	disablenpc instance_npcname("#bssk01");
 	disablenpc instance_npcname("#bssk02");
-	hideonnpc instance_npcname("#bssk02");
 	for ( .@i = 1; .@i < 5; ++.@i )
 		hideonnpc instance_npcname("#crssk" + .@i);
 	disablenpc instance_npcname("#kimion1");

+ 2 - 2
npc/re/instances/MorseCave.txt

@@ -197,7 +197,7 @@ moro_cav,57,69,3	script	Red Flower#a1	CLEAR_NPC,{
 		mes "Only party members can enter this Memorial dungeon.";
 		close;
 	case IE_OK:
-		mapannounce 'map_rev$, getpartyname( getcharid(1) ) + " party's " + strcharinfo(0) + " is entering Morse's Cave.", bc_map,0xFF99;
+		mapannounce "moro_cav", getpartyname( getcharid(1) ) + " party's " + strcharinfo(0) + " is entering Morse's Cave.", bc_map,0xFF99;
 		if (isbegin_quest(9319) > 0)
 			erasequest 9319;// Pursuing Hiding Morocc Continues
 		if (isbegin_quest(9318) > 0)
@@ -383,7 +383,7 @@ OnMobDead:
 }
 
 
-1@rev,34,126,4	script	Grim Reaper Ankou#RZ Event_3		3029,{ end; }
+1@rev,34,126,4	script	Grim Reaper Ankou#RZ Event_3	3029,{ end; }
 1@rev,112,126,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_4	3029
 1@rev,34,55,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_5	3029
 1@rev,112,48,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_6	3029

+ 1 - 1
npc/re/instances/OctopusCave.txt

@@ -226,7 +226,7 @@ OnMyMobDead:
 		donpcevent instance_npcname("oct_boss_con")+"::OnEnable";
 		mapannounce .@map$,"Hey you!! I'll personally take care of you all! Let's bring it on!",bc_map,"0x00ff99";
 		enablenpc instance_npcname("oct_boss_warp");
-		instance_warpall .@map$,199,99;
+		instance_warpall .@map$,199,99, instance_id();
 		end;
 	}
 	mapannounce .@map$,"Arrgg!! That hurts!!! I need another strategy...",bc_map,"0x00ff99";

+ 34 - 72
npc/re/jobs/novice/academy.txt

@@ -83,7 +83,7 @@ OnTouch:
 	end;
 
 OnInit:
-	questinfo 21001, QTYPE_QUEST, 1, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(21001) && Class == Job_Novice" );
 	end;
 }
 iz_int01,56,32,3	duplicate(Wounded Swordsman#intro_npc01_iz_int)	Wounded Swordsman#intro_npc01_iz_int01	4_TOWER_01,5,5
@@ -125,7 +125,7 @@ iz_int,56,32,3	script	Wounded Swordsman#intro_npc02_iz_int	HIDDEN_WARP_NPC,{
 	end;
 
 OnInit:
-	questinfo 21001, QTYPE_QUEST, 1, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(21001) && Class == Job_Novice" );
 	end;
 }
 iz_int01,56,32,3	duplicate(Wounded Swordsman#intro_npc02_iz_int)	Wounded Swordsman#intro_npc02_iz_int01	HIDDEN_WARP_NPC
@@ -237,7 +237,7 @@ int_land,78,103,5	script	Captain Carocc#intro_npc03	4_M_REINDEER,{
 	close;
 
 OnInit:
-	questinfo 21008, QTYPE_QUEST, 1, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(21008) && Class == Job_Novice" );
 	end;
 }
 
@@ -328,8 +328,7 @@ int_land,73,100,3	script	Lumin#new_ship	4_M_NOV_RUMIN,{
 	end;
 
 OnInit:
-	questinfo 7471, QTYPE_QUEST, 1, Job_Novice;
-	setquestinfo_req 7471,21008,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "Class == Job_Novice && !isbegin_quest(7471) && isbegin_quest(21008) == 1" );
 	end;
 }
 int_land01,73,100,3	duplicate(Lumin#new_ship)	Lumin#new_ship01	4_M_NOV_RUMIN
@@ -380,8 +379,7 @@ int_land,58,69,5	script	Sailor#intro_npc04	4W_SAILOR,{
 	close;
 
 OnInit:
-	questinfo 21002, QTYPE_QUEST, 1, Job_Novice;
-	setquestinfo_req 21002,21008,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "Class == Job_Novice && !isbegin_quest(21002) && isbegin_quest(21008) == 1" );
 	end;
 }
 
@@ -793,9 +791,7 @@ izlude,198,213,3	script	Captain Carocc#iz	4_M_REINDEER,5,5,{
 	end;
 
 OnInit:
-	questinfo 7472, QTYPE_QUEST, 1, Job_Novice;
-	setquestinfo_level 7472,1,14;
-	setquestinfo_req 7472,7473,0;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "Class == Job_Novice && BaseLevel <= 14 && !isbegin_quest(7472) && !isbegin_quest(7473)" );
 	end;
 
 OnTouch:
@@ -1115,8 +1111,7 @@ izlude,122,207,3	script	Criatura Academy Staff#0	4_M_KHKYEL,3,3,{
 	}
 
 OnInit:
-	questinfo 7473, QTYPE_QUEST, 1, Job_Novice;
-	setquestinfo_level 7473,1,14;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "Class == Job_Novice && BaseLevel <= 14 && !isbegin_quest(7473)" );
 	end;
 
 OnTouch:
@@ -1636,13 +1631,8 @@ izlude,120,207,4	script	Information Staff#0	8W_SOLDIER,{
 	}
 
 OnInit:
-	questinfo 7474, QTYPE_QUEST, 1;
-	setquestinfo_level 7474,1,14;
-
-	// questinfo 7495, QTYPE_QUEST, 1;// officially disabled
-	// setquestinfo_req 7495,7475,1;
-	// setquestinfo_req 7495,7476,1;
-	// setquestinfo_req 7495,7477,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel <= 14 && !isbegin_quest(7474)" );
+	// questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7495) && isbegin_quest(7475) == 1 && isbegin_quest(7476) == 1 && isbegin_quest(7477) == 1" );// officially disabled
 	end;
 }
 
@@ -1775,8 +1765,7 @@ izlude,179,75,3	script	Airship#iz	4_BULLETIN_BOARD2,3,3,{
 	}
 
 OnInit:
-	questinfo 7475, QTYPE_QUEST, 0;
-	setquestinfo_req 7475,7474,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7475) && isbegin_quest(7474) == 1" );
 	end;
 
 OnTouch:
@@ -1918,8 +1907,7 @@ izlude,207,167,3	script	Arena#iz	4_BULLETIN_BOARD2,3,3,{
 	}
 
 OnInit:
-	questinfo 7476, QTYPE_QUEST, 0;
-	setquestinfo_req 7476,7474,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7476) && isbegin_quest(7474) == 1" );
 	end;
 
 OnTouch:
@@ -2061,8 +2049,7 @@ izlude,45,94,3	script	Bulletin Board#iz	4_BULLETIN_BOARD2,3,3,{
 	}
 
 OnInit:
-	questinfo 7477, QTYPE_QUEST, 0;
-	setquestinfo_req 7477,7474,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7477) && isbegin_quest(7474) == 1" );
 	end;
 
 OnTouch:
@@ -2275,8 +2262,7 @@ iz_ac01,59,43,3	script	Therapist#ac	4_M_6THPRIN1,{
 	}
 
 OnInit:
-	questinfo 7478, QTYPE_QUEST, 0;
-	setquestinfo_req 7478,4269,2;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7478) && isbegin_quest(4269) == 2" );
 	end;
 }
 
@@ -2419,8 +2405,7 @@ izlude,140,249,7	script	Academy Student#0	4_M_NOV_RUMIN,{
 	end;
 
 OnInit:
-	questinfo 7479, QTYPE_QUEST, 1;
-	setquestinfo_req 7479,7478,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7479) && isbegin_quest(7478) == 1" );
 	end;
 }
 
@@ -2589,7 +2574,7 @@ izlude,140,260,3	script	Instructor Argos#iz	4_M_LIEMAN,{
 	}
 
 OnInit:
-	questinfo 15001, QTYPE_QUEST, 0, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "Class == Job_Novice && !isbegin_quest(15001)" );
 	end;
 }
 
@@ -2800,7 +2785,7 @@ iz_ac01,100,39,5	script	Academy Receptionist#1	4_F_01,{
 	}
 
 OnInit:
-	questinfo 4269, QTYPE_QUEST, 0, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "Class == Job_Novice && !isbegin_quest(4269)" );
 	end;
 }
 
@@ -3657,7 +3642,7 @@ izlude,115,181,5	script	Shop Helper#iz	4_F_KHELLISIA,{
 	}
 
 OnInit:
-	questinfo 1237, QTYPE_QUEST, 0;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(1237)" );
 	end;
 }
 
@@ -3843,7 +3828,7 @@ iz_ac01,53,74,3	script	Attribute Expert#ac	1_M_WIZARD,{
 	}
 
 OnInit:
-	questinfo 2299, QTYPE_QUEST, 0;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(2299)" );
 	end;
 }
 
@@ -4396,10 +4381,7 @@ iz_ac01,147,50,3	script	Dacquoise#ac	4_COOK,{
 	}
 
 OnInit:
-	questinfo 14154, QTYPE_QUEST, 1, Job_Novice;
-	questinfo 14155, QTYPE_QUEST, 1, Job_Novice;
-	questinfo 14156, QTYPE_QUEST, 1, Job_Novice;
-	questinfo 14157, QTYPE_QUEST, 1, Job_Novice;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "Class == Job_Novice && (!isbegin_quest(14154) || !isbegin_quest(14155) || !isbegin_quest(14156) || !isbegin_quest(14157))" );
 	end;
 }
 
@@ -4738,16 +4720,8 @@ L_Quest:
 	}
 
 OnInit:
-	questinfo 11339, QTYPE_QUEST ,0 ,Job_Novice;
-	questinfo 11340, QTYPE_QUEST ,0 ,Job_Novice;
-	questinfo 11341, QTYPE_QUEST ,0 ,Job_Novice;
-	questinfo 11342, QTYPE_QUEST ,0 ,Job_Novice;
-	questinfo 11344, QTYPE_QUEST ,0 ,Job_Novice;
-	setquestinfo_req 11339,4269,2;
-	setquestinfo_req 11340,4269,2;
-	setquestinfo_req 11341,4269,2;
-	setquestinfo_req 11342,4269,2;
-	setquestinfo_req 11344,4269,2;
+	questinfo( QTYPE_QUEST, QMARK_NONE,
+		"Class == Job_Novice && isbegin_quest(4269) == 2 && (!isbegin_quest(11339) || !isbegin_quest(11340) || !isbegin_quest(11341) || !isbegin_quest(11342) || !isbegin_quest(11344))" );
 	end;
 }
 
@@ -4907,7 +4881,7 @@ iz_ac01,45,80,5	script	Adept Adventurer#ac	4_M_JOB_BLACKSMITH,{
 	}
 
 OnInit:
-	questinfo 2298, QTYPE_QUEST, 0;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(2298)" );
 	end;
 }
 
@@ -9569,8 +9543,7 @@ gef_fild07,89,208,6	script	Magician's Guild Guide#1	2_F_MAGICMASTER,{
 	close;
 
 OnInit:
-	questinfo 9265, QTYPE_QUEST, 1;
-	setquestinfo_req 9265,9264,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(9265) && isbegin_quest(9264) == 1" );
 	end;
 }
 
@@ -9614,8 +9587,7 @@ geffen,43,123,6	script	Magician's Guild Guide#2	2_F_MAGICMASTER,{
 	close;
 
 OnInit:
-	questinfo 9266, QTYPE_QUEST, 1;
-	setquestinfo_req 9266,9265,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(9266) && isbegin_quest(9265) == 1" );
 	end;
 }
 
@@ -10805,12 +10777,9 @@ iz_ac02,52,136,3	script	Guest Lecturer Mayssel#0	4_F_MAYSEL,{
 	}
 
 OnInit:
-	questinfo 7480, QTYPE_QUEST, 0, Job_Novice;
-	setquestinfo_req 7480,4269,2;
-	questinfo 7483, QTYPE_QUEST, 0;
-	setquestinfo_req 7483,7481,1,7482,1;
-
-	// questinfo 7495, QTYPE_QUEST, 0;// officially disabled
+	questinfo( QTYPE_QUEST, QMARK_NONE, "Class == Job_Novice && !isbegin_quest(7480) && isbegin_quest(4269) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7483) && isbegin_quest(7481) == 1 && isbegin_quest(7482) == 1" );
+	// questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7495)" );// officially disabled
 	// setquestinfo_req 7495,7484,2,7485,3;
 	end;
 }
@@ -11333,10 +11302,8 @@ iz_ac02,49,134,5	script	Vicente#ac	4_M_HUMAN_02,{
 	}
 
 OnInit:
-	questinfo 7481, QTYPE_QUEST, 0;
-	setquestinfo_req 7481,7480,1;
-	questinfo 7484, QTYPE_QUEST, 0;
-	setquestinfo_req 7484,7483,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7481) && isbegin_quest(7480) == 1" );
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7484) && isbegin_quest(7483) == 1" );
 	end;
 }
 
@@ -11773,10 +11740,8 @@ iz_ac02,55,134,3	script	Verkhasel#ac	4_M_GUILLOTINE,{
 	}
 
 OnInit:
-	questinfo 7482, QTYPE_QUEST, 0;
-	setquestinfo_req 7482,7480,1;
-	questinfo 7485, QTYPE_QUEST, 0;
-	setquestinfo_req 7485,7483,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7482) && isbegin_quest(7480) == 1" );
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7485) && isbegin_quest(7483) == 1" );
 	end;
 }
 
@@ -11944,8 +11909,7 @@ iz_ac02,62,139,3	script	Lumin#ac	4_M_NOV_RUMIN,{
 	}
 
 OnInit:
-	questinfo 7487, QTYPE_QUEST, 0;
-	setquestinfo_req 7487,7485,1;
+	questinfo( QTYPE_QUEST, QMARK_NONE, "!isbegin_quest(7487) && isbegin_quest(7485) == 1" );
 	end;
 }
 
@@ -12810,8 +12774,7 @@ izlude,153,126,1	script	Refinery Owner Han#iz	4_M_02,{
 	}
 
 OnInit:
-	questinfo 5153, QTYPE_QUEST, 1;
-	setquestinfo_level 5153,1,20;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel <= 20 && !isbegin_quest(5153)" );
 	end;
 }
 
@@ -13950,8 +13913,7 @@ izlude,96,125,7	script	Enchanter Mounds#iz	4_CAT_SAILOR2,{
 	}
 
 OnInit:
-	questinfo 5157, QTYPE_QUEST, 1;
-	setquestinfo_level 5157,1,20;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel <= 20 && !isbegin_quest(5157)" );
 	end;
 }
 

+ 1956 - 0
npc/re/merchants/eden_market.txt

@@ -0,0 +1,1956 @@
+//===== rAthena Script =======================================
+//= Paradise Group Market
+//===== By: ==================================================
+//= Anity99
+//===== Current Version: =====================================
+//= 1.0.2
+//===== Compatible With: =====================================
+//= rAthena Project
+//===== Description: =========================================
+//= The Para Market is an NPC vending system in which certain monster-drop
+//= items are available from NPCs at a high price. Items are only available
+//= from designated Para Market NPCs. The Para Market is open all day and
+//= all week, however there are certain NPCs that are only available on
+//= the weekends. Items sold in the Para Market are sold in limited
+//= quantities for the entire server. It is unknown how often they restock
+//= their wares.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [Nyalin]
+//= 1.0.1 Convert to Hercules [Ridley8819]
+//= 1.0.2 Convert to rAthena [Anity99]
+//= 1.0.3 Fix typos and update marketshop [Anity99]
+//============================================================
+
+// $event_paramk, 0 // Holiday Wednesday
+// $event_paramk, 1 // Monday, Tuesday, Thursday, Friday, Saturday, Sunday
+// $event_paramk, 2 // Friday, Saturday, Sunday
+// $event_paramk, 3 // Saturday, Sunday
+// $event_paramk, 4 // Late Saturday, Sunday
+
+function	script	F_CoolDown	{
+	if (@cd_marketshop + getarg(0) > gettimetick(2))
+		end;
+	@cd_marketshop = gettimetick(2);
+	return;
+}
+
+// Shop NPC
+// Limited
+-	marketshop	para_coin10	FAKE_NPC,6304:500000:10,6080:100000:10,6081:300000:10,6380:1000000:1000,6004:100000:1
+
+-	marketshop	para_hei10	FAKE_NPC,6608:150000:1,6607:20000:1,6755:200000:1,7642:10000:1,22687:200000:1,23016:1000000:1
+
+-	marketshop	para_key10	FAKE_NPC,7026:100000:10,7027:100000:10 // todo
+
+-	marketshop	para_wp00	FAKE_NPC,1181:10000000:1
+
+-	marketshop	para_arm10	FAKE_NPC,5007:2000000:1
+
+-	marketshop	para_ptn00	FAKE_NPC,678:80000:999,12016:50000:9999,525:100000:1000,12422:40000:100,12423:50000:100,12425:40000:100,12426:50000:100
+
+-	marketshop	para_ptn10	FAKE_NPC,505:40000:100,12679:100000:500,12676:30000:500,12680:50000:100
+
+-	marketshop	para_itm00	FAKE_NPC,12106:1500000:100,12107:500000:100,616:2500000:100,12194:200000:100
+
+-	marketshop	para_itm10	FAKE_NPC,12008:5000:99999,12009:5000:99999,12012:5000:100,12010:5000:100,12011:5000:100,12013:20000:100,12014:80000:100,7931:5000:100
+
+-	marketshop	para_seed10	FAKE_NPC,12290:5000:100,12376:5000:100,12291:10000:100,12377:10000:100,576:2000:100,587:2000:100,526:10000:100,607:70000:20,608:50000:20
+
+-	marketshop	para_mora10	FAKE_NPC,11526:5000:100,11525:5000:1000,11520:50000:100,12574:20000:100
+
+-	marketshop	para_ref10	FAKE_NPC,998:10000:500,1003:10000:500,1002:10000:500,999:10000:500
+
+-	marketshop	para_ref20	FAKE_NPC,984:200000:10,985:200000:100,987:240000:1,988:600000:1,989:1200000:1
+
+-	marketshop	para_jew10	FAKE_NPC,969:100000:20,7289:50000:20,7290:50000:20,7291:50000:20,7292:50000:20,7293:50000:20,7294:50000:20,7295:50000:20,7296:50000:20,7297:50000:20
+
+-	marketshop	para_alc10	FAKE_NPC,971:20000:20,972:12000:20,970:12000:20:7136:7000:20,7135:18000:20
+
+-	marketshop	para_alc20	FAKE_NPC,1061:3000:1000,905:1000:1000,1059:1000:1000,7033:1000:1000,929:4000:1000
+
+-	marketshop	para_alc30	FAKE_NPC,1000:10000:100,1001:10000:100,990:10000:100,991:10000:100,992:10000:100,993:10000:100
+
+-	marketshop	para_fod10	FAKE_NPC,6252:40000:100,6253:8000:100,6254:30000:100,6256:15000:100,6257:15000:100,6259:15000:100,6260:10000:100,22658:80000:50,22569:100000:50
+
+-	marketshop	para_mag10	FAKE_NPC,12108:20000:99999,717:1500:99999,715:4500:99999,716:4500:99999,14512:100000:100,14513:100000:100,14514:100000:100,12737:500:99999,12734:1500:99999,12738:2000:100,12735:3000:50,12736:10000:10,6360:200:99999,6363:200:99999,6361:200:99999,6362:200:99999
+
+-	marketshop	para_mag11	FAKE_NPC,717:1500:99999,12737:500:99999,12734:1500:99999,6360:200:99999,6363:200:99999,6361:200:99999,6362:200:99999
+
+-	marketshop	para_mag20	FAKE_NPC,12119:8000:100,12121:8000:100,12120:5000:100,12118:15000:100
+
+-	marketshop	para_plt01	FAKE_NPC,709:10000:50,7932:4000:99999,7933:4000:99999,7934:4000:99999,7935:4000:99999,7936:4000:99999,7937:4000:99999
+
+// Update Market Shop
+-	script	Update_Shop	-1,{
+OnInit:
+OnClock0000:
+	npcshopupdate "para_coin10",6304,0,1;
+	npcshopupdate "para_coin10",6080,0,1;
+	npcshopupdate "para_coin10",6081,0,1;
+	npcshopupdate "para_coin10",6380,0,1;
+	npcshopupdate "para_coin10",6004,0,1;
+	npcshopupdate "para_hei10",6608,0,1;
+	npcshopupdate "para_hei10",6607,0,1;
+	npcshopupdate "para_hei10",6755,0,1;
+	npcshopupdate "para_hei10",7642,0,1;
+	npcshopupdate "para_hei10",22687,0,1;
+	npcshopupdate "para_hei10",23016,0,1;
+	npcshopupdate "para_key10",7026,10;
+	npcshopupdate "para_key10",7027,10;
+	npcshopupdate "para_wp00",1181,0,1;
+	npcshopupdate "para_arm10",5007,0,1;
+	npcshopupdate "para_ptn00",678,0,999;
+	npcshopupdate "para_ptn00",12016,0,9999;
+	npcshopupdate "para_ptn00",525,0,1000;
+	npcshopupdate "para_ptn00",12422,0,100;
+	npcshopupdate "para_ptn00",12423,0,100;
+	npcshopupdate "para_ptn00",12425,0,100;
+	npcshopupdate "para_ptn00",12426,0,100;
+	npcshopupdate "para_ptn10",505,0,100;
+	npcshopupdate "para_ptn10",12679,0,500;
+	npcshopupdate "para_ptn10",12676,0,500;
+	npcshopupdate "para_ptn10",12680,0,100;
+	npcshopupdate "para_itm00",12106,0,100;
+	npcshopupdate "para_itm00",12107,0,100;
+	npcshopupdate "para_itm00",616,0,100;
+	npcshopupdate "para_itm00",12194,0,100;
+	npcshopupdate "para_itm10",12008,0,99999;
+	npcshopupdate "para_itm10",12009,0,99999;
+	npcshopupdate "para_itm10",12012,0,100;
+	npcshopupdate "para_itm10",12010,0,100;
+	npcshopupdate "para_itm10",12011,0,100;
+	npcshopupdate "para_itm10",12013,0,100;
+	npcshopupdate "para_itm10",12014,0,100;
+	npcshopupdate "para_itm10",7931,0,100;
+	npcshopupdate "para_seed10",12290,0,100;
+	npcshopupdate "para_seed10",12376,0,100;
+	npcshopupdate "para_seed10",12291,0,100;
+	npcshopupdate "para_seed10",12377,0,100;
+	npcshopupdate "para_seed10",576,0,100;
+	npcshopupdate "para_seed10",587,0,100;
+	npcshopupdate "para_seed10",526,0,100;
+	npcshopupdate "para_seed10",607,0,20;
+	npcshopupdate "para_seed10",608,0,20;
+	npcshopupdate "para_mora10",11526,0,100;
+	npcshopupdate "para_mora10",11525,0,1000;
+	npcshopupdate "para_mora10",11520,0,100;
+	npcshopupdate "para_mora10",12574,0,100;
+	npcshopupdate "para_ref10",998,0,500;
+	npcshopupdate "para_ref10",1003,0,500;
+	npcshopupdate "para_ref10",1002,0,500;
+	npcshopupdate "para_ref10",999,0,500;
+	npcshopupdate "para_ref20",984,0,10;
+	npcshopupdate "para_ref20",985,0,100;
+	npcshopupdate "para_ref20",987,0,1;
+	npcshopupdate "para_ref20",988,0,1;
+	npcshopupdate "para_ref20",989,0,1;
+	npcshopupdate "para_jew10",969,0,20;
+	npcshopupdate "para_jew10",7289,0,20;
+	npcshopupdate "para_jew10",7290,0,20;
+	npcshopupdate "para_jew10",7291,0,20;
+	npcshopupdate "para_jew10",7292,0,20;
+	npcshopupdate "para_jew10",7293,0,20;
+	npcshopupdate "para_jew10",7294,0,20;
+	npcshopupdate "para_jew10",7295,0,20;
+	npcshopupdate "para_jew10",7296,0,20;
+	npcshopupdate "para_jew10",7297,0,20;
+	npcshopupdate "para_alc10",971,0,20;
+	npcshopupdate "para_alc10",972,0,20;
+	npcshopupdate "para_alc10",970,0,20;
+	npcshopupdate "para_alc10",7136,0,20;
+	npcshopupdate "para_alc10",7135,0,20;
+	npcshopupdate "para_alc20",1061,0,1000;
+	npcshopupdate "para_alc20",905,0,1000;
+	npcshopupdate "para_alc20",1059,0,1000;
+	npcshopupdate "para_alc20",7033,0,1000;
+	npcshopupdate "para_alc20",929,0,1000;
+	npcshopupdate "para_alc30",1000,0,100;
+	npcshopupdate "para_alc30",1001,0,100;
+	npcshopupdate "para_alc30",990,0,100;
+	npcshopupdate "para_alc30",991,0,100;
+	npcshopupdate "para_alc30",992,0,100;
+	npcshopupdate "para_alc30",993,0,100;
+	npcshopupdate "para_fod10",6252,0,100;
+	npcshopupdate "para_fod10",6253,0,100;
+	npcshopupdate "para_fod10",6254,0,100;
+	npcshopupdate "para_fod10",6256,0,100;
+	npcshopupdate "para_fod10",6257,0,100;
+	npcshopupdate "para_fod10",6259,0,100;
+	npcshopupdate "para_fod10",6260,0,100;
+	npcshopupdate "para_fod10",22658,0,50;
+	npcshopupdate "para_fod10",22659,0,50;
+	npcshopupdate "para_mag10",12108,0,99999;
+	npcshopupdate "para_mag10",717,0,99999;
+	npcshopupdate "para_mag10",715,0,99999;
+	npcshopupdate "para_mag10",716,0,99999;
+	npcshopupdate "para_mag10",14512,0,100;
+	npcshopupdate "para_mag10",14513,0,100;
+	npcshopupdate "para_mag10",14514,0,100;
+	npcshopupdate "para_mag10",12737,0,99999;
+	npcshopupdate "para_mag10",12734,0,99999;
+	npcshopupdate "para_mag10",12738,0,100;
+	npcshopupdate "para_mag10",12735,0,50;
+	npcshopupdate "para_mag10",12736,0,10;
+	npcshopupdate "para_mag10",6360,0,99999;
+	npcshopupdate "para_mag10",6363,0,99999;
+	npcshopupdate "para_mag10",6361,0,99999;
+	npcshopupdate "para_mag10",6362,0,99999;
+	npcshopupdate "para_mag11",717,0,99999;
+	npcshopupdate "para_mag11",12737,0,99999;
+	npcshopupdate "para_mag11",12734,0,99999;
+	npcshopupdate "para_mag11",6360,0,99999;
+	npcshopupdate "para_mag11",6363,0,99999;
+	npcshopupdate "para_mag11",6361,0,99999;
+	npcshopupdate "para_mag11",6362,0,99999;
+	npcshopupdate "para_mag20",12119,0,100;
+	npcshopupdate "para_mag20",12121,0,100;
+	npcshopupdate "para_mag20",12120,0,100;
+	npcshopupdate "para_mag20",12118,0,100;
+	npcshopupdate "para_plt01",709,0,50;
+	npcshopupdate "para_plt01",7932,0,99999;
+	npcshopupdate "para_plt01",7933,0,99999;
+	npcshopupdate "para_plt01",7934,0,99999;
+	npcshopupdate "para_plt01",7935,0,99999;
+	npcshopupdate "para_plt01",7936,0,99999;
+	npcshopupdate "para_plt01",7937,0,99999;
+	end;
+}
+
+// General Sales
+-	shop	para_wp01	FAKE_NPC,1501:-1,1504:-1,1507:-1,1510:-1,1513:-1,1519:-1,1516:-1,1522:-1,1601:-1,1604:-1,1607:-1,1610:-1,1617:-1,1619:-1,1801:-1,1803:-1,1805:-1,1807:-1,1811:-1,1809:-1
+
+-	shop	para_wp02	FAKE_NPC,1101:-1,1104:-1,1107:-1,1110:-1,1113:-1,1122:-1,1119:-1,1123:-1,1129:-1,1116:-1,1151:-1,1154:-1,1157:-1,1160:-1,1146:-1
+
+-	shop	para_wp03	FAKE_NPC,1701:-1,1704:-1,1707:-1,1710:-1,1713:-1,1714:-1,1718:-1,1721:-1,1901:-1,1903:-1,1905:-1,1950:-1,1952:-1,1954:-1
+
+-	shop	para_wp04	FAKE_NPC,1201:-1,1204:-1,1207:-1,1210:-1,1213:-1,1216:-1,1219:-1,1222:-1,13003:-1,1245:-1,1247:-1,1248:-1,1249:-1,13000:-1,1250:-1,1252:-1,1254:-1
+
+-	shop	para_wp05	FAKE_NPC,1301:-1,1351:-1,1354:-1,1357:-1,1360:-1,1401:-1,1404:-1,1407:-1,1451:-1,1454:-1,1457:-1,1460:-1,1463:-1,1410:-1
+
+-	shop	para_arm01	FAKE_NPC,2328:-1,2314:-1,2312:-1,2316:-1,2341:-1,2340:-1,2411:-1,2228:-1,2230:-1
+
+-	shop	para_arm02	FAKE_NPC,2101:-1,2103:-1,2105:-1,2107:-1
+
+-	shop	para_hat01	FAKE_NPC,2301:-1,2303:-1,2305:-1,2307:-1,2309:-1,2335:-1,2323:-1,2325:-1,2321:-1,2332:-1,2501:-1,2503:-1,2505:-1,2401:-1,2403:-1,2405:-1
+
+-	shop	para_hat02	FAKE_NPC,2239:-1,2203:-1,2201:-1,2243:-1,2242:-1,2205:-1,2220:-1,2226:-1,2222:-1,5114:-1,2216:-1,5092:-1,2218:-1,2211:-1,2212:-1,2208:-1,2232:-1
+
+-	shop	para_ptn01	FAKE_NPC,501:-1,502:-1,503:-1,504:-1,645:-1,656:-1,657:-1
+
+-	shop	para_itm01	FAKE_NPC,7940:-1,1065:-1
+
+-	shop	para_seed01	FAKE_NPC,522:-1
+
+-	shop	para_mora01	FAKE_NPC,11522:-1,11523:-1,11524:-1,11519:-1
+
+-	shop	para_fod01	FAKE_NPC,7482:-1,577:-1,580:-1,7457:-1,581:-1,7453:-1,7455:-1,7454:-1,7456:-1,7452:-1,579:-1
+
+-	shop	para_unm01	FAKE_NPC,537:-1,643:-1,10013:-1,10014:-1,6113:-1,6114:-1,6115:-1,6110:-1,6100:-1,6098:-1,6112:-1,6104:-1,6108:-1,6111:-1,6095:-1,7824:-1,6097:-1,6107:-1,6105:-1,6099:-1,25231:1000,25232:1000,25233:1000
+
+
+// setting map-variable
+-	script	MV_Eden Market Group	FAKE_NPC,{
+OnInit:
+OnClock0000:
+	switch( gettime(DT_DAYOFWEEK) ) {
+	case WEDNESDAY:
+		$event_paramk = 0;
+		break;
+	case FRIDAY:
+		$event_paramk = 2;
+		break;
+	case SATURDAY:
+		if (gettime(DT_HOUR) > 21)
+			$event_paramk = 4;
+		else
+			$event_paramk = 3;
+		break;
+	case THURSDAY:
+	default:
+		$event_paramk = 1;
+		break;
+	}
+	end;
+
+OnSat2200:
+	$event_paramk = 4;
+	end;
+}
+
+// Eden Market Group Hustler
+moc_para01,106,38,4	script	Market Group Hustler#ent	4_M_YOYOROGUE,{
+	mes "[Hustler]";
+	mes "Hey, adventurer.";
+	mes "I can take you to somewhere nice. Are you interested?";
+	next;
+	switch (select("Move to Eden Market Group!:About Eden Market Group.:Cancel.")) {
+	case 1:
+		mes "[Hustler]";
+		mes "Moving~!";
+		close2;
+		warp "paramk",97,17;
+		end;
+	case 2:
+		mes "[Hustler]";
+		mes "Hahaha... The Eden Market Group is a place where merchants gather around to sell various items.";
+		mes "And I don't mean common stuff like Jellopy, which you can acquire anywhere. Here, we only deal in real goods.";
+		next;
+		mes "[Hustler]";
+		mes "Simple ingredients, precious stones, rare items from dungeons and excavation sites, and exotic artifacts that hail from another dimension...";
+		mes "Everything you could ever want!";
+		next;
+		select("You mean, this is a black market?!");
+		mes "[Hustler]";
+		mes "Ah... I wouldn't say that.";
+		mes "This marketplace is, say, technically legal...";
+		mes "Keep in mind that most special products are of ^4d4dfflimited quantity^000000. If you are late, they might be sold out.";
+		next;
+		mes "[Hustler]";
+		mes "Don't expect discounts for most limited quantity items.";
+		mes "You have to pay the full price.";
+		next;
+		mes "[Hustler]";
+		mes "Adventurers sometimes come by to sell what they have found on their expeditions.";
+		mes "But you have to see for yourself!";
+		next;
+		mes "[Hustler]";
+		mes "Keep in mind that most stores are closed one day out of the week; ^4d4dffmost stores are not open on Wednesdays^000000.";
+		mes "Though, not all of them close on Wednesdays; majority of them are still open.";
+		next;
+		mes "[Hustler]";
+		mes "More special items are sold on weekends.";
+		mes "I have even seen an <ITEM>Izidor<INFO>709</INFO></ITEM> being sold~";
+		mes "It was amazing.";
+		mes "Of course it was super expensive and only a handful were up for sale.";
+		next;
+		mes "[Hustler]";
+		mes "How about it? Interested?";
+		mes "Isn't it worth paying a visit?";
+		mes "Hahahahaha!";
+		close;
+	case 3:
+		mes "[Hustler]";
+		mes "Come by anytime, if you want to go to the Eden Market Group!";
+		close;
+	}
+}
+
+// Eden Market Group Guide
+paramk,101,22,3	script	Market Group Guide#info	4_F_ZONDAGIRL,{
+	mes "[Guide]";
+	mes "Hello. Welcome to Eden Market Group, the official marketplace run by the continental merchant coalition, supported by the Eden Group.";
+	next;
+	switch (select("About when we're open.:About Special Products.:About Eden Market Group.:Cancel.")) {
+	case 1:
+		mes "[Guide]";
+		mes "Eden Market Group is a marketplace that contains many different shops.";
+		next;
+		mes "[Guide]";
+		mes "Wednesday is an official holiday designated by the marketplace; most shops are closed on this day.";
+		next;
+		mes "[Guide]";
+		mes "However, depending on the owner's wishes, and the type of items being offered, some shops remain partially open even on the holiday.";
+		next;
+		mes "[Guide]";
+		mes "And, some shops offer special items on certain days of the week. Keep that in mind.";
+		close;
+	case 2:
+		mes "[Guide]";
+		mes "Some shops will sell different items on weekends, certain days of the week, or even during certain hours; these items are different than their usual daily items.";
+		next;
+		mes "[Guide]";
+		mes "'Wonderful Friends' and 'Strong Friends' will sell one rare item each weekend.";
+		mes "'Miner's Coalition' will sell the anvil for blacksmithing only on weekends.";
+		next;
+		mes "[Guide]";
+		mes "I cannot tell you what items individual shops sell, because they are all different.";
+		mes "Why don't you find out for yourself by visiting often?";
+		close;
+	case 3:
+		mes "[Guide]";
+		mes "There are many people with the soul of a merchant that would like to sell their items to people in need of such.";
+		mes "Eden Market Group has designated a place for such people to buy and sell.";
+		next;
+		mes "[Guide]";
+		mes "We provide the means for goods that would otherwise have been contraband to be bought and sold in a fair and transparent manner, working in conjunction with the merchant coalitions and adventurers.";
+		next;
+		mes "[Guide]";
+		mes "Some people mutter that Eden Market Group is a black market... Haha, what a silly idea...";
+		mes "We are merely a merchant coalition.";
+		next;
+		mes "[Guide]";
+		mes "A portion of our profits go towards running the Eden Group, an adventurer's guild.";
+		mes "You can sell the loot from your adventures here, and the profits we make go towards providing services that benefit you. We are killing two birds with one stone, really.";
+		next;
+		mes "[Guide]";
+		mes "Keep in mind that limited quantity items will never go on sale!";
+		close;
+	case 4:
+		mes "[Guide]";
+		mes "Have a good time!";
+		close;
+	}
+
+OnTimer60000:
+	npctalk "Welcome. This is the Eden Market Group.";
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Guards
+paramk,103,17,3	script	Market Guard#1	4_M_YOUNGKNIGHT,{
+	callfunc("F_CoolDown", 5);
+	switch (atoi(strnpcinfo(2))) {
+	default:
+		npctalk "Welcome.";
+		break;
+	case 3:
+		npctalk "Welcome to the Eden Market Group.";
+		break;
+	case 4:
+		npctalk "How are you? This is the Eden Market Group.";
+		break;
+	case 5:
+		npctalk "Thank you for shopping at the Eden Market Group.";
+		break;
+	case 6:
+		npctalk "Welcome. The Eden Market Group welcomes you.";
+		break;
+	}
+	end;
+}
+
+// Guard Duplicates
+paramk,92,17,6	duplicate(Market Guard#1)	Market Guard#2	4_M_YOUNGKNIGHT
+paramk,53,47,3	duplicate(Market Guard#1)	Market Guard#3	4_M_YOUNGKNIGHT
+paramk,142,48,3	duplicate(Market Guard#1)	Market Guard#4	4_M_YOUNGKNIGHT
+paramk,142,67,3	duplicate(Market Guard#1)	Market Guard#5	4_M_YOUNGKNIGHT
+paramk,53,67,3	duplicate(Market Guard#1)	Market Guard#6	4_M_YOUNGKNIGHT
+
+
+// Center-North ConversationNPC
+// A wise customer
+paramk,78,44,3	script	A wise customer#gst01	4_TOWER_14,6,6,{
+OnTouch:
+	callfunc("F_CoolDown", 4);
+	npctalk "I am waiting for the weapon that will be sold on the weekends. I heard that if I come by on the right day, both the red version and the blue version would be offered.";
+	end;
+}
+
+// A dining customer
+paramk,119,80,3	script	A dining customer#gst02	4_M_CHN8GUEK,6,6,{
+OnTouch:
+	callfunc("F_CoolDown", 4);
+	npctalk "So spicy! I don't care if this is the 'taste of our homeland' or whatever, it's far too spicy! Aaaaaaahh!";
+	end;
+}
+
+// Customer
+paramk,106,61,3	script	Customer#gst03	4_TOWER_04,6,6,{
+OnTouch:
+	callfunc("F_CoolDown", 4);
+	npctalk "I come here when I need a break. I love this place. Comfortable, and lots of interesting items around.";
+	end;
+}
+
+// Window-shopper
+paramk,77,60,3	script	Window-shopper#gst04	4_TOWER_02,6,6,{
+OnTouch:
+	callfunc("F_CoolDown", 4);
+	npctalk "I wonder if it's really okay for me to window-shop all day without buying anything...";
+	end;
+}
+
+// Cassie
+paramk,113,56,3	script	Cassie#gst05	1_F_PUBGIRL,6,6,{
+	npctalk "Welcome to the Eden Market Group~ You want a fancy drink?";
+	mes "[Cassie]";
+	mes "Do you wish to buy a drink?";
+	next;
+	switch (select("Tropical Sograt.:Vermilion on the Beach.:No.")) {
+	case 1:
+		.@item = 12112;
+		break;
+	case 2:
+		.@item = 12113;
+		break;
+	case 3:
+		mes "[Cassie]";
+		mes "Have a good time.";
+		close;
+	}
+	if (Zeny < 800) {
+		mes "[Cassie]";
+		mes "A drink costs 800z.";
+		close;
+	}
+	mes "[Cassie]";
+	mes "Enjoy it";
+	Zeny -= 800;
+	getitem(.@item, 1);
+	close;
+
+OnTouch:
+	callfunc("F_CoolDown", 4);
+	npctalk "Welcome to the Eden Market Group. Do you want a fancy drink?";
+	end;
+}
+
+// Leria
+paramk,74,15,0	script	Leria#coin	4_M_BIBI,{
+	if ($event_paramk > 0) {
+		mes "[Leria]";
+		mes "I sell coins that I have collected from alternate dimensions.";
+		mes "Purchase whatever catches your eye.";
+		mes "Be warned: they are rather pricey. I had to go through immense trouble in order to procure them.";
+		next;
+		if (select("See what is up for sale.:Cancel.") == 1) {
+			mes "[Leria]";
+			mes "I may not have any stock left since I sell only a handful of items.";
+			close2;
+			callshop "para_coin10",1;
+			end;
+		}
+		mes "[Leria]";
+		mes "Since I scour the world to find the items that I sell, the price is high...";
+		mes "But there are those who buy them anyway.";
+		next;
+		mes "[Leria]";
+		mes "Well, those who need them must pay the price. Isn't that so?";
+		close;
+	} else { // holiday
+		mes "[Leria]";
+		mes "Ah... Today is the marketplace holiday.";
+		mes "Come back tomorrow if you need coins.";
+		close;
+	}
+}
+
+// Heimhunter
+paramk,71,15,3	script	Heimhunter#hei	4_GEFFEN_11,{
+	if ($event_paramk > 0) {
+		mes "[Heimhunter]";
+		mes "Ah, are you the customer that wants 'that' from the ancient castle?";
+		mes "I can only get one per day, but I will sell it.";
+		next;
+		if (select("See the item.:Cancel.") == 1) {
+			mes "[Heimhunter]";
+			mes "There's only one..";
+			mes "It might have been bought by someone else already.";
+			mes "Please understand.";
+			close2;
+			callshop "para_hei10",1;
+			end;
+		}
+		mes "[Heimhunter]";
+		mes "As you wish.";
+		close;
+	} else { // holiday
+		mes "[Heimhunter]";
+		mes "Today is the official market holiday.";
+		mes "I will take a break, too.";
+		close;
+	}
+}
+
+// Zephet
+paramk,68,15,0	script	Zephet#key	4_M_HUMERCHANT,{
+	if ($event_paramk > 3) {
+		mes "[Zephet]";
+		mes "Do you need keys?";
+		mes "I may have some extra keys for the clock tower?..";
+		next;
+		if (select("Buy keys.:Cancel.") == 1) {
+			mes "[Zephet]";
+			mes "I gather and sell the keys for the clock tower all by myself...";
+			mes "Even though I scavenge for them all week, there's not a lot available.";
+			mes "They may be sold out already.";
+			close2;
+			callshop "para_key10",1;
+			end;
+		}
+		mes "[Zephet]";
+		mes "You have no need of keys?";
+		mes "Remember that I sell keys here only on weekends.";
+		mes "Just for your information.";
+		close;
+	} else { // holiday
+		mes "[Zephet]";
+		mes "I don't have enough keys yet.";
+		mes "Come back after Saturday afternoon.";
+		close;
+	}
+}
+
+
+// Strong Friends - Weapon shop
+// Sign
+paramk,72,33,0	script	[Strong Friends]#wp00	HIDDEN_NPC,{
+	mes " == Strong Friends == ";
+	mes "From common weapons to priceless jewel-encrusted swords!";
+	mes "Every weapon that you could ever want is here for your perusal.";
+	close;
+}
+
+// Miffy
+paramk,65,30,3	script	Miffy#wp01	4_F_LGTGIRL,{
+	if ($event_paramk > 1) {
+		mes "[Miffy]";
+		mes "A limited collection, only available on fiery Friday, Saturday and Sunday!";
+		mes "We offer an assortment of ancient weapons that adventurers have retrieved from dungeons!";
+		next;
+		if (select("Look at the items.:Cancel.") == 1) {
+			mes "[Miffy]";
+			mes "Let us show you the 'Strong Friends' special collection.";
+			mes "If you open the chest and there's nothing there, ";
+			mes "That means the weapon has already been sold.";
+			mes "The spoils go toward people with quick reflexes.";
+			close2;
+			callshop "para_wp00",1;
+			end;
+		}
+		mes "[Miffy]";
+		mes "Special weapons sold on weekends!";
+		mes "Come see us anytime!";
+		close;
+	} else { // Wednesday Holiday
+		mes "[Miffy]";
+		mes "Hello. This is the weapon shop 'Strong Friends'.";
+		mes "We sell weapons that adventurers retrieve from dungeons and in battle, ";
+		mes "roving over the continent.";
+		next;
+		mes "[Miffy]";
+		mes "^000000Friday-Saturday-Sunday, a limited weapon collection offered for 3 consecutive days!^000000";
+		mes "Come see us anytime!";
+		close;
+	}
+}
+
+// Nelsha
+paramk,70,31,3	script	Nelsha#wp02	4_M_SITDOWN,{
+	mes "[Nelsha]";
+	mes "Hello.";
+	mes "This is 'Strong Friends', where a range of basic weapons are available for your perusal.";
+	next;
+	setarray .@shopname$[0], "para_wp01", "para_wp02", "para_wp03", "para_wp04", "para_wp05";
+	setarray .@shopdesc$[0], "Maces, Rods and Knuckles", "One-Handed Swords and Two-Handed Sword", "Bows, Innstruments and Whips", "Daggers and Katars", "Axes and Spears";
+	.@s = select("Maces, Rods, Knuckles:One-Handed Swords, Two-Handed Sword:Bows, Innstruments, Whips:Daggers, Katars:Axes, Spears:Cancel") - 1;
+	if (.@s == 5) {
+		mes "[Nelsha]";
+		mes "Thank you for shopping.";
+		close;
+	}
+	mes "[Nelsha]";
+	mes "I will show you " + .@shopdesc$[.@s];
+	close2;
+	callshop(.@shopname$[.@s], 1);
+	end;
+}
+
+
+// Reliable Friends
+// Sign
+paramk,72,33,3	script	[Reliable Friends]#arm00	HIDDEN_NPC,{
+	mes " == Reliable Friends == ";
+	mes "Do you need shields, armor, and sturdy helmets?";
+	mes "You can rely on Reliable Friends!";
+	close;
+}
+
+// Coco
+paramk,78,31,3	script	Coco#arm01	4_F_SITDOWN,{
+	mes "[Coco]";
+	mes "Do you need sturdy armors to protect your frail body?";
+	mes "Or shields, to block the blows of your enemies?";
+	next;
+	switch (select("Look at armors.:Look at shields.:Cancel.")) {
+	case 1:
+		mes "[Coco]";
+		mes "Cheap and sturdy armor.";
+		close2;
+		callshop "para_arm01",1;
+		end;
+	case 2:
+		mes "[Coco]";
+		mes "May, or may not, block blows made with reasonable force...";
+		close2;
+		callshop "para_arm02",1;
+		end;
+	case 3:
+		mes "[Coco]";
+		mes "Come again.";
+		close;
+	}
+}
+
+
+// Handsome Friends
+// Sign
+paramk,84,33,3	script	[Handsome Friends]#cst00	HIDDEN_NPC,{
+	mes " == Handsome Friends == ";
+	mes "A clothier for someone who loves to dress up!";
+	close;
+}
+
+// Minho Doh
+paramk,90,31,3	script	Minho Doh#cst01	4W_M_01,{
+	if ($event_paramk > 2) {
+		mes "[Minho Doh]";
+		mes "Limited item collection, only available on weekends!";
+		mes "Only one item. If you want it, purchase quickly! You know the drill.";
+		next;
+		if (select("See the collection.:Cancel.") == 1) {
+			mes "[Minho Doh]";
+			mes "Here is our special collection!";
+			mes "If all the chests are empty, that means you are too late!";
+			close2;
+			callshop "para_arm10",1;
+			end;
+		}
+		mes "[Minho Doh]";
+		mes "See you again!";
+		mes "Hahahahaha!";
+		close;
+	} else { // holiday
+		mes "[Minho Doh]";
+		mes "Do you want to peruse our special collection of items?";
+		mes "But the collection wouldn't be special if you can see them every day, right?";
+		next;
+		mes "[Minho Doh]";
+		mes "Come on weekends if you want to see our special collection.";
+		mes "We sell ONE item per day, on ^000000 Saturdays and Sundays^000000.";
+		next;
+		mes "[Minho Doh]";
+		mes "Hahahaha.. Aren't you looking forward to the special items soon to be revealed? Muhahahahaha!";
+		close;
+	}
+}
+
+// Lapelt
+paramk,94,32,3	script	Lapelt#hat01	4_M_LGTMAN,{
+	mes "[Lapelt]";
+	mes "Welcome! This is 'Handsome Friends', a clothier that will make you fashionable!";
+	mes "We sell common clothing and hats even on holidays.";
+	next;
+	switch (select("Clothes and shoes.:Hats and glasses.:Cancel.")) {
+	case 1:
+		mes "[Lapelt]";
+		mes "Don't look down on the items just because they are cheap.";
+		mes "They are well-made items from all over the world.";
+		close2;
+		callshop "para_hat01",1;
+		end;
+	case 2:
+		mes "[Lapelt]";
+		mes "Fashion comes from matching accessories!";
+		mes "With matching items and a good hat, you can stand on the apex of fashion!";
+		close2;
+		callshop "para_hat02",1;
+		end;
+	case 3:
+		mes "[Lapelt]";
+		mes "Goodbye.";
+		close;
+	}
+}
+
+
+// Meds for Pharmacists
+// Sign
+paramk,96,33,3	script	[Meds for Pharma]#ptn00	HIDDEN_NPC,{
+	mes " == Meds for Pharmacists == ";
+	mes "We sell assorted potions.";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Special potions - Mon, Tue, Thu, Fri, Sat";
+	mes "Common potions - every day";
+	close;
+}
+
+// Head Pharmacist
+paramk,100,30,3	script	Head Pharmacist#ptn01	4_F_SCIENCE,{
+	if ($event_paramk > 0) {
+		mes "[Head Pharmacist]";
+		mes "Potent poisons that will knock you out with one sip, meds that will protect your body and spirit, meds that will temporarily grant supernatural speed.";
+		mes "We have them all.";
+		mes "'Meds for Pharmacists', here to supply you with the medication you need.";
+		next;
+		if (select("Meds, please!:Cancel.") == 1) {
+			mes "[Head Pharmacist]";
+			mes "This is what we currently have left.";
+			mes "If there's nothing, it means that we are sold out.";
+			mes "We do not brew potions in large batches. Please understand.";
+			close2;
+			callshop "para_ptn00",1;
+			end;
+		}
+		mes "[Head Pharmacist]";
+		mes "Come back if you have questions about the meds.";
+		close;
+	} else { // holiday
+		mes "[Head Pharmacist]";
+		mes "Oh, you need potions?";
+		mes "We do not sell common meds. We stick to special potions.";
+		mes "And today is a holiday. We are currently brewing new potions.";
+		next;
+		mes "[Head Pharmacist]";
+		mes "I will show you a collection of our superior potions if you come back tomorrow, okay?";
+		mes "Hehe~";
+		close;
+	}
+}
+
+// Johanna
+paramk,106,32,3	script	Johanna#ptn02	4_M_BRZ_JACI,{
+	mes "[Johanna]";
+	mes "Welcome to 'Meds for Pharmacists'.";
+	mes "What do you need?";
+	next;
+	switch (select("Look at items.:Sell items.:Days of Operation.:Cancel.")) {
+	case 1:
+		mes "[Johanna]";
+		mes "Healing potions here.";
+		mes "Good potions sold at an affordable price.";
+		close2;
+		callshop "para_ptn01",1;
+		end;
+	case 2:
+		mes "[Johanna]";
+		mes "I will take them off your hands and pay you a hefty price.";
+		mes "Don't tell other people I paid so much.";
+		close2;
+		callshop "para_ptn01",2;
+		end;
+	case 3:
+		mes "[Johanna]";
+		mes "Most shops in the Eden Market Group do not operate on holidays.";
+		mes "Some shops remain open on holidays, however.";
+		next;
+		mes "[Johanna]";
+		mes "Our pharmacy offers common healing potions even on holidays, though not the special potions.";
+		mes "Take advantage of our services!";
+		close;
+	case 4:
+		mes "[Johanna]";
+		mes "Goodbye.";
+		close;
+	}
+}
+
+// Wyn, independent contractor || Name is too long
+paramk,106,27,3	script	Brewer Wyn#ptn03	4_M_ALCHE_A,{
+	if ($event_paramk > 0) {
+		mes "[Wyn]";
+		mes "..Hello...";
+		mes "This is 'For Meds Pharmacists'....";
+		mes "Do you need Blue Potions...?";
+		mes "I make 100 of them each day... yes... just me.";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Wyn]";
+			mes "Uhhh.. Not sure we have any left.";
+			mes "A moment please. If not, we are sold out..";
+			mes "Aaaaa... Do I have to make more.";
+			mes "Aaa... The stench of herbs";
+			mes "Feel like throwing up... Aaa..";
+			close2;
+			callshop "para_ptn10",1;
+			end;
+		}
+		mes "[Wyn]";
+		mes "Thank you.. Come again.";
+		close;
+	} else { // holiday
+		mes "[Wyn]";
+		mes "Uhhh... Headache..";
+		mes "I started working to pay off my college tuition...";
+		mes "I feel like throwing up. Surrounded by the smell of herbs all week.";
+		mes "Blerch-!";
+		close;
+	}
+}
+
+
+// We-Have-Everything
+// sign
+paramk,108,33,3	script	[WeHaveEverything]#itm00	HIDDEN_NPC,{
+	mes " == We-Have-Everything == ";
+	mes "Elemental quivers, Traps, A DIY kit for poisons.";
+	mes "Available always.";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Wed - holiday!";
+	mes "Fri, Sat, Sun - Event Sales!";
+	close;
+}
+
+// Is-this-your-lucky-day Napeed#itm01
+paramk,114,30,3	script	Lucky Day Napeed#itm01	4_F_03,{
+	if ($event_paramk > 0) {
+		mes "[Napeed]";
+		mes "Thank you for visiting during the weekend sale.";
+		mes "100 random item packages, sold on weekends only! Only one hundred available!";
+		mes "Do you have anything you want?";
+		next;
+		if (select("Look at items.:Cancel.")) {
+			mes "[Napeed]";
+			mes "The popular choices are, 'Box of accessories', 'Gift-wrapped Mask', 'Worn Album', 'Presents to take to your Hometown'...";
+			mes "If you do not see anything, it means we are sold out. Come back on next weekend~";
+			close2;
+			callshop "para_itm00",1;
+			end;
+		}
+		mes "[Napeed]";
+		mes "Thank you for frequenting 'We-Have-Everything'!";
+		close;
+	} else { // holiday
+		mes "[Napeed]";
+		mes "Welcome, welcome~! This store is 'We-Have-Everything'. Everything we do have, we have, and everything we don't have, we don't!";
+		mes "We are currently not open.";
+		mes "Today is a holiday, so we are brewing potions.";
+		close;
+	}
+}
+
+// Parayo
+paramk,118,31,3	script	Manager Parayo#itm02	4_F_KHELLISIA,{
+	if ($event_paramk > 0) {
+		mes "[Parayo]";
+		mes "Thank you for coming to 'We-Have-Everything'.";
+		mes "We sell assorted elemental quivers and traps.";
+		mes "Is there anything you want?";
+		next;
+		switch (select("Look at elemental quivers.:Look at traps.:Cancel.")) {
+		case 1:
+			mes "[Parayo]";
+			mes "We try to be stocked up in order to serve as many customers as possible";
+			mes "But sometimes we are sold out, unfortunately.";
+			close2;
+			callshop "para_itm10",1;
+			end;
+		case 2:
+			mes "[Parayo]";
+			mes "Here are the traps.";
+			mes "'We-Have-Everything' is always here for you.";
+			close2;
+			callshop "para_itm01",1;
+			end;
+		case 3:
+			mes "[Parayo]";
+			mes "Thank you for being a loyal customer of 'We-Have-Everything'.";
+			mes "Come again.";
+			close;
+		}
+	} else { // holiday
+		mes "[Parayo]";
+		mes "Hello, this is 'We-Have-Everything'.";
+		mes "Wednesdays are Eden Market Group official holidays, so we are not open during this time.";
+		mes "Goodbye.";
+		close;
+	}
+}
+
+
+// Malangdonya
+// sign
+paramk,122,33,3	script	[Malangdonya]#seed00	HIDDEN_NPC,{
+	mes " == Malangdonya == ";
+	mes "Special items from Malangdo.";
+	mes "The Yggdrasil series and the Doram series is here!";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Special series - Mon, Tue, Thu, Fri, Sat, Sun";
+	mes "Always Selling - Mastela Fruit.";
+	close;
+}
+
+// Whiteberry
+paramk,126,34,3	script	Whiteberry#seed01	4_CAT_SAILOR1,{
+	if ($event_paramk > 0) {
+		mes "[Whiteberry]";
+		mes "Purr~ Welcome.";
+		mes "The Catpaw merchant group is pleased to welcome you. We sell special products from Malangdo, purr~";
+	} else { // holiday
+		mes "[Whiteberry]";
+		mes "We sell Mastela Fruit~";
+		mes "We sell certain items even on holidays~";
+	}
+	next;
+	switch (select("Look at items.:Sell items.:Cancel.")) {
+	case 1:
+		mes "[Whiteberry]";
+		mes "Fresh Mastela Fruit here, purr~";
+		mes "Please purchase a lot.";
+		mes "Though we grow them ourselves, honestly they're too sour.. ah... never mind.";
+		close2;
+		callshop "para_seed01",1;
+		end;
+	case 2:
+		mes "[Whiteberry]";
+		mes "Purr~ Will buy at a reasonable price.";
+		mes "Please sell items that are useful.";
+		close2;
+		callshop "para_seed01",2;
+		end;
+	case 3:
+		mes "[Whiteberry]";
+		mes "Purr~ Goodbye~";
+		close;
+	}
+}
+
+// Blackphone
+paramk,129,33,3	script	Blackphone#seed02	4_M_MERCAT2,{
+	if ($event_paramk > 0) {
+		mes "[Blackphone]";
+		mes "Meow~ Welcome";
+		mes "Meow~ The Malangdonya Catpaw merchant group welcomes you.";
+		mes "Meow~ We sell various crops from Malangdo, as well as the Doram series.";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Blackphone]";
+			mes "Meow~ Here are Doram cans and bottles, yggdrasil, and thorn berries.";
+			mes "Meow~ If you see nothing, that means we are sold out. Come back tomorrow.";
+			close2;
+			callshop "para_seed10",1;
+			end;
+		}
+		mes "[Blackphone]";
+		mes "Meow~ Come back soon. We offer interesting items.";
+		close;
+	} else { // holiday
+		mes "[Blackphone]";
+		mes "Meow~ We do not open on holidays.";
+		mes "Meow~ Today is the day we have our products shipped from Malangdo.";
+		mes "Meow~ If you need bottles or cans of of Doram, or Yggdrasil fruits, come back tomorrow.";
+		close;
+	}
+}
+
+
+// These comments are spoken continuously when in a specific region
+// Restraurant
+// Jeffrey
+paramk,144,13,3	script	Jeffrey#food00	1_M_MERCHANT,{
+	mes "[Jeffrey]";
+	mes "Everyone assumes that I am the cook here. I'm not! I'm just here to collect on the debt that the restaurant owner owes me!";
+	next;
+	mes "[Jeffrey]";
+	mes "I made a few dishes just to shut up the complaining customers, but this is getting out of hand!";
+	close;
+
+OnTimer30000:
+	npctalk "Let me make this clear! I am not the cook! Don't wait around to be served! I am NOT making any more dishes!";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Vincent
+paramk,140,18,3	script	Vincent#food01	4_TOWER_15,{
+	mes "[Vincent]";
+	mes "... The new cook makes amazing food, but apparently he's pretty lazy.";
+	close;
+
+OnTimer33000:
+	npctalk "Take orders, don't just stand there in the kitchen! Please!";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Panel
+paramk,138,19,3	script	Panel#food02	4_TOWER_14,{
+	mes "[Panel]";
+	mes "This restaurant opened only recently, but it became really popular after they hired a new cook.";
+	close;
+
+OnTimer35000:
+	npctalk "Who cares if I am served late. All that matters is how delicious the food is.";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Matina
+paramk,136,20,3	script	Matina#food03	4_TOWER_05,{
+	mes "[Matina]";
+	mes "What is it? Are you going to order? Forget it. Look at the line-up.";
+	close;
+
+OnTimer37000:
+	npctalk "Why aren't you taking orders? This place is not really consumer-friendly...";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Lucy
+paramk,134,21,3	script	Lucy#food04	4_TOWER_10,{
+	mes "[Lucy]";
+	mes "Ah. I am going to wait a little more, but if I am still not served, I will leave.";
+	close;
+
+OnTimer40000:
+	npctalk "This is the limit! I can't wait any more. Five minutes, and I'm going home.";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Mara
+paramk,136,16,3	script	Mara#food05	4_TOWER_02,{
+	mes "[Mara]";
+	mes "I heard that the owner of this restaurant went on a trip to a faraway land, and the new cook is running this place. I heard that his cooking skill is amazing.";
+	close;
+
+OnTimer28000:
+	npctalk "The new cook seems to have a foul temper. I find that attractive, really.";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Lana
+paramk,133,16,3	script	Lana#food06	4_TOWER_04,{
+	mes "[Lana]";
+	mes "I came two days ago, yesterday, and today too. The pasta they serve here is amazing. The only problem is that it's so hard to order here.";
+	close;
+
+OnTimer25000:
+	npctalk "Did my order go through? I am starving here!";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Rahoul
+paramk,127,16,3	script	Rahoul#food07	4_TOWER_12,{
+	mes "[Rahoul]";
+	mes "I have been waiting for hours already and the cook is still not taking orders. Ah, I am so hungry that I might drop dead.";
+	close;
+
+OnTimer23000:
+	npctalk "Huh. I wonder how long they would make me wait...";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Nameless Drunk
+paramk,124,20,3	script	Drunk#food08	4_TOWER_06,{
+	mes "[Drunk]";
+	mes "Hey, bring more wine...";
+	close;
+
+OnTimer50000:
+	npctalk "Ehhhh.... Wine.......";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Annoyed Customer
+paramk,127,10,3	script	Annoyed Customer#food09	4_TOWER_07,{
+	mes "[Annoyed Customer]";
+	mes "I am going to talk to the owner once he comes back from his trip. Tell him to fire his employees there at the back.";
+	mes "So many customers milling about, and they aren't even serving anyone";
+	close;
+
+OnTimer20000:
+	npctalk "I wish I could do something about the employees.";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Kalin
+paramk,124,11,3	script	Kalin#food10	4_F_01,{
+	mes "[Kalin]";
+	mes "I am Thrann's colleague and I like being a cleaner at this store. I can be as lazy as I want and still get paid.";
+	close;
+}
+
+// Thrann
+paramk,121,11,3	script	Thrann#food11	4_F_02,{
+	mes "[Thrann]";
+	mes "I spend hours here drinking coffee in peace, though I am technically at work, pretending to clean. They don't even kick me out.";
+	close;
+
+OnTimer47000:
+	npctalk "Such ruckus! If they are not taking orders because there's something wrong in the kitchen, it's only understandable.";
+	initnpctimer;
+	end;
+
+OnInit:
+	initnpctimer;
+	end;
+}
+
+// Sobok the Cook
+paramk,127,88,3	script	Sobok the Cook#fd01	4_M_CHNCOOK,{
+	mes "[Sobok]";
+	mes "I am called Sobok, of the Sobokru, Eden Market Group's leading restaurant.";
+	mes "Do you wish to order? The dishes cost 3000 Zeny each - The weekend special is 5000 Zeny.";
+	next;
+	switch( select("Goose Soup.:Maccaroni Noodles.:Weekend Special.:Cancel.") ) {
+	case 1:
+		.@hp = 100;
+		.@sp = 0;
+		.@zeny = 3000;
+		.@talk$ = "Goose Soup shall detoxify and heal you.";
+		break;
+	case 2:
+		.@hp = 0;
+		.@sp = 100;
+		.@zeny = 3000;
+		.@talk$ = "Maccaroni Noodles shall refresh your spirit.";
+		break;
+	case 3:
+		.@hp = 100;
+		.@sp = 100;
+		.@zeny = 5000;
+		.@talk$ = "Ultimate combination for body and mind.";
+		break;
+	case 4:
+		mes "[Sobok]";
+		mes "Come by when you may.";
+		close;
+	}
+	mes "[Sobok]";
+	mes .@talk$;
+	next;
+	if (select("Yes:No") == 2)
+		close;
+	if (Zeny < .@zeny) {
+		mes "[Sobok]";
+		mes "Do you think you can eat for free??";
+		close;
+	}
+	mes "[Sobok]";
+	mes "Delicious, isn't it?";
+	Zeny -= .@zeny;
+	percentheal(.@hp, .@sp);
+	close;
+}
+
+
+// Cafe Mora
+// Pomegranate
+paramk,75,86,3	script	Pomegranate#mora01	4_F_RAFLE_PK,{
+	mes "[Pomegranate]";
+	mes "Come forth, hasten!";
+	mes "Ask you where this is? Cafe Mora, open always.";
+	mes "Pomegranate, this thing and that thing sell.";
+	next;
+	switch (select("Check Shop.:Why do you speak like that?:Anything else?")) {
+	case 1:
+		mes "[Pomegranate]";
+		mes "Have! Sap of Mora Village!";
+		mes "Sell! Beef toast.";
+		mes "Delicious. Beef toast. Much. Good~";
+		mes "Pomegranate!";
+		close2;
+		callshop "para_mora01",1;
+		end;
+	case 2:
+		mes "[Pomegranate]";
+		mes "Know you not, Mora Tongue.";
+		mes "Pomegranate. Know. Human speech.";
+		mes "Pomegranate, awesome.";
+		mes "Study, did. Super hard!";
+		close;
+	case 3:
+		mes "[Pomegranate]";
+		mes "Sell. Master. Fri-Sat-Sun.";
+		mes "Delicious. Squeezed fruit. Mora best!";
+		close;
+	}
+}
+
+// Cocktail Master
+paramk,65,86,3	script	Cocktail Master#mora01	4_M_RAFLE_VI,{
+	if ($event_paramk > 1) {
+		mes "[Cocktail Master]";
+		mes "Welcome to Mora Cafe.";
+		mes "We offer fruits and drinksfrom Mora.";
+		mes "They are ^4d4dffRafflechino, Mora Hip Tea, Mora Mandarin, and Mora Berry^000000. We may run out of stock.";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Cocktail Master]";
+			mes "If there is nothing, that means we are sold out. Come back tomorrow.";
+			close2;
+			callshop "para_mora10",1;
+			end;
+		}
+		mes "[Cocktail Master]";
+		mes "We are thankful that you came to visit us.";
+		close;
+	} else { // holiday
+		mes "[Cocktail Master]";
+		mes "Do you wish to purchase special Mora Drinks?";
+		mes "We are saddened to inform you that we only make drinks on weekends. Come back on ^4d4dffFri, Sat, Sun^000000.";
+		mes "Pomegranate, sell this and that.";
+		close;
+	}
+}
+
+
+// Forge
+// Hans of the miner coalition
+paramk,49,103,3	script	Hans #ref01	1_M_SIGNMCNT,{
+	if ($event_paramk > 3) {
+		mes "[Hans]";
+		mes "We sell metal ores mined by our coalition.";
+		mes "If you need iron, steel, coal, or iron ores, look around.";
+		next;
+		if (select("Look at ores.:Cancel.") == 1) {
+			mes "[Hans]";
+			mes "We are sold out, if there is nothing here.";
+			mes "We mine iron, steel, coal, and iron ores every day, so come back tomorrow.";
+			close2;
+			callshop "para_ref10",1;
+			end;
+		}
+		mes "[Hans]";
+		mes "Our stock of basic metal like iron, steel, coal, etc, are replenished every day.";
+		mes "Keep that in mind.";
+		close;
+	} else { // holiday
+		mes "[Hans]";
+		mes "We're closed today.";
+		mes "I am just about to visit the mines.";
+		mes "Come back tomorrow if you need anything.";
+		close;
+	}
+}
+
+// Dus the Smith
+paramk,53,104,3	script	Dus the Smith#ref02	2_M_OLDBLSMITH,{
+	if ($event_paramk > 3) {
+		mes "[Dus the Smith]";
+		mes "Oridecon, Elunium, and Anvils here.";
+		mes "Not a lot, but handcrafted, you'll see.";
+		next;
+		if (select("Look at items.:Cancel.")) {
+			mes "[Dus the Smith]";
+			mes "Not sure if we have any left.";
+			mes "Please buy if we do.";
+			close2;
+			callshop "para_ref20",1;
+			end;
+		}
+		mes "[Dus the Smith]";
+		mes "Rare ores are hard to come by, and hard to refine.";
+		mes "That's why our stock is limited.";
+		close;
+	} else { // holiday
+		mes "[Dus the Smith]";
+		mes "Ah, a customer?";
+		mes "Sorry, we are not selling ores today.";
+		next;
+		mes "[Dus the Smith]";
+		mes "They're hard to make, you see.";
+		mes "What do we sell you ask?";
+		mes "Ahhh, we sell Oridecon, Elunium, and Anvils here.";
+		next;
+		mes "[Dus the Smith]";
+		mes "If you need rare ores or anvils, come on weekends.";
+		mes "Late Saturday afternoon would be perfect.";
+		close;
+	}
+}
+
+
+// Rain-of-Gems
+// sign
+paramk,63,98,3	script	[Rain-of-Gems]#jw	HIDDEN_NPC,{
+	mes "? Rain of Gems ?";
+	mes "We deal in gold and gemstones!";
+	mes "";
+	mes "[Days of Operation]";
+	mes "We're closed on holidays.";
+	close;
+}
+
+// Aurora
+paramk,69,102,3	script	Aurora#jew01	4_F_02,{
+	if ($event_paramk > 0) {
+		mes "[Aurora]";
+		mes "Welcome~";
+		mes "This is 'Rain of Gems'. Our items range from pure gold to uncut gemstones like rosestone!";
+		mes "We sell gold, opals, phlogopite, muscovite, et cetera.";
+		mes "They are rare and hard to come by, therefore pricey!";
+		next;
+		switch (select("Look at items.:Sell items.:Cancel.")) {
+		case 1:
+			mes "[Aurora]";
+			mes "If you don't see anything, that means everything is sold out!";
+			mes "Thank you for visiting~!";
+			close2;
+			callshop "para_jew10",1;
+			end;
+		case 2:
+			mes "[Aurora]";
+			mes "We will buy at a reasonable price.";
+			close2;
+			callshop "para_jew10",2;
+			end;
+		case 3:
+			mes "[Aurora]";
+			mes "We deal in products like gold, phlogopite, agate and turquoise.";
+			mes "But uncut gemstones are rare.";
+			next;
+			mes "[Aurora]";
+			mes "We procure them from mines, but the supply is limited~";
+			mes "Our stock is replenished every week, so if you time it just right.. maybe? Haha.";
+			close;
+		}
+	} else { // holiday
+		mes "[Aurora]";
+		mes "Aw, sorry that you came by today.";
+		mes "Our Market Group is not open on Wednesdays.";
+		mes "We need time to restock and check our inventory levels, and of course, time to rest up.";
+		next;
+		mes "[Aurora]";
+		mes "If you come by tomorrow, we would be happy to offer you our range of products that will make your weapons more powerful!";
+		close;
+	}
+}
+
+
+// The Alchemical Cat
+// sign
+paramk,73,98,3	script	[Alchemical Cat]#alc00	HIDDEN_NPC,{
+	mes " == The Alchemical Cat == ";
+	mes "Reagents for alchemy and";
+	mes "ingredients to make medication";
+	mes "All sold here~";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Every day except for holidays";
+	close;
+}
+
+// Dye the Alchemist
+paramk,75,102,3	script	Dye the Alchemist#alc01	4_M_ALCHE_C,{
+	if ($event_paramk > 0) {
+		mes "[Dye the Alchemist]";
+		mes "Reagents for alchemy!";
+		mes "We sell Alcohol, Karvodailnirol, and Detrimindexta!";
+		mes "We sell 20 each, per day!";
+		next;
+		if (select("Look at the reagents.:Cancel.")) {
+			mes "[Dye the Alchemist]";
+			mes "Not sure if we have any left!";
+			mes "If not, everything is sold out!";
+			mes "They may be a bit expensive, but easy consumption... well, you know what I am talking about. Yeah?";
+			close2;
+			callshop "para_alc10",1;
+			end;
+		}
+		mes "[Dye the Alchemist]";
+		mes "Come by tomorrow, we brew reagents every day!";
+		close;
+	} else { // holiday
+		mes "[Dye the Alchemist]";
+		mes "We are closed on Wednesdays~";
+		mes "Come back tomorrow!";
+		close;
+	}
+}
+
+// Earl the Alchemist
+paramk,80,104,3	script	Earl the Alchemist#alc02	4_TOWER_16,{
+	if ($event_paramk > 0) {
+		mes "[Earl the Alchemist]";
+		mes "Ingredients to make reagents, potions, ";
+		mes "and elemental stones for magical experiements, all sold here!";
+		next;
+		mes "[Earl the Alchemist]";
+		mes "Not sure how much remains of our stock, since our supply is limited, but...";
+		mes "Looking for something?";
+		next;
+		switch (select("Look at ingredients.:Look at elemental stones.:Cancel.")) {
+		case 1:
+			mes "[Earl the Alchemist]";
+			mes "Immortal Hearts, Stems, and many other ingredients from various dungeons";
+			mes "offered here at a reasonable price";
+			next;
+			mes "[Earl the Alchemist]";
+			mes "If you don't see anything, that means everything is sold out.";
+			close2;
+			callshop "para_alc20",1;
+			end;
+		case 2:
+			mes "[Earl the Alchemist]";
+			mes "Stardust, and Star Crumb here.";
+			mes "Not sure if we have any left.";
+			close2;
+			callshop "para_alc30",1;
+			end;
+		case 3:
+			mes "[Earl the Alchemist]";
+			mes "Come again!";
+			mes "Keep in mind that we don't open on Wednesdays, because that's when we have items shipped in!";
+			close;
+		}
+	} else { // holiday
+		mes "[Earl the Alchemist]";
+		mes "Wednesday is a holiday.";
+		mes "Come back tomorrow if there's anything you want to buy.";
+		close;
+	}
+}
+
+
+// Manbok Groceries
+// sign
+paramk,83,98,3	script	[Manbok Groceries]#fod00	HIDDEN_NPC,{
+	mes " == Manbok Groceries == ";
+	mes "We offer amazing cooking ingredients!";
+	mes "Wolf blood and Petite's Tails!";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Every day except for holidays";
+	close;
+}
+
+// Manbok
+paramk,87,101,3	script	Manbok#fod01	1_M_03,{
+	if ($event_paramk > 0) {
+		mes "[Manbok]";
+		mes "Welcome.";
+		mes "If you need cooking ingredients, you have come to the right place.";
+		next;
+		switch (select("Advanced cooking ingredients.:Sauces and spies.:Sell items.:Cancel.")) {
+		case 1:
+			mes "[Manbok]";
+			mes "Not sure how many we have left.";
+			mes "Well,^4d4dffif you see nothing, that means everything is sold out^000000.";
+			mes "Peruse at your pleasure.";
+			close2;
+			callshop "para_fod10",1;
+			end;
+		case 2:
+			mes "[Manbok]";
+			mes "Sauces and spices from all over the world..";
+			mes "I am the person to go to if you want cooking ingredients.";
+			close2;
+			callshop "para_fod01",1;
+			end;
+		case 3:
+			mes "[Manbok]";
+			mes "If it's a product I deal in, I will purchase them from you at a reasonable price.";
+			close2;
+			callshop "para_fod01",2;
+			end;
+		case 4:
+			mes "[Manbok]";
+			mes "You might know this already, but I will say it anyways.";
+			mes "We have limited supplies. Our ingredients are often sold out if you hesitate for too long.";
+			next;
+			mes "[Manbok]";
+			mes "Just saying.";
+			close;
+		}
+	} else { // holiday
+		mes "[Manbok]";
+		mes "Not open on Wednesdays.";
+		mes "We restock today. Come back tomorrow.";
+		close;
+	}
+}
+
+
+// Magical Store, Ma-Ma-Ma-Ma
+// sign
+paramk,93,98,3	script	Ma-Ma-Ma-Ma#mag	HIDDEN_NPC,{
+	mes " == Ma-Ma-Ma-Ma == ";
+	mes " == Magical Store == ";
+	mes "Ingredients and gems for magic, ";
+	mes "Specializing in magic scrolls";
+	mes "";
+	mes "[Days of Operation]";
+	mes "Some items not sold on holidays";
+	mes "But open every day.";
+	close;
+}
+
+// Madoha
+paramk,95,102,3	script	Madoha#mag01	4_M_SAGE_A,{
+	if ($event_paramk > 0) {
+		mes "[Madoha]";
+		mes "Welcome.";
+		mes "This is Ma-Ma-Ma-Ma the Magical Store, run by the Ma brothers, helping non-Mages use magic.";
+		next;
+		mes "[Madoha]";
+		mes "We sell magic scrolls and gems.";
+		mes "Anything particular that you are looking for?";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Madoha]";
+			mes "Blue, red, yellow gems. Magic scrolls like Meteor Storm, Stormgust, Lord of Vermillion...";
+			mes "^4d4dffIf there is nothing, it means everything is sold out^000000, please be aware.";
+			close2;
+			callshop "para_mag10",1;
+			end;
+		}
+		mes "[Madoha]";
+		mes "Making magic scrolls is interesting work.";
+		mes "Magic scrolls also help a lot of non-mage adventurers by allowing them to use magic they don't know.";
+		next;
+		mes "[Madoha]";
+		mes "But there's a limit to how many scrolls I can scribe per week, so they sometimes run out.";
+		close;
+	} else { // holiday
+		mes "[Madoha]";
+		mes "Oh, a customer?";
+		mes "Today is a holiday. We only sell basic magical ingredients today. No scrolls. Is that okay?";
+		mes "We have blue gems, points, and runestones..";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Madoha]";
+			mes "We try to be stocked up as much as possible but we may have run out.";
+			mes "If you see nothing, that means everything is sold out.";
+			close2;
+			callshop "para_mag11",1;
+			end;
+		}
+		mes "[Madoha]";
+		mes "Yellow and red gems, and magic scrolls, are sold on other days, ";
+		mes "So come back tomorrow.";
+		close;
+	}
+}
+
+// Magiha
+paramk,100,102,3	script	Magiha#mag02	4_M_SAGE_C,{
+	if ($event_paramk > 0) {
+		mes "[Magiha]";
+		mes "Welcome tooooooo.";
+		mes "Ma-Ma-Ma-Ma, the Magical Store.";
+		mes "We sell resistance potions to raise your elemental resistance..";
+		next;
+		if (select("Look at items.:Cancel.") == 1) {
+			mes "[Magiha]";
+			mes "We brew and sell four types of resistance potions that ward against water, wind, earth, or fire.";
+			mes "If you see nothing, that means all the potions are sold out.";
+			close2;
+			callshop "para_mag20",1;
+			end;
+		}
+		mes "[Magiha]";
+		mes "Come again!";
+		close;
+	} else { // holiday
+		mes "[Magiha]";
+		mes "Today is a holiday! I did not brew any potions today...";
+		mes "Come back tomorrow.";
+		close;
+	}
+}
+
+// Blessings of Yggdrasil
+// sign
+paramk,103,98,3	script	[Yggdrasil Blessing]#00	HIDDEN_NPC,{
+	mes " == Blessings of Yggdrasil == ";
+	mes "Moving in soon";
+	close;
+}
+
+
+// Exotic Plants
+// sign
+paramk,113,98,3	script	[Exotic Plants]#plt	HIDDEN_NPC,{
+	mes " == Exotic Plants == ";
+	mes "Poisonous plants sold.";
+	mes "Days of Operation: always";
+	close;
+}
+
+// Hwaran
+paramk,116,100,3	script	Hwaran#plt01	4_F_RUSGREEN,{
+	mes "[Hwaran]";
+	mes "Welcome to Exotic Plants.";
+	mes "I deal with plants that are shockingly bitter when you chew on them.";
+	mes "Will you look around?";
+	next;
+	if (select("Look at items.:Cancel.") == 1) {
+		mes "[Hwaran]";
+		mes "Please shower them with affection, though they are poisonous plants.";
+		mes "I selected these babies from the farm myself. Very potent when made into meds.";
+		close2;
+		callshop "para_plt01",1;
+		end;
+	}
+	mes "[Hwaran]";
+	mes "So many frequent customers to my store are from the assassin's guild, surprisingly enough. I don't know why.";
+	mes "Obviously they must be peace-loving people at heart, since they are so fond of plants.";
+	close;
+}
+
+// You and Me
+// sign
+paramk,133,98,3	script	[You and Me]#unm00	HIDDEN_NPC,{
+	mes " == You and Me == ";
+	mes "Specializing in items for Cute Pets";
+	mes "We introduce you to beasts you can mount, and companions you can hunt with";
+	mes "[Days of Operation]";
+	mes "Always!";
+	close;
+}
+
+// Gecko the Trainer
+paramk,124,97,3	script	Gecko the Trainer#unm01	4_M_DESERT,{
+	mes "[Gecko the Trainer]";
+	switch( Class ) {
+	case Job_Rune_Knight:
+	case Job_Rune_Knight_T:
+	case Job_Baby_Rune:
+		mes "Welcome. Would you like to rent a Dragon?";
+		next;
+		if (select("Yes:No") == 2) {
+			mes "[Gecko the Trainer]";
+			mes "I see. Then have a great day.";
+			close;
+		}
+		// if (!getskilllv("RK_DRAGONTRAINING")) {
+		if (!getskilllv("KN_RIDING")) {
+			mes "[Gecko the Trainer]";
+			mes "Please learn how to ride a Dragon first.";
+			close;
+		} else if (checkriding() || checkdragon()) {
+			mes "[Gecko the Trainer]";
+			mes "You already have a Dragon.";
+			close;
+		} else if (ismounting()) {
+			mes "[Gecko the Trainer]";
+			mes "Please remove your cash mount.";
+			close;
+		}
+		setdragon;
+		close;
+
+	case Job_Royal_Guard:
+	case Job_Royal_Guard_T:
+	case Job_Baby_Guard:
+		mes "Welcome. Would you like to rent a Gryphon?";
+		next;
+		if (select("Yes:No") == 2) {
+			mes "[Gecko the Trainer]";
+			mes "I see. Then have a great day.";
+			close;
+		}
+		if (!getskilllv("KN_RIDING")) {
+			mes "[Gecko the Trainer]";
+			mes "Please learn how to ride a Gryphon first.";
+			close;
+		}
+		if (checkriding()) {
+			mes "[Gecko the Trainer]";
+			mes "You already have a Gryphon.";
+			close;
+		}
+		if (ismounting()) {
+			mes "[Gecko the Trainer]";
+			mes "Please remove your cash mount.";
+			close;
+		}
+		setriding;
+		close;
+
+	default:
+		mes "I'm here to provide Rune Knights and Royal Guards with riding creatures.";
+		close;
+	}
+}
+
+// Tete
+paramk,126,100,3	script	Tamer Tete#unm02	4_M_DST_CHILD,{
+	mes "[Tete]";
+	mes "'You and Me', we love animals!";
+	mes "We are open 24/7 to provide you with all the items your Cute Pets and companion animals need!";
+	mes "Do you need items for your Pet?";
+	next;
+	if (select("Look at items.:Cancel.") == 1) {
+		mes "[Tete]";
+		mes "We have a diverse selection of food for Pets.";
+		mes "We have incubators, too!";
+		close2;
+		callshop "para_unm01",1;
+		end;
+	}
+	mes "[Tete]";
+	mes "Thank you for coming by~!";
+	close;
+}
+
+// Mist the Hunter
+paramk,130,98,3	script	Mist the Hunter#unm03	4_M_JOB_HUNTER,{
+	if (Upper == 0) .@price = 2500; // Normal Falcon - default price
+	if (Upper == 1) .@price = 2500; // Scarf Falcon
+	if (Upper == 2) .@price = 2500; // Baby Falcon
+	mes "[Mist, the Hunter]";
+	if (BaseJob == Job_Hunter) {
+		if (checkoption(Option_Wug) || checkoption(Option_Wugrider)) {
+			mes "Um...";
+			mes "You can't rent a Falcon";
+			mes "until you dismiss your warg first!";
+			close;
+		}
+		mes "Do you need a Falcon?";
+		mes "You can rent your own";
+		mes "trusty bird of prey for a";
+		mes "fee of just " + .@price + " zeny~";
+		next;
+		switch (select("Rent Falcon.:Buy a Falcon Flute.:Cancel.")) {
+		case 1:
+			if (checkwug()) {
+				mes "[Mist, the Hunter]";
+				mes "Um...";
+				mes "You can't rent a Falcon";
+				mes "until you dismiss your warg first!";
+				close;
+			}
+			if (Zeny < .@price) {
+				mes "[Mist, the Hunter]";
+				mes "What is this?";
+				mes "You don't have";
+				mes "enough zeny?!";
+				mes "You better start";
+				mes "hunting money";
+				mes "instead of monsters~";
+				close;
+			}
+			if (getskilllv("HT_FALCON") == 0) {
+				mes "[Mist, the Hunter]";
+				mes "Gosh~";
+				mes "Go learn how to";
+				mes "manage a Falcon";
+				mes "first! I can't rent one";
+				mes "to you if you can't";
+				mes "handle it, you know.";
+				close;
+			}
+			if (checkfalcon()) {
+				mes "[Mist, the Hunter]";
+				mes "Um...";
+				mes "You already have";
+				mes "a Falcon. It's right";
+				mes "there, can't you see it?";
+				close;
+			}
+			Zeny -= .@price;
+			setfalcon;
+			close;
+		case 2:
+			mes "[Mist, the Hunter]";
+			mes "With a magical Flute, you can call your Falcon from anywhere!";
+			next;
+			mes "[Mist, the Hunter]";
+			mes "It's marvelous, isn't it? Ha ha ha!";
+			next;
+			mes "[Mist, the Hunter]";
+			mes "Why I'm selling these Falcon Flutes?";
+			mes "It's because I have no clue how they work.";
+			mes "Ha ha ha!";
+			next;
+			mes "[Mist, the Hunter]";
+			mes "Of course, you'll need the Skill ^ff0000Falcon Mastery^000000.";
+			mes "I don't have the Skill, so I don't know how to handle Falcons.";
+			mes "As it's for now, I may never have a Falcon.";
+			next;
+			mes "[Mist, the Hunter]";
+			mes "But I can't give you one for free!";
+			mes "I have to make money since I also need to eat!";
+			next;
+			mes "[Mist, the Hunter]";
+			mes "If you need a Falcon Flute I will sell them for 12,500 zeny. Or is that too expensive?";
+			next;
+			if (eaclass()&EAJL_THIRD) {
+				mes "[Mist, the Hunter]";
+				mes "For Rangers, however, I have a special price of 10,000 zeny!";
+				.@price = 10000;
+				next;
+			} else
+				.@price = 12500;
+			if (select("Don't buy one.:Buy a Falcon Flute.") == 1) {
+				mes "[Mist, the Hunter]";
+				mes "That's too bad. If you need one, come back!";
+				close;
+			}
+			if (Zeny >= .@price) {
+				if (countitem(12848) >= 1) { // Falcon_Flute
+					mes "[Mist, the Hunter]";
+					mes "As I can see you already have a Falcon Flute!";
+					mes "Don't worry, my young friend, once you've purchased the Falcon Flute you won't need to do so again";
+					mes "since the Falcon Flute won't disappear upon usage, isn't that great?";
+					close;
+				}
+				mes "[Mist, the Hunter]";
+				mes "Here, take this flute.";
+				mes "With it you can whistle for your Falcon from anywhere.";
+				Zeny -= .@price;
+				getitem(12848, 1); // Falcon_Flute
+				next;
+				mes "[Mist, the Hunter]";
+				mes "Just a reminder.";
+				mes "You need the Skill ^ff0000Falcon Mastery^000000 in order to use it!";
+				close;
+			}
+			mes "[Mist, the Hunter]";
+			mes "I'm sorry but you don't have enough money to buy a Falcon Flute, please come back when you have more money!";
+			close;
+
+		case 3:
+			mes "[Mist the Hunter]";
+			mes "Look at other items in our store.";
+			mes "We may be offering a new Pet Items soon~";
+			mes "Hahahaha!";
+			close;
+		}
+	} else {
+		mes "Young fool!";
+		mes "Falcons can only";
+		mes "be used by Hunters";
+		mes "and Snipers, capish?";
+		mes "...Heh heh, jealous?";
+		close;
+	}
+}
+
+// exit
+paramk,97,5,0	warp	paramk#ex	1,1,moc_para01,106,35

+ 10 - 2
npc/re/merchants/nightmare_biolab.txt

@@ -3,6 +3,13 @@
 //===== Description: =========================================
 //= [Walkthrough Conversion]
 //= Nightmare Biolab exchange NPCs
+//  NOTE: The nightmare biolab monsters are currently missing
+//  some items used in the file.
+//    Silent Energy Particles (ID: 25127)
+//    Weak Energy Particles (ID: 25128)
+//    Unstable Energy Particles (ID: 25129)
+//    Sinister Energy Particles (ID: 25130)
+//    Cursed Crystal (ID: 23080)
 //===== Changelogs: ==========================================
 //= 1.0 First version. [Capuche]
 //============================================================
@@ -1603,7 +1610,7 @@ OnTouch:
 	end;
 
 OnInit:
-	// questinfo 14683,QTYPE_QUEST,1;	// display when quest 14683 active
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(14683) == 1" );
 	end;
 }
 
@@ -1729,7 +1736,8 @@ OnTouch:
 	end;
 
 OnInit:
-	questinfo atoi(strnpcinfo(2)),QTYPE_QUEST,1;
+	.@condition$ = "!isbegin_quest(" + strnpcinfo(2) + ")";
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, .@condition$ );
 	end;
 }
 

+ 7 - 0
npc/re/quests/quest_payon.txt

@@ -0,0 +1,7 @@
+//===== rAthena Script ======================================= 
+//= Quest Payon Renewal
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [JohnnyPlayy]
+//============================================================
+
+payon_in01,46,21,4	duplicate(Young man#12)	Young man#1	4_M_ORIENT02

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

@@ -196,8 +196,7 @@ morocc,138,238,4	script	Piled Rags#ep14bs	4_M_DIEMAN,{
 	close;
 
 OnInit:
-	questinfo 11349, QTYPE_QUEST, 1;
-	setquestinfo_level 11349,140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 140 && !isbegin_quest(11349)" );
 	end;
 }
 

+ 9 - 37
npc/re/quests/quests_14_3_bis.txt

@@ -244,12 +244,7 @@ moro_vol,98,107,3	script	Magic Scholar#143avt01	4_M_FAIRYAVANT,{
 	end;
 
 OnInit:
-	questinfo 7583, QTYPE_QUEST2;
-	setquestinfo_req 7583,7581,1;
-	setquestinfo_req 7583,7584,0;
-	setquestinfo_level 7583,140,175;
-	// 3759 is probably ep14_2_mylord
-	// SetQuestItem 7583 3759 33 "<"
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 140 && ep14_2_mylord > 33 && !isbegin_quest(7583) && !isbegin_quest(7584) && isbegin_quest(7581) == 1" );
 	end;
 }
 
@@ -414,12 +409,7 @@ moro_vol,95,108,7	script	Hishieh#143hisie01	4_M_FARIY_HISIE,{
 	end;
 
 OnInit:
-	questinfo 7595, QTYPE_QUEST2;
-	setquestinfo_req 7595,7593,1;
-	setquestinfo_req 7595,7600,0;
-	setquestinfo_level 7595,160,175;
-	// 3759 = [ep14_2_mylord]
-	// SetQuestItem 7595 3759 33 "<"
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 160 && ep14_2_mylord > 33 && !isbegin_quest(7595) && !isbegin_quest(7600) && isbegin_quest(7593) == 1" );
 	end;
 }
 
@@ -603,16 +593,8 @@ moro_vol,108,88,5	script	Commander Hibba Agip#14301	4_M_REDSWORD,{
 	end;
 
 OnInit:
-	questinfo 7593, QTYPE_QUEST2;
-	setquestinfo_req 7593,7597,0;
-	setquestinfo_req 7593,7598,0;
-	setquestinfo_level 7593,160,175;
-	// 3789 = [ep4_3_mockill]
-	// SetQuestItem 7593 3789 0 "<"
-
-	questinfo 7598, QTYPE_QUEST2;
-	setquestinfo_req 7598,7593,0;
-	setquestinfo_req 7598,7597,1;
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 160 && ep4_3_mockill > 0 && !isbegin_quest(7593) && !isbegin_quest(7597) && !isbegin_quest(7598)" );
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "!isbegin_quest(7598) && !isbegin_quest(7593) && isbegin_quest(7597) == 1" );
 	end;
 }
 
@@ -700,10 +682,7 @@ moro_vol,110,90,3	script	Adjutant Abidal#14302	4_M_SAGE_C,{
 	end;
 
 OnInit:
-	questinfo 7594, QTYPE_QUEST2;
-	setquestinfo_req 7594,7593,1;
-	setquestinfo_req 7594,7599,0;
-	setquestinfo_level 7594,160,175;
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 160 && !isbegin_quest(7594) && !isbegin_quest(7599) && isbegin_quest(7593) == 1" );
 	end;
 }
 
@@ -795,9 +774,7 @@ moro_vol,111,87,1	script	 Instructor Igrid#14303	4_M_CRU,{
 	end;
 
 OnInit:
-	questinfo 7581, QTYPE_QUEST2, 0;
-	setquestinfo_req 7581,7582,0;
-	setquestinfo_level 7581,140,175;
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 140 && !isbegin_quest(7581) && !isbegin_quest(7582)" );
 	end;
 }
 
@@ -1038,16 +1015,11 @@ moro_vol,136,84,3	script	Jeruth Hesranta#ep143	4_MAN_JERUTOO,{
 
 OnInit:
 /* officially disabled
-	questinfo 1, QTYPE_QUEST2;
-	setquestinfo_level 1,140,160;
+	questinfo QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 140 && BaseLevel <= 160";
+	// 3650 = [ep13_3_secret]
 	SetQuestItem 1 3650 24
 */
-
-	questinfo 7579, QTYPE_QUEST2;
-	setquestinfo_req 7579,7580,0;
-	setquestinfo_level 7579,140,160;
-	// 3650 = [ep13_3_secret]
-	// SetQuestItem 7579 3650 26 "<"
+	questinfo( QTYPE_QUEST2, QMARK_NONE, "BaseLevel >= 140 && BaseLevel <= 160 && ep13_3_secret > 26 && !isbegin_quest(7579) && !isbegin_quest(7580)" );
 	end;
 }
 

+ 20 - 29
npc/re/quests/quests_15_1.txt

@@ -72,8 +72,7 @@ prontera,121,77,3	script	Phantasmagorika Spokesperson	4_F_ZONDAGIRL,{
 	}
 
 OnInit:
-	questinfo 7610, QTYPE_QUEST, 1;
-	setquestinfo_level 7610, 140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 140 && isbegin_quest(7610) != 2" );
 	end;
 }
 geffen,135,64,3	duplicate(Phantasmagorika Spokesperson)	Phantasmagorika Spokesperson#2	4_F_ZONDAGIRL
@@ -187,8 +186,7 @@ moc_para01,38,175,5	script	Lime Evenor#evtat01	4_F_EDEN_OFFICER,{
 	}
 
 OnInit:
-	questinfo 7607, QTYPE_QUEST, 1;
-	setquestinfo_level 7607,140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 140 && isbegin_quest(7607) != 2" );
 	end;
 }
 
@@ -810,10 +808,8 @@ ver_eju,114,40,4	script	Manager Michelle#atnd05	4_M_LGTGUARD,{
 	}
 
 OnInit:
-	questinfo 7611,QTYPE_QUEST,1;
-	setquestinfo_req 7611,7612,0;
-	// questinfo 7612,QTYPE_QUEST,1;
-	// setquestinfo_req 7612,7611,2;// todo : display when HUNTING completed
+	// note: only 7612 required
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7612)" );
 	end;
 }
 
@@ -915,8 +911,7 @@ verus04,182,168,5	script	Receptionist Nara#atnd06	4_F_HUWOMAN,{
 	close;
 
 OnInit:
-	questinfo 7610, QTYPE_QUEST, 1;
-	setquestinfo_level 7610,140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7610) != 2" );
 	end;
 }
 
@@ -1136,15 +1131,10 @@ verus04,179,165,5	script	Commander Louis#atnd07	4_M_LGTGUARD,{
 	}
 
 OnInit:
-	questinfo 7611,QTYPE_QUEST,1;
-	setquestinfo_req 7611,7612,0;
-	// questinfo 7612,QTYPE_QUEST,1;
-	// setquestinfo_req 7612,7611,2;// todo : display when HUNTING completed
-
-	questinfo 7613,QTYPE_QUEST,1;
-	setquestinfo_req 7613,7614,0;
-	// questinfo 7614,QTYPE_QUEST,1;
-	// setquestinfo_req 7614,7613,2;// todo : display when HUNTING completed
+	// note: only playtime quest required
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7612)" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7614)" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7617) == 1" );
 	end;
 }
 
@@ -2214,7 +2204,7 @@ verus04,141,193,5	script	Archaeologist Aures#atnd09	4_M_OLDSCHOLAR,{
 		mes "but I want to know how much progress Lloyd has made with his investigation.";
 		mes "Could you go check up on him?";
 		mes "Thank you.";
-		erasequest 7619;// Assisting the Excavation Team
+		completequest 7619;// Assisting the Excavation Team
 		setquest 7620;// Young Blood?
 		VER_MAIN = 9;
 		close3;
@@ -2407,7 +2397,7 @@ verus04,141,193,5	script	Archaeologist Aures#atnd09	4_M_OLDSCHOLAR,{
 	}
 
 OnInit:
-	questinfo 7615,QTYPE_QUEST,1;// inaccurate
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7619) && VER_MAIN < 8" );
 	end;
 }
 
@@ -3231,8 +3221,8 @@ S_Daily:
 	}
 
 OnInit:
-	questinfo 7615,QTYPE_QUEST,1;// inaccurate
-	setquestinfo_req 7615,7616,0;
+	// note: only playtime quest required
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(7616)" );
 	end;
 }
 
@@ -3292,6 +3282,10 @@ verus03,167,257,5	script	Access Controller Damhw#atnd	4_M_LGTGUARD,{
 	mes "Then I expect there to be good results!";
 	completequest 7641;// Access Permitted (note : player can enter in verus01 without this quest)
 	close;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(7641) == 1" );
+	end;
 }
 verus03,172,257,3	duplicate(Access Controller Damhw#atnd)	Access Controller Gyuhw#atnd	4_M_LGTGUARD
 verus03,52,250,5	duplicate(Access Controller Damhw#atnd)	Access Controller Geuma#atnd	4_M_LGTGUARD
@@ -5675,8 +5669,7 @@ juperos_01,242,91,3	script	Rekenber Guard#atd06	4_M_LGTGUARD,{
 	close;
 
 OnInit:
-	questinfo 7610, QTYPE_QUEST, 1;
-	setquestinfo_level 7610, 140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 140 && isbegin_quest(7610) != 2" );
 	end;
 }
 
@@ -5697,8 +5690,7 @@ yuno_fild07,211,179,5	script	Excavator Guide#atd07	4_M_LGTGUARD,{
 	close;
 
 OnInit:
-	questinfo 7610, QTYPE_QUEST, 1;
-	setquestinfo_level 7610, 140,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 140 && isbegin_quest(7610) != 2" );
 	end;
 }
 
@@ -7175,8 +7167,7 @@ yuno_fild07,216,157,5	script	Guide Elisha#ep15_1bs2	4_F_ZONDAGIRL,{
 	close;
 
 OnInit:
-	questinfo 11363,QTYPE_QUEST,1;
-	setquestinfo_req 11363,11364,0,11365,0,11366,0;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "!isbegin_quest(11363) && !isbegin_quest(11364) && !isbegin_quest(11365) && !isbegin_quest(11366)" );
 	end;
 }
 

+ 92 - 91
npc/re/quests/quests_16_1.txt

@@ -5,6 +5,7 @@
 //--- NPCs quests for Episode 16.1
 //===== Changelogs: ==========================================
 //= 1.0 First version. [Capuche]
+//= 1.1 Fixed spelling mistakes [crazy-arashi]
 //============================================================
 
 function	script	F_Mysterious_box	{
@@ -168,7 +169,7 @@ prontera,150,331,4	script	Royal Guard#ep16_ect01	8W_SOLDIER,4,4,{
 		mes "Let me send a message for the Chamberlain to find you.";
 		close;
 	}
-	npctalk "Welcome to the glorious Prontera Palace in the heart of Rune Midgarts!", "Royal Guard#ep16_ect01", bc_self;// Royal Guard#ep16_ect01 only
+	npctalk "Welcome to the glorious Prontera Palace in the heart of Rune Midgards!", "Royal Guard#ep16_ect01", bc_self;// Royal Guard#ep16_ect01 only
 	end;
 
 OnTouch:
@@ -285,7 +286,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "The banquet hosted by the palace is to celebrate the return of the expedition and cherish their hard work...";
 		next;
 		mes "[Belle]";
-		mes "However, more importantly, it is to fulfil the Royal Assembly.";
+		mes "However, more importantly, it is to fulfill the Royal Assembly.";
 		mes "The candidates for the throne have been evaluated before.";
 		mes "And heir to the throne will be determined.";
 		next;
@@ -293,7 +294,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "There is a secret ritual passed down in the palace, which is held before the official coronation. The heir will be named the king upon passing the ritual.";
 		next;
 		mes "[Belle]";
-		mes "Unless the heavens fall, the ritual will be finished safely, and Rune Midgarts will meet the new king.";
+		mes "Unless the heavens fall, the ritual will be finished safely, and Rune Midgards will meet the new king.";
 		next;
 		select("What's it got to do with me?");
 		mes "[Belle]";
@@ -322,7 +323,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "Since the late king passed away all of a sudden, the palace has been in a state of disorder.";
 		next;
 		mes "[Belle]";
-		mes "Fortunately, Rune Midgarts is supported by the seven royal families.";
+		mes "Fortunately, Rune Midgards is supported by the seven royal families.";
 		mes "It is the time to welcome our new king.";
 		next;
 		npctalk "If Morocc hadn't been resurrected...", "", bc_self;
@@ -391,7 +392,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "Since you have some time to spare, why don't you go enjoy the banquet in the Banquet Hall.";
 		next;
 		mes "[Belle]";
-		mes "The ^4d4dffladies of the Nerius familiy have just asked to see you in the Banquet Hall^000000 .";
+		mes "The ^4d4dffladies of the Nerius family have just asked to see you in the Banquet Hall^000000 .";
 		mes "" + strcharinfo(0) + ", you must have made a good impression.";
 		next;
 		mes "[Belle]";
@@ -2122,7 +2123,7 @@ prt_lib,85,82,5	script	Ian Walther#ep16_lib01	HIDDEN_WARP_NPC,{
 		mes "However...";
 		next;
 		mes "[Nyhill]";
-		mes "I am a Heine, one of the seven royal families of Rune Midgarts.";
+		mes "I am a Heine, one of the seven royal families of Rune Midgards.";
 		mes "I didn't do such a thing on purpose.";
 		next;
 		mes "[Maximilian]";
@@ -4128,7 +4129,7 @@ prt_cas_q,18,136,3	script	Spica Nerius#ep16_room01_b	HIDDEN_WARP_NPC,{
 		next;
 		mes "[Nyhill]";
 		mes "Even if you are twins, you don't look exactly the same.";
-		mes "I just noticed certain differenced.";
+		mes "I just noticed certain differences.";
 		cutin "ep16_nihi_miseria_heine02",2;
 		next;
 		mes "[Skia]";
@@ -4226,7 +4227,7 @@ OnTouch:
 		close;
 	}
 	if (banquet_main_quest == 15) {
-		mes "Let's first reply to the servernt that the invitation will be accepted.";
+		mes "Let's first reply to the servant that the invitation will be accepted.";
 		close;
 	}
 	warp "prt_cas_q",30,128;
@@ -4703,7 +4704,7 @@ alberta,187,147,7	script	Guardian Knight#ep16wal	4_M_KNIGHT_SILVER,{
 		mes "I wanted to investigate myself considering the importance of the matter. But Isenhonor ordered me to go back to Alberta so I had to come back here.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "The pickpocket in the Underprison?";
+		mes "The pickpocket in the underground prison?";
 		next;
 		mes "[Simon]";
 		mes "Yes. I don't know his real name, but he is called ^0000cdBigfoot^000000 in the underworld.";
@@ -4712,7 +4713,7 @@ alberta,187,147,7	script	Guardian Knight#ep16wal	4_M_KNIGHT_SILVER,{
 		mes "Minor offenders like pickpockets are usually locked in this other place. But that guy was caught pickpocketing in Arunafeltz.";
 		next;
 		mes "[Simon]";
-		mes "Due to diplomatic issues, we have taken his custody and locked him in the Underprison.";
+		mes "Due to diplomatic issues, we have taken his custody and locked him in the underground prison.";
 		next;
 		mes "[Simon]";
 		mes "That guy seems to have a lot of information from all over the continent. Even when his words about seen the person of the Walther family wasn't true, I felt that I could get useful information from him.";
@@ -4741,7 +4742,7 @@ alberta,187,147,7	script	Guardian Knight#ep16wal	4_M_KNIGHT_SILVER,{
 		mes "How did your visit to the prison go?";
 		next;
 		mes "[Simon]";
-		mes "You can go see the convict called ^0000cdBigfoot^000000 locked in the ^0000cdUnderprison of the palace^000000.";
+		mes "You can go see the convict called ^0000cdBigfoot^000000 locked in the ^0000cdUnderground prison of the palace^000000.";
 		next;
 		mes "[Simon]";
 		mes "Didn't you hear anything else from Isenhonor? Please extend my greetings to him when you go to Prontera.";
@@ -4857,7 +4858,7 @@ prt_pri00,57,119,1	script	Bigfoot#ep16wal	1_M_JOBGUIDER,{
 		mes "It would be beyond my ability.";
 		next;
 		mes "[Bigfoot]";
-		mes "Don't be such a precisionist. You must be of a high rank to come down here, aren't you?";
+		mes "Don't be such a perfectionist. You must be of a high rank to come down here, aren't you?";
 		next;
 		mes "[Bigfoot]";
 		mes "Well, I understand. I knew it was a difficult favor to ask anyway.";
@@ -4939,7 +4940,7 @@ prt_pri00,57,119,1	script	Bigfoot#ep16wal	1_M_JOBGUIDER,{
 		mes "I heard that you saw a person of the Walther family in a foreign country. Where did you see him? How did you know that he was from the Walther family?";
 		next;
 		mes "[Bigfoot]";
-		mes "Oh, you wanted to know that. As you know, it is rare to see seafarer Walthers in other places of Rune Midgarts, except Alberta and Prontera.";
+		mes "Oh, you wanted to know that. As you know, it is rare to see seafarer Walthers in other places of Rune Midgards, except Alberta and Prontera.";
 		mes "They are good at hiding their identities other than those who are well known.";
 		next;
 		mes "[Bigfoot]";
@@ -5127,7 +5128,7 @@ veins,156,160,7	script	K#ep16wal	4_M_RASWORD,{
 		mes "In fact I know nothing about his death myself. However, he ^0000cdsent me here with a mission^000000 before incident broke out.";
 		next;
 		mes "[K]";
-		mes "When I was going to go back after completing the mission, he sent me a lot of money and a ^0000cdletter^000000. It said ^0000cdnot to return to Rune Midgarts^000000.";
+		mes "When I was going to go back after completing the mission, he sent me a lot of money and a ^0000cdletter^000000. It said ^0000cdnot to return to Rune Midgards^000000.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "And then?";
@@ -5148,7 +5149,7 @@ veins,156,160,7	script	K#ep16wal	4_M_RASWORD,{
 		mes "I guess Isenarm didn't want you to be involved. If anything happened to him, you would have been the one in the biggest trouble.";
 		next;
 		mes "[K]";
-		mes "Ha... Perhaps... I did't think of that... Here are the ^0000cdletter and sword Isenarm^000000 has give me.";
+		mes "Ha... Perhaps... I didn't think of that... Here are the ^0000cdletter and sword Isenarm^000000 has give me.";
 		next;
 		mes "[K]";
 		mes "Please give them to Isenhonor. I hope they help him recover his brother's honor.";
@@ -5433,7 +5434,7 @@ prt_cas_q,19,85,4	script	Kronecker G. Heine#ep16	4_EP16_GRANZ,{
 			next;
 			cutin "ep16_kronecker_granz_heine",2;
 			mes "[Kronecker]";
-			mes "My name is Kronecker Granz Heine.";
+			mes "My name is Kronecker Grantz Heine.";
 			next;
 			cutin "ep16_friedrich_stolz_heine",1;
 			mes "[Friedrich Stoltze]";
@@ -5585,7 +5586,7 @@ prt_cas_q,19,85,4	script	Kronecker G. Heine#ep16	4_EP16_GRANZ,{
 		mes "Although I feel reluctant to reveal somewhat embarrassing part of the royal family to you,";
 		next;
 		mes "[Kronecker]";
-		mes "It was the royal family of Rune Midgarts who let you observe the ritual anyway.";
+		mes "It was the royal family of Rune Midgards who let you observe the ritual anyway.";
 		mes "And you were the one who fought the intruders during the incident...";
 		next;
 		mes "[Kronecker]";
@@ -5817,17 +5818,17 @@ prt_cas_q,90,186,5	script	Maximilian Roegenburg#e	4_EP16_MAX,{
 
 	if (banquet_roegenburg_quest == 0) {
 		mes "[Maximilian]";
-		mes "Hello, adventurers. I am honnored you have visited the ^0000cdRoegenburg^000000. I am ^0000cdMaximilian Roegenburg^000000.";
+		mes "Hello, adventurers. I am honored you have visited the ^0000cdRoegenburg^000000. I am ^0000cdMaximilian Roegenburg^000000.";
 		next;
 		mes "[Maximilian]";
-		mes "We are one of seven royal families that found the kingdom and have work hard for Rune Midgarts.";
+		mes "We are one of seven royal families that found the kingdom and have work hard for Rune Midgards.";
 		next;
 		mes "[Maximilian]";
 		mes "^0000cdHelmut Roegenburg^000000, the heir of our family, is supposed to participate in the royal assembly. How about seeing him?";
 		next;
 		cutin "16hel",0;
 		mes "[Helmut]";
-		mes "Hellow, I am ^0000cdHelmut Roegenburg^000000.";
+		mes "Hello, I am ^0000cdHelmut Roegenburg^000000.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "Hello, I'm invited to this banquet. " + strcharinfo(0) + " It is nice to see you.";
@@ -5860,7 +5861,7 @@ prt_cas_q,90,186,5	script	Maximilian Roegenburg#e	4_EP16_MAX,{
 	}
 	if (banquet_roegenburg_quest >= 2 && banquet_roegenburg_quest <= 6) {
 		mes "[Maximilian]";
-		mes "The Roegenburg is proud that we are descents of Wilhelm, the national hero, and contributed to the foundation and development of Rune Midgarts Kingdom.";
+		mes "The Roegenburg is proud that we are descents of Wilhelm, the national hero, and contributed to the foundation and development of Rune Midgards Kingdom.";
 		next;
 		mes "[Maximilian]";
 		mes "Therefore, we hoped that the children could grow into decent adults, but they were raised without their parents' care and now they tend to behave rudely and act as they want.";
@@ -6180,7 +6181,7 @@ prt_cas_q,96,184,1	script	Agnes Roegenburg#ep16lu	4_EP16_AGNES,{
 			mes "No! you have brought all of them. I'm so happy!";
 			next;
 			mes "[Agnes]";
-			mes "I'll take pearls to the jewller, the best jeweler. They are so pretty!";
+			mes "I'll take pearls to the jeweler, the best jeweler. They are so pretty!";
 			next;
 			mes "[Agnes]";
 			mes "I'll send soft hairs too. I wonder what they will turn into.";
@@ -6312,7 +6313,7 @@ prt_cas_q,96,184,1	script	Agnes Roegenburg#ep16lu	4_EP16_AGNES,{
 			mes "Let me see.... Yes! they are what I wanted. You are the best.";
 			next;
 			mes "[Agnes]";
-			mes "I think I can use these to make a beautiful corsage. It will be fresh and beatiful.";
+			mes "I think I can use these to make a beautiful corsage. It will be fresh and beautiful.";
 			next;
 			mes "[Agnes]";
 			mes "Dear adventurer, Thank you very much. This is a small token of my sincerity.";
@@ -6576,7 +6577,7 @@ prt_cas_q,96,184,1	script	Agnes Roegenburg#ep16lu	4_EP16_AGNES,{
 		mes "I mean I prepared a dress that I choose thinking that I would go with Myer. And now the partner has changed and I have to prepare considering him.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "Yes, you shoud!!!";
+		mes "Yes, you should!!!";
 		next;
 		mes "[Agnes]";
 		mes "I expected you would agree as a woman like me.";
@@ -6609,7 +6610,7 @@ prt_cas_q,96,184,1	script	Agnes Roegenburg#ep16lu	4_EP16_AGNES,{
 		mes "So I hired very skillful person who can make a dress and accessories, but the key is materials. I guess that you are very experienced and can get what I need.";
 		next;
 		mes "[Agnes]";
-		mes "If I go out to get a dress, I may be the first princess in Rune Midgarts who dies for a dress. So would you please save me from this situation?";
+		mes "If I go out to get a dress, I may be the first princess in Rune Midgards who dies for a dress. So would you please save me from this situation?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "Of course, I'll do my best to help you.";
@@ -6702,7 +6703,7 @@ prt_cas_q,96,184,1	script	Agnes Roegenburg#ep16lu	4_EP16_AGNES,{
 			mes "I prefer the soft pink dress other than young flower petal blooming on a large field. To be like that, I think I need a very soft silk cloth.";
 			next;
 			mes "[Agnes]";
-			mes "In the banquet, if my soft dress widens like young flower petal, the place will be full with fragnance.";
+			mes "In the banquet, if my soft dress widens like young flower petal, the place will be full with fragrance.";
 			next;
 			mes "[Agnes]";
 			mes "The width of the skirt should be as wider as possible. The dress will look like a flower petal shaking every time I move.";
@@ -6881,7 +6882,7 @@ prt_cas_q,86,180,7	script	Kalbern#ep16lug	4_M_RUSCHILD,{
 		mes "I am ^0000cdKalbern^000000 and a chamberlain of Helmut.";
 		next;
 		mes "[Kalbern]";
-		mes "I served Helmut in a harsh front in the border area. Now I am in Prontera, the capital city of Rune Midgarts and I cannot adapt to this situation";
+		mes "I served Helmut in a harsh front in the border area. Now I am in Prontera, the capital city of Rune Midgards and I cannot adapt to this situation";
 		next;
 		mes "[Kalbern]";
 		mes "I also lose my nerve when I see noble people and royal family in the palace.";
@@ -6937,7 +6938,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "To carry on the will of Wilhelm Roegenburg, a national hero, we, at the Roegenburg, are making lots of efforts to protect honor, justice and traditions.";
 		next;
 		mes "[Wolf]";
-		mes "Since the foundation of Rune Midgarts, lots of people from the Roegenburg have made contribution to the country and this is our pride.";
+		mes "Since the foundation of Rune Midgards, lots of people from the Roegenburg have made contribution to the country and this is our pride.";
 		next;
 		mes "[Wolf]";
 		mes "Currently ^0000cdHelmut Roegenburg^000000, who is an excellent candidate for the throne, is participating in the royal assembly. Did you see him?";
@@ -7098,7 +7099,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "Looking at the answer, it really seems that the Wigner people love ^0000cdnumers and gold^000000. Will you try to solve it too?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "How come you ask me to dicipher the password. And isn't it a secret thing?";
+		mes "How come you ask me to decipher the password. And isn't it a secret thing?";
 		next;
 		mes "[Wolf]";
 		mes "Because you are reliable person. Just do it for fun.";
@@ -7120,11 +7121,11 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "But what is inside is not easy.";
 		next;
 		mes "[Wolf]";
-		mes "The thing put in the smal bottle in the box will change the dynamics of combats and wars, though it is in a testing stage.";
+		mes "The thing put in the small bottle in the box will change the dynamics of combats and wars, though it is in a testing stage.";
 		next;
 		mes "[Wolf]";
 		mes "You are a reliable person as I expected.";
-		mes "I was sorry when I asked you to do me a favor. We will reward you genersouly.";
+		mes "I was sorry when I asked you to do me a favor. We will reward you generously.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "It is OK. there is message from Isaac.";
@@ -7143,7 +7144,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "I need to check it, but there is no person we count on...";
 		next;
 		mes "[Wolf]";
-		mes "Execuse me, dear adventurer?";
+		mes "Excuse me, dear adventurer?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "Yes?";
@@ -7167,7 +7168,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "No, that is a thing I can do. Then see you soon.";
 		next;
 		mes "[Wolf]";
-		mes "I don't know how to thank you. It is the most acurate to hear the rumor from children. I heard that children gather in a ^0000cdlarge open space^000000 in Prontera..";
+		mes "I don't know how to thank you. It is the most accurate to hear the rumor from children. I heard that children gather in a ^0000cdlarge open space^000000 in Prontera..";
 		next;
 		mes "[Wolf]";
 		mes "Then, see you soon.";
@@ -7224,7 +7225,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "[I changed the rumor I got from children to a relatively softer version and told them.]";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "These days everybody talks about the rumor. I think it will spread throughout Rune Midgarts as well as Prontera.";
+		mes "These days everybody talks about the rumor. I think it will spread throughout Rune Midgards as well as Prontera.";
 		next;
 		mes "[Wolf]";
 		mes "The rumor is....very.... specific and malicious. It must be circulated on purpose by someone who knows the circumstances of my family.";
@@ -7270,7 +7271,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		next;
 		cutin "16mye_nor",1;
 		mes "[Myer]";
-		mes "Well, I asked for help church freinds, merchant frends and back street friends. Everyone said they would be willing to help me, when I told them I need help.";
+		mes "Well, I asked for help church friends, merchant friends and back street friends. Everyone said they would be willing to help me, when I told them I need help.";
 		next;
 		mes "[Myer]";
 		mes "I wonder how you can deal with invisible enemy.";
@@ -7280,7 +7281,7 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		mes "I don't understand why you spread such a rumor and do all these things.";
 		next;
 		mes "[Wolf]";
-		mes "No, in fact, I think I know very well. It is becaused of your immature sympathety and you want to spoil my plan!";
+		mes "No, in fact, I think I know very well. It is because of your immature sympathy and you want to spoil my plan!";
 		next;
 		cutin "16mye_ang",1;
 		mes "[Myer]";
@@ -7298,10 +7299,10 @@ prt_cas_q,96,186,3	script	Wolf Roegenburg#ep16lug	4_EP16_WOLF,{
 		next;
 		cutin "16mye_ang",1;
 		mes "[Myer]";
-		mes "Your plan is to delveop the power of the family and unify the contient. Then what? what will you have. Achievement? Revenge?";
+		mes "Your plan is to develop the power of the family and unify the continent. Then what? what will you have. Achievement? Revenge?";
 		next;
 		mes "[Myer]";
-		mes "As you know, such as thing causes another pain. We were raised without a parent. But we didn't fall becasue we had a family and we were rich.";
+		mes "As you know, such as thing causes another pain. We were raised without a parent. But we didn't fall because we had a family and we were rich.";
 		next;
 		mes "[Myer]";
 		mes "And we had brothers ^0000cdto depend on^000000. Think how we did to comfort one another? There are not many people that are so lucky as we were.";
@@ -7835,7 +7836,7 @@ function	script	F_kids_roegenburg_quest	{
 		mes "That is easy. Now you little one. What do you need?";
 		next;
 		mes "[Jin]";
-		mes "I want a history book, which includes all history of Rune Midgarts. It is in the royal library and I have never see it.";
+		mes "I want a history book, which includes all history of Rune Midgards. It is in the royal library and I have never see it.";
 		next;
 		mes "[Jin]";
 		mes "I know no one around me who can access the palace and book stores do not sell it. Please get it for me.";
@@ -7847,7 +7848,7 @@ function	script	F_kids_roegenburg_quest	{
 		mes "Are you crazy? What do you think I am? Borrow it for me.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "OK. ^0000cdHunting 33 Majoruroses, Getting 12 pieces of soft sick cloth an borrowing the history book on Rune Midgarts from the royal library^000000. I'll be back soon.";
+		mes "OK. ^0000cdHunting 33 Majoruroses, Getting 12 pieces of soft sick cloth an borrowing the history book on Rune Midgards from the royal library^000000. I'll be back soon.";
 		next;
 		mes "[Harriet]";
 		mes "I will be waiting for you!";
@@ -8075,7 +8076,7 @@ function	script	F_kids_roegenburg_quest	{
 		mes "Yes. That's why I am here to check, teach and lead them.";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "You are doing a great jop.";
+		mes "You are doing a great job.";
 		next;
 		mes "[Myer]";
 		mes "Well. it's just what I can do. By the way, what is the message?";
@@ -8153,7 +8154,7 @@ prontera,271,70,3	script	Kiddo#ep16lug01	4_M_MIKID,{
 			mes "How can you say that! You must have forgotten what you should bring.";
 			next;
 			mes "[Harriet]";
-			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgarts ^000000";
+			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgards ^000000";
 			next;
 			mes "[Harriet]";
 			mes "and hmm... ^0000cdkilling of 33 Majoruroses^000000 for Allen.";
@@ -8233,7 +8234,7 @@ prontera,271,68,1	script	Kiddo#ep16lug02	4_M_KID1,5,5,{
 			mes "Hey! You aren't, are you? You don't seem to be a such person. You forget what you should get, didn't you?";
 			next;
 			mes "[Harriet]";
-			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgarts ^000000";
+			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgards ^000000";
 			next;
 			mes "[Harriet]";
 			mes "and hmm... ^0000cdkilling of 33 Majoruroses^000000 for Allen.";
@@ -8305,7 +8306,7 @@ prontera,269,69,5	script	Kiddo#ep16lug03	4_F_KID2,{
 			mes "Hey! You aren't, are you? You don't seem to be a such person. You forget what you should get, didn't you?";
 			next;
 			mes "[Harriet]";
-			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgarts ^000000";
+			mes "First, ^0000cd12 pieces of soft cloth^000000, ^0000cdhistory book on Rune Midgards ^000000";
 			next;
 			mes "[Harriet]";
 			mes "and hmm... ^0000cdkilling of 33 Majoruroses^000000 for Allen.";
@@ -8370,7 +8371,7 @@ yuno_fild01,242,175,5	script	Helmut Roegenburg#ep16lug01_b	4_EP16_HELMUT,5,5,{
 		mes "And I thought that it is the right way to develop the power that makes people to have no choice but to follow.";
 		next;
 		mes "[Helmut]";
-		mes "So, my goal was to unify the continent and make my power reached at every corner of the continent. So I trained and trained myslef.";
+		mes "So, my goal was to unify the continent and make my power reached at every corner of the continent. So I trained and trained myself.";
 		next;
 		mes "[Helmut]";
 		mes "However, when I listened to Myer and Agnes, I realized that the way I pursue could cause sadness and misfortune to someone.";
@@ -8546,7 +8547,7 @@ prt_cas_q,80,80,4	script	Butler for the Richards	1_M_LIBRARYMASTER,{
 		case 1:
 			mes "[Butler]";
 			if (isbegin_quest(5403) == 2)
-				mes "The former heads oo the Richard family have also taken enough rest after training. Well, it's too common to mention, I guess.";
+				mes "The former heads of the Richard family have also taken enough rest after training. Well, it's too common to mention, I guess.";
 			else
 				mes "The Richard family runs various ways of training. Taking a rest is one of the most important training.";
 			close;
@@ -8734,7 +8735,7 @@ prt_cas_q,93,74,4	script	Po Richard#EP161GAM	4_M_6THPRIN1,{
 		mes "In fact, it was not your will to come here. I am pretty sure that you must have come here since the his nibs called you. I understand that.";
 		next;
 		mes "[Po Richard]";
-		mes "Although the adventurers may care less about the palace affairs, the Richard family is in charge of the military force of Rune Midgarts.";
+		mes "Although the adventurers may care less about the palace affairs, the Richard family is in charge of the military force of Rune Midgards.";
 		next;
 		emotion ET_QUESTION;
 		mes "[Po Richard]";
@@ -8775,7 +8776,7 @@ prt_cas_q,93,74,4	script	Po Richard#EP161GAM	4_M_6THPRIN1,{
 		mes "As known, the Richard family is producing outstanding warriors. We run a systematic training system to support that.";
 		next;
 		mes "[Po Richard]";
-		mes "I am not fond of such training, but I believe that it is an effective training program based on the knowhow of the family.";
+		mes "I am not fond of such training, but I believe that it is an effective training program based on the know-how of the family.";
 		next;
 		mes "[Po Richard]";
 		mes "Please listen up since I am about to get to the point.";
@@ -9013,7 +9014,7 @@ prt_cas_q,93,129,3	script	Queen#ep16_1	4_EP16_EGEO,{
 	}
 	if (banquet_geoborg_quest == 1) {
 		mes "[Queen Catherine D. Geoborg]";
-		mes "Welsome.";
+		mes "Welcome.";
 		mes "I am Queen Catherine D. Geoborg.";
 		cutin "ep16gao_2",2;
 		next;
@@ -9291,7 +9292,7 @@ prt_cas,82,240,3	script	Lidion Geoborg#ep16_1	4_M_DOCTOR,{
 		mes "We, the Geoborg family, is one of the seven royal families, but we are the creme de la creme for producing the highest number of kings in the history.";
 		next;
 		mes "[Lidion Geoborg]";
-		mes "In fact, we are settled in Prontera, the center of the Rune Midgarts.";
+		mes "In fact, we are settled in Prontera, the center of the Rune Midgards.";
 		next;
 		mes "[Lidion Geoborg]";
 		mes "Despite the series of unfortunate events regarding the princes after the death of King Tristan III,";
@@ -9412,7 +9413,7 @@ OnTouch:
 		next;
 		mes "[Mumbling Sound]";
 		mes "No...";
-		mes "I didn't say anything wrond.";
+		mes "I didn't say anything wrong.";
 		mes "Did I?";
 		next;
 		mes "[Mumbling Sound]";
@@ -9746,7 +9747,7 @@ prt_cas_q,82,21,1	script	Levuiere Wigner#ep16wig	4_EP16_LOUVIERE,{
 		mes "Since our ancestors founded this kingdom, we deserve to produce a king.";
 		next;
 		mes "[Levuiere]";
-		mes "The king is a hollow position. It only comes with resposibilities?";
+		mes "The king is a hollow position. It only comes with responsibilities?";
 		mes "Haven't I told you before? Did you forget?";
 		next;
 		mes "[Levuiere]";
@@ -10162,7 +10163,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 		mes "Well, please don't take it wrong. Some people have said that Katrin may have done it to draw attention or they cannot trust Katrin.";
 		next;
 		mes "[Jurgen]";
-		mes "What a nonesense! Phew... This is exactly why I have told her to open her heart to others and talk more...";
+		mes "What a nonsense! Phew... This is exactly why I have told her to open her heart to others and talk more...";
 		next;
 		classchange( 4_EP16_POE, "Katrin Wigner#ep16wig", bc_self );
 		cutin "16kat_nor",2;
@@ -10224,7 +10225,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 		next;
 		cutin "16jur_sim",0;
 		mes "[Jurgen]";
-		mes "That's why you need to open up to others and act nicey...";
+		mes "That's why you need to open up to others and act nice...";
 		next;
 		cutin "16kat_nor",2;
 		mes "[Katrin]";
@@ -10433,7 +10434,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 		next;
 		cutin "16jur_sim",0;
 		mes "[Jurgen]";
-		mes "What doest she like? Do you know?";
+		mes "What doesn't she like? Do you know?";
 		next;
 		cutin "16isa",1;
 		mes "[Isaac]";
@@ -10509,7 +10510,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 		mes "I have once tried to distribute them all over the continent. You used to be able to get them by just digging the ground. Tourists used to pick them up as souvenirs or gamblers used to use them as talismans for their prayers to the sea-god.";
 		next;
 		mes "[Isaac]";
-		mes "Since it bacame hard to get them, I have given up the plan. The game is not worth the candle, having to kill the Medusa on the way.";
+		mes "Since it became hard to get them, I have given up the plan. The game is not worth the candle, having to kill the Medusa on the way.";
 		next;
 		cutin "16jur_nor",0;
 		mes "[Jurgen]";
@@ -10528,7 +10529,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 		next;
 		cutin "16isa",1;
 		mes "[Isaac]";
-		mes "Is there such a thing? Why do you need a Witherless Rose when you can just buy another flower before the older one whithers?";
+		mes "Is there such a thing? Why do you need a Witherless Rose when you can just buy another flower before the older one withers?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "You want what you like to last long. If you replace it with another flower, it is not the same flower you liked anymore.";
@@ -10853,7 +10854,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 				next;
 				cutin "16jur_sim",0;
 				mes "[Jurgen]";
-				mes "Sorry about the difficult request. I guess I should go there myself. You may be able to see the news that the heir of the Wigner family has been crushed to death by his followers on Daily Rune Midgarts tomorrow morning.";
+				mes "Sorry about the difficult request. I guess I should go there myself. You may be able to see the news that the heir of the Wigner family has been crushed to death by his followers on Daily Rune Midgards tomorrow morning.";
 				next;
 				mes "[Jurgen]";
 				mes "Or, the poor maid could be hospitalized by tomorrow. Anyway, I understand.";
@@ -10896,7 +10897,7 @@ prt_cas_q,95,9,5	script	Jurgen Wigner#ep16wig	4_M_4THPRIN1,{
 			mes "Does she already have a boyfriend? I am not surprised. She is so attractive after all. No wonder I have fallen for her.";
 			next;
 			mes "[" + strcharinfo(0) + "]";
-			mes "No, not that eiter... She just has said she is currently not in the situation to date someone.";
+			mes "No, not that either... She just has said she is currently not in the situation to date someone.";
 			next;
 			mes "[Jurgen]";
 			mes "Whoa... ^0000cdIt is my first time to want something so badly in this life^000000. Never did I know that it would be so difficult to get.";
@@ -11713,7 +11714,7 @@ prt_cas,322,216,5	script	Maid#ep16wig02	1_F_04,{
 		mes "Argh... My arms... Was there anyone else in the room?";
 		next;
 		mes "[Maid]";
-		mes "You must know what kind of family that is. It is the wealthiest family in Rune Midgarts. Despite being a temporary residence, the room was decorated with so much care.";
+		mes "You must know what kind of family that is. It is the wealthiest family in Rune Midgards. Despite being a temporary residence, the room was decorated with so much care.";
 		next;
 		mes "[Maid]";
 		mes "All the gorgeous pieces of furniture and carpets... I have never seen tiger skin as white and huge as that one in there.";
@@ -11961,7 +11962,7 @@ prt_cas,322,216,5	script	Maid#ep16wig02	1_F_04,{
 		mes "He added how ^0000cdan enormous indemnity would be imposed on us^000000 if we fail to do so.";
 		next;
 		mes "[Mary]";
-		mes "When I told him that I would fill her spot, he said there were enough male chamberlains and ^0000cdhe needed a maid^000000 who would work in the kitchen and run cleaning duries.";
+		mes "When I told him that I would fill her spot, he said there were enough male chamberlains and ^0000cdhe needed a maid^000000 who would work in the kitchen and run cleaning duties.";
 		next;
 		mes "[Mary]";
 		mes "I tried to find a replacement for her, but I couldn't. Everyone was already busy working at the palace or supplying the things for the banquet.";
@@ -11999,7 +12000,7 @@ prt_cas,322,216,5	script	Maid#ep16wig02	1_F_04,{
 		next;
 		emotion ET_HUK;
 		mes "[Mary]";
-		mes "Oh! No, you shouln't. I told you. You are the only one who knows about it.";
+		mes "Oh! No, you shouldn't. I told you. You are the only one who knows about it.";
 		mes "^0000cdIf I get busted, I would be in trouble^000000. We don't have the money to pay the compensation.";
 		next;
 		mes "[Mary]";
@@ -12150,7 +12151,7 @@ S_Talk:
 			mes "Wipe the Mold Power over the mold which resembles demon's skin and sprinkle it with Holy Water.";
 			next;
 			mes "[Scrub Sponge]";
-			mes "And wipe it as I tell you. I am not going to tell you again so pay attentention.";
+			mes "And wipe it as I tell you. I am not going to tell you again so pay attention.";
 			next;
 			mes "[Scrub Sponge]";
 			mes "Tap it once gently and tap it three times more. You really need to soak the wall with the Holy Water and Mold Powder to wipe it off. This is very important.";
@@ -12658,19 +12659,19 @@ prt_cas,97,216,2	script	Chamberlain#vip_alimi	4_M_RUSMAN2,{
 
 prt_cas,79,219,7	script	Banquet Hall Guest#ep16_1	4_F_MALAYA,{
 	mes "[Banquet Hall Guest]";
-	mes "Oh, aren't you the adventurer who has saved the world? Please visit Portmalaya someday. Everyone will welcome you there! Your story is known even to a far away place from here!";
+	mes "Oh, aren't you the adventurer who has saved the world? Please visit Port Malaya someday. Everyone will welcome you there! Your story is known even to a far away place from here!";
 	close;
 }
 
 prt_cas,81,235,3	script	Banquet Hall Guest#ep16_2	4_F_BRZ_WOMAN,{
 	mes "[Banquet Hall Guest]";
-	mes "The Palace of Rune Midgarts is so big and glamourous. It somewhat feels exotic too. It's been a long way, but I am glad to be here.";
+	mes "The Palace of Rune Midgards is so big and glamourous. It somewhat feels exotic too. It's been a long way, but I am glad to be here.";
 	close;
 }
 
 prt_cas,87,231,5	script	Banquet Hall Guest#ep16_3	4_M_TWTEAMAN,{
 	mes "[Banquet Hall Guest]";
-	mes "I visited the Palace of Rune Midgarts long time ago. It has changed a lot ever since. It has become much more glamourous and magnificent that I really enjoy being guided around this place.";
+	mes "I visited the Palace of Rune Midgards long time ago. It has changed a lot ever since. It has become much more glamourous and magnificent that I really enjoy being guided around this place.";
 	close;
 }
 
@@ -13032,10 +13033,10 @@ prt_cas,343,67,4	script	Uptight Librarian#ep16l	1_F_LIBRARYGIRL,{
 		mes "What kind of book are you looking for?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
-		mes "A book about history of Rune Midgarts.";
+		mes "A book about history of Rune Midgards.";
 		next;
 		mes "[Uptight Librarian]";
-		mes "Hm... history of Rune Midgarts.";
+		mes "Hm... history of Rune Midgards.";
 		mes "Are you going to borrow the book?";
 		next;
 		mes "[" + strcharinfo(0) + "]";
@@ -13164,7 +13165,7 @@ prt_cas,343,67,4	script	Uptight Librarian#ep16l	1_F_LIBRARYGIRL,{
 		next;
 		mes "[Uptight Librarian]";
 		mes "I have been alone these days as no one has visited the library due to the banquet.";
-		mes "History of Rune Midgarts.";
+		mes "History of Rune Midgards.";
 		next;
 		mes "[Uptight Librarian]";
 		mes "You can borrow it for one week. There is a fee for overdue books, but I was instructed to make you exempt from it";
@@ -13279,7 +13280,7 @@ prt_cas,97,248,5	script	Court Musician#orint	2_M_BARD_ORIENT,{
 				117, "Dream of Whale",
 				128, "Splendide Dreams",
 				137, "Dazzling Snow",
-				145, "Marschmallow Waltz",
+				145, "Marshmallow Waltz",
 				155, "Eclage",
 				160, "Jittering Nightmare";
 		}
@@ -13471,7 +13472,7 @@ OnTouch:
 // Exchanges and enchants npc
 prt_cas,165,255,7	script	Commissary#ep16	4_M_JOB_KNIGHT2,{
 	mes "[Commissary Arner]";
-	mes "You can exchange the Honor Marks given by the noble people of Run Midgartz as the token of trust with some valuable items of Prontera.";
+	mes "You can exchange the Honor Marks given by the noble people of Rune Midgards as the token of trust with some valuable items of Prontera.";
 	next;
 	switch( select( "Consumables", "Armors", "View item description" ) ) {
 	case 1:
@@ -13889,7 +13890,7 @@ OnTouchNPC:
 }
 prt_q,158,316,4	script	Soldier#EP162PS14	8W_SOLDIER,1,1,{
 	mes "[Soldier]";
-	mes "My friend has followed Scienties Doyeon. I am worried. I have heard that she really is an oddball.";
+	mes "My friend has followed Scientist Doyeon. I am worried. I have heard that she really is an oddball.";
 	close;
 OnTouchNPC:
 	npctalk "Soldier: Hiya!";
@@ -14323,7 +14324,7 @@ prt_q,232,318,3	script	PecoPeco Mechanic#EP161_2	8W_SOLDIER,{
 	}
 	emotion ET_SORRY;
 	mes "[PecoPeco Mechanic]";
-	mes "If you are here to borrow a Pecopeco, I have to say I am sorry.";
+	mes "If you are here to borrow a PecoPeco, I have to say I am sorry.";
 	next;
 	mes "[PecoPeco Mechanic]";
 	mes "Due to the emergency situation, all troops of Prontera are deployed to protect the residents of Prontera.";
@@ -14387,7 +14388,7 @@ prt_q,229,317,6	script	Girl#EP161GU03	HIDDEN_WARP_NPC,{
 prt_q,55,350,5	script	PecoPeco Mechanic#EP161_1	8W_SOLDIER,{
 	emotion ET_SORRY;
 	mes "[PecoPeco Mechanic]";
-	mes "If you are here to borrow a Pecopeco, I have to say I am sorry.";
+	mes "If you are here to borrow a PecoPeco, I have to say I am sorry.";
 	next;
 	mes "[PecoPeco Mechanic]";
 	mes "Due to the emergency situation, all troops of Prontera are deployed to protect the residents of Prontera.";
@@ -14856,7 +14857,7 @@ OnTouch_:
 		npctalk "WUG is the best!", "", bc_area;
 		break;
 	case 5:
-		npctalk "I want to fo home...", "", bc_area;
+		npctalk "I want to go home...", "", bc_area;
 		break;
 	case 4:
 	case 6:
@@ -14878,7 +14879,7 @@ OnTouch_:
 		npctalk "For Himmelmez...", "", bc_area;
 		break;
 	case 16:
-		npctalk "I am hungey...", "", bc_area;
+		npctalk "I am hungry...", "", bc_area;
 		break;
 	case 17:
 		npctalk "I had a date...", "", bc_area;
@@ -14938,42 +14939,42 @@ prt_q,74,227,2	duplicate(Dead Villager#EP161DIE01)	Dead Villager#EP161DIE19	4_M_
 prt_q,45,146,8	duplicate(Dead Villager#EP161DIE01)	Dead Villager#EP161DIE20	4_M_DIEMAN,2,2
 
 prt_q,148,49,0	script	Sign#EP161ETC12	2_BULLETIN_BOARD,{
-	mes "[Prontera, the Capital of Rune Midgartz Kingdom]";
+	mes "[Prontera, the Capital of Rune Midgards Kingdom]";
 	mes "Welcome to Prontera";
-	mes "in the heart of Rune Midgarts!";
+	mes "in the heart of Rune Midgards!";
 	mes "Prontera is located";
 	mes "in the center of the continent,";
 	mes "and it is famous as the busy city";
 	mes "of commerce and trade.";
 	next;
-	mes "[Prontera, the Capital of Rune Midgartz Kingdom]";
+	mes "[Prontera, the Capital of Rune Midgards Kingdom]";
 	mes "There are major buildings including";
 	mes "the Prontera Palace where job change to Crusader is available;";
 	mes "Prontera Cathedral where job changes to Acolyte, Priest are available";
 	mes "and wedding ceremonies are held;";
 	mes "the Knight's Building, etc.";
 	next;
-	mes "[Prontera, the Capital of Rune Midgartz Kingdom]";
+	mes "[Prontera, the Capital of Rune Midgards Kingdom]";
 	mes "There are many people and stores";
 	mes "as well so make sure to look around.";
 	next;
-	mes "[Prontera, the Capital of Rune Midgartz Kingdom]";
+	mes "[Prontera, the Capital of Rune Midgards Kingdom]";
 	mes "Also, in the south east of the central fountain,";
 	mes "there is the historic Quadro Blacksmith's Workshop.";
 	mes "Drop by the place if you want to get";
 	mes "your equipment";
 	mes "repaired.";
 	next;
-	mes "[Prontera, the Capital of Rune Midgartz Kingdom]";
+	mes "[Prontera, the Capital of Rune Midgards Kingdom]";
 	mes "There is Izlude in the south east, Payon in the south, Geffen in the west and Al De Baran in the north.";
 	close;
 }
 
-prt_q,155,190,4	script	Krimhilt	GUILD_FLAG,{ end; }
-prt_q,146,194,3	duplicate(Krimhilt)	Svanhilt	GUILD_FLAG
-prt_q,143,203,2	duplicate(Krimhilt)	Razriggs	GUILD_FLAG
-prt_q,167,203,6	duplicate(Krimhilt)	Skoegul	GUILD_FLAG
-prt_q,165,194,5	duplicate(Krimhilt)	Guindle	GUILD_FLAG
+prt_q,155,190,4	script	Kriemhild	GUILD_FLAG,{ end; }
+prt_q,146,194,3	duplicate(Kriemhild)	Swanhild	GUILD_FLAG
+prt_q,143,203,2	duplicate(Kriemhild)	Fadhgridh	GUILD_FLAG
+prt_q,167,203,6	duplicate(Kriemhild)	Skoegul	GUILD_FLAG
+prt_q,165,194,5	duplicate(Kriemhild)	Gondul	GUILD_FLAG
 
 // Prison quests
 
@@ -15695,7 +15696,7 @@ prt_pri00,51,116,8	script	Ellond Lawrence#EP161ER	4_M_CRU,1,1,{
 			mes "Nothing particular. What you can imagine about the dungeon of the kingdom is all there is.";
 			next;
 			mes "[Ellond Lawrence]";
-			mes "I was told it was made to lock up the menaces to peace and safety of Rune Midgarts.";
+			mes "I was told it was made to lock up the menaces to peace and safety of Rune Midgards.";
 			next;
 			mes "[Ellond Lawrence]";
 			mes "Basically, it's strongly made, but...";
@@ -15717,7 +15718,7 @@ prt_pri00,51,116,8	script	Ellond Lawrence#EP161ER	4_M_CRU,1,1,{
 			mes "This facility is so old and there is no document written about it. We just pass down what people say about it.";
 			next;
 			mes "[Ellond Lawrence]";
-			mes "What's certain is that they were the culprit of the chaos created in Rune Midgarts in the past.";
+			mes "What's certain is that they were the culprit of the chaos created in Rune Midgards in the past.";
 			next;
 			mes "[Ellond Lawrence]";
 			mes "Anyway, there is no document left about them ? for what they were charged or sentences confirmed against them.";
@@ -15794,7 +15795,7 @@ prt_pri00,58,128,4	script	Overwatcher Terketh#ep1	4_M_JOB_HUNTER,{
 	mes "[Terketh]";
 	mes "What do you want?";
 	next;
-	if (select( "To the Past Memories of the Royal Family", "To the oudside" ) == 2) {
+	if (select( "To the Past Memories of the Royal Family", "To the outside" ) == 2) {
 		setpcblock PCBLOCK_NPC, true;
 		sleep2 2000;
 		npctalk "Well, sure.", "", bc_self;
@@ -17086,7 +17087,7 @@ prt_prison,103,214,4	script	Prisoner 103GD214#EP161	4_DARKLORD,{
 				close;
 			}
 			mes "[Prisoner 103GD214]";
-			mes "Flower...? ~Grunts~ Darkness should be stabil...";
+			mes "Flower...? ~Grunts~ Darkness should be stable...";
 			next;
 			delitem 712,1;// Flower
 			if (rand(2) == 0) {// todo chance

+ 263 - 236
npc/re/quests/quests_rockridge.txt

@@ -163,8 +163,7 @@ OnTouch:
 	end;
 
 OnInit:
-	questinfo 7790, QTYPE_QUEST, 1;
-	setquestinfo_level 7790,100,175;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 100 && !isbegin_quest(7790)" );
 	end;
 }
 
@@ -238,9 +237,9 @@ harboro1,80,218,5	script	Costello#harboro1	10210,{
 		mes "[Costello]";
 		mes "Go to the Sheriff and tell him that you came to help with the Buffalo Bandits situation. He'll tell you what to do.";
 		mes "Please help Pink Rose? I mean, Rock Ridge.";
+		rock_main_quest = 2;
 		erasequest 7791;
 		setquest 7792;// Problems in Rock Ridge 2
-		rock_main_quest = 2;
 		next;
 		select("Who's the sheriff?");
 		mes "[Costello]";
@@ -307,9 +306,9 @@ harboro1,80,218,5	script	Costello#harboro1	10210,{
 		next;
 		mes "^4d4dffCostello is looking around him and babbling anxiously.";
 		mes "I should go tell Wyatt that Costello wants to hear what the bandits have to say.^000000";
+		rock_main_quest = 4;
 		erasequest 7793;
 		setquest 7794;// Expected Response
-		rock_main_quest = 4;
 		close;
 	}
 	if (rock_main_quest == 4 || rock_main_quest == 5) {
@@ -417,10 +416,7 @@ harboro1,80,218,5	script	Costello#harboro1	10210,{
 	close;
 
 OnInit:
-	questinfo 7792, QTYPE_QUEST, 1;
-	setquestinfo_req 7792,7791,1;
-	questinfo 7794, QTYPE_QUEST, 1;
-	setquestinfo_req 7794,7793,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 1 || rock_main_quest == 3" );
 	end;
 }
 
@@ -539,9 +535,9 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		mes "If you don't think you can find it, then just follow the railroad.";
 		mes "We'll wait for him by the train.";
 		mes "Let's go see how ugly that leader of the Buffalo Bandits, ^4d4dffJohnny James^000000, is.";
+		rock_main_quest = 5;
 		erasequest 7794;// Expected Response
 		setquest 7795;// Negotiation on the Railroad
-		rock_main_quest = 5;
 		close;
 	}
 	if (rock_main_quest == 5) {
@@ -598,6 +594,7 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		mes "but Ivoka has a different idea.";
 		mes "Let's listen to what he has to say.";
 		rock_main_quest = 7;
+		questinfo_refresh();	// the update of the variable refreshes questinfo
 		close;
 	}
 	if (rock_main_quest == 7) {
@@ -627,9 +624,9 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		next;
 		mes "[Wyatt Warp]";
 		mes "Who knows? You might find something to use against the Buffalo Bandits.";
+		rock_main_quest = 10;
 		erasequest 7798;
 		setquest 7799;// Shawn McCurdy's Weapon 1
-		rock_main_quest = 10;
 		close;
 	}
 	if (rock_main_quest == 10) {
@@ -729,9 +726,9 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		mes "Now go to ^4d4dffShawn McCurdy^000000, will you?";
 		mes "We're almost done with the bandits!";
 		mes "Hang in there!";
+		rock_main_quest = 16;
 		erasequest 7804;// Location of the Ores
 		setquest 7805;// Location of the Ores 2
-		rock_main_quest = 16;
 		close;
 	}
 	if (rock_main_quest == 16) {
@@ -801,14 +798,14 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		mes "Here, you've earned it.";
 		mes "Be proud of yourself.";
 		mes "And this is reward money.";
+		rock_main_quest = 22;
 		delitem 25248,1;// Purple_Ore_Crate
+		erasequest 7808;// Case Solved
 		setquest 9457;// Solved Anyway
 		completequest 9457;// Solved Anyway
-		completequest 7808;// Case Solved
 		getitem .@item_id[.@s],1;// Sheriff's_Left_Badge
 		getitem 25250,200;// Rock_Ridge_Coin
 		getexp 2500000,1200000;
-		rock_main_quest = 22;
 		close;
 	}
 	mes "[Wyatt Warp]";
@@ -818,18 +815,9 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 	close;
 
 OnInit:
-	questinfo 7793, QTYPE_QUEST, 1;
-	setquestinfo_req 7793,7792,1;
-	questinfo 7795, QTYPE_QUEST, 1;
-	setquestinfo_req 7795,7794,1;
-	questinfo 7797, QTYPE_QUEST, 1;
-	setquestinfo_req 7797,7796,1;
-	questinfo 7799, QTYPE_QUEST, 1;
-	setquestinfo_req 7799,7798,1;
-	questinfo 7809, QTYPE_QUEST, 1;
-	setquestinfo_req 7809,7803,1;
-	questinfo 7805, QTYPE_QUEST, 1;
-	setquestinfo_req 7805,7804,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW,
+		"rock_main_quest == 2 || rock_main_quest == 4 || rock_main_quest == 6 || rock_main_quest == 9 || rock_main_quest == 15 || rock_main_quest == 21" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 14 && isbegin_quest(7809) == 0 && countitem(25247) > 0" );
 	end;
 }
 
@@ -918,9 +906,9 @@ har_in01,14,24,5	script	Ivoka Skudi#rr03	10212,{
 		mes "Ivoka's right.";
 		mes "Let the spy see you talk to Johnny.";
 		mes "And convince Johnny that Albert has given up on you.";
+		rock_main_quest = 8;
 		erasequest 7796;
 		setquest 7797;// Hear Me Out 1
-		rock_main_quest = 8;
 		close;
 	}
 	if (rock_main_quest == 8) {
@@ -956,8 +944,7 @@ har_in01,14,24,5	script	Ivoka Skudi#rr03	10212,{
 	close;
 
 OnInit:
-	questinfo 7797, QTYPE_QUEST, 1;
-	setquestinfo_req 7797,7796,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 6 || rock_main_quest == 7" );
 	end;
 }
 
@@ -1134,9 +1121,9 @@ har_in01,89,26,5	script	Johnny James#har_in01	10213,{
 		mes "...Damn it!";
 		mes "Don't come back until you have ^4d4dffAlbert's mane^000000 to show to me, got it?";
 		mes "Now get outta here!";
+		rock_main_quest = 9;
 		erasequest 7797;
 		setquest 7798;// Perfectly Prime
-		rock_main_quest = 9;
 		close;
 	}
 	if (rock_main_quest < 14) {
@@ -1187,10 +1174,10 @@ har_in01,89,26,5	script	Johnny James#har_in01	10213,{
 		mes "It'll take many of you wimps to lift the elevator.";
 		mes "Good luck.";
 		mes "And don't forget to tell the sheriff I cooperated.";
+		rock_main_quest = 15;
 		delitem 25249,1;// Buffalo_Bandit_Mane
 		erasequest 7803;// Happy for Broken Trust
 		setquest 7804;// Location of the Ores
-		rock_main_quest = 15;
 		close;
 	}
 	if (rock_main_quest == 15) {
@@ -1205,8 +1192,7 @@ har_in01,89,26,5	script	Johnny James#har_in01	10213,{
 	close;
 
 OnInit:
-	questinfo 7798, QTYPE_QUEST, 1;
-	setquestinfo_req 7798,7797,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 8 || rock_main_quest == 14" );
 	end;
 }
 
@@ -1339,18 +1325,17 @@ rockrdg1,156,312,3	script	Unmoving Freight Train#	4_ENERGY_RED,{
 		classchange( HIDDEN_WARP_NPC, "Johnny James#revt04", bc_self );
 		sleep2 2000;
 		npctalk "Let's go back, shall we?", "Wyatt Warp#revt03", bc_self;
+		rock_main_quest = 6;
 		erasequest 7795;
 		setquest 7796;// Unexpected Arrest
-		rock_main_quest = 6;
 		setpcblock PCBLOCK_NPC, false;
-		close;
+		end;
 	}
 	mes "It's worthless and abandoned.";
 	close;
 
 OnInit:
-	questinfo 7796, QTYPE_QUEST, 1;
-	setquestinfo_req 7796,7795,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 5" );
 	end;
 }
 
@@ -1462,9 +1447,9 @@ harboro1,288,193,5	script	Shawn McCurdy#harboro1	10215,{
 		mes "[Shawn McCurdy]";
 		mes "The entrance to the second floor of the mine is ^4d4dfffarther south from the main entrance of the mine^000000.";
 		mes "I need to make some arrangements. I'll meet you there.";
+		rock_main_quest = 11;
 		erasequest 7799;
 		setquest 7800;// Shawn McCurdy's Weapon 2
-		rock_main_quest = 11;
 		close;
 	}
 	if (rock_main_quest == 11) {
@@ -1507,8 +1492,7 @@ harboro1,288,193,5	script	Shawn McCurdy#harboro1	10215,{
 	end;
 
 OnInit:
-	questinfo 7800, QTYPE_QUEST, 1;
-	setquestinfo_req 7800,7799,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 10" );
 	end;
 }
 
@@ -1594,8 +1578,7 @@ rockrdg2,347,216,5	script	Shawn McCurdy#rockrdg2	10215,{
 	close;
 
 OnInit:
-	questinfo 7801, QTYPE_QUEST, 1;
-	setquestinfo_req 7801,7800,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 11 || rock_main_quest == 12" );
 	end;
 }
 
@@ -1610,9 +1593,9 @@ rockmi2,10,86,5	script	Shawn McCurdy#rockmi2	10215,{
 		mes "[Shawn McCurdy]";
 		mes "In the meantime, I'll check the pulley that we need to use to go back up.";
 		mes "We made it in a hurry, so it's a bit unsafe sometimes. Hah hah.";
+		rock_main_quest = 12;
 		erasequest 7800;
 		setquest 7801;// Shawn McCurdy's Weapon 3
-		rock_main_quest = 12;
 		close;
 	}
 	if (rock_main_quest == 12) {
@@ -1652,9 +1635,9 @@ rockmi2,10,86,5	script	Shawn McCurdy#rockmi2	10215,{
 		mes "[Shawn McCurdy]";
 		mes "The bandits might stand guard around the mine.";
 		mes "Please be careful.";
+		rock_main_quest = 17;
 		erasequest 7805;// Location of the Ores 2
 		setquest 7806;// Location of the Ores 3
-		rock_main_quest = 17;
 		close;
 	}
 	if (rock_main_quest == 17) {
@@ -1709,8 +1692,7 @@ rockmi2,10,86,5	script	Shawn McCurdy#rockmi2	10215,{
 	end;
 
 OnInit:
-	questinfo 7801, QTYPE_QUEST, 1;
-	setquestinfo_req 7801,7800,1;
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 11 || rock_main_quest == 16" );
 	end;
 }
 
@@ -2362,8 +2344,11 @@ rockrdg1,341,133,3	script	Mrs. Cacturon#rrrem01	10220,{
 		close;
 	}
 	end;
-
-// fix me : questinfo when main quest completed only, playtime 2 or hunting 2
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && (!isbegin_quest(16078) || (checkquest(16078,HUNTING) == 2 && countitem(25246) >= 5))" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(16080,HUNTING) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(16079,PLAYTIME) == 2" );
+	end;
 }
 
 rockrdg1,339,134,3	script	Little Lecter#rrrem02	10222,{
@@ -3301,7 +3286,35 @@ harboro1,357,155,3	script	Steel Vigilante#1	4_M_MASKMAN,{
 		else npctalk "Enthusiastic Job Seeker: I want to work, too!", "Enthusiastic Job Seeker#11";
 		end;
 	}
-	getexp 8640,0;	// fix me: seem to be (base exp = count * mob base exp, job exp = count * mob job exp)
+	switch(.@quest_id) {
+	case 12391:// Buffaloes with Rifles
+		.@mob_id = 3736;
+		.@count = 15;
+		break;
+	case 12392:// Punishing the Red Masks
+		.@mob_id = 3737;
+		.@count = 15;
+		break;
+	case 12393:// Eye Patch Desperadoes
+		.@mob_id = 3738;
+		.@count = 15;
+		break;
+	case 12394:// Exterminate Gray Four-legged Beasts
+		.@mob_id = 3739;
+		.@count = 20;
+		break;
+	case 12395:// Exterminate Swamp Arclouzes
+		.@mob_id = 3787;
+		.@count = 10;
+		break;
+	case 12396:// Exterminate Brown Rats
+		.@mob_id = 3788;
+		.@count = 10;
+		break;
+	}
+	.@base_exp = getmonsterinfo(.@mob_id, MOB_BASEEXP) * .@count;
+	.@job_exp = getmonsterinfo(.@mob_id, MOB_JOBEXP) * .@count;
+	getexp .@base_exp, .@job_exp;
 	getitem 25250,2;// Rock Ridge Coin
 	erasequest .@quest_id;
 	setquest 12390;// Relieved for Now
@@ -3401,7 +3414,27 @@ harboro1,357,152,3	script	Steel Vigilante#2	4_M_ACROSS,{
 			end;
 		}
 	}
-	getexp 50800,47160;// fix me: seem to be (base exp = count * mob base exp, job exp = count * mob job exp)
+	switch(.@quest_id) {
+	case 12399:// Hunt Heinous Criminals
+		.@mob_id = 3747;
+		.@count = 10;
+		break;
+	case 12400:// Hunt Heinous Criminals
+		.@mob_id = 3748;
+		.@count = 10;
+		break;
+	case 12401:// Hunt Heinous Criminals
+		.@mob_id = 3749;
+		.@count = 10;
+		break;
+	case 12402:// Eliminate Dangerous Gas
+		.@mob_id = 3740;
+		.@count = 10;
+		break;
+	}
+	.@base_exp = getmonsterinfo(.@mob_id, MOB_BASEEXP) * .@count;
+	.@job_exp = getmonsterinfo(.@mob_id, MOB_JOBEXP) * .@count;
+	getexp .@base_exp, .@job_exp;
 	getitem 25250,3;// Rock Ridge Coin
 	erasequest .@quest_id;
 	setquest 12398;// You're Good
@@ -4319,7 +4352,11 @@ harboro2,164,80,5	script	Demon#srdg01	4_M_NFMAN,{
 	}
 	end;
 
-// fix me : questinfo when playtime 2
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && !isbegin_quest(14672) && checkquest(14673,PLAYTIME) == -1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(14672,HUNTING) == 2 && countitem(25277) > 9 && countitem(6213) > 0" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(14673,PLAYTIME) == 2" );
+	end;
 }
 
 harboro2,166,80,5	script	Traces of Fire#srdg01	4_TRACE,{
@@ -4471,15 +4508,14 @@ rockrdg2,295,328,5	script	Frail Ghast#rockdaily	10231,{
 	end;
 
 OnInit:
-	questinfo 1298, QTYPE_QUEST, 1;
-	// fix me: questinfo 9457
-	// on hunting == -1
-	// on hunting == 2
-	// on playtime == 2
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && !isbegin_quest(1298) && checkquest(1299,PLAYTIME) == -1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(1298,HUNTING) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "rock_main_quest == 22 && checkquest(1299,PLAYTIME) == 2" );
 	end;
 }
 
-// fix me: incomplete, missing quest 1323 (same text)
+
+// Mrs. McPhy
 harboro1,347,65,3	script	Mrs. McPhy#rockdaily	1_F_MERCHANT_02,{
 	if (BaseLevel < 100) {
 		mes "[Mrs. McPhy]";
@@ -4495,7 +4531,6 @@ harboro1,347,65,3	script	Mrs. McPhy#rockdaily	1_F_MERCHANT_02,{
 		mes "Grr, I can't believe you! You're getting only half your dinner tonight!";
 		close;
 	}
-
 	switch( checkquest(1329,PLAYTIME) ) {
 	case -1:
 		break;
@@ -4516,29 +4551,91 @@ harboro1,347,65,3	script	Mrs. McPhy#rockdaily	1_F_MERCHANT_02,{
 			mes "We have no one else to turn to. Please come back if you change your mind.";
 			close;
 		}
-		if (rand(2) == 0) {
-			.@quest_id = 1325;
+		.@r = rand(4);
+		if (.@r == 0)
+			.@string$ = "glove";
+		else if (.@r == 1)
+			.@string$ = "alarm clock";
+		else if (.@r == 2)
 			.@string$ = "spoon";
-		}
-		else {
-			.@quest_id = 1326;
+		else
 			.@string$ = "hat";
-		}
 		mes "[Mrs. McPhy]";
 		mes "Today Spotty took a " + .@string$ + ". Could you look for it? It may be easily replaceable, but I can't keep buying things every time Spotty takes something.";
 		next;
 		mes "[Mrs. McPhy]";
 		mes "Go outside the village and talk to my husband. He'll tell you where it might be.";
 		erasequest 1329;// Spotty in the Dreamland
-		setquest .@quest_id;// Spotty, No!
+		setquest rand(1323,1327);// Spotty, No!
+		if (isbegin_quest(1330))	// debug
+			erasequest 1330;
+		if (isbegin_quest(1322) == 0) {	// debug
+			setquest 1322;
+			completequest 1322;
+		}
+		setquest 1330;// Spotty's Holes
 		close;
 	}
+	for ( .@quest_id = 1321; .@quest_id < 1329; .@quest_id++ ) {
+		if (isbegin_quest(.@quest_id) == 1)
+			break;
+	}
 
-	if (isbegin_quest(1330) == 0) {
-		if (isbegin_quest(1321) == 1) {// debug: player can't finish the quest on official
-			setquest 1330;
-			end;
-		}
+	switch( .@quest_id ) {
+	case 1321:
+	case 1323:
+	case 1324:
+	case 1325:
+	case 1326:
+	case 1327:
+		mes "[Mrs. McPhy]";
+		mes "Spotty would be a perfect dog if he doesn't take things out of the house. Sigh...";
+		if (isbegin_quest(1330) == 0)	// debug
+			setquest 1330;// Spotty's Holes
+		close;
+
+	case 1322:// First time doing the quest
+		mes "[Mrs. McPhy]";
+		mes "Adventurer, we've found the ring!";
+		mes "After all the time we spent searching the village, we've found it inside his house.";
+		next;
+		mes "[Mrs. McPhy]";
+		mes "By the way, what's that shining thing in your hand?";
+		next;
+		select("Show what's in your hand.");
+		mes "[Mrs. McPhy]";
+		mes "This is a Rock Ridge Coin. You can use it like money inside the village. I wasn't comfortable letting you help us for free. I'm glad you can at least have this.";
+		next;
+		mes "[Mrs. McPhy]";
+		mes "That Rock Ridge Coin is yours. Thank you for helping us.";
+		erasequest 1330;// Spotty's Holes
+		completequest 1322;// Found Something
+		getitem 25250,1;// Rock Ridge Coin
+		setquest 1329;// Spotty in the Dreamland
+		next;
+		mes "[Mrs. McPhy]";
+		mes "And, mm... Do you mind helping us again tomorrow? Spotty keeps taking things from the house to the wasteland, and we need them back.";
+		next;
+		mes "[Mrs. McPhy]";
+		mes "Spotty tired itself out and fell asleep. Could you come back tomorrow after 4:00 a.m.? We'll have something to give you next time.";
+		close;
+
+	case 1328:
+		mes "[Mrs. McPhy]";
+		mes "You've found it! Thank you so much. We've been trying to correct Spotty's behavior, and it's difficult.";
+		next;
+		mes "[Mrs. McPhy]";
+		mes "Here's the Rock Ridge Coin we promised. Thank you for searching the wasteland for us.";
+		erasequest 1328;// Found Missing Items
+		erasequest 1330;// Spotty's Holes
+		getitem 25250,1;// Rock Ridge Coin
+		setquest 1329;// Spotty in the Dreamland
+		next;
+		mes "[Mrs. McPhy]";
+		mes "Could you come back again? If you're not busy, you're welcome anytime after 4:00 a.m each day.";
+		close;
+
+	default:// first time
 		mes "[Mrs. McPhy]";
 		mes "How many times do I have to tell you to keep your dog away from our things? Do you really want me to send it away on a ship?";
 		next;
@@ -4644,72 +4741,34 @@ harboro1,347,65,3	script	Mrs. McPhy#rockdaily	1_F_MERCHANT_02,{
 		mes "S-should I? Uh, mm... Okay.";
 		close;
 	}
-	if (isbegin_quest(1321) == 1 || isbegin_quest(1325) == 1 || isbegin_quest(1326) == 1) {
-		mes "[Mrs. McPhy]";
-		mes "Spotty would be a perfect dog if he doesn't take things out of the house. Sigh...";
-		close;
-	}
-	if (isbegin_quest(1322) == 1) {// First time doing the quest
-		mes "[Mrs. McPhy]";
-		mes "Adventurer, we've found the ring!";
-		mes "After all the time we spent searching the village, we've found it inside his house.";
-		next;
-		mes "[Mrs. McPhy]";
-		mes "By the way, what's that shining thing in your hand?";
-		next;
-		select("Show what's in your hand.");
-		mes "[Mrs. McPhy]";
-		mes "This is a Rock Ridge Coin. You can use it like money inside the village. I wasn't comfortable letting you help us for free. I'm glad you can at least have this.";
-		next;
-		mes "[Mrs. McPhy]";
-		mes "That Rock Ridge Coin is yours. Thank you for helping us.";
-		erasequest 1322;// Found Something
-		completequest 1330;// Spotty's Holes
-		getitem 25250,1;// Rock Ridge Coin
-		setquest 1329;// Spotty in the Dreamland
-		next;
-		mes "[Mrs. McPhy]";
-		mes "And, mm... Do you mind helping us again tomorrow? Spotty keeps taking things from the house to the wasteland, and we need them back.";
-		next;
-		mes "[Mrs. McPhy]";
-		mes "Spotty tired itself out and fell asleep. Could you come back tomorrow after 4:00 a.m.? We'll have something to give you next time.";
-		close;
-	}
-	if (isbegin_quest(1328) == 1) {
-		mes "[Mrs. McPhy]";
-		mes "You've found it! Thank you so much. We've been trying to correct Spotty's behavior, and it's difficult.";
-		next;
-		mes "[Mrs. McPhy]";
-		mes "Here's the Rock Ridge Coin we promised. Thank you for searching the wasteland for us.";
-		erasequest 1328;// Found Missing Items
-		setquest 1329;// Spotty in the Dreamland
-		getitem 25250,1;// Rock Ridge Coin
-		next;
-		mes "[Mrs. McPhy]";
-		mes "Could you come back again? If you're not busy, you're welcome anytime after 4:00 a.m each day.";
-		close;
-	}
 	end;
 
 OnInit:
-	questinfo 1321, QTYPE_QUEST, 1;
-	setquestinfo_level 1321,100,175;
-	questinfo 1329, QTYPE_QUEST, 1;
-	setquestinfo_req 1329,1322,1;
-	// questinfo if playtime == 2
+	questinfo( QTYPE_QUEST, QMARK_YELLOW,
+		"BaseLevel > 99 && checkquest(1329,PLAYTIME) == -1 && !isbegin_quest(1321) && !isbegin_quest(1322) && !isbegin_quest(1323) && !isbegin_quest(1324) && !isbegin_quest(1325) && !isbegin_quest(1326) && !isbegin_quest(1327) && !isbegin_quest(1328)" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel > 99 && (isbegin_quest(1322) == 1 || isbegin_quest(1328) == 1)" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel > 99 && checkquest(1329,PLAYTIME) == 2" );
 	end;
 }
 
 rockrdg1,36,250,5	script	Mr. McPhy#rkdlout	4W_M_02,{
-	if (isbegin_quest(1321) == 1) {
+	for ( .@quest_id = 1321; .@quest_id < 1330; .@quest_id++ ) {
+		if (isbegin_quest(.@quest_id) == 1)
+			break;
+	}
+	switch( .@quest_id ) {
+	case 1321:
 		mes "[Mr. McPhy]";
 		mes "My wife said Spotty went out the back door and ran straight past the barbed-wire fence.";
 		next;
 		mes "[Mr. McPhy]";
 		mes "But he couldn't have gone too far because he came back to me pretty quickly. Why don't you walk along the fence and look for holes with white hair floating around them?";
 		close;
-	}
-	if (isbegin_quest(1325) == 1 || isbegin_quest(1326) == 1) {
+	case 1323:
+	case 1324:
+	case 1325:
+	case 1326:
+	case 1327:
 		mes "[Mr. McPhy]";
 		mes "My wife sent me here to give you directions, but I have no idea where he might have been.";
 		next;
@@ -4719,13 +4778,13 @@ rockrdg1,36,250,5	script	Mr. McPhy#rkdlout	4W_M_02,{
 		mes "[Mr. McPhy]";
 		mes "And he doesn't seem to venture out too far. It's probably because he's still young. I've marked three possible locations in the middle of your map. You don't have to look further than those locations.";
 		close;
-	}
-	if (isbegin_quest(1322) == 1 || isbegin_quest(1328) == 1) {
+	case 1322:
+	case 1328:
 		mes "[Mr. McPhy]";
 		mes "Did you find something? Then let's go back!";
+		classchange( HIDDEN_WARP_NPC, "", bc_self );
 		close;
-	}
-	if (isbegin_quest(1329) == 1) {
+	case 1329:
 		mes "[Mr. McPhy]";
 		mes "Ah, Adventurer. Shhh! Please keep your voice down: the Buffalo Bandits might hear us.";
 		next;
@@ -4738,138 +4797,107 @@ rockrdg1,36,250,5	script	Mr. McPhy#rkdlout	4W_M_02,{
 		mes "[Mr. McPhy]";
 		mes "She didn't say anything when I quit my job because I was too scared of the Buffalo Bandits. She's a good woman.";
 		close;
+	default:
+		mes "[Mr. McPhy]";
+		mes "*Gasp* Buffalo Bandits!";
+		close2;
+		classchange( HIDDEN_WARP_NPC, "", bc_self );
+		end;
 	}
-	mes "[Mr. McPhy]";
-	mes "*Gasp* Buffalo Bandits!";
-	close2;
-	classchange( HIDDEN_WARP_NPC, "", bc_self );
 	end;
 
-// OnInit:
-// 	questinfo 1321, QTYPE_QUEST, 1;// fix me: quest ID
-// 	end;
-}
-
-rockrdg1,43,145,3	script	Hole#rkq1321	4_CRACK,{
-	if (isbegin_quest(1321) == 1) {
-		mes "- There's a hole in the ground.";
-		mes "It has something shining inside it,";
-		next;
-		mes "But it's not a gold ring.";
-		mes "I should take it with me for now. -";
-		erasequest 1321;// Spotty and Her Ring
-		setquest 1322;// Found Something
-		close;
-	}
-	mes "- There's a hole in the ground.";
-	mes "It only has a stone sticking out of the ground inside it. -";
-	close;
-}
-
-rockrdg1,170,233,3	script	Hole#rkdqgd1	4_CRACK,{
-	if (isbegin_quest(1321) == 0) {
-		mes "- There's a hole in the ground.";
-		mes "It has a little bit of white hair scattered inside it. -";
-		close;
-	}
-	mes "- There's a hole in the ground.";
-	mes "It's empty. -";
-	next;
-	mes "- I don't have to search farther than this. -";
-	close;
-
 OnInit:
-	// questinfo , QTYPE_QUEST, 1;// fix me: 1321 required ?
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(1321) > 0" );
 	end;
 }
 
-rockrdg1,183,143,3	script	Hole#rkdqgd2	4_CRACK,{
-	if (isbegin_quest(1321) == 0) {
+rockrdg1,170,233,3	script	Hole#rkdqgd1	4_CRACK,{
+	setarray .@list[0],1321,1323,1324,1325,1326,1327;
+	.@size = getarraysize(.@list);
+	for ( .@i = 0; .@i < .@size; .@i++ ) {
+		if (isbegin_quest(.@list[.@i]))
+			break;
+	}
+	if (.@list[.@i] == 0) {
 		mes "- There's a hole in the ground.";
 		mes "It has a little bit of white hair scattered inside it. -";
 		close;
 	}
 	mes "- There's a hole in the ground.";
-	mes "It's empty. -";
+	if (strnpcinfo(2) == "rkdqgd3")
+		mes "It only has wet soil inside it. -";
+	else
+		mes "It's empty. -";
 	next;
 	mes "- I don't have to search farther than this. -";
 	close;
 
 OnInit:
-	// questinfo , QTYPE_QUEST, 1;// fix me: 1321 required ?
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(1330) > 0" );
 	end;
 }
+rockrdg1,183,143,3	duplicate(Hole#rkdqgd1)	Hole#rkdqgd2	4_CRACK
+rockrdg1,215,72,3	duplicate(Hole#rkdqgd1)	Hole#rkdqgd3	4_CRACK
 
-rockrdg1,215,72,3	script	Hole#rkdqgd3	4_CRACK,{
-	if (isbegin_quest(1321) == 0) {
-		mes "- There's a hole in the ground.";
-		mes "It has a little bit of white hair scattered inside it. -";
-		close;
-	}
-	mes "- There's a hole in the ground.";
-	mes "It only has wet soil inside it. -";
-	next;
-	mes "- I don't have to search farther than this. -";
-	close;
 
-OnInit:
-	// questinfo , QTYPE_QUEST, 1;// fix me: 1321 required ?
-	end;
-}
+rockrdg1,43,145,3	script	Hole#rkq1321	4_CRACK,{
+	.@quest_id_npc = atoi( replacestr(strnpcinfo(2), "rkq", "") ) ;
+	setarray .@list[0],1321,1323,1324,1325,1326,1327;
+	.@size = getarraysize(.@list);
+	for ( .@i = 0; .@i < .@size; .@i++ ) {
+		if (isbegin_quest(.@list[.@i]))
+			break;
+	}
 
-rockrdg1,58,195,3	script	Hole#rkq1324	4_CRACK,{
 	mes "- There's a hole in the ground.";
-	mes "It has a tumbleweed rolling around inside it. -";
-	close;
-}
-
-rockrdg1,109,60,3	script	Hole#rkq1326	4_CRACK,{
-	if (isbegin_quest(1326) == 1) {
-		mes "- There's a hole in the ground.";
-		mes "It has something inside it. -";
-		next;
-		mes "- This must be what Mr. McPhy is looking for. I should bring it to her. -";
-		erasequest 1326;// Spotty, No!
-		setquest 1328;// Found Missing Items
+	if (.@list[.@i] == 0) {
+		mes "It has a little bit of white hair scattered inside it. -";
 		close;
 	}
-	mes "- There's a hole in the ground.";
-	mes "It has a little bit of white hair scattered inside it. -";
-	close;
-}
-
-rockrdg1,71,149,3	script	Hole#rkq1325	4_CRACK,{
-	if (isbegin_quest(1325) == 1) {
-		mes "- There's a hole in the ground.";
+	if (.@list[.@i] == .@quest_id_npc) {
+		if (.@list[.@i] == 1321) {
+			mes "It has something shining inside it,";
+			next;
+			mes "But it's not a gold ring.";
+			mes "I should take it with me for now. -";
+			erasequest 1321;
+			setquest 1322;// Found Something
+			close;
+		}
 		mes "It has something inside it. -";
 		next;
 		mes "- This must be what Mr. McPhy is looking for. I should bring it to her. -";
-		erasequest 1325;// Spotty, No!
+		erasequest .@list[.@i];
 		setquest 1328;// Found Missing Items
 		close;
 	}
-	mes "- There's a hole in the ground.";
-	mes "A small insect is scuttling around inside it. -";
-	close;
-}
-
-rockrdg1,100,230,3	script	Hole#rkq1323	4_CRACK,{
-	if (isbegin_quest(1323) == 1) {
-		mes "- There's a hole in the ground.";
-		mes "It has something inside it. -";
-		next;
-		mes "- This must be what Mr. McPhy is looking for. I should bring it to her. -";
-		erasequest 1323;// Spotty, No!
-		setquest 1328;// Found Missing Items
+	switch( .@list[.@i] ) {
+	case 1321:
+		mes "It only has a stone sticking out of the ground inside it. -";
+		close;
+	case 1323:
+		mes "It has a small animal bone inside it. -";
+		close;
+	case 1324:
+		mes "It has a tumbleweed rolling around inside it. -";
+		close;
+	case 1325:
+		mes "A small insect is scuttling around inside it. -";
+		close;
+	case 1326:
+		mes "It only has weeds growing inside it. -";
+		close;
+	case 1327:
+		mes "It's only filled with dust. -";
 		close;
 	}
 }
+rockrdg1,100,230,3	duplicate(Hole#rkq1321)	Hole#rkq1323	4_CRACK
+rockrdg1,58,195,3	duplicate(Hole#rkq1321)	Hole#rkq1324	4_CRACK
+rockrdg1,71,149,3	duplicate(Hole#rkq1321)	Hole#rkq1325	4_CRACK
+rockrdg1,109,60,3	duplicate(Hole#rkq1321)	Hole#rkq1326	4_CRACK
+rockrdg1,191,101,3	duplicate(Hole#rkq1321)	Hole#rkq1327	4_CRACK
 
-rockrdg1,100,230,3	script	Unknown #50572	4_CRACK,{
-	mes "- There's a hole in the ground.";
-	mes "It has a little bit of white hair scattered inside it. -";
-	close;
-}
 
 // Mr. McPhy quests
 harboro1,345,61,3	script	Spotty#rockdaily	4_DOG01,{
@@ -4880,17 +4908,17 @@ harboro1,345,61,3	script	Spotty#rockdaily	4_DOG01,{
 }
 
 harboro1,344,61,5	script	Mr. McPhy#rockdaily	4W_M_02,{
-	switch( isbegin_quest(1330) ) {
-	case 0:// First time
-		mes "[Mr. McPhy]";
-		mes "Spotty, do you want a treat? Hmm?";
-		close;
-	case 1:
-		if (isbegin_quest(1321) == 1) {
+	switch( isbegin_quest(1322) ) {
+	case 0:
+		if (isbegin_quest(1321) == 0) {
 			mes "[Mr. McPhy]";
-			mes "My wife and I decided to check the village separately, but I'm not sure if we'd be done before you're back.";
+			mes "Spotty, do you want a treat? Hmm?";
 			close;
 		}
+		mes "[Mr. McPhy]";
+		mes "My wife and I decided to check the village separately, but I'm not sure if we'd be done before you're back.";
+		close;
+	case 1:
 		mes "[Mr. McPhy]";
 		mes "Oh, poor Spotty. You're itching from losing so much hair. Do you want your daddy to brush you?";
 		close;
@@ -4985,11 +5013,10 @@ harboro1,344,61,5	script	Mr. McPhy#rockdaily	4W_M_02,{
 	}
 	end;
 
-// OnInit:
-	// fix me: questinfo 1331, QTYPE_QUEST, 1;
-	// playtime == 2
-	// display when hunting completed
-	// end;
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW,
+		"isbegin_quest(1322) == 2 && (checkquest(1332,PLAYTIME) == 2 || checkquest(1332,PLAYTIME) == -1 && (checkquest(1331,HUNTING) == -1 || checkquest(1331,HUNTING) == 2))" );
+	end;
 }
 
 // Misc NPCs

+ 3 - 0
npc/re/scripts_athena.conf

@@ -43,6 +43,7 @@ npc: npc/re/guides/guides_juno.txt
 npc: npc/re/guides/guides_lighthalzen.txt
 npc: npc/re/guides/guides_louyang.txt
 npc: npc/re/guides/guides_lutie.txt
+npc: npc/re/guides/guides_malangdo.txt
 npc: npc/re/guides/guides_malaya.txt
 npc: npc/re/guides/guides_mora.txt
 npc: npc/re/guides/guides_morroc.txt
@@ -121,6 +122,7 @@ npc: npc/re/merchants/socket_enchant2.txt
 //npc: npc/re/merchants/cash_trader-idRO.txt
 npc: npc/re/merchants/te_merchant.txt
 npc: npc/re/merchants/shadow_refiner.txt
+npc: npc/re/merchants/eden_market.txt
 
 // --------------------------- Others ---------------------------
 npc: npc/re/other/achievements.txt
@@ -174,6 +176,7 @@ npc: npc/re/quests/monstertamers.txt
 npc: npc/re/quests/mrsmile.txt
 npc: npc/re/quests/ninja_quests.txt
 npc: npc/re/quests/pile_bunker.txt
+npc: npc/re/quests/quest_payon.txt
 npc: npc/re/quests/quests_13_1.txt
 npc: npc/re/quests/quests_14_3.txt
 npc: npc/re/quests/quests_14_3_bis.txt

+ 4 - 3
npc/warps/cities/yuno.txt

@@ -20,6 +20,7 @@
 //= 1.8 Added Yuno Government Buildings warps
 //= 1.9 Updated Yuno Government Buildings warps according
 //= to Schwartzvalt Trilogy quest. [SinSloth]
+//= 2.0 Correct position of portals [JohnnyPlayy]
 //============================================================
 
 //= Yuno City ================================================
@@ -57,10 +58,10 @@ yuno_in03,167,19,0	warp	yun30	1,1,yuno,323,280
 yuno_in03,167,72,0	warp	yun31	1,1,yuno_in03,179,113
 yuno_in03,179,109,0	warp	yun32	1,1,yuno_in03,167,69
 yuno_in03,186,119,0	warp	yun33	1,1,yuno_in03,163,174
-yuno_in03,159,174,0	warp	yun34	1,1,yuno_in03,183,119
+yuno_in03,161,174,0	warp	yun34	1,1,yuno_in03,183,119
 yuno_in03,186,131,0	warp	yun35	1,1,yuno_in03,163,187
-yuno_in03,159,187,0	warp	yun36	1,1,yuno_in03,183,131
-yuno_in03,172,118,0	warp	yun37	1,1,yuno_in03,120,178
+yuno_in03,161,187,0	warp	yun36	1,1,yuno_in03,183,131
+yuno_in03,173,118,0	warp	yun37	1,1,yuno_in03,120,178
 yuno_in03,124,178,0	warp	yun38	1,1,yuno_in03,176,118
 yuno_in03,111,192,0	warp	yun39	1,1,yuno_in03,162,132
 yuno_in03,162,129,0	warp	yun40	1,1,yuno_in03,111,189

Diferenças do arquivo suprimidas por serem muito extensas
+ 348 - 263
sql-files/item_db_re.sql


+ 1 - 13
sql-files/main.sql

@@ -731,7 +731,7 @@ CREATE TABLE IF NOT EXISTS `inventory` (
 --
 
 CREATE TABLE IF NOT EXISTS `ipbanlist` (
-  `list` varchar(255) NOT NULL default '',
+  `list` varchar(15) NOT NULL default '',
   `btime` datetime NOT NULL,
   `rtime` datetime NOT NULL,
   `reason` varchar(255) NOT NULL default '',
@@ -986,18 +986,6 @@ CREATE TABLE IF NOT EXISTS `quest` (
   PRIMARY KEY  (`char_id`,`quest_id`)
 ) ENGINE=MyISAM;
 
---
--- Table structure for table `ragsrvinfo`
---
-
-CREATE TABLE IF NOT EXISTS `ragsrvinfo` (
-  `index` int(11) NOT NULL default '0',
-  `name` varchar(255) NOT NULL default '',
-  `exp` int(11) unsigned NOT NULL default '0',
-  `jexp` int(11) unsigned NOT NULL default '0',
-  `drop` int(11) unsigned NOT NULL default '0'
-) ENGINE=MyISAM;
-
 --
 -- Table structure for table `skill`
 --

+ 3 - 2
sql-files/mob_db.sql

@@ -5,7 +5,7 @@
 DROP TABLE IF EXISTS `mob_db`;
 CREATE TABLE `mob_db` (
   `ID` mediumint(9) unsigned NOT NULL default '0',
-  `Sprite` text NOT NULL,
+  `Sprite` varchar(24) NOT NULL,
   `kName` text NOT NULL,
   `iName` text NOT NULL,
   `LV` tinyint(6) unsigned NOT NULL default '0',
@@ -61,7 +61,8 @@ CREATE TABLE `mob_db` (
   `Drop9per` smallint(9) unsigned NOT NULL default '0',
   `DropCardid` smallint(5) unsigned NOT NULL default '0',
   `DropCardper` smallint(9) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`ID`)
+  PRIMARY KEY  (`ID`),
+  UNIQUE KEY (`Sprite`)
 ) ENGINE=MyISAM;
 
 # Monster Database

+ 3 - 2
sql-files/mob_db2.sql

@@ -5,7 +5,7 @@
 DROP TABLE IF EXISTS `mob_db2`;
 CREATE TABLE `mob_db2` (
   `ID` mediumint(9) unsigned NOT NULL default '0',
-  `Sprite` text NOT NULL,
+  `Sprite` varchar(24) NOT NULL,
   `kName` text NOT NULL,
   `iName` text NOT NULL,
   `LV` tinyint(6) unsigned NOT NULL default '0',
@@ -61,7 +61,8 @@ CREATE TABLE `mob_db2` (
   `Drop9per` smallint(9) unsigned NOT NULL default '0',
   `DropCardid` smallint(5) unsigned NOT NULL default '0',
   `DropCardper` smallint(9) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`ID`)
+  PRIMARY KEY  (`ID`),
+  UNIQUE KEY (`Sprite`)
 ) ENGINE=MyISAM;
 
 # Monster Additional Database

+ 3 - 2
sql-files/mob_db2_re.sql

@@ -5,7 +5,7 @@
 DROP TABLE IF EXISTS `mob_db2_re`;
 CREATE TABLE `mob_db2_re` (
   `ID` mediumint(9) unsigned NOT NULL default '0',
-  `Sprite` text NOT NULL,
+  `Sprite` varchar(24) NOT NULL,
   `kName` text NOT NULL,
   `iName` text NOT NULL,
   `LV` tinyint(6) unsigned NOT NULL default '0',
@@ -61,7 +61,8 @@ CREATE TABLE `mob_db2_re` (
   `Drop9per` smallint(9) unsigned NOT NULL default '0',
   `DropCardid` smallint(5) unsigned NOT NULL default '0',
   `DropCardper` smallint(9) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`ID`)
+  PRIMARY KEY  (`ID`),
+  UNIQUE KEY (`Sprite`)
 ) ENGINE=MyISAM;
 
 # Monsters Additional Database

+ 150 - 20
sql-files/mob_db_re.sql

@@ -5,7 +5,7 @@
 DROP TABLE IF EXISTS `mob_db_re`;
 CREATE TABLE `mob_db_re` (
   `ID` mediumint(9) unsigned NOT NULL default '0',
-  `Sprite` text NOT NULL,
+  `Sprite` varchar(24) NOT NULL,
   `kName` text NOT NULL,
   `iName` text NOT NULL,
   `LV` tinyint(6) unsigned NOT NULL default '0',
@@ -61,7 +61,8 @@ CREATE TABLE `mob_db_re` (
   `Drop9per` smallint(9) unsigned NOT NULL default '0',
   `DropCardid` smallint(5) unsigned NOT NULL default '0',
   `DropCardper` smallint(9) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`ID`)
+  PRIMARY KEY  (`ID`),
+  UNIQUE KEY (`Sprite`)
 ) ENGINE=MyISAM;
 
 # Monster Database
@@ -1372,13 +1373,13 @@ REPLACE INTO `mob_db_re` VALUES (2173,'I_G_HORN_SCARABA2','Gold Two-Horn Scaraba
 REPLACE INTO `mob_db_re` VALUES (2174,'MD_VADON','Ancient Crustacean','Deep Sea Vadon',95,120000,1,750,750,1,778,225,154,21,145,91,138,60,113,45,10,12,0,5,21,0x6203295,300,1632,432,540,0,0,0,0,0,0,0,991,20,960,4500,910,1500,2313,3,943,50,757,20,0,0,12615,2,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2175,'MD_MARSE','Deepsea Marse','Deep Sea Marse',95,120000,1,750,750,1,500,820,58,218,133,37,85,156,133,60,10,12,0,5,41,0x6203295,300,1956,756,528,0,0,0,0,0,0,0,1024,4500,962,1500,0,0,720,5,995,6,1007,3,514,150,12615,2,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2176,'MD_CRAB','Deepsea Crab','Deep Sea Crab',95,120000,1,750,750,1,696,234,136,15,122,54,84,37,98,65,7,12,0,5,21,0x6203295,200,992,792,360,0,0,0,0,0,0,0,964,2750,960,750,7049,350,1001,7,0,0,0,0,757,19,12615,2,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (2177,'MD_CORNUTUS','Deepsea Cornutus','Deep Sea Cornutus',100,160000,1,750,750,1,1129,237,342,48,122,87,135,66,137,75,10,12,0,5,21,0x6203295,200,1248,48,480,0,0,0,0,0,0,0,991,23,961,2750,911,400,757,27,2106,3,943,500,0,0,12615,3,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (2178,'MD_SHELLFISH','Deepsea Shellfish','Deep Sea Shellfish',100,160000,1,750,750,1,720,1122,43,215,72,31,68,225,166,60,10,12,0,5,41,0x6203295,200,864,864,384,0,0,0,0,0,0,0,965,2750,966,500,7049,250,1056,500,1001,5,0,0,757,9,12615,2,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2177,'MD_CORNUTUS','Deepsea Cornutus','Deep Sea Cornutus',100,160000,1,750,750,1,1129,237,342,48,122,87,135,66,137,75,10,12,0,5,21,0x6223295,200,1248,48,480,0,0,0,0,0,0,0,991,23,961,2750,911,400,757,27,2106,3,943,500,0,0,12615,3,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2178,'MD_SHELLFISH','Deepsea Shellfish','Deep Sea Shellfish',100,160000,1,750,750,1,720,1122,43,215,72,31,68,225,166,60,10,12,0,5,41,0x6253295,200,864,864,384,0,0,0,0,0,0,0,965,2750,966,500,7049,250,1056,500,1001,5,0,0,757,9,12615,2,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2179,'MD_KUKRE','Ancient Kukre','Deep Sea Kukre',100,160000,1,750,750,1,975,118,123,33,125,80,112,60,102,30,10,12,0,4,21,0x6203295,150,1776,576,288,0,0,0,0,0,0,0,991,15,955,2750,910,200,528,250,0,0,928,225,623,10,12615,2,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2180,'MD_STROUF','Ancient Sea Lord','Deep Sea Strouf',145,400000,1,1000,1000,1,1200,3500,67,221,149,126,81,252,183,66,10,12,2,5,61,0x6203295,150,1872,672,384,0,0,0,0,0,0,0,951,2668,756,58,0,0,1461,1,949,1500,720,10,956,750,12614,3,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (2181,'MD_SWORD_FISH','Ancient Sword Fish','Deep Sea Sword Fish',145,400000,1,1000,1000,1,1849,235,255,17,155,156,115,85,194,65,10,12,2,5,41,0x6203295,200,1968,768,384,0,0,0,0,0,0,0,995,5,963,4500,756,17,2257,1,757,25,0,0,956,300,12614,3,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2181,'MD_SWORD_FISH','Ancient Sword Fish','Deep Sea Sword Fish',145,400000,1,1000,1000,1,1849,235,255,17,155,156,115,85,194,65,10,12,2,5,41,0x6253295,200,1968,768,384,0,0,0,0,0,0,0,995,5,963,4500,756,17,2257,1,757,25,0,0,956,300,12614,3,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2182,'MD_MARC','Ancient Seahorse','Deep Sea Marc',145,400000,1,1000,1000,1,1423,331,255,51,150,145,221,83,148,66,10,12,1,5,41,0x6203295,150,1272,72,480,0,0,0,0,0,0,0,995,9,956,4500,756,48,951,500,720,5,0,0,509,350,12612,3,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (2183,'MD_ANOLIAN','Mutant Anolian','Deep Sea Anolian',151,700000,1,1100,1100,1,2122,312,268,22,177,188,205,126,198,61,10,12,1,5,41,0x6203295,190,900,500,864,0,0,0,0,0,0,0,7003,2425,1754,1000,0,0,10019,5,16003,3,2625,1,984,67,12614,3,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (2183,'MD_ANOLIAN','Mutant Anolian','Deep Sea Anolian',151,700000,1,1100,1100,1,2122,312,268,22,177,188,205,126,198,61,10,12,1,5,41,0x6223295,190,900,500,864,0,0,0,0,0,0,0,7003,2425,1754,1000,0,0,10019,5,16003,3,2625,1,984,67,12614,3,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2184,'MD_OBEAUNE','Deepsea Mermaid','Deep Sea Obeaune',151,700000,1,1100,1100,1,1502,3845,68,326,166,87,101,233,196,55,10,12,1,6,61,0x6203295,200,1872,672,288,0,0,0,0,0,0,0,995,7,950,4500,0,0,2326,5,720,5,951,250,748,15,12614,3,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2185,'MD_KAPHA','Transform Kapha','Deep Sea Kapha',151,700000,1,1100,1100,1,2590,256,261,58,167,209,128,61,191,20,10,12,1,6,41,0x6203295,165,2012,1728,672,0,0,0,0,0,0,0,7149,3250,7053,1750,0,0,521,1150,708,1,1915,5,13008,3,12612,3,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (2186,'COELACANTH_N_E','Coelacanth','Coelacanth',100,1200000,1,200000,200000,1,1290,1290,280,280,160,160,160,160,160,160,10,12,2,5,41,0x6203695,165,864,864,432,0,0,0,0,0,0,0,12617,5000,12614,2000,12615,2000,12623,700,12614,2000,12615,2000,12615,2000,12615,2000,0,0,0,0);
@@ -2431,12 +2432,12 @@ REPLACE INTO `mob_db_re` VALUES (3203,'INORGANIC_JAKK','Inorganic Pumpkin','Inor
 #REPLACE INTO `mob_db_re` VALUES (3205,'PIXY_BLUE_PORING','Poring','Poring',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,0,0,0,0,0,0,0,0,0,0,0,12418,1000,12422,1500,12425,1500,12208,500,22553,1000,12919,1000,16640,5,0,0,0,0,0,0);
 #REPLACE INTO `mob_db_re` VALUES (3206,'LITTLE_GOLDPORING','Poring','Poring',100,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,200,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,0,0,0);
 #REPLACE INTO `mob_db_re` VALUES (3207,'E_AQUA_ELEMENTAL','Poring','Poring',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,10,12,0,0,20,0x83,200,0,0,0,0,0,0,0,0,0,0,969,3000,7444,3000,22537,1000,6635,1000,18570,500,19539,500,0,0,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (3208,'V_EREMES','V Eremes','Eremes Guille',179,2380000,1,70000,35000,1,5333,2000,180,100,150,190,60,70,200,80,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6816,100,19973,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4684,1);
-REPLACE INTO `mob_db_re` VALUES (3209,'V_MAGALETA','V Magaleta','Margaretha Sorin',177,2448000,1,80000,40000,1,1667,7000,160,400,130,80,120,160,150,70,10,12,1,7,86,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6819,100,19962,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4685,1);
-REPLACE INTO `mob_db_re` VALUES (3210,'V_KATRINN','V Katrinn','Kathryne Cheiron',177,2040000,1,60000,30000,1,1333,6000,110,400,110,80,60,200,210,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6817,100,19968,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4686,1);
-REPLACE INTO `mob_db_re` VALUES (3211,'V_SHECIL','V Shecil','Shecil Damon',179,2142000,1,70000,35000,14,4667,2000,100,100,130,130,70,80,300,50,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,20392,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4687,1);
-REPLACE INTO `mob_db_re` VALUES (3212,'V_HARWORD','V Harword','Harword Alt-Eisen',177,2720000,1,100000,50000,1,3333,3000,200,100,160,80,200,60,130,50,10,12,1,7,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6815,100,19963,100,19964,100,22679,10,22687,10,0,0,0,0,0,0,0,0,4688,1);
-REPLACE INTO `mob_db_re` VALUES (3213,'V_SEYREN','V Seyren','Seyren Windsor',179,2448000,1,80000,40000,1,6000,4000,400,200,170,100,200,50,200,60,10,12,1,6,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6814,100,19961,100,0,0,22679,10,22687,10,0,0,0,0,0,0,0,0,4689,1);
+REPLACE INTO `mob_db_re` VALUES (3208,'V_EREMES','V Eremes','Eremes Guille',179,2380000,1,70000,35000,1,5333,2000,180,100,150,190,60,70,200,80,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6816,500,20391,50,19973,50,4684,1);
+REPLACE INTO `mob_db_re` VALUES (3209,'V_MAGALETA','V Magaleta','Margaretha Sorin',177,2448000,1,80000,40000,1,1667,7000,160,400,130,80,120,160,150,70,10,12,1,7,86,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6819,500,19962,50,4685,1);
+REPLACE INTO `mob_db_re` VALUES (3210,'V_KATRINN','V Katrinn','Kathryne Cheiron',177,2040000,1,60000,30000,1,1333,6000,110,400,110,80,60,200,210,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6817,500,19968,50,4686,1);
+REPLACE INTO `mob_db_re` VALUES (3211,'V_SHECIL','V Shecil','Shecil Damon',179,2142000,1,70000,35000,14,4667,2000,100,100,130,130,70,80,300,50,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19974,50,4687,1);
+REPLACE INTO `mob_db_re` VALUES (3212,'V_HARWORD','V Harword','Harword Alt-Eisen',177,2720000,1,100000,50000,1,3333,3000,200,100,160,80,200,60,130,50,10,12,1,7,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6815,500,19963,50,19964,50,4688,1);
+REPLACE INTO `mob_db_re` VALUES (3213,'V_SEYREN','V Seyren','Seyren Windsor',179,2448000,1,80000,40000,1,6000,4000,400,200,170,100,200,50,200,60,10,12,1,6,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6814,500,19961,50,4689,1);
 REPLACE INTO `mob_db_re` VALUES (3214,'V_G_EREMES','V G Eremes','Assassin Cross Eremes',189,2100000,1,0,0,1,8000,4000,360,200,300,380,120,140,400,160,10,12,1,6,85,0x6203695,100,76,384,288,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);
 REPLACE INTO `mob_db_re` VALUES (3215,'V_G_MAGALETA','V G Magaleta','High Priest Margaretha',187,2400000,1,0,0,1,2500,14000,320,800,260,160,240,320,300,140,10,12,1,7,86,0x6203695,100,576,384,288,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);
 REPLACE INTO `mob_db_re` VALUES (3216,'V_G_KATRINN','V G Katrinn','High Wizard Kathryne',187,1800000,1,0,0,1,2000,12000,220,800,220,160,120,400,420,100,10,12,1,7,88,0x6203695,100,576,384,288,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);
@@ -2449,13 +2450,13 @@ REPLACE INTO `mob_db_re` VALUES (3222,'V_B_SHECIL','Ranger Shecil','Ranger Cecil
 REPLACE INTO `mob_db_re` VALUES (3223,'V_B_HARWORD','Mechanic Harword','Mechanic Howard',187,18000000,1,3000000,3000000,1,10000,6000,400,200,320,160,400,120,260,100,10,12,1,7,81,0x6283695,100,76,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4677,1);
 REPLACE INTO `mob_db_re` VALUES (3224,'V_B_KATRINN','Warlock Katrinn','Warlock Kathryne',187,10800000,1,3000000,3000000,1,4000,12000,220,800,220,160,120,400,420,100,10,12,1,7,88,0x6283695,100,576,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4678,1);
 REPLACE INTO `mob_db_re` VALUES (3225,'V_B_SEYREN','Rune Knight Seyren','Rune Knight Seyren',189,14400000,1,3000000,3000000,1,9000,8000,800,400,340,200,400,100,400,120,10,12,1,7,83,0x6283695,100,76,384,288,0,0,0,0,0,0,0,20748,3000,20748,500,20748,500,0,0,0,0,0,0,0,0,0,0,0,0,4679,1);
-REPLACE INTO `mob_db_re` VALUES (3226,'V_RANDEL','V Randel','Randel Lawrence',178,2550000,1,100000,50000,1,4000,2000,300,200,200,80,200,50,190,70,10,12,1,7,86,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6814,100,20393,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4690,1);
-REPLACE INTO `mob_db_re` VALUES (3227,'V_FLAMEL','V Flamel','Flamel Emule',176,2312000,1,80000,40000,1,3333,5000,130,100,140,80,70,150,200,50,10,12,1,7,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6815,100,19967,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4691,1);
-REPLACE INTO `mob_db_re` VALUES (3228,'V_CELIA','V Celia','Celia Alde',178,2295000,1,90000,45000,1,2000,5000,110,800,140,100,60,150,120,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,6817,100,19970,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4692,1);
-REPLACE INTO `mob_db_re` VALUES (3229,'V_CHEN','V Chen','Chen Liu',178,2261000,1,70000,35000,1,5333,3000,180,100,150,80,90,130,200,60,10,12,1,6,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6819,100,19969,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4693,1);
-REPLACE INTO `mob_db_re` VALUES (3230,'V_GERTIE','V Gertie','Gertie Wie',178,2040000,1,80000,40000,1,4667,2500,160,100,180,130,60,50,210,50,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6816,100,19965,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4694,1);
-REPLACE INTO `mob_db_re` VALUES (3231,'V_ALPHOCCIO','V Alphoccio','Alphoccio Basil',176,2040000,1,60000,30000,1,2667,6000,120,100,120,150,70,200,150,90,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,19966,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4696,1);
-REPLACE INTO `mob_db_re` VALUES (3232,'V_TRENTINI','V Trentini','Trentini',176,2040000,1,60000,30000,2,2667,6000,100,100,110,150,70,200,150,80,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,6818,100,19971,100,22679,10,22687,10,0,0,0,0,0,0,0,0,0,0,4695,1);
+REPLACE INTO `mob_db_re` VALUES (3226,'V_RANDEL','V Randel','Randel Lawrence',178,2550000,1,100000,50000,1,4000,2000,300,200,200,80,200,50,190,70,10,12,1,7,86,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6814,500,19972,50,4690,1);
+REPLACE INTO `mob_db_re` VALUES (3227,'V_FLAMEL','V Flamel','Flamel Emule',176,2312000,1,80000,40000,1,3333,5000,130,100,140,80,70,150,200,50,10,12,1,7,83,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6815,500,19967,50,4691,1);
+REPLACE INTO `mob_db_re` VALUES (3228,'V_CELIA','V Celia','Celia Alde',178,2295000,1,90000,45000,1,2000,5000,110,800,140,100,60,150,120,50,10,12,1,7,88,0x6203695,100,576,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6817,500,19970,50,4692,1);
+REPLACE INTO `mob_db_re` VALUES (3229,'V_CHEN','V Chen','Chen Liu',178,2261000,1,70000,35000,1,5333,3000,180,100,150,80,90,130,200,60,10,12,1,6,81,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6819,500,19969,50,4693,1);
+REPLACE INTO `mob_db_re` VALUES (3230,'V_GERTIE','V Gertie','Gertie Wie',178,2040000,1,80000,40000,1,4667,2500,160,100,180,130,60,50,210,50,10,12,1,6,85,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6816,500,19965,50,4694,1);
+REPLACE INTO `mob_db_re` VALUES (3231,'V_ALPHOCCIO','V Alphoccio','Alphoccio Basil',176,2040000,1,60000,30000,1,2667,6000,120,100,120,150,70,200,150,90,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19966,50,4696,1);
+REPLACE INTO `mob_db_re` VALUES (3232,'V_TRENTINI','V Trentini','Trentini',176,2040000,1,60000,30000,2,2667,6000,100,100,110,150,70,200,150,80,10,12,1,7,84,0x6203695,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25131,1000,22687,500,23016,500,6818,500,19971,50,4695,1);
 REPLACE INTO `mob_db_re` VALUES (3233,'V_G_RANDEL','V G Randel','Paladin Randel',188,3000000,1,0,0,1,12000,4000,600,400,400,160,400,100,380,140,10,12,1,7,86,0x6203695,100,76,864,288,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);
 REPLACE INTO `mob_db_re` VALUES (3234,'V_G_FLAMEL','V G Flamel','Creator Flamel',186,2400000,1,0,0,1,5000,10000,260,200,280,160,140,300,400,100,10,12,1,7,83,0x6203695,100,76,864,288,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);
 REPLACE INTO `mob_db_re` VALUES (3235,'V_G_CELIA','V G Celia','Sorcerer Celia',188,4050000,1,0,0,1,3000,10000,220,800,280,200,120,300,240,100,10,12,1,7,88,0x6203695,100,576,384,288,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);
@@ -3777,8 +3778,137 @@ REPLACE INTO `mob_db_re` VALUES (3790,'SWEETS_DROPS','Sweets Drops','Sweets Drop
 #20567,CHUNG_E_TW
 #20568,GULLINBURSTI_TW
 #20569,MISSING_OCTOPIG
-
+#20570,SAECOM
 #20571,ORK_HERO2
+#20572,MD_C_HEMEL
+#20573,MD_C_AMDARAIS
+#20574,MD_C_WHITEKNIGHT
+#20575,MD_C_CORRUPTION_ROOT
+#20576,MD_C_KHALITZBURG
+#20577,MD_C_RAYDRIC
+#20578,MD_C_RAYDRIC_ARCHER
+#20579,MD_C_ZOMBIE
+#20580,MD_C_GHOUL
+#20581,MD_C_THORN
+#20582,MD_MANHOLE4
+#20583,MD_C_WHITEKNIGHT_G
+#20584,MD_C_KHALITZBURG_G
+#20585,MD_C_RAY_ARCHER_G
+#20586,NYA_BRZ
+#20587,WITCH_BRZ
+#20588,ELDER_BRZ
+#20589,SWING_TALE
+#20590,RU_E_ECLIPS
+#20591,PAPARE
+#20592,POISONOUS
+#20593,TOXIOUS
+#20594,MINERAL_G
+#20595,MINERAL_R
+#20596,MINERAL_W
+#20597,MINERAL_P
+#20598,JEWELIANT
+#20599,G_JEWELIANT
+#20600,JEWEL
+#20601,JUNGOLIANT
+#20602,PORCELLIO_W
+#20603,ABYSSMAN
+#20604,ANGELGOLT
+#20605,ANGELGOLT2
+#20606,HOLY_FRUS
+#20607,HOLY_SKOGUL
+#20608,PLASMA_ARCH
+#20609,PLASMA_SPT
+#20610,REGINLEIF
+#20611,INGRID
+#20612,FERUS_P
+#20613,TREASURE_MIMIC
+#20614,ACIDUS_B
+#20615,ACIDUS_S
+#20616,BONE_FERUS
+#20617,BONE_ACIDUS
+#20618,BONE_DETALE
+#20619,GLOOMUNDERNIGHT2
+#20620,MD_REDPEPPER
+#20621,MD_REDPEPPER_H
+#20622,MD_ASSISTANT
+#20623,MD_ASSISTANT_H
+#20624,MD_DRY_RAFFLESIA
+#20625,MD_DRY_RAFFLESIA_H
+#20626,MD_ALNOLDI_EX
+#20627,MD_ALNOLDI_EX_H
+#20628,EP17_2_ALPHA_MASTER
+#20629,EP17_2_BETA_BASIC
+#20630,EP17_2_BETA_BASIC_NG
+#20631,MD_BETA_SCISSORE_NG
+#20632,MD_BETA_SCISSORE_NG_H
+#20633,EP17_2_BETA_CLEANER_A
+#20634,EP17_2_BETA_CLEANER_B
+#20635,EP17_2_BETA_BATHS_A
+#20636,EP17_2_BETA_BATHS_B
+#20637,EP17_2_BETA_ITEMKEEPER
+#20638,EP17_2_BETA_GUARDS
+#20639,EP17_2_BETA_GUARDS_NG
+#20640,EP17_2_OMEGA_CLEANER
+#20641,EP17_2_OMEGA_CLEANER_NG
+#20642,MD_SWEETY
+#20643,EP17_2_PHEN
+#20644,EP17_2_MARC
+#20645,EP17_2_SWORD_FISH
+#20646,EP17_2_PIRANHA
+#20647,EP17_2_BATH_MERMAID
+#20648,EP17_2_PITAYA_BOSS
+#20649,EP17_2_PITAYA_R
+#20650,EP17_2_PITAYA_Y
+#20651,EP17_2_PITAYA_B
+#20652,EP17_2_PITAYA_V
+#20653,EP17_2_PITAYA_G
+#20654,G_PITAYA_R
+#20655,G_PITAYA_Y
+#20656,G_PITAYA_B
+#20657,G_PITAYA_V
+#20658,G_PITAYA_G
+#20659,MD_PITAYA_BOSS
+#20660,MD_PITAYA_R
+#20661,MD_PITAYA_Y
+#20662,MD_PITAYA_B
+#20663,MD_PITAYA_V
+#20664,MD_PITAYA_G
+#20665,MD_VERPORTA
+#20666,MD_VERPORTE_H
+#20667,MD_SILVA_PAPILIA
+#20668,MD_GRAN_PAPILIA
+#20669,MD_PAPILA
+#20670,MD_PAPILA_H
+#20671,MD_PAPILA_RUBA
+#20672,MD_PAPILA_RUBA_H
+#20673,MD_PAPILA_RUBA2
+#20674,MD_PAPILA_CAE
+#20675,MD_PAPILA_CAE_H
+#20676,MD_PAPILA_CAE2
+#20677,MD_ARIES
+#20678,MD_ARIES_H
+#20679,EP17_2_GUARDIAN_PARTS
+#20680,EP17_2_HEART_HUNTER
+#20681,G_EP17_2_HEART_HUNTER
+#20682,EP17_2_HEART_HUNTER_H
+#20683,EP17_2_BOOKWORM
+#20684,EP17_2_ROAMING_SPLBOOK
+#20685,EP17_2_VENENUM3
+#20686,EP17_2_CRAMP
+#20687,EP17_2_WATERFALL
+#20688,EP17_2_BELLARE3
+#20689,EP17_2_DOLOR3
+#20690,EP17_2_PLASMA_Y
+#20691,EP17_2_PLAGA3
+#20692,EP17_2_SANARE3
+#20693,EP17_2_PLASMA_R
+#20694,EP17_2_PLASMA_R2
+#20695,E_GARLING
+#20696,EP17_2_CHILD_ADMIN1
+#20697,EP17_2_CHILD_ADMIN2
+#20698,G_ASSISTANT
+#20699,G_BELLARE3
+#20700,G_BETA_SCISSORE_NG
 
 #31999,HUNTING_GID_DEFAULT
 #32000,MONSTER_2ND_END

+ 45 - 45
sql-files/mob_skill_db_re.sql

@@ -8997,51 +8997,51 @@ REPLACE INTO `mob_skill_db_re` VALUES (2541,'Faceworm Larva@NPC_POISONATTACK','a
 #REPLACE INTO `mob_skill_db_re` VALUES (2542,'Irene Elder@NPC_MILLENNIUMSHIELD','chase',707,1,5000,1000,30000,'no','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 
 #Geffen Magic Tournament
-REPLACE INTO `mob_skill_db_re` VALUES (2549,'[PH] 게펜마법사1@MG_FIREBOLT','attack',19,5,3000,1000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2549,'[PH] 게펜마법사1@MG_FIREWALL','attack',18,1,3000,2000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2550,'[PH] 게펜마법사2@MG_FROSTDIVER','attack',15,5,3000,1000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2550,'[PH] 게펜마법사2@MG_THUNDERSTORM','attack',21,3,3000,2000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2551,'[PH] 게펜마법사3 1@NPC_COMBOATTACK','attack',171,2,5000,0,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2551,'[PH] 게펜마법사3 1@MG_STONECURSE','attack',16,5,5000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2551,'[PH] 게펜마법사3 1@TF_POISON','attack',52,3,3000,0,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2552,'[PH] 게펜마법사3 2@BS_HAMMERFALL','attack',110,5,5000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2552,'[PH] 게펜마법사3 2@NPC_POWERUP','attack',349,5,5000,1000,25000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2553,'[PH] 게펜마법사3 3@ASC_BREAKER','attack',379,1,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2553,'[PH] 게펜마법사3 3@AS_VENOMDUST','attack',140,10,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2554,'[PH] 게펜마법사4@AL_INCAGI','idle',29,10,10000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2554,'[PH] 게펜마법사4@AL_INCAGI','attack',29,10,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2554,'[PH] 게펜마법사4@AL_DECAGI','attack',30,48,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2554,'[PH] 게펜마법사4@NPC_COMBOATTACK','attack',171,3,5000,0,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2555,'[PH] 게펜마법사5@MG_COLDBOLT','attack',14,5,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2555,'[PH] 게펜마법사5@WZ_STORMGUST','attack',89,1,3000,3000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2555,'[PH] 게펜마법사5@WZ_FROSTNOVA','attack',88,5,3000,1000,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2556,'[PH] 게펜마법사6@CR_AUTOGUARD','attack',249,5,3000,500,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2556,'[PH] 게펜마법사6@CR_GRANDCROSS','attack',254,5,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2557,'[PH] 게펜마법사7@NPC_BLEEDING','attack',660,5,5000,0,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2557,'[PH] 게펜마법사7@NPC_WIDESOULDRAIN','attack',680,3,3000,500,10000,'no','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2557,'[PH] 게펜마법사7@NPC_COMBOATTACK','attack',171,10,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2557,'[PH] 게펜마법사7@NPC_INVISIBLE','attack',353,1,2000,1000,60000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2558,'[PH] 게펜마법사8@LK_SPIRALPIERCE','attack',397,5,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2558,'[PH] 게펜마법사8@SM_ENDURE','attack',8,10,3000,0,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2558,'[PH] 게펜마법사8@SM_MAGNUM','attack',7,25,3000,500,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-#REPLACE INTO `mob_skill_db_re` VALUES (2558,'[PH] 게펜마법사8@NPC_MILLENNIUMSHIELD','attack',707,1,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2559,'[PH] 게펜마법사9@NPC_HOLYATTACK','attack',189,10,3000,500,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2559,'[PH] 게펜마법사9@AL_HEAL','attack',28,8,3000,0,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2559,'[PH] 게펜마법사9@AL_PNEUMA','attack',25,1,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2560,'[PH] 게펜마법사10@NPC_MENTALBREAKER','attack',159,4,2000,1500,10000,'no','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2560,'[PH] 게펜마법사10@AC_DOUBLE','attack',46,5,3000,500,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2560,'[PH] 게펜마법사10@HT_ANKLESNARE','attack',117,1,2000,1000,10000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2560,'[PH] 게펜마법사10@HT_FLASHER','attack',120,1,2000,1000,10000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@MG_FIREBOLT','attack',19,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@MG_COLDBOLT','attack',14,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@MG_LIGHTNINGBOLT','attack',20,5,1000,500,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@WZ_EARTHSPIKE','attack',90,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@PF_SPIDERWEB','attack',405,1,1000,1000,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2561,'[PH] 게펜마법사11@RG_STRIPSHIELD','attack',216,5,3000,1000,30000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2562,'[PH] 게펜마법사12@NPC_SLOWCAST','attack',672,5,1000,1000,15000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2562,'[PH] 게펜마법사12@MG_SOULSTRIKE','attack',13,10,1000,500,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2562,'[PH] 게펜마법사12@WZ_FIREPILLAR','attack',80,5,3000,500,5000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `mob_skill_db_re` VALUES (2562,'[PH] 게펜마법사12@WZ_VERMILION','attack',85,5,1000,2000,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2549,'Arhi@MG_FIREBOLT','attack',19,5,3000,1000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2549,'Arhi@MG_FIREWALL','attack',18,1,3000,2000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2550,'Dio Anemos@MG_FROSTDIVER','attack',15,5,3000,1000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2550,'Dio Anemos@MG_THUNDERSTORM','attack',21,3,3000,2000,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2551,'Geffen Shoplifter@NPC_COMBOATTACK','attack',171,2,5000,0,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2551,'Geffen Shoplifter@MG_STONECURSE','attack',16,5,5000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2551,'Geffen Shoplifter@TF_POISON','attack',52,3,3000,0,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2552,'Geffen Bully@BS_HAMMERFALL','attack',110,5,5000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2552,'Geffen Bully@NPC_POWERUP','attack',349,5,5000,1000,25000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2553,'Geffen Gang Member@ASC_BREAKER','attack',379,1,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2553,'Geffen Gang Member@AS_VENOMDUST','attack',140,10,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2554,'Faymont@AL_INCAGI','idle',29,10,10000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2554,'Faymont@AL_INCAGI','attack',29,10,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2554,'Faymont@AL_DECAGI','attack',30,48,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2554,'Faymont@NPC_COMBOATTACK','attack',171,3,5000,0,3000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2555,'Ordre@MG_COLDBOLT','attack',14,5,3000,1000,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2555,'Ordre@WZ_STORMGUST','attack',89,1,3000,3000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2555,'Ordre@WZ_FROSTNOVA','attack',88,5,3000,1000,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2556,'Blut Hase@CR_AUTOGUARD','attack',249,5,3000,500,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2556,'Blut Hase@CR_GRANDCROSS','attack',254,5,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2557,'Kuro Akuma@NPC_BLEEDING','attack',660,5,5000,0,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2557,'Kuro Akuma@NPC_WIDESOULDRAIN','attack',680,3,3000,500,10000,'no','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2557,'Kuro Akuma@NPC_COMBOATTACK','attack',171,10,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2557,'Kuro Akuma@NPC_INVISIBLE','attack',353,1,2000,1000,60000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2558,'Ifodes@LK_SPIRALPIERCE','attack',397,5,3000,1000,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2558,'Ifodes@SM_ENDURE','attack',8,10,3000,0,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2558,'Ifodes@SM_MAGNUM','attack',7,25,3000,500,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+#REPLACE INTO `mob_skill_db_re` VALUES (2558,'Ifodes@NPC_MILLENNIUMSHIELD','attack',707,1,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2559,'Licheniyes@NPC_HOLYATTACK','attack',189,10,3000,500,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2559,'Licheniyes@AL_HEAL','attack',28,8,3000,0,5000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2559,'Licheniyes@AL_PNEUMA','attack',25,1,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2560,'Odoric@NPC_MENTALBREAKER','attack',159,4,2000,1500,10000,'no','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2560,'Odoric@AC_DOUBLE','attack',46,5,3000,500,5000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2560,'Odoric@HT_ANKLESNARE','attack',117,1,2000,1000,10000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2560,'Odoric@HT_FLASHER','attack',120,1,2000,1000,10000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@MG_FIREBOLT','attack',19,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@MG_COLDBOLT','attack',14,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@MG_LIGHTNINGBOLT','attack',20,5,1000,500,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@WZ_EARTHSPIKE','attack',90,5,1000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@PF_SPIDERWEB','attack',405,1,1000,1000,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2561,'Ju@RG_STRIPSHIELD','attack',216,5,3000,1000,30000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2562,'Dwigh@NPC_SLOWCAST','attack',672,5,1000,1000,15000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2562,'Dwigh@MG_SOULSTRIKE','attack',13,10,1000,500,10000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2562,'Dwigh@WZ_FIREPILLAR','attack',80,5,3000,500,5000,'yes','around2','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db_re` VALUES (2562,'Dwigh@WZ_VERMILION','attack',85,5,1000,2000,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (2563,'Fei Kanabian@AM_DEMONSTRATION','attack',229,5,2000,500,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (2563,'Fei Kanabian@AM_ACIDTERROR','attack',230,5,2000,1000,15000,'yes','target','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (2563,'Fei Kanabian@AM_POTIONPITCHER','attack',231,4,3000,1000,10000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

+ 29 - 0
sql-files/upgrades/upgrade_20190309.sql

@@ -10,3 +10,32 @@ WHERE
 AND
 	( `i`.`card1` | ( `i`.`card2` << 16 ) ) = `c`.`pet_id`
 ;
+
+INSERT INTO `inventory`( `char_id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `card0`, `card1`, `card2`, `card3` )
+SELECT
+	`p`.`char_id`,						-- Character ID
+	`p`.`egg_id`,						-- Egg Item ID
+	'1',								-- Amount
+	'0',								-- Equip
+	'1',								-- Identify
+	'0',								-- Refine
+	'1',								-- Attribute
+	'256',								-- Card0
+	( `p`.`pet_id` & 0xFFFF ),			-- Card1
+	( ( `p`.`pet_id` >> 16 ) & 0xFFFF ),	-- Card2
+	'0'									-- Card3
+FROM `pet` `p`
+LEFT JOIN `inventory` `i`
+ON
+	`i`.`char_id` = `p`.`char_id`
+AND
+	`i`.`nameid` = `p`.`egg_id`
+AND
+	`i`.`card0` = '256'
+AND
+	( `i`.`card1` | ( `i`.`card2` << 16 ) ) = `p`.`pet_id`
+WHERE
+	`p`.`incubate` = '0'
+AND
+	`i`.`id` IS NULL
+;

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

@@ -0,0 +1,19 @@
+ALTER TABLE `mob_db`
+	MODIFY `Sprite` varchar(24) NOT NULL,
+	ADD UNIQUE KEY (`Sprite`)
+;
+
+ALTER TABLE `mob_db_re`
+	MODIFY `Sprite` varchar(24) NOT NULL,
+	ADD UNIQUE KEY (`Sprite`)
+;
+
+ALTER TABLE `mob_db2`
+	MODIFY `Sprite` varchar(24) NOT NULL,
+	ADD UNIQUE KEY (`Sprite`)
+;
+
+ALTER TABLE `mob_db2_re`
+	MODIFY `Sprite` varchar(24) NOT NULL,
+	ADD UNIQUE KEY (`Sprite`)
+;

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

@@ -0,0 +1,2 @@
+ALTER TABLE `ipbanlist`
+	CHANGE COLUMN `list` `list` VARCHAR(15) NOT NULL DEFAULT '' FIRST;

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

@@ -0,0 +1 @@
+DROP TABLE `ragsrvinfo`;

+ 1 - 10
src/char/char.cpp

@@ -2299,7 +2299,7 @@ bool char_checkdb(void){
 		schema_config.party_db, schema_config.pet_db, schema_config.friend_db, schema_config.mail_db, 
                 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.elemental_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.achievement_table
 	};
 	ShowInfo("Start checking DB integrity\n");
@@ -2494,11 +2494,6 @@ bool char_checkdb(void){
 		Sql_ShowDebug(sql_handle);
 		return false;
 	}
-	//checking ragsrvinfo_db
-	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT  `index`,`name`,`exp`,`jexp`,`drop` FROM `%s` LIMIT 1;", schema_config.ragsrvinfo_db) ){
-		Sql_ShowDebug(sql_handle);
-		return false;
-	}
 	//checking skillcooldown_db
 	if( SQL_ERROR == Sql_Query(sql_handle, "SELECT  `account_id`,`char_id`,`skill`,`tick` FROM `%s` LIMIT 1;", schema_config.skillcooldown_db) ){
 		Sql_ShowDebug(sql_handle);
@@ -2686,7 +2681,6 @@ void char_set_default_sql(){
 	safestrncpy(schema_config.skill_homunculus_db,"skill_homunculus",sizeof(schema_config.skill_homunculus_db));
 	safestrncpy(schema_config.mercenary_db,"mercenary",sizeof(schema_config.mercenary_db));
 	safestrncpy(schema_config.mercenary_owner_db,"mercenary_owner",sizeof(schema_config.mercenary_owner_db));
-	safestrncpy(schema_config.ragsrvinfo_db,"ragsrvinfo",sizeof(schema_config.ragsrvinfo_db));
 	safestrncpy(schema_config.skillcooldown_db,"skillcooldown",sizeof(schema_config.skillcooldown_db));
 	safestrncpy(schema_config.bonus_script_db,"bonus_script",sizeof(schema_config.bonus_script_db));
 	safestrncpy(schema_config.char_reg_num_table,"char_reg_num",sizeof(schema_config.char_reg_num_table));
@@ -3129,9 +3123,6 @@ void do_final(void)
 	do_final_chmapif();
 	do_final_chlogif();
 
-	if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s`", schema_config.ragsrvinfo_db) )
-		Sql_ShowDebug(sql_handle);
-
 	char_db_->destroy(char_db_, NULL);
 	online_char_db->destroy(online_char_db, NULL);
 	auth_db->destroy(auth_db, NULL);

+ 0 - 1
src/char/char.hpp

@@ -79,7 +79,6 @@ struct Schema_Config {
 	char skill_homunculus_db[DB_NAME_LEN];
 	char mercenary_db[DB_NAME_LEN];
 	char mercenary_owner_db[DB_NAME_LEN];
-	char ragsrvinfo_db[DB_NAME_LEN];
 	char elemental_db[DB_NAME_LEN];
 	char bonus_script_db[DB_NAME_LEN];
 	char acc_reg_num_table[DB_NAME_LEN];

+ 1 - 1
src/char/char_clif.cpp

@@ -290,7 +290,7 @@ int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd ){
 
 		if( pincode_allowed(newpin) ){
 			chlogif_pincode_notifyLoginPinUpdate( sd->account_id, newpin );
-			strncpy( sd->pincode, newpin, strlen( newpin ) );
+			strncpy( sd->pincode, newpin, sizeof( newpin ) );
 
 			chclif_pincode_sendstate( fd, sd, PINCODE_PASSED );	
 		}else{

+ 3 - 2
src/char/char_logif.cpp

@@ -361,8 +361,9 @@ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){
 		ARR_FIND( 0, ARRAYLENGTH(map_server), server_id, map_server[server_id].fd > 0 && map_server[server_id].map[0] );
 		// continued from char_auth_ok...
 		if( server_id == ARRAYLENGTH(map_server) || //server not online, bugreport:2359
-			(charserv_config.max_connect_user == 0 && sd->group_id != charserv_config.gm_allow_group) ||
-			( charserv_config.max_connect_user > 0 && char_count_users() >= charserv_config.max_connect_user && sd->group_id != charserv_config.gm_allow_group ) ) {
+			(((charserv_config.max_connect_user == 0 || charserv_config.char_maintenance == 1) ||
+			(charserv_config.max_connect_user > 0 && char_count_users() >= charserv_config.max_connect_user)) &&
+			sd->group_id < charserv_config.gm_allow_group)) {
 			// refuse connection (over populated)
 			chclif_reject(u_fd,0);
 		} else {

+ 0 - 23
src/char/char_mapif.cpp

@@ -855,26 +855,6 @@ int chmapif_parse_reqdivorce(int fd){
 	return 1;
 }
 
-/**
- * Receive rates of this map index
- * @author [Wizputer]
- * @param fd: wich fd to parse from
- * @return : 0 not enough data received, 1 success
- */
-int chmapif_parse_updmapinfo(int fd){
-	if( RFIFOREST(fd) < 14 )
-		return 0;
-	else {
-		char esc_server_name[sizeof(charserv_config.server_name)*2+1];
-		Sql_EscapeString(sql_handle, esc_server_name, charserv_config.server_name);
-		if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` SET `index`='%d',`name`='%s',`exp`='%d',`jexp`='%d',`drop`='%d'",
-			schema_config.ragsrvinfo_db, fd, esc_server_name, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)) )
-			Sql_ShowDebug(sql_handle);
-		RFIFOSKIP(fd,14);
-	}
-	return 1;
-}
-
 /**
  *  Character disconnected set online 0
  * @author [Wizputer]
@@ -1442,7 +1422,6 @@ int chmapif_parse(int fd){
 			case 0x2b11: next=chmapif_parse_reqdivorce(fd); break;
 			case 0x2b13: next=chmapif_parse_updmapip(fd,id); break;
 			case 0x2b15: next=chmapif_parse_req_saveskillcooldown(fd); break;
-			case 0x2b16: next=chmapif_parse_updmapinfo(fd); break;
 			case 0x2b17: next=chmapif_parse_setcharoffline(fd); break;
 			case 0x2b18: next=chmapif_parse_setalloffline(fd,id); break;
 			case 0x2b19: next=chmapif_parse_setcharonline(fd,id); break;
@@ -1530,8 +1509,6 @@ void chmapif_server_reset(int id){
 		WBUFW(buf,2) = j * 4 + 10;
 		chmapif_sendallwos(fd, buf, WBUFW(buf,2));
 	}
-	if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `index`='%d'", schema_config.ragsrvinfo_db, map_server[id].fd) )
-		Sql_ShowDebug(sql_handle);
 	online_char_db->foreach(online_char_db,char_db_setoffline,id); //Tag relevant chars as 'in disconnected' server.
 	chmapif_server_destroy(id);
 	chmapif_server_init(id);

+ 0 - 1
src/char/char_mapif.hpp

@@ -28,7 +28,6 @@ int chmapif_parse_fwlog_changestatus(int fd);
 int chmapif_parse_updfamelist(int fd);
 void chmapif_send_ackdivorce(int partner_id1, int partner_id2);
 int chmapif_parse_reqdivorce(int fd);
-int chmapif_parse_updmapinfo(int fd);
 int chmapif_parse_setcharoffline(int fd);
 int chmapif_parse_setalloffline(int fd, int id);
 int chmapif_parse_setcharonline(int fd, int id);

+ 7 - 0
src/char/int_achievement.cpp

@@ -113,6 +113,13 @@ bool mapif_achievement_add(uint32 char_id, struct achievement* ad)
 	StringBuf buf;
 	int i;
 
+	ARR_FIND( 0, MAX_ACHIEVEMENT_OBJECTIVES, i, ad->count[i] != 0 );
+
+	if( i == MAX_ACHIEVEMENT_OBJECTIVES && ad->completed == 0 && ad->rewarded == 0 ){
+		// Do not save
+		return true;
+	}
+
 	StringBuf_Init(&buf);
 	StringBuf_Printf(&buf, "INSERT INTO `%s` (`char_id`, `id`, `completed`, `rewarded`", schema_config.achievement_table);
 	for (i = 0; i < MAX_ACHIEVEMENT_OBJECTIVES; ++i)

+ 2 - 2
src/common/common-minicore.vcxproj.filters

@@ -106,8 +106,8 @@
     <ClCompile Include="utils.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClInclude Include="winapi.cpp">
+    <ClCompile Include="winapi.cpp">
       <Filter>Source Files</Filter>
-    </ClInclude>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 2 - 2
src/common/common.vcxproj.filters

@@ -145,9 +145,9 @@
     <ClCompile Include="utils.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClInclude Include="winapi.cpp">
+    <ClCompile Include="winapi.cpp">
       <Filter>Source Files</Filter>
-    </ClInclude>
+    </ClCompile>
     <ClCompile Include="utilities.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>

+ 37 - 2
src/common/database.cpp

@@ -132,11 +132,18 @@ void YamlDatabase::parse( const YAML::Node& rootNode ){
 	uint64 count = 0;
 
 	if( this->nodeExists( rootNode, "Body" ) ){
-		for( const YAML::Node &node : rootNode["Body"] ){
+		const YAML::Node& bodyNode = rootNode["Body"];
+		size_t childNodesCount = bodyNode.size();
+		size_t childNodesProgressed = 0;
+		const char* fileName = this->currentFile.c_str();
+
+		for( const YAML::Node &node : bodyNode ){
 			count += this->parseBodyNode( node );
+
+			ShowStatus( "Loading [%" PRIdPTR "/%" PRIdPTR "] entries from '" CL_WHITE "%s" CL_RESET "'" CL_CLL "\r", ++childNodesProgressed, childNodesCount, fileName );
 		}
 
-		ShowStatus("Done reading '" CL_WHITE "%" PRIu64 CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'\n", count, this->currentFile.c_str());
+		ShowStatus( "Done reading '" CL_WHITE "%" PRIu64 CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'" CL_CLL "\n", count, fileName );
 	}
 }
 
@@ -237,6 +244,34 @@ bool YamlDatabase::asString(const YAML::Node &node, const std::string &name, std
 	return asType<std::string>(node, name, out);
 }
 
+bool YamlDatabase::asUInt16Rate( const YAML::Node& node, const std::string& name, uint16& out, uint16 maximum ){
+	if( this->asUInt16( node, name, out ) ){
+		if( out > maximum ){
+			this->invalidWarning( node[name], "Node \"%s\" with value %" PRIu16 " exceeds maximum of %" PRIu16 ".\n", name.c_str(), out, maximum );
+
+			return false;
+		}else{
+			return true;
+		}
+	}else{
+		return false;
+	}
+}
+
+bool YamlDatabase::asUInt32Rate( const YAML::Node& node, const std::string& name, uint32& out, uint32 maximum ){
+	if( this->asUInt32( node, name, out ) ){
+		if( out > maximum ){
+			this->invalidWarning( node[name], "Node \"%s\" with value %" PRIu32 " exceeds maximum of %" PRIu32 ".\n", name.c_str(), out, maximum );
+
+			return false;
+		}else{
+			return true;
+		}
+	}else{
+		return false;
+	}
+}
+
 void YamlDatabase::invalidWarning( const YAML::Node &node, const char* fmt, ... ){
 	va_list ap;
 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff