Explorar o código

Merge branch 'master' into feature/map_zones

aleos hai 9 meses
pai
achega
142505f398
Modificáronse 100 ficheiros con 6018 adicións e 1114 borrados
  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=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
 //       stat window (by default they don't crit)
 // 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
 
+// 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)
 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)
 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
 
 // 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_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
 sg_miracle_skill_duration: 3600000

+ 4 - 0
conf/char_athena.conf

@@ -144,6 +144,10 @@ unknown_char_name: Unknown
 // To log the character server?
 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):
 // example: Test-test-TEST-TesT; Value: 0 not allowed (default), 1 allowed
 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.
 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
 // 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: mbase_in
 
+// Market place
+map: prt_mk
+
 //------------------------- Clone Maps ---------------------------
 //------------------------- Extra Maps ---------------------------

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

@@ -33,3 +33,24 @@ Header:
   Type: MOB_SUMMONABLE_DB
   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=BIN
db/map_cache.dat


+ 1 - 0
db/map_index.txt

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

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

@@ -2613,7 +2613,7 @@ Body:
     Flags:
       BuyingStore: true
     Script: |
-      sc_start SC_SlowDown,5000,0;
+      sc_start SC_SLOWDOWN,5000,100;
   - Id: 12018
     AegisName: Fire_Cracker
     Name: Firecracker
@@ -8637,21 +8637,21 @@ Body:
     Type: Usable
     Weight: 10
     Script: |
-      searchstores 10,0;
+      searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 12581
     AegisName: Vending_Search_Scroll2
     Name: Universal Catalog Gold
     Type: Usable
     Weight: 10
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12591
     AegisName: Uni_Catalog_Bz
     Name: Universal Catalog Bronze
     Type: Usable
     Weight: 10
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12609
     AegisName: 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 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
     SplashArea: -1
     AfterCastActDelay: 4000
+    Duration1: 15000
     Duration2: 12000
     Requires:
       SpCost:
@@ -8829,6 +8830,7 @@ Body:
     HitCount: 1
     SplashArea: -1
     AfterCastActDelay: 4000
+    Duration1: 5000
     Duration2: 5000
     Requires:
       SpCost:
@@ -30724,10 +30726,8 @@ Body:
     TargetType: Self
     DamageFlags:
       NoDamage: true
-    Range: 9
-    Hit: Single
-    HitCount: 1
     AfterCastActDelay: 2000
+    AfterCastWalkDelay: 1000
     Requires:
       SpCost:
         - Level: 1
@@ -30750,11 +30750,8 @@ Body:
     TargetType: Self
     DamageFlags:
       NoDamage: true
-      Splash: true
-    Hit: Single
-    HitCount: 1
-    SplashArea: -1
     AfterCastActDelay: 35000
+    AfterCastWalkDelay: 1000
     Duration1:
       - Level: 1
         Time: 40000
@@ -30783,7 +30780,6 @@ Body:
     Name: HLIF_BRAIN
     Description: Brain Surgery
     MaxLevel: 5
-    SplashArea: 1
   - Id: 8004
     Name: HLIF_CHANGE
     Description: Change
@@ -30791,7 +30787,14 @@ Body:
     TargetType: Self
     DamageFlags:
       NoDamage: true
-    Hit: Single
+    AfterCastActDelay:
+      - Level: 1
+        Time: 600000
+      - Level: 2
+        Time: 900000
+      - Level: 3
+        Time: 1200000
+    AfterCastWalkDelay: 1000
     Duration1:
       - Level: 1
         Time: 60000
@@ -30799,13 +30802,6 @@ Body:
         Time: 180000
       - Level: 3
         Time: 300000
-    Duration2:
-      - Level: 1
-        Time: 600000
-      - Level: 2
-        Time: 900000
-      - Level: 3
-        Time: 1200000
     Requires:
       SpCost: 100
     Status: Change
@@ -30817,7 +30813,8 @@ Body:
     DamageFlags:
       NoDamage: true
     Hit: Single
-    Duration2: 1000
+    AfterCastActDelay: 1000
+    AfterCastWalkDelay: 1000
     Requires:
       SpCost: 10
   - Id: 8006
@@ -30829,6 +30826,7 @@ Body:
       NoDamage: true
     Hit: Single
     AfterCastActDelay: 30000
+    AfterCastWalkDelay: 1000
     Duration1:
       - Level: 1
         Time: 40000
@@ -30867,6 +30865,14 @@ Body:
     DamageFlags:
       NoDamage: true
     Hit: Single
+    AfterCastActDelay:
+      - Level: 1
+        Time: 300000
+      - Level: 2
+        Time: 600000
+      - Level: 3
+        Time: 900000
+    AfterCastWalkDelay: 1000
     Duration1:
       - Level: 1
         Time: 60000
@@ -30874,13 +30880,6 @@ Body:
         Time: 180000
       - Level: 3
         Time: 300000
-    Duration2:
-      - Level: 1
-        Time: 300000
-      - Level: 2
-        Time: 600000
-      - Level: 3
-        Time: 900000
     Requires:
       SpCost: 120
     Status: Bloodlust
@@ -30903,7 +30902,6 @@ Body:
         Count: -2
       - Level: 5
         Count: -3
-    AfterCastWalkDelay: 2000
     Requires:
       SpCost:
         - Level: 1
@@ -30924,28 +30922,29 @@ Body:
     DamageFlags:
       NoDamage: true
     Hit: Single
-    Duration1:
+    AfterCastActDelay:
       - Level: 1
         Time: 60000
       - Level: 2
-        Time: 55000
+        Time: 70000
       - Level: 3
-        Time: 50000
+        Time: 80000
       - Level: 4
-        Time: 45000
+        Time: 90000
       - Level: 5
-        Time: 40000
-    Duration2:
+        Time: 120000
+    AfterCastWalkDelay: 1000
+    Duration1:
       - Level: 1
         Time: 60000
       - Level: 2
-        Time: 70000
+        Time: 55000
       - Level: 3
-        Time: 80000
+        Time: 50000
       - Level: 4
-        Time: 90000
+        Time: 45000
       - Level: 5
-        Time: 120000
+        Time: 40000
     Requires:
       SpCost:
         - Level: 1
@@ -30969,28 +30968,29 @@ Body:
       NoDamage: true
     Hit: Single
     CastCancel: true
-    Duration1:
+    AfterCastActDelay:
       - Level: 1
         Time: 60000
       - Level: 2
-        Time: 55000
+        Time: 70000
       - Level: 3
-        Time: 50000
+        Time: 80000
       - Level: 4
-        Time: 45000
+        Time: 90000
       - Level: 5
-        Time: 40000
-    Duration2:
+        Time: 120000
+    AfterCastWalkDelay: 1000
+    Duration1:
       - Level: 1
         Time: 60000
       - Level: 2
-        Time: 70000
+        Time: 55000
       - Level: 3
-        Time: 80000
+        Time: 50000
       - Level: 4
-        Time: 90000
+        Time: 45000
       - Level: 5
-        Time: 120000
+        Time: 40000
     Requires:
       SpCost:
         - Level: 1
@@ -31013,7 +31013,6 @@ Body:
     Range: 15
     Hit: Single
     HitCount: 1
-    AfterCastActDelay: 1000
     Requires:
       SpCost: 1
   - Id: 8013
@@ -31035,17 +31034,6 @@ Body:
         Count: 4
       - Level: 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:
       SpCost:
         - Level: 1
@@ -31066,8 +31054,7 @@ Body:
     DamageFlags:
       NoDamage: true
     Hit: Single
-    AfterCastActDelay: 3000
-    AfterCastWalkDelay: 3000
+    AfterCastWalkDelay: 1500
     Requires:
       SpCost: 40
   - Id: 8015
@@ -31091,7 +31078,6 @@ Body:
     HitCount: 1
     Element: Weapon
     SplashArea: 4
-    AfterCastWalkDelay: 1000
     Requires:
       SpCost: 1
   - Id: 8018

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

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

+ 205 - 33
db/re/item_combos.yml

@@ -20852,25 +20852,6 @@ Body:
          bonus bMdef,3*.@r_shoes;
          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:
       - Combo:
           - Astraea_Ring
@@ -46539,6 +46520,7 @@ Body:
     Script: |
       bonus2 bAddEle,Ele_All,20;
       bonus bAspdRate,5;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM",40;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",40;
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",20;
   - Combos:
@@ -47407,6 +47389,7 @@ Body:
     Script: |
       bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",25;
       bonus2 bSkillAtk,"TR_ROSEBLOSSOM",25;
+      bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",25;
       bonus2 bSubRace,RC_Player_Human,10;
       bonus2 bSubRace,RC_Player_Doram,10;
   - Combos:
@@ -50872,14 +50855,6 @@ Body:
       bonus bMaxHP,2000;
       bonus bMaxSP,200;
       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:
       - Combo:
           - R001_Bestia_Card    # 300281
@@ -51483,12 +51458,6 @@ Body:
          bonus bMatk,15*.@eq;
          bonus bVariableCastrate,-7*.@eq;
       }
-  - Combos:
-      - Combo:
-          - Berzebub_Card    # 4145
-          - VesperHeadGear    # 19436
-    Script: |
-      bonus bVariableCastrate,30;
   - Combos:
       - Combo:
           - Preschool_Hat    # 18860
@@ -52035,3 +52004,206 @@ Body:
           - Ignis_Cap    # 18651
     Script: |
       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;

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 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 bPAtk,.@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
     AegisName: Ranger_Top2
     Name: Sniper Stone II (Top)
@@ -83045,6 +83059,42 @@ Body:
       NoGuildStorage: true
       NoMail: 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
     AegisName: EpisodClear17
     Name: Episode 17 Clear Ticket
@@ -89781,6 +89831,402 @@ Body:
     Weight: 1
     Flags:
       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
     AegisName: BioloStone_Robe
     Name: Biolo Stone (Garment)
@@ -89796,6 +90242,38 @@ Body:
     Name: Spirit Handler Stone (Garment)
     Type: Etc
     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
     AegisName: Kr_B_Event04
     Name: Sweet Strawberry Fresh Cream
@@ -89808,6 +90286,42 @@ Body:
       NoGuildStorage: true
       NoMail: 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
     AegisName: IDTest_arrow
     Name: IDTest arrow

+ 286 - 16
db/re/item_db_usable.yml

@@ -4371,6 +4371,38 @@ Body:
       BuyingStore: true
 #   Script: |
 #     /* 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
     AegisName: Girl_Bunch_Of_Flower
     Name: Girl's Bouquet
@@ -11333,7 +11365,7 @@ Body:
     Type: Usable
     Weight: 10
     Script: |
-      searchstores 10,0;
+      searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 12581
     AegisName: Vending_Search_Scroll2
     Name: Universal Catalog Gold
@@ -11348,7 +11380,7 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12582
     AegisName: Siege_Supply_Box
     Name: WoE Supply Box
@@ -11492,7 +11524,7 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      searchstores 10,1;
+      searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
   - Id: 12592
     AegisName: Cyclops_Box1
     Name: Cyclops Box1
@@ -63371,8 +63403,8 @@ Body:
     Name: Special Shopper Catalog
     Type: Usable
     Weight: 10
-#   Script: |
-#     /* TODO */
+    Script: |
+      searchstores 3, SEARCHSTORE_EFFECT_NORMAL;
   - Id: 23374
     AegisName: Fire_Armor_S
     Name: Fire Armor Scroll
@@ -78646,6 +78678,99 @@ Body:
       Container: true
     Script: |
       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
     AegisName: Kr_B_Special10
     Name: Love Cake
@@ -78658,6 +78783,78 @@ Body:
       NoGuildStorage: true
       NoMail: 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
     AegisName: 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
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80794,12 +80993,14 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX1_35);
   - Id: 200406
     AegisName: LI_Nyangvine_Box2_35
 #   Name: (Limited) Nyangvine Fruit Package II (Stone Box 35)
     Name: (Limited) Nyangvine Fruit Package II (Stone Box 3
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80809,12 +81010,14 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX2_35);
   - Id: 200407
     AegisName: LI_Nyangvine_Box3_35
 #   Name: (Limited) Nyangvine Fruit Package III (Stone Box 35)
     Name: (Limited) Nyangvine Fruit Package III (Stone Box 
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80824,12 +81027,14 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_LI_NYANGVINE_BOX3_35);
   - Id: 200411
     AegisName: A_Speed_Booster_Box
     Name: Speed Booster Package
     Type: Cash
     Weight: 10
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80839,12 +81044,14 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_A_SPEED_BOOSTER_BOX);
   - Id: 200412
     AegisName: A_Speed_Booster_10_Box
     Name: Speed Booster Package 10 Sets
     Type: Cash
     Weight: 10
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80854,11 +81061,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_A_SPEED_BOOSTER_10_BOX);
   - Id: 200415
     AegisName: L_Infinity_Power_Pack
     Name: (Limited) Infinity Power Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80868,11 +81077,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_INFINITY_POWER_PACK);
   - Id: 200416
     AegisName: L_All_Red_Pack
     Name: (Limited) All Red Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80882,11 +81093,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_ALL_RED_PACK);
   - Id: 200417
     AegisName: L_Defense_Potion_Pack
     Name: (Limited) Defender Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80896,11 +81109,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_DEFENSE_POTION_PACK);
   - Id: 200418
     AegisName: L_Speed_Force_Pack
     Name: (Limited) Speed Force Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80910,11 +81125,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_SPEED_FORCE_PACK);
   - Id: 200419
     AegisName: L_Special_Speed_Pack
     Name: (Limited) Speed Booster Special Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80924,11 +81141,13 @@ Body:
       NoMail: true
       NoAuction: true
     Script: |
-      /* TODO */
+      getgroupitem(IG_L_SPECIAL_SPEED_PACK);
   - Id: 200420
     AegisName: L_Special_Force_Pack
     Name: (Limited) Force Booster Special Package
     Type: Cash
+    Flags:
+      Container: true
     Trade:
       NoDrop: true
       NoTrade: true
@@ -80938,7 +81157,58 @@ Body:
       NoMail: true
       NoAuction: true
     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
     AegisName: IDTest_heal
     Name: IDTest heal

+ 20 - 0
db/re/item_enchant.yml

@@ -32187,6 +32187,20 @@ Body:
       Grimoire_Furious: true
       Soul_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:
       Chance: 80000
       Price: 500000
@@ -32357,6 +32371,12 @@ Body:
       FuriousCirclet_MT: true
       FuriousCirclet_EM: true
       FuriousCirclet_SOA: true
+      FuriousCirclet_TR: true
+      FuriousCirclet_BO: true
+      FuriousCirclet_HN: true
+      FuriousCirclet_AG: true
+      FuriousCirclet_IQ: true
+      FuriousCirclet_NW: true
     Reset:
       Chance: 80000
       Price: 500000

+ 262 - 0
db/re/item_group_db.yml

@@ -113177,3 +113177,265 @@ Body:
           - Index: 65
             Item: Critical_Stone_Bottom
             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
         ClearSlots: 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
     BaseItems:
       - BaseItem: Season_Hood_Spring
@@ -10901,6 +11225,206 @@ Body:
             Amount: 20
         ResultItem: FuriousCirclet_SOA
         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
     BaseItems:
       - BaseItem: Gaebolg_Armor

+ 517 - 28
db/re/mob_db.yml

@@ -96171,34 +96171,519 @@ Body:
 #    AegisName: VH_ENTWEIHEN_S
 #  - Id: 20254
 #    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
     AegisName: GUILD_SKILL_FLAG
     Name: Guild Skill Flag
@@ -110625,6 +111110,10 @@ Body:
 #    AegisName: EP21_MD_BOX1
 #  - Id: 22378
 #    AegisName: MD_Airboat_Boss5
+#  - Id: 22379
+#    AegisName: EV_NPC_VACATION_POPE
+#  - Id: 22380
+#    AegisName: E_WATER_M_RING
 #  - Id: 23000
 #    AegisName: DARK_ILLUSION2
 #  - 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@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
 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,
@@ -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_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_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_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,,,,,,,
@@ -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_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_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,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 250 - 250
db/re/pet_db.yml


+ 78 - 18
db/re/quest_db.yml

@@ -1404,21 +1404,21 @@ Body:
     TimeLimit: 4h
   - Id: 3455
     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
     Title: Illusion of Teddy Bear 100 Kills - Standby
     TimeLimit: 4h
@@ -8038,14 +8038,74 @@ Body:
   - Id: 11555
     Title: In search of the taste of hometown - Waiting
     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
-    Title: Escape!!!! - Wait
+    Title: RUN! - Pending
     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
-    Title: Present not to exist-wait
+    Title: Things That Shouldn't Exist - Pending
     TimeLimit: 4h
+  - Id: 11570
+    Title: Let the Light Devour the Darkness
+    Targets:
+      - Mob: ILL_TEDDY_BEAR_S
+        Count: 1
   - Id: 11571
-    Title: Let the light consume the darkness - Wait
+    Title: Let the Light Devour the Darkness - Pending
     TimeLimit: 4h
   - Id: 11596
     Title: Old Memories

+ 64 - 23
db/re/skill_db.yml

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

+ 5 - 1
db/re/status.yml

@@ -2600,13 +2600,17 @@ Body:
     DurationLookup: HLIF_AVOID
     CalcFlags:
       Speed: true
+    Flags:
+      NoSave: true
+      RemoveFromHomOnMapWarp: true
   - Status: Change
     DurationLookup: HLIF_CHANGE
     CalcFlags:
       Vit: true
       Int: true
     Flags:
-      RemoveOnChangeMap: true
+      NoSave: true
+      RemoveFromHomOnMapWarp: true
     Fail:
       Change: true
   - 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'.
 
 ---------------------------------------
+
+*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,
 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.
 The format of this file is as follows:
 	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,
 vending, storage, mail, etc.
 
 ---------------------------------------
 
-*can_party
+*can_party (PC_PERM_PARTY)
 
 Allows player to create and join parties.
 
 ---------------------------------------
 
-*attendance
+*attendance (PC_PERM_ATTENDANCE)
 
 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.
 
 ---------------------------------------
 
-*all_equipment
+*all_equipment (PC_PERM_USE_ALL_EQUIPMENT)
 
 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.
 
 ---------------------------------------
 
-*skill_unconditional
+*skill_unconditional (PC_PERM_SKILL_UNCONDITIONAL)
 
 Allows player to use any skill, regardless of required conditions (SP,
 items, etc.).
 
 ---------------------------------------
 
-*join_chat
+*join_chat (PC_PERM_JOIN_ALL_CHAT)
 
 Allows player to join password-protected chatrooms.
 
 ---------------------------------------
 
-*kick_chat
+*kick_chat (PC_PERM_NO_CHAT_KICK)
 
 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.
 
 ---------------------------------------
 
-*view_equipment
+*view_equipment (PC_PERM_VIEW_EQUIPMENT)
 
 Allows player to view the equipment of every player, regardless of that
 player's setting.
 
 ---------------------------------------
 
-*hack_info
+*hack_info (PC_PERM_RECEIVE_HACK_INFO)
 
 Allows player to receive all information about players who try to hack,
 spoof a name, etc.
 
 ---------------------------------------
 
-*disable_pvm
+*disable_pvm (PC_PERM_DISABLE_PVM)
 
 Prevents player from attacking monsters.
 
 ---------------------------------------
 
-*disable_pvp
+*disable_pvp (PC_PERM_DISABLE_PVP)
 
 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,
 trade, etc.).
 
 ---------------------------------------
  
-*item_unconditional
+*item_unconditional (PC_PERM_ITEM_UNCONDITIONAL)
 
 Allows player to consume any consumable item regardless the requirements
 (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).
 
@@ -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.
 
 ---------------------------------------
 
-*disable_commands_when_dead
+*disable_commands_when_dead (PC_PERM_DISABLE_CMD_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,
 etc.).
 
 ---------------------------------------
 
-*who_display_aid
+*who_display_aid (PC_PERM_WHO_DISPLAY_AID)
 
 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'
 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.
 
 ---------------------------------------
 
-*show_bossmobs
+*show_bossmobs (PC_PERM_SHOW_BOSS)
 
 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
 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).
 
 ---------------------------------------
 
-*use_changemaptype
+*use_changemaptype (PC_PERM_USE_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.
 
 ---------------------------------------
 
-*bypass_stat_onclone
+*bypass_stat_onclone (PC_PERM_BYPASS_STAT_ONCLONE)
 
 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
 maximum value 32,767.
 
 ---------------------------------------
 
-*macro_detect
+*macro_detect (PC_PERM_MACRO_DETECT)
 
 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).
 

+ 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
-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>.
 
@@ -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.|
 ==================================
@@ -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.
 
+---------------------------------------
+
+*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
@@ -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
 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).
 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.
 	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.

+ 9 - 6
doc/status_change.txt

@@ -1001,13 +1001,16 @@ SC_FLING	()
 	desc:
 	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	()
 	desc:

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

@@ -1,26 +1,19 @@
-//===== rAthena Script ======================================= 
+//===== rAthena Script =======================================
 //= Brasilis Town
-//===== By: ================================================== 
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.4
-//===== Compatible With: ===================================== 
-//= rAthena Project
-//===== Description: ========================================= 
+//===== Description: =========================================
 //= [Official Conversion]
 //= 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.2 Updated dialog, added Ice Cream Maker. [L0ne_W0lf]
 //= 1.3 Moved Alberta NPC to pre-re/re paths. [Euphy]
 //= 1.4 Added VIP features. [Euphy]
-//============================================================ 
+//============================================================
 
 // 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 "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.";

+ 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
 		}
 	}
+
+	// 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 && 
 		((.@eac&(~EAJL_BABY)) == EAJ_NINJA || 		// is (Baby) Ninja
 		(.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) {	// is (Baby) Gunslinger
@@ -483,6 +504,7 @@ OnInit:
 	
 	// Settings
 	.FourthClass = true;				// Enable fourth classes?
+	.FourthExpanded = true;				// Enable new expanded fourth classes: Ex. Hyper Novice, Rebellion, Shinkiro/Shiranui?
 	.ThirdClass = true;					// Enable third classes?
 	.RebirthClass = true;				// Enable rebirth classes?
 	.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_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_SHandler[0],200,60;	// Minimum base level, job level to turn into Spirit Handler
 	.SNovice = 45;						// Minimum base level to turn into Super Novice
 	
 	// Setting adjustments by PACKETVER

+ 15 - 4
npc/custom/warper.txt

@@ -110,7 +110,18 @@ function Pick {
 	Go(.@map$,.@x,.@y);
 }
 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)) {
 			set @warp_block,0;
 			for (set .@i,1; .@i<getargcount(); set .@i,.@i+1)
@@ -141,7 +152,7 @@ T2: Go("alberta",28,234);
 T3: Go("aldebaran",140,131);
 T4: Go("amatsu",198,84);
 T5: Go("ayothaya",208,166);
-T6: Restrict("RE");
+T6: Restrict("Brasilis");
 	Go("brasilis",196,217);
 T7: Go("comodo",209,143);
 T8: Restrict("RE");
@@ -218,7 +229,7 @@ F2: setarray @c[2],173,134,212,150;
 F3: Restrict("RE");
 	setarray @c[2],193,220,220,187;
 	Disp("Bifrost Field",1,2); Pick("bif_fild");
-F4: Restrict("RE");
+F4: Restrict("Brasilis");
 	setarray @c[2],74,32;
 	Disp("Brasilis Field",1,1); Pick("bra_fild");
 F5: Restrict("Pre-RE",5);
@@ -343,7 +354,7 @@ D7: Restrict("RE");
 D8: Restrict("RE",4,5);
 	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");
-D9: Restrict("RE");
+D9: Restrict("Brasilis");
 	setarray @c[2],87,47,262,262;
 	Disp("Brasilis Dungeon",1,2); Pick("bra_dun");
 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 "have the 20 zeny to pay";
 			mes "the Storage access fee...";
-			close;
+			close3;
 		}
 		mes "[Kafra Leilah]";
 		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;
 	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 "be some style that";
 						mes "you like, right? Hmmm...";
