Jelajahi Sumber

Merge branch 'master' into hotfix/issue3589

aleos89 6 tahun lalu
induk
melakukan
5b92ccf2a0
100 mengubah file dengan 5677 tambahan dan 1520 penghapusan
  1. 2 1
      .gitattributes
  2. 4 2
      .gitignore
  3. 1 1
      .mailmap
  4. 2 2
      .travis.yml
  5. 1 0
      AUTHORS
  6. 1 1
      conf/battle/battle.conf
  7. 1 1
      conf/battle/battleground.conf
  8. 13 1
      conf/battle/feature.conf
  9. 7 1
      conf/battle/gm.conf
  10. 1 1
      conf/battle/homunc.conf
  11. 1 1
      conf/battle/items.conf
  12. 2 2
      conf/battle/misc.conf
  13. 1 1
      conf/battle/monster.conf
  14. 5 8
      conf/battle/pet.conf
  15. 1 1
      conf/battle/player.conf
  16. 1 1
      conf/battle/status.conf
  17. 2 2
      conf/char_athena.conf
  18. 1 1
      conf/groups.conf
  19. 5 1
      conf/import-tmpl/inter_server.yml
  20. 12 4
      conf/inter_server.yml
  21. 1 1
      conf/log_athena.conf
  22. 1 1
      conf/login_athena.conf
  23. 1 1
      conf/motd.txt
  24. 6 4
      conf/msg_conf/map_msg.conf
  25. 2 3
      conf/msg_conf/map_msg_chn.conf
  26. 2 3
      conf/msg_conf/map_msg_frn.conf
  27. 2 3
      conf/msg_conf/map_msg_idn.conf
  28. 2 3
      conf/msg_conf/map_msg_por.conf
  29. 2 3
      conf/msg_conf/map_msg_rus.conf
  30. 2 3
      conf/msg_conf/map_msg_spn.conf
  31. 2 3
      conf/msg_conf/map_msg_tha.conf
  32. 1 1
      configure
  33. 90 0
      db/achievement_db.yml
  34. 11 0
      db/attendance.yml
  35. 0 30
      db/guild_skill_tree.txt
  36. 44 0
      db/guild_skill_tree.yml
  37. 3 1
      db/import-tmpl/achievement_db.yml
  38. 1 1
      db/import-tmpl/attendance.yml
  39. 0 13
      db/import-tmpl/guild_skill_tree.txt
  40. 36 0
      db/import-tmpl/guild_skill_tree.yml
  41. 0 60
      db/import-tmpl/pet_db.txt
  42. 486 0
      db/import-tmpl/pet_db.yml
  43. 1 1
      db/mob_item_ratio.txt
  44. 63 0
      db/pet_db.yml
  45. 358 115
      db/pre-re/achievement_db.yml
  46. 1 1
      db/pre-re/attendance.yml
  47. 123 0
      db/pre-re/guild_skill_tree.yml
  48. 10 10
      db/pre-re/item_db.txt
  49. 1 1
      db/pre-re/item_delay.txt
  50. 2 2
      db/pre-re/job_db1.txt
  51. 0 104
      db/pre-re/pet_db.txt
  52. 867 0
      db/pre-re/pet_db.yml
  53. 9 20
      db/pre-re/skill_cast_db.txt
  54. 2 1
      db/pre-re/skill_db.txt
  55. 2 2
      db/pre-re/skill_require_db.txt
  56. 1 1
      db/pre-re/skill_unit_db.txt
  57. 392 149
      db/re/achievement_db.yml
  58. 59 59
      db/re/attendance.yml
  59. 123 0
      db/re/guild_skill_tree.yml
  60. 25 21
      db/re/item_combo_db.txt
  61. 143 56
      db/re/item_db.txt
  62. 2 1
      db/re/item_delay.txt
  63. 264 116
      db/re/item_trade.txt
  64. 2 2
      db/re/job_db1.txt
  65. 40 19
      db/re/mob_db.txt
  66. 0 110
      db/re/pet_db.txt
  67. 1733 0
      db/re/pet_db.yml
  68. 36 36
      db/re/quest_db.txt
  69. 10 20
      db/re/skill_cast_db.txt
  70. 2 1
      db/re/skill_db.txt
  71. 2 2
      db/re/skill_require_db.txt
  72. 1 1
      db/re/skill_unit_db.txt
  73. 1 1
      db/spellbook_db.txt
  74. 3 2
      doc/achievements.txt
  75. 4 4
      doc/atcommands.txt
  76. 1 1
      doc/ea_job_system.txt
  77. 7 4
      doc/item_bonus.txt
  78. 2 2
      doc/item_group.txt
  79. 2 2
      doc/packet_interserv.txt
  80. 246 161
      doc/script_commands.txt
  81. 4 4
      doc/skill_require_db.txt
  82. 10 10
      doc/source_doc.txt
  83. 1 1
      npc/battleground/bg_common.txt
  84. 5 5
      npc/battleground/kvm/kvm_item_pay.txt
  85. 6 13
      npc/cities/prontera.txt
  86. 9 13
      npc/custom/battleground/bg_emp.txt
  87. 2 2
      npc/custom/battleground/unofficial/bg_kvm01.txt
  88. 2 2
      npc/custom/battleground/unofficial/bg_kvm02.txt
  89. 2 2
      npc/custom/battleground/unofficial/bg_kvm03.txt
  90. 1 1
      npc/custom/events/devil_square.txt
  91. 1 1
      npc/custom/events/mvp_ladder.txt
  92. 1 1
      npc/custom/jobmaster.txt
  93. 1 1
      npc/custom/official/GeffenMagicTournament.txt
  94. 24 27
      npc/custom/quests/hunting_missions.txt
  95. 239 185
      npc/custom/quests/questboard.txt
  96. 1 1
      npc/events/halloween_2009.txt
  97. 12 12
      npc/guild2/agit_main_se.txt
  98. 8 2
      npc/instances/NydhoggsNest.txt
  99. 39 39
      npc/jobs/1-1e/ninja.txt
  100. 10 3
      npc/kafras/cool_event_corp.txt

+ 2 - 1
.gitattributes

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

+ 4 - 2
.gitignore

@@ -29,6 +29,7 @@ Thumbs.db
 *.a
 *.vcxproj.user
 /char-server
+/csv2yaml
 /config.log
 /config.status
 /core
@@ -71,7 +72,7 @@ Thumbs.db
 /src/common/Makefile
 /src/common/obj_all
 /src/common/obj_sql
-/src/common/svnversion.h
+/src/common/version.hpp
 
 # /src/custom/
 /src/custom
@@ -83,7 +84,7 @@ Thumbs.db
 # /src/map/
 /src/map/Makefile
 /src/map/obj_sql
-/src/map/pcre.h
+/src/map/pcre.hpp
 
 # /src/tool/
 /src/tool/Makefile
@@ -112,6 +113,7 @@ Thumbs.db
 
 # bat tools
 /charserv.bat
+/csv2yaml.bat
 /logserv.bat
 /mapcache.bat
 /mapserv.bat

+ 1 - 1
.mailmap

@@ -25,6 +25,7 @@ brianluau <brianluau@users.noreply.github.com> <brianluau@54d463be-8e91-2dee-ded
 cydh <cydh@users.noreply.github.com> <cydh@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 Daegaladh <Daegaladh@users.noreply.github.com> <daegaladh@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 Deadly Silence <mail@deadly-silence.de> <deadlysilence@54d463be-8e91-2dee-dedb-b68131a5f0ec>
+Epoque1 <22254628+Epoque1@users.noreply.github.com> <epoque11@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 euphyy <euphy.raliel@rathena.org> <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 flaviojs <flaviojs2005@gmail.com> <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 flaviojs <flaviojs2005@gmail.com> <flaviojs2005@54d463be-8e91-2dee-dedb-b68131a5f0ec>
@@ -133,7 +134,6 @@ skotlex <skotlex@mailforce.net> <Skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # mc_cameri <mc_cameri@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # evera <evera@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # SinSloth <SinSloth@54d463be-8e91-2dee-dedb-b68131a5f0ec>
-# epoque11 <epoque11@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # DracoRPG <DracoRPG@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # littlewolf <littlewolf@54d463be-8e91-2dee-dedb-b68131a5f0ec>
 # eaac <eaac@54d463be-8e91-2dee-dedb-b68131a5f0ec>

+ 2 - 2
.travis.yml

@@ -137,7 +137,7 @@ matrix:
 ##         MacOS default MySQL configuration does not like our card seller(only full group by)
 #        - ./tools/ci/npc.sh
 #        - make clean
-#        - make server
+#        - make all
 #        - ./login-server --run-once
 #        - ./char-server --run-once
 #        - ./map-server --run-once
@@ -181,7 +181,7 @@ script:
   - ./configure $CONFIGURE_FLAGS || travis_terminate 1
   - ./tools/ci/npc.sh
   - make clean || travis_terminate 1
-  - make server || travis_terminate 1
+  - make all || travis_terminate 1
   - ./login-server --run-once
   - ./char-server --run-once
   - ./map-server --run-once

+ 1 - 0
AUTHORS

@@ -227,6 +227,7 @@ Sirius_White
 sk
 SketchyPhoenix
 Skotlex
+SnakeDrak
 spamrat
 SPDFMember
 spira

+ 1 - 1
conf/battle/battle.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Who should have a baseatk value (makes str affect damage)? (Note 3)

+ 1 - 1
conf/battle/battleground.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Melee damage adjustments (non skills) for Battleground maps (Note 2)

+ 13 - 1
conf/battle/feature.conf

@@ -4,7 +4,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Buying store (Note 1)
@@ -71,6 +71,18 @@ feature.achievement: on
 // Requires: 2017-02-08bRagexeRE or later
 feature.equipswitch: on
 
+// Pet evolution (Note 1)
+// Requires: 2014-10-08aRagexe or later
+feature.petevolution: on
+
+// Automatic Pet Feeding (Note 1)
+// Requires: 2014-10-08aRagexe or later
+feature.petautofeed: on
+
+// At which hunger rate should pet autofeeding trigger? (Note 2)
+// Default: 89
+feature.pet_autofeed_rate: 89
+
 // Homunculues Autofeeding (Note 1)
 // Requires: 2017-09-20bRagexeRE or later
 feature.homunculus_autofeed: on

+ 7 - 1
conf/battle/gm.conf

@@ -24,7 +24,7 @@ partial_name_scan: yes
 // Duration of the ban, in minutes (default: 5). To disable the ban, set 0.
 ban_hack_trade: 5
 
-// requires RENEWAL_EXP or RENEWAL_DROP to be enabled (src/config/renewal.h)
+// requires RENEWAL_EXP or RENEWAL_DROP to be enabled (src/config/renewal.hpp)
 // modifies @mobinfo to display the users' real drop rate as per renewal_drop formula
 // modifies @iteminfo to not display the minimum item drop rate (since it can't tell the mob level)
 // modifies @whodrops to display the users' real drop rate as per renewal_drop formula
@@ -34,3 +34,9 @@ atcommand_mobinfo_type: 1
 // This option is for @baselevelup and @joblevelup
 // Default: no
 atcommand_levelup_events: no
+
+// Disable atcommands while a player is attached to a npc? (Note 1)
+// This can be changed by script commands 'enable_command' and 'disable_command'.
+// Anyone with the 'command_enable' permission in the 'conf/group.conf' can bypass this.
+// Default: yes
+atcommand_disable_npc: yes

+ 1 - 1
conf/battle/homunc.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Homunculus setting (Note 3)

+ 1 - 1
conf/battle/items.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // The highest value at which an item can be sold via the merchant vend skill. (in zeny)

+ 2 - 2
conf/battle/misc.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // PK Server Mode.  Turns entire server pvp(excluding towns). Experience loss is doubled if killed by another player.
@@ -99,7 +99,7 @@ duel_only_on_same_map: no
 // Set to 0 for no cell stacking checks and free movement.
 // Custom - This variation will make every full cell to be considered a wall.
 // NOTE: For the custom setting to take effect you have to use a server compiled
-// with Cell Stack Limit support (see src/map/map.h)
+// with Cell Stack Limit support (see src/map/map.hpp)
 official_cell_stack_limit: 1
 custom_cell_stack_limit: 1
 

+ 1 - 1
conf/battle/monster.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // The HP rate of MVPs. (Note 2)

+ 5 - 8
conf/battle/pet.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Rate for catching pets (Note 2)
@@ -21,10 +21,6 @@ pet_friendly_rate: 100
 // The rate at which a pet will become hungry. (Note 2)
 pet_hungry_delay_rate: 100
 
-// If your pet is hungry by how much will the friendlyness decrease by. (Default is 5)
-// Note: The friendlyness is 0-1000 total, at 0 the pet runs away.
-pet_hungry_friendly_decrease: 5
-
 // Does the pet need its equipment before it does its skill? (Note 1)
 pet_equip_required: yes
 
@@ -39,9 +35,6 @@ pet_damage_support: no
 // At max (1000) support rate is 150%.
 pet_support_min_friendly: 900
 
-// Same as above, but this is to use the pet_script field with official pet abilities.
-pet_equip_min_friendly: 900
-
 // Whether or not the pet's will use skills. (Note 1)
 // Note: Offensive pet skills need at least pet_attack_support or 
 // pet_damage_support to work (they trigger while the pet is attacking).
@@ -81,3 +74,7 @@ pet_ignore_infinite_def: yes
 
 // Whether or not the pet will continue to attack when the master is dead. (Note 1)
 pet_master_dead: no
+
+// Send auto-feed notice even if the client setting is OFF (Note 1) 
+// Official: yes
+pet_autofeed_always: yes

+ 1 - 1
conf/battle/player.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Players' maximum HP rate? (Default is 100)

+ 1 - 1
conf/battle/status.conf

@@ -6,7 +6,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Should skill casting be cancelled when inflicted by curse/stun/sleep/etc (includes silence) (Note 3)?

+ 2 - 2
conf/char_athena.conf

@@ -109,7 +109,7 @@ save_log: yes
 
 // Starting point for new characters
 // Format: <map_name>,<x>,<y>{:<map_name>,<x>,<y>...}
-// Max number of start points is MAX_STARTPOINT in char.h (default 5)
+// Max number of start points is MAX_STARTPOINT in char.hpp (default 5)
 // Location is randomly picked on character creation.
 // NOTE: For Doram, this requires client 20151001 or newer.
 start_point: iz_int,18,26:iz_int01,18,26:iz_int02,18,26:iz_int03,18,26:iz_int04,18,26
@@ -117,7 +117,7 @@ start_point_pre: new_1-1,53,111:new_2-1,53,111:new_3-1,53,111:new_4-1,53,111:new
 start_point_doram: lasa_fild01,48,297
 
 // Starting items for new characters
-// Max number of items is MAX_STARTITEM in char.c (default 32)
+// Max number of items is MAX_STARTITEM in char.cpp (default 32)
 // Format: <id>,<amount>,<position>{:<id>,<amount>,<position>...}
 // To auto-equip an item, include the position where it will be equipped; otherwise, use zero.
 // NOTE: For Doram, this requires client 20151001 or newer.

+ 1 - 1
conf/groups.conf

@@ -93,7 +93,6 @@ groups: (
 		trade or party */
 		can_trade: true
 		can_party: true
-		command_enable: true
 		attendance: true
 	}
 },
@@ -284,6 +283,7 @@ groups: (
 	permissions: {
 		can_trade: true
 		can_party: true
+		command_enable: true
 		all_skill: false
 		all_equipment: false
 		skill_unconditional: false

+ 5 - 1
conf/import-tmpl/inter_server.yml

@@ -10,7 +10,11 @@
 #	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
 #	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
 ###############################################################################################################################################
-#Storages:
+Header:
+  Type: INTER_SERVER_DB
+  Version: 1
+
+#Body:
 #   - ID: 1
 #     Name: "VIP Storage"
 #     Table: "vip_storage"

+ 12 - 4
conf/inter_server.yml

@@ -28,7 +28,15 @@
 #	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
 #	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
 
-Storages:
-    - ID: 0
-      Name: "Storage"
-      Table: "storage"
+Header:
+  Type: INTER_SERVER_DB
+  Version: 1
+
+Body:
+  - ID: 0
+    Name: "Storage"
+    Table: "storage"
+
+Footer:
+  Imports:
+    - Path: conf/import/inter_server.yml

+ 1 - 1
conf/log_athena.conf

@@ -4,7 +4,7 @@
 // Note 1: Value is a config switch (on/off, yes/no or 1/0)
 // Note 2: Value is in percents (100 means 100%)
 // Note 3: Value is a bit field. If no description is given,
-//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
+//         assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary, 128: NPC, 512: Elemental)
 //--------------------------------------------------------------
 
 // Enable Logs? (Note 3)

+ 1 - 1
conf/login_athena.conf

@@ -89,7 +89,7 @@ min_group_id_to_connect: -1
 vip_group: 5
 
 // How many characters are allowed per account?
-// You cannot exceed the limit of MAX_CHARS slots, defined in mmo.h, or chars_per_account
+// You cannot exceed the limit of MAX_CHARS slots, defined in mmo.hpp, or chars_per_account
 // will default to MAX_CHARS.
 // 0 will default to the value of MIN_CHARS. (default)
 chars_per_account: 0

+ 1 - 1
conf/motd.txt

@@ -1,2 +1,2 @@
-// Internal default is limited to 128 lines.  If you need more, you will need to modify the MOTD_LINE_SIZE definition in pc.c
+// Internal default is limited to 128 lines.  If you need more, you will need to modify the MOTD_LINE_SIZE definition in pc.cpp
 Welcome to rAthena! Enjoy! Please report any bugs you find.

+ 6 - 4
conf/msg_conf/map_msg.conf

@@ -458,8 +458,7 @@
 // Homunculus messages
 450: You already have a homunculus
 
-// Return pet to egg message
-451: You can't return your pet because your inventory is full.
+//451 free
 
 // Message System
 460: Please enter a valid language (usage: @langtype <language>).
@@ -857,7 +856,10 @@
 
 793: Usage @camerainfo range rotation latitude
 
-//794-899 free
+// pcblock command
+794: This action is currently blocked.
+
+//795-899 free
 
 //------------------------------------
 // More atcommands message
@@ -1556,7 +1558,7 @@
 1391: You do not possess a cart to be removed
 1392: Cart Added.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: You can't use commands while dead.
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_chn.conf

@@ -441,8 +441,7 @@
 // Homunculus messages
 450: 你已經擁有一個人工生命體了
 
-// Return pet to egg message
-451: 你無法收回寵物,因為你身上沒有空間了
+//451 free
 
 // Message System
 460: 請輸入合法的語言 (usage: @langtype <language>).
@@ -1373,7 +1372,7 @@
 1391: You do not possess a cart to be removed
 1392: Cart Added.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: 角色死亡時不能使用指令。
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_frn.conf

@@ -449,8 +449,7 @@
 // Homunculus messages
 450: Vous possédez déjà un homunculus
 
-// Return pet to egg message
-451: Vous ne pouvez pas remettre votre pet dans son oeuf car votre inventaire est plein.
+//451 free
 
 // Message System
 460: Entrez une langue (usage: @langtype <langue>).
@@ -1386,7 +1385,7 @@
 1391: Vous ne possédez pas de chariot.
 1392: Chariot ajouté.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: Les morts ne pouvent pas utiliser de commande.
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_idn.conf

@@ -459,8 +459,7 @@
 // Pesan-pesan untuk Homunculus
 450: Kamu sudah memiliki homunculus
 
-// Pesan tentang mengembalikan peliharaan ke telur
-451: Kamu tidak dapat mengembalikan peliharaan kamu karena inventory penuh.
+//451 free
 
 // Sistem Pesan
 460: Harap masukkan tipe bahasa yang valid. (Penggunaan: @langtype <bahasa>).
@@ -1477,7 +1476,7 @@
 1391: Kamu tidak memiliki keranjang yang akan dihapus.
 1392: Gerobak ditambahkan.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: Kamu tidak bisa menggunakan perintah ini ketika mati.
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_por.conf

@@ -468,8 +468,7 @@
 // Mensagens de homunculus
 450: Você já possui um homunculus
 
-// Mensagem de retorno do pet ao ovo
-451: Você não pode retornar o seu bichinho de estimação para o ovo pois o seu inventário está lotado.
+//451 free
 
 // Sistema de Mensagens
 460: Digite um idioma válido (uso: @langtype <idioma>).
@@ -1556,7 +1555,7 @@
 1391: Você não possui um carrinho para remover
 1392: Carrinho Adicionado.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: Você não pode utilizar comandos caso esteja morto.
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_rus.conf

@@ -449,8 +449,7 @@
 // Сообщения команды @makehomun
 450: У вас уже есть гомункулус
 
-// Возвращение питомца в яйцо
-451: Вы не можете вернуть питомца в яйцо, потому что ваш инвентарь забит.
+//451 free
 
 // @langtype
 460: Введите существующий язык (Используйте: @langtype <язык>).
@@ -1386,7 +1385,7 @@
 1391: У вас нет телеги.
 1392: Телега добавлена.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: Вы не можете использовать команды когда мертвы.
  
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_spn.conf

@@ -458,8 +458,7 @@
 // Mensajes de homúnculos
 450: Ya tienes un homúnculo.
 
-// Mensaje al devolver la mascota al huevo
-451: No puedes devolver tu mascota al huevo porque tu inventario está lleno.
+//451 free
 
 // Sistema de mensajería
 460: Introduce un idioma válido (instrucciones: @langtype <idioma>)
@@ -1527,7 +1526,7 @@
 1391: No tienes ningún carro.
 1392: Ahora tienes un carro.
 
-// atccomand.c::is_atcommand
+// atccomand.cpp::is_atcommand
 1393: No puedes utilizar ningún comando porque estás muerto.
 
 // @clearstorage

+ 2 - 3
conf/msg_conf/map_msg_tha.conf

@@ -447,8 +447,7 @@
 // Homunculus messages
 450: へ沉� Homunculus 吐勹崤榍.
 
-// Return pet to egg message
-451: へ充凌室烈枚唷绾恃登爨耪槁т撮嗑靡歇柰о$孩艇愎笛桥肖绵电�.
+//451 free
 
 // Message System
 460: 饣么嗯淄±疑曳砧甸艇∫� (窃刚悛�: @langtype <酪梢>).
@@ -1379,7 +1378,7 @@
 1391: へ充凌琳枚啖绻氛瑷信和汀.
 1392: 翟吹验�多㈢灌谜潞瞄吐.
 
-// atcommand.c::is_atcommand
+// atcommand.cpp::is_atcommand
 1393: へ充凌室烈枚悛椁邮谚т撮愎⒊械衣吐罔.
 
 // @clearstorage

+ 1 - 1
configure

@@ -1339,7 +1339,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-manager=ARG    memory managers: no, builtin, memwatch, dmalloc,
                           gcollect, bcheck (defaults to builtin)
-  --enable-packetver=ARG  Sets the PACKETVER define. (see src/common/mmo.h)
+  --enable-packetver=ARG  Sets the PACKETVER define. (see src/common/mmo.hpp)
   --enable-epoll          use epoll(4) on Linux
   --enable-debug[=ARG]    Compiles extra debug code. (disabled by default)
                           (available options: yes, no, gdb)

+ 90 - 0
db/achievement_db.yml

@@ -0,0 +1,90 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Achievement Database
+###########################################################################
+#
+# Achievement Settings
+#
+###########################################################################
+# ID - Unique achievement ID.
+###########################################################################
+# Group - Achievement group type. Each achievement type calls a specific
+# objective check.
+# Valid groups:
+#  AG_ADD_FRIEND
+#  AG_ADVENTURE
+#  AG_BABY
+#  AG_BATTLE
+#  AG_CHATTING
+#  AG_CHATTING_COUNT
+#  AG_CHATTING_CREATE
+#  AG_CHATTING_DYING
+#  AG_EAT
+#  AG_GET_ITEM
+#  AG_GET_ZENY
+#  AG_GOAL_ACHIEVE
+#  AG_GOAL_LEVEL
+#  AG_GOAL_STATUS
+#  AG_HEAR
+#  AG_JOB_CHANGE
+#  AG_MARRY
+#  AG_PARTY
+#  AG_ENCHANT_FAIL
+#  AG_ENCHANT_SUCCESS
+#  AG_SEE
+#  AG_SPEND_ZENY
+#  AG_TAMING
+###########################################################################
+# Name - Achievement name. Used when sending rewards through RODEX.
+###########################################################################
+# Target - A list of monster ID and count values that the achievement
+# requires. The target count can also be used for achievements that keep
+# a counter while not being related to monster kills.
+# Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+###########################################################################
+# Condition - A conditional statement that must be met for the achievement
+# to be considered complete.
+###########################################################################
+# Map - A map name that is used for the AG_CHATTING type which increments
+# the counter based on the player's map.
+###########################################################################
+# Dependent: - A list of achievement IDs that need to be completed before
+# this achievement is considered complete.
+###########################################################################
+# Reward - A list of rewards that are given on completion. All fields are
+# optional.
+#   ItemID: Item ID
+#   Amount:  Amount of Item ID (default 1)
+#   Script: Bonus Script
+#   TitleID: Title ID
+###########################################################################
+# Score - Achievement points that are given on completion.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/achievement_db.yml
+    Mode: Prerenewal
+  - Path: db/re/achievement_db.yml
+    Mode: Renewal
+  - Path: db/import/achievement_db.yml

+ 11 - 0
db/attendance.yml

@@ -0,0 +1,11 @@
+Header:
+  Type: ATTENDANCE_DB
+  Version: 1
+  
+Footer:
+  Imports:
+  - Path: db/pre-re/attendance.yml
+    Mode: Prerenewal
+  - Path: db/re/attendance.yml
+    Mode: Renewal
+  - Path: db/import/attendance.yml

+ 0 - 30
db/guild_skill_tree.txt

@@ -1,30 +0,0 @@
-// Guild Skill Tree Database
-//
-// Structure of Database:
-// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5	//GUILD SKILLNAME#Skill Name#
-//
-// 01. SkillID                  Skill ID of the guild skill.
-// 02. MaxLv                    Maximum level of the guild skill.
-// 03. Prerequisite SkillID     Guild skill required for the skill to become available.
-// 04. Prerequisite SkillLv     Level of the required guild skill.
-// ...
-//
-// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
-
-
-10000,1,0,0,0,0,0,0,0,0,0,0	//GD_APPROVAL#Official Guild Approval#
-10001,1,10000,1,0,0,0,0,0,0,0,0	//GD_KAFRACONTRACT#Contract with Kafra#
-10002,1,10000,1,0,0,0,0,0,0,0,0	//GD_GUARDRESEARCH#Guardian Research#
-10003,3,0,0,0,0,0,0,0,0,0,0	//GD_GUARDUP#Strengthen Guardians#
-10004,10,0,0,0,0,0,0,0,0,0,0	//GD_EXTENSION#Guild Extension#
-10005,0,0,0,0,0,0,0,0,0,0,0	//GD_GLORYGUILD#Guilds Glory#
-10006,5,0,0,0,0,0,0,0,0,0,0	//GD_LEADERSHIP#Great Leadership#
-10007,5,0,0,0,0,0,0,0,0,0,0	//GD_GLORYWOUNDS#Glorious Wounds#
-10008,5,10007,1,0,0,0,0,0,0,0,0	//GD_SOULCOLD#Cold Heart#
-10009,5,10006,1,0,0,0,0,0,0,0,0	//GD_HAWKEYES#Sharp Gaze#
-10010,1,10000,1,10004,2,0,0,0,0,0,0	//GD_BATTLEORDER#Battle Command#
-10011,3,10000,1,10004,5,10010,1,0,0,0,0	//GD_REGENERATION#Regeneration#
-10012,1,10011,1,0,0,0,0,0,0,0,0	//GD_RESTORE#Restoration#
-10013,1,10000,1,10002,1,10004,5,10010,1,10011,1	//GD_EMERGENCYCALL#Urgent Call#
-10014,1,0,0,0,0,0,0,0,0,0,0	//GD_DEVELOPMENT#Permanent Development#
-10016,5,0,0,0,0,0,0,0,0,0,0	//GD_GUILD_STORAGE#Guild Storage Expansion#

+ 44 - 0
db/guild_skill_tree.yml

@@ -0,0 +1,44 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/guild_skill_tree.yml
+    Mode: Prerenewal
+  - Path: db/re/guild_skill_tree.yml
+    Mode: Renewal
+  - Path: db/import/guild_skill_tree.yml

+ 3 - 1
db/import-tmpl/achievement_db.yml

@@ -77,4 +77,6 @@
 # Score - Achievement points that are given on completion.
 ###########################################################################
 
-Achievements:
+Header:
+  Type: ACHIEVEMENT_DB
+  Version: 1

+ 1 - 1
db/import-tmpl/attendance.yml

@@ -1,3 +1,3 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1

+ 0 - 13
db/import-tmpl/guild_skill_tree.txt

@@ -1,13 +0,0 @@
-// Guild Skill Tree Database
-//
-// Structure of Database:
-// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5	//GUILD SKILLNAME#Skill Name#
-//
-// 01. SkillID                  Skill ID of the guild skill.
-// 02. MaxLv                    Maximum level of the guild skill.
-// 03. Prerequisite SkillID     Guild skill required for the skill to become available.
-// 04. Prerequisite SkillLv     Level of the required guild skill.
-// ...
-//
-// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
-

+ 36 - 0
db/import-tmpl/guild_skill_tree.yml

@@ -0,0 +1,36 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Custom Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1

+ 0 - 60
db/import-tmpl/pet_db.txt

@@ -1,60 +0,0 @@
-// Pet Additional Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts:
-
-//petskillattack skillid, skilllv, rate, bonusrate
-//Skill attack that triggers while the pet is attacking. Rate is the base
-//chance of execution per attack. Bonusrate is an additional success rate when
-//intimacy reaches max.
-
-//petskillattack2 skillid, damage, hits, rate, bonusrate
-//Same as petskillattack, but the damage and number of hits is fixed
-//the damage specified is total, not per hit.
-
-//petskillsupport skillid, skilllv, delay, hp%, sp%
-//Casts a support skill when the health levels are below the specified hp% and
-//sp%. Delay is the minimum time in seconds before the skill can be cast again
-
-//petheal amount, delay, hp%, sp%
-//Similar to petskillsupport, but the skill is fixed to heal (28) and the
-//heal-amount is fixed to the value given.
-
-//petrecovery type, delay: Cures the "type" status effect after "delay" seconds
-
-//petskillbonus type, value, duration, delay
-//Gives bonus stats. Type is the stat to increase (bStr, bLuk), value is the
-//amount by which it is increased, duration signals how long the bonus lasts
-//delay is the time elapsed after the bonus ends and before it starts again.
-
-//A single pet can have petloot, petskillbonus, petskillattack (or
-//petskillattack2) and petskillsupport (or petheal) at the same time,
-//but only one of each.
-

+ 486 - 0
db/import-tmpl/pet_db.yml

@@ -0,0 +1,486 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Custom Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+#Body:
+#  - Mob: PORING
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petloot 10;
+#  - Mob: DROPS
+#    AttackRate: 300
+#    RetaliateRate: 400
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petloot 10;
+#  - Mob: POPORING
+#    AttackRate: 300
+#    RetaliateRate: 500
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petloot 15;
+#  - Mob: LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 1000
+#    SupportScript: >
+#      petskillbonus bLuk,3,10,50;
+#  - Mob: PICKY
+#    AttackRate: 500
+#    RetaliateRate: 600
+#    ChangeTargetRate: 50
+#    SupportScript: >
+#      petskillbonus bStr,3,10,50;
+#  - Mob: CHONCHON
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 250
+#    SupportScript: >
+#      petskillbonus bAgi,4,10,50;
+#  - Mob: STEEL_CHONCHON
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillbonus bAgiVit,4,20,40;
+#  - Mob: HUNTER_FLY
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillattack2 "NPC_WINDATTACK",888,2,0,10;
+#  - Mob: SAVAGE_BABE
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillbonus bVit,4,10,50;
+#  - Mob: DESERT_WOLF_B
+#    AttackRate: 400
+#    RetaliateRate: 400
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack "SM_PROVOKE",1,0,5;
+#  - Mob: ROCKER
+#    AttackRate: 350
+#    RetaliateRate: 350
+#    ChangeTargetRate: 600
+#    SupportScript: >
+#      petskillbonus bAllStats,1,10,50;
+#  - Mob: SPORE
+#    AttackRate: 350
+#    RetaliateRate: 500
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petrecovery SC_POISON,60;
+#  - Mob: POISON_SPORE
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack "NPC_POISON",20,0,10;
+#  - Mob: PECOPECO
+#    AttackRate: 400
+#    RetaliateRate: 500
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillbonus bSpeedRate,25,20,20;
+#  - Mob: SMOKIE
+#    AttackRate: 600
+#    RetaliateRate: 600
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillbonus bPerfectHide,1,3600,0;
+#  - Mob: YOYO
+#    AttackRate: 300
+#    RetaliateRate: 800
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petloot 20;
+#  - Mob: ORK_WARRIOR
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 300
+#    SupportScript: >
+#      petskillattack2 "NPC_PIERCINGATT",100,1,0,10;
+#  - Mob: MUNAK
+#    AttackRate: 300
+#    RetaliateRate: 750
+#    ChangeTargetRate: 300
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10;
+#  - Mob: DOKEBI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "BS_HAMMERFALL",1,0,10;
+#  - Mob: SOHEE
+#    AttackRate: 100
+#    RetaliateRate: 1000
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "AL_HEAL",5,60,33,100;
+#  - Mob: ISIS
+#    AttackRate: 650
+#    RetaliateRate: 450
+#    ChangeTargetRate: 150
+#    SupportScript: >
+#      petskillsupport "PR_MAGNIFICAT",2,60,50,50;
+#  - Mob: PETIT
+#    AttackRate: 800
+#    RetaliateRate: 400
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10;
+#  - Mob: DEVIRUCHI
+#    AttackRate: 800
+#    RetaliateRate: 200
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillbonus bAgiDexStr,6,20,40;
+#  - Mob: BAPHOMET_
+#    AttackRate: 1000
+#    RetaliateRate: 100
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5;
+#  - Mob: BON_GUN
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1;
+#  - Mob: ZHERLTHSH
+#    AttackRate: 1000
+#    RetaliateRate: 100
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petskillattack "AS_SONICBLOW",1,0,3;
+#  - Mob: ALICE
+#    AttackRate: 100
+#    RetaliateRate: 1000
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "AL_HEAL",5,60,25,100;
+#  - Mob: EVENT_RICECAKE
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "CR_DEFENDER",3,240,50,100;
+#  - Mob: GOBLINE_XMAS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "MG_SIGHT",5,5,5;
+#  - Mob: CHUNG_E
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "CR_SHIELDCHARGE",5,5,5;
+#  - Mob: ECLIPSE_P
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "TF_THROWSTONE",1,5,5;
+#  - Mob: GOBLIN_1
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_WINDATTACK",5,5,5;
+#  - Mob: GOBLIN_2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_FIREATTACK",5,5,5;
+#  - Mob: GOBLIN_4
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_GROUNDATTACK",5,5,5;
+#  - Mob: DELETER_
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "SM_MAGNUM",5,5,5;
+#  - Mob: DIABOLIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "WZ_METEOR",2,5,5;
+#  - Mob: WANDER_MAN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_UNDEADATTACK",5,5,5;
+#  - Mob: P_CHUNG_E
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "CR_SHIELDCHARGE",5,5,5;
+#  - Mob: GOLEM
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MARIONETTE
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MEDUSA
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: WHISPER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GOBLIN_LEADER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SUCCUBUS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      bonus2 bHPDrainRate,10,5;
+#  - Mob: INCUBUS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      bonus bMaxSPRate,3;
+#      bonus2 bSPDrainRate,10,1;
+#  - Mob: NIGHTMARE_TERROR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SHINOBI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MIYABI_NINGYO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: WICKED_NYMPH
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: STONE_SHOOTER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DULLAHAN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LOLI_RURI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CIVIL_SERVANT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LEAF_CAT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: BACSOJIN_
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: IMP
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: E_CRAMP
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#  - Mob: E_HYDRA
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#  - Mob: J_TAINI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: XMAS_LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: TIKBALANG
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MARIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LITTLE_PORING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: NINE_TAIL
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GREMLIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MUMMY
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: TEDDY_BEAR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MASTERING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: METALLER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: ANGELING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MOONLIGHT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SAVAGE
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HIGH_ORC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CHOCO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: ANCIENT_MUMMY
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: AM_MUT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CAT_O_NINE_TAIL
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GRAND_PECO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HYEGUN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HODREMLIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: XM_TEDDY_BEAR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DR_EGGRING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DR_LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LITTLE_ISIS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DIABOLIC2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DELETER_2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SWEETS_DROPS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800

+ 1 - 1
db/mob_item_ratio.txt

@@ -18,7 +18,7 @@
 //
 // Notes:
 // - By default you can list up to 10 MonsterIDs per ItemID.
-//   It can be changed in src/map/mob.c by adjusting MAX_ITEMRATIO_MOBS.
+//   It can be changed in src/map/mob.cpp by adjusting MAX_ITEMRATIO_MOBS.
 // - Only ItemIDs up to MAX_ITEMDB are supported (default: 32768).
 // - Does not override item_drop_*_min/max settings.
 // - Does not affect card/item-granted drops. To adjust card/item-granted

+ 63 - 0
db/pet_db.yml

@@ -0,0 +1,63 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/pet_db.yml
+    Mode: Prerenewal
+  - Path: db/re/pet_db.yml
+    Mode: Renewal
+  - Path: db/import/pet_db.yml

File diff ditekan karena terlalu besar
+ 358 - 115
db/pre-re/achievement_db.yml


+ 1 - 1
db/pre-re/attendance.yml

@@ -1,3 +1,3 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1

+ 123 - 0
db/pre-re/guild_skill_tree.yml

@@ -0,0 +1,123 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pre-Renewal Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Body:
+  - Id: GD_APPROVAL
+    MaxLevel: 1
+
+  - Id: GD_KAFRACONTRACT
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDRESEARCH
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDUP
+    MaxLevel: 3
+
+  - Id: GD_EXTENSION
+    MaxLevel: 10
+
+  - Id: GD_GLORYGUILD
+    MaxLevel: 0
+
+  - Id: GD_LEADERSHIP
+    MaxLevel: 5
+
+  - Id: GD_GLORYWOUNDS
+    MaxLevel: 5
+
+  - Id: GD_SOULCOLD
+    MaxLevel: 5
+    Required:
+    - Id: GD_GLORYWOUNDS
+      Level: 1
+
+  - Id: GD_HAWKEYES
+    MaxLevel: 5
+    Required:
+    - Id: GD_LEADERSHIP
+      Level: 1
+
+  - Id: GD_BATTLEORDER
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 2
+
+  - Id: GD_REGENERATION
+    MaxLevel: 3
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+
+  - Id: GD_RESTORE
+    MaxLevel: 1
+    Required:
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_EMERGENCYCALL
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_GUARDRESEARCH
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_DEVELOPMENT
+    MaxLevel: 1
+
+#  - Id: GD_GUILD_STORAGE
+#    MaxLevel: 5

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

@@ -87,7 +87,7 @@
 582,Orange,Orange,0,300,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(10,20),rand(10,20); },{},{}
 583,KETUPAT_,Ketupat Sayur,0,7000,,150,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(325,405),rand(40,60); sc_end SC_Poison; sc_end SC_Silence; sc_end SC_Blind; sc_end SC_Confusion; sc_end SC_Curse; sc_end SC_Hallucination; },{},{}
 584,Fish_Ball_Soup,Fish Cake Soup,0,100,,60,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(40,70),0; },{},{}
-585,Wurst,Brusti,0,2,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(15,20),0; },{},{}
+585,Wurst,Brusti,11,2,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3; },{},{}
 586,Mother's_Cake,Mother's Cake,0,20,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(325,405),0; },{},{}
 587,Prickly_Fruit_,Red Prickly Fruit,0,880,,60,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(270,330),rand(20,30); },{},{}
 588,Spaghetti,Spaghetti,0,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(40,70),0; },{},{}
@@ -1109,7 +1109,7 @@
 2138,Bradium_Shield,Bradium Shield,4,20,,1800,,5,,1,0x00CFFF80,2,2,32,,65,1,3,{ bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",60; bonus bAgi,-1; bonus bMaxHP,500; },{},{}
 2139,Flame_Thrower,Flame Thrower,4,20000,,2000,,60,,0,0x00000400,63,2,32,,99,0,1,{},{},{}
 // GM Shield
-2199,Ahura_Mazda,Ahura Mazdah,4,1,,10,,100,,0,0xFFFFFFFF,7,2,32,,1,1,0,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; bonus2 bSubRace,RC_Player,95; skill "CR_FULLPROTECTION",5; Skill "WZ_ESTIMATION",1; Skill "ST_FULLSTRIP",5; Skill "HW_MAGICPOWER",10; bonus bMaxHPRate,200; bonus bNoGemStone; bonus bSpeedRate,25; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+2199,Ahura_Mazda,Ahura Mazdah,4,1,,10,,100,,0,0xFFFFFFFF,7,2,32,,1,1,0,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; bonus2 bSubRace,RC_Player,95; skill "CR_FULLPROTECTION",5; Skill "WZ_ESTIMATION",1; Skill "ST_FULLSTRIP",5; Skill "HW_MAGICPOWER",10; bonus bMaxHPRate,200; bonus bNoGemStone; bonus bSpeedRate,25; bonus bNoWalkDelay; },{},{}
 // Headgears
 //===================================================================
 2201,Sunglasses,Sunglasses,4,5000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,12,{ bonus2 bResEff,Eff_Blind,500; },{},{}
@@ -1761,7 +1761,7 @@
 4120,Petit__Card,Sky Petite Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Dragon,30; },{},{}
 4121,Phreeoni_Card,Phreeoni Card,6,20,,10,,,,,,,,2,,,,,{ bonus bHit,100; },{},{}
 4122,Deviruchi_Card,Deviruchi Card,6,20,,10,,,,,,,,769,,,,,{ bonus bStr,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
-4123,Eddga_Card,Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,-25; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+4123,Eddga_Card,Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,-25; bonus bNoWalkDelay; },{},{}
 4124,Medusa_Card,Medusa Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Demon,15; bonus2 bResEff,Eff_Stone,10000; },{},{}
 4125,Deviace_Card,Deviace Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bAddRace,RC_Brute,7; bonus2 bAddRace,RC_Plant,7; bonus2 bAddRace,RC_Insect,7; },{},{}
 4126,Minorous_Card,Minorous Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddSize,Size_Large,15; bonus bBaseAtk,5; },{},{}
@@ -4964,7 +4964,7 @@
 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; },{},{}
 12398,PCBang_Gift_Box,PCBang Gift Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,7,2,,,,,,{ Zeny += 1000000; },{},{}
 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; },{},{}
@@ -5462,12 +5462,12 @@
 13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_end SC_BLEEDING; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_POISON; sc_end SC_ORCISH; sc_end SC_CHANGEUNDEAD; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_DPOISON; itemheal 500,0; },{},{}
 13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_MUSTLE_M,500000,5; },{},{}
 13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{}
-13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{}
-13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{}
-13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{}
-13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{}
-13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)); percentheal 0,4; },{},{}
-13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{}
+13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
 13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; itemheal 1000,0; },{},{}
 13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start2 SC_VITATA_500,500000,20,5; itemheal 0,200; },{},{}
 13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{}

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

@@ -16,7 +16,7 @@
 //        12659 cannot be used when this delay is active.
 //     Since this is optional, default is -1 will ignores the
 //     delay group and the delay will be stored in character's
-//     data that has limit set in src/map/itemdb.h as MAX_ITEMDELAYS.
+//     data that has limit set in src/map/itemdb.hpp as MAX_ITEMDELAYS.
 
 // SC_REUSE_LIMIT_A
 14538,300000,SC_REUSE_LIMIT_A	//Glass_Of_Illusion

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

@@ -282,9 +282,9 @@
 // Rebellion
 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
+4218,	20000,0    ,500  ,100  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,800  ,2000 ,2000 ,2000 ,600  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Baby Summoner - Placeholder
-4220,	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
+4220,	20000,0    ,500  ,100  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,800  ,2000 ,2000 ,2000 ,600  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Baby Ninja - Placeholder
 4222,	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
 // Baby Kagerou - Placeholder

+ 0 - 104
db/pre-re/pet_db.txt

@@ -1,104 +0,0 @@
-// Pet Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts.
-//Please see "The Pet AI commands" in 'doc/script_commands.txt'.
-
-1002,PORING,Poring,619,9001,10013,531,80,60,50,100,250,20,2000,150,1,0,350,400,800,{ petloot 10; },{ bonus bLuk,2; bonus bCritical,1; }
-1113,DROPS,Drops,620,9002,10013,508,80,60,40,100,250,20,1500,150,1,0,300,400,500,{ petloot 10; },{ bonus bHit,3; bonus bAtk,3; }
-1031,POPORING,Poporing,621,9003,10013,511,80,60,30,100,250,20,1000,150,1,0,300,500,400,{ petloot 15; },{ bonus bLuk,2; bonus2 bSubEle,Ele_Poison,10; }
-1063,LUNATIC,Lunatic,622,9004,10007,534,80,60,40,100,250,20,1500,150,0,0,300,300,1000,{ petskillbonus bLuk,3,10,50; },{ bonus bCritical,2; bonus bAtk,2; }
-1049,PICKY,Picky,623,9005,10012,507,80,60,40,100,250,20,2000,150,1,0,500,600,50,{ petskillbonus bStr,3,10,50;},{ bonus bStr,1; bonus bAtk,5; }
-1011,CHONCHON,ChonChon,624,9006,10002,537,80,60,30,100,250,20,1500,150,1,0,500,500,250,{ petskillbonus bAgi,4,10,50; },{ bonus bAgi,1; bonus bFlee,2; }
-1042,STEEL_CHONCHON,Steel ChonChon,625,9007,10002,1002,80,60,20,100,250,20,1000,150,1,0,500,500,200,{ petskillbonus bAgiVit,4,20,40; },{ bonus bFlee,6; bonus bAgi,-1; }
-1035,HUNTER_FLY,Hunter Fly,626,9008,10002,716,80,60,10,100,250,20,500,150,1,0,500,500,200,{ petskillattack2 "NPC_WINDATTACK",888,2,0,10; },{ bonus bFlee,-5; bonus bFlee2,2; }
-1167,SAVAGE_BABE,Savage Babe,627,9009,10015,537,80,60,40,100,250,20,1500,150,0,0,500,500,200,{ petskillbonus bVit,4,10,50; },{ bonus bVit,1; bonus bMaxHP,50; }
-1107,DESERT_WOLF_B,Baby Desert Wolf,628,9010,10003,537,80,60,40,100,250,20,1000,150,0,0,400,400,400,{ petskillattack "SM_PROVOKE",1,0,5;},{ bonus bInt,1; bonus bMaxSP,50; }
-1052,ROCKER,Rocker,629,9011,10014,537,80,60,30,100,250,20,1500,150,0,0,350,350,600,{ petskillbonus bAllStats,1,10,50; },{ bonus bHPrecovRate,5; bonus bMaxHP,25; }
-1014,SPORE,Spore,630,9012,10017,537,80,60,30,100,250,20,1500,150,0,0,350,500,500,{ petrecovery SC_POISON,60; },{ bonus bHit,5; bonus bAtk,-2; }
-1077,POISON_SPORE,Poison Spore,631,9013,10017,537,80,60,20,100,250,20,1000,150,0,0,600,200,400,{ petskillattack "NPC_POISON",20,0,10; },{ bonus bStr,1; bonus bInt,1; }
-1019,PECOPECO,PecoPeco,632,9014,10010,537,80,60,30,100,250,20,1000,150,1,0,400,500,800,{ petskillbonus bSpeedRate,25,20,20; },{ bonus bMaxHP,150; bonus bMaxSP,-10; }
-1056,SMOKIE,Smokie,633,9015,10019,537,80,60,30,100,250,20,1000,150,1,0,600,600,100,{ petskillbonus bPerfectHide,1,3600,0; },{ bonus bAgi,1; bonus bFlee2,1; }
-1057,YOYO,Yoyo,634,9016,10018,532,80,60,20,100,250,20,1000,150,1,0,300,800,400,{ petloot 20; },{ bonus bCritical,3; bonus bLuk,-1; }
-1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; }
-1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; }
-1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus bAtkRate,-1; }
-1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; }
-1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus bAtkRate,1; }
-1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; }
-1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus bAtkRate,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; }
-1101,BAPHOMET_,Baphomet Jr.,642,9024,10001,518,80,60,10,100,250,20,200,150,0,0,1000,100,200,{ petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5; },{ bonus bDef,1; bonus bMdef,1; bonus2 bResEff,Eff_Stun,-100; }
-1188,BON_GUN,Bon Gun,659,9025,10020,537,80,60,30,100,250,20,500,150,1,0,600,200,400,{ petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1; },{ bonus bVit,1; bonus2 bResEff,Eff_Stun,100; }
-1200,ZHERLTHSH,Zealotus,660,9026,0,929,80,60,10,100,250,20,300,150,0,0,1000,100,500,{ petskillattack "AS_SONICBLOW",1,0,3; },{ bonus2 bAddRace,RC_Demihuman,2; bonus2 bMagicAddRace,RC_DemiHuman,2; }
-1275,ALICE,Alice,661,9027,0,504,80,60,20,100,250,20,800,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,25,100; },{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; }
-1815,EVENT_RICECAKE,Rice Cake,0,9028,0,511,80,60,50,100,250,20,2000,150,1,0,500,500,200,{ petskillsupport "CR_DEFENDER",3,240,50,100; },{ bonus2 bSubEle,Ele_Neutral,1; bonus bMaxHPrate,-1; }
-1245,GOBLINE_XMAS,Christmas Goblin,12225,9029,0,911,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "MG_SIGHT",5,5,5; },{ bonus bMaxHP,30; bonus2 bSubEle,Ele_Water,1; }
-
-1519,CHUNG_E,Green Maiden,12395,9030,0,6115,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{ bonus bDef,1; bonus2 bSubRace,RC_DemiHuman,1; }
-1879,ECLIPSE_P,Spring Rabbit,0,9031,0,7766,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "TF_THROWSTONE",1,5,5; },{}
-1122,GOBLIN_1,Goblin,14569,9032,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_WINDATTACK",5,5,5; },{}
-1123,GOBLIN_2,Goblin,14570,9033,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_FIREATTACK",5,5,5; },{}
-1125,GOBLIN_4,Goblin,14571,9034,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_GROUNDATTACK",5,5,5; },{}
-1385,DELETER_,Deleter,14572,9035,0,7822,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "SM_MAGNUM",5,5,5; },{}
-1382,DIABOLIC,Diabolic,14573,9036,0,7823,80,60,10,100,250,20,800,150,0,0,300,300,800,{ petskillattack "WZ_METEOR",2,5,5; },{}
-1208,WANDER_MAN,Wanderer,14574,9037,0,7824,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_UNDEADATTACK",5,5,5; },{ bonus bAgi,3; bonus bDex,1; }
-
-1963,P_CHUNG_E,New Year Doll,0,9038,0,554,80,60,30,100,250,20,800,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{}
-
-// New pets JapanRO Mobile
-1040,GOLEM,Golem,12371,9053,10035,6111,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxHP,100; bonus bFlee,-5; }
-1143,MARIONETTE,Marionette,12361,9043,10025,6098,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bSPrecovRate,3; }
-1148,MEDUSA,Medusa,12368,9050,10032,6108,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bVit,1; bonus2 bResEff,Eff_Stone,500; }
-1179,WHISPER,Whisper,12363,9045,10027,6100,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bFlee,7; bonus bDef,-3; }
-1299,GOBLIN_LEADER,Goblin Leader,12364,9046,10028,6104,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus2 bAddRace,RC_DemiHuman,3; }
-1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bHpDrainRate,50,5; }
-1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus bMaxSPRate,3; }
-1379,NIGHTMARE_TERROR,Nightmare Terror,12372,9054,10036,6112,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bResEff,Eff_Sleep,10000; }
-1401,SHINOBI,Shinobi,12362,9044,10026,6099,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bAgi,2; }
-1404,MIYABI_NINGYO,Miyabi Doll,12366,9048,10030,6106,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bInt,1; bonus bCastrate,-3; }
-1416,WICKED_NYMPH,Evil Nymph,12365,9047,10029,6105,80,60,15,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,30; bonus bSPrecovRate,5; }
-1495,STONE_SHOOTER,Stone Shooter,12369,9051,10033,6109,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,3; }
-1504,DULLAHAN,Dullahan,12367,9049,10031,6107,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bCritAtkRate,5; }
-1505,LOLI_RURI,Loli Ruri,12360,9042,10024,6097,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bMaxHPRate,3; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; }
-1513,CIVIL_SERVANT,Mao Guai,12358,9040,10022,6095,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,10; }
-1586,LEAF_CAT,Leaf Cat,12359,9041,10023,6096,80,60,20,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubRace,RC_Brute,3; }
-1630,BACSOJIN_,White Lady,12357,9039,10021,6094,80,60,10,100,250,20,2000,150,0,0,300,300,800,{},{}
-1837,IMP,Fire Imp,12374,9056,10038,6114,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,2; bonus2 bAddEle,Ele_Fire,2; }
-
-// Brasilis Quest - Suspicious Beach [UNHATCHABLE]
-2057,E_CRAMP,Strange Cramp,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // kRO version
-2081,E_HYDRA,Strange Hydra,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // iRO/cRO version
-
-// New pets (FIX ME: pet bonuses for 2210 and 2313 do not require loyalty)
-//2200,J_TAINI,Tiny,0,9057,0,512,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{}
-//2210,XMAS_LUNATIC,Christmas Snow Rabbit,0,9058,0,529,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{ bonus2 bExpAddRace,RC_All,5; }
-//2313,TIKBALANG,Tikbalang,12699,9059,0,528,80,60,10,100,250,20,1000,150,1,0,300,300,800,{},{ bonus2 bAddDamageClass,2320,10; bonus2 bAddDamageClass,2321,10; bonus2 bAddDamageClass,2322,10; bonus2 bAddDamageClass,2317,10; bonus2 bAddDamageClass,2318,10; bonus2 bAddDamageClass,2327,10; bonus2 bAddDamageClass,2319,10; bonus2 bAddDamageClass,2333,10; bonus2 bAddDamageClass,2332,10; }
-1242,MARIN,Marin,12789,9061,10039,6534,80,60,50,100,250,20,2000,150,1,0,300,300,800,{},{}
-//2398,LITTLE_PORING,Novice Poring,12846,9062,0,531,80,60,1000,0,250,0,5000,150,0,0,300,300,800,{},{ bonus bHPrecovRate,50; }

+ 867 - 0
db/pre-re/pet_db.yml

@@ -0,0 +1,867 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pre-Renewal Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Body:
+  - Mob: PORING
+    TameItem: Unripe_Apple
+    EggItem: Poring_Egg
+    EquipItem: Backpack
+    FoodItem: Apple_Juice
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+  - Mob: DROPS
+    TameItem: Orange_Juice
+    EggItem: Drops_Egg
+    EquipItem: Backpack
+    FoodItem: Yellow_Herb
+    Fullness: 80
+    IntimacyFed: 40
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+  - Mob: POPORING
+    TameItem: Bitter_Herb
+    EggItem: Poporing_Egg
+    EquipItem: Backpack
+    FoodItem: Green_Herb
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus2 bSubEle,Ele_Poison,10;
+      }
+  - Mob: LUNATIC
+    TameItem: Rainbow_Carrot
+    EggItem: Lunatic_Egg
+    EquipItem: Silk_Ribbon
+    FoodItem: Carrot_Juice
+    Fullness: 80
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+  - Mob: PICKY
+    TameItem: Earthworm_The_Dude
+    EggItem: Picky_Egg
+    EquipItem: Tiny_Egg_Shell
+    FoodItem: Red_Herb
+    Fullness: 80
+    IntimacyFed: 40
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bAtk,5;
+      }
+  - Mob: CHONCHON
+    TameItem: Rotten_Fish
+    EggItem: Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee,2;
+      }
+  - Mob: STEEL_CHONCHON
+    TameItem: Lusty_Iron
+    EggItem: Steel_Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Iron_Ore
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,6;
+        bonus bAgi,-1;
+      }
+  - Mob: HUNTER_FLY
+    TameItem: Monster_Juice
+    EggItem: Hunter_Fly_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Red_Gemstone
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,-5;
+        bonus bFlee2,2;
+      }
+  - Mob: SAVAGE_BABE
+    TameItem: Sweet_Milk
+    EggItem: Savage_Bebe_Egg
+    EquipItem: Green_Lace
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus bMaxHP,50;
+      }
+  - Mob: DESERT_WOLF_B
+    TameItem: Well_Dried_Bone
+    EggItem: Baby_Desert_Wolf_Egg
+    EquipItem: Transparent_Headgear
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 40
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bMaxSP,50;
+      }
+  - Mob: ROCKER
+    TameItem: Singing_Flower
+    EggItem: Rocker_Egg
+    EquipItem: Rocker_Glasses
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+  - Mob: SPORE
+    TameItem: Dew_Laden_Moss
+    EggItem: Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+        bonus bAtk,-2;
+      }
+  - Mob: POISON_SPORE
+    TameItem: Deadly_Noxious_Herb
+    EggItem: Poison_Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bInt,1;
+      }
+  - Mob: PECOPECO
+    TameItem: Fatty_Chubby_Earthworm
+    EggItem: PecoPeco_Egg
+    EquipItem: Battered_Pot
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,150;
+        bonus bMaxSP,-10;
+      }
+  - Mob: SMOKIE
+    TameItem: Baked_Yam
+    EggItem: Smokie_Egg
+    EquipItem: Red_Muffler
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee2,1;
+      }
+  - Mob: YOYO
+    TameItem: Tropical_Banana
+    EggItem: Yoyo_Egg
+    EquipItem: Monkey_Circlet
+    FoodItem: Banana_Juice
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bLuk,-1;
+      }
+  - Mob: ORK_WARRIOR
+    TameItem: Horror_Of_Tribe
+    EggItem: Orc_Warrior_Egg
+    EquipItem: Wild_Flower
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtk,10;
+        bonus bDef,-3;
+      }
+  - Mob: MUNAK
+    TameItem: No_Recipient
+    EggItem: Munak_Egg
+    EquipItem: Punisher
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bDef,1;
+      }
+  - Mob: DOKEBI
+    TameItem: Old_Broom
+    EggItem: Dokkaebi_Egg
+    EquipItem: Wig
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,-1;
+      }
+  - Mob: SOHEE
+    TameItem: Silver_Knife_Of_Chaste
+    EggItem: Sohee_Egg
+    EquipItem: Golden_Bell
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bDex,1;
+      }
+  - Mob: ISIS
+    TameItem: Armlet_Of_Obedience
+    EggItem: Isis_Egg
+    EquipItem: Queen's_Hair_Ornament
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,-1;
+        bonus bAtkRate,1;
+      }
+  - Mob: PETIT
+    TameItem: Shining_Stone
+    EggItem: Green_Petite_Egg
+    EquipItem: Stellar_Hairpin
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,-2;
+        bonus bMdef,-2;
+        bonus bAspdRate,1;
+      }
+  - Mob: DEVIRUCHI
+    TameItem: Contracts_In_Shadow
+    EggItem: Deviruchi_Egg
+    EquipItem: Pacifier
+    FoodItem: Shoot
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,1;
+        bonus bMaxHPrate,-3;
+        bonus bMaxSPrate,-3;
+      }
+  - Mob: BAPHOMET_
+    TameItem: Book_Of_Devil
+    EggItem: Bapho_Jr._Egg
+    EquipItem: Skull_Helm
+    FoodItem: Honey
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus bMdef,1;
+        bonus2 bResEff,Eff_Stun,-100;
+      }
+  - Mob: BON_GUN
+    TameItem: Heart_Of_Her
+    EggItem: Bongun_Egg
+    EquipItem: Sword_Of_Grave_Keeper
+    FoodItem: Pet_Food
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+  - Mob: ZHERLTHSH
+    TameItem: Prohibition_Red_Candle
+    EggItem: Zherlthsh_Egg
+    FoodItem: Immortal_Heart
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 300
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_Demihuman,2;
+        bonus2 bMagicAddRace,RC_DemiHuman,2;
+        bonus2 bAddRace,RC_Player,2;
+        bonus2 bMagicAddRace,RC_Player,2;
+      }
+  - Mob: ALICE
+    TameItem: Sway_Apron
+    EggItem: Alice_Egg
+    FoodItem: White_Potion
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMdef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: EVENT_RICECAKE
+    EggItem: Rice_Cake_Egg
+    FoodItem: Green_Herb
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Neutral,1;
+        bonus bMaxHPrate,-1;
+      }
+  - Mob: GOBLINE_XMAS
+    TameItem: Sweet_Candy_Striper
+    EggItem: Santa_Goblin_Egg
+    FoodItem: Scell
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,30;
+        bonus2 bSubEle,Ele_Water,1;
+      }
+  - Mob: CHUNG_E
+    TameItem: Tantanmen
+    EggItem: Chung_E_Egg
+    FoodItem: Bun_
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: ECLIPSE_P
+    EggItem: Spring_Rabbit_Egg
+    FoodItem: Bok_Choy
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: GOBLIN_1
+    TameItem: Knife_Goblin_Ring
+    EggItem: Knife_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_2
+    TameItem: Flail_Goblin_Ring
+    EggItem: Flail_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_4
+    TameItem: Hammer_Goblin_Ring
+    EggItem: Hammer_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 80
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DELETER_
+    TameItem: Holy_Marble
+    EggItem: Red_Deleter_Egg
+    FoodItem: Whole_Barbecue
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DIABOLIC
+    TameItem: Red_Burning_Stone
+    EggItem: Diabolic_Egg
+    FoodItem: Meat_Veg_Skewer
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: WANDER_MAN
+    TameItem: Skull_Of_Vagabond
+    EggItem: Wanderer_Egg
+    FoodItem: Spirit_Liquor
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,3;
+        bonus bDex,1;
+      }
+  - Mob: P_CHUNG_E
+    EggItem: New_Year_Doll_Egg
+    FoodItem: Mojji
+    Fullness: 80
+    IntimacyFed: 30
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOLEM
+    TameItem: Magical_Lithography
+    EggItem: Golem_Egg
+    EquipItem: Windup_Spring
+    FoodItem: Mystic_Stone
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,100;
+        bonus bFlee,-5;
+      }
+  - Mob: MARIONETTE
+    TameItem: Delicious_Shaved_Ice
+    EggItem: Marionette_Egg
+    EquipItem: Star_Hairband
+    FoodItem: Small_Snow_Flower
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bSPrecovRate,3;
+      }
+  - Mob: MEDUSA
+    TameItem: Splendid_Mirror
+    EggItem: Medusa_Egg
+    EquipItem: Queen's_Coronet
+    FoodItem: Apple_Pudding
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stone,500;
+      }
+  - Mob: WHISPER
+    TameItem: Fit_Pipe
+    EggItem: Whisper_Egg
+    EquipItem: Spirit_Chain_
+    FoodItem: Damp_Darkness
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,7;
+        bonus bDef,-3;
+      }
+  - Mob: GOBLIN_LEADER
+    TameItem: Staff_Of_Leader
+    EggItem: Goblin_Leader_Egg
+    EquipItem: Nice_Badge
+    FoodItem: Big_Cell
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_DemiHuman,3;
+        bonus2 bAddRace,RC_Player,3;
+      }
+  - Mob: SUCCUBUS
+    TameItem: Boy's_Naivety
+    EggItem: Succubus_Egg
+    EquipItem: Black_Butterfly_Mask
+    FoodItem: Vital_Flower_
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bHpDrainRate,50,5;
+      }
+  - Mob: INCUBUS
+    TameItem: Gril's_Naivety
+    EggItem: Incubus_Egg
+    EquipItem: Ball_Mask
+    FoodItem: Vital_Flower
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSPRate,3;
+      }
+  - Mob: NIGHTMARE_TERROR
+    TameItem: Hell_Contract
+    EggItem: Nightmare_Terror_Egg
+    EquipItem: Hell_Horn
+    FoodItem: Fresh_Plant
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bResEff,Eff_Sleep,10000;
+      }
+  - Mob: SHINOBI
+    TameItem: Kuloren
+    EggItem: Shinobi_Egg
+    EquipItem: Wine_On_Sleeve
+    FoodItem: Grilled_Rice_Cake
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,2;
+      }
+  - Mob: MIYABI_NINGYO
+    TameItem: Gril_Doll
+    EggItem: Miyabi_Ningyo_Egg
+    EquipItem: Summer_Fan
+    FoodItem: Well_Ripened_Berry
+    Fullness: 80
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bCastrate,-3;
+      }
+  - Mob: WICKED_NYMPH
+    TameItem: Charming_Lotus
+    EggItem: Wicked_Nymph_Egg
+    EquipItem: Jade_Trinket
+    FoodItem: Morning_Dew
+    Fullness: 80
+    IntimacyFed: 15
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,30;
+        bonus bSPrecovRate,5;
+      }
+  - Mob: STONE_SHOOTER
+    TameItem: Oilpalm_Coconut
+    EggItem: Stone_Shooter_Egg
+    EquipItem: Apro_Hair
+    FoodItem: Plant_Neutrient
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,3;
+      }
+  - Mob: DULLAHAN
+    TameItem: Luxury_Whisky_Bottle
+    EggItem: Dullahan_Egg
+    EquipItem: Death_Coil
+    FoodItem: Sunset_On_The_Rock
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritAtkRate,5;
+      }
+  - Mob: LOLI_RURI
+    TameItem: Very_Red_Juice
+    EggItem: Loli_Ruri_Egg
+    EquipItem: Fashionable_Glasses
+    FoodItem: Pumpkin_Pie_
+    Fullness: 80
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPRate,3;
+        bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10;
+      }
+  - Mob: CIVIL_SERVANT
+    TameItem: Fan_Of_Wind
+    EggItem: Civil_Servant_Egg
+    EquipItem: Golden_Earing
+    FoodItem: Flavored_Alcohol
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,10;
+      }
+  - Mob: LEAF_CAT
+    TameItem: Very_Soft_Plant
+    EggItem: Leaf_Cat_Egg
+    EquipItem: Green_Lucky_Bag
+    FoodItem: Fish_With_Blue_Back
+    Fullness: 80
+    IntimacyFed: 20
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubRace,RC_Brute,3;
+      }
+  - Mob: BACSOJIN_
+    TameItem: Shiny_Wing_Gown
+    EggItem: Bacsojin_Egg
+    EquipItem: Round_Hair_Ornament
+    FoodItem: Traditional_Cookie
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: IMP
+    TameItem: Flaming_Ice
+    EggItem: Imp_Egg
+    EquipItem: Horn_Protector
+    FoodItem: Flame_Gemstone
+    Fullness: 80
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,2;
+        bonus2 bAddEle,Ele_Fire,2;
+      }

+ 9 - 20
db/pre-re/skill_cast_db.txt

@@ -166,8 +166,6 @@
 85,15000:14500:14000:13500:13000:12500:12000:11500:11000:10500,5000,0,4000,30000,0
 //-- WZ_WATERBALL
 86,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,0,0,10000,0,0
-//-- WZ_ICEWALL
-87,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0,0
 //-- WZ_FROSTNOVA
 88,6000:6000:5500:5500:5000:5000:4500:4500:4000:4000,1000,0,0,1500:3000:4500:6000:7500:9000:10500:12000:13500:15000,0
 //-- WZ_STORMGUST
@@ -1320,8 +1318,9 @@
 2282,0,0,0,20000:30000:40000:50000:60000,0,0
 //-- NC_DISJOINT
 2283,2000,0,0,0,0,0
-//-- NC_MAGMA_ERUPTION
-5006,1000,500,0,5000,42000,10000:9000:8000:7000:6000
+5006,1000,500,0,5000,5000,10000:9000:8000:7000:6000
+//-- NC_MAGMA_ERUPTION_DOTDAMAGE
+5015,0,0,0,0,20000,0
 //==========================================
 
 //===== Shadow Chaser ======================
@@ -1633,20 +1632,16 @@
 //==========================================
 
 //===== Rebellion Skills ===================
-//-- RL_GLITTERING_GREED
-//2551,0,0,0,0,0,0
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000
 //-- RL_MASS_SPIRAL
-2553,2000,1000,0,0,30000,2000
+2553,1000,1000,0,120000,0,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,2000,0,0,0,10000
+2554,3000:2500:2000:1500:1000,0,0,0,0,2000
 //-- RL_B_TRAP
-2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000
-//-- RL_FLICKER
-2556,0,0,0,0,0,10000
+2555,2000:1600:1200:800:400,2500:2000:1500:1000:500,0,10000,10000:11000:12000:13000:14000,10000
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,2000,0,0,0,2000
+2557,3000:2500:2000:1500:1000,0,0,0,0,2000
 //-- RL_E_CHAIN
 2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0
 //-- RL_QD_SHOT
@@ -1654,11 +1649,11 @@
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000
 //-- RL_FIREDANCE
-2561,0,500,0,0,0,5000
+2561,0,500,0,0,0,0
 //-- RL_H_MINE
 2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000
 //-- RL_P_ALTER
-2563,0,0,0,30000:45000:60000:75000:90000,0,0
+2563,2000,0,0,42000:54000:66000:78000:90000,0,0
 //-- RL_FALLEN_ANGEL
 2564,0,0,0,2000,0,0
 //-- RL_R_TRIP
@@ -1675,12 +1670,6 @@
 2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000
 //-- RL_HAMMER_OF_GOD
 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
-//2573,0,0,0,0,0,0
-//-- RL_GLITTERING_GREED_ATK
-//2574,0,0,0,0,0,0
 //==========================================
 
 //==== Kagerou & Oboro Skills ==============

+ 2 - 1
db/pre-re/skill_db.txt

@@ -1345,7 +1345,7 @@
 5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
 5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
-5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
+5006,1,6,2,-1,0x2,3,5,1,no,0,0,3,weapon,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
 5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
@@ -1354,6 +1354,7 @@
 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
 5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
 5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x4000, ALL_FULL_THROTTLE,Full Throttle
+5015,1,6,1,0,0xC0,0,5,1,no,0,0,0,misc,0,0,	NC_MAGMA_ERUPTION_DOTDAMAGE,Magma Eruption Dot Damage
 
 // Summoner - Placeholder
 5018,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	SU_BASIC_SKILL,New Basic Skill

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

@@ -26,11 +26,11 @@
 // 'RequiredStatuses'
 //	Fill the value only with SC_STATUS (see db/const.txt for more details)
 //	Usage for multiple status requirements: SC_STATUS1:SC_STATUS2:SC_STATUS3
-//	Max. multiple value is 3 (skill.h: MAX_SKILL_STATUS_REQUIRE)
+//	Max. multiple value is 3 (skill.hpp: MAX_SKILL_STATUS_REQUIRE)
 //	Use any number or SC_ALL will disable status requirements
 // 'RequiredEquipment'
 //	Specified equipment to be equipped. For multiple values, use : as delimiter.
-//	Max. multiple value is 10 (skill.h: MAX_SKILL_EQUIP_REQUIRE)
+//	Max. multiple value is 10 (skill.hpp: MAX_SKILL_EQUIP_REQUIRE)
 
 //****
 // SM Swordman

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

@@ -43,7 +43,7 @@
  83,0x86,    ,  0, 3,1000,enemy, 0x010	//WZ_METEOR
  85,0x86,    ,  5:5:5:5:5:5:5:5:5:5:7, 1,1250,enemy,0x018	//WZ_VERMILION
  86,0x86,    ,  0:1:1:2:2:2:2:2:2:2, 0,-1,noone, 0x010	//WZ_WATERBALL
- 87,0x8d,    , -1, 0,  -1,all,   0x9010	//WZ_ICEWALL
+ 87,0x8d,    , -1, 0,1000,all,   0x9010	//WZ_ICEWALL
  89,0x86,    ,  4, 1, 450,enemy, 0x018	//WZ_STORMGUST
  91,0x86,    ,  2, 0,1000,enemy, 0x010	//WZ_HEAVENDRIVE
  92,0x8e,    ,  2, 0,  -1,enemy, 0x8010	//WZ_QUAGMIRE

File diff ditekan karena terlalu besar
+ 392 - 149
db/re/achievement_db.yml


+ 59 - 59
db/re/attendance.yml

@@ -1,61 +1,61 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1
-  
-Attendance:
-  - Start: 20180502
-    End: 20180529
-    Rewards:
-      - Day: 1
-        ItemId: 22979
-      - Day: 2
-        ItemId: 6316
-      - Day: 3
-        ItemId: 12265
-        Amount: 5
-      - Day: 4
-        ItemId: 23047
-        Amount: 5
-      - Day: 5
-        ItemId: 23038
-      - Day: 6
-        ItemId: 23043
-      - Day: 7
-        ItemId: 23340
-        Amount: 3
-      - Day: 8
-        ItemId: 12516
-        Amount: 5
-      - Day: 9
-        ItemId: 23307
-        Amount: 5
-      - Day: 10
-        ItemId: 12610
-      - Day: 11
-        ItemId: 14533
-        Amount: 2
-      - Day: 12
-        ItemId: 23012
-        Amount: 3
-      - Day: 13
-        ItemId: 23048
-        Amount: 5
-      - Day: 14
-        ItemId: 12264
-        Amount: 5
-      - Day: 15
-        ItemId: 23046
-        Amount: 5
-      - Day: 16
-        ItemId: 12515
-        Amount: 5
-      - Day: 17
-        ItemId: 12522
-        Amount: 5
-      - Day: 18
-        ItemId: 12523
-        Amount: 5
-      - Day: 19
-        ItemId: 6234
-      - Day: 20
-        ItemId: 22845
+
+Body:
+#  - Start: 20180502
+#    End: 20180529
+#    Rewards:
+#      - Day: 1
+#        ItemId: 22979
+#      - Day: 2
+#        ItemId: 6316
+#      - Day: 3
+#        ItemId: 12265
+#        Amount: 5
+#      - Day: 4
+#        ItemId: 23047
+#        Amount: 5
+#      - Day: 5
+#        ItemId: 23038
+#      - Day: 6
+#        ItemId: 23043
+#      - Day: 7
+#        ItemId: 23340
+#        Amount: 3
+#      - Day: 8
+#        ItemId: 12516
+#        Amount: 5
+#      - Day: 9
+#        ItemId: 23307
+#        Amount: 5
+#      - Day: 10
+#        ItemId: 12610
+#      - Day: 11
+#        ItemId: 14533
+#        Amount: 2
+#      - Day: 12
+#        ItemId: 23012
+#        Amount: 3
+#      - Day: 13
+#        ItemId: 23048
+#        Amount: 5
+#      - Day: 14
+#        ItemId: 12264
+#        Amount: 5
+#      - Day: 15
+#        ItemId: 23046
+#        Amount: 5
+#      - Day: 16
+#        ItemId: 12515
+#        Amount: 5
+#      - Day: 17
+#        ItemId: 12522
+#        Amount: 5
+#      - Day: 18
+#        ItemId: 12523
+#        Amount: 5
+#      - Day: 19
+#        ItemId: 6234
+#      - Day: 20
+#        ItemId: 22845

+ 123 - 0
db/re/guild_skill_tree.yml

@@ -0,0 +1,123 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Body:
+  - Id: GD_APPROVAL
+    MaxLevel: 1
+
+  - Id: GD_KAFRACONTRACT
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDRESEARCH
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDUP
+    MaxLevel: 3
+
+  - Id: GD_EXTENSION
+    MaxLevel: 10
+
+  - Id: GD_GLORYGUILD
+    MaxLevel: 0
+
+  - Id: GD_LEADERSHIP
+    MaxLevel: 5
+
+  - Id: GD_GLORYWOUNDS
+    MaxLevel: 5
+
+  - Id: GD_SOULCOLD
+    MaxLevel: 5
+    Required:
+    - Id: GD_GLORYWOUNDS
+      Level: 1
+
+  - Id: GD_HAWKEYES
+    MaxLevel: 5
+    Required:
+    - Id: GD_LEADERSHIP
+      Level: 1
+
+  - Id: GD_BATTLEORDER
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 2
+
+  - Id: GD_REGENERATION
+    MaxLevel: 3
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+
+  - Id: GD_RESTORE
+    MaxLevel: 1
+    Required:
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_EMERGENCYCALL
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_GUARDRESEARCH
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_DEVELOPMENT
+    MaxLevel: 1
+
+  - Id: GD_GUILD_STORAGE
+    MaxLevel: 5

+ 25 - 21
db/re/item_combo_db.txt

@@ -13,7 +13,7 @@
 1269:5467,{ bonus bAspd,1; bonus bFlee2,3; }
 1284:2892,{ bonus2 bSkillAtk,"AS_SONICBLOW",50; bonus bBaseAtk,50; bonus bFlee,-30; }
 1285:2892,{ bonus bCritical,4; bonus bCritAtkRate,40; bonus bMaxHPRate,-10; }
-1287:15123,{ if (getequiprefinerycnt(EQI_HAND_R) >= 7) { autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",1000,3000,BF_SHORT,BF_NORMAL; } /* Confirm: Success rate */ }
+1287:15123,{ if (getequiprefinerycnt(EQI_HAND_R) >= 7) { autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",1000,3000,BF_SHORT|BF_NORMAL; } /* Confirm: Success rate */ }
 1326:22133,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"NC_AXEBOOMERANG",15; } if ((.@eq + .@weapon) >= 18) { bonus2 bAddClass,Class_All,10; if ((.@eq + .@weapon) >= 22) { bonus bLongAtkRate,10; } } }
 1387:19021,{ bonus2 bSkillAtk,"WS_CARTTERMINATION",15+(getequiprefinerycnt(EQI_HAND_R))*5; }
 1407:5782,{ bonus2 bAddClass,Class_All,3; }
@@ -98,7 +98,7 @@
 1775:18114,{ bonus bLongAtkRate,70; }
 1776:18114,{ bonus bLongAtkRate,40; }
 1846:20838,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus2 bSkillCooldown,"SR_FLASHCOMBO",-1000; if ((.@eq + .@weapon) >= 22) { .@val += 15; } } if (.@val) { bonus2 bSkillAtk,"SR_TIGERCANNON",.@val; } }
-1935:2988,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",200; bonus2 bSkillUseSP,"CG_ARROWVULCAN",50; }
+1935:2988,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",200; bonus2 bSkillUseSP,"CG_ARROWVULCAN",-50; }
 1944:15180:28442,{ bonus bBaseAtk,30; bonus bAspd,1; bonus bCritAtkRate,20; }
 1990:2989,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",200; }
 2001:2677,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }
@@ -430,7 +430,7 @@
 4545:18730,{ bonus bMatk,5; bonus bBaseAtk,5; }
 4605:4606,{ bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; bonus2 bHPLossRate,100,6000; bonus2 bSPLossRate,6,6000; }
 4608:4609,{ bonus2 bAddSize,Size_Medium,15; bonus2 bAddSize,Size_Large,15; bonus2 bSubSize,Size_Medium,5; bonus2 bSubSize,Size_Large,5; }
-4610:27168,{ bonus bAtk,100; autobonus "{ active_transform 3190,6000; }",30,6000,BF_WEAPON; }
+4610:27168,{ bonus bAtk,100; autobonus "{}",30,6000,BF_WEAPON,"{ active_transform 3190,6000; }"; }
 4626:4628,{ bonus2 bIgnoreMdefRaceRate,RC_Demon,50; }
 4627:4628,{ bonus2 bIgnoreDefRaceRate,RC_Formless,50; bonus2 bIgnoreDefRaceRate,RC_Demon,50;}
 4629:4630,{ bonus3 bAutoSpell,"NPC_WIDECURSE",2,2; bonus2 bSubEle,Ele_Neutral,5; }
@@ -443,19 +443,19 @@
 4653:4654,{ bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Undead,5; bonus2 bIgnoreMdefRaceRate,RC_Brute,50; bonus2 bIgnoreMdefRaceRate,RC_Undead,50; }
 4653:4655,{ bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Undead,5; bonus2 bIgnoreDefRaceRate,RC_Brute,50; bonus2 bIgnoreDefRaceRate,RC_Undead,50; }
 4656:4657,{ /* Unofficial chance */ bonus3 bAutoSpellWhenHit,"NPC_WIDESLEEP",2,10; bonus2 bSubEle,Ele_Neutral,5; }
-4671:4692,{ autobonus "{ active_transform 3242,6000; bonus bMatk,100; }",30,6000,BF_MAGIC; }
-4672:4693,{ autobonus "{ active_transform 3243,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4673:4696,{ autobonus "{ active_transform 3245,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4674:4684,{ autobonus "{ active_transform 3220,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4675:4685,{ autobonus "{ active_transform 3221,6000; bonus bMatk,100; }",30,6000,BF_MAGIC; }
-4676:4687,{ autobonus "{ active_transform 3222,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4677:4688,{ autobonus "{ active_transform 3223,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4678:4686,{ autobonus "{ active_transform 3224,6000; bonus bMatk,100; }",30,6000,BF_MAGIC; }
-4679:4689,{ autobonus "{ active_transform 3225,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4680:4690,{ autobonus "{ active_transform 3240,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4681:4691,{ autobonus "{ active_transform 3241,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4682:4694,{ autobonus "{ active_transform 3244,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-4683:4695,{ autobonus "{ active_transform 3246,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
+4671:4692,{ autobonus "{ bonus bMatk,100; }",30,6000,BF_MAGIC,"{ active_transform 3242,6000; }"; }
+4672:4693,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3243,6000; }"; }
+4673:4696,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3245,6000; }"; }
+4674:4684,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3220,6000; }"; }
+4675:4685,{ autobonus "{ bonus bMatk,100; }",30,6000,BF_MAGIC,"{ active_transform 3221,6000; }"; }
+4676:4687,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3222,6000; }"; }
+4677:4688,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3223,6000; }"; }
+4678:4686,{ autobonus "{ bonus bMatk,100; }",30,6000,BF_MAGIC,"{ active_transform 3224,6000; }"; }
+4679:4689,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3225,6000; }"; }
+4680:4690,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3240,6000; }"; }
+4681:4691,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3241,6000; }"; }
+4682:4694,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3244,6000; }"; }
+4683:4695,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3246,6000; }"; }
 4697:27012,{ bonus bNoMadoFuel; }
 4699:27012,{ bonus bNoMadoFuel; }
 4958:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bDelayrate,-1 - ( .@r > 9 ) ? 1 : 0; } }
@@ -480,7 +480,7 @@
 5070:18576,{ bonus2 bSkillAtk,"MO_TRIPLEATTACK",5; bonus2 bSkillAtk,"MO_COMBOFINISH",5; bonus2 bSkillAtk,"CH_TIGERFIST",3; bonus2 bSkillAtk,"CH_CHAINCRUSH",3; if( getequiprefinerycnt(EQI_HEAD_TOP) < 10 ) bonus bUseSPrate, getequiprefinerycnt(EQI_HEAD_TOP); }
 5073:5574,{ bonus bDex,2; bonus bDef,2; }
 5074:5653,{ bonus bStr,1; bonus bAspdRate,2; }
-5074:18827,{ autobonus "{ transform 1765,5000; bonus2 bHPLossRate,30,1000; bonus bHit,-10; bonus bSplashRange,1; }",10+getequiprefinerycnt(EQI_HEAD_TOP),5000,BF_WEAPON,"{ specialeffect2 EF_NONE; }"; }
+5074:18827,{ autobonus "{ bonus2 bHPLossRate,30,1000; bonus bHit,-10; bonus bSplashRange,1; }",10+getequiprefinerycnt(EQI_HEAD_TOP),5000,BF_WEAPON,"{ transform 1765,5000; }"; }
 5086:18527,{ bonus2 bAddItemHealRate,12192,200; }
 5086:18656,{ bonus2 bAddItemHealRate,538,100; bonus2 bAddItemHealRate,12192,100; bonus2 bAddMonsterDropItem,538,400; bonus2 bAddMonsterDropItem,12192,400; }
 5170:19024,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r >= 7) bonus bAspdRate,5; if (.@r >= 9) bonus bMaxHPRate,5; }
@@ -603,7 +603,7 @@
 18985:28321:28322,{ bonus2 bSkillAtk,"HT_BLITZBEAT",200; }
 18985:28322,{ bonus2 bSkillAtk,"SN_FALCONASSAULT",50; }
 18997:28326:28327,{ bonus bSpeedRate,10; bonus bBaseAtk,50; bonus bMatk,50; if(getequiprefinerycnt(EQI_HEAD_TOP)>=9){ bonus bMaxHPrate,10; bonus bMaxSPrate,50; } }
-19026:20756,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSPGainRace,RC_Fish,10; bonus3 bAddMonsterDropItem,551,RC_Fish,(5+.@r); bonus2 bAddItemHealRate,551,5; bonus bHPrecovRate,(5+.@r); }
+19026:20756,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSPGainRace,RC_Fish,10; bonus3 bAddMonsterDropItem,544,RC_Fish,(5+.@r); bonus3 bAddMonsterDropItem,551,RC_Fish,(5+.@r); bonus2 bAddItemHealRate,544,5*(1+.@r); bonus2 bAddItemHealRate,551,5*(1+.@r); }
 19026:22059,{ bonus2 bCriticalAddRace,RC_Fish,(10+getequiprefinerycnt(EQI_SHOES)); }
 19038:19039,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP)+getequiprefinerycnt(EQI_HEAD_MID); if((.@r==7)||(.@r==8)){ bonus bCritical,12; bonus bHit,12; } if(.@r>=9){ bonus bMaxHP,1200; bonus bMaxSP,120; } }
 19117:22101,{ bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5; if(getequiprefinerycnt(EQI_SHOES) >= 12) { bonus bFixedCast,-400; } }
@@ -613,6 +613,7 @@
 19344:32301,{ bonus bBaseAtk,30; .@eq = getequiprefinerycnt(EQI_HEAD_TOP); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bAddClass,Class_All,5; } if ((.@eq + .@weapon) >= 18) { bonus2 bSubSize,Size_Small,20; bonus2 bSubSize,Size_Medium,20; if ((.@eq + .@weapon) >= 22) { autobonus3 "{ bonus bBaseAtk,100; bonus bLongAtkRate,15; }",5,10000,"RL_FIREDANCE"; /* unknown rate */ } } }
 19428:20948:32238:32239,{ bonus bInt,5; bonus bMaxSPrate,10; bonus bDef,100; bonus2 bMagicAtkEle,Ele_Water,10; bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Neutral,10; .@head = getequiprefinerycnt(EQI_HEAD_TOP); .@garment = getequiprefinerycnt(EQI_GARMENT); if (.@head >= 7 && .@garment >= 7) { .@matk = 40; } if ((.@head + .@garment) >= 18) { .@matk += 40; bonus2 bMagicAtkEle,Ele_Ghost,15; bonus2 bMagicAtkEle,Ele_Wind,15; bonus2 bMagicAtkEle,Ele_Holy,15; if ((.@head + .@garment) >= 22) { bonus bMatkRate,10; bonus2 bIgnoreMdefRaceRate,RC_Formless,50; bonus2 bIgnoreMdefRaceRate,RC_Demon,50; bonus2 bIgnoreMdefRaceRate,RC_Brute,50; } } bonus bMatk,.@matk; }
 20135:20136,{ bonus bAllStats,12; }
+20701:2165,{ .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_HAND_L); bonus2 bAddEle,Ele_Earth,.@b; bonus2 bSubRace,RC_Fish,.@a; }
 20717:22000,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20717:22001,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20717:22002,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
@@ -661,8 +662,11 @@
 20718:22116,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20718:22117,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
 20718:22118,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
+20725:2189,{ .@a = getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bHPLossRate,30,1000; bonus bMatk,5*(.@a/3); }",30+.@a,10000,BF_MAGIC,"{ active_transform 1930,10000; specialeffect2 EF_POTION_BERSERK; /*Confirm Special Effect*/ }"; .@b = getequiprefinerycnt(EQI_HAND_L); if(.@b>=7) bonus2 bSubEle,Ele_All,2*.@b; }
+20783:4174,{ bonus2 bSubEle,Ele_Neutral,-50; }
 20797:2339,{ bonus bInt,15; bonus bMaxHPrate,5; bonus bMaxSPrate,5; if (getequiprefinerycnt(EQI_ARMOR) > 6) bonus bNoCastCancel; }
 20797:4174,{ bonus2 bSubEle,Ele_All,50; bonus2 bSubEle,Ele_Neutral,-50; }
+20819:5397,{ bonus bAspd,1; bonus bNoCastCancel; }
 20838:26109,{ bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",10; .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"SO_EARTHGRAVE",40; } if ((.@eq + .@weapon) >= 18) { bonus2 bMagicAtkEle,Ele_Neutral,10; bonus2 bMagicAtkEle,Ele_Earth,10; if ((.@eq + .@weapon) >= 22) { bonus2 bMagicAtkEle,Ele_Water,10; } } }
 20840:28725,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); .@val = 80; if (.@weapon >= 7 && .@eq >= 7) { .@val += 80; } if ((.@weapon + .@eq) >= 18) { .@val += 40; } if ((.@weapon + .@eq) >= 22) { bonus2 bMagicAtkEle,Ele_Fire,15; } bonus bMatk,.@val; }
 20847:28745,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); .@val = 10; if (.@weapon >= 7 && .@eq >= 7) { bonus bCritAtkRate,15; } if ((.@weapon + .@eq) >= 18) { .@val += 15; if ((.@weapon + .@eq) >= 22) { skill "TF_DOUBLE",4; bonus bDoubleRate,20; } } bonus bAspdRate,.@val; }
@@ -698,8 +702,8 @@
 22133:26007,{ bonus bAspdRate,8; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus bLongAtkRate,10; if ((.@eq + .@weapon) >= 22) { .@val += 30; } } if (.@val) { bonus2 bSkillAtk,"LG_BANISHINGPOINT",.@val; } }
 22133:32005,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus2 bAddClass,Class_All,10; if ((.@eq + .@weapon) >= 22) { .@val += 20; } } if (.@val) { bonus2 bSkillAtk,"RK_HUNDREDSPEAR",.@val; } }
 22171:13345,{ autobonus "{ bonus bStr,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
-//22171:26154,{ autobonus "{ bonus bInt,20; bonus2 bMatkRate,15; }",20,7000,BF_MAGIC; /* unknown rate */ }
-22171:26155,{ autobonus "{ bonus bLuk,20; bonus2 bMatkRate,15; bonus2 bAddClass,Class_All,15; }",20,7000,BF_MAGIC|BF_WEAPON; /* unknown rate */ }
+//22171:26154,{ autobonus "{ bonus bInt,20; bonus bMatkRate,15; }",20,7000,BF_MAGIC; /* unknown rate */ }
+22171:26155,{ autobonus "{ bonus bLuk,20; bonus bMatkRate,15; bonus2 bAddClass,Class_All,15; }",20,7000,BF_MAGIC|BF_WEAPON; /* unknown rate */ }
 22171:28255,{ autobonus "{ bonus bInt,20; bonus2 bMagicAtkEle,Ele_Ghost,10; }",20,7000,BF_MAGIC; /* unknown rate */ }
 22171:28256,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
 22171:28257,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
@@ -771,7 +775,7 @@
 24168:24169:24177,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Formless; }
 24168:24169:24178,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Undead; }
 24168:24169:24179,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMDefRace,RC_Plant; }
-24180:24181:24182:24183:24184:24185,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if(.@r>=45) { bonus bMaxHPrate,(.@r-60); sc_start4 SC_ENDURE,1,10,0,0,1;} }
+24180:24181:24182:24183:24184:24185,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if(.@r>=45) { bonus bMaxHPrate,(.@r-60); bonus bNoWalkDelay; } }
 24186:24198,{ bonus2 bSubEle,Ele_Neutral,2; }
 24187:24199,{ bonus2 bSubEle,Ele_Dark,2; }
 24188:24200,{ bonus2 bSubEle,Ele_Water,2; }

+ 143 - 56
db/re/item_db.txt

@@ -87,7 +87,7 @@
 582,Orange,Orange,0,300,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(10,20),rand(10,20); },{},{}
 583,KETUPAT_,Ketupat Sayur,0,7000,,150,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(325,405),rand(40,60); sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_Hallucination; },{},{}
 584,Fish_Ball_Soup,Fish Cake Soup,0,100,,60,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(40,70),0; },{},{}
-585,Wurst,Brusti,0,2,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(15,20),0; },{},{}
+585,Wurst,Brusti,11,2,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3; },{},{}
 586,Mother's_Cake,Mother's Cake,0,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(325,405),0; },{},{}
 587,Prickly_Fruit_,Red Prickly Fruit,0,880,,60,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(270,330),rand(20,30); },{},{}
 588,Spaghetti,Spaghetti,0,100,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(40,70),0; },{},{}
@@ -494,7 +494,7 @@
 1138,Mysteltainn_,Mysteltainn,5,20,,1000,170,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEle,Ele_Ghost,15; bonus3 bAutoSpell,"MG_STONECURSE",3,100; bonus2 bAddEff,Eff_Stone,10; bonus bDex,3; },{},{}
 1139,Tale_Fing_,Tirfing,5,20,,1000,200,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bHPLossRate,35,10000; },{},{}
 1140,Byeorrun_Gum,Byeollungum,5,20,,900,150,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus2 bSubClass,Class_Normal,-10; bonus2 bAddClass,Class_Boss,50; bonus bAllStats,2; },{},{}
-1141,Immaterial_Sword,Immaterial Sword,5,20,,900,140,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,30,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon; },{},{}
+1141,Immaterial_Sword,Immaterial Sword,5,20,,900,140,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Ghost; bonus3 bSPVanishRate,30,30,BF_WEAPON|BF_MAGIC|BF_MISC; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon; },{},{}
 1142,Jewel_Sword,Jeweled Sword,5,20,,2200,104,,1,0,0x000654E2,63,2,2,3,68,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Jewel,100; },{},{}
 1143,Gaia_Sword,Gaia Sword,5,20,,2500,140,,1,0,0x000654E2,63,2,2,3,74,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Ore,30; },{},{}
 1144,Sasimi,Sashimi,5,20,,1400,75,,1,0,0x000654E2,63,2,2,3,48,1,2,{ bonus bAtkEle,Ele_Wind; bonus3 bAddMonsterDropItem,544,RC_Fish,4000; },{},{}
@@ -654,7 +654,7 @@
 1291,Guillotine_Katar,Guillotine Katar,5,56000,,1500,200,,1,1,0x00001000,63,2,34,4,140,1,16,{ bonus bDex,2; bonus bFlee,-30; bonus2 bAddRace,RC_DemiHuman,50; bonus2 bAddRace,RC_Player,50; bonus2 bSkillAtk,"GC_CROSSIMPACT",30; },{},{}
 1292,Upg_Katar,Upg Katar,5,20,,1000,80,,1,1,0x00001000,63,2,34,3,1,1,16,{ .@r = getrefine(); bonus bBaseAtk,(.@r*10); bonus bCritAtkRate,(.@r*2); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
 1293,Velum_Jamadhar,Vellum Jamadhar,5,20,,1200,170,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus4 bSetDefRace,RC_Player,10000,5000,1; bonus4 bSetMDefRace,RC_Player,10000,5000,1; bonus bAspdRate,getrefine(); },{},{}
-1294,Velum_Scare,Vellum Scale,5,20,,1200,50,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus3 bSPVanishRaceRate,RC_Player,10000,10; },{},{}
+1294,Velum_Scare,Vellum Scale,5,20,,1200,50,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus3 bSPVanishRaceRate,RC_Player,1000,10; },{},{}
 1295,Blood_Tears_,Blood Tears,5,20,,1700,120,,1,3,0x00001000,18,2,34,4,55,1,16,{ bonus3 bAutoSpell,"NPC_WIDEBLEEDING",(getrefine()>=9?2:1),30; },{},{}
 1296,Metal_Katar,Metal Katar,5,20,,0,75,,1,1,0x00001000,63,2,34,3,1,1,16,{ .@r = getrefine(); bonus bBaseAtk,(.@r*5); bonus bCritAtkRate,.@r; .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
 1297,Inverse_Scale_,Inverse Scale,5,20,,1500,140,,1,2,0x00001000,18,2,34,4,55,1,16,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"NPC_DRAGONFEAR",1,30; },{},{}
@@ -734,7 +734,7 @@
 1392,Ygnus_Stale,Ignus Steel,5,56000,,1900,250,,1,1,0x000444A2,63,2,34,4,95,1,7,{ bonus bAtkEle,Ele_Fire; bonus bUnbreakableWeapon; bonus2 bAddEff,Eff_Burning,300; bonus2 bAddEff2,Eff_Burning,300; },{},{}
 1393,End_Sektura,End Sectora,5,56000,,1900,250,,1,1,0x000444A2,63,2,34,4,95,1,7,{ bonus bAtkEle,Ele_Water; bonus bUnbreakableWeapon; bonus2 bAddEff,Eff_Crystalize,300; bonus2 bAddEff2,Eff_Crystalize,300; },{},{}
 1394,Upg_Two_Handed_Axe,Upg Two Handed Axe,5,20,,2000,110,,1,1,0x000444A2,63,2,34,3,1,1,7,{ bonus bBaseAtk,(getrefine()*14); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
-1395,Velum_Buster,Vellum Buster,5,20,,2500,50,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus3 bSPVanishRaceRate,RC_Player,10000,10; },{},{}
+1395,Velum_Buster,Vellum Buster,5,20,,2500,50,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus3 bSPVanishRaceRate,RC_Player,1000,10; },{},{}
 1396,Velum_Guillotine,Vellum Guillotine,5,20,,5500,300,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus2 bAddRace,RC_Player,40; bonus2 bIgnoreDefRaceRate,RC_Player,30; .@r = getrefine(); if(.@r>=6) { bonus2 bSkillAtk,"NC_AXEBOOMERANG",80; bonus2 bSkillAtk,"NC_POWERSWING",80; } if(.@r>=9) { bonus2 bAddRace,RC_Player,60; } },{},{}
 1397,Bradium_Stonehammer_,Bradium Stonehammer,5,20,,2700,210,,1,2,0x000444A2,63,2,34,4,75,1,7,{ bonus bUnbreakableWeapon; },{},{}
 1398,Metal_Two_Handed_Axe,Metal Two Handed Axe,5,20,,0,105,,1,1,0x000444A2,63,2,34,3,1,1,7,{ bonus bUnbreakableWeapon; bonus bBaseAtk,(getrefine()*7); .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -877,7 +877,7 @@
 1525,Long_Mace,Long Mace,5,20,,800,135,,3,0,0x00008110,63,2,2,4,40,1,8,{ bonus bLongAtkDef,10; },{},{}
 1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
 1527,Quadrille,Quadrille,5,20,,900,165,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10; },{},{}
-1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
+1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
 1529,Iron_Driver,Iron Driver,5,20,,3000,155,,2,0,0x00008100,63,2,2,3,78,1,8,{},{},{}
 1530,Mjolnir,Mjolnir,5,20,,6000,350,,1,0,0x000444A2,63,2,2,4,95,0,8,{ bonus bAtkEle,Ele_Wind; bonus bDex,50; bonus bStr,20; bonus bAspdRate,10; bonus3 bAutoSpell,"MG_THUNDERSTORM",10,100; autobonus "{ bonus bSplashRange,1; }",50,10000; },{},{}
 1531,Spanner,Wrench,5,20,,2500,115,,1,0,0x00008110,63,2,2,3,55,1,8,{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stun,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; },{},{}
@@ -889,7 +889,7 @@
 1537,Quadrille_C,Refined Quadrille,5,1,,0,193,,1,0,0x00008110,63,2,2,4,0,0,8,{ bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bAddRace,RC_Demon,40; bonus2 bAddRace,RC_Undead,40; },{},{}
 1538,Spike_,Spike,5,20,,700,85,,1,2,0x00008110,63,2,2,4,40,1,8,{ bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67; },{},{}
 1539,Golden_Mace_,Golden Mace,5,20,,800,110,,1,2,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon; },{},{}
-1540,Grand_Cross_,Grand Cross,5,20,,1500,140,,1,1,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
+1540,Grand_Cross_,Grand Cross,5,20,,1500,140,,1,1,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
 1541,Nemesis,Nemesis,5,20,,900,120,,1,0,0x00008110,63,2,2,4,60,1,8,{ bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus3 bAutoSpell,"AL_CRUCIS",1+getrefine(),100; autobonus "{ bonus bBaseAtk,50; }",10,20000,BF_WEAPON,"{ specialeffect2 EF_BLOODDRAIN; }"; },{},{}
 1542,BF_Morning_Star1,Valorous Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,63,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; },{},{}
 1543,BF_Morning_Star2,Brave Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,63,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bUnbreakableWeapon; autobonus "{ bonus2 bAddEff,Eff_Stun,5000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
@@ -1012,7 +1012,7 @@
 1658,P_Staff3,Eden Staff III,5,0,,0,60:170,,1,0,0x00818314,63,2,2,3,60,0,10,{ bonus bInt,4; },{},{}
 1659,Recovery_Light,Light of Recovery,5,56000,,400,30:160,,1,1,0x00000100,63,2,2,4,110,1,10,{ bonus bAtkEle,Ele_Holy; bonus bUnbreakableWeapon; .@r = getrefine(); bonus bHealPower,(.@r*6); bonus2 bSkillUseSP,"AL_HEAL",-(.@r*10); bonus2 bSkillUseSP,"AB_CHEAL",-(.@r*12); bonus2 bSkillUseSP,"AB_HIGHNESSHEAL",-(.@r*14); },{},{}
 1660,Wand_Of_Affection2,Empowered Wand Of Affection,5,20,,500,30:180,,1,1,0x00000100,63,2,2,3,130,1,10,{ bonus bAtkEle,Ele_Holy; bonus bInt,4; bonus bHealPower,20; },{},{}
-1661,Mental_Destroyer,Mental Destroyer,5,20,,1400,100:50,,1,0,0x00000200,63,2,2,4,95,1,10,{ bonus bInt,10; bonus bUnbreakableWeapon; bonus bUseSPrate,100; bonus bMdef,20; bonus2 bSPVanishRate,10000,5; if(getrefine()>5) { bonus2 bSPVanishRate,10000,5; } },{},{}
+1661,Mental_Destroyer,Mental Destroyer,5,20,,1400,100:50,,1,0,0x00000200,63,2,2,4,95,1,10,{ .@r = getrefine(); bonus bInt,10; bonus bUnbreakableWeapon; bonus bUseSPrate,100; bonus bMdef,20; bonus3 bSPVanishRate,1000,5+(.@r>5?3:0),BF_WEAPON|BF_MAGIC|BF_MISC; },{},{}
 1662,Bone_Wand_,Evil Bone Wand,5,20,,700,40:110,,1,2,0x00818314,63,2,2,3,24,1,10,{ bonus bInt,4; bonus bAtkEle,Ele_Undead; },{},{}
 1663,Staff_Of_Bordeaux_,Staff Of Bordeaux,5,20,,500,30:180,,1,2,0x00010200,18,2,2,4,50,1,10,{ bonus bInt,2; bonus bDex,1; if(getskilllv("SA_DRAGONOLOGY") == 5) { bonus bUseSPrate,-15; bonus bInt,3; } },{},{}
 1664,Thorn_Staff_,Thorn Staff of Darkness,5,10,,700,60:160,,,1,0x14,50,2,2,4,75,1,8,{ bonus bInt,3; bonus bDex,3; bonus bVariableCastrate,-getrefine(); bonus bAtkEle,Ele_Dark; },{},{}
@@ -1214,7 +1214,7 @@
 1932,TE_Woe_Guitar,TE Woe Guitar,5,0,,0,100,,1,0,0x00080000,63,1,2,3,40,1,13,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Poison,3000; },{},{}
 1933,Thanos_Violin,Thanos Violin,5,10,,2000,200:130,,1,1,0x00080000,56,1,2,4,120,1,13,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bHPDrainRate,50,5; bonus2 bSPDrainRate,10,5; bonus bLongAtkRate,20; bonus2 bHPLossRate,100,10000; },{},{ heal -1000,0; }
 1934,Contabass,Contrabass,5,20,,250,180:120,,1,2,0x00080000,63,1,2,3,130,1,13,{ bonus2 bSkillCooldown,"WM_RANDOMIZESPELL",-20; },{},{}
-1935,Ukulele_Of_Newoz,Oz's New Ukulele,5,20,,2000,160,,1,2,0x00080000,63,1,2,4,130,1,13,{ bonus2 bSkillUseSP,"MI_RUSH_WINDMILL",-20; },{},{}
+1935,Ukulele_Of_Newoz,Oz's New Ukulele,5,20,,2000,160,,1,2,0x00080000,63,1,2,4,130,1,13,{ bonus2 bSkillUseSP,"MI_RUSH_WINDMILL",20; },{},{}
 1936,Ru_Blue_Violin,Blue Violin,5,10,,1500,180,,2,1,0x00080000,63,1,2,3,100,1,13,{ bonus bDex,5; bonus bVit,5; },{},{}
 1937,Ru_Gold_Violin,Ru Gold Violin,5,0,,1500,180,,1,2,0x00080000,56,2,2,3,120,1,13,{ bonus bDex,8; bonus bVit,8; },{},{}
 1938,Infinity_Violin,Infinity Violin,5,10,,500,150,,2,1,0x00080000,56,1,2,4,100,1,13,{},{},{}
@@ -1266,7 +1266,7 @@
 1987,TE_Woe_Rope,TE Woe Rope,5,0,,0,100,,2,0,0x00080000,63,0,2,3,40,1,14,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Blind,3000; },{},{}
 1988,Thanos_Whip,Thanos Whip,5,10,,2200,200:130,,2,1,0x00080000,56,0,2,4,120,1,14,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bHPDrainRate,50,5; bonus2 bSPDrainRate,10,5; bonus bLongAtkRate,20; bonus2 bHPLossRate,100,10000; },{},{ heal -1000,0; }
 1989,Gymnastics_Ribbon,Rhythmic Gymnastics Ribbon,5,20,,300,150:120,,2,2,0x00080000,63,0,2,3,130,1,14,{ bonus bAspdRate,20; },{},{}
-1990,Floral_Mic_Of_Igu,Bloody Floral Decoration Microphone,5,20,,1000,160,,2,2,0x00080000,63,0,2,4,130,1,14,{ bonus2 bSkillUseSP,"CG_MOONLIT",-20; },{},{}
+1990,Floral_Mic_Of_Igu,Bloody Floral Decoration Microphone,5,20,,1000,160,,2,2,0x00080000,63,0,2,4,130,1,14,{ bonus2 bSkillUseSP,"CG_MOONLIT",20; },{},{}
 1991,Ru_Blue_Whip,Blue Whip,5,10,,1500,180,,2,1,0x00080000,63,0,2,3,100,1,14,{ bonus bDex,5; bonus bVit,5; },{},{}
 1992,Ru_Gold_Whip,Ru Gold Whip,5,0,,1500,180,,2,2,0x00080000,56,2,2,3,120,1,14,{ bonus bDex,8; bonus bVit,8; },{},{}
 1994,Infinity_Whip,Infinity Whip,5,10,,500,150,,2,1,0x00080000,56,0,2,4,100,1,14,{},{},{}
@@ -1404,7 +1404,7 @@
 2196,White_Gold_Shield,White Gold Shield,4,0,,1800,,140,,1,0xFFFFFFFF,63,2,32,,,1,4,{ autobonus2 "{ bonus bMagicDamageReturn,20; }",100,2000,BF_MAGIC; /* Confirm: Success rate? */ },{},{}
 2198,Lapine_Shield,Lapine Shield,4,0,,1000,,25,,1,0xFFFFFFFF,63,2,32,,100,1,3,{ bonus bMdef,10; if (getrefine() > 7) { bonus bMatk,20; } },{},{}
 // GM Shield
-2199,Ahura_Mazda,Ahura Mazdah,4,1,,10,,10000,,0,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; bonus2 bSubRace,RC_Player,95; skill "CR_FULLPROTECTION",5; skill "WZ_ESTIMATION",1; skill "ST_FULLSTRIP",5; skill "HW_MAGICPOWER",10; skill "ECL_SNOWFLIP",1; skill "ECL_PEONYMAMY",1; skill "ECL_SADAGUI",1; skill "ECL_SEQUOIADUST",1; bonus bMaxHPrate,200; bonus bNoKnockback; bonus bDelayRate,-20; bonus bSpeedRate,25; bonus bIntravision; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+2199,Ahura_Mazda,Ahura Mazdah,4,1,,10,,10000,,0,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; bonus2 bSubRace,RC_Player,95; skill "CR_FULLPROTECTION",5; skill "WZ_ESTIMATION",1; skill "ST_FULLSTRIP",5; skill "HW_MAGICPOWER",10; skill "ECL_SNOWFLIP",1; skill "ECL_PEONYMAMY",1; skill "ECL_SADAGUI",1; skill "ECL_SEQUOIADUST",1; bonus bMaxHPrate,200; bonus bNoKnockback; bonus bDelayRate,-20; bonus bSpeedRate,25; bonus bIntravision; bonus bNoWalkDelay; },{},{}
 //===================================================================
 // Headgears
 //===================================================================
@@ -2313,7 +2313,7 @@
 4120,Petit__Card,Sky Petite Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Dragon,30; },{},{}
 4121,Phreeoni_Card,Phreeoni Card,6,20,,10,,,,,,,,2,,,,,{ bonus bHit,100; },{},{}
 4122,Deviruchi_Card,Deviruchi Card,6,20,,10,,,,,,,,769,,,,,{ bonus bStr,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
-4123,Eddga_Card,Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,-25; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+4123,Eddga_Card,Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,-25; bonus bNoWalkDelay; },{},{}
 4124,Medusa_Card,Medusa Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Demon,15; bonus2 bResEff,Eff_Stone,10000; },{},{}
 4125,Deviace_Card,Deviace Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bAddRace,RC_Brute,7; bonus2 bAddRace,RC_Plant,7; bonus2 bAddRace,RC_Insect,7; },{},{}
 4126,Minorous_Card,Minorous Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddSize,Size_Large,15; bonus bBaseAtk,5; },{},{}
@@ -2361,7 +2361,7 @@
 4168,Dark_Lord_Card,Dark Lord Card,6,20,,10,,,,,,,,64,,,,,{ bonus3 bAutoSpellWhenHit,"WZ_METEOR",5,100; },{},{}
 4169,Dark_Illusion_Card,Dark Illusion Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bVariableCastrate,-10; },{},{}
 4170,Dark_Frame_Card,Dark Frame Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Stone,600; },{},{}
-4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
+4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bSPVanishRate,50,10,BF_WEAPON|BF_MAGIC|BF_MISC; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
 4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPDrainValue,-1; },{},{}
 4173,Demon_Pungus_Card,Demon Pungus Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; },{},{}
 4174,Deviling_Card,Deviling Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50; },{},{}
@@ -2694,7 +2694,7 @@
 4501,Sealed_B_Magaleta_Card,Sealed High Priest Card,6,20,,10,,,,,,,,16,,,,,{ bonus5 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,((getrefine()>14)?35:25),BF_WEAPON|BF_MAGIC,0; },{},{}
 4502,Sealed_B_Harword_Card,Sealed MasterSmith Card,6,20,,10,,,,,,,,2,,,,,{ .@r = getrefine(); bonus bBreakWeaponRate,(.@r>14?800:500); bonus bBreakArmorRate,(.@r>14?600:500); },{},{}
 4503,Sealed_Apocalips_H_Card,Sealed Vesper Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDex,2; bonus2 bIgnoreMdefClassRate,Class_Boss,((getrefine()>14)?25:15); },{},{}
-4504,Sealed_Eddga_Card,Sealed Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,((getrefine()>14)?-35:-50); },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+4504,Sealed_Eddga_Card,Sealed Eddga Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,((getrefine()>14)?-35:-50); bonus bNoWalkDelay; },{},{}
 4505,Scaraba_Card,Scaraba Card,6,20,,10,,,,,,,,136,,,,,{ bonus bMatk,20; bonus bMaxSPrate,-1; },{},{}
 4506,Dolomedes_Card,Dolomedes Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDex,2; if(BaseClass==Job_Archer){ bonus bDex,getrefine()/3; } },{},{}
 4507,Q_Scaraba_Card,Queen Scaraba Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,RC2_SCARABA,30; bonus2 bAddMonsterDropItem,12806,30; },{},{}
@@ -3069,7 +3069,7 @@
 4890,Mdef1,MDEF+1,6,10,,,,,,,,,,,,,,,{ bonus bMdef,1; },{},{}
 4891,Mdef3,MDEF+3,6,10,,,,,,,,,,,,,,,{ bonus bMdef,3; },{},{}
 4892,Mdef5,MDEF+5,6,10,,,,,,,,,,,,,,,{ bonus bMdef,5; },{},{}
-4893,Def15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bMdef,15; },{},{}
+4893,Def15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bDef,15; },{},{}
 4894,Atk4p,ATK + 4%,6,10,,,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,4; },{},{}
 4895,Atk5p,ATK + 5%,6,10,,,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,5; },{},{}
 4896,Matk2p,MATK + 2%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{}
@@ -5999,11 +5999,54 @@
 9060,Brownie_Egg,Brownie Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9061,Marin_Egg,Marin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9062,Novice_Poring_Egg,Novice Poring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9063,Woodie_Egg,Woodie Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9064,Elephant_Egg,Elephant Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9065,Gorilla_Egg,Gorilla Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9066,Lion_Egg,Lion Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9067,Rhino_Egg,Rhino Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9068,Blue_Unicorn_Egg,Blue Unicorn Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9069,Mastering_Egg,Mastering Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9070,Savage_Egg,Savage Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9071,Grand_Peco_Peco_Egg,Grand Peco Peco Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9072,Orc_Hero_Egg,Orc Hero Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9073,Orc_Lord_Egg,Orc Lord Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9074,Rubylit_Egg,Rubylit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9075,Sapphilit_Egg,Sapphilit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9076,Emelit_Egg,Emelit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9077,Topalit_Egg,Topalit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9078,Amelit_Egg,Amelit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9079,Mythlit_Egg,Mythlit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9080,Tamadora_Egg,Tamadora Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+
 9087,High_Orc_Egg,High Orc Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9088,Angeling_Egg,Angeling Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9089,Am_Mut_Egg,Am Mut Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9090,Little_Isis_Egg,Little Isis Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9091,Choco_Egg,Choco Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9092,Eggring_Egg,Eggring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9093,Hyegun_Egg,Hyegun Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9094,Dr_Lunatic_Egg,Leaf Lunatic Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9095,Nine_Tail_Egg,Nine Tail Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9096,Cat_o_Nine_Tail_Egg,Cat o Nine Tail Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9097,Diabolic_2_Egg,Diabolic Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9098,Fire_Deleter_Egg,Fire Deleter Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9099,Teddy_Bear_Egg,Teddy Bear Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9100,Gremlin_Egg,Gremlin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9101,Scatleton_Egg,Scatleton Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9102,Mummy_Egg,Mummy Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9103,Willow_Egg,Willow Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9104,Roween_Egg,Roween Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9105,Hodremlin_Egg,Hodremlin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9106,Metaller_Egg,Metaller Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9107,Ancient_Mummy_Egg,Ancient Mummy Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9108,Xm_Teddy_Bear_Egg,Xmas Teddy Bear Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9109,Sweet_Drops_Egg,Sweet Drops Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+
+9111,Phreeoni_Egg,Phreeoni Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9112,Moonlight_Egg,Moonlight Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9113,Skelion_Egg,Skelion Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9114,Pouring_Egg,Pouring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9115,Bacsojin2_Egg_,Bacsojin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 //===================================================================
 // Pet Accessories
 //===================================================================
@@ -6046,6 +6089,9 @@
 10037,Black_Butterfly_Mask,Black Butterfly Mask,8,20,,0,,,,,,,,,,,,,{},{},{}
 10038,Horn_Protector,Horn Barrier,8,20,,0,,,,,,,,,,,,,{},{},{}
 10039,Tw_Backpack,Tw Backpack,8,20,,0,,,,,,,,,,,,,{},{},{}
+10040,Red_Bell_Necklace,Red Bell Necklace,8,20,,0,,,,,,,,,,,,,{},{},{}
+10041,Shiny_Star_Button,Shiny Star Button,8,20,,0,,,,,,,,,,,,,{},{},{}
+10042,Dark_Mane,Dark Mane,8,20,,0,,,,,,,,,,,,,{},{},{}
 //===================================================================
 // Misc "Etc" Books
 //===================================================================
@@ -6626,7 +6672,7 @@
 12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,63,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,63,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; },{},{}
 12398,PCBang_Gift_Box,PCRoom Gift Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,63,2,,,,,,{ Zeny += 1000000; },{},{}
 12400,Water_Of_Blessing_,Water Of Blessing,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCINT,300000,40; },{},{}
 12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 5,5; },{},{}
@@ -7052,8 +7098,8 @@
 12814,Slapping_Herb,Slapping Herb,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "ECL_SADAGUI",1; },{},{}
 12815,Yggdrasil_Dust,Yggdrasil Dust,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "ECL_SEQUOIADUST",1; },{},{}
 12816,Old_Ore_Box_,Old Ore Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,60,,,{},{},{}
-12817,Old_Card_Album_,Old Card Album,2,0,,0,,,,,0xFFFFFFFF,63,2,,,80,,,{},{},{}
-12818,High_Weapon_Box_,High Weapon Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,100,,,{ getrandgroupitem(IG_Advanced_Weapons_Box,1); },{},{}
+12817,Old_Card_Album_,Old Card Album,2,0,,0,,,,,0xFFFFFFFF,63,2,,,80,,,{ getrandgroupitem(IG_CardAlbum,1); getitem 12818,1; },{},{}
+12818,High_Weapon_Box_,High Weapon Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,100,,,{ getrandgroupitem(IG_Advanced_Weapons_Box,1); getitem 12809,1; },{},{}
 12819,Zherlthsh_Tck_Box_,Zherlthsh Tck Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,150,,,{ getitem 6184,1; },{},{}
 12820,Mao_Guai_Scroll,Mao Guai Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ mercenary_create 2348,1800000; },{},{}
 12821,Loli_Ruri_Scroll,Loli Ruri Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ mercenary_create 2349,1800000; },{},{}
@@ -7335,9 +7381,9 @@
 13117,TE_Woe_Pistol,TE Woe Pistol,5,0,,0,60,,7,0,0x41000000,63,2,34,3,40,1,17,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Curse,3000; },{},{}
 13118,Tiny_Flame,Fading Flame,5,1,,100,0,,7,0,0x41000000,63,2,34,1,1,1,17,{},{},{}
 13119,Freedom_Flame,Freedom Flame,5,1,,100,100,,7,2,0x41000000,63,2,34,3,99,1,17,{},{},{}
-13120,Heaven's_Feather_and_Hell's_Fire,Heaven's Feather & Hell's Fire,5,1250000,,800,150,,9,1,0x41000000,63,2,34,3,99,1,17,{ bonus2 bSkillAtk,"GS_DESPERADO",20; bonus2 bSkillAtk,"RL_FALLEN_ANGEL",20; },{},{}
-13122,Altea_and_Ares,Altea & Ares,5,1450000,,1000,200,,9,0,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
-13124,Altea_and_Ares_,Altea & Ares,5,1450000,,1000,200,,9,1,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
+13120,H_FEATHER_H_FIRE,Heaven's Feather & Hell's Fire,5,1200000,,800,150,,9,1,0x41000000,63,2,34,3,99,1,17,{ bonus2 bSkillAtk,"GS_DESPERADO",20; bonus2 bSkillAtk,"RL_FALLEN_ANGEL",20; },{},{}
+13122,ALTAIR_ARES,Altair & Ares,5,1450000,,1000,200,,9,0,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
+13124,ALTAIR_ARES_,Altair & Ares,5,1450000,,1000,200,,9,1,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
 13125,Metal_Revolver,Metal Revolver,5,0,,0,30,,7,1,0x41000000,63,2,34,3,1,1,17,{ bonus bBaseAtk,getrefine(); bonus bLongAtkRate,1; if (BaseLevel >= 20 && BaseLevel <= 120) { bonus bBaseAtk,3*(BaseLevel/10); } },{},{}
 13126,Infinity_Pistol,Infinity Pistol,5,10,,500,175,,7,1,0x40000000,63,2,34,4,100,0,17,{},{},{}
 13127,Crimson_Revolver,Crimson Revolver,5,20,,1000,100,,7,2,0x41000000,63,2,34,3,70,1,17,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{}
@@ -7458,12 +7504,12 @@
 13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_end SC_BLEEDING; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_POISON; sc_end SC_ORCISH; sc_end SC_CHANGEUNDEAD; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_DPOISON; itemheal 500,0; },{},{}
 13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_MUSTLE_M,500000,5; },{},{}
 13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{}
-13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{}
-13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{}
-13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_PROMOTE_HEALTH_RESERCH,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{}
-13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{}
-13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)); percentheal 0,4; },{},{}
-13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_ENERGY_DRINK_RESERCH,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{}
+13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
+13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ /* Item bonus in source because of BaseLevel check */ },{},{}
 13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; itemheal 1000,0; },{},{}
 13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start2 SC_VITATA_500,500000,20,5; itemheal 0,200; },{},{}
 13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{}
@@ -7525,7 +7571,7 @@
 13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,63,2,2,1,0,0,2,{ bonus2 bAddClass,Class_All,50; },{},{}
 13407,Nagan_C,Refined Nagan,5,1,,0,148,,1,0,0x000654E2,63,2,2,4,0,0,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,40; bonus2 bAddRace,RC_Player,40; },{},{}
 13408,Fire_Brand_C,Refined Fireblend,5,1,,0,120,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bInt,2; skill "MG_FIREBOLT",5; bonus3 bAutoSpell,"MG_FIREBOLT",5,100; },{},{}
-13409,Immaterial_Sword_C,Refined Immaterial Sword,5,1,,0,160,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,80,45; bonus bUnbreakableWeapon; },{},{}
+13409,Immaterial_Sword_C,Refined Immaterial Sword,5,1,,0,160,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus3 bSPVanishRate,80,45,BF_WEAPON|BF_MAGIC|BF_MISC; bonus bUnbreakableWeapon; },{},{}
 13410,BF_Sword1,Valorous Gladiator Blade,5,20,,0,115,,1,0,0x000654E3,63,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; },{},{}
 13411,BF_Sword2,Brave Gladiator Blade,5,20,,0,115:74,,1,0,0x000654E3,63,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bMatkRate,10; bonus bUnbreakableWeapon; },{},{}
 13412,Twin_Edge_B,Twin Edge of Naght Sieger,5,20,,1500,150,,1,3,0x000654E2,18,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Water; skill "MG_FROSTDIVER",5; autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",50,5000; },{},{}
@@ -7535,7 +7581,7 @@
 13416,Krieger_Onehand_Sword1,Glorious Flamberge,5,20,,0,130,,1,0,0x000654E3,63,2,2,4,80,1,2,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; .@r = getrefine(); if(.@r>5) { bonus2 bAddRace,RC_DemiHuman,pow(min(14,.@r)-4,2); bonus2 bAddRace,RC_Player,pow(min(14,.@r)-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(.@r>6) bonus bAspdRate,5; if(.@r>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
 13417,Krieger_Onehand_Sword2,Glorious Rapier,5,20,,0,130:80,,1,0,0x000654E3,63,2,2,4,80,1,2,{ .@r = getrefine(); bonus bInt,.@r-5; bonus bUnbreakableWeapon; if(.@r>5) bonus bUseSPrate,-10; if(.@r>8) bonus bInt,5; },{},{}
 13418,Krieger_Onehand_Sword3,Glorious Holy Avenger,5,20,,0,130:80,,1,0,0x000444A2,63,2,2,4,80,1,2,{ .@r = getrefine(); bonus bInt,.@r-5; bonus bUnbreakableWeapon; if(.@r>5) bonus bUseSPrate,-10; if(.@r>8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXAETERNA",1,1000; if(.@r>9) bonus bInt,5; },{},{}
-13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,63,2,2,3,0,0,2,{ bonus2 bAtkEle,Ele_Undead,40; bonus2 bMagicAddEle,Ele_Undead,40; },{},{}
+13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,63,2,2,3,0,0,2,{ bonus2 bAddEle,Ele_Undead,40; bonus2 bMagicAddEle,Ele_Undead,40; },{},{}
 13420,Honglyun's_Sword,Honglyun's Sword,5,20,,1200,160,,1,1,0x000654E2,63,2,2,4,70,1,2,{ bonus bAtkEle,Ele_Fire; bonus bStr,2; bonus bInt,2; bonus3 bAutoSpell,"WZ_METEOR",1,5; },{},{}
 13421,Ruber,Ruber,5,20,,1500,170,,1,1,0x000444A2,18,2,2,3,50,1,2,{ autobonus "{ bonus2 bSkillAtk,\"KN_BOWLINGBASH\",20; bonus2 bSkillAtk,\"SM_BASH\",20; }",5,15000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
 13422,Flamberge_C,Flamberge,5,0,,0,185,,1,0,0x00004080,63,2,2,3,1,0,2,{ bonus bUnbreakableWeapon; bonus2 bAddSize,Size_All,40; },{},{}
@@ -8557,7 +8603,7 @@
 14583,WOB_Schwaltz,Green Butterfly Wing,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashCity",2; },{},{}
 14584,WOB_Rachel,Red Butterfly Wing,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashCity",3; },{},{}
 14585,WOB_Local,Blue Butterfly Wing,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashCity",4; },{},{}
-14586,Spark_Candy,Jumping Candy,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_HASTEUP; bonus_script "{ bonus2 bHPLossRate,100,10000; bonus bBaseAtk,20; bonus bAspdRate,25; /*EFFECTEndure 9999 100*/ }",60,0,0,EFST_STEAMPACK; itemskill "SM_ENDURE",10; },{},{}
+14586,Spark_Candy,Jumping Candy,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_HASTEUP; bonus_script "{ bonus2 bHPLossRate,100,10000; bonus bBaseAtk,20; bonus bAspdRate,25; bonus bNoWalkDelay; }",60,0,0,EFST_STEAMPACK; },{},{}
 14587,Repair_Scroll_,Equipment Repair Spell Book,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "BS_REPAIRWEAPON",1; },{},{}
 14588,Pty_Blessing_Scroll,Party Blessing 10 Scroll,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "CASH_BLESSING",10; },{},{}
 14589,Pty_Inc_Agi_Scroll,Party Increase Agi 10 Scroll,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "CASH_INCAGI",10; },{},{}
@@ -8735,7 +8781,7 @@
 15111,Upgrade_Part_Plate,Reinforced Parts - Gloves,4,10,,3000,,110,,,0x00000400,56,2,16,,100,1,,{ bonus bUnbreakableArmor; bonus2 bSubSize,0,10; bonus2 bSubSize,1,10; .@r = getrefine(); if(.@r>=7){ bonus2 bSubSize,2,10; }; if(.@r>=9){ bonus2 bSubSize,0,5; bonus2 bSubSize,1,5; } },{},{}
 15116,Airship_Armor,Airship's Armor,4,10,,700,,100,,0,0xFFFFFFFF,63,2,16,,125,0,,{ bonus bMaxHP,1000; bonus bMaxSP,100; bonus bMdef,10; bonus bAllStats,1; },{},{}
 15117,Felock_Armor,Felrock's Armor,4,10,,750,,70,,0,0xFFFFFFFF,63,2,16,,125,1,,{ bonus bMaxHP,500; bonus bMaxSP,50; bonus bMdef,10; bonus bAllStats,1; .@r = getrefine(); if(.@r>=7) { bonus bMaxHP,500; bonus bMaxSP,50; } if(.@r>=9) { bonus bMaxHP,200; bonus bMaxSP,20; } if(.@r>=12) { bonus bMaxHP,300; bonus bMaxSP,30; } },{},{}
-15121,Robe_Of_Sarah,Sarah Combat Robe,4,10,,800,,35,,1,0xFFFFFFFF,63,2,16,,145,1,,{ /*TODO: Confirm the real rate and additional MAtk*/ .@r = getrefine(); autobonus "{ bonus bMatk,20; }",100,(10+((.@r) ? .@r*8 : 0))*1000,BF_MAGIC;},{},{}
+15121,Robe_Of_Sarah,Sarah's Battle Robe,4,10,,800,,35,,1,0xFFFFFFFF,63,2,16,,145,1,,{ autobonus "{ bonus bMatk,getrefine()*8; }",3,10000,BF_MAGIC; },{},{}
 15123,Whikebain_Suit,Whikebain Suit,4,0,,900,,56,,1,0x00001000,56,2,16,,105,1,,{ .@r = getrefine(); bonus bCritAtkRate,(.@r>=7)?(6):((.@r>=5)?(4):(0)); bonus3 bAutoSpell,"DC_WINKCHARM",1,10; /* Confirm: Success rate */ },{},{}
 15126,Female_Poring_Balloon,Private Doram Suits,4,20,,700,,80,,1,0x80000000,7,2,16,,100,1,,{ bonus bMaxHP,500; bonus bMaxSP,100; .@r = getrefine()/3; bonus bDex,.@r; bonus bInt,.@r; },{},{}
 15128,Excelion_Suit,Excelion Suit,4,20,,1000,,100,,0,0xFFFFFFFF,63,2,16,,99,1,,{ bonus bVit,6 + (BaseLevel > 129 ? 4 : 0); bonus bMaxHPrate,(getrefine() / 3) * 4; bonus bUnbreakableArmor; },{},{}
@@ -9304,7 +9350,7 @@
 17158,Flame_Gemstone_Box,Flame Gemstone Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 6114,10; },{},{}
 17159,Change_Name_Card_Box,Name Change Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 17160,Character_Name_Change_Card_Box,Character Name Change Card Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-17162,Boarding_Halter_Box7,Boarding Halter Box7,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+17162,Boarding_Halter_Box7,Boarding Halter Box7,18,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ rentitem 12622,604800; },{},{}
 17165,Challenge_Kit,Challenge Kit,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Challenge_Kit); /*getitem Blessing_10_Scroll,20; getitem Inc_Agi_10_Scroll,20;*/ },{},{}
 17176,Boarding_Halter_Box3,Halter Lead Box[Trial],18,20,,0,,,,,0xFFFFFFFF,63,2,,,,,0,{},{},{}
 17181,Jan_Groove_Box,Jan Groove Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -9537,7 +9583,7 @@
 18110,Big_CrossBow,Giant Crossbow,5,56000,,900,160,,5,2,0x00000800,63,2,34,4,110,1,11,{ .@r = getrefine(); bonus2 bSkillAtk,"RA_ARROWSTORM",(.@r*5); bonus2 bSkillUseSP,"RA_ARROWSTORM",-(.@r*5); if(readparam(bAgi)>=120){ bonus bAspd,1; } },{},{}
 18111,Creeper_Bow,Creeper Bow,5,56000,,1500,150,,5,2,0x00080800,63,2,34,3,120,1,11,{ bonus bDex,1; bonus3 bAutoSpell,"PF_SPIDERWEB",1,200; },{},{}
 18112,Upg_Bow,Upg Bow,5,20,,600,60,,5,1,0x000A0848,63,2,34,3,1,1,11,{ .@r = getrefine(); bonus bBaseAtk,(.@r*7); bonus bLongAtkRate,(.@r*2); if(BaseJob==Job_Hunter) bonus bBaseAtk,20; if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
-18113,Velum_Arbalest,Vellum Arbalest,5,20,,1100,50,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus3 bSPVanishRaceRate,RC_Player,10000,4; bonus bAspd,-5; },{},{}
+18113,Velum_Arbalest,Vellum Arbalest,5,20,,1100,50,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus3 bSPVanishRaceRate,RC_Player,1000,4; bonus bAspd,-5; },{},{}
 18114,Velum_CrossBow,Vellum CrossBow,5,20,,1100,110,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus2 bAddRace,RC_Player,30+getrefine(); bonus2 bIgnoreDefRaceRate,RC_Player,30; },{},{}
 18115,Orc_Archer_Bow_,Orc Archer Bow,5,20,,1600,120,,5,1,0x000A0848,63,2,34,3,65,1,11,{},{},{}
 18116,Metal_Bow,Metal Bow,5,20,,0,50,,5,1,0x00080800,63,2,34,3,1,1,11,{ .@r = getrefine(); if(BaseJob==Job_Hunter && Upper!=2) bonus bBaseAtk,10; bonus bBaseAtk,(.@r*3); bonus bLongAtkRate,.@r; .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -9550,7 +9596,7 @@
 18123,Bow_Of_Storm,Bow of Storms,5,20,,1500,160,,5,1,0x00080800,63,2,34,4,130,1,11,{ bonus bLongAtkRate,30; bonus2 bSkillCooldown,"WM_SEVERE_RAINSTORM",-2000; bonus2 bSkillUseSP,"WM_SEVERE_RAINSTORM",15; },{},{}
 18124,Half_BF_Bow1,Half BF Bow1,5,20,,0,100,,5,0,0x000A0848,63,2,34,3,80,1,11,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon; },{},{}
 18125,Arcus_Daemonicus,Arcus Daemonicus,5,20,,1000,130,,5,2,0x00020008,63,2,34,4,80,1,11,{ /*Fix me: bonus2 bAddClass,Class_All,50; when equipped with shadow arrows*/ if(getrefine()>9){ bonus bAspd,1; bonus bUseSPrate,-20; } },{},{}
-18126,Ru_Blue_Bow,Blue Bow,5,10,,1200,150,,5,1,0x00000800,56,2,2,3,100,1,11,{ bonus bAgi,5; bonus bDex,5; },{},{}
+18126,Ru_Blue_Bow,Blue Bow,5,10,,1200,150,,5,1,0x00000800,56,2,34,3,100,1,11,{ bonus bAgi,5; bonus bDex,5; },{},{}
 18127,Ru_Gold_Bow,Ru Gold Bow,5,0,,1200,150,,5,2,0x00000800,56,2,34,3,120,1,11,{ bonus bAgi,8; bonus bDex,8; },{},{}
 18128,Infinity_Bow,Infinity Bow,5,20,,500,160,,5,1,0x00020800,56,2,34,4,100,1,11,{},{},{}
 18130,Crimson_Bow,Crimson Bow,5,20,,1200,120,,5,2,0x000A0848,63,2,34,3,70,1,11,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{}
@@ -9661,7 +9707,7 @@
 18590,Gemma_Hairband,Gemma Hairband,4,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,10,1,564,{ bonus bMdef,3; },{},{}
 18591,Mini_Glasses_,Mini Glasses,4,20,,100,,2,,1,0xFFFFFFFE,63,2,512,,0,0,47,{},{},{}
 18592,Nestea_Hat,Nestea Hat,4,20,,200,,5,,0,0xFFFFFFFF,63,2,256,,0,1,756,{ bonus bMdef,5; },{},{}
-18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; bonus bVariableCastRate,-3; bonus bHealPower,3; bonus bSkillUseSP,-3; .@r = getrefine(); bonus bMatkRate,(.@r>6)?(5):((.@r>4)?(4):(3)); },{},{}
+18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; bonus bVariableCastRate,-3; bonus bHealPower,3; bonus bUseSPrate,-3; .@r = getrefine(); bonus bMatkRate,(.@r>6)?(5):((.@r>4)?(4):(3)); },{},{}
 18594,Magni_Cap_,Magni Cap,4,30000,,1000,,9,,1,0xFFFFFFFE,63,2,256,,0,1,250,{ bonus bStr,2; },{},{}
 18595,Horn_Of_Ancient,Horn of Ancient,4,40,,200,,8,,1,0xFFFFFFFF,63,2,256,,50,1,757,{ bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; .@r = getrefine(); if (.@r > 6) { autobonus "{ bonus bBaseAtk,100; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } if (.@r > 8) { bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; } },{},{}
 18596,Sprout_Hat,Sprout Hat,4,20,,200,,4,,0,0xFFFFFFFF,63,2,256,,70,1,758,{ skill "WZ_HEAVENDRIVE",3; },{},{}
@@ -9902,10 +9948,10 @@
 18880,Advanced_Jao_King_Hat,Advanced Jao King Hat,4,10,,1500,,4,,1,0xFFFFFFFF,63,2,256,,175,1,996,{ bonus bAllStats,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; },{},{}
 18882,Kannam_On_Head,Kannam On Head,4,10,,200,,5,,0,0xFFFFFFFF,63,2,256,,20,1,1003,{ bonus3 bAutoSpellWhenHit,"SA_DELUGE",1,50; .@r = getrefine(); if (.@r > 3) bonus3 bAutoSpellWhenHit,"WZ_WATERBALL",.@r/3,50; },{},{}
 18885,Jejecap,Jejecap,4,0,,100,,8,,0,0xFFFFFFFF,63,2,256,,70,1,1011,{ bonus bStr,2; bonus bInt,3; bonus2 bSubRace,RC_DemiHuman,11; bonus2 bSubRace,RC_Player,11; bonus2 bAddItemHealRate,522,70; },{},{}
-18887,Aqua_Bunny_Band,Aqua Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1012,{ bonus bVit,3; bonus bMdef,5; bonus bMatkRate,2; .@r = getrefine(); if(.@r>11) bonus bVariableCastrate,-10; else if(.@r>8) { bonus bMatkRate,4; bonus bMdef,5; } },{},{}
-18888,Maroon_Bunny_Band,Maroon Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1013,{ bonus bInt,5; bonus bLuk,5; bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; .@r = getrefine(); if(.@r>11) bonus bVariableCastrate,-10; else if(.@r>8) { bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; } },{},{}
-18889,Golden_Bunny_Band,Golden Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1014,{ bonus bAgi,5; bonus bLuk,5; bonus2 bAddClass,Class_All,2; .@r = getrefine(); if(.@r>11) bonus bVariableCastrate,-10; else if(.@r>8) { bonus2 bAddClass,Class_All,4; bonus bMdef,5; } },{},{}
-18890,Gray_Bunny_Band,Gray Bunny Band,4,0,,0,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1015,{ bonus bInt,5; bonus bLuk,5; bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; .@r = getrefine(); if(.@r>11) bonus bVariableCastrate,-10; else if(.@r>8) { bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; } },{},{}
+18887,Aqua_Bunny_Band,Aqua Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1012,{ bonus bVit,3; .@r = getrefine(); bonus bMdef,(.@r>8?10:5); bonus bMatkRate,(.@r>8?6:2); if(.@r>11) bonus bFixedCastrate,-10; },{},{}
+18888,Maroon_Bunny_Band,Maroon Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1013,{ bonus bInt,5; bonus bLuk,5; .@r = getrefine(); bonus2 bAddClass,Class_All,(.@r>8?6:2); bonus bMatkRate,(.@r>8?9:5); if(.@r>11) bonus bFixedCastrate,-10; },{},{}
+18889,Golden_Bunny_Band,Golden Bunny Band,4,0,,100,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1014,{ bonus bAgi,5; bonus bLuk,5; .@r = getrefine(); bonus2 bAddClass,Class_All,(.@r>8?7:2); if(.@r>8) bonus bMatkRate,5; if(.@r>11) bonus bFixedCastrate,-10; },{},{}
+18890,Gray_Bunny_Band,Gray Bunny Band,4,0,,0,,2,,1,0xFFFFFFFF,63,2,256,,0,1,1015,{ bonus bInt,5; bonus bLuk,5; .@r = getrefine(); bonus2 bAddClass,Class_All,(.@r>8?6:2); bonus bMatkRate,(.@r>8?9:5); if(.@r>11) bonus bFixedCastrate,-10; },{},{}
 18891,Husky_Hat,Husky Hat,4,0,,500,,5,,1,0xFFFFFFFF,63,2,256,,70,1,1016,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus3 bAutoSpell,"SN_WINDWALK",5,10+(getrefine()*3); },{},{}
 18892,Ufo_Poring_Hat,Ufo Poring Hat,4,0,,1000,,5,,1,0xFFFFFFFF,63,2,256,,10,1,1017,{ bonus bMdef,5; bonus bCritical,5; bonus bFlee,5; bonus bHit,5; bonus bFlee2,5; .@r = getrefine(); if(.@r>8){ bonus bDelayRate,-5; bonus bAspdRate,5; } else if(.@r>6) bonus bVariableCastrate,-5; },{},{}
 18893,Dragon_Claw_Helm,Dragon Claw Helm,4,0,,1000,,5,,1,0xFFFFFFFF,63,2,256,,10,1,1018,{ bonus2 bSubRace,RC_DemiHuman,8; bonus2 bSubRace,RC_Player,8; bonus2 bSubRace,RC_Dragon,8; bonus2 bAddItemGroupHealRate,IG_Meat,200; if(getrefine()>11){ bonus bMaxHPrate,7; bonus bMaxSPrate,3; } },{},{}
@@ -9917,7 +9963,7 @@
 18900,Weisswurst,Weisswurst,4,20,,100,,1,,0,0xFFFFFFFF,63,2,1,,60,0,1022,{ bonus bMaxHP,50; },{},{}
 18901,Seppl_Hat,Seppl Hat,4,20,,500,,5,,1,0xFFFFFFFF,63,2,256,,60,0,1023,{ bonus bVit,3; bonus bHPrecovRate,10; },{},{}
 18902,Shovel_Hat,Shovel Hat,4,0,,500,,0,,0,0xFFFFFFFF,63,2,256,,50,0,1024,{ bonus bVit,3; bonus2 bAddMonsterDropItem,553,500; bonus2 bAddItemHealRate,553,700; },{},{}
-18908,Isabella_Red_Ear,Isabella Red Ear,4,10,,300,,8,,1,0xFFFFFFFF,63,2,256,,1,1,1030,{ bonus bStr,5; bonus bMaxHPrate,5; bonus2 bSubDefEle,Ele_Fire,10; .@r = getrefine(); if (.@r >= 9) bonus bAspd,.@r-8; },{},{}
+18908,Isabella_Red_Ear,Isabella Red Ear,4,10,,300,,8,,1,0xFFFFFFFF,63,2,256,,1,1,1030,{ bonus bStr,5; bonus bMaxHPrate,5; bonus2 bSubDefEle,Ele_Fire,10; .@r = getrefine(); if(.@r>=9) bonus bAspd,1+(.@r-9)/2; },{},{}
 18909,Isabella_Brown_Ear,Isabella Brown Ear,4,10,,300,,8,,1,0xFFFFFFFF,63,2,256,,1,1,1031,{ bonus bMaxHPrate,10; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; bonus bMatk,getrefine()*2; },{},{}
 18910,Isabella_Blue_Ear,Isabella Blue Ear,4,10,,300,,8,,1,0xFFFFFFFF,63,2,256,,1,1,1032,{ bonus bMaxHPrate,10; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bAddSize,Size_Medium,10; if(getrefine()>=12){ bonus bShortWeaponDamageReturn,5; } },{},{}
 18917,LoveLove_Balloon,LoveLove Balloon,4,10,,200,,5,,0,0xFFFFFFFF,63,2,1,,1,0,1039,{ bonus bAllStats,1; bonus bUnbreakableHelm; },{},{}
@@ -9937,7 +9983,7 @@
 18949,Scroll_Of_Tsunade,Tsunade's Scroll,4,10,,100,,1,,0,0xFFFFFFFF,63,2,1,,70,,1090,{ bonus2 bSkillUseSP,"NJ_HUUJIN",-5; bonus2 bVariableCastrate,"NJ_RAIGEKISAI",-10; bonus2 bSkillAtk,"NJ_KAMAITACHI",20; },{},{}
 //
 18960,Love_Daddy_2013,Love Daddy 2013,4,10,,10,,10,,1,0xFFFFFFFF,63,2,256,,,1,1104,{ .@r = getrefine(); bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; if(readparam(bStr) >= 90){ bonus bAtk,15; if(.@r >= 9) bonus bAtk,15; } if(readparam(bInt) >= 90){ bonus bMatk,15; if(.@r >= 9) bonus bMatk,15; } if(readparam(bVit) >= 90){ bonus bMaxHP,500; if(.@r >= 9) bonus bMaxHP,500; } if(readparam(bAgi) >= 90){ bonus bAspdRate,2; if(.@r >= 9) bonus bAspdRate,3; } if(readparam(bDex) >= 90){ bonus bLongAtkRate,3; if(.@r >= 9) bonus bLongAtkRate,3; } if(readparam(bLuk) >= 90){ bonus bCritical,5; if(.@r >= 9) bonus bCritical,5; } },{},{}
-18970,Magical_Moon_Cat,Magical Moon Cat,4,20,,50,,5,,1,0xFFFFFFFF,63,2,256,,,1,1308,{ /*TODO: Enables use of Level 1 Monster's Cry*/ bonus bAllStats,3; bonus bDelayrate,-5; bonus bVariableCastrate,-5-(getrefine()/2); },{},{}
+18970,Magical_Moon_Cat,Magical Moon Cat,4,20,,50,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ skill "ALL_CATCRY",1; bonus bAllStats,3; bonus bDelayrate,-5-(getrefine()/2); bonus bVariableCastrate,-5-(getrefine()/2); },{},{}
 18971,Old_Rune_Circlet,Old Rune Circlet,4,10,,100,,10,,1,0x00000080,56,2,256,,170,1,623,{ bonus bAllStats,1; bonus bMdef,5; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bAspd,.@r/5; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"RK_IGNITIONBREAK",20*.@r/2; bonus2 bSkillAtk,"RK_HUNDREDSPEAR",15*.@r/2; },{},{}
 18972,Old_Mitra,Old Mitra,4,10,,100,,10,,1,0x00000100,56,2,256,,170,1,624,{ bonus bAllStats,1; bonus bMdef,5; .@r = getrefine(); bonus bMatk,2*.@r; bonus bBaseAtk,4*.@r; bonus bHealPower,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"AB_JUDEX",20*.@r/2; bonus2 bSkillAtk,"PR_MAGNUS",10*.@r/2; },{},{}
 18973,Old_Driver_Band_R,Old Driver Band,4,10,,100,,10,,1,0x00000400,56,2,256,,170,1,626,{ bonus bAllStats,1; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bAspd,.@r/5; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"NC_POWERSWING",20*.@r/2; bonus2 bSkillAtk,"NC_AXETORNADO",20*.@r/2; },{},{}
@@ -9989,7 +10035,7 @@
 19109,Valhalla_Idol,Valhalla Idol,4,0,,300,,2,,0,0xFFFFFFFF,63,2,512,,70,0,1423,{ bonus bMaxSP,50; bonus4 bAutoSpellWhenHit,"MG_SAFETYWALL",10,50,0; },{},{}
 19111,Laser_Of_Eagle,Laser of Eagle,4,0,,400,,5,,1,0xFFFFFFFF,63,2,256,,100,1,1424,{ bonus bDex,2; bonus bLongAtkRate,10; bonus5 bAutoSpell,"PR_LEXAETERNA",1,50,BF_LONG,1; /*TODO: Chance to transform become Shechil while attacking.*/ },{},{}
 19115,Republic_Hat,Republic Hat,4,0,,400,,3,,1,0xFFFFFFFF,63,2,256,,100,1,1458,{ .@r = getrefine(); .@val = 6; if (.@r >= 7) { .@val += 2; } if (.@r >= 9) { .@val += 4; } bonus bLongAtkRate,.@val; },{},{}
-19116,Red_Baby_Dragon,Red Baby Dragon,4,0,,700,,,1,1,0xFFFFFFFF,63,2,256,,90,1,1463,{ .@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; if (.@r>=6) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } if (.@r>=8) { bonus2 bSkillAtk,"RK_DRAGONBREATH",15; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",15; } },{},{}
+19116,Red_Baby_Dragon,Red Baby Dragon,4,0,,700,,,1,1,0xFFFFFFFF,63,2,256,,90,1,1463,{ .@r=getrefine(); bonus bMaxHPrate,5; bonus bMaxSPrate,5; bonus2 bSkillAtk,"RK_DRAGONBREATH",(.@r>=8?45:(.@r>=6?30:15)); bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",(.@r>=8?45:(.@r>=6?30:15)); },{},{}
 19117,Poring_Sunglasses_,Poring Sunglasses,4,0,,10,,0,,0,0xFFFFFFFF,63,2,512,,1,0,954,{ bonus2 bDropAddRace,RC_All,5; bonus2 bExpAddRace,RC_All,5; },{},{}
 19118,Poring_Sunglasses__,Poring Sunglasses,4,0,,10,,0,,1,0xFFFFFFFF,63,2,512,,1,0,954,{ bonus2 bDropAddRace,RC_All,4; bonus2 bExpAddRace,RC_All,4; },{},{}
 19126,Shadow_Booster_,Magical Booster,4,10,,300,,,,1,0xFFFFFFFF,63,2,512,,1,1,873,{ bonus bAspd,1; bonus bDelayrate,-1; },{},{}
@@ -10270,7 +10316,7 @@
 19743,C_Anubis_Helm,Costume Anubis Helm,4,10,,0,,,,0,0xFFFFFFFF,63,2,7168,,1,0,485,{},{},{}
 19744,C_Black_Tail_Ribbon,Costume Black Tail Ribbon,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,642,{},{},{}
 19745,C_Holy_Marching_Hat,Costume Holy Marching Hat,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,587,{},{},{}
-19746,C_Cap_Of_Blindness,Costume Executioner Hood,4,20,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,1,326,{},{},{}
+19746,C_Cap_Of_Blindness,Costume Executioner Hood,4,0,,0,,0,,0,0xFFFFFFFF,63,2,7168,,1,1,326,{},{},{}
 19747,C_Tha_Despero_Mask_,Costume Tha Despero Mask,4,20,,0,,0,,0,0xFFFFFFFF,63,2,6144,,1,1,693,{},{},{}
 19748,C_Diadem,Costume Diadem,4,20,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,1,335,{},{},{}
 19749,C_Gold_Spirit_Chain,Costume Gold Spirit Chain,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,260,{},{},{}
@@ -10292,8 +10338,14 @@
 19765,C_Wing_Angels_Ears,Costume Wing Angels Ears,4,10,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,158,{ bonus2 bExpAddRace,RC_All,10; },{},{}
 19767,C_Home_Cherry_Blossom,Costume Home Cherry Blossom,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,602,{},{},{}
 19768,C_Sakura_Coronet,Costume Sakura Coronet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,645,{},{},{}
+19769,C_Elf_Ears,Costume Elf Ears,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,405,{},{},{}
+19770,C_Sake,Costume Sake,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,,,557,{},{},{}
+19771,C_Butterfly_Hairpin,Costume Buterfly Hairpin,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,723,{},{},{}
 19772,C_Honeybee_Hat,Costume Honeybee Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,709,{},{},{}
+19773,C_Angeling_Pin,Costume Angeling Pin,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,222,{},{},{}
+19774,C_Laurel,Costume Laurel,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,261,{},{},{}
 19775,C_Marvelous_Wig,Costume Dokebi Hat,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,307,{},{},{}
+19776,C_Tomboy_Fairy,Costume Tomboy Fairy,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,998,{},{},{}
 19777,C_Twinkle_Little_Star,Costume Shiny Small Star,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1005,{},{},{}
 19778,C_King_Berry,Costume King Berry,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,968,{},{},{}
 19779,C_Persika,Costume Persika,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,659,{ bonus bAllStats,1; bonus2 bExpAddClass,Class_All,10; },{},{}
@@ -10304,19 +10356,40 @@
 19784,C_Morrigane's_Helm,Costume Morrigane's Helm,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,257,{},{},{}
 19785,C_Well_Baked_Toast,Costume Crunch Toast,4,10,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,188,{},{},{}
 19786,C_Mistress_Crown,Costume Crown of Mistress,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,165,{},{},{}
+19787,C_Devoted_Eyes,Costume Devoted Eyes,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1021,{},{},{}
+19788,C_Heart_Eyebandage,Costume Heart Eyebandage,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,779,{},{},{}
 19789,C_Sweet_Gents,Costume Sweet Gent,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,29,{},{},{}
 19790,C_Wedding_Veil,Costume Wedding Veil,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,44,{},{},{}
-19791,C_Alarm_Mask,Costume Alarm Mask,4,10,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,170,{},{},{}
-19792,C_Goblin_Mask_01,Costume Poker Face,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,171,{},{},{}
-19793,C_Goblin_Mask_02,Costume Surprised Mask,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,172,{},{},{}
-19794,C_Goblin_Mask_03,Costume Annoyed Mask,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,173,{},{},{}
+19791,C_Alarm_Mask,Costume Alarm Mask,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,170,{},{},{}
+19792,C_Goblin_Mask_01,Costume Poker Face,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,171,{},{},{}
+19793,C_Goblin_Mask_02,Costume Surprised Mask,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,172,{},{},{}
+19794,C_Goblin_Mask_03,Costume Annoyed Mask,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,173,{},{},{}
 19795,C_Lord_Circlet,Costume Grand Circlet,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,93,{},{},{}
 19796,C_Bone_Helm,Costume Bone Helm,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,103,{},{},{}
 19797,C_Apple_Of_Archer,Costume Apple of Archer,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,72,{},{},{}
-19798,C_Angry_Mouth,Costume Angry Snarl,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,194,{},{},{}
+19798,C_Angry_Mouth,Costume Angry Snarl,4,10,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,194,{},{},{}
 19799,C_Golden_Gear,Costume Golden Gear,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,30,{},{},{}
 19800,C_Carnation_Hairband,Costume Carnation Headband,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,878,{},{},{}
-19821,C_Hyegun_Hat,Costume Yao Jun,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,375,{},{},{}
+19801,C_Foxhat,Costume Foxhat,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,403,{},{},{}
+19802,C_Lazy_Ninetail,Costume Lazy Ninetail,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,296,{},{},{}
+19803,C_Windtoy_Hat,Costume Windtoy Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,456,{},{},{}
+19804,C_Red_Vane_Hairpin,Costume Red Vane Hairpin,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1044,{},{},{}
+19805,C_Taboo_Curse_Scroll,Costume Curse Scroll,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,0,1045,{},{},{}
+19806,C_Full_Bloom_Hairpin,Costume Bloom Hairpin,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1046,{},{},{}
+19807,C_Majestihelm,Costume Majestihelm,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1047,{},{},{}
+19808,C_Blazing_Sun,Costume Blazing Sun,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,654,{},{},{}
+19810,C_Ifrit_Ear,Costume Ifrit Ear,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,422,{},{},{}
+19811,C_Beer_Hat,Costume Beer Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,418,{},{},{}
+19812,C_Big_Hibiscus,Costume Big Hibiscus,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,333,{},{},{}
+19813,C_Icecream_Hat,Costume Icecream Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,488,{},{},{}
+19814,C_Bright_Wig,Costume Bright Wig,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,306,{},{},{}
+19815,C_Lolita_Ten_Gallon_Hat,Costume Lolita Ten Gallon Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1048,{},{},{}
+19816,C_Pecopeco_Cap,Costume Pecopeco Cap,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1049,{},{},{}
+19817,C_Ifrits_Breath,Costume Ifrits Breath,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1050,{},{},{}
+19818,C_Drooping_Morooc_Minion,Costume Drooping Morooc Minion,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,600,{},{},{}
+19819,C_Gang_Doogun,Costume Gang Doogun,4,0,,0,,,,0,0xFFFFFFFF,63,2,3072,,1,0,491,{},{},{}
+19821,C_Hyegun_Hat,Costume Yao Jun,4,20,,0,,0,,0,0xFFFFFFFF,63,2,7168,,1,0,375,{},{},{}
+19822,C_Yellow_Doogun,Costume Yellow Doogun,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,309,{},{},{}
 19823,C_White_Cat_Hood,Costume White Cat Hood,4,20,,10,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,1052,{},{},{}
 19824,C_Evil_Druid_Hat,Costume Evil Druid Hat,4,0,,0,,,,,0xFFFFFFFF,63,2,1024,,1,,1053,{},{},{}
 19825,C_Vicious_Stop_Bandage,Costume Vicious Stop Bandage,4,0,,0,,,,,0xFFFFFFFF,63,2,1024,,1,,1054,{},{},{}
@@ -10331,13 +10404,14 @@
 19834,C_Baseball_Cap,Costume Baseball Cap,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,216,{},{},{}
 19835,C_Lif_Doll_Hat,Costume Lif Doll Hat,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,297,{},{},{}
 19836,C_L_Magestic_Goat,Costume Majestic Goat,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,380,{},{},{}
+19837,C_Asara_Fairy,Costume Asara Fairy Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,3072,,1,0,492,{},{},{}
 19839,C_Vanilmirth_Hat,Costume Vanilmirth Hat,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,317,{},{},{}
 19841,C_Dragonhelm_Copper,Costume Dragon Helm Copper,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,454,{},{},{}
 19842,C_Puppy_Hat,Costume Puppy Hat,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,234,{},{},{}
 19843,C_Cat_Hairband,Costume Kitty Band,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,2,{},{},{}
 19844,C_Turban,Costume Turban,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,7,{},{},{}
 19845,C_Hair_Protector,Costume Bao Bao,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,127,{},{},{}
-19846,C_Opera_Ghost_Mask,Costume Opera Masque,4,20,,10,,0,,0,0xFFFFFFFF,63,2,6144,,1,0,128,{},{},{}
+19846,C_Opera_Ghost_Mask,Costume Opera Masque,4,20,,10,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,128,{},{},{}
 19847,C_Big_Sis_Ribbon,Costume Big Ribbon,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,28,{},{},{}
 19848,C_Angeling_Hat,Costume Angeling Hat,4,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,204,{},{},{}
 19849,C_Munak_Turban,Costume Munak Hat,4,20,,10,,0,,0,0xFFFFFFFF,63,2,7168,,1,0,51,{},{},{}
@@ -10451,7 +10525,7 @@
 20012,C_Double_Horn_Helm,Costume Double Horn Helm,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1200,{},{},{}
 20013,C_Chef_Hat,Costume Chef Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,111,{},{},{}
 20014,Lincoln_Hat,Costume Lincoln Hat,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,1204,{},{},{}
-20015,Lincoln_Beard,Costume Lincoln Beard,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,1205,{},{},{}
+20015,Lincoln_Beard,Costume Lincoln Beard,4,10,,0,,,,0,0xFFFFFFFF,63,2,4096,,,1,1205,{},{},{}
 20016,Lobster_Hat,Costume Cool Dinner Hat,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,1206,{},{},{}
 20017,C_Marionette_Doll,Costume Marionette Doll,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,212,{},{},{}
 20018,C_Holo_Ear,Costume Holo Ear,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,,1,1208,{},{},{}
@@ -10810,7 +10884,7 @@
 20393,C_Schmitz_Helm,Costume Schmitz Helm,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,634,{},{},{}
 20394,C_Pumpkin_Toque,Costume Pumpkin Toque,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1411,{},{},{}
 20396,C_Green_Hat,Costume Green Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,939,{},{},{}
-20397,C_Jakk,Jack,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,1415,{},{},{}
+20397,C_Jakk,Jack,4,0,,0,,,,0,0xFFFFFFFF,63,2,6144,,1,1,1415,{ autobonus2 "{}",31,10000,BF_WEAPON|BF_MAGIC,"{ active_transform 1130,10000; specialeffect2 372; /*Confirm Special Effect*/ }"; },{},{}
 20398,C_Niffleheim_Bunny_Hat,Costume Niffleheim Bunny Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1285,{},{},{}
 20399,C_Crow_Tengu_Mask,Costume Crow Tengu Mask,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1287,{},{},{}
 20400,C_Ichthys_Rosario,Costume Ichthys Rosario,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,1,1028,{},{},{}
@@ -10896,6 +10970,7 @@
 20516,C_Wings_of_Michael,Costume Wings of Michael,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,24,{},{},{}
 20600,Fantastic_Aura,Fantastic Aura,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,0,{ /*TODO: View ID*/ bonus bUnbreakableHelm; },{},{}
 20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableGarment; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); } },{},{}
+20701,Sol_Manteau,Sol Manteau,4,0,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{ bonus2 bSubEle,Ele_Earth,5; bonus2 bSubRace,RC_Fish,-5; },{},{}
 20702,TE_Woe_Muffler,TE Woe Muffler,4,0,,0,,5,,0,0xFFFFFFFF,63,2,4,,40,1,,{ bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
 20703,TE_Woe_Manteau,TE Woe Manteau,4,0,,0,,10,,0,0x000444A2,63,2,4,,40,1,,{ bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
 20704,TE_Woe_Magic_Manteau,TE Woe Magic Manteau,4,0,,0,,5,,0,0x00818315,63,2,4,,40,1,,{ bonus2 bMagicAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,25; },{},{}
@@ -10963,7 +11038,7 @@
 //===================================================================
 21000,Upg_Twohand_Sword,Upg Two-Handed Sword,5,20,,1500,100,,1,1,0x00004082,63,2,34,3,1,1,3,{ .@r = getrefine(); bonus bBaseAtk,(.@r*12); bonus bMatk,(.@r*5); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
 21001,Velum_Claymore,Vellum Claymore,5,20,,3500,260,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_Player,30; .@r = getrefine(); if(.@r>=6) { bonus2 bAddRace,RC_Player,40; } if(.@r>=9) { autobonus2 "{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }",6000,2000,BF_WEAPON,"{ specialeffect2 EF_REFLECTSHIELD; }"; } },{},{}
-21002,Velum_Katzbalger,Vellum Katzbalger,5,20,,2500,100,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus3 bHPVanishRaceRate,RC_Player,10000,8; },{},{}
+21002,Velum_Katzbalger,Vellum Katzbalger,5,20,,2500,100,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus3 bHPVanishRaceRate,RC_Player,1000,8; },{},{}
 21003,Muramasa_,Muramasa,5,20,,1000,155,,1,2,0x00004082,63,2,34,4,48,1,3,{ bonus bCritical,30; bonus bAspdRate,8; bonus2 bAddEff2,Eff_Curse,10; },{},{}
 21004,Alca_Bringer_,Alca Bringer,5,20,,3400,280,,2,2,0x00004082,63,2,34,3,100,1,3,{},{},{}
 21005,Metal_Two_Hand_Sword,Metal Two Hand Sword,5,20,,0,95,,1,1,0x00004082,63,2,34,3,1,1,3,{ .@r = getrefine(); bonus bBaseAtk,(.@r*6); bonus bMatk,(.@r*2); .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -11172,7 +11247,7 @@
 22693,Record_Fragment3,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",217,346; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 3; } },{},{}
 22694,Record_Fragment4,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",273,235; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 4; } },{},{}
 22695,Record_Fragment5,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",275,290; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 5; } },{},{}
-22699,Test_Reagent,Test Reagent,3,10,,0,,,,,,,,,,,,,{},{},{}
+22699,Test_Reagent,Test Reagent,2,,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bFlee,100;",5,9; sc_start SC_BLIND,5000,0,10000,0; },{},{}
 22700,Jumping_Support_Box,Jumping Support Box,18,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ /*TODO: getitem 12529,1; getitem 12323,200; getitem 12324,50; and 5 boxes that containing quivers + oridecons*/ },{},{}
 22702,STR_Soul_Potion,STR Reduction Potion,11,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashReduceStat",bStr,-1,22702; },{},{}
 22703,AGI_Soul_Potion,STR Reduction Potion,11,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashReduceStat",bAgi,-1,22703; },{},{}
@@ -11289,8 +11364,9 @@
 //
 23012,S_Small_Mana_Potion,[Sale] Small Mana Potion,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus2 bRegenPercentSP,5,5000;",600,9; /* fix me: unknown flag and specialeffect ; disabled when LK_BERSERK */ },{},{}
 23016,Cursed_Fragment,Cursed Fragment,2,1,,1,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc("F_Cursed_Fragment"); },{},{}
-23038,S_Slim_White_Box,[Sale] Slim White Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 547,200; },{},{}
-23043,S_Seed_Of_Yggdrasil_Box,[Sale] Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 608,30; },{},{}
+23038,S_Slim_White_Box,[Sale] Slim White Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11573,200; },{},{}
+23042,S_Seed_Of_Yggdrasil,[NotForSale]Yggdrasil Seed,0,0,,300,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 50,50; },{},{}
+23043,S_Seed_Of_Yggdrasil_Box,[Sale] Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 23042,30; },{},{}
 23046,S_Mystic_Powder,[Sale] Mystic Powder,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bFlee,20; bonus bLuk,10;",300,9; /* fix me: unknown flag and specialeffect */ },{},{}
 23047,S_Blessing_Tyr,[Sale] Blessing of Tyr,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_FLEEFOOD,300000,30; sc_start SC_HITFOOD,300000,30; sc_start SC_ATKPOTION,300000,20; sc_start SC_MATKPOTION,300000,20; },{},{}
 23048,S_Resilience_Potion,[Sale] Resilience Enhancement Potion,2,,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bAddItemHealRate,20;",1800,9; /* fix me: unknown flag and specialeffect */ },{},{}
@@ -11305,6 +11381,9 @@
 23126,Bullet_Case_Poison,Poison Bullet Cartridge,2,10,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 13231,500; },{},{}
 23127,Bullet_Case_Blind,Blind Bullet Cartridge,2,10,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 13232,500; },{},{}
 23177,Kafra_Card_,Kafra Card,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashStore"; },{},{}
+23188,Unprocessed_Parts,Unprocessed Parts,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1632; },{},{}
+23189,Small_Needle_Kit,Small Needle Kit,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1622; },{},{}
+23187,Sap_Liquid,Sap Liquid,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1180; },{},{}
 23191,Varetyr_Spear_Scroll_1_5,Level 5 Varetyr Spear,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "SO_VARETYR_SPEAR",5; },{},{}
 23192,Diamond_Dust_Scroll_1_5,Level 5 Diamond Dust,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "SO_DIAMONDDUST",5; },{},{}
 23193,Crimson_Rock_Scroll_1_5,Level 5 Crimson Rock,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "WL_CRIMSONROCK",5; },{},{}
@@ -11313,6 +11392,7 @@
 //
 23228,Hazy_Mooncake,Hazy Mooncake,0,768,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* unknown */ },{},{}
 //
+23256,Elixir_Bandages,Elixir Bandages,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1041; },{},{}
 23277,Mado_Box,Emergency Magic Gear,2,10000,,3000,,,,,0x00000400,56,2,,,100,,,{ setmadogear 1; },{},{}
 23280,N_Fly_Wing_,Novice Fly Wing,11,10,,0,,,,,0xFFFFFFFF,63,2,,,1:98,,,{ itemskill "AL_TELEPORT",1; },{},{}
 23288,Compressed_Wing_Of_Fly,Compressed Fly Wing,11,1000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AL_TELEPORT",1; },{},{}
@@ -11631,6 +11711,9 @@
 25185,Locket_Pendant,Locket Pendant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25187,Slug_Bullet,Slug Bullet,3,1200,,1200,,,,,,,,,,,,,{},{},{}
 25223,Para_Team_Coin,Eden Group Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
+25231,Suspicious_Bottle,Suspicious Bottle,3,0,,10,,,,,,,,,,,,,{},{},{}
+25232,Cheap_Lubricant,Cheap Lubricant,3,0,,10,,,,,,,,,,,,,{},{},{}
+25233,Cotton_Tufts,Cotton Tufts,3,0,,10,,,,,,,,,,,,,{},{},{}
 25238,New_Normal_Lubricant,New Normal Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25239,New_Advanced_Lubricant,New Advanced Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25246,Juice_Mix_Package,Juice Mix Package,3,0,,0,,,,,,,,,,,,,{},{},{}
@@ -11654,6 +11737,9 @@
 25283,Brown_Muffler,Brown Muffler,3,420,,10,,,,,,,,,,,,,{},{},{}
 25284,Swamp_Bug_Shell,Swamp Bug Shell,3,0,,10,,,,,,,,,,,,,{},{},{}
 25285,Brown_Rat_Tail,Brown Rat Tail,3,0,,10,,,,,,,,,,,,,{},{},{}
+25290,Sweets_Festival_Coin,Sweets Festival Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
+25375,Powerful_Soul_Essence,Powerful Soul Essence,3,0,,0,,,,,,,,,,,,,{},{},{}
+25377,Luxurious_Pet_Food,Luxurious Pet Food,3,0,,10,,,,,,,,,,,,,{},{},{}
 //
 25464,World_Moving_Rights,World Moving Rights,3,20,,0,,,,,,,,,,,,,{},{},{}
 //
@@ -11766,7 +11852,7 @@
 27148,Material_Chimera_Card,Material Chimera Card,6,20,,10,,,,,,,,136,,,,,{ bonus bFlee,(BaseLevel >= 90 ? 20 : 10); },{},{}
 27149,Heart_Hunter_Card,Heart Hunter Card,6,20,,10,,,,,,,,2,,,,,{ .@type = getiteminfo(getequipid(EQI_COMPOUND_ON),11); .@r = getrefine(); if(.@type == 17 || .@type == 18 || .@type == 21){ bonus bLongAtkRate,5+.@r+(.@r >= 10 ? 5 : 0); } },{},{}
 27150,Toxic_Enchanted_Chimera_Card,Toxic Enchanted Chimera Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHP,1000; bonus bMaxSP,200; if(getrefine() >= 12){ bonus bMaxHPrate,15; bonus bMaxSPrate,15; } },{},{}
-27151,Heart_Hunter_Evil_Card,Heart Hunter Evil Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,SC_FREEZING,1000 + (readparam(bInt) >= 110 ? 5 : 0); bonus bMdef,5; },{},{}
+27151,Heart_Hunter_Evil_Card,Heart Hunter Evil Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Freeze,1000 + (readparam(bInt) >= 110 ? 5 : 0); bonus bMdef,5; },{},{}
 27152,Cutie_Card,Cutie Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,10; .@r = getrefine()/2; bonus bAgi,.@r; bonus bAspdRate,.@r; },{},{}
 27157,Wood_Goblin_Card,Wood Goblin Card,6,20,,10,,,,,,,,16,,,,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Water,(.@r >= 9 ? 10 : 5); bonus2 bAddEle,Ele_Earth,(.@r >= 9 ? 10 : 5); bonus2 bSubDefEle,Ele_Water,-5; bonus2 bSubDefEle,Ele_Earth,-5; },{},{}
 27158,Les_Card,Les Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Wind,30; },{},{}
@@ -12071,6 +12157,7 @@
 29009,Rune_of_Vitality_Lv_1,Rune of Vitality Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,5; } if (.@r>=10) { bonus bMaxHPrate,5; } },{},{}
 29010,Rune_of_Vitality_Lv_2,Rune of Vitality Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,6; } if (.@r>=11) { bonus bVit,1; bonus bMaxHPrate,7; } },{},{}
 29011,Rune_of_Vitality_Lv_3,Rune of Vitality Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,7; } if (.@r>=12) { bonus bVit,1; bonus bMaxHPrate,8; } if (.@r>=13) { bonus bVit,1; bonus bMaxHPrate,2; } },{},{}
+29026,Def20,DEF+20,6,10,,,,,,,,,,,,,,,{ bonus bDef,20; },{},{}
 29061,Ambition1Lv,Mettle Lv. 1,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,3; bonus bHit,3; },{},{}
 29062,Ambition2Lv,Mettle Lv. 2,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,6; bonus bHit,6; },{},{}
 29063,Ambition3Lv,Mettle Lv. 3,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,9; bonus bHit,9; },{},{}

+ 2 - 1
db/re/item_delay.txt

@@ -16,7 +16,7 @@
 //        12659 cannot be used when this delay is active.
 //     Since this is optional, default is -1 will ignores the
 //     delay group and the delay will be stored in character's
-//     data that has limit set in src/map/itemdb.h as MAX_ITEMDELAYS.
+//     data that has limit set in src/map/itemdb.hpp as MAX_ITEMDELAYS.
 
 // SC_REUSE_REFRESH
 12725,120000,SC_REUSE_REFRESH	//Runstone_Nosiege
@@ -45,6 +45,7 @@
 // SC_REUSE_LIMIT_G
 608,3000,SC_REUSE_LIMIT_G	//Yggdrasil_Seed
 22559,3000,SC_REUSE_LIMIT_G	//Mock_Strawberry
+23042,3000,SC_REUSE_LIMIT_G	//S_Seed_Of_Yggdrasil
 
 // SC_REUSE_LIMIT_H
 11525,5000,SC_REUSE_LIMIT_H	//Mora_Hip_Tea

File diff ditekan karena terlalu besar
+ 264 - 116
db/re/item_trade.txt


+ 2 - 2
db/re/job_db1.txt

@@ -272,9 +272,9 @@
 // Rebellion
 4215,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Summoner
-4218,	20000,70   ,500  ,500  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
+4218,	20000,70   ,500  ,500  ,40  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,60  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,7
 // Baby Summoner
-4220,	20000,100  ,700  ,200  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
+4220,	20000,100  ,700  ,200  ,40  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,60  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,7
 // Baby Ninja
 4222,	26000,75   ,500  ,540  ,40  ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,6
 // Baby Kagerou

+ 40 - 19
db/re/mob_db.txt

@@ -118,7 +118,7 @@
 1112,DRAKE,Drake,Drake,91,804500,1,515160,417960,1,2519,1403,279,135,121,103,114,107,135,71,10,12,1,1,29,0x6283695,400,620,420,360,257580,504,5000,719,500,0,0,1127,600,1125,950,1135,150,1128,400,5019,350,985,3200,1189,100,0,0,0,0,4137,1
 1113,DROPS,Drops,Drops,2,45,1,27,20,1,12,1,16,0,8,1,1,0,6,2,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,512,800,620,20,0,0,0,0,4004,1
 1114,DUSTINESS,Dustiness,Dustiness,62,2026,1,602,678,1,166,31,69,50,46,22,46,60,68,105,10,12,0,4,44,0x2000091,150,1004,504,384,0,0,0,0,0,0,0,1057,9000,1058,500,2291,4,928,2000,1001,10,507,1200,0,0,0,0,0,0,4056,1
-1115,EDDGA,Eddga,Eddga,65,247500,1,198000,148500,1,1509,776,166,70,92,80,103,66,90,85,10,12,2,2,23,0x6283695,300,872,1344,432,99000,1029,5000,1030,1000,994,3000,1133,150,2268,250,518,10000,1258,500,1030,250,985,2300,13046,100,0,0,0,0,4123,1
+1115,EDDGA,Eddga,Eddga,65,947500,1,198000,148500,1,1509,776,166,70,92,80,103,66,90,85,10,12,2,2,23,0x6283695,300,872,1344,432,99000,1029,5000,1030,1000,994,3000,1133,150,2268,250,518,10000,1258,500,1030,250,985,2300,13046,100,0,0,0,0,4123,1
 1116,EGGYRA,Eggyra,Eggyra,53,1676,1,330,689,1,110,40,85,20,46,25,25,15,52,20,10,12,1,0,48,0x91,200,1816,816,288,0,0,0,0,0,0,0,911,1000,5015,20,7032,550,507,1000,643,300,645,250,757,57,0,0,0,0,4070,1
 1117,EVIL_DRUID,Evil Druid,Evil Druid,80,5149,1,1339,1280,1,378,68,88,45,62,32,24,45,71,5,10,12,2,1,89,0x3695,300,2276,576,336,0,0,0,0,0,0,0,2217,10,1615,1,2508,2,0,0,610,200,7478,4,509,2000,0,0,0,0,4141,1
 1118,FLORA,Flora,Flora,59,2301,1,531,597,3,163,31,99,29,49,29,35,5,42,80,10,12,2,3,22,0x84,1000,1432,432,576,0,0,0,0,0,0,0,1032,9000,2253,3,704,10,521,50,629,20,905,2000,748,1,0,0,0,0,4080,1
@@ -2796,7 +2796,7 @@
 //3633,EP16_2_VENOM_KIMERA
 //3634,MYSTCASE_GIANT
 //3635,EVENT_KOBOLD
-//3636,LITTLE_ISIS
+3636,LITTLE_ISIS,Little Isis,Little Isis,59,2092,1,531,597,1,192,229,83,5,58,43,22,5,39,15,10,12,2,6,27,0x2003095,200,1384,768,336,0,0,0,0,0,0,0,936,5335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3637,MD_SKELETON_60
 //3638,MD_SKELETON_80
 //3639,MD_SKELETON_100
@@ -2829,8 +2829,8 @@
 //3666,MD_DRAINLIAR_100
 //3667,MD_DRAINLIAR_160
 //3668,B_KIEL_
-//3669,DIABOLIC2
-//3670,DELETER_2
+3669,DIABOLIC2,Diabolic2,Diabolic2,104,10572,1,2172,1629,1,544,644,68,61,103,80,53,65,78,25,10,12,0,6,47,0x2003885,150,1080,780,180,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
+3670,DELETER_2,Deleter 2,Deleter 2,105,10000,1,2099,1574,1,510,621,114,53,98,65,49,72,57,73,10,12,1,9,43,0x308D,175,1024,624,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
 //3671,JP_MAZEMOB_01
 //3672,JP_MAZEMOB_02
 //3673,JP_MAZEMOB_03
@@ -2896,20 +2896,20 @@
 //3733,JP_ABYSS_BOSS_2
 //3734,ORC_X2016
 //3735,PORING_X2016
-3736,COWRAIDERS1,Buffalo Bandit Sharpsho,Buffalo Bandit Sharpsho,103,11819,1,9491,9169,7,509,204,98,25,51,58,49,20,86,49,10,12,2,7,43,0x3885,180,900,770,550,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,27170,1
-3737,COWRAIDERS2,Buffalo Bandit Duelist,Buffalo Bandit Duelist,101,9700,1,2121,7846,7,476,190,62,32,76,52,38,40,92,50,10,12,2,7,43,0x3885,200,1200,672,480,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,27171,1
-3738,COWRAIDERS3,Bowie Buffalo Bandit,Bowie Buffalo Bandit,107,14547,1,1807,1719,1,557,222,112,18,55,20,55,17,88,36,10,12,2,7,43,0x3885,180,800,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27172,1
-3739,COYOTE,Coyote,Coyote,110,17854,1,11111,10538,1,630,252,100,21,49,79,67,8,106,24,10,12,1,2,42,0x3881,150,759,400,420,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,27179,1
-3740,GASTER,Gaster,Gaster,141,90574,1,5080,4716,1,1494,598,191,96,70,141,12,67,128,8,10,12,1,0,45,0x3885,190,768,650,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,27178,1
+3736,COWRAIDERS1,Buffalo Bandit Sharpsho,Buffalo Bandit Sharpsho,103,11819,1,9491,9169,7,509,204,98,25,51,58,49,20,86,49,10,12,2,7,43,0x3885,180,900,770,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25279,2500,7054,1000,18145,50,27170,1
+3737,COWRAIDERS2,Buffalo Bandit Duelist,Buffalo Bandit Duelist,101,9700,1,2121,7846,7,476,190,62,32,76,52,38,40,92,50,10,12,2,7,43,0x3885,200,1200,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25278,2500,7054,1000,580,500,28721,50,13332,50,27171,1
+3738,COWRAIDERS3,Bowie Buffalo Bandit,Bowie Buffalo Bandit,107,14547,1,1807,1719,1,557,222,112,18,55,20,55,17,88,36,10,12,2,7,43,0x3885,180,800,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25283,2500,7054,1000,538,200,28608,50,27172,1
+3739,COYOTE,Coyote,Coyote,110,17854,1,11111,10538,1,630,252,100,21,49,79,67,8,106,24,10,12,1,2,42,0x3881,150,759,400,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25276,2500,7564,1500,702,500,2531,50,27179,1
+3740,GASTER,Gaster,Gaster,141,90574,1,5080,4716,1,1494,598,191,96,70,141,12,67,128,8,10,12,1,0,45,0x3885,190,768,650,0,0,0,0,0,0,0,0,0,0,25277,2500,7001,1500,6214,300,6215,300,6213,250,605,30,756,10,757,10,27178,1
 3741,MECHASPIDER,Mechaspider,Spider Chariot,158,9799123,1,3150895,2112795,1,7657,3062,394,123,116,123,154,99,217,98,10,12,2,0,40,0x6283885,250,768,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,27180,1
 3742,PURPLESTONE,Purplestone,Purple Ore,255,20,0,0,0,0,0,0,100,99,0,0,0,0,0,0,10,12,0,0,20,0x170000,2000,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
 3743,SEAANEMONE,Seaanemone,Sea Anemone,1,10,0,0,0,1,0,0,100,99,0,0,0,0,0,0,10,12,0,0,20,0x8170000,2000,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
 3744,G_COWRAIDERS1,Buffalo Bandit,Buffalo Bandit,148,135292,1,0,0,7,1566,2226,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,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
 3745,G_COWRAIDERS2,Buffalo Bandit,Buffalo Bandit,151,160515,1,0,0,7,1544,2211,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,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
 3746,G_COWRAIDERS3,Buffalo Bandit,Buffalo Bandit,152,174345,1,0,0,1,1716,2415,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,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
-3747,E_COWRAIDERS1,Elite Buffalo Bandit,Elite Buffalo Bandit,148,135292,1,7628,8077,7,1650,660,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,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,27173,1
-3748,E_COWRAIDERS2,Elite Buffalo Bandit,Elite Buffalo Bandit,151,160515,1,9597,9093,7,1667,666,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,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,27174,1
-3749,E_COWRAIDERS3,Elite Buffalo Bandit,Elite Buffalo Bandit,152,174345,1,9563,10218,1,1749,700,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,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,27175,1
+3747,E_COWRAIDERS1,Elite Buffalo Bandit,Elite Buffalo Bandit,148,135292,1,7628,8077,7,1650,660,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25280,2500,7054,2000,1944,100,18145,100,26200,50,27173,1
+3748,E_COWRAIDERS2,Elite Buffalo Bandit,Elite Buffalo Bandit,151,160515,1,9597,9093,7,1667,666,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25282,3000,7054,2000,13332,250,28721,100,27174,1
+3749,E_COWRAIDERS3,Elite Buffalo Bandit,Elite Buffalo Bandit,152,174345,1,9563,10218,1,1749,700,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,0,0,0,0,0,0,0,0,0,0,0,0,0,25281,3000,7054,2000,28608,150,11706,30,11707,30,28116,10,27175,1
 //3750,ILL_DRAINLIAR
 //3751,ILL_ZOMBIE_C
 //3752,ILL_ZOMBIE
@@ -2947,10 +2947,10 @@
 //3784,JP_E_MONSTER_71
 //3785,JP_E_MONSTER_72
 //3786,E_TURPECO
-3787,RR_ARCLOUSE,Rr Arclouse,Swamp Arclouze,106,1120,1,864,900,1,316,126,76,36,41,73,23,29,122,15,10,12,1,4,42,0x2003885,100,768,500,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,27177,1
-3788,RR_CRAMP,Rr Cramp,Brown Rat,101,988,1,681,720,1,185,74,68,42,38,43,17,15,97,30,10,12,0,2,45,0x3885,100,768,500,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,27176,1
+3787,RR_ARCLOUSE,Rr Arclouse,Swamp Arclouze,106,1120,1,864,900,1,316,126,76,36,41,73,23,29,122,15,10,12,1,4,42,0x2003885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25284,2500,938,1500,943,150,1944,50,27177,1
+3788,RR_CRAMP,Rr Cramp,Brown Rat,101,988,1,681,720,1,185,74,68,42,38,43,17,15,97,30,10,12,0,2,45,0x3885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25285,3000,517,500,528,150,26200,10,27176,1
 //3789,ESCAPED_LETTER
-//3790,SWEETS_DROPS
+3790,SWEETS_DROPS,Sweets Drops,Sweets Drops,2,45,1,27,20,1,12,13,16,0,8,1,1,0,6,2,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,512,800,620,20,0,0,0,0,0,0
 //3791,JP_E_MONSTER_73
 //3792,ILL_GAZETI
 //3793,ILL_SNOWIER
@@ -3161,6 +3161,7 @@
 //3998,AB_MOB_072
 
 // New Monster Range
+//20020,MONSTER_2ND_BEGIN
 //20021,AB_MOB_073
 //20022,AB_MOB_074
 //20023,AB_MOB_075
@@ -3228,7 +3229,19 @@
 //20085,MD_IZ_CORNUTUS
 //20086,RED_ERUMA_MJ
 //20087,SIORAVA_MJ
-
+//20088,RR_MOB_001
+//20089,RR_MOB_002
+//20090,RR_MOB_003
+//20091,RR_MOB_004
+//20092,RR_MOB_005
+//20093,RR_MOB_006
+//20094,RR_MOB_007
+//20095,RR_MOB_008
+//20096,RR_MOB_009
+//20097,RR_MOB_010
+//20098,RR_MOB_011
+//20099,RR_MOB_012
+//20100,RR_MOB_013
 //20101,WILOW_MJ
 //20102,MANDRAGORA_MJ
 //20103,STEM_WORM_MJ
@@ -3397,7 +3410,7 @@
 //20266,G_ILL_TEDDY_BEAR_G
 //20267,G_ILL_TEDDY_BEAR_W
 //20268,G_ILL_TEDDY_BEAR_B
-
+//20269,GUILD_SKILL_FLAG
 //20270,ILL_TRI_JOINT
 //20271,ILL_STALACTIC_GOLEM
 //20272,ILL_MEGALITH
@@ -3523,7 +3536,7 @@
 //20392,MD_GH_ALICE_G
 //20393,MD_GH_ROOT_G
 //20394,MD_GH_BLOODY_KNIGHT
-
+//20395,HIDDEN_HOMUN
 //20396,PORING_Z
 //20397,SAVAGE_BABE_Z
 //20398,CREAMY_Z
@@ -3691,5 +3704,13 @@
 //20560,G_MINERAL_G
 //20561,G_MINERAL_W
 //20562,HIDDEN_MOB8
-
+//20563,GOLDEN_SAVAGE_TW
+//20564,SAVAGE_BABE_TW
+//20565,RICE_CAKE_BOY_TW
+//20566,P_CHUNG_E_TW
+//20567,CHUNG_E_TW
+//20568,GULLINBURSTI_TW
 //20569,MISSING_OCTOPIG
+
+//31999,HUNTING_GID_DEFAULT
+//32000,MONSTER_2ND_END

+ 0 - 110
db/re/pet_db.txt

@@ -1,110 +0,0 @@
-// Pet Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts.
-//Please see "The Pet AI commands" in 'doc/script_commands.txt'.
-
-1002,PORING,Poring,619,9001,10013,531,80,60,50,100,250,20,2000,150,1,0,350,400,800,{ petloot 10; },{ bonus bLuk,2; bonus bCritical,1; }
-1113,DROPS,Drops,620,9002,10013,508,80,60,40,100,250,20,1500,150,1,0,300,400,500,{ petloot 10; },{ bonus bHit,3; bonus bAtk,3; }
-1031,POPORING,Poporing,621,9003,10013,511,80,60,30,100,250,20,1000,150,1,0,300,500,400,{ petloot 15; },{ bonus bLuk,2; bonus2 bSubEle,Ele_Poison,10; }
-1063,LUNATIC,Lunatic,622,9004,10007,534,80,60,40,100,250,20,1500,150,0,0,300,300,1000,{ petskillbonus bLuk,3,10,50; },{ bonus bCritical,2; bonus bAtk,2; }
-1049,PICKY,Picky,623,9005,10012,507,80,60,40,100,250,20,2000,150,1,0,500,600,50,{ petskillbonus bStr,3,10,50;},{ bonus bStr,1; bonus bAtk,5; }
-1011,CHONCHON,ChonChon,624,9006,10002,537,80,60,30,100,250,20,1500,150,1,0,500,500,250,{ petskillbonus bAgi,4,10,50; },{ bonus bAgi,1; bonus bFlee,2; }
-1042,STEEL_CHONCHON,Steel ChonChon,625,9007,10002,1002,80,60,20,100,250,20,1000,150,1,0,500,500,200,{ petskillbonus bAgiVit,4,20,40; },{ bonus bFlee,6; bonus bAgi,-1; }
-1035,HUNTER_FLY,Hunter Fly,626,9008,10002,716,80,60,10,100,250,20,500,150,1,0,500,500,200,{ petskillattack2 "NPC_WINDATTACK",888,2,0,10; },{ bonus bFlee,-5; bonus bFlee2,2; }
-1167,SAVAGE_BABE,Savage Babe,627,9009,10015,537,80,60,40,100,250,20,1500,150,0,0,500,500,200,{ petskillbonus bVit,4,10,50; },{ bonus bVit,1; bonus bMaxHP,50; }
-1107,DESERT_WOLF_B,Baby Desert Wolf,628,9010,10003,537,80,60,40,100,250,20,1000,150,0,0,400,400,400,{ petskillattack "SM_PROVOKE",1,0,5;},{ bonus bInt,1; bonus bMaxSP,50; }
-1052,ROCKER,Rocker,629,9011,10014,537,80,60,30,100,250,20,1500,150,0,0,350,350,600,{ petskillbonus bAllStats,1,10,50; },{ bonus bHPrecovRate,5; bonus bMaxHP,25; }
-1014,SPORE,Spore,630,9012,10017,537,80,60,30,100,250,20,1500,150,0,0,350,500,500,{ petrecovery SC_POISON,60; },{ bonus bHit,5; bonus bAtk,-2; }
-1077,POISON_SPORE,Poison Spore,631,9013,10017,537,80,60,20,100,250,20,1000,150,0,0,600,200,400,{ petskillattack "NPC_POISON",20,0,10; },{ bonus bStr,1; bonus bInt,1; }
-1019,PECOPECO,PecoPeco,632,9014,10010,537,80,60,30,100,250,20,1000,150,1,0,400,500,800,{ petskillbonus bSpeedRate,25,20,20; },{ bonus bMaxHP,150; bonus bMaxSP,-10; }
-1056,SMOKIE,Smokie,633,9015,10019,537,80,60,30,100,250,20,1000,150,1,0,600,600,100,{ petskillbonus bPerfectHide,1,3600,0; },{ bonus bAgi,1; bonus bFlee2,1; }
-1057,YOYO,Yoyo,634,9016,10018,532,80,60,20,100,250,20,1000,150,1,0,300,800,400,{ petloot 20; },{ bonus bCritical,3; bonus bLuk,-1; }
-1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; }
-1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; }
-1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus2 bAddClass,Class_All,-1; }
-1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; }
-1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus2 bAddClass,Class_All,1; }
-1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; }
-1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus2 bAddClass,Class_All,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; }
-1101,BAPHOMET_,Baphomet Jr.,642,9024,10001,518,80,60,10,100,250,20,200,150,0,0,1000,100,200,{ petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5; },{ bonus bDef,1; bonus bMdef,1; bonus2 bResEff,Eff_Stun,-100; }
-1188,BON_GUN,Bon Gun,659,9025,10020,537,80,60,30,100,250,20,500,150,1,0,600,200,400,{ petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1; },{ bonus bVit,1; bonus2 bResEff,Eff_Stun,100; }
-1200,ZHERLTHSH,Zealotus,660,9026,0,929,80,60,10,100,250,20,300,150,0,0,1000,100,500,{ petskillattack "AS_SONICBLOW",1,0,3; },{ bonus2 bAddRace,RC_Demihuman,2; bonus2 bMagicAddRace,RC_DemiHuman,2; }
-1275,ALICE,Alice,661,9027,0,504,80,60,20,100,250,20,800,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,25,100; },{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; }
-1815,EVENT_RICECAKE,Rice Cake,0,9028,0,511,80,60,50,100,250,20,2000,150,1,0,500,500,200,{ petskillsupport "CR_DEFENDER",3,240,50,100; },{ bonus2 bSubEle,Ele_Neutral,1; bonus bMaxHPrate,-1; }
-1245,GOBLINE_XMAS,Christmas Goblin,12225,9029,0,911,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "MG_SIGHT",5,5,5; },{ bonus bMaxHP,30; bonus2 bSubEle,Ele_Water,1; }
-
-1519,CHUNG_E,Green Maiden,12395,9030,0,6115,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{ bonus bDef,1; bonus2 bSubRace,RC_DemiHuman,1; }
-1879,ECLIPSE_P,Spring Rabbit,0,9031,0,7766,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "TF_THROWSTONE",1,5,5; },{}
-1122,GOBLIN_1,Goblin,14569,9032,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_WINDATTACK",5,5,5; },{}
-1123,GOBLIN_2,Goblin,14570,9033,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_FIREATTACK",5,5,5; },{}
-1125,GOBLIN_4,Goblin,14571,9034,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_GROUNDATTACK",5,5,5; },{}
-1385,DELETER_,Deleter,14572,9035,0,7822,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "SM_MAGNUM",5,5,5; },{}
-1382,DIABOLIC,Diabolic,14573,9036,0,7823,80,60,10,100,250,20,800,150,0,0,300,300,800,{ petskillattack "WZ_METEOR",2,5,5; },{}
-1208,WANDER_MAN,Wanderer,14574,9037,0,7824,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_UNDEADATTACK",5,5,5; },{ bonus bAgi,3; bonus bDex,1; }
-
-1963,P_CHUNG_E,New Year Doll,0,9038,0,554,80,60,30,100,250,20,800,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{}
-
-// New pets JapanRO Mobile
-1040,GOLEM,Golem,12371,9053,10035,6111,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxHP,100; bonus bFlee,-5; }
-1143,MARIONETTE,Marionette,12361,9043,10025,6098,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bSPrecovRate,3; }
-1148,MEDUSA,Medusa,12368,9050,10032,6108,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bVit,1; bonus2 bResEff,Eff_Stone,500; }
-1179,WHISPER,Whisper,12363,9045,10027,6100,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bFlee,7; bonus bDef,-3; }
-1299,GOBLIN_LEADER,Goblin Leader,12364,9046,10028,6104,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus2 bAddRace,RC_DemiHuman,3; }
-1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{ bonus2 bHPDrainRate,10,5; },{ bonus2 bHPDrainRate,30,5; bonus bMaxHPrate,1; }
-1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{ bonus bMaxSPRate,3; bonus2 bSPDrainRate,10,1; },{ bonus bMaxSPRate,5; bonus2 bSPDrainRate,30,1; }
-1379,NIGHTMARE_TERROR,Nightmare Terror,12372,9054,10036,6112,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bResEff,Eff_Sleep,10000; }
-1401,SHINOBI,Shinobi,12362,9044,10026,6099,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bAgi,2; }
-1404,MIYABI_NINGYO,Miyabi Doll,12366,9048,10030,6106,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bInt,1; bonus bCastrate,-3; }
-1416,WICKED_NYMPH,Evil Nymph,12365,9047,10029,6105,80,60,15,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,30; bonus bSPrecovRate,5; }
-1495,STONE_SHOOTER,Stone Shooter,12369,9051,10033,6109,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,3; }
-1504,DULLAHAN,Dullahan,12367,9049,10031,6107,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bCritAtkRate,5; }
-1505,LOLI_RURI,Loli Ruri,12360,9042,10024,6097,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bMaxHPRate,3; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; }
-1513,CIVIL_SERVANT,Mao Guai,12358,9040,10022,6095,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,10; }
-1586,LEAF_CAT,Leaf Cat,12359,9041,10023,6096,80,60,20,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubRace,RC_Brute,3; }
-1630,BACSOJIN_,White Lady,12357,9039,10021,6094,80,60,10,100,250,20,2000,150,0,0,300,300,800,{},{}
-1837,IMP,Fire Imp,12374,9056,10038,6114,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,2; bonus2 bAddEle,Ele_Fire,2; }
-
-// Brasilis Quest - Suspicious Beach [UNHATCHABLE]
-2057,E_CRAMP,Strange Cramp,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // kRO version
-2081,E_HYDRA,Strange Hydra,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // iRO/cRO version
-
-// New pets (FIX ME: pet bonuses for 2210 and 2313 do not require loyalty)
-2200,J_TAINI,Tiny,0,9057,0,512,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{}
-2210,XMAS_LUNATIC,Christmas Snow Rabbit,0,9058,0,529,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{ bonus2 bExpAddRace,RC_All,5; }
-2313,TIKBALANG,Tikbalang,12699,9059,0,528,80,60,10,100,250,20,1000,150,1,0,300,300,800,{},{ bonus2 bAddDamageClass,2320,10; bonus2 bAddDamageClass,2321,10; bonus2 bAddDamageClass,2322,10; bonus2 bAddDamageClass,2317,10; bonus2 bAddDamageClass,2318,10; bonus2 bAddDamageClass,2327,10; bonus2 bAddDamageClass,2319,10; bonus2 bAddDamageClass,2333,10; bonus2 bAddDamageClass,2332,10; }
-1242,MARIN,Marin,12789,9061,10039,6534,80,60,50,100,250,20,2000,150,1,0,300,300,800,{},{}
-2398,LITTLE_PORING,Novice Poring,12846,9062,0,531,80,60,1000,0,250,0,5000,150,0,0,300,300,800,{},{ bonus bHPrecovRate,50; }
-
-// New pets from kRO 2014-10-08 (Needs more info)
-//1090,MASTERING,Mastering,<LureID>,9069,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=LUK + 2, CRI + 1; Neutral=LUK + 3, CRI + 1; Cordial=LUK + 3, CRI + 2; Best Friend=LUK + 3, CRI + 3;*/ }
-//1166,SAVAGE,Savage,<LureID>,9070,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=VIT + 1, MHP + 50; Neutral=VIT + 2, MHP + 50; Cordial=VIT + 2, MHP + 100; Best Friend=VIT + 2, MHP + 200;*/ }
-//1369,GRAND_PECO,Grand Peco,<LureID>,9071,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=MHP + 150; Neutral=MHP + 200; Cordial=MHP + 300; Best Friend=MHP + 400;*/ }
-//1213,HIGH_ORC,High Orc,<LureID>,9087,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=ATK + 10; Neutral=ATK + 15; Cordial=ATK + 20; Best Friend=ATK + 25;*/ }

+ 1733 - 0
db/re/pet_db.yml

@@ -0,0 +1,1733 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Body:
+  - Mob: PORING
+    TameItem: Unripe_Apple
+    EggItem: Poring_Egg
+    EquipItem: Backpack
+    FoodItem: Apple_Juice
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+    Evolution:
+      - Target: MASTERING
+        ItemRequirements:
+          - Item: Leaf_Of_Yggdrasil
+            Amount: 10
+          - Item: Unripe_Apple
+            Amount: 3
+
+  - Mob: DROPS
+    TameItem: Orange_Juice
+    EggItem: Drops_Egg
+    EquipItem: Backpack
+    FoodItem: Yellow_Herb
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+    Evolution:
+      - Target: DR_EGGRING
+        ItemRequirements:
+          - Item: Piece_Of_Egg_Shell
+            Amount: 20
+          - Item: Old_Frying_Pan
+            Amount: 10
+          - Item: Apple_Juice
+            Amount: 3
+          - Item: Eggring_Card
+            Amount: 1
+      - Target: SWEETS_DROPS
+        ItemRequirements:
+          - Item: Sweets_Festival_Coin
+            Amount: 500
+          - Item: Candy
+            Amount: 50
+          - Item: Candy_Striper
+            Amount: 50
+          - Item: Drops_Card
+            Amount: 1
+  - Mob: POPORING
+    TameItem: Bitter_Herb
+    EggItem: Poporing_Egg
+    EquipItem: Backpack
+    FoodItem: Green_Herb
+    Fullness: 5
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus2 bSubEle,Ele_Poison,10;
+      }
+  - Mob: LUNATIC
+    TameItem: Rainbow_Carrot
+    EggItem: Lunatic_Egg
+    EquipItem: Silk_Ribbon
+    FoodItem: Carrot_Juice
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+    Evolution:
+      - Target: DR_LUNATIC
+        ItemRequirements: 
+          - Item: Great_Leaf
+            Amount: 100
+          - Item: Clover
+            Amount: 250
+          - Item: Four_Leaf_Clover
+            Amount: 30
+          - Item: Leaf_Lunatic_Card
+            Amount: 1
+
+  - Mob: PICKY
+    TameItem: Earthworm_The_Dude
+    EggItem: Picky_Egg
+    EquipItem: Tiny_Egg_Shell
+    FoodItem: Red_Herb
+    Fullness: 4   
+    IntimacyFed: 40
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bAtk,5;
+      }
+  - Mob: CHONCHON
+    TameItem: Rotten_Fish
+    EggItem: Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 30
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee,2;
+      }
+  - Mob: STEEL_CHONCHON
+    TameItem: Lusty_Iron
+    EggItem: Steel_Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Iron_Ore
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,6;
+        bonus bAgi,-1;
+      }
+  - Mob: HUNTER_FLY
+    TameItem: Monster_Juice
+    EggItem: Hunter_Fly_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Red_Gemstone
+    Fullness: 5
+    IntimacyFed: 10
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,-5;
+        bonus bFlee2,2;
+      }
+  - Mob: SAVAGE_BABE
+    TameItem: Sweet_Milk
+    EggItem: Savage_Bebe_Egg
+    EquipItem: Green_Lace
+    FoodItem: Pet_Food
+    Fullness: 7
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus bMaxHP,50;
+      }
+    Evolution:
+      - Target: SAVAGE
+        ItemRequirements:
+          - Item: Pet_Food
+            Amount: 10
+          - Item: Sweet_Milk
+            Amount: 3
+          - Item: Meat
+            Amount: 100
+          - Item: Feather
+            Amount: 50
+  - Mob: DESERT_WOLF_B
+    TameItem: Well_Dried_Bone
+    EggItem: Baby_Desert_Wolf_Egg
+    EquipItem: Transparent_Headgear
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 40
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bMaxSP,50;
+      }
+  - Mob: ROCKER
+    TameItem: Singing_Flower
+    EggItem: Rocker_Egg
+    EquipItem: Rocker_Glasses
+    FoodItem: Pet_Food
+    Fullness: 1
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+    Evolution:
+      - Target: METALLER
+        ItemRequirements:
+          - Item: Singing_Plant
+            Amount: 3
+          - Item: Grasshopper's_Leg
+            Amount: 777
+          - Item: Yellow_Herb
+            Amount: 200
+          - Item: Metaller_Card
+            Amount: 1
+  - Mob: SPORE
+    TameItem: Dew_Laden_Moss
+    EggItem: Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+        bonus bAtk,-2;
+      }
+  - Mob: POISON_SPORE
+    TameItem: Deadly_Noxious_Herb
+    EggItem: Poison_Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bInt,1;
+      }
+  - Mob: PECOPECO
+    TameItem: Fatty_Chubby_Earthworm
+    EggItem: PecoPeco_Egg
+    EquipItem: Battered_Pot
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,150;
+        bonus bMaxSP,-10;
+      }
+    Evolution:
+      - Target: GRAND_PECO
+        ItemRequirements:
+          - Item: Pet_Food
+            Amount: 10
+          - Item: Fatty_Chubby_Earthworm
+            Amount: 3
+          - Item: Peco_Wing_Feather
+            Amount: 300
+          - Item: Pecopeco_Card
+            Amount: 1
+          - Item: Fruit_Of_Mastela
+            Amount: 10
+  - Mob: SMOKIE
+    TameItem: Baked_Yam
+    EggItem: Smokie_Egg
+    EquipItem: Red_Muffler
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee2,1;
+      }
+  - Mob: YOYO
+    TameItem: Tropical_Banana
+    EggItem: Yoyo_Egg
+    EquipItem: Monkey_Circlet
+    FoodItem: Banana_Juice
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bLuk,-1;
+      }
+    Evolution:
+      - Target: CHOCO
+        ItemRequirements:
+          - Item: Tropical_Banana
+            Amount: 3
+          - Item: Monkey_Doll
+            Amount: 2
+          - Item: Cacao
+            Amount: 300
+          - Item: Yoyo_Card
+            Amount: 1
+  - Mob: ORK_WARRIOR
+    TameItem: Horror_Of_Tribe
+    EggItem: Orc_Warrior_Egg
+    EquipItem: Wild_Flower
+    FoodItem: Pet_Food
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtk,10;
+        bonus bDef,-3;
+      }
+    Evolution:
+      - Target: HIGH_ORC
+        ItemRequirements:
+          - Item: Horror_Of_Tribe
+            Amount: 3
+          - Item: Orcish_Sword
+            Amount: 1
+          - Item: Orcish_Voucher
+            Amount: 500
+          - Item: Cigar
+            Amount: 1
+          - Item: Orc_Warrior_Card
+            Amount: 1
+  - Mob: MUNAK
+    TameItem: No_Recipient
+    EggItem: Munak_Egg
+    EquipItem: Punisher
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bDef,1;
+      }
+  - Mob: DOKEBI
+    TameItem: Old_Broom
+    EggItem: Dokkaebi_Egg
+    EquipItem: Wig
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,-1;
+      }
+    Evolution:
+      - Target: AM_MUT
+        ItemRequirements:
+          - Item: Old_Broom
+            Amount: 3
+          - Item: Violet_Dyestuffs
+            Amount: 3
+          - Item: Dokkaebi_Horn
+            Amount: 300
+          - Item: Gold
+            Amount: 3
+  - Mob: SOHEE
+    TameItem: Silver_Knife_Of_Chaste
+    EggItem: Sohee_Egg
+    EquipItem: Golden_Bell
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bDex,1;
+      }
+  - Mob: ISIS
+    TameItem: Armlet_Of_Obedience
+    EggItem: Isis_Egg
+    EquipItem: Queen's_Hair_Ornament
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,-1;
+        bonus bAtkRate,1;
+      }
+    Evolution:
+      - Target: LITTLE_ISIS
+        ItemRequirements:
+          - Item: Armlet_Of_Obedience
+            Amount: 3
+          - Item: Crystal_Jewel__
+            Amount: 6
+          - Item: Queen's_Hair_Ornament
+            Amount: 1
+          - Item: Shining_Scales
+            Amount: 300
+  - Mob: PETIT
+    TameItem: Shining_Stone
+    EggItem: Green_Petite_Egg
+    EquipItem: Stellar_Hairpin
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,-2;
+        bonus bMdef,-2;
+        bonus bAspdRate,1;
+      }
+    Evolution:
+      - Target: DELETER_2
+        ItemRequirements:
+          - Item: Shining_Stone
+            Amount: 3
+          - Item: Petti_Tail
+            Amount: 100
+          - Item: Aloebera
+            Amount: 150
+          - Item: Deleter_Card
+            Amount: 1
+  - Mob: DEVIRUCHI
+    TameItem: Contracts_In_Shadow
+    EggItem: Deviruchi_Egg
+    EquipItem: Pacifier
+    FoodItem: Shoot
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,1;
+        bonus bMaxHPrate,-3;
+        bonus bMaxSPrate,-3;
+      }
+    Evolution:
+      - Target: DIABOLIC2
+        ItemRequirements:
+          - Item: Contracts_In_Shadow
+            Amount: 3
+          - Item: Petite_DiablOfs_Wing
+            Amount: 250
+          - Item: Sacred_Marks
+            Amount: 30
+          - Item: Deviruchi_Card
+            Amount: 1
+  - Mob: BAPHOMET_
+    TameItem: Book_Of_Devil
+    EggItem: Bapho_Jr._Egg
+    EquipItem: Skull_Helm
+    FoodItem: Honey
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus bMdef,1;
+        bonus2 bResEff,Eff_Stun,-100;
+      }
+  - Mob: BON_GUN
+    TameItem: Heart_Of_Her
+    EggItem: Bongun_Egg
+    EquipItem: Sword_Of_Grave_Keeper
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+    Evolution:
+      - Target: HYEGUN
+        ItemRequirements:
+          - Item: Hyegun_Hat
+            Amount: 1
+          - Item: Munak_Doll
+            Amount: 100
+          - Item: Old_Portrait
+            Amount: 50
+          - Item: Hyegun_Card
+            Amount: 1
+  - Mob: ZHERLTHSH
+    TameItem: Prohibition_Red_Candle
+    EggItem: Zherlthsh_Egg
+    FoodItem: Immortal_Heart
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 300
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_Demihuman,2;
+        bonus2 bMagicAddRace,RC_DemiHuman,2;
+        bonus2 bAddRace,RC_Player,2;
+        bonus2 bMagicAddRace,RC_Player,2;
+      }
+  - Mob: ALICE
+    TameItem: Sway_Apron
+    EggItem: Alice_Egg
+    FoodItem: White_Potion
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMdef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: EVENT_RICECAKE
+    EggItem: Rice_Cake_Egg
+    FoodItem: Green_Herb
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Neutral,1;
+        bonus bMaxHPrate,-1;
+      }
+  - Mob: GOBLINE_XMAS
+    TameItem: Sweet_Candy_Striper
+    EggItem: Santa_Goblin_Egg
+    FoodItem: Scell
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,30;
+        bonus2 bSubEle,Ele_Water,1;
+      }
+  - Mob: CHUNG_E
+    TameItem: Tantanmen
+    EggItem: Chung_E_Egg
+    FoodItem: Bun_
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: ECLIPSE_P
+    EggItem: Spring_Rabbit_Egg
+    FoodItem: Bok_Choy
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: GOBLIN_1
+    TameItem: Knife_Goblin_Ring
+    EggItem: Knife_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_2
+    TameItem: Flail_Goblin_Ring
+    EggItem: Flail_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_4
+    TameItem: Hammer_Goblin_Ring
+    EggItem: Hammer_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DELETER_
+    TameItem: Holy_Marble
+    EggItem: Red_Deleter_Egg
+    FoodItem: Whole_Barbecue
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DIABOLIC
+    TameItem: Red_Burning_Stone
+    EggItem: Diabolic_Egg
+    FoodItem: Meat_Veg_Skewer
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: WANDER_MAN
+    TameItem: Skull_Of_Vagabond
+    EggItem: Wanderer_Egg
+    FoodItem: Spirit_Liquor
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,3;
+        bonus bDex,1;
+      }
+  - Mob: P_CHUNG_E
+    EggItem: New_Year_Doll_Egg
+    FoodItem: Mojji
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOLEM
+    TameItem: Magical_Lithography
+    EggItem: Golem_Egg
+    EquipItem: Windup_Spring
+    FoodItem: Mystic_Stone
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,100;
+        bonus bFlee,-5;
+      }
+  - Mob: MARIONETTE
+    TameItem: Delicious_Shaved_Ice
+    EggItem: Marionette_Egg
+    EquipItem: Star_Hairband
+    FoodItem: Small_Snow_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bSPrecovRate,3;
+      }
+  - Mob: MEDUSA
+    TameItem: Splendid_Mirror
+    EggItem: Medusa_Egg
+    EquipItem: Queen's_Coronet
+    FoodItem: Apple_Pudding
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stone,500;
+      }
+  - Mob: WHISPER
+    TameItem: Fit_Pipe
+    EggItem: Whisper_Egg
+    EquipItem: Spirit_Chain_
+    FoodItem: Damp_Darkness
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,7;
+        bonus bDef,-3;
+      }
+  - Mob: GOBLIN_LEADER
+    TameItem: Staff_Of_Leader
+    EggItem: Goblin_Leader_Egg
+    EquipItem: Nice_Badge
+    FoodItem: Big_Cell
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_DemiHuman,3;
+        bonus2 bAddRace,RC_Player,3;
+      }
+  - Mob: SUCCUBUS
+    TameItem: Boy's_Naivety
+    EggItem: Succubus_Egg
+    EquipItem: Black_Butterfly_Mask
+    FoodItem: Vital_Flower_
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bHPDrainRate,30,5;
+        bonus bMaxHPrate,1;
+      }
+  - Mob: INCUBUS
+    TameItem: Gril's_Naivety
+    EggItem: Incubus_Egg
+    EquipItem: Ball_Mask
+    FoodItem: Vital_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSPRate,5;
+        bonus2 bSPDrainRate,30,1;
+      }
+  - Mob: NIGHTMARE_TERROR
+    TameItem: Hell_Contract
+    EggItem: Nightmare_Terror_Egg
+    EquipItem: Hell_Horn
+    FoodItem: Fresh_Plant
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bResEff,Eff_Sleep,10000;
+      }
+  - Mob: SHINOBI
+    TameItem: Kuloren
+    EggItem: Shinobi_Egg
+    EquipItem: Wine_On_Sleeve
+    FoodItem: Grilled_Rice_Cake
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,2;
+      }
+  - Mob: MIYABI_NINGYO
+    TameItem: Gril_Doll
+    EggItem: Miyabi_Ningyo_Egg
+    EquipItem: Summer_Fan
+    FoodItem: Well_Ripened_Berry
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bCastrate,-3;
+      }
+  - Mob: WICKED_NYMPH
+    TameItem: Charming_Lotus
+    EggItem: Wicked_Nymph_Egg
+    EquipItem: Jade_Trinket
+    FoodItem: Morning_Dew
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,30;
+        bonus bSPrecovRate,5;
+      }
+  - Mob: STONE_SHOOTER
+    TameItem: Oilpalm_Coconut
+    EggItem: Stone_Shooter_Egg
+    EquipItem: Apro_Hair
+    FoodItem: Plant_Neutrient
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,3;
+      }
+  - Mob: DULLAHAN
+    TameItem: Luxury_Whisky_Bottle
+    EggItem: Dullahan_Egg
+    EquipItem: Death_Coil
+    FoodItem: Sunset_On_The_Rock
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritAtkRate,5;
+      }
+  - Mob: LOLI_RURI
+    TameItem: Very_Red_Juice
+    EggItem: Loli_Ruri_Egg
+    EquipItem: Fashionable_Glasses
+    FoodItem: Pumpkin_Pie_
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPRate,3;
+        bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10;
+      }
+  - Mob: CIVIL_SERVANT
+    TameItem: Fan_Of_Wind
+    EggItem: Civil_Servant_Egg
+    EquipItem: Golden_Earing
+    FoodItem: Flavored_Alcohol
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,10;
+      }
+  - Mob: LEAF_CAT
+    TameItem: Very_Soft_Plant
+    EggItem: Leaf_Cat_Egg
+    EquipItem: Green_Lucky_Bag
+    FoodItem: Fish_With_Blue_Back
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubRace,RC_Brute,3;
+      }
+  - Mob: BACSOJIN_
+    TameItem: Shiny_Wing_Gown
+    EggItem: Bacsojin_Egg
+    EquipItem: Round_Hair_Ornament
+    FoodItem: Traditional_Cookie
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: IMP
+    TameItem: Flaming_Ice
+    EggItem: Imp_Egg
+    EquipItem: Horn_Protector
+    FoodItem: Flame_Gemstone
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,2;
+        bonus2 bAddEle,Ele_Fire,2;
+      }
+  - Mob: E_CRAMP
+    TameItem: Leaf_Cat_Ball
+    EggItem: Mystic_Leaf_Cat_Ball
+    Fullness: 0
+    HungryDelay: 0
+    IntimacyStart: 0
+    IntimacyFed: 0
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 50
+    SpecialPerformance: false
+  - Mob: E_HYDRA
+    TameItem: Leaf_Cat_Ball
+    EggItem: Mystic_Leaf_Cat_Ball
+    Fullness: 0
+    HungryDelay: 0
+    IntimacyStart: 0
+    IntimacyFed: 0
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 50
+    SpecialPerformance: false
+  - Mob: J_TAINI
+    EggItem: Egg_Of_Tiny
+    FoodItem: Apple
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 0
+  - Mob: XMAS_LUNATIC
+    EggItem: Snow_Rabbit_Egg
+    FoodItem: Candy
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 0
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bExpAddRace,RC_All,5;
+      }
+  - Mob: TIKBALANG
+    TameItem: Tikbalang_Belt
+    EggItem: Tikbalang_Pet
+    FoodItem: Monster's_Feed
+    Fullness: 8
+    IntimacyFed: 10
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddDamageClass,2317,10;
+        bonus2 bAddDamageClass,2318,10;
+        bonus2 bAddDamageClass,2319,10;
+        bonus2 bAddDamageClass,2320,10;
+        bonus2 bAddDamageClass,2321,10;
+        bonus2 bAddDamageClass,2322,10;
+        bonus2 bAddDamageClass,2327,10;
+        bonus2 bAddDamageClass,2332,10;
+        bonus2 bAddDamageClass,2333,10;
+      }
+  - Mob: MARIN
+    TameItem: Juicy_Fruit
+    EggItem: Marin_Egg
+    EquipItem: Tw_Backpack
+    FoodItem: Fruit_Sundae
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+  - Mob: LITTLE_PORING
+    TameItem: Unripe_Apple2
+    EggItem: Novice_Poring_Egg
+    FoodItem: Apple_Juice
+    Fullness: 3
+    IntimacyFed: 1000
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 5000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,50;
+      }
+  - Mob: NINE_TAIL
+    TameItem: Sap_Liquid
+    EggItem: Nine_Tail_Egg
+    FoodItem: Suspicious_Bottle
+    Fullness: 4
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bHit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,2;
+        bonus bHit,2;
+      }
+    Evolution:
+      - Target: CAT_O_NINE_TAIL
+        ItemRequirements:
+          - Item: Sap_Liquid
+            Amount: 3
+          - Item: Fox_Tail
+            Amount: 999
+          - Item: Punisher
+            Amount: 1
+          - Item: Nine_Tail_Card
+            Amount: 1
+  - Mob: GREMLIN
+    TameItem: Unprocessed_Parts
+    EggItem: Gremlin_Egg
+    FoodItem: Cheap_Lubricant
+    Fullness: 4
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus Dex,2;
+        bonus bHit,1;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bDex,1;
+        bonus bHit,1;
+      }
+    Evolution:
+      - Target: HODREMLIN
+        ItemRequirements:
+          - Item: Unprocessed_Parts
+            Amount: 3
+          - Item: Damp_Darkness
+            Amount: 50
+          - Item: Will_Of_Darkness
+            Amount: 200
+          - Item: Hodremlin_Card
+            Amount: 1
+  - Mob: MUMMY
+    TameItem: Elixir_Bandages
+    EggItem: Mummy_Egg
+    FoodItem: Mementos
+    Fullness: 7
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,4;
+      }
+    Evolution:
+      - Target: ANCIENT_MUMMY
+        ItemRequirements:
+          - Item: Elixir_Bandages
+            Amount: 3
+          - Item: Rune_Of_Darkness
+            Amount: 200
+          - Item: Gold
+            Amount: 30
+          - Item: Ancient_Mummy_Card
+            Amount: 1
+  - Mob: TEDDY_BEAR
+    TameItem: Small_Needle_Kit
+    EggItem: Teddy_Bear_Egg
+    FoodItem: Cotton_Tufts
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxSP,150;
+      }
+    Evolution:
+      - Target: XM_TEDDY_BEAR
+        ItemRequirements:
+          - Item: Small_Needle_Kit
+            Amount: 3
+          - Item: Cursed_Seal
+            Amount: 300
+          - Item: Cardinal_Jewel_
+            Amount: 50
+          - Item: Teddy_Bear_Card
+            Amount: 1
+
+  # Pet Evolution, most are dummy values
+  - Mob: MASTERING
+    EggItem: Mastering_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,3;
+        bonus bCritical,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bLuk,3;
+        bonus bCritical,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bLuk,3;
+        bonus bCritical,1;
+      }else{
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+    Evolution:
+      - Target: ANGELING
+        ItemRequirements:
+          - Item: Yellow_Potion
+            Amount: 20
+          - Item: Spirit_Chain
+            Amount: 1
+          - Item: White_Herb
+            Amount: 50
+          - Item: Jellopy
+            Amount: 200
+  - Mob: METALLER
+    EggItem: Metaller_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,20;
+        bonus bMaxHP,70;
+        bonus2 bAddRace,RC_Plant,6;
+        bonus2 bMagicAddRace,RC_Plant,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHPrecovRate,15;
+        bonus bMaxHP,55;
+        bonus2 bAddRace,RC_Plant,3;
+        bonus2 bMagicAddRace,RC_Plant,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHPrecovRate,10;
+        bonus bMaxHP,38;
+      }else{
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+  - Mob: ANGELING
+    EggItem: Angeling_Egg
+    FoodItem: Pet_Food
+    Fullness: 1
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPrate,2;
+        bonus bHealPower,8;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHPrate,2;
+        bonus bHealPower,6;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHPrate,1;
+        bonus bHealPower,4;
+      }else{
+        bonus bMaxHPrate,1;
+        bonus bHealPower,2;
+      }
+  - Mob: MOONLIGHT
+    EggItem: Moonlight_Egg
+    FoodItem: Luxurious_Pet_Food
+    Fullness: 1
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,6;
+        bonus bHit,6;
+        autobonus "{ bonus bHPRegenRate,500,1000; bonus bSPRegenRate,20,1000; }",30,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,5;
+        bonus bHit,5;
+        autobonus "{ bonus bHPRegenRate,400,1000; bonus bSPRegenRate,10,1000; }",30,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,4;
+        bonus bHit,4;
+        autobonus "{ bonus bHPRegenRate,300,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else{
+        bonus bCritical,3;
+        bonus bHit,3;
+      }
+  - Mob: SAVAGE
+    EggItem: Savage_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,200;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,100;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,50;
+        bonus bVit,2;
+      }else{
+        bonus bMaxHP,50;
+        bonus bVit,1;
+      }
+  - Mob: HIGH_ORC
+    EggItem: High_Orc_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,200;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,100;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,50;
+        bonus bVit,2;
+      }else{
+        bonus bMaxHP,50;
+        bonus bVit,1;
+      }
+  - Mob: CHOCO
+    EggItem: Choco_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,9;
+        bonus bLongAtkRate,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,7;
+        bonus bLongAtkRate,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,5;
+        bonus bLongAtkRate,1;
+      }else{
+        bonus bCritical,3;
+      }
+  - Mob: ANCIENT_MUMMY
+    EggItem: Ancient_Mummy_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,6;
+        bonus2 bAddClass,Class_All,6;
+        bonus2 bMagicAddClass,Class_All,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,6;
+        bonus2 bAddClass,Class_All,3;
+        bonus2 bMagicAddClass,Class_All,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHit,5;
+      }else{
+        bonus bHit,4;
+      }
+  - Mob: AM_MUT
+    EggItem: Am_Mut_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,4;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMatkRate,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMatkRate,2;
+      }else{
+        bonus bMatkRate,1;
+      }
+  - Mob: CAT_O_NINE_TAIL
+    EggItem: Cat_o_Nine_Tail_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,5;
+        bonus bHit,5;
+        autobonus "{ bonus bHPRegenRate,400,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,4;
+        bonus bHit,4;
+        autobonus "{ bonus bHPRegenRate,300,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,3;
+        bonus bHit,3;
+      }else{
+        bonus bCritical,2;
+        bonus bHit,2;
+      }
+    Evolution:
+      - Target: MOONLIGHT
+        ItemRequirements:
+          - Item: Powerful_Soul_Essence
+            Amount: 30
+          - Item: Nine_Tail_Card
+            Amount: 10
+          - Item: Sohee_Card
+            Amount: 10
+          - Item: Munak_Card
+            Amount: 10
+  - Mob: GRAND_PECO
+    EggItem: Grand_Peco_Peco_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,400;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,300;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,200;
+      }else{
+        bonus bMaxHP,150;
+      }
+  - Mob: HYEGUN
+    EggItem: Hyegun_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,4;
+        bonus2 bResEff,Eff_Stun,400;
+        bonus2 bSPDrainRate,20,1;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bVit,3;
+        bonus2 bResEff,Eff_Stun,300;
+        bonus2 bSPDrainRate,10,1;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bVit,2;
+        bonus2 bResEff,Eff_Stun,200;
+      }else{
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+  - Mob: HODREMLIN
+    EggItem: Hodremlin_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDex,2;
+        bonus bHit,2;
+        bonus bCritAtkRate,9;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bDex,2;
+        bonus bHit,2;
+        bonus bCritAtkRate,7;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bDex,2;
+        bonus bHit,1;
+      }else{
+        bonus bDex,1;
+        bonus bHit,1;
+      }
+  - Mob: XM_TEDDY_BEAR
+    EggItem: Xm_Teddy_Bear_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,150;
+        autobonus "{ bonus bSPRegenRate,40,1000; }",30,5000,BF_MAGIC;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxSP,150;
+        autobonus "{ bonus bSPRegenRate,30,1000; }",30,5000,BF_MAGIC;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxSP,100;
+      }else{
+        bonus bMaxSP,50;
+      }
+  - Mob: DR_EGGRING
+    EggItem: Eggring_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,9;
+        bonus bAtk,9;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,7;
+        bonus bAtk,7;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHit,5;
+        bonus bAtk,5;
+      }else{
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+  - Mob: DR_LUNATIC
+    EggItem: Dr_Lunatic_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,5;
+        bonus bAtk,5;
+        bonus2 bAddRace,RC_Formless,6;
+        bonus2 bMagicAddRace,RC_Formless,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,4;
+        bonus bAtk,4;
+        bonus2 bAddRace,RC_Formless,3;
+        bonus2 bMagicAddRace,RC_Formless,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,3;
+        bonus bAtk,3;
+      }else{
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+  - Mob: LITTLE_ISIS
+    EggItem: Little_Isis_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtkRate,4;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAtkRate,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAtkRate,2;
+      }else{
+        bonus bAtkRate,1;
+      }
+  - Mob: DIABOLIC2
+    EggItem: Diabolic_2_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAtkRate,2;
+        bonus bMatkRate,2;
+        bonus bMaxHPrate,1;
+        bonus bMaxSPrate,1;
+        bonus5 bAutoSpell,"MG_FIREBOLT",3,50,BF_WEAPON|BF_SHORT,1;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAtkRate,1;
+        bonus bMatkRate,1;
+        bonus bMaxHPrate,1;
+        bonus bMaxSPrate,1;
+      }else{
+        bonus bAtkRate,1;
+        bonus bMatkRate,1;
+      }
+  - Mob: DELETER_2
+    EggItem: Fire_Deleter_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAspdRate,3;
+        bonus bAgi,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAspdRate,2;
+        bonus bAgi,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAspdRate,2;
+        bonus bAgi,1;
+      }else{
+        bonus bAspdRate,1;
+      }
+  - Mob: SWEETS_DROPS
+    EggItem: Sweet_Drops_Egg
+    FoodItem: Candy
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        /* bonus2 bExpAddClass,Class_All,3; */
+        bonus2 bExpAddClass,Class_All,1;
+      }

+ 36 - 36
db/re/quest_db.txt

@@ -2115,39 +2115,39 @@
 9270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 4"
 
 //Geffen Magic Tournament
-9284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9293,0,1106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9295,0,2549,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9296,0,2550,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9298,0,2553,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9299,0,2554,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9300,0,2555,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9301,0,2556,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9302,0,2557,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9303,0,2558,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9304,0,2559,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9305,0,2560,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9306,0,2561,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9307,0,2562,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9315,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9316,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
+9284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Stopping Geffen Gangsters"
+9285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Beating Geffen Gangsters"
+9286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Stop Geffen Gangsters"
+9287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Defeating Geffen Gangsters"
+9288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Catch a Geffen thief"
+9289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Get things back from the thief"
+9290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9293,0,1106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Register in Magic Competition"
+9294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Registration Complete"
+9295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"1st match of the Tournament has started"
+9296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"2nd match of the Competition has started"
+9297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"3rd match of the Competition has started"
+9298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"4th match of the Competition has started"
+9299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"5th match of the Competition has started"
+9300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"6th match of the Competition has started"
+9301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"7th match of the Competition has started"
+9302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"8th match of the Competition has started"
+9303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"9th match of the Competition has started"
+9304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"10th match of the Competition has started"
+9305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"11th match of the Competition has started"
+9306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"12th match of the Competition has started"
+9307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Final match of the Competition has started"
+9308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Magic Competition Win~!"
+9309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Magic Tournament defeat"
+9310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Iris"
+9311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Chaos"
+9312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Lydia"
+9313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Fenrir"
+9314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Loki"
+9315,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Exploring the dimensional gap"
+9316,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Re-exploring the crack of spaces"
 
 // EP14.3 Morse's Cave
 9318,0,3000,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Pursuing Hiding Morroc"
@@ -3073,9 +3073,9 @@
 12388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mushroom Delivery"
 12389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Guardian of Rock Ridge"
 12390,4:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Relieved for Now"
-12391,0,3744,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Buffaloes with Rifles"
-12392,0,3745,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Punishing the Red Masks"
-12393,0,3746,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Eye Patch Desperadoes"
+12391,0,3736,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Buffaloes with Rifles"
+12392,0,3737,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Punishing the Red Masks"
+12393,0,3738,15,0,0,0,0,0,0,0,0,0,0,0,0,0,"Eye Patch Desperadoes"
 12394,0,3739,20,0,0,0,0,0,0,0,0,0,0,0,0,0,"Exterminate Gray Four-legged Beasts"
 12395,0,3787,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Exterminate Swamp Arclouzes"
 12396,0,3788,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Exterminate Brown Rats"

+ 10 - 20
db/re/skill_cast_db.txt

@@ -167,8 +167,6 @@
 85,9600:9280:8960:8640:8320:8000:7680:7360:7040:6720,5000,0,4000,20000,0,2400:2320:2240:2160:2080:2000:1920:1840:1760:1680
 //-- WZ_WATERBALL
 86,640:1280:1920:2560:3200,0,0,10000,0,0,160:320:480:640:800
-//-- WZ_ICEWALL
-87,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0,0,0
 //-- WZ_FROSTNOVA
 88,640:640:576:576:512:512:448:448:384:384,200,0,0,4000:5500:7000:8500:10000:11500:13000:14500:16000:17500,0,160:160:144:144:128:128:112:112:96:96
 //-- WZ_STORMGUST
@@ -671,7 +669,7 @@
 
 //===== Taekwon ============================
 //-- TK_RUN
-411,3000:2500:2000:1500:1000:500:0:0:0:0,300,0,1000,150000,0,3000:2500:2000:1500:1000:500:-1-1-1-1
+411,3000:2500:2000:1500:1000:500:0:0:0:0,300,0,1000,150000,0,3000:2500:2000:1500:1000:500:-1:-1:-1:-1
 //-- TK_DOWNKICK
 415,0,0,0,0,3000,0,0
 //-- TK_TURNKICK
@@ -1349,7 +1347,9 @@
 //-- NC_DISJOINT
 2283,2000,0,0,0,0,0,-1
 //-- NC_MAGMA_ERUPTION
-5006,1000,500,0,5000,42000,10000:9000:8000:7000:6000,-1
+5006,1000,500,0,5000,5000,10000:9000:8000:7000:6000,-1
+//-- NC_MAGMA_ERUPTION_DOTDAMAGE
+5015,0,0,0,0,20000,0,-1
 //==========================================
 
 //===== Shadow Chaser ======================
@@ -1661,20 +1661,16 @@
 //==========================================
 
 //===== Rebellion Skills ===================
-//-- RL_GLITTERING_GREED
-//2551,0,0,0,0,0,0,-1
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000,-1
 //-- RL_MASS_SPIRAL
-2553,2000,1000,0,0,30000,2000,1000
+2553,1000,1000,0,120000,0,2000,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,2000,0,0,0,10000,-1
+2554,3000:2500:2000:1500:1000,0,0,0,0,2000,1000
 //-- RL_B_TRAP
-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
+2555,2000:1600:1200:800:400,2500:2000:1500:1000:500,0,10000,10000:11000:12000:13000:14000,10000,-1
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,2000,0,0,0,2000,1000
+2557,3000:2500:2000:1500:1000,0,0,0,0,2000,1000
 //-- RL_E_CHAIN
 2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0,-1
 //-- RL_QD_SHOT
@@ -1682,11 +1678,11 @@
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000,-1
 //-- RL_FIREDANCE
-2561,0,500,0,0,0,5000,-1
+2561,0,500,0,0,0,0,-1
 //-- RL_H_MINE
 2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000,-1
 //-- RL_P_ALTER
-2563,0,0,0,30000:45000:60000:75000:90000,0,0,-1
+2563,2000,0,0,42000:54000:66000:78000:90000,0,0,-1
 //-- RL_FALLEN_ANGEL
 2564,0,0,0,2000,0,0,-1
 //-- RL_R_TRIP
@@ -1703,12 +1699,6 @@
 2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000,1000
 //-- RL_HAMMER_OF_GOD
 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
-//2573,0,0,0,0,0,0,-1
-//-- RL_GLITTERING_GREED_ATK
-//2574,0,0,0,0,0,0,-1
 //==========================================
 
 //==== Kagerou & Oboro Skills ==============

+ 2 - 1
db/re/skill_db.txt

@@ -1399,7 +1399,7 @@
 5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
 5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
-5006,1,6,2,3,0x2,3,5,1,no,0,0,3,misc,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
+5006,1,6,2,-1,0x2,3,5,1,no,0,0,3,weapon,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
 5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
@@ -1408,6 +1408,7 @@
 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
 5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
 5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x4000, ALL_FULL_THROTTLE,Full Throttle
+5015,1,6,1,0,0xC0,0,5,1,no,0,0,0,misc,0,0,	NC_MAGMA_ERUPTION_DOTDAMAGE,Magma Eruption Dot Damage
 
 // Summoner
 5018,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,		SU_BASIC_SKILL,New Basic Skill

+ 2 - 2
db/re/skill_require_db.txt

@@ -26,11 +26,11 @@
 // 'RequiredStatuses'
 //	Fill the value only with SC_STATUS (see db/const.txt for more details)
 //	Usage for multiple status requirements: SC_STATUS1:SC_STATUS2:SC_STATUS3
-//	Max. multiple value is 3 (skill.h: MAX_SKILL_STATUS_REQUIRE)
+//	Max. multiple value is 3 (skill.hpp: MAX_SKILL_STATUS_REQUIRE)
 //	Use any number or SC_ALL will disable status requirements
 // 'RequiredEquipment'
 //	Specified equipment to be equipped. For multiple values, use : as delimiter.
-//	Max. multiple value is 10 (skill.h: MAX_SKILL_EQUIP_REQUIRE)
+//	Max. multiple value is 10 (skill.hpp: MAX_SKILL_EQUIP_REQUIRE)
 
 //****
 // SM Swordman

+ 1 - 1
db/re/skill_unit_db.txt

@@ -43,7 +43,7 @@
  83,0x86,    ,  0, 3,1000,enemy, 0x010	//WZ_METEOR
  85,0x86,    ,  5:5:5:5:5:5:5:5:5:5:7, 1,1250,enemy,0x018	//WZ_VERMILION
  86,0x86,    ,  0:1:1:2:2:2:2:2:2:2, 0,-1,noone, 0x010	//WZ_WATERBALL
- 87,0x8d,    , -1, 0,  -1,all,   0x9010	//WZ_ICEWALL
+ 87,0x8d,    , -1, 0,1000,all,   0x9010	//WZ_ICEWALL
  89,0x86,    ,  4, 1, 450,enemy, 0x018	//WZ_STORMGUST
  91,0x86,    ,  2, 0,1000,enemy, 0x010	//WZ_HEAVENDRIVE
  92,0x8e,    ,  2, 0,  -1,enemy, 0x8010	//WZ_QUAGMIRE

+ 1 - 1
db/spellbook_db.txt

@@ -4,7 +4,7 @@
 // SkillID,PreservePoints,Required Book
 //
 // NOTE:
-// - To add more entries, increase MAX_SKILL_SPELLBOOK_DB in skill.h.
+// - To add more entries, increase MAX_SKILL_SPELLBOOK_DB in skill.hpp.
 // - To remove entry by importing, put 0 for 'PreservePoints'
 
 //Mage

+ 3 - 2
doc/achievements.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20170531
+//= 20190226
 //===== Description: =========================================
 //= Explanation of the achievements_db.yml file and structure.
 //============================================================
@@ -64,7 +64,8 @@ Example 2:
   // IE: In the achievement_list.lub file, UI_Type 0 is displayed as non-incremental while 1 shows a progress bar of completion for the achievement.
   Condition: " ARG0 >= 100 "
   Target:
-    - Count: 100
+    - Id: 0 // Array index value
+      Count: 100
 
 ---------------------------------------
 

+ 4 - 4
doc/atcommands.txt

@@ -14,7 +14,7 @@ This file describes the usage of in-game commands and assumes that
 	charcommand_symbol: "#"
 
 Some commands cannot be used from console or script command to prevent map-server crashed.
-See atcommand.c::atcommand_basecommands for restricted commands. Please tell us if any
+See atcommand.cpp::atcommand_basecommands for restricted commands. Please tell us if any
 other atcommand that causes map-server crashed executed by console or script commands.
 
 To search for a command, write "@" before the command name (ex. @commands).
@@ -811,7 +811,7 @@ If no coordinates are entered, a random location will be chosen.
 
 Warps to predefined locations in major cities.
 If no ID is given, all available maps will be displayed in the chat window.
-Locations and coordinates are stored in '/src/map/atcommand.c'.
+Locations and coordinates are stored in '/src/map/atcommand.cpp'.
 
 Restriction:
 	- Used from console
@@ -1143,7 +1143,7 @@ Give or remove a cart to a player and also change the cart skin based on ID:
 
 Changes the language attached to the player's account (#langtype).
 If no parameter is given, a list of available languages is displayed.
-All languages are defined in '/src/common/msg_conf.h'.
+All languages are defined in '/src/common/msg_conf.hpp'.
 
 ---------------------------------------
 
@@ -1361,7 +1361,7 @@ Affected files:
 -- battleconf: battle_athena.conf, battle_conf.txt
 -- instancedb: instance_db.txt
 -- itemdb: item_db.txt, item_group_db.txt, item_trade.txt, item_noequip.txt, item_nouse.txt, item_combo_db.txt, item_avail.txt, item_stack.txt, item_delay.txt, item_buyingstore.txt, item_flag.txt
--- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.txt, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
+-- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.yml, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
 -- motd: motd.txt
 -- msgconf: atcommand_athena.conf
 -- pcdb: statpoint.txt, job_exp.txt, skill_tree.txt, attr_fix.txt, job_db1.txt, job_db2.txt, job_basehpsp_db.txt, job_maxhpsp_db.txt, job_param_db.txt, level_penalty.txt

+ 1 - 1
doc/ea_job_system.txt

@@ -13,7 +13,7 @@ Preface:
 -------------------------------------------------------------------------------
 
 	Most scripters are aware of the class values used in RO and their constants
-	specified in src/map/script_constants.h. Each class has a number associated
+	specified in src/map/script_constants.hpp. Each class has a number associated
 	to it for referencing, so when someone's class is 9 that means they are a
 	wizard. However, this list of job numbers has no real order behind it, and
 	no logic behind it's assignation.

+ 7 - 4
doc/item_bonus.txt

@@ -374,11 +374,13 @@ bonus2 bSPDrainRate,x,n;		Adds a x/10% chance to drain n% SP from inflicted dama
 
 HP/SP vanish
 ------------
-bonus2 bHPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% when attacking
-bonus2 bSPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% when attacking
+bonus2 bHPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% with a normal attack
+bonus3 bHPVanishRaceRate,r,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% when attacking, depends on enemy race r
+bonus3 bHPVanishRate,x,n,bf;	Add a x/10% chance of decreasing enemy's HP amount by n% when attacking with trigger criteria bf
 
-bonus3 bHPVanishRaceRate,r,x,n;		Add a x/100% chance of decreasing enemy's HP amount by n% when attacking, depends on enemy race r
-bonus3 bSPVanishRaceRate,r,x,n;		Add a x/100% chance of decreasing enemy's SP amount by n% when attacking, depends on enemy race r
+bonus2 bSPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% with a normal attack
+bonus3 bSPVanishRaceRate,r,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% when attacking, depends on enemy race r
+bonus3 bSPVanishRate,x,n,bf;	Add a x/10% chance of decreasing enemy's SP amount by n% when attacking with trigger criteria bf
 
 bonus3 bStateNoRecoverRace,r,x,t;	Set a no recovery state of an enemy of race r at x/100% for t milliseconds with normal attack.
 
@@ -453,3 +455,4 @@ bonus bRestartFullRecover;	When reviving, HP and SP are fully healed
 bonus bClassChange,n;     		Gives a n/100% chance to change the attacked monster's class with normal attack
 bonus bAddStealRate,n;    		Increases success rate of Steal skill by n/100%
 bonus bNoMadoFuel;			Nullify Magic Gear Fuel requirement for skills.
+bonus bNoWalkDelay;				Give infinite Endure.

+ 2 - 2
doc/item_group.txt

@@ -38,7 +38,7 @@ The table below explains which fields are accessed in each.
 
 ---------------------------------------
 
-GroupID: See the "Item Group ID" section in 'src/map/itemdb.h' and the "item groups" section in 'src/map/script_constants.h'.
+GroupID: See the "Item Group ID" section in 'src/map/itemdb.hpp' and the "item groups" section in 'src/map/script_constants.hpp'.
          Supports IG_* constants.
 
 ---------------------------------------
@@ -65,7 +65,7 @@ Amount: Amount of item that will be obtained.
 
 Random: Set this to '0' and the item will always be obtained ("must" item).
 		Random value will allocates where the item will be stored at random group.
-		(max. random group is 4, defined as MAX_ITEMGROUP_RANDGROUP in 'src/map/itemdb.c'.)
+		(max. random group is 4, defined as MAX_ITEMGROUP_RANDGROUP in 'src/map/itemdb.cpp'.)
 
 	Item Group:
 		IG_MyItemGroup,Knife,0,1,0		//a "must" item

+ 2 - 2
doc/packet_interserv.txt

@@ -24,7 +24,7 @@ The format of this file is as follows:
 ============
 | 1. Notes |
 ============
-Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.c').
+Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.cpp').
 
 =========================
 | 2. Login-Char Packets |
@@ -520,7 +520,7 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 	len: 7
 	parameter:
 		- cmd : packet identification (0x3002)
-		- id: whisper id, identifier to match current whisper session that store in inter.c::wis_db
+		- id: whisper id, identifier to match current whisper session that store in inter.cpp::wis_db
 		- flag: 0=success, 1=target not found, 2=ignored by target
 	desc:
 		- Inform the char-server of the result of the whisper

+ 246 - 161
doc/script_commands.txt

@@ -521,7 +521,7 @@ forever, and no trace remains of it even if it was stored with character or
 account data.
 
 Some variables are special, that is, they are already defined for you by the
-scripting engine. You can see the full list in 'src/map/script_constants.h', which
+scripting engine. You can see the full list in 'src/map/script_constants.hpp', which
 is a file you should read, since it also allows you to replace lots of numbered
 arguments for many commands with easier to read text. The special variables most
 commonly used are all permanent character-based variables:
@@ -565,7 +565,7 @@ setting it will make the character own this number of Zeny.
 If you try to set Zeny to a negative number, the script will be terminated with an error.
 
 Some source-end constants can also be accessed in scripts. This list is located in
-'src/map/script_constants.h', which contains constants such as server defines and status options:
+'src/map/script_constants.hpp', which contains constants such as server defines and status options:
 
 	PACKETVER, MAX_LEVEL, MAX_STORAGE, MAX_INVENTORY, MAX_CART, MAX_ZENY, MAX_PARTY,
 	MAX_GUILD, MAX_GUILDLEVEL, MAX_GUILD_STORAGE, MAX_BG_MEMBERS, MAX_CHAT_USERS,
@@ -582,8 +582,8 @@ Assigning variables
 
 Variables can be accessed and modified much like in other programming languages.
 
-	@x = 100;
-	@x = @y = 100;
+	.@x = 100;
+	.@x = .@y = 100;
 
 Support for modifying variable values using 'set' is still supported (and required
 to exist for this new method to work) so previous scripts will continue to work.
@@ -591,13 +591,13 @@ to exist for this new method to work) so previous scripts will continue to work.
 When assigning values, all operator methods are supported which exist in the below
 'Operators' section. For instance:
 
-	@x += 100;
-	@x -= 100;
-	@x *= 2;
-	@x /= 2;
-	@x %= 5;
-	@x >>= 2;
-	@x <<= 2;
+	.@x += 100;
+	.@x -= 100;
+	.@x *= 2;
+	.@x /= 2;
+	.@x %= 5;
+	.@x >>= 2;
+	.@x <<= 2;
 
 Will all work. For more information on available operators, see the Operators section
 described below. All operators listed there may be placed in-front of the '=' sign
@@ -631,15 +631,15 @@ Arrays are specifically useful for storing a set of similar data (like several
 item IDs for example) and then looping through it. You can address any array
 variable as if it was a normal variable:
 
-	set @arrayofnumbers[0],1;
+	set .@arrayofnumbers[0],1;
 
 You can also do things like using a variable (or an expression, or even a
 value from another array) to get at an array value:
 
-	set @x,100;
-	set @arrayofnumbers[@x],10;
+	set .@x,100;
+	set .@arrayofnumbers[.@x],10;
 
-This will make @arrayofnumbers[100] equal to 10.
+This will make .@arrayofnumbers[100] equal to 10.
 
 Index numbering always starts with 0 and arrays can hold over 2 billion
 variables. As such, the (guaranteed) allowed values for indices are in the
@@ -651,7 +651,7 @@ to be pretty.
 
 Arrays can naturally store strings:
 
-@menulines$[0] is the 0th element of the @menulines$ array of strings. Notice
+.@menulines$[0] is the 0th element of the .@menulines$ array of strings. Notice
 the '$', normally denoting a string variable, before the square brackets that
 denotes an array index.
 
@@ -697,7 +697,7 @@ Examples:
 
  1 == 1 is True.
  1<2 is True while 1>2 is False.
- @x>2 is True if @x is equal to 3. But it isn't true if @x is 2.
+ .@x>2 is True if .@x is equal to 3. But it isn't true if .@x is 2.
 
 Only ' == ' and '!=' have been tested for comparing strings. Since there's no way
 to code a seriously complex data structure in this language, trying to sort
@@ -754,14 +754,14 @@ Logical bitwise operators work only on numbers, and they are the following:
 		2 = 2^1 (2), so in bits (same size) it would be 0010
 		The & (AND) operator sets bits which are active (1) in both arguments, so in the
 		example 1010 & 0010, only the 2^1 bit is active (1) in both. Resulting in the bit
-		0010, which is 2.
+		0010, which is 2. 
 	- Basic example of creating and using a bit-mask:
-		set @options,2|4|16; //(note: this is the same as 2+4+16, or 22)
-		if (@options & 1)	mes "Option 1 is activated";
-		if (@options & 2) mes "Option 2 is activated";
-		if (@options & 4) mes "Option 3 is activated";
-		if (@options & 8) mes "Option 4 is activated";
-		if (@options & 16) mes "Options 5 is activated";
+		set .@options,2|4|16; //(note: this is the same as 2+4+16, or 22)
+		if (.@options & 1)	mes "Option 1 is activated";
+		if (.@options & 2)	mes "Option 2 is activated";
+		if (.@options & 4)	mes "Option 3 is activated";
+		if (.@options & 8)	mes "Option 4 is activated";
+		if (.@options & 16)	mes "Options 5 is activated";
 	This would return the messages about option 2, 3 and 5 being shown (since we've set
 	the 2,4 and 16 bit to 1).
  ^  - Xor.
@@ -1002,7 +1002,7 @@ and called label is in NPC that has trigger area, that label must end with
 "Global" to work globally (i.e. if RID is outside of the trigger area, which
 usually happens since otherwise there would be no point calling the label with
 doevent, because OnTouch would do the job). For further reference look for
-npc_event in npc.c.
+npc_event in npc.cpp.
 
 Scripting commands and functions
 --------------------------------
@@ -1232,14 +1232,14 @@ other programming language (refer to the "Assigning variables" section).
 This is the most basic script command and is used a lot whenever you try to do
 anything more advanced than just printing text into a message box.
 
-	set @x,100;
+	set .@x,100;
 
-will make @x equal 100.
+will make .@x equal 100.
 
-	set @x,1+5/8+9;
+	set .@x,1+5/8+9;
 
 will compute 1+5/8+9 (which is, surprisingly, 10 - remember, all numbers are
-integer in this language) and make @x equal it.
+integer in this language) and make .@x equal it.
 
 Returns the variable reference (since trunk r12870).
 
@@ -1278,7 +1278,7 @@ This can also be used to set an array dynamically:
 Examples:
 
 	set getd("$varRefence"), 1;
-	set @i, getd("$" + "pikachu");
+	set .@i, getd("$" + "pikachu");
 
 ---------------------------------------
 
@@ -1387,46 +1387,46 @@ with the strings that should go into the menu at this execution, making sure not
 to leave any gaps. Normally, you do it with a loop and an extra counter, like
 this:
 
-	setarray @possiblemenuitems$[0],<list of potential menu items>;
-	@j = 0; // That's the menu lines counter.
+	setarray .@possiblemenuitems$[0],<list of potential menu items>;
+	.@j = 0; // That's the menu lines counter.
 
 	// We loop through the list of possible menu items.
-	// @i is our loop counter.
-	for( @i = 0; @i < getarraysize(@possiblemenuitems$); @i++ )
+	// .@i is our loop counter.
+	for( .@i = 0; .@i < getarraysize(.@possiblemenuitems$); .@i++ )
 	{
 		// That 'condition' is whatever condition that determines whether
-		// a menu item number @i actually goes into the menu or not.
+		// a menu item number .@i actually goes into the menu or not.
 
 		if (<condition>)
 		{
 			// We record the option into the list of options actually available.
 
-			@menulist$[@j] = @possiblemenuitems$[@i];
+			.@menulist$[@j] = .@possiblemenuitems$[@i];
 
 			// We just copied the string, we do need its number for later
 			// though, so we record it as well.
 
-			@menureference[@j] = @i;
+			.@menureference[@j] = .@i;
 
 			// Since we've just added a menu item into the list, we increment
 			// the menu lines counter.
 
-			@j++;
+			.@j++;
 		}
 
 		// We go on to the next possible menu item.
 	}
 
-This will create you an array @menulist$ which contains the text of all items
+This will create you an array .@menulist$ which contains the text of all items
 that should actually go into the menu based on your condition, and an array
-@menureference, which contains their numbers in the list of possible menu items.
+.@menureference, which contains their numbers in the list of possible menu items.
 (Remember, arrays start with 0.) There's less of them than the possible menu
 items you've defined, but the menu command can handle the empty lines - only if
 they are last in the list, and if it's made this way, they are. Now comes a
 dirty trick:
 
 	// X is whatever the most menu items you expect to handle.
-	menu @menulist$[0],-,@menulist$[1],-,....@menulist$[<X>],-;
+	menu .@menulist$[0],-,.@menulist$[1],-,...,.@menulist$[<X>],-;
 
 This calls up a menu of all your items. Since you didn't copy some of the
 possible menu items into the list, its end is empty and so no menu items will
@@ -1441,18 +1441,18 @@ But how do you figure out which option the user picked? Enter the @menu.
 starting with 1 for the first option. You know now which option the user picked
 and which number in your real list of possible menu items it translated to:
 
-    mes "You selected " + @possiblemenuitems$[@menureference[@menu-1]] + "!";
+    mes "You selected " + .@possiblemenuitems$[.@menureference[@menu-1]] + "!";
 
 @menu is the number of option the user picked.
 @menu-1 is the array index for the list of actually used menu items that we
 made.
-@menureference[@menu-1] is the number of the item in the array of possible menu
+.@menureference[@menu-1] is the number of the item in the array of possible menu
 items that we've saved just for this purpose.
 
-And @possiblemenuitems$[@menureference[@menu-1]] is the string that we used to
+And .@possiblemenuitems$[.@menureference[@menu-1]] is the string that we used to
 display the menu line the user picked. (Yes, it's a handful, but it works.)
 
-You can set up a bunch of 'if (@menureference[@menu-1] == X) goto Y' statements to
+You can set up a bunch of 'if (.@menureference[@menu-1] == X) goto Y' statements to
 route your execution based on the line selected and still generate a different
 menu every time, which is handy when you want to, for example, make users select
 items in any specific order before proceeding, or make a randomly shuffled menu.
@@ -1464,7 +1464,7 @@ probably since that wasn't documented anywhere.
 See also 'select', which is probably better in this particular case. Instead of
 menu, you could use 'select' like this:
 
-    @dummy = select(@menulist$[0],@menulist$[1],....@menulist$[<X>]);
+    .@dummy = select(.@menulist$[0],.@menulist$[1],...,.@menulist$[<X>]);
 
 For the purposes of the technique described above these two statements are
 perfectly equivalent.
@@ -1580,8 +1580,8 @@ generally cleaner:
 		mes "[Man]"
 		mes "Gimme a number!";
 		next;
-		input @number;
-		if (callfunc("OddFunc",@number)) mes "It's Odd!";
+		input .@number;
+		if (callfunc("OddFunc",.@number)) mes "It's Odd!";
 		close;
 	}
 	function%TAB%script%TAB%OddFunc%TAB%{
@@ -1890,15 +1890,15 @@ Notice that examples 1 and 2 have the same effect.
 
 Example 3:
 
-	@count++;
+	.@count++;
 	mes "[Forgetful Man]";
-	if (@count == 1) mes "This is the first time you have talked to me.";
-	if (@count == 2) mes "This is the second time you have talked to me.";
-	if (@count == 3) mes "This is the third time you have talked to me.";
-	if (@count == 4) {
+	if (.@count == 1) mes "This is the first time you have talked to me.";
+	if (.@count == 2) mes "This is the second time you have talked to me.";
+	if (.@count == 3) mes "This is the third time you have talked to me.";
+	if (.@count == 4) {
 		mes "This is the fourth time you have talked to me.";
 		mes "I think I am getting amnesia, I have forgotten about you...";
-		@count = 0;
+		.@count = 0;
 	}
 	close;
 
@@ -2182,19 +2182,19 @@ Example:
 This command will allow you to quickly fill up an array in one go. Check the
 Kafra scripts in the distribution to see this used a lot.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
 
 First value is the index of the first element of the array to alter. For
 example:
 
-    setarray @array[0],200,200,200;
-    setarray @array[1],300,150;
+    setarray .@array[0],200,200,200;
+    setarray .@array[1],300,150;
 
 will produce:
 
- @array[0]=200
- @array[1]=300
- @array[2]=150
+ .@array[0]=200
+ .@array[1]=300
+ .@array[2]=150
 
 ---------------------------------------
 
@@ -2202,13 +2202,13 @@ will produce:
 
 This command will change many array values at the same time to the same value.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
     // This will make all 6 values 0
-    cleararray @array[0],0,6;
+    cleararray .@array[0],0,6;
     // This will make array element 0 change to 245
-    cleararray @array[0],245,1;
+    cleararray .@array[0],245,1;
     // This will make elements 1 and 2 change to 345
-    cleararray @array[1],345,2;
+    cleararray .@array[1],345,2;
 
 See 'setarray'.
 
@@ -2219,28 +2219,28 @@ See 'setarray'.
 This command lets you quickly shuffle a lot of data between arrays, which is in
 some cases invaluable.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
-    // So we have made @array[]
-    copyarray @array2[0],@array[2],2;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
+    // So we have made .@array[]
+    copyarray .@array2[0],@array[2],2;
 
-    // Now, @array2[0] will be equal to @array[2] (300) and
-    // @array2[1] will be equal to @array[3].
+    // Now, .@array2[0] will be equal to .@array[2] (300) and
+    // .@array2[1] will be equal to .@array[3].
 
 So using the examples above:
- @array[0] = 100
- @array[1] = 200
- @array[2] = 300
- @array[3] = 400
- @array[4] = 500
- @array[5] = 600
+ .@array[0] = 100
+ .@array[1] = 200
+ .@array[2] = 300
+ .@array[3] = 400
+ .@array[4] = 500
+ .@array[5] = 600
 
 New Array:
- @array2[0] = 300
- @array2[1] = 400
- @array2[2] = 0
- @array2[3] = 0
+ .@array2[0] = 300
+ .@array2[1] = 400
+ .@array2[2] = 0
+ .@array2[3] = 0
 
-Notice that @array[4] and @array[5] won't be copied to the second array, and it will return a
+Notice that .@array[4] and .@array[5] won't be copied to the second array, and it will return a
 0.
 
 ---------------------------------------
@@ -2252,12 +2252,12 @@ array, shifting all the elements beyond this towards the beginning.
 
     // This will delete array element 0, and move all the other array elements
     // up one place.
-    deletearray @array[0],1
+    deletearray .@array[0],1
 
 // This would delete array elements numbered 1, 2 and 3, leave element 0 in its
 // place, and move the other elements ups, so there are no gaps.
 
-    deletearray @array[1],3
+    deletearray .@array[1],3
 
 ---------------------------------------
 
@@ -2295,7 +2295,7 @@ While being optional, if [<start index>] is supplied, the search will begin from
 	
 	.@variable = 100;
 	if(countinarray(.@array[0], .@variable))
-		mes "The number 100 was found in the array @array";
+		mes "The number 100 was found in the array .@array";
 	
 	countinarray(.@array[0], .@variable);
 	//return 1 because the number 100 is an element of the array .@array
@@ -2358,15 +2358,15 @@ counted towards this number.
 
 For example:
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
-    set @arraysize,getarraysize(@array);
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
+    set .@arraysize,getarraysize(.@array);
 
-This will make @arraysize == 6. But if you try this:
+This will make .@arraysize == 6. But if you try this:
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600, 0;
-    set @arraysize,getarraysize(@array);
+    setarray .@array[0], 100, 200, 300, 400, 500, 600, 0;
+    set .@arraysize,getarraysize(.@array);
 
-@arraysize will still equal 6, even though you've set 7 values.
+.@arraysize will still equal 6, even though you've set 7 values.
 
 ---------------------------------------
 
@@ -2391,7 +2391,7 @@ Also useful when passing arrays to functions or accessing another npc's arrays:
 
 This function will return the specified stat of the invoking character, or, if a
 character name or character id is specified, of that player. The stat can either
-be a number or parameter name, defined in 'src/map/script_constants.h'.
+be a number or parameter name, defined in 'src/map/script_constants.hpp'.
 
 Some example parameters:
 
@@ -3046,7 +3046,7 @@ If <type> is false the command only returns the count of unidentified items.
 //
 ---------------------------------------
 
-*getmapxy("<variable for map name>",<variable for x>,<variable for y>,<type>{,"<search string>"})
+*getmapxy("<variable for map name>",<variable for x>,<variable for y>{,<type>,"<search value>"})
 
 This function will locate a character object, NPC object or pet's coordinates
 and place their coordinates into the variables specified when calling it. It
@@ -3055,23 +3055,23 @@ not variables or the search was not successful.
 
 Type is the type of object to search for:
 
-	UNITTYPE_PC   - Character object
-	UNITTYPE_NPC  - NPC object
-	UNITTYPE_PET  - Pet object
-	UNITTYPE_HOM  - Homunculus object
-	UNITTYPE_MER  - Mercenary object
-	UNITTYPE_ELEM - Elemental object
+	BL_PC   - Character object (default)
+	BL_NPC  - NPC object
+	BL_PET  - Pet object
+	BL_HOM  - Homunculus object
+	BL_MER  - Mercenary object
+	BL_ELEM - Elemental object
 
-The search string is optional. If it is not specified, the location of the
-invoking character will always be returned for types UNITTYPE_PC and UNITTYPE_PET,
-the location of the NPC running this function for type 1.
+The search value is optional. If it is not specified, the location of the
+invoking character will always be returned for types BL_PC and BL_PET,
+the location of the NPC running this function for type BL_NPC.
 
-If a search string is specified, for types UNITTYPE_PC and UNITTYPE_NPC, the
-character or NPC with the specified name will be located.
+If a search value is specified, for types BL_PC and BL_NPC, the
+character or NPC with the specified name or GID will be located.
 
-If type is UNITTYPE_PET/UNITTYPE_HOM/UNITTYPE_MER/UNITTYPE_ELEM, the search
-will locate the current object of the character who's name is given in the
-search string, it will NOT locate the object by name.
+If type is BL_PET/BL_HOM/BL_MER/BL_ELEM, the search
+will locate the current object of the character who's name/GID is given in the
+search value, it will NOT locate the object by name.
 
 Example:
 
@@ -3083,11 +3083,11 @@ Example:
     prontera,164,299,3%TAB%script%TAB%Nyah%TAB%730,{
         mes "My name is Nyah.";
         mes "I will now search for Meh all across the world!";
-        if (getmapxy(@mapname$, @mapx, @mapy, UNITTYPE_NPC, "Meh") != 0) {
+        if (getmapxy(.@mapname$, .@mapx, .@mapy, BL_NPC, "Meh") != 0) {
                 mes "I can't seem to find Meh anywhere!";
                 close;
         }
-        mes "And I found him on map " + @mapname$ + " at X:" + @mapx + " Y:" + @mapy + " !";
+        mes "And I found him on map " + .@mapname$ + " at X:" + .@mapx + " Y:" + .@mapy + " !";
         close;
    }
 
@@ -3747,7 +3747,7 @@ list (cloak, cart, ruwach, etc). if flag is 1 (default when omitted),
 the option will be added to what the character currently has; if 0, the option is removed.
 
 This is definitely not a complete list of available option flag numbers. Ask a
-core developer (or read the source: src/map/status.h) for the full list.
+core developer (or read the source: src/map/status.hpp) for the full list.
 
 ---------------------------------------
 
@@ -3921,7 +3921,7 @@ more:
 
 *checkre(<type>)
 
-Checks if a renewal feature is enabled or not in renewal.h, and returns 1 if
+Checks if a renewal feature is enabled or not in renewal.hpp, and returns 1 if
 enabled and 0 for disabled.
 
 The renewal feature to check is determined by type.
@@ -4283,7 +4283,7 @@ This command will change the job class of the invoking character.
 
 This command does work with numbers, but you can also use job names. The full
 list of job names and the numbers they correspond to can be found in
-'src/map/script_constants.h'.
+'src/map/script_constants.hpp'.
 
 	// This would change your player into a Swordman
 	jobchange Job_Swordman;
@@ -4322,12 +4322,12 @@ class number system, but it's one that comes with constants which make it easy
 to convert among classes. The command will return -1 if you pass it a job number
 which doesn't have an eA job-number equivalent.
 
-	@eac = eaclass();
-	if ((@eac&EAJ_BASEMASK) == EAJ_SWORDMAN)
+	.@eac = eaclass();
+	if ((.@eac&EAJ_BASEMASK) == EAJ_SWORDMAN)
 		mes "Your base job is Swordman.";
-	if (@eac&EAJL_UPPER)
+	if (.@eac&EAJL_UPPER)
 		mes "You are a rebirth job.";
-	if ((@eac&EAJ_UPPERMASK) == EAJ_SWORDMAN)
+	if ((.@eac&EAJ_UPPERMASK) == EAJ_SWORDMAN)
 		mes "You must be a Swordman, Baby Swordman or High Swordman.";
 
 For more information on the eA Job System, see the docs/ea_job_system.txt file.
@@ -4343,16 +4343,16 @@ gender if none is given (if no player is attached, male will be used by default)
 The command will return -1 if there is no valid class to represent the specified
 job (for example, if you try to get the baby version of a Taekwon class).
 
-	@eac = eaclass();
+	.@eac = eaclass();
 	//Check if class is already rebirth
-	if (@eac&EAJL_UPPER) {
+	if (.@eac&EAJL_UPPER) {
 		mes "You look strong.";
 		close;
 	}
-	@eac = roclass(@eac|EAJL_UPPER);
+	.@eac = roclass(.@eac|EAJL_UPPER);
 	//Check if class has a rebirth version
-	if (@eac != -1) {
-		mes "Bet you can't wait to become a " + jobname(@eac) + "!";
+	if (.@eac != -1) {
+		mes "Bet you can't wait to become a " + jobname(.@eac) + "!";
 		close;
 	}
 
@@ -4509,7 +4509,7 @@ you can look at: 'npc/custom/stylist.txt'
 
 This command will push the currently attached player to given direction by given
 amount of square cells. Direction is the same as used when declaring NPCs, and
-can be specified by using one of the DIR_* constants (src/map/script_constants.h).
+can be specified by using one of the DIR_* constants (src/map/script_constants.hpp).
 
 The knock-back is not restricted by items or map flags, only obstacles are taken
 into account. If there is not enough space to perform the push (e.g. due to a
@@ -4633,24 +4633,24 @@ this. Careful, minor magic ahead.
 	// First, let's get an ID of a character who's name will be on the item.
 	// Only an existing character's name may be there.
 	// Let's assume our character is 'Adam' and find his ID.
-	@charid = getcharid(0,"Adam");
+	.@charid = getcharid(0,"Adam");
 
 	// Now we split the character ID number into two portions with a binary
 	// shift operation. If you don't understand what this does, just copy it.
-	@card3 = @charid & 65535;
-	@card4 = @charid >> 16;
+	.@card3 = .@charid & 65535;
+	.@card4 = .@charid >> 16;
 
-	// If you're inscribing non-equipment, @card1 must be 254.
+	// If you're inscribing non-equipment, .@card1 must be 254.
 	// Arrows are also not equipment.
-	@card1 = 254;
+	.@card1 = 254;
 
 	// For named equipment, card2 means the Star Crumbs and elemental
 	// crystals used to make this equipment. For everything else, it's 0.
-	@card2 = 0;
+	.@card2 = 0;
 
 	// Now, let's give the character who invoked the script some
 	// Adam's Apples:
-	getitem2 512,1,1,0,0,@card1,@card2,@card3,@card4;
+	getitem2 512,1,1,0,0,.@card1,.@card2,.@card3,.@card4;
 
 This wasn't tested with all possible items, so I can't give any promises,
 experiment first before relying on it.
@@ -4661,21 +4661,21 @@ To create equipment, continue this example it like this:
 	// values so we'll just set up card1 and card2 with data
 	// for an Ice Stiletto.
 
-	// If you're inscribing equipment, @card1 must be 255.
-	@card1 = 255;
+	// If you're inscribing equipment, .@card1 must be 255.
+	.@card1 = 255;
 
 	// That's the number of star crumbs in a weapon.
-	@sc = 2;
+	.@sc = 2;
 
 	// That's the number of elemental property of the weapon.
-	@ele = 1;
+	.@ele = 1;
 
 	// And that's the wacky formula that makes them into
 	// a single number.
-	@card2 = @ele+((@sc*5)<<8);
+	.@card2 = .@ele+((.@sc*5)<<8);
 
 	// That will make us an Adam's +2 VVS Ice Stiletto:
-	getitem2 1216,1,1,2,0,@card1,@card2,@card3,@card4;
+	getitem2 1216,1,1,2,0,.@card1,.@card2,.@card3,.@card4;
 
 Experiment with the number of star crumbs - I'm not certain just how much will
 work most and what it depends on. The valid element numbers are:
@@ -4844,7 +4844,7 @@ Example to get Crimson Weapon with Ghost property:
 	// when Valkyrie Randgris killed
 	OnNPCKillEvent:
 		if (killedrid == 1751 && rand(0,1000) > 950) { // Valkyrie Randgris
-			getmapxy(.@map$,.@x,.@y,UNITTYPE_PC);
+			getmapxy(.@map$,.@x,.@y,BL_PC);
 			setarray .@OptID[0],RDMOPT_ATTR_TOLERACE_NOTHING,RDMOPT_RACE_TOLERACE_HUMAN;
 			setarray .@OptVal[0],10,5;
 			setarray .@OptParam[0],0;
@@ -5354,7 +5354,7 @@ Example:
 
 These commands toggle the ability to use atcommand while interacting with an NPC.
 
-The default setting, 'atcommand_enable_npc', is defined in 'conf/battle/gm.conf'.
+The default setting, 'atcommand_disable_npc', is defined in 'conf/battle/gm.conf'.
 
 ---------------------------------------
 //
@@ -5634,8 +5634,8 @@ Used in reset NPC's (duh!)
 These commands will bestow a status effect on a character.
 
 The <effect type> determines which status is invoked. This can be either a number
-or constant, with the common statuses (mostly negative) found in 'src/map/script_constants.h'
-with the 'SC_' prefix. A full list is located in 'src/map/status.h', though
+or constant, with the common statuses (mostly negative) found in 'src/map/script_constants.hpp'
+with the 'SC_' prefix. A full list is located in 'src/map/status.hpp', though
 they are not currently documented.
 
 The duration of the status is given in <ticks>, or milleseconds.
@@ -5920,7 +5920,7 @@ Types:
 	1: Buff
 	2: Debuff
 
-Status_icon: See "Status Icon" section in 'src/map/script_constants.h'. Default is SI_BLANK (-1).
+Status_icon: See "Status Icon" section in 'src/map/script_constants.hpp'. Default is SI_BLANK (-1).
 
 Example:
 	// Apple gives you +5 Str bonus for 1 minute when it's consumed.
@@ -6133,6 +6133,58 @@ Examples:
 
 ---------------------------------------
 
+*setpcblock <type>,<state>{,<account ID>};
+*getpcblock {<account ID>};
+
+'setpcblock' command prevents/allows the player from doing the given <type> of action according
+to the <state> during the player session (note: @reloadscript removes all <type> except PCBLOCK_IMMUNE).
+The <type> values are bit-masks, multiples of <type> can be added to change the player action.
+
+The action is blocked when the <state> is true, while false allows the action again.
+
+'getpcblock' command return the bit-mask value of the currently
+enabled block flags.
+
+Available <type>:
+	PCBLOCK_MOVE				Prevent the player from moving.
+	PCBLOCK_ATTACK				Prevent the player from attacking.
+	PCBLOCK_SKILL				Prevent the player from using skills/itemskills.
+	PCBLOCK_USEITEM				Prevent the player from using usable items.
+	PCBLOCK_CHAT				Prevent the player from sending global/guild/party/whisper messages.
+	PCBLOCK_IMMUNE				Prevent the player from being hit by monsters.
+	PCBLOCK_SITSTAND			Prevent the player from sitting/standing.
+	PCBLOCK_COMMANDS			Prevent the player from using atcommands/charcommands.
+	PCBLOCK_NPCCLICK			Prevent the player from clicking/touching any NPC/shop/warp.
+	PCBLOCK_EMOTION				Prevent the player from using emotions.
+	PCBLOCK_NPC				Simulate NPC interaction. Useful for NPC with no mes window. Sum of PCBLOCK_MOVE|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK.
+	PCBLOCK_ALL				Sum of all the flags.
+
+Examples:
+
+// Make the attached player invulnerable to monster (same as @monsterignore)
+	setpcblock PCBLOCK_IMMUNE, true;
+
+// Prevents the attached player from attacking and using skills
+	setpcblock PCBLOCK_ATTACK|PCBLOCK_SKILL, true;
+
+// Re-enables attack, skills and item use
+	setpcblock PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM, false;
+
+// getpcblock related checks
+	if (getpcblock() & PCBLOCK_IMMUNE)
+		mes "You are invulnerable!";
+
+	if (getpcblock() & (PCBLOCK_MOVE|PCBLOCK_SITSTAND))
+		mes "You can't walk or sit.";
+
+	if ((getpcblock() & (PCBLOCK_ATTACK|PCBLOCK_SKILL)) == 0)
+		mes "You can attack and use skills.";
+
+	if (getpcblock() & PCBLOCK_CHAT)
+		mes "You can't chat.";
+
+---------------------------------------
+
 ==================================
 |5.- Mob / NPC -related commands.|
 ==================================
@@ -6756,7 +6808,7 @@ This command will broadcast a message to all or most players, similar to
 The region the broadcast is heard in (target), source of the broadcast
 and the color the message will come up as is determined by the flags.
 
-The flag values are coded as constants in 'src/map/script_constants.h' to make them easier to use.
+The flag values are coded as constants in 'src/map/script_constants.hpp' to make them easier to use.
 
 Target flags:
 - bc_all: Broadcast message is sent server-wide (default).
@@ -7514,7 +7566,7 @@ must be used.
 
 This command makes an object display an emotion sprite above their own as
 if they were doing that emotion. For a full list of emotion numbers,
-see 'src/map/script_constants.h' under 'ET_'. The not so obvious ones are 'ET_QUESTION'
+see 'src/map/script_constants.hpp' under 'ET_'. The not so obvious ones are 'ET_QUESTION'
 (a question mark) and 'ET_SURPRISE' (the exclamation mark).
 
 The optional target parameter specifies who will get the emotion on top of
@@ -7815,13 +7867,14 @@ it does.
 Returns the type of object from the given Game ID. Returns -1 if the given GID does not
 exist.
 
-	UNITTYPE_PC     0
-	UNITTYPE_NPC    1
-	UNITTYPE_PET    2
-	UNITTYPE_MOB    3
-	UNITTYPE_HOM    4
-	UNITTYPE_MER    5
-	UNITTYPE_ELEM   6
+Return values:
+	BL_PC   - Character object
+	BL_MOB  - Monster object
+	BL_PET  - Pet object
+	BL_HOM  - Homunculus object
+	BL_MER  - Mercenary object
+	BL_NPC  - NPC object
+	BL_ELEM - Elemental object
 
 ---------------------------------------
 
@@ -8119,7 +8172,7 @@ Parameter (indexes) for NPCs are:
 
 *Notes:
 		- *_SIZE: small (0); medium (1); large (2)
-	    - *_MAPID: this refers to the map_data index (from src/map/map.c), not the mapindex_db index (from src/common/mapindex.c)
+	    - *_MAPID: this refers to the map_data index (from src/map/map.cpp), not the mapindex_db index (from src/common/mapindex.cpp)
 			-- For 'setunitdata', map name can also be passed in as a valid value instead of map ID
 		- *_SPEED: 20 - 1000
 		- *_MODE: see doc/mob_db_mode_list.txt
@@ -8147,9 +8200,9 @@ Example:
 	monster "prontera",149,190,"Poring",1002,10;
 	.GID = $@mobid[9]; // Store and modify the 10th Poring spawned to make him stronger!
 
-	// Save the strong Poring's mob data in the @por_arr[] variable. (@por_arr[1] being level, @por_arr[13] being class, etc.)
+	// Save the strong Poring's mob data in the .@por_arr[] variable. (.@por_arr[1] being level, .@por_arr[13] being class, etc.)
 	// With this data we can have the NPC display or manipulate it how we want. This does not have to be ran before 'setunitdata'.
-	getunitdata .GID,@por_arr;
+	getunitdata .GID,.@por_arr;
 
 	// Set the max HP of the Poring to 1000 (current HP will also get updated to 1000).
 	setunitdata .GID,UMOB_MAXHP,1000;
@@ -8706,7 +8759,7 @@ Each of these can be 'on' or 'off'. Together they define a cell's behavior.
 
 This command lets you alter these flags for all map cells in the specified
 (x1,y1)-(x2,y2) rectangle. The 'flag' can be 0 or 1 (0:clear flag, 1:set flag).
-The 'type' defines which flag to modify. Possible options see 'src/map/script_constants.h'.
+The 'type' defines which flag to modify. Possible options see 'src/map/script_constants.hpp'.
 
 Example:
 
@@ -8740,7 +8793,7 @@ remove a nonwalkable row of cells after the barricade mobs.
 
 This command will return 1 or 0, depending on whether the specified cell has
 the 'type' flag set or not. There are various types to check, all mimicking
-the server's cell_chk enumeration. The types can be found in 'src/map/script_constants.h'.
+the server's cell_chk enumeration. The types can be found in 'src/map/script_constants.hpp'.
 
 The meaning of the individual types can be confusing, so here's an overview:
   - cell_chkwall/water/cliff
@@ -9194,6 +9247,10 @@ The player will also be warped to the default spawn point of the battle group or
 <On Quit Event> refers to an NPC label that attaches to the character and is run when they relog. (Optional)
 <On Death Event> refers to an NPC label that attaches to the character and is run when they die. (Optional)
 
+If "-" is supplied for <map name> then the player will not automatically respawn after the 1 second delay.
+This allows for better manipulation of <On Death Event>. The player will have to be warped to desired location
+at the end of <On Death Event>.
+
 Unlike the prior command, the latter will attach a GROUP in a waiting room to the battleground, and
 sets the array $@arenamembers[0] where 0 holds the IDs of the first group, and 1 holds the IDs of the second.
 
@@ -9214,6 +9271,10 @@ Creates an instance of battleground battle group that can be used with other bat
 <On Quit Event> refers to an NPC label that attaches to the character and is run when they relog. (Optional)
 <On Death Event> refers to an NPC label that attaches to the character and is run when they die. (Optional)
 
+If "-" is supplied for <map name> then the player will not automatically respawn after the 1 second delay.
+This allows for better manipulation of <On Death Event>. The player will have to be warped to desired location
+at the end of <On Death Event>.
+
 Returns battle group ID on success. Returns 0 on failure.
 
 ---------------------------------------
@@ -9371,7 +9432,7 @@ monster as long as it is in the pet database and the targeted monster requires t
 item used.
 See 'doc/mob_db_mode_list.txt' for more information about monster modes.
 
-A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.txt'.
+A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.yml'.
 
 ---------------------------------------
 
@@ -9379,7 +9440,7 @@ A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.txt'.
 
 This command will create a pet egg and put it in the invoking character's
 inventory. The kind of pet is specified by pet ID numbers listed in
-'db/(pre-)re/pet_db.txt'. The egg is created exactly as if the character just successfully
+'db/(pre-)re/pet_db.yml'. The egg is created exactly as if the character just successfully
 caught a pet in the normal way.
 
 	// This will make you a poring:
@@ -9397,16 +9458,40 @@ This function will return pet information for the pet the invoking character
 currently has active. Valid types are:
 
  PETINFO_ID - Pet ID
- PETINFO_CLASS - Pet class number as per 'db/(pre-)re/pet_db.txt' - will tell you what kind of a pet it
-     is.
+ PETINFO_CLASS - Pet class number as per 'db/(pre-)re/pet_db.yml' - will tell you what kind of a pet it is.
  PETINFO_NAME - Pet name. Will return "null" if there's no pet.
  PETINFO_INTIMATE - Pet friendly level (intimacy score). 1000 is full loyalty.
- PETINFO_HUNGRY - Pet hungry level. 100 is completely full.
+ PETINFO_HUNGRY - Pet hungry level. 100 is full hunger.
  PETINFO_RENAMED - Pet rename flag. 0 means this pet has not been named yet.
  PETINFO_LEVEL - Pet level
  PETINFO_BLOCKID - Pet Game ID
- PETINFO_EGGID - Pet egg item id
- PETINFO_FOODID - Pet food item id
+ PETINFO_EGGID - Pet egg item ID
+ PETINFO_FOODID - Pet food item ID
+
+PETINFO_INTIMATE can be used with the following constants for checking values:
+ PET_INTIMATE_NONE = 0
+ PET_INTIMATE_AWKWARD = 1 ~ 99
+ PET_INTIMATE_SHY = 100 ~ 249
+ PET_INTIMATE_NEUTRAL = 250 ~ 749
+ PET_INTIMATE_CORDIAL = 750 ~ 909
+ PET_INTIMATE_LOYAL = 910 ~ 1000
+
+PETINFO_HUNGRY can be used with the following constants for checking values:
+ PET_HUNGRY_NONE = 0
+ PET_HUNGRY_VERY_HUNGRY = 1 ~ 10
+ PET_HUNGRY_HUNGRY = 11 ~ 25
+ PET_HUNGRY_NEUTRAL = 26 ~ 75
+ PET_HUNGRY_SATISFIED = 76 ~ 90
+ PET_HUNGRY_STUFFED = 91 ~ 100
+
+Example:
+	mes "[Vet]";
+	mes "Your pet + " getpetinfo(PETINFO_NAME);
+	if (getpetinfo(PETINFO_INTIMATE) < PET_INTIMATE_LOYAL)
+		mes "has some growing to do on you!";
+	else
+		mes "seems to love you very much!";
+	close;
 
 ---------------------------------------
 
@@ -9461,7 +9546,7 @@ NOTE: Currently ONLY supported for bonuses that used by 'bonus' script.
 This command will make the pet cure a specified status condition. The curing
 actions will occur once every Delay seconds. For a full list of status
 conditions that can be cured, see the list of 'SC_' status condition constants
-in 'src/map/script_constants.h'.
+in 'src/map/script_constants.hpp'.
 
 ---------------------------------------
 
@@ -9945,7 +10030,7 @@ 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 'src/map/script_constants.h' starting
+The Hat Effect constants can be found in 'src/map/script_constants.hpp' starting
 with HAT_EF_*.
 
 Requires client 2015-05-13aRagEXE or newer.

+ 4 - 4
doc/skill_require_db.txt

@@ -128,8 +128,8 @@ RequiredStatuses: The active statuses needed to use the skill.
 Up to 3 ':'-separated values can be used, e.g.
     SC_STATUS1:SC_STATUS2:SC_STATUS3
 
-See MAX_SKILL_STATUS_REQUIRE in 'src/map/skill.h' to modify the max number
-of possible values, and 'db/const.txt' for a list of status constants.
+See MAX_SKILL_STATUS_REQUIRE in 'src/map/skill.hpp' to modify the max number
+of possible values, and 'src/map/script_constants.hpp' for a list of status constants.
 
 Use any number or SC_ALL to disable status requirements.
 
@@ -153,11 +153,11 @@ RequiredEquipment: Specific equipment IDs needed to use the skill.
 Up to 10 ':'-separated values can be used, e.g.
     item1:item2:item3
 
-See MAX_SKILL_EQUIP_REQUIRE in 'src/map/skill.h' to modify the max number
+See MAX_SKILL_EQUIP_REQUIRE in 'src/map/skill.hpp' to modify the max number
 of possible values.
 
 ---------------------------------------
 
 NOTE: On some fields, the ':' delimiter means for each skill level, but there
       are some level dependent checks.  See 'skill_get_requirement()' in
-      'src/map/skill.c'.
+      'src/map/skill.cpp'.

+ 10 - 10
doc/source_doc.txt

@@ -191,17 +191,17 @@ The following list describes each module and its purpose.
   malloc         handles runtime memory allocation (so that memory manager could check for leaks)
   mapindex       handles the processing and reading of the mapcache.dat
   md5calc        offers md5 encryption
-  mmo.h          common structures and defines across serv
+  mmo.hpp        common structures and defines across serv
   msg_conf       handles msg in src from configuration
   nullpo         checks and dumps info for debug mode
   random         generation of random numbers
   showmsg        display messages in console with a certain color
   socket         handling of sockets (listening, close, open, etc.)
-  sql.c          MySQL database proxy
-  strlib.c       string handling
-  timer.c        timer-related functions
-  utils.c        misc functions
-  winapi.h       Windows redefine and include
+  sql.cpp        MySQL database proxy
+  strlib.cpp     string handling
+  timer.cpp      timer-related functions
+  utils.cpp      misc functions
+  winapi.hpp     Windows redefine and include
 
   ==============
   | Login-serv |
@@ -265,7 +265,7 @@ The following list describes each module and its purpose.
   guild          functions for the guild system
   homunculus     functions for Alchemist Homunculi processing (create, delete, get stats, death, etc.)
   instance       functions for instance system
-  intif          map-serv <=> inter-serv interface (meant to communicate with 'char/inter.c' or its submodules)
+  intif          map-serv <=> inter-serv interface (meant to communicate with 'char/inter.cpp' or its submodules)
   itemdb         functions for the item database
   log            functions for server log system
   mail           functions for mail system
@@ -286,7 +286,7 @@ The following list describes each module and its purpose.
   searchstore    functions for the Vendor Shop Search feature
   skill          functions for skills (skill_casttime calculation, skill behaviours, skill_chk_cast, requirement checks, 'db/skill_*.txt' processing)
   status         functions for statuses on a bl (add, remove, calculation of effects as a temporary bonus)
-                   status is a struct available by most units as common attributes (bl_type only attribute are dealt in bl specific files, like 'pc.c' or 'mob.c')
+                   status is a struct available by most units as common attributes (bl_type only attribute are dealt in bl specific files, like 'pc.cpp' or 'mob.cpp')
   storage        functions for the storage system: Kafra, cart, guild, inventory (add, transfer, remove items between containers)
                    also ensures container mutex (e.g. guild_storage) and preparation for save requests
   trade          functions to perform a trade (request, accept, add items/Zeny, checks, complete trade)
@@ -300,7 +300,7 @@ The following are standard naming conventions used by rAthena.
 
   Type        Prefix         Example
   ----        ------         -------
-  function    module_        pc_addspiritball -> located in pc.c file
+  function    module_        pc_addspiritball -> located in pc.cpp file
   structure   s_             s_quest_db
   enum        e_             e_race
   status      SC_            SC_INTOABYSS
@@ -347,7 +347,7 @@ The following variables are commonly used in the source code.
 ===============
 | 8. Building |
 ===============
-When adding a new src file or library (new.c and its header, new.h), you'll also
+When adding a new src file or library (new.cpp and its header, new.hpp), you'll also
 need to update the following files to fully integrate it into the project so that
 users can compile it.
 

+ 1 - 1
npc/battleground/bg_common.txt

@@ -250,7 +250,7 @@ bat_room,148,150,5	script	Teleporter#Battlefield	124,{
 		mes "[Maroll Battle Recruiter]";
 		mes "May the war god bless you.";
 		close2;
-		getmapxy(.@mapname$,.@x,.@y,UNITTYPE_NPC);
+		getmapxy(.@mapname$,.@x,.@y,BL_NPC);
 		if (.@mapname$ == "prontera")
 			set bat_return,1;
 		else if (.@mapname$ == "moc_ruins")

+ 5 - 5
npc/battleground/kvm/kvm_item_pay.txt

@@ -19,15 +19,15 @@
 //============================================================
 
 bat_room,151,144,3	script	KVM Logistic Officer#a	734,{
-	if (countitem(7773)) {
-		set .@pointstoadd,countitem(7773);
-		delitem 7773,.@pointstoadd;
+	if (countitem(6376)) {// KVM_Badge
+		set .@pointstoadd,countitem(6376);
+		delitem 6376,.@pointstoadd;
 		set kvm_point,kvm_point+.@pointstoadd;
 		mes "[Logistics]";
-		mes "Are those "+getitemname(7773)+"s I see?";
+		mes "Are those "+getitemname(6376)+"s I see?";
 		mes "We no longer accept that currency,";
 		mes "but I can exchange those for you,";
-		mes "So you have "+.@pointstoadd+" "+getitemname(7773)+"s?";
+		mes "So you have "+.@pointstoadd+" "+getitemname(6376)+"s?";
 		mes "Alright, all set, you now have ^580080"+ kvm_point +"^000000 KVM Points.";
 		next;
 	}

+ 6 - 13
npc/cities/prontera.txt

@@ -1,20 +1,13 @@
 //===== rAthena Script =======================================
 //= Prontera Town
-//===== By: ==================================================
-//= kobra_k88
-//===== Current Version: =====================================
-//= 2.1
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
-//= [Official Conversion]
 //= NPCs in Prontera
-//===== Additional Comments: =================================
-//= Fully working
-//= +AntiNovice exploit fix [Lupus] 1.2 added baby novice check
-//= Spellchecked [massdriller]
+//===== Changelogs: ==========================================
+//= 1.0 Initial release [kobra_k88]
+//= 1.2 added baby novice check [Lupus]
+//= 1.3 Spellchecked [massdriller]
 //= 1.4 Optimized. Novices > 20 BaseJob can go to Culvert, too [Lupus]
-//= 1.5a Added a Jawaii related npc [MasterOfMuppets]
+//= 1.5 Added a Jawaii related npc [MasterOfMuppets]
 //= 1.6 Replaced sewer_prt with (MISC_QUEST & 8) [Lupus]
 //= 1.7 Removed Duplicates [Silent]
 //= 1.8 Moved Culvert to quests/quests_prontera.txt
@@ -25,7 +18,7 @@
 
 // Prontera
 //============================================================
-prontera,160,330,0	script	Guard#pront::prtguard	105,{
+-	script	Guard#pront::prtguard	105,{
 	mes "[Prontera Guard]";
 	mes "Welcome to Prontera.";
 	close;

+ 9 - 13
npc/custom/battleground/bg_emp.txt

@@ -1,17 +1,12 @@
 //===== rAthena Script =======================================
 //= Battleground: Emperium
-//===== By: ==================================================
-//= AnnieRuru
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //= A simple battleground script:
 //= Destroy the opponent's Emperium to win the match.
-//===== Additional Comments: =================================
-//= 1.0 First version, edited. [Euphy]
+//===== Changelogs: ==========================================
+//= 1.0 First version, edited. [Euphy] [AnnieRuru]
 //= 1.1 Use up to date battleground script commands [AnnieRuru]
+//= 1.2 Fix player can be kill multiple times within 250ms time frame [AnnieRuru]
 //============================================================
 
 -	script	bg_emp#control	-1,{
@@ -26,8 +21,8 @@ OnStart:
 		end;
 
 	// create Battleground and teams
-	.red = waitingroom2bg( "bat_a01", 157,347, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
-	.blue = waitingroom2bg( "bat_a01", 142,51, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
+	.red = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
+	.blue = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
 	delwaitingroom .rednpcname$;
 	delwaitingroom .bluenpcname$;
 	setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
@@ -84,9 +79,10 @@ L_EmpDown:
 	end;
 
 // "OnDeath" event
-OnRedDead:
-OnBlueDead:
-	sleep2 1250;
+OnRedDead:  callsub L_Dead, 157,347;
+OnBlueDead: callsub L_Dead, 142,51;
+L_Dead:
+	warp "bat_a01", getarg(0), getarg(1);
 	percentheal 100,100;
 	end;
 

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm01.txt

@@ -331,7 +331,7 @@ bat_c01,51,130,5	script	Guillaume Vintenar::VintenarKvM01a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c01,148,53,1	script	Croix Vintenar::VintenarKvM01b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm02.txt

@@ -331,7 +331,7 @@ bat_c02,51,130,5	script	Guillaume Vintenar::VintenarKvM02a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c02,148,53,1	script	Croix Vintenar::VintenarKvM02b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm03.txt

@@ -331,7 +331,7 @@ bat_c03,51,130,5	script	Guillaume Vintenar::VintenarKvM03a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c03,148,53,1	script	Croix Vintenar::VintenarKvM03b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 1 - 1
npc/custom/events/devil_square.txt

@@ -107,7 +107,7 @@ OnClock2200:
 	disablenpc "ord11-12"; //from npc/warps/pvp.txt
 	disablenpc "Devil Square Guardian#2";
 	mapannounce "ordeal_1-1","Devil Square is now closed.", bc_map;
-	getmapxy .@map$, .@x, .@y, UNITTYPE_NPC;
+	getmapxy .@map$, .@x, .@y, BL_NPC;
 	mapwarp "ordeal_1-1", .@map$, .@x, .@y;
 	killmonsterall "ordeal_1-1";
 	announce "Devil Square is OPEN. The event will begin in 5 minutes.", bc_all;

+ 1 - 1
npc/custom/events/mvp_ladder.txt

@@ -311,7 +311,7 @@ OnInit:
 //	Config Ends --------------------------------------------------------------
 
 	mapannounce .eventmap$, "An administrator has refreshed the server. Please re-register. We apologize for the inconvenience.", bc_map;
-	getmapxy .map$, .x, .y, UNITTYPE_NPC;
+	getmapxy .map$, .x, .y, BL_NPC;
 	mapwarp .eventmap$, .map$, .x, .y;
 	killmonsterall .eventmap$;
 	.@size = getarraysize( .@mapflag );

+ 1 - 1
npc/custom/jobmaster.txt

@@ -132,7 +132,7 @@ function	Job_Options	{
 	.@rebirth_possible = Can_Rebirth();
 	.@first_eac = .@eac&EAJ_BASEMASK;
 	.@second_eac = .@eac&EAJ_UPPERMASK;
-	// Note: These are already set in pc.c
+	// Note: These are already set in pc.cpp
 	// 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+")";

+ 1 - 1
npc/custom/official/GeffenMagicTournament.txt

@@ -1436,7 +1436,7 @@ OnInstanceInit:
 				"Geffen Festivities.";
 				close2;
 				cutin "",255;
-				getitem 6671,20;
+				getitem 6671,'reward[getarraysize('reward[0]) - 1];
 				warp instance_mapname("1@gef"), 120,35;
 				end;
 			case 2:

+ 24 - 27
npc/custom/quests/hunting_missions.txt

@@ -23,7 +23,7 @@
 //=     Syntax updates and style cleaning.
 //============================================================
 
-prontera,152,187,6	script	Hunting Missions	951,{
+prontera,152,187,6	script	Hunting Missions	4_F_EDEN_MASTER,{
 function Chk;
 	mes "[Hunting Missions]";
 	mes "Hello, " + strcharinfo(0) + "!";
@@ -39,11 +39,11 @@ function Chk;
 		#Mission_Delay = 1;
 		close;
 	}
-	mes rand(2) ? "Working hard, as always..." : "Not slacking, I hope...";
+	mes F_Rand("Working hard, as always...", "Not slacking, I hope...");
 	mes "Is there anything I can help";
 	mes "you with?";
 	mes " ";
-	mes "^777777~ You've completed " + callfunc("F_InsertPlural",Mission_Total,"mission",0,"^0055FF%d^777777 %s") + ". ~^000000";
+	mes "^777777~ You've completed " + F_InsertPlural(Mission_Total,"mission",0,"^0055FF%d^777777 %s") + ". ~^000000";
 	next;
 	switch(select(
 		((!Mission0) ? " ~ New Mission::" : ": ~ Mission Status: ~ Abandon Mission") +
@@ -65,12 +65,12 @@ function Chk;
 					emotion ET_SCRATCH;
 					#Mission_Count = 0;
 				}
-				@hm_char_del_check = 1;
+				@hm_char_del_check = true;
 			}
 			close;
 		}
 		if (#Mission_Delay > gettimetick(2) && .Delay) {
-			mes "I'm afraid you'll have to wait " + callfunc("Time2Str",#Mission_Delay) + " before taking another mission.";
+			mes "I'm afraid you'll have to wait " + Time2Str(#Mission_Delay) + " before taking another mission.";
 			close;
 		}
 		mes "You must hunt:";
@@ -99,7 +99,7 @@ function Chk;
 		if (.Reset < 0 && .Delay)
 			mes "Your delay time will not be reset.";
 		else if (.Reset > 0)
-			mes "It will cost " + callfunc("F_InsertComma",.Reset) + " Zeny.";
+			mes "It will cost " + F_InsertComma(.Reset) + " Zeny.";
 		next;
 		switch(select(" ~ Abandon...: ~ ^777777Cancel^000000")) {
 		case 1:
@@ -159,7 +159,7 @@ function Chk;
 	end;
 
 Mission_Status:
-	@f = 0;
+	@f = false;
 	deletearray .@j[0], getarraysize(.@j);
 	for (.@i = 0; .@i < .Quests; .@i++) {
 		.@j[.@i] = getd("Mission" + .@i);
@@ -179,11 +179,11 @@ Mission_Status:
 	mes "[Hunting Missions]";
 	mes "Mission rewards:";
 	mes " > Mission Points: ^0055FF" + .@Mission_Points + "^000000";
-	mes " > Base Experience: ^0055FF" + callfunc("F_InsertComma",.@Base_Exp) + "^000000";
-	mes " > Job Experience: ^0055FF" + callfunc("F_InsertComma",.@Job_Exp) + "^000000";
-	mes " > Zeny: ^0055FF" + callfunc("F_InsertComma",.@Zeny) + "^000000";
+	mes " > Base Experience: ^0055FF" + F_InsertComma(.@Base_Exp) + "^000000";
+	mes " > Job Experience: ^0055FF" + F_InsertComma(.@Job_Exp) + "^000000";
+	mes " > Zeny: ^0055FF" + F_InsertComma(.@Zeny) + "^000000";
 	if (@f) {
-		@f = 0;
+		@f = false;
 		return;
 	}
 	next;
@@ -235,35 +235,32 @@ Mission_Info:
 
 function Chk {
 	if (getarg(0) < getarg(1)) {
-		@f = 1;
+		@f = true;
 		return "^FF0000";
 	} else
 		return "^00FF00";
 }
 
 OnBuyItem:
-	@cost = 0;
-	for (.@i = 0; .@i < getarraysize(@bought_nameid); .@i++)
-		for (.@j = 0; .@j < getarraysize(.Shop); .@j += 2)
-			if (@bought_nameid[.@i] == .Shop[.@j]) {
-				set @cost, @cost + (.Shop[.@j+1] * @bought_quantity[.@i]);
-				break;
-			}
+	.@size = getarraysize(@bought_nameid);
+	for (.@i = 0; .@i < .@size; .@i++) {
+		.@j = inarray(.Shop, @bought_nameid[.@i]);
+		.@cost += (.Shop[.@j+1] * @bought_quantity[.@i]);
+	}
 	mes "[Hunting Missions]";
-	if (@cost > #Mission_Points)
+	if (.@cost > #Mission_Points)
 		mes "You don't have enough Mission Points.";
 	else {
-		for (.@i = 0; .@i < getarraysize(@bought_nameid); .@i++) {
+		for (.@i = 0; .@i < .@size; .@i++) {
 			getitem @bought_nameid[.@i], @bought_quantity[.@i];
 			dispbottom "Purchased " + @bought_quantity[.@i] + "x " + getitemname(@bought_nameid[.@i]) + ".";
 		}
-		#Mission_Points -= @cost;
+		#Mission_Points -= .@cost;
 		mes "Deal completed.";
 		emotion ET_MONEY;
 	}
-	@cost = 0;
-	deletearray @bought_nameid[0], getarraysize(@bought_nameid);
-	deletearray @bought_quantity[0], getarraysize(@bought_quantity);
+	deletearray @bought_nameid[0], .@size;
+	deletearray @bought_quantity[0], .@size;
 	close;
 
 OnNPCKillEvent:
@@ -280,7 +277,7 @@ OnNPCKillEvent:
 		}
 	} else if (.Party) {
 		.@mob = killedrid;
-		getmapxy(.@map1$,.@x1,.@y1,UNITTYPE_PC);
+		getmapxy(.@map1$,.@x1,.@y1);
 		getpartymember getcharid(1),1;
 		getpartymember getcharid(1),2;
 		for (.@i = 0; .@i < $@partymembercount; .@i++) {
@@ -290,7 +287,7 @@ OnNPCKillEvent:
 				set .@HP, readparam(HP, $@partymembercid[.@i]);
 
 				if (.@Mission_Count && .@Mission0 && .@HP > 0) {
-					getmapxy(.@map2$,.@x2,.@y2,UNITTYPE_PC);
+					getmapxy(.@map2$,.@x2,.@y2,BL_PC,rid2name($@partymemberaid[.@i]));
 					if ((.@map1$ == .@map2$ || .Party == 1) && (distance(.@x1,.@y1,.@x2,.@y2) <= 30 || .Party < 3)) {
 						for (.@j = 0; .@j < .Quests; .@j++) {
 							.@my_mob_id = getvar( getd("Mission"+.@j),$@partymembercid[.@i] );

+ 239 - 185
npc/custom/quests/questboard.txt

@@ -3,27 +3,28 @@
 //===== By: ==================================================
 //= tr0n
 //===== Current Version: =====================================
-//= 1.4.4
-//===== Compatible With: ===================================== 
-//= rAthena Project
+//= 1.6.5
 //===== Description: =========================================
 //= Easily add collection and hunting quests.
-//===== Additional Comments: =================================  
+//===== Changelogs: ==========================================
 // 1.0.0 Release
 // 1.1.0 Added zeny reward
 // 1.2.0 Rewrote checkmob and killcounter
 // 1.3.1 Added level restriction
 // 1.3.4 Added Reward Item Amount
 // 1.4.4 Added Quest delay
+// 1.5.4 Added repeatable Quests
+// 1.6.4 Added party support
+// 1.6.5 Bug fixes for party support
 //============================================================
+prontera,129,215,5	script	Questboard	4_BOARD3,{
 
-prontera,129,215,5	script	Questboard	857,{
-		
-	if(c_run==1){
+	if(c_run==true){
 		mes "[^FF7700Questboard^000000]";
 		mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
 		mes "--------------------------------";
-		for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
+		set .@size, getarraysize(getd("."+ currentquest$ + "_collectionitem"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
 			mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
 		}
 		mes "--------------------------------";
@@ -37,17 +38,18 @@ prontera,129,215,5	script	Questboard	857,{
 			mes "[^FF7700Questboard^000000]";
 			mes "Quest aborted.";
 			set currentquest$, "";
-			set c_run, 0;
+			set c_run, false;
 			close;
 		}
 		goto L_checkitems;
 	}
-	
-	if(h_run==1){
+
+	if(h_run==true){
 		mes "[^FF7700Questboard^000000]";
 		mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
 		mes "--------------------------------";
-		for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
+		set .@size, getarraysize(getd("."+ currentquest$ + "_huntingmob"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
 			set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
 			mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
 		}
@@ -61,136 +63,150 @@ prontera,129,215,5	script	Questboard	857,{
 		if(select("Finish:Abort") == 2){
 			mes "[^FF7700Questboard^000000]";
 			mes "Quest aborted.";
-			for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
+			for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
 				set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
 				setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
 			}
 			set currentquest$, "";
-			set h_run, 0;
+			set h_run, false;
 			close;
 		}
 		goto L_checkmobs;
 	}
-		
-L_questmenu:
+
 	mes "[^FF7700Questboard^000000]";
 	mes "Select category:";
 	next;
-	
+
 	switch(select((.collection)?"Collection Quests":"",
 				  (.hunting)?"Hunting Quests":"",
 				  "Exit")) {
-	
-case 1:
-	set .@collectmenu$, "";
-	for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
-		if (.@i) set .@collectmenu$,.@collectmenu$+":";
-		set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
-	}
-	set .@selection,select(.@collectmenu$);
-	if(gettimetick(2) < getd(.@selection + "_collection_delay")){
-		set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
-		mes "[^FF7700Questboard^000000]";
-		if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
-		if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
-		mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
-		close;
-	}
-	mes "[^FF7700Questboard^000000]";
-	mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
-	mes "--------------------------------";
-	for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
-		mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
-	}
-	mes "--------------------------------";
-	mes "[Reward]";
-	mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
-	mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
-	mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
-	mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
-	next;
-	if(select("Accept:Decline") == 2){
-		close;
-	}
-	if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
-	{
-		mes "[^FF7700Questboard^000000]";
-		mes "Quest accepted.";
-		set c_run, 1;
-		set currentquest$, .@selection;
-		close;
-	}
-	else
-	{
-		mes "[^FF7700Questboard^000000]";
-		mes "You don't have the required";
-		mes "level to do this quest.";
-		close;
-	}
-	
-case 2:
-	set .@huntmenu$, "";
-	for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
-		if (.@i) set .@huntmenu$,.@huntmenu$+":";
-		set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
-	}
-	set .@selection,select(.@huntmenu$);
-	if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
-		set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
-		mes "[^FF7700Questboard^000000]";
-		if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
-		if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
-		mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
-		close;
-	}
-	mes "[^FF7700Questboard^000000]";
-	mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
-	mes "--------------------------------";
-	for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
-		mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
-	}
-	mes "--------------------------------";
-	mes "[Reward]";
-	mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
-	mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
-	mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
-	mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
-	next;
-	if(select("Accept:Decline") == 2){
-		close;
-	}
-	if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
-	{
+
+	case 1:
+		set .@collectmenu$, "";
+		for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1){
+			if (.@i) set .@collectmenu$,.@collectmenu$+":";
+			set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
+		}
+		set .@selection,select(.@collectmenu$);
+		if(.quest_repeat == true){
+			if(gettimetick(2) < getd(.@selection + "_collection_delay")){
+				set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
+				mes "[^FF7700Questboard^000000]";
+				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				close;
+			}
+		}
+		else{
+			if(getd(.@selection + "_collection_repeat") == true){
+				mes "[^FF7700Questboard^000000]";
+				mes "You already did this quest.";
+				mes "Please choose another one.";
+				close;
+			}
+		}
 		mes "[^FF7700Questboard^000000]";
-		mes "Quest accepted.";
-		set h_run, 1;
-		set currentquest$, .@selection;
-		close;
-	}
-	else
-	{
+		mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
+		mes "--------------------------------";
+		set .@size, getarraysize(getd("."+ .@selection + "_collectionitem"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
+			mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
+		}
+		mes "--------------------------------";
+		mes "[Reward]";
+		mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
+		mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
+		mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
+		mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
+		next;
+		if(select("Accept:Decline") == 2){
+			close;
+		}
+		if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax")){
+			mes "[^FF7700Questboard^000000]";
+			mes "Quest accepted.";
+			set c_run, true;
+			set currentquest$, .@selection;
+			close;
+		}
+		else{
+			mes "[^FF7700Questboard^000000]";
+			mes "You don't have the required";
+			mes "level to do this quest.";
+			close;
+		}
+
+	case 2:
+		set .@huntmenu$, "";
+		for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1){
+			if (.@i) set .@huntmenu$,.@huntmenu$+":";
+			set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
+		}
+		set .@selection,select(.@huntmenu$);
+		if(.quest_repeat == true){
+			if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
+				set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
+				mes "[^FF7700Questboard^000000]";
+				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				close;
+			}
+		}
+		else{
+			if(getd(.@selection + "_hunting_repeat") == true){
+				mes "[^FF7700Questboard^000000]";
+				mes "You already did this quest.";
+				mes "Please choose another one.";
+				close;
+			}
+		}
 		mes "[^FF7700Questboard^000000]";
-		mes "You don't have the required";
-		mes "level to do this quest.";
+		mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
+		mes "--------------------------------";
+		set .@size, getarraysize(getd("."+ .@selection + "_huntingmob"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
+			mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
+		}
+		mes "--------------------------------";
+		mes "[Reward]";
+		mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
+		mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
+		mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
+		mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
+		next;
+		if(select("Accept:Decline") == 2){
+			close;
+		}
+		if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax")){
+			mes "[^FF7700Questboard^000000]";
+			mes "Quest accepted.";
+			set h_run, true;
+			set currentquest$, .@selection;
+			close;
+		}
+		else{
+			mes "[^FF7700Questboard^000000]";
+			mes "You don't have the required";
+			mes "level to do this quest.";
+			close;
+		}
+
+	case 3:
 		close;
 	}
-	
-case 3:
-	close;
-	}
-	
+
 L_checkitems:
-	for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
+	set .@size, getarraysize(getd("."+currentquest$+"_collectionitem"));
+	for( set .@k,0; .@k < .@size; set .@k,.@k+2){
 		if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
 			set .@checkitem,.@checkitem+2;
 		}
 	}
-	if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
+	if(.@checkitem<.@size){
 		mes "[^FF7700Questboard^000000]";
 		mes "You don't have everything.";
 		close;
 	}
-	for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
+	for( set .@delcount,0; .@delcount < .@size; set .@delcount,.@delcount+2){
 		delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
 	}
 	mes "[^FF7700Questboard^000000]";
@@ -199,13 +215,15 @@ L_checkitems:
 	set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
 	getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
 	setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
+	setd(currentquest$ + "_collection_repeat"),true;
 	set currentquest$, "";
-	set c_run, 0;
+	set c_run, false;
 	close;
-	
+
 L_checkmobs:
-	set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
-	for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	set .@goal, .@size/2;
+	for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
 		set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
 		if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
 			set .@checkmonster, .@checkmonster+1;
@@ -216,7 +234,7 @@ L_checkmobs:
 		}
 		goto L_checkmobs2;
 	}
-	
+
 L_checkmobs2:
 	if(.@checkmonster<.@goal){
 		mes "[^FF7700Questboard^000000]";
@@ -225,7 +243,8 @@ L_checkmobs2:
 	}
 	mes "[^FF7700Questboard^000000]";
 	mes "Congratulation! Here is your Reward.";
-	for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
 		set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
 		setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
 	}
@@ -233,92 +252,127 @@ L_checkmobs2:
 	set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
 	getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
 	setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
+	setd(currentquest$ + "_hunting_repeat"),true;
 	set currentquest$, "";
-	set h_run, 0;
+	set h_run, false;
 	close;
 
 OnNPCKillEvent:
-	if(h_run!=1) end;
-	for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
+	if(h_run!=true) end;
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
 		if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
 			set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
-			if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
-			setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
-			dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
-			end;
+			if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")<getd("."+currentquest$+"_huntingmob["+.@i+"]")){
+				setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
+				dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
+			}
+			if(getcharid(1) != 0 && .party_support == true){
+				getmapxy(.@map1$,.@x1,.@y1);
+				set .@killerid, getcharid(3);
+				set .@currentquest$, currentquest$;
+				getpartymember getcharid(1),1;
+				getpartymember getcharid(1),2;
+				for(set .@j, 0; .@j < $@partymembercount; .@j++){
+					if(isloggedin($@partymemberaid[.@j], $@partymembercid[.@j])){
+						if(h_run==true && $@partymemberaid[.@j] != .@killerid && .@currentquest$ == getvar(currentquest$, $@partymembercid[.@j]) && readparam(HP, $@partymembercid[.@j]) > 0){
+							getmapxy(.@map2$,.@x2,.@y2,BL_PC,rid2name($@partymemberaid[.@j]));
+							if(.@map1$ == .@map2$ && distance(.@x1,.@y1,.@x2,.@y2) < .party_range){
+								set .@kill_amt,getvar(getd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount"), $@partymembercid[.@j]);
+								set .@kill_goal,getd("."+.@currentquest$+"_huntingmob["+.@i+"]");
+								if(.@kill_amt<.@kill_goal)
+								{
+									setd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", .@kill_amt+1, $@partymembercid[.@j]);
+									dispbottom getd("."+.@currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+(.@kill_amt+1)+"/"+.@kill_goal+")", 0xB6FF00, $@partymembercid[.@j];
+								}
+							}
+						}
+					}
+				}
+			}
+			break;
 		}
-		continue;
 	}
 	end;
-	
+
 OnInit:
 
 	function AddCollection;
 	function AddHunting;
 
-	//Activate/Deactive quest categories here
-	set .collection, 1;
-	set .hunting, 1;
-	
+	//Activate/Deactivate quest categories (true/1 - activated, false/0 - deactivated)
+	set .collection, true;
+	set .hunting, true;
+
 	//Quest Delay (seconds)
 	//24 hours = 86400 seconds
 	set .quest_delay, 0;
-	
+
+	//Activate/Deactivate repeatable quests (true/1 - activated, false/0 - deactivated)
+	set .quest_repeat, true;
+
+	//Activate/Deactivate party support (true/1 - activated, false/0 - deactivated)
+	set .party_support, true;
+
+	//Max range for party support (+- x & y coordinations)
+	set .party_range, 25;
+
 	//Checks if quests are loaded (prevents out of index)
-	if(.questsloaded==1) end;
-		set .questsloaded, 1;
-		
-		//Add Collection Quests here
-		//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
-		
-		
-		//Add Hunting Quests here
-		//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
-		
-		end;
-		
+	if(.questsloaded==true) end;
+	set .questsloaded, true;
+
+	//Add Collection Quests here (You can add as many required items as you want)
+	//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
 
-function AddCollection {
-	set .collectionquestcount,.collectionquestcount+1;
-	setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
-	setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
-	setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
-	setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
-	setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
-	setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
-	set .@argcount, 6;
-	set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
-	setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount)); 
-	setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
-	set .@argcount, .@argcount+2;
-	while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
+
+	//Add Hunting Quests here (You can add as many required mobs as you want)
+	//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
+	end;
+
+
+	function AddCollection{
+		set .collectionquestcount,.collectionquestcount+1;
+		setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
+		setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
+		setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
+		setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
+		setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
+		setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
+		set .@argcount, 6;
+		set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
+		setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount)); 
+		setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
+		set .@argcount, .@argcount+2;
 		set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
-		setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount)); 
-		setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
-		set .@argcount,.@argcount+2;
+		while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
+			setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount)); 
+			setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
+			set .@argcount,.@argcount+2;
+			set .@size, .@size+2;
+		}
+		return;
 	}
-	return;
-}
 
-function AddHunting {
-	set .huntingquestcount,.huntingquestcount+1;
-	setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
-	setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
-	setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
-	setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
-	setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
-	setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
-	set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
-	set .@argcount, 6;
-	setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
-	setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
-	set .@argcount, .@argcount+2;
-	while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
-		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
-		setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount)); 
-		setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
+	function AddHunting{
+		set .huntingquestcount,.huntingquestcount+1;
+		setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
+		setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
+		setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
+		setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
+		setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
+		setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
+		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
+		set .@argcount, 6;
+		setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
+		setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
 		set .@argcount, .@argcount+2;
+		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
+		while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
+			setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount)); 
+			setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
+			set .@argcount, .@argcount+2;
+			set .@size, .@size+2;
+		}
+		return;
 	}
-	return;
-}
 }

+ 1 - 1
npc/events/halloween_2009.txt

@@ -244,7 +244,7 @@ prontera,220,72,5	duplicate(09Treats)	Trick or Treater#iRO8	706,2,2
 				mes "[Halloween Wizard]";
 				mes "Which town do you want to play a trick on?";
 				next;
-				getmapxy(.@mapname$,.@mapx,.@mapy,UNITTYPE_PC,""+strcharinfo(0)+"");
+				getmapxy(.@mapname$,.@mapx,.@mapy,BL_PC,""+strcharinfo(0)+"");
 				if (.@mapname$ == "prontera") {
 					switch(select("Geffen:Payon:Alberta:Aldebaran")) {
 						case 1:

+ 12 - 12
npc/guild2/agit_main_se.txt

@@ -1353,35 +1353,35 @@ OnEnable:
 	if (compare(strnpcinfo(2),"arug")) {
 		if (strnpcinfo(2) == "arug_cas01") {
 			setarray .@w[0],195,250,292,188;
-			setarray .x[0],233,252,232,201,224,196,269,252,201,224,222, 294,256,240,246,235,235,246,240,256,254,242;
-			setarray .y[0], 83, 81,108,130,168,137, 89, 81,130,168,129, 210,203,133, 92,132,132, 92,133,203, 95,151;
+			setarray .@x[0],233,252,232,201,224,196,269,252,201,224,222, 294,256,240,246,235,235,246,240,256,254,242;
+			setarray .@y[0], 83, 81,108,130,168,137, 89, 81,130,168,129, 210,203,133, 92,132,132, 92,133,203, 95,151;
 		}
 		else if (strnpcinfo(2) == "arug_cas02") {
 			setarray .@w[0],20,169,268,169;
-			setarray .x[0],104,67,67,113,122,67, 90, 91,122, 20,67, 175,204,211,209,161,186,183,150,161,209,211;
-			setarray .y[0], 32,36,85, 87,112,60,167,119,112,169,85,  31, 32, 63, 88, 91,170,121,110, 91, 88, 63;
+			setarray .@x[0],104,67,67,113,122,67, 90, 91,122, 20,67, 175,204,211,209,161,186,183,150,161,209,211;
+			setarray .@y[0], 32,36,85, 87,112,60,167,119,112,169,85,  31, 32, 63, 88, 91,170,121,110, 91, 88, 63;
 		}
 		else {	// Castles 3,4,5 are identical.
 			setarray .@w[0],66,157,211,159;
-			setarray .x[0],130,128,128,128,110,91,65, 65,110,128,128, 156,172,154,156,155,187,212,211,155,156,172;
-			setarray .y[0], 60, 77, 90,100, 96,53,71,103, 96,100, 77, 101, 95, 90, 77, 60, 54, 67,105, 60, 77, 95;
+			setarray .@x[0],130,128,128,128,110,91,65, 65,110,128,128, 156,172,154,156,155,187,212,211,155,156,172;
+			setarray .@y[0], 60, 77, 90,100, 96,53,71,103, 96,100, 77, 101, 95, 90, 77, 60, 54, 67,105, 60, 77, 95;
 		}
 	}
 	else {
 		if (strnpcinfo(2) == "schg_cas02") {
 			setarray .@w[0],337,95,307,222;
-			setarray .x[0],326,337,334,296,285,236,285,296,334,337,334, 359,300,337,317,307,300,337,317,307,359,236;
-			setarray .y[0], 83, 95,119, 82, 40, 41, 40, 82,119, 95,119,  85,119,154,183,222,119,154,183,222, 85, 41;
+			setarray .@x[0],326,337,334,296,285,236,285,296,334,337,334, 359,300,337,317,307,300,337,317,307,359,236;
+			setarray .@y[0], 83, 95,119, 82, 40, 41, 40, 82,119, 95,119,  85,119,154,183,222,119,154,183,222, 85, 41;
 		}
 		else if (strnpcinfo(2) == "schg_cas03") {
 			setarray .@w[0],306,325,364,305;
-			setarray .x[0],323,273,288,306,323,323,273,288,306,273,273, 338,364,365,317,338,338,364,365,317,364,329;
-			setarray .y[0],308,309,306,326,308,308,309,306,325,309,309, 309,305,261,318,310,309,305,261,318,305,314;
+			setarray .@x[0],323,273,288,306,323,323,273,288,306,273,273, 338,364,365,317,338,338,364,365,317,364,329;
+			setarray .@y[0],308,309,306,326,308,308,309,306,325,309,309, 309,305,261,318,310,309,305,261,318,305,314;
 		}
 		else {	// Castles 1,4,5 are identical.
 			setarray .@w[0],108,32,128,42,187,15;	// Contains an extra pair, for whatever reason.
-			setarray .x[0],111,109,65,110,88,64,47,109,111,112,120, 130,129,151,187,128,152,187,128,130,130,151;
-			setarray .y[0], 18, 44,22, 40,20,40,43, 48, 18, 32, 37,  22, 47, 18, 15, 42, 43, 15, 42, 22, 28, 18;
+			setarray .@x[0],111,109,65,110,88,64,47,109,111,112,120, 130,129,151,187,128,152,187,128,130,130,151;
+			setarray .@y[0], 18, 44,22, 40,20,40,43, 48, 18, 32, 37,  22, 47, 18, 15, 42, 43, 15, 42, 22, 28, 18;
 		}
 	}
 	if (charat(strnpcinfo(1),4) == "2") set .@z,11;

+ 8 - 2
npc/instances/NydhoggsNest.txt

@@ -1034,7 +1034,10 @@ spl_in01,104,56,3	script	Aide Arioss#edq	437,3,3,{
 			next;
 			mes "[Aide Arioss]";
 			mes "It can't compare with the effort you have put in for us... but please accept our token of friendship.";
-			getexp 1500000,350000;
+			if (checkre(3))
+				getexp 1500000,350000;
+			else
+				getexp 150000,35000;
 			getitem 6081,10; //Splendide_Coin
 			set ins_nyd,131;
 			mes "[Aide Arioss]";
@@ -1270,7 +1273,10 @@ man_in01,311,57,3	script	Neat Etorr#edq	453,3,3,{
 			next;
 			mes "[Neat Etorr]";
 			mes "It's not a lot, but please this as a token of our appreciation.";
-			getexp 1500000,350000;
+			if (checkre(3))
+				getexp 1500000,350000;
+			else
+				getexp 150000,35000;
 			getitem 6080,10; //Manuk_Coin
 			set ins_nyd,132;
 			close;

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

@@ -74,9 +74,9 @@ alberta,30,65,3	script	Akagi	730,{
 	}
 }
 
-que_ng,30,65,3	script	Cougar#nq	730,{
+que_ng,30,65,3	script	Kuuga Gai#nq	730,{
 	if (Upper == 2) {
-		mes "[Cougar]";
+		mes "[Kuuga Gai]";
 		mes "I... I've never";
 		mes "seen a baby as";
 		mes "powerful as you!";
@@ -86,7 +86,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 	}
 	if (Class == Job_Novice) {
 		if (JobLevel < 10) {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Hm? Have you come to";
 			mes "learn how to be a Ninja?";
 			mes "You're not quite experienced";
@@ -100,7 +100,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "Excuse me.";
 			mes "H-hello?";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "...............................";
 			mes "How did you do that?";
 			next;
@@ -108,7 +108,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "Do what? I didn't";
 			mes "do anything, I don't think...";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "H-How are you able to";
 			mes "see me? I'm supposed to";
 			mes "be invisible to the naked eye.";
@@ -121,7 +121,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "Calm down, there's no";
 			mes "need to get violent!";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "What...?";
 			mes "How did you dodge";
 			mes "all of my attacks?";
@@ -134,7 +134,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "to change my job";
 			mes "to a Ninja.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "...Oh. Is that all?";
 			mes "Hmm, you've got great";
 			mes "potential, but I can't help";
@@ -142,14 +142,14 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "enemies, and I can't let my";
 			mes "guard down for even a second.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "That Wildcat Joe is";
 			mes "completely ruthless...!";
 			mes "He could strike at any time!";
 			mes "He'll do anything to achieve";
 			mes "victory over his enemies!";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Wait, wait, I just";
 			mes "thought of something.";
 			mes "Maybe you can help me out.";
@@ -158,7 +158,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "really want to be a Ninja.";
 			next;
 			if(select("Sure.:No, thanks.") == 2) {
-				mes "[Cougar]";
+				mes "[Kuuga Gai]";
 				mes "Hm? Well, alright.";
 				mes "Still, I don't see";
 				mes "why we can't help";
@@ -166,7 +166,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 				mes "little predicament...";
 				close;
 			}
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Great! Now, I wanted to";
 			mes "ask Wildcat Joe if he'd";
 			mes "agree to a temporary truce.";
@@ -174,7 +174,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "are out of weapons, so we";
 			mes "should get well equipped first.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Please take this letter,";
 			mes "and deliver it to Wildcat";
 			mes "Joe in Einbroch. He's a master";
@@ -182,7 +182,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "eye out for him. Ah, and look";
 			mes "for him in a high place.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Yeah, Wildcat Joe";
 			mes "always did have a thing";
 			mes "for hiding in high places.";
@@ -194,7 +194,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			close;
 		}
 		else if (NINJ_Q == 1) {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Even if this task";
 			mes "isn't that urgent,";
 			mes "please hurry over to";
@@ -203,7 +203,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			close;
 		}
 		else if (NINJ_Q == 2) {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Did you deliver that";
 			mes "letter to Wildcat Joe?";
 			mes "I still need to know his";
@@ -213,14 +213,14 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			close;
 		}
 		else if (NINJ_Q == 3) {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Ah, you've returned.";
 			mes "So did Wildcat Joe send";
 			mes "you back here with his";
 			mes "response? Great, great,";
 			mes "please let me read it.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "What...?! How could he";
 			mes "reject my proposal for";
 			mes "a truce?! This can only";
@@ -228,14 +228,14 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "Kunai. Nuts! I have to catch";
 			mes "up to him, or I'm a goner!";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Listen, you've got to help";
 			mes "me out again! I need you to";
 			mes "gather some materials so that";
 			mes "I can craft my own Kunai to fight Wildcat Joe. Then, I'll go ahead";
 			mes "and change your job to a Ninja.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "All you need";
 			mes "to bring me is";
 			mes "^3355FF5 Cyfars^000000 and";
@@ -249,7 +249,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "asked me to gather";
 			mes "those same materials.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Curses! Then that means...";
 			mes "You actually helped Joe";
 			mes "in crafting his Kunai! No!";
@@ -262,7 +262,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 		}
 		else if (NINJ_Q == 4) {
 			if (countitem(7053) < 5 || countitem(1010) < 1) {
-				mes "[Cougar]";
+				mes "[Kuuga Gai]";
 				mes "Hurry and bring";
 				mes "^3355FF5 Cyfars^000000 and";
 				mes "^3355FF1 Phracon^000000 to me,";
@@ -272,7 +272,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 				close;
 			}
 			if (SkillPoint != 0) {
-				mes "[Cougar]";
+				mes "[Kuuga Gai]";
 				mes "Whoa, whoa...";
 				mes "You still have some";
 				mes "leftover Skill Points.";
@@ -281,7 +281,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 				mes "change jobs, right?";
 				close;
 			}
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Ah, you're back with";
 			mes "everything that I need.";
 			mes "You've come earlier than";
@@ -289,14 +289,14 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "as promised, I'll turn";
 			mes "you into a Ninja.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Let me formally introduce";
-			mes "myself. I am High Ninja Cougar";
+			mes "myself. I am High Ninja Kuuga Gai";
 			mes "in the Touga Ninja Corps, and";
 			mes "I'm in charge of the search";
 			mes "party to find Sir Kazma.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "Sir Kazma is the chief";
 			mes "of my village, but he's";
 			mes "run away. This has resulted";
@@ -304,7 +304,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "the Ninja Corps. Things are";
 			mes "pretty unstable right now...";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "I initially didn't want to";
 			mes "accept you as a Ninja because";
 			mes "of this complicated situation.";
@@ -312,14 +312,14 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "you're truly worthy of joining";
 			mes "the Ninja ranks.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "According to his letter, even";
 			mes "Joe thinks highly of you. Just";
 			mes "remember that, as a Ninja, your";
 			mes "mission is your highest priority. But don't let mission objectives";
 			mes "supercede your conscience.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "''Secrecy above all else.''";
 			mes "To keep our secrets in the";
 			mes "shadows, you can only buy";
@@ -327,7 +327,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "authorized dealers. Please";
 			mes "keep that in mind.";
 			next;
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "As of today, you are";
 			mes "now a proud member of the";
 			mes "Touga Ninja Corps. Be as";
@@ -342,7 +342,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			close;
 		}
 		else {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "How have you been?";
 			mes "Train hard: you want";
 			mes "to be able to vanish";
@@ -353,7 +353,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 		}
 	} else {
 		if (BaseClass == Job_Ninja) {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "How have you been?";
 			mes "Train hard: you want";
 			mes "to be able to vanish";
@@ -362,7 +362,7 @@ que_ng,30,65,3	script	Cougar#nq	730,{
 			mes "the respect of any Ninja~";
 			close;
 		} else {
-			mes "[Cougar]";
+			mes "[Kuuga Gai]";
 			mes "What...?";
 			mes "How were you able";
 			mes "to find me hidden";
@@ -459,7 +459,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 		mes "?????!!";
 		next;
 		mes "[Suspicious Man]";
-		mes "Why? Didn't you bring Cougar's letter for me?";
+		mes "Why? Didn't you bring Kuuga Gai's letter for me?";
 		next;
 		mes "["+strcharinfo(0)+"]";
 		mes "Are you...";
@@ -468,7 +468,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 		mes "[Suspicious Man]";
 		mes "...Yes, but I prefer to";
 		mes "be called Red Leopard Joe.";
-		mes "Cougar sent you to me, right?";
+		mes "Kuuga Gai sent you to me, right?";
 		mes "He's the only one who calls";
 		mes "me that. So you want to be";
 		mes "a Ninja, eh? Hmm, alright.";
@@ -494,7 +494,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 		mes "[Red Leopard Joe]";
 		mes "For now, let me read";
 		mes "this letter. Let's see...";
-		mes "Hm. I thought that Cougar";
+		mes "Hm. I thought that Kuuga Gai";
 		mes "would want to challenge me";
 		mes "again, but he actually wants";
 		mes "a temporary truce? Hah!";
@@ -521,7 +521,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 		mes "[Red Leopard Joe]";
 		mes "Here you go.";
 		mes "Please bring this";
-		mes "letter to Cougar.";
+		mes "letter to Kuuga Gai.";
 		mes "It'll take a while to";
 		mes "return to Amatsu, so let";
 		mes "me send you there directly...";
@@ -538,7 +538,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 		mes "Eh? I'm not sure what";
 		mes "happened, but it seems";
 		mes "that you haven't delivered";
-		mes "my response to Cougar yet.";
+		mes "my response to Kuuga Gai yet.";
 		mes "Shall I directly send you";
 		mes "to Amatsu right now?";
 		next;
@@ -558,7 +558,7 @@ einbroch,184,194,3	script	Suspicious Man#nq	 	881,{
 	}
 	else if (NINJ_Q == 4) {
 		mes "[Red Leopard Joe]";
-		mes "Cougar asked you to";
+		mes "Kuuga Gai asked you to";
 		mes "gather some materials";
 		mes "too? Oh well, I suppose";
 		mes "that I can't blame him.";

+ 10 - 3
npc/kafras/cool_event_corp.txt

@@ -174,21 +174,28 @@ function	script	F_CoolEventCorp	{
 	end;
 }
 
-hugel,88,168,4	script	Cool Event Corp. Staff::CoolEventCorpStaffHugel	874,{
+lighthalzen,94,248,3	script	Cool Event Corp Staff::CoolEventCorpStaffLighthalzen	4_M_ZONDAMAN,{
+	callfunc "F_CoolEventCorp",
+		"Save:Use Storage::Rent a Pushcart:Storage Password Service:Cancel",
+		"in the town of Lighthalzen","lighthalzen",95,240;
+	end;
+}
+
+hugel,88,168,4	script	Cool Event Corp. Staff::CoolEventCorpStaffHugel	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage::Rent a Pushcart:Storage Password Service:Cancel",
 		"in the village of Hugel","hugel",96,155;
 	end;
 }
 
-rachel,109,138,5	script	Cool Event Corp. Staff::CoolEventCorpStaffRachel	874,{
+rachel,109,138,5	script	Cool Event Corp. Staff::CoolEventCorpStaffRachel	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage:Teleport Service:Rent a Pushcart:Storage Password Service:Cancel",
 		"in the town of Rachel","rachel",113,137,"Veins";
 	end;
 }
 
-veins,208,128,5	script	Cool Event Corp. Staff::CoolEventCorpStaffVeins	874,{
+veins,208,128,5	script	Cool Event Corp. Staff::CoolEventCorpStaffVeins	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage:Teleport Service:Rent a Pushcart:Storage Password Service:Cancel",
 		"in the town of Veins","veins",204,103,"Rachel";

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini