Kaynağa Gözat

Merge branch 'master' into hotfix/issue2173

aleos89 7 yıl önce
ebeveyn
işleme
8796135124
92 değiştirilmiş dosya ile 8535 ekleme ve 2936 silme
  1. 49 44
      .github/CONTRIBUTING.md
  2. 4 0
      conf/battle/misc.conf
  3. 8 3
      conf/msg_conf/map_msg.conf
  4. 0 1152
      db/const.txt
  5. 59 59
      db/pre-re/item_db.txt
  6. 1 1
      db/pre-re/job_db1.txt
  7. 16 16
      db/pre-re/skill_cast_db.txt
  8. 20 15
      db/pre-re/skill_db.txt
  9. 20 20
      db/pre-re/skill_require_db.txt
  10. 17 17
      db/pre-re/skill_tree.txt
  11. 1 0
      db/re/item_combo_db.txt
  12. 211 206
      db/re/item_db.txt
  13. 0 0
      db/re/job_basehpsp_db.txt
  14. 1 1
      db/re/job_db1.txt
  15. 8 8
      db/re/job_exp.txt
  16. 46 9
      db/re/mob_db.txt
  17. 7 0
      db/re/quest_db.txt
  18. 29 20
      db/re/skill_cast_db.txt
  19. 4 0
      db/re/skill_castnodex_db.txt
  20. 15 10
      db/re/skill_db.txt
  21. 4 0
      db/re/skill_nocast_db.txt
  22. 31 26
      db/re/skill_require_db.txt
  23. 97 44
      db/re/skill_tree.txt
  24. 1 0
      db/skill_copyable_db.txt
  25. 15 5
      doc/atcommands.txt
  26. 2 2
      doc/effect_list.txt
  27. 51 13
      doc/script_commands.txt
  28. 40 34
      doc/status_change.txt
  29. 2 2
      npc/custom/events/holiday/valentinesdayexp.txt
  30. 1 1
      npc/custom/events/holiday/xmas_rings_event.txt
  31. 433 154
      npc/custom/jobmaster.txt
  32. 57 56
      npc/custom/official/GeffenMagicTournament.txt
  33. 2 2
      npc/guild2/agit_main_se.txt
  34. 4 0
      npc/merchants/advanced_refiner.txt
  35. 8 0
      npc/merchants/refine.txt
  36. 1 0
      npc/other/gm_npcs.txt
  37. 4 4
      npc/quests/thana_quest.txt
  38. 4 4
      npc/re/custom/lasagna/lasagna_npcs.txt
  39. 855 0
      npc/re/jobs/2e/rebellion.txt
  40. 1 0
      npc/re/mapflag/nobranch.txt
  41. 1 0
      npc/re/mapflag/nomemo.txt
  42. 1 0
      npc/re/mapflag/nopenalty.txt
  43. 1 0
      npc/re/mapflag/nosave.txt
  44. 1 0
      npc/re/mapflag/noteleport.txt
  45. 2 0
      npc/re/mapflag/nowarp.txt
  46. 2 0
      npc/re/mapflag/nowarpto.txt
  47. 15 6
      npc/re/merchants/shadow_refiner.txt
  48. 1 0
      npc/re/merchants/shops.txt
  49. 1 0
      npc/re/scripts_jobs.conf
  50. 59 59
      sql-files/item_db.sql
  51. 211 206
      sql-files/item_db_re.sql
  52. 15 15
      sql-files/logs.sql
  53. 90 90
      sql-files/main.sql
  54. 46 9
      sql-files/mob_db_re.sql
  55. 118 0
      sql-files/upgrades/upgrade_20171001.sql
  56. 16 0
      sql-files/upgrades/upgrade_20171001_logs.sql
  57. 2 0
      sql-files/upgrades/upgrade_20171019.sql
  58. 14 5
      src/char/char.cpp
  59. 16 16
      src/char/char_clif.c
  60. 1 2
      src/common/mapindex.c
  61. 1 1
      src/common/mapindex.h
  62. 0 7
      src/config/core.h
  63. 1 1
      src/custom/atcommand.inc
  64. 19 13
      src/map/atcommand.c
  65. 88 76
      src/map/battle.c
  66. 1 0
      src/map/battle.h
  67. 135 58
      src/map/clif.cpp
  68. 18 2
      src/map/clif.h
  69. 42 3
      src/map/clif_obfuscation.h
  70. 6 0
      src/map/clif_packetdb.h
  71. 596 4
      src/map/clif_shuffle.h
  72. 4 4
      src/map/homunculus.c
  73. 22 6
      src/map/itemdb.c
  74. 9 0
      src/map/itemdb.h
  75. 5 11
      src/map/map-server.vcxproj
  76. 2 2
      src/map/map-server.vcxproj.filters
  77. 0 1
      src/map/map.cpp
  78. 44 34
      src/map/mob.cpp
  79. 3 3
      src/map/mob.h
  80. 47 27
      src/map/npc.c
  81. 974 10
      src/map/npc.h
  82. 9 9
      src/map/pc.c
  83. 2 2
      src/map/pc.h
  84. 102 22
      src/map/script.cpp
  85. 1166 1
      src/map/script.h
  86. 2122 1
      src/map/script_constants.h
  87. 276 208
      src/map/skill.cpp
  88. 4 0
      src/map/skill.h
  89. 61 45
      src/map/status.c
  90. 7 1
      src/map/status.h
  91. 26 44
      src/map/unit.c
  92. 1 4
      src/tool/mapcache.c

+ 49 - 44
.github/CONTRIBUTING.md

@@ -77,27 +77,31 @@ For the most part you as a user will have no reason to worry about the **Milesto
 
 :bangbang: Users should be aware of the 'Mode' and 'Status' Type **Labels** as these sometimes require feedback! :bangbang:
 
-#### Bug Type
+#### Component
 
 | Label Name | Search Link | Description |
 | --- | --- | --- |
-| `bug:core` | [search][search-rathena-label-bugcore] | A fault that lies within the main framework of rAthena. |
-| `bug:database` | [search][search-rathena-label-bugdatabase] | A fault that lies within the database of rAthena. |
-| `bug:documentation` | [search][search-rathena-label-bugdocumentation] | A fault that lies within the documentation of rAthena. |
-| `bug:forum` | [search][search-rathena-label-bugforum] | A fault that lies within the rAthena forum. |
-| `bug:script` | [search][search-rathena-label-bugscript] | A fault that lies within the scripts of rAthena. |
-| `bug:skill` | [search][search-rathena-label-bugskill] | A fault that deals specifically with a skill. |
-| `bug:tool` | [search][search-rathena-label-bugtool] | A fault that lies within a tool of rAthena. |
-
-#### Mode Type
+| `component:core` | [search][search-rathena-label-componentcore] | A fault that lies within the main framework of rAthena. |
+| `component:database` | [search][search-rathena-label-componentdatabase] | A fault that lies within the database of rAthena. |
+| `component:documentation` | [search][search-rathena-label-componentdocumentation] | A fault that lies within the documentation of rAthena. |
+| `component:script` | [search][search-rathena-label-componentscript] | A fault that lies within the scripts of rAthena. |
+| `component:skill` | [search][search-rathena-label-componentskill] | A fault that deals specifically with a skill. |
+| `component:tool` | [search][search-rathena-label-componenttool] | A fault that lies within a tool of rAthena. |
+
+#### Missing
+| Label Name | Search Link | Description |
+| --- | --- | --- |
+| `missing:clientdate` | [search][search-rathena-label-missingclientdate] | Issue **Title** or **Description** does not state the client date used to create the bug. |
+| `missing:mode` | [search][search-rathena-label-missingmode] | Issue **Title** or **Description** does not state pre-renewal or renewal mode. |
+| `missing:revision` | [search][search-rathena-label-missingrevision] | Issue **Description** does not state the revision of rAthena used when the bug occurred. |
 
+#### Mode
 | Label Name | Search Link | Description |
 | --- | --- | --- |
-| `mode:missing` | [search][search-rathena-label-modemissing] | Issue **Title** or **Description** does not state pre-renewal or renewal mode. |
 | `mode:prerenewal` | [search][search-rathena-label-modeprerenewal] | A fault that exists within the pre-renewal mode. |
 | `mode:renewal` | [search][search-rathena-label-moderenewal] | A fault that exists within the renewal mode. |
 
-#### Priority Type
+#### Priority
 
 | Label Name | Search Link | Description |
 | --- | --- | --- |
@@ -105,64 +109,65 @@ For the most part you as a user will have no reason to worry about the **Milesto
 | `priority:medium` | [search][search-rathena-label-prioritymedium] | A fault that makes rAthena have significant repercussions but does not render rAthena unusable. |
 | `priority:low` | [search][search-rathena-label-prioritylow] | A fault that affects rAthena in one piece of functionality and is self-contained. |
 
-#### Server Type
+#### Status
 
 | Label Name | Search Link | Description |
 | --- | --- | --- |
-| `server:login` | [search][search-rathena-label-serverlogin] | A fault that lies within the login server of rAthena. |
-| `server:char` | [search][search-rathena-label-serverchar] | A fault that lies within the character server of rAthena. |
-| `server:map` | [search][search-rathena-label-servermap] | A fault that lies within the map server of rAthena. |
-
-#### Status Type
-
-| Label Name | Search Link | Description |
-| --- | --- | --- |
-| `status:client date missing` | [search][search-rathena-label-statusclientdatemissing] | Issue **Title** or **Description** does not state the client date used to create the bug. |
+| `status:code-review` | [search][search-rathena-label-statuscodereview] | Pull Request that requires reviewing from other developers before being pushed to master. |
 | `status:confirmed` | [search][search-rathena-label-statusconfirmed] | Issue that has been validated by a developer to affect rAthena. |
 | `status:duplicate` | [search][search-rathena-label-statusduplicate] |  Issue that has been reported before. |
-| `status:git hash missing` | [search][search-rathena-label-statusgithashmissing] | Issue **Description** does not state the hash of rAthena used when the bug occurred. |
+| `status:inprogress` | [search][search-rathena-label-statusinprogress] | Issue that has begun resolution by a developer. |
 | `status:invalid` | [search][search-rathena-label-statusinvalid] | Issue that is either not official or is not related to rAthena. |
-| `status:needs more info` | [search][search-rathena-label-statusneedsmoreinfo] | Issue that needs more information from the issue creator. |
-| `status:needs official info` | [search][search-rathena-label-statusneedsofficialinfo] | Issue that needs more information from a creditable source. |
-| `status:started` | [search][search-rathena-label-statusstarted] | Issue that has begun resolution by a developer. |
+| `status:need more info` | [search][search-rathena-label-statusneedmoreinfo] | Issue that needs more information from a creditable source. |
+| `status:need user input` | [search][search-rathena-label-statusneeduserinput] | Issue that needs more information from the issue creator. |
+| `status:outdated emulator` | [search][search-rathena-label-statusoutdatedemulator] | Issue that requires the creator's local files to be updated to be resolved. |
 | `status:unable to reproduce` | [search][search-rathena-label-statusunabletoreproduce] | Issue that was unable to be reproduced on rAthena. |
 | `status:wontfix` | [search][search-rathena-label-statuswontfix] |  Issue that cannot be fixed through some limitation or is intended behavior. |
 
-[search-rathena-label-bugcore]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Acore
-[search-rathena-label-bugdatabase]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Adatabase
-[search-rathena-label-bugdocumentation]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Adocumentation
-[search-rathena-label-bugforum]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Aforum
-[search-rathena-label-bugscript]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Ascript
-[search-rathena-label-bugskill]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Askill
-[search-rathena-label-bugtool]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Abug%3Atool
-[search-rathena-label-modemissing]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amode%3Amissing
+#### Type
+| Label Name | Search Link | Description |
+| --- | --- | --- |
+| `type:bug` | [search][search-rathena-label-typebug] | Issue that is a bug within rAthena. |
+| `type:enhancement` | [search][search-rathena-label-typeenhancement] | Issue that is an enhancement to rAthena. |
+| `type:maintenance` | [search][search-rathena-label-typemaintenance] | Issue for refactoring rAthena. |
+| `type:question` | [search][search-rathena-label-typequestion] | Issue that is a question for rAthena. |
+
+[search-rathena-label-componentcore]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Acore
+[search-rathena-label-componentdatabase]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Adatabase
+[search-rathena-label-componentdocumentation]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Adocumentation
+[search-rathena-label-componentscript]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Ascript
+[search-rathena-label-componentskill]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Askill
+[search-rathena-label-componenttool]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Atool
+[search-rathena-label-missingclientdate]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amissing%3Aclientdate
+[search-rathena-label-missingmode]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amissing%3Amode
+[search-rathena-label-missingrevision]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amissing%3Arevision
 [search-rathena-label-modeprerenewal]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amode%3Aprerenewal
 [search-rathena-label-moderenewal]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Amode%3Arenewal
 [search-rathena-label-priorityhigh]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Apriority%3Ahigh
 [search-rathena-label-prioritymedium]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Apriority%3Amedium
 [search-rathena-label-prioritylow]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Apriority%3Alow
-[search-rathena-label-serverchar]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Aserver%3Achar
-[search-rathena-label-serverlogin]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Aserver%3Alogin
-[search-rathena-label-servermap]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Aserver%3Amap
-[search-rathena-label-statusclientdatemissing]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aclient+date+missing"
+[search-rathena-label-statuscodereview]: https://github.com/rathena/rathena/pulls?q=is%3Apr+is%3Aopen+label%3Astatus%3Acode-review
 [search-rathena-label-statusconfirmed]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Aconfirmed
 [search-rathena-label-statusduplicate]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Aduplicate
-[search-rathena-label-statusgithashmissing]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Agit+hash+missing"
+[search-rathena-label-statusinprogress]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Ainprogress
 [search-rathena-label-statusinvalid]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Ainvalid
-[search-rathena-label-statusneedsmoreinfo]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aneeds+more+info"
-[search-rathena-label-statusneedsofficialinfo]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aneeds+official+info"
-[search-rathena-label-statusstarted]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Astarted
+[search-rathena-label-statusneedmoreinfo]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aneed+more+info"
+[search-rathena-label-statusneeduserinput]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aneed+user+input"
+[search-rathena-label-statusoutdatedemulator]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aoutdated+emulator"
 [search-rathena-label-statusunabletoreproduce]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3A"status%3Aunable+to+reproduce"
 [search-rathena-label-statuswontfix]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Astatus%3Awontfix
+[search-rathena-label-typebug]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Atype%3Abug
+[search-rathena-label-typeenhancement]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Atype%3Aenhancement
+[search-rathena-label-typemaintenance]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Atype%3Amaintenance
+[search-rathena-label-typequestion]: https://github.com/rathena/rathena/issues?q=is%3Aissue+is%3Aopen+label%3Atype%3Aquestion
 
 Become a Team Member
 --------------------
 
 1. Before you send in a staff application, make sure you have an [rAthena account](https://rathena.org/board/register/).
-  * If you are new to the community, go ahead and [introduce yourself](https://rathena.org/board/forum/89-introductions/)!
+    * If you are new to the community, go ahead and [introduce yourself](https://rathena.org/board/forum/89-introductions/)!
 2. Please fill out the [Staff Application](https://rathena.org/board/staffapplications/) and you will be notified shortly.
 
-<br />
 The rAthena team is comprised of all volunteers ([AUTHORS](https://github.com/rathena/rathena/blob/master/AUTHORS)). We encourage you to pitch in and submit bug reports or Pull Requests!
 
 Thanks!

+ 4 - 0
conf/battle/misc.conf

@@ -18,6 +18,10 @@
 //   config to adjust how this will affect players)
 pk_mode: 0
 
+// Displays a message when the player enters a pk zone.
+// Only during pk_mode (Note 1)
+pk_mode_mes: yes
+
 // Manner/karma system configuration. Specifies how does negative manner
 // (red no chat bubble) affects players (add as needed):
 //  0: No penalties.

+ 8 - 3
conf/msg_conf/map_msg.conf

@@ -423,7 +423,7 @@
 404: War of Emperium SE is currently in progress.
 405: War of Emperium SE has been ended.
 406: War of Emperium SE is currently not in progress.
-//407 free
+//407: free
 //chrif related
 408: Need disconnection to perform change-sex request...
 409: Your sex has been changed (need disconnection by the server)...
@@ -753,7 +753,7 @@
 719: Personal rate information will be shown.
 
 //Skill messages
-720: %s is required.
+//720: Free
 721: [%s] Poison effect was applied to the weapon.
 //722: Free
 
@@ -1621,7 +1621,8 @@
 1475: ---- My Channels ----
 1476: You have not joined any channels.
 
-//1477 free
+// @effect
+1477: Please enter a valid effect id in the range from %d to %d.
 
 // @partysharelvl
 1478: Party share level range has been changed successfully.
@@ -1662,5 +1663,9 @@
 1501: Spying on the %s clan.
 1502: Incorrect clan name/ID.
 
+// PK Mode msgs
+1503: You've entered a PK Zone.
+1504: You've entered a PK Zone (safe until level %d).
+
 //Custom translations
 //import: conf/msg_conf/import/map_msg_eng_conf.txt

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 1152
db/const.txt


+ 59 - 59
db/pre-re/item_db.txt

@@ -1526,7 +1526,7 @@
 2704,Golden_Accessory,Golden Accessories,4,20,,100,,4,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMdef,4; },{},{}
 2705,Golden_Accessory2,Golden Accessories,4,20,,100,,4,,0,0xFFFFFFFF,7,2,136,,,,,{ bonus2 bAddMonsterDropItem,12018,500; },{},{}
 2706,Handcuff,Arrest Handcuffs,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
-2707,GUSLI,GUSLI,4,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
+2707,Gusli,GUSLI,4,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
 2708,Chinese_Handicraft,Chinese Handicraft,4,0,,50,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus3 bAutoSpell,"MG_FIREBOLT",5,300; },{},{}
 2709,5_Anniversary_Coin,5th Anniversary Coin,4,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAtkRate,5; bonus bMatkRate,5; },{},{}
 2710,Bloody_Iron_Ball_C,Bloody Iron Ball,4,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,0,0,0,{ bonus bBaseAtk,30; },{},{}
@@ -2084,7 +2084,7 @@
 4448,Cornus_Card,Cornus Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Holy,20; bonus2 bAddEle,Ele_Holy,5; },{},{}
 4449,Dark_Shadow_Card,Dark Shadow Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Dark,20; bonus2 bAddEle,Ele_Dark,5; },{},{}
 4450,Banshee_Master_Card,Banshee Master Card,6,20,,10,,,,,,,,16,,,,,{ bonus bInt,1; bonus bMatk,10; },{},{}
-4451,Entweihen_Card,Entweihen Crothen Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMatk,100; },{},{}
+4451,Ant_Buyanne_Card,Entweihen Crothen Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMatk,100; },{},{}
 4452,Centipede_Larva_Card,Centipede Larva Card,6,20,,10,,,,,,,,2,,,,,{ bonus bInt,1; bonus bMatk,3; },{},{}
 4453,Hilsrion_Card,Hillsrion Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,25; },{},{}
 // Armor Enchant System
@@ -2149,8 +2149,8 @@
 4757,Luck8,LUK+8,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,8; },{},{}
 4758,Luck9,LUK+9,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,9; },{},{}
 4759,Luck10,LUK+10,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,10; },{},{}
-4760,Magic_Attack1,MATK+1%,6,20,,10,,,,,,,,,,,,,{ bonus bMatkRate,1; },{},{}
-4761,Magic_Attack2,MATK+2%,6,20,,10,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{}
+4760,Matk1,MATK+1%,6,20,,10,,,,,,,,,,,,,{ bonus bMatkRate,1; },{},{}
+4761,Matk2,MATK+2%,6,20,,10,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{}
 4762,Evasion6,FLEE+6,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,6; },{},{}
 4763,Evasion12,FLEE+12,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,12; },{},{}
 4764,Critical5,CRI+5,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,5; },{},{}
@@ -2750,10 +2750,10 @@
 //5571,Rasta_Wig,Rasta_Wig,4,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,552,{ bonus bStr,1; },{},{}
 5572,Savage_Baby_Hat,Savage Babe Hat,4,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,1,1,553,{ bonus bVit,2; },{},{}
 5573,Bogy_Horn,Dokebi Horn,4,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,1,554,{},{},{}
-5574,Pencil_in_Mouth,Well-Chewed Pencil,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,10,0,555,{ bonus bdex,2; bonus bHitRate,3; },{},{}
+5574,Pencil_In_Mouth,Well-Chewed Pencil,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,10,0,555,{ bonus bdex,2; bonus bHitRate,3; },{},{}
 5575,Onigiri_Hat,Rice Ball Hat,4,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,30,0,556,{},{},{}
 //5576,Japan_Winecup,Wine Cup,4,20,,100,,1,,0,0xFFFFFFFF,7,2,1,,0,0,557,{},{},{}
-5577,Dark_Knight_Mask_,Dark Knight Mask,4,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; },{},{}
+5577,Dark_Knight_MaskB,Dark Knight Mask,4,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; },{},{}
 5578,Voyage_Hat,Voyage_Hat,4,200,,10,,1,,0,0xFFFFFFFF,7,2,256,,0,1,236,{ bonus bAgi,2; },{},{}
 5579,Wanderer's_Sakkat,Wanderer's Sakkat,4,20,,300,,2,,1,0xFFFFFFFF,7,2,768,,70,1,558,{ bonus bAgi,2; },{},{}
 //5580,Red_Beret,Red Beret,4,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,559,{ bonus bAllStats,3; bonus bMdef,3; },{},{}
@@ -2768,8 +2768,8 @@
 //5589,Leo_Diadem,Leo Diadem,4,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,566,{ bonus bDex,2; bonus2 bSubEle,Ele_Fire,5; if(getrefine()>6) { bonus bFlee,10; bonus bAspdRate,3; autobonus "{ bonus bSplashRange,1; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } },{},{}
 5590,K_Poring_Cake_Cap,Poring Cake Hat,4,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,0,1,417,{},{},{}
 //5591,Desert_Prince,Desert Prince,4,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,0,567,{},{},{}
-5592,Sigrun's_Wings,Sigrun's Wings,4,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,80,0,568,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) bonus bStr,1; else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||class==Job_Ninja||class==Job_Soul_Linker) bonus bInt,1; else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bDex,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,80; bonus bMaxSP,30; } },{},{}
-5593,Rabbit_Bonnet_,Rabbit Bonnet,4,20,,200,,1,,1,0xFFFFFFFF,7,2,768,,1,1,549,{},{},{}
+5592,Sigrun's_Wing,Sigrun's Wings,4,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,80,0,568,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) bonus bStr,1; else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||class==Job_Ninja||class==Job_Soul_Linker) bonus bInt,1; else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bDex,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,80; bonus bMaxSP,30; } },{},{}
+5593,K_Rabbit_Bonnet,Rabbit Bonnet,4,20,,200,,1,,1,0xFFFFFFFF,7,2,768,,1,1,549,{},{},{}
 5594,Donut_In_Mouth,Donut In Mouth,4,20,,50,,1,,0,0xFFFFFFFF,7,2,1,,1,0,569,{},{},{}
 //5595,Eye_Of_Juno,Eye Of Juno,4,20,,400,,2,,1,0xFFFFFFFF,7,2,256,,1,1,570,{ bonus bMdef,2; },{},{}
 5596,4Leaf_Clover_In_Mouth,4Leaf Clover In Mouth,4,20,,0,,2,,0,0xFFFFFFFF,7,2,1,,1,0,571,{ bonus bMdef,2; },{},{}
@@ -2835,7 +2835,7 @@
 //5656,Scooter_Hat_J,Scooter Helmet,4,20,,1000,,7,,1,0xFFFFFFFF,7,2,256,,50,1,588,{ bonus bUnbreakableHelm,0; },{},{}
 //5657,Antique_Pipe_J,Captain's Pipe,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,30,0,383,{},{},{}
 5658,Imp_Hat,Imp Hat,4,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,1,1,589,{ bonus3 bAutoSpell,"SA_FLAMELAUNCHER",1,5; },{},{}
-5659,Sleeper_Hat,Sleeper Hat,4,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,1,1,590,{ bonus3 bAutoSpell,"SA_SEISMICWEAPON",1,5; },{},{}
+5659,Sleepr_Hat,Sleeper Hat,4,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,1,1,590,{ bonus3 bAutoSpell,"SA_SEISMICWEAPON",1,5; },{},{}
 5660,Gryphon_Hat,Gryphon Hat,4,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,1,1,591,{ bonus3 bAutoSpell,"SA_LIGHTNINGLOADER",1,5; },{},{}
 //5661,Red_Pirate_Bandana,Red Pirate Banada,4,0,,0,,3,,0,0xFFFFFFFF,7,2,256,,10,1,592,{ bonus bStr,1; bonus bDex,1; bonus bAspdRate,2; bonus bCastRate,-2; bonus3 bAutoSpell,"MO_EXTREMITYFIST",1,30; },{},{}
 //5662,Libra_Crown,Libra Crown,4,10,,300,,3,,0,0xFFFFFFFF,7,2,256,,1,1,593,{ bonus bDex,3; },{},{}
@@ -4221,7 +4221,7 @@
 7853,Pass_F3,iPod nano Raffle Ticket,3,20,,10,,,,,,,,,,,,,{},{},{}
 7854,Pass_CF,Comodo Festival Ticket,3,20,,10,,,,,,,,,,,,,{},{},{}
 7855,Heart,Heart,3,20,,10,,,,,,,,,,,,,{},{},{}
-7856,Girl_Bunch_Of_Flower,Girl's Bouquet,3,20,,50,,,,,,,,,,,,,{},{},{}
+7856,Girl_Bunch_Of_Flower_,Girl's Bouquet,3,20,,50,,,,,,,,,,,,,{},{},{}
 7857,Handmade_Kitty_Doll,Hand-made Kitty Doll,3,20,,30,,,,,,,,,,,,,{},{},{}
 7858,Dragonball_Yellow_,Dragonball Yellow,3,20,,10,,,,,,,,,,,,,{},{},{}
 7859,Game_Ticket,Game Ticket,3,20,,100,,,,,,,,,,,,,{},{},{}
@@ -4551,7 +4551,7 @@
 11529,MAAMOUL_,Maamoul,0,500,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal 120,60; },{},{}
 11530,Jujube,Jujube,0,10,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal 30,0; },{},{}
 11531,Coffee,Coffee,0,10,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal 0,10; },{},{}
-11701,Girl_Bunch_Of_Flower_,Girl's Bouquet,0,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(105,145),0; },{},{}
+11701,Girl_Bunch_Of_Flower,Girl's Bouquet,0,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(105,145),0; },{},{}
 11702,Moon_Cookie,Moon Cookie,0,0,,300,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 11703,Mysterious_Blood,Mystery Blood,0,0,,30,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal 0,rand(25,35); },{},{}
 11704,KETUPAT_F,Ketupat,0,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(70,90),0; },{},{}
@@ -4953,9 +4953,9 @@
 12389,Runstone_Storm,Pertz Runestone For Apprentice,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ /* if(strcharinfo(3)=="job3_rune02") { itemskill "RK_STORMBLAST",1; } */ },{},{}
 12390,Runstone_Millennium,Verkana Runestone For Apprentice,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ /* if(strcharinfo(3)=="job3_rune02") { itemskill "RK_MILLENNIUMSHIELD",1; } */ },{},{}
 12391,Lucky_Egg_C,Lucky Egg,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12392,Repair_A,Repair A,2,220,,100,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(200,300),0; } },{},{}
-12393,Repair_B,Repair B,2,500,,140,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(300,400),0; } },{},{}
-12394,Repair_C,Repair C,2,1100,,180,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(400,500),0; } },{},{}
+12392,RepairA,Repair A,2,220,,100,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(200,300),0; } },{},{}
+12393,RepairB,Repair B,2,500,,140,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(300,400),0; } },{},{}
+12394,RepairC,Repair C,2,1100,,180,,,,,0x00000400,8,2,,,,,,{ if ( checkmadogear() ) { itemheal rand(400,500),0; } },{},{}
 12395,Tantanmen,Tantan Noodle,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1519; },{},{}
 12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "AL_TELEPORT",1; else if(.@rnd==2) itemskill "AL_TELEPORT",3; else if(.@rnd==3) percentheal 50,0; else if(.@rnd==4) percentheal 0,50; else if(.@rnd==5) end; else if(.@rnd==6) getitem 512,1; else if(.@rnd==7) itemskill "ALL_REVERSEORCISH",1; else if(.@rnd==8) specialeffect2 EF_MAPPILLAR2; else if(.@rnd==9) specialeffect2 EF_ANGEL2; else specialeffect2 EF_COIN; },{},{}
 12397,Fools_Day_Box2,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "TF_DETOXIFY",1; else if(.@rnd==2) itemskill "TF_PICKSTONE",1; else if(.@rnd==3) itemskill "BA_FROSTJOKER",1; else if(.@rnd==4) itemskill "DC_SCREAM",1; else if(.@rnd==5) end; else if(.@rnd==6) getitem 909,1; else if(.@rnd==7) itemskill "AL_RUWACH",1; else if(.@rnd==8) specialeffect2 EF_BEGINASURA; else if(.@rnd==9) specialeffect2 EF_MVP; else specialeffect2 EF_CURSEATTACK; },{},{}
@@ -4964,7 +4964,7 @@
 12400,Water_Of_Blessing_,Water Of Blessing,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCINT,300000,40; },{},{}
 12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 5,5; },{},{}
-12403,Lucky_Egg2,Lucky Egg2,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12403,Lucky_Egg_C2,Lucky Egg2,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12404,Acti_Potion,Acti Potion,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12405,Underripe_Yggseed,Underripe Yggseed,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 30,30; skilleffect "AL_BLESSING",0; sc_start SC_BLESSING,140000,5; },{},{}
 12406,Psychic_ArmorS,Psychic ArmorS,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -4982,23 +4982,23 @@
 12418,Full_SwingK,Full SwingK,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_FULL_SWING_K,500000,50; },{},{}
 12419,Mana_Plus,Mana Plus,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MANA_PLUS,500000,50; },{},{}
 12420,Stamina_Up_M,Stamina Up M,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MUSTLE_M,500000,5; },{},{}
-12421,Falmons_F,Falmons F,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{}
+12421,Digestive_F,Falmons F,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{}
 12422,HP_Increase_PotionS,HP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,1; percentheal 1,0; },{},{}
 12423,HP_Increase_PotionM,HP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,2; percentheal 2,0; },{},{}
 12424,HP_Increase_PotionL,HP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,3; percentheal 5,0; },{},{}
 12425,SP_Increase_PotionS,SP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,1; percentheal 0,2; },{},{}
 12426,SP_Increase_PotionM,SP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,2; percentheal 0,4; },{},{}
 12427,SP_Increase_PotionL,SP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,3; percentheal 0,8; },{},{}
-12428,Concentrated_White_Potion_Z,Concentrated White Potion Z,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0; },{},{}
-12429,Savage_Full_Roast,Savage Full Roast,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{}
-12430,Cocktail_Warg_Blood,Cocktail Warg Blood,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{}
-12431,Minor_Stew,Minor Stew,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MINOR_BBQ,300000,20; },{},{}
-12432,Siroma_Iced_Tea,Siroma Iced Tea,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SIROMA_ICE_TEA,300000,20; },{},{}
-12433,Drosera_Herb_Salad,Drosera Herb Salad,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_DROCERA_HERB_STEAMED,300000,20; },{},{}
-12434,Petite_Tail_Noodles,Petite Tail Noodles,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_PUTTI_TAILS_NOODLES,300000,20; },{},{}
-12435,Black_Mass,Black Mass,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_STOMACHACHE,60000,rand(5,10); },{},{}
-12436,Vitata_500,Vitata 500,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_VITATA_500,500000,0; itemheal 0,200; },{},{}
-12437,Concentrated_Ceromain_Soup,Concentrated Ceromain Soup,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{}
+12428,Enrich_White_PotionZ,Concentrated White Potion Z,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0; },{},{}
+12429,Savage_BBQ,Savage Full Roast,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{}
+12430,Wug_Blood_Cocktail,Cocktail Warg Blood,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{}
+12431,Minor_Brisket,Minor Stew,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MINOR_BBQ,300000,20; },{},{}
+12432,Siroma_Icetea,Siroma Iced Tea,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SIROMA_ICE_TEA,300000,20; },{},{}
+12433,Drocera_Herb_Stew,Drosera Herb Salad,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_DROCERA_HERB_STEAMED,300000,20; },{},{}
+12434,Petti_Tail_Noodle,Petite Tail Noodles,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_PUTTI_TAILS_NOODLES,300000,20; },{},{}
+12435,Black_Thing,Black Mass,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_STOMACHACHE,60000,rand(5,10); },{},{}
+12436,Vitata500,Vitata 500,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_VITATA_500,500000,0; itemheal 0,200; },{},{}
+12437,Enrich_Celermine_Juice,Concentrated Ceromain Soup,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{}
 12438,F_Giant_Fly_Wing,F Giant Fly Wing,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12439,F_Battle_Manual,F Battle Manual,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12440,F_Insurance,F Insurance,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5141,7 +5141,7 @@
 12579,Ring_Of_Valkyrie_Box,Ring Of Valkyrie Box,2,20,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12580,Vending_Search_Scroll,Universal Catalog Silver,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,0; },{},{}
 12581,Vending_Search_Scroll2,Universal Catalog Gold,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,1; },{},{}
-12591,Vending_Search_Scroll3,Universal Catalog Bronze,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,1; },{},{}
+12591,Uni_Catalog_Bz,Universal Catalog Bronze,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,1; },{},{}
 12701,Old_Blue_Box_F,Old Blue Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12702,Old_Bleu_Box,Old Navy Box,2,0,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_BleuBox),1; getrandgroupitem(IG_BleuBox),1; },{},{}
 12703,Holy_Egg_2,Holy Egg,11,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5162,7 +5162,7 @@
 12717,Poison_Paralysis,Paralyze,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_PARALYSE,300000,0,10,0; },{},{}
 12718,Poison_Leech,Leech End,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_LEECHESEND,300000,0,10,0; },{},{}
 12719,Poison_Oblivion,Oblivion Curse,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_OBLIVIONCURSE,300000,0,10,0; },{},{}
-12720,Poison_Disheart,Disheart,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_DEATHHURT,300000,0,10,0; },{},{}
+12720,Poison_Contamination,Disheart,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_DEATHHURT,300000,0,10,0; },{},{}
 12721,Poison_Numb,Toxin,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_TOXIN,300000,0,10,0; },{},{}
 12722,Poison_Fever,Pyrexia,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_PYREXIA,300000,0,10,0; },{},{}
 12723,Poison_Laughing,Magic Mushroom,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MAGICMUSHROOM,300000,0,10,0; },{},{}
@@ -5530,8 +5530,8 @@
 13518,Weapon_Card_Scroll_Box,Weapon Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13558,1; },{},{}
 13519,Armor_Card_Scroll_Box,Armor Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13559,1; },{},{}
 13520,Helmet_Card_Scroll_Box,Helmet Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13560,1; },{},{}
-13521,Garment_Card_Scroll_Box,Garment Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13561,1; },{},{}
-13522,Shield_Card_Scroll_Box,Shield Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13562,1; },{},{}
+13521,Hood_Card_Scroll_Box,Garment Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13561,1; },{},{}
+13522,Hood_Card_Scroll_Box2,Shield Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13562,1; },{},{}
 13523,Shoes_Card_Scroll_Box,Shoes Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13563,1; },{},{}
 13524,Accy_Card_Scroll_Box,Accessory Card Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 13564,1; },{},{}
 13525,Zeny_Scroll_Box,Zeny Pet Egg Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14508,1; },{},{}
@@ -5920,10 +5920,10 @@
 13908,Deviruchi_Set_Box,XM Deviruchi Set Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5227,1; getitem 5228,1; getitem 5229,1; },{},{}
 13909,MVP_Hunt_Box,MVP Hunting Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 7621,1; getitem 12210,1; getitem 12221,1; getitem 12214,3; },{},{}
 13910,Brewing_Box,XM Brewing Set Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12204,10; getitem 12205,10; getitem 12206,10; },{},{}
-13911,Christmas_Pet_Scroll,Christmas Pet Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-13912,Pty_Blessing_Box,Party Blessing 10 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14588,10; },{},{}
-13913,Pty_Inc_Agi_Box,Party Increase Agi 10 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14589,10; },{},{}
-13914,Pty_Assumptio_Box,Party Assumptio 5 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14590,10; },{},{}
+13911,Xmas_Pet_Scroll,Christmas Pet Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+13912,Party_Blessing_Box,Party Blessing 10 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14588,10; },{},{}
+13913,Party_Inc_Agi_Box,Party Increase Agi 10 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14589,10; },{},{}
+13914,Party_Assumptio_Box,Party Assumptio 5 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14590,10; },{},{}
 13915,Love_Angel_Box,Love Angel Magic Powder Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 12287,604800; },{},{}
 13916,Squirrel_Box,Squirrel Magic Powder Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 12288,604800; },{},{}
 13917,Gogo_Box,Gogo Magic Powder Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 12289,604800; },{},{}
@@ -5945,21 +5945,21 @@
 13933,Undine_Box,Undine Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4350,4; },{},{}
 13934,Salamander_Box,Salamander Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4380,4; },{},{}
 13935,Soul_Box,Soul Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4388,4; },{},{}
-13936,Noum_Box,Gnome Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4335,4; },{},{}
+13936,Noum_Bpx,Gnome Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4335,4; },{},{}
 13937,Robo_Eye_Box,Robo Eye Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5325,1; },{},{}
 13938,Twin_Ribbon_Box,Maiden's Twin Ribbon Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5187,1; },{},{}
 //13939,Diadem_Box,Diadem Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5313,1; },{},{}
 13940,Siege_Tele_Scroll_Box,WoE Teleport Scroll 100 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14591,100; },{},{}
-13941,TW_Valentine_Scroll,Taiwan Valentine Scroll,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+13941,Valentine_Scroll_TW,Taiwan Valentine Scroll,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 13942,Love_Angel_Box_1m,Love Angel Magic Powder Box 30 Days,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14009,1; },{},{}
 13943,Squirrel_Box_1m,Squirrel Magic Powder Box 30 Days,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14010,1; },{},{}
 13944,Gogo_Box_1m,Gogo Magic Powder Box 30 Days,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14011,1; },{},{}
-13945,BRO_SM_Package,Brazil Swordsman Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2317,1; getitem 2106,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 2229,1; getitem 2266,1; },{},{}
-13946,BRO_MG_Package,Brazil Magician Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2322,1; getitem 2102,1; getitem 2104,1; getitem 2504,1; getitem 4003,1; getitem 4077,1; getitem 2607,2; getitem 5027,1; },{},{}
-13947,BRO_AC_Package,Brazil Acolyte Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2326,1; getitem 2104,1; getitem 2404,1; getitem 2504,1; getitem 4003,1; getitem 4100,1; getitem 2607,2; getitem 2217,1; },{},{}
-13948,BRO_AR_Package,Brazil Archer package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2331,1; getitem 1716,1; getitem 2406,1; getitem 2504,1; getitem 4064,1; getitem 4102,1; getitem 2607,2; getitem 2285,1; },{},{}
-13949,BRO_MC_Package,Brazil Merchant Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2315,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 5021,1; },{},{}
-13950,BRO_TF_Package,Brazil Thief Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2336,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4097,1; getitem 4102,1; getitem 2607,2; getitem 2274,1; },{},{}
+13945,Br_SwordPackage,Brazil Swordsman Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2317,1; getitem 2106,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 2229,1; getitem 2266,1; },{},{}
+13946,Br_MagePackage,Brazil Magician Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2322,1; getitem 2102,1; getitem 2104,1; getitem 2504,1; getitem 4003,1; getitem 4077,1; getitem 2607,2; getitem 5027,1; },{},{}
+13947,Br_AcolPackage,Brazil Acolyte Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2326,1; getitem 2104,1; getitem 2404,1; getitem 2504,1; getitem 4003,1; getitem 4100,1; getitem 2607,2; getitem 2217,1; },{},{}
+13948,Br_ArcherPackage,Brazil Archer package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2331,1; getitem 1716,1; getitem 2406,1; getitem 2504,1; getitem 4064,1; getitem 4102,1; getitem 2607,2; getitem 2285,1; },{},{}
+13949,Br_MerPackage,Brazil Merchant Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2315,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 5021,1; },{},{}
+13950,Br_ThiefPackage,Brazil Thief Package,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2336,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4097,1; getitem 4102,1; getitem 2607,2; getitem 2274,1; },{},{}
 13951,Wasteland_Outlaw_Box,Western Outlaw Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 13109,604800; },{},{}
 13952,Lever_Action_Rifle_Box,Lever Action Rifle Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 13170,604800; },{},{}
 13953,All_In_One_Ring_Box,All In One Ring Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ rentitem 2741,604800; },{},{}
@@ -6007,9 +6007,9 @@
 13995,Speed_Up_Potion_Box10,Speed Potion 10 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12016,10; },{},{}
 13996,Big_Bun_Box100,Big Bun 100 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14522,100; },{},{}
 13997,Big_Bun_Box500,Big Bun 500 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14522,500; },{},{}
-13998,Giant_Flywing_Box500,Giant Fly Wing 500 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12212,500; },{},{}
-13999,Pill_Box100,Pill 100 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14523,100; },{},{}
-14000,Pill_Box500,Pill 500 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14523,500; },{},{}
+13998,Giant_Fly_Wing_Box500,Giant Fly Wing 500 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12212,500; },{},{}
+13999,Pill__Box100,Pill 100 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14523,100; },{},{}
+14000,Pill__Box500,Pill 500 Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14523,500; },{},{}
 14001,Basic_Siege_Supply_Box,Recruit Siege Supply Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 11503,25; getitem 11504,10; },{},{}
 14002,Adv_Siege_Supply_Box,Veteran Siege Supply Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 11503,50; getitem 11504,20; },{},{}
 14003,Elite_Siege_Supply_Box,Elite Siege Supply Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 11503,100; getitem 11504,50; },{},{}
@@ -6311,7 +6311,7 @@
 14301,Ifrit's_Ear_Box,Ears Of Ifrit Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5421,1; },{},{}
 14304,Scuba_Mask_Box,Scuba Mask Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5397,1; },{},{}
 14314,Phreeoni_Scroll_Box,Phreeoni Scroll Box,2,,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14597,10; },{},{}
-14315,Ghostring_Scroll_Box,Ghostring Scroll Box,2,,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14598,10; },{},{}
+14315,GhostringS_Box,Ghostring Scroll Box,2,,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14598,10; },{},{}
 14316,July7_Scroll,July7 Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14317,Bacsojin_Scroll,Bacsojin Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14343,Spiked_Scarf_Box,Spiked Scarf Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5462,1; },{},{}
@@ -6378,7 +6378,7 @@
 14545,Battle_Manual_X3,Field Manual 300%,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXPBOOST,1800000,300; },{},{}
 14546,Fire_Cracker_Love,I Love You Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14547,Fire_Cracker_Wday,Whiteday Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-14548,Fire_Cracker_Valentine,Valentine's Day Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+14548,Fire_Cracker_Vday,Valentine's Day Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14549,Fire_Cracker_Bday,Birthday Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14550,Fire_Cracker_Xmas,Xmas Firecracker,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 14551,Str_Dish01_,Fried Grasshopper Legs,0,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_STRFOOD,1200000,1; percentheal 5,0; },{},{}
@@ -6463,10 +6463,10 @@
 //16251,Gemini_Diadem_Box
 //16252,Gemini_Crown_Box
 16257,Buddah_Scroll,Buddah Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-16258,HD_Bradium_5_Box,HD Bradium 5 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6226,5; },{},{}
-16259,HD_Carnium_5_Box,HD Carnium 5 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6225,5; },{},{}
-16260,HD_Bradium_10_Box,HD Bradium 10 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6226,10; },{},{}
-16261,HD_Carnium_10_Box,HD Carnium 10 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6225,10; },{},{}
+16258,HD_Bradium_Box5,HD Bradium 5 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6226,5; },{},{}
+16259,HD_Carnium_Box5,HD Carnium 5 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6225,5; },{},{}
+16260,HD_Bradium_Box10,HD Bradium 10 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6226,10; },{},{}
+16261,HD_Carnium_Box10,HD Carnium 10 Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6225,10; },{},{}
 //16262,HD_Bradium_5_Box,
 //16263,HD_Carnium_5_Box,
 //16264,HD_Bradium_10_Box,
@@ -6475,7 +6475,7 @@
 //16268,HE_Bubble_Gum_Box
 //16269,Cancer_Diadem_Box
 //16270,Cancer_Crown_Box,
-16304,Evil_Incarnation,Evil Incarnation,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+16304,Evil_Incarnation_Disable,Evil Incarnation,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 //16343,Leo_Crown_Box
 //16344,Leo_Diadem_Box
 //16345,Leo_Crown_Box
@@ -6545,14 +6545,14 @@
 18003,Soul_Cannon_Ball,Soul Cannon Ball,10,200,,10,120,,,,0x00040400,8,2,32768,,99,,8,{ bonus bAtkEle,Ele_Ghost; },{},{}
 18004,Iron_Cannon_Ball,Iron Cannon Ball,10,500,,10,250,,,,0x00040400,8,2,32768,,99,,8,{},{},{}
 // More Bows
-18100,Shooting_Star,Shooting Star,5,20,,0,190,,5,0,0x00080800,7,2,34,4,1,1,11,{ bonus bLongAtkRate,20; },{},{}
+18100,Shooting_Star_C,Shooting Star,5,20,,0,190,,5,0,0x00080800,7,2,34,4,1,1,11,{ bonus bLongAtkRate,20; },{},{}
 18101,F_Bow_Of_Rudra_C,Rudra Bow,5,2,,0,185,,5,0,0x000A0848,7,2,34,4,0,0,11,{ bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000; },{},{}
 18102,E_Bow_Of_Rudra_C,Rudra Bow,5,2,,0,185,,5,0,0x000A0848,7,2,34,4,0,0,11,{ bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000; },{},{}
 // More Headgears
 18500,Cheer_Scarf6,Cheer Scarf6,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,1,0,369,{},{},{}
 18501,Cheer_Scarf8,Cheer Scarf8,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,1,0,369,{},{},{}
 18502,Cheer_Scarf10,Cheer Scarf10,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,1,0,369,{},{},{}
-18503,Majestic_Devil,Small Devil Horns,4,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,1,0,562,{ bonus bAtkRate,5; bonus bMatkRate,5; bonus bMaxHPRate,10; bonus bMaxSPRate,10; },{},{}
+18503,Small_Horn_Of_Devil,Small Devil Horns,4,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,1,0,562,{ bonus bAtkRate,5; bonus bMatkRate,5; bonus bMaxHPRate,10; bonus bMaxSPRate,10; },{},{}
 18505,Umbala_Spirit,Umbala Spirit,4,0,,200,,1,,1,0xFFFFFFFF,7,2,1,,30,0,675,{ bonus bVit,1; },{},{}
 18506,Hattah_Black,Hattah Black,4,12000,,4000,,2,,1,0xFFFFFFFF,7,2,769,,1,1,676,{},{},{}
 18507,Elven_Ears_,Elven Ears,4,20,,100,,0,,1,0xFFFFFFFE,7,2,512,,70,0,73,{},{},{}
@@ -6561,16 +6561,16 @@
 //
 18595,Horn_Of_Ancient,Horn of Ancient,4,40,,200,,8,,1,0xFFFFFFFF,7,2,256,,50,1,757,{ autobonus "{ bonus bBaseAtk,100; }",5,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
 18596,Sprout_Hat,Sprout Hat,4,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,70,1,758,{ skill "WZ_HEAVENDRIVE",3; },{},{}
-18597,Mercury_Riser,Mercury Riser,4,40,,200,,10,,1,0xFFFFFFFF,7,2,256,,0,1,759,{ bonus bAspdRate,3; bonus bCritical,3; if(getrefine() >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(getrefine() >= 9) { bonus bAspdRate,2; bonus bCritical,2; }},{},{}
+18597,Mercury_Helm,Mercury Riser,4,40,,200,,10,,1,0xFFFFFFFF,7,2,256,,0,1,759,{ bonus bAspdRate,3; bonus bCritical,3; if(getrefine() >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(getrefine() >= 9) { bonus bAspdRate,2; bonus bCritical,2; }},{},{}
 //
-18600,Cat_Ear_Beret,Cat Ear Beret,4,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,761,{ bonus bAtkRate,5; if(getrefine() > 5 && getrefine() <= 12) { bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); bonus2 bSubRace,RC_DemiHuman,(getrefine() - 5); bonus2 bAddRace,RC_Player,(getrefine() - 5); bonus2 bSubRace,RC_Player,(getrefine() - 5); } if(getrefine() > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; } },{},{}
+18600,Cat_Ears_Beret,Cat Ear Beret,4,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,761,{ bonus bAtkRate,5; if(getrefine() > 5 && getrefine() <= 12) { bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); bonus2 bSubRace,RC_DemiHuman,(getrefine() - 5); bonus2 bAddRace,RC_Player,(getrefine() - 5); bonus2 bSubRace,RC_Player,(getrefine() - 5); } if(getrefine() > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; } },{},{}
 //
 18612,White_Musang_Hat,White Musang Hat,4,40,,200,,3,,1,0xFFFFFFFF,7,2,256,,0,1,770,{ bonus bStr,2; bonus bVit,2; bonus bLuk,1; bonus bUnbreakableHelm,0; },{},{}
 18613,Black_Musang_Hat,Black Musang Hat,4,40,,200,,3,,1,0xFFFFFFFF,7,2,256,,0,1,771,{ bonus bInt,2; bonus bDex,2; bonus bAgi,1; bonus bUnbreakableHelm,0; },{},{}
 //
-18620,Heart_Eye_Patch,Heart Eyepatch,4,5,,200,,2,,0,0xFFFFFFFF,7,2,512,,20,1,779,{},{},{}
+18620,Heart_Eyepatch,Heart Eyepatch,4,5,,200,,2,,0,0xFFFFFFFF,7,2,512,,20,1,779,{},{},{}
 //
-18656,Witch's_Pumpkin_Hat,Witch's Pumpkin Hat,4,20,,300,,10,,0,0xFFFFFFFF,7,2,256,,20,1,717,{ bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15; },{},{}
+18656,Wit_Pumpkin_Hat,Witch's Pumpkin Hat,4,20,,300,,10,,0,0xFFFFFFFF,7,2,256,,20,1,717,{ bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15; },{},{}
 
 // Costume System
 19500,T_Mr_Smile,T Mr Smile,4,0,,0,,0,,0,0xFFFFFFFF,7,2,6144,,0,0,65,{ bonus bStr,2; },{},{}
@@ -6578,4 +6578,4 @@
 19504,T_Sunglasses,T Sunglasses,4,0,,0,,0,,0,0xFFFFFFFF,7,2,2048,,0,0,12,{},{},{}
 19505,T_Cigarette,T Cigarette,4,0,,0,,0,,0,0xFFFFFFFF,7,2,4096,,0,0,54,{},{},{}
 19506,T_Valkyrie_Feather_Band,T Valkyrie Feather Band,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1024,,0,1,300,{},{},{}
-19507,Clear_Sun,Clear Sun,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1024,,1,0,654,{},{},{}
+19507,Fine_Sun,Clear Sun,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1024,,1,0,654,{},{},{}

+ 1 - 1
db/pre-re/job_db1.txt

@@ -280,7 +280,7 @@
 // Oboro
 4212,	26000,80   ,  0  ,540  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
 // Rebellion
-4215,	28000,89   ,  0  ,469  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
+4215,	28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480  ,610  ,540  ,940  ,1040 ,2000 ,2000
 // Summoner - Placeholder
 4218,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Baby Summoner - Placeholder

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

@@ -1638,43 +1638,43 @@
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000
 //-- RL_MASS_SPIRAL
-2553,1000,1000,0,0,30000,10000
+2553,2000,1000,0,0,30000,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,0,0,0,0,10000
+2554,3000:2500:2000:1500:1000,2000,0,0,0,10000
 //-- RL_B_TRAP
-2555,0,0,0,10000:11000:12000:13000:14000,6000:7000:8000:9000:10000,0
+2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000
 //-- RL_FLICKER
 2556,0,0,0,0,0,10000
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,0,0,0,0,2000
+2557,3000:2500:2000:1500:1000,2000,0,0,0,2000
 //-- RL_E_CHAIN
-2558,0,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,5000
+2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0
 //-- RL_QD_SHOT
-2559,0,1000,0,1500,0,5000
+2559,0,0,0,1500,0,0
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000
 //-- RL_FIREDANCE
-2561,0,2000,0,0,0,5000
+2561,0,500,0,0,0,5000
 //-- RL_H_MINE
-2562,1500,0,0,30000,15000,5000:4500:4000:3500:3000
+2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000
 //-- RL_P_ALTER
-2563,0,1000,0,30000:45000:60000:75000:90000,0,5000
+2563,0,0,0,30000:45000:60000:75000:90000,0,0
 //-- RL_FALLEN_ANGEL
-2564,500,1500,0,0,0,10000:8000:6000:4000:2000
+2564,0,0,0,2000,0,0
 //-- RL_R_TRIP
-2565,0,1000,0,0,0,1000
+2565,0,1000,0,0,0,3000:2500:2000:1500:1000
 //-- RL_D_TAIL
-2566,500,2000,0,0,0,5000
+2566,1200:1400:1600:1800:2000,2000,0,0,0,5000
 //-- RL_FIRE_RAIN
-2567,1800:1600:1400:1200:1000,2000,0,100,0,5000
+2567,0,1000,0,100,0,5000
 //-- RL_HEAT_BARREL
-2568,0,1000,0,60000,10000,10000
+2568,2000,1000,0,60000,0,100000:95000:90000:85000:80000
 //-- RL_AM_BLAST
 2569,2000,1000,0,0,6000:7000:8000:9000:10000,5000
 //-- RL_SLUGSHOT
-2570,5000:6000:7000:8000:9000,1000,0,0,2000,10000
+2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000
 //-- RL_HAMMER_OF_GOD
-2571,8000,2000,0,0,3000:3000:4000:4000:5000,30000
+2571,0,2000,0,0,3000:3000:4000:4000:5000,30000
 //-- RL_R_TRIP_PLUSATK
 //2572,0,0,0,0,0,0
 //-- RL_B_FLICKER_ATK

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

@@ -1269,25 +1269,25 @@
 // Rebellion
 //2551,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0,	RL_GLITTERING_GREED,Flip The Coin Greed
 2552,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0,	RL_RICHS_COIN,Rich's Coin
-2553,15,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
-2554,9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
-2555,3,6,2,0,0x1,1,5,1,no,0,0,3,misc,0,0x0,	RL_B_TRAP,Bind Trap
+2553,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
+2554,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
+2555,3:4:4:5:5,6,2,0,0x1,1,5,1,no,0,0,1,misc,0,0x0,	RL_B_TRAP,Bind Trap
 2556,0,6,4,0,0x3,-1,1,1,no,0,0,0,none,0,0x0,	RL_FLICKER,Flicker
-2557,9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
+2557,-9,6,1,-1,0x2,2:2:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
 2558,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	RL_E_CHAIN,Eternal Chain
-2559,-9,6,4,-1,0x3,21,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
-2560,11,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
-2561,0,6,4,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
-2562,7:8:9:10:11,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
+2559,-9,6,4,-1,0x0,10,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
+2560,-9,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
+2561,5,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
+2562,-9,6,1,-1,0x0,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
 2563,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_P_ALTER,Platinum Alter
-2564,9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
-2565,0,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
-2566,0,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
-2567,9,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
+2564,-9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
+2565,5,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
+2566,5,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
+2567,2,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
 2568,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_HEAT_BARREL,Heat Barrel
-2569,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
-2570,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_SLUGSHOT,Slug Shot
-2571,7:8:9:10:11,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
+2569,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
+2570,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
+2571,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
 2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0,	RL_R_TRIP_PLUSATK,Round Trip Plus Attack
 //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0,	RL_B_FLICKER_ATK,Bind Flicker Attack
 //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0,	RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack
@@ -1397,6 +1397,11 @@
 5055,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	SU_CHATTERING,Chattering
 5056,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	SU_SPIRITOFSEA,Spirit of Sea
 
+// Wedding Skills 3
+5063,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	WE_CALLALLFAMILY,Call All Family
+5064,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	WE_ONEFOREVER,One Forever
+5065,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	WE_CHEERUP,Cheer Up
+
 //****
 // Homunculus S
 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0,	HLIF_HEAL,Healing Touch

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

@@ -888,26 +888,26 @@
 //****
 // Rebellion
 //2551,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							//RL_GLITTERING_GREED
-2552,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								//RL_RICHS_COIN
-2553,0,0,80:84:88:92:96,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					//RL_MASS_SPIRAL
-2554,0,0,55:60:65:70:75,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					//RL_BANISHING_BUSTER
-2555,0,0,30:32:34:36:38,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					//RL_B_TRAP
-2556,0,0,2,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								//RL_FLICKER
-2557,0,0,55:60:65:70:75,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					//RL_S_STORM
-2558,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								//RL_E_CHAIN
-2559,0,0,5,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								//RL_QD_SHOT
-2560,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								//RL_C_MARKER
-2561,0,0,10:15:20:25:30,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					//RL_FIREDANCE
-2562,0,0,45:50:55:60:65,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					//RL_H_MINE
-2563,0,0,20:24:28:32: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					//RL_P_ALTER
-2564,0,0,90,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								//RL_FALLEN_ANGEL
-2565,0,0,40:45:50:55:60,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					//RL_R_TRIP
-2566,0,0,60:70:80:90:100,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				//RL_D_TAIL
-2567,0,0,70,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								//RL_FIRE_RAIN
-2568,0,0,30:40:50:60:70,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					//RL_HEAT_BARREL
-2569,0,0,80:84:88:92:96,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					//RL_AM_BLAST
-2570,0,0,55:60:65:70:75,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					//RL_SLUGSHOT
-2571,0,0,70:80:90:100:110,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				//RL_HAMMER_OF_GOD
+2552,0,0,10,0,0,100,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							//RL_RICHS_COIN
+2553,0,0,40:44:48:52:56,0,0,0,18,3,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					//RL_MASS_SPIRAL
+2554,0,0,55:60:65:70:75,0,0,0,20,3,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					//RL_BANISHING_BUSTER
+2555,0,0,30:32:34:36:38,0,0,0,17:18:19:20:21,0,0,none,0,1,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_B_TRAP
+2556,0,0,2,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								//RL_FLICKER
+2557,0,0,50:55:60:65:70,0,0,0,20,3,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					//RL_S_STORM
+2558,0,0,45,0,0,0,17:18:19:20:21,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					//RL_E_CHAIN
+2559,0,0,5,0,0,0,17:18:19:20:21,3:4:5,1,none,SC_QD_SHOT_READY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_QD_SHOT
+2560,0,0,10,0,0,0,17:18:19:20:21,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					//RL_C_MARKER
+2561,0,0,12:14:16:18:20,0,0,0,17,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_FIREDANCE
+2562,0,0,45:50:55:60:65,0,0,0,21,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					//RL_H_MINE
+2563,0,0,20:24:28:32:36,0,0,0,99,3,1,none,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13201				//RL_P_ALTER
+2564,0,0,10,0,0,0,17,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								//RL_FALLEN_ANGEL
+2565,0,0,40:45:50:55:60,0,0,0,19,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_R_TRIP
+2566,0,0,60:70:80:90:100,0,0,0,21,5,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				//RL_D_TAIL
+2567,0,0,70,0,0,0,19,3,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//RL_FIRE_RAIN
+2568,0,0,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							//RL_HEAT_BARREL
+2569,0,0,80:84:88:92:96,0,0,0,18,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					//RL_AM_BLAST
+2570,0,0,80:84:88:92:96,0,0,0,20,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					//RL_SLUGSHOT
+2571,0,0,35:40:45:50:55,0,0,0,18,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				//RL_HAMMER_OF_GOD
 2572,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								//RL_R_TRIP_PLUSATK
 //2573,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							//RL_B_FLICKER_ATK
 //2574,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							//RL_GLITTERING_GREED_ATK

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

@@ -5627,11 +5627,11 @@
 4215,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 4215,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 4215,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-4215,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-4215,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-4215,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-4215,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-4215,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+4215,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+4215,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+4215,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+4215,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+4215,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 4215,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 4215,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 4215,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -5645,26 +5645,26 @@
 4215,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 4215,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 4215,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-4215,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+4215,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4215,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 4215,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4215,2552,1,500,5,0,0,0,0,0,0,0,0 //RL_RICHS_COIN#Rich's Coin#
 4215,2553,5,514,1,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL#Mass Spiral#
 4215,2554,5,2557,1,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER#Banishing Buster#
-4215,2555,5,0,0,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
-4215,2556,1,501,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
+4215,2555,5,2556,1,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
+4215,2556,1,500,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
 4215,2557,5,513,1,518,1,0,0,0,0,0,0 //RL_S_STORM#Shatter Storm#
-4215,2558,10,511,10,0,0,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
-4215,2559,1,2558,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
-4215,2560,1,506,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
-4215,2561,5,2564,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
-4215,2562,5,520,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
-4215,2563,5,0,0,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
-4215,2564,5,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
+4215,2558,10,500,1,511,10,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
+4215,2559,1,511,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
+4215,2560,1,500,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
+4215,2561,5,516,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
+4215,2562,5,521,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
+4215,2563,5,2552,1,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
+4215,2564,1,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
 4215,2565,5,2567,1,0,0,0,0,0,0,0,0 //RL_R_TRIP#Round Trip#
 4215,2566,5,2560,1,2562,3,0,0,0,0,0,0 //RL_D_TAIL#Dragon Tail#
 4215,2567,5,517,1,0,0,0,0,0,0,0,0 //RL_FIRE_RAIN#Fire Rain#
-4215,2568,5,2561,2,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
+4215,2568,5,2552,1,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
 4215,2569,5,2553,1,0,0,0,0,0,0,0,0 //RL_AM_BLAST#Anti-Material Blast#
 4215,2570,5,2554,3,0,0,0,0,0,0,0,0 //RL_SLUGSHOT#Slug Shot#
-4215,2571,5,2569,3,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
+4215,2571,5,2552,1,2569,3,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#

+ 1 - 0
db/re/item_combo_db.txt

@@ -636,6 +636,7 @@
 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; } }
+27147:27148,{ bonus bDelayrate,-3; }
 28315:28317,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
 28316:28318,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
 28326:28327,{ bonus bInt,8; bonus bStr,8; }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 211 - 206
db/re/item_db.txt


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
db/re/job_basehpsp_db.txt


+ 1 - 1
db/re/job_db1.txt

@@ -270,7 +270,7 @@
 // Oboro
 4212,	26000,75   ,500  ,540  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000 ,500
 // Rebellion
-4215,   28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520  ,620  ,570  ,970  ,1070 ,2000 ,2000 ,600
+4215,	28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480  ,610  ,540  ,940  ,1040 ,2000 ,2000 ,600
 // Summoner
 4218,	20000,70   ,500  ,500  ,490  ,570  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590  ,2000 ,2000 ,2000 ,2000 ,470  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590  ,590
 // Baby Summoner

+ 8 - 8
db/re/job_exp.txt

@@ -13,12 +13,12 @@
 //Base - Adv Jobs
 99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,99999999
 
-//Base - 3rd Jobs, Baby 3rds, Summoner
+//Base - 3rd Jobs, Baby 3rds, Oboro/Kagerou, Rebellion, & Summoner
 //Note: (First 98 values [Level 1 - 98] are only used by Summoner Class, because 3rd classes start at level 99.)
-175,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4218:4220,0,55,90,150,220,320,380,420,455,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1800,2100,2400,2700,3000,3300,3600,3900,4200,4500,5400,6300,7200,8100,9000,9900,10800,11700,12600,13500,16200,18900,21600,24300,27000,29700,32400,35100,37800,40500,43200,45900,48600,51300,54000,56700,59400,62100,64800,67500,75600,83700,91800,99900,108000,116100,124200,132300,140400,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
+175,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4211:4212:4215:4218:4220:4223:4224:4229,0,55,90,150,220,320,380,420,455,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1800,2100,2400,2700,3000,3300,3600,3900,4200,4500,5400,6300,7200,8100,9000,9900,10800,11700,12600,13500,16200,18900,21600,24300,27000,29700,32400,35100,37800,40500,43200,45900,48600,51300,54000,56700,59400,62100,64800,67500,75600,83700,91800,99900,108000,116100,124200,132300,140400,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
 
-//Base - Expanded Super Novice, Expanded Super Baby, Oboro/Kagerou, & Rebellion
-160,4190:4191:4211:4212:4215:4223:4224:4229,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
+//Base - Expanded Super Novice & Expanded Super Baby
+160,4190:4191,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
 
 //Job - Novice & Baby Novice
 10,0:4023,1,10,18,28,40,91,151,205,268,340,999999999
@@ -38,11 +38,11 @@
 //Job - Adv Second Classes
 70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,873100,911900,950600,989400,1028100,1143300,1199900,1233800,1279100,1324300,1486900,1515900,1603000,1719200,1806300,2040300,2244300,2415900,2746000,3326000,999999999
 
-//Job - 3rd Jobs & Baby 3rds
-60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,999999999
+//Job - 3rd Jobs & Baby 3rds, Oboro/Kagerou, & Rebellion
+60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4211:4212:4215:4223:4224:4229,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,999999999
 
-//Job - Expanded Super Novice, Expanded Super Baby, Oboro/Kagerou, & Rebellion
-50,4190:4191:4211:4212:4215:4223:4224:4229,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,999999999
+//Job - Expanded Super Novice & Expanded Super Baby
+50,4190:4191,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,999999999
 
 //Job - Ninja/Gunslinger
 70,24:25:4222:4228,1,200,300,400,600,700,1000,1200,1400,1700,1900,2400,2700,3200,3600,4200,4900,5500,6100,6900,7700,8400,9300,10100,11100,12100,13000,14600,16100,17500,18600,21500,23300,24700,27000,29000,30000,32400,35000,38100,41100,44000,46700,49600,52500,55600,58900,62700,65500,69200,72300,81200,84100,89300,95500,100900,107800,114900,120700,128600,150500,176900,196100,219600,234200,247900,266400,281300,296600,308000,999999999

+ 46 - 9
db/re/mob_db.txt

@@ -951,12 +951,12 @@
 1879,ECLIPSE_P,Eclipse Pet,Eclipse,6,1800,0,0,0,1,20,26,0,40,1,36,6,0,11,80,10,12,1,2,60,0x6203695,200,1456,456,336,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
 
 // Moscovia
-1880,WOOD_GOBLIN,Wood Goblin,Leshij,81,5499,1,1106,1245,1,193,208,144,12,73,19,56,15,56,25,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,0,0
-1881,LES,Les,Lesavka,82,6216,1,1205,1356,1,270,300,123,30,63,20,35,25,52,30,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,0,0
-1882,VAVAYAGA,Baba Yaga,Baba-Yaga,87,6498,1,1188,1337,2,282,353,63,60,69,45,30,60,51,35,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,0,0
-1883,UZHAS,Uzhas,Kikimora,85,7140,1,1294,1455,1,271,306,49,8,69,14,41,30,55,20,10,12,1,7,61,0x3885,200,576,672,384,0,0,0,0,0,0,0,520,900,1573,5,621,100,522,100,918,3500,579,1500,603,3,0,0,0,0,0,0
-1884,MAVKA,Mavka,Mavka,84,5421,1,1253,1530,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,0,0
-1885,GOPINICH,Gopinich,Gopinich,97,1120500,1,714240,580320,3,1988,3849,355,121,127,102,143,102,152,76,10,12,2,2,62,0x6283695,150,1536,864,432,357120,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,0,0
+1880,WOOD_GOBLIN,Wood Goblin,Leshij,81,5499,1,1106,1245,1,193,208,144,12,73,19,56,15,56,25,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,27157,1
+1881,LES,Les,Lesavka,82,6216,1,1205,1356,1,270,300,123,30,63,20,35,25,52,30,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,27158,1
+1882,VAVAYAGA,Baba Yaga,Baba-Yaga,87,6498,1,1188,1337,2,282,353,63,60,69,45,30,60,51,35,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,27160,1
+1883,UZHAS,Uzhas,Kikimora,85,7140,1,1294,1455,1,271,306,49,8,69,14,41,30,55,20,10,12,1,7,61,0x3885,200,576,672,384,0,0,0,0,0,0,0,520,900,1573,5,621,100,522,100,918,3500,579,1500,603,3,0,0,0,0,27159,1
+1884,MAVKA,Mavka,Mavka,84,5421,1,1253,1530,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,27161,1
+1885,GOPINICH,Gopinich,Gopinich,97,1120500,1,714240,580320,3,1988,3849,355,121,127,102,143,102,152,76,10,12,2,2,62,0x6283695,150,1536,864,432,357120,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,27162,1
 1886,G_MAVKA,Mavka,Mavka,84,5421,1,0,0,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
 // Additional Monsters
@@ -2279,7 +2279,7 @@
 //3122,CHARLESTON1
 //3123,CHARLESTON2
 //3124,CHARLESTON3
-3125,STEP,Step,Step,130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,234894485,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3125,STEP,Step,Step,130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,0x2000000,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3126,ROCK_STEP
 //3127,KICK_STEP
 //3128,KICK_AND_KICK
@@ -2323,8 +2323,8 @@
 //3166,M_E_DEVILING
 //3167,E_POPORING_CRO
 //3168,POURING_SEA_FES
-3169,J_REB_SHECIL1,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,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
-3170,J_REB_SHECIL2,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,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
+3169,J_REB_SHECIL1,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,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
+3170,J_REB_SHECIL2,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,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
 //3171,EVENT_MONEMUS01
 //3172,EVENT_MONEMUS02
 //3173,EVENT_FIREFOX
@@ -3100,3 +3100,40 @@
 //3945,JP_E_MONSTER_103
 //3946,JP_E_MONSTER_104
 //3947,JP_E_MONSTER_105
+
+//3955,E_SAVAGE
+//3956,E_ELDER_WILOW
+
+//3969,MD_RED_MUSHROOM
+//3970,MD_BLACK_MUSHROOM
+//3971,SKELION
+
+//3976,EIRA_BRZ
+//3977,AB_MOB_051
+//3978,AB_MOB_052
+//3979,AB_MOB_053
+//3980,AB_MOB_054
+//3981,AB_MOB_055
+//3982,AB_MOB_056
+//3983,AB_MOB_057
+//3984,AB_MOB_058
+//3985,AB_MOB_059
+//3986,AB_MOB_060
+//3987,AB_MOB_061
+//3988,AB_MOB_062
+//3989,AB_MOB_063
+//3990,AB_MOB_064
+//3991,AB_MOB_065
+//3992,AB_MOB_066
+//3993,AB_MOB_067
+//3994,AB_MOB_068
+//3995,AB_MOB_069
+//3996,AB_MOB_070
+//3997,AB_MOB_071
+//3998,AB_MOB_072
+
+// New Monster Range
+//20021,AB_MOB_073
+//20022,AB_MOB_074
+//20023,AB_MOB_075
+//20024,AB_MOB_076

+ 7 - 0
db/re/quest_db.txt

@@ -2694,6 +2694,13 @@
 12344,0,3170,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
 12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
 
+12340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12341,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12343,0,3169,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12344,0,3170,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+
 12363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"?????? ?? ??"
 
 13000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"RWC2011Card Gathering"

+ 29 - 20
db/re/skill_cast_db.txt

@@ -853,11 +853,11 @@
 //-- GS_INCREASING
 506,0,1000,0,60000,0,0,0
 //-- GS_MAGICALBULLET
-507,0,500,0,0,0,0,0
+507,0,500,0,30000,0,0,0
 //-- GS_CRACKER
 508,0,1000,0,0,5000,0,0
 //-- GS_TRACKING
-512,600:700:800:900:1000:1100:1200:1300:1400:1500,1500,0,0,0,0,600:700:800:900:1000:1100:1200:1300:1400:1500
+512,0,1500,0,0,0,0,600:700:800:900:1000:1100:1200:1300:1400:1500
 //-- GS_DISARM
 513,1600,1000,0,30000,0,0,400
 //-- GS_PIERCINGSHOT
@@ -869,11 +869,11 @@
 //-- GS_GATLINGFEVER
 517,800,1000,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0,0,200
 //-- GS_DUST
-518,1200,1000,0,0,0,0,300
+518,0,1000,0,0,0,0,-1
 //-- GS_FULLBUSTER
 519,800,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000,0,200
 //-- GS_SPREADATTACK
-520,800,1000,0,0,0,0,200
+520,0,1000,0,0,0,0,-1
 //-- GS_GROUNDDRIFT (Upkeep2 times are duration of: Stun(lv1), Blind(lv2), Poison(lv3) and Freeze(lv4))
 521,800,1000,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,5000:20000:20000:30000,0,200
 //==========================================
@@ -1654,43 +1654,43 @@
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000,-1
 //-- RL_MASS_SPIRAL
-2553,1000,1000,0,0,30000,10000,2000
+2553,2000,1000,0,0,30000,2000,1000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,0,0,0,0,10000,-1
+2554,3000:2500:2000:1500:1000,2000,0,0,0,10000,-1
 //-- RL_B_TRAP
-2555,0,0,0,10000:11000:12000:13000:14000,6000:7000:8000:9000:10000,0,-1
+2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000,-1
 //-- RL_FLICKER
 2556,0,0,0,0,0,10000,-1
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,0,0,0,0,2000,-1
+2557,3000:2500:2000:1500:1000,2000,0,0,0,2000,1000
 //-- RL_E_CHAIN
-2558,0,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,5000,-1
+2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0,-1
 //-- RL_QD_SHOT
-2559,0,1000,0,1500,0,5000,-1
+2559,0,0,0,1500,0,0,-1
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000,-1
 //-- RL_FIREDANCE
-2561,0,2000,0,0,0,5000,-1
+2561,0,500,0,0,0,5000,-1
 //-- RL_H_MINE
-2562,1500,0,0,30000,15000,5000:4500:4000:3500:3000,500
+2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000,-1
 //-- RL_P_ALTER
-2563,0,1000,0,30000:45000:60000:75000:90000,0,5000,-1
+2563,0,0,0,30000:45000:60000:75000:90000,0,0,-1
 //-- RL_FALLEN_ANGEL
-2564,500,1500,0,0,0,10000:8000:6000:4000:2000,500
+2564,0,0,0,2000,0,0,-1
 //-- RL_R_TRIP
-2565,0,1000,0,0,0,1000,-1
+2565,0,1000,0,0,0,3000:2500:2000:1500:1000,-1
 //-- RL_D_TAIL
-2566,500,2000,0,0,0,5000,500
+2566,1200:1400:1600:1800:2000,2000,0,0,0,5000,-1
 //-- RL_FIRE_RAIN
-2567,1800:1600:1400:1200:1000,2000,0,100,0,5000,200
+2567,0,1000,0,100,0,5000,-1
 //-- RL_HEAT_BARREL
-2568,0,1000,0,60000,10000,10000,-1
+2568,2000,1000,0,60000,0,100000:95000:90000:85000:80000,-1
 //-- RL_AM_BLAST
 2569,2000,1000,0,0,6000:7000:8000:9000:10000,5000,1000
 //-- RL_SLUGSHOT
-2570,5000:6000:7000:8000:9000,1000,0,0,2000,10000,1000
+2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000,1000
 //-- RL_HAMMER_OF_GOD
-2571,8000,2000,0,0,3000:3000:4000:4000:5000,30000,2000
+2571,0,2000,0,0,3000:3000:4000:4000:5000,30000,-1
 //-- RL_R_TRIP_PLUSATK
 //2572,0,0,0,0,0,0,-1
 //-- RL_B_FLICKER_ATK
@@ -1827,6 +1827,15 @@
 5055,0,1000,0,5000,10000,140000:120000:100000:80000:60000,0
 //==========================================
 
+//===== Wedding Skills 3 ===================
+//-- WE_CALLALLFAMILY
+5063,1500,0,0,0,0,0,1500
+//-- WE_ONEFOREVER
+5064,1500,0,0,0,0,0,1500
+//-- WE_CHEERUP
+5065,1500,0,0,60000,0,0,1500
+//==========================================
+
 //===== Homunculus Skills ==================
 //-- HLIF_HEAL
 8001,0,2000,0,0,0,0,-1

+ 4 - 0
db/re/skill_castnodex_db.txt

@@ -36,6 +36,10 @@
 512,3	//GS_TRACKING
 1014,1	//PR_REDEMPTIO
 
+5063,1	//WE_CALLALLFAMILY
+5064,1	//WE_ONEFOREVER
+5065,1	//WE_CHEERUP
+
 2012,7	//RK_CRUSHSTRIKE
 2013,7	//RK_REFRESH
 2014,7	//RK_GIANTGROWTH

+ 15 - 10
db/re/skill_db.txt

@@ -735,7 +735,7 @@
 504,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_MADNESSCANCEL,Madness Canceller
 505,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_ADJUSTMENT,AdJustment
 506,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_INCREASING,Increasing Accuracy
-507,-9,6,1,8,0x20,0,1,1,no,0,0,0,misc,0,0x0,		GS_MAGICALBULLET,Magical Bullet
+507,0,6,4,0,0x1,0,1,1,no,0,0,0,magic,0,0x0,		GS_MAGICALBULLET,Magical Bullet
 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
@@ -744,7 +744,7 @@
 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
 515,-9,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x100,	GS_RAPIDSHOWER,Rapid Shower
-516,0,8,4,-1,0x2,3,10,1,no,0,0,0,weapon,0,0x0,	GS_DESPERADO,Desperado
+516,5,8,4,-1,0x2,3,10,1,no,0,0,0,weapon,0,0x0,	GS_DESPERADO,Desperado
 517,0,6,4,-1,0x1,0,10,1,no,0,0,0,weapon,0,0x0,	GS_GATLINGFEVER,Gatling Fever
 518,2,6,1,-1,0,0,10,1,no,0,0,0,weapon,5,0x0,		GS_DUST,Dust
 519,-9,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x100,	GS_FULLBUSTER,Full Buster
@@ -1273,24 +1273,24 @@
 //2551,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0,	RL_GLITTERING_GREED,Flip The Coin Greed
 2552,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0,	RL_RICHS_COIN,Rich's Coin
 2553,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
-2554,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
+2554,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
 2555,3:4:4:5:5,6,2,0,0x1,1,5,1,no,0,0,1,misc,0,0x0,	RL_B_TRAP,Bind Trap
 2556,0,6,4,0,0x3,-1,1,1,no,0,0,0,none,0,0x0,	RL_FLICKER,Flicker
-2557,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
+2557,-9,6,1,-1,0x2,2:2:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
 2558,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	RL_E_CHAIN,Eternal Chain
 2559,-9,6,4,-1,0x0,10,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
 2560,-9,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
-2561,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
+2561,5,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
 2562,-9,6,1,-1,0x0,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
 2563,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_P_ALTER,Platinum Alter
 2564,-9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
-2565,0,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
-2566,0,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
-2567,-9,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
+2565,5,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
+2566,5,6,4,0,0x30,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
+2567,2,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
 2568,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_HEAT_BARREL,Heat Barrel
 2569,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
-2570,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
-2571,-9,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
+2570,-9,6,1,0,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
+2571,-9,6,1,0,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
 2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0,	RL_R_TRIP_PLUSATK,Round Trip Plus Attack
 //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0,	RL_B_FLICKER_ATK,Bind Flicker Attack
 //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0,	RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack
@@ -1400,6 +1400,11 @@
 5055,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0,		SU_CHATTERING,Chattering
 5056,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,		SU_SPIRITOFSEA,Spirit of Sea
 
+// Wedding Skills 3
+5063,1,6,4,0,0x1,0,1,1,yes,0,0x4,0,none,0,0,	WE_CALLALLFAMILY,Call All Family
+5064,3,6,16,0,0x1,0,1,1,yes,0,0x4,0,none,0,0,	WE_ONEFOREVER,One Forever
+5065,1,6,4,0,0x3,3,1,1,yes,0,0x4,0,none,0,0,	WE_CHEERUP,Cheer Up
+
 //****
 // Homunculus S
 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0,	HLIF_HEAL,Healing Touch

+ 4 - 0
db/re/skill_nocast_db.txt

@@ -56,6 +56,7 @@
 691,4	//CASH_ASSUMPTIO
 2284,4	//SC_FATALMENACE
 2300,4	//SC_DIMENSIONDOOR
+5063,4	//WE_CALLALLFAMILY
 
 //----------------------------------------------------------------------------
 // Battlegrounds
@@ -93,6 +94,7 @@
 691,8	//CASH_ASSUMPITO
 2284,8	//SC_FATALMENACE
 2300,8	//SC_DIMENSIONDOOR
+5063,8	//WE_CALLALLFAMILY
 
 //----------------------------------------------------------------------------
 // Mixed
@@ -133,6 +135,7 @@
 // 2296,16	// SC_UNLUCKY
 // 2494,16	// GN_CHANGEMATERIAL
 // 2462,16	// SO_EL_ANALYSIS
+5063,16	//WE_CALLALLFAMILY
 
 //----------------------------------------------------------------------------
 // Zone 1 - Aldebaran Turbo Track
@@ -218,3 +221,4 @@
 336,4096 // WE_CALLPARTNER
 409,4096 // WE_CALLPARENT
 410,4096 // WE_CALLBABY
+5063,4096	//WE_CALLALLFAMILY

+ 31 - 26
db/re/skill_require_db.txt

@@ -489,7 +489,7 @@
 501,0,0,10,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								//GS_FLING
 502,0,0,20,0,0,0,99,99,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_TRIPLEACTION
 503,0,0,30,0,0,0,99,99,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_BULLSEYE
-504,0,0,30,0,0,0,99,0,0,none,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_MADNESSCANCEL
+504,0,0,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								//GS_MADNESSCANCEL
 505,0,0,15,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								//GS_ADJUSTMENT
 506,0,0,30,0,0,0,99,0,0,none,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_INCREASING
 507,0,0,7,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								//GS_MAGICALBULLET
@@ -497,13 +497,13 @@
 512,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,17:18,3,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//GS_TRACKING
 513,0,0,15:20:25:30:35,0,0,0,17:18,3,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				//GS_DISARM
 514,0,0,11:12:13:14:15,0,0,0,17:18,3,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				//GS_PIERCINGSHOT
-515,0,0,22:24:26:28:30:32:34:36:38:40,0,0,0,17,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_RAPIDSHOWER
+515,0,0,22:24:26:28:30:32:34:36:38:40,0,0,0,17,3,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	//GS_RAPIDSHOWER
 516,0,0,32:34:36:38:40:42:44:46:48:50,0,0,0,17,3,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_DESPERADO
 517,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,19,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	//GS_GATLINGFEVER
 518,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,20,3,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		//GS_DUST
-519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,20,3,2:2:4:4:6:6:8:8:10:10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FULLBUSTER
-520,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,20:21,3:5,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//GS_SPREADATTACK
-521,0,0,4:8:12:16:20:24:28:32:36:40,0,0,0,21,5,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		//GS_GROUNDDRIFT
+519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,20,3,2,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FULLBUSTER
+520,0,0,13:16:19:22:25:28:31:34:37:40,0,0,0,20:21,3:5,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//GS_SPREADATTACK
+521,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,21,5,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		//GS_GROUNDDRIFT
 
 //****
 // NJ Ninja
@@ -684,20 +684,20 @@
 2259,0,0,20,0,0,0,99,0,0,mado,0,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_FLAMELAUNCHER
 2260,0,0,20,0,0,0,99,0,0,mado,0,0,6146,1,6147,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_COLDSLOWER
 2261,0,0,30:45:60,0,0,0,99,8,1,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_ARMSCANNON
-2262,0,0,20:40:60,0,0,0,99,0,0,mado,0,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_ACCELERATION
+2262,0,0,20:40:60,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2800					//NC_ACCELERATION
 2263,0,0,25,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2801						//NC_HOVERING
 2264,0,0,5,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//NC_F_SIDESLIDE
 2265,0,0,5,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//NC_B_SIDESLIDE
 
-2267,0,0,200,0,0,0,99,0,0,mado,0,0,2802,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_SELFDESTRUCTION
-2268,0,0,100,0,0,0,99,0,0,mado,0,0,6360,3,6363,3,6362,3,6361,3,2803,0,0,0,0,0,0,0,0,0,6146,2,0			//NC_SHAPESHIFT
-2269,0,0,20,0,0,0,99,0,0,mado,0,0,2804,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_EMERGENCYCOOL
+2267,0,0,200,0,0,0,99,0,0,mado,0,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2802						//NC_SELFDESTRUCTION
+2268,0,0,100,0,0,0,99,0,0,mado,0,0,6360,3,6363,3,6362,3,6361,3,6146,2,0,0,0,0,0,0,0,0,0,0,2803			//NC_SHAPESHIFT
+2269,0,0,20,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2804						//NC_EMERGENCYCOOL
 2270,0,0,45,0,0,0,99,0,0,mado,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//NC_INFRAREDSCAN
 2271,0,0,30,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//NC_ANALYZE
-2272,0,0,60:70:80,0,0,0,99,0,0,mado,0,0,2805,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_MAGNETICFIELD
-2273,0,0,80:90:100,0,0,0,99,0,0,mado,0,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0						//NC_NEUTRALBARRIER
-2274,0,0,80:100:120,0,0,0,99,0,0,mado,0,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//NC_STEALTHFIELD
-2275,0,0,25:30:35:40:45,0,0,0,99,0,0,mado,0,0,12392,1,12392,1,12393,1,12393,1,12394,1,0,0,0,0,0,0,0,0,2807,0,0			//NC_REPAIR
+2272,0,0,60:70:80,0,0,0,99,0,0,mado,0,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2805						//NC_MAGNETICFIELD
+2273,0,0,80:90:100,0,0,0,99,0,0,mado,0,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2806						//NC_NEUTRALBARRIER
+2274,0,0,80:100:120,0,0,0,99,0,0,mado,0,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2808				//NC_STEALTHFIELD
+2275,0,0,25:30:35:40:45,0,0,0,99,0,0,mado,0,0,12392,1,12392,1,12393,1,12393,1,12394,1,0,0,0,0,0,0,0,0,0,0,2807			//NC_REPAIR
 
 2278,0,0,20:22:24:26:28,0,0,0,6:7,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				//NC_AXEBOOMERANG
 2279,0,0,20:22:24:26:28,0,0,0,6:7,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					//NC_POWERSWING
@@ -892,25 +892,25 @@
 // Rebellion
 //2551,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							//RL_GLITTERING_GREED
 2552,0,0,10,0,0,100,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							//RL_RICHS_COIN
-2553,0,0,80:84:88:92:96,0,0,0,18,3,1,none,0,1,7663,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_MASS_SPIRAL
-2554,0,0,55:60:65:70:75,0,0,0,20,3,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_BANISHING_BUSTER
+2553,0,0,40:44:48:52:56,0,0,0,18,3,1,none,0,0,7663,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_MASS_SPIRAL
+2554,0,0,55:60:65:70:75,0,0,0,20,3,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					//RL_BANISHING_BUSTER
 2555,0,0,30:32:34:36:38,0,0,0,17:18:19:20:21,0,0,none,0,1,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_B_TRAP
-2556,0,0,2,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								//RL_FLICKER
-2557,0,0,55:60:65:70:75,0,0,0,20,3,1,none,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_S_STORM
-2558,0,0,45,0,0,0,17:18:19:20:21,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				//RL_E_CHAIN
+2556,0,0,2,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								//RL_FLICKER
+2557,0,0,50:55:60:65:70,0,0,0,20,3,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					//RL_S_STORM
+2558,0,0,45,0,0,0,17:18:19:20:21,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					//RL_E_CHAIN
 2559,0,0,5,0,0,0,17:18:19:20:21,3:4:5,1,none,SC_QD_SHOT_READY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_QD_SHOT
-2560,0,0,10,0,0,0,17:18:19:20:21,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					//RL_C_MARKER
-2561,0,0,10:15:20:25:30,0,0,0,17,3,5,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_FIREDANCE
-2562,0,0,45:50:55:60:65,0,0,0,21,0,0,none,0,1,7664,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_H_MINE
-2563,0,0,20:24:28:32:36,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				//RL_P_ALTER
+2560,0,0,10,0,0,0,17:18:19:20:21,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					//RL_C_MARKER
+2561,0,0,12:14:16:18:20,0,0,0,17,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_FIREDANCE
+2562,0,0,45:50:55:60:65,0,0,0,21,0,0,none,0,0,7664,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_H_MINE
+2563,0,0,20:24:28:32:36,0,0,0,99,3,1,none,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13201:13220:13221				//RL_P_ALTER
 2564,0,0,10,0,0,0,17,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								//RL_FALLEN_ANGEL
-2565,0,0,40:45:50:55:60,0,0,0,19,3,5,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_R_TRIP
+2565,0,0,40:45:50:55:60,0,0,0,19,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_R_TRIP
 2566,0,0,60:70:80:90:100,0,0,0,21,5,1,none,0,0,7665,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_D_TAIL
 2567,0,0,70,0,0,0,19,3,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//RL_FIRE_RAIN
 2568,0,0,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							//RL_HEAT_BARREL
-2569,0,0,80:84:88:92:96,0,0,0,17:18:19:20:21,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		//RL_AM_BLAST
-2570,0,0,55:60:65:70:75,0,0,0,20,3,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_SLUGSHOT
-2571,0,0,70:80:90:100:110,0,0,0,18,3,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				//RL_HAMMER_OF_GOD
+2569,0,0,80:84:88:92:96,0,0,0,18,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					//RL_AM_BLAST
+2570,0,0,80:84:88:92:96,0,0,0,20,0,0,none,0,0,13214,1,13213,1,13212,1,13211,1,13210,1,0,0,0,0,0,0,0,0,0,0,0	//RL_SLUGSHOT
+2571,0,0,35:40:45:50:55,0,0,0,18,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				//RL_HAMMER_OF_GOD
 2572,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								//RL_R_TRIP_PLUSATK
 //2573,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							//RL_B_FLICKER_ATK
 //2574,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							//RL_GLITTERING_GREED_ATK
@@ -1006,6 +1006,11 @@
 5053,0,0,100:90:80:70:60,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					//SU_MEOWMEOW
 5055,0,0,50:45:40:35:30,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						//SU_CHATTERING
 
+// Wedding Skills 3
+5063,0,0,100,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							//WE_CALLALLFAMILY
+5064,0,0,100,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							//WE_ONEFOREVER
+5065,0,0,50,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								//WE_CHEERUP
+
 8001,0,0,13:16:19:22:25,0,0,0,99,0,0,none,0,0,545,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//HLIF_HEAL
 8002,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					//HLIF_AVOID
 8004,0,0,100,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							//HLIF_CHANGE

+ 97 - 44
db/re/skill_tree.txt

@@ -597,6 +597,8 @@
 22,335,1,0,0,0,0,0,0,0,0,0,0 //WE_FEMALE#I Look up to You#
 22,336,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARTNER#I miss You#
 22,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+22,5063,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLALLFAMILY#Call All Family#
+22,5064,1,0,0,0,0,0,0,0,0,0,0 //WE_ONEFOREVER#One Forever#
 //SuperNovice
 23,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 23,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -657,11 +659,11 @@
 24,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 24,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 24,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-24,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-24,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-24,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-24,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-24,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+24,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+24,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+24,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+24,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+24,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 24,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 24,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 24,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -675,7 +677,7 @@
 24,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 24,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 24,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-24,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+24,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 24,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 24,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 //Ninja
@@ -1387,6 +1389,7 @@
 4023,143,1,0,0,0,0,0,0,0,0,0,0 //NV_TRICKDEAD#Act Dead#
 4023,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4023,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4023,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Swordman
 4024,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4024,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1402,6 +1405,7 @@
 4024,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
 4024,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4024,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4024,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Magician
 4025,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4025,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1421,6 +1425,7 @@
 4025,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
 4025,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4025,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4025,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Archer
 4026,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4026,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1433,6 +1438,7 @@
 4026,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
 4026,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4026,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4026,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Acolyte
 4027,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4027,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1453,6 +1459,7 @@
 4027,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
 4027,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4027,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4027,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Merchant
 4028,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4028,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1470,6 +1477,7 @@
 4028,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4028,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4028,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4028,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Thief
 4029,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4029,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1485,6 +1493,7 @@
 4029,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
 4029,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
 4029,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4029,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Knight
 4030,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4030,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1512,6 +1521,7 @@
 4030,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
 4030,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
 4030,495,1,60,10,0,0,0,0,0,0,0,0	//KN_ONEHAND#Onehand Quicken#
+4030,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Priest
 4031,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4031,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1551,6 +1561,7 @@
 4031,78,1,76,5,0,0,0,0,0,0,0,0 //PR_LEXAETERNA#Lex Aeterna#
 4031,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
 4031,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
+4031,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Wizard
 4032,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4032,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1584,6 +1595,7 @@
 4032,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
 4032,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
 4032,1006,1,0,0,0,0,0,0,0,0,0,0 //WZ_SIGHTBLASTER#Sight Blaster#
+4032,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Blacksmith
 4033,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4033,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1625,6 +1637,7 @@
 4033,459,1,111,5,0,0,0,0,0,0,0,0	//BS_ADRENALINE2#Full Adrenaline Rush#
 4033,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4033,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4033,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Hunter
 4034,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4034,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1656,6 +1669,7 @@
 4034,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
 4034,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
 4034,499,1,46,10,0,0,0,0,0,0,0,0	//HT_POWER#Beast Strafing#
+4034,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Assassin
 4035,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4035,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1683,6 +1697,7 @@
 4035,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
 4035,1003,1,0,0,0,0,0,0,0,0,0,0 //AS_SONICACCEL#Sonic Acceleration#
 4035,1004,1,0,0,0,0,0,0,0,0,0,0 //AS_VENOMKNIFE#Throw Venom Knife#
+4035,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Knight(Peco)
 4036,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4036,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1710,6 +1725,7 @@
 4036,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
 4036,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
 4036,495,1,60,10,0,0,0,0,0,0,0,0	//KN_ONEHAND#Onehand Quicken#
+4036,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Crusader
 4037,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4037,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1744,6 +1760,7 @@
 4037,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
 4037,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
 4037,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
+4037,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Monk
 4038,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4038,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1781,6 +1798,7 @@
 4038,273,5,272,3,0,0,0,0,0,0,0,0 //MO_COMBOFINISH#Raging Thrust#
 4038,1015,1,0,0,0,0,0,0,0,0,0,0 //MO_KITRANSLATION#Ki Translation#
 4038,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
+4038,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Sage
 4039,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4039,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1825,6 +1843,7 @@
 4039,1017,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTGROUND#Elemental Change Earth#
 4039,1018,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTFIRE#Elemental Change Fire#
 4039,1019,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWIND#Elemental Change Wind#
+4039,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Rogue
 4040,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4040,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1861,6 +1880,7 @@
 4040,224,5,223,1,0,0,0,0,0,0,0,0 //RG_COMPULSION#Haggle#
 4040,225,10,219,5,0,0,0,0,0,0,0,0 //RG_PLAGIARISM#Intimidate#
 4040,1005,1,0,0,0,0,0,0,0,0,0,0 //RG_CLOSECONFINE#Close Confine#
+4040,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Alchemist
 4041,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4041,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1898,6 +1918,7 @@
 4041,498,1,228,10,0,0,0,0,0,0,0,0	//AM_TWILIGHT3#Twilight Alchemy 3#
 4041,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4041,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4041,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Bard
 4042,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4042,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1929,6 +1950,7 @@
 4042,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
 4042,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4042,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
+4042,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Dancer
 4043,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4043,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1960,6 +1982,7 @@
 4043,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
 4043,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4043,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
+4043,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Crusader(Peco)
 4044,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4044,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -1994,6 +2017,7 @@
 4044,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
 4044,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
 4044,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
+4044,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Super Baby
 4045,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4045,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -2050,6 +2074,7 @@
 4045,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4045,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4045,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4045,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Taekwon
 4046,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4046,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4417,6 +4442,7 @@
 4096,2020,5,57,2,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
 4096,5004,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH_WATER#Dragon Breath(Water)#
 4096,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4096,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Warlock
 4097,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4097,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4475,6 +4501,7 @@
 4097,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freeze Spell#
 4097,5012,5,2202,5,0,0,0,0,0,0,0,0 //WL_TELEKINESIS_INTENSE#Intense Telekinesis#
 4097,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4097,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Ranger
 4098,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4098,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4530,6 +4557,7 @@
 4098,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap#
 4098,5002,5,2234,5,0,0,0,0,0,0,0,0 //RA_UNLIMIT#Unlimit#
 4098,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4098,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Arch Bishop
 4099,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4099,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4590,6 +4618,7 @@
 4099,2515,5,2044,1,2053,1,0,0,0,0,0,0 //AB_SECRAMENT#Secrament#
 4099,5011,5,2051,2,0,0,0,0,0,0,0,0 //AB_OFFERTORIUM#Offertorium#
 4099,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4099,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Mechanic
 4100,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4100,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4662,6 +4691,7 @@
 4100,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 4100,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4100,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4100,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Guillotine Cross
 4101,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4101,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4708,6 +4738,7 @@
 4101,2037,5,2036,1,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher#
 4101,5001,5,2023,5,0,0,0,0,0,0,0,0 //GC_DARKCROW#Dark Claw#
 4101,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4101,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Royal Guard
 4102,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4102,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4763,6 +4794,7 @@
 4102,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
 4102,5013,5,2311,5,0,0,0,0,0,0,0,0 //LG_KINGS_GRACE#King's Grace#
 4102,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4102,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Sorcerer
 4103,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4103,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4835,6 +4867,7 @@
 4103,2468,3,2460,3,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia#
 4103,5008,5,2456,3,0,0,0,0,0,0,0,0 //SO_ELEMENTAL_SHIELD#Elemental Shield#
 4103,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4103,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Minstrel
 4104,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4104,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4892,6 +4925,7 @@
 4104,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Unlimited Humming Voice#
 4104,5007,5,2412,2,0,0,0,0,0,0,0,0 //WM_FRIGG_SONG#
 4104,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4104,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Wanderer
 4105,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4105,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -4949,6 +4983,7 @@
 4105,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Unlimited Humming Voice#
 4105,5007,5,2412,2,0,0,0,0,0,0,0,0 //WM_FRIGG_SONG#
 4105,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4105,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Sura
 4106,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4106,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5010,6 +5045,7 @@
 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,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
 4107,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4107,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5068,6 +5104,7 @@
 4107,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 4107,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4107,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4107,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Shadow Chaser
 4108,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4108,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5127,6 +5164,7 @@
 4108,2304,3,2300,3,0,0,0,0,0,0,0,0 //SC_FEINTBOMB#Feint Bomb#
 4108,5010,5,2288,2,0,0,0,0,0,0,0,0 //SC_ESCAPE#Emergency Escape#
 4108,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4108,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Rune Knight (Dragon)
 4109,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4109,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5167,6 +5205,7 @@
 4109,2020,5,57,2,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
 4109,5004,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH_WATER#Dragon Breath(Water)#
 4109,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4109,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Royal Guard (Gryphon)
 4110,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4110,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5222,6 +5261,7 @@
 4110,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
 4110,5013,5,2311,5,0,0,0,0,0,0,0,0 //LG_KINGS_GRACE#King's Grace#
 4110,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4110,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Ranger (Warg)
 4111,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4111,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5277,6 +5317,7 @@
 4111,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap#
 4111,5002,5,2234,5,0,0,0,0,0,0,0,0 //RA_UNLIMIT#Unlimit#
 4111,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
+4111,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Mechanic (Mado)
 4112,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4112,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5349,6 +5390,7 @@
 4112,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle#
 4112,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4112,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4112,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Super Novice (Expanded)
 4190,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4190,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5518,6 +5560,7 @@
 4191,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher#
 4191,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
 4191,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate#
+4191,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Kagerou
 4211,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4211,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5627,11 +5670,11 @@
 4215,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 4215,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 4215,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-4215,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-4215,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-4215,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-4215,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-4215,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+4215,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+4215,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+4215,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+4215,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+4215,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 4215,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 4215,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 4215,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -5645,29 +5688,29 @@
 4215,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 4215,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 4215,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-4215,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+4215,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4215,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 4215,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4215,2552,1,500,5,0,0,0,0,0,0,0,0 //RL_RICHS_COIN#Rich's Coin#
 4215,2553,5,514,1,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL#Mass Spiral#
 4215,2554,5,2557,1,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER#Banishing Buster#
-4215,2555,5,0,0,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
-4215,2556,1,501,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
+4215,2555,5,2556,1,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
+4215,2556,1,500,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
 4215,2557,5,513,1,518,1,0,0,0,0,0,0 //RL_S_STORM#Shatter Storm#
-4215,2558,10,511,10,0,0,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
-4215,2559,1,2558,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
-4215,2560,1,506,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
-4215,2561,5,2564,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
-4215,2562,5,520,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
-4215,2563,5,0,0,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
-4215,2564,5,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
+4215,2558,10,500,1,511,10,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
+4215,2559,1,511,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
+4215,2560,1,500,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
+4215,2561,5,516,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
+4215,2562,5,521,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
+4215,2563,5,2552,1,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
+4215,2564,1,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
 4215,2565,5,2567,1,0,0,0,0,0,0,0,0 //RL_R_TRIP#Round Trip#
 4215,2566,5,2560,1,2562,3,0,0,0,0,0,0 //RL_D_TAIL#Dragon Tail#
 4215,2567,5,517,1,0,0,0,0,0,0,0,0 //RL_FIRE_RAIN#Fire Rain#
-4215,2568,5,2561,2,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
+4215,2568,5,2552,1,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
 4215,2569,5,2553,1,0,0,0,0,0,0,0,0 //RL_AM_BLAST#Anti-Material Blast#
 4215,2570,5,2554,3,0,0,0,0,0,0,0,0 //RL_SLUGSHOT#Slug Shot#
-4215,2571,5,2569,3,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
+4215,2571,5,2552,1,2569,3,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
 //Summoner
 4218,5018,1,0,0,0,0,0,0,0,0,0,0 //SU_BASIC_SKILL##
 4218,5019,1,5018,1,0,0,0,0,0,0,0,0 //SU_BITE##
@@ -5704,8 +5747,7 @@
 4218,5054,1,100,0,5048,5,0,0,0,0,0,0,0,0 //SU_SPIRITOFLAND##
 4218,5055,5,100,0,5025,1,0,0,0,0,0,0,0,0 //SU_CHATTERING##
 4218,5056,1,100,0,5051,5,0,0,0,0,0,0,0,0 //SU_SPIRITOFSEA##
-4218,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4218,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 //Baby Summoner
 4220,5018,1,0,0,0,0,0,0,0,0,0,0 //SU_BASIC_SKILL##
 4220,5019,1,5018,1,0,0,0,0,0,0,0,0 //SU_BITE##
@@ -5729,8 +5771,9 @@
 4220,5039,5,5038,3,0,0,0,0,0,0,0,0 //SU_TUNAPARTY##
 4220,5040,5,5041,3,0,0,0,0,0,0,0,0 //SU_BUNCHOFSHRIMP##
 4220,5041,5,5024,1,0,0,0,0,0,0,0,0 //SU_FRESHSHRIMP##
-4220,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4220,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4220,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4220,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Ninja
 4222,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4222,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5757,8 +5800,9 @@
 4222,542,5,533,10,541,5,0,0,0,0,0,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
 4222,543,5,533,5,0,0,0,0,0,0,0,0 //NJ_NEN#NJ_NEN#
 4222,544,10,522,7,530,5,543,1,0,0,0,0 //NJ_ISSEN#NJ_ISSEN#
-4222,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4222,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4222,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4222,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Kagerou
 4223,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4223,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5785,7 +5829,8 @@
 4223,542,5,533,10,541,5,0,0,0,0,0,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
 4223,543,5,533,5,0,0,0,0,0,0,0,0 //NJ_NEN#NJ_NEN#
 4223,544,10,522,7,530,5,543,1,0,0,0,0 //NJ_ISSEN#NJ_ISSEN#
-4223,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4223,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4223,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4223,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4223,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4223,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
@@ -5811,7 +5856,7 @@
 4223,3023,5,3012,1,0,0,0,0,0,0,0,0 //KG_KAGEHUMI##
 4223,3024,5,3023,2,0,0,0,0,0,0,0,0 //KG_KYOMU##
 4223,3025,5,3024,3,0,0,0,0,0,0,0,0 //KG_KAGEMUSYA##
-
+4223,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Oboro
 4224,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4224,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5838,7 +5883,8 @@
 4224,542,5,533,10,541,5,0,0,0,0,0,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
 4224,543,5,533,5,0,0,0,0,0,0,0,0 //NJ_NEN#NJ_NEN#
 4224,544,10,522,7,530,5,543,1,0,0,0,0 //NJ_ISSEN#NJ_ISSEN#
-4224,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4224,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4224,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4224,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4224,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4224,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
@@ -5864,7 +5910,7 @@
 4224,3026,5,3021,1,0,0,0,0,0,0,0,0 //OB_ZANGETSU##
 4224,3027,5,3029,3,0,0,0,0,0,0,0,0 //OB_OBOROGENSOU##
 4224,3029,5,3026,2,0,0,0,0,0,0,0,0 //OB_AKAITSUKI##
-
+4224,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Taekwon
 4225,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4225,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5885,8 +5931,9 @@
 4225,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
 4225,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
 4225,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
-4225,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4225,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4225,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4225,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Star Gladiator
 4226,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4226,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5907,6 +5954,8 @@
 4226,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
 4226,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
 4226,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
+4226,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4226,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4226,427,3,0,0,0,0,0,0,0,0,0,0	//SG_FEEL#Feeling the Sun, Moon and Stars#
 4226,428,3,427,1,0,0,0,0,0,0,0,0	//SG_SUN_WARM#Warmth of the Sun#
 4226,429,3,427,2,0,0,0,0,0,0,0,0	//SG_MOON_WARM#Warmth of the Moon#
@@ -5925,8 +5974,7 @@
 4226,442,3,0,0,0,0,0,0,0,0,0,0	//SG_FRIEND#Friend of the Sun, Moon and Stars#
 4226,443,10,0,0,0,0,0,0,0,0,0,0	//SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
 4226,444,1,443,9,0,0,0,0,0,0,0,0	//SG_FUSION#Union of the Sun, Moon and Stars#
-4226,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4226,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Soul Linker
 4227,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4227,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -5947,6 +5995,8 @@
 4227,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
 4227,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
 4227,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
+4227,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4227,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4227,445,5,0,0,0,0,0,0,0,0,0,0	//SL_ALCHEMIST#Spirit of the Alchemist#
 4227,447,5,0,0,0,0,0,0,0,0,0,0	//SL_MONK#Spirit of the Monk#
 4227,448,5,0,0,0,0,0,0,0,0,0,0	//SL_STAR#Spirit of the Star Knight#
@@ -5974,8 +6024,7 @@
 4227,471,3,452,1,0,0,0,0,0,0,0,0	//SL_SKE#Esk#
 4227,472,3,447,1,0,0,0,0,0,0,0,0	//SL_SKA#Eska#
 4227,494,5,451,1,0,0,0,0,0,0,0,0	//SL_HIGH#Spirit of Rebirth#
-4227,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4227,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Gunslinger
 4228,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4228,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -6001,8 +6050,9 @@
 4228,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
 4228,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4228,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
-4228,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-
+4228,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4228,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
+4228,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Rebellion
 4229,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4229,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -6028,7 +6078,8 @@
 4229,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
 4229,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4229,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
-4229,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4229,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4229,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4229,2552,1,500,5,0,0,0,0,0,0,0,0 //RL_RICHS_COIN#Rich's Coin#
 4229,2553,5,514,1,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL#Mass Spiral#
 4229,2554,5,2557,1,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER#Banishing Buster#
@@ -6049,7 +6100,7 @@
 4229,2569,5,2553,1,0,0,0,0,0,0,0,0 //RL_AM_BLAST#Anti-Material Blast#
 4229,2570,5,2554,3,0,0,0,0,0,0,0,0 //RL_SLUGSHOT#Slug Shot#
 4229,2571,5,2569,3,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
-
+4229,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#
 //Baby Star Gladiator (Union)
 4238,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
 4238,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
@@ -6070,6 +6121,8 @@
 4238,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
 4238,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
 4238,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
+4238,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby#
+4238,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
 4238,427,3,0,0,0,0,0,0,0,0,0,0	//SG_FEEL#Feeling the Sun, Moon and Stars#
 4238,428,3,427,1,0,0,0,0,0,0,0,0	//SG_SUN_WARM#Warmth of the Sun#
 4238,429,3,427,2,0,0,0,0,0,0,0,0	//SG_MOON_WARM#Warmth of the Moon#
@@ -6088,4 +6141,4 @@
 4238,442,3,0,0,0,0,0,0,0,0,0,0	//SG_FRIEND#Friend of the Sun, Moon and Stars#
 4238,443,10,0,0,0,0,0,0,0,0,0,0	//SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
 4238,444,1,443,9,0,0,0,0,0,0,0,0	//SG_FUSION#Union of the Sun, Moon and Stars#
-4238,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4238,5065,1,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP#Cheer Up#

+ 1 - 0
db/skill_copyable_db.txt

@@ -181,6 +181,7 @@ GC_DARKCROW,2      // Dark Claw
 // Arch Bishop
 AB_JUDEX,2        // Judex
 AB_ADORAMUS,2     // Adoramus
+AB_RENOVATIO,2    // Renovatio
 AB_HIGHNESSHEAL,2 // Highness Heal
 AB_DUPLELIGHT,2   // Duple Light
 AB_DUPLELIGHT_MELEE,2	// Dummy skill for Duple Light

+ 15 - 5
doc/atcommands.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20160313
+//= 20171011
 //===== Description: =========================================
 //= List of available atcommands and their functions.
 //============================================================
@@ -226,14 +226,24 @@ New warp NPC 'my_warp_sample' created.
 @effect <effect ID>
 
 Creates a visual effect on or around the character.
-A list of IDs can be found in '/db/const.txt'.
-Descriptions of the effects can be found in '/doc/effect_list.txt'.
+A list of IDs and descriptions of the effects can be found in '/doc/effect_list.txt'.
 
 ---------------------------------------
 
-@misceffect
+@misceffect <effect ID>
 
-Does some visual effect on the character (more info needed).
+Does some visual effect on the character.
+Possible effect IDs:
+	0 = base level up
+	1 = job level up
+	2 = refine failure
+	3 = refine success
+	4 = game over
+	5 = pharmacy success
+	6 = pharmacy failure
+	7 = base level up (super novice)
+	8 = job level up (super novice)
+	9 = base level up (taekwon)
 
 ---------------------------------------
 

+ 2 - 2
doc/effect_list.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20120822
+//= 20171011
 //===== Description: =========================================
 //= A list of client-side effects sorted by ID.
 //============================================================
@@ -11,7 +11,7 @@
 The following is a compiled list of visual and sound effects which the client
 can produce when receiving a packet with id 0x1f3 (01f3 <ID>.l <type>.l).
 Each list entry contains a number and a short description of the effect.
-You can produce these effects ingame by doing "@effect <number> 22" (22=self).
+You can produce these effects ingame by doing "@effect <number>".
 It's also possible to attach effects to item/npc scripts by using 'misceffect'.
 
 Number	Description

+ 51 - 13
doc/script_commands.txt

@@ -3,7 +3,7 @@
 //===== By:==================================================
 //= rAthena Dev Team
 //===== Last Updated:========================================
-//= 20161206
+//= 20171011
 //===== Description:=========================================
 //= A reference manual for the rAthena scripting language.
 //= Commands are sorted depending on their functionality.
@@ -2760,6 +2760,9 @@ Valid information types are:
 REFINE_ZENY_COST       - Zeny
 REFINE_MATERIAL_ID     - Material Item ID
 
+This function will return -1 on failure. The function fails if the cost type
+is invalid or if there is no item in the equipment slot. 
+
 ---------------------------------------
 
 *getareadropitem("<map name>",<x1>,<y1>,<x2>,<y2>,<item>)
@@ -3868,10 +3871,13 @@ by default green
 
 ---------------------------------------
 
-*showscript "<message>"{,<GID>};
+*showscript "<message>"{,<GID>, <flag>};
 
 Makes attached player or GID says a message like shouting a skill name, the message
 will be seen to everyone around but not in chat window.
+flag: Specify target
+   AREA - Message is sent to players in the vicinity of the source (default).
+   SELF - Message is sent only to player attached.
 
 ---------------------------------------
 
@@ -6545,6 +6551,8 @@ The options are:
 	1 = The buy window
 	2 = The sell window
 
+Note: The <option> parameter only works on the 'shop' type NPC.
+
 A shop called with this command will trigger the labels "OnBuyItem" and "OnSellItem"
 (as long as an npcshop* command is executed from that NPC, see note below). These
 labels, if used, will replace how the shop handles the buying and selling of items,
@@ -6555,15 +6563,30 @@ The label "OnBuyItem" sets the following arrays:
 	@bought_quantity - amount bought
 
 The label "OnSellItem" sets the following arrays:
-	@sold_nameid     - item ID sold
-	@sold_quantity   - amount sold
-	@sold_refine     - refine count
-	@sold_attribute  - if the item is broken (1) or not (0)
-	@sold_identify   - if the item is identified (1) or not (0)
-	@sold_card1      - card slot 1
-	@sold_card2      - card slot 2
-	@sold_card3      - card slot 3
-	@sold_card4      - card slot 4
+	@sold_nameid        - item ID sold
+	@sold_quantity      - amount sold
+	@sold_refine        - refine count
+	@sold_attribute     - if the item is broken (1) or not (0)
+	@sold_identify      - if the item is identified (1) or not (0)
+	@sold_card1         - card slot 1
+	@sold_card2         - card slot 2
+	@sold_card3         - card slot 3
+	@sold_card4         - card slot 4
+	@sold_option_id1    - random option ID 1
+	@sold_option_val1   - random option value 1
+	@sold_option_param1 - random option param 1
+	@sold_option_id2    - random option ID 2
+	@sold_option_val2   - random option value 2
+	@sold_option_param2 - random option param 2
+	@sold_option_id3    - random option ID 3
+	@sold_option_val3   - random option value 3
+	@sold_option_param3 - random option param 3
+	@sold_option_id4    - random option ID 4
+	@sold_option_val4   - random option value 4
+	@sold_option_param4 - random option param 4
+	@sold_option_id5    - random option ID 5
+	@sold_option_val5   - random option value 5
+	@sold_option_param5 - random option param 5
 
 Note: These labels will only be triggered if an npcshop* command is executed because these
 commands set a special data on the shop NPC, named master_nd in the source. The above labels
@@ -7329,6 +7352,7 @@ The commands can also run without an attached rid.
 This command will bind a NPC event label to an atcommand. Upon execution of the
 atcommand, the user will invoke the NPC event label. Each atcommand is only allowed
 one binding. If you rebind, it will override the original binding.
+Note: The default level for atcommand is 0 while the default level for charcommand is 100.
 
 The following variables are set upon execution:
 	.@atcmd_command$       =  The name of the @command used.
@@ -7344,7 +7368,7 @@ Example:
 		bindatcmd "test",strnpcinfo(3) + "::OnAtcommand";
 		end;
 	OnAtcommand:
-		specialeffect2 338;
+		specialeffect2 EF_ANGEL2;
 		end;
 	}
 
@@ -7999,6 +8023,19 @@ Example:
 
 ---------------------------------------
 
+*round(<number>,<precision>);
+*ceil(<number>,<precision>);
+*floor(<number>,<precision>);
+
+Returns <number> rounded to multiple of <precision>.
+
+`round` function will round the <number> up if its division with <precision> yield a remainder
+with a value equals to or more than half of <precision>. Otherwise, it rounds the <number> down.
+`ceil` always round the <number> up.
+`floor` always round the <number> down.
+
+---------------------------------------
+
 *md5("<string>")
 
 Returns the md5 checksum of a number or string.
@@ -9578,7 +9615,8 @@ solution rather than sending the map and the monster_id.
 
 This will set a Hat Effect onto the player. The state field allows you to
 enable (true) or disable (false) the effect on the player.
-The Hat Effect constants can be found in db/const.txt starting with HAT_EF_*.
+The Hat Effect constants can be found in 'src/map/script_constants.h' starting
+with HAT_EF_*.
 
 Requires client 2015-05-13aRagEXE or newer.
 

+ 40 - 34
doc/status_change.txt

@@ -939,22 +939,29 @@ SC_MIRACLE	()
 	desc:
 	val1:
 
-SC_MADNESSCANCEL	()
-	desc:
+SC_MADNESSCANCEL	(SI_MADNESSCANCEL)
+	desc: Increases some statuses (Base ATK, ASPD)
 	val1:
 
-SC_ADJUSTMENT	()
-	desc:
+SC_ADJUSTMENT	(SI_ADJUSTMENT)
+	desc: Increases some statuses (Hit, Flee)
 	val1:
 
 SC_INCREASING	(SI_ACCURACY)
-	desc: Increase some statuses (hit, dex, agi), GS_INCREASING effect
-	val1: (hardocded)
+	desc: Increase some statuses (Hit, Dex, Agi), GS_INCREASING effect
+	val1:
 
-SC_GATLINGFEVER	()
-	desc:
+SC_MAGICALBULLET	(SI_GS_MAGICAL_BULLET)
+	desc: Increases damage based on source's MATK and is reduced by target's MDEF
 	val1:
 
+SC_GATLINGFEVER	(SI_GATLINGFEVER)
+	desc: Increases some statuses (Base ATK, Flee, Movement Speed, ASPD)
+	val1: SkillLv
+	val2: ASPD increase (20 * val1)
+	val3: Base ATK (20 + 10 * val1) [pre-renewal]
+	val4: Flee decrease (5 * val1)
+
 SC_TATAMIGAESHI	()
 	desc:
 	val1:
@@ -1065,8 +1072,11 @@ SC_ITEMBOOST	(SI_ITEMBOOST)
 	val1: +% Drop
 
 SC_BOSSMAPINFO	(SI_BOSSMAPINFO)
-	desc:
-	val1:
+	desc: Used to display Boss location on minimap
+	val1: Boss game ID
+	val2: Used to keep timer message from spamming chat window
+	val3:
+	val4: Remaining tick
 
 SC_LIFEINSURANCE	(SI_LIFEINSURANCE)
 	desc: Remove death pleanlties
@@ -2398,47 +2408,43 @@ SC_SUPER_STAR	(SI_SUPER_STAR)
 	desc: Visual effect
 	val1:
 
-SC_HEAT_BARREL	()
-	desc: (Rebellion) Reduce fixed cast time, add ASPD rate, & reduce flee
-	val1:
-	val2: -Fixed Casttime
-	val3: +% ASPD
-	val4: -Flee
-
-SC_HEAT_BARREL_AFTER	(SI_HEAT_BARREL_AFTER)
-	desc: (Rebellion) Heat Barrel after-effect, can't do anything in this effect (like Extremity Fist after-effect)
-	val1:
+SC_HEAT_BARREL	(SI_HEAT_BARREL)
+	desc: (Rebellion) Reduce fixed cast time, add ASPD rate, and reduce FLEE
+	val1: SkillLv
+	val2: -Fixed Casttime (5 * val1)
+	val3: +% ASPD (6 + val1 * 2)
+	val4: -FLEE (25 + val1 * 5)
 
 SC_P_ALTER	(SI_P_ALTER)
-	desc: Increase attack ratio & def againts Undead monster
-	val1:
-	val2: +ATK ratio
-	val3: +Def
+	desc: Increase attack ratio and creates a barrier like Kyrie
+	val1: SkillLv
+	val2: +ATK ratio (10 * Coin Count)
+	val3: Barrier HP (Max HP * (val1 * 5) / 100)
 
 SC_E_CHAIN	(SI_E_CHAIN)
 	desc: (Rebellion) Has chance to trigger Chain Action for any weapon
-	val1:
-	val2: Coins used for succes rate. (5*val)
+	val1: SkillLv
+	val2: Coins used for success rate. (5 * val)
 
 SC_C_MARKER	(SI_C_MARKER)
 	desc: (Rebellion) Crimson Marker effect, also sends the target location to the caster
-	val1:
+	val1: SkillLv
 	val2:
-	val3: -Flee
+	val3: -FLEE (10)
 
 SC_ANTI_M_BLAST	(SI_ANTI_M_BLAST)
 	desc: (Rebellion) Anti-Material effect, reduce resistance of Neutral attack
-	val1: Level for duration look up
-	val2: Reduction ratio
+	val1: SkillLv
+	val2: Reduction ratio (10 * val1)
 
 SC_B_TRAP	(SI_B_TRAP)
-	desc: (Rebellion) Bind Trap effect, waiting for Flicker being used
-	val1:
+	desc: (Rebellion) Bind Trap effect, waiting for Flicker to be used
+	val1: SkillLv
 	val2:
-	val3: -Walk Speed (Unstackable penalty)
+	val3: -Walk Speed (Unstackable penalty) (25 * val1)
 
 SC_H_MINE	(SI_H_MINE)
-	desc: (Rebellion) Howling Mine effect, waiting for Flicker being used
+	desc: (Rebellion) Howling Mine effect, waiting for Flicker to be used
 	val1:
 
 SC_QD_SHOT_READY	(SI_E_QD_SHOT_READY)

+ 2 - 2
npc/custom/events/holiday/valentinesdayexp.txt

@@ -62,9 +62,9 @@ M_INFO:
 
 OnInit:
 	//559,Hand-made_Chocolate
-	setitemscript 559,"{ itemheal 50,50; if(Sex==SEX_FEMALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect 113; }";
+	setitemscript 559,"{ itemheal 50,50; if(Sex==SEX_FEMALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect EF_MAGNUS; }";
 	//560,Hand-made_White_Chocolate
-	setitemscript 560,"{ itemheal 50,50; if(Sex==SEX_MALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect 113; }";
+	setitemscript 560,"{ itemheal 50,50; if(Sex==SEX_MALE || @dsv == gettime(DT_HOUR)+1 || ispartneron()==0)end; set @dsv,gettime(DT_HOUR)+1; misceffect EF_MAGNUS; }";
 
 	//2634,Wedding_Ring_M,Wedding Ring,5,,10,0,,0,,0,127918079,7,1,136,,0,0,0,{ skill 334,1; skill 335,1; skill 336,1; }
 	setitemscript 2634,"{ skill 334,1; skill 335,1; skill 336,1; if(@dsv == gettime(DT_HOUR)+1 && ispartneron()){ bonus2 bExpAddRace,5,50; bonus2 bExpAddRace,6,50; bonus2 bExpAddRace,7,50; bonus2 bExpAddRace,8,50; bonus2 bExpAddRace,1,50; } }";

+ 1 - 1
npc/custom/events/holiday/xmas_rings_event.txt

@@ -91,7 +91,7 @@ M_QUEST:
 
 OnInit:
 //Santa's Hat
-	setitemscript 2236,"{ bonus bMdef,1; bonus bLuk,1; if(isequipped(2636,2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 410; end;} if(isequipped(2636)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 72;} if(isequipped(2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect 338;}}";
+	setitemscript 2236,"{ bonus bMdef,1; bonus bLuk,1; if(isequipped(2636,2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_RAINBOW; end;} if(isequipped(2636)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_SPHERE;} if(isequipped(2637)){if(@xmr == gettime(DT_MINUTE))end; set @xmr,gettime(DT_MINUTE); misceffect EF_ANGEL2;}}";
 //Gold Xmas Ring
 	setitemscript 2636,"{ bonus bLoseSPWhenUnequip,30; if(isequipped(2236)==0)end; if(getskilllv(\"AL_HEAL\")){skill \"TF_HIDING\",4+isequipped(2637);}else{skill \"AL_HEAL\",1+4*isequipped(2637);} }";
 //Silver Xmas Ring

+ 433 - 154
npc/custom/jobmaster.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= Euphy
 //===== Current Version: =====================================
-//= 1.4
+//= 1.7
 //===== Compatible With: ===================================== 
 //= rAthena Project
 //===== Description: =========================================
@@ -14,16 +14,87 @@
 //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support.
 //= 1.3 Kagerou/Oboro added.
 //= 1.4 Rebellion added.
+//= 1.5 Added option to disable RebirthClass. [mazvi]
+//= 1.6 Added option to get job related equipment on change. [Braniff]
+//= 1.7 Readability changes. Also added BabyExpanded and BabySummoner classes. [Jey]
+//= 1.8 Added option to disable Baby Novice Only but Baby Class can be Enabled [mazvi]
 //============================================================
 
 prontera,153,193,6	script	Job Master	123,{
-function Job_Menu;
-
-	mes "[Job Master]";
-	if (Class > Job_Soul_Linker) {
-		mes "No more jobs are available.";
+function Get_Job_Equip;
+// Checks if the Player has the required level.
+// closes if not, returns if yes
+function	Require_Level	{
+	if (BaseLevel < getarg(0) || JobLevel < getarg(1)) {
+		.@blvl = getarg(0) - BaseLevel;
+		.@jlvl = getarg(1) - JobLevel;
+		mes "Level requirement:";
+		mes ((getarg(0)>1)? 
+			"^bb0000"+getarg(0)+"^000000 (^bb0000Base^000000) / ":"")+"^00bb00"+
+			getarg(1)+"^000000 (^00bb00Job^000000)";
+		mes "You need " +
+			((.@blvl > 0) ? "^bb0000"+.@blvl+"^000000 more base levels " + 
+				((.@jlvl > 0) ? "and " : "") : "") +
+			((.@jlvl > 0) ? "^00bb00"+.@jlvl+"^000000 more job levels " : "") +
+			"to continue.";
 		close;
 	}
+	return;
+}
+
+// Checks if the given eac is a baby class
+function Is_Baby	{
+	return ((getarg(0, eaclass())&EAJL_BABY)>0);
+}
+
+// Checks if the player can change to third class.
+// Note: This does not include the level checks.
+function	Can_Change_Third	{
+	// To change to third class you either need to be:
+	// * Second Class
+	// * Transcendent Second Class
+	// * Baby Second Class
+	if( !.ThirdClass )
+		return false; // Third job change disabled
+	if( !(eaclass()&EAJL_2) )
+		return false; // Not second Class
+	if( eaclass()&EAJL_THIRD )
+		return false; // Already Third Class
+	if( roclass(eaclass()|EAJL_THIRD) < 0 )
+		return false; // Job has no third Class
+	if( (eaclass()&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE )
+		return false; // Exp. Super Novice equals 3rd Cls, but has it's own case
+	if( Is_Baby() && (!.BabyClass || !.BabyThird) )
+		return false; // No Baby (Third) change allowed
+	return true;
+}
+
+function	Can_Rebirth	{
+	// To rebirth, you need to be:
+	// * Second Class
+	if( !.RebirthClass )
+		return false; // Rebirth disabled
+	if( !(eaclass()&EAJL_2) )
+		return false; // Not second Class
+	if( eaclass()&EAJL_UPPER )
+		return false; // Already Rebirthed
+	if( roclass(eaclass()|EAJL_UPPER) < 0 )
+		return false; // Job has no transcended class
+	if( Is_Baby() && !.BabyClass )
+		return false; // No Baby changes allowed
+	return true;
+}
+
+// Checks if the given eac is a first class
+function	Is_First_Cls	{
+	return (getarg(0) <= EAJ_TAEKWON);
+}
+
+function	Check_Riding	{
+	// Note: Why we should always check for Riding:
+	// Mounts are considered as another class, which
+	// would make this NPC bigger just to handle with
+	// those special cases.
 	if (checkfalcon() || checkcart() || checkriding() || ismounting()) {
 		mes "Please remove your " +
 			((checkfalcon()) ? "falcon" : "") +
@@ -33,179 +104,254 @@ function Job_Menu;
 			" before proceeding.";
 		close;
 	}
+	return;
+}
+function	Check_SkillPoints	{
 	if (.SkillPointCheck && SkillPoint) {
 		mes "Please use all your skill points before proceeding.";
 		close;
 	}
+	return;
+}
+
+// addJobOptions is essentially the same like
+// setarray .@array[getarraysize(.@array)],opt1,opt2,...;
+// It's just easier to read, since we're using it very often
+function	Job_Options	{
+	.@argcount = getargcount();
+	.@arr_size = getarraysize(getarg(0));
+	for( .@i = 1; .@i < .@argcount; .@i++) {
+		setarray getelementofarray(getarg(0), .@arr_size++),getarg(.@i);
+	}
+}
 
+// Begin of the NPC
+	mes .NPCName$;
+	Check_Riding();
+	Check_SkillPoints();
+
+	// initialisation
+	deletearray .@job_opt[0],getarraysize(.@job_opt);
 	.@eac = eaclass();
-	.@i = ((.ThirdClass) ? roclass(.@eac&EAJ_UPPERMASK) : Class);
-	if (.@i >= Job_Knight && .@i <= Job_Crusader2) {
-		if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) {
-			.@blvl = .Rebirth[0] - BaseLevel;
-			.@jlvl = .Rebirth[1] - JobLevel;
-			mes "You need " +
-				((.@blvl > 0) ? .@blvl + " more base levels " + ((.@jlvl > 0) ? "/ " : "") : "") +
-				((.@jlvl > 0) ? .@jlvl + " more job levels " : "") + "to continue.";
-			close;
-		}
-		if (Class > Job_Crusader2) {
-			mes "Switch to third class?";
-			next;
-			Job_Menu(roclass(.@eac|EAJL_THIRD));
-			close;
-		}
-		while(1) {
-			mes "Select an option.";
-			next;
-			.@i = select(" ~ ^0055FFRebirth^000000:" + ((.ThirdClass) ? " ~ ^FF0000Third Class^000000" : "") + ": ~ ^777777Cancel^000000");
-			if (.@i == 3)
-				close;
-			mes "[Job Master]";
-			mes "Are you sure?";
-			next;
-			Job_Menu(((.@i == 1) ? Job_Novice_High : roclass(.@eac|EAJL_THIRD)));
-			mes "[Job Master]";
-		}
+	.@third_possible = Can_Change_Third();
+	.@rebirth_possible = Can_Rebirth();
+	.@first_eac = .@eac&EAJ_BASEMASK;
+	.@second_eac = .@eac&EAJ_UPPERMASK;
+	// Note: These are already set in pc.c
+	// BaseClass = roclass(.@eac&EAJ_BASEMASK) which is the players First Class
+	// BaseJob = roclass(.@eac&EAJ_UPPERMASK) which is the players Second Class
+	//dispbottom "Debug: eac ("+.@eac+"), third ("+.@third_possible+"), rebirth("+.@rebirth_possible+"), BaseClass ("+BaseClass+"), BaseJob ("+BaseJob+")";
+		
+	// From here on the jobmaster checks the current class
+	// and fills the the array `.@job_opt` with possible
+	// job options for the player.
+	
+	if( .@rebirth_possible ) {
+		// Rebirth option (displayed on the top of the menu)
+		Require_Level(.Req_Rebirth[0], .Req_Rebirth[1]);
+		Job_Options(.@job_opt, Job_Novice_High);
 	}
-	.@j1 = roclass(.@eac|EAJL_2_1);
-	.@j2 = roclass(.@eac|EAJL_2_2);
-	if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE)
-		setarray .@exp[0], roclass(.@eac|EAJL_THIRD), 99;
-	if (Class == Job_Ninja || Class == Job_Gunslinger)
-		setarray .@exp[0], .@j1, 70;
-	if (.@exp[0] && .SecondExpanded) {
-		if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) {
-			.@blvl = .Rebirth[0] - BaseLevel;
-			.@jlvl = .@exp[1] - JobLevel;
-			mes "You need " +
-				((.@blvl > 0) ? .@blvl + " more base levels " + ((.@jlvl > 0) ? "/ " : "") : "") +
-				((.@jlvl > 0) ? .@jlvl + " more job levels " : "") + "to continue.";
-			close;
+	if( .@third_possible ) {
+		// Third Job change (displayed below rebirth)
+		Require_Level(.Req_Third[0], .Req_Third[1]);
+		Job_Options(.@job_opt, roclass(.@eac|EAJL_THIRD));
+	}
+	 
+	if (.SecondExpanded && 
+	   (.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE && // is Super Novice
+	   !(eaclass()&EAJL_THIRD) ) {				 	// not already Expanded SN
+		// (Baby) Super Novice to Expanded (Baby) Super Novice
+	   	if( !Is_Baby(.@eac) || (.BabyClass && .BabyExpanded) ) {
+			// .BabyClass & .BabyExpanded must be enabled if the is a baby
+			Require_Level(.Req_Exp_SNOVI[0], .Req_Exp_SNOVI[1]);
+			Job_Options(.@job_opt,roclass(.@eac|EAJL_THIRD)); // Expanded SN is "third" cls
 		}
-		mes "Switch to " + jobname(.@exp[0]) + "?";
-		next;
-		Job_Menu(.@exp[0]);
-		close;
 	}
-	if (.@eac&EAJL_2)
-		if ((.@eac&(EAJL_UPPER|EAJL_BABY)) || roclass(.@eac|EAJL_UPPER) == -1) {
-			mes "No more jobs are available.";
-			close;
+	
+	if (.SecondExpanded && 
+		((.@eac&(~EAJL_BABY)) == EAJ_NINJA || 		// is (Baby) Ninja
+		(.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) {	// is (Baby) Gunslinger
+		// (Baby) Ninja to (Baby) Kagerou / Oboro
+		// (Baby) Gunslinger to (Baby) Rebellion
+		if( !Is_Baby(.@eac) || (.BabyClass && .BabyExpanded) ) {
+			// .BabyClass & .BabyExpanded must be enabled if the is a baby
+			Require_Level(.Req_Exp_NJ_GS[0], .Req_Exp_NJ_GS[1]);
+			// Kagerou, Oboro, Rebellion are considered as a 2-1 class
+			Job_Options(.@job_opt, roclass(.@eac|EAJL_2_1));
 		}
-	if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {
-		if (JobLevel < .JobReq[0])
-			mes "A job level of " + .JobReq[0] + " is required to change into the 1st Class.";
-		else if (Class == Job_Novice_High && .LastJob && lastJob) {
-			mes "Switch classes now?";
-			next;
-			Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));
-		} else {
-			switch(Class) {
+	}
+	
+	// Player is Job_Novice, Job_Novice_High or Job_Baby
+	if (.@first_eac == EAJ_NOVICE && .@second_eac != EAJ_SUPER_NOVICE) {
+		// MAPID_NOVICE, MAPID_SUPER_NOVICE, MAPID_NOVICE_HIGH, MAPID_BABY
+		Require_Level(.Req_First[0], .Req_First[1]);
+		switch(Class) {
 			case Job_Novice:
-				Job_Menu(
-					Job_Swordman,
-					Job_Mage,
-					Job_Archer,
-					Job_Acolyte,
-					Job_Merchant,
-					Job_Thief,
-					Job_Super_Novice,
-					Job_Taekwon,
-					Job_Gunslinger,
-					Job_Ninja,
-					Job_Baby
-				);
+				// First job change
+				Job_Options(.@job_opt,Job_Swordman,
+					Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief,
+					Job_Super_Novice, Job_Taekwon, Job_Gunslinger, Job_Ninja);
+				if( .BabyNovice )
+					Job_Options(.@job_opt, Job_Baby);
 				break;
 			case Job_Novice_High:
-				Job_Menu(
-					Job_Swordman_High,
-					Job_Mage_High,
-					Job_Archer_High,
-					Job_Acolyte_High,
-					Job_Merchant_High,
-					Job_Thief_High
-				);
+				// Job change after rebirth
+				if( .LastJob && lastJob )
+					Job_Options(.@job_opt,
+						roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));
+				else
+					Job_Options(.@job_opt, 
+						Job_Swordman_High, Job_Mage_High, Job_Archer_High,
+						Job_Acolyte_High, Job_Merchant_High, Job_Thief_High);
 				break;
 			case Job_Baby:
-				Job_Menu(
-					Job_Baby_Swordman,
-					Job_Baby_Mage,
-					Job_Baby_Archer,
-					Job_Baby_Acolyte,
-					Job_Baby_Merchant,
-					Job_Baby_Thief,
-					Job_Super_Baby
-				);
+				if( !.BabyClass )
+					break;
+				// First job change as a baby
+				Job_Options(.@job_opt, Job_Baby_Swordman, Job_Baby_Mage,
+					Job_Baby_Archer,Job_Baby_Acolyte, Job_Baby_Merchant,
+					Job_Baby_Thief);
+				if( .BabyExpanded )
+					Job_Options(.@job_opt, Job_Super_Baby, Job_Baby_Taekwon,
+						Job_Baby_Gunslinger, Job_Baby_Ninja);
+				if( .BabySummoner )
+					Job_Options(.@job_opt, Job_Baby_Summoner);
 				break;
 			default:
 				mes "An error has occurred.";
-				break;
+				close;
+		}
+	} else if( Is_First_Cls(.@eac) || 				// First Class
+			   Is_First_Cls(.@eac&(~EAJL_UPPER)) ||	// Trans. First Cls
+			   (.BabyClass && Is_First_Cls(.@eac&(~EAJL_BABY))) ) {	// Baby First Cls
+		// Player is First Class (not Novice)
+		// most jobs should have two options here  (2-1 and 2-2)
+		.@class1 = roclass(.@eac|EAJL_2_1); // 2-1
+		.@class2 = roclass(.@eac|EAJL_2_2); // 2-2
+		// dispbottom "Debug: Classes: class1 ("+.@class1+"), class2 ("+.@class2+")";
+		if(.LastJob && lastJob && (.@eac&EAJL_UPPER)) {
+			// Player is rebirth Cls and linear class changes are enforced
+			Require_Level(.Req_Second[0], .Req_Second[1]);
+			Job_Options(.@job_opt, lastJob + Job_Novice_High);
+		} else {
+			// Class is not enforced, player can decide.
+			if( .@class1 > 0 ) { // 2-1
+				Require_Level(.Req_Second[0], .Req_Second[1]);
+				Job_Options(.@job_opt, .@class1);
+			}
+			if( .@class2 > 0 ) { // 2-2
+				Require_Level(.Req_Second[0], .Req_Second[1]);
+				Job_Options(.@job_opt, .@class2);
 			}
 		}
-		close;
 	}
-	if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1)
-		mes "No more jobs are available.";
-	else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1])
-		mes "A job level of " + .JobReq[1] + " is required to change into the 2nd Class.";
-	else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) {
-		mes "Switch classes now?";
-		next;
-		Job_Menu(lastJob + Job_Novice_High);
-	} else
-		Job_Menu(.@j1, .@j2);
+	
+	// Displaying the Job Menu defined by .@job_opt.
+	// .@job_opt should not be changed below this line.
+	function Job_Menu;
+	Job_Menu(.@job_opt);
 	close;
 
-function Job_Menu {
-	while(1) {
-		if (getargcount() > 1) {
+// Displays the job menu
+function	Job_Menu	{
+	// getarg(0) is the .@job_opt array holding all available job changes.
+	function Confirm_Change;
+	while(true) {
+		.@opt_cnt =  getarraysize(getarg(0));
+		if( .@opt_cnt <= 0 ) {
+			mes "No more jobs are available.";
+			close;
+		}
+
+		.@selected = 0; // Just a single job class given, no select needed
+		if (.@opt_cnt > 1) {
+			// Multiple job classes given. Select one and save it to .@class
+			// After that confirm .@class
 			mes "Select a job.";
 			.@menu$ = "";
-			for (.@i = 0; .@i < getargcount(); .@i++)
-				.@menu$ = .@menu$ + " ~ " + jobname(getarg(.@i)) + ":";
+			for (.@i = 0; .@i < .@opt_cnt; .@i++) {
+				if( getelementofarray(getarg(0), .@i) == Job_Novice_High)
+					.@jobname$ = "^0055FFRebirth^000000";
+				else
+					.@jobname$ = jobname(getelementofarray(getarg(0), .@i));
+				.@menu$ = .@menu$ + " ~ " + .@jobname$ + ":";
+			}
 			.@menu$ = .@menu$+" ~ ^777777Cancel^000000";
-			next;
-			.@i = getarg(select(.@menu$) - 1, 0);
-			if (!.@i)
+			.@selected = select(.@menu$) - 1;
+			if( .@selected < 0 || .@selected >= .@opt_cnt )
 				close;
-			if ((.@i == Job_Super_Novice || .@i == Job_Super_Baby) && BaseLevel < .SNovice) {
-				mes "[Job Master]";
-				mes "A base level of " + .SNovice + " is required to turn into a " + jobname(.@i) + ".";
-				close;
-			}
-			mes "[Job Master]";
-			mes "Are you sure?";
 			next;
-		} else
-			.@i = getarg(0);
-		if (select(" ~ Change into ^0055FF" + jobname(.@i) + "^000000 class: ~ ^777777" + ((getargcount() > 1) ? "Go back" : "Cancel") + "^000000") == 1) {
-			mes "[Job Master]";
-			mes "You are now " + callfunc("F_InsertArticle", jobname(.@i)) + "!";
-			if (.@i == Job_Novice_High && .LastJob)
-				lastJob = Class;
-			jobchange .@i;
-			if (.@i == Job_Novice_High)
-				resetlvl(1);
-			else if (.@i == Job_Baby) {
-				resetstatus;
-				resetskill;
-				set SkillPoint,0;
-			}
-			specialeffect2 EF_ANGEL2;
-			specialeffect2 EF_ELECTRIC;
-			if (.Platinum)
-				callsub Get_Platinum;
-			close;
+			mes .NPCName$;
 		}
-		if (getargcount() == 1)
+		.@class = getelementofarray(getarg(0), .@selected);
+		if ((.@class == Job_Super_Novice || .@class == Job_Super_Baby) &&
+				BaseLevel < .SNovice) {
+			// Special Level Requirement because Super Novice and
+			// Supber Baby can both be selected in one of the first class
+			// changes. That's why the Levelrequirement is after and not before
+			// the selection.
+			mes "A base level of " + .SNovice +
+				" is required to turn into a " + jobname(.@class) + ".";
 			return;
-		mes "[Job Master]";
+		}
+		// Confirm the Class
+		Confirm_Change(.@class, .@opt_cnt > 1);
+		next;
+		mes .NPCName$;
 	}
-	end;
+	return;
+}
+
+
+// Executes the actual jobchange and closes.
+function	Job_Change	{
+	function Get_Platinum;
+	.@to_cls = getarg(0);
+	next;
+	mes .NPCName$;
+	mes "You are now " + callfunc("F_InsertArticle", jobname(.@to_cls)) + "!";
+	if (.@to_cls == Job_Novice_High && .LastJob)
+		lastJob = Class; // Saves the lastJob for rebirth
+	jobchange .@to_cls;
+	if (.@to_cls == Job_Novice_High)
+		resetlvl(1);
+	else if (.@to_cls == Job_Baby) {
+		resetstatus;
+		resetskill;
+		set SkillPoint,0;
+	}
+	specialeffect2 EF_ANGEL2;
+	specialeffect2 EF_ELECTRIC;
+	if (.Platinum)
+		Get_Platinum();
+	if (.GetJobEquip)
+		Get_Job_Equip();
+	close; // Always closes after the change
+}
+
+function	Confirm_Change	{
+	// Player confirms he want to change into .@class
+	.@class = getarg(0, -1);
+	.@back = getarg(1, false);
+	if( .@class < 0 ) {
+		mes "Unknow Class Error.";
+		close;
+	}
+	mes "Do you want to change into ^0055FF"+jobname(.@class)+"^000000 class?";
+	.@job_option$ = " ~ Change into ^0055FF"+jobname(.@class)+"^000000 class";
+	if( .@class == Job_Novice_High)
+		.@job_option$ = " ~ ^0055FFRebirth^000000";
+	
+	if (select(.@job_option$+": ~ ^777777" + 
+			((.@back) ?"Go back" : "Cancel") + "^000000") == 1) {
+		Job_Change(.@class);
+	}
+	if (!.@back)
+		close; // "Cancel" pressed
+	return;
 }
 
-Get_Platinum:
+function	Get_Platinum	{
 	skill "NV_FIRSTAID",1,SKILL_PERM;
 	switch (BaseClass) {
 	case Job_Novice:
@@ -292,15 +438,148 @@ Get_Platinum:
 		break;
 	}
 	return;
+}
+
+// Function which gives a job related item to the player
+// the items are the rewards from the original job change quests
+function	Get_Job_Equip	{
+	// Note: The item is dropping, when the player can't hold it.
+	// But that's better than not giving the item at all.
+	.@eac = eaclass();
+	if( .@eac&EAJL_THIRD ) {
+		// Third Class Items
+		getitem 2795,1;	//	Green Apple Ring for every 3rd Class
+		switch(BaseJob) {
+			// BaseJob of Third Cls
+			// For Normal Third, Baby Third and Transcended Third Cls
+			case Job_Knight:
+				getitem 5746,1;	break;	//	Rune Circlet [1]
+			case Job_Wizard:
+				getitem 5753,1;	break;	//	Magic Stone Hat [1]
+			case Job_Hunter:
+				getitem 5748,1;	break;	//	Sniper Goggle [1]
+			case Job_Priest:
+				getitem 5747,1;	break;	//	Mitra [1]
+			case Job_Blacksmith:
+				getitem 5749,1;	break;	//	Driver Band [1]
+			case Job_Assassin:
+				getitem 5755,1;	break;	//	Silent Executor [1]
+			case Job_Crusader:
+				getitem 5757,1;	break;	//	Dip Schmidt Helm [1]
+			case Job_Sage:
+				getitem 5756,1;	break;	//	Wind Whisper [1]
+			case Job_Bard:
+				getitem 5751,1;	break;	//	Maestro Song's Hat [1]
+			case Job_Dancer:
+				getitem 5758,1;	break;	//	Dying Swan [1]
+			case Job_Monk:
+				getitem 5754,1;	break;	//	Blazing Soul [1]
+			case Job_Alchemist:
+				getitem 5752,1;	break;	//	Midas Whisper[1]
+			case Job_Rogue:
+				getitem 5750,1; 		//	Shadow Handicraft [1]
+				getitem 6121,1;			//	Makeover Brush
+				getitem 6122,1;	break;	//	Paint Brush
+		}
+	} else if (.@eac&EAJL_2) {
+		// Second Class (And not Third Class)
+		switch(BaseJob) {
+			// Second Class
+			case Job_Knight:
+				getitem 1163,1;	break;	//	Claymore [0]
+			case Job_Priest:
+				getitem 1522,1;	break;	//	Stunner [0]
+			case Job_Wizard:
+				getitem 1617,1;	break;	//	Survivor's Rod [0]
+			case Job_Blacksmith:
+				getitem 1360,1;	break;	//	Two-Handed-Axe [1]
+			case Job_Hunter:
+				getitem 1718,1;	break;	//	Hunter Bow [0]
+			case Job_Assassin:
+				getitem 1254,1;	break;	//	Jamadhar [0]
+			case Job_Crusader:
+				getitem 1410,1;	break;	//	Lance [0]
+			case Job_Monk:
+				getitem 1807,1;	break;	//	Fist [0]
+			case Job_Sage:
+				getitem 1550,1;	break;	//	Book [3]
+			case Job_Rogue:
+				getitem 1222,1;	break;	//	Damascus [1]
+			case Job_Alchemist:
+				getitem 1126,1;	break;	//	Saber [2]
+			case Job_Bard:
+				getitem 1907,1;	break;	//	Guitar [0]
+			case Job_Dancer:
+				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:
+				getitem 1617,1;	break;	//	Survivor's Rod [0]
+		}
+	} else {
+		// Neither Second or Third Cls
+		// => First Cls or not covered by the switch
+		switch(BaseClass) {
+			// First Class
+			case Job_Swordman:
+				getitem 1108,1;	break;	//	Blade [4]
+			case Job_Mage:
+				getitem 1602,1;	break;	//	Rod [4]
+			case Job_Archer:
+				getitem 1705,1;	break;	//	Composite Bow [4]
+			case Job_Acolyte:
+				getitem 1505,1;	break;	//	Mace [4]
+			case Job_Merchant:
+				getitem 1302,1;	break;	//	Axe [4]
+			case Job_Thief:
+				getitem 1208,1;	break;	//	Main Gauche [4]
+		}
+	}
+	return;
+}
 
 OnInit:
-	setarray .Rebirth[0],99,50;	// Minimum base level, job level to rebirth OR change to third class
-	setarray .JobReq[0],10,40;	// Minimum job level to turn into 1st class, 2nd class
-	.ThirdClass = 1;			// Enable third classes? (1: yes / 0: no)
-	.SecondExpanded = 1;		// Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? (1: yes / 0: no)
-	.SNovice = 45;				// Minimum base level to turn into Super Novice
-	.LastJob = 1;				// Enforce linear class changes? (1: yes / 0: no)
-	.SkillPointCheck = 1;		// Force player to use up all skill points? (1: yes / 0: no)
-	.Platinum = 1;				// Get platinum skills automatically? (1: yes / 0: no)
+	// Initialisation, do not edit these
+	.NPCName$ = "[Job Master]";
+	
+	// Settings
+	.ThirdClass = true;			// Enable third classes?
+	.RebirthClass = true;			// Enable rebirth classes?
+	.SecondExpanded = true;		// Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion?
+	.BabyNovice = true;	// Enable Baby novice classes? Disable it if you like player must have parent to get job baby.
+	.BabyClass = true;				// Enable Baby classes?
+	.BabyThird = true;				// Enable Baby third classes?
+	.BabyExpanded = true;			// Enable Baby Expanded classes: Ex. Baby Ninja, Baby Taekwon, etc.
+	.BabySummoner = true;			// Enable Baby Summoner?
+	.LastJob = true;				// Enforce linear class changes?
+	.SkillPointCheck = true;		// Force player to use up all skill points?
+	.Platinum = true;				// Get platinum skills automatically?
+	.GetJobEquip = false;			// Get job equipment (mostly weapons) on job change?
+
+	// Level Requirements
+	setarray .Req_First[0],1,10; 		// Minimum base level, job level to turn into 1st class
+	setarray .Req_Second[0],1,40; 		// Minimum base level, job level to turn into 2nd class
+	setarray .Req_Rebirth[0],99,50;		// Minimum base level, job level to rebirth
+	setarray .Req_Third[0],99,50;		// Minimum base level, job level to change to third class
+	setarray .Req_Exp_NJ_GS[0],99,70; 	// Minimum base level, job level to turn into Expanded Ninja and Gunslinger
+	setarray .Req_Exp_SNOVI[0],99,99; 	// Minimum base level, job level to turn into Expanded Super Novice
+	.SNovice = 45;						// Minimum base level to turn into Super Novice
+	
+	// Setting adjustments by PACKETVER
+	if( PACKETVER < 20161207 ) {
+		if( .BabyExpanded )
+			debugmes "jobmaster: BabyExpanded is disabled due to outdated PACKETVER.";
+		if( .BabySummoner )
+			debugmes "jobmaster: BabySummoner is disabled due to outdated PACKETVER.";
+		.BabyExpanded = false;
+		.BabySummoner = false;
+	}
 	end;
 }
+

+ 57 - 56
npc/custom/official/GeffenMagicTournament.txt

@@ -183,12 +183,13 @@ OnTimer2500:
 	.@r = rand(0,1);
 	if (.@r != 0 ) { stopnpctimer; initnpctimer; end; }
 	stopnpctimer;
-	specialeffect .effects[rand(0,18)],AREA,instance_npcname(strnpcinfo(0));
+	specialeffect .effects[rand(getarraysize(.effects))],AREA,instance_npcname(strnpcinfo(0));
 	initnpctimer;
 	end;
 
 OnInit:
-	setarray .effects,97,255,28,256,29,257,244,92,32,195,258,22,62,234,89,30,225,116,94;
+	setarray .effects[0],EF_FIREPILLARBOMB,EF_FLAMELAUNCHER,EF_FROSTDIVER2,EF_FROSTWEAPON,EF_LIGHTBOLT,EF_LIGHTNINGLOADER,EF_MAGICROD,EF_METEORSTORM,EF_NAPALMBEAT;
+	setarray .effects[9],EF_PETRIFYATTACK,EF_SEISMICWEAPON,EF_SIGHT,EF_SIGHTRASHER,EF_SPELLBREAKER,EF_STORMGUST,EF_THUNDERSTORM,EF_VOLCANO,EF_WATERBALL,EF_YUFITELHIT;
 	hideonnpc strnpcinfo(0);
 	end;
 	
@@ -2289,7 +2290,7 @@ OnEnd:
 	mes "Enjoy.";
 	mes "Good luck on the next round!";
 	percentheal 100,100;
-	specialeffect2 312;
+	specialeffect2 EF_HEAL;
 	close2;
 	hideonnpc instance_npcname("Tournament Healer#1"); // 83649
 	end;
@@ -2303,13 +2304,13 @@ end;
 OnStart:
 	initnpctimer;
 		for ( .@i = 11; .@i <= 20; .@i++ ) {
-			specialeffect .effect[rand(3)], AREA, instance_npcname("#fireworks_" +.@i);
+			specialeffect .effect[rand(getarraysize(.effect))], AREA, instance_npcname("#fireworks_" +.@i);
 		}
 	end;
 OnTimer6000:
 	initnpctimer;
 		for ( .@i = 0; .@i < 5; .@i++) {
-			specialeffect .effect[rand(3)], AREA, instance_npcname("#fireworks_" + rand(11,20));
+			specialeffect .effect[rand(getarraysize(.effect))], AREA, instance_npcname("#fireworks_" + rand(11,20));
 		}
 	end;
 
@@ -2319,23 +2320,23 @@ OnTurn:
 
 OnWin:
 	for ( .@i = 1; .@i <= 5; .@i++ ) {
-		specialeffect 90, AREA, instance_npcname("#fireworks_f" + .@i);
+		specialeffect EF_LORD, AREA, instance_npcname("#fireworks_f" + .@i);
 	}
 	sleep 3000;
 	for ( .@i = 1; .@i <= 5; .@i++ ) {
-		specialeffect 62, AREA, instance_npcname("#fireworks_f" + .@i);
+		specialeffect EF_SIGHTRASHER, AREA, instance_npcname("#fireworks_f" + .@i);
 	}
 	sleep 500;
 	for ( .@i = 1; .@i <= 5; .@i++ ){
-		specialeffect 89, AREA, instance_npcname("#fireworks_f" + .@i);
+		specialeffect EF_STORMGUST, AREA, instance_npcname("#fireworks_f" + .@i);
 	}
 	sleep 3000;
 	for ( .@i = 1; .@i <= 5; .@i++ ) {
-		specialeffect 237, AREA, instance_npcname("#fireworks_f" + .@i);
+		specialeffect EF_VIOLENTGALE, AREA, instance_npcname("#fireworks_f" + .@i);
 	}
 	end;
 OnInstanceInit:
-	setarray .effect, 30, 89, 92;
+	setarray .effect, EF_THUNDERSTORM, EF_STORMGUST, EF_METEORSTORM;
 	end;
 }
 
@@ -4098,9 +4099,9 @@ OnTimer1000:
 	
 	switch('gmt_timer_evt1) {
 		case 1:
-			specialeffect 220, AREA, instance_npcname("Geffen Gangster#1");
-			specialeffect 220, AREA, instance_npcname("Geffen Gangster#2");
-			specialeffect 220, AREA, instance_npcname("Geffen Gangster#3");
+			specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#1");
+			specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#2");
+			specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Gangster#3");
 			npctalk "Geffen Gangster : You're pretty good...!", instance_npcname("Geffen Gangster#1");
 			npctalk "Geffen Gangster : We should stop playing around...", instance_npcname("Geffen Gangster#2");
 			npctalk "Geffen Gangster : You're gonna pay the price!", instance_npcname("Geffen Gangster#3");
@@ -4112,7 +4113,7 @@ OnTimer1000:
 			break;
 		case 8: npctalk "Iris : That's enough.", instance_npcname("Iris#Gef1"); break;
 		case 11: npctalk "Iris : I won't forgive you~!", instance_npcname("Iris#Gef1"); break;
-		case 13: specialeffect 204, AREA, instance_npcname("Iris#Gef1"); break;
+		case 13: specialeffect EF_POTION1, AREA, instance_npcname("Iris#Gef1"); break;
 		case 14:
 			npctalk "Geffen Gangster : Why hello there, are you scared?", instance_npcname("Geffen Gangster#1");
 			npctalk "Geffen Gangster : You're pretty cute. Do you want to play with us too?", instance_npcname("Geffen Gangster#2");
@@ -4128,23 +4129,23 @@ OnTimer1000:
 			break;
 		case 22: mapannounce instance_mapname("1@gef"), "Stop right there! Jerks!", 0x00ebff; break;
 		case 23: hideoffnpc instance_npcname("Chaos#Gef1"); break;
-		case 25: specialeffect 218, AREA, instance_npcname("Chaos#Gef1"); break;
+		case 25: specialeffect EF_POTION_CON, AREA, instance_npcname("Chaos#Gef1"); break;
 		case 26: npctalk "Chaos : Are you clowns harassing Iris?", instance_npcname("Chaos#Gef1"); break;
 		case 30: npctalk "Chaos : I think I need to teach someone a lesson!", instance_npcname("Chaos#Gef1"); break;
 		case 31:
-			specialeffect 60, AREA, instance_npcname("Geffen Gangster#11");
-			specialeffect 60, AREA, instance_npcname("Geffen Gangster#22");
-			specialeffect 60, AREA, instance_npcname("Geffen Gangster#33");
+			specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#11");
+			specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#22");
+			specialeffect EF_LOCKON, AREA, instance_npcname("Geffen Gangster#33");
 			npctalk "Chaos : Come and fight me!", instance_npcname("Chaos#Gef2");
 			hideonnpc instance_npcname("Chaos#Gef1");
 			hideoffnpc instance_npcname("Chaos#Gef2");
 			break;
 		case 34:
 			npctalk "Chaos : Bash~!!!", instance_npcname("Chaos#Gef2");
-			specialeffect 1, AREA, instance_npcname("Chaos#Gef2");
-			specialeffect 16, AREA, instance_npcname("Geffen Gangster#11");
-			specialeffect 16, AREA, instance_npcname("Geffen Gangster#22");
-			specialeffect 16, AREA, instance_npcname("Geffen Gangster#33");
+			specialeffect EF_HIT2, AREA, instance_npcname("Chaos#Gef2");
+			specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#11");
+			specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#22");
+			specialeffect EF_BASH, AREA, instance_npcname("Geffen Gangster#33");
 			hideonnpc instance_npcname("Geffen Gangster#11");
 			hideonnpc instance_npcname("Geffen Gangster#22");
 			hideonnpc instance_npcname("Geffen Gangster#33");
@@ -4165,14 +4166,14 @@ OnTimer1000:
 			break;
 		case 42:
 			npctalk "Chaos : I'm not done yet!! Magnum Break~!", instance_npcname("Chaos#3");
-			specialeffect 17, AREA, instance_npcname("Geffen Gangster#1");
-			specialeffect 17, AREA, instance_npcname("Geffen Gangster#2");
-			specialeffect 17, AREA, instance_npcname("Geffen Gangster#3");
+			specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#1");
+			specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#2");
+			specialeffect EF_MAGNUMBREAK, AREA, instance_npcname("Geffen Gangster#3");
 			break;
 		case 43:
-			specialeffect 183, AREA, instance_npcname("Geffen Gangster#1");
-			specialeffect 183, AREA, instance_npcname("Geffen Gangster#2");
-			specialeffect 183, AREA, instance_npcname("Geffen Gangster#3");
+			specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#1");
+			specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#2");
+			specialeffect EF_SUI_EXPLOSION, AREA, instance_npcname("Geffen Gangster#3");
 			hideonnpc instance_npcname("Geffen Gangster#1");
 			hideonnpc instance_npcname("Geffen Gangster#2");
 			hideonnpc instance_npcname("Geffen Gangster#3");
@@ -4314,7 +4315,7 @@ OnTimer1000:
 		case 9:
 			unittalk 'gmt_account_id, "I have to help!";
 			attachrid 'gmt_account_id;
-			specialeffect2 60;
+			specialeffect2 EF_LOCKON;
 			detachrid;
 			monster instance_mapname("1@gef"), 75, 172, "Geffen Bully", 2567, 1, instance_npcname("#Event 2 start 2") + "::OnMobKilled";
 			monster instance_mapname("1@gef"), 76, 170, "Geffen Bully", 2567, 1, instance_npcname("#Event 2 start 2") + "::OnMobKilled";
@@ -4338,9 +4339,9 @@ OnMobKilled:
 		//completequest 9286;
 		//setquest 9287;
 		sleep2 500;
-		specialeffect 220, AREA, instance_npcname("Geffen Bully#1");
-		specialeffect 220, AREA, instance_npcname("Geffen Bully#2");
-		specialeffect 220, AREA, instance_npcname("Geffen Bully#3");
+		specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#1");
+		specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#2");
+		specialeffect EF_POTION_BERSERK, AREA, instance_npcname("Geffen Bully#3");
 		
 		$gmt_timer_evt2 = -1;
 		
@@ -4364,7 +4365,7 @@ OnMobKilled:
 				case 10: npctalk "Fenrir : This is really uncomfortable. I can't just sit back and watch.", instance_npcname("Fenrir#1"); break;
 				case 13:
 					npctalk "Fenrir : Stop harassing her. I won't forgive you.", instance_npcname("Fenrir#1");
-					specialeffect 204, AREA, instance_npcname("Fenrir#1");
+					specialeffect EF_POTION1, AREA, instance_npcname("Fenrir#1");
 					break;
 				case 15: npctalk "Geffen Bully : Hey~ You look rich, you must have a lot of zeny right?", instance_npcname("Geffen Bully#1"); break;
 				case 17: npctalk "Geffen Bully : What's a rich girl like you doing around here?~", instance_npcname("Geffen Bully#2"); break;
@@ -4384,16 +4385,16 @@ OnMobKilled:
 				case 25:
 					hideoffnpc instance_npcname("Loki#1");
 					sleep2 500;
-					specialeffect 126, AREA, instance_npcname("Loki#1");
+					specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#1");
 					sleep2 1500;
-					specialeffect 121, AREA, instance_npcname("Loki#1");
+					specialeffect EF_SONICBLOW, AREA, instance_npcname("Loki#1");
 					npctalk "Loki : Hmph!", instance_npcname("Loki#1");
 					sleep2 500;
-					specialeffect 124, AREA, instance_npcname("Loki#1");
-					specialeffect 122, AREA, instance_npcname("Geffen Bully#33");
-					specialeffect 143, AREA, instance_npcname("Geffen Bully#33");
+					specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#1");
+					specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#33");
+					specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#33");
 					sleep2 330;
-					specialeffect 32, AREA, instance_npcname("Geffen Bully#33");
+					specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#33");
 					hideonnpc instance_npcname("Geffen Bully#33");
 					hideoffnpc instance_npcname("Geffen Bully#3");
 					break;
@@ -4404,11 +4405,11 @@ OnMobKilled:
 					sleep2 750;
 					npctalk "Loki : Take this.", instance_npcname("Loki#2");
 					sleep2 500;
-					specialeffect 271, AREA, instance_npcname("Geffen Bully#22");
-					specialeffect 122, AREA, instance_npcname("Geffen Bully#22");
-					specialeffect 143, AREA, instance_npcname("Geffen Bully#22");
+					specialeffect EF_STRIPARMOR, AREA, instance_npcname("Geffen Bully#22");
+					specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#22");
+					specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#22");
 					sleep2 330;
-					specialeffect 32, AREA, instance_npcname("Geffen Bully#22");
+					specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#22");
 					hideonnpc instance_npcname("Geffen Bully#22");
 					hideoffnpc instance_npcname("Geffen Bully#2");
 					break;
@@ -4419,11 +4420,11 @@ OnMobKilled:
 					sleep2 750;
 					npctalk "Loki : Change your mind yet?", instance_npcname("Loki#3");
 					sleep2 500;
-					specialeffect 270, AREA, instance_npcname("Geffen Bully#11");
-					specialeffect 122, AREA, instance_npcname("Geffen Bully#11");
-					specialeffect 143, AREA, instance_npcname("Geffen Bully#11");
+					specialeffect EF_STRIPSHIELD, AREA, instance_npcname("Geffen Bully#11");
+					specialeffect EF_SONICBLOWHIT, AREA, instance_npcname("Geffen Bully#11");
+					specialeffect EF_SONICBLOW2, AREA, instance_npcname("Geffen Bully#11");
 					sleep2 330;
-					specialeffect 32, AREA, instance_npcname("Geffen Bully#11");
+					specialeffect EF_NAPALMBEAT, AREA, instance_npcname("Geffen Bully#11");
 					hideonnpc instance_npcname("Geffen Bully#11");
 					hideoffnpc instance_npcname("Geffen Bully#1");
 					break;
@@ -4435,18 +4436,18 @@ OnMobKilled:
 				case 40: npctalk "Geffen Bully : Let's get away!~!!!!!", instance_npcname("Geffen Bully#3"); break;
 				case 41:
 					npctalk "Loki : You have 10 seconds.", instance_npcname("Loki#3");
-					specialeffect 121, AREA, instance_npcname("Loki#3");
+					specialeffect EF_SONICBLOW, AREA, instance_npcname("Loki#3");
 					break;
 				case 43:
-					specialeffect 136, AREA, instance_npcname("Loki#3");
+					specialeffect EF_SLOWPOISON, AREA, instance_npcname("Loki#3");
 					npctalk "Loki : 10... 9...", instance_npcname("Loki#3");
 					sleep2 500;
-					specialeffect 269, AREA, instance_npcname("Loki#3");
-					specialeffect 126, AREA, instance_npcname("Loki#3");
-					specialeffect 127, AREA, instance_npcname("Loki#3");
+					specialeffect EF_STRIPWEAPON, AREA, instance_npcname("Loki#3");
+					specialeffect EF_POISONREACT, AREA, instance_npcname("Loki#3");
+					specialeffect EF_POISONREACT2, AREA, instance_npcname("Loki#3");
 					break;
 				case 45:
-					specialeffect 125, AREA, instance_npcname("Loki#3");
+					specialeffect EF_ENCHANTPOISON, AREA, instance_npcname("Loki#3");
 					sleep2 500;
 					emotion e_gg, 0, instance_npcname("Loki#3");
 					npctalk "Loki : 3... 2...", instance_npcname("Loki#3");
@@ -4456,8 +4457,8 @@ OnMobKilled:
 					npctalk "Geffen Bully : I will have my revenge~!!", instance_npcname("Geffen Bully#3");
 					break;
 				case 46:
-					specialeffect 361, AREA, instance_npcname("Loki#3");
-					specialeffect 124, AREA, instance_npcname("Loki#3");
+					specialeffect EF_SOULBREAKER, AREA, instance_npcname("Loki#3");
+					specialeffect EF_VENOMDUST, AREA, instance_npcname("Loki#3");
 					npctalk "Loki : 1...", instance_npcname("Loki#3");
 					sleep2 330;
 					hideonnpc instance_npcname("Geffen Bully#1");
@@ -4644,7 +4645,7 @@ OnTimer1000:
 	'gmt_timer_evt3++;
 	
 	switch('gmt_timer_evt3) {
-		case 1: specialeffect 20, AREA, instance_npcname("Geffen Shoplifter#1"); break;
+		case 1: specialeffect EF_PATTACK, AREA, instance_npcname("Geffen Shoplifter#1"); break;
 		case 4: npctalk "Geffen Shoplifter : Ugh, I shouldn't fight toe to toe with anyone...", instance_npcname("Geffen Shoplifter#1"); break;
 		case 7: unittalk 'gmt_account_id, "Don't want to be in a fair fight, huh thief?"; break;
 		case 10: npctalk "Geffen Shoplifter : Umm... stealing zeny is my job~ I did nothing wrong~!", instance_npcname("Geffen Shoplifter#1"); break;

+ 2 - 2
npc/guild2/agit_main_se.txt

@@ -1003,11 +1003,11 @@ OnInit:
 			mes "their Magic properties by";
 			mes "their casting effect.^000000";
 			next;
-			setarray .@effect[0],56,54,225;
+			setarray .@effect[0],EF_BEGINSPELL4,EF_BEGINSPELL2,EF_VOLCANO;
 			setarray .@color$[0],"Red","Yellow","Blue";
 			while(1) {
 				if (.@roof0 > 7) break;
-				set .@i, rand(3);
+				set .@i, rand(getarraysize(.@effect));
 				specialeffect .@effect[.@i];
 				mes "^3355FFThe Gemstones must";
 				mes "be arranged in the correct";

+ 4 - 0
npc/merchants/advanced_refiner.txt

@@ -58,6 +58,10 @@ payon,157,146,6	script	Suhnbi#cash	85,{
 	.@price = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_ZENY_COST);
 	.@material = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_MATERIAL_ID);
 
+	// Make sure you have the neccessary items and Zeny to refine your items
+	// Determines chance of failure and verifies that you want to continue.
+	callsub S_RefineValidate,getequipweaponlv(.@part),.@material,.@price,.@part;
+
 	mes "[Suhnbi]";
 	mes "Clang! Clang! Clang!";
 	if (getequippercentrefinery(.@part, true) > rand(100)) {

+ 8 - 0
npc/merchants/refine.txt

@@ -612,6 +612,14 @@ function	script	refinemain	{
 	.@price = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_ZENY_COST);
 	.@material = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_MATERIAL_ID);
 
+	switch (getequipweaponlv(.@part)) {
+		case 1: .@safe = 7; break;
+		case 2: .@safe = 6; break;
+		case 3: .@safe = 5; break;
+		case 4:
+		default: .@safe = 4; break;
+	}
+
 	// If the VIP system is enabled, the prices for non-VIP players are considerably higher.
 	if (VIP_SCRIPT && !vip_status(VIP_STATUS_ACTIVE)) {
 		switch(getequipweaponlv(.@part)) {

+ 1 - 0
npc/other/gm_npcs.txt

@@ -104,6 +104,7 @@ List of GM Management NPCs (incomplete)
 - Button Girl#sura
 - Battle Test Control#ko
 - Guide#ko_helper
+- Admin1
 --------------------------
 - Soul Linker Var
 - 1st Job Quest Reset

+ 4 - 4
npc/quests/thana_quest.txt

@@ -2099,19 +2099,19 @@ OnTouch_:
 	// .@j$: FragmentName
 	switch(.@seal) {
 	case 1:
-		setarray .@i[0],7437,1711,217,167,238;
+		setarray .@i[0],7437,1711,217,167,EF_LANDPROTECTOR;
 		set .@j$,"Misery";
 		break;
 	case 2:
-		setarray .@i[0],7436,1712,202,75,102;
+		setarray .@i[0],7436,1712,202,75,EF_CRASHEARTH;
 		set .@j$,"Agony";
 		break;
 	case 3:
-		setarray .@i[0],7438,1709,80,76,101;
+		setarray .@i[0],7438,1709,80,76,EF_REPAIRWEAPON;
 		set .@j$,"Hatred";
 		break;
 	case 4:
-		setarray .@i[0],7439,1710,62,171,100;
+		setarray .@i[0],7439,1710,62,171,EF_REMOVETRAP;
 		set .@j$,"Despair";
 		break;
 	}

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

@@ -3934,7 +3934,7 @@ lasagna,85,93,5	script	Shaman meow#dorcon	4_DR_KID_01,{
 			mes "[Shaman meow]";
 			mes "I'll tell you today's talisman. It is...";
 			next;
-			specialeffect 330;
+			specialeffect EF_HITLINE;
 			mes "[Shaman meow]";
 			.@quest_id = rand(14560,14562);
 			switch( .@quest_id ) {
@@ -6910,7 +6910,7 @@ conch_in,181,61,5	script	Boatswain#dorcon	4_M_BOSSCAT,{
 		next;
 		mes "[Boatswain]";
 		mes "This... This is...";
-		specialeffect 66;
+		specialeffect EF_CURE;
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "What do you think?";
@@ -6991,7 +6991,7 @@ conch_in,181,61,5	script	Boatswain#dorcon	4_M_BOSSCAT,{
 			mes "This is the amulet for today! Give me all the Basilrocks you have.";
 			next;
 			mes "[Boatswain]";
-			specialeffect 66;
+			specialeffect EF_CURE;
 			if (isbegin_quest(14560) == 1) {
 				mes "It feels like watching the blue horizon on a clear and windless day. It is refreshing.";
 				next;
@@ -8228,7 +8228,7 @@ lasa_dun03,161,292,5	script	Lord Imuk#dorcon	4_NFWISP,{
 		next;
 		mes "[???]";
 		mes "How dare you treat me like a ghost! I have lived for ^0000cd2,500 years^000000!";
-		specialeffect2 29;
+		specialeffect2 EF_LIGHTBOLT;
 		next;
 		mes "[" + strcharinfo(0) + "]";
 		mes "Oww...that hurts. I'm sorry if I've offended you, but are you Imoogi, the chief of the Basilisk?";

+ 855 - 0
npc/re/jobs/2e/rebellion.txt

@@ -0,0 +1,855 @@
+//===== rAthena Script =======================================
+//= Rebellion Job Quest
+//===== Description: =========================================
+//= [Official Conversion]
+//= Job change Quest from Gunslinger -> Rebellion.
+//===== Changelogs: ==========================================
+//= 1.0 First version. [exneval]
+//= 1.1 Syntax change. [Capuche]
+//============================================================
+
+moc_fild12,261,318,3	script	Suspicious Man	4_M_MOCASS2,2,2,{
+	end;
+OnTouch:
+	if (Class == Job_Gunslinger && BaseLevel >= 99 && JobLevel >= 70) {
+		if (isbegin_quest(12340) == 0) {
+			mes "[Suspicious Man]";
+			mes "Finally I've found you, Vagabond Spike! Your neck is mine!";
+			next;
+			select("Say what?");
+			mes "[Suspicious Man]";
+			mes "*Snort* Don't pretend like you don't know. Look at this poster! You're in it!";
+			next;
+			select("I see the resemblance, but that's not me.");
+			mes "["+strcharinfo(0)+"]";
+			mes "Forget the resemblance. Where did you get that poster? I've never committed a crime.";
+			next;
+			mes "[Suspicious Man]";
+			mes "I knew you'd try to lie your way out.";
+			next;
+			mes "[Suspicious Man]";
+			mes "The ^0000ffEinbroch Private Pub^000000 has released that wanted poster. You have many bounty hunters like me on your heels.";
+			next;
+			mes "[Suspicious Man]";
+			mes "I don't care if you're the right one so long as you look it and I can take you dead or alive.";
+		}
+		else {
+			mes "[Suspicious Man]";
+			mes "It's you again! You've got guts to come back here!";
+		}
+		next;
+		if (select("Make a run for it.:Fight him.") == 1)
+			mes "^0000ffI should run for now and think about this later.^000000";
+		else
+			mes "^0000ffHe's not the only bounty hunter after me, if he's telling the truth. I need time to strategize.^000000";
+		close2;
+		if (isbegin_quest(12340) == 0)
+			setquest 12340;// Rebellion Job Change Quest
+		warp "moc_fild12",186,83;
+	}
+	end;
+}
+
+einbroch,54,97,3	script	Bouncer	4_M_REBELLION,{
+	if (BaseClass != Job_Gunslinger) {
+		mes "[Bouncer]";
+		mes "No loitering around the venue.";
+		close;
+	}
+	switch( isbegin_quest(12340) ) {
+	case 0:
+		mes "[Bouncer]";
+		mes "Under construction, can't get in.";
+		close;
+	case 1:
+		mes "[Bouncer]";
+		mes "*Gasp* You! I thought you were already captured. Ooh, doesn't matter now. You're my Get Out of Jail Free card!";
+		next;
+		select("I'm not the criminal you think I am!");
+		mes "[Bouncer]";
+		mes "You aren't?";
+		next;
+		mes "^0000ffThe bouncer examines your face.^000000";
+		next;
+		mes "[Bouncer]";
+		mes "Hm, you bear a striking resemblance, though you don't look not as menacing as that criminal Spike";
+		next;
+		select("I want to talk to the poster publisher.");
+		mes "[Bouncer]";
+		mes "Your problem is a bit out of my league. Get in. If I find out you're the real deal all along, I'll see that you'll never see the outside again.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	case 2:
+		mes "[Bouncer]";
+		mes "You're back. Why?";
+		next;
+		if (select("I want in.:I was passing by.") == 2) {
+			mes "[Bouncer]";
+			mes "You're silly.";
+			close;
+		}
+		mes "[Bouncer]";
+		mes "Go ahead. Stay out of trouble.";
+		close2;
+		warp "job_gun",70,28;
+		end;
+	}
+}
+
+job_gun,68,33,3	script	Ruthless Rebellion	4_F_REBELLION,{
+	mes "[Ruthless Rebellion]";
+	mes "Do you know how to use a gun?";
+	close;
+}
+
+job_gun,78,33,3	script	Suspicious Gunslinger	4_M_JOB_BLACKSMITH,{
+	mes "[Suspicious Gunslinger]";
+	mes "...";
+	next;
+	mes "[Quiet Gunslinger]";
+	mes "Don't say I look like a blacksmith you know.";
+	close;
+}
+
+job_gun,74,24,6	script	Drunken Man	4_M_LIEMAN,{
+	mes "[Drunken Man]";
+	mes "*Hiccups* Oh, I'm the owner here.";
+	mes "Oh wait, am I in the pub or someplace else? Zzz...";
+	close;
+}
+
+job_gun,64,33,6	script	Anxious Man	4_M_ALCHE_A,{
+	mes "[Anxious Man]";
+	mes "Maybe I'm in the wrong place. This place doesn't look like a pub.";
+	close;
+}
+
+job_gun,86,29,3	script	Kulbertinov	4_M_REBELLION,{
+	if (Class == Job_Rebellion) {
+		mes "[Kulbertinov]";
+		mes "Do you want to see the boss?";
+		next;
+		if (select("Yes.:No.") == 1) {
+			close2;
+			warp "job_gun",220,130;
+			end;
+		}
+		end;
+	}
+	if (Class != Job_Gunslinger) {
+		mes "[Kulbertinov]";
+		mes "Are you looking for me?";
+		close;
+	}
+	switch( isbegin_quest(12340) ) {
+	case 0:
+		mes "[Kulbertinov]";
+		mes "Can I help you?";
+		close;
+	case 1:
+		mes "[Kulbertinov]";
+		mes "What do you want?";
+		next;
+		select("I'm mistaken for a criminal!.");
+		mes "[Kulbertinov]";
+		mes "Wait a minute... Mwah hah hah!";
+		next;
+		mes "^0000ffHe scans your face, then guffaws.^000000";
+		next;
+		mes "[Kulbertinov]";
+		mes "I'm sorry. For a moment, I thought Spike came back to life. He was found dead three days ago.";
+		next;
+		select("He was captured already?");
+		mes "[Kulbertinov]";
+		mes "Yes, and the bounty hunter was already paid. The news hasn't spread, and you're the spitting image of him. Go figure.";
+		next;
+		select("You have to do something!");
+		mes "[Kulbertinov]";
+		mes "I'm sorry, but I can't talk to every single bounty hunter for you. Of course, I'm willing to compensate for your inconvenience.";
+		next;
+		mes "[Kulbertinov]";
+		mes "Hey, how about you join our ranks? At the very last, you won't get shot.";
+		next;
+		select("You want me become a bounty hunter?");
+		mes "[Kulbertinov]";
+		mes "No, bounty hunting is just a pastime. We're the experts of all the firearms in the world.";
+		next;
+		mes "[Kulbertinov]";
+		mes "Carefree spirits!";
+		mes "Magical spitfires!";
+		mes "We call ourselves the ^0000ffRebellion^000000.";
+		next;
+		mes "[Kulbertinov]";
+		mes "You look like you know how to use a gun. How'd you like to join our ranks? You won't have to worry about other bounty hunters anymore too.";
+		next;
+		if (select("Let me think it over.:I don't think I have a choice.") == 1) {
+			mes "[Kulbertinov]";
+			mes "You can think it over and over, but the answer won't change. Just take the offer.";
+		}
+		else {
+			mes "[Kulbertinov]";
+			mes "Good thinking. Might as well do it now and get it over with.";
+		}
+		next;
+		mes "[Kulbertinov]";
+		mes "Talk to Enwin Conick. She guides drifting spirits like you to the way of the Rebellion. I'll send word to her. Ah, and don't point your gun at her.";
+		completequest 12340;
+		setquest 12341;// Rebellion Job Change Quest
+		close2;
+		warp "job_gun",19,15;
+		end;
+	case 2:
+		mes "[Kulbertinov]";
+		mes "Do you have business with Elwin Conick?";
+		next;
+		if (select("No.:Send me to Elwin Conick.") == 1) {
+			mes "[Kulbertinov]";
+			mes "All right. Care for a shot of vodka?";
+			close;
+		}
+		mes "[Kulbertinov]";
+		mes "Okay, I'll let her know.";
+		close2;
+		warp "job_gun",19,15;
+		end;
+	}
+}
+
+job_gun,19,24,3	script	Elwin Conick#1	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12341) == 1) {
+		mes "[Elwin Conick]";
+		mes "Do you to join us Rebellions?";
+		next;
+		mes "^0000ffThe short woman with keen eyes stares into your eyes.^000000";
+		next;
+		mes "[Elwin Conick]";
+		mes "Sign here.";
+		next;
+		mes "^0000ffThe undersigned party '_____' will not speak of the test even if he or she suffers injury, mutilation, or death in an unforeseen accident that may occur during the test.^000000";
+		next;
+		select("WHAT?!");
+		mes "[Elwin Conick]";
+		mes "Do you want join us or not?";
+		next;
+		if (select("I give up.:...I'll sign.") == 1) {
+			mes "[Elwin Conick]";
+			mes "Your choice.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Good. Now, follow me.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	if (isbegin_quest(12342) == 1) {
+		mes "[Elwin Conick]";
+		mes "Do you want to try again?";
+		next;
+		if (select("I give up.:Do it.") == 1) {
+			mes "[Elwin Conick]";
+			mes "Your choice.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Follow me.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	if (isbegin_quest(12343) > 0) {
+		mes "[Elwin Conick]";
+		if (isbegin_quest(12343) == 1)
+			mes "You still have Ivan's shooting test, do you want to try again?";
+		else
+			mes "Ivan's shooting test have not finished yet, do you want to try again?";
+		next;
+		if (select("I give up.:Do it.") == 1) {
+			mes "[Elwin Conick]";
+			mes "It's not worth to give up, now go out and relax.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Remember to give your best.";
+		close2;
+		warp "job_gun",120,130;
+		end;
+	}
+	if (isbegin_quest(12345) == 1) {
+		mes "[Elwin Conick]";
+		mes "Ivan is waiting for you, go find him.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	mes "[Elwin Conick]";
+	mes "You have no more test to take. Why don't you go out and have a drink?";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,117,46,3	script	Elwin Conick#2	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	.@emt_chk = getstatus(SC_MONSTER_TRANSFORM,1);
+	.@quest_12341 = isbegin_quest(12341);
+	.@quest_12342 = isbegin_quest(12342);
+	if (.@emt_chk == 3169) {
+		mes "^0000ffYou are already in the test form. If you have finished all your tests, report to Elwin Conick in the Assembly Room^000000.";
+		close;
+	}
+	if (.@emt_chk) {
+		mes "[Elwin Conick]";
+		mes "Look at yourself, do you really want to test?";
+		next;
+		mes "^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000";
+		next;
+		if (select("Wait.:Go away.") == 2) {
+			mes "[Elwin Conick]";
+			mes "Come back when you aren't in any form.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "It's not worth to give up, now go out and relax.";
+		close;
+	}
+	if (.@quest_12341 == 1 || .@quest_12342 == 1) {
+		if (countitem(6746)) {
+			mes "[Elwin Conick]";
+			mes "Any leftover Steel Artifacts must be returned after the test.";
+			delitem 6746,countitem(6746);// Steel_Article
+			close;
+		}
+		if (countitem(6747)) {
+			mes "[Elwin Conick]";
+			mes "Any leftover Steel Artifacts must be returned after the test.";
+			delitem 6747,countitem(6747);// Steel_Article_
+			close;
+		}
+		if ((countitem(13118) - isequipped(13118)) > 0) {
+			mes "[Elwin Conick]";
+			mes "Time over. You failed the test. Let me take all your leftover test materials.";
+			delitem 13118,1;// Tiny_Flame
+			close;
+		}
+		if (.@quest_12342 == 1)
+			.@menu$ = "Got it.";
+		else {
+			.@menu$ = "Okay.";
+			setquest 12342;// Rebellion Job Change Quest
+			completequest 12341;
+		}
+		mes "[Elwin Conick]";
+		mes "Listen up. I'm not going to great lengths trying to explain the test to you.";
+		next;
+		select( .@menu$ );
+		mes "[Elwin Conick]";
+		if (.@quest_12341 == 1) {
+			mes "This is where the firearm molds are cast. Everywhere you can see Steel Artifacts are being produced.";
+			next;
+			mes "[Elwin Conick]";
+			mes "We Rebellions are weapon experts at heart. Here you will learn to create and assemble firearms.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll be asked to control the furnace controller near the entrance and select 5 standard Steel Artifacts.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll then take them to the next Assembly Room and assemble them info a firearm. You'll be given 3 minutes to do all that. You'd better be fast and focused, or you will fail the test.";
+			next;
+			mes "[Elwin Conick]";
+			mes "I'll be in the next room, waiting for you to bring me a complete firearm. To check the elapsed time, you'll be transformed into a different job. ^0000ffIf you pass 3 minutes and turn back to normal, go back to me and start the test again.^000000.";
+		}
+		else {
+			mes "You'll be asked to control switches on the machine and select 5 standard Steel Artifacts.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll then take them to the next Assembly Room and assemble them into a complete firearm. You'll be given 3 minutes to finish all that. ^0000ffTo check the elapsed time, you'll be transformed into a different job^000000.";
+			next;
+			mes "[Elwin Conick]";
+			mes "I'll be in the next room, waiting for you to bring me a complete firearm. Remember, ^0000ffyou fail the test when your transformation expires after 3 minutes^000000.";
+		}
+		transform 3169,180000;
+		close;
+	}
+	mes "[Elwin Conick]";
+	mes "Ah? Are you lost? You need to register first and then get back here.";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,198,39,3	script	Elwin Conick#3	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12342) == 1) {
+		.@emt_chk = getstatus(SC_MONSTER_TRANSFORM,1);
+		if (.@emt_chk == 3169) {
+			if ((countitem(13118) - isequipped(13118)) < 1) {// don't count if equipped
+				mes "[Elwin Conick]";
+				mes "Are you done? I don't see any completed firearm in your inventory.";
+				close;
+			}
+			mes "[Elwin Conick]";
+			mes "It's shoddy but not bad, given the time. You passed.";
+			delitem 13118,1;// Tiny_Flame
+			next;
+			mes "[Elwin Conick]";
+			mes "Let me take all your leftover test materials.";
+			delitem 6746,countitem(6746);// Iron_Artifact
+			delitem 6747,countitem(6747);// Steel_Artifact
+			next;
+			mes "[Elwin Conick]";
+			mes "Now you can move on to the next course. Ivan Sidorenko will oversee your test.";
+			completequest 12342;
+			close2;
+			warp "job_gun",120,133;
+			end;
+		}
+		if (.@emt_chk) {
+			mes "[Elwin Conick]";
+			mes "Look at yourself, do you really want to test?";
+			next;
+			mes "^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000";
+			next;
+			if (select("Wait.:Go away.") == 2) {
+				mes "[Elwin Conick]";
+				mes "Come back when you aren't in any form.";
+				close2;
+				warp "job_gun",81,29;
+				end;
+			}
+			mes "[Elwin Conick]";
+			mes "It's not worth to give up, now go out and relax.";
+			close;
+		}
+		mes "[Elwin Conick]";
+		mes "Time over. You failed the test. Let me take all your leftover test materials.";
+		delitem 6746,countitem(6746);// Iron_Artifact
+		delitem 6747,countitem(6747);// Steel_Artifact
+		delitem 13118,(countitem(13118) - isequipped(13118));// Tiny_Flame
+		next;
+		mes "[Elwin Conick]";
+		mes "Let's start again.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	mes "[Elwin Conick]";
+	mes "Ah? Are you lost? You need to register first and then get back here.";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,165,18,0	script	Furnace Controller#1	CLEAR_NPC,{
+	if (Class != Job_Gunslinger) {
+		mes "Only authorized user can do the operation.";
+		close;
+	}
+	if (getstatus(SC_MONSTER_TRANSFORM,1) == 3169) {// J_REB_SHECIL1
+		if (isbegin_quest(12342) == 1) {
+			mes "Do you want to dredge the mold up from the furnace?";
+			next;
+			if (select("Quit.:Begin.") == 1) {
+				mes "Switch to the Standby mode.";
+				close;
+			}
+			mes "Initializing Furnace Controller ZX-3100...";
+			disablenpc "Furnace Controller#1";
+			donpcevent "Furnace Controller#2::OnStart";
+			close;
+		}
+	}
+	mes "Not an authorized user. Abort the operation.";
+	close;
+}
+
+job_gun,214,36,0	script	Auto Anvil#1	CLEAR_NPC,{
+	if (Class != Job_Gunslinger) {
+		mes "Only authorized user can do the operation.";
+		close;
+	}
+	if ((countitem(13118) - isequipped(13118)) > 0) {// Tiny_Flame
+		mes "Unauthorized firearm creation has been detected. Report to Manager Elwin.";
+		close;
+	}
+	if (getstatus(SC_MONSTER_TRANSFORM,1) == 3169) {
+		if (countitem(6747) < 5) {// Steel_Article_
+			mes "You do not have standard Steel Artifacts.";
+			close;
+		}
+		if (isbegin_quest(12342) == 1) {
+			mes "Do you want to use the auto anvil and shape the standard Steel Artifacts into a firearm?";
+			next;
+			if (select("Quit.:Begin.") == 1) {
+				mes "For your safety, please step away from the auto anvil.";
+				close;
+			}
+			if (rand(1,10) > 6) {
+				mes "You have successfully created a firearm using the auto anvil. ^ff0000Please report before your transformation expires^000000.";
+				specialeffect EF_REPAIRWEAPON;
+				getitem 13118,1;// Tiny_Flame
+			}
+			else {
+				mes "Failed to create a firearm.";
+				specialeffect EF_SUI_EXPLOSION;
+			}
+			delitem 6747,5;// Steel_Article_
+			close;
+		}
+	}
+	mes "Not an authorized user. Abort the operation.";
+	close;
+}
+
+job_gun,165,18,0	script	Furnace Controller#2	CLEAR_NPC,{
+	mes "The system is busy dredging a completed mold from the furnace.";
+	close;
+
+OnStart:
+	enablenpc "Furnace Controller#2";
+	sleep 3000;
+	mapannounce "job_gun","Furnace Controller: Dredging a mold up from the furnace... Workers, stand by at the production line.",bc_map,"0x00ff44";
+	sleep 500;
+	for ( .@i = 0; .@i < 30; ++.@i ) {
+		.@eff_rnd = rand(1,100);
+		if (.@eff_rnd < 33)
+			donpcevent "Heating Furnace#3::OnStart";
+		else if (.@eff_rnd > 66)
+			donpcevent "Heating Furnace#4::OnStart";
+		else
+			donpcevent "Heating Furnace#5::OnStart";
+		sleep 200;
+		.@d_itemx = rand(127,143);
+		.@d_itemy = rand(26,29);
+		makeitem 6746,1,"job_gun",.@d_itemx,.@d_itemy;// Steel_Article
+		if (rand(1,10) > 7)
+			makeitem 6747,1,"job_gun",.@d_itemx,.@d_itemy;// Steel_Article_
+		sleep 500;
+	}
+	sleep 2000;
+	mapannounce "job_gun","Furnace Controller: Finishing the operation... Entering Standby mode in 15 seconds.",bc_map,"0x00ff44";
+	sleep 15000;
+	disablenpc "Furnace Controller#2";
+	enablenpc "Furnace Controller#1";
+	end;
+OnInit:
+	disablenpc "Furnace Controller#2";
+	end;
+}
+
+job_gun,130,31,0	script	Heating Furnace#3	CLEAR_NPC,{
+	end;
+OnStart:
+	specialeffect EF_FIREPILLAR;
+	sleep 500;
+	specialeffect EF_FIREPILLARBOMB;
+	end;
+}
+job_gun,136,31,0	duplicate(Heating Furnace#3)	Heating Furnace#4	CLEAR_NPC
+job_gun,141,31,0	duplicate(Heating Furnace#3)	Heating Furnace#5	CLEAR_NPC
+
+job_gun,120,138,3	script	Ivan Sidorenko#1	4_M_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Ivan Sidorenko]";
+		mes "This is shooting test area, you can't come here as you like.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12342) < 2) {
+		mes "[Ivan Sidorenko]";
+		mes "There seems to be a mistake, you can't stay here.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12343) == 0) {
+		mes "[Ivan Sidorenko]";
+		mes "Hey, stay focused--we're using live ammo here, and you can get shot anytime.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let me make this quick. Basically you'll be running in this shooting range consisting of 5 sections.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "The objective is to find enemies in the midst of a crowd quickly and without fail.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Among all the targets, you must shoot only the ^0000ffStandard-issue Targets^000000. If you make a mistake, you'll lose points.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let's try. There aren't many ^0000ffStandard-issue Targets^000000, so keep your eyes peeled.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "^0000ffYou have 3 minutes to finish this test. If you can't finish before your transformation expires^000000, you'll fail. If that happens, just follow the path back to me.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "^0000ffYou'll fail if you miss a Standard-issue Target, or shoot 3 incorrect targets^000000. Let's get started.";
+		setquest 12343;// Rebellion Job Change Quest
+		setquest 12344;// Rebellion Job Change Quest
+		transform 3169,180000;
+		close2;
+		warp "job_gun",102,146;
+		end;
+	}
+	if (isbegin_quest(12343) == 1) {
+		if (checkquest(12343,HUNTING) == 2)
+			.@j_r_s = 10;
+		if (checkquest(12344,HUNTING) == 2)
+			.@j_r_f = 2;
+		if (getstatus(SC_MONSTER_TRANSFORM,1) != 3169)
+			.@j_r_t = 5;
+		.@j_r_c = .@j_r_s - .@j_r_f - .@j_r_t;
+		if (.@j_r_c > 9) {
+			mes "[Ivan Sidorenko]";
+			mes "Good job. I didn't think you could pass so quickly.";
+			completequest 12343;
+			completequest 12344;
+			setquest 12345;// Rebellion Job Change Quest
+			next;
+			mes "[Ivan Sidorenko]";
+			mes "You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.";
+			close2;
+			warp "job_gun",210,132;
+			end;
+		}
+		if (.@j_r_c == 8) {
+			mes "[Ivan Sidorenko]";
+			mes "You're quick enough, but you shot too many incorrect targets. You failed.";
+		}
+		else if (.@j_r_c == 5) {
+			mes "[Ivan Sidorenko]";
+			mes "You accurate enough, but you took too much time. Slow Rebellions don't survive long enough.";
+		}
+		else if (.@j_r_c < 5) {
+			mes "[Ivan Sidorenko]";
+			mes "You failed at both speed and accuracy. How did you survive this long?";
+		}
+		else {
+			mes "[Ivan Sidorenko]";
+			mes "There's a problem, the statistic seems to be wrong. Well... This can happen sometimes.";
+		}
+		erasequest 12343;
+		erasequest 12344;
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let's try again. Be more careful this time.";
+		setquest 12343;
+		setquest 12344;
+		transform 3169,180000;
+		close2;
+		warp "job_gun",102,146;
+		end;
+	}
+	mes "[Ivan Sidorenko]";
+	mes "How did you not leave?";
+	next;
+	mes "[Ivan Sidorenko]";
+	mes "You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.";
+	close2;
+	warp "job_gun",210,132;
+	end;
+}
+
+job_gun,1,4,0	script	#target	CLEAR_NPC,{
+	end;
+OnStart:
+	killmonster "job_gun","#target::OnMyMobDead";
+OnInit:
+OnMyMobDead:
+	hideonnpc "#target";
+	while( mobcount("job_gun","#target::OnMyMobDead") < 16 ) {
+		.@m_rg = rand(1,5);
+		if (.@m_rg == 1)
+			monster "job_gun",rand(88,99),rand(143,147),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 2)
+			monster "job_gun",rand(92,96),rand(95,122),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 3)
+			monster "job_gun",rand(143,159),rand(99,100),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 4)
+			monster "job_gun",rand(157,158),rand(137,160),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else
+			monster "job_gun",rand(119,134),rand(156,160),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+	}
+	end;
+}
+
+job_gun,1,5,0	script	#nontarget	CLEAR_NPC,{
+	end;
+OnStart:
+	killmonster "job_gun","#nontarget::OnMyMobDead";
+OnInit:
+OnMyMobDead:
+	hideonnpc "#nontarget";
+	while( mobcount("job_gun","#nontarget::OnMyMobDead") < 56 ) {
+		.@m_rg = rand(1,5);
+		if (.@m_rg == 1)
+			monster "job_gun",rand(88,99),rand(143,147),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 2)
+			monster "job_gun",rand(92,96),rand(95,122),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 3)
+			monster "job_gun",rand(143,159),rand(99,100),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 4)
+			monster "job_gun",rand(157,158),rand(137,160),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else
+			monster "job_gun",rand(119,134),rand(156,160),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+	}
+	end;
+}
+
+job_gun,220,132,3	script	Ivan Sidorenko#2	10062,{
+	if (!checkweight(1201,1)) {
+		mes "You have too many items, please reduce them to continue.";
+		close;
+	}
+	if ((MaxWeight - Weight) < 1000) {
+		mes "The items in your inventory are weighing you down. Lighten your weight first.";
+		close;
+	}
+	if (isbegin_quest(12345) == 0) {
+		mes "[Ivan Sidorenko]";
+		mes "There must have been a mistake. You aren't supposed to remain here.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (Class == Job_Gunslinger) {
+		if (BaseLevel < 99 || JobLevel < 70) {
+			mes "[Ivan Sidorenko]";
+			mes "Huh? You look so weak? I have nothing more to say.";
+			close;
+		}
+		if (SkillPoint) {
+			mes "[Ivan Sidorenko]";
+			mes "Oh no~ You still have Skill Points.";
+			close;
+		}
+		mes "[Ivan Sidorenko]";
+		mes "Kulbertinov, Elwin, and I've evaluated your Rebellion test results.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And...";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "You've met all our requirements including the attitude and the test performance.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "That's right, you're now a member of the Rebellion. Get ready to be wowed.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And Elwin wants you to have this. Take good care of it. He made it for you.";
+		jobchange Job_Rebellion;
+		completequest 12345;
+		getitem 13119,1;// Freedom_Flame
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "See you later.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (Class == Job_Rebellion) {
+		mes "[Ivan Sidorenko]";
+		mes "This life should be fun, not boring.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And by becoming a Rebellion your life should be upgraded. So, go and create a great journey, make us proud!";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	mes "[Ivan Sidorenko]";
+	mes "Do you have something to say to me, don't you?";
+	close;
+}
+
+job_gun,220,138,4	shop	Prop Vending Machine	2_VENDING_MACHINE1,13210:-1,13211:-1,13212:-1,13213:-1,13214:-1,7663:-1,7664:-1,7665:-1
+
+job_gun,216,138,4	script	Butler Karlex	1_M_01,{
+	mes "[Butler Karlex]";
+	mes "Use this temporary storage to keep your items safe while on the Advancement test.";
+	next;
+	.@s = select("Quit.:Open the storage.");
+	mes "[Butler Karlex]";
+	mes "Thank you for using the service.";
+	close2;
+	if (.@s == 2)
+		openstorage;
+	end;
+}
+
+job_gun,56,26,0	warp	rebelroom#1	2,2,einbroch,49,97
+job_gun,18,10,0	warp	rebelroom#2	2,2,job_gun,81,29
+job_gun,165,22,0	warp	rebelroom#3	2,2,job_gun,196,35
+job_gun,197,49,0	warp	rebelroom#4	2,2,job_gun,157,21
+job_gun,88,144,0	warp	shootingrange#1	3,3,job_gun,93,123
+job_gun,105,97,0	warp	shootingrange#2	3,3,job_gun,125,98
+job_gun,156,115,0	warp	shootingrange#3	3,3,job_gun,157,137
+job_gun,152,154,0	warp	shootingrange#4	3,3,job_gun,135,154
+job_gun,130,146,0	warp	shootingrange#5	3,3,job_gun,120,130
+
+
+job_gun,1,1,0	script	Admin1	CLEAR_NPC,{
+	callfunc "F_GM_NPC";
+	if (callfunc("F_GM_NPC",1854,0) != 1)
+		end;
+	mes "[Time Manager]";
+	mes "What time would you like to return?";
+	next;
+	switch( select("Cancel:Test monster spawn:Start from beginning:Furnace Zone:Shooting Zone:Complete the test") ) {
+	case 1:
+		end;
+	case 2:
+		donpcevent "#target::OnStart";
+		donpcevent "#nontarget::OnStart";
+		end;
+	case 3:
+		callsub S_Quest,0,0;
+	case 4:
+		callsub S_Quest,12341,12341;
+	case 5:
+		callsub S_Quest,12342,12342;
+	case 6:
+		callsub S_Quest,12345,12344;
+	}
+	end;
+
+S_Quest:
+	setarray .@arguments[0], getarg(0), getarg(1);
+	for ( .@quest = 12340; .@quest <= 12345; ++.@quest ) {
+		if (isbegin_quest(.@quest) > 0)
+			erasequest .@quest;
+		if (.@quest <= .@arguments[0])
+			setquest .@quest;
+		if (.@quest <= .@arguments[1])
+			completequest .@quest;
+	}
+	end;
+}

+ 1 - 0
npc/re/mapflag/nobranch.txt

@@ -23,6 +23,7 @@ job3_guil01	mapflag	nobranch
 job3_guil02	mapflag	nobranch
 job3_guil03	mapflag	nobranch
 job_ko	mapflag	nobranch
+job_gun	mapflag	nobranch
 job3_rang01	mapflag	nobranch
 job3_rang02	mapflag	nobranch
 job3_rune01	mapflag	nobranch

+ 1 - 0
npc/re/mapflag/nomemo.txt

@@ -68,6 +68,7 @@ gld2_gef	mapflag	nomemo
 gld2_pay	mapflag	nomemo
 gld2_prt	mapflag	nomemo
 job_ko	mapflag	nomemo
+job_gun	mapflag	nomemo
 ma_scene01	mapflag	nomemo
 ma_in01	mapflag	nomemo
 ma_dun01	mapflag	nomemo

+ 1 - 0
npc/re/mapflag/nopenalty.txt

@@ -70,3 +70,4 @@ job3_gen01	mapflag	nopenalty
 // Ext --------------------
 job3_sha01	mapflag	nopenalty
 job_ko	mapflag	nopenalty
+job_gun	mapflag	nopenalty

+ 1 - 0
npc/re/mapflag/nosave.txt

@@ -28,6 +28,7 @@ job3_gen01	mapflag	nosave	SavePoint
 // Ext
 job3_sha01	mapflag	nosave	SavePoint
 job_ko	mapflag	nosave	SavePoint
+job_gun	mapflag	nosave	SavePoint
 
 //Guild Dungeons ==============================
 gld_dun01_2	mapflag	nosave	SavePoint

+ 1 - 0
npc/re/mapflag/noteleport.txt

@@ -58,6 +58,7 @@ ma_zif07	mapflag	noteleport
 ma_zif08	mapflag	noteleport
 ma_zif09	mapflag	noteleport
 job_ko	mapflag	noteleport
+job_gun	mapflag	noteleport
 ecl_in01	mapflag	noteleport
 ecl_in02	mapflag	noteleport
 ecl_in03	mapflag	noteleport

+ 2 - 0
npc/re/mapflag/nowarp.txt

@@ -22,3 +22,5 @@ te_aldecas2	mapflag	nowarp
 te_aldecas3	mapflag	nowarp
 te_aldecas4	mapflag	nowarp
 te_aldecas5	mapflag	nowarp
+
+job_gun	mapflag	nowarp

+ 2 - 0
npc/re/mapflag/nowarpto.txt

@@ -65,3 +65,5 @@ te_aldecas2	mapflag	nowarpto
 te_aldecas3	mapflag	nowarpto
 te_aldecas4	mapflag	nowarpto
 te_aldecas5	mapflag	nowarpto
+
+job_gun	mapflag	nowarpto

+ 15 - 6
npc/re/merchants/shadow_refiner.txt

@@ -15,12 +15,12 @@
 	mes "Do you want to refine a shadow item? Pick yer poison!";
 	next;
 	setarray .@indices[1], EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L;
-	for(.@i = 1; .@i <= EQI_SHADOW_ACC_L; .@i++)
+	.@indlen = getarraysize(.@indices) - 1;
+	for(.@i = 1; .@i <= .@indlen; .@i++)
 		.@menu$ = .@menu$ + (getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Not equipped]") +":";
 	.@menu$ = .@menu$ + "Refine info";
-	.@part = .@indices[select(.@menu$)];
-
-	if (.@part == EQI_SHADOW_ACC_L + 1) { // Refine info
+	.@choice = select(.@menu$);
+	if (.@choice == .@indlen + 1) { // Refine info
 		mes "[Shadow Blacksmith]";
 		mes "When a shadow item is refined, it gains extra bonuses very much like normal items.";
 		next;
@@ -35,6 +35,15 @@
 		mes "HD ores can be used for gear that is at least refine level +7 and will prevent breaking as long as you stay talking to me.";
 		close;
 	}
+	
+	.@part = .@indices[.@choice];
+	
+	if (!getequipisequiped(.@part)) {
+		mes "[Shadow Blacksmith]";
+		mes "There's nothing here!";
+		close;
+	}
+	
 	while(1) {
 		mes "[Shadow Blacksmith]";
 		mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt.";
@@ -84,7 +93,7 @@
 		.@choose = .@material[.@option-1];
 		if (!countitem(.@choose)) {
 			mes "[Shadow Blacksmith]";
-			mes "You do not have enough "+ getitemname(.@choose) +" / "+ getitemname(.@choose) +".";
+			mes "You do not have enough "+ getitemname(.@choose) +".";
 			close;
 		}
 		if (Zeny < .@zeny_cost) {
@@ -140,4 +149,4 @@
 }
 
 //moc_paraup,45,185,5	duplicate(ShadowBlacksmith)	Shadow Blacksmith#eden1	4_F_JOB_BLACKSMITH // Commented out until it's added to the map index
-prt_in,59,54,3	duplicate(ShadowBlacksmith)	Shadow Blacksmith#itemmall	4_F_JOB_BLACKSMITH
+prt_in,61,54,3	duplicate(ShadowBlacksmith)	Shadow Blacksmith#itemmall	4_F_JOB_BLACKSMITH

+ 1 - 0
npc/re/merchants/shops.txt

@@ -125,6 +125,7 @@ prt_in,109,68,4	shop	Trap Specialist#prt	66,7940:-1,12341:-1
 prt_in,175,137,4	shop	Black Marketeer#prt	49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
 s_atelier,17,110,1	shop	Part-Timer#sc_prt	67,6123:-1,6120:-1
 prontera,96,209,4	shop	Rebellion Accessories	564,13210:-1,13211:-1,13212:-1,7663:-1,7664:-1,7665:-1,7940:300,13200:-1,13201:-1,13202:-1,13203:-1,13204:-1,13205:-1,13206:-1,13207:-1
+//prontera,96,209,4	shop	Rebellion Prop Vending	564,13210:-1,13211:-1,13212:-1,7663:-1,7664:-1,7665:-1,7940:300,13200:-1,13221:-1,13222:-1,13215:-1,13216:-1,13217:-1,13218:-1,13219:-1,13220:-1,13223:-1,13224:-1,13225:-1,13226:-1,13227:-1
 prontera,92,209,4	shop	Rebellion Weapons	564,13120:-1,13122:-1,13189:-1,13190:-1,13192:-1,13193:-1,13194:-1,13197:-1,13198:-1,28200:-1,28201:-1
 
 //=======================================================

+ 1 - 0
npc/re/scripts_jobs.conf

@@ -12,6 +12,7 @@ npc: npc/re/jobs/1-1/swordman.txt
 npc: npc/re/jobs/1-1/thief.txt
 // - 2e
 npc: npc/re/jobs/2e/kagerou_oboro.txt
+npc: npc/re/jobs/2e/rebellion.txt
 // - 3-1
 npc: npc/re/jobs/3-1/archbishop.txt
 npc: npc/re/jobs/3-1/mechanic.txt

+ 59 - 59
sql-files/item_db.sql

@@ -1558,7 +1558,7 @@ REPLACE INTO `item_db` VALUES (2703,'Expert_Ring','Expert Ring',4,20,NULL,150,NU
 REPLACE INTO `item_db` VALUES (2704,'Golden_Accessory','Golden Accessories',4,20,NULL,100,NULL,4,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bMdef,4;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2705,'Golden_Accessory2','Golden Accessories',4,20,NULL,100,NULL,4,NULL,0,0xFFFFFFFF,7,2,136,NULL,NULL,NULL,NULL,'bonus2 bAddMonsterDropItem,12018,500;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2706,'Handcuff','Arrest Handcuffs',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (2707,'GUSLI','GUSLI',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (2707,'Gusli','GUSLI',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (2708,'Chinese_Handicraft','Chinese Handicraft',4,0,NULL,50,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus3 bAutoSpell,"MG_FIREBOLT",5,300;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2709,'5_Anniversary_Coin','5th Anniversary Coin',4,2,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAtkRate,5; bonus bMatkRate,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2710,'Bloody_Iron_Ball_C','Bloody Iron Ball',4,1,NULL,0,NULL,0,NULL,0,0xFFFFFFFE,7,2,136,NULL,0,0,0,'bonus bBaseAtk,30;',NULL,NULL);
@@ -2116,7 +2116,7 @@ REPLACE INTO `item_db` VALUES (4447,'Centipede_Card','Centipede Card',6,20,NULL,
 REPLACE INTO `item_db` VALUES (4448,'Cornus_Card','Cornus Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Holy,20; bonus2 bAddEle,Ele_Holy,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4449,'Dark_Shadow_Card','Dark Shadow Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Dark,20; bonus2 bAddEle,Ele_Dark,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4450,'Banshee_Master_Card','Banshee Master Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMatk,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4451,'Entweihen_Card','Entweihen Crothen Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bMatk,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4451,'Ant_Buyanne_Card','Entweihen Crothen Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bMatk,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4452,'Centipede_Larva_Card','Centipede Larva Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMatk,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4453,'Hilsrion_Card','Hillsrion Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,25;',NULL,NULL);
 # Armor Enchant System
@@ -2181,8 +2181,8 @@ REPLACE INTO `item_db` VALUES (4756,'Luck7','LUK+7',6,20,NULL,10,NULL,NULL,NULL,
 REPLACE INTO `item_db` VALUES (4757,'Luck8','LUK+8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,8;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4758,'Luck9','LUK+9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,9;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4759,'Luck10','LUK+10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4760,'Magic_Attack1','MATK+1%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4761,'Magic_Attack2','MATK+2%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,2;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4760,'Matk1','MATK+1%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4761,'Matk2','MATK+2%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4762,'Evasion6','FLEE+6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,6;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4763,'Evasion12','FLEE+12',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,12;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4764,'Critical5','CRI+5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,5;',NULL,NULL);
@@ -2782,10 +2782,10 @@ REPLACE INTO `item_db` VALUES (5570,'Gemini_Crown','Gemini Crown',4,20,NULL,300,
 #REPLACE INTO `item_db` VALUES (5571,'Rasta_Wig','Rasta_Wig',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,552,'bonus bStr,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5572,'Savage_Baby_Hat','Savage Babe Hat',4,20,NULL,100,NULL,1,NULL,1,0xFFFFFFFF,7,2,256,NULL,1,1,553,'bonus bVit,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5573,'Bogy_Horn','Dokebi Horn',4,20,NULL,100,NULL,1,NULL,1,0xFFFFFFFF,7,2,256,NULL,0,1,554,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (5574,'Pencil_in_Mouth','Well-Chewed Pencil',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,10,0,555,'bonus bdex,2; bonus bHitRate,3;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (5574,'Pencil_In_Mouth','Well-Chewed Pencil',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,10,0,555,'bonus bdex,2; bonus bHitRate,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5575,'Onigiri_Hat','Rice Ball Hat',4,20,NULL,100,NULL,6,NULL,1,0xFFFFFFFF,7,2,256,NULL,30,0,556,NULL,NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5576,'Japan_Winecup','Wine Cup',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,557,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (5577,'Dark_Knight_Mask_','Dark Knight Mask',4,NULL,NULL,3000,NULL,5,NULL,0,0xFFFFFFFF,7,2,769,NULL,80,1,479,'bonus bStr,3;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (5577,'Dark_Knight_MaskB','Dark Knight Mask',4,NULL,NULL,3000,NULL,5,NULL,0,0xFFFFFFFF,7,2,769,NULL,80,1,479,'bonus bStr,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5578,'Voyage_Hat','Voyage_Hat',4,200,NULL,10,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,236,'bonus bAgi,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5579,'Wanderer\'s_Sakkat','Wanderer\'s Sakkat',4,20,NULL,300,NULL,2,NULL,1,0xFFFFFFFF,7,2,768,NULL,70,1,558,'bonus bAgi,2;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5580,'Red_Beret','Red Beret',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,0,559,'bonus bAllStats,3; bonus bMdef,3;',NULL,NULL);
@@ -2800,8 +2800,8 @@ REPLACE INTO `item_db` VALUES (5587,'Mosquito_Coil_1Use','Mosquito Coil',4,0,NUL
 #REPLACE INTO `item_db` VALUES (5589,'Leo_Diadem','Leo Diadem',4,20,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,70,1,566,'bonus bDex,2; bonus2 bSubEle,Ele_Fire,5; if(getrefine()>6) { bonus bFlee,10; bonus bAspdRate,3; autobonus "{ bonus bSplashRange,1; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5590,'K_Poring_Cake_Cap','Poring Cake Hat',4,20,NULL,200,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,417,NULL,NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5591,'Desert_Prince','Desert Prince',4,20,NULL,100,NULL,1,NULL,1,0xFFFFFFFF,7,2,256,NULL,30,0,567,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (5592,'Sigrun\'s_Wings','Sigrun\'s Wings',4,20,NULL,100,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,80,0,568,'if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) bonus bStr,1; else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||class==Job_Ninja||class==Job_Soul_Linker) bonus bInt,1; else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bDex,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,80; bonus bMaxSP,30; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (5593,'Rabbit_Bonnet_','Rabbit Bonnet',4,20,NULL,200,NULL,1,NULL,1,0xFFFFFFFF,7,2,768,NULL,1,1,549,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (5592,'Sigrun\'s_Wing','Sigrun\'s Wings',4,20,NULL,100,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,80,0,568,'if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) bonus bStr,1; else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||class==Job_Ninja||class==Job_Soul_Linker) bonus bInt,1; else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bDex,1; else if(BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,80; bonus bMaxSP,30; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (5593,'K_Rabbit_Bonnet','Rabbit Bonnet',4,20,NULL,200,NULL,1,NULL,1,0xFFFFFFFF,7,2,768,NULL,1,1,549,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (5594,'Donut_In_Mouth','Donut In Mouth',4,20,NULL,50,NULL,1,NULL,0,0xFFFFFFFF,7,2,1,NULL,1,0,569,NULL,NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5595,'Eye_Of_Juno','Eye Of Juno',4,20,NULL,400,NULL,2,NULL,1,0xFFFFFFFF,7,2,256,NULL,1,1,570,'bonus bMdef,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5596,'4Leaf_Clover_In_Mouth','4Leaf Clover In Mouth',4,20,NULL,0,NULL,2,NULL,0,0xFFFFFFFF,7,2,1,NULL,1,0,571,'bonus bMdef,2;',NULL,NULL);
@@ -2867,7 +2867,7 @@ REPLACE INTO `item_db` VALUES (5654,'Holy_Marching_Hat_J','Holy Marching Hat',4,
 #REPLACE INTO `item_db` VALUES (5656,'Scooter_Hat_J','Scooter Helmet',4,20,NULL,1000,NULL,7,NULL,1,0xFFFFFFFF,7,2,256,NULL,50,1,588,'bonus bUnbreakableHelm,0;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5657,'Antique_Pipe_J','Captain\'s Pipe',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,30,0,383,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (5658,'Imp_Hat','Imp Hat',4,20,NULL,400,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,1,1,589,'bonus3 bAutoSpell,"SA_FLAMELAUNCHER",1,5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (5659,'Sleeper_Hat','Sleeper Hat',4,20,NULL,400,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,1,1,590,'bonus3 bAutoSpell,"SA_SEISMICWEAPON",1,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (5659,'Sleepr_Hat','Sleeper Hat',4,20,NULL,400,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,1,1,590,'bonus3 bAutoSpell,"SA_SEISMICWEAPON",1,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (5660,'Gryphon_Hat','Gryphon Hat',4,20,NULL,400,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,1,1,591,'bonus3 bAutoSpell,"SA_LIGHTNINGLOADER",1,5;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5661,'Red_Pirate_Bandana','Red Pirate Banada',4,0,NULL,0,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,10,1,592,'bonus bStr,1; bonus bDex,1; bonus bAspdRate,2; bonus bCastRate,-2; bonus3 bAutoSpell,"MO_EXTREMITYFIST",1,30;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5662,'Libra_Crown','Libra Crown',4,10,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,1,1,593,'bonus bDex,3;',NULL,NULL);
@@ -4253,7 +4253,7 @@ REPLACE INTO `item_db` VALUES (7852,'Pass_F2','Divx Player Raffle Ticket',3,20,N
 REPLACE INTO `item_db` VALUES (7853,'Pass_F3','iPod nano Raffle Ticket',3,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (7854,'Pass_CF','Comodo Festival Ticket',3,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (7855,'Heart','Heart',3,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (7856,'Girl_Bunch_Of_Flower','Girl\'s Bouquet',3,20,NULL,50,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (7856,'Girl_Bunch_Of_Flower_','Girl\'s Bouquet',3,20,NULL,50,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (7857,'Handmade_Kitty_Doll','Hand-made Kitty Doll',3,20,NULL,30,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (7858,'Dragonball_Yellow_','Dragonball Yellow',3,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (7859,'Game_Ticket','Game Ticket',3,20,NULL,100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -4583,7 +4583,7 @@ REPLACE INTO `item_db` VALUES (11528,'Kanafeh','Kanafeh',0,1500,NULL,200,NULL,NU
 REPLACE INTO `item_db` VALUES (11529,'MAAMOUL_','Maamoul',0,500,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal 120,60;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (11530,'Jujube','Jujube',0,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal 30,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (11531,'Coffee','Coffee',0,10,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal 0,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (11701,'Girl_Bunch_Of_Flower_','Girl\'s Bouquet',0,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal rand(105,145),0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (11701,'Girl_Bunch_Of_Flower','Girl\'s Bouquet',0,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal rand(105,145),0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (11702,'Moon_Cookie','Moon Cookie',0,0,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (11703,'Mysterious_Blood','Mystery Blood',0,0,NULL,30,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal 0,rand(25,35);',NULL,NULL);
 REPLACE INTO `item_db` VALUES (11704,'KETUPAT_F','Ketupat',0,2,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal rand(70,90),0;',NULL,NULL);
@@ -4985,9 +4985,9 @@ REPLACE INTO `item_db` VALUES (12388,'Runstone_Crush','Rhydo Runestone For Appre
 REPLACE INTO `item_db` VALUES (12389,'Runstone_Storm','Pertz Runestone For Apprentice',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'/* if(strcharinfo(3)=="job3_rune02") { itemskill "RK_STORMBLAST",1; } */',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12390,'Runstone_Millennium','Verkana Runestone For Apprentice',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'/* if(strcharinfo(3)=="job3_rune02") { itemskill "RK_MILLENNIUMSHIELD",1; } */',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12391,'Lucky_Egg_C','Lucky Egg',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (12392,'Repair_A','Repair A',2,220,NULL,100,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(200,300),0; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12393,'Repair_B','Repair B',2,500,NULL,140,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(300,400),0; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12394,'Repair_C','Repair C',2,1100,NULL,180,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(400,500),0; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12392,'RepairA','Repair A',2,220,NULL,100,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(200,300),0; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12393,'RepairB','Repair B',2,500,NULL,140,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(300,400),0; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12394,'RepairC','Repair C',2,1100,NULL,180,NULL,NULL,NULL,NULL,0x00000400,8,2,NULL,NULL,NULL,NULL,NULL,'if ( checkmadogear() ) { itemheal rand(400,500),0; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12395,'Tantanmen','Tantan Noodle',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'pet 1519;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12396,'Fools_Day_Box','Gift Box?',11,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'.@rnd = rand(1,10); if(.@rnd==1) itemskill "AL_TELEPORT",1; else if(.@rnd==2) itemskill "AL_TELEPORT",3; else if(.@rnd==3) percentheal 50,0; else if(.@rnd==4) percentheal 0,50; else if(.@rnd==5) end; else if(.@rnd==6) getitem 512,1; else if(.@rnd==7) itemskill "ALL_REVERSEORCISH",1; else if(.@rnd==8) specialeffect2 EF_MAPPILLAR2; else if(.@rnd==9) specialeffect2 EF_ANGEL2; else specialeffect2 EF_COIN;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12397,'Fools_Day_Box2','Gift Box?',11,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'.@rnd = rand(1,10); if(.@rnd==1) itemskill "TF_DETOXIFY",1; else if(.@rnd==2) itemskill "TF_PICKSTONE",1; else if(.@rnd==3) itemskill "BA_FROSTJOKER",1; else if(.@rnd==4) itemskill "DC_SCREAM",1; else if(.@rnd==5) end; else if(.@rnd==6) getitem 909,1; else if(.@rnd==7) itemskill "AL_RUWACH",1; else if(.@rnd==8) specialeffect2 EF_BEGINASURA; else if(.@rnd==9) specialeffect2 EF_MVP; else specialeffect2 EF_CURSEATTACK;',NULL,NULL);
@@ -4996,7 +4996,7 @@ REPLACE INTO `item_db` VALUES (12399,'Castle_Treasure_Box','Castle Treasure Box'
 REPLACE INTO `item_db` VALUES (12400,'Water_Of_Blessing_','Water Of Blessing',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12401,'Rune_Kn_Test_Int','Rune Kn Test Int',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INCINT,300000,40;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12402,'29Fruit','29Fruit',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 5,5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12403,'Lucky_Egg2','Lucky Egg2',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (12403,'Lucky_Egg_C2','Lucky Egg2',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12404,'Acti_Potion','Acti Potion',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12405,'Underripe_Yggseed','Underripe Yggseed',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 30,30; skilleffect "AL_BLESSING",0; sc_start SC_BLESSING,140000,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12406,'Psychic_ArmorS','Psychic ArmorS',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -5014,23 +5014,23 @@ REPLACE INTO `item_db` VALUES (12417,'Boost500','Boost500',2,100,NULL,50,NULL,NU
 REPLACE INTO `item_db` VALUES (12418,'Full_SwingK','Full SwingK',2,100,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_FULL_SWING_K,500000,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12419,'Mana_Plus','Mana Plus',2,100,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_MANA_PLUS,500000,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12420,'Stamina_Up_M','Stamina Up M',2,100,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_MUSTLE_M,500000,5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12421,'Falmons_F','Falmons F',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LIFE_FORCE_F,500000,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12421,'Digestive_F','Falmons F',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LIFE_FORCE_F,500000,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12422,'HP_Increase_PotionS','HP Increase Potion (Small)',2,100,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,1; percentheal 1,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12423,'HP_Increase_PotionM','HP Increase Potion (Medium)',2,100,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,2; percentheal 2,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12424,'HP_Increase_PotionL','HP Increase Potion (Large)',2,100,NULL,80,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,3; percentheal 5,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12425,'SP_Increase_PotionS','SP Increase Potion (Small)',2,100,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,1; percentheal 0,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12426,'SP_Increase_PotionM','SP Increase Potion (Medium)',2,100,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,2; percentheal 0,4;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12427,'SP_Increase_PotionL','SP Increase Potion (Large)',2,100,NULL,80,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,3; percentheal 0,8;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12428,'Concentrated_White_Potion_Z','Concentrated White Potion Z',0,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12429,'Savage_Full_Roast','Savage Full Roast',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_SAVAGE_STEAK,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12430,'Cocktail_Warg_Blood','Cocktail Warg Blood',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_COCKTAIL_WARG_BLOOD,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12431,'Minor_Stew','Minor Stew',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_MINOR_BBQ,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12432,'Siroma_Iced_Tea','Siroma Iced Tea',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_SIROMA_ICE_TEA,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12433,'Drosera_Herb_Salad','Drosera Herb Salad',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_DROCERA_HERB_STEAMED,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12434,'Petite_Tail_Noodles','Petite Tail Noodles',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_PUTTI_TAILS_NOODLES,300000,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12435,'Black_Mass','Black Mass',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_STOMACHACHE,60000,rand(5,10);',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12436,'Vitata_500','Vitata 500',0,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_VITATA_500,500000,0; itemheal 0,200;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12437,'Concentrated_Ceromain_Soup','Concentrated Ceromain Soup',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12428,'Enrich_White_PotionZ','Concentrated White Potion Z',0,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12429,'Savage_BBQ','Savage Full Roast',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_SAVAGE_STEAK,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12430,'Wug_Blood_Cocktail','Cocktail Warg Blood',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_COCKTAIL_WARG_BLOOD,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12431,'Minor_Brisket','Minor Stew',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_MINOR_BBQ,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12432,'Siroma_Icetea','Siroma Iced Tea',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_SIROMA_ICE_TEA,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12433,'Drocera_Herb_Stew','Drosera Herb Salad',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_DROCERA_HERB_STEAMED,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12434,'Petti_Tail_Noodle','Petite Tail Noodles',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_PUTTI_TAILS_NOODLES,300000,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12435,'Black_Thing','Black Mass',2,NULL,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_STOMACHACHE,60000,rand(5,10);',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12436,'Vitata500','Vitata 500',0,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_VITATA_500,500000,0; itemheal 0,200;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12437,'Enrich_Celermine_Juice','Concentrated Ceromain Soup',2,10,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12438,'F_Giant_Fly_Wing','F Giant Fly Wing',2,2,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12439,'F_Battle_Manual','F Battle Manual',2,2,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12440,'F_Insurance','F Insurance',2,2,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -5173,7 +5173,7 @@ REPLACE INTO `item_db` VALUES (12578,'Rapid_Life_Water','Rapid Life Water',2,0,N
 REPLACE INTO `item_db` VALUES (12579,'Ring_Of_Valkyrie_Box','Ring Of Valkyrie Box',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12580,'Vending_Search_Scroll','Universal Catalog Silver',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'searchstores 10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12581,'Vending_Search_Scroll2','Universal Catalog Gold',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'searchstores 10,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12591,'Vending_Search_Scroll3','Universal Catalog Bronze',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'searchstores 10,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12591,'Uni_Catalog_Bz','Universal Catalog Bronze',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'searchstores 10,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12701,'Old_Blue_Box_F','Old Blue Box',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (12702,'Old_Bleu_Box','Old Navy Box',2,0,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_BleuBox),1; getrandgroupitem(IG_BleuBox),1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12703,'Holy_Egg_2','Holy Egg',11,0,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -5194,7 +5194,7 @@ REPLACE INTO `item_db` VALUES (12716,'Indian_Rice_Cake','Indian Rice Cake',2,0,N
 REPLACE INTO `item_db` VALUES (12717,'Poison_Paralysis','Paralyze',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_PARALYSE,300000,0,10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12718,'Poison_Leech','Leech End',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LEECHESEND,300000,0,10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12719,'Poison_Oblivion','Oblivion Curse',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_OBLIVIONCURSE,300000,0,10,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (12720,'Poison_Disheart','Disheart',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_DEATHHURT,300000,0,10,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (12720,'Poison_Contamination','Disheart',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_DEATHHURT,300000,0,10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12721,'Poison_Numb','Toxin',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_TOXIN,300000,0,10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12722,'Poison_Fever','Pyrexia',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_PYREXIA,300000,0,10,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (12723,'Poison_Laughing','Magic Mushroom',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_MAGICMUSHROOM,300000,0,10,0;',NULL,NULL);
@@ -5562,8 +5562,8 @@ REPLACE INTO `item_db` VALUES (13517,'Yggdrasilberry_Box','Yggdrasil Berry Box',
 REPLACE INTO `item_db` VALUES (13518,'Weapon_Card_Scroll_Box','Weapon Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13558,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13519,'Armor_Card_Scroll_Box','Armor Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13559,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13520,'Helmet_Card_Scroll_Box','Helmet Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13560,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13521,'Garment_Card_Scroll_Box','Garment Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13561,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13522,'Shield_Card_Scroll_Box','Shield Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13562,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13521,'Hood_Card_Scroll_Box','Garment Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13561,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13522,'Hood_Card_Scroll_Box2','Shield Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13562,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13523,'Shoes_Card_Scroll_Box','Shoes Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13563,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13524,'Accy_Card_Scroll_Box','Accessory Card Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 13564,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13525,'Zeny_Scroll_Box','Zeny Pet Egg Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14508,1;',NULL,NULL);
@@ -5952,10 +5952,10 @@ REPLACE INTO `item_db` VALUES (13907,'Soft_Core_Set_Box','XM Softcore Set Box',1
 REPLACE INTO `item_db` VALUES (13908,'Deviruchi_Set_Box','XM Deviruchi Set Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5227,1; getitem 5228,1; getitem 5229,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13909,'MVP_Hunt_Box','MVP Hunting Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 7621,1; getitem 12210,1; getitem 12221,1; getitem 12214,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13910,'Brewing_Box','XM Brewing Set Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 12204,10; getitem 12205,10; getitem 12206,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13911,'Christmas_Pet_Scroll','Christmas Pet Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (13912,'Pty_Blessing_Box','Party Blessing 10 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14588,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13913,'Pty_Inc_Agi_Box','Party Increase Agi 10 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14589,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13914,'Pty_Assumptio_Box','Party Assumptio 5 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14590,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13911,'Xmas_Pet_Scroll','Christmas Pet Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (13912,'Party_Blessing_Box','Party Blessing 10 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14588,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13913,'Party_Inc_Agi_Box','Party Increase Agi 10 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14589,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13914,'Party_Assumptio_Box','Party Assumptio 5 Scroll Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14590,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13915,'Love_Angel_Box','Love Angel Magic Powder Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 12287,604800;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13916,'Squirrel_Box','Squirrel Magic Powder Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 12288,604800;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13917,'Gogo_Box','Gogo Magic Powder Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 12289,604800;',NULL,NULL);
@@ -5977,21 +5977,21 @@ REPLACE INTO `item_db` VALUES (13932,'Sylph_Box','Sylph Box',18,20,NULL,10,NULL,
 REPLACE INTO `item_db` VALUES (13933,'Undine_Box','Undine Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 4350,4;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13934,'Salamander_Box','Salamander Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 4380,4;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13935,'Soul_Box','Soul Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 4388,4;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13936,'Noum_Box','Gnome Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 4335,4;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13936,'Noum_Bpx','Gnome Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 4335,4;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13937,'Robo_Eye_Box','Robo Eye Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5325,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13938,'Twin_Ribbon_Box','Maiden\'s Twin Ribbon Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5187,1;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (13939,'Diadem_Box','Diadem Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5313,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13940,'Siege_Tele_Scroll_Box','WoE Teleport Scroll 100 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14591,100;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13941,'TW_Valentine_Scroll','Taiwan Valentine Scroll',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (13941,'Valentine_Scroll_TW','Taiwan Valentine Scroll',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (13942,'Love_Angel_Box_1m','Love Angel Magic Powder Box 30 Days',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14009,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13943,'Squirrel_Box_1m','Squirrel Magic Powder Box 30 Days',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14010,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13944,'Gogo_Box_1m','Gogo Magic Powder Box 30 Days',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14011,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13945,'BRO_SM_Package','Brazil Swordsman Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2317,1; getitem 2106,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 2229,1; getitem 2266,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13946,'BRO_MG_Package','Brazil Magician Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2322,1; getitem 2102,1; getitem 2104,1; getitem 2504,1; getitem 4003,1; getitem 4077,1; getitem 2607,2; getitem 5027,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13947,'BRO_AC_Package','Brazil Acolyte Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2326,1; getitem 2104,1; getitem 2404,1; getitem 2504,1; getitem 4003,1; getitem 4100,1; getitem 2607,2; getitem 2217,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13948,'BRO_AR_Package','Brazil Archer package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2331,1; getitem 1716,1; getitem 2406,1; getitem 2504,1; getitem 4064,1; getitem 4102,1; getitem 2607,2; getitem 2285,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13949,'BRO_MC_Package','Brazil Merchant Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2315,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 5021,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13950,'BRO_TF_Package','Brazil Thief Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2336,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4097,1; getitem 4102,1; getitem 2607,2; getitem 2274,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13945,'Br_SwordPackage','Brazil Swordsman Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2317,1; getitem 2106,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 2229,1; getitem 2266,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13946,'Br_MagePackage','Brazil Magician Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2322,1; getitem 2102,1; getitem 2104,1; getitem 2504,1; getitem 4003,1; getitem 4077,1; getitem 2607,2; getitem 5027,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13947,'Br_AcolPackage','Brazil Acolyte Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2326,1; getitem 2104,1; getitem 2404,1; getitem 2504,1; getitem 4003,1; getitem 4100,1; getitem 2607,2; getitem 2217,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13948,'Br_ArcherPackage','Brazil Archer package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2331,1; getitem 1716,1; getitem 2406,1; getitem 2504,1; getitem 4064,1; getitem 4102,1; getitem 2607,2; getitem 2285,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13949,'Br_MerPackage','Brazil Merchant Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2315,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4003,1; getitem 4133,1; getitem 2607,2; getitem 5021,1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13950,'Br_ThiefPackage','Brazil Thief Package',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 2336,1; getitem 2104,1; getitem 2406,1; getitem 2506,1; getitem 4097,1; getitem 4102,1; getitem 2607,2; getitem 2274,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13951,'Wasteland_Outlaw_Box','Western Outlaw Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 13109,604800;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13952,'Lever_Action_Rifle_Box','Lever Action Rifle Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 13170,604800;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13953,'All_In_One_Ring_Box','All In One Ring Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'rentitem 2741,604800;',NULL,NULL);
@@ -6039,9 +6039,9 @@ REPLACE INTO `item_db` VALUES (13994,'Speed_Up_Potion_Box5','Speed Potion 5 Box'
 REPLACE INTO `item_db` VALUES (13995,'Speed_Up_Potion_Box10','Speed Potion 10 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 12016,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13996,'Big_Bun_Box100','Big Bun 100 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14522,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13997,'Big_Bun_Box500','Big Bun 500 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14522,500;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13998,'Giant_Flywing_Box500','Giant Fly Wing 500 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 12212,500;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13999,'Pill_Box100','Pill 100 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14523,100;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (14000,'Pill_Box500','Pill 500 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14523,500;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13998,'Giant_Fly_Wing_Box500','Giant Fly Wing 500 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 12212,500;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13999,'Pill__Box100','Pill 100 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14523,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (14000,'Pill__Box500','Pill 500 Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14523,500;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14001,'Basic_Siege_Supply_Box','Recruit Siege Supply Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 11503,25; getitem 11504,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14002,'Adv_Siege_Supply_Box','Veteran Siege Supply Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 11503,50; getitem 11504,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14003,'Elite_Siege_Supply_Box','Elite Siege Supply Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 11503,100; getitem 11504,50;',NULL,NULL);
@@ -6343,7 +6343,7 @@ REPLACE INTO `item_db` VALUES (14300,'Mask_Of_Ifrit_Box','Mask Of Ifrit Box',18,
 REPLACE INTO `item_db` VALUES (14301,'Ifrit\'s_Ear_Box','Ears Of Ifrit Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5421,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14304,'Scuba_Mask_Box','Scuba Mask Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5397,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14314,'Phreeoni_Scroll_Box','Phreeoni Scroll Box',2,NULL,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14597,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (14315,'Ghostring_Scroll_Box','Ghostring Scroll Box',2,NULL,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14598,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (14315,'GhostringS_Box','Ghostring Scroll Box',2,NULL,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 14598,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14316,'July7_Scroll','July7 Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14317,'Bacsojin_Scroll','Bacsojin Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14343,'Spiked_Scarf_Box','Spiked Scarf Box',18,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5462,1;',NULL,NULL);
@@ -6410,7 +6410,7 @@ REPLACE INTO `item_db` VALUES (14544,'B_Mdef_Potion','Big Magic Defense Potion',
 REPLACE INTO `item_db` VALUES (14545,'Battle_Manual_X3','Field Manual 300%',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXPBOOST,1800000,300;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14546,'Fire_Cracker_Love','I Love You Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14547,'Fire_Cracker_Wday','Whiteday Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (14548,'Fire_Cracker_Valentine','Valentine\'s Day Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (14548,'Fire_Cracker_Vday','Valentine\'s Day Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14549,'Fire_Cracker_Bday','Birthday Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14550,'Fire_Cracker_Xmas','Xmas Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (14551,'Str_Dish01_','Fried Grasshopper Legs',0,2,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_STRFOOD,1200000,1; percentheal 5,0;',NULL,NULL);
@@ -6495,10 +6495,10 @@ REPLACE INTO `item_db` VALUES (16248,'Tiger_Arhat_Mask_Box','Tiger Arhat Mask Bo
 #16251,Gemini_Diadem_Box
 #16252,Gemini_Crown_Box
 REPLACE INTO `item_db` VALUES (16257,'Buddah_Scroll','Buddah Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (16258,'HD_Bradium_5_Box','HD Bradium 5 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6226,5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (16259,'HD_Carnium_5_Box','HD Carnium 5 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6225,5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (16260,'HD_Bradium_10_Box','HD Bradium 10 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6226,10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (16261,'HD_Carnium_10_Box','HD Carnium 10 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6225,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (16258,'HD_Bradium_Box5','HD Bradium 5 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6226,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (16259,'HD_Carnium_Box5','HD Carnium 5 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6225,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (16260,'HD_Bradium_Box10','HD Bradium 10 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6226,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (16261,'HD_Carnium_Box10','HD Carnium 10 Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 6225,10;',NULL,NULL);
 #16262,HD_Bradium_5_Box,
 #16263,HD_Carnium_5_Box,
 #16264,HD_Bradium_10_Box,
@@ -6507,7 +6507,7 @@ REPLACE INTO `item_db` VALUES (16261,'HD_Carnium_10_Box','HD Carnium 10 Box',2,2
 #16268,HE_Bubble_Gum_Box
 #16269,Cancer_Diadem_Box
 #16270,Cancer_Crown_Box,
-REPLACE INTO `item_db` VALUES (16304,'Evil_Incarnation','Evil Incarnation',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (16304,'Evil_Incarnation_Disable','Evil Incarnation',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 #16343,Leo_Crown_Box
 #16344,Leo_Diadem_Box
 #16345,Leo_Crown_Box
@@ -6577,14 +6577,14 @@ REPLACE INTO `item_db` VALUES (18002,'Dark_Cannon_Ball','Dark Cannon Ball',10,20
 REPLACE INTO `item_db` VALUES (18003,'Soul_Cannon_Ball','Soul Cannon Ball',10,200,NULL,10,120,NULL,NULL,NULL,0x00040400,8,2,32768,NULL,99,NULL,8,'bonus bAtkEle,Ele_Ghost;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18004,'Iron_Cannon_Ball','Iron Cannon Ball',10,500,NULL,10,250,NULL,NULL,NULL,0x00040400,8,2,32768,NULL,99,NULL,8,NULL,NULL,NULL);
 # More Bows
-REPLACE INTO `item_db` VALUES (18100,'Shooting_Star','Shooting Star',5,20,NULL,0,190,NULL,5,0,0x00080800,7,2,34,4,1,1,11,'bonus bLongAtkRate,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (18100,'Shooting_Star_C','Shooting Star',5,20,NULL,0,190,NULL,5,0,0x00080800,7,2,34,4,1,1,11,'bonus bLongAtkRate,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18101,'F_Bow_Of_Rudra_C','Rudra Bow',5,2,NULL,0,185,NULL,5,0,0x000A0848,7,2,34,4,0,0,11,'bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18102,'E_Bow_Of_Rudra_C','Rudra Bow',5,2,NULL,0,185,NULL,5,0,0x000A0848,7,2,34,4,0,0,11,'bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000;',NULL,NULL);
 # More Headgears
 REPLACE INTO `item_db` VALUES (18500,'Cheer_Scarf6','Cheer Scarf6',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,1,0,369,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (18501,'Cheer_Scarf8','Cheer Scarf8',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,1,0,369,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (18502,'Cheer_Scarf10','Cheer Scarf10',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,1,0,369,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (18503,'Majestic_Devil','Small Devil Horns',4,20,NULL,100,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,1,0,562,'bonus bAtkRate,5; bonus bMatkRate,5; bonus bMaxHPRate,10; bonus bMaxSPRate,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (18503,'Small_Horn_Of_Devil','Small Devil Horns',4,20,NULL,100,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,1,0,562,'bonus bAtkRate,5; bonus bMatkRate,5; bonus bMaxHPRate,10; bonus bMaxSPRate,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18505,'Umbala_Spirit','Umbala Spirit',4,0,NULL,200,NULL,1,NULL,1,0xFFFFFFFF,7,2,1,NULL,30,0,675,'bonus bVit,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18506,'Hattah_Black','Hattah Black',4,12000,NULL,4000,NULL,2,NULL,1,0xFFFFFFFF,7,2,769,NULL,1,1,676,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (18507,'Elven_Ears_','Elven Ears',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFE,7,2,512,NULL,70,0,73,NULL,NULL,NULL);
@@ -6593,16 +6593,16 @@ REPLACE INTO `item_db` VALUES (18539,'Skull_Cap','Skull Cap',4,40,NULL,200,NULL,
 #
 REPLACE INTO `item_db` VALUES (18595,'Horn_Of_Ancient','Horn of Ancient',4,40,NULL,200,NULL,8,NULL,1,0xFFFFFFFF,7,2,256,NULL,50,1,757,'autobonus "{ bonus bBaseAtk,100; }",5,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18596,'Sprout_Hat','Sprout Hat',4,20,NULL,200,NULL,4,NULL,0,0xFFFFFFFF,7,2,256,NULL,70,1,758,'skill "WZ_HEAVENDRIVE",3;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (18597,'Mercury_Riser','Mercury Riser',4,40,NULL,200,NULL,10,NULL,1,0xFFFFFFFF,7,2,256,NULL,0,1,759,'bonus bAspdRate,3; bonus bCritical,3; if(getrefine() >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(getrefine() >= 9) { bonus bAspdRate,2; bonus bCritical,2; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (18597,'Mercury_Helm','Mercury Riser',4,40,NULL,200,NULL,10,NULL,1,0xFFFFFFFF,7,2,256,NULL,0,1,759,'bonus bAspdRate,3; bonus bCritical,3; if(getrefine() >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(getrefine() >= 9) { bonus bAspdRate,2; bonus bCritical,2; }',NULL,NULL);
 #
-REPLACE INTO `item_db` VALUES (18600,'Cat_Ear_Beret','Cat Ear Beret',4,20,NULL,100,NULL,5,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,761,'bonus bAtkRate,5; if(getrefine() > 5 && getrefine() <= 12) { bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); bonus2 bSubRace,RC_DemiHuman,(getrefine() - 5); bonus2 bAddRace,RC_Player,(getrefine() - 5); bonus2 bSubRace,RC_Player,(getrefine() - 5); } if(getrefine() > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (18600,'Cat_Ears_Beret','Cat Ear Beret',4,20,NULL,100,NULL,5,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,761,'bonus bAtkRate,5; if(getrefine() > 5 && getrefine() <= 12) { bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); bonus2 bSubRace,RC_DemiHuman,(getrefine() - 5); bonus2 bAddRace,RC_Player,(getrefine() - 5); bonus2 bSubRace,RC_Player,(getrefine() - 5); } if(getrefine() > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; }',NULL,NULL);
 #
 REPLACE INTO `item_db` VALUES (18612,'White_Musang_Hat','White Musang Hat',4,40,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,7,2,256,NULL,0,1,770,'bonus bStr,2; bonus bVit,2; bonus bLuk,1; bonus bUnbreakableHelm,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (18613,'Black_Musang_Hat','Black Musang Hat',4,40,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,7,2,256,NULL,0,1,771,'bonus bInt,2; bonus bDex,2; bonus bAgi,1; bonus bUnbreakableHelm,0;',NULL,NULL);
 #
-REPLACE INTO `item_db` VALUES (18620,'Heart_Eye_Patch','Heart Eyepatch',4,5,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,20,1,779,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (18620,'Heart_Eyepatch','Heart Eyepatch',4,5,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,512,NULL,20,1,779,NULL,NULL,NULL);
 #
-REPLACE INTO `item_db` VALUES (18656,'Witch\'s_Pumpkin_Hat','Witch\'s Pumpkin Hat',4,20,NULL,300,NULL,10,NULL,0,0xFFFFFFFF,7,2,256,NULL,20,1,717,'bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (18656,'Wit_Pumpkin_Hat','Witch\'s Pumpkin Hat',4,20,NULL,300,NULL,10,NULL,0,0xFFFFFFFF,7,2,256,NULL,20,1,717,'bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15;',NULL,NULL);
 
 # Costume System
 REPLACE INTO `item_db` VALUES (19500,'T_Mr_Smile','T Mr Smile',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,6144,NULL,0,0,65,'bonus bStr,2;',NULL,NULL);
@@ -6610,5 +6610,5 @@ REPLACE INTO `item_db` VALUES (19501,'T_Spinx_Helm','T Spinx Helm',4,0,NULL,0,NU
 REPLACE INTO `item_db` VALUES (19504,'T_Sunglasses','T Sunglasses',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,2048,NULL,0,0,12,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (19505,'T_Cigarette','T Cigarette',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,4096,NULL,0,0,54,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (19506,'T_Valkyrie_Feather_Band','T Valkyrie Feather Band',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1024,NULL,0,1,300,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (19507,'Clear_Sun','Clear Sun',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1024,NULL,1,0,654,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (19507,'Fine_Sun','Clear Sun',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,1024,NULL,1,0,654,NULL,NULL,NULL);
 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 211 - 206
sql-files/item_db_re.sql


+ 15 - 15
sql-files/logs.sql

@@ -178,21 +178,21 @@ CREATE TABLE IF NOT EXISTS `picklog` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL default '0',
   `map` varchar(11) NOT NULL default '',
   `bound` tinyint(1) unsigned NOT NULL default '0',

+ 90 - 90
sql-files/main.sql

@@ -70,21 +70,21 @@ CREATE TABLE IF NOT EXISTS `auction` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL default '0',
   PRIMARY KEY  (`auction_id`)
 ) ENGINE=MyISAM;
@@ -165,21 +165,21 @@ CREATE TABLE IF NOT EXISTS `cart_inventory` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `expire_time` int(11) unsigned NOT NULL default '0',
   `bound` tinyint(3) unsigned NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL default '0',
@@ -558,21 +558,21 @@ CREATE TABLE IF NOT EXISTS `guild_storage` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `expire_time` int(11) unsigned NOT NULL default '0',
   `bound` tinyint(3) unsigned NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL default '0',
@@ -660,21 +660,21 @@ CREATE TABLE IF NOT EXISTS `inventory` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `expire_time` int(11) unsigned NOT NULL default '0',
   `favorite` tinyint(3) unsigned NOT NULL default '0',
   `bound` tinyint(3) unsigned NOT NULL default '0',
@@ -762,21 +762,21 @@ CREATE TABLE IF NOT EXISTS `mail_attachments` (
   `card1` smallint(5) unsigned NOT NULL DEFAULT '0',
   `card2` smallint(5) unsigned NOT NULL DEFAULT '0',
   `card3` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_id0` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_val0` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL DEFAULT '0',
-  `option_id1` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_val1` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL DEFAULT '0',
-  `option_id2` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_val2` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL DEFAULT '0',
-  `option_id3` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_val3` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL DEFAULT '0',
-  `option_id4` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_val4` smallint(5) unsigned NOT NULL DEFAULT '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL DEFAULT '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL DEFAULT '0',
   `bound` tinyint(1) unsigned NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`,`index`)
@@ -1004,21 +1004,21 @@ CREATE TABLE IF NOT EXISTS `storage` (
   `card1` smallint(5) unsigned NOT NULL default '0',
   `card2` smallint(5) unsigned NOT NULL default '0',
   `card3` smallint(5) unsigned NOT NULL default '0',
-  `option_id0` smallint(5) unsigned NOT NULL default '0',
-  `option_val0` smallint(5) unsigned NOT NULL default '0',
-  `option_parm0` tinyint(3) unsigned NOT NULL default '0',
-  `option_id1` smallint(5) unsigned NOT NULL default '0',
-  `option_val1` smallint(5) unsigned NOT NULL default '0',
-  `option_parm1` tinyint(3) unsigned NOT NULL default '0',
-  `option_id2` smallint(5) unsigned NOT NULL default '0',
-  `option_val2` smallint(5) unsigned NOT NULL default '0',
-  `option_parm2` tinyint(3) unsigned NOT NULL default '0',
-  `option_id3` smallint(5) unsigned NOT NULL default '0',
-  `option_val3` smallint(5) unsigned NOT NULL default '0',
-  `option_parm3` tinyint(3) unsigned NOT NULL default '0',
-  `option_id4` smallint(5) unsigned NOT NULL default '0',
-  `option_val4` smallint(5) unsigned NOT NULL default '0',
-  `option_parm4` tinyint(3) unsigned NOT NULL default '0',
+  `option_id0` smallint(5) NOT NULL default '0',
+  `option_val0` smallint(5) NOT NULL default '0',
+  `option_parm0` tinyint(3) NOT NULL default '0',
+  `option_id1` smallint(5) NOT NULL default '0',
+  `option_val1` smallint(5) NOT NULL default '0',
+  `option_parm1` tinyint(3) NOT NULL default '0',
+  `option_id2` smallint(5) NOT NULL default '0',
+  `option_val2` smallint(5) NOT NULL default '0',
+  `option_parm2` tinyint(3) NOT NULL default '0',
+  `option_id3` smallint(5) NOT NULL default '0',
+  `option_val3` smallint(5) NOT NULL default '0',
+  `option_parm3` tinyint(3) NOT NULL default '0',
+  `option_id4` smallint(5) NOT NULL default '0',
+  `option_val4` smallint(5) NOT NULL default '0',
+  `option_parm4` tinyint(3) NOT NULL default '0',
   `expire_time` int(11) unsigned NOT NULL default '0',
   `bound` tinyint(3) unsigned NOT NULL default '0',
   `unique_id` bigint(20) unsigned NOT NULL default '0',

+ 46 - 9
sql-files/mob_db_re.sql

@@ -1017,12 +1017,12 @@ REPLACE INTO `mob_db_re` VALUES (1878,'E_SHINING_PLANT','Shining Plant','Mystic
 REPLACE INTO `mob_db_re` VALUES (1879,'ECLIPSE_P','Eclipse Pet','Eclipse',6,1800,0,0,0,1,20,26,0,40,1,36,6,0,11,80,10,12,1,2,60,0x6203695,200,1456,456,336,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);
 
 # Moscovia
-REPLACE INTO `mob_db_re` VALUES (1880,'WOOD_GOBLIN','Wood Goblin','Leshij',81,5499,1,1106,1245,1,193,208,144,12,73,19,56,15,56,25,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (1881,'LES','Les','Lesavka',82,6216,1,1205,1356,1,270,300,123,30,63,20,35,25,52,30,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (1882,'VAVAYAGA','Baba Yaga','Baba-Yaga',87,6498,1,1188,1337,2,282,353,63,60,69,45,30,60,51,35,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (1883,'UZHAS','Uzhas','Kikimora',85,7140,1,1294,1455,1,271,306,49,8,69,14,41,30,55,20,10,12,1,7,61,0x3885,200,576,672,384,0,0,0,0,0,0,0,520,900,1573,5,621,100,522,100,918,3500,579,1500,603,3,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (1884,'MAVKA','Mavka','Mavka',84,5421,1,1253,1530,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,0,0);
-REPLACE INTO `mob_db_re` VALUES (1885,'GOPINICH','Gopinich','Gopinich',97,1120500,1,714240,580320,3,1988,3849,355,121,127,102,143,102,152,76,10,12,2,2,62,0x6283695,150,1536,864,432,357120,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (1880,'WOOD_GOBLIN','Wood Goblin','Leshij',81,5499,1,1106,1245,1,193,208,144,12,73,19,56,15,56,25,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,27157,1);
+REPLACE INTO `mob_db_re` VALUES (1881,'LES','Les','Lesavka',82,6216,1,1205,1356,1,270,300,123,30,63,20,35,25,52,30,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,27158,1);
+REPLACE INTO `mob_db_re` VALUES (1882,'VAVAYAGA','Baba Yaga','Baba-Yaga',87,6498,1,1188,1337,2,282,353,63,60,69,45,30,60,51,35,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,27160,1);
+REPLACE INTO `mob_db_re` VALUES (1883,'UZHAS','Uzhas','Kikimora',85,7140,1,1294,1455,1,271,306,49,8,69,14,41,30,55,20,10,12,1,7,61,0x3885,200,576,672,384,0,0,0,0,0,0,0,520,900,1573,5,621,100,522,100,918,3500,579,1500,603,3,0,0,0,0,27159,1);
+REPLACE INTO `mob_db_re` VALUES (1884,'MAVKA','Mavka','Mavka',84,5421,1,1253,1530,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,27161,1);
+REPLACE INTO `mob_db_re` VALUES (1885,'GOPINICH','Gopinich','Gopinich',97,1120500,1,714240,580320,3,1988,3849,355,121,127,102,143,102,152,76,10,12,2,2,62,0x6283695,150,1536,864,432,357120,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,27162,1);
 REPLACE INTO `mob_db_re` VALUES (1886,'G_MAVKA','Mavka','Mavka',84,5421,1,0,0,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 
 # Additional Monsters
@@ -2345,7 +2345,7 @@ REPLACE INTO `mob_db_re` VALUES (3074,'TIMEHOLDER','Time Holder','Time Holder',1
 #3122,CHARLESTON1
 #3123,CHARLESTON2
 #3124,CHARLESTON3
-REPLACE INTO `mob_db_re` VALUES (3125,'STEP','Step','Step',130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,234894485,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3125,'STEP','Step','Step',130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,0x2000000,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #3126,ROCK_STEP
 #3127,KICK_STEP
 #3128,KICK_AND_KICK
@@ -2389,8 +2389,8 @@ REPLACE INTO `mob_db_re` VALUES (3125,'STEP','Step','Step',130,55403,0,3088,2392
 #3166,M_E_DEVILING
 #3167,E_POPORING_CRO
 #3168,POURING_SEA_FES
-REPLACE INTO `mob_db_re` VALUES (3169,'J_REB_SHECIL1','Shooting Target','Shooting Target',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,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 (3170,'J_REB_SHECIL2','Shooting Target','Shooting Target',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,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 (3169,'J_REB_SHECIL1','Shooting Target','Shooting Target',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,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 (3170,'J_REB_SHECIL2','Shooting Target','Shooting Target',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,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);
 #3171,EVENT_MONEMUS01
 #3172,EVENT_MONEMUS02
 #3173,EVENT_FIREFOX
@@ -3167,3 +3167,40 @@ REPLACE INTO `mob_db_re` VALUES (3508,'DR_EGGRING_G','Eggring','Eggring',20,220,
 #3946,JP_E_MONSTER_104
 #3947,JP_E_MONSTER_105
 
+#3955,E_SAVAGE
+#3956,E_ELDER_WILOW
+
+#3969,MD_RED_MUSHROOM
+#3970,MD_BLACK_MUSHROOM
+#3971,SKELION
+
+#3976,EIRA_BRZ
+#3977,AB_MOB_051
+#3978,AB_MOB_052
+#3979,AB_MOB_053
+#3980,AB_MOB_054
+#3981,AB_MOB_055
+#3982,AB_MOB_056
+#3983,AB_MOB_057
+#3984,AB_MOB_058
+#3985,AB_MOB_059
+#3986,AB_MOB_060
+#3987,AB_MOB_061
+#3988,AB_MOB_062
+#3989,AB_MOB_063
+#3990,AB_MOB_064
+#3991,AB_MOB_065
+#3992,AB_MOB_066
+#3993,AB_MOB_067
+#3994,AB_MOB_068
+#3995,AB_MOB_069
+#3996,AB_MOB_070
+#3997,AB_MOB_071
+#3998,AB_MOB_072
+
+# New Monster Range
+#20021,AB_MOB_073
+#20022,AB_MOB_074
+#20023,AB_MOB_075
+#20024,AB_MOB_076
+

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

@@ -0,0 +1,118 @@
+ALTER TABLE `auction`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+
+ALTER TABLE `cart_inventory`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+
+ALTER TABLE `guild_storage`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+
+ALTER TABLE `auction`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+
+ALTER TABLE `inventory`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+	
+ALTER TABLE `mail_attachments`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;
+
+ALTER TABLE `storage`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;

+ 16 - 0
sql-files/upgrades/upgrade_20171001_logs.sql

@@ -0,0 +1,16 @@
+ALTER TABLE `picklog`
+	CHANGE COLUMN `option_id0` `option_id0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `card3`,
+	CHANGE COLUMN `option_val0` `option_val0` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id0`,
+	CHANGE COLUMN `option_parm0` `option_parm0` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val0`,
+	CHANGE COLUMN `option_id1` `option_id1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm0`,
+	CHANGE COLUMN `option_val1` `option_val1` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id1`,
+	CHANGE COLUMN `option_parm1` `option_parm1` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val1`,
+	CHANGE COLUMN `option_id2` `option_id2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm1`,
+	CHANGE COLUMN `option_val2` `option_val2` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id2`,
+	CHANGE COLUMN `option_parm2` `option_parm2` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val2`,
+	CHANGE COLUMN `option_id3` `option_id3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm2`,
+	CHANGE COLUMN `option_val3` `option_val3` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id3`,
+	CHANGE COLUMN `option_parm3` `option_parm3` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val3`,
+	CHANGE COLUMN `option_id4` `option_id4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_parm3`,
+	CHANGE COLUMN `option_val4` `option_val4` SMALLINT(5) NOT NULL DEFAULT '0' AFTER `option_id4`,
+	CHANGE COLUMN `option_parm4` `option_parm4` TINYINT(3) NOT NULL DEFAULT '0' AFTER `option_val4`;

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

@@ -0,0 +1,2 @@
+INSERT INTO `skill` (`char_id`, `id`, `lv`, `flag`)
+  SELECT `char_id`, 5065, 1, 0 FROM `char` WHERE `father` > 0 OR `mother` > 0;

+ 14 - 5
src/char/char.cpp

@@ -1533,7 +1533,7 @@ enum e_char_del_response char_delete(struct char_session_data* sd, uint32 char_i
 	time_t delete_date;
 	char *data;
 	size_t len;
-	int i, k;
+	int i;
 
 	ARR_FIND(0, MAX_CHARS, i, sd->found_char[i] == char_id);
 
@@ -1725,10 +1725,7 @@ enum e_char_del_response char_delete(struct char_session_data* sd, uint32 char_i
 		inter_guild_leave(guild_id, account_id, char_id);// Leave your guild.
 
 	// refresh character list cache
-	for(k = i; k < MAX_CHARS-1; k++){
-		sd->found_char[k] = sd->found_char[k+1];
-	}
-	sd->found_char[MAX_CHARS-1] = -1;
+	sd->found_char[i] = -1;
 
 	return CHAR_DELETE_OK;
 }
@@ -1763,9 +1760,21 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
 
 	buf = WBUFP(buffer,0);
 	WBUFL(buf,0) = p->char_id;
+#if PACKETVER >= 20170830
+	WBUFQ(buf,4) = u64min((uint64)p->base_exp, INT64_MAX);
+	offset += 4;
+	buf = WBUFP(buffer, offset);
+#else
 	WBUFL(buf,4) = umin(p->base_exp, INT32_MAX);
+#endif
 	WBUFL(buf,8) = p->zeny;
+#if PACKETVER >= 20170830
+	WBUFQ(buf,12) = u64min((uint64)p->job_exp, INT64_MAX);
+	offset += 4;
+	buf = WBUFP(buffer, offset);
+#else
 	WBUFL(buf,12) = umin(p->job_exp, INT32_MAX);
+#endif
 	WBUFL(buf,16) = p->job_level;
 	WBUFL(buf,20) = 0; // probably opt1
 	WBUFL(buf,24) = 0; // probably opt2

+ 16 - 16
src/char/char_clif.c

@@ -913,7 +913,7 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){
 // S 0067 <name>.24B <str>.B <agi>.B <vit>.B <int>.B <dex>.B <luk>.B <slot>.B <hair color>.W <hair style>.W
 // S 0a39 <name>.24B <slot>.B <hair color>.W <hair style>.W <starting job ID>.W <Unknown>.(W or 2 B's)??? <sex>.B
 int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){
-	int i = 0;
+	int char_id = 0;
 
 	if (cmd == 0xa39) FIFOSD_CHECK(36) //>=20151001
 	else if (cmd == 0x970) FIFOSD_CHECK(31) //>=20120307
@@ -921,39 +921,41 @@ int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){
 	else return 0;
 
 	if( (charserv_config.char_new)==0 ) //turn character creation on/off [Kevin]
-		i = -2;
+		char_id = -2;
 	else {
 #if PACKETVER >= 20151001
-			i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29),RFIFOW(fd,31),RFIFOW(fd,32),RFIFOB(fd,35));
+			char_id = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29),RFIFOW(fd,31),RFIFOW(fd,32),RFIFOB(fd,35));
 			RFIFOSKIP(fd,36);
 #elif PACKETVER >= 20120307
-			i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29));
+			char_id = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29));
 			RFIFOSKIP(fd,31);
 #else
-			i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27),RFIFOB(fd,28),RFIFOB(fd,29),RFIFOB(fd,30),RFIFOB(fd,31),RFIFOB(fd,32),RFIFOW(fd,33),RFIFOW(fd,35));
+			char_id = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27),RFIFOB(fd,28),RFIFOB(fd,29),RFIFOB(fd,30),RFIFOB(fd,31),RFIFOB(fd,32),RFIFOW(fd,33),RFIFOW(fd,35));
 			RFIFOSKIP(fd,37);
 #endif
 	}
 
-	//'Charname already exists' (-1), 'Char creation denied' (-2) and 'You are underaged' (-3)
-	if (i < 0) {
+	if (char_id < 0) {
+		// deny character creation
 		WFIFOHEAD(fd,3);
 		WFIFOW(fd,0) = 0x6e;
-		/* Others I found [Ind] */
-		/* 0x02 = Symbols in Character Names are forbidden */
-		/* 0x03 = You are not elegible to open the Character Slot. */
-		switch (i) {
+		switch (char_id) {
+			// 'Charname already exists' (-1)
 			case -1: WFIFOB(fd,2) = 0x00; break;
+			// 'Char creation denied' (-2)
 			case -2: WFIFOB(fd,2) = 0xFF; break;
+			// 'You are underaged' (-3)
 			case -3: WFIFOB(fd,2) = 0x01; break;
+			//  'You are not elegible to open the Character Slot' (-4)
 			case -4: WFIFOB(fd,2) = 0x03; break;
+		/* Unused: 0x02 = Symbols in Character Names are forbidden [Ind]*/
 		}
 		WFIFOSET(fd,3);
 	} else {
-		int len, ch;
+		int len;
 		// retrieve data
 		struct mmo_charstatus char_dat;
-		char_mmo_char_fromsql(i, &char_dat, false); //Only the short data is needed.
+		char_mmo_char_fromsql(char_id, &char_dat, false); //Only the short data is needed.
 
 		// send to player
 		WFIFOHEAD(fd,2+MAX_CHAR_BUF);
@@ -962,9 +964,7 @@ int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){
 		WFIFOSET(fd,len);
 
 		// add new entry to the chars list
-		ARR_FIND( 0, MAX_CHARS, ch, sd->found_char[ch] == -1 );
-		if( ch < MAX_CHARS )
-			sd->found_char[ch] = i; // the char_id of the new char
+		sd->found_char[char_dat.slot] = char_id;
 	}
 	return 1;
 }

+ 1 - 2
src/common/mapindex.c

@@ -1,10 +1,9 @@
 // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
 // For more information, see LICENCE in the main folder
 
-#include "../config/core.h"
+#include "mmo.h"
 #include "core.h"
 #include "mapindex.h"
-#include "mmo.h"
 #include "showmsg.h"
 #include "strlib.h"
 

+ 1 - 1
src/common/mapindex.h

@@ -8,7 +8,7 @@
 extern "C" {
 #endif
 
-#include "../config/renewal.h"
+#include "../common/mmo.h"
 
 #define MAX_MAPINDEX 2000
 

+ 0 - 7
src/config/core.h

@@ -22,13 +22,6 @@
 /// while with OFFICIAL_WALKPATH disabled if they click to walk around a obstacle the server will do it automatically
 #define OFFICIAL_WALKPATH
 
-/// leave this line uncommented to enable callfunc checks when processing scripts.
-/// while allowed, the script engine will attempt to match user-defined functions
-/// in scripts allowing direct function callback (without the use of callfunc.)
-/// this CAN affect performance, so if you find scripts running slower or find
-/// your map-server using more resources while this is active, comment the line
-#define SCRIPT_CALLFUNC_CHECK
-
 /// uncomment to enable query_sql script command and mysql logs to function on it's own thread
 /// be aware this feature is under tests and you should use at your own risk, we however
 /// welcome any feedback you may have regarding this feature, please send us all bug reports.

+ 1 - 1
src/custom/atcommand.inc

@@ -14,6 +14,6 @@
 //ACMD_FUNC(newcommand)
 //{
 //	clif_displaymessage(fd, "It works!");
-//	clif_specialeffect(&sd->bl, 343, AREA);
+//	clif_specialeffect(&sd->bl, EF_HEARTCASTING, AREA);
 //	return 0;
 //}

+ 19 - 13
src/map/atcommand.c

@@ -997,7 +997,7 @@ ACMD_FUNC(hide)
 		map_foreachinmovearea(clif_insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
 	} else {
 		sd->sc.option |= OPTION_INVISIBLE;
-		sd->vd.class_ = INVISIBLE_CLASS;
+		sd->vd.class_ = JT_INVISIBLE;
 		clif_displaymessage(fd, msg_txt(sd,11)); // Invisible: On
 
 		// decrement the number of pvp players on the map
@@ -3134,7 +3134,7 @@ ACMD_FUNC(doom)
 		if (pl_sd->fd != fd && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
 		{
 			status_kill(&pl_sd->bl);
-			clif_specialeffect(&pl_sd->bl,450,AREA);
+			clif_specialeffect(&pl_sd->bl,EF_GRANDCROSS2,AREA);
 			clif_displaymessage(pl_sd->fd, msg_txt(sd,61)); // The holy messenger has given judgement.
 		}
 	}
@@ -3161,7 +3161,7 @@ ACMD_FUNC(doommap)
 		if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
 		{
 			status_kill(&pl_sd->bl);
-			clif_specialeffect(&pl_sd->bl,450,AREA);
+			clif_specialeffect(&pl_sd->bl,EF_GRANDCROSS2,AREA);
 			clif_displaymessage(pl_sd->fd, msg_txt(sd,61)); // The holy messenger has given judgement.
 		}
 	}
@@ -5300,7 +5300,7 @@ ACMD_FUNC(email)
  *------------------------------------------*/
 ACMD_FUNC(effect)
 {
-	int type = 0, flag = 0;
+	int type = EF_NONE;
 	nullpo_retr(-1, sd);
 
 	if (!message || !*message || sscanf(message, "%11d", &type) < 1) {
@@ -5308,7 +5308,13 @@ ACMD_FUNC(effect)
 		return -1;
 	}
 
-	clif_specialeffect(&sd->bl, type, (send_target)flag);
+	if( type <= EF_NONE || type >= EF_MAX ){
+		sprintf(atcmd_output, msg_txt(sd,1152),EF_NONE+1,EF_MAX-1); // Please enter a valid effect id in the range from %d to %d.
+		clif_displaymessage(fd, atcmd_output);
+		return -1;
+	}
+
+	clif_specialeffect(&sd->bl, type, ALL_CLIENT);
 	clif_displaymessage(fd, msg_txt(sd,229)); // Your effect has changed.
 	return 0;
 }
@@ -6816,7 +6822,7 @@ ACMD_FUNC(summon)
 	md->master_id=sd->bl.id;
 	md->special_state.ai=AI_ATTACK;
 	md->deletetimer=add_timer(tick+(duration*60000),mob_timer_delete,md->bl.id,0);
-	clif_specialeffect(&md->bl,344,AREA);
+	clif_specialeffect(&md->bl,EF_ENTRY2,AREA);
 	mob_spawn(md);
 	sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
 	clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
@@ -7414,7 +7420,7 @@ ACMD_FUNC(homlevel)
 
 	status_calc_homunculus(hd, SCO_NONE);
 	status_percent_heal(&hd->bl, 100, 100);
-	clif_specialeffect(&hd->bl,568,AREA);
+	clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
 
 	return 0;
 }
@@ -7996,9 +8002,9 @@ ACMD_FUNC(size)
 
 	sd->state.size = size;
 	if( size == SZ_MEDIUM )
-		clif_specialeffect(&sd->bl,420,AREA);
+		clif_specialeffect(&sd->bl,EF_BABYBODY,AREA);
 	else if( size == SZ_BIG )
-		clif_specialeffect(&sd->bl,422,AREA);
+		clif_specialeffect(&sd->bl,EF_GIANTBODY,AREA);
 
 	clif_displaymessage(fd, msg_txt(sd,1303)); // Size change applied.
 	return 0;
@@ -8023,9 +8029,9 @@ ACMD_FUNC(sizeall)
 
 			pl_sd->state.size = size;
 			if( size == SZ_MEDIUM )
-				clif_specialeffect(&pl_sd->bl,420,AREA);
+				clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
 			else if( size == SZ_BIG )
-				clif_specialeffect(&pl_sd->bl,422,AREA);
+				clif_specialeffect(&pl_sd->bl,EF_GIANTBODY,AREA);
 		}
 	}
 	mapit_free(iter);
@@ -8065,9 +8071,9 @@ ACMD_FUNC(sizeguild)
 
 			pl_sd->state.size = size;
 			if( size == SZ_MEDIUM )
-				clif_specialeffect(&pl_sd->bl,420,AREA);
+				clif_specialeffect(&pl_sd->bl,EF_BABYBODY,AREA);
 			else if( size == SZ_BIG )
-				clif_specialeffect(&pl_sd->bl,422,AREA);
+				clif_specialeffect(&pl_sd->bl,EF_GIANTBODY,AREA);
 		}
 	}
 

+ 88 - 76
src/map/battle.c

@@ -1160,7 +1160,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 
 		//Kaupe blocks damage (skill or otherwise) from players, mobs, homuns, mercenaries.
 		if ((sce = sc->data[SC_KAUPE]) && rnd()%100 < sce->val2) {
-			clif_specialeffect(bl, 462, AREA);
+			clif_specialeffect(bl, EF_STORMKICK4, AREA);
 			//Shouldn't end until Breaker's non-weapon part connects.
 #ifndef RENEWAL
 			if (skill_id != ASC_BREAKER || !(flag&BF_WEAPON))
@@ -1176,7 +1176,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 #endif
 
 		if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rnd()%100 < sce->val2) {
-			clif_specialeffect(bl, 462, AREA); // Still need confirm it.
+			clif_specialeffect(bl, EF_STORMKICK4, AREA); // Still need confirm it.
 			return 0;
 		}
 
@@ -1185,7 +1185,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			if (!status_isdead(src))
 				skill_counter_additional_effect( src, bl, skill_id, skill_lv, flag, gettick() );
 			if (sce) {
-				clif_specialeffect(bl, 462, AREA);
+				clif_specialeffect(bl, EF_STORMKICK4, AREA);
 				skill_blown(src,bl,sce->val3,-1,BLOWN_NONE);
 			}
 			//Both need to be consumed if they are active.
@@ -1407,6 +1407,17 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 				status_change_end(bl, SC_KYRIE, INVALID_TIMER);
 		}
 
+		if ((sce = sc->data[SC_P_ALTER]) && damage > 0) {
+			clif_specialeffect(bl, EF_GUARD, AREA);
+			sce->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
+			if (sce->val3 >= 0)
+				damage = 0;
+			else
+				damage = -sce->val3;
+			if (sce->val3 <= 0)
+				status_change_end(bl, SC_P_ALTER, INVALID_TIMER);
+		}
+
 		if ((sce = sc->data[SC_TUNAPARTY]) && damage > 0) {
 			sce->val2 -= (int)cap_value(damage, INT_MIN, INT_MAX);
 			if (sce->val2 >= 0)
@@ -2358,7 +2369,7 @@ static bool is_attack_critical(struct Damage wd, struct block_list *src, struct
 			case 0:
 				if(sc && !sc->data[SC_AUTOCOUNTER])
 					break;
-				clif_specialeffect(src, 131, AREA);
+				clif_specialeffect(src, EF_AUTOCOUNTER, AREA);
 				status_change_end(src, SC_AUTOCOUNTER, INVALID_TIMER);
 			case KN_AUTOCOUNTER:
 				if(battle_config.auto_counter_type &&
@@ -2953,6 +2964,12 @@ static struct Damage battle_calc_attack_masteries(struct Damage wd, struct block
 				ATK_ADD(wd.damage, wd.damage2, 10 * sc->data[SC_GN_CARTBOOST]->val1);
 #ifdef RENEWAL
 				ATK_ADD(wd.masteryAtk, wd.masteryAtk2, 10 * sc->data[SC_GN_CARTBOOST]->val1);
+#endif
+			}
+			if (sc->data[SC_P_ALTER]) {
+				ATK_ADD(wd.damage, wd.damage2, sc->data[SC_P_ALTER]->val2);
+#ifdef RENEWAL
+				ATK_ADD(wd.masteryAtk, wd.masteryAtk2, sc->data[SC_P_ALTER]->val2);
 #endif
 			}
 		}
@@ -3293,7 +3310,7 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 			}
 		}
 		else if( ((sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0) //Normal Chain Action effect
-			|| (sc && sc->count && sc->data[SC_E_CHAIN] && (skill_lv = sc->data[SC_E_CHAIN]->val2) > 0)) //Chain Action of ETERNAL_CHAIN
+			|| (sc && sc->count && sc->data[SC_E_CHAIN] && (skill_lv = sc->data[SC_E_CHAIN]->val1) > 0)) //Chain Action of ETERNAL_CHAIN
 			&& rnd()%100 < 5*skill_lv ) //Success rate
 		{
 			wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv);
@@ -3323,6 +3340,9 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 			if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
 				wd.div_ = tstatus->size + 2 + ( (rnd()%100 < 50-tstatus->size*10) ? 1 : 0 );
 			break;
+		case RL_QD_SHOT:
+			wd.div_ = 1 + (sd ? sd->status.job_level : 1) / 20 + (tsc && tsc->data[SC_C_MARKER] ? 2 : 0);
+			break;
 		case SC_JYUMONJIKIRI:
 			if( tsc && tsc->data[SC_JYUMONJIKIRI] )
 				wd.div_ = wd.div_ * -1;// needs more info
@@ -3378,11 +3398,6 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			status_change_end(src,SC_CRUSHSTRIKE,INVALID_TIMER);
 			skill_break_equip(src,src,EQP_WEAPON,2000,BCT_SELF);
 		}
-		//!TODO: Verify this placement & skills that affected by these effects [Cydh]
-		if (sc->data[SC_HEAT_BARREL])
-			skillratio += 200;
-		if (sc->data[SC_P_ALTER])
-			skillratio += sc->data[SC_P_ALTER]->val2;
 	}
 
 	switch(skill_id) {
@@ -3658,16 +3673,20 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 		case GS_PIERCINGSHOT:
 #ifdef RENEWAL
 			if (sd && sd->weapontype1 == W_RIFLE)
-				skillratio += 50 + 30 * skill_lv;
+				skillratio += 150 + 30 * skill_lv;
 			else
+				skillratio += 100 + 20 * skill_lv;
+#else
+			skillratio += 20 * skill_lv;
 #endif
-				skillratio += 20 * skill_lv;
 			break;
 		case GS_RAPIDSHOWER:
 			skillratio += 400 + 50 * skill_lv;
 			break;
 		case GS_DESPERADO:
 			skillratio += 50 * (skill_lv - 1);
+			if (sc && sc->data[SC_FALLEN_ANGEL])
+				skillratio *= 2;
 			break;
 		case GS_DUST:
 			skillratio += 50 * skill_lv;
@@ -3677,7 +3696,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			break;
 		case GS_SPREADATTACK:
 #ifdef RENEWAL
-			skillratio += 20 * skill_lv;
+			skillratio += 30 * skill_lv;
 #else
 			skillratio += 20 * (skill_lv - 1);
 #endif
@@ -4219,53 +4238,67 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			skillratio += -100 + 200 * skill_lv;
 			break;
 		case RL_FIREDANCE:
-			skillratio += -100 + 100 * skill_lv;
-			skillratio += (skillratio * status_get_lv(src)) / 300; //(custom)
+			skillratio += -100 + 200 * skill_lv;
+			skillratio += (sd ? pc_checkskill(sd, GS_DESPERADO) * 50 : 0);
 			break;
 		case RL_BANISHING_BUSTER:
-			skillratio += -100 + (400 * skill_lv); //(custom)
+			skillratio += -100 + 2000 + 300 * skill_lv;
 			break;
 		case RL_S_STORM:
-			skillratio += -100 + (200 * skill_lv); //(custom)
+			skillratio += -100 + 1700 + 200 * skill_lv;
 			break;
 		case RL_SLUGSHOT: {
-				uint16 w = 50;
-				int16 idx = -1;
+				uint16 w = 0;
 
-				if (sd && (idx = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[idx])
-					w = sd->inventory_data[idx]->weight / 10;
-				skillratio += -100 + (max(w,1) * skill_lv * 30); //(custom)
+				if (sd) {
+					unsigned short slug[] = { ITEMID_SLUG_AMMUNITION_XH, ITEMID_SLUG_AMMUNITION_SH, ITEMID_SLUG_AMMUNITION_H, ITEMID_SLUG_AMMUNITION_M, ITEMID_SLUG_AMMUNITION_L }; // In order of priority
+					int16 index = -1;
+
+					for (i = 0; i < ARRAYLENGTH(slug); i++) {
+						if ((index = pc_search_inventory(sd, slug[i])) >= 0) {
+							w = (sd->inventory_data[index]->weight / 10) * 32;
+							break;
+						}
+					}
+				}
+				if (target->type != BL_PC) // Monster
+					skillratio += -100 + 1200 * skill_lv;
+				else // Player
+					skillratio += -100 + 2000 * skill_lv;
+				switch(tstatus->size) {
+					case SZ_SMALL: skillratio += w * 2; break;
+					case SZ_MEDIUM: skillratio += w * 3; break;
+					case SZ_BIG: skillratio += w * 4; break;
+				}
 			}
 			break;
 		case RL_D_TAIL:
-			skillratio += -100 + (2500 + 500 * skill_lv);
+			skillratio += -100 + 4000 + 1000 * skill_lv;
 			break;
 		case RL_R_TRIP:
-			skillratio += -100 + 150 * skill_lv; //(custom)
+			skillratio += -100 + 1000 + 300 * skill_lv;
 			break;
 		case RL_R_TRIP_PLUSATK:
-			skillratio += -100 + 100 * skill_lv + rnd()%10 + 100; //(custom)
+			skillratio += -100 + 300 + 300 * skill_lv;
 			break;
 		case RL_H_MINE:
-			skillratio += 100 + 200 * skill_lv;
-			//If damaged by Flicker, explosion damage (800%:1100%:1400%:1700%:2000%)
-			if (sd && sd->flicker)
-				skillratio += 800 + (skill_lv - 1) * 300;
+			if (sd && sd->flicker) // Flicker explosion damage: 500 + 300 * SkillLv
+				skillratio += -100 + 500 + 300 * skill_lv;
+			else // 200 + 200 * SkillLv
+				skillratio += -100 + 200 + 200 * skill_lv;
 			break;
 		case RL_HAMMER_OF_GOD:
-			//! TODO: Please check the right formula. [Cydh]
-			//kRO Update 2013-07-24. Ratio: 1600+lv*800
-			//kRO Update 2014-02-12. Coins increase the damage
-			skillratio += -100 + (2400 + (skill_lv - 1) * 800) + 10 *((sd) ? sd->spiritball_old : 1); //(custom)
-			break;
-		case RL_QD_SHOT:
-			skillratio += -100 + (max(pc_checkskill(sd,GS_CHAINACTION),1) * status_get_dex(src) / 5); //(custom)
+			skillratio += -100 + 2800 + 1400 * skill_lv;
+			if (sd) {
+				if (tsc && tsc->data[SC_C_MARKER])
+					skillratio += 100 * sd->spiritball_old;
+				else if (sd->spiritball_old)
+					skillratio += 10 * sd->spiritball_old;
+			}
 			break;
 		case RL_FIRE_RAIN:
-			skillratio += -100 + 2000 + (200 * (skill_lv - 1)) + status_get_dex(src); //(custom) //kRO Update 2013-07-24. 2,000% + caster's DEX (?) [Cydh]
-			break;
 		case RL_AM_BLAST:
-			skillratio += -100 + 300 * skill_lv + status_get_dex(src) / 5; //(custom)
+			skillratio += -100 + 3500 + 300 * skill_lv;
 			break;
 		case SU_BITE:
 			skillratio += 100;
@@ -4376,6 +4409,7 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 	struct map_session_data *sd = BL_CAST(BL_PC, src);
 	struct status_change *sc = status_get_sc(src);
 	struct status_data *sstatus = status_get_status_data(src);
+	struct status_data *tstatus = status_get_status_data(target);
 	int inf3 = skill_get_inf3(skill_id);
 
 	// Kagerou/Oboro Earth Charm effect +15% wATK
@@ -4399,9 +4433,14 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 			ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_DRUMBATTLE]->val2);
 		if (sc->data[SC_MADNESSCANCEL])
 			ATK_ADD(wd.equipAtk, wd.equipAtk2, 100);
+		if (sc->data[SC_MAGICALBULLET]) {
+			if (sstatus->matk_max > sstatus->matk_min) {
+				ATK_ADD(wd.weaponAtk, wd.weaponAtk2, i64max((sstatus->matk_min + rnd() % (sstatus->matk_max - sstatus->matk_min)) - (tstatus->mdef + tstatus->mdef2), 0));
+			} else {
+				ATK_ADD(wd.weaponAtk, wd.weaponAtk2, i64max(sstatus->matk_min - (tstatus->mdef + tstatus->mdef2), 0));
+			}
+		}
 		if (sc->data[SC_GATLINGFEVER]) {
-			struct status_data *tstatus = status_get_status_data(target);
-			
 			if (tstatus->size == SZ_SMALL) {
 				ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_GATLINGFEVER]->val1);
 			} else if (tstatus->size == SZ_MEDIUM) {
@@ -4510,7 +4549,10 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 					break;
 			}
 		}
-
+		if (sc->data[SC_HEAT_BARREL]) {
+			ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_HEAT_BARREL]->val3);
+			RE_ALLATK_ADDRATE(wd, sc->data[SC_HEAT_BARREL]->val3);
+		}
 		if((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) {
 			if (sc->data[SC_MTF_RANGEATK]) { // Monster Transformation bonus
 				ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_MTF_RANGEATK]->val1);
@@ -4663,10 +4705,6 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
 		if( src->type == BL_MOB && (skill = pc_checkskill(tsd, NC_RESEARCHFE)) > 0 &&
 			(sstatus->def_ele == ELE_FIRE || sstatus->def_ele == ELE_EARTH) )
 			vit_def += skill * 10;
-		if( src->type == BL_MOB && //Only affected from mob
-			tsc && tsc->count && tsc->data[SC_P_ALTER] && //If the Platinum Alter is activated
-			(battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_UNDEAD) )	//Undead attacker
-			vit_def += tsc->data[SC_P_ALTER]->val3;
 	} else { //Mob-Pet vit-eq
 #ifndef RENEWAL
 		//VIT + rnd(0,[VIT/20]^2-1)
@@ -5461,7 +5499,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 		switch(skill_id) {
 #ifdef RENEWAL
 			case NJ_ISSEN:
-			case GS_MAGICALBULLET:
 			case ASC_BREAKER:
 			case CR_ACIDDEMONSTRATION:
 			case GN_FIRE_EXPANSION_ACID:
@@ -5541,7 +5578,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 	switch (skill_id) {
 #ifdef RENEWAL
 		case NJ_ISSEN:
-		case GS_MAGICALBULLET:
 		case ASC_BREAKER:
 		case CR_ACIDDEMONSTRATION:
 		case GN_FIRE_EXPANSION_ACID:
@@ -6405,25 +6441,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 				}
 			}
 			break;
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			{
-				//Official renewal formula [exneval]
-				//Damage = (Final ATK + Final MATK) * Skill modifiers - (eDEF + sDEF + eMDEF + sMDEF)
-				short totaldef, totalmdef;
-				struct Damage atk, matk;
-
-				atk = battle_calc_weapon_attack(src,target,skill_id,skill_lv,md.miscflag);
-				matk = battle_calc_magic_attack(src,target,skill_id,skill_lv,md.miscflag);
-				md.damage = atk.damage + matk.damage;
-				totaldef = (short)status_get_def(target) + tstatus->def2;
-				totalmdef = tstatus->mdef + tstatus->mdef2;
-				md.damage -= totaldef + totalmdef;
-				md.flag |= BF_WEAPON;
-				nk |= NK_IGNORE_FLEE; // Flee already checked in battle_calc_weapon_attack, so don't do it again here [exneval]
-			}
-			break;
-#endif
 		case BA_DISSONANCE:
 			md.damage = 30 + skill_lv * 10;
 			if (sd)
@@ -6587,7 +6604,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 			break;
 		case RL_B_TRAP:
 			// kRO 2014-02-12: Damage: Caster's DEX, Target's current HP, Skill Level
-			md.damage = ((200 + status_get_dex(src)) * skill_lv * 10) + sstatus->hp; // (custom)
+			md.damage = status_get_dex(src) * 10 + (skill_lv * 3 * status_get_hp(target)) / 100;
+			if (status_bl_has_mode(target, MD_STATUS_IMMUNE))
+				md.damage /= 10;
 			break;
 		case MH_EQC:
 			md.damage = max(tstatus->hp - sstatus->hp, 0);
@@ -6655,10 +6674,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	}
 
 	switch(skill_id) {
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			break; // Card fix already done
-#endif
 		default:
 			md.damage += battle_calc_cardfix(BF_MISC, src, target, nk, s_ele, 0, md.damage, 0, md.flag);
 			break;
@@ -6705,10 +6720,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	}
 
 	switch(skill_id) {
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			break; // GVG fix already done
-#endif
 		default:
 			md.damage = battle_calc_damage(src,target,&md,md.damage,skill_id,skill_lv);
 			if(map_flag_gvg2(target->m))
@@ -8185,6 +8196,7 @@ static const struct _battle_data {
 	{ "equip_self_break_rate",              &battle_config.equip_self_break_rate,           100,    0,      INT_MAX,        },
 	{ "equip_skill_break_rate",             &battle_config.equip_skill_break_rate,          100,    0,      INT_MAX,        },
 	{ "pk_mode",                            &battle_config.pk_mode,                         0,      0,      2,              },
+	{ "pk_mode_mes",                        &battle_config.pk_mode_mes,                     1,      0,      1,              },
 	{ "pk_level_range",                     &battle_config.pk_level_range,                  0,      0,      INT_MAX,        },
 	{ "manner_system",                      &battle_config.manner_system,                   0xFFF,  0,      0xFFF,          },
 	{ "pet_equip_required",                 &battle_config.pet_equip_required,              0,      0,      1,              },

+ 1 - 0
src/map/battle.h

@@ -349,6 +349,7 @@ extern struct Battle_Config
 	int multi_level_up;
 	int max_exp_gain_rate; //Max amount of exp bar % you can get in one go.
 	int pk_mode;
+	int pk_mode_mes;
 	int pk_level_range;
 
 	int manner_system; // end additions [Valaris]

+ 135 - 58
src/map/clif.cpp

@@ -1060,7 +1060,7 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool
 	WBUFW(buf,24) = vd->head_top;
 	WBUFW(buf,26) = vd->head_mid;
 
-	if( bl->type == BL_NPC && vd->class_ == FLAG_CLASS )
+	if( bl->type == BL_NPC && vd->class_ == JT_GUILD_FLAG )
 	{	//The hell, why flags work like this?
 		WBUFW(buf,22) = status_get_emblem_id(bl);
 		WBUFW(buf,24) = GetWord(status_get_guild_id(bl), 1);
@@ -1371,22 +1371,22 @@ static void clif_weather_check(struct map_session_data *sd)
 		|| map[m].flag.clouds2)
 	{
 		if (map[m].flag.snow)
-			clif_specialeffect_single(&sd->bl, 162, fd);
+			clif_specialeffect_single(&sd->bl, EF_SNOW, fd);
 		if (map[m].flag.clouds)
-			clif_specialeffect_single(&sd->bl, 233, fd);
+			clif_specialeffect_single(&sd->bl, EF_CLOUD3, fd);
 		if (map[m].flag.clouds2)
-			clif_specialeffect_single(&sd->bl, 516, fd);
+			clif_specialeffect_single(&sd->bl, EF_CLOUD5, fd);
 		if (map[m].flag.fog)
-			clif_specialeffect_single(&sd->bl, 515, fd);
+			clif_specialeffect_single(&sd->bl, EF_CLOUD4, fd);
 		if (map[m].flag.fireworks) {
-			clif_specialeffect_single(&sd->bl, 297, fd);
-			clif_specialeffect_single(&sd->bl, 299, fd);
-			clif_specialeffect_single(&sd->bl, 301, fd);
+			clif_specialeffect_single(&sd->bl, EF_POKJUK, fd);
+			clif_specialeffect_single(&sd->bl, EF_THROWITEM2, fd);
+			clif_specialeffect_single(&sd->bl, EF_POKJUK_SOUND, fd);
 		}
 		if (map[m].flag.sakura)
-			clif_specialeffect_single(&sd->bl, 163, fd);
+			clif_specialeffect_single(&sd->bl, EF_SAKURA, fd);
 		if (map[m].flag.leaves)
-			clif_specialeffect_single(&sd->bl, 333, fd);
+			clif_specialeffect_single(&sd->bl, EF_MAPLE, fd);
 	}
 }
 /**
@@ -1415,7 +1415,7 @@ int clif_spawn(struct block_list *bl)
 	int len;
 
 	vd = status_get_viewdata(bl);
-	if( !vd || vd->class_ == INVISIBLE_CLASS )
+	if( !vd || vd->class_ == JT_INVISIBLE )
 		return 0;
 
 	/**
@@ -1443,9 +1443,9 @@ int clif_spawn(struct block_list *bl)
 			if (sd->spiritball > 0)
 				clif_spiritball(&sd->bl);
 			if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
-				clif_specialeffect(bl,423,AREA);
+				clif_specialeffect(bl,EF_GIANTBODY2,AREA);
 			else if(sd->state.size==SZ_MEDIUM)
-				clif_specialeffect(bl,421,AREA);
+				clif_specialeffect(bl,EF_BABYBODY2,AREA);
 			if( sd->bg_id && map[sd->bl.m].flag.battleground )
 				clif_sendbgemblem_area(sd);
 			if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
@@ -1460,18 +1460,18 @@ int clif_spawn(struct block_list *bl)
 		{
 			TBL_MOB *md = ((TBL_MOB*)bl);
 			if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
-				clif_specialeffect(&md->bl,423,AREA);
+				clif_specialeffect(&md->bl,EF_GIANTBODY2,AREA);
 			else if(md->special_state.size==SZ_MEDIUM)
-				clif_specialeffect(&md->bl,421,AREA);
+				clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
 		}
 		break;
 	case BL_NPC:
 		{
 			TBL_NPC *nd = ((TBL_NPC*)bl);
 			if( nd->size == SZ_BIG )
-				clif_specialeffect(&nd->bl,423,AREA);
+				clif_specialeffect(&nd->bl,EF_GIANTBODY2,AREA);
 			else if( nd->size == SZ_MEDIUM )
-				clif_specialeffect(&nd->bl,421,AREA);
+				clif_specialeffect(&nd->bl,EF_BABYBODY2,AREA);
 			clif_efst_status_change_sub(bl, bl, AREA);
 			clif_progressbar_npc_area(nd);
 		}
@@ -1723,9 +1723,9 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_
 			TBL_PC *sd = ((TBL_PC*)bl);
 //			clif_movepc(sd);
 			if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
-				clif_specialeffect(&sd->bl,423,AREA);
+				clif_specialeffect(&sd->bl,EF_GIANTBODY2,AREA);
 			else if(sd->state.size==SZ_MEDIUM)
-				clif_specialeffect(&sd->bl,421,AREA);
+				clif_specialeffect(&sd->bl,EF_BABYBODY2,AREA);
 			if (sd->status.robe)
 				clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
 		}
@@ -1734,9 +1734,9 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_
 		{
 			TBL_MOB *md = ((TBL_MOB*)bl);
 			if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
-				clif_specialeffect(&md->bl,423,AREA);
+				clif_specialeffect(&md->bl,EF_GIANTBODY2,AREA);
 			else if(md->special_state.size==SZ_MEDIUM)
-				clif_specialeffect(&md->bl,421,AREA);
+				clif_specialeffect(&md->bl,EF_BABYBODY2,AREA);
 		}
 		break;
 	case BL_PET:
@@ -1762,7 +1762,7 @@ void clif_move(struct unit_data *ud)
 	if (!vd )
 		return;
 	//This performance check is needed to keep GM-hidden objects from being notified to bots.
-	else if( vd->class_ == INVISIBLE_CLASS ){
+	else if( vd->class_ == JT_INVISIBLE ){
 		// If the player was disguised we still need to update the disguised unit, since the main unit will be updated through clif_walkok
 		if(disguised(bl)) {
 			WBUFW(buf,0)=0x86;
@@ -3141,6 +3141,7 @@ static int clif_hpmeter(struct map_session_data *sd)
 /// 0121 <current count>.W <max count>.W <current weight>.L <max weight>.L (ZC_NOTIFY_CARTITEM_COUNTINFO)
 /// 013a <atk range>.W (ZC_ATTACK_RANGE)
 /// 0141 <status id>.L <base status>.L <plus status>.L (ZC_COUPLESTATUS)
+/// 0acb <var id>.W <value>.Q (ZC_LONGPAR_CHANGE2)
 /// TODO: Extract individual packets.
 /// FIXME: Packet lengths from packet_len(cmd)
 void clif_updatestatus(struct map_session_data *sd,int type)
@@ -3257,6 +3258,28 @@ void clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=sd->status.zeny;
 		break;
+#if PACKETVER >= 20170830
+	case SP_BASEEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=sd->status.base_exp;
+		len = packet_len(0xacb);
+		break;
+	case SP_JOBEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=sd->status.job_exp;
+		len = packet_len(0xacb);
+		break;
+	case SP_NEXTBASEEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=pc_nextbaseexp(sd);
+		len = packet_len(0xacb);
+		break;
+	case SP_NEXTJOBEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=pc_nextjobexp(sd);
+		len = packet_len(0xacb);
+		break;
+#else
 	case SP_BASEEXP:
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=sd->status.base_exp;
@@ -3273,6 +3296,7 @@ void clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=pc_nextjobexp(sd);
 		break;
+#endif
 
 	/**
 	 * SP_U<STAT> are used to update the amount of points necessary to increase that stat
@@ -3468,7 +3492,7 @@ void clif_changelook(struct block_list *bl, int type, int val) {
 				if (!sd) 
 					break;
 
-				if ( val == INVISIBLE_CLASS )
+				if ( val == JT_INVISIBLE )
 					return;
 
 				if (sd->sc.option&OPTION_COSTUME)
@@ -4588,7 +4612,7 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
 	int len;
 
 	vd = status_get_viewdata(bl);
-	if (!vd || vd->class_ == INVISIBLE_CLASS)
+	if (!vd || vd->class_ == JT_INVISIBLE)
 		return;
 
 	/**
@@ -4614,9 +4638,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
 
 			clif_getareachar_pc(sd, tsd);
 			if(tsd->state.size==SZ_BIG) // tiny/big players [Valaris]
-				clif_specialeffect_single(bl,423,sd->fd);
+				clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
 			else if(tsd->state.size==SZ_MEDIUM)
-				clif_specialeffect_single(bl,421,sd->fd);
+				clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
 			if( tsd->bg_id && map[tsd->bl.m].flag.battleground )
 				clif_sendbgemblem_single(sd->fd,tsd);
 			if ( tsd->status.robe )
@@ -4635,9 +4659,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
 			if( nd->chat_id )
 				clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd);
 			if( nd->size == SZ_BIG )
-				clif_specialeffect_single(bl,423,sd->fd);
+				clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
 			else if( nd->size == SZ_MEDIUM )
-				clif_specialeffect_single(bl,421,sd->fd);
+				clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
 			clif_efst_status_change_sub(&sd->bl, bl, SELF);
 			clif_progressbar_npc(nd, sd);
 		}
@@ -4646,9 +4670,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
 		{
 			TBL_MOB* md = (TBL_MOB*)bl;
 			if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
-				clif_specialeffect_single(bl,423,sd->fd);
+				clif_specialeffect_single(bl,EF_GIANTBODY2,sd->fd);
 			else if(md->special_state.size==SZ_MEDIUM)
-				clif_specialeffect_single(bl,421,sd->fd);
+				clif_specialeffect_single(bl,EF_BABYBODY2,sd->fd);
 #if PACKETVER >= 20120404
 			if (battle_config.monster_hp_bars_info && !map[bl->m].flag.hidemobhpbar) {
 				int i;
@@ -5128,7 +5152,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
 		nullpo_ret(bl);
 		switch(bl->type){
 		case BL_PC:
-			if(sd->vd.class_ != INVISIBLE_CLASS)
+			if(sd->vd.class_ != JT_INVISIBLE)
 				clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
 			if(sd->chatID){
 				struct chat_data *cd;
@@ -5152,7 +5176,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
 				clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
 			break;
 		default:
-			if((vd=status_get_viewdata(bl)) && vd->class_ != INVISIBLE_CLASS)
+			if((vd=status_get_viewdata(bl)) && vd->class_ != JT_INVISIBLE)
 				clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
 			break;
 		}
@@ -5161,7 +5185,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
 		nullpo_ret(tbl);
 		if(tbl->type == BL_SKILL) //Trap knocked out of sight
 			clif_clearchar_skillunit((struct skill_unit *)tbl,sd->fd);
-		else if(((vd=status_get_viewdata(tbl)) && vd->class_ != INVISIBLE_CLASS) &&
+		else if(((vd=status_get_viewdata(tbl)) && vd->class_ != JT_INVISIBLE) &&
 			!(tbl->type == BL_NPC && (((TBL_NPC*)tbl)->sc.option&OPTION_INVISIBLE)))
 			clif_clearunit_single(tbl->id,CLR_OUTSIGHT,sd->fd);
 	}
@@ -10010,6 +10034,28 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat
 	return true;
 }
 
+/**
+ * Displays a message if the player enters a PK Zone (during pk_mode)
+ * @param sd: Player data
+ */
+inline void clif_pk_mode_message(struct map_session_data * sd)
+{
+	if (battle_config.pk_mode && battle_config.pk_mode_mes &&
+		sd && map[sd->bl.m].flag.pvp) {
+		if( (int)sd->status.base_level < battle_config.pk_min_level ) {
+			char output[CHAT_SIZE_MAX];
+			// 1504: You've entered a PK Zone (safe until level %d).
+			safesnprintf(output, CHAT_SIZE_MAX, msg_txt(sd,1504), 
+						 battle_config.pk_min_level);
+			clif_showscript(&sd->bl, output, SELF);
+		} else {
+			// 1503: You've entered a PK Zone.
+			clif_showscript(&sd->bl, msg_txt(sd,1503), SELF);
+		}
+	}
+	return;
+}
+
 // ---------------------
 // clif_parse_wanttoconnect
 // ---------------------
@@ -10445,6 +10491,8 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 		// Instances do not need their own channels
 		if( channel_config.map_tmpl.name != NULL && (channel_config.map_tmpl.opt&CHAN_OPT_AUTOJOIN) && !map[sd->bl.m].flag.chmautojoin && !map[sd->bl.m].instance_id )
 			channel_mjoin(sd); //join new map
+
+		clif_pk_mode_message(sd);
 	} else if (sd->guild && (battle_config.guild_notice_changemap == 2 || guild_notice))
 		clif_guild_notice(sd); // Displays at end
 
@@ -16388,25 +16436,37 @@ void clif_parse_Adopt_reply(int fd, struct map_session_data *sd){
 /// Convex Mirror (ZC_BOSS_INFO).
 /// 0293 <infoType>.B <x>.L <y>.L <minHours>.W <minMinutes>.W <maxHours>.W <maxMinutes>.W <monster name>.51B
 /// infoType:
-///     0 = No boss on this map (BOSS_INFO_NOT).
-///     1 = Boss is alive (position update) (BOSS_INFO_ALIVE).
-///     2 = Boss is alive (initial announce) (BOSS_INFO_ALIVE_WITHMSG).
-///     3 = Boss is dead (BOSS_INFO_DEAD).
-void clif_bossmapinfo(int fd, struct mob_data *md, short flag)
+///     BOSS_INFO_NOT = No boss on this map.
+///     BOSS_INFO_ALIVE = Boss is alive (position update).
+///     BOSS_INFO_ALIVE_WITHMSG = Boss is alive (initial announce).
+///     BOSS_INFO_DEAD = Boss is dead.
+void clif_bossmapinfo(struct map_session_data *sd, struct mob_data *md, enum e_bossmap_info flag)
 {
+	int fd = sd->fd;
+
 	WFIFOHEAD(fd,70);
 	memset(WFIFOP(fd,0),0,70);
 	WFIFOW(fd,0) = 0x293;
 
-	if( md != NULL ) {
-		if( md->bl.prev != NULL ) { // Boss on This Map
-			if( flag ) {
-				WFIFOB(fd,2) = 1;
-				WFIFOL(fd,3) = md->bl.x;
-				WFIFOL(fd,7) = md->bl.y;
-			} else
-				WFIFOB(fd,2) = 2; // First Time
-		} else if (md->spawn_timer != INVALID_TIMER) { // Boss is Dead
+	switch (flag) {
+		case BOSS_INFO_NOT:
+			WFIFOB(fd,2) = BOSS_INFO_NOT;
+			// No data required
+			break; 
+		case BOSS_INFO_ALIVE:
+			WFIFOB(fd,2) = BOSS_INFO_ALIVE;
+			// Update X/Y
+			WFIFOL(fd,3) = md->bl.x;
+			WFIFOL(fd,7) = md->bl.y;
+			break;
+		case BOSS_INFO_ALIVE_WITHMSG:
+			WFIFOB(fd,2) = BOSS_INFO_ALIVE_WITHMSG;
+			// Current X/Y
+			WFIFOL(fd,3) = md->bl.x;
+			WFIFOL(fd,7) = md->bl.y;
+			break;
+		case BOSS_INFO_DEAD:
+		{
 			const struct TimerData * timer_data = get_timer(md->spawn_timer);
 			unsigned int seconds;
 			int hours, minutes;
@@ -16416,13 +16476,17 @@ void clif_bossmapinfo(int fd, struct mob_data *md, short flag)
 			seconds = seconds - (60 * 60 * hours);
 			minutes = seconds / 60;
 
-			WFIFOB(fd,2) = 3;
+			WFIFOB(fd,2) = BOSS_INFO_DEAD;
+			// Add respawn info
 			WFIFOW(fd,11) = hours; // Hours
 			WFIFOW(fd,13) = minutes; // Minutes
 		}
-		safestrncpy(WFIFOCP(fd,19), md->db->jname, NAME_LENGTH);
+			break;
 	}
 
+	if (md != NULL)
+		safestrncpy(WFIFOCP(fd,19), md->db->jname, NAME_LENGTH);
+
 	WFIFOSET(fd,70);
 }
 
@@ -17238,8 +17302,9 @@ void clif_party_show_picker(struct map_session_data * sd, struct item * item_dat
 }
 
 
-/** Display gained exp (ZC_NOTIFY_EXP).
- * 07f6 <account id>.L <amount>.L <var id>.W <exp type>.W
+/** Display gained exp.
+ * 07f6 <account id>.L <amount>.L <var id>.W <exp type>.W (ZC_NOTIFY_EXP)
+ * 0acc <account id>.L <amount>.Q <var id>.W <exp type>.W (ZC_NOTIFY_EXP2)
  * amount: INT32_MIN ~ INT32_MAX
  * var id:
  *     SP_BASEEXP, SP_JOBEXP
@@ -17255,18 +17320,30 @@ void clif_party_show_picker(struct map_session_data * sd, struct item * item_dat
 void clif_displayexp(struct map_session_data *sd, unsigned int exp, char type, bool quest, bool lost)
 {
 	int fd;
+	int offset;
+#if PACKETVER >= 20170830
+	int cmd = 0xacc;
+#else
+	int cmd = 0x7f6;
+#endif
 
 	nullpo_retv(sd);
 
 	fd = sd->fd;
 
-	WFIFOHEAD(fd, packet_len(0x7f6));
-	WFIFOW(fd,0) = 0x7f6;
+	WFIFOHEAD(fd, packet_len(cmd));
+	WFIFOW(fd,0) = cmd;
 	WFIFOL(fd,2) = sd->bl.id;
+#if PACKETVER >= 20170830
+	WFIFOQ(fd,6) = (int64)u64min((uint64)exp, INT_MAX) * (lost ? -1 : 1);
+	offset = 4;
+#else
 	WFIFOL(fd,6) = (int)umin(exp, INT_MAX) * (lost ? -1 : 1);
-	WFIFOW(fd,10) = type;
-	WFIFOW(fd,12) = (quest && type != SP_JOBEXP) ? 1 : 0; // NOTE: Somehow JobEXP always in yellow color
-	WFIFOSET(fd,packet_len(0x7f6));
+	offset = 0;
+#endif
+	WFIFOW(fd,10+offset) = type;
+	WFIFOW(fd,12+offset) = (quest && type != SP_JOBEXP) ? 1 : 0; // NOTE: Somehow JobEXP always in yellow color
+	WFIFOSET(fd,packet_len(cmd));
 }
 
 
@@ -18738,7 +18815,7 @@ void clif_notify_bindOnEquip(struct map_session_data *sd, int n) {
 * [Ind/Hercules]
 * 08b3 <Length>.W <id>.L <message>.?B (ZC_SHOWSCRIPT)
 **/
-void clif_showscript(struct block_list* bl, const char* message) {
+void clif_showscript(struct block_list* bl, const char* message, enum send_target flag) {
 	char buf[256];
 	size_t len;
 	nullpo_retv(bl);
@@ -18757,7 +18834,7 @@ void clif_showscript(struct block_list* bl, const char* message) {
 	WBUFW(buf,2) = (uint16)(len+8);
 	WBUFL(buf,4) = bl->id;
 	safestrncpy(WBUFCP(buf,8), message, len);
-	clif_send((unsigned char *) buf, WBUFW(buf,2), bl, AREA);
+	clif_send((unsigned char *) buf, WBUFW(buf,2), bl, flag);
 }
 
 /**

+ 18 - 2
src/map/clif.h

@@ -172,6 +172,14 @@ enum e_party_invite_reply {
 	PARTY_REPLY_INVALID_MAPPROPERTY_ME, ///< return=9 : !TODO "Cannot join a party in this map" -> MsgStringTable[1871] (since 20110205)
 };
 
+/// Enum for Convex Mirror (SC_BOSSMAPINFO)
+enum e_bossmap_info {
+	BOSS_INFO_NOT = 0,
+	BOSS_INFO_ALIVE,
+	BOSS_INFO_ALIVE_WITHMSG,
+	BOSS_INFO_DEAD,
+};
+
 #define packet_len(cmd) packet_db[cmd].len
 extern struct s_packet_db packet_db[MAX_PACKET_DB+1];
 extern int packet_db_ack[MAX_ACK_FUNC + 1];
@@ -448,6 +456,7 @@ enum useskill_fail_cause
 	//XXX_USESKILL_FAIL_II_HELLS_PLANT_BOTTLE = 68,
 	//XXX_USESKILL_FAIL_II_MANDRAGORA_FLOWERPOT = 69,
 	USESKILL_FAIL_MANUAL_NOTIFY = 70,
+	// CAUTION: client uses unidentified display name for displaying the required item. Still broken on 2017-05-31 [Lemongrass]
 	USESKILL_FAIL_NEED_ITEM = 71,
 	USESKILL_FAIL_NEED_EQUIPMENT = 72,
 	USESKILL_FAIL_COMBOSKILL = 73,
@@ -462,6 +471,7 @@ enum useskill_fail_cause
 	USESKILL_FAIL_STYLE_CHANGE_GRAPPLER = 82,
 	USESKILL_FAIL_THERE_ARE_NPC_AROUND = 83,
 	USESKILL_FAIL_NEED_MORE_BULLET = 84,
+	USESKILL_FAIL_COINS = 85,
 
 	USESKILL_FAIL_MAX
 };
@@ -500,6 +510,12 @@ enum clif_messages {
 	MERGE_ITEM_NOT_AVAILABLE = 0x887,
 	GUILD_MASTER_WOE = 0xb93, /// <"Currently in WoE hours, unable to delegate Guild leader"
 	GUILD_MASTER_DELAY = 0xb94, /// <"You have to wait for one day before delegating a new Guild leader"
+	SKILL_NEED_GATLING = 0x9fa,
+	SKILL_NEED_SHOTGUN = 0x9fb,
+	SKILL_NEED_RIFLE = 0x9fc,
+	SKILL_NEED_REVOLVER = 0x9fd,
+	SKILL_NEED_HOLY_BULLET = 0x9fe,
+	SKILL_NEED_GRENADE = 0xa01,
 };
 
 enum e_personalinfo {
@@ -902,7 +918,7 @@ void clif_Auction_message(int fd, unsigned char flag);
 void clif_Auction_close(int fd, unsigned char flag);
 void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd);
 
-void clif_bossmapinfo(int fd, struct mob_data *md, short flag);
+void clif_bossmapinfo(struct map_session_data *sd, struct mob_data *md, enum e_bossmap_info flag);
 void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd);
 
 // ADOPTION
@@ -1038,7 +1054,7 @@ void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int
 
 void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, bool remove);
 
-void clif_showscript(struct block_list* bl, const char* message);
+void clif_showscript(struct block_list* bl, const char* message, enum send_target flag);
 void clif_party_leaderchanged(struct map_session_data *sd, int prev_leader_aid, int new_leader_aid);
 
 void clif_account_name(int fd, uint32 account_id, const char* accname);

+ 42 - 3
src/map/clif_obfuscation.h

@@ -181,17 +181,25 @@
 		packet_keys(0x3C6447A8,0x032170D7,0x6490476C);
 	#elif PACKETVER == 20151014 // 2015-10-14bRagexeRE
 		packet_keys(0x402728A8,0x5D0E309F,0x240018FD);
+	#elif PACKETVER == 20151022 // 2015-10-22aRagexeRE
+		packet_keys(0x0311104D,0x46C326D6,0x00E82720);
 	#elif PACKETVER == 20151028 // 2015-10-28cRagexeRE
 		packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
 	#elif PACKETVER == 20151029 // 2015-10-29aRagexe
 		packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
 	#elif PACKETVER == 20151104 // 2015-11-04aRagexe
 		packet_keys(0x4C17382A,0x7ED174C9,0x29961E4F);
+	#elif PACKETVER == 20151111 // 2015-11-11aRagexeRE
+		packet_keys(0x46097C77,0x5F193871,0x29140A21);
 	#elif PACKETVER == 20151118 // 2015-11-18aRagexeRE
 		packet_keys(0x734C3241,0x6E846F34,0x731C06D6);
+	#elif PACKETVER == 20151125 // 2015-11-25dRagexeRE
+		packet_keys(0x237446C0,0x5EFB343A,0x0EDF06C5);
 	#elif PACKETVER == 20151202 // 2015-12-02bRagexeRE
 		packet_keys(0x4EDE52DE,0x52DE52DE,0x52DE52DE);
-	#elif PACKETVER == 20151216 // 2015-12-16aRagexe
+	#elif PACKETVER == 20151209 // 2015-12-09aRagexeRE
+		packet_keys(0x652C5898,0x7A351FB3,0x67EA2886);
+	#elif PACKETVER == 20151216 // 2015-12-16aRagexeRE
 		packet_keys(0x25DD643D,0x61AC39DE,0x77A8206D);
 	#elif PACKETVER == 20151223 // 2015-12-23bRagexeRE
 		packet_keys(0x347D68D0,0x2C705320,0x7B4A199D);
@@ -245,7 +253,7 @@
 		packet_keys(0x062C5C26,0x6CF47E82,0x4DD53480);
 	#elif PACKETVER == 20160622 // 2016-06-22aRagexeRE
 		packet_keys(0x426548AB,0x5C0F5DD4,0x03022710);
-	#elif PACKETVER == 20160630 // 2016-06-30aRagexeRE
+	#elif PACKETVER == 20160629 || PACKETVER == 20160630 // 2016-06-29aRagexeRE or 2016-06-30aRagexeRE
 		packet_keys(0x0DF31CCC,0x54281606,0x5C4C6855);
 	#elif PACKETVER == 20160706 // 2016-07-06cRagexeRE
 		packet_keys(0x33A766D0,0x743F04F8,0x0FA0276C);
@@ -277,7 +285,7 @@
 		packet_keys(0x34882F11,0x7C870E70,0x7E61350D);
 	#elif PACKETVER == 20161026 // 2016-10-26bRagexeRE
 		packet_keys(0x2CB86AE6,0x7D12660E,0x1B004DEB);
-	#elif PACKETVER == 20161103 // 2016-11-03aRagexeRE
+	#elif PACKETVER == 20161102 || PACKETVER == 20161103 // 2016-11-02aRagexeRE or 2016-11-03aRagexeRE
 		packet_keys(0x76725C17,0x72FE4EC1,0x07A91BFD);
 	#elif PACKETVER == 20161109 // 2016-11-09bRagexeRE
 		packet_keys(0x0A5277C0,0x2DB17506,0x0E8F26DA);
@@ -345,6 +353,37 @@
 		packet_keys(0x155F34EC,0x2D943FA9,0x3D9170EB);
 	#elif PACKETVER == 20170628 // 2017-06-28bRagexeRE
 		packet_keys(0x04691C86,0x43C210E2,0x2FE277E2);
+	#elif PACKETVER == 20170705 // 2017-07-05aRagexeRE
+		packet_keys(0x7EB000AE,0x02FB1DBC,0x5CB131E6);
+	#elif PACKETVER == 20170712 // 2017-07-12bRagexeRE
+		packet_keys(0x2C3C202C,0x3F2C2F2C,0x2F2C2F2C);
+	#elif PACKETVER == 20170719 // 2017-07-19aRagexeRE
+		packet_keys(0x46465C88,0x10116F66,0x200866F9);
+	#elif PACKETVER == 20170726 // 2017-07-26cRagexeRE
+		packet_keys(0x102F23DB,0x7E767751,0x3BC172EF);
+	#elif PACKETVER == 20170801 // 2017-08-01aRagexeRE
+		packet_keys(0x26B52A7F,0x5377619D,0x4F580AC4);
+	//#elif PACKETVER == 20170809 // 2017-08-09cRagexeRE
+	#elif PACKETVER == 20170816 // 2017-08-16dRagexeRE
+		packet_keys(0x78914673,0x3F8B7634,0x55B814BC);
+	#elif PACKETVER == 20170823 // 2017-08-23aRagexeRE
+		packet_keys(0x22677205,0x393D1002,0x58DC6BB4);
+	#elif PACKETVER == 20170830 // 2017-08-30bRagexeRE
+		packet_keys(0x1D49592B,0x00970C17,0x1E640103);
+	#elif PACKETVER == 20170906 // 2017-09-06cRagexeRE
+		packet_keys(0x7DEF7677,0x351F36E6,0x52303485);
+	#elif PACKETVER == 20170913 // 2017-09-13bRagexeRE
+		packet_keys(0x7A645935,0x1DA05062,0x5A7A4C43);
+	#elif PACKETVER == 20170920 // 2017-09-20bRagexeRE
+		packet_keys(0x53024DA5,0x04EC212D,0x0BF87CD4);
+	#elif PACKETVER == 20170927 // 2017-09-27bRagexeRE or 2017-09-27dRagexeRE
+		packet_keys(0x15624100,0x0CE1463E,0x0E5D6534);
+	#elif PACKETVER == 20171002 // 2017-10-02cRagexeRE
+		packet_keys(0x15E1716C,0x4E765B63,0x357D2370);
+	#elif PACKETVER == 20171011 // 2017-10-11aRagexeREor 2017-10-11bRagexeRE
+		packet_keys(0x4F121B3E,0x12670E17,0x19896C11);
+	#elif PACKETVER == 20171018 // 2017-10-18aRagexeRE
+		packet_keys(0x2CAA109C,0x158C1EC2,0x7A5E58F3);
 	#elif PACKETVER > 20110817
 		#error Unsupported packet version.
 	#endif

+ 6 - 0
src/map/clif_packetdb.h

@@ -2346,4 +2346,10 @@
 	packet(0x0ABD,10);
 #endif
 
+// 2017-08-30bRagexeRE
+#if PACKETVER >= 20170830
+	packet(0x0ACB,12);
+	packet(0x0ACC,18);
+#endif
+
 #endif /* _CLIF_PACKETDB_H_ */

+ 596 - 4
src/map/clif_shuffle.h

@@ -1058,6 +1058,37 @@
 	parseable_packet(0x095e,8,clif_parse_MoveToKafra,2,4);
 	parseable_packet(0x0961,6,clif_parse_GetCharNameRequest,2);
 	parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18);
+// 2015-10-22aRagexeRE
+#elif PACKETVER == 20151022
+	parseable_packet(0x023B,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x02C4,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x086A,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x091D,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0940,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
 // 2015-10-28cRagexeRE
 #elif PACKETVER == 20151028
 	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
@@ -1151,6 +1182,37 @@
 	parseable_packet(0x093A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
 	parseable_packet(0x0940,36,clif_parse_StoragePassword,2,4,20);
 	parseable_packet(0x0964,6,clif_parse_TakeItem,2);
+// 2015-11-11aRagexeRE
+#elif PACKETVER == 20151111
+	parseable_packet(0x02C4,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0362,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	//parseable_packet(0x0802,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x085D,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x0862,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0871,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0885,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x089C,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0942,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x094A,6,clif_parse_TakeItem,2);
+	//parseable_packet(0x0958,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0966,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0967,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0969,36,clif_parse_StoragePassword,2,4,20);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
 // 2015-11-18aRagexeRE
 #elif PACKETVER == 20151118
 	parseable_packet(0x022d,6,clif_parse_TickSend,2);
@@ -1182,6 +1244,37 @@
 	//parseable_packet(0x0957,4,NULL,0); // CZ_GANGSI_RANK
 	parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4,6);
 	parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2);
+// 2015-11-25dRagexeRE
+#elif PACKETVER == 20151125
+	parseable_packet(0x0361,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0365,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0366,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0368,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x0438,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0802,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0838,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x085E,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085F,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0863,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0883,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0884,36,clif_parse_StoragePassword,2,4,20);
+	//parseable_packet(0x0885,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x088C,6,clif_parse_TickSend,2);
+	parseable_packet(0x088D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0899,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x089C,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x089F,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x08A9,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x08AD,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0920,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x092A,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x092E,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0939,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x093E,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0951,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0956,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x0957,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0959,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
 // 2015-12-02bRagexeRE
 #elif PACKETVER == 20151202
 	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
@@ -1213,6 +1306,38 @@
 	parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6);
 	parseable_packet(0x0870,36,clif_parse_StoragePassword,2,4,20);
 	parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2);
+// 2015-12-09aRagexeRE
+#elif PACKETVER == 20151209
+	parseable_packet(0x0365,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0369,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x07E4,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x07EC,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0811,6,clif_parse_TickSend,2);
+	parseable_packet(0x0819,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x085B,36,clif_parse_StoragePassword,2,4,20);
+	parseable_packet(0x085D,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085E,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0861,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0866,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x087A,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x087F,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x088E,10,clif_parse_UseSkillToId,2,4,6);
+	//parseable_packet(0x088F,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0894,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x08A1,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0920,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x092D,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0930,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0932,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x093B,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0948,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x094A,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x0956,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	//parseable_packet(0x095C,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0961,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0964,26,clif_parse_FriendsListAdd,2);
+// 2015-12-16aRagexeRE
 #elif PACKETVER == 20151216
 	parseable_packet(0x022D,5,clif_parse_ChangeDir,2,4);
 	parseable_packet(0x0361,6,clif_parse_ReqClickBuyingStore,2);
@@ -2049,8 +2174,8 @@
 	parseable_packet(0x0959,6,clif_parse_GetCharNameRequest,2);
 	parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4);
 	parseable_packet(0x0969,6,clif_parse_DropItem,2,4);
-// 2016-06-30aRagexeRE
-#elif PACKETVER == 20160630
+// 2016-06-29aRagexeRE or 2016-06-30aRagexeRE
+#elif PACKETVER == 20160629 || PACKETVER == 20160630
 	parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
 	parseable_packet(0x022d,5,clif_parse_WalkToXY,2);
 	//parseable_packet(0x035f,4,NULL,0); // CZ_GANGSI_RANK
@@ -2545,8 +2670,8 @@
 	parseable_packet(0x095c,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
 	parseable_packet(0x095e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
 	parseable_packet(0x0962,5,clif_parse_ChangeDir,2,4);
-// 2016-11-03aRagexeRE
-#elif PACKETVER == 20161103
+// 2016-11-02aRagexeRE or 2016-11-03aRagexeRE
+#elif PACKETVER == 20161102 || PACKETVER == 20161103
 	parseable_packet(0x0361,8,clif_parse_MoveFromKafra,2,4);
 	//parseable_packet(0x0367,4,NULL,0); // CZ_GANGSI_RANK
 	parseable_packet(0x0436,7,clif_parse_ActionRequest,2,6);
@@ -3599,6 +3724,473 @@
 	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
 	parseable_packet(0x0863,36,clif_parse_StoragePassword,0);
 	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-05aRagexeRE
+#elif PACKETVER == 20170705
+	parseable_packet(0x0202,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x02C4,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0879,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0886,26,clif_parse_FriendsListAdd,2);
+	//parseable_packet(0x088D,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x088E,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x089A,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x089D,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x091A,5,clif_parse_ChangeDir,2,4);
+	//parseable_packet(0x092F,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0930,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0932,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0934,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x094C,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-12bRagexeRE
+#elif PACKETVER == 20170712
+	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0944,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-19aRagexeRE
+#elif PACKETVER == 20170719
+	parseable_packet(0x022D,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0367,2,clif_parse_ReqCloseBuyingStore,0);
+	//parseable_packet(0x0368,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0369,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x07E4,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085A,6,clif_parse_TickSend,2);
+	parseable_packet(0x085E,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0863,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x086E,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x087D,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0881,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0882,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0885,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0891,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0898,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x089A,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x089D,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x08A6,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x08A8,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x091B,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x091F,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x092C,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x092E,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x092F,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x093D,5,clif_parse_WalkToXY,2);
+	//parseable_packet(0x093E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0944,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0946,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0966,8,clif_parse_MoveToKafra,2,4);
+// 2017-07-26cRagexeRE
+#elif PACKETVER == 20170726
+	parseable_packet(0x0363,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0364,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0366,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0369,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0438,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0838,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0873,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0874,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0878,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0881,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0888,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x088E,5,clif_parse_WalkToXY,2);
+	//parseable_packet(0x08A3,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x08A7,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08AA,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x08AB,6,clif_parse_TakeItem,2);
+	parseable_packet(0x08AC,6,clif_parse_TickSend,2);
+	parseable_packet(0x091D,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x091E,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x091F,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0921,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0923,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0943,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x094F,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0950,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0952,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0954,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x095A,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0963,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+// 2017-08-01aRagexeRE
+#elif PACKETVER == 20170801
+	parseable_packet(0x022D,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0281,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0362,5,clif_parse_HomMenu,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x087D,36,clif_parse_StoragePassword,0);
+	//parseable_packet(0x08A6,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x094F,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x095A,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-08-09cRagexeRE 
+//#elif PACKETVER == 20170809
+// 2017-08-16dRagexeRE
+#elif PACKETVER == 20170816
+	parseable_packet(0x022D,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x035F,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0361,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0362,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0438,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x085A,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0862,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0864,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x087E,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0881,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0882,36,clif_parse_StoragePassword,0);
+	//parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0888,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0889,6,clif_parse_TickSend,2);
+	parseable_packet(0x08A3,26,clif_parse_FriendsListAdd,2);
+	//parseable_packet(0x08A7,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x08A9,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x08AC,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x091C,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0921,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0925,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x092C,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x093A,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x093D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0940,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0941,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0950,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0959,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0960,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+// 2017-08-23aRagexeRE
+#elif PACKETVER == 20170823
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x086C,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x086D,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08AC,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x095B,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-08-30bRagexeRE
+#elif PACKETVER == 20170830
+	parseable_packet(0x0281,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x02C4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0363,18,clif_parse_PartyBookingRegisterReq,2,4);
+	//parseable_packet(0x0364,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0860,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0865,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x086A,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x0875,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0884,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0885,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0888,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0897,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0899,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x089A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x089E,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x08A2,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08A8,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x091E,6,clif_parse_TickSend,2);
+	parseable_packet(0x0921,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0925,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x092E,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0939,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x093E,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0940,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0942,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0943,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0947,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0951,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0959,10,clif_parse_UseSkillToPos,2,4,6,8);
+// 2017-09-06cRagexeRE
+#elif PACKETVER == 20170906
+	//parseable_packet(0x0202,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0281,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x02C4,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0366,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0802,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0860,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0866,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	//parseable_packet(0x086C,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x087B,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x08A2,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x08A3,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x08A7,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x091A,6,clif_parse_TakeItem,2);
+	parseable_packet(0x091E,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0953,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0281,6,clif_parse_GetCharNameRequest,2);
+// 2017-09-13bRagexeRE
+#elif PACKETVER == 20170913
+	parseable_packet(0x035F,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0437,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x07E4,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0817,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0835,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x085A,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0860,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0865,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0866,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x088C,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0890,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0891,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0892,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08A6,6,clif_parse_ReqClickBuyingStore,2);
+	//parseable_packet(0x08A7,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x08AA,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x08AB,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x08AC,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x08AD,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x091B,6,clif_parse_TickSend,2);
+	parseable_packet(0x091D,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x091E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0920,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0923,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0925,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0927,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x095A,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x095C,6,clif_parse_SolveCharName,2);
+// 2017-09-20bRagexeRE
+#elif PACKETVER == 20170920
+	parseable_packet(0x0369,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0436,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x07EC,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x085A,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0861,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0862,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0864,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x0865,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x086A,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x086C,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0874,2,clif_parse_ReqCloseBuyingStore,0);
+	//parseable_packet(0x0875,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0889,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x088E,6,clif_parse_TickSend,2);
+	parseable_packet(0x089B,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0919,10,clif_parse_UseSkillToPos,2,4,6,8);
+	//parseable_packet(0x091E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0921,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0923,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0926,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x092E,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0937,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0939,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0945,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x094C,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x095D,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0961,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0966,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x096A,2,clif_parse_SearchStoreInfoNextPage,0);
+// 2017-09-27bRagexeRE or 2017-09-27dRagexeRE
+#elif PACKETVER == 20170927
+	parseable_packet(0x02C4,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x035F,6,clif_parse_GetCharNameRequest,2);
+	//parseable_packet(0x0361,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0362,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0366,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x085C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0873,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0875,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x087D,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x087E,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x088B,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0899,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x089A,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x089B,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x08A3,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x08A5,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	//parseable_packet(0x08A6,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x08AD,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x091E,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0922,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0923,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0927,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x093B,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0942,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0945,6,clif_parse_TickSend,2);
+	parseable_packet(0x094B,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x094D,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0959,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x095A,10,clif_parse_UseSkillToPos,2,4,6,8);
+// 2017-10-02cRagexeRE
+#elif PACKETVER == 20171002
+	parseable_packet(0x022D,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0363,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0885,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0897,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0899,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x089D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0928,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x092D,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0934,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x093B,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x093D,6,clif_parse_TakeItem,2);
+	//parseable_packet(0x093E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0943,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x095F,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-10-11bRagexeRE
+#elif PACKETVER == 20171011
+	parseable_packet(0x023B,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x087B,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0882,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0950,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0954,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-10-18aRagexeRE
+#elif PACKETVER == 20171018
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0363,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0364,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0436,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	//parseable_packet(0x086A,4,NULL,0); // CZ_GANGSI_RANK
+	//parseable_packet(0x087A,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x087E,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0889,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x089A,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x089F,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x08A6,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0938,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0944,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x094A,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x094F,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
 #endif
 
 #endif /* _CLIF_SHUFFLE_H_ */

+ 4 - 4
src/map/homunculus.c

@@ -594,7 +594,7 @@ int hom_evolution(struct homun_data *hd)
 
 	clif_spawn(&hd->bl);
 	clif_emotion(&sd->bl, E_NO1);
-	clif_specialeffect(&hd->bl,568,AREA);
+	clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
 
 	//status_Calc flag&1 will make current HP/SP be reloaded from hom structure
 	hom->hp = hd->battle_status.hp;
@@ -645,7 +645,7 @@ int hom_mutate(struct homun_data *hd, int homun_id)
 
 	clif_spawn(&hd->bl);
 	clif_emotion(&sd->bl, E_NO1);
-	clif_specialeffect(&hd->bl,568,AREA);
+	clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
 
 	//status_Calc flag&1 will make current HP/SP be reloaded from hom structure
 	hom = &hd->homunculus;
@@ -705,7 +705,7 @@ void hom_gainexp(struct homun_data *hd,int exp)
 	if( hd->exp_next == 0 )
 		hd->homunculus.exp = 0 ;
 
-	clif_specialeffect(&hd->bl,568,AREA);
+	clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
 	status_calc_homunculus(hd, SCO_NONE);
 	status_percent_heal(&hd->bl, 100, 100);
 }
@@ -1335,7 +1335,7 @@ int hom_shuffle(struct homun_data *hd)
 	clif_homskillinfoblock(sd);
 	status_calc_homunculus(hd, SCO_NONE);
 	status_percent_heal(&hd->bl, 100, 100);
-	clif_specialeffect(&hd->bl,568,AREA);
+	clif_specialeffect(&hd->bl,EF_HO_UP,AREA);
 
 	return 1;
 }

+ 22 - 6
src/map/itemdb.c

@@ -77,11 +77,11 @@ static int itemdb_searchname_sub(DBKey key, DBData *data, va_list ap)
 	dst2 = va_arg(ap,struct item_data **);
 
 	//Absolute priority to Aegis code name.
-	if (strcmpi(item->name,str) == 0)
+	if (dst != NULL && strcmpi(item->name, str) == 0)
 		*dst = item;
 
 	//Second priority to Client displayed name.
-	if (strcmpi(item->jname,str) == 0)
+	if (dst2 != NULL && strcmpi(item->jname, str) == 0)
 		*dst2 = item;
 	return 0;
 }
@@ -89,14 +89,24 @@ static int itemdb_searchname_sub(DBKey key, DBData *data, va_list ap)
 /*==========================================
  * Return item data from item name. (lookup)
  * @param str Item Name
+ * @param aegis_only
  * @return item data
  *------------------------------------------*/
-struct item_data* itemdb_searchname(const char *str)
+static struct item_data* itemdb_searchname1(const char *str, bool aegis_only)
 {
 	struct item_data *item = NULL, * item2 = NULL;
 
-	itemdb->foreach(itemdb,itemdb_searchname_sub,str,&item,&item2);
-	return item ? item : item2;
+	if( !aegis_only )
+		itemdb->foreach(itemdb, itemdb_searchname_sub, str, &item, &item2);
+	else
+		itemdb->foreach(itemdb, itemdb_searchname_sub, str, &item, NULL);
+
+	return ((item) ? item : item2);
+}
+
+struct item_data* itemdb_searchname(const char *str)
+{
+	return itemdb_searchname1(str, false);
 }
 
 /**
@@ -1247,8 +1257,14 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
 	nameid = atoi(str[0]);
 
 	//ID,Name,Jname,Type,Price,Sell,Weight,ATK,DEF,Range,Slot,Job,Job Upper,Gender,Loc,wLV,eLV,refineable,View
-	if (!(id = itemdb_exists(nameid)))
+	if (!(id = itemdb_exists(nameid))) {
+		// Checks if the Itemname is already taken by another id
+		if( itemdb_searchname1(str[1], true) != NULL )
+			ShowWarning("itemdb_parse_dbrow: Duplicate item name for \"%s\"\n", str[1]);
+
+		// Adds a new Item ID
 		id = itemdb_create_item(nameid);
+	}
 
 	safestrncpy(id->name, str[1], sizeof(id->name));
 	safestrncpy(id->jname, str[2], sizeof(id->jname));

+ 9 - 0
src/map/itemdb.h

@@ -108,6 +108,15 @@ enum item_itemid
 	ITEMID_ANCILLA						= 12333,
 	ITEMID_DUN_TELE_SCROLL3				= 12352,
 	ITEMID_REINS_OF_MOUNT				= 12622,
+	ITEMID_NOBLE_NAMEPLATE				= 12705,
+	ITEMID_SILVER_BULLET				= 13201,
+	ITEMID_SLUG_AMMUNITION_L			= 13210,
+	ITEMID_SLUG_AMMUNITION_M			= 13211,
+	ITEMID_SLUG_AMMUNITION_H			= 13212,
+	ITEMID_SLUG_AMMUNITION_SH			= 13213,
+	ITEMID_SLUG_AMMUNITION_XH			= 13214,
+	ITEMID_PURIFICATION_BULLET			= 13220,
+	ITEMID_SILVER_BULLET_				= 13221,
 	ITEMID_DUN_TELE_SCROLL1				= 14527,
 	ITEMID_DUN_TELE_SCROLL2				= 14581,
 	ITEMID_WOB_RUNE						= 14582,

+ 5 - 11
src/map/map-server.vcxproj

@@ -215,9 +215,7 @@
     <ClCompile Include="chat.c" />
     <ClCompile Include="chrif.c" />
     <ClCompile Include="clan.c" />
-    <ClCompile Include="clif.cpp">
-      <CompileAs>CompileAsCpp</CompileAs>
-    </ClCompile>
+    <ClCompile Include="clif.cpp" />
     <ClCompile Include="date.c" />
     <ClCompile Include="duel.c" />
     <ClCompile Include="elemental.c" />
@@ -228,12 +226,10 @@
     <ClCompile Include="itemdb.c" />
     <ClCompile Include="log.c" />
     <ClCompile Include="mail.c" />
-    <ClCompile Include="map.cpp">
-      <CompileAs>CompileAsCpp</CompileAs>
-    </ClCompile>
+    <ClCompile Include="map.cpp" />
     <ClCompile Include="mapreg.c" />
     <ClCompile Include="mercenary.c" />
-    <ClCompile Include="mob.c" />
+    <ClCompile Include="mob.cpp" />
     <ClCompile Include="npc.c" />
     <ClCompile Include="npc_chat.c" />
     <ClCompile Include="party.c" />
@@ -242,11 +238,9 @@
     <ClCompile Include="pc_groups.c" />
     <ClCompile Include="pet.c" />
     <ClCompile Include="quest.c" />
-    <ClCompile Include="script.cpp">
-      <CompileAs>CompileAsCpp</CompileAs>
-    </ClCompile>
+    <ClCompile Include="script.cpp" />
     <ClCompile Include="searchstore.c" />
-    <ClCompile Include="skill.c" />
+    <ClCompile Include="skill.cpp" />
     <ClCompile Include="status.c" />
     <ClCompile Include="storage.c" />
     <ClCompile Include="trade.c" />

+ 2 - 2
src/map/map-server.vcxproj.filters

@@ -217,7 +217,7 @@
     <ClCompile Include="mercenary.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="mob.c">
+    <ClCompile Include="mob.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="npc.c">
@@ -250,7 +250,7 @@
     <ClCompile Include="searchstore.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="skill.c">
+    <ClCompile Include="skill.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="status.c">

+ 0 - 1
src/map/map.cpp

@@ -2032,7 +2032,6 @@ int map_quit(struct map_session_data *sd) {
 			// Both these statuses are removed on logout. [L0ne_W0lf]
 			status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
-			status_change_end(&sd->bl, SC_HEAT_BARREL_AFTER, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_H_MINE, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_ANTI_M_BLAST, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_B_TRAP, INVALID_TIMER);

+ 44 - 34
src/map/mob.c → src/map/mob.cpp

@@ -29,6 +29,10 @@
 #include <stdlib.h>
 #include <math.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define ACTIVE_AI_RANGE 2	//Distance added on top of 'AREA_SIZE' at which mobs enter active AI mode.
 
 #define IDLE_SKILL_INTERVAL 10	//Active idle skills should be triggered every 1 second (1000/MIN_MOBTHINKTIME)
@@ -580,7 +584,7 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target)
 	return false;
 }
 
-struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int mob_id, const char *event, unsigned int size, unsigned int ai)
+struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int mob_id, const char *event, unsigned int size, enum mob_ai ai)
 {
 	struct spawn_data data;
 
@@ -622,7 +626,7 @@ struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int
 /*==========================================
  * Spawn a single mob on the specified coordinates.
  *------------------------------------------*/
-int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai)
+int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, enum mob_ai ai)
 {
 	struct mob_data* md = NULL;
 	int count, lv;
@@ -674,7 +678,7 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const
 /*==========================================
  * Spawn mobs in the specified area.
  *------------------------------------------*/
-int mob_once_spawn_area(struct map_session_data* sd, int16 m, int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai)
+int mob_once_spawn_area(struct map_session_data* sd, int16 m, int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, enum mob_ai ai)
 {
 	int i, max, id = 0;
 	int lx = -1, ly = -1;
@@ -1228,7 +1232,7 @@ static int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap)
 	nullpo_ret(bl);
 	md=va_arg(ap,struct mob_data *);
 	target= va_arg(ap,struct block_list**);
-	mode= va_arg(ap,enum e_mode);
+	mode= static_cast<enum e_mode>(va_arg(ap, int));
 
 	//If can't seek yet, not an enemy, or you can't attack it, skip.
 	if ((*target) == bl || !status_check_skilluse(&md->bl, bl, 0, 0))
@@ -3764,7 +3768,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
 	if (mode) //User provided mode.
 		status->mode = mode;
 	else if (flag&1) //Friendly Character, remove looting.
-		status->mode &= ~MD_LOOTER;
+		status->mode = static_cast<enum e_mode>(status->mode&(~MD_LOOTER));
 	status->hp = status->max_hp;
 	status->sp = status->max_sp;
 	memcpy(&db->vd, &sd->vd, sizeof(struct view_data));
@@ -4125,9 +4129,9 @@ static bool mob_parse_dbrow(char** str)
 		return false;
 	}
 
-	status->mode = (int)strtol(str[25], NULL, 0);
+	status->mode = static_cast<enum e_mode>(strtol(str[25], NULL, 0));
 	if (!battle_config.monster_active_enable)
-		status->mode &= ~MD_AGGRESSIVE;
+		status->mode = static_cast<enum e_mode>(status->mode&(~MD_AGGRESSIVE));
 
 	if (status_has_mode(status,MD_STATUS_IMMUNE|MD_KNOCKBACK_IMMUNE|MD_DETECTOR))
 		status->class_ = CLASS_BOSS;
@@ -4279,7 +4283,7 @@ static int mob_read_sqldb(void)
 		// free the query result
 		Sql_FreeResult(mmysql_handle);
 
-		ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_db_name[fi]);
+		ShowStatus("Done reading '" CL_WHITE "%lu" CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'.\n", count, mob_db_name[fi]);
 	}
 	return 0;
 }
@@ -4719,13 +4723,14 @@ static int mob_read_sqlskilldb(void)
 		while( SQL_SUCCESS == Sql_NextRow(mmysql_handle) ) {
 			// wrap the result into a TXT-compatible format
 			char* str[19];
-			char* dummy = "";
+			char dummy[255] = "";
 			int i;
 			++lines;
 			for( i = 0; i < 19; ++i )
 			{
 				Sql_GetData(mmysql_handle, i, &str[i], NULL);
-				if( str[i] == NULL ) str[i] = dummy; // get rid of NULL columns
+				if( str[i] == NULL ) 
+					str[i] = dummy; // get rid of NULL columns
 			}
 
 			if (!mob_parse_row_mobskilldb(str, 19, count))
@@ -4737,7 +4742,7 @@ static int mob_read_sqlskilldb(void)
 		// free the query result
 		Sql_FreeResult(mmysql_handle);
 
-		ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_skill_db_name[fi]);
+		ShowStatus("Done reading '" CL_WHITE "%lu" CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'.\n", count, mob_skill_db_name[fi]);
 	}
 	return 0;
 }
@@ -5167,10 +5172,9 @@ static void mob_skill_db_set(void) {
  */
 static void mob_load(void)
 {
-	int i;
 	const char* dbsubpath[] = {
 		"",
-		"/"DBIMPORT,
+		"/" DBIMPORT,
 	};
 
 	// First we parse all the possible monsters to add additional data in the second loop
@@ -5178,53 +5182,54 @@ static void mob_load(void)
 		mob_read_sqldb();
 		mob_read_sqlskilldb();
 	}else{
-		for(i=0; i<ARRAYLENGTH(dbsubpath); i++){
+		for(int i = 0; i < ARRAYLENGTH(dbsubpath); i++){
 			int n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
 			char* dbsubpath2 = (char*)aMalloc(n2+1);
+			bool silent = i > 0;
 
-			if( i == 0 ){
+			if( i == 0 ) {
 				safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
-			}else{
+			} else {
 				safesnprintf(dbsubpath2,n2,"%s%s",db_path,dbsubpath[i]);
 			}
 
-			sv_readdb(dbsubpath2, "mob_db.txt", ',', 31+2*MAX_MVP_DROP+2*MAX_MOB_DROP, 31+2*MAX_MVP_DROP+2*MAX_MOB_DROP, -1, &mob_readdb_sub, i);
+			sv_readdb(dbsubpath2, "mob_db.txt", ',', 31+2*MAX_MVP_DROP+2*MAX_MOB_DROP, 31+2*MAX_MVP_DROP+2*MAX_MOB_DROP, -1, &mob_readdb_sub, silent);
 
 			aFree(dbsubpath2);
 		}
 	}
 
-	for(i=0; i<ARRAYLENGTH(dbsubpath); i++){	
+	for(int i = 0; i < ARRAYLENGTH(dbsubpath); i++){	
 		int n1 = strlen(db_path)+strlen(dbsubpath[i])+1;
 		int n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
 
 		char* dbsubpath1 = (char*)aMalloc(n1+1);
 		char* dbsubpath2 = (char*)aMalloc(n2+1);
+		bool silent = i > 0;
 		
 		if(i==0) {
 			safesnprintf(dbsubpath1,n1,"%s%s",db_path,dbsubpath[i]);
 			safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
-		}
-		else {
+		} else {
 			safesnprintf(dbsubpath1,n1,"%s%s",db_path,dbsubpath[i]);
 			safesnprintf(dbsubpath2,n1,"%s%s",db_path,dbsubpath[i]);
 		}
 		
 		if( !db_use_sqldbs ){
-			mob_readskilldb(dbsubpath2,i);
+			mob_readskilldb(dbsubpath2, silent);
 		}
 
-		sv_readdb(dbsubpath1, "mob_avail.txt", ',', 2, 12, -1, &mob_readdb_mobavail, i);
-		sv_readdb(dbsubpath2, "mob_race2_db.txt", ',', 2, MAX_RACE2_MOBS, -1, &mob_readdb_race2, i);
-		sv_readdb(dbsubpath1, "mob_item_ratio.txt", ',', 2, 2+MAX_ITEMRATIO_MOBS, -1, &mob_readdb_itemratio, i);
-		sv_readdb(dbsubpath1, "mob_chat_db.txt", '#', 3, 3, MAX_MOB_CHAT, &mob_parse_row_chatdb, i);
-		sv_readdb(dbsubpath2, "mob_random_db.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath2, "mob_branch.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath2, "mob_poring.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath2, "mob_boss.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath1, "mob_pouch.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath1, "mob_classchange.txt", ',', 4, 4, -1, &mob_readdb_group, i );
-		sv_readdb(dbsubpath2, "mob_drop.txt", ',', 3, 5, -1, &mob_readdb_drop, i );
+		sv_readdb(dbsubpath1, "mob_avail.txt", ',', 2, 12, -1, &mob_readdb_mobavail,silent);
+		sv_readdb(dbsubpath2, "mob_race2_db.txt", ',', 2, MAX_RACE2_MOBS, -1, &mob_readdb_race2, silent);
+		sv_readdb(dbsubpath1, "mob_item_ratio.txt", ',', 2, 2+MAX_ITEMRATIO_MOBS, -1, &mob_readdb_itemratio, silent);
+		sv_readdb(dbsubpath1, "mob_chat_db.txt", '#', 3, 3, MAX_MOB_CHAT, &mob_parse_row_chatdb, silent);
+		sv_readdb(dbsubpath2, "mob_random_db.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath2, "mob_branch.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath2, "mob_poring.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath2, "mob_boss.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath1, "mob_pouch.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath1, "mob_classchange.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
+		sv_readdb(dbsubpath2, "mob_drop.txt", ',', 3, 5, -1, &mob_readdb_drop, silent);
 		
 		aFree(dbsubpath1);
 		aFree(dbsubpath2);
@@ -5244,8 +5249,8 @@ void mob_db_load(bool is_reload){
 	if( !is_reload ) {
 		// on mobdbreload it's not neccessary to execute this
 		// item ers needs to be allocated only once
-		item_drop_ers = ers_new(sizeof(struct item_drop),"mob.c::item_drop_ers",ERS_OPT_CLEAN);
-		item_drop_list_ers = ers_new(sizeof(struct item_drop_list),"mob.c::item_drop_list_ers",ERS_OPT_NONE);
+		item_drop_ers = ers_new(sizeof(struct item_drop),"mob.cpp::item_drop_ers",ERS_OPT_CLEAN);
+		item_drop_list_ers = ers_new(sizeof(struct item_drop_list),"mob.cpp::item_drop_list_ers",ERS_OPT_NONE);
 	}
 	mob_item_drop_ratio = idb_alloc(DB_OPT_BASE);
 	mob_skill_db = idb_alloc(DB_OPT_BASE);
@@ -5375,3 +5380,8 @@ void do_final_mob(bool is_reload){
 		ers_destroy(item_drop_list_ers);
 	}
 }
+
+#ifdef __cplusplus
+}
+#endif
+

+ 3 - 3
src/map/mob.h

@@ -302,13 +302,13 @@ struct view_data* mob_get_viewdata(int mob_id);
 void mob_set_dynamic_viewdata( struct mob_data* md );
 void mob_free_dynamic_viewdata( struct mob_data* md );
 
-struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int mob_id, const char *event, unsigned int size, unsigned int ai);
+struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int mob_id, const char *event, unsigned int size, enum mob_ai ai);
 
 int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y,
-	const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai);
+	const char* mobname, int mob_id, int amount, const char* event, unsigned int size, enum mob_ai ai);
 
 int mob_once_spawn_area(struct map_session_data* sd, int16 m,
-	int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai);
+	int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, enum mob_ai ai);
 
 bool mob_ksprotected (struct block_list *src, struct block_list *target);
 

+ 47 - 27
src/map/npc.c

@@ -111,9 +111,9 @@ static struct script_event_s
 
 struct view_data* npc_get_viewdata(int class_)
 {	//Returns the viewdata for normal npc classes.
-	if( class_ == INVISIBLE_CLASS )
+	if( class_ == JT_INVISIBLE )
 		return &npc_viewdb[0];
-	if (npcdb_checkid(class_) || class_ == WARP_CLASS){
+	if (npcdb_checkid(class_)){
 		if( class_ > MAX_NPC_CLASS2_START ){
 			return &npc_viewdb2[class_-MAX_NPC_CLASS2_START];
 		}else{
@@ -234,7 +234,7 @@ int npc_enable(const char* name, int flag)
 		clif_clearunit_area(&nd->bl,CLR_OUTSIGHT);  // Hack to trick maya purple card [Xazax]
 	}
 
-	if (nd->class_ == WARP_CLASS || nd->class_ == FLAG_CLASS)
+	if (nd->class_ == JT_WARPNPC || nd->class_ == JT_GUILD_FLAG)
 	{	//Client won't display option changes for these classes [Toms]
 		if (nd->sc.option&(OPTION_HIDE|OPTION_INVISIBLE))
 			clif_clearunit_area(&nd->bl, CLR_OUTSIGHT);
@@ -767,11 +767,11 @@ void npc_timerevent_quit(struct map_session_data* sd)
 		char buf[EVENT_NAME_LENGTH];
 		struct event_data *ev;
 
-		snprintf(buf, ARRAYLENGTH(buf), "%s::OnTimerQuit", nd->exname);
+		snprintf(buf, ARRAYLENGTH(buf), "%s::%s", nd->exname, script_config.timer_quit_event_name);
 		ev = (struct event_data*)strdb_get(ev_db, buf);
 		if( ev && ev->nd != nd )
 		{
-			ShowWarning("npc_timerevent_quit: Unable to execute \"OnTimerQuit\", two NPCs have the same event name [%s]!\n",buf);
+			ShowWarning("npc_timerevent_quit: Unable to execute \"%s\", two NPCs have the same event name [%s]!\n",script_config.timer_quit_event_name,buf);
 			ev = NULL;
 		}
 		if( ev )
@@ -1719,7 +1719,7 @@ static int npc_buylist_sub(struct map_session_data* sd, uint16 n, struct s_npc_b
 	}
 
 	// invoke event
-	snprintf(npc_ev, ARRAYLENGTH(npc_ev), "%s::OnBuyItem", nd->exname);
+	snprintf(npc_ev, ARRAYLENGTH(npc_ev), "%s::%s", nd->exname, script_config.onbuy_event_name);
 	npc_event(sd, npc_ev, 0);
 
 	return 0;
@@ -1883,6 +1883,7 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
 {
 	char npc_ev[EVENT_NAME_LENGTH];
 	char card_slot[NAME_LENGTH];
+	char option_id[NAME_LENGTH], option_val[NAME_LENGTH], option_param[NAME_LENGTH];
 	int i, j;
 	int key_nameid = 0;
 	int key_amount = 0;
@@ -1890,6 +1891,7 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
 	int key_attribute = 0;
 	int key_identify = 0;
 	int key_card[MAX_SLOTS];
+	int key_option_id[MAX_ITEM_RDM_OPT], key_option_val[MAX_ITEM_RDM_OPT], key_option_param[MAX_ITEM_RDM_OPT];
 
 	// discard old contents
 	script_cleararray_pc(sd, "@sold_nameid", (void*)0);
@@ -1905,12 +1907,21 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
 		script_cleararray_pc(sd, card_slot, (void*)0);
 	}
 
+	for (j = 0; j < MAX_ITEM_RDM_OPT; j++) { // Clear each of the item option entries
+		key_option_id[j] = key_option_val[j] = key_option_param[j] = 0;
+
+		snprintf(option_id, sizeof(option_id), "@sold_option_id%d", j + 1);
+		script_cleararray_pc(sd, option_id, (void *)0);
+		snprintf(option_val, sizeof(option_val), "@sold_option_val%d", j + 1);
+		script_cleararray_pc(sd, option_val, (void *)0);
+		snprintf(option_param, sizeof(option_param), "@sold_option_param%d", j + 1);
+		script_cleararray_pc(sd, option_param, (void *)0);
+	}
+
 	// save list of to be sold items
 	for( i = 0; i < n; i++ )
 	{
-		int idx;
-
-		idx = item_list[i*2]-2;
+		int idx = item_list[i * 2] - 2;
 
 		script_setarray_pc(sd, "@sold_nameid", i, (void*)(intptr_t)sd->inventory.u.items_inventory[idx].nameid, &key_nameid);
 		script_setarray_pc(sd, "@sold_quantity", i, (void*)(intptr_t)item_list[i*2+1], &key_amount);
@@ -1926,11 +1937,20 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
 				snprintf(card_slot, sizeof(card_slot), "@sold_card%d", j + 1);
 				script_setarray_pc(sd, card_slot, i, (void*)(intptr_t)sd->inventory.u.items_inventory[idx].card[j], &key_card[j]);
 			}
+
+			for (j = 0; j < MAX_ITEM_RDM_OPT; j++) { // Store each of the item options in the array
+				snprintf(option_id, sizeof(option_id), "@sold_option_id%d", j + 1);
+				script_setarray_pc(sd, option_id, i, (void*)(intptr_t)sd->inventory.u.items_inventory[idx].option[j].id, &key_option_id[j]);
+				snprintf(option_val, sizeof(option_val), "@sold_option_val%d", j + 1);
+				script_setarray_pc(sd, option_val, i, (void*)(intptr_t)sd->inventory.u.items_inventory[idx].option[j].value, &key_option_val[j]);
+				snprintf(option_param, sizeof(option_param), "@sold_option_param%d", j + 1);
+				script_setarray_pc(sd, option_param, i, (void*)(intptr_t)sd->inventory.u.items_inventory[idx].option[j].param, &key_option_param[j]);
+			}
 		}
 	}
 
 	// invoke event
-	snprintf(npc_ev, ARRAYLENGTH(npc_ev), "%s::OnSellItem", nd->exname);
+	snprintf(npc_ev, ARRAYLENGTH(npc_ev), "%s::%s", nd->exname, script_config.onsell_event_name);
 	npc_event(sd, npc_ev, 0);
 	return 0;
 }
@@ -2376,7 +2396,7 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
  * Support for using Constants in place of NPC View IDs.
  */
 int npc_parseview(const char* w4, const char* start, const char* buffer, const char* filepath) {
-	int val = -1, i = 0;
+	int val = JT_FAKENPC, i = 0;
 	char viewid[1024];	// Max size of name from const.txt, see read_constdb.
 
 	// Extract view ID / constant
@@ -2393,8 +2413,8 @@ int npc_parseview(const char* w4, const char* start, const char* buffer, const c
 	if(!npc_viewisid(viewid)) {
 		// Check if constant exists and get its value.
 		if(!script_get_constant(viewid, &val)) {
-			ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE_CLASS. \n", viewid, filepath, strline(buffer,start-buffer));
-			val = INVISIBLE_CLASS;
+			ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE. \n", viewid, filepath, strline(buffer,start-buffer));
+			val = JT_INVISIBLE;
 		}
 	} else {
 		// NPC has an ID specified for view id.
@@ -2409,7 +2429,7 @@ int npc_parseview(const char* w4, const char* start, const char* buffer, const c
  */
 bool npc_viewisid(const char * viewid)
 {
-	if(atoi(viewid) != -1) {
+	if(atoi(viewid) != JT_FAKENPC) {
 		// Loop through view, looking for non-numeric character.
 		while (*viewid) {
 			if (ISDIGIT(*viewid++) == 0) return false;
@@ -2475,9 +2495,9 @@ struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short
 	safestrncpy(nd->name, nd->exname, ARRAYLENGTH(nd->name));
 
 	if( battle_config.warp_point_debug )
-		nd->class_ = WARP_DEBUG_CLASS;
+		nd->class_ = JT_GUILD_FLAG;
 	else
-		nd->class_ = WARP_CLASS;
+		nd->class_ = JT_WARPNPC;
 	nd->speed = 200;
 
 	nd->u.warp.mapindex = to_mapindex;
@@ -2547,9 +2567,9 @@ static const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const
 	npc_parsename(nd, w3, start, buffer, filepath);
 
 	if (!battle_config.warp_point_debug)
-		nd->class_ = WARP_CLASS;
+		nd->class_ = JT_WARPNPC;
 	else
-		nd->class_ = WARP_DEBUG_CLASS;
+		nd->class_ = JT_GUILD_FLAG;
 	nd->speed = 200;
 
 	nd->u.warp.mapindex = i;
@@ -2781,7 +2801,7 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
 	}
 
 	npc_parsename(nd, w3, start, buffer, filepath);
-	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
+	nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 
 	++npc_shop;
@@ -3016,7 +3036,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 	}
 
 	npc_parsename(nd, w3, start, buffer, filepath);
-	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
+	nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 	nd->u.scr.script = script;
 	nd->u.scr.label_list = label_list;
@@ -3065,7 +3085,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 		char evname[EVENT_NAME_LENGTH];
 		struct event_data *ev;
 
-		snprintf(evname, ARRAYLENGTH(evname), "%s::OnInit", nd->exname);
+		snprintf(evname, ARRAYLENGTH(evname), "%s::%s", nd->exname, script_config.init_event_name);
 
 		if( ( ev = (struct event_data*)strdb_get(ev_db, evname) ) ) {
 
@@ -3144,7 +3164,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 
 	nd = npc_create_npc(m, x, y);
 	npc_parsename(nd, w3, start, buffer, filepath);
-	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
+	nd->class_ = m == -1 ? JT_FAKENPC : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 	nd->src_id = src_id;
 	nd->bl.type = BL_NPC;
@@ -3172,9 +3192,9 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 		case NPCTYPE_WARP:
 			++npc_warp;
 			if( !battle_config.warp_point_debug )
-				nd->class_ = WARP_CLASS;
+				nd->class_ = JT_WARPNPC;
 			else
-				nd->class_ = WARP_DEBUG_CLASS;
+				nd->class_ = JT_GUILD_FLAG;
 			nd->u.warp.xs = xs;
 			nd->u.warp.ys = ys;
 			nd->u.warp.mapindex = dnd->u.warp.mapindex;
@@ -3261,7 +3281,7 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) {
 		map_addnpc(m, wnd);
 		safestrncpy(wnd->name, "", ARRAYLENGTH(wnd->name));
 		safestrncpy(wnd->exname, newname, ARRAYLENGTH(wnd->exname));
-		wnd->class_ = WARP_CLASS;
+		wnd->class_ = JT_WARPNPC;
 		wnd->speed = 200;
 		wnd->u.warp.mapindex = map_id2index(imap);
 		wnd->u.warp.x = snd->u.warp.x;
@@ -4736,7 +4756,7 @@ void do_init_npc(void){
 
 	//Stock view data for normal npcs.
 	memset(&npc_viewdb, 0, sizeof(npc_viewdb));
-	npc_viewdb[0].class_ = INVISIBLE_CLASS; //Invisible class is stored here.
+	npc_viewdb[0].class_ = JT_INVISIBLE; //Invisible class is stored here.
 	for( i = 1; i < MAX_NPC_CLASS; i++ )
 		npc_viewdb[i].class_ = i;
 	for( i = MAX_NPC_CLASS2_START; i < MAX_NPC_CLASS2_END; i++ )
@@ -4787,7 +4807,7 @@ void do_init_npc(void){
 	fake_nd = (struct npc_data *)aCalloc(1,sizeof(struct npc_data));
 	fake_nd->bl.m = -1;
 	fake_nd->bl.id = npc_get_new_npc_id();
-	fake_nd->class_ = -1;
+	fake_nd->class_ = JT_FAKENPC;
 	fake_nd->speed = 200;
 	strcpy(fake_nd->name,"FAKE_NPC");
 	memcpy(fake_nd->exname, fake_nd->name, 9);

+ 974 - 10
src/map/npc.h

@@ -110,24 +110,988 @@ extern struct eri *npc_sc_display_ers;
 
 #define START_NPC_NUM 110000000
 
-enum actor_classes
+enum e_job_types
 {
-	WARP_CLASS = 45,
-	HIDDEN_WARP_CLASS = 139,
-	WARP_DEBUG_CLASS = 722,
-	FLAG_CLASS = 722,
-	INVISIBLE_CLASS = 32767,
+	NPC_RANGE1_START = 44,
+	JT_WARPNPC,
+	JT_1_ETC_01,
+	JT_1_M_01,
+	JT_1_M_02,
+	JT_1_M_03,
+	JT_1_M_04,
+	JT_1_M_BARD,
+	JT_1_M_HOF,
+	JT_1_M_INNKEEPER,
+	JT_1_M_JOBGUIDER,
+	JT_1_M_JOBTESTER,
+	JT_1_M_KNIGHTMASTER,
+	JT_1_M_LIBRARYMASTER,
+	JT_1_M_MERCHANT,
+	JT_1_M_ORIENT01,
+	JT_1_M_PASTOR,
+	JT_1_M_PUBMASTER,
+	JT_1_M_SIZ,
+	JT_1_M_SMITH,
+	JT_1_M_WIZARD,
+	JT_1_M_YOUNGKNIGHT,
+	JT_1_F_01,
+	JT_1_F_02,
+	JT_1_F_03,
+	JT_1_F_04,
+	JT_1_F_GYPSY,
+	JT_1_F_LIBRARYGIRL,
+	JT_1_F_MARIA,
+	JT_1_F_MERCHANT_01,
+	JT_1_F_MERCHANT_02,
+	JT_1_F_ORIENT_01,
+	JT_1_F_ORIENT_02,
+	JT_1_F_ORIENT_03,
+	JT_1_F_ORIENT_04,
+	JT_1_F_PRIEST,
+	JT_1_F_PUBGIRL,
+	JT_4_DOG01,
+	JT_4_KID01,
+	JT_4_M_01,
+	JT_4_M_02,
+	JT_4_M_03,
+	JT_4_M_04,
+	JT_4_M_BARBER,
+	JT_4_M_ORIENT01,
+	JT_4_M_ORIENT02,
+	JT_4_F_01,
+	JT_4_F_02,
+	JT_4_F_03,
+	JT_4_F_04,
+	JT_4_F_MAID,
+	JT_4_F_SISTER,
+	JT_4W_KID,
+	JT_4W_M_01,
+	JT_4W_M_02,
+	JT_4W_M_03,
+	JT_4W_SAILOR,
+	JT_4W_F_01,
+	JT_8_F,
+	JT_8_F_GRANDMOTHER,
+	JT_EFFECTLAUNCHER,
+	JT_8W_SOLDIER,
+	JT_1_M_MOC_LORD,
+	JT_1_M_PAY_ELDER,
+	JT_1_M_PRON_KING,
+	JT_4_M_MANAGER,
+	JT_4_M_MINISTER,
+	JT_HIDDEN_NPC,
+	JT_4_F_KAFRA6,
+	JT_4_F_KAFRA5,
+	JT_4_F_KAFRA4,
+	JT_4_F_KAFRA3,
+	JT_4_F_KAFRA2,
+	JT_4_F_KAFRA1,
+	JT_2_M_THIEFMASTER,
+	JT_2_M_SWORDMASTER,
+	JT_2_M_PHARMACIST,
+	JT_2_M_MOLGENSTEIN,
+	JT_2_M_DYEINGER,
+	JT_2_F_MAGICMASTER,
+	JT_4_F_TELEPORTER,
+	JT_4_M_TELEPORTER,
+	NPC_RANGE1_END,
+
+	JT_HIDDEN_WARP_NPC = 139,
+
+	NPC_RANGE2_START = 400,
+	JT_4_M_MUT2,
+	JT_4_M_SCIENCE,
+	JT_4_F_VALKYRIE2,
+	JT_4_M_UNCLEKNIGHT,
+	JT_4_M_YOUNGKNIGHT,
+	JT_2_MONEMUS,
+	JT_4_M_ATEIL,
+	JT_4_F_ANNIVERSARY,
+	JT_4_M_GREATPO,
+	JT_4_M_NOVELIST,
+	JT_4_M_CHAMPSOUL,
+	JT_4_M_OLDFRIAR,
+	JT_4_M_CRU_SOLD,
+	JT_4_M_CRU_KNT,
+	JT_4_M_CRU_HEAD,
+	JT_4_M_CRU_CRUA,
+	JT_4_M_KY_SOLD,
+	JT_4_M_KY_KNT,
+	JT_4_M_KY_HEAD,
+	JT_4_M_KY_KIYOM,
+	JT_4_M_BOSSCAT,
+	JT_4_M_BABYCAT,
+	JT_4W_F_KAFRA2,
+	JT_4_F_MUNAK,
+	JT_4_M_BONGUN,
+	JT_4_BEAR,
+	JT_4_BLUEWOLF,
+	JT_4_PECOPECO,
+	JT_4_M_JP_MID,
+	JT_4_M_JP_RUN,
+	JT_4_ORCLADY,
+	JT_4_ORCLADY2,
+	JT_4_ORCWARRIOR,
+	JT_4_ORCWARRIOR2,
+	JT_4_F_FAIRY,
+	JT_4_F_FAIRYKID,
+	JT_4_F_FAIRYKID2,
+	JT_4_F_FAIRYKID3,
+	JT_4_F_FAIRYKID4,
+	JT_4_F_FAIRYKID5,
+	JT_4_F_FAIRYKID6,
+	JT_4_M_FAIRYKID,
+	JT_4_M_FAIRYKID2,
+	JT_4_M_FAIRYKID3,
+	JT_4_M_FAIRYKID4,
+	JT_4_M_FAIRYKID5,
+	JT_4_M_FAIRYSOLDIER,
+	JT_4_M_TUFFOLD,
+	JT_4_MAN_BENKUNI,
+	JT_4_MAN_GALTUN,
+	JT_4_MAN_JERUTOO,
+	JT_4_MAN_LAVAIL,
+	JT_4_MAN_NITT,
+	JT_4_MAN_PIOM,
+	JT_4_MAN_PIOM2,
+	JT_4_M_DSTMAN,
+	JT_4_M_DSTMANDEAD,
+	JT_4_BABYLEOPARD,
+	JT_4_M_REDSWORD,
+	JT_4_MAN_PIOM3,
+	JT_4_M_FAIRYSOLDIER2,
+	JT_4_F_FAIRYSOLDIER,
+	JT_4_DRAGON_EGG,
+	JT_4_MIMIC,
+	JT_4_F_FAIRY1,
+	JT_4_F_GUILLOTINE,
+	JT_4_M_GUILLOTINE,
+	JT_4_M_KNIGHT_BLACK,
+	JT_4_M_KNIGHT_GOLD,
+	JT_4_M_KNIGHT_SILVER,
+	JT_4_SKULL_MUD,
+	JT_4_M_BRZ_INDIAN,
+	JT_4_F_BRZ_INDIAN,
+	JT_4_F_BRZ_INDOLD,
+	JT_4_M_BRZ_JACI,
+	JT_4_M_BRZ_MAN1,
+	JT_4_M_BRZ_MAN2,
+	JT_4_F_BRZ_WOMAN,
+	JT_4_M_MINSTREL,
+	JT_4_M_MINSTREL1,
+	JT_4_M_SHADOWCHASER,
+	JT_4_F_SHADOWCHASER,
+	JT_4_M_SURA,
+	JT_4_F_SURA,
+	JT_4_F_WANDERER,
+	JT_4_M_BARD,
+	JT_1_FLAG_NOFEAR,
+	JT_4_M_NOFEARGUY,
+	JT_4_MAN_PIOM6,
+	JT_4_MAN_PIOM4,
+	JT_4_MAN_PIOM5,
+	JT_4_MAN_GALTUN1,
+	JT_4_HUMAN_GERUTOO,
+	JT_4_M_ROKI,
+	JT_4_M_MERCAT1,
+	JT_4_M_MERCAT2,
+	JT_4_M_CATMAN1,
+	JT_4_M_CATMAN2,
+	JT_4_F_BRZ_WOMAN2,
+	JT_4_M_JP_DISH,
+	JT_4_F_JP_NOAH,
+	JT_4_F_JP_OZ,
+	JT_4_F_JP_CHROME,
+	JT_4_F_JP_RINNE,
+	JT_4_WHITETIGER,
+	JT_4_VENDING_MACHINE,
+	JT_4_MISTY,
+	JT_4_NECORING,
+	JT_4_ELEPHANT,
+	JT_4_F_NYDHOG,
+	JT_4_F_NYDHOG2,
+	JT_4_M_ROKI2,
+	JT_4_M_DOGTRAVELER,
+	JT_4_M_DOGTRAVELER2,
+	JT_4_F_DOGTRAVELER,
+	JT_4_M_RAFLE_GR,
+	JT_4_M_RAFLE_OLD,
+	JT_4_F_RAFLE_PK,
+	JT_4_M_LYINGDOG,
+	JT_4_F_MORAFINE1,
+	JT_4_F_MORAFINE2,
+	JT_4_M_RAFLE_OR,
+	JT_4_F_RAFLE_YE,
+	JT_4_M_RAFLE_VI,
+	JT_4_F_RAFLE_VI,
+	JT_4_M_ARDHA,
+	JT_4_CREEPER,
+	JT_JP_RUFAKU,
+	JT_JP_SUPIKA,
+	JT_JP_SABIKU,
+	JT_JP_ARUGORU,
+	JT_JP_ARUNA,
+	JT_JP_AIRI,
+	JT_4_M_DEWOLDMAN,
+	JT_4_M_DEWOLDWOMAN,
+	JT_4_M_DEWMAN,
+	JT_4_M_DEWWOMAN,
+	JT_4_M_DEWBOY,
+	JT_4_M_DEWGIRL,
+	JT_4_M_DEWZATICHIEF,
+	JT_4_M_DEWZATIMAN,
+	JT_4_M_ALCHE_E,
+	JT_4_MASK_SMOKEY,
+	JT_4_CAT_SAILOR1,
+	JT_4_CAT_SAILOR2,
+	JT_4_CAT_SAILOR3,
+	JT_4_CAT_SAILOR4,
+	JT_4_CAT_CHEF,
+	JT_4_CAT_MERMASTER,
+	JT_4_CRACK,
+	JT_4_ASTER,
+	JT_4_F_STARFISHGIRL,
+	JT_4_CAT_DOWN,
+	JT_4_CAT_REST,
+	JT_4_CAT_3COLOR,
+	JT_4_CAT_ADMIRAL,
+	JT_4_SOIL,
+	JT_4_F_ALCHE_A,
+	JT_4_CAT_ADV1,
+	JT_4_CAT_ADV2,
+	JT_4_CAT_SAILOR5,
+	JT_2_DROP_MACHINE,
+	JT_2_SLOT_MACHINE,
+	JT_2_VENDING_MACHINE1,
+	JT_MOB_TOMB,
+	JT_4_MYSTCASE,
+	JT_4_M_SIT_NOVICE,
+	JT_4_OCTOPUS_LEG,
+	JT_4_F_NURSE,
+	JT_4_MAL_SOLDIER,
+	JT_4_MAL_CAPTAIN,
+	JT_4_MAL_BUDIDAI,
+	JT_4_M_MAYOR,
+	JT_4_M_BARYO_OLD,
+	JT_4_F_BARYO_OLD,
+	JT_4_F_BARYO_GIRL,
+	JT_4_M_BARYO_BOY,
+	JT_4_M_BARYO_MAN,
+	JT_4_F_BARYO_WOMAN,
+	JT_4_BARYO_CHIEF,
+	JT_4_MAL_KAFRA,
+	JT_4_M_MALAYA,
+	JT_4_F_MALAYA,
+	JT_4_F_PATIENT,
+	JT_4_M_PATIENT,
+	JT_4_F_KR_TIGER,
+	JT_4_M_KR_BOY,
+	JT_4_M_KAGE_OLD,
+	JT_4_WHIKEBAIN,
+	JT_4_EREND,
+	JT_4_RAWREL,
+	JT_4_ARMAIA,
+	JT_4_KAVAC,
+	JT_4_YGNIZEM,
+	JT_4_EREMES,
+	JT_4_MAGALETA,
+	JT_4_KATRINN,
+	JT_4_SHECIL,
+	JT_4_SEYREN,
+	JT_4_HARWORD,
+	JT_4_F_JP_CYNTHIA,
+	JT_4_M_JP_GUSTON,
+	JT_4_M_JP_BERKUT,
+	JT_4_F_JP_DARK_ADELAIDE,
+	JT_4_M_JP_DARK_DARIUS,
+	JT_4_M_JP_JESTER,
+	JT_XMAS_SMOKEY_B,
+	JT_XMAS_SMOKEY_R,
+	JT_XMAS_SMOKEY_Y,
+	JT_4_F_CLOCKDOLL,
+	JT_4_F_FAIRY2,
+	JT_4_F_PINKWOMAN,
+	JT_4_FAIRYDEADLEAF,
+	JT_4_FROG,
+	JT_4_M_BLACKMAN,
+	JT_4_M_BLUEMAN,
+	JT_4_M_FAIRYANG,
+	JT_4_M_FAIRYAVANT,
+	JT_4_M_FAIRYFREAK,
+	JT_4_M_FAIRYKID6,
+	JT_4_M_FAIRYSCHOLAR,
+	JT_4_M_FAIRYSCHOLAR_DIRTY,
+	JT_4_M_FARIY_HISIE,
+	JT_4_M_FARIYKING,
+	JT_4_M_NEWOZ,
+	JT_4_M_OLIVER,
+	JT_4_M_PROFESSORWORM,
+	JT_4_M_REDMAN,
+	JT_4_F_GELKA,
+	JT_4_M_ROTERT,
+	JT_4_BLACKDRAGON,
+	JT_4_M_GUNSLINGER,
+	JT_4_F_GUNSLINGER,
+	JT_4_M_ARCHER,
+	JT_4_M_SWORDMAN,
+	JT_4_M_NINJA_RED,
+	JT_4_M_NINJA_BLUE,
+	JT_4_M_THIEF_RUMIN,
+	JT_4_M_NOV_RUMIN,
+	JT_4_F_MAYSEL,
+	JT_4_F_ACOLYTE,
+	JT_4_M_NOV_HUNT,
+	JT_4_F_GENETIC,
+	JT_4_F_TAEKWON,
+	JT_4_F_SWORDMAN,
+	JT_4_F_IU,
+	JT_4_M_RAGI,
+	JT_4_M_MELODY,
+	JT_4_TRACE,
+	JT_4_F_HIMEL,
+	JT_4_LEVITATEMAN,
+	JT_4_M_HEINRICH,
+	JT_4_M_ROYALGUARD,
+	JT_4_M_BARMUND,
+	JT_4_F_KHALITZBURG,
+	JT_4_F_HIMEL2,
+	JT_4_WHITEKNIGHT,
+	JT_4_COCO,
+	JT_4_M_ALADDIN,
+	JT_4_M_GENIE,
+	JT_4_F_GENIE,
+	JT_4_JP_MID_SWIM,
+	JT_4_JP_RUNE_SWIM,
+	JT_4_F_FENRIR,
+	JT_4_F_GEFFEN_FAY,
+	JT_4_F_IRIS,
+	JT_4_F_LUCILE,
+	JT_4_F_SARAH_BABY,
+	JT_4_GEFFEN_01,
+	JT_4_GEFFEN_02,
+	JT_4_GEFFEN_03,
+	JT_4_GEFFEN_04,
+	JT_4_GEFFEN_05,
+	JT_4_GEFFEN_06,
+	JT_4_GEFFEN_07,
+	JT_4_GEFFEN_08,
+	JT_4_GEFFEN_09,
+	JT_4_GEFFEN_10,
+	JT_4_GEFFEN_11,
+	JT_4_GEFFEN_12,
+	JT_4_GEFFEN_13,
+	JT_4_GEFFEN_14,
+	JT_4_M_CHAOS,
+	JT_4_M_CHIEF_IRIN,
+	JT_4_M_SAKRAY,
+	JT_4_M_SAKRAYROYAL,
+	JT_4_TOWER_01,
+	JT_4_TOWER_02,
+	JT_4_TOWER_03,
+	JT_4_TOWER_04,
+	JT_4_TOWER_05,
+	JT_4_TOWER_06,
+	JT_4_TOWER_07,
+	JT_4_TOWER_08,
+	JT_4_TOWER_09,
+	JT_4_TOWER_10,
+	JT_4_TOWER_11,
+	JT_4_TOWER_12,
+	JT_4_TOWER_13,
+	JT_8_F_GIRL,
+	JT_4_F_GODEMOM,
+	JT_4_F_GON,
+	JT_4_F_KID2,
+	JT_4_M_BIBI,
+	JT_4_M_GEF_SOLDIER,
+	JT_4_M_KID1,
+	JT_4_M_MOC_SOLDIER,
+	JT_4_M_PAY_SOLDIER,
+	JT_4_M_SEAMAN,
+	JT_4_M_SNOWMAN,
+	JT_4_F_05,
+	JT_4_M_05,
+	JT_4_M_06,
+	JT_4_F_06,
+	JT_4_M_PIERROT,
+	JT_4_M_KID2,
+	JT_4_F_KID3,
+	JT_4_M_SANTA,
+	JT_4_F_NACORURI,
+	JT_4_F_SHAMAN,
+	JT_4_F_KAFRA7,
+	JT_GUILD_FLAG,
+	JT_1_SHADOW_NPC,
+	JT_4_F_07,
+	JT_4_F_JOB_ASSASSIN,
+	JT_4_F_JOB_BLACKSMITH,
+	JT_4_F_JOB_HUNTER,
+	JT_4_F_JOB_KNIGHT,
+	JT_4_F_NOVICE,
+	JT_4_M_JOB_ASSASSIN,
+	JT_4_M_JOB_BLACKSMITH,
+	JT_4_M_JOB_HUNTER,
+	JT_4_M_JOB_KNIGHT1,
+	JT_4_M_JOB_KNIGHT2,
+	JT_4_M_JOB_WIZARD,
+	JT_4_BAPHOMET,
+	JT_4_DARKLORD,
+	JT_4_DEVIRUCHI,
+	JT_8_DOPPEL,
+	JT_2_M_ALCHE,
+	JT_2_M_BARD_ORIENT,
+	JT_2_M_SAGE_B,
+	JT_2_M_SAGE_OLD,
+	JT_4_F_ALCHE,
+	JT_4_F_CRU,
+	JT_4_F_MONK,
+	JT_4_F_ROGUE,
+	JT_4_M_ALCHE_A,
+	JT_4_M_ALCHE_B,
+	JT_4_M_ALCHE_C,
+	JT_4_M_CRU,
+	JT_4_M_CRU_OLD,
+	JT_4_M_MONK,
+	JT_4_M_SAGE_A,
+	JT_4_M_SAGE_C,
+	JT_4_F_SON,
+	JT_4_F_JPN2,
+	JT_4_F_JPN,
+	JT_4_F_JPNCHIBI,
+	JT_4_F_JPNOBA2,
+	JT_4_F_JPNOBA,
+	JT_4_M_JPN2,
+	JT_4_M_JPN,
+	JT_4_M_JPNCHIBI,
+	JT_4_M_JPNOJI2,
+	JT_4_M_JPNOJI,
+	JT_8_M_JPNSOLDIER,
+	JT_8_M_JPNMASTER,
+	JT_4_F_JPNMU,
+	JT_4_F_TWGIRL,
+	JT_4_F_TWGRANDMOM,
+	JT_4_F_TWMASKGIRL,
+	JT_4_F_TWMIDWOMAN,
+	JT_4_M_TWBOY,
+	JT_4_M_TWMASKMAN,
+	JT_4_M_TWMIDMAN,
+	JT_4_M_TWOLDMAN,
+	JT_4_M_TWTEAMAN,
+	JT_4_M_YOYOROGUE,
+	JT_8_M_TWSOLDIER,
+	JT_4_F_UMGIRL,
+	JT_4_F_UMOLDWOMAN,
+	JT_4_F_UMWOMAN,
+	JT_4_M_UMCHIEF,
+	JT_4_M_UMDANCEKID2,
+	JT_4_M_UMDANCEKID,
+	JT_4_M_UMKID,
+	JT_4_M_UMOLDMAN,
+	JT_4_M_UMSOLDIER,
+	JT_4_M_SALVATION,
+	JT_4_F_NFDEADKAFRA,
+	JT_4_F_NFDEADMGCIAN,
+	JT_4_F_NFLOSTGIRL,
+	JT_4_M_NFDEADMAN2,
+	JT_4_M_NFDEADMAN,
+	JT_4_M_NFDEADSWDMAN,
+	JT_4_M_NFLOSTMAN,
+	JT_4_M_NFMAN,
+	JT_4_NFBAT,
+	JT_4_NFCOCK,
+	JT_4_NFCOFFIN,
+	JT_4_NFWISP,
+	JT_1_F_SIGNZISK,
+	JT_1_M_SIGN1,
+	JT_1_M_SIGNALCHE,
+	JT_1_M_SIGNART,
+	JT_1_M_SIGNMCNT,
+	JT_1_M_SIGNMONK2,
+	JT_1_M_SIGNMONK,
+	JT_1_M_SIGNROGUE,
+	JT_4_F_VALKYRIE,
+	JT_TW_TOWER,
+	JT_2_M_OLDBLSMITH,
+	JT_4_F_CHNDOCTOR,
+	JT_4_F_CHNDRESS1,
+	JT_4_F_CHNDRESS2,
+	JT_4_F_CHNDRESS3,
+	JT_4_F_CHNWOMAN,
+	JT_4_M_CHN8GUEK,
+	JT_4_M_CHNCOOK,
+	JT_4_M_CHNGENERL,
+	JT_4_M_CHNMAN,
+	JT_4_M_CHNMONK,
+	JT_4_M_CHNOLD,
+	JT_4_M_CHNSOLDIER,
+	JT_4_M_DWARF,
+	JT_4_M_GRANDMONK,
+	JT_4_M_ROGUE,
+	JT_4_M_DOMINO,
+	JT_4_F_DOMINO,
+	JT_4_F_ZONDAGIRL,
+	JT_4_M_REIDIN_KURS,
+	JT_4_M_ZONDAOYAJI,
+	JT_4_M_BUDDHIST,
+	JT_2_BOARD1,
+	JT_2_BOARD2,
+	JT_2_BULLETIN_BOARD,
+	JT_4_F_THAIAYO,
+	JT_4_F_THAIGIRL,
+	JT_4_F_THAISHAMAN,
+	JT_4_M_THAIAYO,
+	JT_4_M_THAIOLD,
+	JT_4_M_THAIONGBAK,
+	JT_CLEAR_NPC,
+	JT_4_F_RACING,
+	JT_4_F_EINOLD,
+	JT_4_M_EINOLD,
+	JT_4_M_EINMINER,
+	JT_4_M_DIEMAN,
+	JT_4_F_EINWOMAN,
+	JT_4_M_REPAIR,
+	JT_4_M_EIN_SOLDIER,
+	JT_4_M_YURI,
+	JT_4_M_EINMAN2,
+	JT_4_M_EINMAN,
+	JT_2_F_SIGN1,
+	JT_4_BOARD3,
+	JT_4_BULLETIN_BOARD2,
+	JT_4_F_AGENTKAFRA,
+	JT_4_F_KAFRA8,
+	JT_4_F_KAFRA9,
+	JT_4_F_LGTGIRL,
+	JT_4_F_LGTGRAND,
+	JT_4_F_OPERATION,
+	JT_4_LGTSCIENCE,
+	JT_4_M_LGTGRAND,
+	JT_4_M_LGTGUARD2,
+	JT_4_M_LGTGUARD,
+	JT_4_M_LGTMAN,
+	JT_4_M_LGTPOOR,
+	JT_4_M_OPERATION,
+	JT_4_M_PRESIDENT,
+	JT_4_M_REINDEER,
+	JT_4_M_ZONDAMAN,
+	JT_4_M_PECOKNIGHT,
+	JT_4_CAT,
+	JT_4_F_YUNYANG,
+	JT_4_M_OILMAN,
+	JT_4_F_CAPEGIRL,
+	JT_4_M_MASKMAN,
+	JT_4_M_SITDOWN,
+	JT_4_F_SITDOWN,
+	JT_4_M_ALCHE_D,
+	JT_4_M_ACROSS,
+	JT_4_F_ACROSS,
+	JT_4_COOK,
+	JT_4_M_LIEMAN,
+	JT_2_POSTBOX,
+	JT_4_BULL,
+	JT_4_LAM,
+	JT_4_F_HUGIRL,
+	JT_4_F_HUGRANMA,
+	JT_4_F_HUWOMAN,
+	JT_4_F_KHELLISIA,
+	JT_4_F_KHELLY,
+	JT_4_M_HUBOY,
+	JT_4_M_HUGRANFA,
+	JT_4_M_HUMAN_01,
+	JT_4_M_HUMAN_02,
+	JT_4_M_HUMERCHANT,
+	JT_4_M_HUOLDARMY,
+	JT_4_M_KHKIEL,
+	JT_4_M_KHKYEL,
+	JT_4_M_KHMAN,
+	JT_4_F_KHWOMAN,
+	JT_4_F_KHGIRL,
+	JT_4_M_KHBOY,
+	JT_4_M_PHILMAN,
+	JT_4_PORING,
+	JT_2_COLAVEND,
+	JT_4_F_SOCCER,
+	JT_4_M_SOCCER7,
+	JT_4_M_SOCCER9,
+	JT_4_F_CHILD,
+	JT_4_F_MADAME,
+	JT_4_F_MASK1,
+	JT_4_F_MASK,
+	JT_4_F_RACHOLD,
+	JT_4_F_SHABBY,
+	JT_4_F_TRAINEE,
+	JT_4_M_CHILD1,
+	JT_4_M_CHILD,
+	JT_4_M_DOCTOR,
+	JT_4_M_FROZEN1,
+	JT_4_M_FROZEN,
+	JT_4_M_MASK1,
+	JT_4_M_MASK,
+	JT_4_M_MIDDLE1,
+	JT_4_M_MIDDLE,
+	JT_4_M_RACHMAN2,
+	JT_4_M_RACHMAN1,
+	JT_4_M_RACHOLD1,
+	JT_4_M_RACHOLD,
+	JT_4_M_RASWORD,
+	JT_4_M_TRAINEE,
+	JT_4_F_ARUNA_POP,
+	JT_4_M_ARUNA_NFM1,
+	JT_4_DST_CAMEL,
+	JT_4_DST_SOLDIER,
+	JT_4_F_DESERT,
+	JT_4_F_DST_CHILD,
+	JT_4_F_DST_GRAND,
+	JT_4_M_DESERT,
+	JT_4_M_DST_CHILD,
+	JT_4_M_DST_GRAND,
+	JT_4_M_DST_MASTER,
+	JT_4_M_DST_TOUGH,
+	JT_4_ANGELING,
+	JT_4_ARCHANGELING,
+	JT_4_GHOSTRING,
+	JT_4_F_EDEN_MASTER,
+	JT_4_F_EDEN_OFFICER,
+	JT_4_M_EDEN_GUARDER,
+	JT_4_M_PATRICK,
+	JT_4_DONKEY,
+	JT_4_M_TRISTAN,
+	JT_4_WHITE_COW,
+	JT_4_F_RUSCHILD,
+	JT_4_F_RUSWOMAN1,
+	JT_4_F_RUSWOMAN2,
+	JT_4_F_RUSWOMAN3,
+	JT_4_M_RUSCHILD,
+	JT_4_M_GUSLIMAN,
+	JT_4_M_RUSBALD,
+	JT_4_M_RUSKING,
+	JT_4_M_RUSKNIGHT,
+	JT_4_M_RUSMAN1,
+	JT_4_M_RUSMAN2,
+	JT_4_M_DRAKE,
+	JT_4_F_BABAYAGA,
+	JT_4_F_RUSGREEN,
+	JT_4_RUS_DWOLF,
+	JT_1_FLAG_LION,
+	JT_1_FLAG_EAGLE,
+	JT_4_M_MIKID,
+	JT_4_BLUE_FLOWER,
+	JT_4_RED_FLOWER,
+	JT_4_YELL_FLOWER,
+	JT_4_F_CAVE1,
+	JT_4_F_MUT1,
+	JT_4_F_MUT2,
+	JT_4_F_SCIENCE,
+	JT_4_M_1STPRIN1,
+	JT_4_M_1STPRIN2,
+	JT_4_M_2NDPRIN1,
+	JT_4_M_2NDPRIN2,
+	JT_4_M_3RDPRIN1,
+	JT_4_M_3RDPRIN2,
+	JT_4_M_4THPRIN1,
+	JT_4_M_4THPRIN2,
+	JT_4_M_5THPRIN1,
+	JT_4_M_5THPRIN2,
+	JT_4_M_6THPRIN1,
+	JT_4_M_6THPRIN2,
+	JT_4_M_CASMAN1,
+	JT_4_M_CAVE1,
+	JT_4_M_MOCASS1,
+	JT_4_M_MOCASS2,
+	JT_4_M_MUT1,
+	NPC_RANGE2_END, // Official JT_MON_BEGIN
+
+	NPC_RANGE3_START = 10000, // Official JT_NEW_NPC_3RD_BEGIN
+	JT_4_TOWER_14,
+	JT_4_TOWER_15,
+	JT_4_TOWER_16,
+	JT_4_TOWER_17,
+	JT_4_TREASURE_BOX,
+	JT_ACADEMY_MASTER,
+	JT_PORTAL,
+	JT_THANATOS_BATTLE,
+	JT_THANATOS_KEEP,
+	JT_4_F_LYDIA,
+	JT_4_LUDE,
+	JT_4_ALIZA,
+	JT_4_ALICE,
+	JT_4_ARCHER_SKEL,
+	JT_4_JACK,
+	JT_4_SOLDIER_SKEL,
+	JT_4_LOLI_RURI,
+	JT_4_M_SAKRAY_TIED,
+	JT_4_M_ANTONIO,
+	JT_4_M_COOKIE,
+	JT_4_M_BELIEVER01,
+	JT_4_F_BELIEVER01,
+	JT_4_M_BELIEVER02,
+	JT_4_ROPEPILE,
+	JT_4_BRICKPILE,
+	JT_4_WOODPILE,
+	JT_4_M_TAMARIN,
+	JT_4_M_DEATH,
+	JT_4_GHOST_STAND,
+	JT_4_GHOST_COLLAPSE,
+	JT_4_COOKIEHOUSE,
+	JT_4_F_SKULL06GIRL,
+	JT_4_NONMYSTCASE,
+	JT_4_F_KIMI,
+	JT_4_M_FROZEN_GC,
+	JT_4_M_FROZEN_KN,
+	JT_4_SNAKE_LORD,
+	JT_4_F_MOCBOY,
+	JT_4_F_RUNAIN,
+	JT_4_M_ROEL,
+	JT_4_F_SHALOSH,
+	JT_4_ENERGY_RED,
+	JT_4_ENERGY_BLUE,
+	JT_4_ENERGY_YELLOW,
+	JT_4_ENERGY_BLACK,
+	JT_4_ENERGY_WHITE,
+	JT_4_F_PERE01,
+	JT_4_JITTERBUG,
+	JT_4_SEA_OTTER,
+	JT_4_GALAPAGO,
+	JT_4_DESERTWOLF_B,
+	JT_4_BB_PORING,
+	JT_4_F_CHARLESTON01,
+	JT_4_F_CHARLESTON02,
+	JT_4_F_CHARLESTON03,
+	JT_4_M_IAN,
+	JT_4_M_OLDSCHOLAR,
+	JT_4_F_LAPERM,
+	JT_4_M_DEBON,
+	JT_4_M_BIRMAN,
+	JT_4_F_SHAM,
+	JT_4_M_REBELLION,
+	JT_4_F_REBELLION,
+	JT_4_CHN_SHAOTH,
+	JT_4_SHOAL,
+	JT_4_F_SARAH,
+	JT_4_GIGANTES_BIG,
+	JT_4_GIGANTES,
+	JT_4_GIGANTES_SMALL,
+	JT_4_GARGOYLE_STATUE,
+	JT_4_AIRA,
+	JT_4_EZELLA,
+	JT_4_KULUNA,
+	JT_4_LUNE,
+	JT_4_MALLINA,
+	JT_4_MORIN,
+	JT_4_NASARIN,
+	JT_4_F_BERRYTEA,
+	JT_4_F_FRUIT,
+	JT_4_SCR_MT_ROBOTS,
+	JT_4_MACHINE_DEVICE,
+	JT_4_GC109,
+	JT_4_SYS_MSG,
+	JT_4_M_TATIO,
+	JT_4_M_REKENBER,
+	JT_4_XMAS_CAT1,
+	JT_4_XMAS_CAT2,
+	JT_4_XMAS_CAT3,
+	JT_4_XMAS_CAT4,
+	JT_4_XMAS_CAT5,
+	JT_4_XMAS_CAT6,
+	JT_4_M_DEATH2,
+	JT_4_S_KADOMATSU,
+	JT_4_B_KADOMATSU,
+	JT_4_F_08,
+	JT_4_F_08_STATUE,
+	JT_4_M_DARKPRIEST,
+	JT_4_JP_GARM_H,
+	JT_4_JP_MEDUSA_H,
+	JT_4_CHN_GVG_01,
+	JT_4_SPRING_RABBIT,
+	JT_4_PD_TYRA,
+	JT_4_PD_TYRANOS,
+	JT_4_PD_PLESI,
+	JT_4_PD_PLESIO,
+	JT_4_PD_BRACHI,
+	JT_4_PD_BRACHIOS,
+	JT_4_PD_GOLDDRAGON,
+	JT_4_PD_ZAEROG,
+	JT_4_PD_TAMADORA,
+	JT_4_JP_EDGA_H,
+	JT_4_JP_BRAGOLEM_H,
+	JT_4_EL_AQUA,
+	JT_4_EP16_NIHIL,
+	JT_4_EP16_SPICA,
+	JT_4_EP16_SKIA,
+	JT_4_EP16_PETER,
+	JT_4_EP16_CRUX,
+	JT_4_EP16_GRANZ,
+	JT_4_EP16_STOLZ,
+	JT_4_EP16_EGEO,
+	JT_4_EP16_COOK,
+	JT_4_EP16_MARK,
+	JT_4_EP16_TAMARIN,
+	JT_4_EP16_POE,
+	JT_4_EP16_ISAAC,
+	JT_4_EP16_HELMUT,
+	JT_4_EP16_WOLF,
+	JT_4_EP16_MEYER,
+	JT_4_EP16_AGNES,
+	JT_4_EP16_FOOD,
+	JT_4_EP16_LOUVIERE,
+	JT_4_EP16_MAX,
+	JT_4_EP16_SPIEGEL,
+	JT_4_MOONLIGHT,
+	JT_4_MISTRESS,
+	JT_4_DRACULA,
+	JT_4_STORMKNIGHT,
+	JT_4_TATTER,
+	JT_4_AS_RAGGED_GOLEM,
+	JT_4_AS_BLOODY_KNIGHT,
+	JT_4_AS_WIND_GHOST,
+	JT_4_F_BIJOU,
+	JT_4_EP16_COOK2,
+	JT_4_SERVICE_30_M_01,
+	JT_4_SERVICE_30_F_01,
+	JT_4_SCR_AT_ROBOTS,
+	JT_4_F_RANGER,
+	JT_4_WAG,
+	JT_4_NPC_TRAP,
+	JT_4_RAGGLER,
+	JT_4_DR_PEPE,
+	JT_4_DR_GAMBERI,
+	JT_4_DR_AGLIO,
+	JT_4_DR_OLIO,
+	JT_4_DR_STELO,
+	JT_4_DR_TORTEL,
+	JT_4_BASIL_SLAVE,
+	JT_4_DOU_JINDO,
+	JT_4_DOU_SIBA,
+	JT_4_TARUTUPI,
+	JT_4_DR_SOLDIER,
+	JT_4_DR_M_01,
+	JT_4_DR_M_02,
+	JT_4_DR_F_01,
+	JT_4_DR_F_02,
+	JT_4_DR_KID_01,
+	JT_4_JP_2015EVT,
+	JT_4_ALLIGATOR,
+	JT_4_ANOLIAN,
+	JT_4_TACNU,
+	JT_4_CENERE,
+	JT_4_F_ARUNA_POP2,
+	JT_4_JACK_HEAD,
+	JT_4_INJUSTICE,
+	JT_4_BLOODYMAN,
+	JT_4_GIBBET,
+	JT_4_DULLAHAN,
+	JT_4_M_LAZY,
+	JT_4_M_GONY,
+	JT_4_M_ROOKIE,
+	JT_4_M_PHILOFONTES,
+	JT_4_F_ESTLOVELOY,
+	JT_4_F_LEEDSH,
+	JT_4_F_DIENE,
+	JT_4_F_COATNEIS,
+	JT_4_M_RUPERT,
+	JT_4_M_FALLENGONY,
+	JT_4_M_EISEN,
+	JT_4_F_DEADEVIL,
+	JT_4_F_HUNTER_EVIL,
+	JT_4_F_ELENA,
+	JT_4_F_ANYA,
+	JT_4_M_SEIREN_UC,
+	JT_4_M_GUNSLINGER2,
+	JT_4_M_GUNSLINGER3,
+	JT_4_M_REBELLION2,
+	JT_4_M_REBELLION3,
+	JT_4_F_GUNSLINGER2,
+	JT_4_F_GUNSLINGER3,
+	JT_4_F_REBELLION2,
+	JT_4_F_REBELLION3,
+	JT_4_M_ILYA,
+
+	JT_4_ELDER = 10205,
+	JT_4_LUNATIC,
+	JT_4_F_NOVICE2,
+	JT_4_WICKEDNYMPH,
+	JT_4_F_PREMI,
+	JT_4_M_COSTELL,
+	JT_4_M_YATTWARP,
+	JT_4_M_EVOKASCUDI,
+	JT_4_M_JOHNNYJAMES,
+	JT_4_M_ALBERTFORD,
+	JT_4_M_SEANMCCURDY,
+	JT_4_M_KARAMPUCCI,
+	JT_4_M_CACTUSMAN1,
+	JT_4_M_CACTUSMAN2,
+	JT_4_M_CACTUSMAN3,
+	JT_4_M_CACTUSLADY,
+	JT_4_M_GAST,
+	JT_4_M_CACTUSCHILD,
+	JT_4_KING,
+	JT_4_F_BOMI,
+	JT_4_M_CACTUSCHIEF,
+	JT_4_F_CACTUSCHILD2,
+	JT_4_F_CACTUSLADY2,
+	JT_4_F_CACTUSLADY3,
+	JT_4_M_CACTUS,
+	JT_4_M_COWRAIDERS1,
+	JT_4_M_COWRAIDERS2,
+	JT_4_M_COWRAIDERS3,
+	JT_4_F_JP14THEVT,
+	JT_4_M_POORSCHOLAR,
+	JT_4_M_PEPPERROTI,
+	JT_JP_NPC01,
+	JT_4_PURPLE_WARP,
+	JT_4_F_NARIN,
+	JT_4_M_URGENT_MAN,
+	JT_4_M_KEEN_SOLDIER,
+	JT_4_F_SLOPPY_WOMAN,
+	JT_4_F_DRKAFRA01,
+	JT_4_M_DRZONDA01,
+	JT_4_M_SWD_RENO,
+	JT_4_M_KNG_RENO,
+	JT_4_M_AC_RUMIN,
+	JT_4_M_HIGH_WIZARD,
+	JT_4_SYSTEM_BOX,
+	JT_4_STEELBOX,
+	JT_4_WOODBOX,
+	JT_4_M_POPFESTA,
+	JT_4_BONFIRE,
+	JT_4_PCCOUNT,
+	JT_4_LAVAGOLEM,
+
+	JT_JP_NPC02 = 10261,
+	JT_JP_NPC03,
+	JT_JP_NPC04,
+	JT_JP_NPC05,
+	JT_JP_NPC06,
+	JT_JP_NPC07,
+	JT_JP_NPC08,
+	JT_JP_NPC09,
+	JT_JP_NPC10,
+
+	JT_4_SCATLETON = 10271,
+	JT_4_JP_AB_NPC_001,
+	JT_4_JP_AB_NPC_002,
+	JT_4_JP_AB_NPC_003,
+	JT_4_JP_AB_NPC_004,
+	JT_4_JP_AB_NPC_005,
+	JT_4_JP_AB_NPC_006,
+	JT_4_JP_AB_NPC_007,
+	JT_4_JP_AB_NPC_008,
+	JT_4_JJAK,
+	NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999
+
+	// Unofficial
+	JT_INVISIBLE = 32767,
+	JT_FAKENPC = -1
 };
 
 // Old NPC range
-#define MAX_NPC_CLASS 1000
+#define MAX_NPC_CLASS NPC_RANGE2_END
 // New NPC range
-#define MAX_NPC_CLASS2_START 10000
-#define MAX_NPC_CLASS2_END 10270
+#define MAX_NPC_CLASS2_START NPC_RANGE3_START
+#define MAX_NPC_CLASS2_END NPC_RANGE3_END
 
 //Checks if a given id is a valid npc id. [Skotlex]
 //Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
-#define npcdb_checkid(id) ( ( (id) >= 46 && (id) <= 125) || (id) == HIDDEN_WARP_CLASS || ( (id) > 400 && (id) < MAX_NPC_CLASS ) || (id) == INVISIBLE_CLASS || ( id > MAX_NPC_CLASS2_START && id < MAX_NPC_CLASS2_END ) )
+#define npcdb_checkid(id) ( ( (id) > NPC_RANGE1_START && (id) < NPC_RANGE1_END ) || (id) == JT_HIDDEN_WARP_NPC || ( (id) > NPC_RANGE2_START && (id) < NPC_RANGE2_END ) || (id) == JT_INVISIBLE || ( id > NPC_RANGE3_START && id < NPC_RANGE3_END ) )
 
 #ifdef PCRE_SUPPORT
 void npc_chat_finalize(struct npc_data* nd);

+ 9 - 9
src/map/pc.c

@@ -985,6 +985,7 @@ bool pc_adoption(struct map_session_data *p1_sd, struct map_session_data *p2_sd,
 		// Baby Skills
 		pc_skill(b_sd, WE_BABY, 1, ADDSKILL_PERMANENT);
 		pc_skill(b_sd, WE_CALLPARENT, 1, ADDSKILL_PERMANENT);
+		pc_skill(b_sd, WE_CHEERUP, 1, ADDSKILL_PERMANENT);
 
 		// Parents Skills
 		pc_skill(p1_sd, WE_CALLBABY, 1, ADDSKILL_PERMANENT);
@@ -1521,7 +1522,7 @@ void pc_reg_received(struct map_session_data *sd)
 	}
 
 	if( pc_isinvisible(sd) ) {
-		sd->vd.class_ = INVISIBLE_CLASS;
+		sd->vd.class_ = JT_INVISIBLE;
 		clif_displaymessage( sd->fd, msg_txt( sd, 11 ) ); // Invisible: On
 		// decrement the number of pvp players on the map
 		map[sd->bl.m].users_pvp--;
@@ -4948,7 +4949,6 @@ bool pc_isUseitem(struct map_session_data *sd,int n)
 		sd->sc.data[SC_CRYSTALIZE] ||
 		sd->sc.data[SC_KAGEHUMI] ||
 		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM) ||
-		sd->sc.data[SC_HEAT_BARREL_AFTER] ||
 		sd->sc.data[SC_KINGS_GRACE] ||
 		sd->sc.data[SC_SUHIDE]))
 		return false;
@@ -6336,9 +6336,11 @@ const char* job_name(int class_)
 		return msg_txt(NULL,695);
 
 	case JOB_SUMMONER:
+		return msg_txt(NULL,697);
 	case JOB_BABY_SUMMONER:
+		return msg_txt(NULL,698);
 	case JOB_BABY_NINJA:
-		return msg_txt(NULL,697 - JOB_SUMMONER+class_);
+		return msg_txt(NULL,699);
 
 	case JOB_BABY_KAGEROU:
 	case JOB_BABY_OBORO:
@@ -6380,7 +6382,7 @@ int pc_follow_timer(int tid, unsigned int tick, int id, intptr_t data)
 	sd->followtimer = INVALID_TIMER;
 	tbl = map_id2bl(sd->followtarget);
 
-	if (tbl == NULL || pc_isdead(sd) || status_isdead(tbl))
+	if (tbl == NULL || pc_isdead(sd))
 	{
 		pc_stop_following(sd);
 		return 0;
@@ -8958,12 +8960,11 @@ bool pc_candrop(struct map_session_data *sd, struct item *item)
 bool pc_can_attack( struct map_session_data *sd, int target_id ) {
 	nullpo_retr(false, sd);
 
-	if (!&sd->sc)
-		return true;
+	if( pc_is90overweight(sd) || pc_isridingwug(sd) )
+		return false;
 
 	if( sd->sc.data[SC_BASILICA] ||
 		sd->sc.data[SC__SHADOWFORM] ||
-		sd->sc.data[SC__MANHOLE] ||
 		sd->sc.data[SC_CURSEDCIRCLE_ATKER] ||
 		sd->sc.data[SC_CURSEDCIRCLE_TARGET] ||
 		sd->sc.data[SC_CRYSTALIZE] ||
@@ -9918,7 +9919,6 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
 			skill_enchant_elemental_end(&sd->bl, SC_NONE);
 		status_change_end(&sd->bl, SC_FEARBREEZE, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_EXEEDBREAK, INVALID_TIMER);
-		status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER);
 	}
 
 	// On armor change
@@ -9930,7 +9930,7 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
 	}
 
 	// On ammo change
-	if (sd->inventory_data[n]->type == IT_AMMO)
+	if (sd->inventory_data[n]->type == IT_AMMO && (sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET || sd->inventory_data[n]->nameid != ITEMID_PURIFICATION_BULLET || sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET_))
 		status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER);
 
 	if (sd->state.autobonus&sd->inventory.u.items_inventory[n].equip)

+ 2 - 2
src/map/pc.h

@@ -41,8 +41,8 @@ extern "C" {
 #define ROULETTE_GOLD_VAR "RouletteGold"
 
 //Update this max as necessary. 55 is the value needed for Super Baby currently
-//Raised to 84 since Expanded Super Novice needs it.
-#define MAX_SKILL_TREE 84
+//Raised to 85 since Expanded Super Baby needs it.
+#define MAX_SKILL_TREE 85
 //Total number of classes (for data storage)
 #define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
 

+ 102 - 22
src/map/script.cpp

@@ -266,6 +266,8 @@ struct Script_Config script_config = {
 	"OnTouchNPC", //ontouchnpc_event_name (run whenever a monster walks into the OnTouch area)
 	"OnWhisperGlobal",	//onwhisper_event_name (is executed when a player sends a whisper message to the NPC)
 	"OnCommand", //oncommand_event_name (is executed by script command cmdothernpc)
+	"OnBuyItem", //onbuy_event_name (is executed when items are bought)
+	"OnSellItem", //onsell_event_name (is executed when items are sold)
 	// Init related
 	"OnInit", //init_event_name (is executed on all npcs when all npcs were loaded)
 	"OnInterIfInit", //inter_init_event_name (is executed on inter server connection)
@@ -283,6 +285,7 @@ struct Script_Config script_config = {
 	"OnAgitEnd3", //agit_end3_event_name (is executed when WoE TE has ended)
 	// Timer related
 	"OnTimer", //timer_event_name (is executed by a timer at the specific second)
+	"OnTimerQuit", //timer_quit_event_name (is executed when a timer is aborted)
 	"OnMinute", //timer_minute_event_name (is executed by a timer at the specific minute)
 	"OnHour", //timer_hour_event_name (is executed by a timer at the specific hour)
 	"OnClock", //timer_clock_event_name (is executed by a timer at the specific hour and minute)
@@ -1052,12 +1055,9 @@ const char* parse_callfunc(const char* p, int require_paren, int is_custom)
 		if( *arg != '*' )
 			++arg; // count func as argument
 	} else {
-#ifdef SCRIPT_CALLFUNC_CHECK
 		const char* name = get_str(func);
 		if( !is_custom && strdb_get(userfunc_db, name) == NULL ) {
-#endif
 			disp_error_message("parse_line: expect command, missing function name or calling undeclared function",p);
-#ifdef SCRIPT_CALLFUNC_CHECK
 		} else {;
 			add_scriptl(buildin_callfunc_ref);
 			add_scriptc(C_ARG);
@@ -1067,7 +1067,6 @@ const char* parse_callfunc(const char* p, int require_paren, int is_custom)
 			arg = buildin_func[str_data[buildin_callfunc_ref].val].arg;
 			if( *arg != '*' ) ++ arg;
 		}
-#endif
 	}
 
 	p = skip_word(p);
@@ -1410,14 +1409,12 @@ const char* parse_simpleexpr(const char *p)
 		l=add_word(p);
 		if( str_data[l].type == C_FUNC || str_data[l].type == C_USERFUNC || str_data[l].type == C_USERFUNC_POS)
 			return parse_callfunc(p,1,0);
-#ifdef SCRIPT_CALLFUNC_CHECK
 		else {
 			const char* name = get_str(l);
 			if( strdb_get(userfunc_db,name) != NULL ) {
 				return parse_callfunc(p,1,1);
 			}
 		}
-#endif
 
 		if( (pv = parse_variable(p)) )
 		{// successfully processed a variable assignment
@@ -10219,7 +10216,7 @@ BUILDIN_FUNC(monster)
 	int amount			= script_getnum(st,7);
 	const char* event	= "";
 	unsigned int size	= SZ_SMALL;
-	unsigned int ai		= AI_NONE;
+	enum mob_ai ai		= AI_NONE;
 
 	struct map_session_data* sd;
 	int16 m;
@@ -10239,7 +10236,7 @@ BUILDIN_FUNC(monster)
 	}
 
 	if (script_hasdata(st, 10)) {
-		ai = script_getnum(st, 10);
+		ai = static_cast<enum mob_ai>(script_getnum(st, 10));
 		if (ai >= AI_MAX) {
 			ShowWarning("buildin_monster: Attempted to spawn non-existing ai %d for monster class %d\n", ai, class_);
 			return SCRIPT_CMD_FAILURE;
@@ -10320,7 +10317,7 @@ BUILDIN_FUNC(areamonster)
 	int amount			= script_getnum(st,9);
 	const char* event	= "";
 	unsigned int size	= SZ_SMALL;
-	unsigned int ai		= AI_NONE;
+	enum mob_ai ai		= AI_NONE;
 
 	struct map_session_data* sd;
 	int16 m;
@@ -10340,7 +10337,7 @@ BUILDIN_FUNC(areamonster)
 	}
 
 	if (script_hasdata(st, 12)) {
-		ai = script_getnum(st, 12);
+		ai = static_cast<enum mob_ai>(script_getnum(st, 12));
 		if (ai >= AI_MAX) {
 			ShowWarning("buildin_monster: Attempted to spawn non-existing ai %d for monster class %d\n", ai, class_);
 			return SCRIPT_CMD_FAILURE;
@@ -14053,6 +14050,13 @@ BUILDIN_FUNC(misceffect)
 	int type;
 
 	type=script_getnum(st,2);
+
+	if( type <= EF_NONE || type >= EF_MAX ){
+		ShowError( "buildin_misceffect: unsupported effect id %d\n", type );
+		return SCRIPT_CMD_FAILURE;
+	}
+
+
 	if(st->oid && st->oid != fake_nd->bl.id) {
 		struct block_list *bl = map_id2bl(st->oid);
 		if (bl)
@@ -14416,6 +14420,11 @@ BUILDIN_FUNC(specialeffect)
 	if(bl==NULL)
 		return SCRIPT_CMD_SUCCESS;
 
+	if( type <= EF_NONE || type >= EF_MAX ){
+		ShowError( "buildin_specialeffect: unsupported effect id %d\n", type );
+		return SCRIPT_CMD_FAILURE;
+	}
+
 	if( script_hasdata(st,4) )
 	{
 		TBL_NPC *nd = npc_name2id(script_getstr(st,4));
@@ -14443,6 +14452,11 @@ BUILDIN_FUNC(specialeffect2)
 		int type = script_getnum(st,2);
 		enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA;
 
+		if( type <= EF_NONE || type >= EF_MAX ){
+			ShowError( "buildin_specialeffect2: unsupported effect id %d\n", type );
+			return SCRIPT_CMD_FAILURE;
+		}
+
 		clif_specialeffect(&sd->bl, type, target);
 	}
 	return SCRIPT_CMD_SUCCESS;
@@ -14554,7 +14568,7 @@ int recovery_sub(struct map_session_data* sd, int revive)
 	if(revive&(1|4) && pc_isdead(sd)) {
 		status_revive(&sd->bl, 100, 100);
 		clif_displaymessage(sd->fd,msg_txt(sd,16)); // You've been revived!
-		clif_specialeffect(&sd->bl, 77, AREA);
+		clif_specialeffect(&sd->bl, EF_RESURRECTION, AREA);
 	} else if(revive&(1|2) && !pc_isdead(sd)) {
 		status_percent_heal(&sd->bl, 100, 100);
 		clif_displaymessage(sd->fd,msg_txt(sd,680)); // You have been recovered!
@@ -15285,7 +15299,7 @@ BUILDIN_FUNC(summon)
 			delete_timer(md->deletetimer, mob_timer_delete);
 		md->deletetimer = add_timer(tick+(timeout>0?timeout:60000),mob_timer_delete,md->bl.id,0);
 		mob_spawn (md); //Now it is ready for spawning.
-		clif_specialeffect(&md->bl,344,AREA);
+		clif_specialeffect(&md->bl,EF_ENTRY2,AREA);
 		sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
 	}
 	script_pushint(st, md->bl.id);
@@ -16457,7 +16471,7 @@ BUILDIN_FUNC(setnpcdisplay)
 {
 	const char* name;
 	const char* newname = NULL;
-	int class_ = -1, size = -1;
+	int class_ = JT_FAKENPC, size = -1;
 	struct script_data* data;
 	struct npc_data* nd;
 
@@ -16497,7 +16511,7 @@ BUILDIN_FUNC(setnpcdisplay)
 	else
 		size = -1;
 
-	if( class_ != -1 && nd->class_ != class_ )
+	if( class_ != JT_FAKENPC && nd->class_ != class_ )
 		npc_setclass(nd, class_);
 	else if( size != -1 )
 	{ // Required to update the visual size
@@ -17494,6 +17508,9 @@ BUILDIN_FUNC(getunitdata)
 		case BL_MER:  mc = map_id2mc(bl->id); break;
 		case BL_ELEM: ed = map_id2ed(bl->id); break;
 		case BL_NPC:  nd = map_id2nd(bl->id); break;
+		default:
+			ShowWarning("buildin_getunitdata: Invalid object type!\n");
+			return SCRIPT_CMD_FAILURE;
 	}
 
 	name = reference_getname(data);
@@ -18250,6 +18267,9 @@ BUILDIN_FUNC(setunitname)
 		case BL_MOB:  md = map_id2md(bl->id); break;
 		case BL_HOM:  hd = map_id2hd(bl->id); break;
 		case BL_PET:  pd = map_id2pd(bl->id); break;
+		default:
+			ShowWarning("buildin_setunitname: Invalid object type!\n");
+			return SCRIPT_CMD_FAILURE;
 	}
 
 	switch (bl->type) {
@@ -19762,7 +19782,7 @@ unsigned short script_instancegetid(struct script_state* st)
 		struct guild *gd = NULL;
 		struct clan *cd = NULL;
 
-		if (script_rid2sd(sd)) {
+		if ((sd = map_id2sd(st->rid))) {
 			if (sd->instance_id)
 				instance_id = sd->instance_id;
 			if (instance_id == 0 && sd->status.party_id && (pd = party_search(sd->status.party_id)) != NULL && pd->instance_id)
@@ -20698,7 +20718,7 @@ BUILDIN_FUNC(ismounting) {
 	
 	if (!script_charid2sd(2,sd))
 		return SCRIPT_CMD_FAILURE;
-	if( &sd->sc && sd->sc.data[SC_ALL_RIDING] )
+	if( sd->sc.data[SC_ALL_RIDING] )
 		script_pushint(st,1);
 	else
 		script_pushint(st,0);
@@ -20716,11 +20736,11 @@ BUILDIN_FUNC(setmounting) {
 	
 	if (!script_charid2sd(2,sd))
 		return SCRIPT_CMD_FAILURE;
-	if( &sd->sc && sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) ) {
+	if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) ) {
 		clif_msg(sd, NEED_REINS_OF_MOUNT);
 		script_pushint(st,0); //can't mount with one of these
 	} else {
-		if( &sd->sc && sd->sc.data[SC_ALL_RIDING] )
+		if( sd->sc.data[SC_ALL_RIDING] )
 			status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER); //release mount
 		else
 			sc_start(NULL, &sd->bl, SC_ALL_RIDING, 10000, 1, INVALID_TIMER); //mount
@@ -20850,7 +20870,7 @@ BUILDIN_FUNC(freeloop) {
 BUILDIN_FUNC(bindatcmd) {
 	const char* atcmd;
 	const char* eventName;
-	int i, level = 0, level2 = 0;
+	int i, level = 0, level2 = 100;
 	bool create = false;
 
 	atcmd = script_getstr(st,2);
@@ -22127,12 +22147,16 @@ BUILDIN_FUNC(getvar) {
 
 /**
  * Display script message
- * showscript "<message>"{,<GID>};
+ * showscript "<message>"{,<GID>,<flag>};
+ * @param flag: Specify target
+ *   AREA - Message is sent to players in the vicinity of the source (default).
+ *   SELF - Message is sent only to player attached.
  **/
 BUILDIN_FUNC(showscript) {
 	struct block_list *bl = NULL;
 	const char *msg = script_getstr(st,2);
 	int id = 0;
+	send_target target = AREA;
 
 	if (script_hasdata(st,3)) {
 		id = script_getnum(st,3);
@@ -22148,7 +22172,15 @@ BUILDIN_FUNC(showscript) {
 		return SCRIPT_CMD_FAILURE;
 	}
 
-	clif_showscript(bl, msg);
+	if (script_hasdata(st, 4)) {
+		target = static_cast<send_target>(script_getnum(st, 4));
+		if (target == SELF && map_id2sd(bl->id) == NULL) {
+			ShowWarning("script: showscript: self can't be used for non-players objects.\n");
+			return SCRIPT_CMD_FAILURE;
+		}
+	}
+
+	clif_showscript(bl, msg, target);
 
 	script_pushint(st,1);
 	return SCRIPT_CMD_SUCCESS;
@@ -22600,6 +22632,11 @@ BUILDIN_FUNC(hateffect){
 	effectID = script_getnum(st,2);
 	enable = script_getnum(st,3) ? true : false;
 
+	if( effectID <= HAT_EF_MIN || effectID >= HAT_EF_MAX ){
+		ShowError( "buildin_hateffect: unsupported hat effect id %d\n", effectID );
+		return SCRIPT_CMD_FAILURE;
+	}
+
 	ARR_FIND( 0, sd->hatEffectCount, i, sd->hatEffectIDs[i] == effectID );
 
 	if( enable ){
@@ -23609,6 +23646,7 @@ BUILDIN_FUNC(achievementupdate) {
 /**
  * Get an equipment's refine cost
  * getequiprefinecost(<equipment slot>,<type>,<information>{,<char id>})
+ * returns -1 on fail
  */
 BUILDIN_FUNC(getequiprefinecost) {
 	int i = -1, slot, type, info;
@@ -23623,9 +23661,19 @@ BUILDIN_FUNC(getequiprefinecost) {
 		return SCRIPT_CMD_FAILURE;
 	}
 
+	if (type < 0 || type >= REFINE_COST_MAX) {
+		script_pushint(st, -1);
+		return SCRIPT_CMD_SUCCESS;
+	}
+
 	if (equip_index_check(slot))
 		i = pc_checkequip(sd, equip_bitmask[slot]);
 
+	if (i < 0) {
+		script_pushint(st, -1);
+		return SCRIPT_CMD_SUCCESS;
+	}
+
 	int weapon_lv = sd->inventory_data[i]->wlv;
 	if (sd->inventory_data[i]->type == IT_SHADOWGEAR) {
 		if (sd->inventory_data[i]->equip == EQP_SHADOW_WEAPON)
@@ -23639,6 +23687,35 @@ BUILDIN_FUNC(getequiprefinecost) {
 	return SCRIPT_CMD_SUCCESS;
 }
 
+/**
+ * Round, floor, ceiling a number to arbitrary integer precision.
+ * round(<number>,<precision>);
+ * ceil(<number>,<precision>);
+ * floor(<number>,<precision>);
+ */
+BUILDIN_FUNC(round) {
+	int num = script_getnum(st, 2);
+	int precision = script_getnum(st, 3);
+	char* func = script_getfuncname(st);
+
+	if (precision <= 0) {
+		ShowError("buildin_round: Attempted to use zero or negative number as arbitrary precision.\n");
+		return SCRIPT_CMD_FAILURE;
+	}
+
+	if (strcasecmp(func, "floor") == 0) {
+		script_pushint(st, num - (num % precision));
+	}
+	else if (strcasecmp(func, "ceil") == 0) {
+		script_pushint(st, num + precision - (num % precision));
+	}
+	else {
+		script_pushint(st, (int)(round(num / (precision * 1.))) * precision);
+	}
+
+	return SCRIPT_CMD_SUCCESS;
+}
+
 #include "../custom/script.inc"
 
 // declarations that were supposed to be exported from npc_chat.c
@@ -24222,7 +24299,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(npcshopupdate,"sii?"),
 	BUILDIN_DEF(getattachedrid,""),
 	BUILDIN_DEF(getvar,"vi"),
-	BUILDIN_DEF(showscript,"s?"),
+	BUILDIN_DEF(showscript,"s??"),
 	BUILDIN_DEF(ignoretimeout,"i?"),
 	BUILDIN_DEF(geteleminfo,"i?"),
 	BUILDIN_DEF(setquestinfo_level,"iii"),
@@ -24281,6 +24358,9 @@ struct script_function buildin_func[] = {
 
 
 	BUILDIN_DEF(getequiprefinecost,"iii?"),
+	BUILDIN_DEF2(round, "round", "i"),
+	BUILDIN_DEF2(round, "ceil", "i"),
+	BUILDIN_DEF2(round, "floor", "i"),
 #include "../custom/script_def.inc"
 
 	{NULL,NULL,NULL},

+ 1166 - 1
src/map/script.h

@@ -169,6 +169,8 @@ extern struct Script_Config {
 	const char* ontouchnpc_event_name;
 	const char* onwhisper_event_name;
 	const char* oncommand_event_name;
+	const char* onbuy_event_name;
+	const char* onsell_event_name;
 
 	// Init related
 	const char* init_event_name;
@@ -189,6 +191,7 @@ extern struct Script_Config {
 
 	// Timer related
 	const char* timer_event_name;
+	const char* timer_quit_event_name;
 	const char* timer_minute_event_name;
 	const char* timer_hour_event_name;
 	const char* timer_clock_event_name;
@@ -703,7 +706,1169 @@ enum vip_status_type {
 	VIP_STATUS_REMAINING
 };
 
-enum mapwarp_type {
+enum e_special_effects {
+	EF_NONE = -1,
+	EF_HIT1,
+	EF_HIT2,
+	EF_HIT3,
+	EF_HIT4,
+	EF_HIT5,
+	EF_HIT6,
+	EF_ENTRY,
+	EF_EXIT,
+	EF_WARP,
+	EF_ENHANCE,
+	EF_COIN,
+	EF_ENDURE,
+	EF_BEGINSPELL,
+	EF_GLASSWALL,
+	EF_HEALSP,
+	EF_SOULSTRIKE,
+	EF_BASH,
+	EF_MAGNUMBREAK,
+	EF_STEAL,
+	EF_HIDING,
+	EF_PATTACK,
+	EF_DETOXICATION,
+	EF_SIGHT,
+	EF_STONECURSE,
+	EF_FIREBALL,
+	EF_FIREWALL,
+	EF_ICEARROW,
+	EF_FROSTDIVER,
+	EF_FROSTDIVER2,
+	EF_LIGHTBOLT,
+	EF_THUNDERSTORM,
+	EF_FIREARROW,
+	EF_NAPALMBEAT,
+	EF_RUWACH,
+	EF_TELEPORTATION,
+	EF_READYPORTAL,
+	EF_PORTAL,
+	EF_INCAGILITY,
+	EF_DECAGILITY,
+	EF_AQUA,
+	EF_SIGNUM,
+	EF_ANGELUS,
+	EF_BLESSING,
+	EF_INCAGIDEX,
+	EF_SMOKE,
+	EF_FIREFLY,
+	EF_SANDWIND,
+	EF_TORCH,
+	EF_SPRAYPOND,
+	EF_FIREHIT,
+	EF_FIRESPLASHHIT,
+	EF_COLDHIT,
+	EF_WINDHIT,
+	EF_POISONHIT,
+	EF_BEGINSPELL2,
+	EF_BEGINSPELL3,
+	EF_BEGINSPELL4,
+	EF_BEGINSPELL5,
+	EF_BEGINSPELL6,
+	EF_BEGINSPELL7,
+	EF_LOCKON,
+	EF_WARPZONE,
+	EF_SIGHTRASHER,
+	EF_BARRIER,
+	EF_ARROWSHOT,
+	EF_INVENOM,
+	EF_CURE,
+	EF_PROVOKE,
+	EF_MVP,
+	EF_SKIDTRAP,
+	EF_BRANDISHSPEAR,
+	EF_CONE,
+	EF_SPHERE,
+	EF_BOWLINGBASH,
+	EF_ICEWALL,
+	EF_GLORIA,
+	EF_MAGNIFICAT,
+	EF_RESURRECTION,
+	EF_RECOVERY,
+	EF_EARTHSPIKE,
+	EF_SPEARBMR,
+	EF_PIERCE,
+	EF_TURNUNDEAD,
+	EF_SANCTUARY,
+	EF_IMPOSITIO,
+	EF_LEXAETERNA,
+	EF_ASPERSIO,
+	EF_LEXDIVINA,
+	EF_SUFFRAGIUM,
+	EF_STORMGUST,
+	EF_LORD,
+	EF_BENEDICTIO,
+	EF_METEORSTORM,
+	EF_YUFITEL,
+	EF_YUFITELHIT,
+	EF_QUAGMIRE,
+	EF_FIREPILLAR,
+	EF_FIREPILLARBOMB,
+	EF_HASTEUP,
+	EF_FLASHER,
+	EF_REMOVETRAP,
+	EF_REPAIRWEAPON,
+	EF_CRASHEARTH,
+	EF_PERFECTION,
+	EF_MAXPOWER,
+	EF_BLASTMINE,
+	EF_BLASTMINEBOMB,
+	EF_CLAYMORE,
+	EF_FREEZING,
+	EF_BUBBLE,
+	EF_GASPUSH,
+	EF_SPRINGTRAP,
+	EF_KYRIE,
+	EF_MAGNUS,
+	EF_BOTTOM,
+	EF_BLITZBEAT,
+	EF_WATERBALL,
+	EF_WATERBALL2,
+	EF_FIREIVY,
+	EF_DETECTING,
+	EF_CLOAKING,
+	EF_SONICBLOW,
+	EF_SONICBLOWHIT,
+	EF_GRIMTOOTH,
+	EF_VENOMDUST,
+	EF_ENCHANTPOISON,
+	EF_POISONREACT,
+	EF_POISONREACT2,
+	EF_OVERTHRUST,
+	EF_SPLASHER,
+	EF_TWOHANDQUICKEN,
+	EF_AUTOCOUNTER,
+	EF_GRIMTOOTHATK,
+	EF_FREEZE,
+	EF_FREEZED,
+	EF_ICECRASH,
+	EF_SLOWPOISON,
+	EF_BOTTOM2,
+	EF_FIREPILLARON,
+	EF_SANDMAN,
+	EF_REVIVE,
+	EF_PNEUMA,
+	EF_HEAVENSDRIVE,
+	EF_SONICBLOW2,
+	EF_BRANDISH2,
+	EF_SHOCKWAVE,
+	EF_SHOCKWAVEHIT,
+	EF_EARTHHIT,
+	EF_PIERCESELF,
+	EF_BOWLINGSELF,
+	EF_SPEARSTABSELF,
+	EF_SPEARBMRSELF,
+	EF_HOLYHIT,
+	EF_CONCENTRATION,
+	EF_REFINEOK,
+	EF_REFINEFAIL,
+	EF_JOBCHANGE,
+	EF_LVUP,
+	EF_JOBLVUP,
+	EF_TOPRANK,
+	EF_PARTY,
+	EF_RAIN,
+	EF_SNOW,
+	EF_SAKURA,
+	EF_STATUS_STATE,
+	EF_BANJJAKII,
+	EF_MAKEBLUR,
+	EF_TAMINGSUCCESS,
+	EF_TAMINGFAILED,
+	EF_ENERGYCOAT,
+	EF_CARTREVOLUTION,
+	EF_VENOMDUST2,
+	EF_CHANGEDARK,
+	EF_CHANGEFIRE,
+	EF_CHANGECOLD,
+	EF_CHANGEWIND,
+	EF_CHANGEFLAME,
+	EF_CHANGEEARTH,
+	EF_CHAINGEHOLY,
+	EF_CHANGEPOISON,
+	EF_HITDARK,
+	EF_MENTALBREAK,
+	EF_MAGICALATTHIT,
+	EF_SUI_EXPLOSION,
+	EF_DARKATTACK,
+	EF_SUICIDE,
+	EF_COMBOATTACK1,
+	EF_COMBOATTACK2,
+	EF_COMBOATTACK3,
+	EF_COMBOATTACK4,
+	EF_COMBOATTACK5,
+	EF_GUIDEDATTACK,
+	EF_POISONATTACK,
+	EF_SILENCEATTACK,
+	EF_STUNATTACK,
+	EF_PETRIFYATTACK,
+	EF_CURSEATTACK,
+	EF_SLEEPATTACK,
+	EF_TELEKHIT,
+	EF_PONG,
+	EF_LEVEL99,
+	EF_LEVEL99_2,
+	EF_LEVEL99_3,
+	EF_GUMGANG,
+	EF_POTION1,
+	EF_POTION2,
+	EF_POTION3,
+	EF_POTION4,
+	EF_POTION5,
+	EF_POTION6,
+	EF_POTION7,
+	EF_POTION8,
+	EF_DARKBREATH,
+	EF_DEFFENDER,
+	EF_KEEPING,
+	EF_SUMMONSLAVE,
+	EF_BLOODDRAIN,
+	EF_ENERGYDRAIN,
+	EF_POTION_CON,
+	EF_POTION_,
+	EF_POTION_BERSERK,
+	EF_POTIONPILLAR,
+	EF_DEFENDER,
+	EF_GANBANTEIN,
+	EF_WIND,
+	EF_VOLCANO,
+	EF_GRANDCROSS,
+	EF_INTIMIDATE,
+	EF_CHOOKGI,
+	EF_CLOUD,
+	EF_CLOUD2,
+	EF_MAPPILLAR,
+	EF_LINELINK,
+	EF_CLOUD3,
+	EF_SPELLBREAKER,
+	EF_DISPELL,
+	EF_DELUGE,
+	EF_VIOLENTGALE,
+	EF_LANDPROTECTOR,
+	EF_BOTTOM_VO,
+	EF_BOTTOM_DE,
+	EF_BOTTOM_VI,
+	EF_BOTTOM_LA,
+	EF_FASTMOVE,
+	EF_MAGICROD,
+	EF_HOLYCROSS,
+	EF_SHIELDCHARGE,
+	EF_MAPPILLAR2,
+	EF_PROVIDENCE,
+	EF_SHIELDBOOMERANG,
+	EF_SPEARQUICKEN,
+	EF_DEVOTION,
+	EF_REFLECTSHIELD,
+	EF_ABSORBSPIRITS,
+	EF_STEELBODY,
+	EF_FLAMELAUNCHER,
+	EF_FROSTWEAPON,
+	EF_LIGHTNINGLOADER,
+	EF_SEISMICWEAPON,
+	EF_MAPPILLAR3,
+	EF_MAPPILLAR4,
+	EF_GUMGANG2,
+	EF_TEIHIT1,
+	EF_GUMGANG3,
+	EF_TEIHIT2,
+	EF_TANJI,
+	EF_TEIHIT1X,
+	EF_CHIMTO,
+	EF_STEALCOIN,
+	EF_STRIPWEAPON,
+	EF_STRIPSHIELD,
+	EF_STRIPARMOR,
+	EF_STRIPHELM,
+	EF_CHAINCOMBO,
+	EF_RG_COIN,
+	EF_BACKSTAP,
+	EF_TEIHIT3,
+	EF_BOTTOM_DISSONANCE,
+	EF_BOTTOM_LULLABY,
+	EF_BOTTOM_RICHMANKIM,
+	EF_BOTTOM_ETERNALCHAOS,
+	EF_BOTTOM_DRUMBATTLEFIELD,
+	EF_BOTTOM_RINGNIBELUNGEN,
+	EF_BOTTOM_ROKISWEIL,
+	EF_BOTTOM_INTOABYSS,
+	EF_BOTTOM_SIEGFRIED,
+	EF_BOTTOM_WHISTLE,
+	EF_BOTTOM_ASSASSINCROSS,
+	EF_BOTTOM_POEMBRAGI,
+	EF_BOTTOM_APPLEIDUN,
+	EF_BOTTOM_UGLYDANCE,
+	EF_BOTTOM_HUMMING,
+	EF_BOTTOM_DONTFORGETME,
+	EF_BOTTOM_FORTUNEKISS,
+	EF_BOTTOM_SERVICEFORYOU,
+	EF_TALK_FROSTJOKE,
+	EF_TALK_SCREAM,
+	EF_POKJUK,
+	EF_THROWITEM,
+	EF_THROWITEM2,
+	EF_CHEMICALPROTECTION,
+	EF_POKJUK_SOUND,
+	EF_DEMONSTRATION,
+	EF_CHEMICAL2,
+	EF_TELEPORTATION2,
+	EF_PHARMACY_OK,
+	EF_PHARMACY_FAIL,
+	EF_FORESTLIGHT,
+	EF_THROWITEM3,
+	EF_FIRSTAID,
+	EF_SPRINKLESAND,
+	EF_LOUD,
+	EF_HEAL,
+	EF_HEAL2,
+	EF_EXIT2,
+	EF_GLASSWALL2,
+	EF_READYPORTAL2,
+	EF_PORTAL2,
+	EF_BOTTOM_MAG,
+	EF_BOTTOM_SANC,
+	EF_HEAL3,
+	EF_WARPZONE2,
+	EF_FORESTLIGHT2,
+	EF_FORESTLIGHT3,
+	EF_FORESTLIGHT4,
+	EF_HEAL4,
+	EF_FOOT,
+	EF_FOOT2,
+	EF_BEGINASURA,
+	EF_TRIPLEATTACK,
+	EF_HITLINE,
+	EF_HPTIME,
+	EF_SPTIME,
+	EF_MAPLE,
+	EF_BLIND,
+	EF_POISON,
+	EF_GUARD,
+	EF_JOBLVUP50,
+	EF_ANGEL2,
+	EF_MAGNUM2,
+	EF_CALLZONE,
+	EF_PORTAL3,
+	EF_COUPLECASTING,
+	EF_HEARTCASTING,
+	EF_ENTRY2,
+	EF_SAINTWING,
+	EF_SPHEREWIND,
+	EF_COLORPAPER,
+	EF_LIGHTSPHERE,
+	EF_WATERFALL,
+	EF_WATERFALL_90,
+	EF_WATERFALL_SMALL,
+	EF_WATERFALL_SMALL_90,
+	EF_WATERFALL_T2,
+	EF_WATERFALL_T2_90,
+	EF_WATERFALL_SMALL_T2,
+	EF_WATERFALL_SMALL_T2_90,
+	EF_MINI_TETRIS,
+	EF_GHOST,
+	EF_BAT,
+	EF_BAT2,
+	EF_SOULBREAKER,
+	EF_LEVEL99_4,
+	EF_VALLENTINE,
+	EF_VALLENTINE2,
+	EF_PRESSURE,
+	EF_BASH3D,
+	EF_AURABLADE,
+	EF_REDBODY,
+	EF_LKCONCENTRATION,
+	EF_BOTTOM_GOSPEL,
+	EF_ANGEL,
+	EF_DEVIL,
+	EF_DRAGONSMOKE,
+	EF_BOTTOM_BASILICA,
+	EF_ASSUMPTIO,
+	EF_HITLINE2,
+	EF_BASH3D2,
+	EF_ENERGYDRAIN2,
+	EF_TRANSBLUEBODY,
+	EF_MAGICCRASHER,
+	EF_LIGHTSPHERE2,
+	EF_LIGHTBLADE,
+	EF_ENERGYDRAIN3,
+	EF_LINELINK2,
+	EF_LINKLIGHT,
+	EF_TRUESIGHT,
+	EF_FALCONASSAULT,
+	EF_TRIPLEATTACK2,
+	EF_PORTAL4,
+	EF_MELTDOWN,
+	EF_CARTBOOST,
+	EF_REJECTSWORD,
+	EF_TRIPLEATTACK3,
+	EF_SPHEREWIND2,
+	EF_LINELINK3,
+	EF_PINKBODY,
+	EF_LEVEL99_5,
+	EF_LEVEL99_6,
+	EF_BASH3D3,
+	EF_BASH3D4,
+	EF_NAPALMVALCAN,
+	EF_PORTAL5,
+	EF_MAGICCRASHER2,
+	EF_BOTTOM_SPIDER,
+	EF_BOTTOM_FOGWALL,
+	EF_SOULBURN,
+	EF_SOULCHANGE,
+	EF_BABY,
+	EF_SOULBREAKER2,
+	EF_RAINBOW,
+	EF_PEONG,
+	EF_TANJI2,
+	EF_PRESSEDBODY,
+	EF_SPINEDBODY,
+	EF_KICKEDBODY,
+	EF_AIRTEXTURE,
+	EF_HITBODY,
+	EF_DOUBLEGUMGANG,
+	EF_REFLECTBODY,
+	EF_BABYBODY,
+	EF_BABYBODY2,
+	EF_GIANTBODY,
+	EF_GIANTBODY2,
+	EF_ASURABODY,
+	EF_4WAYBODY,
+	EF_QUAKEBODY,
+	EF_ASURABODY_MONSTER,
+	EF_HITLINE3,
+	EF_HITLINE4,
+	EF_HITLINE5,
+	EF_HITLINE6,
+	EF_ELECTRIC,
+	EF_ELECTRIC2,
+	EF_HITLINE7,
+	EF_STORMKICK,
+	EF_HALFSPHERE,
+	EF_ATTACKENERGY,
+	EF_ATTACKENERGY2,
+	EF_CHEMICAL3,
+	EF_ASSUMPTIO2,
+	EF_BLUECASTING,
+	EF_RUN,
+	EF_STOPRUN,
+	EF_STOPEFFECT,
+	EF_JUMPBODY,
+	EF_LANDBODY,
+	EF_FOOT3,
+	EF_FOOT4,
+	EF_TAE_READY,
+	EF_GRANDCROSS2,
+	EF_SOULSTRIKE2,
+	EF_YUFITEL2,
+	EF_NPC_STOP,
+	EF_DARKCASTING,
+	EF_GUMGANGNPC,
+	EF_AGIUP,
+	EF_JUMPKICK,
+	EF_QUAKEBODY2,
+	EF_STORMKICK1,
+	EF_STORMKICK2,
+	EF_STORMKICK3,
+	EF_STORMKICK4,
+	EF_STORMKICK5,
+	EF_STORMKICK6,
+	EF_STORMKICK7,
+	EF_SPINEDBODY2,
+	EF_BEGINASURA1,
+	EF_BEGINASURA2,
+	EF_BEGINASURA3,
+	EF_BEGINASURA4,
+	EF_BEGINASURA5,
+	EF_BEGINASURA6,
+	EF_BEGINASURA7,
+	EF_AURABLADE2,
+	EF_DEVIL1,
+	EF_DEVIL2,
+	EF_DEVIL3,
+	EF_DEVIL4,
+	EF_DEVIL5,
+	EF_DEVIL6,
+	EF_DEVIL7,
+	EF_DEVIL8,
+	EF_DEVIL9,
+	EF_DEVIL10,
+	EF_DOUBLEGUMGANG2,
+	EF_DOUBLEGUMGANG3,
+	EF_BLACKDEVIL,
+	EF_FLOWERCAST,
+	EF_FLOWERCAST2,
+	EF_FLOWERCAST3,
+	EF_MOCHI,
+	EF_LAMADAN,
+	EF_EDP,
+	EF_SHIELDBOOMERANG2,
+	EF_RG_COIN2,
+	EF_GUARD2,
+	EF_SLIM,
+	EF_SLIM2,
+	EF_SLIM3,
+	EF_CHEMICALBODY,
+	EF_CASTSPIN,
+	EF_PIERCEBODY,
+	EF_SOULLINK,
+	EF_CHOOKGI2,
+	EF_MEMORIZE,
+	EF_SOULLIGHT,
+	EF_MAPAE,
+	EF_ITEMPOKJUK,
+	EF_05VAL,
+	EF_BEGINASURA11,
+	EF_NIGHT,
+	EF_CHEMICAL2DASH,
+	EF_GROUNDSAMPLE,
+	EF_GI_EXPLOSION,
+	EF_CLOUD4,
+	EF_CLOUD5,
+	EF_BOTTOM_HERMODE,
+	EF_CARTTER,
+	EF_ITEMFAST,
+	EF_SHIELDBOOMERANG3,
+	EF_DOUBLECASTBODY,
+	EF_GRAVITATION,
+	EF_TAROTCARD1,
+	EF_TAROTCARD2,
+	EF_TAROTCARD3,
+	EF_TAROTCARD4,
+	EF_TAROTCARD5,
+	EF_TAROTCARD6,
+	EF_TAROTCARD7,
+	EF_TAROTCARD8,
+	EF_TAROTCARD9,
+	EF_TAROTCARD10,
+	EF_TAROTCARD11,
+	EF_TAROTCARD12,
+	EF_TAROTCARD13,
+	EF_TAROTCARD14,
+	EF_ACIDDEMON,
+	EF_GREENBODY,
+	EF_THROWITEM4,
+	EF_BABYBODY_BACK,
+	EF_THROWITEM5,
+	EF_BLUEBODY,
+	EF_HATED,
+	EF_REDLIGHTBODY,
+	EF_RO2YEAR,
+	EF_SMA_READY,
+	EF_STIN,
+	EF_RED_HIT,
+	EF_BLUE_HIT,
+	EF_QUAKEBODY3,
+	EF_SMA,
+	EF_SMA2,
+	EF_STIN2,
+	EF_HITTEXTURE,
+	EF_STIN3,
+	EF_SMA3,
+	EF_BLUEFALL,
+	EF_BLUEFALL_90,
+	EF_FASTBLUEFALL,
+	EF_FASTBLUEFALL_90,
+	EF_BIG_PORTAL,
+	EF_BIG_PORTAL2,
+	EF_SCREEN_QUAKE,
+	EF_HOMUNCASTING,
+	EF_HFLIMOON1,
+	EF_HFLIMOON2,
+	EF_HFLIMOON3,
+	EF_HO_UP,
+	EF_HAMIDEFENCE,
+	EF_HAMICASTLE,
+	EF_HAMIBLOOD,
+	EF_HATED2,
+	EF_TWILIGHT1,
+	EF_TWILIGHT2,
+	EF_TWILIGHT3,
+	EF_ITEM_THUNDER,
+	EF_ITEM_CLOUD,
+	EF_ITEM_CURSE,
+	EF_ITEM_ZZZ,
+	EF_ITEM_RAIN,
+	EF_ITEM_LIGHT,
+	EF_ANGEL3,
+	EF_M01,
+	EF_M02,
+	EF_M03,
+	EF_M04,
+	EF_M05,
+	EF_M06,
+	EF_M07,
+	EF_KAIZEL,
+	EF_KAAHI,
+	EF_CLOUD6,
+	EF_FOOD01,
+	EF_FOOD02,
+	EF_FOOD03,
+	EF_FOOD04,
+	EF_FOOD05,
+	EF_FOOD06,
+	EF_SHRINK,
+	EF_THROWITEM6,
+	EF_SIGHT2,
+	EF_QUAKEBODY4,
+	EF_FIREHIT2,
+	EF_NPC_STOP2,
+	EF_NPC_STOP2_DEL,
+	EF_FVOICE,
+	EF_WINK,
+	EF_COOKING_OK,
+	EF_COOKING_FAIL,
+	EF_TEMP_OK,
+	EF_TEMP_FAIL,
+	EF_HAPGYEOK,
+	EF_THROWITEM7,
+	EF_THROWITEM8,
+	EF_THROWITEM9,
+	EF_THROWITEM10,
+	EF_BUNSINJYUTSU,
+	EF_KOUENKA,
+	EF_HYOUSENSOU,
+	EF_BOTTOM_SUITON,
+	EF_STIN4,
+	EF_THUNDERSTORM2,
+	EF_CHEMICAL4,
+	EF_STIN5,
+	EF_MADNESS_BLUE,
+	EF_MADNESS_RED,
+	EF_RG_COIN3,
+	EF_BASH3D5,
+	EF_CHOOKGI3,
+	EF_KIRIKAGE,
+	EF_TATAMI,
+	EF_KASUMIKIRI,
+	EF_ISSEN,
+	EF_KAEN,
+	EF_BAKU,
+	EF_HYOUSYOURAKU,
+	EF_DESPERADO,
+	EF_LIGHTNING_S,
+	EF_BLIND_S,
+	EF_POISON_S,
+	EF_FREEZING_S,
+	EF_FLARE_S,
+	EF_RAPIDSHOWER,
+	EF_MAGICALBULLET,
+	EF_SPREADATTACK,
+	EF_TRACKCASTING,
+	EF_TRACKING,
+	EF_TRIPLEACTION,
+	EF_BULLSEYE,
+	EF_MAP_MAGICZONE,
+	EF_MAP_MAGICZONE2,
+	EF_DAMAGE1,
+	EF_DAMAGE1_2,
+	EF_DAMAGE1_3,
+	EF_UNDEADBODY,
+	EF_UNDEADBODY_DEL,
+	EF_GREEN_NUMBER,
+	EF_BLUE_NUMBER,
+	EF_RED_NUMBER,
+	EF_PURPLE_NUMBER,
+	EF_BLACK_NUMBER,
+	EF_WHITE_NUMBER,
+	EF_YELLOW_NUMBER,
+	EF_PINK_NUMBER,
+	EF_BUBBLE_DROP,
+	EF_NPC_EARTHQUAKE,
+	EF_DA_SPACE,
+	EF_DRAGONFEAR,
+	EF_BLEEDING,
+	EF_WIDECONFUSE,
+	EF_BOTTOM_RUNNER,
+	EF_BOTTOM_TRANSFER,
+	EF_CRYSTAL_BLUE,
+	EF_BOTTOM_EVILLAND,
+	EF_GUARD3,
+	EF_NPC_SLOWCAST,
+	EF_CRITICALWOUND,
+	EF_GREEN99_3,
+	EF_GREEN99_5,
+	EF_GREEN99_6,
+	EF_MAPSPHERE,
+	EF_POK_LOVE,
+	EF_POK_WHITE,
+	EF_POK_VALEN,
+	EF_POK_BIRTH,
+	EF_POK_CHRISTMAS,
+	EF_MAP_MAGICZONE3,
+	EF_MAP_MAGICZONE4,
+	EF_DUST,
+	EF_TORCH_RED,
+	EF_TORCH_GREEN,
+	EF_MAP_GHOST,
+	EF_GLOW1,
+	EF_GLOW2,
+	EF_GLOW4,
+	EF_TORCH_PURPLE,
+	EF_CLOUD7,
+	EF_CLOUD8,
+	EF_FLOWERLEAF,
+	EF_MAPSPHERE2,
+	EF_GLOW11,
+	EF_GLOW12,
+	EF_CIRCLELIGHT,
+	EF_ITEM315,
+	EF_ITEM316,
+	EF_ITEM317,
+	EF_ITEM318,
+	EF_STORM_MIN,
+	EF_POK_JAP,
+	EF_MAP_GREENLIGHT,
+	EF_MAP_MAGICWALL,
+	EF_MAP_GREENLIGHT2,
+	EF_YELLOWFLY1,
+	EF_YELLOWFLY2,
+	EF_BOTTOM_BLUE,
+	EF_BOTTOM_BLUE2,
+	EF_WEWISH,
+	EF_FIREPILLARON2,
+	EF_FORESTLIGHT5,
+	EF_SOULBREAKER3,
+	EF_ADO_STR,
+	EF_IGN_STR,
+	EF_CHIMTO2,
+	EF_WINDCUTTER,
+	EF_DETECT2,
+	EF_FROSTMYSTY,
+	EF_CRIMSON_STR,
+	EF_HELL_STR,
+	EF_SPR_MASH,
+	EF_SPR_SOULE,
+	EF_DHOWL_STR,
+	EF_EARTHWALL,
+	EF_SOULBREAKER4,
+	EF_CHAINL_STR,
+	EF_CHOOKGI_FIRE,
+	EF_CHOOKGI_WIND,
+	EF_CHOOKGI_WATER,
+	EF_CHOOKGI_GROUND,
+	EF_MAGENTA_TRAP,
+	EF_COBALT_TRAP,
+	EF_MAIZE_TRAP,
+	EF_VERDURE_TRAP,
+	EF_NORMAL_TRAP,
+	EF_CLOAKING2,
+	EF_AIMED_STR,
+	EF_ARROWSTORM_STR,
+	EF_LAULAMUS_STR,
+	EF_LAUAGNUS_STR,
+	EF_MILSHIELD_STR,
+	EF_CONCENTRATION2,
+	EF_FIREBALL2,
+	EF_BUNSINJYUTSU2,
+	EF_CLEARTIME,
+	EF_GLASSWALL3,
+	EF_ORATIO,
+	EF_POTION_BERSERK2,
+	EF_CIRCLEPOWER,
+	EF_ROLLING1,
+	EF_ROLLING2,
+	EF_ROLLING3,
+	EF_ROLLING4,
+	EF_ROLLING5,
+	EF_ROLLING6,
+	EF_ROLLING7,
+	EF_ROLLING8,
+	EF_ROLLING9,
+	EF_ROLLING10,
+	EF_PURPLEBODY,
+	EF_STIN6,
+	EF_RG_COIN4,
+	EF_POISONWAV,
+	EF_POISONSMOKE,
+	EF_GUMGANG4,
+	EF_SHIELDBOOMERANG4,
+	EF_CASTSPIN2,
+	EF_VULCANWAV,
+	EF_AGIUP2,
+	EF_DETECT3,
+	EF_AGIUP3,
+	EF_DETECT4,
+	EF_ELECTRIC3,
+	EF_GUARD4,
+	EF_BOTTOM_BARRIER,
+	EF_BOTTOM_STEALTH,
+	EF_REPAIRTIME,
+	EF_NC_ANAL,
+	EF_FIRETHROW,
+	EF_VENOMIMPRESS,
+	EF_FROSTMISTY,
+	EF_BURNING,
+	EF_COLDTHROW,
+	EF_MAKEHALLU,
+	EF_HALLUTIME,
+	EF_INFRAREDSCAN,
+	EF_CRASHAXE,
+	EF_GTHUNDER,
+	EF_STONERING,
+	EF_INTIMIDATE2,
+	EF_STASIS,
+	EF_REDLINE,
+	EF_FROSTDIVER3,
+	EF_BOTTOM_BASILICA2,
+	EF_RECOGNIZED,
+	EF_TETRA,
+	EF_TETRACASTING,
+	EF_FIREBALL3,
+	EF_INTIMIDATE3,
+	EF_RECOGNIZED2,
+	EF_CLOAKING3,
+	EF_INTIMIDATE4,
+	EF_STRETCH,
+	EF_BLACKBODY,
+	EF_ENERVATION,
+	EF_ENERVATION2,
+	EF_ENERVATION3,
+	EF_ENERVATION4,
+	EF_ENERVATION5,
+	EF_ENERVATION6,
+	EF_LINELINK4,
+	EF_RG_COIN5,
+	EF_WATERFALL_ANI,
+	EF_BOTTOM_MANHOLE,
+	EF_MANHOLE,
+	EF_MAKEFEINT,
+	EF_FORESTLIGHT6,
+	EF_DARKCASTING2,
+	EF_BOTTOM_ANI,
+	EF_BOTTOM_MAELSTROM,
+	EF_BOTTOM_BLOODYLUST,
+	EF_BEGINSPELL_N1,
+	EF_BEGINSPELL_N2,
+	EF_HEAL_N,
+	EF_CHOOKGI_N,
+	EF_JOBLVUP50_2,
+	EF_CHEMICAL2DASH2,
+	EF_CHEMICAL2DASH3,
+	EF_ROLLINGCAST,
+	EF_WATER_BELOW,
+	EF_WATER_FADE,
+	EF_BEGINSPELL_N3,
+	EF_BEGINSPELL_N4,
+	EF_BEGINSPELL_N5,
+	EF_BEGINSPELL_N6,
+	EF_BEGINSPELL_N7,
+	EF_BEGINSPELL_N8,
+	EF_WATER_SMOKE,
+	EF_DANCE1,
+	EF_DANCE2,
+	EF_LINKPARTICLE,
+	EF_SOULLIGHT2,
+	EF_SPR_PARTICLE,
+	EF_SPR_PARTICLE2,
+	EF_SPR_PLANT,
+	EF_CHEMICAL_V,
+	EF_SHOOTPARTICLE,
+	EF_BOT_REVERB,
+	EF_RAIN_PARTICLE,
+	EF_CHEMICAL_V2,
+	EF_SECRA,
+	EF_BOT_REVERB2,
+	EF_CIRCLEPOWER2,
+	EF_SECRA2,
+	EF_CHEMICAL_V3,
+	EF_ENERVATION7,
+	EF_CIRCLEPOWER3,
+	EF_SPR_PLANT2,
+	EF_CIRCLEPOWER4,
+	EF_SPR_PLANT3,
+	EF_RG_COIN6,
+	EF_SPR_PLANT4,
+	EF_CIRCLEPOWER5,
+	EF_SPR_PLANT5,
+	EF_CIRCLEPOWER6,
+	EF_SPR_PLANT6,
+	EF_CIRCLEPOWER7,
+	EF_SPR_PLANT7,
+	EF_CIRCLEPOWER8,
+	EF_SPR_PLANT8,
+	EF_HEARTASURA,
+	EF_BEGINSPELL_150,
+	EF_LEVEL99_150,
+	EF_PRIMECHARGE,
+	EF_GLASSWALL4,
+	EF_GRADIUS_LASER,
+	EF_BASH3D6,
+	EF_GUMGANG5,
+	EF_HITLINE8,
+	EF_ELECTRIC4,
+	EF_TEIHIT1T,
+	EF_SPINMOVE,
+	EF_FIREBALL4,
+	EF_TRIPLEATTACK4,
+	EF_CHEMICAL3S,
+	EF_GROUNDSHAKE,
+	EF_DQ9_CHARGE,
+	EF_DQ9_CHARGE2,
+	EF_DQ9_CHARGE3,
+	EF_DQ9_CHARGE4,
+	EF_BLUELINE,
+	EF_SELFSCROLL,
+	EF_SPR_LIGHTPRINT,
+	EF_PNG_TEST,
+	EF_BEGINSPELL_YB,
+	EF_CHEMICAL2DASH4,
+	EF_GROUNDSHAKE2,
+	EF_PRESSURE2,
+	EF_RG_COIN7,
+	EF_PRIMECHARGE2,
+	EF_PRIMECHARGE3,
+	EF_PRIMECHARGE4,
+	EF_GREENCASTING,
+	EF_WALLOFTHORN,
+	EF_FIREBALL5,
+	EF_THROWITEM11,
+	EF_SPR_PLANT9,
+	EF_DEMONICFIRE,
+	EF_DEMONICFIRE2,
+	EF_DEMONICFIRE3,
+	EF_HELLSPLANT,
+	EF_FIREWALL2,
+	EF_VACUUM,
+	EF_SPR_PLANT10,
+	EF_SPR_LIGHTPRINT2,
+	EF_POISONSMOKE2,
+	EF_MAKEHALLU2,
+	EF_SHOCKWAVE2,
+	EF_SPR_PLANT11,
+	EF_COLDTHROW2,
+	EF_DEMONICFIRE4,
+	EF_PRESSURE3,
+	EF_LINKPARTICLE2,
+	EF_SOULLIGHT3,
+	EF_CHAREFFECT,
+	EF_GUMGANG6,
+	EF_FIREBALL6,
+	EF_GUMGANG7,
+	EF_GUMGANG8,
+	EF_GUMGANG9,
+	EF_BOTTOM_DE2,
+	EF_COLDSTATUS,
+	EF_SPR_LIGHTPRINT3,
+	EF_WATERBALL3,
+	EF_HEAL_N2,
+	EF_RAIN_PARTICLE2,
+	EF_CLOUD9,
+	EF_YELLOWFLY3,
+	EF_EL_GUST,
+	EF_EL_BLAST,
+	EF_EL_AQUAPLAY,
+	EF_EL_UPHEAVAL,
+	EF_EL_WILD_STORM,
+	EF_EL_CHILLY_AIR,
+	EF_EL_CURSED_SOIL,
+	EF_EL_COOLER,
+	EF_EL_TROPIC,
+	EF_EL_PYROTECHNIC,
+	EF_EL_PETROLOGY,
+	EF_EL_HEATER,
+	EF_POISON_MIST,
+	EF_ERASER_CUTTER,
+	EF_SILENT_BREEZE,
+	EF_MAGMA_FLOW,
+	EF_GRAYBODY,
+	EF_LAVA_SLIDE,
+	EF_SONIC_CLAW,
+	EF_TINDER_BREAKER,
+	EF_MIDNIGHT_FRENZY,
+	EF_MACRO,
+	EF_CHEMICAL_ALLRANGE,
+	EF_TETRA_FIRE,
+	EF_TETRA_WATER,
+	EF_TETRA_WIND,
+	EF_TETRA_GROUND,
+	EF_EMITTER,
+	EF_VOLCANIC_ASH,
+	EF_LEVEL99_ORB1,
+	EF_LEVEL99_ORB2,
+	EF_LEVEL150,
+	EF_LEVEL150_SUB,
+	EF_THROWITEM4_1,
+	EF_THROW_HAPPOKUNAI,
+	EF_THROW_MULTIPLE_COIN,
+	EF_THROW_BAKURETSU,
+	EF_ROTATE_HUUMARANKA,
+	EF_ROTATE_BG,
+	EF_ROTATE_LINE_GRAY,
+	EF_2011RWC,
+	EF_2011RWC2,
+	EF_KAIHOU,
+	EF_GROUND_EXPLOSION,
+	EF_KG_KAGEHUMI,
+	EF_KO_ZENKAI_WATER,
+	EF_KO_ZENKAI_LAND,
+	EF_KO_ZENKAI_FIRE,
+	EF_KO_ZENKAI_WIND,
+	EF_KO_JYUMONJIKIRI,
+	EF_KO_SETSUDAN,
+	EF_RED_CROSS,
+	EF_KO_IZAYOI,
+	EF_ROTATE_LINE_BLUE,
+	EF_KG_KYOMU,
+	EF_KO_HUUMARANKA,
+	EF_BLUELIGHTBODY,
+	EF_KAGEMUSYA,
+	EF_OB_GENSOU,
+	EF_NO100_FIRECRACKER,
+	EF_KO_MAKIBISHI,
+	EF_KAIHOU1,
+	EF_AKAITSUKI,
+	EF_ZANGETSU,
+	EF_GENSOU,
+	EF_HAT_EFFECT,
+	EF_CHERRYBLOSSOM,
+	EF_EVENT_CLOUD,
+	EF_RUN_MAKE_OK,
+	EF_RUN_MAKE_FAILURE,
+	EF_MIRESULT_MAKE_OK,
+	EF_MIRESULT_MAKE_FAIL,
+	EF_ALL_RAY_OF_PROTECTION,
+	EF_VENOMFOG,
+	EF_DUSTSTORM,
+	EF_LEVEL160,
+	EF_LEVEL160_SUB,
+	EF_MAPCHAIN,
+	EF_MAGIC_FLOOR,
+	EF_ICEMINE,
+	EF_FLAMECORSS,
+	EF_ICEMINE_1,
+	EF_DANCE_BLADE_ATK,
+	EF_DARKPIERCING,
+	EF_INVINCIBLEOFF2,
+	EF_MAXPAIN,
+	EF_DEATHSUMMON,
+	EF_MOONSTAR,
+	EF_STRANGELIGHTS,
+	EF_SUPER_STAR,
+	EF_YELLOBODY,
+	EF_COLORPAPER2,
+	EF_EVILS_PAW,
+	EF_GC_DARKCROW,
+	EF_RK_DRAGONBREATH_WATER,
+	EF_ALL_FULL_THROTTLE,
+	EF_SR_FLASHCOMBO,
+	EF_RK_LUXANIMA,
+	EF_CLOUD10,
+	EF_SO_ELEMENTAL_SHIELD,
+	EF_AB_OFFERTORIUM,
+	EF_WL_TELEKINESIS_INTENSE,
+	EF_GN_ILLUSIONDOPING,
+	EF_NC_MAGMA_ERUPTION,
+	EF_LG_KINGS_GRACE,
+	EF_BLOODDRAIN2,
+	EF_NPC_WIDEWEB,
+	EF_NPC_BURNT,
+	EF_NPC_CHILL,
+	EF_RA_UNLIMIT,
+	EF_AB_OFFERTORIUM_RING,
+	EF_SC_ESCAPE,
+	EF_WM_FRIGG_SONG,
+	EF_FLICKER,
+	EF_C_MAKER,
+	EF_HAMMER_OF_GOD,
+	EF_MASS_SPIRAL,
+	EF_FIRE_RAIN,
+	EF_WHITEBODY,
+	EF_BANISHING_BUSTER,
+	EF_SLUGSHOT,
+	EF_D_TAIL,
+	EF_BIND_TRAP1,
+	EF_BIND_TRAP2,
+	EF_BIND_TRAP3,
+	EF_JUMPBODY1,
+	EF_ANIMATED_EMITTER,
+	EF_RL_EXPLOSION,
+	EF_C_MAKER_1,
+	EF_QD_SHOT,
+	EF_P_ALTER,
+	EF_S_STORM,
+	EF_MUSIC_HAT,
+	EF_CLOUD_KILL,
+	EF_ESCAPE,
+	EF_XENO_SLASHER,
+	EF_FLOWERSMOKE,
+	EF_FSTONE,
+	EF_QSCARABA,
+	EF_LJOSALFAR,
+	EF_HAPPINESSSTAR,
+	EF_POWER_OF_GAIA,
+	EF_MAPLE_FALLS,
+	EF_MARKING_USE_CHANGEMONSTER,
+	EF_MAGICAL_FEATHER,
+	EF_MERMAID_LONGING,
+	EF_GIFT_OF_SNOW,
+	EF_ACH_COMPLETE,
+	EF_TIME_ACCESSORY,
+	EF_SPRITEMABLE,
+	EF_TUNAPARTY,
+	EF_MAX
+};
+
+enum e_hat_effects {
+	HAT_EF_MIN = 0,
+	HAT_EF_BLOSSOM_FLUTTERING,
+	HAT_EF_MERMAID_LONGING,
+	HAT_EF_RL_BANISHING_BUSTER,
+	HAT_EF_LJOSALFAR,
+	HAT_EF_CLOCKING,
+	HAT_EF_SNOW,
+	HAT_EF_MAKEBLUR,
+	HAT_EF_SLEEPATTACK,
+	HAT_EF_GUMGANG,
+	HAT_EF_TALK_FROSTJOKE,
+	HAT_EF_DEMONSTRATION,
+	HAT_EF_FLUTTER_BUTTERFLY,
+	HAT_EF_ANGEL_FLUTTERING,
+	HAT_EF_BLESSING_OF_ANGELS,
+	HAT_EF_ELECTRIC,
+	HAT_EF_GREEN_FLOOR,
+	HAT_EF_SHRINK,
+	HAT_EF_VALHALLA_IDOL,
+	HAT_EF_ANGEL_STAIRS,
+	HAT_EF_GLOW_OF_NEW_YEAR,
+	HAT_EF_BOTTOM_FORTUNEKISS,
+	HAT_EF_PINKBODY,
+	HAT_EF_DOUBLEGUMGANG,
+	HAT_EF_GIANTBODY,
+	HAT_EF_GREEN99_6,
+	HAT_EF_CIRCLEPOWER,
+	HAT_EF_BOTTOM_BLOODYLUST,
+	HAT_EF_WATER_BELOW,
+	HAT_EF_LEVEL99_150,
+	HAT_EF_YELLOWFLY3,
+	HAT_EF_KAGEMUSYA,
+	HAT_EF_CHERRYBLOSSOM,
+	HAT_EF_STRANGELIGHTS,
+	HAT_EF_WL_TELEKINESIS_INTENSE,
+	HAT_EF_AB_OFFERTORIUM_RING,
+	HAT_EF_WHITEBODY2,
+	HAT_EF_SAKURA,
+	HAT_EF_CLOUD2,
+	HAT_EF_FEATHER_FLUTTERING,
+	HAT_EF_CAMELLIA_HAIR_PIN,
+	HAT_EF_JP_EV_EFFECT01,
+	HAT_EF_JP_EV_EFFECT02,
+	HAT_EF_JP_EV_EFFECT03,
+	HAT_EF_FLORAL_WALTZ,
+	HAT_EF_MAGICAL_FEATHER,
+	HAT_EF_HAT_EFFECT,
+	HAT_EF_BAKURETSU_HADOU,
+	HAT_EF_GOLD_SHOWER,
+	HAT_EF_WHITEBODY,
+	HAT_EF_WATER_BELOW2,
+	HAT_EF_FIREWORK,
+	HAT_EF_RETURN_TW_1ST_HAT,
+	HAT_EF_C_FLUTTERBUTTERFLY_BL,
+	HAT_EF_QSCARABA,
+	HAT_EF_MAX
+};
+
+enum e_mapwarp_type {
 	MAPWARP_ALL = 0,
 	MAPWARP_GUILD,
 	MAPWARP_PARTY,

+ 2122 - 1
src/map/script_constants.h

@@ -6,6 +6,7 @@
 
 	#define export_constant(a) script_set_constant(#a,a,false,false)
 	#define export_constant2(a,b) script_set_constant(a,b,false,false)
+	#define export_constant_offset(a,offset) script_set_constant(#a + (offset),a,false,false)
 	#define export_parameter(a,b) script_set_constant(a,b,true,false)
 
 	/* min and maximum variable value */
@@ -1368,7 +1369,7 @@
 	export_constant(SC_MOONSTAR);
 	export_constant(SC_SUPER_STAR);
 	export_constant(SC_HEAT_BARREL);
-	export_constant(SC_HEAT_BARREL_AFTER);
+	export_constant(SC_MAGICALBULLET);
 	export_constant(SC_P_ALTER);
 	export_constant(SC_E_CHAIN);
 	export_constant(SC_C_MARKER);
@@ -1478,6 +1479,8 @@
 	export_constant(SC_DORAM_MATK);
 	export_constant(SC_DORAM_FLEE2);
 	export_constant(SC_DORAM_SVSP);
+	export_constant(SC_FALLEN_ANGEL);
+	export_constant(SC_CHEERUP);
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);
 #endif
@@ -2528,6 +2531,7 @@
 	export_constant(SI_GLOOM_CARD);
 	export_constant(SI_PHARAOH_CARD);
 	export_constant(SI_KIEL_CARD);
+	export_constant(SI_CHEERUP);
 	export_constant(SI_S_MANAPOTION);
 	export_constant(SI_M_DEFSCROLL);
 
@@ -3882,8 +3886,2125 @@
 	script_set_constant("REFINE_MATERIAL_ID", 0, false, false);
 	script_set_constant("REFINE_ZENY_COST", 1, false, false);
 
+	/* NPC view ids */
+	// Special macro to strip the prefix 'JT_'
+	#define export_constant_npc(a) export_constant_offset(a,3)
+
+	export_constant_npc(JT_WARPNPC);
+	export_constant_npc(JT_1_ETC_01);
+	export_constant_npc(JT_1_M_01);
+	export_constant_npc(JT_1_M_02);
+	export_constant_npc(JT_1_M_03);
+	export_constant_npc(JT_1_M_04);
+	export_constant_npc(JT_1_M_BARD);
+	export_constant_npc(JT_1_M_HOF);
+	export_constant_npc(JT_1_M_INNKEEPER);
+	export_constant_npc(JT_1_M_JOBGUIDER);
+	export_constant_npc(JT_1_M_JOBTESTER);
+	export_constant_npc(JT_1_M_KNIGHTMASTER);
+	export_constant_npc(JT_1_M_LIBRARYMASTER);
+	export_constant_npc(JT_1_M_MERCHANT);
+	export_constant_npc(JT_1_M_ORIENT01);
+	export_constant_npc(JT_1_M_PASTOR);
+	export_constant_npc(JT_1_M_PUBMASTER);
+	export_constant_npc(JT_1_M_SIZ);
+	export_constant_npc(JT_1_M_SMITH);
+	export_constant_npc(JT_1_M_WIZARD);
+	export_constant_npc(JT_1_M_YOUNGKNIGHT);
+	export_constant_npc(JT_1_F_01);
+	export_constant_npc(JT_1_F_02);
+	export_constant_npc(JT_1_F_03);
+	export_constant_npc(JT_1_F_04);
+	export_constant_npc(JT_1_F_GYPSY);
+	export_constant_npc(JT_1_F_LIBRARYGIRL);
+	export_constant_npc(JT_1_F_MARIA);
+	export_constant_npc(JT_1_F_MERCHANT_01);
+	export_constant_npc(JT_1_F_MERCHANT_02);
+	export_constant_npc(JT_1_F_ORIENT_01);
+	export_constant_npc(JT_1_F_ORIENT_02);
+	export_constant_npc(JT_1_F_ORIENT_03);
+	export_constant_npc(JT_1_F_ORIENT_04);
+	export_constant_npc(JT_1_F_PRIEST);
+	export_constant_npc(JT_1_F_PUBGIRL);
+	export_constant_npc(JT_4_DOG01);
+	export_constant_npc(JT_4_KID01);
+	export_constant_npc(JT_4_M_01);
+	export_constant_npc(JT_4_M_02);
+	export_constant_npc(JT_4_M_03);
+	export_constant_npc(JT_4_M_04);
+	export_constant_npc(JT_4_M_BARBER);
+	export_constant_npc(JT_4_M_ORIENT01);
+	export_constant_npc(JT_4_M_ORIENT02);
+	export_constant_npc(JT_4_F_01);
+	export_constant_npc(JT_4_F_02);
+	export_constant_npc(JT_4_F_03);
+	export_constant_npc(JT_4_F_04);
+	export_constant_npc(JT_4_F_MAID);
+	export_constant_npc(JT_4_F_SISTER);
+	export_constant_npc(JT_4W_KID);
+	export_constant_npc(JT_4W_M_01);
+	export_constant_npc(JT_4W_M_02);
+	export_constant_npc(JT_4W_M_03);
+	export_constant_npc(JT_4W_SAILOR);
+	export_constant_npc(JT_4W_F_01);
+	export_constant_npc(JT_8_F);
+	export_constant_npc(JT_8_F_GRANDMOTHER);
+	export_constant_npc(JT_EFFECTLAUNCHER);
+	export_constant_npc(JT_8W_SOLDIER);
+	export_constant_npc(JT_1_M_MOC_LORD);
+	export_constant_npc(JT_1_M_PAY_ELDER);
+	export_constant_npc(JT_1_M_PRON_KING);
+	export_constant_npc(JT_4_M_MANAGER);
+	export_constant_npc(JT_4_M_MINISTER);
+	export_constant_npc(JT_HIDDEN_NPC);
+	export_constant_npc(JT_4_F_KAFRA6);
+	export_constant_npc(JT_4_F_KAFRA5);
+	export_constant_npc(JT_4_F_KAFRA4);
+	export_constant_npc(JT_4_F_KAFRA3);
+	export_constant_npc(JT_4_F_KAFRA2);
+	export_constant_npc(JT_4_F_KAFRA1);
+	export_constant_npc(JT_2_M_THIEFMASTER);
+	export_constant_npc(JT_2_M_SWORDMASTER);
+	export_constant_npc(JT_2_M_PHARMACIST);
+	export_constant_npc(JT_2_M_MOLGENSTEIN);
+	export_constant_npc(JT_2_M_DYEINGER);
+	export_constant_npc(JT_2_F_MAGICMASTER);
+	export_constant_npc(JT_4_F_TELEPORTER);
+	export_constant_npc(JT_4_M_TELEPORTER);
+	export_constant_npc(JT_HIDDEN_WARP_NPC);
+	export_constant_npc(JT_4_M_MUT2);
+	export_constant_npc(JT_4_M_SCIENCE);
+	export_constant_npc(JT_4_F_VALKYRIE2);
+	export_constant_npc(JT_4_M_UNCLEKNIGHT);
+	export_constant_npc(JT_4_M_YOUNGKNIGHT);
+	export_constant_npc(JT_2_MONEMUS);
+	export_constant_npc(JT_4_M_ATEIL);
+	export_constant_npc(JT_4_F_ANNIVERSARY);
+	export_constant_npc(JT_4_M_GREATPO);
+	export_constant_npc(JT_4_M_NOVELIST);
+	export_constant_npc(JT_4_M_CHAMPSOUL);
+	export_constant_npc(JT_4_M_OLDFRIAR);
+	export_constant_npc(JT_4_M_CRU_SOLD);
+	export_constant_npc(JT_4_M_CRU_KNT);
+	export_constant_npc(JT_4_M_CRU_HEAD);
+	export_constant_npc(JT_4_M_CRU_CRUA);
+	export_constant_npc(JT_4_M_KY_SOLD);
+	export_constant_npc(JT_4_M_KY_KNT);
+	export_constant_npc(JT_4_M_KY_HEAD);
+	export_constant_npc(JT_4_M_KY_KIYOM);
+	export_constant_npc(JT_4_M_BOSSCAT);
+	export_constant_npc(JT_4_M_BABYCAT);
+	export_constant_npc(JT_4W_F_KAFRA2);
+	export_constant_npc(JT_4_F_MUNAK);
+	export_constant_npc(JT_4_M_BONGUN);
+	export_constant_npc(JT_4_BEAR);
+	export_constant_npc(JT_4_BLUEWOLF);
+	export_constant_npc(JT_4_PECOPECO);
+	export_constant_npc(JT_4_M_JP_MID);
+	export_constant_npc(JT_4_M_JP_RUN);
+	export_constant_npc(JT_4_ORCLADY);
+	export_constant_npc(JT_4_ORCLADY2);
+	export_constant_npc(JT_4_ORCWARRIOR);
+	export_constant_npc(JT_4_ORCWARRIOR2);
+	export_constant_npc(JT_4_F_FAIRY);
+	export_constant_npc(JT_4_F_FAIRYKID);
+	export_constant_npc(JT_4_F_FAIRYKID2);
+	export_constant_npc(JT_4_F_FAIRYKID3);
+	export_constant_npc(JT_4_F_FAIRYKID4);
+	export_constant_npc(JT_4_F_FAIRYKID5);
+	export_constant_npc(JT_4_F_FAIRYKID6);
+	export_constant_npc(JT_4_M_FAIRYKID);
+	export_constant_npc(JT_4_M_FAIRYKID2);
+	export_constant_npc(JT_4_M_FAIRYKID3);
+	export_constant_npc(JT_4_M_FAIRYKID4);
+	export_constant_npc(JT_4_M_FAIRYKID5);
+	export_constant_npc(JT_4_M_FAIRYSOLDIER);
+	export_constant_npc(JT_4_M_TUFFOLD);
+	export_constant_npc(JT_4_MAN_BENKUNI);
+	export_constant_npc(JT_4_MAN_GALTUN);
+	export_constant_npc(JT_4_MAN_JERUTOO);
+	export_constant_npc(JT_4_MAN_LAVAIL);
+	export_constant_npc(JT_4_MAN_NITT);
+	export_constant_npc(JT_4_MAN_PIOM);
+	export_constant_npc(JT_4_MAN_PIOM2);
+	export_constant_npc(JT_4_M_DSTMAN);
+	export_constant_npc(JT_4_M_DSTMANDEAD);
+	export_constant_npc(JT_4_BABYLEOPARD);
+	export_constant_npc(JT_4_M_REDSWORD);
+	export_constant_npc(JT_4_MAN_PIOM3);
+	export_constant_npc(JT_4_M_FAIRYSOLDIER2);
+	export_constant_npc(JT_4_F_FAIRYSOLDIER);
+	export_constant_npc(JT_4_DRAGON_EGG);
+	export_constant_npc(JT_4_MIMIC);
+	export_constant_npc(JT_4_F_FAIRY1);
+	export_constant_npc(JT_4_F_GUILLOTINE);
+	export_constant_npc(JT_4_M_GUILLOTINE);
+	export_constant_npc(JT_4_M_KNIGHT_BLACK);
+	export_constant_npc(JT_4_M_KNIGHT_GOLD);
+	export_constant_npc(JT_4_M_KNIGHT_SILVER);
+	export_constant_npc(JT_4_SKULL_MUD);
+	export_constant_npc(JT_4_M_BRZ_INDIAN);
+	export_constant_npc(JT_4_F_BRZ_INDIAN);
+	export_constant_npc(JT_4_F_BRZ_INDOLD);
+	export_constant_npc(JT_4_M_BRZ_JACI);
+	export_constant_npc(JT_4_M_BRZ_MAN1);
+	export_constant_npc(JT_4_M_BRZ_MAN2);
+	export_constant_npc(JT_4_F_BRZ_WOMAN);
+	export_constant_npc(JT_4_M_MINSTREL);
+	export_constant_npc(JT_4_M_MINSTREL1);
+	export_constant_npc(JT_4_M_SHADOWCHASER);
+	export_constant_npc(JT_4_F_SHADOWCHASER);
+	export_constant_npc(JT_4_M_SURA);
+	export_constant_npc(JT_4_F_SURA);
+	export_constant_npc(JT_4_F_WANDERER);
+	export_constant_npc(JT_4_M_BARD);
+	export_constant_npc(JT_1_FLAG_NOFEAR);
+	export_constant_npc(JT_4_M_NOFEARGUY);
+	export_constant_npc(JT_4_MAN_PIOM6);
+	export_constant_npc(JT_4_MAN_PIOM4);
+	export_constant_npc(JT_4_MAN_PIOM5);
+	export_constant_npc(JT_4_MAN_GALTUN1);
+	export_constant_npc(JT_4_HUMAN_GERUTOO);
+	export_constant_npc(JT_4_M_ROKI);
+	export_constant_npc(JT_4_M_MERCAT1);
+	export_constant_npc(JT_4_M_MERCAT2);
+	export_constant_npc(JT_4_M_CATMAN1);
+	export_constant_npc(JT_4_M_CATMAN2);
+	export_constant_npc(JT_4_F_BRZ_WOMAN2);
+	export_constant_npc(JT_4_M_JP_DISH);
+	export_constant_npc(JT_4_F_JP_NOAH);
+	export_constant_npc(JT_4_F_JP_OZ);
+	export_constant_npc(JT_4_F_JP_CHROME);
+	export_constant_npc(JT_4_F_JP_RINNE);
+	export_constant_npc(JT_4_WHITETIGER);
+	export_constant_npc(JT_4_VENDING_MACHINE);
+	export_constant_npc(JT_4_MISTY);
+	export_constant_npc(JT_4_NECORING);
+	export_constant_npc(JT_4_ELEPHANT);
+	export_constant_npc(JT_4_F_NYDHOG);
+	export_constant_npc(JT_4_F_NYDHOG2);
+	export_constant_npc(JT_4_M_ROKI2);
+	export_constant_npc(JT_4_M_DOGTRAVELER);
+	export_constant_npc(JT_4_M_DOGTRAVELER2);
+	export_constant_npc(JT_4_F_DOGTRAVELER);
+	export_constant_npc(JT_4_M_RAFLE_GR);
+	export_constant_npc(JT_4_M_RAFLE_OLD);
+	export_constant_npc(JT_4_F_RAFLE_PK);
+	export_constant_npc(JT_4_M_LYINGDOG);
+	export_constant_npc(JT_4_F_MORAFINE1);
+	export_constant_npc(JT_4_F_MORAFINE2);
+	export_constant_npc(JT_4_M_RAFLE_OR);
+	export_constant_npc(JT_4_F_RAFLE_YE);
+	export_constant_npc(JT_4_M_RAFLE_VI);
+	export_constant_npc(JT_4_F_RAFLE_VI);
+	export_constant_npc(JT_4_M_ARDHA);
+	export_constant_npc(JT_4_CREEPER);
+	export_constant_npc(JT_JP_RUFAKU);
+	export_constant_npc(JT_JP_SUPIKA);
+	export_constant_npc(JT_JP_SABIKU);
+	export_constant_npc(JT_JP_ARUGORU);
+	export_constant_npc(JT_JP_ARUNA);
+	export_constant_npc(JT_JP_AIRI);
+	export_constant_npc(JT_4_M_DEWOLDMAN);
+	export_constant_npc(JT_4_M_DEWOLDWOMAN);
+	export_constant_npc(JT_4_M_DEWMAN);
+	export_constant_npc(JT_4_M_DEWWOMAN);
+	export_constant_npc(JT_4_M_DEWBOY);
+	export_constant_npc(JT_4_M_DEWGIRL);
+	export_constant_npc(JT_4_M_DEWZATICHIEF);
+	export_constant_npc(JT_4_M_DEWZATIMAN);
+	export_constant_npc(JT_4_M_ALCHE_E);
+	export_constant_npc(JT_4_MASK_SMOKEY);
+	export_constant_npc(JT_4_CAT_SAILOR1);
+	export_constant_npc(JT_4_CAT_SAILOR2);
+	export_constant_npc(JT_4_CAT_SAILOR3);
+	export_constant_npc(JT_4_CAT_SAILOR4);
+	export_constant_npc(JT_4_CAT_CHEF);
+	export_constant_npc(JT_4_CAT_MERMASTER);
+	export_constant_npc(JT_4_CRACK);
+	export_constant_npc(JT_4_ASTER);
+	export_constant_npc(JT_4_F_STARFISHGIRL);
+	export_constant_npc(JT_4_CAT_DOWN);
+	export_constant_npc(JT_4_CAT_REST);
+	export_constant_npc(JT_4_CAT_3COLOR);
+	export_constant_npc(JT_4_CAT_ADMIRAL);
+	export_constant_npc(JT_4_SOIL);
+	export_constant_npc(JT_4_F_ALCHE_A);
+	export_constant_npc(JT_4_CAT_ADV1);
+	export_constant_npc(JT_4_CAT_ADV2);
+	export_constant_npc(JT_4_CAT_SAILOR5);
+	export_constant_npc(JT_2_DROP_MACHINE);
+	export_constant_npc(JT_2_SLOT_MACHINE);
+	export_constant_npc(JT_2_VENDING_MACHINE1);
+	export_constant_npc(JT_MOB_TOMB);
+	export_constant_npc(JT_4_MYSTCASE);
+	export_constant_npc(JT_4_M_SIT_NOVICE);
+	export_constant_npc(JT_4_OCTOPUS_LEG);
+	export_constant_npc(JT_4_F_NURSE);
+	export_constant_npc(JT_4_MAL_SOLDIER);
+	export_constant_npc(JT_4_MAL_CAPTAIN);
+	export_constant_npc(JT_4_MAL_BUDIDAI);
+	export_constant_npc(JT_4_M_MAYOR);
+	export_constant_npc(JT_4_M_BARYO_OLD);
+	export_constant_npc(JT_4_F_BARYO_OLD);
+	export_constant_npc(JT_4_F_BARYO_GIRL);
+	export_constant_npc(JT_4_M_BARYO_BOY);
+	export_constant_npc(JT_4_M_BARYO_MAN);
+	export_constant_npc(JT_4_F_BARYO_WOMAN);
+	export_constant_npc(JT_4_BARYO_CHIEF);
+	export_constant_npc(JT_4_MAL_KAFRA);
+	export_constant_npc(JT_4_M_MALAYA);
+	export_constant_npc(JT_4_F_MALAYA);
+	export_constant_npc(JT_4_F_PATIENT);
+	export_constant_npc(JT_4_M_PATIENT);
+	export_constant_npc(JT_4_F_KR_TIGER);
+	export_constant_npc(JT_4_M_KR_BOY);
+	export_constant_npc(JT_4_M_KAGE_OLD);
+	export_constant_npc(JT_4_WHIKEBAIN);
+	export_constant_npc(JT_4_EREND);
+	export_constant_npc(JT_4_RAWREL);
+	export_constant_npc(JT_4_ARMAIA);
+	export_constant_npc(JT_4_KAVAC);
+	export_constant_npc(JT_4_YGNIZEM);
+	export_constant_npc(JT_4_EREMES);
+	export_constant_npc(JT_4_MAGALETA);
+	export_constant_npc(JT_4_KATRINN);
+	export_constant_npc(JT_4_SHECIL);
+	export_constant_npc(JT_4_SEYREN);
+	export_constant_npc(JT_4_HARWORD);
+	export_constant_npc(JT_4_F_JP_CYNTHIA);
+	export_constant_npc(JT_4_M_JP_GUSTON);
+	export_constant_npc(JT_4_M_JP_BERKUT);
+	export_constant_npc(JT_4_F_JP_DARK_ADELAIDE);
+	export_constant_npc(JT_4_M_JP_DARK_DARIUS);
+	export_constant_npc(JT_4_M_JP_JESTER);
+	export_constant_npc(JT_XMAS_SMOKEY_B);
+	export_constant_npc(JT_XMAS_SMOKEY_R);
+	export_constant_npc(JT_XMAS_SMOKEY_Y);
+	export_constant_npc(JT_4_F_CLOCKDOLL);
+	export_constant_npc(JT_4_F_FAIRY2);
+	export_constant_npc(JT_4_F_PINKWOMAN);
+	export_constant_npc(JT_4_FAIRYDEADLEAF);
+	export_constant_npc(JT_4_FROG);
+	export_constant_npc(JT_4_M_BLACKMAN);
+	export_constant_npc(JT_4_M_BLUEMAN);
+	export_constant_npc(JT_4_M_FAIRYANG);
+	export_constant_npc(JT_4_M_FAIRYAVANT);
+	export_constant_npc(JT_4_M_FAIRYFREAK);
+	export_constant_npc(JT_4_M_FAIRYKID6);
+	export_constant_npc(JT_4_M_FAIRYSCHOLAR);
+	export_constant_npc(JT_4_M_FAIRYSCHOLAR_DIRTY);
+	export_constant_npc(JT_4_M_FARIY_HISIE);
+	export_constant_npc(JT_4_M_FARIYKING);
+	export_constant_npc(JT_4_M_NEWOZ);
+	export_constant_npc(JT_4_M_OLIVER);
+	export_constant_npc(JT_4_M_PROFESSORWORM);
+	export_constant_npc(JT_4_M_REDMAN);
+	export_constant_npc(JT_4_F_GELKA);
+	export_constant_npc(JT_4_M_ROTERT);
+	export_constant_npc(JT_4_BLACKDRAGON);
+	export_constant_npc(JT_4_M_GUNSLINGER);
+	export_constant_npc(JT_4_F_GUNSLINGER);
+	export_constant_npc(JT_4_M_ARCHER);
+	export_constant_npc(JT_4_M_SWORDMAN);
+	export_constant_npc(JT_4_M_NINJA_RED);
+	export_constant_npc(JT_4_M_NINJA_BLUE);
+	export_constant_npc(JT_4_M_THIEF_RUMIN);
+	export_constant_npc(JT_4_M_NOV_RUMIN);
+	export_constant_npc(JT_4_F_MAYSEL);
+	export_constant_npc(JT_4_F_ACOLYTE);
+	export_constant_npc(JT_4_M_NOV_HUNT);
+	export_constant_npc(JT_4_F_GENETIC);
+	export_constant_npc(JT_4_F_TAEKWON);
+	export_constant_npc(JT_4_F_SWORDMAN);
+	export_constant_npc(JT_4_F_IU);
+	export_constant_npc(JT_4_M_RAGI);
+	export_constant_npc(JT_4_M_MELODY);
+	export_constant_npc(JT_4_TRACE);
+	export_constant_npc(JT_4_F_HIMEL);
+	export_constant_npc(JT_4_LEVITATEMAN);
+	export_constant_npc(JT_4_M_HEINRICH);
+	export_constant_npc(JT_4_M_ROYALGUARD);
+	export_constant_npc(JT_4_M_BARMUND);
+	export_constant_npc(JT_4_F_KHALITZBURG);
+	export_constant_npc(JT_4_F_HIMEL2);
+	export_constant_npc(JT_4_WHITEKNIGHT);
+	export_constant_npc(JT_4_COCO);
+	export_constant_npc(JT_4_M_ALADDIN);
+	export_constant_npc(JT_4_M_GENIE);
+	export_constant_npc(JT_4_F_GENIE);
+	export_constant_npc(JT_4_JP_MID_SWIM);
+	export_constant_npc(JT_4_JP_RUNE_SWIM);
+	export_constant_npc(JT_4_F_FENRIR);
+	export_constant_npc(JT_4_F_GEFFEN_FAY);
+	export_constant_npc(JT_4_F_IRIS);
+	export_constant_npc(JT_4_F_LUCILE);
+	export_constant_npc(JT_4_F_SARAH_BABY);
+	export_constant_npc(JT_4_GEFFEN_01);
+	export_constant_npc(JT_4_GEFFEN_02);
+	export_constant_npc(JT_4_GEFFEN_03);
+	export_constant_npc(JT_4_GEFFEN_04);
+	export_constant_npc(JT_4_GEFFEN_05);
+	export_constant_npc(JT_4_GEFFEN_06);
+	export_constant_npc(JT_4_GEFFEN_07);
+	export_constant_npc(JT_4_GEFFEN_08);
+	export_constant_npc(JT_4_GEFFEN_09);
+	export_constant_npc(JT_4_GEFFEN_10);
+	export_constant_npc(JT_4_GEFFEN_11);
+	export_constant_npc(JT_4_GEFFEN_12);
+	export_constant_npc(JT_4_GEFFEN_13);
+	export_constant_npc(JT_4_GEFFEN_14);
+	export_constant_npc(JT_4_M_CHAOS);
+	export_constant_npc(JT_4_M_CHIEF_IRIN);
+	export_constant_npc(JT_4_M_SAKRAY);
+	export_constant_npc(JT_4_M_SAKRAYROYAL);
+	export_constant_npc(JT_4_TOWER_01);
+	export_constant_npc(JT_4_TOWER_02);
+	export_constant_npc(JT_4_TOWER_03);
+	export_constant_npc(JT_4_TOWER_04);
+	export_constant_npc(JT_4_TOWER_05);
+	export_constant_npc(JT_4_TOWER_06);
+	export_constant_npc(JT_4_TOWER_07);
+	export_constant_npc(JT_4_TOWER_08);
+	export_constant_npc(JT_4_TOWER_09);
+	export_constant_npc(JT_4_TOWER_10);
+	export_constant_npc(JT_4_TOWER_11);
+	export_constant_npc(JT_4_TOWER_12);
+	export_constant_npc(JT_4_TOWER_13);
+	export_constant_npc(JT_8_F_GIRL);
+	export_constant_npc(JT_4_F_GODEMOM);
+	export_constant_npc(JT_4_F_GON);
+	export_constant_npc(JT_4_F_KID2);
+	export_constant_npc(JT_4_M_BIBI);
+	export_constant_npc(JT_4_M_GEF_SOLDIER);
+	export_constant_npc(JT_4_M_KID1);
+	export_constant_npc(JT_4_M_MOC_SOLDIER);
+	export_constant_npc(JT_4_M_PAY_SOLDIER);
+	export_constant_npc(JT_4_M_SEAMAN);
+	export_constant_npc(JT_4_M_SNOWMAN);
+	export_constant_npc(JT_4_F_05);
+	export_constant_npc(JT_4_M_05);
+	export_constant_npc(JT_4_M_06);
+	export_constant_npc(JT_4_F_06);
+	export_constant_npc(JT_4_M_PIERROT);
+	export_constant_npc(JT_4_M_KID2);
+	export_constant_npc(JT_4_F_KID3);
+	export_constant_npc(JT_4_M_SANTA);
+	export_constant_npc(JT_4_F_NACORURI);
+	export_constant_npc(JT_4_F_SHAMAN);
+	export_constant_npc(JT_4_F_KAFRA7);
+	export_constant_npc(JT_GUILD_FLAG);
+	export_constant_npc(JT_1_SHADOW_NPC);
+	export_constant_npc(JT_4_F_07);
+	export_constant_npc(JT_4_F_JOB_ASSASSIN);
+	export_constant_npc(JT_4_F_JOB_BLACKSMITH);
+	export_constant_npc(JT_4_F_JOB_HUNTER);
+	export_constant_npc(JT_4_F_JOB_KNIGHT);
+	export_constant_npc(JT_4_F_NOVICE);
+	export_constant_npc(JT_4_M_JOB_ASSASSIN);
+	export_constant_npc(JT_4_M_JOB_BLACKSMITH);
+	export_constant_npc(JT_4_M_JOB_HUNTER);
+	export_constant_npc(JT_4_M_JOB_KNIGHT1);
+	export_constant_npc(JT_4_M_JOB_KNIGHT2);
+	export_constant_npc(JT_4_M_JOB_WIZARD);
+	export_constant_npc(JT_4_BAPHOMET);
+	export_constant_npc(JT_4_DARKLORD);
+	export_constant_npc(JT_4_DEVIRUCHI);
+	export_constant_npc(JT_8_DOPPEL);
+	export_constant_npc(JT_2_M_ALCHE);
+	export_constant_npc(JT_2_M_BARD_ORIENT);
+	export_constant_npc(JT_2_M_SAGE_B);
+	export_constant_npc(JT_2_M_SAGE_OLD);
+	export_constant_npc(JT_4_F_ALCHE);
+	export_constant_npc(JT_4_F_CRU);
+	export_constant_npc(JT_4_F_MONK);
+	export_constant_npc(JT_4_F_ROGUE);
+	export_constant_npc(JT_4_M_ALCHE_A);
+	export_constant_npc(JT_4_M_ALCHE_B);
+	export_constant_npc(JT_4_M_ALCHE_C);
+	export_constant_npc(JT_4_M_CRU);
+	export_constant_npc(JT_4_M_CRU_OLD);
+	export_constant_npc(JT_4_M_MONK);
+	export_constant_npc(JT_4_M_SAGE_A);
+	export_constant_npc(JT_4_M_SAGE_C);
+	export_constant_npc(JT_4_F_SON);
+	export_constant_npc(JT_4_F_JPN2);
+	export_constant_npc(JT_4_F_JPN);
+	export_constant_npc(JT_4_F_JPNCHIBI);
+	export_constant_npc(JT_4_F_JPNOBA2);
+	export_constant_npc(JT_4_F_JPNOBA);
+	export_constant_npc(JT_4_M_JPN2);
+	export_constant_npc(JT_4_M_JPN);
+	export_constant_npc(JT_4_M_JPNCHIBI);
+	export_constant_npc(JT_4_M_JPNOJI2);
+	export_constant_npc(JT_4_M_JPNOJI);
+	export_constant_npc(JT_8_M_JPNSOLDIER);
+	export_constant_npc(JT_8_M_JPNMASTER);
+	export_constant_npc(JT_4_F_JPNMU);
+	export_constant_npc(JT_4_F_TWGIRL);
+	export_constant_npc(JT_4_F_TWGRANDMOM);
+	export_constant_npc(JT_4_F_TWMASKGIRL);
+	export_constant_npc(JT_4_F_TWMIDWOMAN);
+	export_constant_npc(JT_4_M_TWBOY);
+	export_constant_npc(JT_4_M_TWMASKMAN);
+	export_constant_npc(JT_4_M_TWMIDMAN);
+	export_constant_npc(JT_4_M_TWOLDMAN);
+	export_constant_npc(JT_4_M_TWTEAMAN);
+	export_constant_npc(JT_4_M_YOYOROGUE);
+	export_constant_npc(JT_8_M_TWSOLDIER);
+	export_constant_npc(JT_4_F_UMGIRL);
+	export_constant_npc(JT_4_F_UMOLDWOMAN);
+	export_constant_npc(JT_4_F_UMWOMAN);
+	export_constant_npc(JT_4_M_UMCHIEF);
+	export_constant_npc(JT_4_M_UMDANCEKID2);
+	export_constant_npc(JT_4_M_UMDANCEKID);
+	export_constant_npc(JT_4_M_UMKID);
+	export_constant_npc(JT_4_M_UMOLDMAN);
+	export_constant_npc(JT_4_M_UMSOLDIER);
+	export_constant_npc(JT_4_M_SALVATION);
+	export_constant_npc(JT_4_F_NFDEADKAFRA);
+	export_constant_npc(JT_4_F_NFDEADMGCIAN);
+	export_constant_npc(JT_4_F_NFLOSTGIRL);
+	export_constant_npc(JT_4_M_NFDEADMAN2);
+	export_constant_npc(JT_4_M_NFDEADMAN);
+	export_constant_npc(JT_4_M_NFDEADSWDMAN);
+	export_constant_npc(JT_4_M_NFLOSTMAN);
+	export_constant_npc(JT_4_M_NFMAN);
+	export_constant_npc(JT_4_NFBAT);
+	export_constant_npc(JT_4_NFCOCK);
+	export_constant_npc(JT_4_NFCOFFIN);
+	export_constant_npc(JT_4_NFWISP);
+	export_constant_npc(JT_1_F_SIGNZISK);
+	export_constant_npc(JT_1_M_SIGN1);
+	export_constant_npc(JT_1_M_SIGNALCHE);
+	export_constant_npc(JT_1_M_SIGNART);
+	export_constant_npc(JT_1_M_SIGNMCNT);
+	export_constant_npc(JT_1_M_SIGNMONK2);
+	export_constant_npc(JT_1_M_SIGNMONK);
+	export_constant_npc(JT_1_M_SIGNROGUE);
+	export_constant_npc(JT_4_F_VALKYRIE);
+	export_constant_npc(JT_TW_TOWER);
+	export_constant_npc(JT_2_M_OLDBLSMITH);
+	export_constant_npc(JT_4_F_CHNDOCTOR);
+	export_constant_npc(JT_4_F_CHNDRESS1);
+	export_constant_npc(JT_4_F_CHNDRESS2);
+	export_constant_npc(JT_4_F_CHNDRESS3);
+	export_constant_npc(JT_4_F_CHNWOMAN);
+	export_constant_npc(JT_4_M_CHN8GUEK);
+	export_constant_npc(JT_4_M_CHNCOOK);
+	export_constant_npc(JT_4_M_CHNGENERL);
+	export_constant_npc(JT_4_M_CHNMAN);
+	export_constant_npc(JT_4_M_CHNMONK);
+	export_constant_npc(JT_4_M_CHNOLD);
+	export_constant_npc(JT_4_M_CHNSOLDIER);
+	export_constant_npc(JT_4_M_DWARF);
+	export_constant_npc(JT_4_M_GRANDMONK);
+	export_constant_npc(JT_4_M_ROGUE);
+	export_constant_npc(JT_4_M_DOMINO);
+	export_constant_npc(JT_4_F_DOMINO);
+	export_constant_npc(JT_4_F_ZONDAGIRL);
+	export_constant_npc(JT_4_M_REIDIN_KURS);
+	export_constant_npc(JT_4_M_ZONDAOYAJI);
+	export_constant_npc(JT_4_M_BUDDHIST);
+	export_constant_npc(JT_2_BOARD1);
+	export_constant_npc(JT_2_BOARD2);
+	export_constant_npc(JT_2_BULLETIN_BOARD);
+	export_constant_npc(JT_4_F_THAIAYO);
+	export_constant_npc(JT_4_F_THAIGIRL);
+	export_constant_npc(JT_4_F_THAISHAMAN);
+	export_constant_npc(JT_4_M_THAIAYO);
+	export_constant_npc(JT_4_M_THAIOLD);
+	export_constant_npc(JT_4_M_THAIONGBAK);
+	export_constant_npc(JT_CLEAR_NPC);
+	export_constant_npc(JT_4_F_RACING);
+	export_constant_npc(JT_4_F_EINOLD);
+	export_constant_npc(JT_4_M_EINOLD);
+	export_constant_npc(JT_4_M_EINMINER);
+	export_constant_npc(JT_4_M_DIEMAN);
+	export_constant_npc(JT_4_F_EINWOMAN);
+	export_constant_npc(JT_4_M_REPAIR);
+	export_constant_npc(JT_4_M_EIN_SOLDIER);
+	export_constant_npc(JT_4_M_YURI);
+	export_constant_npc(JT_4_M_EINMAN2);
+	export_constant_npc(JT_4_M_EINMAN);
+	export_constant_npc(JT_2_F_SIGN1);
+	export_constant_npc(JT_4_BOARD3);
+	export_constant_npc(JT_4_BULLETIN_BOARD2);
+	export_constant_npc(JT_4_F_AGENTKAFRA);
+	export_constant_npc(JT_4_F_KAFRA8);
+	export_constant_npc(JT_4_F_KAFRA9);
+	export_constant_npc(JT_4_F_LGTGIRL);
+	export_constant_npc(JT_4_F_LGTGRAND);
+	export_constant_npc(JT_4_F_OPERATION);
+	export_constant_npc(JT_4_LGTSCIENCE);
+	export_constant_npc(JT_4_M_LGTGRAND);
+	export_constant_npc(JT_4_M_LGTGUARD2);
+	export_constant_npc(JT_4_M_LGTGUARD);
+	export_constant_npc(JT_4_M_LGTMAN);
+	export_constant_npc(JT_4_M_LGTPOOR);
+	export_constant_npc(JT_4_M_OPERATION);
+	export_constant_npc(JT_4_M_PRESIDENT);
+	export_constant_npc(JT_4_M_REINDEER);
+	export_constant_npc(JT_4_M_ZONDAMAN);
+	export_constant_npc(JT_4_M_PECOKNIGHT);
+	export_constant_npc(JT_4_CAT);
+	export_constant_npc(JT_4_F_YUNYANG);
+	export_constant_npc(JT_4_M_OILMAN);
+	export_constant_npc(JT_4_F_CAPEGIRL);
+	export_constant_npc(JT_4_M_MASKMAN);
+	export_constant_npc(JT_4_M_SITDOWN);
+	export_constant_npc(JT_4_F_SITDOWN);
+	export_constant_npc(JT_4_M_ALCHE_D);
+	export_constant_npc(JT_4_M_ACROSS);
+	export_constant_npc(JT_4_F_ACROSS);
+	export_constant_npc(JT_4_COOK);
+	export_constant_npc(JT_4_M_LIEMAN);
+	export_constant_npc(JT_2_POSTBOX);
+	export_constant_npc(JT_4_BULL);
+	export_constant_npc(JT_4_LAM);
+	export_constant_npc(JT_4_F_HUGIRL);
+	export_constant_npc(JT_4_F_HUGRANMA);
+	export_constant_npc(JT_4_F_HUWOMAN);
+	export_constant_npc(JT_4_F_KHELLISIA);
+	export_constant_npc(JT_4_F_KHELLY);
+	export_constant_npc(JT_4_M_HUBOY);
+	export_constant_npc(JT_4_M_HUGRANFA);
+	export_constant_npc(JT_4_M_HUMAN_01);
+	export_constant_npc(JT_4_M_HUMAN_02);
+	export_constant_npc(JT_4_M_HUMERCHANT);
+	export_constant_npc(JT_4_M_HUOLDARMY);
+	export_constant_npc(JT_4_M_KHKIEL);
+	export_constant_npc(JT_4_M_KHKYEL);
+	export_constant_npc(JT_4_M_KHMAN);
+	export_constant_npc(JT_4_F_KHWOMAN);
+	export_constant_npc(JT_4_F_KHGIRL);
+	export_constant_npc(JT_4_M_KHBOY);
+	export_constant_npc(JT_4_M_PHILMAN);
+	export_constant_npc(JT_4_PORING);
+	export_constant_npc(JT_2_COLAVEND);
+	export_constant_npc(JT_4_F_SOCCER);
+	export_constant_npc(JT_4_M_SOCCER7);
+	export_constant_npc(JT_4_M_SOCCER9);
+	export_constant_npc(JT_4_F_CHILD);
+	export_constant_npc(JT_4_F_MADAME);
+	export_constant_npc(JT_4_F_MASK1);
+	export_constant_npc(JT_4_F_MASK);
+	export_constant_npc(JT_4_F_RACHOLD);
+	export_constant_npc(JT_4_F_SHABBY);
+	export_constant_npc(JT_4_F_TRAINEE);
+	export_constant_npc(JT_4_M_CHILD1);
+	export_constant_npc(JT_4_M_CHILD);
+	export_constant_npc(JT_4_M_DOCTOR);
+	export_constant_npc(JT_4_M_FROZEN1);
+	export_constant_npc(JT_4_M_FROZEN);
+	export_constant_npc(JT_4_M_MASK1);
+	export_constant_npc(JT_4_M_MASK);
+	export_constant_npc(JT_4_M_MIDDLE1);
+	export_constant_npc(JT_4_M_MIDDLE);
+	export_constant_npc(JT_4_M_RACHMAN2);
+	export_constant_npc(JT_4_M_RACHMAN1);
+	export_constant_npc(JT_4_M_RACHOLD1);
+	export_constant_npc(JT_4_M_RACHOLD);
+	export_constant_npc(JT_4_M_RASWORD);
+	export_constant_npc(JT_4_M_TRAINEE);
+	export_constant_npc(JT_4_F_ARUNA_POP);
+	export_constant_npc(JT_4_M_ARUNA_NFM1);
+	export_constant_npc(JT_4_DST_CAMEL);
+	export_constant_npc(JT_4_DST_SOLDIER);
+	export_constant_npc(JT_4_F_DESERT);
+	export_constant_npc(JT_4_F_DST_CHILD);
+	export_constant_npc(JT_4_F_DST_GRAND);
+	export_constant_npc(JT_4_M_DESERT);
+	export_constant_npc(JT_4_M_DST_CHILD);
+	export_constant_npc(JT_4_M_DST_GRAND);
+	export_constant_npc(JT_4_M_DST_MASTER);
+	export_constant_npc(JT_4_M_DST_TOUGH);
+	export_constant_npc(JT_4_ANGELING);
+	export_constant_npc(JT_4_ARCHANGELING);
+	export_constant_npc(JT_4_GHOSTRING);
+	export_constant_npc(JT_4_F_EDEN_MASTER);
+	export_constant_npc(JT_4_F_EDEN_OFFICER);
+	export_constant_npc(JT_4_M_EDEN_GUARDER);
+	export_constant_npc(JT_4_M_PATRICK);
+	export_constant_npc(JT_4_DONKEY);
+	export_constant_npc(JT_4_M_TRISTAN);
+	export_constant_npc(JT_4_WHITE_COW);
+	export_constant_npc(JT_4_F_RUSCHILD);
+	export_constant_npc(JT_4_F_RUSWOMAN1);
+	export_constant_npc(JT_4_F_RUSWOMAN2);
+	export_constant_npc(JT_4_F_RUSWOMAN3);
+	export_constant_npc(JT_4_M_RUSCHILD);
+	export_constant_npc(JT_4_M_GUSLIMAN);
+	export_constant_npc(JT_4_M_RUSBALD);
+	export_constant_npc(JT_4_M_RUSKING);
+	export_constant_npc(JT_4_M_RUSKNIGHT);
+	export_constant_npc(JT_4_M_RUSMAN1);
+	export_constant_npc(JT_4_M_RUSMAN2);
+	export_constant_npc(JT_4_M_DRAKE);
+	export_constant_npc(JT_4_F_BABAYAGA);
+	export_constant_npc(JT_4_F_RUSGREEN);
+	export_constant_npc(JT_4_RUS_DWOLF);
+	export_constant_npc(JT_1_FLAG_LION);
+	export_constant_npc(JT_1_FLAG_EAGLE);
+	export_constant_npc(JT_4_M_MIKID);
+	export_constant_npc(JT_4_BLUE_FLOWER);
+	export_constant_npc(JT_4_RED_FLOWER);
+	export_constant_npc(JT_4_YELL_FLOWER);
+	export_constant_npc(JT_4_F_CAVE1);
+	export_constant_npc(JT_4_F_MUT1);
+	export_constant_npc(JT_4_F_MUT2);
+	export_constant_npc(JT_4_F_SCIENCE);
+	export_constant_npc(JT_4_M_1STPRIN1);
+	export_constant_npc(JT_4_M_1STPRIN2);
+	export_constant_npc(JT_4_M_2NDPRIN1);
+	export_constant_npc(JT_4_M_2NDPRIN2);
+	export_constant_npc(JT_4_M_3RDPRIN1);
+	export_constant_npc(JT_4_M_3RDPRIN2);
+	export_constant_npc(JT_4_M_4THPRIN1);
+	export_constant_npc(JT_4_M_4THPRIN2);
+	export_constant_npc(JT_4_M_5THPRIN1);
+	export_constant_npc(JT_4_M_5THPRIN2);
+	export_constant_npc(JT_4_M_6THPRIN1);
+	export_constant_npc(JT_4_M_6THPRIN2);
+	export_constant_npc(JT_4_M_CASMAN1);
+	export_constant_npc(JT_4_M_CAVE1);
+	export_constant_npc(JT_4_M_MOCASS1);
+	export_constant_npc(JT_4_M_MOCASS2);
+	export_constant_npc(JT_4_M_MUT1);
+	export_constant_npc(JT_4_TOWER_14);
+	export_constant_npc(JT_4_TOWER_15);
+	export_constant_npc(JT_4_TOWER_16);
+	export_constant_npc(JT_4_TOWER_17);
+	export_constant_npc(JT_4_TREASURE_BOX);
+	export_constant_npc(JT_ACADEMY_MASTER);
+	export_constant_npc(JT_PORTAL);
+	export_constant_npc(JT_THANATOS_BATTLE);
+	export_constant_npc(JT_THANATOS_KEEP);
+	export_constant_npc(JT_4_F_LYDIA);
+	export_constant_npc(JT_4_LUDE);
+	export_constant_npc(JT_4_ALIZA);
+	export_constant_npc(JT_4_ALICE);
+	export_constant_npc(JT_4_ARCHER_SKEL);
+	export_constant_npc(JT_4_JACK);
+	export_constant_npc(JT_4_SOLDIER_SKEL);
+	export_constant_npc(JT_4_LOLI_RURI);
+	export_constant_npc(JT_4_M_SAKRAY_TIED);
+	export_constant_npc(JT_4_M_ANTONIO);
+	export_constant_npc(JT_4_M_COOKIE);
+	export_constant_npc(JT_4_M_BELIEVER01);
+	export_constant_npc(JT_4_F_BELIEVER01);
+	export_constant_npc(JT_4_M_BELIEVER02);
+	export_constant_npc(JT_4_ROPEPILE);
+	export_constant_npc(JT_4_BRICKPILE);
+	export_constant_npc(JT_4_WOODPILE);
+	export_constant_npc(JT_4_M_TAMARIN);
+	export_constant_npc(JT_4_M_DEATH);
+	export_constant_npc(JT_4_GHOST_STAND);
+	export_constant_npc(JT_4_GHOST_COLLAPSE);
+	export_constant_npc(JT_4_COOKIEHOUSE);
+	export_constant_npc(JT_4_F_SKULL06GIRL);
+	export_constant_npc(JT_4_NONMYSTCASE);
+	export_constant_npc(JT_4_F_KIMI);
+	export_constant_npc(JT_4_M_FROZEN_GC);
+	export_constant_npc(JT_4_M_FROZEN_KN);
+	export_constant_npc(JT_4_SNAKE_LORD);
+	export_constant_npc(JT_4_F_MOCBOY);
+	export_constant_npc(JT_4_F_RUNAIN);
+	export_constant_npc(JT_4_M_ROEL);
+	export_constant_npc(JT_4_F_SHALOSH);
+	export_constant_npc(JT_4_ENERGY_RED);
+	export_constant_npc(JT_4_ENERGY_BLUE);
+	export_constant_npc(JT_4_ENERGY_YELLOW);
+	export_constant_npc(JT_4_ENERGY_BLACK);
+	export_constant_npc(JT_4_ENERGY_WHITE);
+	export_constant_npc(JT_4_F_PERE01);
+	export_constant_npc(JT_4_JITTERBUG);
+	export_constant_npc(JT_4_SEA_OTTER);
+	export_constant_npc(JT_4_GALAPAGO);
+	export_constant_npc(JT_4_DESERTWOLF_B);
+	export_constant_npc(JT_4_BB_PORING);
+	export_constant_npc(JT_4_F_CHARLESTON01);
+	export_constant_npc(JT_4_F_CHARLESTON02);
+	export_constant_npc(JT_4_F_CHARLESTON03);
+	export_constant_npc(JT_4_M_IAN);
+	export_constant_npc(JT_4_M_OLDSCHOLAR);
+	export_constant_npc(JT_4_F_LAPERM);
+	export_constant_npc(JT_4_M_DEBON);
+	export_constant_npc(JT_4_M_BIRMAN);
+	export_constant_npc(JT_4_F_SHAM);
+	export_constant_npc(JT_4_M_REBELLION);
+	export_constant_npc(JT_4_F_REBELLION);
+	export_constant_npc(JT_4_CHN_SHAOTH);
+	export_constant_npc(JT_4_SHOAL);
+	export_constant_npc(JT_4_F_SARAH);
+	export_constant_npc(JT_4_GIGANTES_BIG);
+	export_constant_npc(JT_4_GIGANTES);
+	export_constant_npc(JT_4_GIGANTES_SMALL);
+	export_constant_npc(JT_4_GARGOYLE_STATUE);
+	export_constant_npc(JT_4_AIRA);
+	export_constant_npc(JT_4_EZELLA);
+	export_constant_npc(JT_4_KULUNA);
+	export_constant_npc(JT_4_LUNE);
+	export_constant_npc(JT_4_MALLINA);
+	export_constant_npc(JT_4_MORIN);
+	export_constant_npc(JT_4_NASARIN);
+	export_constant_npc(JT_4_F_BERRYTEA);
+	export_constant_npc(JT_4_F_FRUIT);
+	export_constant_npc(JT_4_SCR_MT_ROBOTS);
+	export_constant_npc(JT_4_MACHINE_DEVICE);
+	export_constant_npc(JT_4_GC109);
+	export_constant_npc(JT_4_SYS_MSG);
+	export_constant_npc(JT_4_M_TATIO);
+	export_constant_npc(JT_4_M_REKENBER);
+	export_constant_npc(JT_4_XMAS_CAT1);
+	export_constant_npc(JT_4_XMAS_CAT2);
+	export_constant_npc(JT_4_XMAS_CAT3);
+	export_constant_npc(JT_4_XMAS_CAT4);
+	export_constant_npc(JT_4_XMAS_CAT5);
+	export_constant_npc(JT_4_XMAS_CAT6);
+	export_constant_npc(JT_4_M_DEATH2);
+	export_constant_npc(JT_4_S_KADOMATSU);
+	export_constant_npc(JT_4_B_KADOMATSU);
+	export_constant_npc(JT_4_F_08);
+	export_constant_npc(JT_4_F_08_STATUE);
+	export_constant_npc(JT_4_M_DARKPRIEST);
+	export_constant_npc(JT_4_JP_GARM_H);
+	export_constant_npc(JT_4_JP_MEDUSA_H);
+	export_constant_npc(JT_4_CHN_GVG_01);
+	export_constant_npc(JT_4_SPRING_RABBIT);
+	export_constant_npc(JT_4_PD_TYRA);
+	export_constant_npc(JT_4_PD_TYRANOS);
+	export_constant_npc(JT_4_PD_PLESI);
+	export_constant_npc(JT_4_PD_PLESIO);
+	export_constant_npc(JT_4_PD_BRACHI);
+	export_constant_npc(JT_4_PD_BRACHIOS);
+	export_constant_npc(JT_4_PD_GOLDDRAGON);
+	export_constant_npc(JT_4_PD_ZAEROG);
+	export_constant_npc(JT_4_PD_TAMADORA);
+	export_constant_npc(JT_4_JP_EDGA_H);
+	export_constant_npc(JT_4_JP_BRAGOLEM_H);
+	export_constant_npc(JT_4_EL_AQUA);
+	export_constant_npc(JT_4_EP16_NIHIL);
+	export_constant_npc(JT_4_EP16_SPICA);
+	export_constant_npc(JT_4_EP16_SKIA);
+	export_constant_npc(JT_4_EP16_PETER);
+	export_constant_npc(JT_4_EP16_CRUX);
+	export_constant_npc(JT_4_EP16_GRANZ);
+	export_constant_npc(JT_4_EP16_STOLZ);
+	export_constant_npc(JT_4_EP16_EGEO);
+	export_constant_npc(JT_4_EP16_COOK);
+	export_constant_npc(JT_4_EP16_MARK);
+	export_constant_npc(JT_4_EP16_TAMARIN);
+	export_constant_npc(JT_4_EP16_POE);
+	export_constant_npc(JT_4_EP16_ISAAC);
+	export_constant_npc(JT_4_EP16_HELMUT);
+	export_constant_npc(JT_4_EP16_WOLF);
+	export_constant_npc(JT_4_EP16_MEYER);
+	export_constant_npc(JT_4_EP16_AGNES);
+	export_constant_npc(JT_4_EP16_FOOD);
+	export_constant_npc(JT_4_EP16_LOUVIERE);
+	export_constant_npc(JT_4_EP16_MAX);
+	export_constant_npc(JT_4_EP16_SPIEGEL);
+	export_constant_npc(JT_4_MOONLIGHT);
+	export_constant_npc(JT_4_MISTRESS);
+	export_constant_npc(JT_4_DRACULA);
+	export_constant_npc(JT_4_STORMKNIGHT);
+	export_constant_npc(JT_4_TATTER);
+	export_constant_npc(JT_4_AS_RAGGED_GOLEM);
+	export_constant_npc(JT_4_AS_BLOODY_KNIGHT);
+	export_constant_npc(JT_4_AS_WIND_GHOST);
+	export_constant_npc(JT_4_F_BIJOU);
+	export_constant_npc(JT_4_EP16_COOK2);
+	export_constant_npc(JT_4_SERVICE_30_M_01);
+	export_constant_npc(JT_4_SERVICE_30_F_01);
+	export_constant_npc(JT_4_SCR_AT_ROBOTS);
+	export_constant_npc(JT_4_F_RANGER);
+	export_constant_npc(JT_4_WAG);
+	export_constant_npc(JT_4_NPC_TRAP);
+	export_constant_npc(JT_4_RAGGLER);
+	export_constant_npc(JT_4_DR_PEPE);
+	export_constant_npc(JT_4_DR_GAMBERI);
+	export_constant_npc(JT_4_DR_AGLIO);
+	export_constant_npc(JT_4_DR_OLIO);
+	export_constant_npc(JT_4_DR_STELO);
+	export_constant_npc(JT_4_DR_TORTEL);
+	export_constant_npc(JT_4_BASIL_SLAVE);
+	export_constant_npc(JT_4_DOU_JINDO);
+	export_constant_npc(JT_4_DOU_SIBA);
+	export_constant_npc(JT_4_TARUTUPI);
+	export_constant_npc(JT_4_DR_SOLDIER);
+	export_constant_npc(JT_4_DR_M_01);
+	export_constant_npc(JT_4_DR_M_02);
+	export_constant_npc(JT_4_DR_F_01);
+	export_constant_npc(JT_4_DR_F_02);
+	export_constant_npc(JT_4_DR_KID_01);
+	export_constant_npc(JT_4_JP_2015EVT);
+	export_constant_npc(JT_4_ALLIGATOR);
+	export_constant_npc(JT_4_ANOLIAN);
+	export_constant_npc(JT_4_TACNU);
+	export_constant_npc(JT_4_CENERE);
+	export_constant_npc(JT_4_F_ARUNA_POP2);
+	export_constant_npc(JT_4_JACK_HEAD);
+	export_constant_npc(JT_4_INJUSTICE);
+	export_constant_npc(JT_4_BLOODYMAN);
+	export_constant_npc(JT_4_GIBBET);
+	export_constant_npc(JT_4_DULLAHAN);
+	export_constant_npc(JT_4_M_LAZY);
+	export_constant_npc(JT_4_M_GONY);
+	export_constant_npc(JT_4_M_ROOKIE);
+	export_constant_npc(JT_4_M_PHILOFONTES);
+	export_constant_npc(JT_4_F_ESTLOVELOY);
+	export_constant_npc(JT_4_F_LEEDSH);
+	export_constant_npc(JT_4_F_DIENE);
+	export_constant_npc(JT_4_F_COATNEIS);
+	export_constant_npc(JT_4_M_RUPERT);
+	export_constant_npc(JT_4_M_FALLENGONY);
+	export_constant_npc(JT_4_M_EISEN);
+	export_constant_npc(JT_4_F_DEADEVIL);
+	export_constant_npc(JT_4_F_HUNTER_EVIL);
+	export_constant_npc(JT_4_F_ELENA);
+	export_constant_npc(JT_4_F_ANYA);
+	export_constant_npc(JT_4_M_SEIREN_UC);
+	export_constant_npc(JT_4_M_GUNSLINGER2);
+	export_constant_npc(JT_4_M_GUNSLINGER3);
+	export_constant_npc(JT_4_M_REBELLION2);
+	export_constant_npc(JT_4_M_REBELLION3);
+	export_constant_npc(JT_4_F_GUNSLINGER2);
+	export_constant_npc(JT_4_F_GUNSLINGER3);
+	export_constant_npc(JT_4_F_REBELLION2);
+	export_constant_npc(JT_4_F_REBELLION3);
+	export_constant_npc(JT_4_M_ILYA);
+	export_constant_npc(JT_4_ELDER);
+	export_constant_npc(JT_4_LUNATIC);
+	export_constant_npc(JT_4_F_NOVICE2);
+	export_constant_npc(JT_4_WICKEDNYMPH);
+	export_constant_npc(JT_4_F_PREMI);
+	export_constant_npc(JT_4_M_COSTELL);
+	export_constant_npc(JT_4_M_YATTWARP);
+	export_constant_npc(JT_4_M_EVOKASCUDI);
+	export_constant_npc(JT_4_M_JOHNNYJAMES);
+	export_constant_npc(JT_4_M_ALBERTFORD);
+	export_constant_npc(JT_4_M_SEANMCCURDY);
+	export_constant_npc(JT_4_M_KARAMPUCCI);
+	export_constant_npc(JT_4_M_CACTUSMAN1);
+	export_constant_npc(JT_4_M_CACTUSMAN2);
+	export_constant_npc(JT_4_M_CACTUSMAN3);
+	export_constant_npc(JT_4_M_CACTUSLADY);
+	export_constant_npc(JT_4_M_GAST);
+	export_constant_npc(JT_4_M_CACTUSCHILD);
+	export_constant_npc(JT_4_KING);
+	export_constant_npc(JT_4_F_BOMI);
+	export_constant_npc(JT_4_M_CACTUSCHIEF);
+	export_constant_npc(JT_4_F_CACTUSCHILD2);
+	export_constant_npc(JT_4_F_CACTUSLADY2);
+	export_constant_npc(JT_4_F_CACTUSLADY3);
+	export_constant_npc(JT_4_M_CACTUS);
+	export_constant_npc(JT_4_M_COWRAIDERS1);
+	export_constant_npc(JT_4_M_COWRAIDERS2);
+	export_constant_npc(JT_4_M_COWRAIDERS3);
+	export_constant_npc(JT_4_F_JP14THEVT);
+	export_constant_npc(JT_4_M_POORSCHOLAR);
+	export_constant_npc(JT_4_M_PEPPERROTI);
+	export_constant_npc(JT_JP_NPC01);
+	export_constant_npc(JT_4_PURPLE_WARP);
+	export_constant_npc(JT_4_F_NARIN);
+	export_constant_npc(JT_4_M_URGENT_MAN);
+	export_constant_npc(JT_4_M_KEEN_SOLDIER);
+	export_constant_npc(JT_4_F_SLOPPY_WOMAN);
+	export_constant_npc(JT_4_F_DRKAFRA01);
+	export_constant_npc(JT_4_M_DRZONDA01);
+	export_constant_npc(JT_4_M_SWD_RENO);
+	export_constant_npc(JT_4_M_KNG_RENO);
+	export_constant_npc(JT_4_M_AC_RUMIN);
+	export_constant_npc(JT_4_M_HIGH_WIZARD);
+	export_constant_npc(JT_4_SYSTEM_BOX);
+	export_constant_npc(JT_4_STEELBOX);
+	export_constant_npc(JT_4_WOODBOX);
+	export_constant_npc(JT_4_M_POPFESTA);
+	export_constant_npc(JT_4_BONFIRE);
+	export_constant_npc(JT_4_PCCOUNT);
+	export_constant_npc(JT_4_LAVAGOLEM);
+	export_constant_npc(JT_JP_NPC02);
+	export_constant_npc(JT_JP_NPC03);
+	export_constant_npc(JT_JP_NPC04);
+	export_constant_npc(JT_JP_NPC05);
+	export_constant_npc(JT_JP_NPC06);
+	export_constant_npc(JT_JP_NPC07);
+	export_constant_npc(JT_JP_NPC08);
+	export_constant_npc(JT_JP_NPC09);
+	export_constant_npc(JT_JP_NPC10);
+	export_constant_npc(JT_4_SCATLETON);
+	export_constant_npc(JT_4_JP_AB_NPC_001);
+	export_constant_npc(JT_4_JP_AB_NPC_002);
+	export_constant_npc(JT_4_JP_AB_NPC_003);
+	export_constant_npc(JT_4_JP_AB_NPC_004);
+	export_constant_npc(JT_4_JP_AB_NPC_005);
+	export_constant_npc(JT_4_JP_AB_NPC_006);
+	export_constant_npc(JT_4_JP_AB_NPC_007);
+	export_constant_npc(JT_4_JP_AB_NPC_008);
+	export_constant_npc(JT_4_JJAK);
+	#undef export_constant_npc
+
+	/* special effects */
+	export_constant(EF_NONE);
+	export_constant(EF_HIT1);
+	export_constant(EF_HIT2);
+	export_constant(EF_HIT3);
+	export_constant(EF_HIT4);
+	export_constant(EF_HIT5);
+	export_constant(EF_HIT6);
+	export_constant(EF_ENTRY);
+	export_constant(EF_EXIT);
+	export_constant(EF_WARP);
+	export_constant(EF_ENHANCE);
+	export_constant(EF_COIN);
+	export_constant(EF_ENDURE);
+	export_constant(EF_BEGINSPELL);
+	export_constant(EF_GLASSWALL);
+	export_constant(EF_HEALSP);
+	export_constant(EF_SOULSTRIKE);
+	export_constant(EF_BASH);
+	export_constant(EF_MAGNUMBREAK);
+	export_constant(EF_STEAL);
+	export_constant(EF_HIDING);
+	export_constant(EF_PATTACK);
+	export_constant(EF_DETOXICATION);
+	export_constant(EF_SIGHT);
+	export_constant(EF_STONECURSE);
+	export_constant(EF_FIREBALL);
+	export_constant(EF_FIREWALL);
+	export_constant(EF_ICEARROW);
+	export_constant(EF_FROSTDIVER);
+	export_constant(EF_FROSTDIVER2);
+	export_constant(EF_LIGHTBOLT);
+	export_constant(EF_THUNDERSTORM);
+	export_constant(EF_FIREARROW);
+	export_constant(EF_NAPALMBEAT);
+	export_constant(EF_RUWACH);
+	export_constant(EF_TELEPORTATION);
+	export_constant(EF_READYPORTAL);
+	export_constant(EF_PORTAL);
+	export_constant(EF_INCAGILITY);
+	export_constant(EF_DECAGILITY);
+	export_constant(EF_AQUA);
+	export_constant(EF_SIGNUM);
+	export_constant(EF_ANGELUS);
+	export_constant(EF_BLESSING);
+	export_constant(EF_INCAGIDEX);
+	export_constant(EF_SMOKE);
+	export_constant(EF_FIREFLY);
+	export_constant(EF_SANDWIND);
+	export_constant(EF_TORCH);
+	export_constant(EF_SPRAYPOND);
+	export_constant(EF_FIREHIT);
+	export_constant(EF_FIRESPLASHHIT);
+	export_constant(EF_COLDHIT);
+	export_constant(EF_WINDHIT);
+	export_constant(EF_POISONHIT);
+	export_constant(EF_BEGINSPELL2);
+	export_constant(EF_BEGINSPELL3);
+	export_constant(EF_BEGINSPELL4);
+	export_constant(EF_BEGINSPELL5);
+	export_constant(EF_BEGINSPELL6);
+	export_constant(EF_BEGINSPELL7);
+	export_constant(EF_LOCKON);
+	export_constant(EF_WARPZONE);
+	export_constant(EF_SIGHTRASHER);
+	export_constant(EF_BARRIER);
+	export_constant(EF_ARROWSHOT);
+	export_constant(EF_INVENOM);
+	export_constant(EF_CURE);
+	export_constant(EF_PROVOKE);
+	export_constant(EF_MVP);
+	export_constant(EF_SKIDTRAP);
+	export_constant(EF_BRANDISHSPEAR);
+	export_constant(EF_CONE);
+	export_constant(EF_SPHERE);
+	export_constant(EF_BOWLINGBASH);
+	export_constant(EF_ICEWALL);
+	export_constant(EF_GLORIA);
+	export_constant(EF_MAGNIFICAT);
+	export_constant(EF_RESURRECTION);
+	export_constant(EF_RECOVERY);
+	export_constant(EF_EARTHSPIKE);
+	export_constant(EF_SPEARBMR);
+	export_constant(EF_PIERCE);
+	export_constant(EF_TURNUNDEAD);
+	export_constant(EF_SANCTUARY);
+	export_constant(EF_IMPOSITIO);
+	export_constant(EF_LEXAETERNA);
+	export_constant(EF_ASPERSIO);
+	export_constant(EF_LEXDIVINA);
+	export_constant(EF_SUFFRAGIUM);
+	export_constant(EF_STORMGUST);
+	export_constant(EF_LORD);
+	export_constant(EF_BENEDICTIO);
+	export_constant(EF_METEORSTORM);
+	export_constant(EF_YUFITEL);
+	export_constant(EF_YUFITELHIT);
+	export_constant(EF_QUAGMIRE);
+	export_constant(EF_FIREPILLAR);
+	export_constant(EF_FIREPILLARBOMB);
+	export_constant(EF_HASTEUP);
+	export_constant(EF_FLASHER);
+	export_constant(EF_REMOVETRAP);
+	export_constant(EF_REPAIRWEAPON);
+	export_constant(EF_CRASHEARTH);
+	export_constant(EF_PERFECTION);
+	export_constant(EF_MAXPOWER);
+	export_constant(EF_BLASTMINE);
+	export_constant(EF_BLASTMINEBOMB);
+	export_constant(EF_CLAYMORE);
+	export_constant(EF_FREEZING);
+	export_constant(EF_BUBBLE);
+	export_constant(EF_GASPUSH);
+	export_constant(EF_SPRINGTRAP);
+	export_constant(EF_KYRIE);
+	export_constant(EF_MAGNUS);
+	export_constant(EF_BOTTOM);
+	export_constant(EF_BLITZBEAT);
+	export_constant(EF_WATERBALL);
+	export_constant(EF_WATERBALL2);
+	export_constant(EF_FIREIVY);
+	export_constant(EF_DETECTING);
+	export_constant(EF_CLOAKING);
+	export_constant(EF_SONICBLOW);
+	export_constant(EF_SONICBLOWHIT);
+	export_constant(EF_GRIMTOOTH);
+	export_constant(EF_VENOMDUST);
+	export_constant(EF_ENCHANTPOISON);
+	export_constant(EF_POISONREACT);
+	export_constant(EF_POISONREACT2);
+	export_constant(EF_OVERTHRUST);
+	export_constant(EF_SPLASHER);
+	export_constant(EF_TWOHANDQUICKEN);
+	export_constant(EF_AUTOCOUNTER);
+	export_constant(EF_GRIMTOOTHATK);
+	export_constant(EF_FREEZE);
+	export_constant(EF_FREEZED);
+	export_constant(EF_ICECRASH);
+	export_constant(EF_SLOWPOISON);
+	export_constant(EF_BOTTOM2);
+	export_constant(EF_FIREPILLARON);
+	export_constant(EF_SANDMAN);
+	export_constant(EF_REVIVE);
+	export_constant(EF_PNEUMA);
+	export_constant(EF_HEAVENSDRIVE);
+	export_constant(EF_SONICBLOW2);
+	export_constant(EF_BRANDISH2);
+	export_constant(EF_SHOCKWAVE);
+	export_constant(EF_SHOCKWAVEHIT);
+	export_constant(EF_EARTHHIT);
+	export_constant(EF_PIERCESELF);
+	export_constant(EF_BOWLINGSELF);
+	export_constant(EF_SPEARSTABSELF);
+	export_constant(EF_SPEARBMRSELF);
+	export_constant(EF_HOLYHIT);
+	export_constant(EF_CONCENTRATION);
+	export_constant(EF_REFINEOK);
+	export_constant(EF_REFINEFAIL);
+	export_constant(EF_JOBCHANGE);
+	export_constant(EF_LVUP);
+	export_constant(EF_JOBLVUP);
+	export_constant(EF_TOPRANK);
+	export_constant(EF_PARTY);
+	export_constant(EF_RAIN);
+	export_constant(EF_SNOW);
+	export_constant(EF_SAKURA);
+	export_constant(EF_STATUS_STATE);
+	export_constant(EF_BANJJAKII);
+	export_constant(EF_MAKEBLUR);
+	export_constant(EF_TAMINGSUCCESS);
+	export_constant(EF_TAMINGFAILED);
+	export_constant(EF_ENERGYCOAT);
+	export_constant(EF_CARTREVOLUTION);
+	export_constant(EF_VENOMDUST2);
+	export_constant(EF_CHANGEDARK);
+	export_constant(EF_CHANGEFIRE);
+	export_constant(EF_CHANGECOLD);
+	export_constant(EF_CHANGEWIND);
+	export_constant(EF_CHANGEFLAME);
+	export_constant(EF_CHANGEEARTH);
+	export_constant(EF_CHAINGEHOLY);
+	export_constant(EF_CHANGEPOISON);
+	export_constant(EF_HITDARK);
+	export_constant(EF_MENTALBREAK);
+	export_constant(EF_MAGICALATTHIT);
+	export_constant(EF_SUI_EXPLOSION);
+	export_constant(EF_DARKATTACK);
+	export_constant(EF_SUICIDE);
+	export_constant(EF_COMBOATTACK1);
+	export_constant(EF_COMBOATTACK2);
+	export_constant(EF_COMBOATTACK3);
+	export_constant(EF_COMBOATTACK4);
+	export_constant(EF_COMBOATTACK5);
+	export_constant(EF_GUIDEDATTACK);
+	export_constant(EF_POISONATTACK);
+	export_constant(EF_SILENCEATTACK);
+	export_constant(EF_STUNATTACK);
+	export_constant(EF_PETRIFYATTACK);
+	export_constant(EF_CURSEATTACK);
+	export_constant(EF_SLEEPATTACK);
+	export_constant(EF_TELEKHIT);
+	export_constant(EF_PONG);
+	export_constant(EF_LEVEL99);
+	export_constant(EF_LEVEL99_2);
+	export_constant(EF_LEVEL99_3);
+	export_constant(EF_GUMGANG);
+	export_constant(EF_POTION1);
+	export_constant(EF_POTION2);
+	export_constant(EF_POTION3);
+	export_constant(EF_POTION4);
+	export_constant(EF_POTION5);
+	export_constant(EF_POTION6);
+	export_constant(EF_POTION7);
+	export_constant(EF_POTION8);
+	export_constant(EF_DARKBREATH);
+	export_constant(EF_DEFFENDER);
+	export_constant(EF_KEEPING);
+	export_constant(EF_SUMMONSLAVE);
+	export_constant(EF_BLOODDRAIN);
+	export_constant(EF_ENERGYDRAIN);
+	export_constant(EF_POTION_CON);
+	export_constant(EF_POTION_);
+	export_constant(EF_POTION_BERSERK);
+	export_constant(EF_POTIONPILLAR);
+	export_constant(EF_DEFENDER);
+	export_constant(EF_GANBANTEIN);
+	export_constant(EF_WIND);
+	export_constant(EF_VOLCANO);
+	export_constant(EF_GRANDCROSS);
+	export_constant(EF_INTIMIDATE);
+	export_constant(EF_CHOOKGI);
+	export_constant(EF_CLOUD);
+	export_constant(EF_CLOUD2);
+	export_constant(EF_MAPPILLAR);
+	export_constant(EF_LINELINK);
+	export_constant(EF_CLOUD3);
+	export_constant(EF_SPELLBREAKER);
+	export_constant(EF_DISPELL);
+	export_constant(EF_DELUGE);
+	export_constant(EF_VIOLENTGALE);
+	export_constant(EF_LANDPROTECTOR);
+	export_constant(EF_BOTTOM_VO);
+	export_constant(EF_BOTTOM_DE);
+	export_constant(EF_BOTTOM_VI);
+	export_constant(EF_BOTTOM_LA);
+	export_constant(EF_FASTMOVE);
+	export_constant(EF_MAGICROD);
+	export_constant(EF_HOLYCROSS);
+	export_constant(EF_SHIELDCHARGE);
+	export_constant(EF_MAPPILLAR2);
+	export_constant(EF_PROVIDENCE);
+	export_constant(EF_SHIELDBOOMERANG);
+	export_constant(EF_SPEARQUICKEN);
+	export_constant(EF_DEVOTION);
+	export_constant(EF_REFLECTSHIELD);
+	export_constant(EF_ABSORBSPIRITS);
+	export_constant(EF_STEELBODY);
+	export_constant(EF_FLAMELAUNCHER);
+	export_constant(EF_FROSTWEAPON);
+	export_constant(EF_LIGHTNINGLOADER);
+	export_constant(EF_SEISMICWEAPON);
+	export_constant(EF_MAPPILLAR3);
+	export_constant(EF_MAPPILLAR4);
+	export_constant(EF_GUMGANG2);
+	export_constant(EF_TEIHIT1);
+	export_constant(EF_GUMGANG3);
+	export_constant(EF_TEIHIT2);
+	export_constant(EF_TANJI);
+	export_constant(EF_TEIHIT1X);
+	export_constant(EF_CHIMTO);
+	export_constant(EF_STEALCOIN);
+	export_constant(EF_STRIPWEAPON);
+	export_constant(EF_STRIPSHIELD);
+	export_constant(EF_STRIPARMOR);
+	export_constant(EF_STRIPHELM);
+	export_constant(EF_CHAINCOMBO);
+	export_constant(EF_RG_COIN);
+	export_constant(EF_BACKSTAP);
+	export_constant(EF_TEIHIT3);
+	export_constant(EF_BOTTOM_DISSONANCE);
+	export_constant(EF_BOTTOM_LULLABY);
+	export_constant(EF_BOTTOM_RICHMANKIM);
+	export_constant(EF_BOTTOM_ETERNALCHAOS);
+	export_constant(EF_BOTTOM_DRUMBATTLEFIELD);
+	export_constant(EF_BOTTOM_RINGNIBELUNGEN);
+	export_constant(EF_BOTTOM_ROKISWEIL);
+	export_constant(EF_BOTTOM_INTOABYSS);
+	export_constant(EF_BOTTOM_SIEGFRIED);
+	export_constant(EF_BOTTOM_WHISTLE);
+	export_constant(EF_BOTTOM_ASSASSINCROSS);
+	export_constant(EF_BOTTOM_POEMBRAGI);
+	export_constant(EF_BOTTOM_APPLEIDUN);
+	export_constant(EF_BOTTOM_UGLYDANCE);
+	export_constant(EF_BOTTOM_HUMMING);
+	export_constant(EF_BOTTOM_DONTFORGETME);
+	export_constant(EF_BOTTOM_FORTUNEKISS);
+	export_constant(EF_BOTTOM_SERVICEFORYOU);
+	export_constant(EF_TALK_FROSTJOKE);
+	export_constant(EF_TALK_SCREAM);
+	export_constant(EF_POKJUK);
+	export_constant(EF_THROWITEM);
+	export_constant(EF_THROWITEM2);
+	export_constant(EF_CHEMICALPROTECTION);
+	export_constant(EF_POKJUK_SOUND);
+	export_constant(EF_DEMONSTRATION);
+	export_constant(EF_CHEMICAL2);
+	export_constant(EF_TELEPORTATION2);
+	export_constant(EF_PHARMACY_OK);
+	export_constant(EF_PHARMACY_FAIL);
+	export_constant(EF_FORESTLIGHT);
+	export_constant(EF_THROWITEM3);
+	export_constant(EF_FIRSTAID);
+	export_constant(EF_SPRINKLESAND);
+	export_constant(EF_LOUD);
+	export_constant(EF_HEAL);
+	export_constant(EF_HEAL2);
+	export_constant(EF_EXIT2);
+	export_constant(EF_GLASSWALL2);
+	export_constant(EF_READYPORTAL2);
+	export_constant(EF_PORTAL2);
+	export_constant(EF_BOTTOM_MAG);
+	export_constant(EF_BOTTOM_SANC);
+	export_constant(EF_HEAL3);
+	export_constant(EF_WARPZONE2);
+	export_constant(EF_FORESTLIGHT2);
+	export_constant(EF_FORESTLIGHT3);
+	export_constant(EF_FORESTLIGHT4);
+	export_constant(EF_HEAL4);
+	export_constant(EF_FOOT);
+	export_constant(EF_FOOT2);
+	export_constant(EF_BEGINASURA);
+	export_constant(EF_TRIPLEATTACK);
+	export_constant(EF_HITLINE);
+	export_constant(EF_HPTIME);
+	export_constant(EF_SPTIME);
+	export_constant(EF_MAPLE);
+	export_constant(EF_BLIND);
+	export_constant(EF_POISON);
+	export_constant(EF_GUARD);
+	export_constant(EF_JOBLVUP50);
+	export_constant(EF_ANGEL2);
+	export_constant(EF_MAGNUM2);
+	export_constant(EF_CALLZONE);
+	export_constant(EF_PORTAL3);
+	export_constant(EF_COUPLECASTING);
+	export_constant(EF_HEARTCASTING);
+	export_constant(EF_ENTRY2);
+	export_constant(EF_SAINTWING);
+	export_constant(EF_SPHEREWIND);
+	export_constant(EF_COLORPAPER);
+	export_constant(EF_LIGHTSPHERE);
+	export_constant(EF_WATERFALL);
+	export_constant(EF_WATERFALL_90);
+	export_constant(EF_WATERFALL_SMALL);
+	export_constant(EF_WATERFALL_SMALL_90);
+	export_constant(EF_WATERFALL_T2);
+	export_constant(EF_WATERFALL_T2_90);
+	export_constant(EF_WATERFALL_SMALL_T2);
+	export_constant(EF_WATERFALL_SMALL_T2_90);
+	export_constant(EF_MINI_TETRIS);
+	export_constant(EF_GHOST);
+	export_constant(EF_BAT);
+	export_constant(EF_BAT2);
+	export_constant(EF_SOULBREAKER);
+	export_constant(EF_LEVEL99_4);
+	export_constant(EF_VALLENTINE);
+	export_constant(EF_VALLENTINE2);
+	export_constant(EF_PRESSURE);
+	export_constant(EF_BASH3D);
+	export_constant(EF_AURABLADE);
+	export_constant(EF_REDBODY);
+	export_constant(EF_LKCONCENTRATION);
+	export_constant(EF_BOTTOM_GOSPEL);
+	export_constant(EF_ANGEL);
+	export_constant(EF_DEVIL);
+	export_constant(EF_DRAGONSMOKE);
+	export_constant(EF_BOTTOM_BASILICA);
+	export_constant(EF_ASSUMPTIO);
+	export_constant(EF_HITLINE2);
+	export_constant(EF_BASH3D2);
+	export_constant(EF_ENERGYDRAIN2);
+	export_constant(EF_TRANSBLUEBODY);
+	export_constant(EF_MAGICCRASHER);
+	export_constant(EF_LIGHTSPHERE2);
+	export_constant(EF_LIGHTBLADE);
+	export_constant(EF_ENERGYDRAIN3);
+	export_constant(EF_LINELINK2);
+	export_constant(EF_LINKLIGHT);
+	export_constant(EF_TRUESIGHT);
+	export_constant(EF_FALCONASSAULT);
+	export_constant(EF_TRIPLEATTACK2);
+	export_constant(EF_PORTAL4);
+	export_constant(EF_MELTDOWN);
+	export_constant(EF_CARTBOOST);
+	export_constant(EF_REJECTSWORD);
+	export_constant(EF_TRIPLEATTACK3);
+	export_constant(EF_SPHEREWIND2);
+	export_constant(EF_LINELINK3);
+	export_constant(EF_PINKBODY);
+	export_constant(EF_LEVEL99_5);
+	export_constant(EF_LEVEL99_6);
+	export_constant(EF_BASH3D3);
+	export_constant(EF_BASH3D4);
+	export_constant(EF_NAPALMVALCAN);
+	export_constant(EF_PORTAL5);
+	export_constant(EF_MAGICCRASHER2);
+	export_constant(EF_BOTTOM_SPIDER);
+	export_constant(EF_BOTTOM_FOGWALL);
+	export_constant(EF_SOULBURN);
+	export_constant(EF_SOULCHANGE);
+	export_constant(EF_BABY);
+	export_constant(EF_SOULBREAKER2);
+	export_constant(EF_RAINBOW);
+	export_constant(EF_PEONG);
+	export_constant(EF_TANJI2);
+	export_constant(EF_PRESSEDBODY);
+	export_constant(EF_SPINEDBODY);
+	export_constant(EF_KICKEDBODY);
+	export_constant(EF_AIRTEXTURE);
+	export_constant(EF_HITBODY);
+	export_constant(EF_DOUBLEGUMGANG);
+	export_constant(EF_REFLECTBODY);
+	export_constant(EF_BABYBODY);
+	export_constant(EF_BABYBODY2);
+	export_constant(EF_GIANTBODY);
+	export_constant(EF_GIANTBODY2);
+	export_constant(EF_ASURABODY);
+	export_constant(EF_4WAYBODY);
+	export_constant(EF_QUAKEBODY);
+	export_constant(EF_ASURABODY_MONSTER);
+	export_constant(EF_HITLINE3);
+	export_constant(EF_HITLINE4);
+	export_constant(EF_HITLINE5);
+	export_constant(EF_HITLINE6);
+	export_constant(EF_ELECTRIC);
+	export_constant(EF_ELECTRIC2);
+	export_constant(EF_HITLINE7);
+	export_constant(EF_STORMKICK);
+	export_constant(EF_HALFSPHERE);
+	export_constant(EF_ATTACKENERGY);
+	export_constant(EF_ATTACKENERGY2);
+	export_constant(EF_CHEMICAL3);
+	export_constant(EF_ASSUMPTIO2);
+	export_constant(EF_BLUECASTING);
+	export_constant(EF_RUN);
+	export_constant(EF_STOPRUN);
+	export_constant(EF_STOPEFFECT);
+	export_constant(EF_JUMPBODY);
+	export_constant(EF_LANDBODY);
+	export_constant(EF_FOOT3);
+	export_constant(EF_FOOT4);
+	export_constant(EF_TAE_READY);
+	export_constant(EF_GRANDCROSS2);
+	export_constant(EF_SOULSTRIKE2);
+	export_constant(EF_YUFITEL2);
+	export_constant(EF_NPC_STOP);
+	export_constant(EF_DARKCASTING);
+	export_constant(EF_GUMGANGNPC);
+	export_constant(EF_AGIUP);
+	export_constant(EF_JUMPKICK);
+	export_constant(EF_QUAKEBODY2);
+	export_constant(EF_STORMKICK1);
+	export_constant(EF_STORMKICK2);
+	export_constant(EF_STORMKICK3);
+	export_constant(EF_STORMKICK4);
+	export_constant(EF_STORMKICK5);
+	export_constant(EF_STORMKICK6);
+	export_constant(EF_STORMKICK7);
+	export_constant(EF_SPINEDBODY2);
+	export_constant(EF_BEGINASURA1);
+	export_constant(EF_BEGINASURA2);
+	export_constant(EF_BEGINASURA3);
+	export_constant(EF_BEGINASURA4);
+	export_constant(EF_BEGINASURA5);
+	export_constant(EF_BEGINASURA6);
+	export_constant(EF_BEGINASURA7);
+	export_constant(EF_AURABLADE2);
+	export_constant(EF_DEVIL1);
+	export_constant(EF_DEVIL2);
+	export_constant(EF_DEVIL3);
+	export_constant(EF_DEVIL4);
+	export_constant(EF_DEVIL5);
+	export_constant(EF_DEVIL6);
+	export_constant(EF_DEVIL7);
+	export_constant(EF_DEVIL8);
+	export_constant(EF_DEVIL9);
+	export_constant(EF_DEVIL10);
+	export_constant(EF_DOUBLEGUMGANG2);
+	export_constant(EF_DOUBLEGUMGANG3);
+	export_constant(EF_BLACKDEVIL);
+	export_constant(EF_FLOWERCAST);
+	export_constant(EF_FLOWERCAST2);
+	export_constant(EF_FLOWERCAST3);
+	export_constant(EF_MOCHI);
+	export_constant(EF_LAMADAN);
+	export_constant(EF_EDP);
+	export_constant(EF_SHIELDBOOMERANG2);
+	export_constant(EF_RG_COIN2);
+	export_constant(EF_GUARD2);
+	export_constant(EF_SLIM);
+	export_constant(EF_SLIM2);
+	export_constant(EF_SLIM3);
+	export_constant(EF_CHEMICALBODY);
+	export_constant(EF_CASTSPIN);
+	export_constant(EF_PIERCEBODY);
+	export_constant(EF_SOULLINK);
+	export_constant(EF_CHOOKGI2);
+	export_constant(EF_MEMORIZE);
+	export_constant(EF_SOULLIGHT);
+	export_constant(EF_MAPAE);
+	export_constant(EF_ITEMPOKJUK);
+	export_constant(EF_05VAL);
+	export_constant(EF_BEGINASURA11);
+	export_constant(EF_NIGHT);
+	export_constant(EF_CHEMICAL2DASH);
+	export_constant(EF_GROUNDSAMPLE);
+	export_constant(EF_GI_EXPLOSION);
+	export_constant(EF_CLOUD4);
+	export_constant(EF_CLOUD5);
+	export_constant(EF_BOTTOM_HERMODE);
+	export_constant(EF_CARTTER);
+	export_constant(EF_ITEMFAST);
+	export_constant(EF_SHIELDBOOMERANG3);
+	export_constant(EF_DOUBLECASTBODY);
+	export_constant(EF_GRAVITATION);
+	export_constant(EF_TAROTCARD1);
+	export_constant(EF_TAROTCARD2);
+	export_constant(EF_TAROTCARD3);
+	export_constant(EF_TAROTCARD4);
+	export_constant(EF_TAROTCARD5);
+	export_constant(EF_TAROTCARD6);
+	export_constant(EF_TAROTCARD7);
+	export_constant(EF_TAROTCARD8);
+	export_constant(EF_TAROTCARD9);
+	export_constant(EF_TAROTCARD10);
+	export_constant(EF_TAROTCARD11);
+	export_constant(EF_TAROTCARD12);
+	export_constant(EF_TAROTCARD13);
+	export_constant(EF_TAROTCARD14);
+	export_constant(EF_ACIDDEMON);
+	export_constant(EF_GREENBODY);
+	export_constant(EF_THROWITEM4);
+	export_constant(EF_BABYBODY_BACK);
+	export_constant(EF_THROWITEM5);
+	export_constant(EF_BLUEBODY);
+	export_constant(EF_HATED);
+	export_constant(EF_REDLIGHTBODY);
+	export_constant(EF_RO2YEAR);
+	export_constant(EF_SMA_READY);
+	export_constant(EF_STIN);
+	export_constant(EF_RED_HIT);
+	export_constant(EF_BLUE_HIT);
+	export_constant(EF_QUAKEBODY3);
+	export_constant(EF_SMA);
+	export_constant(EF_SMA2);
+	export_constant(EF_STIN2);
+	export_constant(EF_HITTEXTURE);
+	export_constant(EF_STIN3);
+	export_constant(EF_SMA3);
+	export_constant(EF_BLUEFALL);
+	export_constant(EF_BLUEFALL_90);
+	export_constant(EF_FASTBLUEFALL);
+	export_constant(EF_FASTBLUEFALL_90);
+	export_constant(EF_BIG_PORTAL);
+	export_constant(EF_BIG_PORTAL2);
+	export_constant(EF_SCREEN_QUAKE);
+	export_constant(EF_HOMUNCASTING);
+	export_constant(EF_HFLIMOON1);
+	export_constant(EF_HFLIMOON2);
+	export_constant(EF_HFLIMOON3);
+	export_constant(EF_HO_UP);
+	export_constant(EF_HAMIDEFENCE);
+	export_constant(EF_HAMICASTLE);
+	export_constant(EF_HAMIBLOOD);
+	export_constant(EF_HATED2);
+	export_constant(EF_TWILIGHT1);
+	export_constant(EF_TWILIGHT2);
+	export_constant(EF_TWILIGHT3);
+	export_constant(EF_ITEM_THUNDER);
+	export_constant(EF_ITEM_CLOUD);
+	export_constant(EF_ITEM_CURSE);
+	export_constant(EF_ITEM_ZZZ);
+	export_constant(EF_ITEM_RAIN);
+	export_constant(EF_ITEM_LIGHT);
+	export_constant(EF_ANGEL3);
+	export_constant(EF_M01);
+	export_constant(EF_M02);
+	export_constant(EF_M03);
+	export_constant(EF_M04);
+	export_constant(EF_M05);
+	export_constant(EF_M06);
+	export_constant(EF_M07);
+	export_constant(EF_KAIZEL);
+	export_constant(EF_KAAHI);
+	export_constant(EF_CLOUD6);
+	export_constant(EF_FOOD01);
+	export_constant(EF_FOOD02);
+	export_constant(EF_FOOD03);
+	export_constant(EF_FOOD04);
+	export_constant(EF_FOOD05);
+	export_constant(EF_FOOD06);
+	export_constant(EF_SHRINK);
+	export_constant(EF_THROWITEM6);
+	export_constant(EF_SIGHT2);
+	export_constant(EF_QUAKEBODY4);
+	export_constant(EF_FIREHIT2);
+	export_constant(EF_NPC_STOP2);
+	export_constant(EF_NPC_STOP2_DEL);
+	export_constant(EF_FVOICE);
+	export_constant(EF_WINK);
+	export_constant(EF_COOKING_OK);
+	export_constant(EF_COOKING_FAIL);
+	export_constant(EF_TEMP_OK);
+	export_constant(EF_TEMP_FAIL);
+	export_constant(EF_HAPGYEOK);
+	export_constant(EF_THROWITEM7);
+	export_constant(EF_THROWITEM8);
+	export_constant(EF_THROWITEM9);
+	export_constant(EF_THROWITEM10);
+	export_constant(EF_BUNSINJYUTSU);
+	export_constant(EF_KOUENKA);
+	export_constant(EF_HYOUSENSOU);
+	export_constant(EF_BOTTOM_SUITON);
+	export_constant(EF_STIN4);
+	export_constant(EF_THUNDERSTORM2);
+	export_constant(EF_CHEMICAL4);
+	export_constant(EF_STIN5);
+	export_constant(EF_MADNESS_BLUE);
+	export_constant(EF_MADNESS_RED);
+	export_constant(EF_RG_COIN3);
+	export_constant(EF_BASH3D5);
+	export_constant(EF_CHOOKGI3);
+	export_constant(EF_KIRIKAGE);
+	export_constant(EF_TATAMI);
+	export_constant(EF_KASUMIKIRI);
+	export_constant(EF_ISSEN);
+	export_constant(EF_KAEN);
+	export_constant(EF_BAKU);
+	export_constant(EF_HYOUSYOURAKU);
+	export_constant(EF_DESPERADO);
+	export_constant(EF_LIGHTNING_S);
+	export_constant(EF_BLIND_S);
+	export_constant(EF_POISON_S);
+	export_constant(EF_FREEZING_S);
+	export_constant(EF_FLARE_S);
+	export_constant(EF_RAPIDSHOWER);
+	export_constant(EF_MAGICALBULLET);
+	export_constant(EF_SPREADATTACK);
+	export_constant(EF_TRACKCASTING);
+	export_constant(EF_TRACKING);
+	export_constant(EF_TRIPLEACTION);
+	export_constant(EF_BULLSEYE);
+	export_constant(EF_MAP_MAGICZONE);
+	export_constant(EF_MAP_MAGICZONE2);
+	export_constant(EF_DAMAGE1);
+	export_constant(EF_DAMAGE1_2);
+	export_constant(EF_DAMAGE1_3);
+	export_constant(EF_UNDEADBODY);
+	export_constant(EF_UNDEADBODY_DEL);
+	export_constant(EF_GREEN_NUMBER);
+	export_constant(EF_BLUE_NUMBER);
+	export_constant(EF_RED_NUMBER);
+	export_constant(EF_PURPLE_NUMBER);
+	export_constant(EF_BLACK_NUMBER);
+	export_constant(EF_WHITE_NUMBER);
+	export_constant(EF_YELLOW_NUMBER);
+	export_constant(EF_PINK_NUMBER);
+	export_constant(EF_BUBBLE_DROP);
+	export_constant(EF_NPC_EARTHQUAKE);
+	export_constant(EF_DA_SPACE);
+	export_constant(EF_DRAGONFEAR);
+	export_constant(EF_BLEEDING);
+	export_constant(EF_WIDECONFUSE);
+	export_constant(EF_BOTTOM_RUNNER);
+	export_constant(EF_BOTTOM_TRANSFER);
+	export_constant(EF_CRYSTAL_BLUE);
+	export_constant(EF_BOTTOM_EVILLAND);
+	export_constant(EF_GUARD3);
+	export_constant(EF_NPC_SLOWCAST);
+	export_constant(EF_CRITICALWOUND);
+	export_constant(EF_GREEN99_3);
+	export_constant(EF_GREEN99_5);
+	export_constant(EF_GREEN99_6);
+	export_constant(EF_MAPSPHERE);
+	export_constant(EF_POK_LOVE);
+	export_constant(EF_POK_WHITE);
+	export_constant(EF_POK_VALEN);
+	export_constant(EF_POK_BIRTH);
+	export_constant(EF_POK_CHRISTMAS);
+	export_constant(EF_MAP_MAGICZONE3);
+	export_constant(EF_MAP_MAGICZONE4);
+	export_constant(EF_DUST);
+	export_constant(EF_TORCH_RED);
+	export_constant(EF_TORCH_GREEN);
+	export_constant(EF_MAP_GHOST);
+	export_constant(EF_GLOW1);
+	export_constant(EF_GLOW2);
+	export_constant(EF_GLOW4);
+	export_constant(EF_TORCH_PURPLE);
+	export_constant(EF_CLOUD7);
+	export_constant(EF_CLOUD8);
+	export_constant(EF_FLOWERLEAF);
+	export_constant(EF_MAPSPHERE2);
+	export_constant(EF_GLOW11);
+	export_constant(EF_GLOW12);
+	export_constant(EF_CIRCLELIGHT);
+	export_constant(EF_ITEM315);
+	export_constant(EF_ITEM316);
+	export_constant(EF_ITEM317);
+	export_constant(EF_ITEM318);
+	export_constant(EF_STORM_MIN);
+	export_constant(EF_POK_JAP);
+	export_constant(EF_MAP_GREENLIGHT);
+	export_constant(EF_MAP_MAGICWALL);
+	export_constant(EF_MAP_GREENLIGHT2);
+	export_constant(EF_YELLOWFLY1);
+	export_constant(EF_YELLOWFLY2);
+	export_constant(EF_BOTTOM_BLUE);
+	export_constant(EF_BOTTOM_BLUE2);
+	export_constant(EF_WEWISH);
+	export_constant(EF_FIREPILLARON2);
+	export_constant(EF_FORESTLIGHT5);
+	export_constant(EF_SOULBREAKER3);
+	export_constant(EF_ADO_STR);
+	export_constant(EF_IGN_STR);
+	export_constant(EF_CHIMTO2);
+	export_constant(EF_WINDCUTTER);
+	export_constant(EF_DETECT2);
+	export_constant(EF_FROSTMYSTY);
+	export_constant(EF_CRIMSON_STR);
+	export_constant(EF_HELL_STR);
+	export_constant(EF_SPR_MASH);
+	export_constant(EF_SPR_SOULE);
+	export_constant(EF_DHOWL_STR);
+	export_constant(EF_EARTHWALL);
+	export_constant(EF_SOULBREAKER4);
+	export_constant(EF_CHAINL_STR);
+	export_constant(EF_CHOOKGI_FIRE);
+	export_constant(EF_CHOOKGI_WIND);
+	export_constant(EF_CHOOKGI_WATER);
+	export_constant(EF_CHOOKGI_GROUND);
+	export_constant(EF_MAGENTA_TRAP);
+	export_constant(EF_COBALT_TRAP);
+	export_constant(EF_MAIZE_TRAP);
+	export_constant(EF_VERDURE_TRAP);
+	export_constant(EF_NORMAL_TRAP);
+	export_constant(EF_CLOAKING2);
+	export_constant(EF_AIMED_STR);
+	export_constant(EF_ARROWSTORM_STR);
+	export_constant(EF_LAULAMUS_STR);
+	export_constant(EF_LAUAGNUS_STR);
+	export_constant(EF_MILSHIELD_STR);
+	export_constant(EF_CONCENTRATION2);
+	export_constant(EF_FIREBALL2);
+	export_constant(EF_BUNSINJYUTSU2);
+	export_constant(EF_CLEARTIME);
+	export_constant(EF_GLASSWALL3);
+	export_constant(EF_ORATIO);
+	export_constant(EF_POTION_BERSERK2);
+	export_constant(EF_CIRCLEPOWER);
+	export_constant(EF_ROLLING1);
+	export_constant(EF_ROLLING2);
+	export_constant(EF_ROLLING3);
+	export_constant(EF_ROLLING4);
+	export_constant(EF_ROLLING5);
+	export_constant(EF_ROLLING6);
+	export_constant(EF_ROLLING7);
+	export_constant(EF_ROLLING8);
+	export_constant(EF_ROLLING9);
+	export_constant(EF_ROLLING10);
+	export_constant(EF_PURPLEBODY);
+	export_constant(EF_STIN6);
+	export_constant(EF_RG_COIN4);
+	export_constant(EF_POISONWAV);
+	export_constant(EF_POISONSMOKE);
+	export_constant(EF_GUMGANG4);
+	export_constant(EF_SHIELDBOOMERANG4);
+	export_constant(EF_CASTSPIN2);
+	export_constant(EF_VULCANWAV);
+	export_constant(EF_AGIUP2);
+	export_constant(EF_DETECT3);
+	export_constant(EF_AGIUP3);
+	export_constant(EF_DETECT4);
+	export_constant(EF_ELECTRIC3);
+	export_constant(EF_GUARD4);
+	export_constant(EF_BOTTOM_BARRIER);
+	export_constant(EF_BOTTOM_STEALTH);
+	export_constant(EF_REPAIRTIME);
+	export_constant(EF_NC_ANAL);
+	export_constant(EF_FIRETHROW);
+	export_constant(EF_VENOMIMPRESS);
+	export_constant(EF_FROSTMISTY);
+	export_constant(EF_BURNING);
+	export_constant(EF_COLDTHROW);
+	export_constant(EF_MAKEHALLU);
+	export_constant(EF_HALLUTIME);
+	export_constant(EF_INFRAREDSCAN);
+	export_constant(EF_CRASHAXE);
+	export_constant(EF_GTHUNDER);
+	export_constant(EF_STONERING);
+	export_constant(EF_INTIMIDATE2);
+	export_constant(EF_STASIS);
+	export_constant(EF_REDLINE);
+	export_constant(EF_FROSTDIVER3);
+	export_constant(EF_BOTTOM_BASILICA2);
+	export_constant(EF_RECOGNIZED);
+	export_constant(EF_TETRA);
+	export_constant(EF_TETRACASTING);
+	export_constant(EF_FIREBALL3);
+	export_constant(EF_INTIMIDATE3);
+	export_constant(EF_RECOGNIZED2);
+	export_constant(EF_CLOAKING3);
+	export_constant(EF_INTIMIDATE4);
+	export_constant(EF_STRETCH);
+	export_constant(EF_BLACKBODY);
+	export_constant(EF_ENERVATION);
+	export_constant(EF_ENERVATION2);
+	export_constant(EF_ENERVATION3);
+	export_constant(EF_ENERVATION4);
+	export_constant(EF_ENERVATION5);
+	export_constant(EF_ENERVATION6);
+	export_constant(EF_LINELINK4);
+	export_constant(EF_RG_COIN5);
+	export_constant(EF_WATERFALL_ANI);
+	export_constant(EF_BOTTOM_MANHOLE);
+	export_constant(EF_MANHOLE);
+	export_constant(EF_MAKEFEINT);
+	export_constant(EF_FORESTLIGHT6);
+	export_constant(EF_DARKCASTING2);
+	export_constant(EF_BOTTOM_ANI);
+	export_constant(EF_BOTTOM_MAELSTROM);
+	export_constant(EF_BOTTOM_BLOODYLUST);
+	export_constant(EF_BEGINSPELL_N1);
+	export_constant(EF_BEGINSPELL_N2);
+	export_constant(EF_HEAL_N);
+	export_constant(EF_CHOOKGI_N);
+	export_constant(EF_JOBLVUP50_2);
+	export_constant(EF_CHEMICAL2DASH2);
+	export_constant(EF_CHEMICAL2DASH3);
+	export_constant(EF_ROLLINGCAST);
+	export_constant(EF_WATER_BELOW);
+	export_constant(EF_WATER_FADE);
+	export_constant(EF_BEGINSPELL_N3);
+	export_constant(EF_BEGINSPELL_N4);
+	export_constant(EF_BEGINSPELL_N5);
+	export_constant(EF_BEGINSPELL_N6);
+	export_constant(EF_BEGINSPELL_N7);
+	export_constant(EF_BEGINSPELL_N8);
+	export_constant(EF_WATER_SMOKE);
+	export_constant(EF_DANCE1);
+	export_constant(EF_DANCE2);
+	export_constant(EF_LINKPARTICLE);
+	export_constant(EF_SOULLIGHT2);
+	export_constant(EF_SPR_PARTICLE);
+	export_constant(EF_SPR_PARTICLE2);
+	export_constant(EF_SPR_PLANT);
+	export_constant(EF_CHEMICAL_V);
+	export_constant(EF_SHOOTPARTICLE);
+	export_constant(EF_BOT_REVERB);
+	export_constant(EF_RAIN_PARTICLE);
+	export_constant(EF_CHEMICAL_V2);
+	export_constant(EF_SECRA);
+	export_constant(EF_BOT_REVERB2);
+	export_constant(EF_CIRCLEPOWER2);
+	export_constant(EF_SECRA2);
+	export_constant(EF_CHEMICAL_V3);
+	export_constant(EF_ENERVATION7);
+	export_constant(EF_CIRCLEPOWER3);
+	export_constant(EF_SPR_PLANT2);
+	export_constant(EF_CIRCLEPOWER4);
+	export_constant(EF_SPR_PLANT3);
+	export_constant(EF_RG_COIN6);
+	export_constant(EF_SPR_PLANT4);
+	export_constant(EF_CIRCLEPOWER5);
+	export_constant(EF_SPR_PLANT5);
+	export_constant(EF_CIRCLEPOWER6);
+	export_constant(EF_SPR_PLANT6);
+	export_constant(EF_CIRCLEPOWER7);
+	export_constant(EF_SPR_PLANT7);
+	export_constant(EF_CIRCLEPOWER8);
+	export_constant(EF_SPR_PLANT8);
+	export_constant(EF_HEARTASURA);
+	export_constant(EF_BEGINSPELL_150);
+	export_constant(EF_LEVEL99_150);
+	export_constant(EF_PRIMECHARGE);
+	export_constant(EF_GLASSWALL4);
+	export_constant(EF_GRADIUS_LASER);
+	export_constant(EF_BASH3D6);
+	export_constant(EF_GUMGANG5);
+	export_constant(EF_HITLINE8);
+	export_constant(EF_ELECTRIC4);
+	export_constant(EF_TEIHIT1T);
+	export_constant(EF_SPINMOVE);
+	export_constant(EF_FIREBALL4);
+	export_constant(EF_TRIPLEATTACK4);
+	export_constant(EF_CHEMICAL3S);
+	export_constant(EF_GROUNDSHAKE);
+	export_constant(EF_DQ9_CHARGE);
+	export_constant(EF_DQ9_CHARGE2);
+	export_constant(EF_DQ9_CHARGE3);
+	export_constant(EF_DQ9_CHARGE4);
+	export_constant(EF_BLUELINE);
+	export_constant(EF_SELFSCROLL);
+	export_constant(EF_SPR_LIGHTPRINT);
+	export_constant(EF_PNG_TEST);
+	export_constant(EF_BEGINSPELL_YB);
+	export_constant(EF_CHEMICAL2DASH4);
+	export_constant(EF_GROUNDSHAKE2);
+	export_constant(EF_PRESSURE2);
+	export_constant(EF_RG_COIN7);
+	export_constant(EF_PRIMECHARGE2);
+	export_constant(EF_PRIMECHARGE3);
+	export_constant(EF_PRIMECHARGE4);
+	export_constant(EF_GREENCASTING);
+	export_constant(EF_WALLOFTHORN);
+	export_constant(EF_FIREBALL5);
+	export_constant(EF_THROWITEM11);
+	export_constant(EF_SPR_PLANT9);
+	export_constant(EF_DEMONICFIRE);
+	export_constant(EF_DEMONICFIRE2);
+	export_constant(EF_DEMONICFIRE3);
+	export_constant(EF_HELLSPLANT);
+	export_constant(EF_FIREWALL2);
+	export_constant(EF_VACUUM);
+	export_constant(EF_SPR_PLANT10);
+	export_constant(EF_SPR_LIGHTPRINT2);
+	export_constant(EF_POISONSMOKE2);
+	export_constant(EF_MAKEHALLU2);
+	export_constant(EF_SHOCKWAVE2);
+	export_constant(EF_SPR_PLANT11);
+	export_constant(EF_COLDTHROW2);
+	export_constant(EF_DEMONICFIRE4);
+	export_constant(EF_PRESSURE3);
+	export_constant(EF_LINKPARTICLE2);
+	export_constant(EF_SOULLIGHT3);
+	export_constant(EF_CHAREFFECT);
+	export_constant(EF_GUMGANG6);
+	export_constant(EF_FIREBALL6);
+	export_constant(EF_GUMGANG7);
+	export_constant(EF_GUMGANG8);
+	export_constant(EF_GUMGANG9);
+	export_constant(EF_BOTTOM_DE2);
+	export_constant(EF_COLDSTATUS);
+	export_constant(EF_SPR_LIGHTPRINT3);
+	export_constant(EF_WATERBALL3);
+	export_constant(EF_HEAL_N2);
+	export_constant(EF_RAIN_PARTICLE2);
+	export_constant(EF_CLOUD9);
+	export_constant(EF_YELLOWFLY3);
+	export_constant(EF_EL_GUST);
+	export_constant(EF_EL_BLAST);
+	export_constant(EF_EL_AQUAPLAY);
+	export_constant(EF_EL_UPHEAVAL);
+	export_constant(EF_EL_WILD_STORM);
+	export_constant(EF_EL_CHILLY_AIR);
+	export_constant(EF_EL_CURSED_SOIL);
+	export_constant(EF_EL_COOLER);
+	export_constant(EF_EL_TROPIC);
+	export_constant(EF_EL_PYROTECHNIC);
+	export_constant(EF_EL_PETROLOGY);
+	export_constant(EF_EL_HEATER);
+	export_constant(EF_POISON_MIST);
+	export_constant(EF_ERASER_CUTTER);
+	export_constant(EF_SILENT_BREEZE);
+	export_constant(EF_MAGMA_FLOW);
+	export_constant(EF_GRAYBODY);
+	export_constant(EF_LAVA_SLIDE);
+	export_constant(EF_SONIC_CLAW);
+	export_constant(EF_TINDER_BREAKER);
+	export_constant(EF_MIDNIGHT_FRENZY);
+	export_constant(EF_MACRO);
+	export_constant(EF_CHEMICAL_ALLRANGE);
+	export_constant(EF_TETRA_FIRE);
+	export_constant(EF_TETRA_WATER);
+	export_constant(EF_TETRA_WIND);
+	export_constant(EF_TETRA_GROUND);
+	export_constant(EF_EMITTER);
+	export_constant(EF_VOLCANIC_ASH);
+	export_constant(EF_LEVEL99_ORB1);
+	export_constant(EF_LEVEL99_ORB2);
+	export_constant(EF_LEVEL150);
+	export_constant(EF_LEVEL150_SUB);
+	export_constant(EF_THROWITEM4_1);
+	export_constant(EF_THROW_HAPPOKUNAI);
+	export_constant(EF_THROW_MULTIPLE_COIN);
+	export_constant(EF_THROW_BAKURETSU);
+	export_constant(EF_ROTATE_HUUMARANKA);
+	export_constant(EF_ROTATE_BG);
+	export_constant(EF_ROTATE_LINE_GRAY);
+	export_constant(EF_2011RWC);
+	export_constant(EF_2011RWC2);
+	export_constant(EF_KAIHOU);
+	export_constant(EF_GROUND_EXPLOSION);
+	export_constant(EF_KG_KAGEHUMI);
+	export_constant(EF_KO_ZENKAI_WATER);
+	export_constant(EF_KO_ZENKAI_LAND);
+	export_constant(EF_KO_ZENKAI_FIRE);
+	export_constant(EF_KO_ZENKAI_WIND);
+	export_constant(EF_KO_JYUMONJIKIRI);
+	export_constant(EF_KO_SETSUDAN);
+	export_constant(EF_RED_CROSS);
+	export_constant(EF_KO_IZAYOI);
+	export_constant(EF_ROTATE_LINE_BLUE);
+	export_constant(EF_KG_KYOMU);
+	export_constant(EF_KO_HUUMARANKA);
+	export_constant(EF_BLUELIGHTBODY);
+	export_constant(EF_KAGEMUSYA);
+	export_constant(EF_OB_GENSOU);
+	export_constant(EF_NO100_FIRECRACKER);
+	export_constant(EF_KO_MAKIBISHI);
+	export_constant(EF_KAIHOU1);
+	export_constant(EF_AKAITSUKI);
+	export_constant(EF_ZANGETSU);
+	export_constant(EF_GENSOU);
+	export_constant(EF_HAT_EFFECT);
+	export_constant(EF_CHERRYBLOSSOM);
+	export_constant(EF_EVENT_CLOUD);
+	export_constant(EF_RUN_MAKE_OK);
+	export_constant(EF_RUN_MAKE_FAILURE);
+	export_constant(EF_MIRESULT_MAKE_OK);
+	export_constant(EF_MIRESULT_MAKE_FAIL);
+	export_constant(EF_ALL_RAY_OF_PROTECTION);
+	export_constant(EF_VENOMFOG);
+	export_constant(EF_DUSTSTORM);
+	export_constant(EF_LEVEL160);
+	export_constant(EF_LEVEL160_SUB);
+	export_constant(EF_MAPCHAIN);
+	export_constant(EF_MAGIC_FLOOR);
+	export_constant(EF_ICEMINE);
+	export_constant(EF_FLAMECORSS);
+	export_constant(EF_ICEMINE_1);
+	export_constant(EF_DANCE_BLADE_ATK);
+	export_constant(EF_DARKPIERCING);
+	export_constant(EF_INVINCIBLEOFF2);
+	export_constant(EF_MAXPAIN);
+	export_constant(EF_DEATHSUMMON);
+	export_constant(EF_MOONSTAR);
+	export_constant(EF_STRANGELIGHTS);
+	export_constant(EF_SUPER_STAR);
+	export_constant(EF_YELLOBODY);
+	export_constant(EF_COLORPAPER2);
+	export_constant(EF_EVILS_PAW);
+	export_constant(EF_GC_DARKCROW);
+	export_constant(EF_RK_DRAGONBREATH_WATER);
+	export_constant(EF_ALL_FULL_THROTTLE);
+	export_constant(EF_SR_FLASHCOMBO);
+	export_constant(EF_RK_LUXANIMA);
+	export_constant(EF_CLOUD10);
+	export_constant(EF_SO_ELEMENTAL_SHIELD);
+	export_constant(EF_AB_OFFERTORIUM);
+	export_constant(EF_WL_TELEKINESIS_INTENSE);
+	export_constant(EF_GN_ILLUSIONDOPING);
+	export_constant(EF_NC_MAGMA_ERUPTION);
+	export_constant(EF_LG_KINGS_GRACE);
+	export_constant(EF_BLOODDRAIN2);
+	export_constant(EF_NPC_WIDEWEB);
+	export_constant(EF_NPC_BURNT);
+	export_constant(EF_NPC_CHILL);
+	export_constant(EF_RA_UNLIMIT);
+	export_constant(EF_AB_OFFERTORIUM_RING);
+	export_constant(EF_SC_ESCAPE);
+	export_constant(EF_WM_FRIGG_SONG);
+	export_constant(EF_FLICKER);
+	export_constant(EF_C_MAKER);
+	export_constant(EF_HAMMER_OF_GOD);
+	export_constant(EF_MASS_SPIRAL);
+	export_constant(EF_FIRE_RAIN);
+	export_constant(EF_WHITEBODY);
+	export_constant(EF_BANISHING_BUSTER);
+	export_constant(EF_SLUGSHOT);
+	export_constant(EF_D_TAIL);
+	export_constant(EF_BIND_TRAP1);
+	export_constant(EF_BIND_TRAP2);
+	export_constant(EF_BIND_TRAP3);
+	export_constant(EF_JUMPBODY1);
+	export_constant(EF_ANIMATED_EMITTER);
+	export_constant(EF_RL_EXPLOSION);
+	export_constant(EF_C_MAKER_1);
+	export_constant(EF_QD_SHOT);
+	export_constant(EF_P_ALTER);
+	export_constant(EF_S_STORM);
+	export_constant(EF_MUSIC_HAT);
+	export_constant(EF_CLOUD_KILL);
+	export_constant(EF_ESCAPE);
+	export_constant(EF_XENO_SLASHER);
+	export_constant(EF_FLOWERSMOKE);
+	export_constant(EF_FSTONE);
+	export_constant(EF_QSCARABA);
+	export_constant(EF_LJOSALFAR);
+	export_constant(EF_HAPPINESSSTAR);
+	export_constant(EF_POWER_OF_GAIA);
+	export_constant(EF_MAPLE_FALLS);
+	export_constant(EF_MARKING_USE_CHANGEMONSTER);
+	export_constant(EF_MAGICAL_FEATHER);
+	export_constant(EF_MERMAID_LONGING);
+	export_constant(EF_GIFT_OF_SNOW);
+	export_constant(EF_ACH_COMPLETE);
+	export_constant(EF_TIME_ACCESSORY);
+	export_constant(EF_SPRITEMABLE);
+	export_constant(EF_TUNAPARTY);
+
+	/* hat effects */
+	export_constant(HAT_EF_BLOSSOM_FLUTTERING);
+	export_constant(HAT_EF_MERMAID_LONGING);
+	export_constant(HAT_EF_RL_BANISHING_BUSTER);
+	export_constant(HAT_EF_LJOSALFAR);
+	export_constant(HAT_EF_CLOCKING);
+	export_constant(HAT_EF_SNOW);
+	export_constant(HAT_EF_MAKEBLUR);
+	export_constant(HAT_EF_SLEEPATTACK);
+	export_constant(HAT_EF_GUMGANG);
+	export_constant(HAT_EF_TALK_FROSTJOKE);
+	export_constant(HAT_EF_DEMONSTRATION);
+	export_constant(HAT_EF_FLUTTER_BUTTERFLY);
+	export_constant(HAT_EF_ANGEL_FLUTTERING);
+	export_constant(HAT_EF_BLESSING_OF_ANGELS);
+	export_constant(HAT_EF_ELECTRIC);
+	export_constant(HAT_EF_GREEN_FLOOR);
+	export_constant(HAT_EF_SHRINK);
+	export_constant(HAT_EF_VALHALLA_IDOL);
+	export_constant(HAT_EF_ANGEL_STAIRS);
+	export_constant(HAT_EF_GLOW_OF_NEW_YEAR);
+	export_constant(HAT_EF_BOTTOM_FORTUNEKISS);
+	export_constant(HAT_EF_PINKBODY);
+	export_constant(HAT_EF_DOUBLEGUMGANG);
+	export_constant(HAT_EF_GIANTBODY);
+	export_constant(HAT_EF_GREEN99_6);
+	export_constant(HAT_EF_CIRCLEPOWER);
+	export_constant(HAT_EF_BOTTOM_BLOODYLUST);
+	export_constant(HAT_EF_WATER_BELOW);
+	export_constant(HAT_EF_LEVEL99_150);
+	export_constant(HAT_EF_YELLOWFLY3);
+	export_constant(HAT_EF_KAGEMUSYA);
+	export_constant(HAT_EF_CHERRYBLOSSOM);
+	export_constant(HAT_EF_STRANGELIGHTS);
+	export_constant(HAT_EF_WL_TELEKINESIS_INTENSE);
+	export_constant(HAT_EF_AB_OFFERTORIUM_RING);
+	export_constant(HAT_EF_WHITEBODY2);
+	export_constant(HAT_EF_SAKURA);
+	export_constant(HAT_EF_CLOUD2);
+	export_constant(HAT_EF_FEATHER_FLUTTERING);
+	export_constant(HAT_EF_CAMELLIA_HAIR_PIN);
+	export_constant(HAT_EF_JP_EV_EFFECT01);
+	export_constant(HAT_EF_JP_EV_EFFECT02);
+	export_constant(HAT_EF_JP_EV_EFFECT03);
+	export_constant(HAT_EF_FLORAL_WALTZ);
+	export_constant(HAT_EF_MAGICAL_FEATHER);
+	export_constant(HAT_EF_HAT_EFFECT);
+	export_constant(HAT_EF_BAKURETSU_HADOU);
+	export_constant(HAT_EF_GOLD_SHOWER);
+	export_constant(HAT_EF_WHITEBODY);
+	export_constant(HAT_EF_WATER_BELOW2);
+	export_constant(HAT_EF_FIREWORK);
+	export_constant(HAT_EF_RETURN_TW_1ST_HAT);
+	export_constant(HAT_EF_C_FLUTTERBUTTERFLY_BL);
+	export_constant(HAT_EF_QSCARABA);
+
 	#undef export_constant
 	#undef export_constant2
 	#undef export_parameter
+	#undef export_constant_offset
 
 #endif /* _SCRIPT_CONSTANTS_H_ */

Dosya farkı çok büyük olduğundan ihmal edildi
+ 276 - 208
src/map/skill.cpp


+ 4 - 0
src/map/skill.h

@@ -1805,6 +1805,10 @@ enum e_skill {
 	SU_CHATTERING,
 	SU_SPIRITOFSEA,
 
+	WE_CALLALLFAMILY = 5063,
+	WE_ONEFOREVER,
+	WE_CHEERUP,
+
 	HLIF_HEAL = 8001,
 	HLIF_AVOID,
 	HLIF_BRAIN,

+ 61 - 45
src/map/status.c

@@ -501,6 +501,9 @@ void initChangeTables(void)
 #endif
 	set_sc( GS_ADJUSTMENT		, SC_ADJUSTMENT		, SI_ADJUSTMENT		, SCB_HIT|SCB_FLEE );
 	set_sc( GS_INCREASING		, SC_INCREASING		, SI_ACCURACY		, SCB_AGI|SCB_DEX|SCB_HIT );
+#ifdef RENEWAL
+	set_sc( GS_MAGICALBULLET	, SC_MAGICALBULLET	, SI_GS_MAGICAL_BULLET	, SCB_NONE );
+#endif
 	set_sc( GS_GATLINGFEVER		, SC_GATLINGFEVER	, SI_GATLINGFEVER	,
 #ifndef RENEWAL
 		SCB_BATK|SCB_FLEE|SCB_SPEED|SCB_ASPD );
@@ -835,8 +838,9 @@ void initChangeTables(void)
 	set_sc( RL_B_TRAP		, SC_B_TRAP		, SI_B_TRAP		, SCB_SPEED );
 	set_sc( RL_E_CHAIN		, SC_E_CHAIN	, SI_E_CHAIN	, SCB_NONE );
 	set_sc( RL_P_ALTER		, SC_P_ALTER	, SI_P_ALTER	, SCB_NONE );
+	set_sc( RL_FALLEN_ANGEL , SC_FALLEN_ANGEL, SI_BLANK, SCB_NONE );
 	set_sc( RL_SLUGSHOT		, SC_STUN		, SI_SLUGSHOT	, SCB_NONE );
-	set_sc( RL_HEAT_BARREL	, SC_HEAT_BARREL	, SI_HEAT_BARREL	, SCB_FLEE|SCB_ASPD );
+	set_sc( RL_HEAT_BARREL	, SC_HEAT_BARREL	, SI_HEAT_BARREL	, SCB_HIT|SCB_ASPD );
 	set_sc_with_vfx( RL_C_MARKER	, SC_C_MARKER		, SI_C_MARKER		, SCB_FLEE );
 	set_sc_with_vfx( RL_AM_BLAST	, SC_ANTI_M_BLAST	, SI_ANTI_M_BLAST	, SCB_NONE );
 
@@ -880,6 +884,8 @@ void initChangeTables(void)
 	add_sc( SU_MEOWMEOW				, SC_CHATTERING );
 	set_sc( SU_CHATTERING			, SC_CHATTERING		, SI_CHATTERING		, SCB_WATK|SCB_MATK );
 
+	set_sc( WE_CHEERUP				, SC_CHEERUP		, SI_CHEERUP		, SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK );
+
 	/* Storing the target job rather than simply SC_SPIRIT simplifies code later on */
 	SkillStatusChangeTable[skill_get_index(SL_ALCHEMIST)]	= (sc_type)MAPID_ALCHEMIST,
 	SkillStatusChangeTable[skill_get_index(SL_MONK)]		= (sc_type)MAPID_MONK,
@@ -1055,7 +1061,6 @@ void initChangeTables(void)
 	StatusIconChangeTable[SC_MTF_MLEATKED] = SI_MTF_MLEATKED;
 	StatusIconChangeTable[SC_MTF_CRIDAMAGE] = SI_MTF_CRIDAMAGE;
 	StatusIconChangeTable[SC_QD_SHOT_READY] = SI_E_QD_SHOT_READY;
-	StatusIconChangeTable[SC_HEAT_BARREL_AFTER] = SI_HEAT_BARREL_AFTER;
 	StatusIconChangeTable[SC_QUEST_BUFF1] = SI_QUEST_BUFF1;
 	StatusIconChangeTable[SC_QUEST_BUFF2] = SI_QUEST_BUFF2;
 	StatusIconChangeTable[SC_QUEST_BUFF3] = SI_QUEST_BUFF3;
@@ -1425,7 +1430,6 @@ void initChangeTables(void)
 	StatusChangeStateTable[SC_SATURDAYNIGHTFEVER]	|= SCS_NOCAST;
 	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET]	|= SCS_NOCAST;
 	StatusChangeStateTable[SC_KINGS_GRACE]			|= SCS_NOCAST;
-	StatusChangeStateTable[SC_HEAT_BARREL_AFTER]	|= SCS_NOCAST;
 
 	/* StatusChangeState (SCS_) NOCHAT (skills) */
 	StatusChangeStateTable[SC_BERSERK]				|= SCS_NOCHAT;
@@ -1683,7 +1687,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
 				* Endure count is only reduced by non-players on non-gvg maps.
 				* val4 signals infinite endure.
 				**/
-				if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map[target->m].flag.battleground && --(sce->val2) < 0)
+				if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map[target->m].flag.battleground && --(sce->val2) <= 0)
 					status_change_end(target, SC_ENDURE, INVALID_TIMER);
 			}
 			if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) {
@@ -5413,6 +5417,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
 		str += 1;
 	if(sc->data[SC_FULL_THROTTLE])
 		str += str * sc->data[SC_FULL_THROTTLE]->val3 / 100;
+	if(sc->data[SC_CHEERUP]);
+		str += 3;
 
 	return (unsigned short)cap_value(str,0,USHRT_MAX);
 }
@@ -5485,6 +5491,8 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
 		agi += agi * sc->data[SC_FULL_THROTTLE]->val3 / 100;
 	if (sc->data[SC_ARCLOUSEDASH])
 		agi += sc->data[SC_ARCLOUSEDASH]->val2;
+	if(sc->data[SC_CHEERUP]);
+		agi += 3;
 
 	return (unsigned short)cap_value(agi,0,USHRT_MAX);
 }
@@ -5549,6 +5557,8 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
 	if(sc->data[SC_DEFENCE])
 		vit += sc->data[SC_DEFENCE]->val2;
 #endif
+	if(sc->data[SC_CHEERUP]);
+		vit += 3;
 
 	return (unsigned short)cap_value(vit,0,USHRT_MAX);
 }
@@ -5619,6 +5629,8 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
 		int_ += 1;
 	if(sc->data[SC_FULL_THROTTLE])
 		int_ += int_ * sc->data[SC_FULL_THROTTLE]->val3 / 100;
+	if(sc->data[SC_CHEERUP]);
+		int_ += 3;
 
 	if(bl->type != BL_PC) {
 		if(sc->data[SC_STRIPHELM])
@@ -5700,6 +5712,8 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
 		dex -= dex * sc->data[SC_MARSHOFABYSS]->val2 / 100;
 	if(sc->data[SC_FULL_THROTTLE])
 		dex += dex * sc->data[SC_FULL_THROTTLE]->val3 / 100;
+	if(sc->data[SC_CHEERUP]);
+		dex += 3;
 
 	return (unsigned short)cap_value(dex,0,USHRT_MAX);
 }
@@ -5762,6 +5776,8 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
 		luk += 1;
 	if(sc->data[SC_FULL_THROTTLE])
 		luk += luk * sc->data[SC_FULL_THROTTLE]->val3 / 100;
+	if(sc->data[SC_CHEERUP]);
+		luk += 3;
 
 	return (unsigned short)cap_value(luk,0,USHRT_MAX);
 }
@@ -6138,6 +6154,8 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
 		hit += hit * sc->data[SC_INCHITRATE]->val1/100;
 	if(sc->data[SC_BLIND])
 		hit -= hit * 25/100;
+	if(sc->data[SC_HEAT_BARREL])
+		hit -= sc->data[SC_HEAT_BARREL]->val4;
 	if(sc->data[SC__GROOMY])
 		hit -= hit * sc->data[SC__GROOMY]->val3 / 100;
 	if(sc->data[SC_FEAR])
@@ -6252,8 +6270,6 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
 		flee -= flee * 50 / 100;
 	//if( sc->data[SC_C_MARKER] )
 	//	flee -= (flee * sc->data[SC_C_MARKER]->val3) / 100;
-	if(sc->data[SC_HEAT_BARREL])
-		flee -= sc->data[SC_HEAT_BARREL]->val4;
 	if (sc->data[SC_GROOMING])
 		flee += sc->data[SC_GROOMING]->val2;
 
@@ -6792,6 +6808,8 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, b
 			bonus += sc->data[sc_val]->val1;
 		if (sc->data[SC_ATTHASTE_CASH])
 			bonus += sc->data[SC_ATTHASTE_CASH]->val1;
+		if (sc->data[SC_HEAT_BARREL])
+			bonus += sc->data[SC_HEAT_BARREL]->val1;
 	} else {
 		if (sc->data[SC_DONTFORGETME])
 			bonus -= sc->data[SC_DONTFORGETME]->val2 / 10;
@@ -6851,8 +6869,6 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, b
 			bonus += sc->data[SC_GATLINGFEVER]->val1;
 		if (sc->data[SC_STAR_COMFORT])
 			bonus += 3 * sc->data[SC_STAR_COMFORT]->val1;
-		if (sc->data[SC_HEAT_BARREL])
-			bonus += sc->data[SC_HEAT_BARREL]->val3;
 	}
 
 	return bonus;
@@ -7027,8 +7043,6 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
 		aspd_rate += sc->data[SC_PAIN_KILLER]->val2 * 10;
 	if( sc->data[SC_GOLDENE_FERSE])
 		aspd_rate -= sc->data[SC_GOLDENE_FERSE]->val3 * 10;
-	if( sc->data[SC_HEAT_BARREL] )
-		aspd_rate -= sc->data[SC_HEAT_BARREL]->val3 * 10;
 
 	return (short)cap_value(aspd_rate,0,SHRT_MAX);
 }
@@ -7610,7 +7624,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
 	nullpo_retv(bl);
 	if (mobdb_checkid(class_) || mob_is_clone(class_))
 		vd = mob_get_viewdata(class_);
-	else if (npcdb_checkid(class_) || (bl->type == BL_NPC && class_ == WARP_CLASS))
+	else if (npcdb_checkid(class_))
 		vd = npc_get_viewdata(class_);
 	else if (homdb_checkid(class_))
 		vd = hom_get_viewdata(class_);
@@ -8035,7 +8049,7 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
 			tick_def2 = status_get_lv(bl) * 100 + (sd ? sd->status.job_level : 1) * 200;
 			break;
 		case SC_B_TRAP:
-			tick_def = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; // (custom)
+			tick_def = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; //! TODO: Figure out reduction formula
 			break;
 		case SC_NORECOVER_STATE:
 			tick_def2 = status->luk * 100;
@@ -8730,7 +8744,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		break;
 	case SC_HEAT_BARREL:
 		//kRO Update 2014-02-12
-		//- Cannot be stacked with Platinum Alter and Madness Canceler (and otherwise?) [Cydh]
+		//- Cannot be stacked with Platinum Alter and Madness Canceler [Cydh]
 		if (sc->data[SC_P_ALTER] || sc->data[SC_MADNESSCANCEL])
 			return 0;
 		break;
@@ -8739,6 +8753,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			return 0;
 		break;
 	case SC_MADNESSCANCEL:
+		if (sc->data[type]) { // Toggle the status but still consume requirements.
+			status_change_end(bl, type, INVALID_TIMER);
+			return 0;
+		}
 		if (sc->data[SC_P_ALTER] || sc->data[SC_HEAT_BARREL])
 			return 0;
 		break;
@@ -9615,14 +9633,14 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_BOSSMAPINFO:
 			if( sd != NULL ) {
 				struct mob_data *boss_md = map_getmob_boss(bl->m); // Search for Boss on this Map
-				if( boss_md == NULL || boss_md->bl.prev == NULL ) { // No MVP on this map - MVP is dead
-					clif_bossmapinfo(sd->fd, boss_md, 1);
-					return 0; // No need to start SC
+
+				if( boss_md == NULL ) { // No MVP on this map
+					clif_bossmapinfo(sd, NULL, BOSS_INFO_NOT);
+					return 0;
 				}
 				val1 = boss_md->bl.id;
-				if( (val4 = tick/1000) < 1 )
-					val4 = 1;
 				tick_time = 1000; // [GodLesZ] tick time
+				val4 = tick / tick_time;
 			}
 			break;
 		case SC_HIDING:
@@ -10876,7 +10894,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		/* Rebellion */
 		case SC_B_TRAP:
 			val2 = src->id;
-			val3 = val1 * 25; // -movespeed (custom)
+			val3 = val1 * 25; // -movespeed TODO: Figure out movespeed rate
 			break;
 		case SC_C_MARKER:
 			// val1 = skill_lv
@@ -10890,23 +10908,18 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val2 = src->id;
 			break;
 		case SC_HEAT_BARREL:
-			//kRO Update 2014-02-26
-			{
-				uint8 n = 10;
-				if (sd)
-					n = (uint8)sd->spiritball_old;
-				val2 = val1 * 5; // -fixed casttime (custom)
-				val3 = val1 * n / 5; // +aspd (custom)
-				val4 = 75 - val1 * 5; // -flee
-			}
+			//kRO Update 2016-05-25
+			val2 = val1 * 5; // -fixed casttime
+			val3 = 6 + val1 * 2; // ATK
+			val4 = 25 + val1 * 5; // -hit
 			break;
 		case SC_P_ALTER:
 			{
 				uint8 n = 10;
 				if (sd)
 					n = (uint8)sd->spiritball_old;
-				val2 = val1 * n * 2; // +atk (custom)
-				val3 = val1 * 15; // +def (custom)
+				val2 = 10 * n; // +atk
+				val3 = (status->max_hp * (val1 * 5) / 100); // Barrier HP
 			}
 			break;
 		case SC_E_CHAIN:
@@ -10916,8 +10929,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			break;
 		case SC_ANTI_M_BLAST:
 			val2 = val1 * 10;
-			if (bl->type != BL_PC)
-				val2 /= 5; //(custom) //kRO update 2012-02-12, reduce the rate for Non-Player target [Cydh]
 			break;
 		case SC_CATNIPPOWDER:
 			val2 = 50; // WATK%, MATK%
@@ -11203,8 +11214,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 				unit_stop_walking(bl,1);
 			break;
 		case SC__MANHOLE:
+			// Manhole ignores blow_immune, when the enemy is BL_PC
 			if (bl->type == BL_PC || !unit_blown_immune(bl,0x1))
 				unit_stop_walking(bl,1);
+			unit_stop_attack(bl);
 			break;
 		case SC_VACUUM_EXTREME:
 			if (bl->type != BL_PC && !unit_blown_immune(bl,0x1)) {
@@ -11221,7 +11234,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_CAMOUFLAGE:
 		case SC_STEALTHFIELD:
 		case SC_VOICEOFSIREN:
-		case SC_HEAT_BARREL_AFTER:
 		case SC_WEDDING:
 		case SC_XMAS:
 		case SC_SUMMER:
@@ -11507,7 +11519,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			}
 			break;
 		case SC_BOSSMAPINFO:
-			clif_bossmapinfo(sd->fd, map_id2boss(sce->val1), 0); // First Message
+			if (sd)
+				clif_bossmapinfo(sd, map_id2boss(sce->val1), BOSS_INFO_ALIVE_WITHMSG); // First Message
 			break;
 		case SC_MERC_HPUP:
 			status_percent_heal(bl, 100, 0); // Recover Full HP
@@ -11671,7 +11684,6 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_PUSH_CART:
 			case SC_LIGHT_OF_REGENE:
 			case SC_STYLE_CHANGE:
-			case SC_HEAT_BARREL_AFTER:
 			case SC_QUEST_BUFF1:
 			case SC_QUEST_BUFF2:
 			case SC_QUEST_BUFF3:
@@ -12295,10 +12307,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 			if (sd && sce->val2 != SI_BLANK)
 				clif_status_load(bl, (enum si_type)sce->val2, 0);
 			break;
-		case SC_HEAT_BARREL:
-			if (sd)
-				sc_start(bl,bl,SC_HEAT_BARREL_AFTER,100,sce->val1,skill_get_time2(RL_HEAT_BARREL, sce->val1));
-			break;
 		case SC_C_MARKER:
 			{
 				// Remove mark data from caster
@@ -12834,13 +12842,20 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
 	case SC_BOSSMAPINFO:
 		if( sd && --(sce->val4) >= 0 ) {
 			struct mob_data *boss_md = map_id2boss(sce->val1);
-			if( boss_md && sd->bl.m == boss_md->bl.m ) {
-				clif_bossmapinfo(sd->fd, boss_md, 1); // Update X, Y on minimap
-				if (boss_md->bl.prev != NULL) {
-					sc_timer_next(5000 + tick, status_change_timer, bl->id, data);
+
+			if (boss_md) {
+				if (sd->bl.m != boss_md->bl.m) // Not on same map anymore
 					return 0;
+				else if (boss_md->bl.prev != NULL) { // Boss is alive - Update X, Y on minimap
+					sce->val2 = 0;
+					clif_bossmapinfo(sd, boss_md, BOSS_INFO_ALIVE);
+				} else if (boss_md->spawn_timer != INVALID_TIMER && !sce->val2) { // Boss is dead
+					sce->val2 = 1;
+					clif_bossmapinfo(sd, boss_md, BOSS_INFO_DEAD);
 				}
 			}
+			sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+			return 0;
 		}
 		break;
 
@@ -13660,7 +13675,6 @@ void status_change_clear_buffs(struct block_list* bl, uint8 type)
 			case SC_MTF_MATK:
 			case SC_MTF_MLEATKED:
 			case SC_MTF_CRIDAMAGE:
-			case SC_HEAT_BARREL_AFTER:
 			case SC_QUEST_BUFF1:
 			case SC_QUEST_BUFF2:
 			case SC_QUEST_BUFF3:
@@ -14291,9 +14305,11 @@ static bool status_yaml_readdb_refine_sub(yamlwrapper* wrapper, int refine_info_
 
 			if (refine_level >= random_bonus_start_level - 1)
 				refine_info[refine_info_index].randombonus_max[refine_level] = random_bonus * (refine_level - random_bonus_start_level + 2);
-			refine_info[refine_info_index].bonus[refine_level] = bonus_per_level + (refine_level > 0 ? refine_info[refine_info_index].bonus[refine_level - 1] : 0);
 			yaml_destroy_wrapper(level);
 		}
+		for (int refine_level = 0; refine_level < MAX_REFINE; ++refine_level) {
+			refine_info[refine_info_index].bonus[refine_level] += bonus_per_level + (refine_level > 0 ? refine_info[refine_info_index].bonus[refine_level - 1] : 0);
+		}
 	}
 	yaml_destroy_wrapper(rates);
 	yaml_iterator_destroy(it);

+ 7 - 1
src/map/status.h

@@ -695,7 +695,7 @@ typedef enum sc_type {
 	 * Rebellion [Cydh]
 	 **/
 	SC_HEAT_BARREL,
-	SC_HEAT_BARREL_AFTER,
+	SC_MAGICALBULLET,
 	SC_P_ALTER,
 	SC_E_CHAIN,
 	SC_C_MARKER,
@@ -837,6 +837,10 @@ typedef enum sc_type {
 	SC_DORAM_FLEE2,
 	SC_DORAM_SVSP,
 
+	SC_FALLEN_ANGEL,
+
+	SC_CHEERUP,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
 #endif
@@ -1801,6 +1805,8 @@ enum si_type {
 	SI_PHARAOH_CARD = 989,
 	SI_KIEL_CARD = 990,
 
+	SI_CHEERUP = 992,
+
 	SI_S_MANAPOTION = 995,
 	SI_M_DEFSCROLL = 996,
 

+ 26 - 44
src/map/unit.c

@@ -2189,6 +2189,23 @@ int unit_unattackable(struct block_list *bl)
 	return 0;
 }
 
+/**
+ * Checks if the unit can attack, returns yes if so.
+*/
+bool unit_can_attack(struct block_list *src, int target_id)
+{
+	struct status_change *sc = status_get_sc(src);
+
+	if( sc != NULL ) {
+		if( sc->data[SC__MANHOLE] )
+			return false;
+	}
+
+	if( src->type == BL_PC )
+		return pc_can_attack(BL_CAST(BL_PC, src), target_id);
+	return true;
+}
+
 /**
  * Requests a unit to attack a target
  * @param src: Object initiating attack
@@ -2212,23 +2229,16 @@ int unit_attack(struct block_list *src,int target_id,int continuous)
 		return 1;
 	}
 
-	if( src->type == BL_PC ) {
-		TBL_PC* sd = (TBL_PC*)src;
-
-		if( target->type == BL_NPC ) { // Monster npcs [Valaris]
-			npc_click(sd,(TBL_NPC*)target); // Submitted by leinsirk10 [Celest]
-			return 0;
-		}
-
-		if( pc_is90overweight(sd) || pc_isridingwug(sd) ) { // Overweight or mounted on warg - stop attacking
-			unit_stop_attack(src);
-			return 0;
-		}
+	if( src->type == BL_PC &&
+		target->type == BL_NPC ) {
+		// Monster npcs [Valaris]
+		npc_click((TBL_PC*)src,(TBL_NPC*)target);
+		return 0;
+	}
 
-		if( !pc_can_attack(sd, target_id) ) {
-			unit_stop_attack(src);
-			return 0;
-		}
+	if( !unit_can_attack(src, target_id) ) {
+		unit_stop_attack(src);
+		return 0;
 	}
 
 	if( battle_check_target(src,target,BCT_ENEMY) <= 0 || !status_check_skilluse(src, target, 0, 0) ) {
@@ -2501,9 +2511,6 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t
 	   || (sd && !pc_can_attack(sd, target->id)) )
 		return 0; // Can't attack under these conditions
 
-	if (sd && &sd->sc && sd->sc.count && sd->sc.data[SC_HEAT_BARREL_AFTER])
-		return 0;
-
 	if( src->m != target->m ) {
 		if( src->type == BL_MOB && mob_warpchase((TBL_MOB*)src, target) )
 			return 1; // Follow up.
@@ -2752,31 +2759,6 @@ int unit_counttargeted(struct block_list* bl)
 	return 0;
 }
 
-/**
- * Changes the size of a unit
- * @param bl: Object to change size [PC|MOB]
- * @param size: New size of bl
- * @return 0
- */
-int unit_changeviewsize(struct block_list *bl,short size)
-{
-	nullpo_ret(bl);
-
-	size = (size < 0) ? -1 : (size > 0) ? 1 : 0;
-
-	if(bl->type == BL_PC)
-		((TBL_PC*)bl)->state.size = size;
-	else if(bl->type == BL_MOB)
-		((TBL_MOB*)bl)->special_state.size = size;
-	else
-		return 0;
-
-	if(size != 0)
-		clif_specialeffect(bl,421+size, AREA);
-
-	return 0;
-}
-
 /**
  * Makes 'bl' that attacking 'src' switch to attack 'target'
  * @param bl

+ 1 - 4
src/tool/mapcache.c

@@ -9,15 +9,12 @@
 #include <unistd.h>
 #endif
 
-#include "../common/cbasetypes.h"
+#include "../common/mmo.h"
 #include "../common/grfio.h"
 #include "../common/malloc.h"
-#include "../common/mmo.h"
 #include "../common/showmsg.h"
 #include "../common/utils.h"
 
-#include "../config/renewal.h"
-
 #define NO_WATER 1000000
 
 char grf_list_file[256] = "conf/grf-files.txt";

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