-						close;
+						close3;
 					}
 				}
 				mes "[Assistant Beautician]";
@@ -353,7 +353,7 @@ lhz_in02,91,155,5	script	Assistant Beautician#li	862,{
 				mes "me! Thank you for using";
 				mes "my service and come again~";
 				emotion ET_CHUP;
-				close;
+				close3;
 			case 2:
 				mes "[Assistant Beautician]";
 				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 ==============================
 function	script	F_InnMaid	{
 	.@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 "- 1 Dyestuffs item of the color of hair you want.";
 			mes "- 1000 zeny fee.";
-			break;
+			close;
 
 		case 3:
 			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 "that! Be fashionably adventurous, you fashionable adventurer~";
 					emotion ET_THROB;
-					close;
+					close3;
 				}
 			}
 			else {
@@ -917,7 +917,7 @@ lhz_in02,100,143,3	script	Hair Dresser#li	122,{
 				mes "I'll make you the best looking";
 				mes "person in the entire world!";
 				emotion ET_BEST;
-				close;
+				close3;
 			case 2:
 				mes "[Prince Shammi]";
 				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 "check again! Find the one that";
 				mes "is perfect just for you, okay?";
-				close;
+				close3;
 			}
 		}
 		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/the_sign_quest.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;
 		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.";
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q > 11 && gef_bard_q < 14) {
 		cutin "bard_eland02",2;
 		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.";
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 11) {
 		cutin "bard_eland01",2;
 		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.";
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 10) {
 		cutin "bard_eland01",2;
@@ -199,7 +199,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "show him the Seal of Friendship.";
 		mes "Good luck, now~";
 		set gef_bard_q,11;
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 20) {
 		cutin "bard_eland03",2;
@@ -249,7 +249,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "[Errende]";
 			mes "Waaah, wah~";
 			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) {
@@ -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~";
 			set gef_bard_q,22;
 		}
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 26) {
 		cutin "bard_eland01",2;
@@ -349,17 +349,17 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "in advance~";
 				set gef_bard_q,24;
 			}
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther") {
 			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.";
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			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.";
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
@@ -368,7 +368,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "If I did, why would";
 			mes "I not know what";
 			mes "this song is about?";
-			goto L_End;
+			close3;
 
 		} else {
 			mes "[Errende]";
@@ -381,7 +381,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "the 8th love?";
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 		}
 
 	} else if (gef_bard_q == 25) {
@@ -427,7 +427,7 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "heart wrenching song.";
 				mes "But at what cost to your soul?^000000";
 			}
-			goto L_End;
+			close3;
 
 		} else {
 			cutin "bard_eland01",2;
@@ -438,7 +438,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "Noboooody looooves meee";
 			mes "Friends foooooor never...";
 			mes "Ooooooooh wah!^000000";
-			goto L_End;
+			close3;
 		}
 
 	} else if (gef_bard_q == 24) {
@@ -464,7 +464,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "Once again,";
 		mes "thank you so much";
 		mes "for your help.";
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 22) {
 		mes "[Errende]";
@@ -480,7 +480,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		next;
 		mes "[Errende]";
 		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) {
 		cutin "bard_eland02",2;
@@ -570,19 +570,19 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "in advance~";
 				set gef_bard_q,24;
 			}
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther") {
 			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.";
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			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.";
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
@@ -592,7 +592,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "I not know what this";
 			mes "song is about?";
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 
 		} else {
 			mes "[Errende]";
@@ -605,7 +605,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "the 8th love?";
 			set gef_bard_q,26;
-			goto L_End;
+			close3;
 		}
 
 	} 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~";
 			set gef_bard_q,2;
 		}
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 6) {
 		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~";
 				set gef_bard_q,4;
 			}
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther") {
 			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.";
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther Doubleharmony") {
 			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.";
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			mes "[Errende]";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
-			goto L_End;
+			close3;
 
 		} else {
 			mes "[Errende]";
@@ -727,7 +727,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "the 8th love?";
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 
 	} else if (gef_bard_q == 5) {
@@ -764,7 +764,7 @@ geffen,132,38,3	script	Bard#2	51,{
 				mes "heart wrenching song.";
 				mes "But at what cost to your soul?^000000";
 			}
-			goto L_End;
+			close3;
 
 		} else {
 			cutin "bard_eland01",2;
@@ -775,7 +775,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "Noboooody looooves meee";
 			mes "Friends foooooor never...";
 			mes "Ooooooooooh wah!^000000";
-			goto L_End;
+			close3;
 		}
 
 	} else if (gef_bard_q == 4) {
@@ -800,7 +800,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		mes "Once again,";
 		mes "thank you so much";
 		mes "for your help.";
-		goto L_End;
+		close3;
 
 	} else if (gef_bard_q == 2) {
 		cutin "bard_eland04",2;
@@ -813,7 +813,7 @@ geffen,132,38,3	script	Bard#2	51,{
 		next;
 		mes "[Errende]";
 		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) {
 		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~";
 				set gef_bard_q,4;
 			}
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Gunther") {
 			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.";
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 
 		else if (.@inputstr$ == "Gunther Doubleharmony") {
 			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.";
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 
 		} else if (.@inputstr$ == "Errende") {
 			cutin "bard_eland04",2;
 			mes "[Errende]";
 			mes "Surely you jest! If I did, why would I not know what this song is about?";
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 
 		} else {
 			mes "[Errende]";
@@ -930,7 +930,7 @@ geffen,132,38,3	script	Bard#2	51,{
 			mes "How could I forget";
 			mes "the 8th love?";
 			set gef_bard_q,6;
-			goto L_End;
+			close3;
 		}
 
 	} 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
 
@@ -1114,7 +1110,7 @@ S_StorySong:
 			mes "[Errende]";
 			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:
 		.@num = getarg(0);
@@ -1149,7 +1145,7 @@ S_StorySong:
 				mes "My apologies,";
 				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:
 			cutin "bard_eland03",2;
@@ -1218,7 +1214,7 @@ S_StorySong:
 					mes "may never know";
 					mes "with certainty.";
 				}
-				goto L_End;
+				close3;
 
 			} else if (.@random == 2) {
 
@@ -1321,7 +1317,7 @@ S_StorySong:
 						if(gef_bard_q==1) set gef_bard_q,7;
 						if(gef_bard_q==21) set gef_bard_q,27;
 					}
-					goto L_End;
+					close3;
 
 				}
 				mes "^483D8BA good Bard sings";
@@ -1345,7 +1341,7 @@ S_StorySong:
 				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!";
 			}
-			goto L_End;
+			close3;
 
 		case 3:
 			cutin "bard_eland01",2;
@@ -1355,7 +1351,7 @@ S_StorySong:
 			mes "enjoyed when you";
 			mes "are in the mood for it.";
 			mes "Please come again.";
-			goto L_End;
+			close3;
 
 		}
 
@@ -1364,7 +1360,7 @@ S_StorySong:
 		mes "[Errende]";
 		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.";
-		goto L_End;
+		close3;
 	}
 }
 

+ 1 - 1
npc/quests/cooking_quest.txt

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

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

@@ -1,12 +1,6 @@
 //===== rAthena Script =======================================
 //= Brasilis Quests
-//===== By ===================================================
-//= L0ne_W0lf
-//===== Version ==============================================
-//= 1.3
-//===== Compatible With ======================================
-//= rAthena Project
-//===== Description ==========================================
+//===== Description: =========================================
 //= [Official Conversion]
 //= Lost Puppies (Repeatable, 24 hours.)
 //= Suspicious Beach (Repeatable, 24 hours. iRO/cRO version.)
@@ -14,13 +8,14 @@
 //= Brasilis Water Lily Quest
 //= Brasilis Dungeon Access Quest
 //= 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.2a Added 'consumeitem' command. [Euphy]
 //= 1.3 Added VIP features and fixed some EXP values. [Euphy]
 //= 1.3a Clean-up. [Capuche]
+//= 1.4 Added pre-renewal differences [Daegaladh]
 //============================================================
 
 // Lost Puppies :: dogdog.sc
