Browse Source

Merge branch 'master' into feature/map_zones

aleos 9 months ago
parent
commit
142505f398
100 changed files with 6018 additions and 1114 deletions
  1. 10 2
      conf/battle/homunc.conf
  2. 4 2
      conf/battle/items.conf
  3. 4 2
      conf/battle/skill.conf
  4. 4 0
      conf/char_athena.conf
  5. 9 3
      conf/login_athena.conf
  6. 3 0
      conf/maps_athena.conf
  7. 21 0
      db/import-tmpl/mob_summon.yml
  8. BIN
      db/map_cache.dat
  9. 1 0
      db/map_index.txt
  10. 4 4
      db/pre-re/item_db_usable.yml
  11. 11 0
      db/pre-re/pet_db.yml
  12. 46 60
      db/pre-re/skill_db.yml
  13. 5 1
      db/pre-re/status.yml
  14. 205 33
      db/re/item_combos.yml
  15. 796 108
      db/re/item_db_equip.yml
  16. 514 0
      db/re/item_db_etc.yml
  17. 286 16
      db/re/item_db_usable.yml
  18. 20 0
      db/re/item_enchant.yml
  19. 262 0
      db/re/item_group_db.yml
  20. 524 0
      db/re/item_reform.yml
  21. 517 28
      db/re/mob_db.yml
  22. 104 2
      db/re/mob_skill_db.txt
  23. 250 250
      db/re/pet_db.yml
  24. 78 18
      db/re/quest_db.yml
  25. 64 23
      db/re/skill_db.yml
  26. 5 1
      db/re/status.yml
  27. 6 0
      doc/mapflags.txt
  28. 37 31
      doc/permissions.txt
  29. 77 14
      doc/script_commands.txt
  30. 3 0
      doc/status.txt
  31. 9 6
      doc/status_change.txt
  32. 6 13
      npc/cities/brasilis.txt
  33. 23 0
      npc/custom/jobmaster.txt
  34. 15 4
      npc/custom/warper.txt
  35. 10 1
      npc/kafras/kafras.txt
  36. 2 2
      npc/merchants/hair_style.txt
  37. 41 0
      npc/merchants/inn.txt
  38. 20 0
      npc/pre-re/cities/brasilis.txt
  39. 77 0
      npc/pre-re/guides/guides_brasilis.txt
  40. 1 1
      npc/pre-re/merchants/hair_dyer.txt
  41. 3 3
      npc/pre-re/merchants/hair_style.txt
  42. 64 0
      npc/pre-re/mobs/dungeons/bra_dun.txt
  43. 48 0
      npc/pre-re/mobs/fields/brasilis.txt
  44. 31 0
      npc/pre-re/scripts_athena.conf
  45. 43 47
      npc/quests/bard_quest.txt
  46. 1 1
      npc/quests/cooking_quest.txt
  47. 32 25
      npc/quests/quests_brasilis.txt
  48. 27 31
      npc/quests/quests_rachel.txt
  49. 1 1
      npc/quests/seals/mjolnir_seal.txt
  50. 1 3
      npc/quests/the_sign_quest.txt
  51. 4 0
      npc/re/cities/alberta.txt
  52. 3 3
      npc/re/cities/dicastes.txt
  53. 1 1
      npc/re/custom/lasagna/lasagna_npcs.txt
  54. 0 45
      npc/re/custom/lasagna/warps.txt
  55. 8 13
      npc/re/guides/guides_brasilis.txt
  56. 1 1
      npc/re/guild3/agit_main_te.txt
  57. 2 2
      npc/re/instances/CharlestonCrisis.txt
  58. 70 23
      npc/re/instances/OldGlastHeim.txt
  59. 8 3
      npc/re/instances/SealedOs.txt
  60. 1 1
      npc/re/jobs/2e/kagerou_oboro.txt
  61. 1 1
      npc/re/jobs/novice/academy.txt
  62. 0 9
      npc/re/kafras/kafras.txt
  63. 50 0
      npc/re/mapflag/specialpopup.txt
  64. 117 0
      npc/re/merchants/barters/enchan_illusion_dungeons.yml
  65. 51 0
      npc/re/merchants/enchan_illusion_dungeons.txt
  66. 0 54
      npc/re/merchants/inn.txt
  67. 29 0
      npc/re/merchants/shopping_boards.txt
  68. 17 25
      npc/re/mobs/dungeons/bra_dun.txt
  69. 44 0
      npc/re/mobs/dungeons/ein_dun.txt
  70. 8 14
      npc/re/mobs/fields/brasilis.txt
  71. 4 4
      npc/re/other/clans.txt
  72. 3 2
      npc/re/quests/eden/56-70.txt
  73. 0 2
      npc/re/quests/illusion_investigation.txt
  74. 3 3
      npc/re/quests/quests_16_1.txt
  75. 3 2
      npc/re/quests/quests_16_2.txt
  76. 3 1
      npc/re/quests/quests_17_1.txt
  77. 1 1
      npc/re/quests/quests_17_2.txt
  78. 994 0
      npc/re/quests/quests_illusion_dungeons.txt
  79. 6 6
      npc/re/quests/quests_malaya.txt
  80. 7 7
      npc/re/quests/quests_mora.txt
  81. 1 4
      npc/re/scripts_athena.conf
  82. 1 0
      npc/re/scripts_mapflags.conf
  83. 1 3
      npc/re/scripts_warps.conf
  84. 47 0
      npc/re/warps/cities/lasagna.txt
  85. 0 17
      npc/re/warps/dungeons/bra_dun.txt
  86. 0 17
      npc/re/warps/fields/bra_fild.txt
  87. 2 0
      npc/scripts_athena.conf
  88. 3 0
      npc/scripts_warps.conf
  89. 3 12
      npc/warps/cities/brasilis.txt
  90. 8 0
      npc/warps/dungeons/bra_dun.txt
  91. 8 0
      npc/warps/fields/bra_fild.txt
  92. 12 3
      src/char/char.cpp
  93. 1 0
      src/char/char.hpp
  94. 2 2
      src/common/mmo.hpp
  95. 12 4
      src/login/login.cpp
  96. 3 1
      src/login/login.hpp
  97. 9 2
      src/map/battle.cpp
  98. 2 0
      src/map/battle.hpp
  99. 3 3
      src/map/buyingstore.cpp
  100. 136 87
      src/map/clif.cpp

+ 10 - 2
conf/battle/homunc.conf

@@ -17,10 +17,18 @@
 // 0x10: They display luk/3+1 instead of their actual critical in the
 // 0x10: They display luk/3+1 instead of their actual critical in the
 //       stat window (by default they don't crit)
 //       stat window (by default they don't crit)
 // 0x20: Their Min-Matk is always the same as their max
 // 0x20: Their Min-Matk is always the same as their max
-// 0x40: Skill re-use delay is reset when they are vaporized.
-// 0x80: Skill re-use delay is reset when they are warped (by skill or item) with player.
 hom_setting: 0x3D
 hom_setting: 0x3D
 
 
+// Should the cooldown or aftercast delay of homunculi skills be reset when
+// the homunculus is vaporized?
+// Default on official servers: yes for Pre-renewal, no for Renewal
+//hom_delay_reset_vaporize: no
+
+// Should the cooldown or aftercast delay of homunculi skills be reset when
+// warping or changing maps?
+// Default on official servers: yes for Pre-renewal, no for Renewal
+//hom_delay_reset_warp: no
+
 // The rate a homunculus will get friendly by feeding it. (Note 2)
 // The rate a homunculus will get friendly by feeding it. (Note 2)
 homunculus_friendly_rate: 100
 homunculus_friendly_rate: 100
 
 

+ 4 - 2
conf/battle/items.conf

@@ -12,8 +12,10 @@
 // The highest value at which an item can be sold via the merchant vend skill. (in zeny)
 // The highest value at which an item can be sold via the merchant vend skill. (in zeny)
 vending_max_value: 1000000000
 vending_max_value: 1000000000
 
 
-// Whether to allow buying from vending chars that are at their max. zeny limit.
-// If set to yes, the rest of the zeny above the char's capacity will disappear.
+// Whether to allow placing items on a vending store when the player's zeny plus the total price
+// of the items exceeds the maximum zeny allowed. (Note 1)
+// If set to "yes", the items will be placed in the store but other players will not be able to buy them.
+// Official behavior is "yes", but on some official servers the client doesn't allow this.
 vending_over_max: yes
 vending_over_max: yes
 
 
 // Tax to apply to all vending transactions (eg: 10000 = 100%, 50 = 0.50%)
 // Tax to apply to all vending transactions (eg: 10000 = 100%, 50 = 0.50%)

+ 4 - 2
conf/battle/skill.conf

@@ -270,8 +270,10 @@ allow_skill_without_day: no
 // Allow use of ES-type magic on players?
 // Allow use of ES-type magic on players?
 allow_es_magic_player: no
 allow_es_magic_player: no
 
 
-// Miracle of the Sun, Moon and Stars skill ratio (100% = 10000)
-sg_miracle_skill_ratio: 2
+// Miracle of the Sun, Moon and Stars skill ratio
+// Valid values range from 1 (0.005% per hit) to 20000 (100% per hit)
+// This chance is further reduced if AGI is above 46 (92 = halved chance)
+sg_miracle_skill_ratio: 1
 
 
 // Miracle of the Sun, Moon and Stars skill duration in milliseconds
 // Miracle of the Sun, Moon and Stars skill duration in milliseconds
 sg_miracle_skill_duration: 3600000
 sg_miracle_skill_duration: 3600000

+ 4 - 0
conf/char_athena.conf

@@ -144,6 +144,10 @@ unknown_char_name: Unknown
 // To log the character server?
 // To log the character server?
 log_char: yes
 log_char: yes
 
 
+// Minimum length for a character name.
+// Must be set to '4' unless your client uses the 'Remove 4/6 letter Character Name limit' diff patch.
+char_name_min_length: 4
+
 // Allow or not identical name for characters but with a different case (upper/lower):
 // Allow or not identical name for characters but with a different case (upper/lower):
 // example: Test-test-TEST-TesT; Value: 0 not allowed (default), 1 allowed
 // example: Test-test-TEST-TesT; Value: 0 not allowed (default), 1 allowed
 name_ignoring_case: no
 name_ignoring_case: no

+ 9 - 3
conf/login_athena.conf

@@ -55,9 +55,15 @@ console: off
 // Note: This only works if client side password encryption is not enabled.
 // Note: This only works if client side password encryption is not enabled.
 new_account: no
 new_account: no
 
 
-//If new_account is enabled, minimum length to userid and passwords should be 4?
-//Must be 'Yes' unless your client uses both 'Disable 4 LetterUserID/Password' Diffs
-new_acc_length_limit: yes
+// If new_account is enabled, changes the minimum length for the account name.
+// By default is set to '4' or '6' (depending on the new login UI).
+// Don't change it unless your client uses the 'Remove 4/6 letter User Name limit' diff patch.
+//acc_name_min_length: 6
+
+// If new_account is enabled, changes the minimum length for the password.
+// By default is set to '4' or '6' (depending on the new login UI).
+// Don't change it unless your client uses the 'Remove 4/6 letter Password limit' diff patch.
+//password_min_length: 6
 
 
 // Account registration flood protection system
 // Account registration flood protection system
 // allowed_regs is the number of registrations allowed in time_allowed (in seconds)
 // allowed_regs is the number of registrations allowed in time_allowed (in seconds)

+ 3 - 0
conf/maps_athena.conf

@@ -1634,5 +1634,8 @@ map: luna_sf1
 map: luna_sf2
 map: luna_sf2
 map: mbase_in
 map: mbase_in
 
 
+// Market place
+map: prt_mk
+
 //------------------------- Clone Maps ---------------------------
 //------------------------- Clone Maps ---------------------------
 //------------------------- Extra Maps ---------------------------
 //------------------------- Extra Maps ---------------------------

+ 21 - 0
db/import-tmpl/mob_summon.yml

@@ -33,3 +33,24 @@ Header:
   Type: MOB_SUMMONABLE_DB
   Type: MOB_SUMMONABLE_DB
   Version: 1
   Version: 1
 
 
+#Body:
+# Pre-re Brasilis
+#=============================================================
+#  - Group: BLOODY_DEAD_BRANCH
+#    Summon:
+#      - Mob: BOITATA
+#        Rate: 1000000
+#  - Group: Branch_Of_Dead_Tree
+#    Summon:
+#      - Mob: IARA
+#        Rate: 71428
+#      - Mob: PIRANHA
+#        Rate: 71428
+#      - Mob: HEADLESS_MULE
+#        Rate: 71428
+#      - Mob: JAGUAR
+#        Rate: 71428
+#      - Mob: TOUCAN
+#        Rate: 71428
+#      - Mob: CURUPIRA
+#        Rate: 71428

BIN
db/map_cache.dat


+ 1 - 0
db/map_index.txt

@@ -1260,6 +1260,7 @@ jor_tmple2
 luna_sf1
 luna_sf1
 luna_sf2
 luna_sf2
 mbase_in
 mbase_in
+prt_mk
 
 
 //======================================================================================
 //======================================================================================
 // - Other/Extra maps -
 // - Other/Extra maps -

+ 4 - 4
db/pre-re/item_db_usable.yml

@@ -2613,7 +2613,7 @@ Body:
     Flags:
     Flags:
       BuyingStore: true
       BuyingStore: true
     Script: |
     Script: |
-      sc_start SC_SlowDown,5000,0;
+      sc_start SC_SLOWDOWN,5000,100;
   - Id: 12018
   - Id: 12018
     AegisName: Fire_Cracker
     AegisName: Fire_Cracker
     Name: Firecracker
     Name: Firecracker
@@ -8637,21 +8637,21 @@ Body:
     Type: Usable
     Type: Usable
     Weight: 10
     Weight: 10
     Script: |
     Script: |
-      searchstores 10,0;
+      searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 12581
   - Id: 12581
     AegisName: Vending_Search_Scroll2
     AegisName: Vending_Search_Scroll2
     Name: Universal Catalog Gold
     Name: Universal Catalog Gold
     Type: Usable
     Type: Usable
     Weight: 10
     Weight: 10
     Script: |
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12591
   - Id: 12591
     AegisName: Uni_Catalog_Bz
     AegisName: Uni_Catalog_Bz
     Name: Universal Catalog Bronze
     Name: Universal Catalog Bronze
     Type: Usable
     Type: Usable
     Weight: 10
     Weight: 10
     Script: |
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12609
   - Id: 12609
     AegisName: Old_Ore_Box
     AegisName: Old_Ore_Box
     Name: Old Ore Box
     Name: Old Ore Box

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

@@ -866,3 +866,14 @@ Body:
         bonus2 bSubEle,Ele_Fire,2;
         bonus2 bSubEle,Ele_Fire,2;
         bonus2 bAddEle,Ele_Fire,2;
         bonus2 bAddEle,Ele_Fire,2;
       }
       }
+  - 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

+ 46 - 60
db/pre-re/skill_db.yml

@@ -8538,6 +8538,7 @@ Body:
     HitCount: 1
     HitCount: 1
     SplashArea: -1
     SplashArea: -1
     AfterCastActDelay: 4000
     AfterCastActDelay: 4000
+    Duration1: 15000
     Duration2: 12000
     Duration2: 12000
     Requires:
     Requires:
       SpCost:
       SpCost:
@@ -8829,6 +8830,7 @@ Body:
     HitCount: 1
     HitCount: 1
     SplashArea: -1
     SplashArea: -1
     AfterCastActDelay: 4000
     AfterCastActDelay: 4000
+    Duration1: 5000
     Duration2: 5000
     Duration2: 5000
     Requires:
     Requires:
       SpCost:
       SpCost:
@@ -30724,10 +30726,8 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-    Range: 9
-    Hit: Single
-    HitCount: 1
     AfterCastActDelay: 2000
     AfterCastActDelay: 2000
+    AfterCastWalkDelay: 1000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -30750,11 +30750,8 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-      Splash: true
-    Hit: Single
-    HitCount: 1
-    SplashArea: -1
     AfterCastActDelay: 35000
     AfterCastActDelay: 35000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 40000
         Time: 40000
@@ -30783,7 +30780,6 @@ Body:
     Name: HLIF_BRAIN
     Name: HLIF_BRAIN
     Description: Brain Surgery
     Description: Brain Surgery
     MaxLevel: 5
     MaxLevel: 5
-    SplashArea: 1
   - Id: 8004
   - Id: 8004
     Name: HLIF_CHANGE
     Name: HLIF_CHANGE
     Description: Change
     Description: Change
@@ -30791,7 +30787,14 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-    Hit: Single
+    AfterCastActDelay:
+      - Level: 1
+        Time: 600000
+      - Level: 2
+        Time: 900000
+      - Level: 3
+        Time: 1200000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -30799,13 +30802,6 @@ Body:
         Time: 180000
         Time: 180000
       - Level: 3
       - Level: 3
         Time: 300000
         Time: 300000
-    Duration2:
-      - Level: 1
-        Time: 600000
-      - Level: 2
-        Time: 900000
-      - Level: 3
-        Time: 1200000
     Requires:
     Requires:
       SpCost: 100
       SpCost: 100
     Status: Change
     Status: Change
@@ -30817,7 +30813,8 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    Duration2: 1000
+    AfterCastActDelay: 1000
+    AfterCastWalkDelay: 1000
     Requires:
     Requires:
       SpCost: 10
       SpCost: 10
   - Id: 8006
   - Id: 8006
@@ -30829,6 +30826,7 @@ Body:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
     AfterCastActDelay: 30000
     AfterCastActDelay: 30000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 40000
         Time: 40000
@@ -30867,6 +30865,14 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
+    AfterCastActDelay:
+      - Level: 1
+        Time: 300000
+      - Level: 2
+        Time: 600000
+      - Level: 3
+        Time: 900000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -30874,13 +30880,6 @@ Body:
         Time: 180000
         Time: 180000
       - Level: 3
       - Level: 3
         Time: 300000
         Time: 300000
-    Duration2:
-      - Level: 1
-        Time: 300000
-      - Level: 2
-        Time: 600000
-      - Level: 3
-        Time: 900000
     Requires:
     Requires:
       SpCost: 120
       SpCost: 120
     Status: Bloodlust
     Status: Bloodlust
@@ -30903,7 +30902,6 @@ Body:
         Count: -2
         Count: -2
       - Level: 5
       - Level: 5
         Count: -3
         Count: -3
-    AfterCastWalkDelay: 2000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -30924,28 +30922,29 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    Duration1:
+    AfterCastActDelay:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
-        Time: 55000
+        Time: 70000
       - Level: 3
       - Level: 3
-        Time: 50000
+        Time: 80000
       - Level: 4
       - Level: 4
-        Time: 45000
+        Time: 90000
       - Level: 5
       - Level: 5
-        Time: 40000
-    Duration2:
+        Time: 120000
+    AfterCastWalkDelay: 1000
+    Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
-        Time: 70000
+        Time: 55000
       - Level: 3
       - Level: 3
-        Time: 80000
+        Time: 50000
       - Level: 4
       - Level: 4
-        Time: 90000
+        Time: 45000
       - Level: 5
       - Level: 5
-        Time: 120000
+        Time: 40000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -30969,28 +30968,29 @@ Body:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
     CastCancel: true
     CastCancel: true
-    Duration1:
+    AfterCastActDelay:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
-        Time: 55000
+        Time: 70000
       - Level: 3
       - Level: 3
-        Time: 50000
+        Time: 80000
       - Level: 4
       - Level: 4
-        Time: 45000
+        Time: 90000
       - Level: 5
       - Level: 5
-        Time: 40000
-    Duration2:
+        Time: 120000
+    AfterCastWalkDelay: 1000
+    Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
-        Time: 70000
+        Time: 55000
       - Level: 3
       - Level: 3
-        Time: 80000
+        Time: 50000
       - Level: 4
       - Level: 4
-        Time: 90000
+        Time: 45000
       - Level: 5
       - Level: 5
-        Time: 120000
+        Time: 40000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -31013,7 +31013,6 @@ Body:
     Range: 15
     Range: 15
     Hit: Single
     Hit: Single
     HitCount: 1
     HitCount: 1
-    AfterCastActDelay: 1000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
   - Id: 8013
   - Id: 8013
@@ -31035,17 +31034,6 @@ Body:
         Count: 4
         Count: 4
       - Level: 5
       - Level: 5
         Count: 5
         Count: 5
-    AfterCastActDelay:
-      - Level: 1
-        Time: 2000
-      - Level: 2
-        Time: 2200
-      - Level: 3
-        Time: 2400
-      - Level: 4
-        Time: 2600
-      - Level: 5
-        Time: 2800
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -31066,8 +31054,7 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    AfterCastActDelay: 3000
-    AfterCastWalkDelay: 3000
+    AfterCastWalkDelay: 1500
     Requires:
     Requires:
       SpCost: 40
       SpCost: 40
   - Id: 8015
   - Id: 8015
@@ -31091,7 +31078,6 @@ Body:
     HitCount: 1
     HitCount: 1
     Element: Weapon
     Element: Weapon
     SplashArea: 4
     SplashArea: 4
-    AfterCastWalkDelay: 1000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
   - Id: 8018
   - Id: 8018

+ 5 - 1
db/pre-re/status.yml

@@ -2478,13 +2478,17 @@ Body:
     DurationLookup: HLIF_AVOID
     DurationLookup: HLIF_AVOID
     CalcFlags:
     CalcFlags:
       Speed: true
       Speed: true
+    Flags:
+      NoSave: true
+      RemoveFromHomOnWarp: true
   - Status: Change
   - Status: Change
     DurationLookup: HLIF_CHANGE
     DurationLookup: HLIF_CHANGE
     CalcFlags:
     CalcFlags:
       Vit: true
       Vit: true
       Int: true
       Int: true
     Flags:
     Flags:
-      RemoveOnChangeMap: true
+      NoSave: true
+      RemoveFromHomOnWarp: true
     Fail:
     Fail:
       Change: true
       Change: true
   - Status: Bloodlust
   - Status: Bloodlust

+ 205 - 33
db/re/item_combos.yml

@@ -20852,25 +20852,6 @@ Body:
          bonus bMdef,3*.@r_shoes;
          bonus bMdef,3*.@r_shoes;
          bonus bMatk,5*.@r;
          bonus bMatk,5*.@r;
       }
       }
-  - Combos:
-      - Combo:
-          - Hollow_Shoes
-          - Berzebub_Card
-    Script: |
-      .@r = getrefine();
-      skill "PR_MAGNUS",10;
-      bonus2 bMagicAddRace,RC_Undead,30;
-      bonus2 bMagicAddRace,RC_Demon,30;
-      bonus2 bMagicAddEle,Ele_Dark,30;
-      bonus2 bMagicAddEle,Ele_Undead,30;
-      if (BaseLevel >= 100) {
-         bonus bMatk,15*.@r;
-         bonus bVariableCastrate,-7*.@r;
-      }
-      else {
-         bonus bMatk,5*.@r;
-         bonus bVariableCastrate,-2*.@r;
-      }
   - Combos:
   - Combos:
       - Combo:
       - Combo:
           - Astraea_Ring
           - Astraea_Ring
@@ -46539,6 +46520,7 @@ Body:
     Script: |
     Script: |
       bonus2 bAddEle,Ele_All,20;
       bonus2 bAddEle,Ele_All,20;
       bonus bAspdRate,5;
       bonus bAspdRate,5;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM",40;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",40;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",40;
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",20;
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",20;
   - Combos:
   - Combos:
@@ -47407,6 +47389,7 @@ Body:
     Script: |
     Script: |
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",25;
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",25;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM",25;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM",25;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",25;
       bonus2 bSubRace,RC_Player_Human,10;
       bonus2 bSubRace,RC_Player_Human,10;
       bonus2 bSubRace,RC_Player_Doram,10;
       bonus2 bSubRace,RC_Player_Doram,10;
   - Combos:
   - Combos:
@@ -50872,14 +50855,6 @@ Body:
       bonus bMaxHP,2000;
       bonus bMaxHP,2000;
       bonus bMaxSP,200;
       bonus bMaxSP,200;
       bonus bHealPower,15;
       bonus bHealPower,15;
-  - Combos:
-      - Combo:
-          - aegis_311883    # 311883
-          - aegis_410302    # 410302
-    Script: |
-      bonus bSpeedRate,25;
-      bonus2 bSubRace,RC_Player_Human,5;
-      bonus2 bSubRace,RC_Player_Doram,5;
   - Combos:
   - Combos:
       - Combo:
       - Combo:
           - R001_Bestia_Card    # 300281
           - R001_Bestia_Card    # 300281
@@ -51483,12 +51458,6 @@ Body:
          bonus bMatk,15*.@eq;
          bonus bMatk,15*.@eq;
          bonus bVariableCastrate,-7*.@eq;
          bonus bVariableCastrate,-7*.@eq;
       }
       }
-  - Combos:
-      - Combo:
-          - Berzebub_Card    # 4145
-          - VesperHeadGear    # 19436
-    Script: |
-      bonus bVariableCastrate,30;
   - Combos:
   - Combos:
       - Combo:
       - Combo:
           - Preschool_Hat    # 18860
           - Preschool_Hat    # 18860
@@ -52035,3 +52004,206 @@ Body:
           - Ignis_Cap    # 18651
           - Ignis_Cap    # 18651
     Script: |
     Script: |
       bonus bAspdRate,getequiprefinerycnt(EQI_HEAD_TOP)/2;
       bonus bAspdRate,getequiprefinerycnt(EQI_HEAD_TOP)/2;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_TR   # 400673
+          - MetalVilolin_Furious   # 570072
+      - Combo:
+          - FuriousCirclet_TR   # 400673
+          - MetalWhip_Furious   # 580072
+    Script: |
+      bonus2 bMagicAddRace,RC_All,10;
+      bonus2 bMagicAddRace,RC_Player_Human,-10;
+      bonus2 bMagicAddRace,RC_Player_Doram,-10;
+      bonus2 bSkillAtk,"WM_REVERBERATION",35;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_TR   # 400673
+          - Harp_Furious   # 570073
+      - Combo:
+          - FuriousCirclet_TR   # 400673
+          - Whip_Furious   # 580073
+    Script: |
+      bonus2 bAddRace,RC_All,10;
+      bonus2 bAddRace,RC_Player_Human,-10;
+      bonus2 bAddRace,RC_Player_Doram,-10;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_BO   # 400674
+          - Lapier_Furious   # 500101
+    Script: |
+      bonus2 bSkillCooldown,"BO_EXPLOSIVE_POWDER",-120;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_BO   # 400674
+          - SharpSword_Furious   # 500102
+    Script: |
+      bonus2 bSkillCooldown,"BO_MAYHEMIC_THORNS",-120;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_HN   # 400675
+          - WhiteSword_Furious   # 500103
+    Script: |
+      bonus2 bSkillCooldown,"HN_DOUBLEBOWLINGBASH",-150;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_HN   # 400675
+          - Stick_Furious   # 550148
+    Script: |
+      bonus2 bSkillCooldown,"HN_JUPITEL_THUNDER_STORM",-250;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_AG   # 400694
+          - Specter_Furious   # 550150
+    Script: |
+      bonus2 bMagicAddRace,RC_All,10;
+      bonus2 bMagicAddRace,RC_Player_Human,-10;
+      bonus2 bMagicAddRace,RC_Player_Doram,-10;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_AG   # 400694
+          - Flame_Staff_Furious   # 640053
+    Script: |
+      bonus2 bSkillAtk,"AG_ALL_BLOOM",25;
+      bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK",25;
+      bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK2",25;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_IQ   # 400695
+          - GaleClaw_Furious   # 560067
+    Script: |
+      bonus2 bSkillCooldown,"IQ_MASSIVE_F_BLASTER",-1200;
+      bonus2 bSkillAtk,"IQ_MASSIVE_F_BLASTER",20;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_IQ   # 400695
+          - Exterminate_Furious   # 560068
+    Script: |
+      bonus2 bSkillAtk,"IQ_THIRD_FLAME_BOMB",25;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_NW   # 400696
+          - Rifle_Furious   # 810042
+    Script: |
+      bonus2 bSkillAtk,"NW_ONLY_ONE_BULLET",25;
+  - Combos:
+      - Combo:
+          - FuriousCirclet_NW   # 400696
+          - Gatling_Furious   # 830038
+    Script: |
+      bonus2 bAddRace,RC_All,10;
+      bonus2 bAddRace,RC_Player_Human,-10;
+      bonus2 bAddRace,RC_Player_Doram,-10;
+      bonus2 bSkillAtk,"NW_MAGAZINE_FOR_ONE",15;
+  - Combos:
+      - Combo:
+          - Lapier_Furious   # 500101
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_HEAD_TOP);
+      bonus2 bSkillAtk,"BO_EXPLOSIVE_POWDER",.@sum;
+  - Combos:
+      - Combo:
+          - SharpSword_Furious   # 500102
+          - FuriousBoots   # 470265
+    Script: |
+      bonus bCritAtkRate,15;
+      bonus bCritical,5;
+      if (getenchantgrade()>=ENCHANTGRADE_B) {
+         bonus2 bSkillAtk,"BO_MAYHEMIC_THORNS",15;
+      }
+  - Combos:
+      - Combo:
+          - WhiteSword_Furious   # 500103
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
+      bonus2 bSkillAtk,"HN_DOUBLEBOWLINGBASH",.@sum;
+  - Combos:
+      - Combo:
+          - Stick_Furious   # 550148
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"HN_HELLS_DRIVE",20;
+      if (getenchantgrade()>=ENCHANTGRADE_B) {
+         bonus4 bAutoSpellOnSkill,"HN_HELLS_DRIVE","EM_TERRA_DRIVE",4,1000;
+      }
+  - Combos:
+      - Combo:
+          - Specter_Furious   # 550150
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"AG_SOUL_VC_STRIKE",20;
+  - Combos:
+      - Combo:
+          - GaleClaw_Furious   # 560067
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"IQ_MASSIVE_F_BLASTER",20;
+  - Combos:
+      - Combo:
+          - Exterminate_Furious   # 560068
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
+      bonus2 bSkillAtk,"IQ_THIRD_FLAME_BOMB",.@sum;
+  - Combos:
+      - Combo:
+          - MetalVilolin_Furious   # 570072
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"WM_REVERBERATION",70;
+      bonus2 bSkillAtk,"TR_METALIC_FURY",20;
+  - Combos:
+      - Combo:
+          - Harp_Furious   # 570073
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM",.@sum;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",.@sum;
+  - Combos:
+      - Combo:
+          - MetalWhip_Furious   # 580072
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"WM_REVERBERATION",70;
+      bonus2 bSkillAtk,"TR_METALIC_FURY",20;
+  - Combos:
+      - Combo:
+          - Whip_Furious   # 580073
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM",.@sum;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",.@sum;
+  - Combos:
+      - Combo:
+          - Flame_Staff_Furious   # 640053
+          - FuriousBoots   # 470265
+    Script: |
+      .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_HEAD_TOP);
+      bonus2 bSkillAtk,"AG_ALL_BLOOM",.@sum;
+      bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK",.@sum;
+      bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK2",.@sum;
+  - Combos:
+      - Combo:
+          - Rifle_Furious   # 810042
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"NW_ONLY_ONE_BULLET",25;
+  - Combos:
+      - Combo:
+          - Gatling_Furious   # 830038
+          - FuriousBoots   # 470265
+    Script: |
+      bonus2 bSkillAtk,"NW_MAGAZINE_FOR_ONE",25;
+      bonus2 bSkillAtk,"NW_THE_VIGILANTE_AT_NIGHT",15;
+  - Combos:
+      - Combo:
+          - aegis_300549   # 300549
+          - Sesrumnir_Evt_Ring   # 490557
+    Script: |
+      bonus bShortAtkRate,7;
+      bonus bLongAtkRate,7;
+      bonus2 bMagicAtkEle,Ele_All,7;

File diff suppressed because it is too large
+ 796 - 108
db/re/item_db_equip.yml


+ 514 - 0
db/re/item_db_etc.yml

@@ -53760,6 +53760,20 @@ Body:
       bonus bMaxHPrate,-15;
       bonus bMaxHPrate,-15;
       bonus bPAtk,.@r;
       bonus bPAtk,.@r;
       bonus bAtkRate,.@r;
       bonus bAtkRate,.@r;
+  - Id: 300549
+    AegisName: aegis_300549
+    Name: Summer Vacation Pope Card
+    Type: Card
+    Weight: 10
+    Locations:
+      Left_Accessory: true
+    Flags:
+      BuyingStore: true
+      DropEffect: CLIENT
+    Script: |
+      bonus bShortAtkRate,3;
+      bonus bLongAtkRate,3;
+      bonus2 bMagicAtkEle,Ele_All,3;
   - Id: 310000
   - Id: 310000
     AegisName: Ranger_Top2
     AegisName: Ranger_Top2
     Name: Sniper Stone II (Top)
     Name: Sniper Stone II (Top)
@@ -83045,6 +83059,42 @@ Body:
       NoGuildStorage: true
       NoGuildStorage: true
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
+  - Id: 1000284
+    AegisName: EpisodClear13
+    Name: Eps 13 Clear Ticket
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1000285
+    AegisName: EpisodClear14
+    Name: Eps 14 Clear Ticket
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1000286
+    AegisName: EpisodClear15
+    Name: Eps 15 Clear Ticket
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
   - Id: 1000287
   - Id: 1000287
     AegisName: EpisodClear17
     AegisName: EpisodClear17
     Name: Episode 17 Clear Ticket
     Name: Episode 17 Clear Ticket
@@ -89781,6 +89831,402 @@ Body:
     Weight: 1
     Weight: 1
     Flags:
     Flags:
       BuyingStore: true
       BuyingStore: true
+  - Id: 1001689
+    AegisName: R_Snowflower_Armor
+    Name: Printed Snow Flower Armor
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001690
+    AegisName: R_Snowflower_Manteau
+    Name: Printed Snow Flower Manteau
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001691
+    AegisName: R_Snowflower_Boots
+    Name: Printed Snow Flower Boots
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001692
+    AegisName: R_Snowflower_Pendant
+    Name: Printed Snow Flower Pendant
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001693
+    AegisName: R_Snowflower_Necklace
+    Name: Printed Snow Flower Necklace
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001694
+    AegisName: R_Snowflower_Robe
+    Name: Printed Snow Flower Robe
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001695
+    AegisName: R_Snowflower_Muffler
+    Name: Printed Snow Flower Muffler
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001696
+    AegisName: R_Snowflower_Shoes
+    Name: Printed Snow Flower Shoes
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001697
+    AegisName: R_Snowflower_Ring
+    Name: Printed Snow Flower Ring
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001698
+    AegisName: R_Snowflower_Earring
+    Name: Printed Snow Flower Earring
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001699
+    AegisName: R_Glacier_T_Sword
+    Name: Printed Glacier Two-handed Sword
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001700
+    AegisName: R_Glacier_Lance
+    Name: Printed Glacier Lance
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001701
+    AegisName: R_Glacier_Sword
+    Name: Printed Glacier Sword
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001702
+    AegisName: R_Glacier_B_Sword
+    Name: Printed Glacier Basic Sword
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001703
+    AegisName: R_Glacier_Spear
+    Name: Printed Glacier Spear
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001704
+    AegisName: R_Glacier_T_Axe
+    Name: Printed Glacier Mechanic Axe
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001705
+    AegisName: R_Glacier_Axe
+    Name: Printed Glacier Axe
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001706
+    AegisName: R_Glacier_Mace
+    Name: Printed Glacier Mace
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001707
+    AegisName: R_Glacier_M_Mace
+    Name: Printed Glacier Mechanic Mace
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001708
+    AegisName: R_Glacier_R_Knife
+    Name: Printed Glacier Rogue Knife
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001709
+    AegisName: R_Glacier_B_Knife
+    Name: Printed Glacier Basic Knife
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001710
+    AegisName: R_Glacier_Knuckle
+    Name: Printed Glacier Knuckle
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001711
+    AegisName: R_Glacier_Katar
+    Name: Printed Glacier Katar
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001712
+    AegisName: R_Glacier_Bow
+    Name: Printed Glacier Bow
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001713
+    AegisName: R_Glacier_Violin
+    Name: Printed Glacier Violin
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001714
+    AegisName: R_Glacier_Whip
+    Name: Printed Glacier Whip
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001715
+    AegisName: R_Glacier_Humma
+    Name: Printed Glacier Huuma Shuriken
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001716
+    AegisName: R_Glacier_Book
+    Name: Printed Glacier Book
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001717
+    AegisName: R_Glacier_Wand
+    Name: Printed Glacier Wand
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001718
+    AegisName: R_Glacier_Staff
+    Name: Printed Glacier Staff
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001719
+    AegisName: R_Glacier_Foxtail
+    Name: Printed Glacier Foxtail
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001720
+    AegisName: R_Glacier_Revolver
+    Name: Printed Glacier Revolver
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001721
+    AegisName: R_Glacier_Rifle
+    Name: Printed Glacier Rifle
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001722
+    AegisName: R_Glacier_Shotgun
+    Name: Printed Glacier Shotgun
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001723
+    AegisName: R_Glacier_Gatling
+    Name: Printed Glacier Gatling
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001724
+    AegisName: R_Glacier_Launcher
+    Name: Printed Glacier Launcher
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
   - Id: 1001737
   - Id: 1001737
     AegisName: BioloStone_Robe
     AegisName: BioloStone_Robe
     Name: Biolo Stone (Garment)
     Name: Biolo Stone (Garment)
@@ -89796,6 +90242,38 @@ Body:
     Name: Spirit Handler Stone (Garment)
     Name: Spirit Handler Stone (Garment)
     Type: Etc
     Type: Etc
     Weight: 100
     Weight: 100
+  - Id: 1001740
+    AegisName: Summer_Ticket
+    Name: Ocean Week Commemoration Ticket
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001741
+    AegisName: Summer_W_Melon
+    Name: Summer Watermelon
+    Type: Etc
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001742
+    AegisName: aegis_1001742
+    Name: Festival Food Bag
+    Type: Etc
+    Weight: 10
+    Flags:
+      BuyingStore: true
   - Id: 1001744
   - Id: 1001744
     AegisName: Kr_B_Event04
     AegisName: Kr_B_Event04
     Name: Sweet Strawberry Fresh Cream
     Name: Sweet Strawberry Fresh Cream
@@ -89808,6 +90286,42 @@ Body:
       NoGuildStorage: true
       NoGuildStorage: true
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
+  - Id: 1001753
+    AegisName: D_EpisodClear13
+    Name: Episode 13 Pass Ticket    # !todo check english name
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001755
+    AegisName: D_EpisodClear14
+    Name: Episode 14 Pass Ticket    # !todo check english name
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 1001756
+    AegisName: D_EpisodClear15
+    Name: Episode 15 Pass Ticket    # !todo check english name
+    Type: Etc
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
   - Id: 1200000
   - Id: 1200000
     AegisName: IDTest_arrow
     AegisName: IDTest_arrow
     Name: IDTest arrow
     Name: IDTest arrow

+ 286 - 16
db/re/item_db_usable.yml

@@ -4371,6 +4371,38 @@ Body:
       BuyingStore: true
       BuyingStore: true
 #   Script: |
 #   Script: |
 #     /* TODO */
 #     /* TODO */
+  - Id: 11636
+    AegisName: 24_S_Ev_Lime_Soda
+    Name: Lime Soda
+    Type: Healing
+    Weight: 1
+    EquipLevelMin: 90
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      itemheal 1800,0; /* average value */
+  - Id: 11637
+    AegisName: 24_S_Ev_Berry_Soda
+    Name: Berry Soda
+    Type: Healing
+    Weight: 1
+    EquipLevelMin: 90
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      itemheal 0,180; /* average value */
   - Id: 11701
   - Id: 11701
     AegisName: Girl_Bunch_Of_Flower
     AegisName: Girl_Bunch_Of_Flower
     Name: Girl's Bouquet
     Name: Girl's Bouquet
@@ -11333,7 +11365,7 @@ Body:
     Type: Usable
     Type: Usable
     Weight: 10
     Weight: 10
     Script: |
     Script: |
-      searchstores 10,0;
+      searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 12581
   - Id: 12581
     AegisName: Vending_Search_Scroll2
     AegisName: Vending_Search_Scroll2
     Name: Universal Catalog Gold
     Name: Universal Catalog Gold
@@ -11348,7 +11380,7 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12582
   - Id: 12582
     AegisName: Siege_Supply_Box
     AegisName: Siege_Supply_Box
     Name: WoE Supply Box
     Name: WoE Supply Box
@@ -11492,7 +11524,7 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12592
   - Id: 12592
     AegisName: Cyclops_Box1
     AegisName: Cyclops_Box1
     Name: Cyclops Box1
     Name: Cyclops Box1
@@ -63371,8 +63403,8 @@ Body:
     Name: Special Shopper Catalog
     Name: Special Shopper Catalog
     Type: Usable
     Type: Usable
     Weight: 10
     Weight: 10
-#   Script: |
-#     /* TODO */
+    Script: |
+      searchstores 3, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 23374
   - Id: 23374
     AegisName: Fire_Armor_S
     AegisName: Fire_Armor_S
     Name: Fire Armor Scroll
     Name: Fire Armor Scroll
@@ -78646,6 +78678,99 @@ Body:
       Container: true
       Container: true
     Script: |
     Script: |
       getgroupitem(IG_ENCHANT_STONE_BOX35);
       getgroupitem(IG_ENCHANT_STONE_BOX35);
+  - Id: 103065
+    AegisName: 24_S_Ev_Noodle
+    Name: Summer Festival Noodle
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103066
+    AegisName: 24_S_Ev_Grilled
+    Name: Herb Calamari Barbecue
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103067
+    AegisName: 24_S_Ev_Podding
+    Name: Sweet Watermelon Pudding
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103068
+    AegisName: 24_S_Ev_Juice
+    Name: Cool Watermelon Juice
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103069
+    AegisName: 24_S_Ev_IceFlake
+    Name: Cool Red Beans Bingsu
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103070
+    AegisName: 24_S_Ev_Pop_Corn
+    Name: Gourmet Butter Popcorn
+    Type: Usable
+    Weight: 10
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+  - Id: 103071
+    AegisName: 24_S_Ev_Ripe_Melon
+    Name: Ripe Golden Melon
+    Type: Usable
+    Weight: 50
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      percentheal 100,100;
   - Id: 103095
   - Id: 103095
     AegisName: Kr_B_Special10
     AegisName: Kr_B_Special10
     Name: Love Cake
     Name: Love Cake
@@ -78658,6 +78783,78 @@ Body:
       NoGuildStorage: true
       NoGuildStorage: true
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
+  - Id: 103106
+    AegisName: Stove_Channeling_Box_1
+    Name: Channeling Commemoration Box I
+    Type: Usable
+    Weight: 400
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_STOVE_CHANNELING_BOX_1);
+  - Id: 103107
+    AegisName: Stove_Channeling_Box_2
+    Name: Channeling Commemoration Box II
+    Type: Usable
+    Weight: 400
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_STOVE_CHANNELING_BOX_2);
+  - Id: 103108
+    AegisName: Stove_Channeling_Box_3
+    Name: Channeling Commemoration Box III
+    Type: Usable
+    Weight: 400
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_STOVE_CHANNELING_BOX_3);
+  - Id: 103109
+    AegisName: Stove_Channeling_Box_4
+    Name: Channeling Commemoration Box IV
+    Type: Usable
+    Weight: 400
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoStorage: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_STOVE_CHANNELING_BOX_4);
   - Id: 200000
   - Id: 200000
     AegisName: IDTest_Cash
     AegisName: IDTest_Cash
     Name: IDTest Cash
     Name: IDTest Cash
@@ -80785,6 +80982,8 @@ Body:
 #   Name: (Limited) Nyangvine Fruit Package I (Stone Box 35)
 #   Name: (Limited) Nyangvine Fruit Package I (Stone Box 35)
     Name: (Limited) Nyangvine Fruit Package I (Stone Box 35
     Name: (Limited) Nyangvine Fruit Package I (Stone Box 35
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80794,12 +80993,14 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX1_35);
   - Id: 200406
   - Id: 200406
     AegisName: LI_Nyangvine_Box2_35
     AegisName: LI_Nyangvine_Box2_35
 #   Name: (Limited) Nyangvine Fruit Package II (Stone Box 35)
 #   Name: (Limited) Nyangvine Fruit Package II (Stone Box 35)
     Name: (Limited) Nyangvine Fruit Package II (Stone Box 3
     Name: (Limited) Nyangvine Fruit Package II (Stone Box 3
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80809,12 +81010,14 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX2_35);
   - Id: 200407
   - Id: 200407
     AegisName: LI_Nyangvine_Box3_35
     AegisName: LI_Nyangvine_Box3_35
 #   Name: (Limited) Nyangvine Fruit Package III (Stone Box 35)
 #   Name: (Limited) Nyangvine Fruit Package III (Stone Box 35)
     Name: (Limited) Nyangvine Fruit Package III (Stone Box 
     Name: (Limited) Nyangvine Fruit Package III (Stone Box 
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80824,12 +81027,14 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX3_35);
   - Id: 200411
   - Id: 200411
     AegisName: A_Speed_Booster_Box
     AegisName: A_Speed_Booster_Box
     Name: Speed Booster Package
     Name: Speed Booster Package
     Type: Cash
     Type: Cash
     Weight: 10
     Weight: 10
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80839,12 +81044,14 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_A_SPEED_BOOSTER_BOX);
   - Id: 200412
   - Id: 200412
     AegisName: A_Speed_Booster_10_Box
     AegisName: A_Speed_Booster_10_Box
     Name: Speed Booster Package 10 Sets
     Name: Speed Booster Package 10 Sets
     Type: Cash
     Type: Cash
     Weight: 10
     Weight: 10
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80854,11 +81061,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_A_SPEED_BOOSTER_10_BOX);
   - Id: 200415
   - Id: 200415
     AegisName: L_Infinity_Power_Pack
     AegisName: L_Infinity_Power_Pack
     Name: (Limited) Infinity Power Package
     Name: (Limited) Infinity Power Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80868,11 +81077,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_INFINITY_POWER_PACK);
   - Id: 200416
   - Id: 200416
     AegisName: L_All_Red_Pack
     AegisName: L_All_Red_Pack
     Name: (Limited) All Red Package
     Name: (Limited) All Red Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80882,11 +81093,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_ALL_RED_PACK);
   - Id: 200417
   - Id: 200417
     AegisName: L_Defense_Potion_Pack
     AegisName: L_Defense_Potion_Pack
     Name: (Limited) Defender Package
     Name: (Limited) Defender Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80896,11 +81109,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_DEFENSE_POTION_PACK);
   - Id: 200418
   - Id: 200418
     AegisName: L_Speed_Force_Pack
     AegisName: L_Speed_Force_Pack
     Name: (Limited) Speed Force Package
     Name: (Limited) Speed Force Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80910,11 +81125,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_SPEED_FORCE_PACK);
   - Id: 200419
   - Id: 200419
     AegisName: L_Special_Speed_Pack
     AegisName: L_Special_Speed_Pack
     Name: (Limited) Speed Booster Special Package
     Name: (Limited) Speed Booster Special Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80924,11 +81141,13 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_SPECIAL_SPEED_PACK);
   - Id: 200420
   - Id: 200420
     AegisName: L_Special_Force_Pack
     AegisName: L_Special_Force_Pack
     Name: (Limited) Force Booster Special Package
     Name: (Limited) Force Booster Special Package
     Type: Cash
     Type: Cash
+    Flags:
+      Container: true
     Trade:
     Trade:
       NoDrop: true
       NoDrop: true
       NoTrade: true
       NoTrade: true
@@ -80938,7 +81157,58 @@ Body:
       NoMail: true
       NoMail: true
       NoAuction: true
       NoAuction: true
     Script: |
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_SPECIAL_FORCE_PACK);
+  - Id: 200425
+    AegisName: CostumeMilePack_35_1
+#   Name: Nyangvine Costume Mileage Package I (Stone Box 35)
+    Name: Nyangvine Costume Mileage Package I (Stone Box 35
+    Type: Cash
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_COSTUMEMILEPACK_35_1);
+  - Id: 200426
+    AegisName: CostumeMilePack_35_2
+#   Name: Nyangvine Costume Mileage Package II (Stone Box 35)
+    Name: Nyangvine Costume Mileage Package II (Stone Box 3
+    Type: Cash
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_COSTUMEMILEPACK_35_2);
+  - Id: 200427
+    AegisName: CostumeMilePack_35_3
+#   Name: Nyangvine Costume Mileage Package III (Stone Box 35)
+    Name: Nyangvine Costume Mileage Package III (Stone Box 
+    Type: Cash
+    Flags:
+      Container: true
+    Trade:
+      NoDrop: true
+      NoTrade: true
+      NoSell: true
+      NoCart: true
+      NoGuildStorage: true
+      NoMail: true
+      NoAuction: true
+    Script: |
+      getgroupitem(IG_COSTUMEMILEPACK_35_3);
   - Id: 1100000
   - Id: 1100000
     AegisName: IDTest_heal
     AegisName: IDTest_heal
     Name: IDTest heal
     Name: IDTest heal

+ 20 - 0
db/re/item_enchant.yml

@@ -32187,6 +32187,20 @@ Body:
       Grimoire_Furious: true
       Grimoire_Furious: true
       Soul_Furious: true
       Soul_Furious: true
       SpiritStick_Furious: true
       SpiritStick_Furious: true
+      Lapier_Furious: true
+      SharpSword_Furious: true
+      WhiteSword_Furious: true
+      Stick_Furious: true
+      MetalVilolin_Furious: true
+      Harp_Furious: true
+      MetalWhip_Furious: true
+      Whip_Furious: true
+      Flame_Staff_Furious: true
+      Rifle_Furious: true
+      Gatling_Furious: true
+      Specter_Furious: true
+      GaleClaw_Furious: true
+      Exterminate_Furious: true
     Reset:
     Reset:
       Chance: 80000
       Chance: 80000
       Price: 500000
       Price: 500000
@@ -32357,6 +32371,12 @@ Body:
       FuriousCirclet_MT: true
       FuriousCirclet_MT: true
       FuriousCirclet_EM: true
       FuriousCirclet_EM: true
       FuriousCirclet_SOA: true
       FuriousCirclet_SOA: true
+      FuriousCirclet_TR: true
+      FuriousCirclet_BO: true
+      FuriousCirclet_HN: true
+      FuriousCirclet_AG: true
+      FuriousCirclet_IQ: true
+      FuriousCirclet_NW: true
     Reset:
     Reset:
       Chance: 80000
       Chance: 80000
       Price: 500000
       Price: 500000

+ 262 - 0
db/re/item_group_db.yml

@@ -113177,3 +113177,265 @@ Body:
           - Index: 65
           - Index: 65
             Item: Critical_Stone_Bottom
             Item: Critical_Stone_Bottom
             Rate: 400
             Rate: 400
+  - Group: STOVE_CHANNELING_BOX_1
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Battle_Manual100
+            Amount: 5
+          - Index: 1
+            Item: E_Token_Of_Siegfried
+            Amount: 5
+          - Index: 2
+            Item: Comp_Kafra_Card
+            Amount: 10
+          - Index: 3
+            Item: World_Tour_Ticket
+            Amount: 10
+  - Group: STOVE_CHANNELING_BOX_2
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Boarding_Halter_Box30_Z
+          - Index: 1
+            Item: Comp_Almighty
+            Amount: 10
+          - Index: 2
+            Item: E_Wing_Of_Fly_3Day_Box
+            Amount: 3
+          - Index: 3
+            Item: Buff_Scroll_Box
+            Amount: 3
+  - Group: STOVE_CHANNELING_BOX_3
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: E_Life_Potion_Pack
+            Amount: 2
+          - Index: 1
+            Item: Comp_Small_Mana_Potion
+            Amount: 20
+          - Index: 2
+            Item: E_Infinity_Drink
+            Amount: 10
+          - Index: 3
+            Item: Comp_Power_Booster
+            Amount: 10
+  - Group: STOVE_CHANNELING_BOX_4
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: All_In_One_buff_B
+            Amount: 10
+          - Index: 1
+            Item: All_In_One_Healing_B
+            Amount: 10
+          - Index: 2
+            Item: Cachua_Coupon
+            Amount: 10
+          - Index: 3
+            Item: Evt_Cos_Coin
+            Amount: 10
+  - Group: LI_NYANGVINE_BOX1_35
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 100
+          - Index: 1
+            Item: Enchant_Stone_Box35
+            Amount: 2
+          - Index: 2
+            Item: Comp_Bubble_Gum
+            Amount: 3
+  - Group: LI_NYANGVINE_BOX2_35
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 200
+          - Index: 1
+            Item: Battle_Manual100
+            Amount: 5
+          - Index: 2
+            Item: Enchant_Stone_Box35
+            Amount: 2
+  - Group: LI_NYANGVINE_BOX3_35
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 400
+          - Index: 1
+            Item: Comp_Bubble_Gum
+            Amount: 10
+          - Index: 2
+            Item: Battle_Manual100
+            Amount: 5
+          - Index: 3
+            Item: Enchant_Stone_Box35
+            Amount: 5
+  - Group: A_SPEED_BOOSTER_BOX
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Speed_Booster
+            Amount: 10
+          - Index: 1
+            Item: K_Secret_Key
+  - Group: A_SPEED_BOOSTER_10_BOX
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Speed_Booster
+            Amount: 100
+          - Index: 1
+            Item: K_Secret_Key
+            Amount: 11
+  - Group: L_INFINITY_POWER_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Limit_Power_Booster
+            Amount: 100
+          - Index: 1
+            Item: Infinity_Drink
+            Amount: 100
+          - Index: 2
+            Item: K_Secret_Key
+            Amount: 25
+          - Index: 3
+            Item: Cachua_Coupon
+            Amount: 5
+  - Group: L_ALL_RED_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Almighty
+            Amount: 100
+          - Index: 1
+            Item: Red_Booster
+            Amount: 125
+          - Index: 2
+            Item: K_Secret_Key
+            Amount: 25
+          - Index: 3
+            Item: Cachua_Coupon
+            Amount: 5
+  - Group: L_DEFENSE_POTION_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Small_Life_Potion
+            Amount: 200
+          - Index: 1
+            Item: Med_Life_Potion
+            Amount: 200
+          - Index: 2
+            Item: Mysterious_Water
+            Amount: 200
+          - Index: 3
+            Item: Small_Mana_Potion
+            Amount: 50
+          - Index: 4
+            Item: M_DEFScroll
+            Amount: 300
+          - Index: 5
+            Item: K_Secret_Key
+            Amount: 25
+          - Index: 6
+            Item: Cachua_Coupon
+            Amount: 5
+  - Group: L_SPEED_FORCE_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Force_Booster
+            Amount: 100
+          - Index: 1
+            Item: Speed_Booster
+            Amount: 100
+          - Index: 2
+            Item: K_Secret_Key
+            Amount: 25
+          - Index: 3
+            Item: Cachua_Coupon
+            Amount: 5
+  - Group: L_SPECIAL_SPEED_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Speed_Booster
+            Amount: 200
+          - Index: 1
+            Item: K_Secret_Key
+            Amount: 30
+          - Index: 2
+            Item: Cachua_Coupon
+            Amount: 10
+  - Group: L_SPECIAL_FORCE_PACK
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Force_Booster
+            Amount: 200
+          - Index: 1
+            Item: K_Secret_Key
+            Amount: 30
+          - Index: 2
+            Item: Cachua_Coupon
+            Amount: 10
+  - Group: COSTUMEMILEPACK_35_1
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 100
+          - Index: 1
+            Item: Evt_Cos_Coin
+            Amount: 12
+          - Index: 2
+            Item: Enchant_Stone_Box35
+            Amount: 3
+  - Group: COSTUMEMILEPACK_35_2
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 200
+          - Index: 1
+            Item: Evt_Cos_Coin
+            Amount: 25
+          - Index: 2
+            Item: Enchant_Stone_Box35
+            Amount: 5
+  - Group: COSTUMEMILEPACK_35_3
+    SubGroups:
+      - SubGroup: 0
+        List:
+          - Index: 0
+            Item: Nyangvine_Fruit
+            Amount: 400
+          - Index: 1
+            Item: Evt_Cos_Coin
+            Amount: 50
+          - Index: 2
+            Item: Enchant_Stone_Box35
+            Amount: 10

+ 524 - 0
db/re/item_reform.yml

@@ -9837,6 +9837,330 @@ Body:
         RandomOptionGroup: Group_0
         RandomOptionGroup: Group_0
         ClearSlots: true
         ClearSlots: true
         RemoveEnchantgrade: true
         RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Armor
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Armor
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Manteau
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Manteau
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Boots
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Boots
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Pendant
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Pendant
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Necklace
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Necklace
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Robe
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Robe
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Muffler
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Muffler
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Shoes
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Shoes
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Ring
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Ring
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Snowflower_Earring
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Snowflower_Earring
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_T_Sword
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_T_Sword
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Lance
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Lance
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Sword
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Sword
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_B_Sword
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_B_Sword
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Spear
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Spear
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_T_Axe
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_T_Axe
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Axe
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Axe
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Mace
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Mace
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_M_Mace
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_M_Mace
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_R_Knife
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_R_Knife
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_B_Knife
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_B_Knife
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Knuckle
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Knuckle
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Katar
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Katar
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Bow
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Bow
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Violin
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Violin
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Whip
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Whip
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Humma
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Humma
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Book
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Book
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Wand
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Wand
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Staff
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Staff
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Foxtail
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Foxtail
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Revolver
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Revolver
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Rifle
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Rifle
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Shotgun
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Shotgun
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Gatling
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Gatling
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
+      - BaseItem: Glacier_Launcher
+        Materials:
+          - Material: Imperfect_Rune
+            Amount: 10
+        ResultItem: R_Glacier_Launcher
+        ChangeRefine: -20
+        RandomOptionGroup: Group_0
+        ClearSlots: true
+        RemoveEnchantgrade: true
   - Item: Season_H_Upgrade
   - Item: Season_H_Upgrade
     BaseItems:
     BaseItems:
       - BaseItem: Season_Hood_Spring
       - BaseItem: Season_Hood_Spring
@@ -10901,6 +11225,206 @@ Body:
             Amount: 20
             Amount: 20
         ResultItem: FuriousCirclet_SOA
         ResultItem: FuriousCirclet_SOA
         ChangeRefine: 1
         ChangeRefine: 1
+      - BaseItem: FuriousCirclet_TR
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_TR
+        ChangeRefine: 1
+      - BaseItem: FuriousCirclet_BO
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_BO
+        ChangeRefine: 1
+      - BaseItem: FuriousCirclet_HN
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_HN
+        ChangeRefine: 1
+      - BaseItem: Lapier_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Lapier_Furious
+        ChangeRefine: 1
+      - BaseItem: SharpSword_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: SharpSword_Furious
+        ChangeRefine: 1
+      - BaseItem: WhiteSword_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: WhiteSword_Furious
+        ChangeRefine: 1
+      - BaseItem: Stick_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Stick_Furious
+        ChangeRefine: 1
+      - BaseItem: MetalVilolin_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: MetalVilolin_Furious
+        ChangeRefine: 1
+      - BaseItem: Harp_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Harp_Furious
+        ChangeRefine: 1
+      - BaseItem: MetalWhip_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: MetalWhip_Furious
+        ChangeRefine: 1
+      - BaseItem: Whip_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Whip_Furious
+        ChangeRefine: 1
+      - BaseItem: Flame_Staff_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Flame_Staff_Furious
+        ChangeRefine: 1
+      - BaseItem: Rifle_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Rifle_Furious
+        ChangeRefine: 1
+      - BaseItem: Gatling_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Gatling_Furious
+        ChangeRefine: 1
+      - BaseItem: Specter_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Specter_Furious
+        ChangeRefine: 1
+      - BaseItem: GaleClaw_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: GaleClaw_Furious
+        ChangeRefine: 1
+      - BaseItem: Exterminate_Furious
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Etherdeocon
+            Amount: 10
+          - Material: Enriched_Etherdeocon
+            Amount: 20
+        ResultItem: Exterminate_Furious
+        ChangeRefine: 1
+      - BaseItem: FuriousCirclet_AG
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_AG
+        ChangeRefine: 1
+      - BaseItem: FuriousCirclet_IQ
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_IQ
+        ChangeRefine: 1
+      - BaseItem: FuriousCirclet_NW
+        MinimumRefine: 9
+        MaximumRefine: 11
+        Materials:
+          - Material: HD_Ethernium
+            Amount: 10
+          - Material: Enriched_Ethernium
+            Amount: 20
+        ResultItem: FuriousCirclet_NW
+        ChangeRefine: 1
   - Item: Gaebolg_A_Hammer_1
   - Item: Gaebolg_A_Hammer_1
     BaseItems:
     BaseItems:
       - BaseItem: Gaebolg_Armor
       - BaseItem: Gaebolg_Armor

+ 517 - 28
db/re/mob_db.yml

@@ -96171,34 +96171,519 @@ Body:
 #    AegisName: VH_ENTWEIHEN_S
 #    AegisName: VH_ENTWEIHEN_S
 #  - Id: 20254
 #  - Id: 20254
 #    AegisName: VH_MIMIC
 #    AegisName: VH_MIMIC
-#  - Id: 20255
-#    AegisName: ILL_TEDDY_BEAR_R
-#  - Id: 20256
-#    AegisName: ILL_TEDDY_BEAR_Y
-#  - Id: 20257
-#    AegisName: ILL_TEDDY_BEAR_G
-#  - Id: 20258
-#    AegisName: ILL_TEDDY_BEAR_W
-#  - Id: 20259
-#    AegisName: ILL_TEDDY_BEAR_B
-#  - Id: 20260
-#    AegisName: ILL_TEDDY_BEAR_S
-#  - Id: 20261
-#    AegisName: ILL_PITMAN
-#  - Id: 20262
-#    AegisName: ILL_MINERAL
-#  - Id: 20263
-#    AegisName: ILL_OBSIDIAN
-#  - Id: 20264
-#    AegisName: G_ILL_TEDDY_BEAR_R
-#  - Id: 20265
-#    AegisName: G_ILL_TEDDY_BEAR_Y
-#  - Id: 20266
-#    AegisName: G_ILL_TEDDY_BEAR_G
-#  - Id: 20267
-#    AegisName: G_ILL_TEDDY_BEAR_W
-#  - Id: 20268
-#    AegisName: G_ILL_TEDDY_BEAR_B
+  - Id: 20255
+    AegisName: ILL_TEDDY_BEAR_R
+    Name: Red Teddy Bear
+    Level: 155
+    Hp: 328072
+    BaseExp: 19972
+    JobExp: 22503
+    Attack: 2022
+    Attack2: 225
+    Defense: 212
+    MagicDefense: 88
+    Str: 132
+    Agi: 100
+    Vit: 155
+    Int: 132
+    Dex: 133
+    Luk: 132
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Fire
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: NasariansSoulstone
+        Rate: 1000
+      - Item: Iron_Ore
+        Rate: 2000
+      - Item: Oridecon
+        Rate: 500
+      - Item: Bearopy
+        Rate: 1500
+      - Item: Boots_
+        Rate: 50
+      - Item: Colorful_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20256
+    AegisName: ILL_TEDDY_BEAR_Y
+    Name: Yellow Teddy Bear
+    Level: 155
+    Hp: 294044
+    BaseExp: 19384
+    JobExp: 23165
+    Attack: 1819
+    Attack2: 202
+    Defense: 200
+    MagicDefense: 112
+    Str: 102
+    Agi: 132
+    Vit: 102
+    Int: 182
+    Dex: 155
+    Luk: 102
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Wind
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: Bearopy
+        Rate: 1500
+      - Item: NasariansSoulstone
+        Rate: 1000
+      - Item: Elunium
+        Rate: 500
+      - Item: Screw
+        Rate: 2500
+      - Item: Survival_Rod_
+        Rate: 50
+      - Item: Colorful_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20257
+    AegisName: ILL_TEDDY_BEAR_G
+    Name: Green Teddy Bear
+    Level: 157
+    Hp: 331960
+    BaseExp: 21646
+    JobExp: 25117
+    Attack: 2113
+    Attack2: 235
+    Defense: 227
+    MagicDefense: 110
+    Str: 129
+    Agi: 128
+    Vit: 141
+    Int: 173
+    Dex: 158
+    Luk: 129
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Poison
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 708
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: Bearopy
+        Rate: 1500
+      - Item: NasariansSoulstone
+        Rate: 1000
+      - Item: Green_Bearopy
+        Rate: 500
+      - Item: Green_Herb
+        Rate: 2500
+      - Item: Colorful_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20258
+    AegisName: ILL_TEDDY_BEAR_W
+    Name: White Teddy Bear
+    Level: 155
+    Hp: 311841
+    BaseExp: 20334
+    JobExp: 23595
+    Attack: 1985
+    Attack2: 221
+    Defense: 213
+    MagicDefense: 103
+    Str: 121
+    Agi: 120
+    Vit: 133
+    Int: 162
+    Dex: 149
+    Luk: 121
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: Bearopy
+        Rate: 2500
+      - Item: NasariansSoulstone
+        Rate: 1500
+      - Item: Oridecon_Hammer
+        Rate: 500
+      - Item: Steel
+        Rate: 250
+      - Item: Survival_Rod2_
+        Rate: 50
+      - Item: Colorful_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20259
+    AegisName: ILL_TEDDY_BEAR_B
+    Name: Blue Teddy Bear
+    Level: 152
+    Hp: 280657
+    BaseExp: 18300
+    JobExp: 21235
+    Attack: 1786
+    Attack2: 198
+    Defense: 192
+    MagicDefense: 93
+    Str: 109
+    Agi: 108
+    Vit: 120
+    Int: 146
+    Dex: 134
+    Luk: 109
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Water
+    ElementLevel: 1
+    WalkSpeed: 300
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: Bearopy
+        Rate: 1500
+      - Item: Screw
+        Rate: 2500
+      - Item: Iron
+        Rate: 1000
+      - Item: Blue_Herb
+        Rate: 500
+      - Item: Chonchon_Doll_HQ
+        Rate: 1000
+      - Item: Colorful_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20260
+    AegisName: ILL_TEDDY_BEAR_S
+    Name: Shining Teddy Bear
+    Level: 160
+    Hp: 10724874
+    BaseExp: 1793444
+    JobExp: 1618614
+    Attack: 4168
+    Attack2: 2895
+    Defense: 313
+    MagicDefense: 152
+    Str: 178
+    Agi: 176
+    Vit: 195
+    Int: 238
+    Dex: 219
+    Luk: 178
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Formless
+    Element: Holy
+    ElementLevel: 4
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 21
+    Drops:
+      - Item: Elunium
+        Rate: 2000
+      - Item: Oridecon
+        Rate: 2000
+      - Item: Clay_Doll
+        Rate: 1500
+      - Item: Counter_Dagger
+        Rate: 300
+      - Item: Screw
+        Rate: 4000
+      - Item: Shining_T_Bear_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20261
+    AegisName: ILL_PITMAN
+    Name: Hardworking Pitman
+    Level: 154
+    Hp: 305605
+    Attack: 1945
+    Attack2: 216
+    Defense: 209
+    MagicDefense: 101
+    Str: 118
+    Agi: 117
+    Vit: 130
+    Int: 159
+    Dex: 146
+    Luk: 118
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demon
+    Element: Earth
+    ElementLevel: 2
+    WalkSpeed: 180
+    AttackDelay: 960
+    AttackMotion: 336
+    DamageMotion: 300
+    Ai: 04
+    Drops:
+      - Item: Old_Pick
+        Rate: 1500
+      - Item: Old_Steel_Plate
+        Rate: 250
+      - Item: Lantern
+        Rate: 2500
+      - Item: Gun_Powder
+        Rate: 1000
+      - Item: Gate_KeeperDD
+        Rate: 50
+      - Item: Pitman_Worker_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20262
+    AegisName: ILL_MINERAL
+    Name: Soul Fragment
+    Level: 153
+    Hp: 290324
+    BaseExp: 18931
+    JobExp: 21967
+    Attack: 1847
+    Attack2: 205
+    Defense: 198
+    MagicDefense: 96
+    Str: 113
+    Agi: 112
+    Vit: 124
+    Int: 151
+    Dex: 139
+    Luk: 113
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 2
+    WalkSpeed: 250
+    AttackDelay: 648
+    AttackMotion: 480
+    DamageMotion: 360
+    Ai: 04
+    Drops:
+      - Item: Fragment_Of_Crystal
+        Rate: 2500
+      - Item: Golden_Jewel
+        Rate: 250
+      - Item: Gothic_China_Doll
+        Rate: 1000
+      - Item: Yellow_Gemstone
+        Rate: 300
+      - Item: Fragment_Of_Soul_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20263
+    AegisName: ILL_OBSIDIAN
+    # Name: Sinister Dwelling Obsidian
+    Name: Sinister Obsidian
+    Level: 156
+    Hp: 318593
+    Attack: 2027
+    Attack2: 225
+    Defense: 217
+    MagicDefense: 106
+    Str: 124
+    Agi: 122
+    Vit: 136
+    Int: 166
+    Dex: 152
+    Luk: 124
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Earth
+    ElementLevel: 2
+    WalkSpeed: 350
+    AttackDelay: 720
+    AttackMotion: 864
+    DamageMotion: 504
+    Ai: 04
+    Drops:
+      - Item: Dark_Crystal_Fragment
+        Rate: 1500
+      - Item: Crystal_Jewel
+        Rate: 250
+      - Item: Coal
+        Rate: 250
+      - Item: Elunium
+        Rate: 40
+      - Item: Sinister_Obsidian_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 20264
+    AegisName: G_ILL_TEDDY_BEAR_R
+    Name: Red Teddy Bear
+    Level: 155
+    Hp: 309520
+    Attack: 2022
+    Attack2: 225
+    Defense: 212
+    MagicDefense: 88
+    Str: 132
+    Agi: 100
+    Vit: 155
+    Int: 132
+    Dex: 133
+    Luk: 132
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Fire
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 24
+  - Id: 20265
+    AegisName: G_ILL_TEDDY_BEAR_Y
+    Name: Yellow Teddy Bear
+    Level: 155
+    Hp: 294044
+    Attack: 1819
+    Attack2: 202
+    Defense: 200
+    MagicDefense: 112
+    Str: 102
+    Agi: 132
+    Vit: 102
+    Int: 182
+    Dex: 155
+    Luk: 102
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Wind
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 24
+  - Id: 20266
+    AegisName: G_ILL_TEDDY_BEAR_G
+    Name: Green Teddy Bear
+    Level: 157
+    Hp: 331960
+    Attack: 2113
+    Attack2: 235
+    Defense: 227
+    MagicDefense: 110
+    Str: 129
+    Agi: 128
+    Vit: 141
+    Int: 173
+    Dex: 158
+    Luk: 129
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Poison
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 24
+  - Id: 20267
+    AegisName: G_ILL_TEDDY_BEAR_W
+    Name: White Teddy Bear
+    Level: 155
+    Hp: 311841
+    Attack: 1985
+    Attack2: 221
+    Defense: 213
+    MagicDefense: 103
+    Str: 121
+    Agi: 120
+    Vit: 133
+    Int: 162
+    Dex: 149
+    Luk: 121
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 1
+    WalkSpeed: 150
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 24
+  - Id: 20268
+    AegisName: G_ILL_TEDDY_BEAR_B
+    Name: Blue Teddy Bear
+    Level: 152
+    Hp: 280657
+    Attack: 1786
+    Attack2: 198
+    Defense: 192
+    MagicDefense: 93
+    Str: 109
+    Agi: 108
+    Vit: 120
+    Int: 146
+    Dex: 134
+    Luk: 109
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Formless
+    Element: Water
+    ElementLevel: 1
+    WalkSpeed: 300
+    AttackDelay: 512
+    AttackMotion: 780
+    DamageMotion: 504
+    Ai: 24
   - Id: 20269
   - Id: 20269
     AegisName: GUILD_SKILL_FLAG
     AegisName: GUILD_SKILL_FLAG
     Name: Guild Skill Flag
     Name: Guild Skill Flag
@@ -110625,6 +111110,10 @@ Body:
 #    AegisName: EP21_MD_BOX1
 #    AegisName: EP21_MD_BOX1
 #  - Id: 22378
 #  - Id: 22378
 #    AegisName: MD_Airboat_Boss5
 #    AegisName: MD_Airboat_Boss5
+#  - Id: 22379
+#    AegisName: EV_NPC_VACATION_POPE
+#  - Id: 22380
+#    AegisName: E_WATER_M_RING
 #  - Id: 23000
 #  - Id: 23000
 #    AegisName: DARK_ILLUSION2
 #    AegisName: DARK_ILLUSION2
 #  - Id: 23001
 #  - Id: 23001

+ 104 - 2
db/re/mob_skill_db.txt

@@ -13105,6 +13105,108 @@
 20280,G_ILL_WOOTAN_FIGHTER@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6,
 20280,G_ILL_WOOTAN_FIGHTER@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6,
 20280,G_ILL_WOOTAN_FIGHTER@NPC_FIREATTACK,attack,186,4,1000,0,5000,yes,target,always,0,,,,,,,
 20280,G_ILL_WOOTAN_FIGHTER@NPC_FIREATTACK,attack,186,4,1000,0,5000,yes,target,always,0,,,,,,,
 
 
+// Illusion of Teddy Bear
+20255,ILL_TEDDY_BEAR_R@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20255,ILL_TEDDY_BEAR_R@NPC_CURSEATTACK,chase,181,3,1000,500,5000,no,target,always,0,,,,,,2,
+20255,ILL_TEDDY_BEAR_R@NPC_CRITICALSLASH,attack,170,1,1500,500,5000,no,target,always,0,,,,,,6,
+20255,ILL_TEDDY_BEAR_R@NPC_FIREATTACK,attack,186,2,1000,0,5000,yes,target,always,0,,,,,,37,
+20255,ILL_TEDDY_BEAR_R@BS_HAMMERFALL,attack,110,5,500,1500,5000,no,target,always,0,,,,,,8,
+20256,ILL_TEDDY_BEAR_Y@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20256,ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,chase,20,2,1500,1000,5000,no,target,always,0,,,,,,,
+20256,ILL_TEDDY_BEAR_Y@NPC_CURSEATTACK,chase,181,5,1000,500,5000,no,target,always,0,,,,,,2,
+20256,ILL_TEDDY_BEAR_Y@WZ_VERMILION,attack,85,3,500,1500,10000,no,target,always,0,,,,,,6,
+20256,ILL_TEDDY_BEAR_Y@WZ_STORMGUST,attack,89,3,1000,1500,10000,no,target,always,0,,,,,,37,
+20256,ILL_TEDDY_BEAR_Y@HW_GANBANTEIN,attack,483,1,1000,0,5000,no,target,skillused,18,,,,,,8,
+20256,ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,attack,20,3,500,1500,10000,no,target,always,0,,,,,,,
+20257,ILL_TEDDY_BEAR_G@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20257,ILL_TEDDY_BEAR_G@NPC_BLOODDRAIN,chase,199,1,1500,0,5000,yes,target,always,0,,,,,,,
+20257,ILL_TEDDY_BEAR_G@NPC_CLOUD_KILL,attack,739,3,500,1500,20000,no,target,always,0,,,,,,6,
+20258,ILL_TEDDY_BEAR_W@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
+20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
+20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,attack,729,5,1500,500,5000,no,self,always,0,,,,,,2,
+20258,ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,friendhpltmaxrate,99,,,,,,,
+20258,ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,myhpltmaxrate,99,,,,,,3,
+20258,ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
+20258,ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,myhpltmaxrate,30,,,,,,5,
+20258,ILL_TEDDY_BEAR_W@NPC_ALLHEAL,attack,687,1,10000,5000,30000,no,self,myhpltmaxrate,10,,,,,,6,
+20258,ILL_TEDDY_BEAR_W@CR_HOLYCROSS,attack,253,5,500,0,5000,yes,target,always,0,,,,,,32,
+20259,ILL_TEDDY_BEAR_B@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20259,ILL_TEDDY_BEAR_B@MG_COLDBOLT,chase,14,2,1500,1000,5000,no,target,always,0,,,,,,23,
+20259,ILL_TEDDY_BEAR_B@NPC_STORMGUST2,attack,723,1,500,1500,10000,no,target,always,0,,,,,,20,
+20259,ILL_TEDDY_BEAR_B@NPC_WATERATTACK,attack,184,2,1500,0,5000,yes,target,always,0,,,,,,6,
+20259,ILL_TEDDY_BEAR_B@MG_COLDBOLT,attack,14,3,500,1500,10000,no,target,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_AGIUP,attack,350,1,5000,0,20000,yes,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_BLEEDING2,attack,764,5,2000,500,10000,no,target,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_CRITICALWOUND,attack,673,3,1000,500,20000,no,target,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_WIDESIGHT,attack,669,1,10000,0,30000,yes,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_WEAPONBRAKER,attack,343,1,10000,0,40000,yes,target,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_DARKBREATH,attack,202,5,2000,3000,10000,no,target,myhpltmaxrate,60,,,,,,0,
+20260,ILL_TEDDY_BEAR_S@CR_HOLYCROSS,attack,253,10,500,0,5000,yes,target,always,0,,,,,,32,
+20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,idle,352,1,10000,0,10000,yes,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,chase,352,1,10000,0,5000,yes,self,always,0,,,,,,,
+// 20260,ILL_TEDDY_BEAR_S@NPC_EARTHQUAKE_K,attack,750,5,1500,2000,20000,no,target,myhpltmaxrate,30,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_EARTHQUAKE,attack,653,5,1500,2000,20000,no,target,myhpltmaxrate,30,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_PULSESTRIKE,attack,661,5,3000,3000,20000,no,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@NPC_SUMMONSLAVE,idle,196,1,10000,1000,30000,no,self,slavele,1,20255,20256,20257,20259,,,
+20260,ILL_TEDDY_BEAR_S@NPC_SUMMONSLAVE,attack,196,1,5000,1000,30000,no,self,slavele,1,20255,20256,20257,20259,,,
+20260,ILL_TEDDY_BEAR_S@NPC_POWERUP,attack,349,5,10000,0,60000,yes,self,myhpltmaxrate,20,,,,,,6,
+20260,ILL_TEDDY_BEAR_S@NPC_GRANDDARKNESS,attack,339,10,3000,1000,5000,no,self,always,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,walk,26,1,5000,0,10000,yes,self,rudeattacked,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20260,ILL_TEDDY_BEAR_S@SA_LANDPROTECTOR,attack,288,2,3000,1000,10000,no,target,groundattacked,0,,,,,,6,
+20260,ILL_TEDDY_BEAR_S@AL_PNEUMA,attack,25,1,3000,0,5000,yes,target,longrangeattacked,0,,,,,,18,
+20261,ILL_PITMAN@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20261,ILL_PITMAN@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,mobnearbygt,4,,,,,,,
+20261,ILL_PITMAN@NPC_SILENCEATTACK,chase,178,3,500,0,5000,no,target,always,0,,,,,,6,
+20261,ILL_PITMAN@NPC_COMBOATTACK,attack,171,3,500,700,5000,no,target,always,0,,,,,,,
+20261,ILL_PITMAN@TF_SPRINKLESAND,attack,149,1,500,0,5000,no,target,always,0,,,,,,6,
+20261,ILL_PITMAN@SM_MAGNUM,attack,7,3,1000,0,20000,yes,self,always,0,,,,,,32,
+20261,ILL_PITMAN@NPC_GUIDEDATTACK,attack,172,3,2000,0,15000,yes,target,always,0,,,,,,37,
+20262,ILL_MINERAL@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
+20262,ILL_MINERAL@AS_GRIMTOOTH,idle,137,3,5000,0,500,yes,target,mystatuson,0,,,,,,,
+20262,ILL_MINERAL@AL_HEAL,idle,28,9,5000,0,1500,yes,friend,mystatuson,0,,,,,,18,
+20262,ILL_MINERAL@TF_HIDING,chase,51,1,2000,0,10000,yes,self,always,0,,,,,,19,
+20262,ILL_MINERAL@TF_HIDING,chase,51,1,10000,0,10000,yes,self,myhpltmaxrate,30,,,,,,19,
+20262,ILL_MINERAL@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,mobnearbygt,4,,,,,,,
+20262,ILL_MINERAL@NPC_COMBOATTACK,attack,171,3,500,700,5000,no,target,always,0,,,,,,,
+20262,ILL_MINERAL@TF_SPRINKLESAND,attack,149,1,500,0,5000,no,target,always,0,,,,,,6,
+20262,ILL_MINERAL@NPC_GUIDEDATTACK,attack,172,3,2000,0,15000,yes,target,always,0,,,,,,37,
+20262,ILL_MINERAL@NPC_RANDOMATTACK,attack,183,2,1500,500,5000,yes,target,always,0,,,,,,,
+20263,ILL_OBSIDIAN@TF_HIDING,idle,51,1,500,500,5000,yes,self,always,0,,,,,,19,
+20263,ILL_OBSIDIAN@AS_GRIMTOOTH,idle,137,3,5000,0,500,yes,target,mystatuson,0,,,,,,,
+20263,ILL_OBSIDIAN@WZ_EARTHSPIKE,chase,90,3,1500,500,5000,no,target,always,0,,,,,,,
+20263,ILL_OBSIDIAN@CR_SHIELDCHARGE,attack,250,3,1000,1000,5000,no,target,always,0,,,,,,,
+20263,ILL_OBSIDIAN@NPC_GROUNDATTACK,attack,185,2,500,500,5000,yes,target,always,0,,,,,,,
+20263,ILL_OBSIDIAN@TF_HIDING,attack,51,1,500,500,50000,yes,self,always,0,,,,,,19,
+20264,G_ILL_TEDDY_BEAR_R@NPC_CURSEATTACK,chase,181,3,1000,500,5000,no,target,always,0,,,,,,2,
+20264,G_ILL_TEDDY_BEAR_R@NPC_CRITICALSLASH,attack,170,1,1500,500,5000,no,target,always,0,,,,,,6,
+20264,G_ILL_TEDDY_BEAR_R@NPC_FIREATTACK,attack,186,5,1000,0,5000,yes,target,always,0,,,,,,37,
+20264,G_ILL_TEDDY_BEAR_R@BS_HAMMERFALL,attack,110,5,500,1500,5000,no,target,always,0,,,,,,8,
+20265,G_ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,chase,20,2,1500,1000,5000,no,target,always,0,,,,,,,
+20265,G_ILL_TEDDY_BEAR_Y@NPC_CURSEATTACK,chase,181,5,1000,500,5000,no,target,always,0,,,,,,2,
+20265,G_ILL_TEDDY_BEAR_Y@WZ_VERMILION,attack,85,3,500,1500,10000,no,target,always,0,,,,,,6,
+20265,G_ILL_TEDDY_BEAR_Y@WZ_STORMGUST,attack,89,3,1000,1500,10000,no,target,always,0,,,,,,37,
+20265,G_ILL_TEDDY_BEAR_Y@HW_GANBANTEIN,attack,483,1,1000,0,5000,no,target,skillused,18,,,,,,8,
+20265,G_ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,attack,20,3,500,1500,10000,no,target,always,0,,,,,,,
+20266,G_ILL_TEDDY_BEAR_G@NPC_BLOODDRAIN,chase,199,1,1500,0,5000,yes,target,always,0,,,,,,,
+20266,G_ILL_TEDDY_BEAR_G@NPC_CLOUD_KILL,attack,739,3,500,1500,20000,no,target,always,0,,,,,,6,
+20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
+20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
+20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,attack,729,5,1500,500,5000,no,self,always,0,,,,,,2,
+20267,G_ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,friendhpltmaxrate,99,,,,,,,
+20267,G_ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,myhpltmaxrate,99,,,,,,3,
+20267,G_ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
+20267,G_ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,myhpltmaxrate,30,,,,,,5,
+20267,G_ILL_TEDDY_BEAR_W@NPC_ALLHEAL,attack,687,1,10000,5000,30000,no,self,myhpltmaxrate,10,,,,,,6,
+20267,G_ILL_TEDDY_BEAR_W@CR_HOLYCROSS,attack,253,5,500,0,5000,yes,target,always,0,,,,,,32,
+20268,G_ILL_TEDDY_BEAR_B@MG_COLDBOLT,chase,14,2,1500,1000,5000,no,target,always,0,,,,,,23,
+20268,G_ILL_TEDDY_BEAR_B@NPC_STORMGUST2,attack,723,1,500,1500,10000,no,target,always,0,,,,,,20,
+20268,G_ILL_TEDDY_BEAR_B@NPC_WATERATTACK,attack,184,2,1500,0,5000,yes,target,always,0,,,,,,6,
+20268,G_ILL_TEDDY_BEAR_B@MG_COLDBOLT,attack,14,3,500,1500,10000,no,target,always,0,,,,,,,
+
 // Episode 17.1 - Illusion (custom) #!todo
 // Episode 17.1 - Illusion (custom) #!todo
 20340,EL-A17T@NPC_AGIUP,chase,350,5,2000,0,60000,no,self,always,0,,,,,,6,
 20340,EL-A17T@NPC_AGIUP,chase,350,5,2000,0,60000,no,self,always,0,,,,,,6,
 20340,EL-A17T@NPC_POWERUP,attack,349,5,2000,0,60000,no,self,always,0,,,,,,6,
 20340,EL-A17T@NPC_POWERUP,attack,349,5,2000,0,60000,no,self,always,0,,,,,,6,
@@ -14673,7 +14775,7 @@
 21360,EP18_MD_SCHULANG_L@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
-// 21360,EP18_MD_SCHULANG_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
+21360,EP18_MD_SCHULANG_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
 21360,EP18_MD_SCHULANG_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
 21360,EP18_MD_SCHULANG_L@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
@@ -14698,6 +14800,6 @@
 21361,EP18_MD_DEMI_FREYJA_L@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
-// 21361,EP18_MD_DEMI_FREYJA_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
+21361,EP18_MD_DEMI_FREYJA_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,
 21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,

File diff suppressed because it is too large
+ 250 - 250
db/re/pet_db.yml


+ 78 - 18
db/re/quest_db.yml

@@ -1404,21 +1404,21 @@ Body:
     TimeLimit: 4h
     TimeLimit: 4h
   - Id: 3455
   - Id: 3455
     Title: Illusion Investigation Team - Machoko
     Title: Illusion Investigation Team - Machoko
-  # - Id: 3456
-    # Title: Illusion of Teddy Bear 100 Kills
-    # Targets:
-      # - Id: 1
-        # Count: 100
-        # Location: ein_d02_i
-        # MapMobTargets:
-          # ILL_TEDDY_BEAR_B: true
-          # ILL_MINERAL: true
-          # ILL_PITMAN: true
-          # ILL_TEDDY_BEAR_R: true
-          # ILL_TEDDY_BEAR_Y: true
-          # ILL_TEDDY_BEAR_W: true
-          # ILL_OBSIDIAN: true
-          # ILL_TEDDY_BEAR_G: true
+  - Id: 3456
+    Title: Illusion of Teddy Bear 100 Kills
+    Targets:
+      - Id: 1
+        Count: 100
+        Location: ein_d02_i
+        MapMobTargets:
+          ILL_TEDDY_BEAR_B: true
+          ILL_MINERAL: true
+          ILL_PITMAN: true
+          ILL_TEDDY_BEAR_R: true
+          ILL_TEDDY_BEAR_Y: true
+          ILL_TEDDY_BEAR_W: true
+          ILL_OBSIDIAN: true
+          ILL_TEDDY_BEAR_G: true
   - Id: 3457
   - Id: 3457
     Title: Illusion of Teddy Bear 100 Kills - Standby
     Title: Illusion of Teddy Bear 100 Kills - Standby
     TimeLimit: 4h
     TimeLimit: 4h
@@ -8038,14 +8038,74 @@ Body:
   - Id: 11555
   - Id: 11555
     Title: In search of the taste of hometown - Waiting
     Title: In search of the taste of hometown - Waiting
     TimeLimit: 4h
     TimeLimit: 4h
+  - Id: 11556
+    Title: Missing Steven
+  - Id: 11557
+    Title: Missing Steven
+  - Id: 11558
+    Title: Missing Steven
+  - Id: 11559
+    Title: Missing Steven
+  - Id: 11560
+    Title: Missing Steven
+  - Id: 11561
+    Title: Missing Steven
+  - Id: 11562
+    Title: Missing Steven
+  - Id: 11563
+    Title: Nasarian Conspiracy
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_R
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_Y
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_G
+        Count: 10
+  - Id: 11564
+    Title: Nasarian Conspiracy
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_B
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_W
+        Count: 10
+  - Id: 11565
+    Title: RUN!
+    Targets:
+      - Mob: ILL_PITMAN
+        Count: 10
+      - Mob: ILL_MINERAL
+        Count: 10
+      - Mob: ILL_OBSIDIAN
+        Count: 10
   - Id: 11566
   - Id: 11566
-    Title: Escape!!!! - Wait
+    Title: RUN! - Pending
     TimeLimit: 4h
     TimeLimit: 4h
+  - Id: 11567
+    Title: Things That Shouldn't Exist
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_R
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_Y
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_G
+        Count: 10
+  - Id: 11568
+    Title: Things That Shouldn't Exist
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_B
+        Count: 10
+      - Mob: ILL_TEDDY_BEAR_W
+        Count: 10
   - Id: 11569
   - Id: 11569
-    Title: Present not to exist-wait
+    Title: Things That Shouldn't Exist - Pending
     TimeLimit: 4h
     TimeLimit: 4h
+  - Id: 11570
+    Title: Let the Light Devour the Darkness
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_S
+        Count: 1
   - Id: 11571
   - Id: 11571
-    Title: Let the light consume the darkness - Wait
+    Title: Let the Light Devour the Darkness - Pending
     TimeLimit: 4h
     TimeLimit: 4h
   - Id: 11596
   - Id: 11596
     Title: Old Memories
     Title: Old Memories

+ 64 - 23
db/re/skill_db.yml

@@ -8878,6 +8878,7 @@ Body:
     HitCount: 1
     HitCount: 1
     SplashArea: -1
     SplashArea: -1
     AfterCastActDelay: 300
     AfterCastActDelay: 300
+    Duration1: 15000
     Duration2: 27000
     Duration2: 27000
     Cooldown: 4000
     Cooldown: 4000
     Requires:
     Requires:
@@ -9135,6 +9136,7 @@ Body:
     HitCount: 1
     HitCount: 1
     SplashArea: -1
     SplashArea: -1
     AfterCastActDelay: 300
     AfterCastActDelay: 300
+    Duration1: 4500
     Duration2: 4500
     Duration2: 4500
     Cooldown: 4000
     Cooldown: 4000
     Requires:
     Requires:
@@ -18362,6 +18364,43 @@ Body:
     HitCount: 1
     HitCount: 1
     Duration1: 60000
     Duration1: 60000
     Status: Relieve_off
     Status: Relieve_off
+  - Id: 776
+    Name: NPC_DEADLYCURSE
+    Description: Deadly Curse
+    MaxLevel: 1
+    TargetType: Attack
+    DamageFlags:
+      NoDamage: true
+    Flags:
+      IgnoreGtb: true
+      IsNpc: true
+    Range: 1
+    Duration1: 15000
+    Status: Deadly_Defeasance
+  - Id: 779
+    Name: NPC_DEADLYCURSE2
+    Description: Deadly Curse 2
+    MaxLevel: 5
+    TargetType: Self
+    DamageFlags:
+      NoDamage: true
+      Splash: true
+    Flags:
+      IgnoreGtb: true
+      IsNpc: true
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 3
+      - Level: 3
+        Area: 4
+      - Level: 4
+        Area: 5
+      - Level: 5
+        Area: 6
+    Duration2: 30000
+    Status: Deadly_Defeasance
   - Id: 780
   - Id: 780
     Name: NPC_CANE_OF_EVIL_EYE
     Name: NPC_CANE_OF_EVIL_EYE
     Description: Cane of evil eye
     Description: Cane of evil eye
@@ -42979,10 +43018,10 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-    Range: 9
-    Hit: Single
-    HitCount: 1
-    AfterCastActDelay: 2000
+    Flags:
+      IgnoreGtb: true
+    AfterCastWalkDelay: 1000
+    Cooldown: 20000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -43005,11 +43044,7 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-      Splash: true
-    Hit: Single
-    HitCount: 1
-    SplashArea: -1
-    AfterCastActDelay: 35000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 40000
         Time: 40000
@@ -43021,6 +43056,7 @@ Body:
         Time: 25000
         Time: 25000
       - Level: 5
       - Level: 5
         Time: 20000
         Time: 20000
+    Cooldown: 35000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -43038,7 +43074,6 @@ Body:
     Name: HLIF_BRAIN
     Name: HLIF_BRAIN
     Description: Brain Surgery
     Description: Brain Surgery
     MaxLevel: 5
     MaxLevel: 5
-    SplashArea: 1
   - Id: 8004
   - Id: 8004
     Name: HLIF_CHANGE
     Name: HLIF_CHANGE
     Description: Change
     Description: Change
@@ -43046,7 +43081,7 @@ Body:
     TargetType: Self
     TargetType: Self
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
-    Hit: Single
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -43054,7 +43089,7 @@ Body:
         Time: 180000
         Time: 180000
       - Level: 3
       - Level: 3
         Time: 300000
         Time: 300000
-    Duration2:
+    Cooldown:
       - Level: 1
       - Level: 1
         Time: 600000
         Time: 600000
       - Level: 2
       - Level: 2
@@ -43072,7 +43107,8 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    Duration2: 1000
+    AfterCastWalkDelay: 1000
+    Cooldown: 1000
     Requires:
     Requires:
       SpCost: 10
       SpCost: 10
   - Id: 8006
   - Id: 8006
@@ -43083,7 +43119,7 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    AfterCastActDelay: 30000
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 40000
         Time: 40000
@@ -43095,6 +43131,7 @@ Body:
         Time: 25000
         Time: 25000
       - Level: 5
       - Level: 5
         Time: 20000
         Time: 20000
+    Cooldown: 30000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -43122,6 +43159,7 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -43129,7 +43167,7 @@ Body:
         Time: 180000
         Time: 180000
       - Level: 3
       - Level: 3
         Time: 300000
         Time: 300000
-    Duration2:
+    Cooldown:
       - Level: 1
       - Level: 1
         Time: 300000
         Time: 300000
       - Level: 2
       - Level: 2
@@ -43158,7 +43196,7 @@ Body:
         Count: -2
         Count: -2
       - Level: 5
       - Level: 5
         Count: -3
         Count: -3
-    AfterCastWalkDelay: 2000
+    Cooldown: 2000
     Requires:
     Requires:
       SpCost:
       SpCost:
         - Level: 1
         - Level: 1
@@ -43179,6 +43217,7 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -43190,7 +43229,7 @@ Body:
         Time: 45000
         Time: 45000
       - Level: 5
       - Level: 5
         Time: 40000
         Time: 40000
-    Duration2:
+    Cooldown:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
@@ -43224,6 +43263,7 @@ Body:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
     CastCancel: true
     CastCancel: true
+    AfterCastWalkDelay: 1000
     Duration1:
     Duration1:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
@@ -43235,7 +43275,7 @@ Body:
         Time: 45000
         Time: 45000
       - Level: 5
       - Level: 5
         Time: 40000
         Time: 40000
-    Duration2:
+    Cooldown:
       - Level: 1
       - Level: 1
         Time: 60000
         Time: 60000
       - Level: 2
       - Level: 2
@@ -43268,7 +43308,7 @@ Body:
     Range: 15
     Range: 15
     Hit: Single
     Hit: Single
     HitCount: 1
     HitCount: 1
-    AfterCastActDelay: 1000
+    Cooldown: 1000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
   - Id: 8013
   - Id: 8013
@@ -43290,7 +43330,7 @@ Body:
         Count: 4
         Count: 4
       - Level: 5
       - Level: 5
         Count: 5
         Count: 5
-    AfterCastActDelay:
+    Cooldown:
       - Level: 1
       - Level: 1
         Time: 2000
         Time: 2000
       - Level: 2
       - Level: 2
@@ -43321,8 +43361,8 @@ Body:
     DamageFlags:
     DamageFlags:
       NoDamage: true
       NoDamage: true
     Hit: Single
     Hit: Single
-    AfterCastActDelay: 3000
-    AfterCastWalkDelay: 3000
+    AfterCastWalkDelay: 1500
+    Cooldown: 3000
     Requires:
     Requires:
       SpCost: 40
       SpCost: 40
   - Id: 8015
   - Id: 8015
@@ -43346,7 +43386,8 @@ Body:
     HitCount: 1
     HitCount: 1
     Element: Weapon
     Element: Weapon
     SplashArea: 4
     SplashArea: 4
-    AfterCastWalkDelay: 1000
+    AfterCastActDelay: 5000
+    CoolDown: 1000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
   - Id: 8018
   - Id: 8018

+ 5 - 1
db/re/status.yml

@@ -2600,13 +2600,17 @@ Body:
     DurationLookup: HLIF_AVOID
     DurationLookup: HLIF_AVOID
     CalcFlags:
     CalcFlags:
       Speed: true
       Speed: true
+    Flags:
+      NoSave: true
+      RemoveFromHomOnMapWarp: true
   - Status: Change
   - Status: Change
     DurationLookup: HLIF_CHANGE
     DurationLookup: HLIF_CHANGE
     CalcFlags:
     CalcFlags:
       Vit: true
       Vit: true
       Int: true
       Int: true
     Flags:
     Flags:
-      RemoveOnChangeMap: true
+      NoSave: true
+      RemoveFromHomOnMapWarp: true
     Fail:
     Fail:
       Change: true
       Change: true
   - Status: Bloodlust
   - Status: Bloodlust

+ 6 - 0
doc/mapflags.txt

@@ -521,3 +521,9 @@ Hides monster's HP bar on a map.
 Ignores config value of 'monster_hp_bars_info'.
 Ignores config value of 'monster_hp_bars_info'.
 
 
 ---------------------------------------
 ---------------------------------------
+
+*specialpopup	<popup ID>
+
+Displays a special popup when a player enters the map. See script command "specialpopup" for details on different popup types.
+
+---------------------------------------

+ 37 - 31
doc/permissions.txt

@@ -11,6 +11,12 @@
 This file describes the functions of player group permissions,
 This file describes the functions of player group permissions,
 configured in '/conf/groups.conf' under the "permissions" bracket.
 configured in '/conf/groups.conf' under the "permissions" bracket.
 
 
+The permission name used in '/conf/groups.conf' goes after the asterisk "*",
+while the constant name used in scripts and src goes between the parentheses "()"
+in the following format:
+
+*permission_name (PC_PERM_CONSTANT_NAME)
+
 To search for a permission, write "*" before its name.
 To search for a permission, write "*" before its name.
 The format of this file is as follows:
 The format of this file is as follows:
 	1. Basic Permissions
 	1. Basic Permissions
@@ -22,20 +28,20 @@ The format of this file is as follows:
 ========================
 ========================
 ---------------------------------------
 ---------------------------------------
 
 
-*can_trade
+*can_trade (PC_PERM_TRADE)
 
 
 Allows player to distribute items, such as through trades, dropping,
 Allows player to distribute items, such as through trades, dropping,
 vending, storage, mail, etc.
 vending, storage, mail, etc.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*can_party
+*can_party (PC_PERM_PARTY)
 
 
 Allows player to create and join parties.
 Allows player to create and join parties.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*attendance
+*attendance (PC_PERM_ATTENDANCE)
 
 
 Allows player to use the daily attendance system.
 Allows player to use the daily attendance system.
 
 
@@ -46,78 +52,78 @@ Allows player to use the daily attendance system.
 ===========================
 ===========================
 ---------------------------------------
 ---------------------------------------
 
 
-*all_skill
+*all_skill (PC_PERM_ALL_SKILL)
 
 
 Grants player all available skills in the player's skill tree.
 Grants player all available skills in the player's skill tree.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*all_equipment
+*all_equipment (PC_PERM_USE_ALL_EQUIPMENT)
 
 
 Allows player to equip any item, regardless of requirements (class, level,
 Allows player to equip any item, regardless of requirements (class, level,
 etc.). Note that this can cause client errors if a sprite does not exist.
 etc.). Note that this can cause client errors if a sprite does not exist.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*skill_unconditional
+*skill_unconditional (PC_PERM_SKILL_UNCONDITIONAL)
 
 
 Allows player to use any skill, regardless of required conditions (SP,
 Allows player to use any skill, regardless of required conditions (SP,
 items, etc.).
 items, etc.).
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*join_chat
+*join_chat (PC_PERM_JOIN_ALL_CHAT)
 
 
 Allows player to join password-protected chatrooms.
 Allows player to join password-protected chatrooms.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*kick_chat
+*kick_chat (PC_PERM_NO_CHAT_KICK)
 
 
 Prevents player from being kicked from a chatroom.
 Prevents player from being kicked from a chatroom.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*view_hpmeter
+*view_hpmeter (PC_PERM_VIEW_HPMETER)
 
 
 Allows player to see the HP bar of every player.
 Allows player to see the HP bar of every player.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*view_equipment
+*view_equipment (PC_PERM_VIEW_EQUIPMENT)
 
 
 Allows player to view the equipment of every player, regardless of that
 Allows player to view the equipment of every player, regardless of that
 player's setting.
 player's setting.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*hack_info
+*hack_info (PC_PERM_RECEIVE_HACK_INFO)
 
 
 Allows player to receive all information about players who try to hack,
 Allows player to receive all information about players who try to hack,
 spoof a name, etc.
 spoof a name, etc.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*disable_pvm
+*disable_pvm (PC_PERM_DISABLE_PVM)
 
 
 Prevents player from attacking monsters.
 Prevents player from attacking monsters.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*disable_pvp
+*disable_pvp (PC_PERM_DISABLE_PVP)
 
 
 Prevents player from attacking other players.
 Prevents player from attacking other players.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*can_trade_bounded
+*can_trade_bounded (PC_PERM_TRADE_BOUNDED)
 
 
 Allows player to do normal item actions with bounded items (drop, sell,
 Allows player to do normal item actions with bounded items (drop, sell,
 trade, etc.).
 trade, etc.).
 
 
 ---------------------------------------
 ---------------------------------------
  
  
-*item_unconditional
+*item_unconditional (PC_PERM_ITEM_UNCONDITIONAL)
 
 
 Allows player to consume any consumable item regardless the requirements
 Allows player to consume any consumable item regardless the requirements
 (bypass noitemconsumption mapflag, item's class, gender, status changes,
 (bypass noitemconsumption mapflag, item's class, gender, status changes,
@@ -125,7 +131,7 @@ item delay, etc).
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*trade_unconditional
+*trade_unconditional (PC_PERM_TRADE_UNCONDITIONAL)
 
 
 Allows player to ignore the trade conditions of items (drop, trade, sell, cart, storage/gstorage, mail and auction).
 Allows player to ignore the trade conditions of items (drop, trade, sell, cart, storage/gstorage, mail and auction).
 
 
@@ -136,32 +142,32 @@ Allows player to ignore the trade conditions of items (drop, trade, sell, cart,
 ======================
 ======================
 ---------------------------------------
 ---------------------------------------
 
 
-*all_commands
+*all_commands (PC_PERM_USE_ALL_COMMANDS)
 
 
 Allows usage of all atcommands and charcommands.
 Allows usage of all atcommands and charcommands.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*disable_commands_when_dead
+*disable_commands_when_dead (PC_PERM_DISABLE_CMD_DEAD)
 
 
 Disables usage of atcommands when player is dead.
 Disables usage of atcommands when player is dead.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*hide_session
+*hide_session (PC_PERM_HIDE_SESSION)
 
 
 Hides player session from being displayed by atcommands (@who, @whomap,
 Hides player session from being displayed by atcommands (@who, @whomap,
 etc.).
 etc.).
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*who_display_aid
+*who_display_aid (PC_PERM_WHO_DISPLAY_AID)
 
 
 Displays all GMs and character/account IDs in the @who command.
 Displays all GMs and character/account IDs in the @who command.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*any_warp
+*any_warp (PC_PERM_WARP_ANYWHERE)
 
 
 Allows player to bypass 'nowarp', 'nowarpto', 'noteleport', and 'nomemo'
 Allows player to bypass 'nowarp', 'nowarpto', 'noteleport', and 'nomemo'
 mapflags in commands which modify a character's map or coordinates (@memo,
 mapflags in commands which modify a character's map or coordinates (@memo,
@@ -169,63 +175,63 @@ mapflags in commands which modify a character's map or coordinates (@memo,
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*receive_requests
+*receive_requests (PC_PERM_RECEIVE_REQUESTS)
 
 
 Allows player to receive requests through the @requests command.
 Allows player to receive requests through the @requests command.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*show_bossmobs
+*show_bossmobs (PC_PERM_SHOW_BOSS)
 
 
 Displays boss mobs in the @showmobs command.
 Displays boss mobs in the @showmobs command.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*channel_admin
+*channel_admin (PC_PERM_CHANNEL_ADMIN)
 
 
 Allows player to modify #channel settings regardless of ownership and to
 Allows player to modify #channel settings regardless of ownership and to
 join password-protected channels without a password.
 join password-protected channels without a password.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*use_check
+*use_check (PC_PERM_USE_CHECK)
 
 
 Allows player to use the client command /check (displays character status).
 Allows player to use the client command /check (displays character status).
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*use_changemaptype
+*use_changemaptype (PC_PERM_USE_CHANGEMAPTYPE)
 
 
 Allows player to use the client command /changemaptype.
 Allows player to use the client command /changemaptype.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*command_enable
+*command_enable (PC_PERM_ENABLE_COMMAND)
 
 
 Enable to use atcommand while talking with NPC.
 Enable to use atcommand while talking with NPC.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*bypass_stat_onclone
+*bypass_stat_onclone (PC_PERM_BYPASS_STAT_ONCLONE)
 
 
 Bypass max parameter limit while using @clonestat
 Bypass max parameter limit while using @clonestat
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*bypass_max_stat
+*bypass_max_stat (PC_PERM_BYPASS_MAX_STAT)
 
 
 Allow to bypass the maximum stat parameter (at conf/player.conf) to
 Allow to bypass the maximum stat parameter (at conf/player.conf) to
 maximum value 32,767.
 maximum value 32,767.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*macro_detect
+*macro_detect (PC_PERM_MACRO_DETECT)
 
 
 Allows player to use the client command /macro_detector.
 Allows player to use the client command /macro_detector.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*macro_register
+*macro_register (PC_PERM_MACRO_REGISTER)
 
 
 Allows player to use the client commands /macro_register (used to add new captcha) and /macro_preview (used to preview captcha by ID).
 Allows player to use the client commands /macro_register (used to add new captcha) and /macro_preview (used to preview captcha by ID).
 
 

+ 77 - 14
doc/script_commands.txt

@@ -5694,22 +5694,35 @@ Example:
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*searchstores <uses>,<effect>;
+*searchstores <uses>,<effect>{,"<map name>"};
 
 
 Invokes the store search window, which allows to search for both vending
 Invokes the store search window, which allows to search for both vending
-and buying stores. Parameter uses indicates, how many searches can be
-started, before the window has to be reopened. Effect value affects,
-what happens, when a result item is double-clicked and can be one of the
-following:
+and buying stores.
 
 
-	0 = Shows the store's position on the mini-map and highlights the
-	    shop sign with yellow color, when the store is on same map
-	    as the invoking player.
-	1 = Directly opens the shop, regardless of distance.
+Parameter <uses> indicates how many searches can be started
+before the window has to be reopened.
 
 
-Example:
-	// Item Universal_Catalog_Gold (10 uses, effect: open shop)
-	searchstores 10,1;
+Parameter <effect> affects what happens when a result item is double-clicked
+and can be one of the following:
+
+	SEARCHSTORE_EFFECT_NORMAL : Shows the store's position on the mini-map and highlights the
+								shop sign with yellow color, when the store is on same map
+								as the invoking player.
+	SEARCHSTORE_EFFECT_REMOTE : Directly opens the shop, regardless of distance.
+	
+Optional parameter <map name> indicates the name of map where the stores will be searched.
+If not set, the search will be on the map the invoking character is currently on.
+Special values for <map name> are:
+
+	"this" : Will search for stores on the map where the invoking character is currently on. (default)
+	"all"  : Will search for stores on all maps.
+
+Examples:
+	// Item Vending_Search_Scroll (10 uses, effect: show mark on minimap, current map)
+	searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
+	
+	// Search stores (1 use, effect: open shop, all maps on the server)
+	searchstores 1, SEARCHSTORE_EFFECT_REMOTE, "all";
 
 
 ---------------------------------------
 ---------------------------------------
 
 
@@ -6638,8 +6651,8 @@ Examples:
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-macro_detector({<account ID>});
-macro_detector({"<character name>"});
+*macro_detector({<account ID>});
+*macro_detector({"<character name>"});
 
 
 This command will display the captcha UI challenge onto the invoking character or the given <account ID>/<character name>.
 This command will display the captcha UI challenge onto the invoking character or the given <account ID>/<character name>.
 
 
@@ -6660,6 +6673,46 @@ Example:
 
 
 ---------------------------------------
 ---------------------------------------
 
 
+*permission_check(<permission>{,<char_id>});
+
+This command will return true if the attached character has the specified permission, false otherwise.
+If <char_id> is given, it will check the permission for that character instead.
+
+A full list of the player permission constants (with the 'PC_PERM' prefix) along with the
+full permissions documentation can be found in 'doc/permissions.txt'.
+
+
+Example:
+	if (permission_check(PC_PERM_TRADE)) {
+		mes "You have permission to trade!";
+	}
+	else {
+		mes "You do not have permission to trade!";
+	}
+	end;
+
+---------------------------------------
+
+*permission_add(<permission>{,<char_id>});
+*permission_remove(<permission>{,<char_id>});
+
+These commands will temporarily add or remove the specified permission to the attached character,
+or the given <char_id> until the player logs out.
+
+A full list of the player permission constants (with the 'PC_PERM' prefix) along with the
+full permissions documentation can be found in 'doc/permissions.txt'.
+
+Examples:
+	// Adds the 'can_trade' permission to the attached character,
+	// allowing them to trade, drop, sell, store and mail items.
+	permission_add(PC_PERM_TRADE);
+
+	// Removes the 'can_party' permission from the attached character,
+	// preventing them from joining or creating parties.
+	permission_remove(PC_PERM_PARTY);
+
+---------------------------------------
+
 ==================================
 ==================================
 |5.- Mob / NPC -related commands.|
 |5.- Mob / NPC -related commands.|
 ==================================
 ==================================
@@ -8455,6 +8508,15 @@ Opens the tip box UI for the attached player or the given character ID.
 
 
 This command requires packet version 2017-11-22 or newer.
 This command requires packet version 2017-11-22 or newer.
 
 
+---------------------------------------
+
+*specialpopup(<popup ID>);
+
+Open popup and/or show text by ID from list defined in the client spopup.lub file.
+Popup and text is only visible if the player warped from one map to another map.
+
+This command requires packet version 2022-10-05 or newer.
+
 ---------------------------------------
 ---------------------------------------
 \\
 \\
 6,1.- Unit-related commands
 6,1.- Unit-related commands
@@ -9803,6 +9865,7 @@ For details on the other parameters, see 'announce'.
 
 
 This function checks if a party meets certain requirements, returning 1 if all
 This function checks if a party meets certain requirements, returning 1 if all
 conditions are met and 0 otherwise. It will only check online characters.
 conditions are met and 0 otherwise. It will only check online characters.
+The command returns 0 is the party ID does not exist.
 
 
 amount - number of online party members (default is 1).
 amount - number of online party members (default is 1).
 min    - minimum level of all characters in the party (default is 1).
 min    - minimum level of all characters in the party (default is 1).

+ 3 - 0
doc/status.txt

@@ -254,6 +254,9 @@ Flags: Various status flags for specific status change events.
 	SuperNoviceAngel      - Status that is given from Super Novice Angel.
 	SuperNoviceAngel      - Status that is given from Super Novice Angel.
 	TaekwonAngel          - Status that is given from Taekwon Angel.
 	TaekwonAngel          - Status that is given from Taekwon Angel.
 
 
+	RemoveFromHomOnWarp    - Removes the status from the Homunculus when teleporting or warping to another map.
+	RemoveFromHomOnMapWarp - Removes the status from the Homunculus when warping to another map.
+
 ---------------------------------------
 ---------------------------------------
 
 
 MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance.
 MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance.

+ 9 - 6
doc/status_change.txt

@@ -1001,13 +1001,16 @@ SC_FLING	()
 	desc:
 	desc:
 	val1:
 	val1:
 
 
-SC_AVOID	()
-	desc:
-	val1:
+SC_AVOID	(EFST_HLIF_AVOID)
+	desc: Increase walkspeed for Players and Homunculus
+	val1: Skill Level
+	val2: Walkspeed increase (10 * val1 for Players, 40 * val1 for Homunculus)
 
 
-SC_CHANGE	()
-	desc:
-	val1:
+SC_CHANGE	(EFST_HLIF_CHANGE)
+	desc: Increase some Homunculus' statuses (VIT, INT); Uses MATK for damage calculation; Sets Homunculus' HP and SP to 10 on expiration; On Pre-Renewal, sets Homunculus' HP and SP to 100% on cast
+	val1: Skill Level
+	val2: VIT increase (20 * val1)
+	val3: INT increase (30 * val1)
 
 
 SC_BLOODLUST	()
 SC_BLOODLUST	()
 	desc:
 	desc:

+ 6 - 13
npc/re/cities/brasilis.txt → npc/cities/brasilis.txt

@@ -1,26 +1,19 @@
-//===== rAthena Script ======================================= 
+//===== rAthena Script =======================================
 //= Brasilis Town
 //= Brasilis Town
-//===== By: ================================================== 
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.4
-//===== Compatible With: ===================================== 
-//= rAthena Project
-//===== Description: ========================================= 
+//===== Description: =========================================
 //= [Official Conversion]
 //= [Official Conversion]
 //= Brasilis Town Script
 //= Brasilis Town Script
-//===== Additional Comments: ================================= 
-//= 1.0 First version. Transportation and Basic NPCs.
+//===== Changelog: ===========================================
+//= 1.0 First version. Transportation and Basic NPCs. [L0ne_W0lf]
 //= 1.1 Fixed Zeny not being removed for payment. [Kisuka]
 //= 1.1 Fixed Zeny not being removed for payment. [Kisuka]
 //= 1.2 Updated dialog, added Ice Cream Maker. [L0ne_W0lf]
 //= 1.2 Updated dialog, added Ice Cream Maker. [L0ne_W0lf]
 //= 1.3 Moved Alberta NPC to pre-re/re paths. [Euphy]
 //= 1.3 Moved Alberta NPC to pre-re/re paths. [Euphy]
 //= 1.4 Added VIP features. [Euphy]
 //= 1.4 Added VIP features. [Euphy]
-//============================================================ 
+//============================================================
 
 
 // Brasilis Transportation :: brasilis_trans
 // Brasilis Transportation :: brasilis_trans
 //============================================================
 //============================================================
-/* Pre-Renewal coordinates: alberta,247,115,3 */
-alberta,246,82,3	script	Crewman#bra2	100,{
+-	script	::Crewman_bra2	-1,{
 	mes "[Crewman]";
 	mes "[Crewman]";
 	mes "Hey, have you heard of a place called Brasilis?";
 	mes "Hey, have you heard of a place called Brasilis?";
 	mes "It's a tropical city that's hot like the desert but also rainy. It is a very mysterious place.";
 	mes "It's a tropical city that's hot like the desert but also rainy. It is a very mysterious place.";

+ 23 - 0
npc/custom/jobmaster.txt

@@ -184,7 +184,28 @@ function	Job_Options	{
 			Job_Options(.@job_opt,roclass(.@eac|EAJL_THIRD)); // Expanded SN is "third" cls
 			Job_Options(.@job_opt,roclass(.@eac|EAJL_THIRD)); // Expanded SN is "third" cls
 		}
 		}
 	}
 	}
+
+	// babies don't get to become 4th jobs
+	if (.FourthExpanded && .@eac == EAJ_REBELLION) {
+		Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
+		Job_Options(.@job_opt, roclass(EAJ_NIGHT_WATCH));
+	}
+
+	if (.FourthExpanded && .@eac == EAJ_KAGEROUOBORO) {
+		Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
+		Job_Options(.@job_opt, roclass(EAJ_SHINKIRO_SHIRANUI));
+	}
+
+	if (.FourthExpanded && .@eac == EAJ_SUPER_NOVICE_E) {
+		Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
+		Job_Options(.@job_opt, roclass(EAJ_HYPER_NOVICE));
+	}
 	
 	
+	if (.FourthExpanded && .@eac == EAJ_SUMMONER) {
+		Require_Level(.Req_SHandler[0], .Req_SHandler[1]);
+		Job_Options(.@job_opt, roclass(EAJ_SPIRIT_HANDLER));
+	}
+
 	if (.SecondExpanded && 
 	if (.SecondExpanded && 
 		((.@eac&(~EAJL_BABY)) == EAJ_NINJA || 		// is (Baby) Ninja
 		((.@eac&(~EAJL_BABY)) == EAJ_NINJA || 		// is (Baby) Ninja
 		(.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) {	// is (Baby) Gunslinger
 		(.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) {	// is (Baby) Gunslinger
@@ -483,6 +504,7 @@ OnInit:
 	
 	
 	// Settings
 	// Settings
 	.FourthClass = true;				// Enable fourth classes?
 	.FourthClass = true;				// Enable fourth classes?
+	.FourthExpanded = true;				// Enable new expanded fourth classes: Ex. Hyper Novice, Rebellion, Shinkiro/Shiranui?
 	.ThirdClass = true;					// Enable third classes?
 	.ThirdClass = true;					// Enable third classes?
 	.RebirthClass = true;				// Enable rebirth classes?
 	.RebirthClass = true;				// Enable rebirth classes?
 	.SecondExpanded = true;				// Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion?
 	.SecondExpanded = true;				// Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion?
@@ -504,6 +526,7 @@ OnInit:
 	setarray .Req_Fourth[0],200,70;		// Minimum base level, job level to change to fourth class
 	setarray .Req_Fourth[0],200,70;		// Minimum base level, job level to change to fourth class
 	setarray .Req_Exp_NJ_GS[0],99,70; 	// Minimum base level, job level to turn into Expanded Ninja and Gunslinger
 	setarray .Req_Exp_NJ_GS[0],99,70; 	// Minimum base level, job level to turn into Expanded Ninja and Gunslinger
 	setarray .Req_Exp_SNOVI[0],99,99; 	// Minimum base level, job level to turn into Expanded Super Novice
 	setarray .Req_Exp_SNOVI[0],99,99; 	// Minimum base level, job level to turn into Expanded Super Novice
+	setarray .Req_SHandler[0],200,60;	// Minimum base level, job level to turn into Spirit Handler
 	.SNovice = 45;						// Minimum base level to turn into Super Novice
 	.SNovice = 45;						// Minimum base level to turn into Super Novice
 	
 	
 	// Setting adjustments by PACKETVER
 	// Setting adjustments by PACKETVER

+ 15 - 4
npc/custom/warper.txt

@@ -110,7 +110,18 @@ function Pick {
 	Go(.@map$,.@x,.@y);
 	Go(.@map$,.@x,.@y);
 }
 }
 function Restrict {
 function Restrict {
-	if ((getarg(0) == "RE" && !checkre(0)) || (getarg(0) == "Pre-RE" && checkre(0))) {
+	.@type$ = getarg(0);
+	
+	if (.@type$ == "Brasilis") {
+		// If the official warper to Brasilis is enabled, meaning is either
+		// Renewal mode or Pre-renewal Brasilis is enabled, we lift the restriction
+		if (getnpcid(0, "Crewman_bra2"))
+			return;
+		// Otherwise we apply the renewal restriction
+		.@type$ = "RE";
+	}
+
+	if ((.@type$ == "RE" && !checkre(0)) || (.@type$ == "Pre-RE" && checkre(0))) {
 		if (getarg(1,0)) {
 		if (getarg(1,0)) {
 			set @warp_block,0;
 			set @warp_block,0;
 			for (set .@i,1; .@i<getargcount(); set .@i,.@i+1)
 			for (set .@i,1; .@i<getargcount(); set .@i,.@i+1)
@@ -141,7 +152,7 @@ T2: Go("alberta",28,234);
 T3: Go("aldebaran",140,131);
 T3: Go("aldebaran",140,131);
 T4: Go("amatsu",198,84);
 T4: Go("amatsu",198,84);
 T5: Go("ayothaya",208,166);
 T5: Go("ayothaya",208,166);
-T6: Restrict("RE");
+T6: Restrict("Brasilis");
 	Go("brasilis",196,217);
 	Go("brasilis",196,217);
 T7: Go("comodo",209,143);
 T7: Go("comodo",209,143);
 T8: Restrict("RE");
 T8: Restrict("RE");
@@ -218,7 +229,7 @@ F2: setarray @c[2],173,134,212,150;
 F3: Restrict("RE");
 F3: Restrict("RE");
 	setarray @c[2],193,220,220,187;
 	setarray @c[2],193,220,220,187;
 	Disp("Bifrost Field",1,2); Pick("bif_fild");
 	Disp("Bifrost Field",1,2); Pick("bif_fild");
-F4: Restrict("RE");
+F4: Restrict("Brasilis");
 	setarray @c[2],74,32;
 	setarray @c[2],74,32;
 	Disp("Brasilis Field",1,1); Pick("bra_fild");
 	Disp("Brasilis Field",1,1); Pick("bra_fild");
 F5: Restrict("Pre-RE",5);
 F5: Restrict("Pre-RE",5);
@@ -343,7 +354,7 @@ D7: Restrict("RE");
 D8: Restrict("RE",4,5);
 D8: Restrict("RE",4,5);
 	setarray @c[2],150,288,150,18,140,134,244,52,100,202;
 	setarray @c[2],150,288,150,18,140,134,244,52,100,202;
 	Disp("Bio Lab 1:Bio Lab 2:Bio Lab 3:Bio Lab 4:Tomb of the Fallen"); Pick("","lhz_dun01","lhz_dun02","lhz_dun03","lhz_dun04","lhz_dun_n");
 	Disp("Bio Lab 1:Bio Lab 2:Bio Lab 3:Bio Lab 4:Tomb of the Fallen"); Pick("","lhz_dun01","lhz_dun02","lhz_dun03","lhz_dun04","lhz_dun_n");
-D9: Restrict("RE");
+D9: Restrict("Brasilis");
 	setarray @c[2],87,47,262,262;
 	setarray @c[2],87,47,262,262;
 	Disp("Brasilis Dungeon",1,2); Pick("bra_dun");
 	Disp("Brasilis Dungeon",1,2); Pick("bra_dun");
 D10: Restrict("RE",6);
 D10: Restrict("RE",6);

+ 10 - 1
npc/kafras/kafras.txt

@@ -59,7 +59,7 @@ aldeba_in,96,181,4	script	Kafra Service	113,{
 			mes "seems that you don't";
 			mes "seems that you don't";
 			mes "have the 20 zeny to pay";
 			mes "have the 20 zeny to pay";
 			mes "the Storage access fee...";
 			mes "the Storage access fee...";
-			close;
+			close3;
 		}
 		}
 		mes "[Kafra Leilah]";
 		mes "[Kafra Leilah]";
 		mes "Although this facility is";
 		mes "Although this facility is";
@@ -687,3 +687,12 @@ alb2trea,59,69,5	script	Kafra Employee::kaf_alb2trea	117,{
 	savepoint "alb2trea",92,64,1,1;
 	savepoint "alb2trea",92,64,1,1;
 	callfunc "F_KafEnd",0,1,"at Sunken Ship";
 	callfunc "F_KafEnd",0,1,"at Sunken Ship";
 }
 }
+
+// Brasilis
+//============================================================
+brasilis,197,221,4	script	Kafra Employee::kaf_bra	4_F_KAFRA1,{
+	cutin "kafra_01",2;
+	callfunc "F_Kafra",0,3,0,80,700;
+	savepoint "brasilis",195,259,1,1;
+	callfunc "F_KafEnd",0,1,"in the city of Brasilis";
+}

+ 2 - 2
npc/merchants/hair_style.txt

@@ -302,7 +302,7 @@ lhz_in02,91,155,5	script	Assistant Beautician#li	862,{
 						mes "Oooh, there must";
 						mes "Oooh, there must";
 						mes "be some style that";
 						mes "be some style that";
 						mes "you like, right? Hmmm...";
 						mes "you like, right? Hmmm...";
-						close;
+						close3;
 					}
 					}
 				}
 				}
 				mes "[Assistant Beautician]";
 				mes "[Assistant Beautician]";
@@ -353,7 +353,7 @@ lhz_in02,91,155,5	script	Assistant Beautician#li	862,{
 				mes "me! Thank you for using";
 				mes "me! Thank you for using";
 				mes "my service and come again~";
 				mes "my service and come again~";
 				emotion ET_CHUP;
 				emotion ET_CHUP;
-				close;
+				close3;
 			case 2:
 			case 2:
 				mes "[Assistant Beautician]";
 				mes "[Assistant Beautician]";
 				mes "Huh? Oh no, you're";
 				mes "Huh? Oh no, you're";

+ 41 - 0
npc/merchants/inn.txt

@@ -203,6 +203,47 @@ ve_in,157,219,5	script	Inn Master#Receptionist	709,{
 	}
 	}
 }
 }
 
 
+//======================== Brasilis =================================
+bra_in01,27,24,3	script	Hotel Keeper#bra1	478,{
+	mes "[Hotel Keeper]";
+	mes "Welcome to the beautiful Brasilis Hotel.";
+	next;
+	switch(select("Save:Rest -5000 zeny:Cancel")) {
+	case 1:
+		mes "[Hotel Keeper]";
+		mes "Do you want to save here at the Brasilis Hotel?";
+		next;
+		switch(select("No thank you.:Absolutely.")) {
+		case 1:
+			mes "[Hotel Keeper]";
+			mes "Ok then, enjoy your stay.";
+			close;
+		case 2:
+			mes "[Hotel Keeper]";
+			mes "Your respawn has been saved here at the hotel. I hope that you enjoy your stay here in Brasilis.";
+			savepoint "bra_in01",144,69,1,1;
+			close;
+		}
+		end;
+	case 2:
+		if (Zeny > 4999) {
+			mes "[Hotel Keeper]";
+			mes "I will show you a great room.";
+			close2;
+			if (Zeny < 5000)
+				end;
+			Zeny -= 5000;
+			percentheal 100,100;
+			warp "bra_in01",144,69;
+			end;
+		}
+		mes "[Hotel Keeper]";
+		mes "I'm sorry, but the service charge is 5,000 zeny per night.";
+	case 3:
+		close;
+	}
+}
+
 //======================= Inn Function ==============================
 //======================= Inn Function ==============================
 function	script	F_InnMaid	{
 function	script	F_InnMaid	{
 	.@npc_name$ = getarg(0);
 	.@npc_name$ = getarg(0);

+ 20 - 0
npc/pre-re/cities/brasilis.txt

@@ -0,0 +1,20 @@
+//===== rAthena Script =======================================
+//= Brasilis Town Pre-Renewal
+//===== Description: =========================================
+//= [Official Conversion based on bRO & jRO servers]
+//= Brasilis town NPCs.
+//
+// Note:
+// - Brasilis was introduced in Pre-Renewal only for bRO and
+//   jRO official servers with differences in monster stats,
+//   spawns and quests.
+//   It was added in Renewal for every other official server.
+//   Since we follow kRO this is disabled by default.
+//   You can enable it on npc/pre-re/scripts_athena.conf
+//===== Changelog: ===========================================
+//= 1.0 First Version [Daegaladh]
+//============================================================
+
+// Brasilis Transportation :: brasilis_trans
+//============================================================
+alberta,247,115,3	duplicate(Crewman_bra2)	Crewman#bra2	100

+ 77 - 0
npc/pre-re/guides/guides_brasilis.txt

@@ -0,0 +1,77 @@
+//===== rAthena Script =======================================
+//= Brasilis Guide
+//===== Description: =========================================
+//= [Official Conversion based on bRO & jRO servers]
+//= Guide for the city of Brasilis.
+//
+// Note:
+// - Brasilis was introduced in Pre-Renewal only for bRO and
+//   jRO official servers with differences in monster stats,
+//   spawns and quests.
+//   It was added in Renewal for every other official server.
+//   Since we follow kRO this is disabled by default.
+//   You can enable it on npc/pre-re/scripts_athena.conf
+//===== Changelog: ===========================================
+//= 1.0 First Version [Daegaladh]
+//============================================================
+
+brasilis,219,97,3	script	Brasilis Guide	478,{
+	mes "[Brasilis Guide]";
+	mes "Welcome to ^8B4513Brasilis^000000, a country as passionate as the sun.";
+	mes "If you have any questions, please ask me.";
+	next;
+	switch(select("Ask about locations:Remove Marks from Mini-Map:Cancel")) {
+	case 1:
+		mes "[Brasilis Guide]";
+		mes "Where can I guide you?";
+		next;
+		switch(select("[ Hotel ]:[ Jungle Cable ]:[ Art Museum ]:[ Market ]:[ Verass Monument ]")) {
+		case 1:
+			mes "[Brasilis Guide]";
+			mes "The Brasilis Hotel is located just above, ^FF3355+^000000.";
+			mes "Is there anything else I can do for you?";
+			viewpoint 1,274,151,2,0xFF3355;
+			close;
+		case 2:
+			mes "[Brasilis Guide]";
+			mes "Do you want to go through the rough jungle? You can take a ";
+			mes "Jungle Cable here ^CE6300+^000000.";
+			mes "Is there anything else I can do for you?";
+			viewpoint 1,308,335,3,0xCE6300;
+			close;
+		case 3:
+			mes "[Brasilis Guide]";
+			mes "The pride of Brasilis, the world scale Art Museum is at ^A5BAAD+^000000.";
+			mes "Is there anything else I can do for you?";
+			viewpoint 1,137,167,4,0x00FF00;
+			close;
+		case 4:
+			mes "[Brasilis Guide]";
+			mes "You can buy items for hunting at the Market here ^55FF33+^000000.";
+			mes "Is there anything else I can do for you?";
+			viewpoint 1,254,248,5,0x55FF33;
+			close;
+		case 5:
+			mes "[Brasilis Guide]";
+			mes "The iconic monument of Brasilis, the Verass Monument stands at ^3355FF+^000000.";
+			mes "Is there anything else I can do for you?";
+			viewpoint 1,195,235,6,0x3355FF;
+			close;
+		}
+		end;
+	case 2:
+		mes "[Brasilis Guide]";
+		mes "I'll remove all marks from your mini-map.";
+		mes "Is there anything else I can do for you?";
+		viewpoint 0,274,151,2,0x00FF00;
+		viewpoint 0,308,335,3,0x00FF00;
+		viewpoint 0,137,167,4,0x00FF00;
+		viewpoint 0,254,248,5,0x00FF00;
+		viewpoint 0,195,235,6,0x00FF00;
+		close;
+	case 3:
+		mes "[Brasilis Guide]";
+		mes "Wandering on your own is always the best way to explore. Anyway, take care.";
+		close;
+	}
+}

+ 1 - 1
npc/pre-re/merchants/hair_dyer.txt

@@ -136,7 +136,7 @@ prt_in,243,168,4	script	Jovovich	91,{
 			mes "* Fees and Information *";
 			mes "* Fees and Information *";
 			mes "- 1 Dyestuffs item of the color of hair you want.";
 			mes "- 1 Dyestuffs item of the color of hair you want.";
 			mes "- 1000 zeny fee.";
 			mes "- 1000 zeny fee.";
-			break;
+			close;
 
 
 		case 3:
 		case 3:
 			mes "[Hairdresser Jovovich]";
 			mes "[Hairdresser Jovovich]";

+ 3 - 3
npc/pre-re/merchants/hair_style.txt

@@ -594,7 +594,7 @@ lhz_in02,100,143,3	script	Hair Dresser#li	122,{
 					mes "you can be more daring than";
 					mes "you can be more daring than";
 					mes "that! Be fashionably adventurous, you fashionable adventurer~";
 					mes "that! Be fashionably adventurous, you fashionable adventurer~";
 					emotion ET_THROB;
 					emotion ET_THROB;
-					close;
+					close3;
 				}
 				}
 			}
 			}
 			else {
 			else {
@@ -917,7 +917,7 @@ lhz_in02,100,143,3	script	Hair Dresser#li	122,{
 				mes "I'll make you the best looking";
 				mes "I'll make you the best looking";
 				mes "person in the entire world!";
 				mes "person in the entire world!";
 				emotion ET_BEST;
 				emotion ET_BEST;
-				close;
+				close3;
 			case 2:
 			case 2:
 				mes "[Prince Shammi]";
 				mes "[Prince Shammi]";
 				mes "Oh, did you forget which";
 				mes "Oh, did you forget which";
@@ -925,7 +925,7 @@ lhz_in02,100,143,3	script	Hair Dresser#li	122,{
 				mes "number? By all means, please";
 				mes "number? By all means, please";
 				mes "check again! Find the one that";
 				mes "check again! Find the one that";
 				mes "is perfect just for you, okay?";
 				mes "is perfect just for you, okay?";
-				close;
+				close3;
 			}
 			}
 		}
 		}
 		break;
 		break;

+ 64 - 0
npc/pre-re/mobs/dungeons/bra_dun.txt

@@ -0,0 +1,64 @@
+//===== rAthena Script =======================================
+//= Brasilis Dungeon Monster Spawn Script
+//===== Description: =========================================
+//= [Official Conversion based on bRO & jRO servers]
+//
+// Note:
+// - Brasilis was introduced in Pre-Renewal only for bRO and
+//   jRO official servers with differences in monster stats,
+//   spawns and quests.
+//   It was added in Renewal for every other official server.
+//   Since we follow kRO this is disabled by default.
+//   You can enable it on npc/pre-re/scripts_athena.conf
+//===== Changelog: ===========================================
+//= 1.0 First Version [Playtester]
+//============================================================
+
+//bRO Pre-Renewal spawns
+
+//==================================================
+// bra_dun01 - Behind the Waterfall
+//==================================================
+bra_dun01	monster	Iara	2069,60,5000
+bra_dun01	monster	Piranha	2070,100,5000
+bra_dun01	monster	Hydra	1068,10,5000
+bra_dun01	monster	Plankton	1161,10,5000
+bra_dun01	monster	Marina	1141,10,5000
+bra_dun01	monster	Black Mushroom	1084,10,180000,90000
+
+//==================================================
+// bra_dun02 - Behind the Waterfall
+//==================================================
+bra_dun02	monster	Iara	2069,120,5000
+bra_dun02	monster	Piranha	2070,80,5000
+bra_dun02	monster	Hydra	1068,20,5000
+bra_dun02	monster	Plankton	1161,20,5000
+bra_dun02	monster	Marina	1141,10,5000
+bra_dun02	monster	Black Mushroom	1084,10,180000,90000
+bra_dun02	boss_monster	Boitata	2068,1,7200000,600000,1
+
+
+//jRO Pre-Renewal spawns
+
+//==================================================
+// bra_dun01 - Behind the Waterfall
+//==================================================
+//bra_dun01	monster	Kukre	1070,40,5000
+//bra_dun01	monster	Hydra	1068,60,5000
+//bra_dun01	monster	Marina	1141,5,5000
+//bra_dun01	monster	Thara Frog	1034,40,5000
+//bra_dun01	monster	Piranha	2070,50,5000
+//bra_dun01	monster	Iara	2069,30,5000
+//bra_dun01	monster	Headless Mule	2071,10,5000
+//bra_dun01	monster	Black Mushroom	1084,5,120000,60000
+
+//==================================================
+// bra_dun02 - Behind the Waterfall
+//==================================================
+//bra_dun02	monster	Hydra	1068,20,5000
+//bra_dun02	monster	Piranha	2070,60,5000
+//bra_dun02	monster	Iara	2069,40,5000
+//bra_dun02	monster	Headless Mule	2071,40,5000
+//bra_dun02	monster	Shining Plant	1083,1,1800000,900000
+//bra_dun02	monster	Red Mushroom	1084,5,120000,60000
+//bra_dun02	boss_monster	Boitata	2068,1,7200000,600000,1

+ 48 - 0
npc/pre-re/mobs/fields/brasilis.txt

@@ -0,0 +1,48 @@
+//===== rAthena Script =======================================
+//= Brasilis Fields Monster Spawn Script
+//===== Description: =========================================
+//= [Official Conversion based on bRO & jRO servers]
+//
+// Note:
+// - Brasilis was introduced in Pre-Renewal only for bRO and
+//   jRO official servers with differences in monster stats,
+//   spawns and quests.
+//   It was added in Renewal for every other official server.
+//   Since we follow kRO this is disabled by default.
+//   You can enable it on npc/pre-re/scripts_athena.conf
+//===== Changelog: ===========================================
+//= 1.0 First Version [Playtester]
+//============================================================
+
+//==================================================
+// Brasilis, Strange Hydras
+//==================================================
+brasilis,283,88,6,6	monster	Strange Hydra	2081,5,30000
+brasilis,284,104,6,6	monster	Strange Hydra	2081,4,30000
+brasilis,215,80,6,6	monster	Strange Hydra	2081,4,30000
+brasilis,96,50,8,8	monster	Strange Hydra	2081,5,30000
+
+//bRO Pre-Renewal spawns
+
+//==================================================
+// bra_fild01 - Brasilis Field
+//==================================================
+bra_fild01	monster	Headless Mule	2071,40,5000
+bra_fild01	monster	Curupira	2074,80,5000
+bra_fild01	monster	Dokebi	1110,20,5000
+bra_fild01	monster	Jaguar	2072,10,5000
+bra_fild01	monster	Savage	1166,20,5000
+bra_fild01	monster	Toucan	2073,10,5000
+bra_fild01	monster	Red Mushroom	1085,3,360000,180000
+
+//jRO Pre-Renewal spawns
+
+//==================================================
+// bra_fild01
+//==================================================
+//bra_fild01	monster	Savage	1166,10,5000
+//bra_fild01	monster	Dokebi	1110,20,5000
+//bra_fild01	monster	Curupira	2074,50,5000
+//bra_fild01	monster	Jaguar	2072,35,5000
+//bra_fild01	monster	Toucan	2073,40,5000
+//bra_fild01	monster	Red Mushroom	1085,5,120000,60000

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

@@ -98,3 +98,34 @@ npc: npc/pre-re/quests/quests_nameless.txt
 npc: npc/pre-re/quests/quests_niflheim.txt
 npc: npc/pre-re/quests/quests_niflheim.txt
 npc: npc/pre-re/quests/the_sign_quest.txt
 npc: npc/pre-re/quests/the_sign_quest.txt
 npc: npc/pre-re/quests/quests_veins.txt
 npc: npc/pre-re/quests/quests_veins.txt
+
+// - Disable Brasilis by default --------------------------------
+// DO NOT COMMENT!!!
+// Instead, follow the instructions below.
+// --------------------------------------------------------------
+delnpc: npc/cities/brasilis.txt
+delnpc: npc/quests/quests_brasilis.txt
+delnpc: npc/warps/cities/brasilis.txt
+delnpc: npc/warps/dungeons/bra_dun.txt
+delnpc: npc/warps/fields/bra_fild.txt
+
+// -------------------- Pre-Renewal Brasilis --------------------
+// Brasilis was introduced in Pre-Renewal only for bRO and
+// jRO official servers with differences in monster stats,
+// spawns and quests.
+// It was added in Renewal for every other official server.
+// Since we follow kRO this is disabled by default.
+//
+// Uncomment the following NPC scripts to enable bRO/jRO's
+// Pre-Renewal version of Brasilis.
+// You also need to uncomment the data from file
+// mob_summon.yml in /db/import/ folder
+//npc: npc/cities/brasilis.txt
+//npc: npc/quests/quests_brasilis.txt
+//npc: npc/warps/cities/brasilis.txt
+//npc: npc/warps/dungeons/bra_dun.txt
+//npc: npc/warps/fields/bra_fild.txt
+//npc: npc/pre-re/cities/brasilis.txt
+//npc: npc/pre-re/guides/guides_brasilis.txt
+//npc: npc/pre-re/mobs/dungeons/bra_dun.txt
+//npc: npc/pre-re/mobs/fields/brasilis.txt

+ 43 - 47
npc/quests/bard_quest.txt

@@ -157,19 +157,19 @@ geffen,132,38,3	script	Bard#2	51,{
 		next;
 		next;
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "I hope that you'll always remain honest and respectful towards other people, and that you continue to ignore greed for fortune or power.";
 		mes "I hope that you'll always remain honest and respectful towards other people, and that you continue to ignore greed for fortune or power.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q > 11 && gef_bard_q < 14) {
 	} else if (gef_bard_q > 11 && gef_bard_q < 14) {
 		cutin "bard_eland02",2;
 		cutin "bard_eland02",2;
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "It seems you haven't found it yet. Well, take your time, I can wait as long as you want. It doesn't really bore me, since waiting seems to be a part of my profession.";
 		mes "It seems you haven't found it yet. Well, take your time, I can wait as long as you want. It doesn't really bore me, since waiting seems to be a part of my profession.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 11) {
 	} else if (gef_bard_q == 11) {
 		cutin "bard_eland01",2;
 		cutin "bard_eland01",2;
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "Mr. Skezti has a small book store on the book street at the right side of Mineta in Juno. If you show him the seal, he'll help you out.";
 		mes "Mr. Skezti has a small book store on the book street at the right side of Mineta in Juno. If you show him the seal, he'll help you out.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 10) {
 	} else if (gef_bard_q == 10) {
 		cutin "bard_eland01",2;
 		cutin "bard_eland01",2;
@@ -199,7 +199,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "show him the Seal of Friendship.";
 		mes "show him the Seal of Friendship.";
 		mes "Good luck, now~";
 		mes "Good luck, now~";
 		set gef_bard_q,11;
 		set gef_bard_q,11;
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 20) {
 	} else if (gef_bard_q == 20) {
 		cutin "bard_eland03",2;
 		cutin "bard_eland03",2;
@@ -249,7 +249,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Waaah, wah~";
 			mes "Waaah, wah~";
 			mes "You can't just ignore me like that! Where's your sense of merriment, your sense of romance?";
 			mes "You can't just ignore me like that! Where's your sense of merriment, your sense of romance?";
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 27) {
 	} else if (gef_bard_q == 27) {
@@ -295,7 +295,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
 			mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
 			set gef_bard_q,22;
 			set gef_bard_q,22;
 		}
 		}
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 26) {
 	} else if (gef_bard_q == 26) {
 		cutin "bard_eland01",2;
 		cutin "bard_eland01",2;
@@ -349,17 +349,17 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "in advance~";
 				mes "in advance~";
 				set gef_bard_q,24;
 				set gef_bard_q,24;
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther") {
 		} else if (.@inputstr$ == "Gunther") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Errende") {
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			cutin "bard_eland04",2;
@@ -368,7 +368,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "If I did, why would";
 			mes "If I did, why would";
 			mes "I not know what";
 			mes "I not know what";
 			mes "this song is about?";
 			mes "this song is about?";
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			mes "[Errende]";
 			mes "[Errende]";
@@ -381,7 +381,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "How could I forget";
 			mes "the 8th love?";
 			mes "the 8th love?";
 			set gef_bard_q,26;
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 25) {
 	} else if (gef_bard_q == 25) {
@@ -427,7 +427,7 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "heart wrenching song.";
 				mes "heart wrenching song.";
 				mes "But at what cost to your soul?^000000";
 				mes "But at what cost to your soul?^000000";
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			cutin "bard_eland01",2;
 			cutin "bard_eland01",2;
@@ -438,7 +438,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "Noboooody looooves meee";
 			mes "Noboooody looooves meee";
 			mes "Friends foooooor never...";
 			mes "Friends foooooor never...";
 			mes "Ooooooooh wah!^000000";
 			mes "Ooooooooh wah!^000000";
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 24) {
 	} else if (gef_bard_q == 24) {
@@ -464,7 +464,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "Once again,";
 		mes "Once again,";
 		mes "thank you so much";
 		mes "thank you so much";
 		mes "for your help.";
 		mes "for your help.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 22) {
 	} else if (gef_bard_q == 22) {
 		mes "[Errende]";
 		mes "[Errende]";
@@ -480,7 +480,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		next;
 		next;
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
 		mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 23) {
 	} else if (gef_bard_q == 23) {
 		cutin "bard_eland02",2;
 		cutin "bard_eland02",2;
@@ -570,19 +570,19 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "in advance~";
 				mes "in advance~";
 				set gef_bard_q,24;
 				set gef_bard_q,24;
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther") {
 		} else if (.@inputstr$ == "Gunther") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			set gef_bard_q,26;
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			set gef_bard_q,26;
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Errende") {
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			cutin "bard_eland04",2;
@@ -592,7 +592,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "I not know what this";
 			mes "I not know what this";
 			mes "song is about?";
 			mes "song is about?";
 			set gef_bard_q,26;
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			mes "[Errende]";
 			mes "[Errende]";
@@ -605,7 +605,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "How could I forget";
 			mes "the 8th love?";
 			mes "the 8th love?";
 			set gef_bard_q,26;
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 21) {
 	} else if (gef_bard_q == 21) {
@@ -655,7 +655,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
 			mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
 			set gef_bard_q,2;
 			set gef_bard_q,2;
 		}
 		}
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 6) {
 	} else if (gef_bard_q == 6) {
 		cutin "bard_eland04",2;
 		cutin "bard_eland04",2;
@@ -699,23 +699,23 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "I'll pay you back somehow! Thank you for your trouble in advance~";
 				mes "I'll pay you back somehow! Thank you for your trouble in advance~";
 				set gef_bard_q,4;
 				set gef_bard_q,4;
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther") {
 		} else if (.@inputstr$ == "Gunther") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Errende") {
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			cutin "bard_eland04",2;
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			mes "[Errende]";
 			mes "[Errende]";
@@ -727,7 +727,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "How could I forget";
 			mes "the 8th love?";
 			mes "the 8th love?";
 			set gef_bard_q,6;
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 5) {
 	} else if (gef_bard_q == 5) {
@@ -764,7 +764,7 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "heart wrenching song.";
 				mes "heart wrenching song.";
 				mes "But at what cost to your soul?^000000";
 				mes "But at what cost to your soul?^000000";
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			cutin "bard_eland01",2;
 			cutin "bard_eland01",2;
@@ -775,7 +775,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "Noboooody looooves meee";
 			mes "Noboooody looooves meee";
 			mes "Friends foooooor never...";
 			mes "Friends foooooor never...";
 			mes "Ooooooooooh wah!^000000";
 			mes "Ooooooooooh wah!^000000";
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 4) {
 	} else if (gef_bard_q == 4) {
@@ -800,7 +800,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "Once again,";
 		mes "Once again,";
 		mes "thank you so much";
 		mes "thank you so much";
 		mes "for your help.";
 		mes "for your help.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 2) {
 	} else if (gef_bard_q == 2) {
 		cutin "bard_eland04",2;
 		cutin "bard_eland04",2;
@@ -813,7 +813,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		next;
 		next;
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
 		mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
-		goto L_End;
+		close3;
 
 
 	} else if (gef_bard_q == 3) {
 	} else if (gef_bard_q == 3) {
 		cutin "bard_eland02",2;
 		cutin "bard_eland02",2;
@@ -898,27 +898,27 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "I'll pay you back somehow! Thank you for your trouble in advance~";
 				mes "I'll pay you back somehow! Thank you for your trouble in advance~";
 				set gef_bard_q,4;
 				set gef_bard_q,4;
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Gunther") {
 		} else if (.@inputstr$ == "Gunther") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			set gef_bard_q,6;
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 		}
 
 
 		else if (.@inputstr$ == "Gunther Doubleharmony") {
 		else if (.@inputstr$ == "Gunther Doubleharmony") {
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
 			set gef_bard_q,6;
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 
 
 		} else if (.@inputstr$ == "Errende") {
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			cutin "bard_eland04",2;
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
 			set gef_bard_q,6;
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 
 
 		} else {
 		} else {
 			mes "[Errende]";
 			mes "[Errende]";
@@ -930,7 +930,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "How could I forget";
 			mes "the 8th love?";
 			mes "the 8th love?";
 			set gef_bard_q,6;
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 		}
 
 
 	} else if (gef_bard_q == 1) {
 	} else if (gef_bard_q == 1) {
@@ -993,11 +993,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		}
 		}
 
 
 	}
 	}
-
-L_End:
-	close2;
-	cutin "",255;
-	end;
+	close3;
 
 
 // SubRoutine for 5 similiar dialogues of the quest
 // SubRoutine for 5 similiar dialogues of the quest
 
 
@@ -1114,7 +1110,7 @@ S_StorySong:
 			mes "[Errende]";
 			mes "[Errende]";
 			mes "Oh, how disappointing. But promise me that you will drop by later, so that we can share stories and merriment.";
 			mes "Oh, how disappointing. But promise me that you will drop by later, so that we can share stories and merriment.";
 		}
 		}
-		goto L_End;
+		close3;
 
 
 	case 2:
 	case 2:
 		.@num = getarg(0);
 		.@num = getarg(0);
@@ -1149,7 +1145,7 @@ S_StorySong:
 				mes "My apologies,";
 				mes "My apologies,";
 				mes "But I cannot offer my services for free. Even a Bard needs zeny to live, wouldn't you agree?";
 				mes "But I cannot offer my services for free. Even a Bard needs zeny to live, wouldn't you agree?";
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		case 2:
 		case 2:
 			cutin "bard_eland03",2;
 			cutin "bard_eland03",2;
@@ -1218,7 +1214,7 @@ S_StorySong:
 					mes "may never know";
 					mes "may never know";
 					mes "with certainty.";
 					mes "with certainty.";
 				}
 				}
-				goto L_End;
+				close3;
 
 
 			} else if (.@random == 2) {
 			} else if (.@random == 2) {
 
 
@@ -1321,7 +1317,7 @@ S_StorySong:
 						if(gef_bard_q==1) set gef_bard_q,7;
 						if(gef_bard_q==1) set gef_bard_q,7;
 						if(gef_bard_q==21) set gef_bard_q,27;
 						if(gef_bard_q==21) set gef_bard_q,27;
 					}
 					}
-					goto L_End;
+					close3;
 
 
 				}
 				}
 				mes "^483D8BA good Bard sings";
 				mes "^483D8BA good Bard sings";
@@ -1345,7 +1341,7 @@ S_StorySong:
 				mes "[Errende]";
 				mes "[Errende]";
 				mes "H-how can you say such a thing, "+ @name$ +"? Have you ever been a Bard before? It's difficult to come up with fresh, original melodies!";
 				mes "H-how can you say such a thing, "+ @name$ +"? Have you ever been a Bard before? It's difficult to come up with fresh, original melodies!";
 			}
 			}
-			goto L_End;
+			close3;
 
 
 		case 3:
 		case 3:
 			cutin "bard_eland01",2;
 			cutin "bard_eland01",2;
@@ -1355,7 +1351,7 @@ S_StorySong:
 			mes "enjoyed when you";
 			mes "enjoyed when you";
 			mes "are in the mood for it.";
 			mes "are in the mood for it.";
 			mes "Please come again.";
 			mes "Please come again.";
-			goto L_End;
+			close3;
 
 
 		}
 		}
 
 
@@ -1364,7 +1360,7 @@ S_StorySong:
 		mes "[Errende]";
 		mes "[Errende]";
 		mes "Hmm~?";
 		mes "Hmm~?";
 		mes "Well, alright. Though, listening to a good story or cheerful song can really do you some good. Alright then, see you later.";
 		mes "Well, alright. Though, listening to a good story or cheerful song can really do you some good. Alright then, see you later.";
-		goto L_End;
+		close3;
 	}
 	}
 }
 }
 
 

+ 1 - 1
npc/quests/cooking_quest.txt

@@ -61,7 +61,7 @@
 			mes "cooking when Novices";
 			mes "cooking when Novices";
 			mes "like yourself are running";
 			mes "like yourself are running";
 			mes "around here like children.";
 			mes "around here like children.";
-			close;
+			close3;
 		}
 		}
 		cutin "orleans_1",0;
 		cutin "orleans_1",0;
 		mes "[Charles Orleans]";
 		mes "[Charles Orleans]";

+ 32 - 25
npc/re/quests/quests_brasilis.txt → npc/quests/quests_brasilis.txt

@@ -1,12 +1,6 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Brasilis Quests
 //= Brasilis Quests
-//===== By ===================================================
-//= L0ne_W0lf
-//===== Version ==============================================
-//= 1.3
-//===== Compatible With ======================================
-//= rAthena Project
-//===== Description ==========================================
+//===== Description: =========================================
 //= [Official Conversion]
 //= [Official Conversion]
 //= Lost Puppies (Repeatable, 24 hours.)
 //= Lost Puppies (Repeatable, 24 hours.)
 //= Suspicious Beach (Repeatable, 24 hours. iRO/cRO version.)
 //= Suspicious Beach (Repeatable, 24 hours. iRO/cRO version.)
@@ -14,13 +8,14 @@
 //= Brasilis Water Lily Quest
 //= Brasilis Water Lily Quest
 //= Brasilis Dungeon Access Quest
 //= Brasilis Dungeon Access Quest
 //= Iara (Buff reward. Repeatable, 24 hours.)
 //= Iara (Buff reward. Repeatable, 24 hours.)
-//===== Comments =============================================
-//= 1.0 First version.
-//= 1.1 Hydra Ball (12408)
+//===== Changelog: ===========================================
+//= 1.0 First version. [L0ne_W0lf]
+//= 1.1 Hydra Ball (12408). [og2]
 //= 1.2 Optimization. [Euphy]
 //= 1.2 Optimization. [Euphy]
 //= 1.2a Added 'consumeitem' command. [Euphy]
 //= 1.2a Added 'consumeitem' command. [Euphy]
 //= 1.3 Added VIP features and fixed some EXP values. [Euphy]
 //= 1.3 Added VIP features and fixed some EXP values. [Euphy]
 //= 1.3a Clean-up. [Capuche]
 //= 1.3a Clean-up. [Capuche]
+//= 1.4 Added pre-renewal differences [Daegaladh]
 //============================================================
 //============================================================
 
 
 // Lost Puppies :: dogdog.sc
 // Lost Puppies :: dogdog.sc
@@ -59,10 +54,12 @@ brasilis,297,307,5	script	Angelo#br	1_M_04,{
 		erasequest 9031;
 		erasequest 9031;
 		setquest 9032;
 		setquest 9032;
 		specialeffect2 EF_ASSUMPTIO;
 		specialeffect2 EF_ASSUMPTIO;
-		consumeitem 607; //Yggdrasilberry
-		.@rand = rand(1,10);
-		if (.@rand > 4 && .@rand < 9) getitem 504,2; //White_Potion
-		else if (.@rand > 8) getitem 608,1; //Seed_Of_Yggdrasil
+		if (checkre(0)) {
+			consumeitem 607; //Yggdrasilberry
+			.@rand = rand(1,10);
+			if (.@rand > 4 && .@rand < 9) getitem 504,2; //White_Potion
+			else if (.@rand > 8) getitem 608,1; //Seed_Of_Yggdrasil
+		}
 		close;
 		close;
 	}
 	}
 	mes "[Angelo]";
 	mes "[Angelo]";
@@ -229,11 +226,15 @@ brasilis,192,133,6	script	Lucia#brasilis	4_F_BRZ_WOMAN,{
 				//recall_completequest 9029;
 				//recall_completequest 9029;
 				if (.@nQState2 > -1) erasequest 9029;
 				if (.@nQState2 > -1) erasequest 9029;
 				setquest 9029;
 				setquest 9029;
-				consumeitem 607; //Yggdrasilberry
+				if (checkre(0))
+					consumeitem 607; //Yggdrasilberry
 				consumeitem 12070; //Luk_Dish05
 				consumeitem 12070; //Luk_Dish05
 				consumeitem 12055; //Vit_Dish05
 				consumeitem 12055; //Vit_Dish05
 				consumeitem 12065; //Dex_Dish05
 				consumeitem 12065; //Dex_Dish05
-				getitem 11502,3; //Light_Blue_Pot
+				if (checkre(0))
+					getitem 11502,3; //Light_Blue_Pot
+				else
+					getitem 505,5; //Blue_Potion
 				close;
 				close;
 			}
 			}
 			else {
 			else {
@@ -410,10 +411,12 @@ brasilis,187,162,5	script	Candy Maker	4_M_BRZ_MAN1,{
 		brazil_gua = 11;
 		brazil_gua = 11;
 		completequest 2200;
 		completequest 2200;
 		getitem 12414,1; //Guarana_Candy
 		getitem 12414,1; //Guarana_Candy
-		if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
-			getexp 105000,15000;
-		else
-			getexp 70000,10000;
+		if (checkre(0)) {
+			if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
+				getexp 105000,15000;
+			else
+				getexp 70000,10000;
+		}
 		close;
 		close;
 	}
 	}
 	else if (brazil_gua == 11) {
 	else if (brazil_gua == 11) {
@@ -1030,9 +1033,9 @@ brasilis,203,286,3	script	Botanist Karmen#bra	4_F_HUWOMAN,{
 		brazil_regia = 10;
 		brazil_regia = 10;
 		completequest 2207;
 		completequest 2207;
 		if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
 		if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
-			getexp 75000,15000;
+			getexp 75000, checkre(0)?15000:0;
 		else
 		else
-			getexp 50000,10000;
+			getexp 50000, checkre(0)?10000:0;
 		close;
 		close;
 	}
 	}
 	else {
 	else {
@@ -2855,9 +2858,13 @@ bra_dun02,157,74,5	script	Iara#nk	4_F_BRZ_WOMAN,2,2,{
 			mes "But... I think that the curse has been with me too long.";
 			mes "But... I think that the curse has been with me too long.";
 			mes "Get away from me quickly.";
 			mes "Get away from me quickly.";
 			delitem 11517,1; //Puri_Potion
 			delitem 11517,1; //Puri_Potion
-			percentheal 100,100;
-			sc_start SC_INCFLEE,3600000,20;
-			sc_start SC_INCCRI,3600000,10;
+			if (checkre(0)) {
+				percentheal 100,100;
+				sc_start SC_INCFLEE,3600000,20;
+				sc_start SC_INCCRI,3600000,10;
+			}
+			else
+				sc_start SC_INCCRI,3600000,7;
 			consumeitem 12043; //Str_Dish03
 			consumeitem 12043; //Str_Dish03
 			consumeitem 12063; //Dex_Dish03
 			consumeitem 12063; //Dex_Dish03
 			consumeitem 12058; //Agi_Dish03
 			consumeitem 12058; //Agi_Dish03

+ 27 - 31
npc/quests/quests_rachel.txt

@@ -3816,7 +3816,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "wouldn't come here to pray...";
 				mes "wouldn't come here to pray...";
 				mes "Well, I hope you enjoy your";
 				mes "Well, I hope you enjoy your";
 				mes "time here, adventurer.";
 				mes "time here, adventurer.";
-				goto L_End;
+				close3;
 			}
 			}
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
 			mes "Oh! I'm glad to see that";
 			mes "Oh! I'm glad to see that";
@@ -3869,7 +3869,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "all your journeys. May the";
 				mes "all your journeys. May the";
 				mes "grace of the goddess always";
 				mes "grace of the goddess always";
 				mes "support us in all that we do~";
 				mes "support us in all that we do~";
-				goto L_End;
+				close3;
 			}
 			}
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
 			mes "Great! How much would you";
 			mes "Great! How much would you";
@@ -3898,7 +3898,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "protecting you, wherever you go~";
 				mes "protecting you, wherever you go~";
 				break;
 				break;
 			}
 			}
-			goto L_End;
+			close3;
 		}
 		}
 		else {
 		else {
 			cutin "ra_nemma03",2;
 			cutin "ra_nemma03",2;
@@ -3939,7 +3939,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 					mes "protecting you, wherever you go~";
 					mes "protecting you, wherever you go~";
 					break;
 					break;
 				}
 				}
-				goto L_End;
+				close3;
 			case 2:
 			case 2:
 				mes "[Priestess Nemma]";
 				mes "[Priestess Nemma]";
 				mes "Oh! If you'd like some";
 				mes "Oh! If you'd like some";
@@ -3968,7 +3968,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "Oh, how sweet of you~";
 				mes "Oh, how sweet of you~";
 				break;
 				break;
 			}
 			}
-			goto L_End;
+			close3;
 		}
 		}
 	}
 	}
 	else {
 	else {
@@ -3976,7 +3976,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			cutin "ra_nemma01",2;
 			cutin "ra_nemma01",2;
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
 			mes "Welcome to our temple!";
 			mes "Welcome to our temple!";
-			goto L_End;
+			close3;
 		}
 		}
 		if (ra_tem_q < 1) {
 		if (ra_tem_q < 1) {
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
@@ -4009,7 +4009,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "to go inside. ^333333*Sob*^000000 P-Panno!";
 			mes "to go inside. ^333333*Sob*^000000 P-Panno!";
 			mes "Panno, I neeeed heeeeelp~!";
 			mes "Panno, I neeeed heeeeelp~!";
 			set ra_tem_q,1;
 			set ra_tem_q,1;
-			goto L_End;
+			close3;
 		}
 		}
 		else if ((ra_tem_q >= 1) && (ra_tem_q < 10)) {
 		else if ((ra_tem_q >= 1) && (ra_tem_q < 10)) {
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
@@ -4024,7 +4024,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "Panno would know";
 			mes "Panno would know";
 			mes "what to do... I think.";
 			mes "what to do... I think.";
 			mes "Ooh, Panno, help me!";
 			mes "Ooh, Panno, help me!";
-			goto L_End;
+			close3;
 		}
 		}
 		else if (ra_tem_q == 10) {
 		else if (ra_tem_q == 10) {
 			cutin "ra_nemma04",2;
 			cutin "ra_nemma04",2;
@@ -4050,7 +4050,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "I'm outside. What if";
 			mes "I'm outside. What if";
 			mes "the gate locks up again?";
 			mes "the gate locks up again?";
 			mes "Oooh, what should I do?!";
 			mes "Oooh, what should I do?!";
-			goto L_End;
+			close3;
 		}
 		}
 		else if (ra_tem_q == 11) {
 		else if (ra_tem_q == 11) {
 			emotion ET_DELIGHT;
 			emotion ET_DELIGHT;
@@ -4062,7 +4062,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "longer asking for donations,";
 			mes "longer asking for donations,";
 			mes "but you can still redeem your";
 			mes "but you can still redeem your";
 			mes "Lottery Tickets inside, okay?";
 			mes "Lottery Tickets inside, okay?";
-			goto L_End;
+			close3;
 		}
 		}
 		else if (ra_tem_q == 12) {
 		else if (ra_tem_q == 12) {
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
@@ -4089,7 +4089,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "like, ^FF000020 of them^000000! Thank";
 			mes "like, ^FF000020 of them^000000! Thank";
 			mes "you thank you thank you!";
 			mes "you thank you thank you!";
 			set ra_tem_q,13;
 			set ra_tem_q,13;
-			goto L_End;
+			close3;
 		}
 		}
 		else if (ra_tem_q == 13) {
 		else if (ra_tem_q == 13) {
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
@@ -4124,7 +4124,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 					mes "to play! Hm, maybe";
 					mes "to play! Hm, maybe";
 					mes "our pope would like";
 					mes "our pope would like";
 					mes "to see these too?";
 					mes "to see these too?";
-					goto L_End;
+					close3;
 				}
 				}
 				cutin "ra_nemma02",2;
 				cutin "ra_nemma02",2;
 				mes "[Priestess Nemma]";
 				mes "[Priestess Nemma]";
@@ -4143,20 +4143,16 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "have much to pay you";
 				mes "have much to pay you";
 				mes "back with, anyway~";
 				mes "back with, anyway~";
 			}
 			}
-			goto L_End;
+			close3;
 		}
 		}
 		else {
 		else {
 			cutin "ra_nemma01",2;
 			cutin "ra_nemma01",2;
 			mes "[Priestess Nemma]";
 			mes "[Priestess Nemma]";
 			mes "Welcome to our temple!";
 			mes "Welcome to our temple!";
 		}
 		}
-		goto L_End;
+		close3;
 	}
 	}
-
-L_End:
-	close2;
-	cutin "",255;
-	end;
+	close3;
 
 
 S_Donate:
 S_Donate:
 	.@num = getarg(0);
 	.@num = getarg(0);
@@ -6329,7 +6325,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "everything I know.";
 			mes "everything I know.";
 			mes "Remember to keep";
 			mes "Remember to keep";
 			mes "quiet about what I said.";
 			mes "quiet about what I said.";
-			goto L_End;
+			close3;
 		}
 		}
 	}
 	}
 	else if (ra_tem_q < 2) {
 	else if (ra_tem_q < 2) {
@@ -6358,7 +6354,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "time, so please visit";
 			mes "time, so please visit";
 			mes "me at your leisure.";
 			mes "me at your leisure.";
 			mes "Go with Freya.";
 			mes "Go with Freya.";
-			goto L_End;
+			close3;
 
 
 		case 2:
 		case 2:
 			cutin "ra_fano01",2;
 			cutin "ra_fano01",2;
@@ -6397,14 +6393,14 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "side of the hallway. However,";
 			mes "side of the hallway. However,";
 			mes "you can only enter if you've";
 			mes "you can only enter if you've";
 			mes "been permitted beforehand.";
 			mes "been permitted beforehand.";
-			goto L_End;
+			close3;
 
 
 		case 3:
 		case 3:
 			mes "[Priestess Panno]";
 			mes "[Priestess Panno]";
 			mes "......................";
 			mes "......................";
 			mes "No chit-chat";
 			mes "No chit-chat";
 			mes "inside the temple.";
 			mes "inside the temple.";
-			goto L_End;
+			close3;
 		}
 		}
 	}
 	}
 	else if (ra_tem_q == 10) {
 	else if (ra_tem_q == 10) {
@@ -6439,7 +6435,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "time, so please visit";
 			mes "time, so please visit";
 			mes "me at your leisure.";
 			mes "me at your leisure.";
 			mes "Go with Freya.";
 			mes "Go with Freya.";
-			goto L_End;
+			close3;
 
 
 		case 2:
 		case 2:
 			cutin "ra_fano01",2;
 			cutin "ra_fano01",2;
@@ -6478,7 +6474,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "side of the hallway. However,";
 			mes "side of the hallway. However,";
 			mes "you can only enter if you've";
 			mes "you can only enter if you've";
 			mes "been permitted beforehand.";
 			mes "been permitted beforehand.";
-			goto L_End;
+			close3;
 
 
 		case 3:
 		case 3:
 			cutin "ra_fano02",2;
 			cutin "ra_fano02",2;
@@ -6525,7 +6521,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "[Priestess Panno]";
 			mes "[Priestess Panno]";
 			mes ".........";
 			mes ".........";
 			set ra_tem_q,11;
 			set ra_tem_q,11;
-			goto L_End;
+			close3;
 		}
 		}
 	}
 	}
 	else if (ra_tem_q == 11) {
 	else if (ra_tem_q == 11) {
@@ -6660,7 +6656,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 		mes "Excuse me now, I need";
 		mes "Excuse me now, I need";
 		mes "to get back to work.";
 		mes "to get back to work.";
 		set ra_tem_q,12;
 		set ra_tem_q,12;
-		goto L_End;
+		close3;
 	}
 	}
 	cutin "ra_fano02",2;
 	cutin "ra_fano02",2;
 	mes "[Priestess Panno]";
 	mes "[Priestess Panno]";
@@ -6668,7 +6664,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 	mes "Behave yourself, and";
 	mes "Behave yourself, and";
 	mes "respect those who have";
 	mes "respect those who have";
 	mes "come here just to worship.";
 	mes "come here just to worship.";
-	goto L_End;
+	close3;
 
 
 L_Lottery:
 L_Lottery:
 	if(checkweight(607,1) == 0){
 	if(checkweight(607,1) == 0){
@@ -6680,7 +6676,7 @@ L_Lottery:
 		mes "something large, unwieldy";
 		mes "something large, unwieldy";
 		mes "and heavy? Put your junk";
 		mes "and heavy? Put your junk";
 		mes "away in Storage first.";
 		mes "away in Storage first.";
-		goto L_End;
+		close3;
 	}
 	}
 	mes "[Priestess Panno]";
 	mes "[Priestess Panno]";
 	mes "Here we go";
 	mes "Here we go";
@@ -6716,7 +6712,7 @@ L_Lottery:
 		else if (.@bonus_donate > 5 && .@bonus_donate < 11) getitem 518,1;	//Honey 5%
 		else if (.@bonus_donate > 5 && .@bonus_donate < 11) getitem 518,1;	//Honey 5%
 		else if (.@bonus_donate > 0 && .@bonus_donate < 6) getitem 526,1;	//Royal Jelly 5%
 		else if (.@bonus_donate > 0 && .@bonus_donate < 6) getitem 526,1;	//Royal Jelly 5%
 		else getitem 547,1; //Condensed White Potion 39%
 		else getitem 547,1; //Condensed White Potion 39%
-		goto L_End;
+		close3;
 	}
 	}
 	mes "[Priestess Panno]";
 	mes "[Priestess Panno]";
 	mes "You...";
 	mes "You...";
@@ -6736,7 +6732,7 @@ L_Lottery:
 	cutin "ra_fano03",2;
 	cutin "ra_fano03",2;
 	mes "[Priestess Panno]";
 	mes "[Priestess Panno]";
 	mes "May Freya be with you.";
 	mes "May Freya be with you.";
-	goto L_End;
+	close3;
 
 
 L_End:
 L_End:
 	close2;
 	close2;

+ 1 - 1
npc/quests/seals/mjolnir_seal.txt

@@ -284,7 +284,7 @@ prontera,124,297,3	script	Tialfi	706,{
 				next;
 				next;
 				mes "[Tialfi]";
 				mes "[Tialfi]";
 				mes "I think we'd better wait and see what's happening. Someone will deliver the news to us. Though, I am unsure of whether or not it will be good news or bad...";
 				mes "I think we'd better wait and see what's happening. Someone will deliver the news to us. Though, I am unsure of whether or not it will be good news or bad...";
-				close;
+				close3;
 			}
 			}
 			else if (BaseLevel < 70) {
 			else if (BaseLevel < 70) {
 				cutin "god_tialpi02",2;
 				cutin "god_tialpi02",2;

+ 1 - 3
npc/quests/the_sign_quest.txt

@@ -3093,13 +3093,11 @@ OnTouch_:
 	end;
 	end;
 }
 }
 
 
-/* Currently broken.
 prt_maze02,25,161,0	script	#music	-1,7,7,{
 prt_maze02,25,161,0	script	#music	-1,7,7,{
 OnTouch_:
 OnTouch_:
-	soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
+	soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
 	end;
 	end;
 }
 }
-*/
 
 
 prt_maze02,132,132,0	script	#skill	-1,{
 prt_maze02,132,132,0	script	#skill	-1,{
 OnEnable:
 OnEnable:

+ 4 - 0
npc/re/cities/alberta.txt

@@ -21,6 +21,10 @@ alberta,246,74,3	duplicate(Sea_Captain_amatsu)	Sea Captain#ama1	709
 //============================================================
 //============================================================
 alberta,246,29,3	duplicate(Aibakthing_ayothaya)	Aibakthing#ayo	843
 alberta,246,29,3	duplicate(Aibakthing_ayothaya)	Aibakthing#ayo	843
 
 
+// cities/brasilis.txt
+//============================================================
+alberta,246,82,3	duplicate(Crewman_bra2)	Crewman#bra2	100
+
 // cities/gonryun.txt
 // cities/gonryun.txt
 //============================================================
 //============================================================
 alberta,246,62,3	duplicate(Kunlun_Envoy_gonryun)	Kunlun Envoy#gon	776
 alberta,246,62,3	duplicate(Kunlun_Envoy_gonryun)	Kunlun Envoy#gon	776

+ 3 - 3
npc/re/cities/dicastes.txt

@@ -84,8 +84,8 @@ dicastes01,234,158,0	script	Training Galten#a	450,{
 		mes "if I keep up with my training every day.";
 		mes "if I keep up with my training every day.";
 		close;
 		close;
 	}
 	}
-	mes "ø¡ô¡ü ¡¡ø¡ô¡ü ¡ø";
-	mes "ô ¡ø";
+	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü ¡ø";
+	mes "¡ô ¡ø";
 	next;
 	next;
 	mes "Don't know what it means.";
 	mes "Don't know what it means.";
 	close;
 	close;
@@ -130,7 +130,7 @@ dicastes01,248,129,0	script	Training Galten#d	450,{
 		close; 
 		close; 
 	}
 	}
 	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü";
 	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü";
-	mes "¡ø¡ô¡ü ¡ø¡ ø¡ô¡ü ¡ø";
+	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü ¡ø";
 	next;
 	next;
 	mes "Don't know what it means.";
 	mes "Don't know what it means.";
 	close;
 	close;

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

@@ -323,7 +323,7 @@ lasa_fild01,60,322,3	script	Vigilante Aglio#doram02	4_DR_AGLIO,{
 				cutin "tutorial02.BMP",4;
 				cutin "tutorial02.BMP",4;
 				mes "^4d4dff!- Notice -!^000000";
 				mes "^4d4dff!- Notice -!^000000";
 				mes "^4d4dffCheck out the quest details by pressing the shortcut key [Alt+U],^000000 or through the Quest icon found in the menu tray.^000000";
 				mes "^4d4dffCheck out the quest details by pressing the shortcut key [Alt+U],^000000 or through the Quest icon found in the menu tray.^000000";
-				close;
+				close3;
 			}
 			}
 			mes "[Vigilante Aglio]";
 			mes "[Vigilante Aglio]";
 			mes "Whoa, you're good!";
 			mes "Whoa, you're good!";

+ 0 - 45
npc/re/custom/lasagna/warps.txt

@@ -1,45 +0,0 @@
-//===== rAthena Script =======================================
-//= Lasagna Warps
-//===== Changelogs: ==========================================
-//= 1.0 First Version. [Capuche]
-//============================================================
-
-lasa_fild02,348,244,0	warp	lasa_fild02#lasa_dun01	1,1,lasa_dun01,24,143
-lasa_dun01,18,143,0	warp	lasa_dun01#lasa_fild02	1,1,lasa_fild02,344,243
-
-lasa_dun_q,190,14,0	warp	lasa_dun_q#lasa_dun01	1,1,lasa_dun01,152,98
-lasa_dun01,157,98,0	warp	lasa_dun01#lasa_dun02	1,1,lasa_dun02,22,171
-lasa_dun02,18,171,0	warp	lasa_dun02#lasa_dun01	1,1,lasa_dun01,153,98
-
-lasa_dun02,146,58,0	warp	lasa_dun02#lasa_dun03	1,1,lasa_dun03,190,18
-lasa_dun03,190,15,0	warp	lasa_dun03#lasa_dun02	1,1,lasa_dun02,146,54
-
-lasa_fild01,134,381,0	warp	lasa_fild01#lasagna_1	2,2,lasagna,153,58
-lasagna,150,54,0	warp	lasagna#lasa_fild01_1	2,2,lasa_fild01,131,378
-
-lasa_fild01,341,375,0	warp	lasa_fild01#lasagna_2	2,2,lasagna,327,56
-lasagna,327,51,0	warp	lasagna#lasa_fild01_2	2,2,lasa_fild01,344,371
-
-lasagna,358,91,0	warp	lasagna#lasa_fild02	2,2,lasa_fild02,20,98
-lasa_fild02,16,98,0	warp	lasa_fild02#lasagna	2,2,lasagna,355,92
-
-lasa_in01,159,61,0	warp	lasa_in01#lasagna	1,1,lasagna,68,202
-
-// Boat
-conch_in,60,61,0	warp2	warp_conch_in#out	1,1,lasagna,206,323
-conch_in,51,60,0	warp2	warp_conch_in#A_B	1,1,conch_in,31,60
-conch_in,34,60,0	warp2	warp_conch_in#B_A	1,1,conch_in,53,59
-conch_in,63,53,0	warp2	warp_conch_in#C_D	1,1,conch_in,63,33
-conch_in,63,35,0	warp2	warp_conch_in#D_C	1,1,conch_in,64,55
-conch_in,64,66,0	warp2	warp_conch_in#E_F	1,1,conch_in,63,89
-conch_in,63,87,0	warp2	warp_conch_in#F_E	1,1,conch_in,63,64
-conch_in,101,53,0	warp2	warp_conch_in#G_H	1,1,conch_in,101,33
-conch_in,101,35,0	warp2	warp_conch_in#H_G	1,1,conch_in,102,55
-conch_in,101,66,0	warp2	warp_conch_in#I_J	1,1,conch_in,101,89
-conch_in,102,87,0	warp2	warp_conch_in#J_I	1,1,conch_in,101,64
-conch_in,137,53,0	warp2	warp_conch_in#K_L	1,1,conch_in,139,33
-conch_in,139,35,0	warp2	warp_conch_in#L_K	1,1,conch_in,138,55
-conch_in,137,66,0	warp2	warp_conch_in#M_N	1,1,conch_in,139,89
-conch_in,140,87,0	warp2	warp_conch_in#N_M	1,1,conch_in,137,64
-conch_in,142,60,0	warp2	warp_conch_in#O_P	1,1,conch_in,162,61
-conch_in,159,61,0	warp2	warp_conch_in#P_O	1,1,conch_in,140,59

+ 8 - 13
npc/re/guides/guides_brasilis.txt

@@ -1,19 +1,13 @@
-//===== rAthena Script ======================================= 
+//===== rAthena Script =======================================
 //= Brasilis Guide
 //= Brasilis Guide
-//===== By: ================================================== 
-//= L0ne_W0lf
-//===== Current Version: ===================================== 
-//= 1.2
-//===== Compatible With: ===================================== 
-//= rAthena Project
-//===== Description: ========================================= 
-//= [Official Conversion]
+//===== Description: =========================================
+//= [Official Conversion based on bRO & jRO servers]
 //= Guide for the city of Brasilis.
 //= Guide for the city of Brasilis.
-//===== Additional Comments: ================================= 
-//= 1.0 First Version, Renewal guide.
-//= 1.1 Added a missing close.
+//===== Changelog: ===========================================
+//= 1.0 First Version, Renewal guide. [L0ne_W0lf]
+//= 1.1 Added a missing close. [L0ne_W0lf]
 //= 1.2 Navigation system update. [Euphy]
 //= 1.2 Navigation system update. [Euphy]
-//============================================================ 
+//============================================================
 
 
 brasilis,219,97,3	script	Brasilis Guide	478,{
 brasilis,219,97,3	script	Brasilis Guide	478,{
 	mes "[Brasilis Guide]";
 	mes "[Brasilis Guide]";
@@ -59,6 +53,7 @@ brasilis,219,97,3	script	Brasilis Guide	478,{
 			viewpoint 1,195,235,6,0x3355FF;
 			viewpoint 1,195,235,6,0x3355FF;
 			close;
 			close;
 		}
 		}
+		end;
 	case 2:
 	case 2:
 		mes "[Brasilis Guide]";
 		mes "[Brasilis Guide]";
 		mes "I'll remove all marks from your mini-map.";
 		mes "I'll remove all marks from your mini-map.";

+ 1 - 1
npc/re/guild3/agit_main_te.txt

@@ -438,7 +438,7 @@ function GuardianData;
 			if (select( "Fire","Cancel" ) == 2) {
 			if (select( "Fire","Cancel" ) == 2) {
 				mes "[ Hired Kafra Employee ]";
 				mes "[ Hired Kafra Employee ]";
 				mes "I'll work hard for you... Thank you!";
 				mes "I'll work hard for you... Thank you!";
-				close;
+				close3;
 			}
 			}
 			mes "[ Hired Kafra Employee ]";
 			mes "[ Hired Kafra Employee ]";
 			mes "Oh, my goodness! This is nonsense!";
 			mes "Oh, my goodness! This is nonsense!";

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

@@ -727,11 +727,11 @@ OnTimer300:
 }
 }
 
 
 1@mcd,141,214,5	script	Charleston 2#1	4_F_CHARLESTON02,{
 1@mcd,141,214,5	script	Charleston 2#1	4_F_CHARLESTON02,{
-	cutin "dalle01.bmp",2;
 	if (is_party_leader() == false) {
 	if (is_party_leader() == false) {
+		cutin "dalle01.bmp",2;
 		mes "[Charleston 1]";
 		mes "[Charleston 1]";
 		mes "Please let me talk to your leader about the supplementation of the factory.";
 		mes "Please let me talk to your leader about the supplementation of the factory.";
-		close;
+		close3;
 	}
 	}
 	if ('ep15_1_mcd01 > 11)
 	if ('ep15_1_mcd01 > 11)
 		end;
 		end;

+ 70 - 23
npc/re/instances/OldGlastHeim.txt

@@ -163,7 +163,7 @@ glast_01,204,273,5	script	Hugin	4_M_SAGE_C,{
 1@gl_k,206,79,0	warp	#3Control2	2,2,1@gl_k,195,79
 1@gl_k,206,79,0	warp	#3Control2	2,2,1@gl_k,195,79
 1@gl_k,227,216,0	warp	#4Control	2,2,1@gl_k,215,216
 1@gl_k,227,216,0	warp	#4Control	2,2,1@gl_k,215,216
 1@gl_k,222,216,0	warp	#4Control2	2,2,1@gl_k,233,216
 1@gl_k,222,216,0	warp	#4Control2	2,2,1@gl_k,233,216
-1@gl_k,150,284,0	warp	#2F Entrance	2,2,2@gl_k,150,46
+// 1@gl_k,150,284,0	warp	#2F Entrance	2,2,2@gl_k,150,46
 2@gl_k,149,32,0	warp	#1 Control	2,2,1@gl_k,150,270
 2@gl_k,149,32,0	warp	#1 Control	2,2,1@gl_k,150,270
 2@gl_k,145,123,0	warp	#22 Control	2,2,2@gl_k,126,123
 2@gl_k,145,123,0	warp	#22 Control	2,2,2@gl_k,126,123
 2@gl_k,136,122,0	warp	#22 Control2	2,2,2@gl_k,150,116
 2@gl_k,136,122,0	warp	#22 Control2	2,2,2@gl_k,150,116
@@ -188,8 +188,8 @@ glast_01,204,273,5	script	Hugin	4_M_SAGE_C,{
 		next;
 		next;
 		if (select( "Omit moderately.", "Appreciate everything." ) == 1) {
 		if (select( "Omit moderately.", "Appreciate everything." ) == 1) {
 			cutin "GL_BARMUND1.bmp",2;
 			cutin "GL_BARMUND1.bmp",2;
-			mes "[Barmund]";
-			mes "Have I seen you " + strcharinfo(0) + "";
+			mes "[Varmundt]";
+			mes "I've seen you, " + strcharinfo(0) + ".";
 			mes "I'm sure I can trust you. Let's leave right away.";
 			mes "I'm sure I can trust you. Let's leave right away.";
 			close2;
 			close2;
 			cutin "",255;
 			cutin "",255;
@@ -1073,8 +1073,13 @@ OnTimer5000:
 	close3;
 	close3;
 }
 }
 
 
-// note: never hidden
 1@gl_k,156,258,3	script	Varmundt#2	4_M_BARMUND,{
 1@gl_k,156,258,3	script	Varmundt#2	4_M_BARMUND,{
+	if ('step < 6)
+		end;
+	if (checkweight(6607,1, 6608,1) == 0) {
+		mes "^ff0000It seems like you have too many types or weights of items. Please organize your inventory.^000000";
+		close;
+	}
 	cutin "gl_barmund1",2;
 	cutin "gl_barmund1",2;
 	mes "[Varmundt]";
 	mes "[Varmundt]";
 	if (checkquest(12318,HUNTING) != 2) {
 	if (checkquest(12318,HUNTING) != 2) {
@@ -1216,10 +1221,24 @@ OnMyMobDead:
 		enablenpc instance_npcname("Varmundt#21");
 		enablenpc instance_npcname("Varmundt#21");
 		donpcevent instance_npcname("#ghmemorialmob05") + "::OnStart";
 		donpcevent instance_npcname("#ghmemorialmob05") + "::OnStart";
 		disablenpc instance_npcname("#ghmemorialmob04");
 		disablenpc instance_npcname("#ghmemorialmob04");
+		'step = 6;
 	}
 	}
 	end;
 	end;
 }
 }
 
 
+1@gl_k,150,284,0	script	#2F Entrance	WARPNPC,2,2,{
+	end;
+OnTouch:
+	if (checkquest(12318,HUNTING) == 2) {
+		mes "^0000ffIt seems that you did not receive a reward for clearing the first floor. Talk to Varmundt and receive your reward.^000000";
+		close2;
+		warp 'map_name$[0],156,256;
+		end;
+	}
+	warp 'map_name$[1],150,46;
+	end;
+}
+
 // Floor 2
 // Floor 2
 //============================================================
 //============================================================
 2@gl_k,148,67,1	script	Heinrich#21	4_M_HEINRICH,{
 2@gl_k,148,67,1	script	Heinrich#21	4_M_HEINRICH,{
@@ -1246,9 +1265,9 @@ OnEffect:
 2@gl_k,150,66,0	script	#Servanton	HIDDEN_WARP_NPC,7,7,{
 2@gl_k,150,66,0	script	#Servanton	HIDDEN_WARP_NPC,7,7,{
 	end;
 	end;
 OnTouch_:
 OnTouch_:
-	if ('step != 5)
+	if ('step != 6)
 		end;
 		end;
-	'step = 6;
+	'step = 7;
 	disablenpc();
 	disablenpc();
 	if ('mode == 1)
 	if ('mode == 1)
 		donpcevent instance_npcname("#talkinstance5") + "::OnStart";
 		donpcevent instance_npcname("#talkinstance5") + "::OnStart";
@@ -1372,16 +1391,18 @@ OnTouch_:
 	disablenpc();
 	disablenpc();
 	.@hidden_name$ = strnpcinfo(2);
 	.@hidden_name$ = strnpcinfo(2);
 	.@event_type = atoi( charat(.@hidden_name$,4) );
 	.@event_type = atoi( charat(.@hidden_name$,4) );
+	.@event_number = atoi( charat(.@hidden_name$,6) );
 	if (.@event_type == 2)
 	if (.@event_type == 2)
-		.@label$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
+		.@event$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead" + .@event_number;	// left side
 	else
 	else
-		.@label$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
+		.@event$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead" + .@event_number;	// right side
+	killmonster 'map_name$[1], .@event$;
 	getmapxy .@map$,.@x,.@y, BL_NPC;
 	getmapxy .@map$,.@x,.@y, BL_NPC;
-	monster .@map$,.@x,.@y, "Corrupted Palace Guard", 2468,1, .@label$;
-	monster .@map$,.@x,.@y, "Archer of Death", 2469,1, .@label$;
-	monster .@map$,.@x,.@y, "Corrupted Abysmal Knight", 2470,1, .@label$;
-	monster .@map$,.@x,.@y, "Suffered Khalitzburg", 2471,1, .@label$;
-	monster .@map$,.@x,.@y, "Bloody Knight", 2472,1, .@label$;
+	monster .@map$,.@x,.@y, "Corrupted Palace Guard", 2468,1, .@event$;
+	monster .@map$,.@x,.@y, "Archer of Death", 2469,1, .@event$;
+	monster .@map$,.@x,.@y, "Corrupted Abysmal Knight", 2470,1, .@event$;
+	monster .@map$,.@x,.@y, "Suffered Khalitzburg", 2471,1, .@event$;
+	monster .@map$,.@x,.@y, "Bloody Knight", 2472,1, .@event$;
 	initnpctimer;
 	initnpctimer;
 	end;
 	end;
 OnTimer30000:
 OnTimer30000:
@@ -1417,7 +1438,13 @@ OnStart:
 		enablenpc instance_npcname("#ogh_2-" + .@i);
 		enablenpc instance_npcname("#ogh_2-" + .@i);
 	end;
 	end;
 
 
-OnMyMobDead:
+OnMyMobDead1:
+OnMyMobDead2:
+OnMyMobDead3:
+OnMyMobDead4:
+OnMyMobDead5:
+OnMyMobDead6:
+OnMyMobDead7:
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 		end;
 		end;
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
@@ -1445,7 +1472,9 @@ OnBossDead:
 	for ( .@i = 1; .@i <= 7; .@i++ )
 	for ( .@i = 1; .@i <= 7; .@i++ )
 		donpcevent instance_npcname("#ogh_2-" + .@i) + "::OnStop";
 		donpcevent instance_npcname("#ogh_2-" + .@i) + "::OnStop";
 
 
-	killmonster 'map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
+	.@npc_name$ = instance_npcname("#ghmemorialmob05");
+	for ( .@i = 1; .@i <= 7; .@i++ )
+		killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead" + .@i;
 	end;
 	end;
 }
 }
 
 
@@ -1506,6 +1535,13 @@ OnStart:
 	end;
 	end;
 
 
 OnMyMobDead:
 OnMyMobDead:
+OnMyMobDead1:
+OnMyMobDead2:
+OnMyMobDead3:
+OnMyMobDead4:
+OnMyMobDead5:
+OnMyMobDead6:
+OnMyMobDead7:
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 		end;
 		end;
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
@@ -1535,7 +1571,10 @@ OnBossDead:
 	for ( .@i = 1; .@i <= 7; .@i++ )
 	for ( .@i = 1; .@i <= 7; .@i++ )
 		donpcevent instance_npcname("#ogh_3-" + .@i) + "::OnStop";
 		donpcevent instance_npcname("#ogh_3-" + .@i) + "::OnStop";
 
 
-	killmonster 'map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
+	.@npc_name$ = instance_npcname("#ghmemorialmob06");
+	killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead";
+	for ( .@i = 1; .@i <= 7; .@i++ )
+		killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead" + .@i;
 
 
 	// Hidden mobs
 	// Hidden mobs
 	setarray .@coord[0],
 	setarray .@coord[0],
@@ -1552,9 +1591,9 @@ OnBossDead:
 2@gl_k,150,180,0	script	#Geron	HIDDEN_WARP_NPC,7,7,{
 2@gl_k,150,180,0	script	#Geron	HIDDEN_WARP_NPC,7,7,{
 	end;
 	end;
 OnTouch_:
 OnTouch_:
-	if ('step != 6)
+	if ('step != 7)
 		end;
 		end;
-	'step = 7;
+	'step = 8;
 	disablenpc instance_npcname("#Geron");
 	disablenpc instance_npcname("#Geron");
 	mapannounce 'map_name$[1], "???: Do not come here! It's a trap... Kkkkah!!!", bc_map,0xFF7777,FW_NORMAL,15;
 	mapannounce 'map_name$[1], "???: Do not come here! It's a trap... Kkkkah!!!", bc_map,0xFF7777,FW_NORMAL,15;
 	enablenpc instance_npcname("Himelmez#22");
 	enablenpc instance_npcname("Himelmez#22");
@@ -1574,15 +1613,19 @@ OnTouch_:
 	else if (.@i == 3) .@mobs = 5;
 	else if (.@i == 3) .@mobs = 5;
 	else if (.@i < 7) .@mobs = 6;
 	else if (.@i < 7) .@mobs = 6;
 	else .@mobs = 7;
 	else .@mobs = 7;
+	.@event$ = instance_npcname( strnpcinfo(0) ) + "::OnMobDead";
+	killmonster 'map_name$[1], .@event$;
 	getmapxy .@map$,.@x,.@y, BL_NPC;
 	getmapxy .@map$,.@x,.@y, BL_NPC;
 	specialeffect EF_VENOMDUST;
 	specialeffect EF_VENOMDUST;
-	monster .@map$,.@x,.@y,"Maggot",2467,.@mobs;
+	monster .@map$,.@x,.@y,"Maggot",2467,.@mobs, .@event$;
 	initnpctimer;
 	initnpctimer;
 	end;
 	end;
 OnTimer45000:
 OnTimer45000:
 	enablenpc();
 	enablenpc();
 	stopnpctimer;
 	stopnpctimer;
 	end;
 	end;
+OnMobDead:
+	end;
 }
 }
 2@gl_k,145,236,4	duplicate(Decomposed body#1)	Decomposed body#2	4_M_DIEMAN,5,5
 2@gl_k,145,236,4	duplicate(Decomposed body#1)	Decomposed body#2	4_M_DIEMAN,5,5
 2@gl_k,141,222,2	duplicate(Decomposed body#1)	Decomposed body#3	4_M_DIEMAN,5,5
 2@gl_k,141,222,2	duplicate(Decomposed body#1)	Decomposed body#3	4_M_DIEMAN,5,5
@@ -1646,9 +1689,9 @@ OnTimer45000:
 	mes "That is amazing ~ you made it all the way here. May I say thank you?";
 	mes "That is amazing ~ you made it all the way here. May I say thank you?";
 	close3;
 	close3;
 OnTouch_:
 OnTouch_:
-	if ('step != 7)
+	if ('step != 8)
 		end;
 		end;
-	'step = 8;
+	'step = 9;
 	disablenpc();
 	disablenpc();
 	if ('mode == 1)
 	if ('mode == 1)
 		donpcevent instance_npcname("#talkinstance7") + "::OnStart";
 		donpcevent instance_npcname("#talkinstance7") + "::OnStart";
@@ -1972,9 +2015,13 @@ OnTimer10000:
 
 
 
 
 2@gl_k,158,241,1	script	Hugin#21	4_M_SAGE_C,{
 2@gl_k,158,241,1	script	Hugin#21	4_M_SAGE_C,{
-	if ('step != 8)
+	if ('step != 9)
 		end;
 		end;
 	if (checkquest(12319,HUNTING) == 2) {// note: complete hunting 'Corrupted Soul Hunt' prerequis
 	if (checkquest(12319,HUNTING) == 2) {// note: complete hunting 'Corrupted Soul Hunt' prerequis
+		if (checkweight(6607,5, 6608,5) == 0) {
+			mes "^ff0000It seems like you have too many types or weights of items. Please organize your inventory.^000000";
+			close;
+		}
 		mes "[Hugin]";
 		mes "[Hugin]";
 		mes "Hm, you are very well. First of all, let me give you some loot from Amdarais.";
 		mes "Hm, you are very well. First of all, let me give you some loot from Amdarais.";
 		erasequest 12319;
 		erasequest 12319;
@@ -2031,7 +2078,7 @@ OnTimer10000:
 // Treasure Room
 // Treasure Room
 //============================================================
 //============================================================
 1@gl_k,165,136,3	script	Strange crack#2	CLEAR_NPC,{
 1@gl_k,165,136,3	script	Strange crack#2	CLEAR_NPC,{
-	if ('step != 8)
+	if ('step != 9)
 		end;
 		end;
 	if (isbegin_quest(12322) == 0) {// Space Distortion
 	if (isbegin_quest(12322) == 0) {// Space Distortion
 		mes "The crack looks suspicious but nothing more to check.";
 		mes "The crack looks suspicious but nothing more to check.";

+ 8 - 3
npc/re/instances/SealedOs.txt

@@ -263,7 +263,6 @@ OnTouch:
 1@os_b,137,139,0	duplicate(Thick Wire#171_os_0)	Thick Wire#171_os_2	4_ENERGY_BLUE
 1@os_b,137,139,0	duplicate(Thick Wire#171_os_0)	Thick Wire#171_os_2	4_ENERGY_BLUE
 
 
 1@os_b,122,212,5	script	Dien#171_os_3	4_F_DIENE,{
 1@os_b,122,212,5	script	Dien#171_os_3	4_F_DIENE,{
-OnTalk:
 	cutin "ep162_dn01",2;
 	cutin "ep162_dn01",2;
 	mes "[Dien]";
 	mes "[Dien]";
 	mes "Oh!";
 	mes "Oh!";
@@ -281,8 +280,14 @@ OnTalk:
 	mes "It will take some time to break it~";
 	mes "It will take some time to break it~";
 	npctalk "Cotnes : Oh, is this gate too hard? It will take some time to break it.";
 	npctalk "Cotnes : Oh, is this gate too hard? It will take some time to break it.";
 	next;
 	next;
-	doevent instance_npcname("Dien#171_os_3") + "::OnTalk";
-	close;
+	cutin "ep162_dn01",2;
+	mes "[Dien]";
+	mes "Oh!";
+	mes "If you go to the right, I think you can go back on the railroad without having to break the door.";
+	npctalk "Dien : Oh! If you go to the right, I think you can go back on the railroad without having to break the door";
+	if (!'unlocked)
+		donpcevent instance_npcname("#171_sealedos_control") + "::OnEvent04";
+	close3;
 }
 }
 
 
 1@os_b,146,221,7	script	Ridsh#171_os_2	4_F_LEEDSH,{
 1@os_b,146,221,7	script	Ridsh#171_os_2	4_F_LEEDSH,{

+ 1 - 1
npc/re/jobs/2e/kagerou_oboro.txt

@@ -836,7 +836,7 @@ job_ko,81,124,4	script	Kuuga Gai#ko	730,{
 			1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
 			1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
 			26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50;
 			26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50;
 		for (set .@i,getarraysize(.@n)-1; .@i>0; set .@i,.@i-1) {
 		for (set .@i,getarraysize(.@n)-1; .@i>0; set .@i,.@i-1) {
-			set .@rand, rand(.@i);
+			set .@rand, rand(0,.@i);
 			set .@tmp, .@n[.@i];
 			set .@tmp, .@n[.@i];
 			set .@n[.@i], .@n[.@rand];
 			set .@n[.@i], .@n[.@rand];
 			set .@n[.@rand], .@tmp;
 			set .@n[.@rand], .@tmp;

+ 1 - 1
npc/re/jobs/novice/academy.txt

@@ -5218,7 +5218,7 @@ new_1-3,99,169,3	script	Friendly Poring#ac	4_PORING,{
 			next;
 			next;
 			mes "[Poring]";
 			mes "[Poring]";
 			mes "It may fail, but keep trying to lure way those Little Porings!";
 			mes "It may fail, but keep trying to lure way those Little Porings!";
-			close;
+			close3;
 		}
 		}
 	} else if (isbegin_quest(2297) == 1) {
 	} else if (isbegin_quest(2297) == 1) {
 		mes "[Poring]";
 		mes "[Poring]";

+ 0 - 9
npc/re/kafras/kafras.txt

@@ -29,15 +29,6 @@
 //= 1.7 Added Rock Ridge Kafra. [Capuche]
 //= 1.7 Added Rock Ridge Kafra. [Capuche]
 //============================================================ 
 //============================================================ 
 
 
-// Brasilis
-//============================================================
-brasilis,197,221,4	script	Kafra Employee::kaf_bra	4_F_KAFRA1,{
-	cutin "kafra_01",2;
-	callfunc "F_Kafra",0,3,0,80,700;
-	savepoint "brasilis",195,259,1,1;
-	callfunc "F_KafEnd",0,1,"in the city of Brasilis";
-}
-
 // Dewata
 // Dewata
 //============================================================
 //============================================================
 dewata,202,184,6	script	Kafra Employee::kaf_dewata	4_F_KAFRA1,{
 dewata,202,184,6	script	Kafra Employee::kaf_dewata	4_F_KAFRA1,{

+ 50 - 0
npc/re/mapflag/specialpopup.txt

@@ -0,0 +1,50 @@
+//===== rAthena Script =======================================
+//= Mapflag: special popup map setting.
+//===== Description: ========================================= 
+//= Displays a special popup when a player enters the map.
+//===== Additional Comments: ================================= 
+//= 1.0 Initial script. [eppc0330]
+//============================================================
+
+herosria	mapflag	specialpopup	1
+hero_in1	mapflag	specialpopup	1
+hero_in2	mapflag	specialpopup	1
+hero_in3	mapflag	specialpopup	1
+hero_in4	mapflag	specialpopup	1
+hero_out1	mapflag	specialpopup	1
+hero_out2	mapflag	specialpopup	1
+hero_out3	mapflag	specialpopup	1
+hero_out4	mapflag	specialpopup	1
+hero_ent1	mapflag	specialpopup	1
+hero_ent2	mapflag	specialpopup	1
+hero_ent3	mapflag	specialpopup	1
+
+hero_tra	mapflag	specialpopup	2
+hero_dun1	mapflag	specialpopup	2
+
+bl_ice	mapflag	specialpopup	3
+bl_lava	mapflag	specialpopup	3
+bl_grass	mapflag	specialpopup	3
+bl_death	mapflag	specialpopup	3
+bl_soul	mapflag	specialpopup	3
+bl_venom	mapflag	specialpopup	3
+bl_temple	mapflag	specialpopup	3
+
+thana_step	mapflag	specialpopup	4
+tha_t07	mapflag	specialpopup	4
+tha_t08	mapflag	specialpopup	4
+tha_t09	mapflag	specialpopup	4
+tha_t10	mapflag	specialpopup	4
+tha_t11	mapflag	specialpopup	4
+tha_t12	mapflag	specialpopup	4
+
+ama_dun01	mapflag	specialpopup	5
+
+lhz_dun_n	mapflag	specialpopup	6
+
+bl_depth1	mapflag	specialpopup	7
+
+for_dun01	mapflag	specialpopup	8
+for_dun02	mapflag	specialpopup	8
+
+bl_depth2	mapflag	specialpopup	9

+ 117 - 0
npc/re/merchants/barters/enchan_illusion_dungeons.yml

@@ -433,6 +433,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Staff_Of_Bordeaux
             Item: Staff_Of_Bordeaux
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 30
             Amount: 30
@@ -444,6 +445,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Moonlight_Sword
             Item: Moonlight_Sword
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 60
             Amount: 60
@@ -455,6 +457,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Long_Mace
             Item: Long_Mace
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -466,6 +469,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Spectral_Spear
             Item: Spectral_Spear
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 20
             Amount: 20
@@ -477,6 +481,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Nurse_Cap
             Item: Nurse_Cap
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -488,6 +493,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Apple_Of_Archer
             Item: Apple_Of_Archer
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -499,6 +505,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Puente_Robe
             Item: Puente_Robe
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -510,6 +517,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Muffler_
             Item: Muffler_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -521,6 +529,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Shoes_
             Item: Shoes_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -534,6 +543,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Huuma_Fluttering_Snow
             Item: Huuma_Fluttering_Snow
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -545,6 +555,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Combo_Battle_Glove
             Item: Combo_Battle_Glove
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -556,6 +567,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Herald_Of_GOD_
             Item: Herald_Of_GOD_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -567,6 +579,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Clack_Of_Servival
             Item: Clack_Of_Servival
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -578,6 +591,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Cap_
             Item: Cap_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 50
             Amount: 50
@@ -591,6 +605,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Infiltrator_
             Item: Infiltrator_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 80
             Amount: 80
@@ -602,6 +617,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Ghoul_Leg
             Item: Ghoul_Leg
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 10
             Amount: 10
@@ -613,6 +629,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Wizardy_Staff
             Item: Wizardy_Staff
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 40
             Amount: 40
@@ -624,6 +641,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Balistar_
             Item: Balistar_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 50
             Amount: 50
@@ -635,6 +653,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Book_Of_The_Apocalypse
             Item: Book_Of_The_Apocalypse
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 50
             Amount: 50
@@ -646,6 +665,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Cape_Of_Ancient_Lord_
             Item: Cape_Of_Ancient_Lord_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 30
             Amount: 30
@@ -681,6 +701,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Immaterial_Sword
             Item: Immaterial_Sword
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -692,6 +713,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: War_Axe
             Item: War_Axe
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -703,6 +725,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Pole_Axe
             Item: Pole_Axe
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -714,6 +737,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Huuma_Bird_Wing
             Item: Huuma_Bird_Wing
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -725,6 +749,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Iron_Driver
             Item: Iron_Driver
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 100
             Amount: 100
@@ -749,6 +774,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Tablet
             Item: Tablet
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 50
             Amount: 50
@@ -760,6 +786,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Hunter_Bow_
             Item: Hunter_Bow_
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 80
             Amount: 80
@@ -777,6 +804,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Goibne's_Helmet
             Item: Goibne's_Helmet
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 120
             Amount: 120
@@ -791,6 +819,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Goibne's_Armor
             Item: Goibne's_Armor
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 80
             Amount: 80
@@ -805,6 +834,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Goibne's_Combat_Boots
             Item: Goibne's_Combat_Boots
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 80
             Amount: 80
@@ -819,6 +849,7 @@ Body:
         RequiredItems:
         RequiredItems:
           - Index: 0
           - Index: 0
             Item: Goibne's_Shoulder_Arms
             Item: Goibne's_Shoulder_Arms
+            Refine: 9
           - Index: 1
           - Index: 1
             Item: IllusionStone
             Item: IllusionStone
             Amount: 120
             Amount: 120
@@ -828,3 +859,89 @@ Body:
           - Index: 3
           - Index: 3
             Item: Token_Of_Bigstone
             Item: Token_Of_Bigstone
             Amount: 150
             Amount: 150
+  - Name: barter_ill_teddy
+    Items:
+      - Index: 0
+        Item: Counter_Dagger_IL
+        RequiredItems:
+          - Index: 0
+            Item: Counter_Dagger
+            Refine: 9
+          - Index: 1
+            Item: IllusionStone
+            Amount: 95
+          - Index: 2
+            Item: Green_Bearopy
+            Amount: 75
+          - Index: 3
+            Item: Chonchon_Doll_HQ
+            Amount: 50
+      - Index: 1
+        Item: Gate_KeeperDD_IL
+        RequiredItems:
+          - Index: 0
+            Item: Gate_KeeperDD
+            Refine: 9
+          - Index: 1
+            Item: IllusionStone
+            Amount: 95
+          - Index: 2
+            Item: Gothic_China_Doll
+            Amount: 75
+          - Index: 3
+            Item: NasariansSoulstone
+            Amount: 150
+      - Index: 2
+        Item: Survival_Staff_IL
+        RequiredItems:
+          - Index: 0
+            Item: Survival_Rod_
+            Refine: 9
+          - Index: 1
+            Item: Survival_Rod2_
+            Refine: 9
+          - Index: 2
+            Item: IllusionStone
+            Amount: 125
+          - Index: 3
+            Item: Gothic_China_Doll
+            Amount: 100
+          - Index: 4
+            Item: Chonchon_Doll_HQ
+            Amount: 100
+          - Index: 5
+            Item: Clay_Doll
+            Amount: 15
+      - Index: 3
+        Item: Boots_IL
+        RequiredItems:
+          - Index: 0
+            Item: Boots_
+            Refine: 9
+          - Index: 1
+            Item: IllusionStone
+            Amount: 85
+          - Index: 2
+            Item: Green_Bearopy
+            Amount: 50
+          - Index: 3
+            Item: Gothic_China_Doll
+            Amount: 50
+      - Index: 4
+        Item: Headband_Of_Power_IL
+        RequiredItems:
+          - Index: 0
+            Item: Headband_Of_Power
+            Refine: 9
+          - Index: 1
+            Item: IllusionStone
+            Amount: 115
+          - Index: 2
+            Item: NasariansSoulstone
+            Amount: 100
+          - Index: 3
+            Item: Chonchon_Doll_HQ
+            Amount: 50
+          - Index: 4
+            Item: Clay_Doll
+            Amount: 5

+ 51 - 0
npc/re/merchants/enchan_illusion_dungeons.txt

@@ -15,6 +15,7 @@
 //= 1.6 Added Illusion of Underwater exchange [Capuche]
 //= 1.6 Added Illusion of Underwater exchange [Capuche]
 //= 1.7 Added Illusion of Twins enchanter [Capuche]
 //= 1.7 Added Illusion of Twins enchanter [Capuche]
 //= 1.8 Added Illusion Merchant [Haydrich]
 //= 1.8 Added Illusion Merchant [Haydrich]
+//= 1.9 Added Illusion of Teddy Bear exchange [Atemo]
 //============================================================
 //============================================================
 
 
 //============================================================
 //============================================================
@@ -884,3 +885,53 @@ OnInit:
 	npcshopupdate "market_resonance_stone",100004,2000000,99999;
 	npcshopupdate "market_resonance_stone",100004,2000000,99999;
 	end;
 	end;
 }
 }
+
+
+//============================================================
+//= Illusion of Teddy Bear
+//============================================================
+
+ein_d02_i,177,158,3	script	Bear Wanting Illusion Stone#ITB	4_NASARIAN,{
+	.@item_name$ = getitemname(25271); // IllusionStone
+	mes "[Bear Wanting " + .@item_name$ + "]";
+	mes "If you give me an " + .@item_name$ + ", I'll do something nice for you!";
+	next;
+	switch( select( "Reason for being here", "Good thing [Illusion equipment]", "Quit" ) ) {
+	case 1:
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "I don't know why...!";
+		mes "The other teddy bears were in line, so I was in line too!";
+		mes "Whoaaaaaa!!!!";
+		mes "I didn't know it was here!";
+		next;
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "A teddy bear with an " + .@item_name$ + "!";
+		mes "Strong!";
+		mes "I don't have any " + .@item_name$ + "s!";
+		mes "Less... stronger...";
+		next;
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "What are " + .@item_name$ + "s?";
+		mes "I don't know but I want some!";
+		close;
+	case 2:
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "Makes you good with what you have!";
+		next;
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "If you want to do well, bring equipment refined to ^ff0000+9 or higher. It'll all disappear... haha?^000000";
+		next;
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "^ff0000" + .@item_name$ + "^000000!!! " + .@item_name$ + " is the most important thing, but... other materials are also needed.";
+		mes "For every good thing you need another good thing.";
+		next;
+		close2;
+		callshop( "barter_ill_teddy" );
+		end;
+	case 3:
+		mes "[Bear Wanting " + .@item_name$ + "]";
+		mes "Okay...";
+		close;
+	}
+	end;
+}

+ 0 - 54
npc/re/merchants/inn.txt

@@ -1,54 +0,0 @@
-//===== rAthena Script =======================================
-//= Inn Npcs
-//===== By: ==================================================
-//= c, L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Description: =========================================
-//= Inn Npcs, Save and Heal
-//===== Additional Comments: =================================
-//= 1.0 Added Brasilis inn receptionist. [c]
-//= 1.1 Updated dialog for Brasilis inn. [L0ne_W0lf]
-//============================================================
-
-// Brasilis
-//============================================================
-bra_in01,27,24,3	script	Hotel Keeper#bra1	478,{
-	mes "[Hotel Keeper]";
-	mes "Welcome to the beautiful Brasilis Hotel.";
-	next;
-	switch(select("Save:Rest -5000 zeny")) {
-	case 1:
-		mes "[Hotel Keeper]";
-		mes "Do you want to save here at the Brasilis Hotel?";
-		next;
-		switch(select("No thank you.:Absolutely.")) {
-		case 1:
-			mes "[Hotel Keeper]";
-			mes "Ok then, enjoy your stay.";
-			close;
-		case 2:
-			mes "[Hotel Keeper]";
-			mes "Your respawn has been saved here at the hotel. I hope that you enjoy your stay here in Brasilis.";
-			savepoint "bra_in01",144,69,1,1;
-			close;
-		}
-	case 2:
-		if (Zeny > 4999) {
-			mes "[Hotel Keeper]";
-			mes "I will show you a great room.";
-			close2;
-			set Zeny, Zeny-5000;
-			percentheal 100,100;
-			warp "bra_in01",144,69;
-			end;
-		}
-		else {
-			mes "[Hotel Keeper]";
-			mes "I'm sorry, but the service charge is 5,000 zeny per night.";
-			close;
-		}
-	}
-}

+ 29 - 0
npc/re/merchants/shopping_boards.txt

@@ -0,0 +1,29 @@
+//===== rAthena Script =======================================
+//= Shopping Boards
+//===== Description: =========================================
+//= Shopping Boards work like Bargain Hunter's Catalogues.
+//= They are found in towns and search exclusively in their respective maps.
+//= Searches are limited to 1 use per board click (you can re-use the board without closing it to get another search).
+//= https://irowiki.org/wiki/Commerce#Shopping_Boards
+//===== Changelog: ===========================================
+//= 1.0 Initial version. [Pokye]
+//============================================================
+
+-	script	Shopping Board	-1,{
+	searchstores 1, SEARCHSTORE_EFFECT_REMOTE;
+	end;
+}
+
+alberta,119,65,3	duplicate(Shopping Board)	Shopping Board#alb	4_BOARD3
+aldebaran,146,120,3	duplicate(Shopping Board)	Shopping Board#alde	4_BOARD3
+comodo,206,153,3	duplicate(Shopping Board)	Shopping Board#cmd	4_BOARD3
+geffen,130,68,3	duplicate(Shopping Board)	Shopping Board#gef	4_BOARD3
+izlude,127,116,3	duplicate(Shopping Board)	Shopping Board#izl	4_BOARD3
+morocc,166,109,3	duplicate(Shopping Board)	Shopping Board#moc	4_BOARD3
+payon,183,103,3	duplicate(Shopping Board)	Shopping Board#pay	4_BOARD3
+prontera,159,193,3	duplicate(Shopping Board)	Shopping Board#prt1	4_BOARD3
+prontera,182,214,3	duplicate(Shopping Board)	Shopping Board#prt2	4_BOARD3
+prontera,130,215,3	duplicate(Shopping Board)	Shopping Board#prt3	4_BOARD3
+prontera,146,85,3	duplicate(Shopping Board)	Shopping Board#prt4	4_BOARD3
+xmas,155,144,3	duplicate(Shopping Board)	Shopping Board#xmas	4_BOARD3
+yuno,146,187,3	duplicate(Shopping Board)	Shopping Board#yuno	4_BOARD3

+ 17 - 25
npc/re/mobs/dungeons/bra_dun.txt

@@ -1,37 +1,29 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Brasilis Dungeon Monster Spawn Script
 //= Brasilis Dungeon Monster Spawn Script
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Description: =========================================
-//= Official monster spawns in Brasilis Dungeon.
-//===== Additional Comments: =================================
+//===== Changelog: ===========================================
 //= 1.0 Official spawns from Aegis [Kisuka]
 //= 1.0 Official spawns from Aegis [Kisuka]
 //============================================================
 //============================================================
 
 
 //==================================================
 //==================================================
 // bra_dun01 - Behind the Waterfall
 // bra_dun01 - Behind the Waterfall
 //==================================================
 //==================================================
-bra_dun01,0,0	monster	Piranha	2070,80,5000
-bra_dun01,0,0	monster	Iara	2069,30,5000
-bra_dun01,0,0	monster	Black Mushroom	1084,5,180000,90000
-bra_dun01,0,0	monster	Marina	1141,20,5000
-bra_dun01,0,0	monster	Kukre	1070,10,5000
-bra_dun01,0,0	monster	Plankton	1161,10,5000
-bra_dun01,0,0	monster	Hydra	1068,15,5000
+bra_dun01	monster	Piranha	2070,80,5000
+bra_dun01	monster	Iara	2069,30,5000
+bra_dun01	monster	Black Mushroom	1084,5,180000,90000
+bra_dun01	monster	Marina	1141,20,5000
+bra_dun01	monster	Kukre	1070,10,5000
+bra_dun01	monster	Plankton	1161,10,5000
+bra_dun01	monster	Hydra	1068,15,5000
 
 
 //==================================================
 //==================================================
 // bra_dun02 - Behind the Waterfall
 // bra_dun02 - Behind the Waterfall
 //==================================================
 //==================================================
-bra_dun02,0,0	monster	Piranha	2070,60,5000
-bra_dun02,0,0	monster	Iara	2069,110,5000
-bra_dun02,0,0	monster	Marina	1141,10,5000
-bra_dun02,0,0	monster	Kukre	1070,10,5000
-bra_dun02,0,0	monster	Plankton	1161,10,5000
-bra_dun02,0,0	monster	Hydra	1068,15,5000
-bra_dun02,0,0	monster	Shining Plant	1083,2,5000
-bra_dun02,0,0	monster	Black Mushroom	1084,5,5000
-bra_dun02,0,0,0,0	boss_monster	Boitata	2068,1,7200000,600000,1
+bra_dun02	monster	Piranha	2070,60,5000
+bra_dun02	monster	Iara	2069,110,5000
+bra_dun02	monster	Marina	1141,10,5000
+bra_dun02	monster	Kukre	1070,10,5000
+bra_dun02	monster	Plankton	1161,10,5000
+bra_dun02	monster	Hydra	1068,15,5000
+bra_dun02	monster	Shining Plant	1083,2,5000
+bra_dun02	monster	Black Mushroom	1084,5,5000
+bra_dun02	boss_monster	Boitata	2068,1,7200000,600000,1

+ 44 - 0
npc/re/mobs/dungeons/ein_dun.txt

@@ -14,6 +14,7 @@
 //= 1.3 Official kRO 10.1 spawns [Playtester]
 //= 1.3 Official kRO 10.1 spawns [Playtester]
 //= 1.4 More accurate spawns [Playtester]
 //= 1.4 More accurate spawns [Playtester]
 //= 1.5 Corrected MVP spawn variance. [L0ne_W0lf]
 //= 1.5 Corrected MVP spawn variance. [L0ne_W0lf]
+//= 1.6 Added Illusion of Teddy Bear. [Atemo]
 //============================================================
 //============================================================
 
 
 //==================================================
 //==================================================
@@ -49,3 +50,46 @@ ein_dun03	monster	White Porcellio	20602,22
 ein_dun03	monster	Jeweliant	20598,20
 ein_dun03	monster	Jeweliant	20598,20
 ein_dun03	monster	Jewel	20600,3
 ein_dun03	monster	Jewel	20600,3
 ein_dun03	boss_monster	Jungoliant	20601,1,7200000,600000,0
 ein_dun03	boss_monster	Jungoliant	20601,1,7200000,600000,0
+
+//==================================================
+// Illusion of Teddy Bear
+//==================================================
+ein_d02_i	monster	Red Teddybear	 20255,25,5000,0,"ein_d02_i_boss::OnMobDead"
+ein_d02_i	monster	Yellow Teddybear	 20256,25,5000,0,"ein_d02_i_boss::OnMobDead"
+ein_d02_i	monster	Green Teddybear	 20257,25,5000,0,"ein_d02_i_boss::OnMobDead"
+ein_d02_i	monster	White Teddybear	 20258,20,5000,0,"ein_d02_i_boss::OnMobDead"
+ein_d02_i	monster	Blue Teddybear	 20259,20,5000,0,"ein_d02_i_boss::OnMobDead"
+ein_d02_i	monster	Pitman Labor Type	 20261,20
+ein_d02_i	monster	Piece of Spirit	 20262,15
+ein_d02_i	monster	Spirit Dwelling Obsidian	 20263,15
+
+-	script	ein_d02_i_boss	-1,{
+	end;
+OnMobDead:
+	if (playerattached()) {
+		if (.count < 2500)
+			.count++;
+		if (!.boss_spawn && !.cooldown && .count == 2500) {
+			.boss_spawn = true;
+			.count = 0;
+			killmonster "ein_d02_i", "ein_d02_i_boss::OnBossDeath";
+			// mapannounce "ein_d02_i", "", bc_map;	// Unknown text
+			getunitdata( killedgid, .@data );
+			monster "ein_d02_i", .@data[UMOB_X], .@data[UMOB_Y], "--ja--", 20260,1, "ein_d02_i_boss::OnBossDeath";	// ILL_TEDDY_BEAR_S
+			end;
+		}
+	}
+	end;
+OnBossDeath:
+	// (no announce)
+	killmonster "ein_d02_i", "ein_d02_i_boss::OnBossDeath";
+	.boss_spawn = false;
+	.cooldown = true;
+	initnpctimer;
+	end;
+
+OnTimer7200000:
+	.cooldown = false;
+	stopnpctimer;
+	end;
+}

+ 8 - 14
npc/re/mobs/fields/brasilis.txt

@@ -1,22 +1,16 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Brasilis Fields Monster Spawn Script
 //= Brasilis Fields Monster Spawn Script
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Additional Comments: =================================
+//===== Changelog: ===========================================
 //= 1.0 Official spawns from Aegis [Kisuka]
 //= 1.0 Official spawns from Aegis [Kisuka]
 //============================================================
 //============================================================
 
 
 //==================================================
 //==================================================
 // bra_fild01 - Brasilis Field
 // bra_fild01 - Brasilis Field
 //==================================================
 //==================================================
-bra_fild01,0,0	monster	Curupira	2074,50,5000
-bra_fild01,0,0	monster	Dokebi	1110,10,5000
-bra_fild01,0,0	monster	Savage	1166,5,5000
-bra_fild01,0,0	monster	Headless Mule	2071,40,5000
-bra_fild01,0,0	monster	Red Mushroom	1085,5,5000
-bra_fild01,0,0	monster	Jaguar	2072,55,5000
-bra_fild01,0,0	monster	Toucan	2073,60,5000
+bra_fild01	monster	Curupira	2074,50,5000
+bra_fild01	monster	Dokebi	1110,10,5000
+bra_fild01	monster	Savage	1166,5,5000
+bra_fild01	monster	Headless Mule	2071,40,5000
+bra_fild01	monster	Red Mushroom	1085,5,5000
+bra_fild01	monster	Jaguar	2072,55,5000
+bra_fild01	monster	Toucan	2073,60,5000

+ 4 - 4
npc/re/other/clans.txt

@@ -103,7 +103,7 @@ prt_in,33,114,5	script	Raffam Oranpere	10058,{
 					if( getcharid( 2 ) ){
 					if( getcharid( 2 ) ){
 						mes "[Raffam Oranpere]";
 						mes "[Raffam Oranpere]";
 						mes "Come back to join after you leave your current guild.";
 						mes "Come back to join after you leave your current guild.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 					}else if( getcharid( 5 ) != 0 ){
 						cutin "laperm04.bmp", 2;
 						cutin "laperm04.bmp", 2;
 						mes "[Raffam Oranpere]";
 						mes "[Raffam Oranpere]";
@@ -268,7 +268,7 @@ prt_in,35,114,5	script	Devon Aire	10059,{
 					if( getcharid( 2 ) ){
 					if( getcharid( 2 ) ){
 						mes "[Devon Aire]";
 						mes "[Devon Aire]";
 						mes "Leave your guild first to join my Clan, duh.";
 						mes "Leave your guild first to join my Clan, duh.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 					}else if( getcharid( 5 ) != 0 ){
 						cutin "debon03.bmp", 2;
 						cutin "debon03.bmp", 2;
 						mes "[Devon Aire]";
 						mes "[Devon Aire]";
@@ -421,7 +421,7 @@ prt_in,37,114,5	script	Berman Aire	10060,{
 						mes "[Berman Aire]";
 						mes "[Berman Aire]";
 						mes "Oh, no.";
 						mes "Oh, no.";
 						mes "In order to join, you first have to leave your current guild.";
 						mes "In order to join, you first have to leave your current guild.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 					}else if( getcharid( 5 ) != 0 ){
 						mes "[Berman Aire]";
 						mes "[Berman Aire]";
 						mes "You're already in a Clan.";
 						mes "You're already in a Clan.";
@@ -567,7 +567,7 @@ prt_in,39,114,5	script	Shaam Rumi	10027,{
 					if( getcharid( 2 ) ){
 					if( getcharid( 2 ) ){
 						mes "[Shaam Rumi]";
 						mes "[Shaam Rumi]";
 						mes "Did you finish things up with your guild?";
 						mes "Did you finish things up with your guild?";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 					}else if( getcharid( 5 ) != 0 ){
 						mes "[Shaam Rumi]";
 						mes "[Shaam Rumi]";
 						mes "Eh, you're already in a Clan. Hey, this isn't funny.";
 						mes "Eh, you're already in a Clan. Hey, this isn't funny.";

+ 3 - 2
npc/re/quests/eden/56-70.txt

@@ -17,6 +17,7 @@
 //= 1.5 Optimized, based on code by Zopokx. [Euphy]
 //= 1.5 Optimized, based on code by Zopokx. [Euphy]
 //= 1.6 Added support to Para_Team_Mark_ in Eden Group. [Ragno]
 //= 1.6 Added support to Para_Team_Mark_ in Eden Group. [Ragno]
 //= 1.7 Added use of F_HasEdenGroupMark function. [Ragno]
 //= 1.7 Added use of F_HasEdenGroupMark function. [Ragno]
+//= 1.8 Reverting Magic Wand Quest to request Trunks. [Carlosgrr]
 //============================================================
 //============================================================
 
 
 moc_para01,42,38,3	script	Mission [56 - 70]	857,{
 moc_para01,42,38,3	script	Mission [56 - 70]	857,{
@@ -49,7 +50,7 @@ moc_para01,42,38,3	script	Mission [56 - 70]	857,{
 			case 1: callsub L_HuntingQuest,3260,16000,6000;
 			case 1: callsub L_HuntingQuest,3260,16000,6000;
 			case 2: callsub L_HuntingQuest,3261,16000,7000;
 			case 2: callsub L_HuntingQuest,3261,16000,7000;
 			case 3: callsub L_Quest,3262,17000,7000,1032,40;
 			case 3: callsub L_Quest,3262,17000,7000,1032,40;
-			case 4: callsub L_Quest,3263,18000,8000,1021,30,7150,30;
+			case 4: callsub L_Quest,3263,18000,8000,1021,30,1019,30;
 		}
 		}
 	}
 	}
 	end;
 	end;
@@ -354,7 +355,7 @@ L_Details:
 		next;
 		next;
 		mes "To make the wand, I need some special materials.";
 		mes "To make the wand, I need some special materials.";
 		next;
 		next;
-		mes "Please bring me 30 Dokebi Horns and 30 Bamboo Cut. If you do so, I will lend you my magic wand once. Haha, good deal?";
+		mes "Please bring me 30 Dokebi Horns and 30 Trunks. If you do so, I will lend you my magic wand once. Haha, good deal?";
 		next;
 		next;
 		mes "Please confirm it to us after you complete the mission, then we will give you proper rewards.";
 		mes "Please confirm it to us after you complete the mission, then we will give you proper rewards.";
 		next;
 		next;

+ 0 - 2
npc/re/quests/illusion_investigation.txt

@@ -618,7 +618,6 @@ OnInit:
 	end;
 	end;
 }
 }
 
 
-/*
 ein_d02_i,161,180,5	script	Machoko#machoco	8_F_GIRL,{
 ein_d02_i,161,180,5	script	Machoko#machoco	8_F_GIRL,{
 	if (BaseLevel < 150)
 	if (BaseLevel < 150)
 		end;
 		end;
@@ -767,7 +766,6 @@ OnInit:
 	questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(3457,PLAYTIME) == 2" );
 	questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(3457,PLAYTIME) == 2" );
 	end;
 	end;
 }
 }
-*/
 
 
 tur_d03_i,125,186,5	script	Orian#orian	4_M_LGTPOOR,{
 tur_d03_i,125,186,5	script	Orian#orian	4_M_LGTPOOR,{
 	if (BaseLevel < 150)
 	if (BaseLevel < 150)

+ 3 - 3
npc/re/quests/quests_16_1.txt

@@ -4057,7 +4057,7 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01	4_EP16_SPICA,{
 				next;
 				next;
 				mes "[Spica]";
 				mes "[Spica]";
 				mes "" + strcharinfo(0) + ", why don't you go back to your room and wait for the message?";
 				mes "" + strcharinfo(0) + ", why don't you go back to your room and wait for the message?";
-				close;
+				close3;
 			}
 			}
 			mes "[Spica]";
 			mes "[Spica]";
 			mes "Why don't you go visit other families if you have not visited them all?";
 			mes "Why don't you go visit other families if you have not visited them all?";
@@ -4105,7 +4105,7 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01	4_EP16_SPICA,{
 			next;
 			next;
 			mes "[Spica]";
 			mes "[Spica]";
 			mes "I wonder if the old folks would hear me out though.";
 			mes "I wonder if the old folks would hear me out though.";
-			close;
+			close3;
 		}
 		}
 		mes "[Spica]";
 		mes "[Spica]";
 		mes "Skia told me something similar to that.";
 		mes "Skia told me something similar to that.";
@@ -8968,7 +8968,7 @@ prt_cas_q,93,74,4	script	Po Richard#EP161GAM	4_M_6THPRIN1,{
 			emotion ET_OTL;
 			emotion ET_OTL;
 			mes "[Po Richard]";
 			mes "[Po Richard]";
 			mes "I guess the offer hasn't been attractive to you. I am sorry, but come back later when you change your mind.";
 			mes "I guess the offer hasn't been attractive to you. I am sorry, but come back later when you change your mind.";
-			close;
+			close3;
 		}
 		}
 		emotion ET_OK;
 		emotion ET_OK;
 		mes "[Po Richard]";
 		mes "[Po Richard]";

+ 3 - 2
npc/re/quests/quests_16_2.txt

@@ -3650,6 +3650,7 @@ que_swat,145,57,3	script	Philopontess#ep162_04	4_M_PHILOFONTES,{
 		terra_gloria_main = 25;
 		terra_gloria_main = 25;
 		questinfo_refresh();
 		questinfo_refresh();
 		close2;
 		close2;
+		cutin "",255;
 		npctalk "Oh, please come here for a moment.", "Rookie#ep162_03", bc_self;
 		npctalk "Oh, please come here for a moment.", "Rookie#ep162_03", bc_self;
 		end;
 		end;
 	}
 	}
@@ -3669,7 +3670,7 @@ que_swat,145,57,3	script	Philopontess#ep162_04	4_M_PHILOFONTES,{
 				mes "[Tess]";
 				mes "[Tess]";
 				mes "Not now?";
 				mes "Not now?";
 				mes "Then get some rest and come back please.";
 				mes "Then get some rest and come back please.";
-				close;
+				close3;
 			}
 			}
 			mes "[Tess]";
 			mes "[Tess]";
 			mes "Since we don't know where they are hiding, start looking in corners such as cabinets and boxes.";
 			mes "Since we don't know where they are hiding, start looking in corners such as cabinets and boxes.";
@@ -3876,7 +3877,7 @@ rebel_in,70,78,3	script	Elena Volkova#16.2rm	4_F_ELENA,{
 		if (countitem(25161) < 1) {
 		if (countitem(25161) < 1) {
 			mes "[USU commander Elena]";
 			mes "[USU commander Elena]";
 			mes "...Why are you empty-handed? Where is the cookie?";
 			mes "...Why are you empty-handed? Where is the cookie?";
-			close;
+			close3;
 		}
 		}
 		emotion ET_DELIGHT;
 		emotion ET_DELIGHT;
 		mes "[USU commander Elena]";
 		mes "[USU commander Elena]";

+ 3 - 1
npc/re/quests/quests_17_1.txt

@@ -3955,7 +3955,7 @@ sp_rudus,184,360,5	script	Elena Volkova#171_rudus	4_F_ELENA,{
 		setquest 7859;
 		setquest 7859;
 		getitem 25723,15;
 		getitem 25723,15;
 		getexp 800000,800000;
 		getexp 800000,800000;
-		close;
+		close3;
 	}
 	}
 	if (isbegin_quest(7859) == 1) {
 	if (isbegin_quest(7859) == 1) {
 		cutin "162elena_01",2;
 		cutin "162elena_01",2;
@@ -4359,6 +4359,7 @@ sp_rudus,130,200,4	script	Morning#171_rudus	4_EP17_MORNING,{
 	unittalk getcharid(3),strcharinfo(0) + " : This kid seems to be Morning.",bc_self;
 	unittalk getcharid(3),strcharinfo(0) + " : This kid seems to be Morning.",bc_self;
 	switch (prompt("Find a meal for Morning.:Chat with Morning.")) {
 	switch (prompt("Find a meal for Morning.:Chat with Morning.")) {
 	case 255:
 	case 255:
+		cutin "",255;
 		setpcblock PCBLOCK_ALL,false;
 		setpcblock PCBLOCK_ALL,false;
 		end;
 		end;
 	case 1:
 	case 1:
@@ -4382,6 +4383,7 @@ sp_rudus,130,200,4	script	Morning#171_rudus	4_EP17_MORNING,{
 		sleep2 2000;
 		sleep2 2000;
 		switch (prompt("I'll bring it.:Something urgent happened.")) {
 		switch (prompt("I'll bring it.:Something urgent happened.")) {
 		case 255:
 		case 255:
+			cutin "",255;
 			setpcblock PCBLOCK_ALL,false;
 			setpcblock PCBLOCK_ALL,false;
 			end;
 			end;
 		case 1:
 		case 1:

+ 1 - 1
npc/re/quests/quests_17_2.txt

@@ -3944,7 +3944,7 @@ ba_in01,51,157,3	script	Est#ep172_est01	4_F_ESTLOVELOY,{
 				if (!is_party_leader()) {
 				if (!is_party_leader()) {
 					mes "^4D4DFFThis place is a memorial dungeon.";
 					mes "^4D4DFFThis place is a memorial dungeon.";
 					mes "You have to be a party leader to create a memorial dungeon.^000000";
 					mes "You have to be a party leader to create a memorial dungeon.^000000";
-					close;
+					close3;
 				}
 				}
 				if (instance_create(.@md_name$) == -3)
 				if (instance_create(.@md_name$) == -3)
 					dispbottom "The reservation of the instance '" + .@md_name$ + "' has failed due to an active instance.";
 					dispbottom "The reservation of the instance '" + .@md_name$ + "' has failed due to an active instance.";

+ 994 - 0
npc/re/quests/quests_illusion_dungeons.txt

@@ -14,6 +14,7 @@
 //= 1.5 Added Illusion of Luanda [Capuche]
 //= 1.5 Added Illusion of Luanda [Capuche]
 //= 1.6 Added Illusion of Underwater [Capuche]
 //= 1.6 Added Illusion of Underwater [Capuche]
 //= 1.7 Added Illusion of Twins [Capuche]
 //= 1.7 Added Illusion of Twins [Capuche]
+//= 1.8 Added Illusion of Teddy Bear [Atemo]
 //============================================================
 //============================================================
 
 
 //============================================================
 //============================================================
@@ -11811,3 +11812,996 @@ ant_d02_i,125,73,6	script(CLOAKED)	Vitata#part9	ILL_VITATA,{
 
 
 ant_d02_i,128,73,6	duplicate(dummy_cloaked_npc)	Quiet Maya#part10	ILL_MAYA
 ant_d02_i,128,73,6	duplicate(dummy_cloaked_npc)	Quiet Maya#part10	ILL_MAYA
 ant_d02_i,129,73,2	duplicate(dummy_cloaked_npc)	Vitata#part11	ILL_VITATA
 ant_d02_i,129,73,2	duplicate(dummy_cloaked_npc)	Vitata#part11	ILL_VITATA
+
+
+//============================================================
+//= Illusion of Teddy Bear
+//============================================================
+
+ein_d02_i,161,189,3	script	Exit#IBTin	4_ENERGY_BLUE,{
+	warp "ein_dun01",189,80;
+	end;
+}
+
+einbroch,149,242,5	script	Coughing young man#ITB	4_M_NFMAN,3,3,{
+	if (BaseLevel < 150) {
+		mes "[Coughing young man]";
+		mes "The time has passed...";
+		mes "Why haven't you come back yet...";
+		mes "Cough Cough!!";
+		next;
+		mes "^ff0000¡Ø You can start this quest from level 150.^000000";
+		close;
+	}
+	if (ill_teddy == 0) {
+		mes "[Coughing young man]";
+		mes "The time has passed...";
+		mes "Why haven't you come back yet...";
+		mes "Cough Cough!!";
+		next;
+		mes "[Coughing young man]";
+		mes "Cough...cough...cough...";
+		mes "Ha ha ha... did something happen?";
+		mes "If I don't go and check it myself...";
+		mes "Cough cough";
+		mes "Cough...lucky...";
+		next;
+		mes "-plop-";
+		next;
+		if (select( "Help him", "Ignore" ) == 2) {
+			mes "[Coughing young man]";
+			mes "...cough...";
+			mes "Cough cough... cough";
+			close;
+		}
+		mes "[Coughing young man]";
+		mes "...cough...";
+		mes "Thank you.";
+		mes "Cough cough... cough";
+		next;
+		select( "You'd better take a break" );
+		mes "[Coughing young man]";
+		mes "Cough...";
+		mes "That's true, but... Cough... My friend who went to the mine for work hasn't come back yet... Cough.";
+		next;
+		mes "[Coughing young man]";
+		mes "A few days ago, as soon as work was over... he left... he said he would come back...";
+		mes "He hasn't come back...cough...yet.";
+		next;
+		mes "[Coughing young man]";
+		mes "Cough...cough cough...cough";
+		mes "I've talked to the guards, but...cough...cough...they didn't take it seriously...";
+		next;
+		mes "[Coughing young man]";
+		mes "^ff0000Steven^000000 is not that kind of guy...Cough cough";
+		mes "If he hasn't contacted me yet, something must have happened.";
+		next;
+		mes "[Coughing young man]";
+		mes "It seemed like he was going to ^ff0000the first floor of the mine in Einbech^000000.";
+		mes "If you look around, maybe you'll find a clue...even if it's just a small thing?";
+		ill_teddy = 1;
+		setquest 11556;
+		close;
+	}
+	if (ill_teddy == 1) {
+		mes "[Coughing young man]";
+		mes "A few days ago, as soon as work was over... he left... he said he would come back...";
+		mes "He hasn't come back...cough...yet.";
+		next;
+		mes "[Coughing young man]";
+		mes "Cough...cough cough...cough";
+		mes "I've talked to the guards, but...cough...cough...they didn't take it seriously...";
+		next;
+		mes "[Coughing young man]";
+		mes "^ff0000Steven^000000 is not that kind of guy...Cough cough";
+		mes "If he hasn't contacted me yet, something must have happened.";
+		next;
+		mes "[Coughing young man]";
+		mes "It seemed like he was going to ^ff0000the first floor of the mine in Einbech^000000.";
+		mes "If you look around, maybe you'll find a clue...even if it's just a small thing?";
+		close;
+	}
+	if (ill_teddy < 5) {
+		mes "[Coughing young man]";
+		mes "Ah! Cough Cough!";
+		mes "You're back!";
+		mes "Steven is...cough";
+		mes "Did you find him?";
+		close;
+	}
+	if (ill_teddy == 5) {
+		mes "[Acid]";
+		mes "Ah! Cough Cough!";
+		mes "You're back!";
+		mes "Steven is...cough";
+		mes "Did you find him?";
+		next;
+		select( "Pass the money" );
+		mes "[Acid]";
+		mes "....";
+		mes "As expected...cough cough...what happened?";
+		next;
+		mes "[Acid]";
+		mes "There's no way they just sent money like this when nothing happened.";
+		next;
+		mes "[Acid]";
+		mes "I ..cough..must go myself...cough..cough..";
+		mes "Maybe it doesn't help much, but...cough";
+		mes "My dearest friend...cough..may be in danger, but I can't stay still!...cluck";
+		next;
+		mes "[Acid]";
+		mes "Cough cough..Adventurer..Cough..Take me with you!";
+		mes "Please!";
+		ill_teddy = 6;
+		erasequest 11560;
+		setquest 11561;
+		close;
+	}
+	if (ill_teddy == 6) {
+		mes "[Acid]";
+		mes "I ..cough..must go myself...cough..cough..";
+		mes "Maybe it doesn't help much, but...cough";
+		mes "My dearest friend...cough..may be in danger, but I can't stay still!...cluck";
+		next;
+		mes "[Acid]";
+		mes "Cough cough..Adventurer..Cough..Take me with you!";
+		mes "Please!";
+		close;
+	}
+	mes "[Acid]";
+	mes "I've been in the mines for most of these days, so my cough seems to be getting better.";
+	mes "My body has become healthy!";
+	mes "The air here is worse than the mine... Cough";
+	close;
+
+OnTouch:
+	if (BaseLevel >= 150 && ill_teddy == 0)
+		npctalk "Coughing young man: Cough Cough!!", "", bc_self;
+	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "BaseLevel >= 150 && ill_teddy == 0" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11560) == 1" );
+	end;
+}
+
+ein_dun01,198,79,3	script	Teddy Bear#ITB10	4_NASARIAN,{
+	if (ill_teddy == 1) {
+		mes "[Teddy Bear in line]";
+		mes "Stand in line!";
+		next;
+		select( "Why are you standing here?" );
+		mes "[Teddy Bear in line]";
+		mes "What?";
+		mes "Do you think I'd give such advanced information to a stranger I am seeing for the first time?";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "If you're that curious, stand behind me and wait for your turn!";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "Information isn't something you get for free.";
+		mes "All the time and effort...";
+		next;
+		mes "[???????????]";
+		mes "AAAAAAAAAA!!!!";
+		mes "Let go!!!!";
+		mes "You furry bastards!!!!";
+		next;
+		mes "- A man's scream is heard from the front of the line. Let's check the situation at the front. -";
+		ill_teddy = 2;
+		erasequest 11556;
+		setquest 11557;
+		close;
+	}
+	if (ill_teddy == 2) {
+		mes "[Teddy Bear in line]";
+		mes "Have you heard something strange?";
+		next;
+		mes "- A man's scream is heard from the front of the line. Let's check the situation at the front. -";
+		close;
+	}
+	mes "[Teddy Bear in line]";
+	mes "Stand in line!";
+	close;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11556) == 1" );
+	end;
+}
+
+ein_dun01,189,84,7	script	Bear#3	4_NASARIAN,{
+	mes "[Teddy Bear in line]";
+	mes "Hey there!!! Don't cut in line!!!";
+	close;
+}
+
+ein_dun01,189,82,7	duplicate(dummy_npc)	Bear#4	4_NASARIAN
+ein_dun01,190,80,7	duplicate(dummy_npc)	Bear#5	4_NASARIAN
+ein_dun01,191,80,5	duplicate(dummy_npc)	Bear#6	4_NASARIAN
+
+ein_dun01,195,80,5	script	Resident#8	4_M_EINMAN2,{
+	mes "[Resident]";
+	mes "One day, everyone started queuing up here, so I stood here too.";
+	mes "What's in front?";
+	mes "Well? I'm just here because I'm curious...";
+	close;
+}
+
+ein_dun01,196,80,1	script	Bear#9	4_NASARIAN,{
+	mes "[Teddy Bear in line]";
+	mes "Everyone stands in line for days waiting for their turn.";
+	close;
+}
+
+ein_dun01,189,85,7	script	Teddy Bear#IBT1	4_NASARIAN,{
+	if (ill_teddy < 2) {
+		mes "[Teddy Bear in line]";
+		mes "Whoops, it's my turn to go in soon.";
+		close;
+	}
+	if (ill_teddy == 2) {
+		mes "[Teddy Bear in line]";
+		mes "Whh..what happened?";
+		mes "I heard a scream when the man in front of me just entered.";
+		next;
+		select( "About the man." );
+		mes "[Teddy Bear in line]";
+		mes "What?";
+		mes "I didn't even have time to look at that!";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "Flaw... Hehe... .";
+		mes "I've been waiting in line for days, but suddenly I'm not interested anymore...";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "If you're really curious, I'll give you my position. Why don't you go in and check it out?";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "I...it's not because I'm scared!";
+		mes "I just... I guess what is inside is boring for me now.";
+		mes "Because I've lost interest?!";
+		ill_teddy = 3;
+		erasequest 11557;
+		setquest 11558;
+		close;
+	}
+	if (ill_teddy == 3) {
+		mes "[Teddy Bear in line]";
+		mes "Flaw... Hehe... .";
+		mes "I've been waiting in line for days, but suddenly I'm not interested anymore...";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "If you're really curious, I'll give you my position. Why don't you go in and check it out?";
+		next;
+		mes "[Teddy Bear in line]";
+		mes "I...it's not because I'm scared!";
+		mes "I just... I guess what is inside is boring for me now.";
+		mes "Because I've lost interest?!";
+		close;
+	}
+	mes "[Teddy Bear in line]";
+	mes "What?";
+	mes "The guy in front has already ran away!";
+	mes "Don't get confused!";
+	close;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11557) == 1" );
+	end;
+}
+
+ein_dun01,189,87,3	script	An entrance somewhere#IBTin	4_ENERGY_BLUE,{
+	if (ill_teddy < 3) {
+		mes "- Can't get in yet -";
+		close;
+	}
+	warp "ein_d02_i",168,197;
+	end;
+}
+
+
+ein_d02_i,170,193,5	script	Steven#IBT	4W_M_02,3,3,{
+	if (checkweight(1201,3) == 0) {
+		mes "- Wait a moment!!";
+		mes "- You have too many items. -";
+		mes "- You can't receive this. -";
+		mes "- Lighten your weight and -";
+		mes "- try again. -";
+		close;
+	}
+	if (ill_teddy < 3)
+		end;
+	if (ill_teddy == 3) {
+		mes "[Steven]";
+		mes "Can't you let me go?!";
+		mes "Let me go!";
+		mes "This sucks!!!!";
+		npctalk "Steven: Can't you let me go?!", "", bc_self;
+		cloakoffnpcself( "White Teddy Bear#IBT" );
+		cloakoffnpcself( "Teddy Bear#IBT" );
+		next;
+		mes "[Teddy Bear]";
+		mes "Oops!";
+		mes "Caught, I got caught!";
+		mes "Let's run!!!!";
+		npctalk "White Teddy Bear: Caught, I got caught!", "White Teddy Bear#IBT", bc_self;
+		npctalk "Teddy Bear: Let's Run!!!!", "Teddy Bear#IBT", bc_self;
+		ill_teddy = 4;
+		erasequest 11558;
+		setquest 11559;
+		close2;
+		cloakonnpcself( "White Teddy Bear#IBT" );
+		cloakonnpcself( "Teddy Bear#IBT" );
+		end;
+	}
+	if (ill_teddy == 4) {
+		mes "[Steven]";
+		mes "What...";
+		mes "That's...";
+		next;
+		mes "[Steven]";
+		mes "Hey!";
+		mes "You there!";
+		mes "Did you see that too?";
+		mes "The Teddy Bear just...";
+		next;
+		select( "Tell him about the coughing young man." );
+		mes "[Steven]";
+		mes "Huh? The coughing young man in Einbroch asked you to find me?";
+		mes "Is it Acid...";
+		next;
+		mes "[Steven]";
+		mes "I told him I'd come back right away, but what the hell was the rumor about? There were a lot of people and monsters waiting in line.";
+		next;
+		mes "[Steven]";
+		mes "So how was Acid?";
+		mes "He couldn't sleep well because his cough got so bad.";
+		next;
+		mes "[Steven]";
+		mes "I have to go back and send him to the hospital, but...";
+		mes "If I'm not mistaken, that's...";
+		next;
+		mes "[Steven]";
+		mes "Ugh...things got messy...";
+		next;
+		mes "[Steven]";
+		mes "Hey.";
+		mes "Do me a favor.";
+		mes "He has to go to the hospital today and won't have enough money.";
+		next;
+		mes "[Steven]";
+		mes "I think I need to do some work here.";
+		mes "You go back and tell him that I'm all right.";
+		mes "Give him this money too.";
+		next;
+		mes "[Steven]";
+		mes "Please.";
+		mes "When I go back... I don't have anything, but I'll give you something in return.";
+		npctalk "Steven: Please.", "", bc_self;
+		ill_teddy = 5;
+		erasequest 11559;
+		setquest 11560;
+		close;
+	}
+	if (ill_teddy == 5) {
+		mes "[Steven]";
+		mes "Hey.";
+		mes "Do me a favor.";
+		mes "He has to go to the hospital today and won't have enough money.";
+		next;
+		mes "[Steven]";
+		mes "I think I need to do some work here.";
+		mes "You go back and tell him that I'm all right.";
+		mes "Give him this money too.";
+		next;
+		mes "[Steven]";
+		mes "Please.";
+		mes "When I go back... I don't have anything, but I'll give you something in return.";
+		npctalk "Steven: Please.", "", bc_self;
+		close;
+	}
+	if (ill_teddy == 6) {
+		mes "[Steven]";
+		mes "Oh you are here?";
+		mes "Did he go to the hospital?";
+		next;
+		mes "[Acid]";
+		mes "Steven!";
+		mes "Why make people so worried...";
+		cloakoffnpcself( "Acid#IBT_inN01" );
+		next;
+		mes "[Steven]";
+		mes "No... why are you here?";
+		mes "Go to the hospital!";
+		next;
+		mes "[Acid]";
+		mes "Do I have a hospital or a shop now?!";
+		next;
+		mes "[Steven]";
+		mes "Ugh...";
+		mes "Okay...okay!";
+		mes "Be quiet for now!";
+		mes "Can you hear something strange coming from the north?";
+		npctalk "Steven: Ugh... nagging...", "", bc_self;
+		ill_teddy = 7;
+		erasequest 11561;
+		setquest 11562;
+		close2;
+		cloakonnpcself( "Acid#IBT_inN01" );
+		end;
+	}
+	if (ill_teddy == 7) {
+		mes "[Steven]";
+		mes "Ugh...";
+		mes "Okay!";
+		mes "Be quiet for now!";
+		mes "Can you hear something strange coming from the north?";
+		npctalk "Steven: Ugh... nagging...", "", bc_self;
+		close;
+	}
+	if (ill_teddy == 8) {
+		if (checkquest(11563,HUNTING) != 2 || checkquest(11564,HUNTING) != 2) {
+			mes "[Steven]";
+			mes "Too many of them.";
+			mes "This is too dangerous.";
+			mes "Let's clear things up and talk again.";
+			close;
+		}
+		mes "[Steven]";
+		mes "Whoa...";
+		mes "Did you send them out?";
+		next;
+		mes "[Acid]";
+		mes "Aren't those just Teddy Bears?";
+		mes "Invading... they called themselves Nazarians, right?";
+		cloakoffnpcself( "Acid#IBT_inN01" );
+		next;
+		mes "[Steven]";
+		mes "What the hell is going on...";
+		mes "I'm out of my mind...";
+		next;
+		select( "About Teddy Bear" );
+		mes "[Acid]";
+		mes "Steven brought it because he said he was looking for something salty to eat at home.";
+		next;
+		mes "[Acid]";
+		mes "The pay is so good compared to the job, and the delivery place is also a mine, so it was a bit suspicious...";
+		next;
+		mes "[Acid]";
+		mes "I've been told that idiot is excited.";
+		next;
+		mes "[Steven]";
+		mes "What an idiot!";
+		mes "Thanks to you, I get hospital bills and your cough...";
+		mes "Oh... Come to think of it, you don't cough anymore, do you?";
+		npctalk "Steven: What an idiot!", "", bc_self;
+		next;
+		mes "[Acid]";
+		mes "Uh... is that so?";
+		mes "Come to think of it, I feel like I can breathe easier!";
+		next;
+		mes "[Steven]";
+		mes "No matter how many times I went to the hospital, there was no improvement...";
+		mes "Maybe it was just the bad air!";
+		npctalk "Steven: Air worse than in the mine...", "", bc_self;
+		next;
+		mes "[Acid]";
+		mes "No, that's not important right now...";
+		mes "The doll we made is alive and moving!";
+		mes "They even tried to kidnap you!";
+		next;
+		mes "[Steven]";
+		mes "Kidnapped... Come to think of it, I helped a man who was being chased by a terrific Teddy Bear on the way back.";
+		next;
+		mes "[Steven]";
+		mes "...I'm not the only one brought here, am I?";
+		mes "I guess I'll have to stay here and watch the situation.";
+		mes "Acid! You can go back to the village for now.";
+		next;
+		mes "[Steven]";
+		mes "Thank you for helping me too.";
+		mes "I can't give you much, but I'll give you the rare ore I found earlier.";
+		mes "It might come in handy somewhere!";
+		ill_teddy = 9;
+		erasequest 11563;
+		erasequest 11564;
+		getitem 25271,5; // IllusionStone
+		getexp 3500000,2500000;
+		close2;
+		cloakonnpcself( "Acid#IBT_inN01" );
+		end;
+	}
+
+	// daily
+	switch( checkquest(11566,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Steven]";
+		mes "Get some rest";
+		mes "If you overdo it, you'll only ruin your health.";
+		close;
+	case 2:
+		erasequest 11566;
+		break;
+	}
+	switch( checkquest(11565,HUNTING) ) {
+	case -1:
+		mes "[Steven]";
+		mes "Ugh...";
+		mes "Where do these guys keep popping up?";
+		next;
+		mes "[Steven]";
+		mes "If you're familiar with combat, puppeteers who aren't familiar with combat won't find it easy to get out of here.";
+		next;
+		mes "[Steven]";
+		mes "For now, I'm also taking care of it, but I'm not good enough alone.";
+		mes "If you're not busy right now, help me defeat " + getmonsterinfo("ILL_PITMAN", MOB_NAME) + ", " + getmonsterinfo("ILL_MINERAL", MOB_NAME) + ", and " + getmonsterinfo("ILL_OBSIDIAN", MOB_NAME) + ".";
+		mes "I think I'll be able to breathe a little more if I catch 10 of them.";
+		next;
+		if (select( "Accept", "Quit" ) == 2) {
+			mes "[Steven]";
+			mes "Okay...";
+			close;
+		}
+		mes "[Steven]";
+		mes "Then please help me defeat";
+		mes "10 " + getmonsterinfo("ILL_PITMAN", MOB_NAME) + ", " + getmonsterinfo("ILL_MINERAL", MOB_NAME) + ", and " + getmonsterinfo("ILL_OBSIDIAN", MOB_NAME) + "!";
+		setquest 11565;
+		close;
+	case 0:
+	case 1:
+		mes "[Steven]";
+		mes "How are you?";
+		mes "How are things going with " + getmonsterinfo("ILL_PITMAN", MOB_NAME) + ", " + getmonsterinfo("ILL_MINERAL", MOB_NAME) + ", and " + getmonsterinfo("ILL_OBSIDIAN", MOB_NAME) + "?";
+		close;
+	case 2:
+		mes "[Steven]";
+		mes "Whoa...";
+		mes "Good job!";
+		mes "Are you feeling a little safer now?";
+		erasequest 11565;
+		setquest 11566;
+		getitem 25271,1; // IllusionStone
+		getexp 1000000,900000;
+		close;
+	}
+	end;
+
+OnTouch:
+	if (ill_teddy == 3) {
+		mes "[Steven]";
+		mes "Can't you let me go?!";
+		mes "Let me go!";
+		mes "This sucks!!!!";
+		npctalk "Steven: Can't you let me go?!", "", bc_self;
+		cloakoffnpcself( "White Teddy Bear#IBT" );
+		cloakoffnpcself( "Teddy Bear#IBT" );
+		next;
+		mes "[Teddy Bear]";
+		mes "Oops!";
+		mes "Caught, I got caught!";
+		mes "Let's run!!!!";
+		npctalk "White Teddy Bear: Caught, I got caught!", "White Teddy Bear#IBT", bc_self;
+		npctalk "Teddy Bear: Let's Run!!!!", "Teddy Bear#IBT", bc_self;
+		ill_teddy = 4;
+		erasequest 11558;
+		setquest 11559;
+		close2;
+		cloakonnpcself( "White Teddy Bear#IBT" );
+		cloakonnpcself( "Teddy Bear#IBT" );
+		end;
+	}
+	end;
+
+OnInit:
+	// main quest
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11558) == 1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11559) == 1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11561) == 1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11563,HUNTING) == 2 && checkquest(11564,HUNTING) == 2" );
+
+	// daily
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "ill_teddy == 9 && checkquest(11565,HUNTING) == -1 && checkquest(11566,PLAYTIME) == -1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11565,HUNTING) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11566,PLAYTIME) == 2" );
+	end;
+}
+
+ein_d02_i,135,229,1	duplicate(dummy_cloaked_npc)	Acid#IBT_inN	4_M_NFMAN
+ein_d02_i,169,193,5	duplicate(dummy_cloaked_npc)	White Teddy Bear#IBT	4_TEDDY_BEAR_W
+ein_d02_i,171,193,3	duplicate(dummy_cloaked_npc)	Teddy Bear#IBT	4_NASARIAN
+ein_d02_i,172,192,1	duplicate(dummy_cloaked_npc)	Acid#IBT_inN01	4_M_NFMAN
+
+ein_d02_i,132,233,0	script	#ITBSuspicious place	HIDDEN_WARP_NPC,3,3,{
+	end;
+OnTouch:
+	if (ill_teddy == 7) {
+		mes "[??????]";
+		mes "Um hahahahahahahahaha!!!!";
+		mes "Listen, people!";
+		mes "Finally the day has come when we will rise again!";
+		cloakoffnpcself( "??????#IBT_inB01" );
+		cloakoffnpcself( "??????#IBT_inB02_1" );
+		cloakoffnpcself( "??????#IBT_inB03" );
+		cloakoffnpcself( "??????#IBT_inB04" );
+		cloakoffnpcself( "??????#IBT_inB05" );
+		cloakoffnpcself( "??????#IBT_inB06" );
+		cloakoffnpcself( "??????#IBT_inB07" );
+		cloakoffnpcself( "??????#IBT_inB08" );
+		cloakoffnpcself( "??????#IBT_inB09" );
+		cloakoffnpcself( "??????#IBT_inB10" );
+		cloakoffnpcself( "??????#IBT_inB11" );
+		cloakoffnpcself( "??????#IBT_inB12" );
+		cloakoffnpcself( "??????#IBT_inB13" );
+		cloakoffnpcself( "??????#IBT_inB15" );
+		cloakoffnpcself( "??????#IBT_inB16" );
+		cloakoffnpcself( "??????#IBT_inB17" );
+		cloakoffnpcself( "??????#IBT_inB18" );
+		cloakoffnpcself( "??????#IBT_inB19" );
+		cloakoffnpcself( "??????#IBT_inB20" );
+		cloakoffnpcself( "??????#IBT_inB21" );
+		cloakoffnpcself( "??????#IBT_inB22" );
+		npctalk "?????? : Mmmhahahahahahahahahaha!!!!", "??????#IBT_inB01", bc_self;
+		next;
+		mes "[??????]";
+		mes "Forget the shameful past of being trapped in the dark and damp ground.";
+		npctalk "?????? : Forget the shameful past of being trapped in the dark and damp ground.", "????????#IBT_inB01", bc_self;
+		next;
+		mes "[??????]";
+		mes "This land!!!";
+		npctalk "?????? : This land!!!", "????????#IBT_inB01", bc_self;
+		sleep2 500;
+		mes "This world!!!!";
+		npctalk "?????? : This world!!!!", "??????#IBT_inB01", bc_self;
+		sleep2 500;
+		mes "Until the day they are at our feet, us Nazarians!!!!";
+		npctalk "?????? : Until the day they are at our feet, us Nazarians!!!!", "??????#IBT_inB01", bc_self;
+		sleep2 500;
+		mes "Will not stop the invasion!";
+		npctalk "?????? : Will not stop the invasion!", "??????#IBT_inB01", bc_self;
+		next;
+		mes "[Nazarians]";
+		mes "Okay! A new body has arrived!";
+		mes "We will plant our holy core into the body that is only an empty shell!";
+		next;
+		mes "[??????]";
+		mes "Drivius! Come on get it!!!";
+		next;
+		mes "[Drivius]";
+		mes "Yes!!! His Majesty is here!!!";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "Ha ha... look!";
+		mes "This bright and beautiful figure...";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "People!!!";
+		mes "Welcome!";
+		mes "Brave newly born soldiers!!!!";
+		cloakonnpcself( "??????#IBT_inB02_1" );
+		cloakoffnpcself( "??????#IBT_inB02_2" );
+		npctalk "?????? : ...oh...ahah...", "??????#IBT_inB01", bc_self;
+		next;
+		mes "[Nazarians]";
+		mes "Waaaaaaaa!!!!";
+		mes "Long live the Emperor!!!!";
+		next;
+		mes "[Nazarians]";
+		mes "Hooray!!! Hooray!!!";
+		next;
+		mes "[Nazarians]";
+		mes "Look at those dashing soldiers over there!!!";
+		mes "Awesome!!!!";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "The world will bow before the mighty power of the Nazarians!!!!!";
+		next;
+		mes "[Nazarians]";
+		mes "Waaaaaaaa!!!!";
+		mes "Long live the Emperor!!!!";
+		mes "Hooray!!! Hooray!!!";
+		cloakoffnpcself( "Steven#IBT_inN" );
+		cloakoffnpcself( "Acid#IBT_inN" );
+		next;
+		mes "[Steven]";
+		mes "Wait what's that?";
+		mes "Isn't that the doll we made?";
+		next;
+		mes "[Acid]";
+		mes "I guess so?";
+		next;
+		mes "[Steven]";
+		mes "It does not only look like that, it is the one we made!";
+		next;
+		mes "[Steven]";
+		mes "It's the one who made a mess because you sewed wrong?? Yes!";
+		next;
+		mes "[Acid]";
+		mes "What a mess...";
+		mes "That one has its own cuteness point?";
+		next;
+		mes "[Steven]";
+		mes "...cute horns...";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "Hmm...";
+		mes "Oops...";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "It looks like a rat has lurked into the sacred assembly.";
+		next;
+		mes "[Emperor of Nazarians]";
+		mes "Warriors of Nazarians!!!!";
+		mes "Punish the intruder!!!";
+		next;
+		mes "[Nazarians]";
+		mes "From our name!";
+		mes "We'll do it!";
+		next;
+		mes "[Nazarians]";
+		mes "Waaaaaaa!!!";
+		mes "Punish them!";
+		mes "It's an intruder!!!";
+		next;
+		mes "[Steven]";
+		mes "Oops!";
+		mes "Looks like we got caught?!";
+		next;
+		mes "[Steven]";
+		mes "Hey!";
+		mes "There are many enemies, so let's scatter and run away!";
+		next;
+		mes "[Steven]";
+		mes "Take care of those chasing us appropriately.";
+		mes "Then see you near the exit in a minute!";
+		ill_teddy = 8;
+		erasequest 11562;
+		setquest 11563;
+		setquest 11564;
+		close2;
+		cloakonnpcself( "Steven#IBT_inN" );
+		cloakonnpcself( "Acid#IBT_inN" );
+		cloakonnpcself( "??????#IBT_inB01" );
+		cloakonnpcself( "??????#IBT_inB02_2" );
+		cloakonnpcself( "??????#IBT_inB03" );
+		cloakonnpcself( "??????#IBT_inB04" );
+		cloakonnpcself( "??????#IBT_inB05" );
+		cloakonnpcself( "??????#IBT_inB06" );
+		cloakonnpcself( "??????#IBT_inB07" );
+		cloakonnpcself( "??????#IBT_inB08" );
+		cloakonnpcself( "??????#IBT_inB09" );
+		cloakonnpcself( "??????#IBT_inB10" );
+		cloakonnpcself( "??????#IBT_inB11" );
+		cloakonnpcself( "??????#IBT_inB12" );
+		cloakonnpcself( "??????#IBT_inB13" );
+		cloakonnpcself( "??????#IBT_inB15" );
+		cloakonnpcself( "??????#IBT_inB16" );
+		cloakonnpcself( "??????#IBT_inB17" );
+		cloakonnpcself( "??????#IBT_inB18" );
+		cloakonnpcself( "??????#IBT_inB19" );
+		cloakonnpcself( "??????#IBT_inB20" );
+		cloakonnpcself( "??????#IBT_inB21" );
+		cloakonnpcself( "??????#IBT_inB22" );
+		end;
+	}
+	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11562) == 1" );
+	end;
+}
+
+ein_d02_i,142,244,3	duplicate(dummy_cloaked_npc)	??????#IBT_inB01	4_NASARIAN_EM
+ein_d02_i,141,244,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB02_1	4_TEDDY_BEAR_B_L
+ein_d02_i,141,244,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB02_2	4_TEDDY_BEAR_B
+ein_d02_i,140,244,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB03	4_TEDDY_BEAR_W
+ein_d02_i,141,240,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB04	4_NASARIAN
+ein_d02_i,139,240,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB05	4_TEDDY_BEAR_W
+ein_d02_i,140,238,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB06	4_NASARIAN
+ein_d02_i,136,240,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB07	4_TEDDY_BEAR_W
+ein_d02_i,133,240,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB08	4_TEDDY_BEAR_B
+ein_d02_i,142,237,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB09	4_NASARIAN
+ein_d02_i,140,236,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB10	4_TEDDY_BEAR_W
+ein_d02_i,142,243,1	duplicate(dummy_cloaked_npc)	??????#IBT_inB11	4_NASARIAN
+ein_d02_i,144,242,3	duplicate(dummy_cloaked_npc)	??????#IBT_inB12	4_NASARIAN
+ein_d02_i,144,240,1	duplicate(dummy_cloaked_npc)	??????#IBT_inB13	4_NASARIAN
+ein_d02_i,141,246,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB14	4_TEDDY_BEAR_W
+ein_d02_i,141,237,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB15	4_NASARIAN
+ein_d02_i,141,242,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB16	4_TEDDY_BEAR_B
+ein_d02_i,137,240,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB17	4_NASARIAN
+ein_d02_i,136,238,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB18	4_NASARIAN
+ein_d02_i,138,238,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB19	4_NASARIAN
+ein_d02_i,141,241,7	duplicate(dummy_cloaked_npc)	??????#IBT_inB20	4_TEDDY_BEAR_B
+ein_d02_i,145,241,1	duplicate(dummy_cloaked_npc)	??????#IBT_inB21	4_NASARIAN
+ein_d02_i,140,243,5	duplicate(dummy_cloaked_npc)	??????#IBT_inB22	4_NASARIAN
+ein_d02_i,133,233,7	duplicate(dummy_cloaked_npc)	Steven#IBT_inN	4W_M_02
+
+ein_d02_i,168,206,5	script	Gloomy Teddy Bear#ITB	4_TEDDY_BEAR_B_L,{
+	if (checkweight(1201,3) == 0) {
+		mes "- Wait a moment!!";
+		mes "- You have too many items. -";
+		mes "- You can't receive this. -";
+		mes "- Lighten your weight and -";
+		mes "- try again. -";
+		close;
+	}
+	if (ill_teddy < 9) {
+		mes "[Gloomy Teddy Bear]";
+		mes "Ah...";
+		mes "Is this a dream or reality...";
+		mes "Am I dead... or am I alive...";
+		next;
+		mes "[Gloomy Teddy Bear]";
+		mes "We're... not supposed to come back...";
+		mes "I have to go back...";
+		close;
+	}
+	switch( checkquest(11569,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Gloomy Teddy Bear]";
+		mes "Whoops...don't rush me like that...";
+		close;
+	case 2:
+		erasequest 11569;
+		break;
+	}
+	switch( checkquest(11567,HUNTING) ) {
+	case -1:
+		mes "[Gloomy Teddy Bear]";
+		mes "Ah...";
+		mes "Is this a dream or reality...";
+		mes "Am I dead... or am I alive...";
+		next;
+		mes "[Gloomy Teddy Bear]";
+		mes "We're... not supposed to come back...";
+		mes "I have to go back...";
+		next;
+		mes "[Gloomy Teddy Bear]";
+		mes "Hey... don't just stand there, help me...";
+		mes "Me... the Nazarians...";
+		next;
+		mes "[Gloomy Teddy Bear]";
+		mes "^ff0000Kill 10 " + getmonsterinfo("ILL_TEDDY_BEAR_R", MOB_NAME) + ", " + getmonsterinfo("ILL_TEDDY_BEAR_Y", MOB_NAME) + ", " + getmonsterinfo("ILL_TEDDY_BEAR_G", MOB_NAME) + ", " + getmonsterinfo("ILL_TEDDY_BEAR_B", MOB_NAME) + ", and " + getmonsterinfo("ILL_TEDDY_BEAR_W", MOB_NAME) + "^000000 and return them to the depths... to rest...";
+		next;
+		if (select( "Accept", "Quit" ) == 2) {
+			mes "[Gloomy Teddy Bear]";
+			mes "...Ah...";
+			close;
+		}
+		mes "[Gloomy Teddy Bear]";
+		mes "I want to end this... infernal nightmare...";
+		mes "Come on...";
+		setquest 11567;
+		setquest 11568;
+		close;
+	case 0:
+	case 1:
+		mes "[Gloomy Teddy Bear]";
+		mes "Ah... When will the peaceful rest...";
+		mes "...is the request yet...";
+		close;
+	case 2:
+		switch( checkquest(11568,HUNTING) ) {
+		case -1:
+			end;
+		case 0:
+		case 1:
+			mes "[Gloomy Teddy Bear]";
+			mes "Ah... When will the peaceful rest...";
+			mes "...is the request yet...";
+			close;
+		case 2:
+			mes "[Gloomy Teddy Bear]";
+			mes "Why is it still... not going away...";
+			mes "This horrible nightmare...";
+			erasequest 11567;
+			erasequest 11568;
+			setquest 11569;
+			getitem 25271,1; // IllusionStone
+			getexp 1300000,1000000;
+			close;
+		}
+		end;
+	}
+	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "ill_teddy == 9 && checkquest(11569,PLAYTIME) == -1 && checkquest(11567,HUNTING) == -1 && checkquest(11568,HUNTING) == -1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11569,PLAYTIME) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11567,HUNTING) == 2 && checkquest(11568,HUNTING) == 2" );
+	end;
+}
+
+
+ein_d02_i,191,192,3	script	Porcelain Doll Craftsman#ITB	4_F_HUWOMAN,{
+	if (checkweight(1201,3) == 0) {
+		mes "- Wait a moment!!";
+		mes "- You have too many items. -";
+		mes "- You can't receive this. -";
+		mes "- Lighten your weight and -";
+		mes "- try again. -";
+		close;
+	}
+	if (ill_teddy < 9) {
+		mes "[Porcelain Doll Craftsman]";
+		mes "Kyaaaaaa!!!!!";
+		mes "You were surprised!";
+		close;
+	}
+	switch( checkquest(11571,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Porcelain Doll Craftsman]";
+		mes "Adventurer, welcome back.";
+		mes "Thanks to you, I have been able to continue my studies in the deep parts of the mine.";
+		mes "Please come back again at dawn.";
+		close;
+	case 2:
+		erasequest 11571;
+		break;
+	}
+	switch( checkquest(11570,HUNTING) ) {
+	case -1:
+		mes "[Porcelain Doll Craftsman]";
+		mes "Kyaaaaaa!!!!!";
+		mes "You were surprised!";
+		next;
+		mes "[Porcelain Doll Craftsman]";
+		mes "Have you ever seen a huge ^ff0000" + getmonsterinfo("ILL_TEDDY_BEAR_S", MOB_NAME) + "^000000 nearby?";
+		mes "I barely made it to the entrance, but when I try to leave, he shows up and has been hiding here for days.";
+		next;
+		if (select( "Help", "Quit" ) == 2) {
+			mes "[Porcelain Doll Craftsman]";
+			mes "Sob!";
+			mes "It's over!!!";
+			mes "I'm stuck here forever!";
+			close;
+		}
+		mes "[Porcelain Doll Craftsman]";
+		mes "Alive!!!";
+		mes "Did you see that?";
+		mes "It's a huge ^ff0000" + getmonsterinfo("ILL_TEDDY_BEAR_S", MOB_NAME) + "^000000.";
+		mes "You must kill it!";
+		setquest 11570;
+		close;
+	case 0:
+	case 1:
+		mes "[Porcelain Doll Craftsman]";
+		mes "How are you?";
+		mes "Have you killed ^ff0000" + getmonsterinfo("ILL_TEDDY_BEAR_S", MOB_NAME) + "^000000?";
+		close;
+	case 2:
+		// unknown text
+		erasequest 11570;
+		setquest 11571;
+		getitem 25271,1; // IllusionStone
+		getexp 1500000,1100000;
+		end;
+	}
+	end;
+
+OnInit:
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "ill_teddy == 9 && checkquest(11571,PLAYTIME) == -1 && checkquest(11570,HUNTING) == -1" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11571,PLAYTIME) == 2" );
+	questinfo( QTYPE_QUEST, QMARK_YELLOW, "checkquest(11570,HUNTING) == 2" );
+	end;
+}
+
+ein_d02_i,169,244,1	script	White Bear#ITBz01	4_TEDDY_BEAR_W,3,3,{
+	end;
+OnTouch:
+	npctalk "White Teddy Bear: Ah... dear Charlotte... to be in a place like this...", "", bc_self;
+	end;
+}
+
+ein_d02_i,169,244,1	script	Sirumsireum Teddy Bear#ITBz02	4_TEDDY_BEAR_B_L,{
+	npctalk "Teddy Bear: What have you done to me...", "", bc_self;
+	end;
+}

+ 6 - 6
npc/re/quests/quests_malaya.txt

@@ -2625,13 +2625,13 @@ OnTouch:
 		delitem 6506, 1; // Memorial_Boquet
 		delitem 6506, 1; // Memorial_Boquet
 		erasequest 7398;
 		erasequest 7398;
 		setquest 7399;
 		setquest 7399;
-		close;
+		close3;
 	} else if (malaya_diwata == 5) {
 	} else if (malaya_diwata == 5) {
 		cutin "malaya_diwata02", 2;
 		cutin "malaya_diwata02", 2;
 		mes "[Diwata]";
 		mes "[Diwata]";
 		mes "I promise I'll be a good little girl if those hillbillies leave me alone.";
 		mes "I promise I'll be a good little girl if those hillbillies leave me alone.";
 		mes "If they bother me again, however, I won't be.";
 		mes "If they bother me again, however, I won't be.";
-		close;
+		close3;
 	} else {
 	} else {
 		if (checkquest(7402) == -1) {
 		if (checkquest(7402) == -1) {
 			if (checkquest(7403) == -1) {
 			if (checkquest(7403) == -1) {
@@ -2650,7 +2650,7 @@ OnTouch:
 					mes "The flowers you bring makes me calm down.";
 					mes "The flowers you bring makes me calm down.";
 					mes "....";
 					mes "....";
 					mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
 					mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
-					close;
+					close3;
 				}
 				}
 				cutin "malaya_diwata01", 2;
 				cutin "malaya_diwata01", 2;
 				mes "[Diwata]";
 				mes "[Diwata]";
@@ -2658,7 +2658,7 @@ OnTouch:
 				mes "What? Oh, it's you.";
 				mes "What? Oh, it's you.";
 				mes "Those hillbillies came back again!";
 				mes "Those hillbillies came back again!";
 				mes "I'm going to kill them!";
 				mes "I'm going to kill them!";
-				close;
+				close3;
 			}
 			}
 			cutin "malaya_diwata02", 2;
 			cutin "malaya_diwata02", 2;
 			mes "[Diwata]";
 			mes "[Diwata]";
@@ -2669,7 +2669,7 @@ OnTouch:
 			mes "The flowers you bring makes me calm down.";
 			mes "The flowers you bring makes me calm down.";
 			mes "....";
 			mes "....";
 			mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
 			mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
-			close;
+			close3;
 		}
 		}
 		cutin "malaya_diwata01", 2;
 		cutin "malaya_diwata01", 2;
 		mes "[Diwata]";
 		mes "[Diwata]";
@@ -2718,7 +2718,7 @@ OnTouch:
 		delitem 6506, 1; // Memorial_Boquet
 		delitem 6506, 1; // Memorial_Boquet
 		setquest 7403;
 		setquest 7403;
 		erasequest 7402;
 		erasequest 7402;
-		close;
+		close3;
 	}
 	}
 	cutin "", 255;
 	cutin "", 255;
 	end;
 	end;

+ 7 - 7
npc/re/quests/quests_mora.txt

@@ -3389,26 +3389,26 @@ L_ShowReport:
 	mes "[Experimental Results]";
 	mes "[Experimental Results]";
 	mes "*** Researcher - Inffle";
 	mes "*** Researcher - Inffle";
 	mes "*** Research Assistant - "+strcharinfo(0);
 	mes "*** Research Assistant - "+strcharinfo(0);
-	mes "¡¡";
+	mes " ";
 	mes "<Research topic>";
 	mes "<Research topic>";
 	mes "*** Bath of Mora Village";
 	mes "*** Bath of Mora Village";
-	mes "¡¡";
+	mes " ";
 	mes "<Aim>";
 	mes "<Aim>";
 	mes "To investigate the mysterious power of the bath water";
 	mes "To investigate the mysterious power of the bath water";
 	mes "and to find out ways to better utilize";
 	mes "and to find out ways to better utilize";
 	mes "the water.";
 	mes "the water.";
-	mes "¡¡";
+	mes " ";
 	mes "<Methods>";
 	mes "<Methods>";
 	mes "1. Obtained an unidentified DNA sample.";
 	mes "1. Obtained an unidentified DNA sample.";
 	mes "Obtained a sample of an unidentified DNA,";
 	mes "Obtained a sample of an unidentified DNA,";
 	mes "and collected more samples to look further into it.";
 	mes "and collected more samples to look further into it.";
-	mes "¡¡";
+	mes " ";
 	mes "2. A comparison analysis on the unidentified DNA";
 	mes "2. A comparison analysis on the unidentified DNA";
 	mes "Concluded that the DNA belongs to";
 	mes "Concluded that the DNA belongs to";
 	mes "an unidentified creature living in the bath water.";
 	mes "an unidentified creature living in the bath water.";
 	mes "combine and result in";
 	mes "combine and result in";
 	mes "from the swordfish DNA.";
 	mes "from the swordfish DNA.";
-	mes "¡¡";
+	mes " ";
 	mes "3. Research on the puddles around the village";
 	mes "3. Research on the puddles around the village";
 	mes "From the four puddles around the village,";
 	mes "From the four puddles around the village,";
 	mes "confirmed that the testing substances were";
 	mes "confirmed that the testing substances were";
@@ -3416,9 +3416,9 @@ L_ShowReport:
 	mes "It is thought that the four puddles";
 	mes "It is thought that the four puddles";
 	mes "combine and result in";
 	mes "combine and result in";
 	mes "the mysterious power.";
 	mes "the mysterious power.";
-	mes "¡¡";
+	mes " ";
 	mes "<Material analysis>";
 	mes "<Material analysis>";
-	mes "*** Temperature ***** 33.5° ";
+	mes "*** Temperature ***** 33.5¡Æ";
 	mes "*** PH ************ 9.8";
 	mes "*** PH ************ 9.8";
 	mes "*** Solid residues *** 176";
 	mes "*** Solid residues *** 176";
 	mes "*** K+ ************ 0,23";
 	mes "*** K+ ************ 0,23";

+ 1 - 4
npc/re/scripts_athena.conf

@@ -14,7 +14,6 @@ npc: npc/re/battleground/bg_common.txt
 
 
 // --------------------------- Cities ---------------------------
 // --------------------------- Cities ---------------------------
 npc: npc/re/cities/alberta.txt
 npc: npc/re/cities/alberta.txt
-npc: npc/re/cities/brasilis.txt
 npc: npc/re/cities/comodo.txt
 npc: npc/re/cities/comodo.txt
 npc: npc/re/cities/dewata.txt
 npc: npc/re/cities/dewata.txt
 npc: npc/re/cities/dicastes.txt
 npc: npc/re/cities/dicastes.txt
@@ -154,7 +153,6 @@ npc: npc/re/merchants/guild_warehouse.txt
 npc: npc/re/merchants/hd_refiner.txt
 npc: npc/re/merchants/hd_refiner.txt
 npc: npc/re/merchants/HorrorToyFactory_merchants.txt
 npc: npc/re/merchants/HorrorToyFactory_merchants.txt
 npc: npc/re/merchants/InfiniteSpace_merchants.txt
 npc: npc/re/merchants/InfiniteSpace_merchants.txt
-npc: npc/re/merchants/inn.txt
 npc: npc/re/merchants/malangdo_costume.txt
 npc: npc/re/merchants/malangdo_costume.txt
 npc: npc/re/merchants/moro_cav_exchange.txt
 npc: npc/re/merchants/moro_cav_exchange.txt
 npc: npc/re/merchants/mysterious_cookie_shop.txt
 npc: npc/re/merchants/mysterious_cookie_shop.txt
@@ -177,6 +175,7 @@ npc: npc/re/merchants/enchan_upg.txt
 npc: npc/re/merchants/te_merchant.txt
 npc: npc/re/merchants/te_merchant.txt
 npc: npc/re/merchants/shadow_refiner.txt
 npc: npc/re/merchants/shadow_refiner.txt
 npc: npc/re/merchants/eden_market.txt
 npc: npc/re/merchants/eden_market.txt
+//npc: npc/re/merchants/shopping_boards.txt
 
 
 // --------------------------- Others ---------------------------
 // --------------------------- Others ---------------------------
 npc: npc/re/other/achievements.txt
 npc: npc/re/other/achievements.txt
@@ -245,7 +244,6 @@ npc: npc/re/quests/quests_17_1.txt
 npc: npc/re/quests/quests_17_2.txt
 npc: npc/re/quests/quests_17_2.txt
 npc: npc/re/quests/quests_18_1.txt
 npc: npc/re/quests/quests_18_1.txt
 npc: npc/re/quests/quests_aldebaran.txt
 npc: npc/re/quests/quests_aldebaran.txt
-npc: npc/re/quests/quests_brasilis.txt
 npc: npc/re/quests/quests_dewata.txt
 npc: npc/re/quests/quests_dewata.txt
 npc: npc/re/quests/quests_dicastes.txt
 npc: npc/re/quests/quests_dicastes.txt
 npc: npc/re/quests/quests_dungeons_200.txt
 npc: npc/re/quests/quests_dungeons_200.txt
@@ -273,4 +271,3 @@ npc: npc/re/quests/woe_te/te_goditem_alde1.txt
 npc: npc/re/custom/lasagna/lasa_dun.txt
 npc: npc/re/custom/lasagna/lasa_dun.txt
 npc: npc/re/custom/lasagna/lasa_fild.txt
 npc: npc/re/custom/lasagna/lasa_fild.txt
 npc: npc/re/custom/lasagna/lasagna_npcs.txt
 npc: npc/re/custom/lasagna/lasagna_npcs.txt
-npc: npc/re/custom/lasagna/warps.txt

+ 1 - 0
npc/re/scripts_mapflags.conf

@@ -2,3 +2,4 @@
 // -                       Renewal Map Flags                    -
 // -                       Renewal Map Flags                    -
 // --------------------------------------------------------------
 // --------------------------------------------------------------
 npc: npc/re/mapflag/norenewalpenalty.txt
 npc: npc/re/mapflag/norenewalpenalty.txt
+npc: npc/re/mapflag/specialpopup.txt

+ 1 - 3
npc/re/scripts_warps.conf

@@ -4,12 +4,12 @@
 
 
 // --------------------------- Cities ---------------------------
 // --------------------------- Cities ---------------------------
 npc: npc/re/warps/cities/alberta.txt
 npc: npc/re/warps/cities/alberta.txt
-npc: npc/re/warps/cities/brasilis.txt
 npc: npc/re/warps/cities/dewata.txt
 npc: npc/re/warps/cities/dewata.txt
 npc: npc/re/warps/cities/dicastes.txt
 npc: npc/re/warps/cities/dicastes.txt
 npc: npc/re/warps/cities/eclage.txt
 npc: npc/re/warps/cities/eclage.txt
 npc: npc/re/warps/cities/einbech.txt
 npc: npc/re/warps/cities/einbech.txt
 npc: npc/re/warps/cities/einbroch.txt
 npc: npc/re/warps/cities/einbroch.txt
+npc: npc/re/warps/cities/lasagna.txt
 npc: npc/re/warps/cities/lighthalzen.txt
 npc: npc/re/warps/cities/lighthalzen.txt
 npc: npc/re/warps/cities/izlude.txt
 npc: npc/re/warps/cities/izlude.txt
 npc: npc/re/warps/cities/malangdo.txt
 npc: npc/re/warps/cities/malangdo.txt
@@ -21,7 +21,6 @@ npc: npc/re/warps/cities/yggdrasil.txt
 
 
 // -------------------------- Dungeons --------------------------
 // -------------------------- Dungeons --------------------------
 npc: npc/re/warps/dungeons/amicitia.txt
 npc: npc/re/warps/dungeons/amicitia.txt
-npc: npc/re/warps/dungeons/bra_dun.txt
 npc: npc/re/warps/dungeons/dic_dun.txt
 npc: npc/re/warps/dungeons/dic_dun.txt
 npc: npc/re/warps/dungeons/ecl_dun.txt
 npc: npc/re/warps/dungeons/ecl_dun.txt
 npc: npc/re/warps/dungeons/ein_dun.txt
 npc: npc/re/warps/dungeons/ein_dun.txt
@@ -38,7 +37,6 @@ npc: npc/re/warps/dungeons/thor_v.txt
 
 
 // --------------------------- Fields ---------------------------
 // --------------------------- Fields ---------------------------
 npc: npc/re/warps/fields/bif_fild.txt
 npc: npc/re/warps/fields/bif_fild.txt
-npc: npc/re/warps/fields/bra_fild.txt
 npc: npc/re/warps/fields/com_fild.txt
 npc: npc/re/warps/fields/com_fild.txt
 npc: npc/re/warps/fields/dic_fild.txt
 npc: npc/re/warps/fields/dic_fild.txt
 npc: npc/re/warps/fields/geffen_fild.txt
 npc: npc/re/warps/fields/geffen_fild.txt

+ 47 - 0
npc/re/warps/cities/lasagna.txt

@@ -0,0 +1,47 @@
+//===== rAthena Script =======================================
+//= Lasagna Warps
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [Capuche]
+//= 1.1 Official conversion. [Lemongrass]
+//============================================================
+
+lasa_fild02,348,244,0	warp	lasadun01_in	1,1,lasa_dun01,24,143
+lasa_dun01,18,143,0	warp	lasadun_out	1,1,lasa_fild02,344,243
+
+lasa_dun_q,190,14,0	warp	dun_q_dun01	1,1,lasa_dun01,152,98
+lasa_dun01,157,98,0	warp	lasadun01_to2f	1,1,lasa_dun02,22,171
+lasa_dun02,18,171,0	warp	lasadun02_to1f	1,1,lasa_dun01,153,98
+
+lasa_dun02,146,58,0	warp	lasadun02_to3f	1,1,lasa_dun03,190,18
+lasa_dun03,190,15,0	warp	lasadun03_to2f	1,1,lasa_dun02,146,54
+
+lasa_fild01,134,381,0	warp	lasagna_in01	2,2,lasagna,153,58
+lasagna,150,54,0	warp	lasagna_out01	2,2,lasa_fild01,131,378
+
+lasa_fild01,341,375,0	warp	lasagna_in02	1,1,lasagna,327,56
+lasagna,327,51,0	warp	lasagna_out02	1,1,lasa_fild01,344,371
+
+lasagna,358,91,0	warp	lasagna_in03	1,1,lasa_fild02,20,98
+// lasa_fild02,16,98,0	warp	lasagna_in03	1,1,lasagna,355,92 // (NPC name is not unique)
+lasa_fild02,16,98,0	warp	lasagna_in03#01	1,1,lasagna,355,92
+
+lasa_in01,159,61,0	warp	dining_lasa	1,1,lasagna,68,202
+
+// Boat
+conch_in,60,61,0	warp2	conch_lasagna	1,1,lasagna,206,323
+conch_in,51,60,0	warp2	hall_cap	1,1,conch_in,31,60
+conch_in,34,60,0	warp2	cap_hall	1,1,conch_in,53,59
+conch_in,63,53,0	warp2	hall_in04	1,1,conch_in,63,33
+conch_in,63,35,0	warp2	in04_hall	1,1,conch_in,64,55
+conch_in,64,66,0	warp2	hall_in01	1,1,conch_in,63,89
+conch_in,63,87,0	warp2	in01_hall	1,1,conch_in,63,64
+conch_in,101,53,0	warp2	hall_in05	1,1,conch_in,101,33
+conch_in,101,35,0	warp2	in05_hall	1,1,conch_in,102,55
+conch_in,101,66,0	warp2	hall_in02	1,1,conch_in,101,89
+conch_in,102,87,0	warp2	in02_hall	1,1,conch_in,101,64
+conch_in,137,53,0	warp2	hall_in06	1,1,conch_in,139,33
+conch_in,139,35,0	warp2	in06_hall	1,1,conch_in,138,55
+conch_in,137,66,0	warp2	hall_in03	1,1,conch_in,139,89
+conch_in,140,87,0	warp2	in03_hall	1,1,conch_in,137,64
+conch_in,142,60,0	warp2	hall_dining	1,1,conch_in,162,61
+conch_in,159,61,0	warp2	dining_hall	1,1,conch_in,140,59

+ 0 - 17
npc/re/warps/dungeons/bra_dun.txt

@@ -1,17 +0,0 @@
-//===== rAthena Script =======================================
-//= Brasilis Dungeon Warp
-//===== By: ==================================================
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Description: =========================================
-//= [Official Conversion]
-//= Brasilis Dungeon warp script
-//===== Additional Comments: =================================
-//= 1.0 First version.
-//============================================================
-
-bra_dun01,199,35,0	warp	brad1tobrad2	1,1,bra_dun02,261,263
-bra_dun02,261,265,0	warp	brad2tobrad1	1,1,bra_dun01,199,37

+ 0 - 17
npc/re/warps/fields/bra_fild.txt

@@ -1,17 +0,0 @@
-//===== rAthena Script =======================================
-//= Brasilis Fild Warps Script
-//===== By: ==================================================
-//= Protimus
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Description: =========================================
-//= [Official Conversion]
-//= Warp Points for Brasilis
-//===== Additional Comments: =================================
-//= 1.0 First version.
-//============================================================
-
-bra_fild01,72,34,0	warp	bra_fild01_brasilis	1,1,brasilis,309,334
-brasilis,308,336,0	warp	brasilis_bra_fild01	1,1,bra_fild01,74,34

+ 2 - 0
npc/scripts_athena.conf

@@ -34,6 +34,7 @@ npc: npc/cities/alberta.txt
 npc: npc/cities/aldebaran.txt
 npc: npc/cities/aldebaran.txt
 npc: npc/cities/amatsu.txt
 npc: npc/cities/amatsu.txt
 npc: npc/cities/ayothaya.txt
 npc: npc/cities/ayothaya.txt
+npc: npc/cities/brasilis.txt
 npc: npc/cities/comodo.txt
 npc: npc/cities/comodo.txt
 npc: npc/cities/einbech.txt
 npc: npc/cities/einbech.txt
 npc: npc/cities/einbroch.txt
 npc: npc/cities/einbroch.txt
@@ -250,6 +251,7 @@ npc: npc/quests/quests_alberta.txt
 npc: npc/quests/quests_aldebaran.txt
 npc: npc/quests/quests_aldebaran.txt
 npc: npc/quests/quests_amatsu.txt
 npc: npc/quests/quests_amatsu.txt
 npc: npc/quests/quests_ayothaya.txt
 npc: npc/quests/quests_ayothaya.txt
+npc: npc/quests/quests_brasilis.txt
 npc: npc/quests/quests_comodo.txt
 npc: npc/quests/quests_comodo.txt
 npc: npc/quests/quests_ein.txt
 npc: npc/quests/quests_ein.txt
 npc: npc/quests/quests_geffen.txt
 npc: npc/quests/quests_geffen.txt

+ 3 - 0
npc/scripts_warps.conf

@@ -7,6 +7,7 @@ npc: npc/warps/cities/alberta.txt
 npc: npc/warps/cities/aldebaran.txt
 npc: npc/warps/cities/aldebaran.txt
 npc: npc/warps/cities/amatsu.txt
 npc: npc/warps/cities/amatsu.txt
 npc: npc/warps/cities/ayothaya.txt
 npc: npc/warps/cities/ayothaya.txt
+npc: npc/warps/cities/brasilis.txt
 npc: npc/warps/cities/comodo.txt
 npc: npc/warps/cities/comodo.txt
 npc: npc/warps/cities/einbech.txt
 npc: npc/warps/cities/einbech.txt
 npc: npc/warps/cities/einbroch.txt
 npc: npc/warps/cities/einbroch.txt
@@ -37,6 +38,7 @@ npc: npc/warps/dungeons/ama_dun.txt
 npc: npc/warps/dungeons/anthell.txt
 npc: npc/warps/dungeons/anthell.txt
 npc: npc/warps/dungeons/ayo_dun.txt
 npc: npc/warps/dungeons/ayo_dun.txt
 npc: npc/warps/dungeons/beach_dun.txt
 npc: npc/warps/dungeons/beach_dun.txt
+npc: npc/warps/dungeons/bra_dun.txt
 npc: npc/warps/dungeons/c_tower.txt
 npc: npc/warps/dungeons/c_tower.txt
 npc: npc/warps/dungeons/ein_dun.txt
 npc: npc/warps/dungeons/ein_dun.txt
 npc: npc/warps/dungeons/gef_dun.txt
 npc: npc/warps/dungeons/gef_dun.txt
@@ -67,6 +69,7 @@ npc: npc/warps/dungeons/xmas_dun.txt
 // --------------------------- Fields ---------------------------
 // --------------------------- Fields ---------------------------
 npc: npc/warps/fields/abyss_warper.txt
 npc: npc/warps/fields/abyss_warper.txt
 npc: npc/warps/fields/amatsu_fild.txt
 npc: npc/warps/fields/amatsu_fild.txt
+npc: npc/warps/fields/bra_fild.txt
 npc: npc/warps/fields/ein_fild.txt
 npc: npc/warps/fields/ein_fild.txt
 npc: npc/warps/fields/gefenia.txt
 npc: npc/warps/fields/gefenia.txt
 npc: npc/warps/fields/glastheim.txt
 npc: npc/warps/fields/glastheim.txt

+ 3 - 12
npc/re/warps/cities/brasilis.txt → npc/warps/cities/brasilis.txt

@@ -1,16 +1,7 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
-//= Brasilis Town Warps Script
-//===== By: ==================================================
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.2
-//===== Compatible With: =====================================
-//= rAthena Project; RO Episode 13.1+
-//===== Description: =========================================
-//= [Official Conversion]
-//= Warp Points for Brasilis
-//===== Additional Comments: =================================
-//= 1.0 First version.
+//= Brasilis Town Warps
+//===== Changelog: ===========================================
+//= 1.0 First version. [L0ne_W0lf]
 //= 1.1 Fixed warps according to official. [Protimus]
 //= 1.1 Fixed warps according to official. [Protimus]
 //= 1.1a Added Field warp according to official. [Jguy]
 //= 1.1a Added Field warp according to official. [Jguy]
 //= 1.2 Added missing warps & removed duplicated one. [Daegaladh]
 //= 1.2 Added missing warps & removed duplicated one. [Daegaladh]

+ 8 - 0
npc/warps/dungeons/bra_dun.txt

@@ -0,0 +1,8 @@
+//===== rAthena Script =======================================
+//= Brasilis Dungeon Warps
+//===== Changelog: ===========================================
+//= 1.0 First version. [L0ne_W0lf]
+//============================================================
+
+bra_dun01,199,35,0	warp	brad1tobrad2	1,1,bra_dun02,261,263
+bra_dun02,261,265,0	warp	brad2tobrad1	1,1,bra_dun01,199,37

+ 8 - 0
npc/warps/fields/bra_fild.txt

@@ -0,0 +1,8 @@
+//===== rAthena Script =======================================
+//= Brasilis Field Warps
+//===== Changelog: ===========================================
+//= 1.0 First version. [Protimus]
+//============================================================
+
+bra_fild01,72,34,0	warp	bra_fild01_brasilis	1,1,brasilis,309,334
+brasilis,308,336,0	warp	brasilis_bra_fild01	1,1,bra_fild01,74,34

+ 12 - 3
src/char/char.cpp

@@ -25,6 +25,7 @@
 #include <common/strlib.hpp>
 #include <common/strlib.hpp>
 #include <common/timer.hpp>
 #include <common/timer.hpp>
 #include <common/utilities.hpp>
 #include <common/utilities.hpp>
+#include <common/utils.hpp>
 
 
 #include "char_clif.hpp"
 #include "char_clif.hpp"
 #include "char_cnslif.hpp"
 #include "char_cnslif.hpp"
@@ -1357,10 +1358,12 @@ int char_check_char_name(char * name, char * esc_name)
 	if( name[0] == '\0' )
 	if( name[0] == '\0' )
 		return -2; // empty character name
 		return -2; // empty character name
 	/**
 	/**
-	 * The client does not allow you to create names with less than 4 characters, however,
-	 * the use of WPE can bypass this, and this fixes the exploit.
+	 * By default the client does not allow you to create names with less than 4 characters,
+	 * however the use of WPE can bypass this, and this fixes the exploit.
+	 * It can also be changed in the configuration file in conjunction with the
+	 * 'Remove 4/6 letter Character Name Limit' client diff patch.
 	 **/
 	 **/
-	if( strlen( name ) < 4 )
+	if( strlen( name ) < charserv_config.char_config.char_name_min_length )
 		return -2;
 		return -2;
 	// check content of character name
 	// check content of character name
 	if( remove_control_chars(name) )
 	if( remove_control_chars(name) )
@@ -2762,6 +2765,7 @@ void char_set_defaults(){
 	charserv_config.char_config.char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
 	charserv_config.char_config.char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
 	safestrncpy(charserv_config.char_config.unknown_char_name,"Unknown",sizeof(charserv_config.char_config.unknown_char_name)); // Name to use when the requested name cannot be determined
 	safestrncpy(charserv_config.char_config.unknown_char_name,"Unknown",sizeof(charserv_config.char_config.unknown_char_name)); // Name to use when the requested name cannot be determined
 	safestrncpy(charserv_config.char_config.char_name_letters,"",sizeof(charserv_config.char_config.char_name_letters)); // list of letters/symbols allowed (or not) in a character name. by [Yor]
 	safestrncpy(charserv_config.char_config.char_name_letters,"",sizeof(charserv_config.char_config.char_name_letters)); // list of letters/symbols allowed (or not) in a character name. by [Yor]
+	charserv_config.char_config.char_name_min_length = 4; // Minimum character name length
 
 
 	charserv_config.save_log = 1; // show loading/saving messages
 	charserv_config.save_log = 1; // show loading/saving messages
 	charserv_config.log_char = 1;	// loggin char or not [devil]
 	charserv_config.log_char = 1;	// loggin char or not [devil]
@@ -2833,6 +2837,7 @@ void char_config_split_startpoint( char* w1_value, char* w2_value, struct s_poin
 	size_t fields_length = 3 + 1;
 	size_t fields_length = 3 + 1;
 
 
 	(*count) = 0; // Reset to begin reading
 	(*count) = 0; // Reset to begin reading
+	memset(start_point, 0, sizeof(struct s_point_str) * MAX_STARTPOINT);
 
 
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	if (fields == nullptr)
 	if (fields == nullptr)
@@ -2872,6 +2877,8 @@ void char_config_split_startitem(char *w1_value, char *w2_value, struct startite
 	int i = 0;
 	int i = 0;
 	size_t fields_length = 3 + 1;
 	size_t fields_length = 3 + 1;
 
 
+	memset(start_items, 0, sizeof(struct startitem) * MAX_STARTITEM);
+
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	if (fields == nullptr)
 	if (fields == nullptr)
 		return; // Failed to allocate memory.
 		return; // Failed to allocate memory.
@@ -3025,6 +3032,8 @@ bool char_config_read(const char* cfgName, bool normal){
 			charserv_config.char_config.char_name_option = atoi(w2);
 			charserv_config.char_config.char_name_option = atoi(w2);
 		} else if (strcmpi(w1, "char_name_letters") == 0) {
 		} else if (strcmpi(w1, "char_name_letters") == 0) {
 			safestrncpy(charserv_config.char_config.char_name_letters, w2, sizeof(charserv_config.char_config.char_name_letters));
 			safestrncpy(charserv_config.char_config.char_name_letters, w2, sizeof(charserv_config.char_config.char_name_letters));
+		} else if (strcmpi(w1, "char_name_min_length") == 0) {
+			charserv_config.char_config.char_name_min_length = cap_value(atoi(w2), 0, NAME_LENGTH - 1);
 		} else if (strcmpi(w1, "char_del_level") == 0) { //disable/enable char deletion by its level condition [Lupus]
 		} else if (strcmpi(w1, "char_del_level") == 0) { //disable/enable char deletion by its level condition [Lupus]
 			charserv_config.char_config.char_del_level = atoi(w2);
 			charserv_config.char_config.char_del_level = atoi(w2);
 		} else if (strcmpi(w1, "char_del_delay") == 0) {
 		} else if (strcmpi(w1, "char_del_delay") == 0) {

+ 1 - 0
src/char/char.hpp

@@ -151,6 +151,7 @@ struct Char_Config {
 	char unknown_char_name[NAME_LENGTH]; // Name to use when the requested name cannot be determined
 	char unknown_char_name[NAME_LENGTH]; // Name to use when the requested name cannot be determined
 	char char_name_letters[1024]; // list of letters/symbols allowed (or not) in a character name. by [Yor]
 	char char_name_letters[1024]; // list of letters/symbols allowed (or not) in a character name. by [Yor]
 	int char_name_option; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
 	int char_name_option; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
+	uint8 char_name_min_length; // Minimum character name length (default: 4)
 	int char_del_option;	// Character deletion type, email = 1, birthdate = 2 (default)
 	int char_del_option;	// Character deletion type, email = 1, birthdate = 2 (default)
 	int char_del_restriction;	// Character deletion restriction (0: none, 1: if the character is in a party, 2: if the character is in a guild, 3: if the character is in a party or a guild)
 	int char_del_restriction;	// Character deletion restriction (0: none, 1: if the character is in a party, 2: if the character is in a guild, 3: if the character is in a party or a guild)
 	bool char_rename_party;	// Character renaming in a party
 	bool char_rename_party;	// Character renaming in a party

+ 2 - 2
src/common/mmo.hpp

@@ -115,7 +115,7 @@ typedef uint32 t_itemid;
 #define MAX_CLAN 500
 #define MAX_CLAN 500
 #define MAX_CLANALLIANCE 6
 #define MAX_CLANALLIANCE 6
 #ifndef MAX_BARTER_REQUIREMENTS
 #ifndef MAX_BARTER_REQUIREMENTS
-	#define MAX_BARTER_REQUIREMENTS 5
+	#define MAX_BARTER_REQUIREMENTS 6
 #endif
 #endif
 #ifndef WEB_AUTH_TOKEN_LENGTH
 #ifndef WEB_AUTH_TOKEN_LENGTH
 	#define WEB_AUTH_TOKEN_LENGTH 16+1
 	#define WEB_AUTH_TOKEN_LENGTH 16+1
@@ -152,7 +152,7 @@ const t_itemid WEDDING_RING_F = 2635;
 //For character names, title names, guilds, maps, etc.
 //For character names, title names, guilds, maps, etc.
 //Includes null-terminator as it is the length of the array.
 //Includes null-terminator as it is the length of the array.
 #define NAME_LENGTH (23 + 1)
 #define NAME_LENGTH (23 + 1)
-#define PASSWD_LENGTH (32+1)
+#define PASSWD_LENGTH (32 + 1)
 //NPC names can be longer than it's displayed on client (NAME_LENGTH).
 //NPC names can be longer than it's displayed on client (NAME_LENGTH).
 #define NPC_NAME_LENGTH 50
 #define NPC_NAME_LENGTH 50
 // <NPC_NAME_LENGTH> for npc name + 2 for a "::" + <NAME_LENGTH> for label + 1 for EOS
 // <NPC_NAME_LENGTH> for npc name + 2 for a "::" + <NAME_LENGTH> for label + 1 for EOS

+ 12 - 4
src/login/login.cpp

@@ -232,7 +232,7 @@ int login_mmo_auth_new(const char* userid, const char* pass, const char sex, con
 		return 3;
 		return 3;
 	}
 	}
 
 
-	if( login_config.new_acc_length_limit && ( strlen(userid) < 4 || strlen(pass) < 4 ) )
+	if( strlen(userid) < login_config.acc_name_min_length || strlen(pass) < login_config.password_min_length)
 		return 1;
 		return 1;
 
 
 	// check for invalid inputs
 	// check for invalid inputs
@@ -633,8 +633,10 @@ bool login_config_read(const char* cfgName, bool normal) {
 			login_config.log_login = (bool)config_switch(w2);
 			login_config.log_login = (bool)config_switch(w2);
 		else if(!strcmpi(w1, "new_account"))
 		else if(!strcmpi(w1, "new_account"))
 			login_config.new_account_flag = (bool)config_switch(w2);
 			login_config.new_account_flag = (bool)config_switch(w2);
-		else if(!strcmpi(w1, "new_acc_length_limit"))
-			login_config.new_acc_length_limit = (bool)config_switch(w2);
+		else if(!strcmpi(w1, "acc_name_min_length"))
+			login_config.acc_name_min_length = cap_value(atoi(w2), 0, NAME_LENGTH - 1);
+		else if(!strcmpi(w1, "password_min_length"))
+			login_config.password_min_length = cap_value(atoi(w2), 0, PASSWD_LENGTH - 1);
 		else if(!strcmpi(w1, "start_limited_time"))
 		else if(!strcmpi(w1, "start_limited_time"))
 			login_config.start_limited_time = atoi(w2);
 			login_config.start_limited_time = atoi(w2);
 		else if(!strcmpi(w1, "use_MD5_passwords"))
 		else if(!strcmpi(w1, "use_MD5_passwords"))
@@ -751,7 +753,13 @@ void login_set_defaults() {
 	safestrncpy(login_config.date_format, "%Y-%m-%d %H:%M:%S", sizeof(login_config.date_format));
 	safestrncpy(login_config.date_format, "%Y-%m-%d %H:%M:%S", sizeof(login_config.date_format));
 	login_config.console = false;
 	login_config.console = false;
 	login_config.new_account_flag = true;
 	login_config.new_account_flag = true;
-	login_config.new_acc_length_limit = true;
+#if PACKETVER >= 20181114
+	login_config.acc_name_min_length = 6;
+	login_config.password_min_length = 6;
+#else
+	login_config.acc_name_min_length = 4;
+	login_config.password_min_length = 4;
+#endif
 	login_config.use_md5_passwds = false;
 	login_config.use_md5_passwds = false;
 	login_config.group_id_to_connect = -1;
 	login_config.group_id_to_connect = -1;
 	login_config.min_group_id_to_connect = -1;
 	login_config.min_group_id_to_connect = -1;

+ 3 - 1
src/login/login.hpp

@@ -88,7 +88,9 @@ struct Login_Config {
 	bool log_login;                                 /// whether to log login server actions or not
 	bool log_login;                                 /// whether to log login server actions or not
 	char date_format[32];                           /// date format used in messages
 	char date_format[32];                           /// date format used in messages
 	bool console;                                   /// console input system enabled?
 	bool console;                                   /// console input system enabled?
-	bool new_account_flag,new_acc_length_limit;     /// autoregistration via _M/_F ? / if yes minimum length is 4?
+	bool new_account_flag;                          /// autoregistration via _M/_F ?
+	uint8 acc_name_min_length;                      /// minimum account name length
+	uint8 password_min_length;                      /// minimum password length
 	int start_limited_time;                         /// new account expiration time (-1: unlimited)
 	int start_limited_time;                         /// new account expiration time (-1: unlimited)
 	bool use_md5_passwds;                           /// work with password hashes instead of plaintext passwords?
 	bool use_md5_passwds;                           /// work with password hashes instead of plaintext passwords?
 	int group_id_to_connect;                        /// required group id to connect
 	int group_id_to_connect;                        /// required group id to connect

+ 9 - 2
src/map/battle.cpp

@@ -1375,7 +1375,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
 		if (sce->val3 <= 0) { // Shield Down
 		if (sce->val3 <= 0) { // Shield Down
 			sce->val2--;
 			sce->val2--;
 			if (sce->val2 > 0) {
 			if (sce->val2 > 0) {
-				clif_millenniumshield(target, sce->val2);
+				clif_millenniumshield( *target, sce->val2 );
 				sce->val3 = 1000; // Next shield
 				sce->val3 = 1000; // Next shield
 			} else
 			} else
 				status_change_end(target, SC_MILLENNIUMSHIELD); // All shields down
 				status_change_end(target, SC_MILLENNIUMSHIELD); // All shields down
@@ -11223,7 +11223,7 @@ static const struct _battle_data {
 	{ "mob_status_def_rate",                &battle_config.mob_sc_def_rate,                 100,    0,      INT_MAX,        },
 	{ "mob_status_def_rate",                &battle_config.mob_sc_def_rate,                 100,    0,      INT_MAX,        },
 	{ "pc_max_status_def",                  &battle_config.pc_max_sc_def,                   100,    0,      INT_MAX,        },
 	{ "pc_max_status_def",                  &battle_config.pc_max_sc_def,                   100,    0,      INT_MAX,        },
 	{ "mob_max_status_def",                 &battle_config.mob_max_sc_def,                  100,    0,      INT_MAX,        },
 	{ "mob_max_status_def",                 &battle_config.mob_max_sc_def,                  100,    0,      INT_MAX,        },
-	{ "sg_miracle_skill_ratio",             &battle_config.sg_miracle_skill_ratio,          1,      0,      10000,          },
+	{ "sg_miracle_skill_ratio",             &battle_config.sg_miracle_skill_ratio,          1,      0,      20000,          },
 	{ "sg_angel_skill_ratio",               &battle_config.sg_angel_skill_ratio,            10,     0,      10000,          },
 	{ "sg_angel_skill_ratio",               &battle_config.sg_angel_skill_ratio,            10,     0,      10000,          },
 	{ "autospell_stacking",                 &battle_config.autospell_stacking,              0,      0,      1,              },
 	{ "autospell_stacking",                 &battle_config.autospell_stacking,              0,      0,      1,              },
 	{ "override_mob_names",                 &battle_config.override_mob_names,              0,      0,      2,              },
 	{ "override_mob_names",                 &battle_config.override_mob_names,              0,      0,      2,              },
@@ -11499,6 +11499,13 @@ static const struct _battle_data {
 #endif
 #endif
 	{ "synchronize_damage",                 &battle_config.synchronize_damage,              0,      0,      1,              },
 	{ "synchronize_damage",                 &battle_config.synchronize_damage,              0,      0,      1,              },
 	{ "item_stacking",                      &battle_config.item_stacking,                   1,      0,      1,              },
 	{ "item_stacking",                      &battle_config.item_stacking,                   1,      0,      1,              },
+#ifdef RENEWAL
+	{ "hom_delay_reset_vaporize",           &battle_config.hom_delay_reset_vaporize,        0,      0,      1,              },
+	{ "hom_delay_reset_warp",               &battle_config.hom_delay_reset_warp,            0,      0,      1,              },
+#else
+	{ "hom_delay_reset_vaporize",           &battle_config.hom_delay_reset_vaporize,        1,      0,      1,              },
+	{ "hom_delay_reset_warp",               &battle_config.hom_delay_reset_warp,            1,      0,      1,              },
+#endif
 
 
 #include <custom/battle_config_init.inc>
 #include <custom/battle_config_init.inc>
 };
 };

+ 2 - 0
src/map/battle.hpp

@@ -744,6 +744,8 @@ struct Battle_Config
 	int instance_allow_reconnect;
 	int instance_allow_reconnect;
 	int synchronize_damage;
 	int synchronize_damage;
 	int item_stacking;
 	int item_stacking;
+	int hom_delay_reset_vaporize;
+	int hom_delay_reset_warp;
 
 
 #include <custom/battle_config_struct.inc>
 #include <custom/battle_config_struct.inc>
 };
 };

+ 3 - 3
src/map/buyingstore.cpp

@@ -307,7 +307,7 @@ void buyingstore_open(map_session_data* sd, uint32 account_id)
 		return;
 		return;
 	}
 	}
 
 
-	if( !searchstore_queryremote(sd, account_id) && ( sd->bl.m != pl_sd->bl.m || !check_distance_bl(&sd->bl, &pl_sd->bl, AREA_SIZE) ) )
+	if( !searchstore_queryremote(*sd, account_id) && ( sd->bl.m != pl_sd->bl.m || !check_distance_bl(&sd->bl, &pl_sd->bl, AREA_SIZE) ) )
 	{// out of view range
 	{// out of view range
 		return;
 		return;
 	}
 	}
@@ -354,13 +354,13 @@ void buyingstore_trade( map_session_data* sd, uint32 account_id, unsigned int bu
 		return;
 		return;
 	}
 	}
 
 
-	if( !searchstore_queryremote(sd, account_id) && ( sd->bl.m != pl_sd->bl.m || !check_distance_bl(&sd->bl, &pl_sd->bl, AREA_SIZE) ) )
+	if( !searchstore_queryremote(*sd, account_id) && ( sd->bl.m != pl_sd->bl.m || !check_distance_bl(&sd->bl, &pl_sd->bl, AREA_SIZE) ) )
 	{// out of view range
 	{// out of view range
 		clif_buyingstore_trade_failed_seller(sd, BUYINGSTORE_TRADE_SELLER_FAILED, 0);
 		clif_buyingstore_trade_failed_seller(sd, BUYINGSTORE_TRADE_SELLER_FAILED, 0);
 		return;
 		return;
 	}
 	}
 
 
-	searchstore_clearremote(sd);
+	searchstore_clearremote(*sd);
 
 
 	// buyer lost zeny in the mean time? fix the limit
 	// buyer lost zeny in the mean time? fix the limit
 	if( pl_sd->status.zeny < pl_sd->buyingstore.zenylimit ){
 	if( pl_sd->status.zeny < pl_sd->buyingstore.zenylimit ){

+ 136 - 87
src/map/clif.cpp

@@ -180,7 +180,7 @@ static inline void WBUFPOS(uint8* p, unsigned short pos, short x, short y, unsig
 
 
 
 
 // client-side: x0+=sx0*0.0625-0.5 and y0+=sy0*0.0625-0.5
 // client-side: x0+=sx0*0.0625-0.5 and y0+=sy0*0.0625-0.5
-static inline void WBUFPOS2(uint8* p, unsigned short pos, short x0, short y0, short x1, short y1, unsigned char sx0, unsigned char sy0) {
+static inline void WBUFPOS2(uint8* p, unsigned short pos, short x0, short y0, short x1, short y1, uint8 sx0, uint8 sy0) {
 	p += pos;
 	p += pos;
 	p[0] = (uint8)(x0>>2);
 	p[0] = (uint8)(x0>>2);
 	p[1] = (uint8)((x0<<6) | ((y0>>4)&0x3f));
 	p[1] = (uint8)((x0<<6) | ((y0>>4)&0x3f));
@@ -1436,7 +1436,7 @@ static void clif_set_unit_walking( struct block_list& bl, map_session_data* tsd,
 	p.virtue = (sc) ? sc->opt3 : 0;
 	p.virtue = (sc) ? sc->opt3 : 0;
 	p.isPKModeON = (sd && sd->status.karma) ? 1 : 0;
 	p.isPKModeON = (sd && sd->status.karma) ? 1 : 0;
 	p.sex = vd->sex;
 	p.sex = vd->sex;
-	WBUFPOS2( &p.MoveData[0], 0, bl.x, bl.y, ud.to_x, ud.to_y, 8, 8 );
+	WBUFPOS2(&p.MoveData[0], 0, bl.x, bl.y, ud.to_x, ud.to_y, ud.sx, ud.sy);
 	p.xSize = p.ySize = (sd) ? 5 : 0;
 	p.xSize = p.ySize = (sd) ? 5 : 0;
 	p.clevel = clif_setlevel( &bl );
 	p.clevel = clif_setlevel( &bl );
 #if PACKETVER >= 20080102
 #if PACKETVER >= 20080102
@@ -1698,7 +1698,7 @@ int clif_spawn( struct block_list *bl, bool walking ){
 			if (sd->spiritball > 0)
 			if (sd->spiritball > 0)
 				clif_spiritball(&sd->bl);
 				clif_spiritball(&sd->bl);
 			if (sd->sc.getSCE(SC_MILLENNIUMSHIELD))
 			if (sd->sc.getSCE(SC_MILLENNIUMSHIELD))
-				clif_millenniumshield(&sd->bl, sd->sc.getSCE(SC_MILLENNIUMSHIELD)->val2);
+				clif_millenniumshield( sd->bl, sd->sc.getSCE( SC_MILLENNIUMSHIELD )->val2 );
 			if (sd->soulball > 0)
 			if (sd->soulball > 0)
 				clif_soulball(sd);
 				clif_soulball(sd);
 			if (sd->servantball > 0)
 			if (sd->servantball > 0)
@@ -1712,7 +1712,7 @@ int clif_spawn( struct block_list *bl, bool walking ){
 			if( sd->bg_id && map_getmapflag(sd->bl.m, MF_BATTLEGROUND) )
 			if( sd->bg_id && map_getmapflag(sd->bl.m, MF_BATTLEGROUND) )
 				clif_sendbgemblem_area(sd);
 				clif_sendbgemblem_area(sd);
 			if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
 			if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
-				clif_spiritcharm(sd);
+				clif_spiritcharm( *sd );
 			if (sd->status.robe)
 			if (sd->status.robe)
 				clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
 				clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
 			clif_efst_status_change_sub(bl, bl, AREA);
 			clif_efst_status_change_sub(bl, bl, AREA);
@@ -3670,16 +3670,16 @@ void clif_updatestatus( map_session_data& sd, enum _sp type ){
 			break;
 			break;
 #else
 #else
 		case SP_BASEEXP:
 		case SP_BASEEXP:
-			clif_par_change(sd, type, client_exp(sd.status.base_exp));
+			clif_longpar_change(sd, type, client_exp(sd.status.base_exp));
 			break;
 			break;
 		case SP_JOBEXP:
 		case SP_JOBEXP:
-			clif_par_change(sd, type, client_exp(sd.status.job_exp));
+			clif_longpar_change(sd, type, client_exp(sd.status.job_exp));
 			break;
 			break;
 		case SP_NEXTBASEEXP:
 		case SP_NEXTBASEEXP:
-			clif_par_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
+			clif_longpar_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
 			break;
 			break;
 		case SP_NEXTJOBEXP:
 		case SP_NEXTJOBEXP:
-			clif_par_change(sd, type, client_exp(pc_nextjobexp(&sd)));
+			clif_longpar_change(sd, type, client_exp(pc_nextjobexp(&sd)));
 			break;
 			break;
 #endif
 #endif
 
 
@@ -7674,15 +7674,12 @@ void clif_buyvending( map_session_data& sd, uint16 index, uint16 amount, e_pc_pu
 
 
 /// Show's vending player its list of items for sale.
 /// Show's vending player its list of items for sale.
 /// 0a28 <result>.B (ZC_ACK_OPENSTORE2)
 /// 0a28 <result>.B (ZC_ACK_OPENSTORE2)
-/// result:
-///     0 = Success
-///     1 = Failed
-void clif_openvending_ack( map_session_data& sd, bool failure ){
+void clif_openvending_ack( map_session_data& sd, e_ack_openstore2 result ){
 #if PACKETVER >= 20141022
 #if PACKETVER >= 20141022
 	PACKET_ZC_ACK_OPENSTORE2 packet{};
 	PACKET_ZC_ACK_OPENSTORE2 packet{};
 
 
 	packet.packetType = HEADER_ZC_ACK_OPENSTORE2;
 	packet.packetType = HEADER_ZC_ACK_OPENSTORE2;
-	packet.result = failure;
+	packet.result = static_cast<decltype(packet.result)>(result);
 
 
 	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 #endif
 #endif
@@ -7722,7 +7719,7 @@ void clif_openvending( map_session_data& sd ){
 
 
 	clif_send( p, p->packetLength, &sd.bl, SELF );
 	clif_send( p, p->packetLength, &sd.bl, SELF );
 
 
-	clif_openvending_ack( sd, false );
+	clif_openvending_ack( sd, OPENSTORE2_SUCCESS );
 }
 }
 
 
 
 
@@ -10803,8 +10800,7 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd)
 		clif_hominfo(sd,sd->hd,1);
 		clif_hominfo(sd,sd->hd,1);
 		clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
 		clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
 		clif_homskillinfoblock( *sd->hd );
 		clif_homskillinfoblock( *sd->hd );
-		if( battle_config.hom_setting&HOMSET_COPY_SPEED )
-			status_calc_bl(&sd->hd->bl, { SCB_SPEED }); //Homunc mimic their master's speed on each map change
+		status_calc_bl(&sd->hd->bl, { SCB_SPEED });
 		if( !(battle_config.hom_setting&HOMSET_NO_INSTANT_LAND_SKILL) )
 		if( !(battle_config.hom_setting&HOMSET_NO_INSTANT_LAND_SKILL) )
 			skill_unit_move(&sd->hd->bl,gettick(),1); // apply land skills immediately
 			skill_unit_move(&sd->hd->bl,gettick(),1); // apply land skills immediately
 	}
 	}
@@ -19144,6 +19140,9 @@ void clif_buyingstore_trade_failed_seller( map_session_data* sd, short result, t
 ///         amount of card slots. If the client does not know about the item it
 ///         amount of card slots. If the client does not know about the item it
 ///         cannot be searched.
 ///         cannot be searched.
 static void clif_parse_SearchStoreInfo( int fd, map_session_data *sd ){
 static void clif_parse_SearchStoreInfo( int fd, map_session_data *sd ){
+	if (!battle_config.feature_search_stores)
+		return;
+
 	const PACKET_CZ_SEARCH_STORE_INFO* p = reinterpret_cast<PACKET_CZ_SEARCH_STORE_INFO*>( RFIFOP( fd, 0 ) );
 	const PACKET_CZ_SEARCH_STORE_INFO* p = reinterpret_cast<PACKET_CZ_SEARCH_STORE_INFO*>( RFIFOP( fd, 0 ) );
 
 
 	// minimum packet length
 	// minimum packet length
@@ -19167,7 +19166,22 @@ static void clif_parse_SearchStoreInfo( int fd, map_session_data *sd ){
 		return;
 		return;
 	}
 	}
 
 
-	searchstore_query( sd, p->searchType, p->minPrice, p->maxPrice, &p->items[0], p->itemsCount, &p->items[p->itemsCount], p->cardsCount );
+	if ( p->searchType > SEARCHTYPE_BUYING_STORE ) {
+		ShowError( "clif_parse_SearchStoreInfo: Invalid search type %u (account_id=%d).\n", p->searchType, sd->bl.id );
+		return;
+	}
+
+	if ( p->minPrice > battle_config.vending_max_value ) {
+		ShowError( "clif_parse_SearchStoreInfo: Invalid min price %u (account_id=%d).\n", p->minPrice, sd->bl.id );
+		return;
+	}
+
+	if ( p->maxPrice > battle_config.vending_max_value ) {
+		ShowError( "clif_parse_SearchStoreInfo: Invalid max price %u (account_id=%d).\n", p->maxPrice, sd->bl.id );
+		return;
+	}
+
+	searchstore_query( *sd, static_cast<e_searchstore_searchtype>(p->searchType), p->minPrice, p->maxPrice, &p->items[0], p->itemsCount, &p->items[p->itemsCount], p->cardsCount );
 }
 }
 
 
 
 
@@ -19181,6 +19195,9 @@ static void clif_parse_SearchStoreInfo( int fd, map_session_data *sd ){
 ///     1 = "next" label to retrieve more results
 ///     1 = "next" label to retrieve more results
 void clif_search_store_info_ack( map_session_data& sd ){
 void clif_search_store_info_ack( map_session_data& sd ){
 #if PACKETVER_MAIN_NUM >= 20100817 || PACKETVER_RE_NUM >= 20100706 || defined(PACKETVER_ZERO)
 #if PACKETVER_MAIN_NUM >= 20100817 || PACKETVER_RE_NUM >= 20100706 || defined(PACKETVER_ZERO)
+	if (!battle_config.feature_search_stores)
+		return;
+
 	uint32 start = sd.searchstore.pages * SEARCHSTORE_RESULTS_PER_PAGE ;
 	uint32 start = sd.searchstore.pages * SEARCHSTORE_RESULTS_PER_PAGE ;
 	uint32 end = umin( static_cast<uint32>( sd.searchstore.items.size() ), start + SEARCHSTORE_RESULTS_PER_PAGE );
 	uint32 end = umin( static_cast<uint32>( sd.searchstore.items.size() ), start + SEARCHSTORE_RESULTS_PER_PAGE );
 
 
@@ -19189,8 +19206,8 @@ void clif_search_store_info_ack( map_session_data& sd ){
 	p->packetType = HEADER_ZC_SEARCH_STORE_INFO_ACK;
 	p->packetType = HEADER_ZC_SEARCH_STORE_INFO_ACK;
 	p->packetLength = sizeof( *p );
 	p->packetLength = sizeof( *p );
 	p->firstPage = !sd.searchstore.pages;
 	p->firstPage = !sd.searchstore.pages;
-	p->nextPage = searchstore_querynext( &sd );
-	p->usesCount = (uint8)umin( sd.searchstore.uses, UINT8_MAX );
+	p->nextPage = searchstore_querynext( sd );
+	p->usesCount = static_cast<decltype(p->usesCount)>( std::min<decltype(sd.searchstore.uses)>( sd.searchstore.uses, std::numeric_limits<decltype(p->usesCount)>::max() ) );
 
 
 	for( int i = 0, count = 0; i < end - start; i++ ){
 	for( int i = 0, count = 0; i < end - start; i++ ){
 		std::shared_ptr<s_search_store_info_item> ssitem = sd.searchstore.items[start + i];
 		std::shared_ptr<s_search_store_info_item> ssitem = sd.searchstore.items[start + i];
@@ -19237,80 +19254,90 @@ void clif_search_store_info_ack( map_session_data& sd ){
 }
 }
 
 
 
 
-/// Notification of failure when searching for stores (ZC_SEARCH_STORE_INFO_FAILED).
-/// 0837 <reason>.B
-/// reason:
-///     0 = "No matching stores were found." (0x70b)
-///     1 = "There are too many results. Please enter more detailed search term." (0x6f8)
-///     2 = "You cannot search anymore." (0x706)
-///     3 = "You cannot search yet." (0x708)
-///     4 = "No sale (purchase) information available." (0x705)
-void clif_search_store_info_failed(map_session_data* sd, unsigned char reason)
-{
-	int fd = sd->fd;
+/// Notification of failure when searching for stores.
+/// 0837 <reason>.B (ZC_SEARCH_STORE_INFO_FAILED)
+void clif_search_store_info_failed(map_session_data& sd, e_searchstore_failure reason){
+#if PACKETVER_MAIN_NUM >= 20100601 || PACKETVER_RE_NUM >= 20100601 || defined(PACKETVER_ZERO)
+	if (!battle_config.feature_search_stores)
+		return;
 
 
-	WFIFOHEAD(fd,packet_len(0x837));
-	WFIFOW(fd,0) = 0x837;
-	WFIFOB(fd,2) = reason;
-	WFIFOSET(fd,packet_len(0x837));
+	PACKET_ZC_SEARCH_STORE_INFO_FAILED packet{};
+
+	packet.packetType = HEADER_ZC_SEARCH_STORE_INFO_FAILED;
+	packet.reason = static_cast<decltype(packet.reason)>(reason);
+
+	clif_send(&packet, sizeof(packet), &sd.bl, SELF);
+#endif
 }
 }
 
 
 
 
-/// Request to display next page of results (CZ_SEARCH_STORE_INFO_NEXT_PAGE).
-/// 0838
-static void clif_parse_SearchStoreInfoNextPage(int fd, map_session_data* sd)
-{
-	searchstore_next(sd);
+/// Request to display next page of results.
+/// 0838  (CZ_SEARCH_STORE_INFO_NEXT_PAGE)
+static void clif_parse_SearchStoreInfoNextPage(int fd, map_session_data* sd){
+	if (!battle_config.feature_search_stores)
+		return;
+
+	searchstore_next(*sd);
 }
 }
 
 
 
 
-/// Opens the search store window (ZC_OPEN_SEARCH_STORE_INFO).
-/// 083a <type>.W <remaining uses>.B
-/// type:
-///     0 = Search Stores
-///     1 = Search Stores (Cash), asks for confirmation, when clicking a store
-void clif_open_search_store_info(map_session_data* sd)
-{
-	int fd = sd->fd;
+/// Opens the search store window.
+/// 083a <effect>.W <remaining uses>.B (ZC_OPEN_SEARCH_STORE_INFO)
+void clif_open_search_store_info(map_session_data& sd){
+#if PACKETVER_MAIN_NUM >= 20100701 || PACKETVER_RE_NUM >= 20100701 || defined(PACKETVER_ZERO)
+	if (!battle_config.feature_search_stores)
+		return;
+
+	PACKET_ZC_OPEN_SEARCH_STORE_INFO packet{};
 
 
-	WFIFOHEAD(fd,packet_len(0x83a));
-	WFIFOW(fd,0) = 0x83a;
-	WFIFOW(fd,2) = sd->searchstore.effect;
-#if PACKETVER > 20100701
-	WFIFOB(fd,4) = (unsigned char)umin(sd->searchstore.uses, UINT8_MAX);
+	packet.packetType = HEADER_ZC_OPEN_SEARCH_STORE_INFO;
+	packet.effect = static_cast<decltype(packet.effect)>(sd.searchstore.effect);
+#if PACKETVER_MAIN_NUM >= 20100701 || PACKETVER_RE_NUM >= 20100701 || defined(PACKETVER_ZERO)
+	packet.remainingUses = static_cast<decltype(packet.remainingUses)>( std::min<decltype(sd.searchstore.uses)>( sd.searchstore.uses, std::numeric_limits<decltype(packet.remainingUses)>::max() ) );
+#endif
+
+	clif_send(&packet, sizeof(packet), &sd.bl, SELF);
 #endif
 #endif
-	WFIFOSET(fd,packet_len(0x83a));
 }
 }
 
 
 
 
-/// Request to close the store search window (CZ_CLOSE_SEARCH_STORE_INFO).
-/// 083b
-static void clif_parse_CloseSearchStoreInfo(int fd, map_session_data* sd)
-{
-	searchstore_close(sd);
+/// Request to close the store search window.
+/// 083b (CZ_CLOSE_SEARCH_STORE_INFO)
+static void clif_parse_CloseSearchStoreInfo(int fd, map_session_data* sd){
+	if (!battle_config.feature_search_stores)
+		return;
+
+	searchstore_close(*sd);
 }
 }
 
 
 
 
 /// Request to invoke catalog effect on a store from search results.
 /// Request to invoke catalog effect on a store from search results.
 /// 083c <account id>.L <store id>.L <nameid>.W (CZ_SSILIST_ITEM_CLICK)
 /// 083c <account id>.L <store id>.L <nameid>.W (CZ_SSILIST_ITEM_CLICK)
 static void clif_parse_SearchStoreInfoListItemClick( int fd, map_session_data* sd ){
 static void clif_parse_SearchStoreInfoListItemClick( int fd, map_session_data* sd ){
+	if (!battle_config.feature_search_stores)
+		return;
+
 	const PACKET_CZ_SSILIST_ITEM_CLICK* p = reinterpret_cast<PACKET_CZ_SSILIST_ITEM_CLICK*>( RFIFOP( fd, 0 ) );
 	const PACKET_CZ_SSILIST_ITEM_CLICK* p = reinterpret_cast<PACKET_CZ_SSILIST_ITEM_CLICK*>( RFIFOP( fd, 0 ) );
 
 
-	searchstore_click( sd, p->AID, p->storeId, p->itemId );
+	searchstore_click( *sd, p->AID, p->storeId, p->itemId );
 }
 }
 
 
 
 
-/// Notification of the store position on current map (ZC_SSILIST_ITEM_CLICK_ACK).
-/// 083d <xPos>.W <yPos>.W
-void clif_search_store_info_click_ack(map_session_data* sd, short x, short y)
-{
-	int fd = sd->fd;
+/// Notification of the store position on current map.
+/// 083d <xPos>.W <yPos>.W (ZC_SSILIST_ITEM_CLICK_ACK)
+void clif_search_store_info_click_ack(map_session_data& sd, int16 x, int16 y){
+#if PACKETVER_MAIN_NUM >= 20100608 || PACKETVER_RE_NUM >= 20100608 || defined(PACKETVER_ZERO)
+	if (!battle_config.feature_search_stores)
+		return;
 
 
-	WFIFOHEAD(fd,packet_len(0x83d));
-	WFIFOW(fd,0) = 0x83d;
-	WFIFOW(fd,2) = x;
-	WFIFOW(fd,4) = y;
-	WFIFOSET(fd,packet_len(0x83d));
+	PACKET_ZC_SSILIST_ITEM_CLICK_ACK packet{};
+
+	packet.packetType = HEADER_ZC_SSILIST_ITEM_CLICK_ACK;
+	packet.x = x;
+	packet.y = y;
+
+	clif_send(&packet, sizeof(packet), &sd.bl, SELF);
+#endif
 }
 }
 
 
 
 
@@ -19373,15 +19400,16 @@ void clif_elementalconverter_list( map_session_data& sd ){
 /**
 /**
  * Rune Knight
  * Rune Knight
  **/
  **/
-void clif_millenniumshield(struct block_list *bl, short shields) {
-#if PACKETVER >= 20081217
-	unsigned char buf[10];
+void clif_millenniumshield( block_list& bl, int16 shields ){
+#if PACKETVER >= 20081126
+	PACKET_ZC_MILLENNIUMSHIELD packet{};
 
 
-	WBUFW(buf,0) = 0x440;
-	WBUFL(buf,2) = bl->id;
-	WBUFW(buf,6) = shields;
-	WBUFW(buf,8) = 0;
-	clif_send(buf,packet_len(0x440),bl,AREA);
+	packet.packetType = HEADER_ZC_MILLENNIUMSHIELD;
+	packet.aid = bl.id;
+	packet.num = shields;
+	packet.state = 0;
+
+	clif_send( &packet, sizeof( packet ), &bl, AREA );
 #endif
 #endif
 }
 }
 
 
@@ -19537,18 +19565,19 @@ void clif_parse_SkillSelectMenu(int fd, map_session_data *sd) {
 }
 }
 
 
 
 
-/// Kagerou/Oboro amulet spirit (ZC_SPIRITS_ATTRIBUTE).
-/// 08cf <id>.L <type>.W <num>.W
-void clif_spiritcharm(map_session_data *sd) {
-	unsigned char buf[10];
+/// Kagerou/Oboro amulet spirit.
+/// 08cf <id>.L <type>.W <num>.W (ZC_SPIRITS_ATTRIBUTE)
+void clif_spiritcharm( map_session_data& sd ){
+#if PACKETVER >= 20111102
+	PACKET_ZC_SPIRITS_ATTRIBUTE packet{};
 
 
-	nullpo_retv(sd);
+	packet.packetType = HEADER_ZC_SPIRITS_ATTRIBUTE;
+	packet.aid = sd.bl.id;
+	packet.spiritsType = static_cast<decltype(packet.spiritsType)>(sd.spiritcharm_type);
+	packet.num = static_cast<decltype(packet.num)>(sd.spiritcharm);
 
 
-	WBUFW(buf,0) = 0x08cf;
-	WBUFL(buf,2) = sd->bl.id;
-	WBUFW(buf,6) = sd->spiritcharm_type;
-	WBUFW(buf,8) = sd->spiritcharm;
-	clif_send(buf, packet_len(0x08cf), &sd->bl, AREA);
+	clif_send( &packet, sizeof( packet ), &sd.bl, AREA );
+#endif
 }
 }
 
 
 
 
@@ -19680,6 +19709,12 @@ static void clif_loadConfirm( map_session_data *sd ){
 /// 0447
 /// 0447
 void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
 void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
 	clif_loadConfirm( sd );
 	clif_loadConfirm( sd );
+	
+	int32 mf = map_getmapflag(sd->bl.m, MF_SPECIALPOPUP);
+
+	if (mf > 0) {
+		clif_specialpopup(*sd, mf);
+	}
 }
 }
 
 
 /// req world info (CZ_CLIENT_VERSION)
 /// req world info (CZ_CLIENT_VERSION)
@@ -25086,6 +25121,20 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y)
 #endif  // PACKETVER_MAIN_NUM >= 20220504
 #endif  // PACKETVER_MAIN_NUM >= 20220504
 }
 }
 
 
+/// Displays a special popup.
+/// Works only if player moved from one map to another.
+/// 0bbe <popup id>.L (ZC_SPECIALPOPUP)
+void clif_specialpopup(map_session_data& sd, int32 id ){
+#if PACKETVER >= 20221005
+	PACKET_ZC_SPECIALPOPUP p = {};
+
+	p.PacketType = HEADER_ZC_SPECIALPOPUP;
+	p.ppId = id;
+
+	clif_send( &p, sizeof( p ), &sd.bl, SELF);
+#endif
+}
+
 /*==========================================
 /*==========================================
  * Main client packet processing function
  * Main client packet processing function
  *------------------------------------------*/
  *------------------------------------------*/

Some files were not shown because too many files changed in this diff