@@ -59,10 +54,12 @@ brasilis,297,307,5	script	Angelo#br	1_M_04,{
 		erasequest 9031;
 		setquest 9032;
 		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;
 	}
 	mes "[Angelo]";
@@ -229,11 +226,15 @@ brasilis,192,133,6	script	Lucia#brasilis	4_F_BRZ_WOMAN,{
 				//recall_completequest 9029;
 				if (.@nQState2 > -1) erasequest 9029;
 				setquest 9029;
-				consumeitem 607; //Yggdrasilberry
+				if (checkre(0))
+					consumeitem 607; //Yggdrasilberry
 				consumeitem 12070; //Luk_Dish05
 				consumeitem 12055; //Vit_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;
 			}
 			else {
@@ -410,10 +411,12 @@ brasilis,187,162,5	script	Candy Maker	4_M_BRZ_MAN1,{
 		brazil_gua = 11;
 		completequest 2200;
 		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;
 	}
 	else if (brazil_gua == 11) {
@@ -1030,9 +1033,9 @@ brasilis,203,286,3	script	Botanist Karmen#bra	4_F_HUWOMAN,{
 		brazil_regia = 10;
 		completequest 2207;
 		if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
-			getexp 75000,15000;
+			getexp 75000, checkre(0)?15000:0;
 		else
-			getexp 50000,10000;
+			getexp 50000, checkre(0)?10000:0;
 		close;
 	}
 	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 "Get away from me quickly.";
 			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 12063; //Dex_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 "Well, I hope you enjoy your";
 				mes "time here, adventurer.";
-				goto L_End;
+				close3;
 			}
 			mes "[Priestess Nemma]";
 			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 "grace of the goddess always";
 				mes "support us in all that we do~";
-				goto L_End;
+				close3;
 			}
 			mes "[Priestess Nemma]";
 			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~";
 				break;
 			}
-			goto L_End;
+			close3;
 		}
 		else {
 			cutin "ra_nemma03",2;
@@ -3939,7 +3939,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 					mes "protecting you, wherever you go~";
 					break;
 				}
-				goto L_End;
+				close3;
 			case 2:
 				mes "[Priestess Nemma]";
 				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~";
 				break;
 			}
-			goto L_End;
+			close3;
 		}
 	}
 	else {
@@ -3976,7 +3976,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			cutin "ra_nemma01",2;
 			mes "[Priestess Nemma]";
 			mes "Welcome to our temple!";
-			goto L_End;
+			close3;
 		}
 		if (ra_tem_q < 1) {
 			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 "Panno, I neeeed heeeeelp~!";
 			set ra_tem_q,1;
-			goto L_End;
+			close3;
 		}
 		else if ((ra_tem_q >= 1) && (ra_tem_q < 10)) {
 			mes "[Priestess Nemma]";
@@ -4024,7 +4024,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "Panno would know";
 			mes "what to do... I think.";
 			mes "Ooh, Panno, help me!";
-			goto L_End;
+			close3;
 		}
 		else if (ra_tem_q == 10) {
 			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 "the gate locks up again?";
 			mes "Oooh, what should I do?!";
-			goto L_End;
+			close3;
 		}
 		else if (ra_tem_q == 11) {
 			emotion ET_DELIGHT;
@@ -4062,7 +4062,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 			mes "longer asking for donations,";
 			mes "but you can still redeem your";
 			mes "Lottery Tickets inside, okay?";
-			goto L_End;
+			close3;
 		}
 		else if (ra_tem_q == 12) {
 			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 "you thank you thank you!";
 			set ra_tem_q,13;
-			goto L_End;
+			close3;
 		}
 		else if (ra_tem_q == 13) {
 			mes "[Priestess Nemma]";
@@ -4124,7 +4124,7 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 					mes "to play! Hm, maybe";
 					mes "our pope would like";
 					mes "to see these too?";
-					goto L_End;
+					close3;
 				}
 				cutin "ra_nemma02",2;
 				mes "[Priestess Nemma]";
@@ -4143,20 +4143,16 @@ ra_temple,116,174,3	script	Nemma#ra_temple	920,{
 				mes "have much to pay you";
 				mes "back with, anyway~";
 			}
-			goto L_End;
+			close3;
 		}
 		else {
 			cutin "ra_nemma01",2;
 			mes "[Priestess Nemma]";
 			mes "Welcome to our temple!";
 		}
-		goto L_End;
+		close3;
 	}
-
-L_End:
-	close2;
-	cutin "",255;
-	end;
+	close3;
 
 S_Donate:
 	.@num = getarg(0);
@@ -6329,7 +6325,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "everything I know.";
 			mes "Remember to keep";
 			mes "quiet about what I said.";
-			goto L_End;
+			close3;
 		}
 	}
 	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 "me at your leisure.";
 			mes "Go with Freya.";
-			goto L_End;
+			close3;
 
 		case 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 "you can only enter if you've";
 			mes "been permitted beforehand.";
-			goto L_End;
+			close3;
 
 		case 3:
 			mes "[Priestess Panno]";
 			mes "......................";
 			mes "No chit-chat";
 			mes "inside the temple.";
-			goto L_End;
+			close3;
 		}
 	}
 	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 "me at your leisure.";
 			mes "Go with Freya.";
-			goto L_End;
+			close3;
 
 		case 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 "you can only enter if you've";
 			mes "been permitted beforehand.";
-			goto L_End;
+			close3;
 
 		case 3:
 			cutin "ra_fano02",2;
@@ -6525,7 +6521,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 			mes "[Priestess Panno]";
 			mes ".........";
 			set ra_tem_q,11;
-			goto L_End;
+			close3;
 		}
 	}
 	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 "to get back to work.";
 		set ra_tem_q,12;
-		goto L_End;
+		close3;
 	}
 	cutin "ra_fano02",2;
 	mes "[Priestess Panno]";
@@ -6668,7 +6664,7 @@ ra_temin,170,46,3	script	Panno#rachel	920,{
 	mes "Behave yourself, and";
 	mes "respect those who have";
 	mes "come here just to worship.";
-	goto L_End;
+	close3;
 
 L_Lottery:
 	if(checkweight(607,1) == 0){
@@ -6680,7 +6676,7 @@ L_Lottery:
 		mes "something large, unwieldy";
 		mes "and heavy? Put your junk";
 		mes "away in Storage first.";
-		goto L_End;
+		close3;
 	}
 	mes "[Priestess Panno]";
 	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 > 0 && .@bonus_donate < 6) getitem 526,1;	//Royal Jelly 5%
 		else getitem 547,1; //Condensed White Potion 39%
-		goto L_End;
+		close3;
 	}
 	mes "[Priestess Panno]";
 	mes "You...";
@@ -6736,7 +6732,7 @@ L_Lottery:
 	cutin "ra_fano03",2;
 	mes "[Priestess Panno]";
 	mes "May Freya be with you.";
-	goto L_End;
+	close3;
 
 L_End:
 	close2;

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

@@ -284,7 +284,7 @@ prontera,124,297,3	script	Tialfi	706,{
 				next;
 				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...";
-				close;
+				close3;
 			}
 			else if (BaseLevel < 70) {
 				cutin "god_tialpi02",2;

+ 1 - 3
npc/quests/the_sign_quest.txt

@@ -3093,13 +3093,11 @@ OnTouch_:
 	end;
 }
 
-/* Currently broken.
 prt_maze02,25,161,0	script	#music	-1,7,7,{
 OnTouch_:
-	soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
+	soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
 	end;
 }
-*/
 
 prt_maze02,132,132,0	script	#skill	-1,{
 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
 
+// cities/brasilis.txt
+//============================================================
+alberta,246,82,3	duplicate(Crewman_bra2)	Crewman#bra2	100
+
 // cities/gonryun.txt
 //============================================================
 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.";
 		close;
 	}
-	mes "ø¡ô¡ü ¡¡ø¡ô¡ü ¡ø";
-	mes "ô ¡ø";
+	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü ¡ø";
+	mes "¡ô ¡ø";
 	next;
 	mes "Don't know what it means.";
 	close;
@@ -130,7 +130,7 @@ dicastes01,248,129,0	script	Training Galten#d	450,{
 		close; 
 	}
 	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü";
-	mes "¡ø¡ô¡ü ¡ø¡ ø¡ô¡ü ¡ø";
+	mes "¡ø¡ô¡ü ¡ø ¡ø¡ô¡ü ¡ø";
 	next;
 	mes "Don't know what it means.";
 	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;
 				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";
-				close;
+				close3;
 			}
 			mes "[Vigilante Aglio]";
 			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
-//===== 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.
-//===== 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]
-//============================================================ 
+//============================================================
 
 brasilis,219,97,3	script	Brasilis Guide	478,{
 	mes "[Brasilis Guide]";
@@ -59,6 +53,7 @@ brasilis,219,97,3	script	Brasilis Guide	478,{
 			viewpoint 1,195,235,6,0x3355FF;
 			close;
 		}
+		end;
 	case 2:
 		mes "[Brasilis Guide]";
 		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) {
 				mes "[ Hired Kafra Employee ]";
 				mes "I'll work hard for you... Thank you!";
-				close;
+				close3;
 			}
 			mes "[ Hired Kafra Employee ]";
 			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,{
-	cutin "dalle01.bmp",2;
 	if (is_party_leader() == false) {
+		cutin "dalle01.bmp",2;
 		mes "[Charleston 1]";
 		mes "Please let me talk to your leader about the supplementation of the factory.";
-		close;
+		close3;
 	}
 	if ('ep15_1_mcd01 > 11)
 		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,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,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,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
@@ -188,8 +188,8 @@ glast_01,204,273,5	script	Hugin	4_M_SAGE_C,{
 		next;
 		if (select( "Omit moderately.", "Appreciate everything." ) == 1) {
 			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.";
 			close2;
 			cutin "",255;
@@ -1073,8 +1073,13 @@ OnTimer5000:
 	close3;
 }
 
-// note: never hidden
 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;
 	mes "[Varmundt]";
 	if (checkquest(12318,HUNTING) != 2) {
@@ -1216,10 +1221,24 @@ OnMyMobDead:
 		enablenpc instance_npcname("Varmundt#21");
 		donpcevent instance_npcname("#ghmemorialmob05") + "::OnStart";
 		disablenpc instance_npcname("#ghmemorialmob04");
+		'step = 6;
 	}
 	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
 //============================================================
 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,{
 	end;
 OnTouch_:
-	if ('step != 5)
+	if ('step != 6)
 		end;
-	'step = 6;
+	'step = 7;
 	disablenpc();
 	if ('mode == 1)
 		donpcevent instance_npcname("#talkinstance5") + "::OnStart";
@@ -1372,16 +1391,18 @@ OnTouch_:
 	disablenpc();
 	.@hidden_name$ = strnpcinfo(2);
 	.@event_type = atoi( charat(.@hidden_name$,4) );
+	.@event_number = atoi( charat(.@hidden_name$,6) );
 	if (.@event_type == 2)
-		.@label$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
+		.@event$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead" + .@event_number;	// left side
 	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;
-	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;
 	end;
 OnTimer30000:
@@ -1417,7 +1438,13 @@ OnStart:
 		enablenpc instance_npcname("#ogh_2-" + .@i);
 	end;
 
-OnMyMobDead:
+OnMyMobDead1:
+OnMyMobDead2:
+OnMyMobDead3:
+OnMyMobDead4:
+OnMyMobDead5:
+OnMyMobDead6:
+OnMyMobDead7:
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 		end;
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
@@ -1445,7 +1472,9 @@ OnBossDead:
 	for ( .@i = 1; .@i <= 7; .@i++ )
 		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;
 }
 
@@ -1506,6 +1535,13 @@ OnStart:
 	end;
 
 OnMyMobDead:
+OnMyMobDead1:
+OnMyMobDead2:
+OnMyMobDead3:
+OnMyMobDead4:
+OnMyMobDead5:
+OnMyMobDead6:
+OnMyMobDead7:
 	if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnBossDead") > 0)	// Prevent boss re-spawn
 		end;
 	if ('mode == 2)	// Higher (but unknown) spawn rate in fast mode
@@ -1535,7 +1571,10 @@ OnBossDead:
 	for ( .@i = 1; .@i <= 7; .@i++ )
 		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
 	setarray .@coord[0],
@@ -1552,9 +1591,9 @@ OnBossDead:
 2@gl_k,150,180,0	script	#Geron	HIDDEN_WARP_NPC,7,7,{
 	end;
 OnTouch_:
-	if ('step != 6)
+	if ('step != 7)
 		end;
-	'step = 7;
+	'step = 8;
 	disablenpc instance_npcname("#Geron");
 	mapannounce 'map_name$[1], "???: Do not come here! It's a trap... Kkkkah!!!", bc_map,0xFF7777,FW_NORMAL,15;
 	enablenpc instance_npcname("Himelmez#22");
@@ -1574,15 +1613,19 @@ OnTouch_:
 	else if (.@i == 3) .@mobs = 5;
 	else if (.@i < 7) .@mobs = 6;
 	else .@mobs = 7;
+	.@event$ = instance_npcname( strnpcinfo(0) ) + "::OnMobDead";
+	killmonster 'map_name$[1], .@event$;
 	getmapxy .@map$,.@x,.@y, BL_NPC;
 	specialeffect EF_VENOMDUST;
-	monster .@map$,.@x,.@y,"Maggot",2467,.@mobs;
+	monster .@map$,.@x,.@y,"Maggot",2467,.@mobs, .@event$;
 	initnpctimer;
 	end;
 OnTimer45000:
 	enablenpc();
 	stopnpctimer;
 	end;
+OnMobDead:
+	end;
 }
 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
@@ -1646,9 +1689,9 @@ OnTimer45000:
 	mes "That is amazing ~ you made it all the way here. May I say thank you?";
 	close3;
 OnTouch_:
-	if ('step != 7)
+	if ('step != 8)
 		end;
-	'step = 8;
+	'step = 9;
 	disablenpc();
 	if ('mode == 1)
 		donpcevent instance_npcname("#talkinstance7") + "::OnStart";
@@ -1972,9 +2015,13 @@ OnTimer10000:
 
 
 2@gl_k,158,241,1	script	Hugin#21	4_M_SAGE_C,{
-	if ('step != 8)
+	if ('step != 9)
 		end;
 	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 "Hm, you are very well. First of all, let me give you some loot from Amdarais.";
 		erasequest 12319;
@@ -2031,7 +2078,7 @@ OnTimer10000:
 // Treasure Room
 //============================================================
 1@gl_k,165,136,3	script	Strange crack#2	CLEAR_NPC,{
-	if ('step != 8)
+	if ('step != 9)
 		end;
 	if (isbegin_quest(12322) == 0) {// Space Distortion
 		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,122,212,5	script	Dien#171_os_3	4_F_DIENE,{
-OnTalk:
 	cutin "ep162_dn01",2;
 	mes "[Dien]";
 	mes "Oh!";
@@ -281,8 +280,14 @@ OnTalk:
 	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.";
 	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 - 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,
 			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) {
-			set .@rand, rand(.@i);
+			set .@rand, rand(0,.@i);
 			set .@tmp, .@n[.@i];
 			set .@n[.@i], .@n[.@rand];
 			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;
 			mes "[Poring]";
 			mes "It may fail, but keep trying to lure way those Little Porings!";
-			close;
+			close3;
 		}
 	} else if (isbegin_quest(2297) == 1) {
 		mes "[Poring]";

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

@@ -29,15 +29,6 @@
 //= 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,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:
           - Index: 0
             Item: Staff_Of_Bordeaux
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 30
@@ -444,6 +445,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Moonlight_Sword
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 60
@@ -455,6 +457,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Long_Mace
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -466,6 +469,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Spectral_Spear
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 20
@@ -477,6 +481,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Nurse_Cap
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -488,6 +493,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Apple_Of_Archer
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -499,6 +505,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Puente_Robe
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -510,6 +517,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Muffler_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -521,6 +529,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Shoes_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -534,6 +543,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Huuma_Fluttering_Snow
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -545,6 +555,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Combo_Battle_Glove
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -556,6 +567,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Herald_Of_GOD_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -567,6 +579,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Clack_Of_Servival
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -578,6 +591,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Cap_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 50
@@ -591,6 +605,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Infiltrator_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 80
@@ -602,6 +617,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Ghoul_Leg
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 10
@@ -613,6 +629,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Wizardy_Staff
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 40
@@ -624,6 +641,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Balistar_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 50
@@ -635,6 +653,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Book_Of_The_Apocalypse
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 50
@@ -646,6 +665,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Cape_Of_Ancient_Lord_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 30
@@ -681,6 +701,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Immaterial_Sword
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -692,6 +713,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: War_Axe
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -703,6 +725,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Pole_Axe
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -714,6 +737,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Huuma_Bird_Wing
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -725,6 +749,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Iron_Driver
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 100
@@ -749,6 +774,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Tablet
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 50
@@ -760,6 +786,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Hunter_Bow_
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 80
@@ -777,6 +804,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Goibne's_Helmet
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 120
@@ -791,6 +819,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Goibne's_Armor
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 80
@@ -805,6 +834,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Goibne's_Combat_Boots
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 80
@@ -819,6 +849,7 @@ Body:
         RequiredItems:
           - Index: 0
             Item: Goibne's_Shoulder_Arms
+            Refine: 9
           - Index: 1
             Item: IllusionStone
             Amount: 120
@@ -828,3 +859,89 @@ Body:
           - Index: 3
             Item: Token_Of_Bigstone
             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.7 Added Illusion of Twins enchanter [Capuche]
 //= 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;
 	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 =======================================
 //= 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]
 //============================================================
 
 //==================================================
 // 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,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.4 More accurate spawns [Playtester]
 //= 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	Jewel	20600,3
 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 =======================================
 //= 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]
 //============================================================
 
 //==================================================
 // 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 ) ){
 						mes "[Raffam Oranpere]";
 						mes "Come back to join after you leave your current guild.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 						cutin "laperm04.bmp", 2;
 						mes "[Raffam Oranpere]";
@@ -268,7 +268,7 @@ prt_in,35,114,5	script	Devon Aire	10059,{
 					if( getcharid( 2 ) ){
 						mes "[Devon Aire]";
 						mes "Leave your guild first to join my Clan, duh.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 						cutin "debon03.bmp", 2;
 						mes "[Devon Aire]";
@@ -421,7 +421,7 @@ prt_in,37,114,5	script	Berman Aire	10060,{
 						mes "[Berman Aire]";
 						mes "Oh, no.";
 						mes "In order to join, you first have to leave your current guild.";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 						mes "[Berman Aire]";
 						mes "You're already in a Clan.";
@@ -567,7 +567,7 @@ prt_in,39,114,5	script	Shaam Rumi	10027,{
 					if( getcharid( 2 ) ){
 						mes "[Shaam Rumi]";
 						mes "Did you finish things up with your guild?";
-						close;
+						close3;
 					}else if( getcharid( 5 ) != 0 ){
 						mes "[Shaam Rumi]";
 						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.6 Added support to Para_Team_Mark_ in Eden Group. [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,{
@@ -49,7 +50,7 @@ moc_para01,42,38,3	script	Mission [56 - 70]	857,{
 			case 1: callsub L_HuntingQuest,3260,16000,6000;
 			case 2: callsub L_HuntingQuest,3261,16000,7000;
 			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;
@@ -354,7 +355,7 @@ L_Details:
 		next;
 		mes "To make the wand, I need some special materials.";
 		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;
 		mes "Please confirm it to us after you complete the mission, then we will give you proper rewards.";
 		next;

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

@@ -618,7 +618,6 @@ OnInit:
 	end;
 }
 
-/*
 ein_d02_i,161,180,5	script	Machoko#machoco	8_F_GIRL,{
 	if (BaseLevel < 150)
 		end;
@@ -767,7 +766,6 @@ OnInit:
 	questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(3457,PLAYTIME) == 2" );
 	end;
 }
-*/
 
 tur_d03_i,125,186,5	script	Orian#orian	4_M_LGTPOOR,{
 	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;
 				mes "[Spica]";
 				mes "" + strcharinfo(0) + ", why don't you go back to your room and wait for the message?";
-				close;
+				close3;
 			}
 			mes "[Spica]";
 			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;
 			mes "[Spica]";
 			mes "I wonder if the old folks would hear me out though.";
-			close;
+			close3;
 		}
 		mes "[Spica]";
 		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;
 			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.";
-			close;
+			close3;
 		}
 		emotion ET_OK;
 		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;
 		questinfo_refresh();
 		close2;
+		cutin "",255;
 		npctalk "Oh, please come here for a moment.", "Rookie#ep162_03", bc_self;
 		end;
 	}
@@ -3669,7 +3670,7 @@ que_swat,145,57,3	script	Philopontess#ep162_04	4_M_PHILOFONTES,{
 				mes "[Tess]";
 				mes "Not now?";
 				mes "Then get some rest and come back please.";
-				close;
+				close3;
 			}
 			mes "[Tess]";
 			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) {
 			mes "[USU commander Elena]";
 			mes "...Why are you empty-handed? Where is the cookie?";
-			close;
+			close3;
 		}
 		emotion ET_DELIGHT;
 		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;
 		getitem 25723,15;
 		getexp 800000,800000;
-		close;
+		close3;
 	}
 	if (isbegin_quest(7859) == 1) {
 		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;
 	switch (prompt("Find a meal for Morning.:Chat with Morning.")) {
 	case 255:
+		cutin "",255;
 		setpcblock PCBLOCK_ALL,false;
 		end;
 	case 1:
@@ -4382,6 +4383,7 @@ sp_rudus,130,200,4	script	Morning#171_rudus	4_EP17_MORNING,{
 		sleep2 2000;
 		switch (prompt("I'll bring it.:Something urgent happened.")) {
 		case 255:
+			cutin "",255;
 			setpcblock PCBLOCK_ALL,false;
 			end;
 		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()) {
 					mes "^4D4DFFThis place is a memorial dungeon.";
 					mes "You have to be a party leader to create a memorial dungeon.^000000";
-					close;
+					close3;
 				}
 				if (instance_create(.@md_name$) == -3)
 					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.6 Added Illusion of Underwater [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,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
 		erasequest 7398;
 		setquest 7399;
-		close;
+		close3;
 	} else if (malaya_diwata == 5) {
 		cutin "malaya_diwata02", 2;
 		mes "[Diwata]";
 		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.";
-		close;
+		close3;
 	} else {
 		if (checkquest(7402) == -1) {
 			if (checkquest(7403) == -1) {
@@ -2650,7 +2650,7 @@ OnTouch:
 					mes "The flowers you bring makes me calm down.";
 					mes "....";
 					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;
 				mes "[Diwata]";
@@ -2658,7 +2658,7 @@ OnTouch:
 				mes "What? Oh, it's you.";
 				mes "Those hillbillies came back again!";
 				mes "I'm going to kill them!";
-				close;
+				close3;
 			}
 			cutin "malaya_diwata02", 2;
 			mes "[Diwata]";
@@ -2669,7 +2669,7 @@ OnTouch:
 			mes "The flowers you bring makes me calm down.";
 			mes "....";
 			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;
 		mes "[Diwata]";
@@ -2718,7 +2718,7 @@ OnTouch:
 		delitem 6506, 1; // Memorial_Boquet
 		setquest 7403;
 		erasequest 7402;
-		close;
+		close3;
 	}
 	cutin "", 255;
 	end;

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

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

+ 1 - 4
npc/re/scripts_athena.conf

@@ -14,7 +14,6 @@ npc: npc/re/battleground/bg_common.txt
 
 // --------------------------- Cities ---------------------------
 npc: npc/re/cities/alberta.txt
-npc: npc/re/cities/brasilis.txt
 npc: npc/re/cities/comodo.txt
 npc: npc/re/cities/dewata.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/HorrorToyFactory_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/moro_cav_exchange.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/shadow_refiner.txt
 npc: npc/re/merchants/eden_market.txt
+//npc: npc/re/merchants/shopping_boards.txt
 
 // --------------------------- Others ---------------------------
 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_18_1.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_dicastes.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_fild.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                    -
 // --------------------------------------------------------------
 npc: npc/re/mapflag/norenewalpenalty.txt
+npc: npc/re/mapflag/specialpopup.txt

+ 1 - 3
npc/re/scripts_warps.conf

@@ -4,12 +4,12 @@
 
 // --------------------------- Cities ---------------------------
 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/dicastes.txt
 npc: npc/re/warps/cities/eclage.txt
 npc: npc/re/warps/cities/einbech.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/izlude.txt
 npc: npc/re/warps/cities/malangdo.txt
@@ -21,7 +21,6 @@ npc: npc/re/warps/cities/yggdrasil.txt
 
 // -------------------------- Dungeons --------------------------
 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/ecl_dun.txt
 npc: npc/re/warps/dungeons/ein_dun.txt
@@ -38,7 +37,6 @@ npc: npc/re/warps/dungeons/thor_v.txt
 
 // --------------------------- Fields ---------------------------
 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/dic_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/amatsu.txt
 npc: npc/cities/ayothaya.txt
+npc: npc/cities/brasilis.txt
 npc: npc/cities/comodo.txt
 npc: npc/cities/einbech.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_amatsu.txt
 npc: npc/quests/quests_ayothaya.txt
+npc: npc/quests/quests_brasilis.txt
 npc: npc/quests/quests_comodo.txt
 npc: npc/quests/quests_ein.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/amatsu.txt
 npc: npc/warps/cities/ayothaya.txt
+npc: npc/warps/cities/brasilis.txt
 npc: npc/warps/cities/comodo.txt
 npc: npc/warps/cities/einbech.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/ayo_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/ein_dun.txt
 npc: npc/warps/dungeons/gef_dun.txt
@@ -67,6 +69,7 @@ npc: npc/warps/dungeons/xmas_dun.txt
 // --------------------------- Fields ---------------------------
 npc: npc/warps/fields/abyss_warper.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/gefenia.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 =======================================
-//= 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.1a Added Field warp according to official. [Jguy]
 //= 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/timer.hpp>
 #include <common/utilities.hpp>
+#include <common/utils.hpp>
 
 #include "char_clif.hpp"
 #include "char_cnslif.hpp"
@@ -1357,10 +1358,12 @@ int char_check_char_name(char * name, char * esc_name)
 	if( name[0] == '\0' )
 		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;
 	// check content of character 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]
 	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]
+	charserv_config.char_config.char_name_min_length = 4; // Minimum character name length
 
 	charserv_config.save_log = 1; // show loading/saving messages
 	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;
 
 	(*count) = 0; // Reset to begin reading
+	memset(start_point, 0, sizeof(struct s_point_str) * MAX_STARTPOINT);
 
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	if (fields == nullptr)
@@ -2872,6 +2877,8 @@ void char_config_split_startitem(char *w1_value, char *w2_value, struct startite
 	int i = 0;
 	size_t fields_length = 3 + 1;
 
+	memset(start_items, 0, sizeof(struct startitem) * MAX_STARTITEM);
+
 	fields = (char **)aMalloc(fields_length * sizeof(char *));
 	if (fields == nullptr)
 		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);
 		} 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));
+		} 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]
 			charserv_config.char_config.char_del_level = atoi(w2);
 		} 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 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]
+	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_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

+ 2 - 2
src/common/mmo.hpp

@@ -115,7 +115,7 @@ typedef uint32 t_itemid;
 #define MAX_CLAN 500
 #define MAX_CLANALLIANCE 6
 #ifndef MAX_BARTER_REQUIREMENTS
-	#define MAX_BARTER_REQUIREMENTS 5
+	#define MAX_BARTER_REQUIREMENTS 6
 #endif
 #ifndef WEB_AUTH_TOKEN_LENGTH
 	#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.
 //Includes null-terminator as it is the length of the array.
 #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).
 #define NPC_NAME_LENGTH 50
 // <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;
 	}
 
-	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;
 
 	// 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);
 		else if(!strcmpi(w1, "new_account"))
 			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"))
 			login_config.start_limited_time = atoi(w2);
 		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));
 	login_config.console = false;
 	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.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
 	char date_format[32];                           /// date format used in messages
 	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)
 	bool use_md5_passwds;                           /// work with password hashes instead of plaintext passwords?
 	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
 			sce->val2--;
 			if (sce->val2 > 0) {
-				clif_millenniumshield(target, sce->val2);
+				clif_millenniumshield( *target, sce->val2 );
 				sce->val3 = 1000; // Next shield
 			} else
 				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,        },
 	{ "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,        },
-	{ "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,          },
 	{ "autospell_stacking",                 &battle_config.autospell_stacking,              0,      0,      1,              },
 	{ "override_mob_names",                 &battle_config.override_mob_names,              0,      0,      2,              },
@@ -11499,6 +11499,13 @@ static const struct _battle_data {
 #endif
 	{ "synchronize_damage",                 &battle_config.synchronize_damage,              0,      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>
 };

+ 2 - 0
src/map/battle.hpp

@@ -744,6 +744,8 @@ struct Battle_Config
 	int instance_allow_reconnect;
 	int synchronize_damage;
 	int item_stacking;
+	int hom_delay_reset_vaporize;
+	int hom_delay_reset_warp;
 
 #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;
 	}
 
-	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
 		return;
 	}
@@ -354,13 +354,13 @@ void buyingstore_trade( map_session_data* sd, uint32 account_id, unsigned int bu
 		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
 		clif_buyingstore_trade_failed_seller(sd, BUYINGSTORE_TRADE_SELLER_FAILED, 0);
 		return;
 	}
 
-	searchstore_clearremote(sd);
+	searchstore_clearremote(*sd);
 
 	// buyer lost zeny in the mean time? fix the limit
 	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
-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[0] = (uint8)(x0>>2);
 	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.isPKModeON = (sd && sd->status.karma) ? 1 : 0;
 	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.clevel = clif_setlevel( &bl );
 #if PACKETVER >= 20080102
@@ -1698,7 +1698,7 @@ int clif_spawn( struct block_list *bl, bool walking ){
 			if (sd->spiritball > 0)
 				clif_spiritball(&sd->bl);
 			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)
 				clif_soulball(sd);
 			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) )
 				clif_sendbgemblem_area(sd);
 			if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
-				clif_spiritcharm(sd);
+				clif_spiritcharm( *sd );
 			if (sd->status.robe)
 				clif_refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
 			clif_efst_status_change_sub(bl, bl, AREA);
@@ -3670,16 +3670,16 @@ void clif_updatestatus( map_session_data& sd, enum _sp type ){
 			break;
 #else
 		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;
 		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;
 		case SP_NEXTBASEEXP:
-			clif_par_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
+			clif_longpar_change(sd, type, client_exp(pc_nextbaseexp(&sd)));
 			break;
 		case SP_NEXTJOBEXP:
-			clif_par_change(sd, type, client_exp(pc_nextjobexp(&sd)));
+			clif_longpar_change(sd, type, client_exp(pc_nextjobexp(&sd)));
 			break;
 #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.
 /// 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
 	PACKET_ZC_ACK_OPENSTORE2 packet{};
 
 	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 );
 #endif
@@ -7722,7 +7719,7 @@ void clif_openvending( map_session_data& sd ){
 
 	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,0); //for some reason, at least older clients want this sent twice
 		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) )
 			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
 ///         cannot be searched.
 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 ) );
 
 	// minimum packet length
@@ -19167,7 +19166,22 @@ static void clif_parse_SearchStoreInfo( int fd, map_session_data *sd ){
 		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
 void clif_search_store_info_ack( map_session_data& sd ){
 #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 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->packetLength = sizeof( *p );
 	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++ ){
 		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
-	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.
 /// 083c <account id>.L <store id>.L <nameid>.W (CZ_SSILIST_ITEM_CLICK)
 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 ) );
 
-	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
  **/
-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
 }
 
@@ -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
 void clif_parse_blocking_playcancel( int fd, map_session_data *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)
@@ -25086,6 +25121,20 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y)
 #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
  *------------------------------------------*/

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio