Browse Source

Merge branch 'feature/store_taxes' of https://github.com/rathena/rathena into feature/store_taxes

aleos89 7 years ago
parent
commit
12768c49bc
86 changed files with 3526 additions and 807 deletions
  1. 1 0
      .gitattributes
  2. 7 1
      conf/battle/skill.conf
  3. 2 2
      conf/msg_conf/char_msg.conf
  4. 1 1
      conf/msg_conf/map_msg.conf
  5. 1 1
      conf/msg_conf/map_msg_chn.conf
  6. 1 1
      conf/msg_conf/map_msg_frn.conf
  7. 1 1
      conf/msg_conf/map_msg_idn.conf
  8. 3 0
      conf/msg_conf/map_msg_mal.conf
  9. 1 1
      conf/msg_conf/map_msg_por.conf
  10. 1 1
      conf/msg_conf/map_msg_rus.conf
  11. 1 1
      conf/msg_conf/map_msg_spn.conf
  12. 1 1
      conf/msg_conf/map_msg_tha.conf
  13. 6 6
      db/pre-re/item_db.txt
  14. 1 1
      db/pre-re/skill_cast_db.txt
  15. 1 1
      db/pre-re/skill_db.txt
  16. 2 2
      db/pre-re/skill_require_db.txt
  17. 8 8
      db/pre-re/skill_tree.txt
  18. 15 3
      db/re/item_combo_db.txt
  19. 308 22
      db/re/item_db.txt
  20. 122 8
      db/re/mob_db.txt
  21. 3 0
      db/re/mob_skill_db.txt
  22. 16 1
      db/re/quest_db.txt
  23. 1 1
      db/re/skill_cast_db.txt
  24. 3 3
      db/re/skill_db.txt
  25. 2 2
      db/re/skill_require_db.txt
  26. 8 8
      db/re/skill_tree.txt
  27. 1 1
      doc/atcommands.txt
  28. 2 0
      doc/mapflags.txt
  29. 6 9
      doc/packet_interserv.txt
  30. 16 0
      doc/script_commands.txt
  31. 31 17
      npc/custom/card_seller.txt
  32. 4 4
      npc/events/RWC_2012.txt
  33. 267 267
      npc/kafras/functions_kafras.txt
  34. 4 4
      npc/kafras/kafras.txt
  35. 8 0
      npc/other/Global_Functions.txt
  36. 2 2
      npc/other/turbo_track.txt
  37. 1 1
      npc/re/instances/MalangdoCulvert.txt
  38. 17 15
      npc/re/merchants/card_separation.txt
  39. 5 5
      npc/re/merchants/enchan_ko.txt
  40. 3 3
      npc/re/merchants/enchan_mal.txt
  41. 3 3
      npc/re/merchants/enchan_mora.txt
  42. 1 1
      npc/re/merchants/enchan_upg.txt
  43. 11 0
      npc/re/other/achievements.txt
  44. 1296 0
      npc/re/quests/quests_14_3.txt
  45. 2 2
      npc/re/quests/quests_malangdo.txt
  46. 1 0
      npc/re/scripts_athena.conf
  47. 6 6
      sql-files/item_db.sql
  48. 308 22
      sql-files/item_db_re.sql
  49. 122 8
      sql-files/mob_db_re.sql
  50. 3 0
      sql-files/mob_skill_db_re.sql
  51. 4 0
      src/char/char.cpp
  52. 5 0
      src/char/char.hpp
  53. 9 10
      src/char/char_logif.cpp
  54. 1 1
      src/char/char_logif.hpp
  55. 2 3
      src/char/inter.cpp
  56. 1 1
      src/char/inter.hpp
  57. 10 3
      src/common/mmo.h
  58. 2 1
      src/common/sql.c
  59. 5 13
      src/login/loginchrif.cpp
  60. 5 9
      src/map/achievement.cpp
  61. 5 3
      src/map/atcommand.cpp
  62. 15 6
      src/map/battle.cpp
  63. 1 0
      src/map/battle.hpp
  64. 142 37
      src/map/clif.cpp
  65. 10 0
      src/map/clif_obfuscation.hpp
  66. 26 1
      src/map/clif_packetdb.hpp
  67. 155 0
      src/map/clif_shuffle.hpp
  68. 15 7
      src/map/itemdb.cpp
  69. 102 100
      src/map/mercenary.cpp
  70. 14 6
      src/map/mercenary.hpp
  71. 7 3
      src/map/mob.cpp
  72. 5 0
      src/map/mob.hpp
  73. 5 0
      src/map/npc.hpp
  74. 1 0
      src/map/party.cpp
  75. 15 8
      src/map/pc.cpp
  76. 0 1
      src/map/pc.hpp
  77. 34 22
      src/map/pet.cpp
  78. 6 3
      src/map/pet.hpp
  79. 23 4
      src/map/script.cpp
  80. 23 0
      src/map/script.hpp
  81. 58 0
      src/map/script_constants.hpp
  82. 76 38
      src/map/skill.cpp
  83. 42 25
      src/map/status.cpp
  84. 1 0
      src/map/status.hpp
  85. 35 51
      src/map/storage.cpp
  86. 29 4
      src/map/unit.cpp

+ 1 - 0
.gitattributes

@@ -5,6 +5,7 @@
 *.vcxproj merge=union
 *.sln text eol=crlf
 *.bat text eol=crlf
+athena-start text eol=lf
 configure text eol=lf
 configure.in text eol=lf
 Makefile text eol=lf

+ 7 - 1
conf/battle/skill.conf

@@ -122,7 +122,8 @@ gvg_traps_target_all: 1
 // 0 = Always visible
 // 1 = Enable invisibility in versus maps (GVG/PVP/BG)
 // 2 = Enable invisibility in all maps
-traps_setting: 0
+// Default on official servers: 0 for Pre-renewal, 2 for Renewal
+//traps_setting: 0
 
 // Restrictions applied to the Alchemist's Summon Flora skill (add as necessary)
 // 1: Enable players to damage the floras outside of versus grounds.
@@ -369,3 +370,8 @@ dispel_song: no
 // 0: Uses the official duration
 // X: Enter a custom duration in milliseconds.
 banana_bomb_duration: 0
+
+// Should items that you try to create be dropped if you have no space left in your inventory? (Note 1)
+// Official: no
+// Legacy rAthena logic: yes
+skill_drop_items_full: no

+ 2 - 2
conf/msg_conf/char_msg.conf

@@ -149,8 +149,8 @@
 216: No account with ID '%d' was found.
 217: -- Account %d --
 218: User: %s | GM Group: %d | State: %d
-219: Password: %s (PIN:%s)
-220: ****
+//219: FREE
+//220: FREE
 221: Account e-mail: %s | Birthdate: %s
 222: Last IP: %s (%s)
 223: This user has logged in %d times, the last time was at %s

+ 1 - 1
conf/msg_conf/map_msg.conf

@@ -690,7 +690,7 @@
 666: Pets are not allowed in Guild Wars.
 667: You're not dead.
 668: Your actual memo positions are:
-669: You broke the target's weapon.
+//669 free
 670: You can't leave battleground guilds.
 671: Friend already exists.
 672: Name not found in list.

+ 1 - 1
conf/msg_conf/map_msg_chn.conf

@@ -643,7 +643,7 @@
 666: 公會戰不允許有寵物
 667: 你沒死亡
 668: 你實際儲存點是:
-669: 你破壞目標的武器
+//669 free
 670: 你無法離開戰場公會
 671: 這朋友已存在
 672: 該名稱不在清單內

+ 1 - 1
conf/msg_conf/map_msg_frn.conf

@@ -655,7 +655,7 @@
 666: Pets non-autorisés lors d'une guerre entre guilde.
 667: Vous n'êtes pas mort(e).
 668: Votre position memo actuelle est:
-669: Vous brisez l'arme de la cible.
+//669 free
 670: Vous ne pouvez pas quitter votre guilde.
 671: Cette personne est déjà dans votre liste d'ami.
 672: Nom introuvable dans la liste.

+ 1 - 1
conf/msg_conf/map_msg_idn.conf

@@ -689,7 +689,7 @@
 666: Peliharaan tidak diperbolehkan di Guild Wars.
 667: Kamu tidak mati.
 668: Posisi memomu saat ini adalah:
-669: Kamu menghancurkan senajta lawan.
+//669 kosong
 670: Kamu tidak dapat meninggalkan guild battleground.
 671: Teman sudah ada.
 672: Nama tidak ditemukan di daftar.

+ 3 - 0
conf/msg_conf/map_msg_mal.conf

@@ -0,0 +1,3 @@
+
+//Custom translations
+import: conf/msg_conf/import/map_msg_mal_conf.txt

+ 1 - 1
conf/msg_conf/map_msg_por.conf

@@ -635,7 +635,7 @@
 666: Bichinhos de estimação não são permitidos na Guerra de Clãs.
 667: Você não está morto.
 668: Seu ponto de retorno atual é:
-669: Você quebrou a arma de seu oponente.
+//669 livre
 670: Você não pode deixar os campos de batalha em uma guerra.
 671: Amigo já existente.
 672: Nome não encontrado na lista.

+ 1 - 1
conf/msg_conf/map_msg_rus.conf

@@ -655,7 +655,7 @@
 666: Питомцы запрещены во время Войны за Империум.
 667: Вы не мертвы.
 668: Ваши текущие точки сохранения:
-669: Вы сломали оружие цели.
+//669 НЕ ИСПОЛЬЗУЕТСЯ
 670: Вы не можете покинуть БГ.
 671: Друг уже добавлен.
 672: Имя не найдено в списке.

+ 1 - 1
conf/msg_conf/map_msg_spn.conf

@@ -690,7 +690,7 @@
 666: Las mascotas están prohibidas en la guerra de clanes.
 667: No estás muerto.
 668: Tus puntos de memorización actuales son los siguientes:
-669: Has roto el arma de tu enemigo.
+//669 vacío
 670: No puedes abandonar un clan especial de battleground.
 671: Ese jugador ya es amigo tuyo.
 672: No se ha encontrado el nombre que has introducido.

+ 1 - 1
conf/msg_conf/map_msg_tha.conf

@@ -649,7 +649,7 @@
 666: ��µ�לא��י�§ה�טה´י¶����÷�¹�­�µד�י¹�א¢י�ד¹¾�י¹·�ט Guild Wars.
 667: ¤�³ה�טה´יµ��.
 668: µ�ב�¹ט§·�ט¤�³ה´י÷�¹·��ה�י��´�§¹�י:
-669: ¤�³ה´י·��������¸¢�§א»י�����.
+//669 free
 670: ¤�³ה�ט�����¶���¨�� Guild ה´יד¹¢³����טד¹ battleground.
 671: א¾�ט�¹·�ט�����טב�י�.
 672: ה�ט¾÷×�ט�ד¹������.

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

@@ -1579,7 +1579,7 @@
 2757,Insecticide_Ring,Insecticide Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Insect,15; },{},{}
 2758,Fisher_Ring,Fischer Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Fish,15; },{},{}
 2759,Decussate_Ring,Decussate Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Demon,15; },{},{}
-2760,Bloody_Ring,Bloody Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_DemiHuman,15; bonus2 bExpAddRace,RC_Player,15; },{},{}
+2760,Bloody_Ring,Bloody Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_DemiHuman,15; },{},{}
 2761,Satanic_Ring,Satanic Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Angel,15; },{},{}
 2762,Dragoon_Ring,Dragon Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Dragon,15; },{},{}
 2763,Skul_Ring_C,Neo Skull Ring,4,0,,0,,0,,0,0xFFFFFFFE,2,2,136,,95,0,0,{ bonus bAtkRate,5; bonus bMatkrate,5; bonus bMaxHPrate,5; bonus2 bSkillHeal,"AL_HEAL",5; skill "MG_SIGHT",1; },{},{}
@@ -1788,7 +1788,7 @@
 4151,Gajomart_Card,Gajomart Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_Plant,-20; bonus2 bExpAddRace,RC_Plant,10; },{},{}
 4152,Galapago_Card,Galapago Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Juice,50; bonus3 bAddMonsterDropItem,531,RC_Insect,300; bonus3 bAddMonsterDropItem,532,RC_Insect,300; bonus3 bAddMonsterDropItem,534,RC_Insect,300; },{},{}
 4153,Crab_Card,Crab Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1266,30; },{},{}
-4154,Rice_Cake_Boy_Card,Dumpling Child Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,529,RC_Player,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,530,RC_Player,100; },{},{}
+4154,Rice_Cake_Boy_Card,Dumpling Child Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; },{},{}
 4155,Goblin_Leader_Card,Goblin Leader Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,RC2_Goblin,30; },{},{}
 4156,Steam_Goblin_Card,Goblin Steamrider Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Formless,7; },{},{}
 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Undead,7; },{},{}
@@ -1879,7 +1879,7 @@
 4242,Apocalips_Card,Apocalipse Card,6,20,,10,,,,,,,,16,,,,,{ bonus bVit,2; if(getrefine()>8) bonus bMaxHP,800; },{},{}
 4243,Antonio_Card,Antonio Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAutoSpellWhenHit,"AL_TELEPORT",1,500; },{},{}
 4244,Alarm_Card,Alarm Card,6,20,,10,,,,,,,,64,,,,,{ bonus3 bAutoSpellWhenHit,"MG_SIGHT",1,200; bonus bMaxHP,300; bonus bVit,1; },{},{}
-4245,Am_Mut_Card,Am Mut Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; bonus2 bExpAddRace,RC_Player,10; },{},{}
+4245,Am_Mut_Card,Am Mut Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; },{},{}
 4246,Assulter_Card,Assaulter Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_DemiHuman,7; bonus2 bCriticalAddRace,RC_Player,7; },{},{}
 4247,Aster_Card,Aster Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1074,30; },{},{}
 4248,Ancient_Mummy_Card,Ancient Mummy Card,6,20,,10,,,,,,,,32,,,,,{ bonus3 bAutoSpellWhenHit,"AL_CRUCIS",5,30; },{},{}
@@ -1890,7 +1890,7 @@
 4253,Alice_Card,Alice Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubClass,Class_Boss,40; bonus2 bSubClass,Class_Normal,-40; },{},{}
 4254,Tirfing_Card,Ogretooth Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_Medium,25; bonus bDef,1; },{},{}
 4255,Orc_Lady_Card,Orc Lady Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,3,30; },{},{}
-4256,Orc_Archer_Card,Orc Archer Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,12034,RC_Player,100; },{},{}
+4256,Orc_Archer_Card,Orc Archer Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; },{},{}
 4257,Wild_Rose_Card,Wild Rose Card,6,20,,10,,,,,,,,64,,,,,{ bonus bAgi,1; if(BaseClass==Job_Thief) bonus bFlee2,5; },{},{}
 4258,Wicked_Nymph_Card,Evil Nymph Card,6,20,,10,,,,,,,,769,,,,,{ bonus bInt,1; bonus bMaxSP,50; },{},{}
 4259,Wooden_Golem_Card,Wooden Golem Card,6,20,,10,,,,,,,,16,,,,,{ bonus bDef,1; bonus bHPrecovRate,30; },{},{}
@@ -1943,7 +1943,7 @@
 4306,Toad_Card,Toad Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee2,1; },{},{}
 4307,Kind_Of_Beetle_Card,Beetle King Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Fish,5; },{},{ heal 0,-5; }
 4308,Tri_Joint_Card,Tri Joint Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Formless,5; },{},{ heal 0,-5; }
-4309,Parasite_Card,Parasite Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,1; bonus2 bSubEle,Ele_Neutral,5; },{},{}
+4309,Parasite_Card,Parasite Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,1; bonus2 bSubRace,RC_Formless,5; },{},{}
 4310,Panzer_Goblin_Card,Panzer Goblin Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Demon,7; },{},{}
 4311,Permeter_Card,Permeter Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bSubEle,Ele_Dark,15; bonus2 bSubEle,Ele_Undead,15; },{},{}
 4312,Fur_Seal_Card,Seal Card,6,20,,10,,,,,,,,2,,,,,{ bonus bFlee,3; bonus bHit,10; if(BaseClass==Job_Acolyte) { bonus2 bCriticalAddRace,RC_Undead,9; bonus2 bCriticalAddRace,RC_Demon,9; } },{},{}
@@ -2648,7 +2648,7 @@
 //5469,Noble_Hat,Musketeer Hat,4,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,30,1,466,{ bonus bStr,2; bonus3 bAutoSpellWhenHit,"BS_ADRENALINE",1,7; },{},{}
 //5470,Eyes_Of_Darkness,Eye Of Darkness,4,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,50,0,467,{ bonus bDex,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
 //5471,Hairband_Of_Reginleif,Hairband Of Reginleif,4,20,,800,,1,,0,0xFFFFFFFF,7,2,512,,50,0,468,{ bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3; },{},{}
-//5472,Red_White_Hat,Red Hat,4,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,469,{ bonus3 bAddMonsterDropItem,550,RC_DemiHuman,3; bonus3 bAddMonsterDropItem,550,RC_Player,3; },{},{}
+//5472,Red_White_Hat,Red Hat,4,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,469,{ bonus3 bAddMonsterDropItem,550,RC_DemiHuman,3; },{},{}
 //5473,Forceps_Hairpin,Nipper Crab Hairpin,4,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,30,1,470,{ bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,100; bonus3 bAddMonsterDropItem,991,RC_Fish,3; },{},{}
 //5474,Notice_Board,AFK Hat,4,20,,700,,2,,0,0xFFFFFFFF,7,2,256,,10,0,471,{},{},{}
 //5475,Cube_Mask,Mask Cube,4,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,0,0,472,{},{},{}

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

@@ -577,7 +577,7 @@
 //-- CH_PALMSTRIKE
 370,0,300,0,0,0,0
 //-- CH_TIGERFIST
-371,0,0,0,0,2000:4000:6000:8000:10000,0
+371,0,0,0,4000:8000:12000:16000:24000,0,0
 //==========================================
 
 

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

@@ -581,7 +581,7 @@
 //****
 // Clown & Gypsy
 394,9,8,1,-1,0,0,10,-9,yes,0,0,0,weapon,0,0x0,	CG_ARROWVULCAN,Vulcan Arrow
-395,0,0,4,0,0x1,3,1,1,yes,0,0x40,0,misc,2,0x0,	CG_MOONLIT,Sheltering Bliss
+395,0,0,4,0,0x1,3,5,1,yes,0,0x40,0,misc,2,0x0,	CG_MOONLIT,Sheltering Bliss
 396,7,6,16,0,0x1,0,1,1,yes,0,0x600,0,none,0,0x40,	CG_MARIONETTE,Marionette Control
 
 //****

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

@@ -701,7 +701,7 @@
 2275,0,0,25:30:35:40:45,0,0,0,99,0,0,mado,0,0,12392,1,12392,1,12393,1,12393,1,12394,1,2807,0,0,0,0,0,0,0,6146,1,0			//NC_REPAIR
 
 2278,0,0,20:22:24:26:28,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//NC_AXEBOOMERANG
-2279,0,0,20:22:24:26:28,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_POWERSWING
+2279,0,0,20:22:24:26:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_POWERSWING
 2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_AXETORNADO
 2281,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,0,612,0,615,0,998,1,999,2,0,0,0,0,0,0,0,0,0,0,0,0,0			//NC_SILVERSNIPER
 2282,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,612,0,615,0,998,2,7054,1,0,0,0,0,0,0,0,0,0,0,0,0,0		//NC_MAGICDECOY
@@ -764,7 +764,7 @@
 2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAMPAGEBLASTER
 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW
 2334,0,0,40:60:80:100:120,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_CURSEDCIRCLE
-2335,0,0,40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
+2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
 2336,0,0,10:15:20:25:30,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_KNUCKLEARROW
 2337,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_WINDMILL
 2338,0,0,120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAISINGDRAGON

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

@@ -830,7 +830,7 @@
 4008,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4008,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4008,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4008,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
+4008,359,1,0,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has 2 extra columns after "MaxLevel" for Job Level 50 requirement
 4008,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4008,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4008,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -1057,7 +1057,7 @@
 4014,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4014,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4014,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4014,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
+4014,359,1,0,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has 2 extra columns after "MaxLevel" for Job Level 50 requirement
 4014,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4014,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4014,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -1302,7 +1302,7 @@
 4020,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4020,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
 4020,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4020,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4020,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4020,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4020,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4020,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -1338,7 +1338,7 @@
 4021,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4021,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
 4021,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4021,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4021,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4021,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4021,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4021,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -2731,7 +2731,7 @@
 4060,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4060,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4060,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4060,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra column removed. Rune Knights dont require job level 50 to use Berserk.
+4060,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra columns removed. Rune Knights dont require job level 50 to use Berserk.
 4060,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4060,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4060,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -3639,7 +3639,7 @@
 4075,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4075,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
 4075,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4075,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4075,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4075,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4075,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4075,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -3701,7 +3701,7 @@
 4076,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4076,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
 4076,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4076,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4076,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4076,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4076,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4076,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -3987,7 +3987,7 @@
 4081,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4081,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4081,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4081,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra column removed. Rune Knights dont require job level 50 to use Berserk.
+4081,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra columns removed. Rune Knights dont require job level 50 to use Berserk.
 4081,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4081,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4081,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#

+ 15 - 3
db/re/item_combo_db.txt

@@ -404,9 +404,21 @@
 4681:4691,{ autobonus "{ active_transform 3241,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
 4682:4694,{ autobonus "{ active_transform 3244,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
 4683:4695,{ autobonus "{ active_transform 3246,6000; bonus bAtk,100; }",30,6000,BF_WEAPON; }
-5040:5442,{ bonus bAspdRate,3; bonus bVariableCastrate,3; }
 4697:27012,{ bonus bNoMadoFuel,1; }
 4699:27012,{ bonus bNoMadoFuel,1; }
+4958:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bDelayrate,-1 - ( .@r > 9 ) ? 1 : 0; } }
+4959:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bLongAtkRate,2 + ( .@r > 9 ) ? 1 : 0; } }
+4960:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bUseSPrate,-2 - ( .@r > 9 ) ? 1 : 0; } }
+4961:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bMatk,10 + ( .@r > 9 ) ? 10 : 0; } }
+4962:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,2 + ( .@r > 9 ) ? 5 : 0; } }
+4963:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,4 + ( .@r > 9 ) ? 2 : 0; bonus bHit,3 + ( .@r > 9 ) ? 1 : 0; } }
+4964:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bMagicAddRace,RC_All,1 + ( .@r > 9 ) ? 1 : 0; } }
+4965:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bVariableCastrate,-1 - ( .@r > 9 ) ? 1 : 0; } }
+4966:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bAddRace,RC_All,1 + ( .@r > 9 ) ? 1 : 0; } }
+4967:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAspdRate,1 + ( .@r > 9 ) ? 1 : 0; } }
+4968:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],2 + ( .@r > 9 ) ? 2 : 0; } } }
+4969:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal2,.@skills$[.@i],2 + ( .@r > 9 ) ? 2 : 0; } /* TODO: Depending on some recovery items HP recovery amount + 1% or if refine >= 9 + 2% */ } }
+5040:5442,{ bonus bAspdRate,3; bonus bVariableCastrate,3; }
 5040:18673,{ bonus bSPrecovRate,3; }
 5041:18538,{ bonus2 bSubRace,RC_Angel,9; }
 5043:18656,{ bonus bFlee,10; bonus2 bAddEff,Eff_Stun,1000; }
@@ -436,7 +448,7 @@
 5920:18542,{ bonus bHealPower,2*getequiprefinerycnt(EQI_HEAD_TOP); }
 5967:28321,{ bonus2 bSubSkill,"HT_BLITZBEAT",200; }
 //9024:18832,{ bonus3 bAutoSpell,"BS_ADRENALINE",2,(GetPetRelationship >= 3)?15:10; }
-13027:15044,{ .@r = max(getequiprefinerycnt(EQI_ARMOR),1); bonus3 bAddMonsterDropItem,929,RC_DemiHuman,70*.@r; bonus3 bAddMonsterDropItem,970,RC_DemiHuman,50*.@r; bonus3 bAddMonsterDropItem,929,RC_Player,70*.@r; bonus3 bAddMonsterDropItem,970,RC_Player,50*.@r; bonus3 bAddMonsterDropItem,929,RC_Brute,70*.@r; bonus3 bAddMonsterDropItem,970,RC_Brute,50*.@r; }
+13027:15044,{ .@r = max(getequiprefinerycnt(EQI_ARMOR),1); bonus3 bAddMonsterDropItem,929,RC_DemiHuman,70*.@r; bonus3 bAddMonsterDropItem,970,RC_DemiHuman,50*.@r; bonus3 bAddMonsterDropItem,929,RC_Brute,70*.@r; bonus3 bAddMonsterDropItem,970,RC_Brute,50*.@r; }
 13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; }
 15041:18659,{ bonus bInt,3; bonus bStr,3; bonus bMdef,10; bonus bDefEle,Ele_Fire; bonus2 bAddEle,Ele_Earth,10; }
 15068:20710,{ bonus bAgi,5; bonus bFlee,10; }
@@ -597,7 +609,7 @@
 24038:24044,{ bonus bVit,1; }
 24039:24045,{ bonus bAgi,1; }
 24046:24051,{ bonus2 bSubEle,Ele_Neutral,1; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) { bonus2 bSubEle,Ele_Neutral,1; } }
-24052:24062,{ bonus2 bExpAddRace,RC_DemiHuman,3; bonus2 bExpAddRace,RC_Player,3; }
+24052:24062,{ bonus2 bExpAddRace,RC_DemiHuman,3; }
 24053:24063,{ bonus2 bAddRace,10,5; bonus2 bMagicAddRace,10,5; }
 24054:24065,{ bonus2 bExpAddRace,RC_Brute,3; }
 24055:24066,{ bonus2 bExpAddRace,RC_Insect,3; }

+ 308 - 22
db/re/item_db.txt

@@ -679,7 +679,7 @@
 1314,F_Tomahawk_C,Tomahawk,5,2,,0,200,,1,0,0x000444A2,63,2,34,4,0,0,7,{ bonus bAtkEle,Ele_Wind; },{},{}
 1315,F_Right_Epsilon_C,Light Epsilon,5,1,,0,229,,1,0,0x000444A2,63,2,34,4,1,0,7,{ bonus bAtkEle,Ele_Holy; bonus bStr,10; },{},{}
 1316,Adventure_Axe,Adventure Axe,5,0,,0,100,,1,0,0x00040420,63,2,2,1,1,0,6,{},{},{}
-1317,Academy_Axe,Academy Axe,5,0,,1600,130,,1,1,0x00040420,63,2,2,1,1,1,6,{},{},{}
+1317,Academy_Axe,Academy Axe,5,0,,1600,130,,1,1,0x00040420,63,2,2,1,30,1,6,{ bonus bUnbreakableWeapon,1; bonus bAspdRate,5-(BaseLevel/10); bonus bMaxHP,200-(40*(BaseLevel/10)); },{},{}
 1318,Dofle_Axe,Deflation Axe,5,50000,,1800,180,,1,2,0x000654E2,63,2,2,4,105,1,6,{ bonus bUnbreakableWeapon,1; },{},{}
 1319,TE_Woe_Axe,TE Woe Axe,5,0,,0,100,,1,0,0x000654E3,63,2,2,3,40,1,6,{ bonus bUnbreakableWeapon,1; bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Freeze,3000; },{},{}
 1321,Dofle_Axe_,Deflation Axe,5,50000,,1800,180,,1,3,0x000654E2,63,2,2,4,105,1,6,{ bonus bUnbreakableWeapon,1; },{},{}
@@ -931,7 +931,7 @@
 1578,Book_Of_Prayer,Book Of Prayer,5,20,,0,140,,1,0,0x00410100,63,2,2,3,0,0,15,{ bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10; },{},{}
 1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,63,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
 1580,Encyclopedia_C,Giant Encyclopedia,5,0,,0,145:100,,1,0,0x00410100,63,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40; },{},{}
-1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,63,2,2,3,1,0,15,{},{},{}
+1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,63,2,2,3,1,0,15,{ bonus bMatkRate,20; bonus bAspdRate,5; },{},{}
 1582,E_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,63,2,2,3,1,0,15,{},{},{}
 1583,P_Dic1,Eden Book I,5,0,,0,135:110,,1,0,0x00410100,63,2,2,3,60,0,15,{},{},{}
 1584,Chilly_Spell_Book,Cold Magic Book,5,56000,,1000,100:160,,1,2,0x00010000,63,2,2,4,100,1,15,{ bonus bAtkEle,Ele_Water; bonus bUnbreakableWeapon,1; bonus bDex,1; .@r = getrefine(); bonus2 bSkillAtk,"MG_COLDBOLT",(.@r*3); bonus2 bSkillAtk,"SO_DIAMONDDUST",(.@r*3); bonus2 bSkillUseSP,"MG_COLDBOLT",-(.@r*5); bonus2 bSkillUseSP,"SO_DIAMONDDUST",-(.@r*5); },{},{}
@@ -1002,7 +1002,7 @@
 1650,P_Staff1,Eden Staff I,5,0,,0,60:125,,1,0,0x00818314,63,2,2,2,26,0,10,{ bonus bInt,2; },{},{}
 1651,P_Staff2,Eden Staff II,5,0,,0,60:150,,1,0,0x00818314,63,2,2,2,40,0,10,{ bonus bInt,3; },{},{}
 1652,Tourist_Staff,Tourist Staff,5,0,,500,35:0,,1,0,0x00818315,63,2,2,1,1,0,10,{ bonus bMatkRate,15; bonus bInt,2; bonus bAgi,1; },{},{}
-1653,Staff_Of_Healing_C,Staff of Healing,5,20,,0,10:100,,1,0,0x00008110,63,2,2,3,1,0,10,{ bonus bAtkEle,Ele_Holy; },{},{}
+1653,Staff_Of_Healing_C,Staff of Healing,5,20,,0,10:100,,1,0,0x00008110,63,2,2,3,1,0,10,{ bonus bAtkEle,Ele_Holy; bonus bHealPower,18; },{},{}
 1654,Mental_Stick,Mental Stick,5,20,,500,40:170,,1,1,0x00818315,63,2,2,3,102,1,10,{ .@r = getrefine(); if(.@r>5) { bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",(.@r-5)*2; bonus bMaxHPrate,-(.@r-5)*2; } bonus2 bSkillVariableCast,"SO_PSYCHIC_WAVE",-3000; bonus2 bSkillUseSP,"SO_PSYCHIC_WAVE",-60; },{},{ itemheal 0,-100; }
 1655,Adventure_Staff,Adventure Staff,5,0,,0,60,,1,0,0x00810204,63,2,2,1,1,0,10,{ bonus bUnbreakableWeapon,1; },{},{}
 1656,Academy_Wand,Academy Wand,5,0,,600,60,,1,1,0x00810204,63,2,2,1,1,1,10,{ bonus bUnbreakableWeapon,1; },{},{}
@@ -1020,12 +1020,12 @@
 1668,Sword_Stick,Sword Stick,5,10,,500,120:150,,,2,0x800200,63,2,2,4,80,1,10,{ bonus bAspdRate,10; },{},{}
 1669,Thanos_Staff,Thanatos Staff,5,10,,1000,100:200,,1,1,0x00018314,56,2,2,4,120,1,10,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bHealPower,15; bonus bMagicHPGainValue,500; bonus bMagicSPGainValue,50; bonus2 bHPLossRate,100,10000; },{},{ heal -1000,0; }
 1670,RWC_Memory_Staff,RWC Memory Staff,5,20,,500,25:30,,1,1,0x00818315,63,2,2,3,1,1,10,{ .@r = getrefine(); bonus bMatk,30*(.@r/3); if(.@r>=6) bonus2 bMagicAddClass,Class_All,(.@r>=9?10:5); if(.@r>=9) bonus4 bAutoSpell,"HW_MAGICPOWER",1,10,0; },{},{}
-1671,Staff_Of_Evil_Slayer,Devil Won Staff,5,10,,800,30:155,,,1,0x00818315,63,2,2,3,100,1,10,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus bMatkRate,10; },{},{}
+1671,Staff_Of_Evil_Slayer,Devil Won Staff,5,10,,800,30:155,,,1,0x00818315,63,2,2,3,100,1,10,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus2 bMagicAddRace,RC_Undead,10; bonus2 bMagicAddRace,RC_Demon,10; .@r = getrefine(); if(.@r>=12) bonus bMatkRate,7; else if(.@r>=9) bonus bMatkRate,5; },{},{}
 1673,Half_BF_Staff4,Half BF Staff4,5,20,,0,70:125,,1,0,0x00818314,63,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,2; bonus bDelayRate,-10; bonus2 bSPLossRate,5,12000; bonus bUnbreakableWeapon,1; },{},{}
 1674,Half_BF_Staff2,Half BF Staff2,5,20,,0,70:125,,1,0,0x00818314,63,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,3; bonus2 bMagicAddRace,RC_DemiHuman,10; bonus2 bMagicAddRace,RC_Player,10; bonus3 bAddEff,Eff_Stun,200,ATF_SKILL; bonus bUnbreakableWeapon,1; },{},{}
 1675,Walking_Stick_,Gentleman's Staff,5,20,,500,40:125,,1,3,0x00818314,63,2,2,4,50,1,10,{ bonus bDex,1; },{},{}
 1676,Baculum_Daemonicum,Baculum Daemonicum,5,20,,1200,60:150,,1,2,0x00818315,63,2,2,4,80,1,10,{ bonus bAtkEle,Ele_Dark; bonus bUnbreakableWeapon,1; bonus bVariableCastrate,-10; if (BaseLevel > 99){ bonus bMatk,30; } if(getrefine() > 8){ bonus2 bResEff,Eff_Blind,3000; bonus bUseSPrate,-10; } },{},{}
-1677,Ru_Blue_Wand,Blue Wand,5,10,,0,50,,1,1,0x00000200,56,2,2,3,100,1,10,{ bonus bStr,5; bonus bInt,5; },{},{}
+1677,Ru_Blue_Wand,Blue Wand,5,10,,0,50:200,,1,1,0x00000200,56,2,2,3,100,1,10,{ bonus bDex,5; bonus bInt,5; },{},{}
 1678,Ru_Gold_Wand,Ru Gold Wand,5,0,,0,50,,1,2,0x00000200,56,2,2,3,120,1,10,{ bonus bDex,8; bonus bInt,8; },{},{}
 1679,Rafini_Staff_S,Laphine Staff,5,20,,500,30:180,,1,2,0x00818315,63,2,2,3,100,1,10,{ bonus bFixedCastRate,-getrefine(); },{},{}
 1680,Crimson_One-Handed_Staff,Crimson One-Handed Staff,5,10,,600,60:70,,1,2,0x00818315,63,2,2,3,70,1,10,{ .@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1; },{},{}
@@ -1165,6 +1165,7 @@
 1832,Velum_Claw,Vellum Claw,5,20,,650,160,,1,0,0x00008100,63,2,2,4,95,1,12,{ bonus2 bAddRace,RC_Player,100; .@r = getrefine(); if(.@r>7) { bonus2 bAddRace,RC_Player,20; } if(.@r>9) { bonus2 bVariableCastrate,"MO_EXTREMITYFIST",-100; bonus2 bFixedCastrate,"MO_EXTREMITYFIST",-100; bonus4 bAutoSpellOnSkill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,10000; bonus2 bHPLossRate,500,3000; } },{},{}
 1833,Claw_Of_Flash,Claw of Flash,5,60000,,400,140,,1,2,0x00008100,63,2,2,4,105,1,12,{ bonus bAspd,1; bonus bAspdRate,getrefine(); bonus2 bAddSize,Size_Medium,getrefine(); },{},{}
 1834,TE_Woe_Fist,TE Woe Fist,5,0,,0,150,,1,0,0x00008100,63,2,2,3,40,1,12,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Freeze,3000; },{},{}
+1835,Spartacus,Spartacus,5,0,,600,100,,1,2,0x00008100,63,2,2,4,50,1,12,{ bonus bUnbreakableWeapon,1; .@r = getrefine(); bonus2 bAddClass,Class_All,.@r; if(.@r>9) { bonus bNoSizeFix,0; } },{},{}
 1836,Thanos_Knuckle,Thanatos Knuckle,5,10,,600,160:100,,1,1,0x00008000,56,2,2,4,120,1,12,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bHPDrainRate,50,5; bonus2 bSPDrainRate,10,5; bonus2 bHPLossRate,100,10000; },{},{ heal -1000,0; }
 1837,Iron_nail,Iron Nail,5,10,,1500,100,,,1,0x00008100,63,2,2,3,50,1,12,{ bonus bAspdRate,-5; bonus bAspdRate,((getrefine()+1)/2); },{},{}
 1838,Half_BF_Knuckle1,Half BF Knuckle1,5,20,,0,30,,1,0,0x00008100,63,2,2,3,80,1,12,{ bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,1; },{},{}
@@ -1963,7 +1964,7 @@
 2757,Insecticide_Ring,Insecticide Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_Insect,15; },{},{}
 2758,Fisher_Ring,Fischer Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_Fish,15; },{},{}
 2759,Decussate_Ring,Decussate Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_Demon,15; },{},{}
-2760,Bloody_Ring,Bloody Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_DemiHuman,15; bonus2 bExpAddRace,RC_Player,15; },{},{}
+2760,Bloody_Ring,Bloody Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_DemiHuman,15; },{},{}
 2761,Satanic_Ring,Satanic Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_Angel,15; },{},{}
 2762,Dragoon_Ring,Dragon Ring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bExpAddRace,RC_Dragon,15; },{},{}
 2763,Skul_Ring_C,Neo Skull Ring,4,0,,0,,0,,0,0xFFFFFFFE,18,2,136,,95,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkrate,5; bonus bMaxHPrate,5; skill "MG_SIGHT",1; },{},{}
@@ -2336,7 +2337,7 @@
 4151,Gajomart_Card,Gajomart Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_Plant,-20; bonus2 bExpAddRace,RC_Plant,10; },{},{}
 4152,Galapago_Card,Galapago Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Juice,50; bonus3 bAddMonsterDropItem,531,RC_Insect,300; bonus3 bAddMonsterDropItem,532,RC_Insect,300; bonus3 bAddMonsterDropItem,534,RC_Insect,300; },{},{}
 4153,Crab_Card,Crab Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1266,30; },{},{}
-4154,Rice_Cake_Boy_Card,Dumpling Child Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,529,RC_Player,300; bonus3 bAddMonsterDropItem,530,RC_Player,100; },{},{}
+4154,Rice_Cake_Boy_Card,Dumpling Child Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; },{},{}
 4155,Goblin_Leader_Card,Goblin Leader Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,RC2_Goblin,30; },{},{}
 4156,Steam_Goblin_Card,Goblin Steamrider Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Formless,7; },{},{}
 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Undead,7; },{},{}
@@ -2427,7 +2428,7 @@
 4242,Apocalips_Card,Apocalipse Card,6,20,,10,,,,,,,,16,,,,,{ bonus bVit,2; if(getrefine()>8) bonus bMaxHP,800; },{},{}
 4243,Antonio_Card,Antonio Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAutoSpellWhenHit,"AL_TELEPORT",1,500; },{},{}
 4244,Alarm_Card,Alarm Card,6,20,,10,,,,,,,,64,,,,,{ bonus3 bAutoSpellWhenHit,"MG_SIGHT",1,200; bonus bMaxHP,300; bonus bVit,1; },{},{}
-4245,Am_Mut_Card,Am Mut Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; bonus2 bExpAddRace,RC_Player,10; },{},{}
+4245,Am_Mut_Card,Am Mut Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; },{},{}
 4246,Assulter_Card,Assaulter Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_DemiHuman,7; bonus2 bCriticalAddRace,RC_Player,7; },{},{}
 4247,Aster_Card,Aster Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1074,30; },{},{}
 4248,Ancient_Mummy_Card,Ancient Mummy Card,6,20,,10,,,,,,,,32,,,,,{ bonus3 bAutoSpellWhenHit,"AL_CRUCIS",5,30; },{},{}
@@ -2438,7 +2439,7 @@
 4253,Alice_Card,Alice Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubClass,Class_Boss,40; bonus2 bSubClass,Class_Normal,-40; },{},{}
 4254,Tirfing_Card,Ogretooth Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_Medium,25; bonus bDef,1; },{},{}
 4255,Orc_Lady_Card,Orc Lady Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,RC2_Orc,30; },{},{}
-4256,Orc_Archer_Card,Orc Archer Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,12034,RC_Player,100; },{},{}
+4256,Orc_Archer_Card,Orc Archer Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; },{},{}
 4257,Wild_Rose_Card,Wild Rose Card,6,20,,10,,,,,,,,64,,,,,{ bonus bAgi,1; if(BaseClass==Job_Thief) bonus bFlee2,5; },{},{}
 4258,Wicked_Nymph_Card,Evil Nymph Card,6,20,,10,,,,,,,,769,,,,,{ bonus bInt,1; bonus bMaxSP,50; },{},{}
 4259,Wooden_Golem_Card,Wooden Golem Card,6,20,,10,,,,,,,,16,,,,,{ bonus bDef,1; bonus bHPrecovRate,30; },{},{}
@@ -2491,7 +2492,7 @@
 4306,Toad_Card,Toad Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee2,1; },{},{}
 4307,Kind_Of_Beetle_Card,Beetle King Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Fish,5; },{},{ heal 0,-5; }
 4308,Tri_Joint_Card,Tri Joint Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Formless,5; },{},{ heal 0,-5; }
-4309,Parasite_Card,Parasite Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,1; bonus2 bSubEle,Ele_Neutral,5; },{},{}
+4309,Parasite_Card,Parasite Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,1; bonus2 bSubRace,RC_Formless,5; },{},{}
 4310,Panzer_Goblin_Card,Panzer Goblin Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Demon,7; },{},{}
 4311,Permeter_Card,Permeter Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bSubEle,Ele_Dark,15; bonus2 bSubEle,Ele_Undead,15; },{},{}
 4312,Fur_Seal_Card,Seal Card,6,20,,10,,,,,,,,2,,,,,{ bonus bFlee,3; bonus bHit,10; if(BaseClass==Job_Acolyte) { bonus2 bCriticalAddRace,RC_Undead,9; bonus2 bCriticalAddRace,RC_Demon,9; } },{},{}
@@ -2761,7 +2762,7 @@
 4578,Pyuriel_Card,Angry Student Pyuriel Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,30; bonus2 bSubRace,RC_All,-10; bonus2 bSubRace,RC_Player,10; },{},{}
 4579,Lora_Card,Warrior Lola Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r; },{},{}
 4580,Kades_Card,Dark Guardian Kades Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-100; },{},{}
-4581,Rudo_Card,Rudo Card,6,20,,10,,,,,,,,64,,,,,{ autobonus "{ sc_start SC_SPEEDUP1,3000,50; bonus bAgi,44; heal 0,-40; }",3,3000,0; },{},{}
+4581,Rudo_Card,Rudo Card,6,20,,10,,,,,,,,64,,,,,{ autobonus "{ bonus bAgi,44; heal 0,-40; }",500,3000,0,"{ sc_start SC_SPEEDUP1,3000,50; }"; },{},{}
 4582,Bungisngis_Card,Bungisngis Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,(getrefine()/2); },{},{}
 4583,Engkanto_Card,Engkanto Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bAddEle,Ele_Poison,30; bonus2 bMagicAddEle,Ele_Poison,30; bonus2 bIgnoreDefRaceRate,RC_Plant,30; },{},{}
 4584,Manananggal_Card,Manananggal Card,6,20,,10,,,,,,,,2,,,,,{ bonus bSPDrainValue,1; bonus bMaxSPrate,-1; },{},{}
@@ -2855,7 +2856,7 @@
 4686,V_B_Katrinn_Card,True Kathryne Keyron Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"WL_CRIMSONROCK",20+.@b; },{},{}
 4687,V_B_Shecil_Card,True Cecil Damon Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"RA_CLUSTERBOMB",20+.@b; },{},{}
 4688,V_B_Harword_Card,True Howard Alt-Eisen Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"NC_AXETORNADO",20+.@b; },{},{}
-4689,V_B_Seyren_Card,True Seyren Windsor Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"LK_IGNITIONBREAK",20+.@b; },{},{}
+4689,V_B_Seyren_Card,True Seyren Windsor Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"RK_IGNITIONBREAK",20+.@b; },{},{}
 4690,V_B_Randel_Card,True Randel Lawrence Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"LG_EARTHDRIVE",20+.@b; },{},{}
 4691,V_B_Flamel_Card,True Flamel Emure Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"GN_CART_TORNADO",20+.@b; },{},{}
 4692,V_B_Celia_Card,True Celia Alde Card,6,20,,10,,,,,,,,2,,,,,{ if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20+.@b; },{},{}
@@ -3118,6 +3119,49 @@
 4948,Skill_Delay1,After Skill Delay Lv1,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-2; },{},{}
 4949,Skill_Delay2,After Skill Delay Lv2,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-4; },{},{}
 4950,Skill_Delay3,After Skill Delay Lv3,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-6; },{},{}
+4951,Darkness_Drop,Darkness Drop,6,0,,,,,,,,,,,,,,,{ bonus2 bAddEle,Ele_Dark,2; bonus2 bMagicAtkEle,Ele_Dark,2; bonus2 bSubEle,Ele_Dark,1; },{},{}
+4952,Fire_Drop,Fire Drop,6,0,,,,,,,,,,,,,,,{ bonus2 bAddEle,Ele_Fire,2; bonus2 bMagicAtkEle,Ele_Fire,2; bonus2 bSubEle,Ele_Fire,1; },{},{}
+4953,Water_Drop,Water Drop,6,0,,,,,,,,,,,,,,,{ bonus2 bAddEle,Ele_Water,2; bonus2 bMagicAtkEle,Ele_Water,2; bonus2 bSubEle,Ele_Water,1; },{},{}
+4954,Earth_Drop,Earth Drop,6,0,,,,,,,,,,,,,,,{ bonus2 bAddEle,Ele_Earth,2; bonus2 bMagicAtkEle,Ele_Earth,2; bonus2 bSubEle,Ele_Earth,1; },{},{}
+4955,Holy_Drop,Holy Drop,6,0,,,,,,,,,,,,,,,{ bonus2 bAddEle,Ele_Holy,2; bonus2 bMagicAtkEle,Ele_Holy,2; bonus2 bSubEle,Ele_Holy,1; },{},{}
+4956,Recovery_Drop,Recovery Drop,6,0,,,,,,,,,,,,,,,{ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],2; bonus2 bSkillHeal2,.@skills$[.@i],2; } /* TODO: Depending on some recovery items HP recovery amount + 2% */ },{},{}
+4957,Famitsus_Power,Famitsu's Power,6,0,,,,,,,,,,,,,,,{ bonus bMaxHP,832; },{},{}
+4958,Gemini,Gemini,6,0,,,,,,,,,,,,,,,{ bonus bDelayrate,-1; },{},{}
+4959,Sagittarius,Sagittarius,6,0,,,,,,,,,,,,,,,{ bonus bLongAtkRate,1; },{},{}
+4960,Aquarius,Aquarius,6,0,,,,,,,,,,,,,,,{ bonus bUseSPrate,-2; },{},{}
+4961,Aries,Aries,6,0,,,,,,,,,,,,,,,{ bonus bMatk,10; },{},{}
+4962,Cancer,Cancer,6,0,,,,,,,,,,,,,,,{ bonus bAtk,3; },{},{}
+4963,Taurus,Taurus,6,0,,,,,,,,,,,,,,,{ bonus bAtk,4; bonus bHit,1; },{},{}
+4964,Capricorn,Capricorn,6,0,,,,,,,,,,,,,,,{ bonus2 bMagicAddRace,RC_All,3; },{},{}
+4965,Pisces,Pisces,6,0,,,,,,,,,,,,,,,{ bonus bVariableCastrate,-2; },{},{}
+4966,Scorpio,Scorpio,6,0,,,,,,,,,,,,,,,{ bonus2 bAddRace,RC_All,1; },{},{}
+4967,Leo,Leo,6,0,,,,,,,,,,,,,,,{ bonus bAspdRate,3; },{},{}
+4968,Virgo,Virgo,6,0,,,,,,,,,,,,,,,{ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],1; } },{},{}
+4969,Libra,Libra,6,0,,,,,,,,,,,,,,,{ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal2,.@skills$[.@i],1; } /* TODO: Depending on some recovery items HP recovery amount + 1% */ },{},{}
+4970,Fire_Property_Reactor,Fire Property Reactor,6,0,,,,,,,,,,,,,,,{ bonus bDefEle,Ele_Fire; },{},{}
+4971,Water_Property_Reactor,Water Property Reactor,6,0,,,,,,,,,,,,,,,{ bonus bDefEle,Ele_Water; },{},{}
+4972,Earth_Property_Reactor,Earth Property Reactor,6,0,,,,,,,,,,,,,,,{ bonus bDefEle,Ele_Earth; },{},{}
+4973,Wind_Property_Reactor,Wind Property Reactor,6,0,,,,,,,,,,,,,,,{ bonus bDefEle,Ele_Wind; },{},{}
+4974,Fire_Resistance_Reactor,Fire Resistance Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Fire,25; bonus2 bSubEle,Ele_Water,-25; },{},{}
+4975,Water_Resistance_Reactor,Water Resistance Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Water,25; bonus2 bSubEle,Ele_Wind,-25; },{},{}
+4976,Earth_Resistance_Reactor,Earth Resistance Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Earth,25; bonus2 bSubEle,Ele_Fire,-25; },{},{}
+4977,Wind_Resistance_Reactor,Wind Resistance Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Wind,25; bonus2 bSubEle,Ele_Earth,-25; },{},{}
+4978,Recovery_Reactor_101,Recovery Reactor 101,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) bonus2 bHPRegenRate,100,5000; else bonus2 bHPRegenRate,50,5000; },{},{}
+4979,Recovery_Reactor_102,Recovery Reactor 102,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) bonus2 bSPRegenRate,5,5000; else bonus2 bHPRegenRate,3,5000; },{},{}
+4980,Recovery_Reactor_201,Recovery Reactor 201,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) bonus2 bRegenPercentHP,100,5000; else bonus2 bRegenPercentHP,50,5000; },{},{}
+4981,Recovery_Reactor_202,Recovery Reactor 202,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) bonus2 bRegenPercentSP,100,5000; else bonus2 bRegenPercentSP,50,5000; },{},{}
+4982,STR_Supplement_Reactor,STR Supplement Reactor,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) { .@bonus = 10; } bonus bBaseAtk,.@bonus + 5*(readparam(bStr)/10); },{},{}
+4983,INT_Supplement_Reactor,INT Supplement Reactor,6,0,,,,,,,,,,,,,,,{ if (getrefine()>=7) { .@bonus = 10; } bonus bMatk,.@bonus + 5*(readparam(bInt)/10); },{},{}
+4984,DEF_Supplement_Reactor,DEF SupplementReactor,6,0,,,,,,,,,,,,,,,{ bonus bDef,100; },{},{}
+4985,PD_Supplement_Reactor,PD Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bFlee2,3; },{},{}
+4986,Attack_Supplement_Reactor,Attack Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bBaseAtk,20; },{},{}
+4987,Magic_Supplement_Reactor,Magic Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bMatk,20; },{},{}
+4988,HP_Supplement_Reactor,HP Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bMaxHPrate,5; },{},{}
+4989,SP_Supplement_Reactor,SP Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bMaxSPrate,3; },{},{}
+4990,Frozen_Supplement_Reactor,Frozen Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bResEff,Eff_Freeze,10000; },{},{}
+4991,ASPD_Supplement_Reactor,ASPD Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus bAspd,1; },{},{}
+4992,HPAbsorb1_Supplement_Reactor,HP Absorb Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bHPDrainRate,10,1; },{},{}
+4993,SPAbsorb1_Supplement_Reactor,SP Absorb Supplement Reactor,6,0,,,,,,,,,,,,,,,{ bonus2 bSPDrainRate,10,1; },{},{}
 4994,Rune_of_Strength_Lv_1,Rune of Strength Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,5; } if (.@r>=10) { bonus bAtkRate,5; } },{},{}
 4995,Rune_of_Strength_Lv_2,Rune of Strength Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,6; } if (.@r>=11) { bonus bStr,1; bonus bAtkRate,7; } },{},{}
 4996,Rune_of_Strength_Lv_3,Rune of Strength_Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bStr,7; } if (.@r>=12) { bonus bStr,1; bonus bAtkRate,8; } if (.@r>=13) { bonus bStr,1; bonus bAtkRate,2; } },{},{}
@@ -3328,7 +3372,7 @@
 5199,Baseball_Cap_I,Baseball Cap,4,0,,200,,3,,0,0xFFFFFFFF,63,2,256,,0,1,216,{},{},{}
 5200,Coppola,Coppola,4,10,,300,,0,,0,0xFFFFFFFF,63,2,256,,0,1,252,{},{},{}
 5201,Party_Hat_B,Party Hat,4,20,,300,,4,,0,0xFFFFFFFF,63,2,256,,0,1,144,{ bonus bAllStats,3; },{},{}
-5202,Pumpkin_Hat_,Fantastic Pumpkin-Head,4,20,,200,,3,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500; bonus3 bAddMonsterDropItem,529,RC_Player,1500; },{},{}
+5202,Pumpkin_Hat_,Fantastic Pumpkin-Head,4,20,,200,,3,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500; },{},{}
 5203,Tongue_Mask,Smiling Mask,4,20,,200,,2,,0,0xFFFFFFFF,63,2,513,,0,0,253,{ bonus bSpeedRate,25; },{},{}
 5204,Event_Pierrot_Nose,Rudolph's Nose,4,20,,100,,0,,0,0xFFFFFFFF,63,2,1,,0,0,49,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30; },{},{}
 5205,Wreath,Emperor's Laurel Crown,4,20,,1000,,3,,0,0xFFFFFFFF,63,2,768,,0,1,261,{ bonus bAllStats,1; bonus bMdef,3; },{},{}
@@ -3598,7 +3642,7 @@
 5469,Noble_Hat,Musketeer Hat,4,20,,300,,4,,1,0xFFFFFFFF,63,2,256,,60,1,466,{ bonus bDex,3; bonus bFlee,3; .@r = getrefine(); if(.@r>=7){ bonus bFlee,3; bonus bLongAtkRate,3; } if(.@r>=9){ bonus bFlee,4; bonus bLongAtkRate,2; } },{},{}
 5470,Eyes_Of_Darkness,Eye Of Darkness,4,20,,100,,1,,0,0xFFFFFFFF,63,2,512,,50,0,467,{ bonus bDex,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
 5471,Hairband_Of_Reginleif,Hairband Of Reginleif,4,20,,800,,2,,0,0xFFFFFFFF,63,2,512,,50,0,468,{ bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3; },{},{}
-5472,Red_White_Hat,Red Hat,4,20,,100,,0,,0,0xFFFFFFFF,63,2,256,,0,1,469,{ bonus3 bAddMonsterDropItem,554,RC_DemiHuman,200; bonus3 bAddMonsterDropItem,554,RC_Player,200; },{},{}
+5472,Red_White_Hat,Red Hat,4,20,,100,,0,,0,0xFFFFFFFF,63,2,256,,0,1,469,{ bonus3 bAddMonsterDropItem,554,RC_DemiHuman,200; },{},{}
 5473,Forceps_Hairpin,Nipper Crab Hairpin,4,20,,500,,8,,0,0xFFFFFFFF,63,2,256,,30,1,470,{ bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,30; bonus3 bAddMonsterDropItem,991,RC_Fish,100; },{},{}
 5474,Notice_Board,AFK Hat,4,20,,700,,2,,0,0xFFFFFFFF,63,2,256,,10,0,471,{},{},{}
 5475,Cube_Mask,Mask Cube,4,20,,100,,1,,0,0xFFFFFFFF,63,2,513,,0,0,472,{ bonus bAllStats,1; },{},{}
@@ -3896,7 +3940,7 @@
 5767,Samurai_Mask,Samurai Mask,4,20,,300,,1,,0,0xFFFFFFFF,63,2,1,,50,0,644,{ bonus2 bAddClass,Class_All,1; },{},{}
 5768,Sakura_Coronet,Sakura Coronet,4,20,,800,,1,,1,0xFFFFFFFF,63,2,256,,1,1,645,{ bonus bMdef,3; bonus bMaxSP,25; },{},{}
 5769,Gold_Angel_Sculpture,Gold Angel Sculpture,4,100,,0,,2,,0,0xFFFFFFFF,63,2,256,,70,0,646,{ skill "RG_GRAFFITI",1; },{},{}
-5770,Splash_Hat,Splash Hat,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,649,{ autobonus "{ sc_start SC_WINDWEAPON,180000,1; }",3,180000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
+5770,Splash_Hat,Splash Hat,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,649,{ autobonus "{}",3,180000,BF_WEAPON,"{ sc_start SC_WINDWEAPON,180000,1; specialeffect2 EF_ENHANCE; }"; },{},{}
 5771,Family_Hat,Family Hat,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,650,{ bonus bDex,1; bonus bMdef,1; bonus bMaxHPrate,2; bonus bMaxSPrate,2; skill "PR_MAGNIFICAT",1; },{},{}
 5772,Red_Navy_Hat,Red Navy Hat,4,3000,,500,,1,,0,0xFFFFFFFF,63,2,256,,95,1,651,{ bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; },{},{}
 5773,Navy_Beret,Navy Beret,4,3000,,500,,1,,0,0xFFFFFFFF,63,2,256,,95,1,652,{ bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10; },{},{}
@@ -8492,10 +8536,10 @@
 14612,M_Mdef_Potion,M Mdef Potion,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_SPELLBREAKER; sc_start SC_MDEF_RATE,120000,3; },{},{}
 14613,RWC_Scroll_2012,RWC Scroll 2012,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_RWC_Scroll_2012); },{},{}
 14614,Ex_Def_Potion,Ex Def Potion,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_GUARD; sc_start SC_DEF_RATE,1800000,3; sc_start SC_MDEF_RATE,1800000,3; },{},{}
-14616,STR_Biscuit_Stick,Bar Cookie Of Strength,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_STRFOOD,1800000,15; sc_start SC_INCATKRATE,600000,rand(11,111); },{},{}
-14617,VIT_Biscuit_Stick,Bar Cookie Of Vitality,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_VITFOOD,1800000,15; sc_start SC_INCDEFRATE,600000,rand(11,33); },{},{}
+14616,STR_Biscuit_Stick,Bar Cookie Of Strength,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_STRFOOD,1800000,15; sc_start SC_ATKPOTION,600000,rand(11,111); },{},{}
+14617,VIT_Biscuit_Stick,Bar Cookie Of Vitality,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_VITFOOD,1800000,15; bonus_script "{ bonus bHPRecovRate,rand(11,33); }",1800,1; },{},{}
 14618,AGI_Biscuit_Stick,Bar Cookie Of Agility,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_AGIFOOD,1800000,15; sc_start SC_FLEEFOOD,600000,rand(11,33); },{},{}
-14619,INT_Biscuit_Stick,Bar Cookie Of Intelligence,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INTFOOD,1800000,15; sc_start SC_INCMATKRATE,600000,rand(11,111); },{},{}
+14619,INT_Biscuit_Stick,Bar Cookie Of Intelligence,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INTFOOD,1800000,15; sc_start SC_MATKPOTION,600000,rand(11,111); },{},{}
 14620,DEX_Biscuit_Stick,Bar Cookie Of Dexterity,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_DEXFOOD,1800000,15; sc_start SC_HITFOOD,600000,rand(11,33); },{},{}
 14621,LUK_Biscuit_Stick,Bar Cookie Of Lucky,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_LUKFOOD,1800000,15; sc_start SC_CRIFOOD,600000,rand(11,33); },{},{}
 14623,Golden_Treasure_Box_,Golden Treasure Box,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ /*getitem callfunc("F_Rand",Devilring card, Angeling card, 11 weapons smelting ticket, armor smelting 11 ticket , horns of the buffalo, ring of recovery, pink bunny costume hair band)*/ },{},{}
@@ -9832,7 +9876,7 @@
 18977,Old_Midas_Whisper,Old Midas Whisper,4,10,,100,,10,,1,0x00040000,56,2,256,,170,1,629,{ bonus bAllStats,1; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bLongAtkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"GN_CARTCANNON",15*.@r/2; },{},{}
 18978,Old_Magic_Stone_Hat,Old Magic Stone Hat,4,10,,100,,10,,1,0x00000200,56,2,256,,170,1,630,{ bonus bAllStats,1; .@r = getrefine(); bonus bMdef,5; bonus bMatkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"WL_SOULEXPANSION",5*.@r/2; bonus2 bSkillCooldown,"WL_CRIMSONROCK",-1000-(.@r*100); },{},{}
 18979,Old_Blazing_Soul,Old Blazing Soul,4,10,,100,,10,,1,0x00008000,56,2,256,,170,1,631,{ bonus bAllStats,1; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bCritical,2*.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"SR_RAMPAGEBLASTER",15*.@r/2; bonus2 bSkillAtk,"SR_RIDEINLIGHTNING",20*.@r/2; },{},{}
-18980,Old_Wind_Whisper,Old Wind Whisper,4,10,,100,,10,,1,0x10000,56,2,256,,170,1,633,{ bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus2 bSkillAtk,"SO_POISON_BUSTER",15*.@r/2; bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20*.@r/2; },{},{}
+18980,Old_Wind_Whisper,Old Wind Whisper,4,10,,100,,10,,1,0x10000,56,2,256,,170,1,633,{ bonus bAllStats,1; .@r = getrefine(); bonus bAtk2,4*.@r; bonus bMatkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus2 bSkillAtk,"SO_POISON_BUSTER",15*(.@r/2); bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20*(.@r/2); },{},{}
 18981,Old_Dying_Swan,Old Dying Swan,4,10,,100,,10,,1,0x00080000,56,0,256,,170,1,635,{ bonus bAllStats,1; .@r = getrefine(); bonus bLongAtkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"CG_ARROWVULCAN",20*.@r/2; bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",5*.@r/2; },{},{}
 18982,Old_Circlet_Of_Bone,Old Circlet Of Bones,4,10,,100,,10,,1,0x00001000,56,2,256,,170,1,1141,{ bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bCriticalRate,.@r; bonus bAspdRate,1; bonus2 bSkillAtk,"GC_CROSSIMPACT",10*.@r/2; bonus2 bSkillAtk,"GC_CROSSRIPPERSLASHER",20*.@r/2; },{},{}
 18983,Old_Protect_Of_Crown,Old Protect Of Crown,4,10,,100,,10,,1,0x00004000,56,2,256,,170,1,1140,{ bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus bBaseAtk,4*.@r; bonus bAspd,.@r/5; bonus2 bSkillAtk,"LG_CANNONSPEAR",20*.@r/2; bonus2 bSkillAtk,"LG_OVERBRAND",5*.@r/2; },{},{}
@@ -9853,6 +9897,7 @@
 19039,12_Anniversary_Elf_Ears,12 Anniversary Elf Ears,4,10,,120,,0,,0,0xFFFFFFFF,63,2,512,,0,1,875,{ bonus2 bSubRace,RC_All,4; bonus2 bSubRace,RC_Player,-4; },{},{}
 19047,Angeling_KnitCap,Angeling KnitCap,4,0,,300,,5,,1,0xFFFFFFFF,63,2,256,,20,1,953,{ bonus2 bSPGainRace,RC_Angel,5; bonus bHPGainValue,100; .@r = getrefine(); if (.@r >= 5) { bonus2 bSubRace,RC_Angel,5+((.@r >= 7) ? 5 : 0); } },{},{}
 19048,Elemental_Clothe,Elemental Clothes,4,0,,500,,45,,1,0xFFFFFFFF,63,2,16,,80,1,,{ .@r = getrefine(); bonus bLongAtkRate,2+((.@r >= 9) ? 3 : 0)+((.@r >= 7) ? 2 : 0); if (.@r >= 7) bonus bUnbreakableArmor,1; },{},{}
+19050,Loki_Nidhogg_Hat,Loki & Nidhoggur's Hat,4,0,,100,,0,,1,0xFFFFFFFF,63,2,256,,1,1,1304,{},{},{}
 19051,Warrior_Moon_Cat,Warrior Moon Cat,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ /*Enables use of Level 1 Monster's Cry*/ bonus bAllStats,3; bonus2 bHPDrainRate,40,5; bonus2 bSPDrainRate,10,2; },{},{}
 19052,Sigruns_Wing,Rental Sigrun's Wing,4,10,,0,,2,,0,0xFFFFFFFF,63,2,512,,1,0,568,{ if (Class == Job_Swordman || Class == Job_Thief || Class == Job_Merchant || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Star_Gladiator2) bonus bAspd,1; else if (Class == Job_Mage || Class == Job_Acolyte || Class == Job_Ninja || Class == Job_Soul_Linker) { bonus bMatk,5; bonus bHealPower,2; } else if (Class == Job_Archer || Class == Job_Gunslinger) bonus bLongAtkRate,2; else if (Class == Job_Novice || Class == Job_SuperNovice) { bonus bMaxHP,120; bonus bMaxSP,60; } },{},{}
 19053,Fighter_Moon_Cat,Fighter Moon Cat,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,1,1,1308,{ /*Enables use of Level 1 Monster's Cry*/ .@r = getrefine(); bonus bAllStats,3; bonus2 bAddEff,Eff_Stun,500+(.@r*100); },{},{}
@@ -10669,7 +10714,7 @@
 20375,C_Ignis_Cap,Costume Ignis Cap,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,803,{},{},{}
 20376,C_Memory_of_Lovers,Costume Memory of Lovers,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,1072,{},{},{}
 20377,C_Flight_Cap,Costume Flight Cap,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,820,{},{},{}
-20378,C_Sky_Met,Costume Sky Met,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,868,{},{},{}
+20378,C_Skymet,Costume Sky Met,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,868,{},{},{}
 20379,C_Pocketwatch_Hair_Ornament,Costume Pocketwatch Hair Ornament,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1404,{},{},{}
 20380,C_Mechanical_Feather_Hairband,Costume Mechanical Feather Hairband,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1405,{},{},{}
 20381,C_Steampunk_Hat,Costume Steampunk Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1406,{},{},{}
@@ -10761,6 +10806,10 @@
 20508,C_Poster_Girl_Hat,Costume Poster Girl Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1446,{},{},{}
 20509,C_Wings_of_Uriel,Costume Wings of Uriel,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,17,{},{},{}
 20510,C_SwordWing,Costume Sword Wing,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,19,{},{},{}
+20511,C_Blue_Fairy_Wing,Blue Wings of Fairy,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,21,{},{},{}
+20512,C_Bag_of_Adventurer_j,Costume Adventurer's Backpack,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,2,{},{},{}
+20514,C_Thanatos_Sword,Costume Thanatos Sword,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,23,{},{},{}
+20516,C_Wings_of_Michael,Costume Wings of Michael,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,24,{},{},{}
 20600,Fantastic_Aura,Fantastic Aura,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,0,{ /*TODO: View ID*/ bonus bUnbreakableHelm,1; },{},{}
 20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableGarment,1; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); } },{},{}
 20702,TE_Woe_Muffler,TE Woe Muffler,4,0,,0,,5,,0,0xFFFFFFFF,63,2,4,,40,1,,{ bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25; },{},{}
@@ -11074,6 +11123,7 @@
 22812,Sealed_Dracula_Scroll,Sealed Dracula Scroll,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getitem callfunc("F_Rand",6228,6232,22813,19937,17314, 6635),1; },{},{}
 22813,Bearer's_Shadow_Box,Bearer's Shadow Box,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getitem callfunc("F_Rand",24180,24181,24182,24183,24184,24185),1; },{},{}
 22814,Cat_Hand_Ticket,Cat Hand Ticket,3,10,,0,,,,,,,,,,,,,{},{},{}
+22822,Summer_Vacation_Costumes,Summer Vacation Costumes,2,,,100,,,,0,0xFFFFFFFF,63,2,,,1,,,{ sc_start SC_DRESSUP,600000,1; },{},{}
 22823,Sealed_Sniper_Scroll,Sealed Sniper Scroll,2,10,,10,,,,,,,,,,,,,{ /*getitem callfunc("F_Rand",4491,6228,6232,24196, Hasty Shadow Armor, 19882, 17474, 6635),1;*/ },{},{}
 22826,Enchant_Stone_Box4,Costume Enchantment Stone Box 4,2,10,,10,,,,,,,,,,,,,{},{},{}
 22827,Shadow_Cube,Shadow Cube,2,10,,10,,,,,,,,,,,,,{/*No Info*/},{},{}
@@ -11458,7 +11508,7 @@
 27166,Faceworm_Egg_Card,Faceworm Egg Card,6,20,,10,,,,,,,,64,,,,,{ .@r = getrefine(); .@sub = 2+(.@r >= 9 ? 3 : .@r >= 7 ? 1 : 0); bonus bNearAtkDef,.@sub; bonus bMagicAtkDef,.@sub; },{},{}
 27167,Faceworm_Larva_Card,Faceworm Larva Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Neutral,15; bonus2 bMagicAddSize,Size_All,getrefine()*3; },{},{}
 27168,Irene_High_Elder_Card,Irene High Elder Card,6,20,,10,,,,,,,,4,,,,,{ bonus bHit,10 + 5 * (getrefine()/3); },{},{}
-27169,Payon_Soldier_Card,Payon Soldier Card,6,20,,10,,,,,,,,2,,,,,{ .@atk = 5; .@r = getrefine(); if(getiteminfo(getequipid(EQI_HAND_R),11) == W_SPEAR && .@r >= 10){ .@atk += 20; if(.@r >= 14){ .@atk += 20; } } } bonus bAtk,.@atk; bonus bMatk,.@atk; },{},{}
+27169,Payon_Soldier_Card,Payon Soldier Card,6,20,,10,,,,,,,,2,,,,,{ .@atk = 5; .@r = getrefine(); if(getiteminfo(getequipid(EQI_HAND_R),11) == W_SPEAR && .@r >= 10){ .@atk += 20; if(.@r >= 14){ .@atk += 20; } } bonus bAtk,.@atk; bonus bMatk,.@atk; },{},{}
 27181,Airship_Raid_Card,Airship Raid Card,6,20,,10,,,,,,,,2,,,,,{ .@r = getrefine(); bonus bLongAtkRate,1 + .@r/2; bonus bCritical,.@r/2; },{},{}
 27182,Captain_Felock_Card,Captain Felock Card,6,20,,10,,,,,,,,2,,,,,{ bonus bAtk,30; .@r = getrefine(); bonus2 bSkillAtk,"RL_AM_BLAST",.@r >= 10 ? 60 : 30; bonus2 bSkillAtk,"RL_HAMMER_OF_GOD",.@r >= 10 ? 60 : 30; },{},{}
 27183,Gigantes_Card,Gigantes Card,6,20,,10,,,,,,,,128,,,,,{ bonus bAtk,20; if(readparam(bStr) >= 120) { bonus bAtk,20; bonus bAspdRate,-3; } },{},{}
@@ -11801,7 +11851,7 @@
 31085,C_Long_Pony_Crimson,Costume Long Pony Crimson,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1525,{},{},{}
 31086,C_Long_Pony_Purple,Costume Long Pony Purple,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1526,{},{},{}
 31087,C_Dwarf_Beard,Costume Dwarf Beard,4,0,,0,,,,0,0xFFFFFFFF,63,2,4096,,1,0,1349,{},{},{}
-31088,C_Mad_Hatter,Costume Mad Hatter,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,1421,{},{},{}
+31088,C_Mad_Hatter,Costume Mad Hatter,4,0,,0,,,,0,0xFFFFFFFF,63,2,5120,,1,0,1421,{},{},{}
 31089,C_Exploding_Crimson_Flame,Costume Exploding Crimson Flame,4,0,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,0,0,{},{},{}
 31090,C_Angelring_Hat,Costume Angelring Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,348,{},{},{}
 31091,C_Show_Me_The_Zeny,Costume Show Me The Zeny,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,0,0,{},{},{}
@@ -11859,6 +11909,8 @@
 31151,C_Chasher_Ear,Costume Cheshire's Cat Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1565,{},{},{}
 31152,C_Piamette_BowTie_Red,Costume Piamette's Red Bow Tie,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1566,{},{},{}
 31153,C_Aniv_Star_Hat2,Costume Cactus Flower Corsage,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1567,{},{},{}
+31154,C_Cap,C Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,14,{},{},{}
+31158,C_Squirrel_Ear_Hat,Costume Squirrel Ear Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1486,{},{},{}
 31160,C_Rune_Helm,Costume Rune Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1361,{},{},{}
 31161,C_Tiger_Mask,Costume Tiger Mask,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,181,{},{},{}
 31162,C_Shaving_Foam,Costume Shaving Foam,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1129,{},{},{}
@@ -11872,3 +11924,237 @@
 31170,C_Wind_Wings,Costume Wings of Wind,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,493,{},{},{}
 31171,C_Nekomimi,Costume Nekomimi,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,182,{},{},{}
 31172,C_Roast_Memory,Costume Roast Memory,4,0,,0,,,,0,0xFFFFFFFF,63,2,7168,,1,0,1576,{},{},{}
+31173,C_Oyster_Parakeet,Costume Oyster Parakeet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,419,{},{},{}
+31174,C_Suspicious_Bread_Bag,C Suspicious Bread Bag,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,429,{},{},{}
+31175,C_Strawberry_Hat,Costume Strawberry Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,755,{},{},{}
+31176,C_Looking,C Looking,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1577,{},{},{}
+31177,C_Tail_Hat,C Tail Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1578,{},{},{}
+31178,C_Fire_Muffler,C Fire Muffler,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1579,{},{},{}
+31179,C_Wolf_Masquerade,C Wolf Masquerade,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1580,{},{},{}
+31180,C_King_Sura_Headband,C King Sura Headband,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1581,{},{},{}
+31181,C_Necklace_Rosary,Costume Necklace Rosary,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1471,{},{},{}
+31182,C_Side_Cap,Costume Side Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,529,{},{},{}
+31183,C_Fallen_Angel_Blessing,Costume Blessing of Fallen Angel,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1250,{},{},{}
+31184,C_Hawkeye,Costume Hawkeye,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,609,{},{},{}
+31185,C_Engineer_Cap,Costume Engineer Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,608,{},{},{}
+31186,C_Black_Cat,Costume Black Cat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1582,{},{},{}
+31187,C_War_Princess_Ribbon,Costume War Princess Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1583,{},{},{}
+31188,C_Mono_Gothic_Bonnet,Costume Mono Gothic Bonnet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1584,{},{},{}
+31189,C_Cat_Ears_Cape_Red,Costume Red Cat Ears Cape,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1591,{},{},{}
+31190,C_Angel_Mini_Silk_Hat_B,Costume Black Angel Mini Silk Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1586,{},{},{}
+31191,C_Whikebain_Ears_Gold,Vibrant Cat Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1588,{},{},{}
+31192,C_Bluecat_Ear,Blue Cat Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1589,{},{},{}
+31193,C_Tare_Ahat,Costume Drooping Ahat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1590,{},{},{}
+31194,C_Spinning_Propeller,Costume Spinning Propeller,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,270,{},{},{}
+31195,C_Choco_Minihat,Costume Mini Chocolate Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1592,{},{},{}
+31196,C_JP_EV12,C Drooping Chuni Penguin,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1596,{},{},{}
+31197,C_Egg_Crispinette,Costume Egg Crispinette,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1598,{},{},{}
+31198,C_Octopus_Hat,C Octopus Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,538,{},{},{}
+31199,C_Weird_Beard,C Weird Beard,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,21,{},{},{}
+31200,C_Wrapping_Ribbon,C Wrapping Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1599,{},{},{}
+31201,C_Royal_Rabbit_Crown,C Royal Rabbit Crown,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1600,{},{},{}
+31202,C_Dog_Officer,C Dog Officer,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1601,{},{},{}
+31203,C_Charcoal_Stove,C Charcoal Stove,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1602,{},{},{}
+31204,C_Drooping_White_Cat,C Drooping White Cat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,378,{},{},{}
+31205,C_Large_Orc_Hero_Helm,C Large Orc Hero Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,381,{},{},{}
+31206,C_Rune_Hairband,C Rune Hairband,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,564,{},{},{}
+31207,C_Dokkebi_Mask,C Dokkebi Mask,4,0,,0,,0,,0,0xFFFFFFFF,63,2,6144,,1,0,689,{},{},{}
+31208,C_Straight_Long_YL,C Straight_Long Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1603,{},{},{}
+31209,C_Straight_Long_WH,C Straight Long White,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1604,{},{},{}
+31210,C_Side_Pigtail_BU,C Side Pigtail Blue,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1605,{},{},{}
+31211,C_Side_Pigtail_RD,C Side Pigtail Red,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1606,{},{},{}
+31212,C_Side_Pigtail_YL,C Side Pigtail Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1607,{},{},{}
+31213,C_Side_Pigtail_GN,C Side Pigtail Green,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1608,{},{},{}
+31214,C_Side_Pigtail_BL,C Side Pigtail Black,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1609,{},{},{}
+31215,C_Side_Pigtail_WH,C Side Pigtail White,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1610,{},{},{}
+31216,C_Side_Pigtail_OM,C Side Pigtail Brown,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1611,{},{},{}
+31217,C_Side_Pigtail_PP,C Side Pigtail Purple,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1612,{},{},{}
+31218,C_Low_Pony_BU,C Low Pony Blue,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1613,{},{},{}
+31219,C_Low_Pony_RD,C Low Pony Red,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1614,{},{},{}
+31220,C_Low_Pony_YL,C Low Pony Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1615,{},{},{}
+31221,C_Low_Pony_GN,C Low Pony Green,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1616,{},{},{}
+31222,C_Low_Pony_BL,C Low Pony Black,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1617,{},{},{}
+31223,C_Low_Pony_WH,C Low Pony White,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1618,{},{},{}
+31224,C_Low_Pony_OM,C Low Pony Brown,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1619,{},{},{}
+31225,C_Low_Pony_PP,C Low Pony Purple,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1620,{},{},{}
+31226,C_Long_Twin_BU,C Long Twin Blue,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1621,{},{},{}
+31227,C_Long_Twin_RD,C Long Twin Red,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1622,{},{},{}
+31228,C_Long_Twin_YL,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1623,{},{},{}
+31229,C_Long_Twin_GN,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1624,{},{},{}
+31230,C_Long_Twin_BL,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1625,{},{},{}
+31231,C_Long_Twin_WH,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1626,{},{},{}
+31232,C_Long_Twin_OM,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1627,{},{},{}
+31233,C_Long_Twin_PP,C Long Twin Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1628,{},{},{}
+31234,C_Persica,C Persica,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,659,{},{},{}
+31235,C_Large_Ribbon_Muffler_Mid,C Large Ribbon Muffler Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1312,{},{},{}
+31236,C_Vicious_Mind_Aura_Mid,C Vicious Mind Aura Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1267,{},{},{}
+31237,C_Pale_Yellow_Ribbon_Lower,C Pale Yellow Ribbon Lower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1474,{},{},{}
+31238,C_True_Love_Upper,C True Love Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,489,{},{},{}
+31239,C_Love_Rabbit_Hood_Upper,C Love Rabbit Hood Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,549,{},{},{}
+31240,C_Whisper_Mask_,C Whisper Mask Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,321,{},{},{}
+31241,C_Burning_Sun_Lower,C Burning Sun Lower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,654,{},{},{}
+31242,C_Anubis_Helm_,C Anubis Hat Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,485,{},{},{}
+31243,C_Tongue_Mask_Mid,C Tongue Mask Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,253,{},{},{}
+31244,C_Skymet_,C Skymet Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,868,{},{},{}
+31245,C_Cherry,C Cherry,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,602,{},{},{}
+31246,C_Humming_Bird,C Humming Bird,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,702,{},{},{}
+31247,C_Hippo_Hat,C Hippo Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,859,{},{},{}
+31248,C_Isabella_Red_Ears,C Isabella Red Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1030,{},{},{}
+31249,C_Rabbit_Hopping,C Hopping Rabbit,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1635,{},{},{}
+31250,C_Wonderful_Beast_Ear,C Wonderful Beast Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1636,{},{},{}
+31251,C_Cat_Mouth,C Cats Mouth,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1637,{},{},{}
+31252,C_Cat_Ear_Hat_White,C White Cat Ears Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1638,{},{},{}
+31253,C_Rinzu_Helmet,C Rinzu Helmet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,548,{},{},{}
+31254,C_Red_Hare_Hat,C Red Hare Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,7168,,1,0,1631,{},{},{}
+31255,C_Sweet_Helmet,C Sweet Helmet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,1374,{},{},{}
+31256,C_Jaguar_Mask,C Jaguar Mask,4,0,,0,,0,,0,0xFFFFFFFF,63,2,6144,,1,0,530,{},{},{}
+31260,C_Observer_J,C Observer,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1639,{},{},{}
+31261,C_Soda_in_Mouth,C Soda in Mouth,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1643,{},{},{}
+31262,C_Disposable_3D_Glasses,C Disposable 3D Glasses,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,661,{},{},{}
+31263,C_Disposable_Popcorn_Hat,C Disposable Popcorn Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,415,{},{},{}
+31264,C_Wings_of_Protector_Lower,C Wings of Protector Lower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,990,{},{},{}
+31265,C_Straight_Pony_Blue_Mid,C Straight Pony Blue Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1394,{},{},{}
+31266,C_Straight_Pony_Red_Mid,C Straight Pony Red Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1392,{},{},{}
+31267,C_Straight_Pony_Yellow_Mid,C Straight Pony Yellow Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1389,{},{},{}
+31268,C_Straight_Pony_Green_Mid,C Straight_Pony Green Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1390,{},{},{}
+31269,C_Straight_Pony_Black_Mid,C Straight Pony Black Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1371,{},{},{}
+31270,C_Straight_Pony_White_Mid,C Straight Pony White Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1395,{},{},{}
+31271,C_Straight_Pony_Crimson_Mid,C Straight Pony Crimson Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1393,{},{},{}
+31272,C_Straight_Pony_Purple_Mid,C Straight Pony Purple Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1391,{},{},{}
+31273,C_Cowlick_Blue_Mid,C Cowlick Blue Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1387,{},{},{}
+31274,C_Cowlick_Red_Mid,C Cowlick Red Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1385,{},{},{}
+31275,C_Cowlick_Yellow_Mid,C Cowlick Yellow Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1382,{},{},{}
+31276,C_Cowlick_Green_Mid,C Cowlick Green Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1383,{},{},{}
+31277,C_Cowlick_Black_Mid,C Cowlick Black Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1372,{},{},{}
+31278,C_Cowlick_White_Mid,C Cowlick White Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1388,{},{},{}
+31279,C_Cowlick_Crimson_Mid,C Cowlick Crimson Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1386,{},{},{}
+31280,C_Cowlick_Purple_Mid,C Cowlick Purple Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1384,{},{},{}
+31281,C_Loose_Wave_Twin_Blue_Mid,C Loose Wave Twin Blue Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1401,{},{},{}
+31282,C_Loose_Wave_Twin_Red_Mid,C Loose Wave Twin Red Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1399,{},{},{}
+31283,C_Loose_Wave_Twin_Yellow_Mid,C Loose Wave Twin Yellow Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1396,{},{},{}
+31284,C_Loose_Wave_Twin_Green_Mid,C Loose Wave Twin Green Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1397,{},{},{}
+31285,C_Loose_Wave_Twin_Black_Mid,C Loose Wave Twin Black Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1373,{},{},{}
+31286,C_Loose_Wave_Twin_White_Mid,C Loose Wave Twin White Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1402,{},{},{}
+31287,C_Loose_Wave_Twin_Crimson_Mid,C Loose Wave Twin Crimson Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1400,{},{},{}
+31288,C_Loose_Wave_Twin_Purple_Mid,C Loose Wave Twin Purple Mid,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1398,{},{},{}
+31289,C_Black_Wing_Ears_Lower,C Black Wing Ears Lower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1336,{},{},{}
+31290,C_Angels_Feather_Cap,C Angels Feather Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,929,{},{},{}
+31291,C_Devils_Feather_Cap,C Devils Feather Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,930,{},{},{}
+31293,C_Kings_Crown_Purple,C Crown of Ancient King Purple,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1651,{},{},{}
+31294,C_Jirant_Circlet_Red,C Jirant Circlet Red,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1652,{},{},{}
+31295,C_Red_Wing_Hat,C Red Wing Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,613,{},{},{}
+31296,C_Strawberry_in_Mouth,C Strawberry in Mouth,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,861,{},{},{}
+31297,C_Fruit_of_Love,C Fruit of Love,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,140,{},{},{}
+31298,C_Sepia_Parade_Hat,C Sepia Parade Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,682,{},{},{}
+31299,C_White_Rabbit,C White Rabbit,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1656,{},{},{}
+31300,C_Warm_Cat_Muffler,C Warm Cat Muffler,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1657,{},{},{}
+31301,C_Blinking_Eyes,C Blinking Eyes,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1658,{},{},{}
+31302,C_Black_Magenta_Ribbon,C Black Magenta Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1659,{},{},{}
+31303,C_Black_Ramen_Hat_,C Black Ramen Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1338,{},{},{}
+31304,C_Summer_Fan,C Summer Fan,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1051,{},{},{}
+31306,C_Toucan_Hat,C Toucan Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,528,{},{},{}
+31307,C_Violet_Macaw,C Violet Macaw,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,656,{},{},{}
+31308,C_Protect_Feathers,C Protect Feathers,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1232,{},{},{}
+31309,C_Pure_White_Marching_Hat,C Pure White Marching Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1470,{},{},{}
+31310,C_666_Black_Elven_Ears,C 666 Black_ Elven Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,498,{},{},{}
+31311,C_Dolor_Thanatos_Mask,C Dolor Thanatos Mask,4,0,,0,,0,,0,0xFFFFFFFF,63,2,6144,,1,0,666,{},{},{}
+31312,C_Hades_Helm,C Hades Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,523,{},{},{}
+31313,C_FallenAngelWingEar,C Fallen Angel Wing Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1662,{},{},{}
+31314,C_Ghost_Holiday,C Ghost Holiday,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1663,{},{},{}
+31315,C_Stall_Of_Angel,C Stall of Angel,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1664,{},{},{}
+31316,C_C_FlutterButterfly_BL,C Black Fluttering Butterfly,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1665,{},{},{}
+31317,C_15th_Anniversary_Wing,C 15th Anniversary Wing,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1660,{},{},{}
+31318,C_Gerhard_Von_Devi,Costume Gerhard Von Devi,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1092,{},{},{}
+31319,C_Summer_Fan_,C Summer Fan,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1051,{},{},{}
+31320,C_Pinwheel_Hat,C Pinwheel Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,456,{},{},{}
+31321,C_Shining_Sunflower,C Shining Sunflower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,681,{},{},{}
+31322,C_Candy_Hat,C Candy Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,853,{},{},{}
+31323,C_Yellow_Hunting_Cap,C Yellow Hunting Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,484,{},{},{}
+31325,C_Queen_Scarabas_Helmet,C Queen Scarabas Helmet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,5120,,1,0,1231,{},{},{}
+31326,C_Rolf_Von_Ziege_666_II,C Rolf Von Ziege 666 II,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,946,{},{},{}
+31327,C_Wood_Goblins_Nose,C Wood Goblins Nose,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,737,{},{},{}
+31328,C_Faceworm_Eggshell,C Faceworm Eggshell,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1356,{},{},{}
+31329,C_Alice_Wig,Costume Alice Wig,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1673,{},{},{}
+31330,C_Fallen_Angel_Valletta,Costume Fallen Angel Valletta,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1674,{},{},{}
+31331,C_Chung_E_Shinyon_Cap,C Chung e Shinyon Cap,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1675,{},{},{}
+31332,C_Khalitzburg_KN_Helm_BL,C Black Khalitzburg Knight Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1676,{},{},{}
+31368,C_Harvest_Festa_Hat,C Thanksgiving Memorial Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1677,{},{},{}
+31369,C_Straight_Long_WH_,Costume Straight Long White,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1604,{},{},{}
+31370,C_Straight_Long_YL_,Costume Straight Long Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1603,{},{},{}
+31373,C_Crown_of_Ancient_king,C Crown of Ancient king,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1412,{},{},{}
+31374,C_Explosion_gum,C Explosion gum,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1414,{},{},{}
+31375,C_Mystic_Eye,C Mystic Eye,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1490,{},{},{}
+31376,C_Ancient_Dragon_Coronet_Purple,C Ancient Dragon Coronet Purple,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1680,{},{},{}
+31377,C_Glastheim_Obeserver,C Glastheim Obeserver,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1041,{},{},{}
+31378,C_Catharina_Von_Brad_60th,C Catharina Von Brad 60th,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1527,{},{},{}
+31379,C_Wind-Up_Key,C Wind-Up Key,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1335,{},{},{}
+31380,C_Crow,C Crow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1035,{},{},{}
+31381,C_Diabolic_Lapel,Costume Diabolic Lapel,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1681,{},{},{}
+31382,C_Cat_Ears_Punkish,Costume Cat Ears Punkish,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1682,{},{},{}
+31383,C_Volume_Low_Twin,Costume Volume Low Twin,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1683,{},{},{}
+31384,C_False_Ears,Costume False Ears,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1684,{},{},{}
+31385,C_Gothic_Pumpkin_Head,Costume Gothic Pumpkin Head,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1685,{},{},{}
+31387,C_Jjakk,C Jjakk,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1687,{},{},{}
+31389,C_White_Bird_Rose,C White Bird Rose,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1688,{},{},{}
+31390,C_Let_It_Snow,C Let It Snow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1690,{},{},{}
+31391,C_Floating_Stone_of_Sage,C Floating Stone of Sage,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1230,{},{},{}
+31392,C_Radio_Antenna,C Radio Antenna,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,347,{},{},{}
+31393,C_Vajra,C Vajra,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,983,{},{},{}
+31394,C_Magician_White_Hat,C Magician White Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,283,{},{},{}
+31395,C_Book_Of_Magic,C Book of Magic,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1691,{},{},{}
+31396,C_Sorcerer_Hood,C Sorcerer Hood,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1692,{},{},{}
+31397,C_Sitting_Pope,C Sitting Pope,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1553,{},{},{}
+31398,C_Blinking_Thin_Eyes,C Blinking Thin Eyes,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1693,{},{},{}
+31399,C_Darkness_Veil,C Darkness Veil,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1694,{},{},{}
+31400,C_Ribbon,C Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,17,{},{},{}
+31401,C_Nuns_Veil,C Nuns Veil,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,176,{},{},{}
+31402,C_Idun_Green_Apple,C Iduns Green Apple,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1698,{},{},{}
+31403,C_Wall,C Wall,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1699,{},{},{}
+31404,C_Poring_Traffic_Light,C Poring Traffic Light,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1700,{},{},{}
+31405,C_Eleanor_Wig_YL,C Eleanor Wig Yellow,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1701,{},{},{}
+31406,C_Nydhog_Wig_WH,C Nydhoggur Wig White,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1702,{},{},{}
+31407,C_Alice_Wig_PK,C Alice Wig Peach,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1703,{},{},{}
+31408,C_Ragnarok_Rush_Goat,C Ragnarok Rush Goat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,41,{},{},{}
+31409,C_Barrel_Helm,C Barrel Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,7168,,1,0,1498,{},{},{}
+31410,C_GodsHelm,Costume God's Helm,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1678,{},{},{}
+31411,C_Leo_Diadem,C Leo Diadem,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,566,{},{},{}
+31412,C_Virgo_Crown,C Virgo Crown,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,573,{},{},{}
+31413,C_Taurus_Crown,C_ Taurus Crown,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,536,{},{},{}
+31414,C_Cancer_Diadem,C Cancer Diadem,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,560,{},{},{}
+31415,C_Wanderers_ Sakkat,Costume Wanderer's Sakkat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,3072,,1,0,558,{},{},{}
+31417,C_Rice_Ball_Hat,C Rice Ball Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,556,{},{},{}
+31418,C_Green_Onion_in_Mouth,C Green Onion in Mouth,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,824,{},{},{}
+31420,C_Shining_Santa_Poring,C Shining Santa Poring,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,961,{},{},{}
+31432,C_Floating_Ice,C Floating Ice,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1562,{},{},{}
+31433,C_Celestial_Circle,C Celestial Circle,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1073,{},{},{}
+31434,C_Cloud_Burst,C Cloud Burst,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,705,{},{},{}
+31435,C_Ghost_Magicians_Knit_Hat,C Ghost Magicians Knit Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,854,{},{},{}
+31436,C_Lazy_Cat,C Lazy Cat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,274,{},{},{}
+31437,C_Baby_Penguin,C Baby Penguin,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1705,{},{},{}
+31438,C_Fluffy_Angel_Cape,C Fluffy Angel Cape,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1706,{},{},{}
+31439,C_Fluffy_Heart_Earmuffs,C Fluffy Heart Earmuffs,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1707,{},{},{}
+31440,C_Snow_Bear_Hood,C Snow Bear Hood,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1708,{},{},{}
+31441,C_Penguin_Cap_BU,C Penguin Cap Blue,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1709,{},{},{}
+31442,C_Smile_Mask_Middle,C Smile Mask Middle,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,65,{},{},{}
+31443,C_Munak_Hat_,C Munak Hat Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,51,{},{},{}
+31444,C_Bongun_Hat_,C Bongun Hat Upper,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,139,{},{},{}
+31446,C_Toy_Syringe,C Toy Syringe,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,842,{},{},{}
+31447,C_Light_Moonlight_Hat,C Light Moonlight_Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,913,{},{},{}
+31448,C_Stings_Silk_Ribbon,C Stings Silk Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1457,{},{},{}
+31449,C_Blue_Rose_Eyepatch,C Blue Rose Eyepatch,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1712,{},{},{}
+31450,C_Lolita_Two_Side_Up,C Lolita Two Side Up,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1713,{},{},{}
+31451,C_Blue_Frill_Ribbon,C Blue Frill Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1714,{},{},{}
+31452,C_White_Cat,C White Cat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1715,{},{},{}
+31453,C_L_RibbonMuff_Black,C Large Ribbon Muffler Black,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1716,{},{},{}
+31455,C_Enchanted_Dog,C Super Cute Dog,4,0,,0,,0,,0,0xFFFFFFFF,63,2,6144,,1,0,1718,{},{},{}
+31457,C_Laughing_Wonderful_Wolf_Hat,C Laughing Wonderful Wolf Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1016,{},{},{}
+31464,C_Bloom_Afro,C Bloom Afro,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,837,{},{},{}
+31468,C_Stripe_Hat,C Stripe Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1728,{},{},{}
+31470,C_Scroll_of_Tengu,C Scroll of Tengu,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1445,{},{},{}
+31471,C_Celestial_Flower,C Celestial Flower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,438,{},{},{}
+31472,C_Fairy_Feathers,C Fairy Feathers,4,0,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,1723,{},{},{}
+31473,C_Tipsy,C Tipsy,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1724,{},{},{}
+31474,C_Straight_Long_BL,C Straight Long Black,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1725,{},{},{}
+31475,C_Black_Fox_Ear_Ribbon,C Black Fox Ears Ribbon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1726,{},{},{}
+31476,C_Cherry_Blossom_Hat_YL,C Yellow Cherry Blossom Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,1727,{},{},{}
+31478,C_Eleanor_Wig_,C Eleanors Wig Lower,4,0,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,1502,{},{},{}

+ 122 - 8
db/re/mob_db.txt

@@ -190,6 +190,7 @@
 1184,FABRE_,Fabre,Fabre,1,30,1,1,0,1,4,7,0,0,1,2,1,1,4,5,10,12,0,4,22,0x2003885,400,1672,672,480,0,0,0,0,0,0,0,914,2000,949,250,1502,80,721,2,511,350,705,500,1501,200,0,0,0,0,0,0
 1185,WHISPER_,Whisper,Whisper,34,1796,1,483,737,1,198,239,0,45,1,51,14,0,60,0,10,12,0,1,28,0x0,150,1960,960,504,0,0,0,0,0,0,0,1001,10,1059,100,0,0,2333,1,0,0,0,0,0,0,0,0,0,0,0,0
 1186,WHISPER_BOSS,Giant Whisper,Giant Whisper,66,2570,0,630,710,1,282,341,94,45,40,79,44,51,67,31,10,12,0,6,48,0x2003695,250,2536,1536,672,0,0,0,0,0,0,0,1001,150,1059,5335,2282,1,2333,10,0,0,0,0,0,0,0,0,0,0,4303,1
+//1187,SWITCH
 1188,BON_GUN,Bongun,Bongun,59,2510,1,531,597,1,189,218,88,5,55,24,24,5,34,10,10,12,1,1,29,0x3095,200,1720,500,420,0,0,0,0,0,0,0,1094,5500,7014,40,618,60,5046,1,609,15,508,1000,508,1250,0,0,0,0,4212,1
 1189,ORC_ARCHER,Orc Archer,Orc Archer,78,4835,1,922,1161,9,260,303,67,31,55,32,24,30,99,15,10,12,1,7,22,0x3095,300,1960,620,480,0,0,0,0,0,0,0,1063,4656,1753,1000,1756,2500,1755,2500,1734,2,507,1400,509,900,0,0,0,0,4256,1
 1190,ORC_LORD,Orc Lord,Orc Lord,55,552000,1,156240,122760,1,780,1428,256,92,95,95,103,96,155,85,10,12,2,7,82,0x6283695,100,1248,500,360,31102,968,5500,617,2000,0,0,1363,400,2621,400,5007,400,1371,400,617,1000,985,4268,16000,100,0,0,0,0,4135,1
@@ -219,6 +220,8 @@
 1214,CHOCO,Choco,Choco,48,1080,1,369,414,1,120,167,70,30,40,45,32,19,42,20,10,12,0,2,23,0x3095,150,1028,528,360,0,0,0,0,0,0,0,7011,5335,942,7000,985,53,513,5000,634,20,532,1000,607,25,0,0,0,0,4285,1
 1215,STEM_WORM,Stem Worm,Stem Worm,84,4530,1,1080,1215,1,266,307,73,50,55,37,25,47,70,30,10,12,1,3,24,0x3095,300,1956,756,528,0,0,0,0,0,0,0,7012,5335,509,1800,1968,10,756,115,997,5,0,0,608,45,0,0,0,0,4224,1
 1216,PENOMENA,Penomena,Penomena,85,4589,1,1116,1556,7,292,333,85,32,76,38,35,35,89,10,10,12,1,5,25,0x3695,400,832,500,600,0,0,0,0,0,0,0,7013,4850,962,8000,938,7000,525,200,719,15,1258,1,716,550,0,0,0,0,4314,1
+//1217,ORC_WARRIOR
+//1218,PECO_EGG
 1219,KNIGHT_OF_ABYSS,Knight of Abyss,Abysmal Knight,122,23297,1,4779,4013,1,810,1002,102,50,121,55,68,70,97,37,10,12,2,7,87,0x3695,300,1500,500,1000,0,0,0,0,0,0,0,1064,5335,7023,5,2318,1,1421,25,0,0,985,369,15014,10,0,0,0,0,4140,1
 1220,M_DESERT_WOLF,Desert Wolf,Desert Wolf,103,9447,1,349,218,1,254,313,114,47,93,69,63,61,82,42,10,12,1,2,23,0x3695,200,1120,420,288,0,0,0,0,0,0,0,1253,5,7030,5500,2311,1,517,1200,920,2000,756,53,0,0,0,0,0,0,4082,1
 1221,M_SAVAGE,Savage,Savage,26,2092,0,321,203,1,146,177,16,5,1,26,54,10,37,10,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,1028,6000,514,150,702,3,2276,2,605,15,757,70,0,0,0,0,0,0,4078,1
@@ -2174,15 +2177,15 @@
 //3017,EP14_3_DEATH_C_MOB2
 //3018,EP14_3_DEATH_C_MOB3
 //3019,CELINE_KIMI
-//3020,FIRE_CONDOR
-//3021,FIRE_SAND_MAN
-//3022,FIRE_FRILLDORA
-//3023,FIRE_GOLEM
+3020,FIRE_CONDOR,Fire Condor,Fire Condor,141,125114,1,7021,7481,1,1364,2565,71,45,104,72,66,10,113,52,10,12,1,2,43,0x0000081,110,1148,648,480,0,0,0,0,0,0,0,6691,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3021,FIRE_SAND_MAN,Fire Sand Man,Fire Sandman,143,130501,1,7207,7734,1,1404,2760,122,73,84,36,25,55,124,35,10,12,1,0,63,0x003885,150,1672,720,288,0,0,0,0,0,0,0,6694,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3022,FIRE_FRILLDORA,Fire Frilldora,Fire Frilldora,147,141301,1,7807,8199,1,1511,2903,134,40,148,38,128,45,121,30,10,12,1,2,63,0x0000081,130,1540,720,432,0,0,0,0,0,0,0,6694,1500,6696,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3023,FIRE_GOLEM,Fire Golem,Fire Golem,148,180213,1,8912,9464,1,1478,2799,292,102,70,78,267,25,84,25,10,12,2,0,83,0x003885,200,1608,816,396,0,0,0,0,0,0,0,6693,2000,6695,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3024,14_3_MERCENARY_A
 //3025,14_3_MERCENARY_B
-//3026,FIREPIT
-//3027,FULBUK
-//3028,SONIA
+3026,FIREPIT,Fire Pit,Fire Pit,17,10,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3027,FULBUK,Fire Bug,Fire Bug,150,234,1,58,47,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x0000001,120,1288,288,768,0,0,0,0,0,0,0,6689,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3028,SONIA,Sonia,Sonia,17,20,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,0,0,0,0,0,0,0,6690,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3029,GRIM_REAPER_ANKOU
 //3030,STANDING_SOUL
 //3031,MUTANT_NECROMANCER
@@ -3236,6 +3239,117 @@
 //20108,TW_KIEL
 //20109,TW_TAO_GUNKA
 //20110,TW_KNIGHT_OF_WINDSTORM
-
+//20111,MD_TRE_DRAKE
+//20112,MD_MANHOLE
+//20113,MD_TRE_MIMIC
+//20114,MD_TRE_WRAITH
+//20115,MD_TRE_PIRATE_SKEL
+//20116,MD_TRE_WHISPER
+//20117,MD_TRE_HYDRA
 //20118,GOBLIN_KING
 //20119,BAD_CATCUMBER
+
+//20165,MD_TOUCAN
+//20166,FLAME_GHOST
+//20167,ICE_GHOST
+//20168,B_FLAME_GHOST
+//20169,B_ICE_GHOST
+//20170,GARGOYLE_MJ
+//20171,STING_MJ
+//20172,RAYDRIC_MJ
+//20173,RAYDRIC_ARCHER_MJ
+//20174,RAGGED_ZOMBIE_MJ
+//20175,EXTRA_JOKER
+//20176,ERZSEBET
+//20177,JENIFFER
+//20178,GENERAL_ORC
+//20179,SIEGLOUSE
+
+//20181,VH_AMON_RA
+//20182,VH_BAPHOMET
+//20183,VH_DARK_LORD
+//20184,VH_DOPPELGANGER
+//20185,VH_DRACULA
+//20186,VH_DRAKE
+//20187,VH_EDDGA
+//20188,VH_GARM
+//20189,VH_GOLDEN_BUG
+//20190,VH_KNIGHT_OF_WS
+//20191,VH_MAYA
+//20192,VH_MISTRESS
+//20193,VH_MOONLIGHT
+//20194,VH_ORC_LORD
+//20195,VH_ORK_HERO
+//20196,VH_OSIRIS
+//20197,VH_PHARAOH
+//20198,VH_PHREEONI
+//20199,VH_TAO_GUNKA
+//20200,VH_TURTLE_GENERAL
+//20201,VH_B_SEYREN
+//20202,VH_B_HARWORD
+//20203,VH_B_EREMES
+//20204,VH_B_KATRINN
+//20205,VH_B_MAGALETA
+//20206,VH_LORD_OF_DEATH
+//20207,VH_ENTWEIHEN
+//20208,VH_NAGHT_SIEGER
+//20209,VH_DETALE
+//20210,VH_THANATOS
+//20211,VH_APOCALIPS_H
+//20212,VH_KIEL_
+//20213,VH_RANDGRIS
+//20214,VH_RSX_0806
+//20215,VH_B_YGNIZEM
+//20216,VH_ATROCE
+//20217,VH_BEELZEBUB_
+//20218,VH_FALLINGBISHOP
+//20219,VH_GLOOM_U_N
+//20220,VH_IFRIT
+//20221,VH_KTULLANUX
+//20222,VH_H_HUNTER_EV
+//20223,VH_MM_CUTIE
+//20224,VH_VENOM_KIMERA
+//20225,VH_B_SHECIL
+//20226,VH_B_RANDEL
+//20227,VH_B_FLAMEL
+//20228,VH_B_TRENTINI
+//20229,VH_CHARLESTON3
+//20230,VH_GRAND_PERE
+//20231,VH_S_NYDHOG
+//20232,VH_QUEEN_SCARABA
+//20233,VH_KRAKEN
+//20234,VH_TIMEHOLDER
+//20235,VH_INCAN_SAMURAI
+//20236,VH_BACSOJIN
+//20237,VH_DARK_S_LORD
+//20238,VH_LADY_TANEE
+//20239,VH_GOPINICH
+//20240,VH_LEAK
+//20241,VH_MECHASPIDER
+//20242,VH_PYURIEL
+//20243,VH_KADES
+//20244,VH_GIOIA
+//20245,VH_DAEHYON
+//20246,VH_B_CELIA
+//20247,VH_B_CHEN
+//20248,VH_B_ALPHOCCIO
+//20249,VH_B_GERTIE
+//20250,VH_ENTWEIHEN_R
+//20251,VH_ENTWEIHEN_H
+//20252,VH_ENTWEIHEN_M
+//20253,VH_ENTWEIHEN_S
+//20254,VH_MIMIC
+//20255,ILL_TEDDY_BEAR_R
+//20256,ILL_TEDDY_BEAR_Y
+//20257,ILL_TEDDY_BEAR_G
+//20258,ILL_TEDDY_BEAR_W
+//20259,ILL_TEDDY_BEAR_B
+//20260,ILL_TEDDY_BEAR_S
+//20261,ILL_PITMAN
+//20262,ILL_MINERAL
+//20263,ILL_OBSIDIAN
+//20264,G_ILL_TEDDY_BEAR_R
+//20265,G_ILL_TEDDY_BEAR_Y
+//20266,G_ILL_TEDDY_BEAR_G
+//20267,G_ILL_TEDDY_BEAR_W
+//20268,G_ILL_TEDDY_BEAR_B

+ 3 - 0
db/re/mob_skill_db.txt

@@ -11076,6 +11076,9 @@
 2997,Kimi's Phantom@NPC_WIDESOULDRAIN,attack,680,3,10000,5000,50000,no,self,myhpltmaxrate,10,,,,,,42,
 2997,Kimi's Phantom@NPC_MAXPAIN,attack,716,3,10000,3000,50000,no,self,myhpltmaxrate,10,,,,,,,
 2997,Kimi's Phantom@NPC_POWERUP,attack,349,1,10000,0,50000,no,self,myhpltmaxrate,5,,,,,,6,
+
+3026,Fire Pit@NPC_DEATHSUMMON,dead,718,3,10000,0,10000,no,self,always,0,3027,3027,3027,,,,
+
 3038,Hidden Mob 7@NPC_INVISIBLE,idle,353,1,10000,0,30000,yes,self,always,0,,,,,,,
 3038,Hidden Mob 7@NPC_INVISIBLE,attack,353,1,10000,0,30000,yes,self,always,0,,,,,,,
 // 3038,Hidden Mob 7@NPC_HELLBURNING,idle,719,1,10000,0,3000,yes,self,always,0,,,,,,,

+ 16 - 1
db/re/quest_db.txt

@@ -2434,6 +2434,22 @@
 11347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Acolyte_soft bone(LV.18)"
 11348,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Acolyte_Solid bone(LV.23)"
 
+// Dimensional Travel Quest
+11349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dimensional Travel"
+11350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dimensional Travel"
+11351,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dimensional Travel"
+11352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dimensional Travel"
+11353,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dimensional Travel"
+11354,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Specimen Collection"
+11355,0,3026,20,0,0,0,0,0,0,0,0,0,0,0,0,0,"Specimen Collection"
+11356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Specimen Collection"
+11357,0,3028,25,0,0,0,0,0,0,0,0,0,0,0,0,0,"Specimen Collection"
+11358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Specimen Collection"
+11359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Antidote"
+11360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Antidote"
+11361,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Antidote"
+11362,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Antidote"
+
 // Episode 15.1 To Phantasmagorika!
 11363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Phantasmagorika!"
 11364,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Phantasmagorika!"
@@ -2451,7 +2467,6 @@
 11376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Let the Specialists Handle It"
 11377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Act of Kindness"
 
-//11366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
 11378,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Trick or treat" // Halloween Event 2013
 
 // Episode 15.2 The Last Room Instance

+ 1 - 1
db/re/skill_cast_db.txt

@@ -570,7 +570,7 @@
 //-- CH_PALMSTRIKE
 370,0,300,0,0,0,0,0
 //-- CH_TIGERFIST
-371,0,0,0,0,2000:4000:6000:8000:10000,0,0
+371,0,0,0,4000:8000:12000:16000:24000,0,0,0
 //==========================================
 
 

+ 3 - 3
db/re/skill_db.txt

@@ -581,7 +581,7 @@
 //****
 // Clown & Gypsy
 394,9,8,1,-1,0,0,10,-9,yes,0,0,0,weapon,0,0x0,	CG_ARROWVULCAN,Vulcan Arrow
-395,0,0,4,0,0x1,3,1,1,yes,0,0x40,0,misc,2,0x0,	CG_MOONLIT,Sheltering Bliss
+395,0,0,4,0,0x1,3,5,1,yes,0,0x40,0,misc,2,0x0,	CG_MOONLIT,Sheltering Bliss
 396,7,6,16,0,0x1,0,1,1,yes,0,0x600,0,none,0,0x40,	CG_MARIONETTE,Marionette Control
 
 //****
@@ -710,7 +710,7 @@
 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0,		PF_DOUBLECASTING,Double Casting
 483,18,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x0,	HW_GANBANTEIN,Ganbantein
 484,18,6,2,2,0xD1,0,5,1,yes,0,0x18000,0,misc,0,0x11010,		HW_GRAVITATION,Gravitation Field
-485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0,0x4000,	WS_CARTTERMINATION,Cart Termination
+485,-2,6,1,-1,0x0,0,10,1,no,0,0,0,weapon,0,0x4000,	WS_CARTTERMINATION,Cart Termination
 486,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x4000,		WS_OVERTHRUSTMAX,Maximum Power Thrust
 487,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x8,		CG_LONGINGFREEDOM,Longing for Freedom
 488,0,6,4,0,0x1,1,5,1,no,0,0x20,0,misc,0,0x1,	CG_HERMODE,Wand of Hermode
@@ -861,7 +861,7 @@
 //715,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_DARKPIERCING,Dark Piercing
 716,0,6,4,0,0x1,0,10,0,no,0,0x2,0,none,0,0x0,		NPC_MAXPAIN,Max Pain
 717,0,6,1,0,0xD2,18,10,1,no,0,0x2,0,misc,0,0x0,		NPC_MAXPAIN_ATK,Max Pain Attack
-//718,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_DEATHSUMMON,Death Summon
+718,0,0,4,0,0x1,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_DEATHSUMMON,Death Summon
 //719,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_HELLBURNING,Hell Burning
 //720,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_JACKFROST,Jack Frost 2
 //721,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDEWEB,Wide Web

+ 2 - 2
db/re/skill_require_db.txt

@@ -700,7 +700,7 @@
 2275,0,0,25:30:35:40:45,0,0,0,99,0,0,mado,0,0,12392,1,12392,1,12393,1,12393,1,12394,1,0,0,0,0,0,0,0,0,0,0,2807			//NC_REPAIR
 
 2278,0,0,20:22:24:26:28,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//NC_AXEBOOMERANG
-2279,0,0,20:22:24:26:28,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_POWERSWING
+2279,0,0,20:22:24:26:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//NC_POWERSWING
 2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_AXETORNADO
 2281,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,0,612,0,615,0,998,1,999,2,0,0,0,0,0,0,0,0,0,0,0,0,0			//NC_SILVERSNIPER
 2282,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,612,0,615,0,998,2,7054,1,0,0,0,0,0,0,0,0,0,0,0,0,0		//NC_MAGICDECOY
@@ -763,7 +763,7 @@
 2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAMPAGEBLASTER
 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_CRESCENTELBOW
 2334,0,0,40:60:80:100:120,-1:-2:-3:-4:-5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SR_CURSEDCIRCLE
-2335,0,0,40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
+2335,0,0,80:70:60:50:40,-5:-4:-3:-2:-1,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//SR_LIGHTNINGWALK
 2336,0,0,10:15:20:25:30,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//SR_KNUCKLEARROW
 2337,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//SR_WINDMILL
 2338,0,0,120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//SR_RAISINGDRAGON

+ 8 - 8
db/re/skill_tree.txt

@@ -832,7 +832,7 @@
 4008,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4008,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4008,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4008,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
+4008,359,1,0,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has 2 extra columns after "MaxLevel" for Job Level 50 requirement
 4008,397,5,55,5,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4008,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4008,399,10,64,3,398,3,0,0,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -1059,7 +1059,7 @@
 4014,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4014,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4014,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4014,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
+4014,359,1,0,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has 2 extra columns after "MaxLevel" for Job Level 50 requirement
 4014,397,5,55,5,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4014,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4014,399,10,64,3,398,3,0,0,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -1304,7 +1304,7 @@
 4020,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4020,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
 4020,394,10,47,5,316,1,46,5,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4020,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4020,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4020,396,1,45,10,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4020,487,5,315,10,396,1,317,3,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4020,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -1340,7 +1340,7 @@
 4021,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4021,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
 4021,394,10,47,5,324,1,46,5,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4021,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4021,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4021,396,1,45,10,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4021,487,5,323,10,396,1,325,3,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4021,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -2756,7 +2756,7 @@
 4060,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4060,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4060,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4060,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra column removed. Rune Knights dont require job level 50 to use Berserk.
+4060,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra columns removed. Rune Knights dont require job level 50 to use Berserk.
 4060,397,5,55,5,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4060,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4060,399,10,64,3,398,3,0,0,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
@@ -3664,7 +3664,7 @@
 4075,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4075,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
 4075,394,10,47,5,316,1,46,5,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4075,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4075,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4075,396,1,45,10,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4075,487,5,315,10,396,1,317,3,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4075,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -3726,7 +3726,7 @@
 4076,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
 4076,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
 4076,394,10,47,5,324,1,46,5,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4076,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
+4076,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
 4076,396,1,45,10,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
 4076,487,5,323,10,396,1,325,3,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
 4076,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
@@ -4012,7 +4012,7 @@
 4081,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
 4081,357,5,4,5,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
 4081,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4081,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra column removed. Rune Knights dont require job level 50 to use Berserk.
+4081,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra columns removed. Rune Knights dont require job level 50 to use Berserk.
 4081,397,5,55,5,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
 4081,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
 4081,399,10,64,3,398,3,0,0,0,0,0,0 //LK_JOINTBEAT#Vital Strike#

+ 1 - 1
doc/atcommands.txt

@@ -1310,7 +1310,7 @@ Bans or unbans a player for a limited time.
 Time elements: y/a, m, d/j, h, mn, s
 
 Example:
-@ban +2d Char2
+@charban +2d Char2
 -> bans Char2's for 2 days.
 
 ---------------------------------------

+ 2 - 0
doc/mapflags.txt

@@ -196,6 +196,8 @@ Disables usage of monster-spawning items on a map:
  - Poring Box (ID 12109)
  - Red Pouch (ID 12024)
 
+Items listed above can be modified under db/(pre-)re/item_flag.txt
+
 Note that when 'mob_warp' is enabled in '/conf/battle/monster.conf' and flag 4 is set, this will
 also prevent mobs from being warped onto the map (except slave mobs).
 

+ 6 - 9
doc/packet_interserv.txt

@@ -130,24 +130,23 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 
 0x2720:
 	Type: HA
-	Structure: <cmd>.W <map_fd>.L <u_fd>.L <u_aid>.L <u_group>.L <account_id>.L
-	index: 0,2,6,10,14,18
-	len: 22
+	Structure: <cmd>.W <map_fd>.L <u_fd>.L <u_aid>.L <account_id>.L
+	index: 0,2,6,10,14
+	len: 18
 	parameter:
 		- cmd : packet identification (0x2720)
 		- map_fd :
 		- u_fd :
 		- u_aid :
-		- u_group :
 		- account_id :
 	desc:
 		- 
 
 0x2721:
 	Type: AH
-	Structure: <cmd>.W <map_fd>.L <u_fd>.L <u_aid>.L <account_id>.L <status>.B <password>.33B <email>.40B <last_ip>.16B <last_login>.24B <group_id>.L <logincount>.L <state>.L <password>.33B <birthdate>.11B <pincode>.?B <userid>.?B
-	index: 0,2,6,10,18,19,52,92,108,132,136,140,144,155,155+PINCODE_LENGTH
-	len: 155 + PINCODE_LENGTH + NAME_LENGTH
+	Structure: <cmd>.W <map_fd>.L <u_fd>.L <u_aid>.L <account_id>.L <status>.B <password>.33B <email>.40B <last_ip>.16B <last_login>.24B <group_id>.L <logincount>.L <state>.L <birthdate>.11B <userid>.?B
+	index: 0,2,6,10,18,19,52,92,108,132,136,140,144,122+NAME_LENGTH
+	len: 122 + NAME_LENGTH
 	parameter:
 		- cmd : packet identification (0x2721)
 		- map_fd
@@ -162,9 +161,7 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
 		- group_id
 		- logincount
 		- state
-		- password
 		- birthdate
-		- pincode
 		- userid
 	desc:
 		-

+ 16 - 0
doc/script_commands.txt

@@ -1150,6 +1150,22 @@ will terminate.
 
 ---------------------------------------
 
+*clear;
+
+This command will clear the dialog text and continue the script without player interaction.
+
+Example:
+	mes "This is how the 'clear' script command works.";
+	sleep2 3000;
+	clear; // This will clear the dialog and continue to the next one.
+	mes "I will show you again.";
+	sleep2 3000;
+	clear;
+	mes "Bye!";
+	close;
+
+---------------------------------------
+
 *close;
 
 This command will create a 'close' button in the message window for the invoking

+ 31 - 17
npc/custom/card_seller.txt

@@ -1,28 +1,36 @@
 //===== rAthena Script =======================================
 //= Card Seller A-Z
-//===== By: ==================================================
-//= AnnieRuru
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //= Sells all cards dropped by mobs, grouped alphabetically.
 //= MVP cards are excluded from the list.
 //=
 //= NOTE: Requires SQL item and mob databases.
-//===== Additional Comments: =================================
-//= 1.0 First version, edited. [Euphy]
+//===== Changelogs: ==========================================
+//= 1.0 First version [AnnieRuru]
+//= 1.1 Minor edits [Euphy]
+//= 1.2 Update for monster mode and enchants [Lemongrass]
 //============================================================
 
 prontera,155,177,5	script	Card Seller	100,{
+	.@menu$ = getvariableofnpc( .alphabet_menu$, "card_seller_creation" );
+	if (.@menu$ == "") {
+		mes "[Card Seller]";
+		mes "I am sorry, it seems like something went wrong.";
+		mes "I cannot find any cards in our database at the moment.";
+		mes "Please contact a game master.";
+		close;
+	}
 	mes "[Card Seller]";
 	mes "Welcome!";
 	mes "I can sell you any normal monster card in the game. Would you like to have a look?";
 	next;
-	.@s = select( .alphabet_menu$ ) -1;
+	.@s = select(.@menu$) -1;
 	close2;
-	callshop "card_mob#"+ .alphabet$[.@s], 1;
+	callshop "card_mob#"+ getvariableofnpc( .alphabet$[.@s], "card_seller_creation" ), 1;
+	end;
+}
+
+-	script	card_seller_creation	-1,{
 	end;
 OnInit:
 	if (checkre(0)) {
@@ -32,14 +40,20 @@ OnInit:
 		.@mob_db$  = "mob_db";
 		.@item_db$ = "item_db";
 	}
-	freeloop 1;
-	.@total = query_sql( "SELECT DISTINCT LEFT( `name_japanese`, 1 ) AS alphabets FROM `"+ .@item_db$ +"` RIGHT JOIN `"+ .@mob_db$ +"` ON `"+ .@item_db$ +"`.`id` = `"+ .@mob_db$ +"`.`dropcardid` WHERE ~(`MODE`) & 32 AND `type` = 6 GROUP BY `name_japanese` ORDER BY alphabets;", .alphabet$ );
+	freeloop 1;	
+	.@total = query_sql( "SELECT DISTINCT LEFT( `name_japanese`, 1 ) AS alphabets FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY alphabets;", .@alphabet$ );
 	for ( .@i = 0; .@i < .@total; .@i++ ) {
-		.alphabet_menu$ = .alphabet_menu$ + .alphabet$[.@i] +" Cards:";
-		.@nb = query_sql( "SELECT `"+ .@item_db$ +"`.`id` FROM `"+ .@item_db$ +"` RIGHT JOIN `"+ .@mob_db$ +"` ON `"+ .@item_db$ +"`.`id` = `"+ .@mob_db$ +"`.`dropcardid` WHERE ~(`MODE`) & 32 AND `type` = 6 AND LEFT( `name_japanese`, 1 ) = '"+ .alphabet$[.@i] +"' GROUP BY `name_japanese` ORDER BY `name_japanese` LIMIT 128;", .@id );
-		npcshopdelitem "card_mob#"+ .alphabet$[.@i], 501;
-		for ( .@j = 0; .@j < .@nb; .@j++ )
-			npcshopadditem "card_mob#"+ .alphabet$[.@i], .@id[.@j], 1000000;
+		.@nb = query_sql( "SELECT `"+ .@item_db$ +"`.`id` FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND LEFT( `name_japanese`, 1 ) = '"+ .@alphabet$[.@i] +"' AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY `name_japanese` LIMIT 128;", .@id );
+		if (.@nb > 0) {
+			.alphabet$[.@size_alphabet++] = .@alphabet$[.@i];
+			.alphabet_menu$ = .alphabet_menu$ + .@alphabet$[.@i] +" Cards:";
+			npcshopdelitem "card_mob#"+ .@alphabet$[.@i], 501;
+			for ( .@j = 0; .@j < .@nb; .@j++ ) {
+				if (callfunc( "F_IsCharm", .@id[.@j] ) == true)// Skip enchants in case someone added them as card drop
+					continue;
+				npcshopadditem "card_mob#"+ .@alphabet$[.@i], .@id[.@j], 1000000;
+			}
+		}
 	}
 	freeloop 0;
 	end;

+ 4 - 4
npc/events/RWC_2012.txt

@@ -315,7 +315,7 @@ prontera,147,59,3	script	Goldberg#pron	878,{
 			mes "I'm sorry. But you don't have the RWC Initialization coupon. Can you check your inventory?";
 			close;
 		}
-		if (.@equip_card[3] == 0) {
+		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
 			mes "[Goldberg]";
 			mes "Hm... this equipment is clean. I cannot initialize it if there's nothing! Check it again.";
 			close;
@@ -327,9 +327,9 @@ prontera,147,59,3	script	Goldberg#pron	878,{
 		delequip .@part;
 	
 //		GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
-		for(set .@i,0; .@i<4; set .@i,.@i+1) {
-			if (.@equip_card[.@i] >= 4700) // Armor Enchant System
-				set .@equip_card[.@i],0;
+		for ( .@i = getiteminfo(.@equip_id,10); .@i < MAX_SLOTS; .@i++ ) {
+			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
 		

+ 267 - 267
npc/kafras/functions_kafras.txt

@@ -1,12 +1,12 @@
-//===== rAthena Script ======================================= 
+//===== rAthena Script =======================================
 //= Kafra Functions
-//===== By: ================================================== 
+//===== By: ==================================================
 //= rAthena Dev Team
 //= Darlskies, Darkchild, Syrus22, Lupus, kobra_k88 (2.0)
 //= L0ne_W0lf
-//===== Current Version: ===================================== 
+//===== Current Version: =====================================
 //= 6.8
-//===== Compatible With: ===================================== 
+//===== Compatible With: =====================================
 //= rAthena Project
 //===== Description: =========================================
 //= These functions handle save, storage, cart rental, teleport,
@@ -15,7 +15,7 @@
 //= Kafra's will need a lot of work. The Welcome Message argument
 //= may become obsolete, as most kafras have a slightly differing
 //= Welcome message.
-//===== Additional Comments: ================================= 
+//===== Additional Comments: =================================
 //= 1.1 Now using functions v2.1 Added Cart Rent for Classes: Whitesmith, Professor.
 //=     Replaced checkoption(x) into checkcart(0) [Lupus] v2.1b Added Fix Kafra Pass Func [Kobra_k88]
 //= 2.2 Final fix of the Kafra Pass Exploit! [Lupus] a -Izlude[4] fix
@@ -39,7 +39,7 @@
 //= 5.1a Temporary? Added F_ClearGarbage to clear unused/outdated variables [Lupus]
 //= 5.2 By default commented out custom Guilds Kafra's "Guild Storage". [Lupus]
 //= 5.3 uncommented Guild Storage. Confirmed kRO feature. [Lupus]
-//= 5.4 added -Guide option (Kafra shows you nearest Guide) Work in progress. 
+//= 5.4 added -Guide option (Kafra shows you nearest Guide) Work in progress.
 //=     Need all coords for all guides.. and somehow pass their coords to kafra.
 //=     Removed universal Kafra Pass, added 3 new Kafra Tickets [Lupus]
 //= 5.4b temporary moved "-Guide" from the 1st menu punct [Lupus]
@@ -47,7 +47,7 @@
 //=     Cleaned up the menus a bit. Got rid of the proceeding "-" prefix.
 //= 5.5b Missed a preceeding hyphen, which was screwing up teleporting. [L0ne_W0lf]
 //= 5.6 Further dialog updates, added  dynamic costs for cart and storage use. [L0ne_W0lf]
-//=     Updated some functions to handle Guild Kafras the way they should. 
+//=     Updated some functions to handle Guild Kafras the way they should.
 //= 5.6a Corrected a few wrong names in the teleport function. [L0ne_W0lf]
 //= 5.7 Correced end message no longer displaying, and the duplicate names [L0ne_W0lf]
 //=     Thanks to Barron-Monster for pointing out the issues.
@@ -63,7 +63,7 @@
 //= 6.6 Added Warp Points / View Points Function. [Joseph]
 //= 6.7 Added Rune Knight Kafra. [Euphy]
 //= 6.8 Updated some functions and added VIP features. [Euphy]
-//============================================================ 
+//============================================================
 
 //=== Main Function ========================================================
 //=   arg(0): Used to determine which welcome message to show.
@@ -78,97 +78,85 @@ function	script	F_Kafra	{
 	.@menu_num = getarg(1);
 
 	// Display Kafra Welcome Message
-	switch(.@welcome){
-		default:
-		case 0:
-			// Default message (obsolete)
-			mes "[Kafra Employee]";
-			mes "Welcome to the";
-			mes "Kafra Corporation.";
-			mes "The Kafra services";
-			mes "are always on your side.";
-			mes "How may I assist you?";
-			break;
-		case 1:
-			// Niflheim specific message
-			mes "[Kafra Employee]";
-			mes "^666666W-weeeelc-c-come";
-			mes "to th-the K-kaaafrrrra";
-			mes "C-coorpoor-r-ratioooonn...^000000";
-			break;
-		case 2:
-			// Guild Castle Kafra message
-			set @GID,getcharid(2);
-			mes "[Kafra Employee]";
-	 		mes "Welcome. ^ff0000" + GetGuildName(@GID) + "^000000 Member.";
-			mes "The Kafra Coporation will stay with you wherever you go.";
-			break;
-		case 3:
-			// Amatsu specific message (obsolete)
-			mes "[Kafra Employee]";
-			mes "So, have you come from a faraway land to study our culture, or are you just sightseeing?";
-			mes "In either case, why not stay awhile?";
-			mes "The air is eternally heavy with the";
-			mes "scent of pleasant wildflowers.";
-			break;		
-		case 4:
-			// Louyang and Ayothaya specific message (obsolete)
-			mes "[Kafra Employee]";
-			mes "With our many Kafra";
-			mes "service locations, you're never";
-			mes "far from home.";
-			break;		
-		case 5:
-			// NPC has it's own welcome message. (Display nothing)
-			break;
+	switch(.@welcome) {
+	default:// Default message (obsolete)
+		mes "[Kafra Employee]";
+		mes "Welcome to the";
+		mes "Kafra Corporation.";
+		mes "The Kafra services";
+		mes "are always on your side.";
+		mes "How may I assist you?";
+		break;
+	case 1:// Niflheim specific message
+		mes "[Kafra Employee]";
+		mes "^666666W-weeeelc-c-come";
+		mes "to th-the K-kaaafrrrra";
+		mes "C-coorpoor-r-ratioooonn...^000000";
+		break;
+	case 2:// Guild Castle Kafra message
+		mes "[Kafra Employee]";
+		mes "Welcome. ^ff0000" + getguildname( getcharid(2) ) + "^000000 Member.";
+		mes "The Kafra Coporation will stay with you wherever you go.";
+		break;
+	case 3:// Amatsu specific message (obsolete)
+		mes "[Kafra Employee]";
+		mes "So, have you come from a faraway land to study our culture, or are you just sightseeing?";
+		mes "In either case, why not stay awhile?";
+		mes "The air is eternally heavy with the";
+		mes "scent of pleasant wildflowers.";
+		break;
+	case 4:// Louyang and Ayothaya specific message (obsolete)
+		mes "[Kafra Employee]";
+		mes "With our many Kafra";
+		mes "service locations, you're never";
+		mes "far from home.";
+		break;
+	case 5:// NPC has it's own welcome message. (Display nothing)
+		break;
 	}
 	next;
-	while (1) {
-		deletearray @K_Menu0$[0],getarraysize(@K_Menu0$);
-		if (.@welcome == 2) {
-			// Guild Kafra Menu override (free Teleport, free Storage, Free Cart)
-			setarray @K_Menu0$[0],"Use Storage","Use Guild Storage","Rent a Pushcart","Use Teleport Service","Cancel";
-		} else {
-			switch(.@menu_num){
-				// Save and Storage only
-				case 1:	setarray @K_Menu0$[0],"Save","Use Storage","Cancel"; break;
-				// Storage only
-				case 2:	setarray @K_Menu0$[0],"Use Storage","Cancel"; break;
-				// No Teleport (Common)
-				case 3: setarray @K_Menu0$[0],"Save","Use Storage","Rent a Pushcart","Check Other Information","Cancel"; break;
-				// Case 4 is Einbroch no tele message.
-				// No save, or teleport. (Common)
-				case 5:	setarray @K_Menu0$[0],"Use Storage","Rent a Pushcart","Check Other Information","Cancel"; break;
-				// Storage and Check Other Information only.
-				case 6:	setarray @K_Menu0$[0],"Use Storage","Check Other Information","Cancel"; break;
-				// Save, Storage, and Pushcart only (Kafra Warehouse)
-				case 7:	setarray @K_Menu0$[0],"Save","Use Storage","Rent a Pushcart","Cancel"; break;
-				// Save, Storage, Other Check information. (Turbo track)
-				case 8: setarray @K_Menu0$[0],"Save","Use Storage","Check Other Information","Cancel"; break;
-				// No Save (Rune Knight)
-				case 9: setarray @K_Menu0$[0],"Use Storage","Rent a Pushcart","Use Teleport Service","Check Other Information","Cancel"; break;
-				// Storage, Save, and Pushcart (Dewata, reorder of case 7)
-				case 10: setarray @K_Menu0$[0],"Use Storage","Save","Rent a Pushcart","Cancel"; break;
-				// Default message (obsolete)
-				default: setarray @K_Menu0$[0],"Save","Use Storage","Use Teleport Service","Rent a Pushcart","Check Other Information","Cancel"; break;
-			}
+	if (.@welcome == 2)// Guild Kafra Menu override (free Teleport, free Storage, Free Cart)
+		setarray .@K_Menu0$[0], "Use Storage", "Use Guild Storage", "Rent a Pushcart", "Use Teleport Service", "Cancel";
+	else {
+		switch(.@menu_num) {
+			// Save and Storage only
+			case 1:	setarray .@K_Menu0$[0],"Save","Use Storage","Cancel"; break;
+			// Storage only
+			case 2:	setarray .@K_Menu0$[0],"Use Storage","Cancel"; break;
+			// No Teleport (Common)
+			case 3: setarray .@K_Menu0$[0],"Save","Use Storage","Rent a Pushcart","Check Other Information","Cancel"; break;
+			// Case 4 is Einbroch no tele message.
+			// No save, or teleport. (Common)
+			case 5:	setarray .@K_Menu0$[0],"Use Storage","Rent a Pushcart","Check Other Information","Cancel"; break;
+			// Storage and Check Other Information only.
+			case 6:	setarray .@K_Menu0$[0],"Use Storage","Check Other Information","Cancel"; break;
+			// Save, Storage, and Pushcart only (Kafra Warehouse)
+			case 7:	setarray .@K_Menu0$[0],"Save","Use Storage","Rent a Pushcart","Cancel"; break;
+			// Save, Storage, Other Check information. (Turbo track)
+			case 8: setarray .@K_Menu0$[0],"Save","Use Storage","Check Other Information","Cancel"; break;
+			// No Save (Rune Knight)
+			case 9: setarray .@K_Menu0$[0],"Use Storage","Rent a Pushcart","Use Teleport Service","Check Other Information","Cancel"; break;
+			// Storage, Save, and Pushcart (Dewata, reorder of case 7)
+			case 10: setarray .@K_Menu0$[0],"Use Storage","Save","Rent a Pushcart","Cancel"; break;
+			// Default message (obsolete)
+			default: setarray .@K_Menu0$[0],"Save","Use Storage","Use Teleport Service","Rent a Pushcart","Check Other Information","Cancel"; break;
 		}
-		set .@menu$,"";
-		for (set .@i, 0; .@i < getarraysize(@K_Menu0$); set .@i, .@i + 1)
-			set .@menu$, .@menu$ + @K_Menu0$[.@i] + ":";	
-		set .@j, select (.@menu$) - 1;
-		if (@K_Menu0$[.@j] == "Save") {
+	}
+	.@menu$ = implode(.@K_Menu0$,":");
+	while (true) {
+		.@j = select(.@menu$) - 1;
+		if (.@K_Menu0$[.@j] == "Save")
 			return;
-		} else if (@K_Menu0$[.@j] == "Use Storage") {
-			// Do not charge for Guild Storage
-			if(.@welcome == 2) 
+		else if (.@K_Menu0$[.@j] == "Use Storage") {
+			if (.@welcome == 2)// Do not charge for Guild Storage
 				callfunc "F_KafStor",2,0,0;
-			else 
+			else
 				callfunc "F_KafStor",0,getarg(3),.@welcome;
 			next;
-		} else if (@K_Menu0$[.@j] == "Use Teleport Service") {
-			// Display Einbroch "No Teleport Service" notice.
-			if(.@menu_num != 4) callfunc "F_KafTele",.@welcome;
+		}
+		else if (.@K_Menu0$[.@j] == "Use Teleport Service") {
+			if (.@menu_num != 4)// Display Einbroch "No Teleport Service" notice.
+				callfunc "F_KafTele",.@welcome;
 			else {
 				mes "[Kafra Employee]";
 				mes "Because of the ^FF0000Limited";
@@ -184,16 +172,20 @@ function	script	F_Kafra	{
 				mes "understanding and cooperation.";
 			}
 			next;
-		} else if (@K_Menu0$[.@j] == "Rent a Pushcart") {
-			if(callfunc("F_KafCart",.@welcome,getarg(4)) == 1) 
+		}
+		else if (.@K_Menu0$[.@j] == "Rent a Pushcart") {
+			if (callfunc("F_KafCart",.@welcome,getarg(4)) == 1)
 				next;
-		} else if (@K_Menu0$[.@j] == "Check Other Information") {
+		}
+		else if (.@K_Menu0$[.@j] == "Check Other Information") {
 			callfunc "F_KafInfo",getarg(2);
 			next;
-		} else if (@K_Menu0$[.@j] == "Cancel"){
+		}
+		else if (.@K_Menu0$[.@j] == "Cancel") {
 			callfunc "F_KafEnd",.@welcome,0;
 			end;
-		} else if (@K_Menu0$[.@j] == "Use Guild Storage") {
+		}
+		else if (.@K_Menu0$[.@j] == "Use Guild Storage") {
 			callfunc "F_KafStor",1,0;
 			next;
 		}
@@ -208,20 +200,18 @@ function	script	F_KafStor	{
 	.@fee = getarg(1);
 
 	// Unable to access Guild Storage (Busy)
-	if(.@type == 1){
-		if(guildopenstorage()){
+	if (.@type == 1) {
+		if (guildopenstorage()) {
 			mes "[Kafra Employee]";
 			mes "I'm sorry but another guild member is using the guild storage";
 			mes "right now.  Please wait until that person is finished.";
-			close2;
-			cutin "", 255;
-			end;
+			close3;
 		}
 		cutin "", 255;
 		close;
 	}
 	// Unable to access Normal Storage (Insufficient Basic Skills)
-	if(!callfunc("F_CanOpenStorage")){
+	if (!callfunc("F_CanOpenStorage")) {
 		mes "[Kafra Employee]";
 		// Niflheim Specific Message
 		if (getarg(2) == 1) {
@@ -238,11 +228,12 @@ function	script	F_KafStor	{
 		return;
 	}
 	// Accessing Normal Storage (Skipped if accessing Storage from Guild castle)
-	if(.@type != 2){
+	if (.@type != 2) {
 		// Consume "Free Ticket for Kafra Storage" if available.
-		if(countitem(7059)) delitem 7059,1;
+		if (countitem(7059))
+			delitem 7059,1;
 		else {
-			if(Zeny<.@fee){
+			if (Zeny < .@fee) {
 				mes "[Kafra Employee]";
 				// Niflheim Specific Message
 				if (getarg(2) == 1) {
@@ -257,11 +248,11 @@ function	script	F_KafStor	{
 				mes "I'm sorry, but you don't";
 				mes "have enough zeny to use";
 				mes "the Storage Service. Our";
-				mes "Storage access fee is "+.@fee+" zeny.";
+				mes "Storage access fee is " + .@fee + " zeny.";
 				return;
 			}
-			set Zeny, Zeny-.@fee;
-			set RESRVPTS, RESRVPTS + (.@fee/5);
+			Zeny -= .@fee;
+			RESRVPTS += (.@fee/5);
 		}
 	}
 
@@ -271,7 +262,7 @@ function	script	F_KafStor	{
 		if (getarg(2) == 1) {
 			percentheal 0,-10;
 			mes "[Kafra Employee]";
-			for (set .@i, 0; .@i < 5; set .@i, .@i + 1)
+			for ( .@i = 0; .@i < 5; .@i++ )
 				mes "^666666Thank you.. for... using...^000000";
 		}
 		// Normal message
@@ -298,27 +289,24 @@ function	script	F_KafTele	{
 	mes "Please choose";
 	mes "your destination.";
 	next;
-	set .@menu$, "";
-	for (set .@i, 0; .@i <= 6; set .@i, .@i + 1)
-		set .@menu$, .@menu$ + @wrpC$[.@i] + ":";
-	set .@j, select (.@menu$) - 1;
-	if (@wrpC$[.@j] == "Cancel") return;
+	.@j = select( implode(@wrpC$,":") ) - 1;
+	if (@wrpC$[.@j] == "Cancel")
+		return;
 	// Consume "Free Ticket for Kafra Transportation" if available.
 	// Do not consume if in Guild castle
-	if(countitem(7060) > 0 && getarg(0) != 2) delitem 7060,1;
+	if (countitem(7060) > 0 && getarg(0) != 2)
+		delitem 7060,1;
 	else {
-		if (Zeny<@wrpP[.@j]){
+		if (Zeny < @wrpP[.@j]) {
 			mes "[Kafra Employee]";
 			mes "I'm sorry, but you don't have";
 			mes "enough zeny for the Teleport";
 			mes "Service. The fee to teleport";
-			mes "to "+@wrpD$[.@j]+" is "+@wrpP[.@j]+" zeny.";
-			close2;
-			cutin "", 255;
-			end;
+			mes "to " + @wrpD$[.@j] + " is " + @wrpP[.@j] + " zeny.";
+			close3;
 		}
-		set Zeny, Zeny - @wrpP[.@j];
-		set RESRVPTS, RESRVPTS + (@wrpP[.@j]/16);
+		Zeny -= @wrpP[.@j];
+		RESRVPTS += (@wrpP[.@j]/16);
 	}
 	cutin "", 255;
 	if (@wrpD$[.@j] == "Al De Baran") warp "aldebaran",168,112;
@@ -326,7 +314,12 @@ function	script	F_KafTele	{
 	else if (@wrpD$[.@j] == "Comodo") warp "comodo", 209, 143;
 	else if (@wrpD$[.@j] == "Comodo Pharos Beacon") warp "cmd_fild07", 127, 134;
 	else if (@wrpD$[.@j] == "Geffen") warp "geffen", 120, 39;
-	else if (@wrpD$[.@j] == "Izlude") { if (checkre(0)) warp "izlude", 128, 98; else warp "izlude", 91, 105; }
+	else if (@wrpD$[.@j] == "Izlude") {
+		if (checkre(RENEWAL) == true)
+			warp "izlude", 128, 98;
+		else
+			warp "izlude", 91, 105;
+	}
 	else if (@wrpD$[.@j] == "Juno") warp "yuno", 158, 125;
 	else if (@wrpD$[.@j] == "Mjolnir Dead Pit") warp "mjolnir_02", 99, 351;
 	else if (@wrpD$[.@j] == "Morroc") warp "morocc", 156, 46;
@@ -343,11 +336,11 @@ function	script	F_KafTele	{
 //===================================================
 function	script	F_KafCart	{
 	// Ensure that the class wanting to rent a pushcart is a merchant
-	if(BaseClass != Job_Merchant){
+	if (BaseClass != Job_Merchant) {
 		mes "[Kafra Employee]";
 		mes "I'm sorry, but the";
 		mes "Pushcart rental service";
-		if (checkre(0))
+		if (checkre(RENEWAL) == true)
 			mes "is only available to Merchant classes.";
 		else {
 			mes "is only available to Merchants,";
@@ -357,7 +350,7 @@ function	script	F_KafCart	{
 		return 1;
 	}
 	// Make sure the invoking character does not have a cart already
-	else if(checkcart() == 1){
+	else if (checkcart() == true) {
 		mes "[Kafra Employee]";
 		mes "You already have";
 		mes "a Pushcart equipped.";
@@ -367,31 +360,34 @@ function	script	F_KafCart	{
 		return 1;
 	}
 	// Check if the player has the Pushcart skill
-	else if(getskilllv("MC_PUSHCART") == 0) {
+	else if (getskilllv("MC_PUSHCART") == 0) {
 		mes "[Kafra Employee]";
 		mes "You can only rent a cart after learning the \"Push Cart\" skill.";
 		return 1;
 	}
 	// Consume "Free Ticket for the Cart Service" if available.
 	// Do not consume if in Guild castle.
-	if(countitem(7061) > 0 && getarg(0) != 2) delitem 7061,1;
+	if (countitem(7061) > 0 && getarg(0) != 2)
+		delitem 7061,1;
 	else {
+		.@rental_fee = getarg(1);
 		mes "[Kafra Employee]";
 		mes "The Pushcart rental";
-		mes "fee is "+getarg(1)+" zeny. Would";
+		mes "fee is " + .@rental_fee + " zeny. Would";
 		mes "you like to rent a Pushcart?";
 		next;
-		if (select("Rent a Pushcart.:Cancel") == 2) return 0;
-			if(Zeny<getarg(1)){
-				mes "[Kafra Employee]";
-				mes "I'm sorry, but you";
-				mes "don't have enough";
-				mes "zeny to pay the Pushcart";
-				mes "rental fee of "+getarg(1)+" zeny.";
-				return 1;
-			}
-			set Zeny,Zeny-getarg(1);
-			set RESRVPTS, RESRVPTS + 48;
+		if (select("Rent a Pushcart.:Cancel") == 2)
+			return 0;
+		if (Zeny < .@rental_fee) {
+			mes "[Kafra Employee]";
+			mes "I'm sorry, but you";
+			mes "don't have enough";
+			mes "zeny to pay the Pushcart";
+			mes "rental fee of " + .@rental_fee + " zeny.";
+			return 1;
+		}
+		Zeny -= .@rental_fee;
+		RESRVPTS += 48;
 	}
 	setcart;
 	return 1;
@@ -401,36 +397,44 @@ function	script	F_KafCart	{
 // Special Reserve Points Function
 //===================================================
 function	script	F_KafInfo	{
-	// Uncomment next line to block Kafra Storage Protection
-	//	set .@block, 1;
-		setarray .@m$, "Check Special Reserve Points.","Storage Password Service","Kafra Employee Locations","Cancel";
-		if (getarg(0) == 2) deletearray .@m$[1],2; // Port Malaya, Rune Knight
-		else if (.@block) deletearray .@m$[1],1;
-	while (1) {
-		set .@j, select(implode(.@m$,":")) - 1;
-		if (.@m$[.@j] == "Check Special Reserve Points.") {
+// Uncomment next line to block Kafra Storage Protection
+//	.@block = 1;
+	if (getarg(0) == 2)// Port Malaya, Rune Knight
+		setarray .@menu$[0], "Check Special Reserve Points.", "", "", "Cancel";
+	else if (.@block)
+		setarray .@menu$[0], "Check Special Reserve Points.", "", "Kafra Employee Locations", "Cancel";
+	else
+		setarray .@menu$[0], "Check Special Reserve Points.", "Storage Password Service", "Kafra Employee Locations", "Cancel";
+	.@menu_list$ = implode(.@menu$,":");
+	while (true) {
+		.@j = select(.@menu_list$) - 1;
+		switch(.@j) {
+		case 0:// Check Special Reserve Points.
 			mes "[Kafra Employee]";
 			mes "Let's see...";
-			mes strcharinfo(0) + "...";
+			mes "" + strcharinfo(0) + "...";
 			mes "Ah, you have a total of";
-			mes RESRVPTS+ " Special Reserve Points.";
+			mes "" + RESRVPTS + " Special Reserve Points.";
 			next;
 			mes "[Kafra Employee]";
 			mes "You can exchange your";
 			mes "Special Reserve Points for";
 			mes "rewards at the Kafra Main Office in Al De Baran. Please use our";
 			mes "convenient services to see the benefits of our rewards program.";
+			if (getarg(0) == 1)
+				return;
 			next;
-			if(getarg(0) == 1) return;
-		} else if (.@m$[.@j] == "Kafra Employee Locations") {
-			for (set .@i, 0; .@i <= 3; set .@i, .@i + 1)
+			break;
+		case 1:// Storage Password Service
+			callfunc("F_SetKafCode","[Kafra Employee]","Kafra Services");
+		case 2:// Kafra Employee Locations
+			for ( .@i = 0; .@i <= 3; .@i++ )
 				viewpoint 1,@viewpX[.@i],@viewpY[.@i],(.@i+1),0xFF00FF;
 			next;
-			for (set .@i, 0; .@i <= 3; set .@i, .@i + 1)
+			for ( .@i = 0; .@i <= 3; .@i++ )
 				viewpoint 2,@viewpX[.@i],@viewpY[.@i],(.@i+1),0xFF00FF;
-		} else if (.@m$[.@j] == "Storage Password Service") {
-			callfunc("F_SetKafCode","[Kafra Employee]","Kafra Services");
-		} else {
+			break;
+		default:
 			return;
 		}
 	}
@@ -442,46 +446,39 @@ function	script	F_KafInfo	{
 //  arg(2): used to display the name of the area you're saving in.
 //===================================================================
 function	script	F_KafEnd	{
+	.@type = getarg(0);
 	mes "[Kafra Employee]";
-	if(getarg(1)==1) {	
-		// Save
+	if (getarg(1) == true) {// Save
 		mes "Your Respawn Point";
 		mes "has been saved here";
-		mes getarg(2)+".";
+		mes "" + getarg(2) + ".";
 		mes "Thank you for using";
 		mes "the Kafra Services.";
-	} else if(getarg(0)==0 || getarg(0)==5) {	
-		// Generic End
+	} else if (.@type == 0 || .@type == 5) {// Generic End
 		mes "We, here at Kafra Corporation,";
 		mes "are always endeavoring to provide you with the best services. We hope that we meet your adventuring needs and standards of excellence.";
-	} else if(getarg(0)==1) {
-		// Niflheim End
-		percentheal 0,- 25;
+	} else if (.@type == 1) {// Niflheim End
+		percentheal 0,-25;
 		mes "^666666Kaffffra n-never";
 		mes "diiiiiiiiiiiiiies. On...";
 		mes "On y-yooour siiiiide~^000000";
 	}
-	close2;
-	cutin "", 255;
-	end;
+	close3;
 }
 
 //===================================================
 // Check Storage Password Function
 //===================================================
 function	script	F_CheckKafCode	{
-	if(!#kafra_code) return;
+	if (!#kafra_code)
+		return;
 	mes "Enter your storage password:";
-	set @code_,0;
-	input @code_;
-	if(@code_ != #kafra_code) {
+	input .@code_;
+	if (.@code_ != #kafra_code) {
 		dispbottom "Wrong storage password.";
-		close2;
-		cutin "",255;
-		end;
+		close3;
 	}
-	set @kafcode_try,0;
-	set @code_,0;
+	@kafcode_try = 0;
 	return;
 }
 
@@ -494,86 +491,85 @@ function	script	F_SetKafCode	{
 	.@comp_name$ = getarg(1);
 
 	mes .@npc_name$;
-	if(#kafra_code) {
-		mes "Your storage is protected with a password. What would you do now?";
+	if (#kafra_code == 0) {
+		mes "" + .@comp_name$ + " proudly presents you a new service:";
+		mes "Additional storage protection with a password.";
 		next;
-		switch (select("Change old password -> 5000z:Remove storage password -> 1000z:Cancel")) {
-			case 1:
-				mes .@npc_name$;
-				mes "At first, please enter your ^0000FFold password^000000.";
-				set @code,callfunc("F_EntKafCode");
-				if(!@code || @code != #kafra_code) {
-					mes "Wrong password. You can't set a new password.";
-					emotion ET_SCRATCH;
-					break;
-				}
-				next;
-				callsub S_SET,.@npc_name$,.@comp_name$;
-				break;
-			case 2:
-				mes .@npc_name$;
-				mes "Please, enter your password before its removal.";
-				set @code,callfunc("F_EntKafCode");
-				if(!@code) {
-					mes "The password hasn't been removed.";
-					emotion ET_SCRATCH;
-					break;
-				}
-				next;
-				mes .@npc_name$;
-				if(Zeny < 1000) {
-					mes "You don't have enough zeny.";
-					emotion ET_MONEY;
-					break;
-				}
-				set Zeny,Zeny-1000;
-				if(@code == #kafra_code) {
-					set #kafra_code,0;
-					mes "You've successfully cleared your storage password.";
-					mes "Thank you for using "+.@comp_name$+".";
-					emotion ET_THANKS;
-				} else {
-					mes "Wrong password. We won't return your 1000z.";
-					mes "Please, next time enter correct password.";
-					emotion ET_SORRY;
-				}
-				break;
-			case 3:
-				break;
+		if (select( "Set new password -> 5000z", "Cancel" ) == 1)
+			callsub( S_SET, .@npc_name$, .@comp_name$ );
+		close3;
+	}
+	mes "Your storage is protected with a password. What would you do now?";
+	next;
+	switch( select( "Change old password -> 5000z", "Remove storage password -> 1000z", "Cancel" ) ) {
+	case 1:
+		mes .@npc_name$;
+		mes "At first, please enter your ^0000FFold password^000000.";
+		.@code = callfunc("F_EntKafCode");
+		if (!.@code || .@code != #kafra_code) {
+			mes "Wrong password. You can't set a new password.";
+			emotion ET_SCRATCH;
+			break;
 		}
-	} else {
-		mes .@comp_name$+" proudly presents you a new service:";
-		mes "Additional storage protection with a password.";
 		next;
-		switch (select("Set new password -> 5000z:Cancel")) {
-			case 1: callsub S_SET,.@npc_name$,.@comp_name$; break;
-			case 2: break;		
+		callsub( S_SET, .@npc_name$, .@comp_name$ );
+		break;
+	case 2:
+		mes .@npc_name$;
+		mes "Please, enter your password before its removal.";
+		.@code = callfunc("F_EntKafCode");
+		if (!.@code) {
+			mes "The password hasn't been removed.";
+			emotion ET_SCRATCH;
+			break;
+		}
+		next;
+		mes .@npc_name$;
+		if (Zeny < 1000) {
+			mes "You don't have enough zeny.";
+			emotion ET_MONEY;
+			break;
+		}
+		Zeny -= 1000;
+		if (.@code == #kafra_code) {
+			#kafra_code = 0;
+			mes "You've successfully cleared your storage password.";
+			mes "Thank you for using " + .@comp_name$ + ".";
+			emotion ET_THANKS;
+		} else {
+			mes "Wrong password. We won't return your 1000z.";
+			mes "Please, next time enter correct password.";
+			emotion ET_SORRY;
 		}
+		break;
+	case 3:
+		break;
 	}
-	close2;
-	cutin "",255;
-	end;
+	close3;
 
 S_SET:
+	.@npc_name$ = getarg(0);
+	.@comp_name$ = getarg(1);
+
 	mes .@npc_name$;
 	mes "Now enter your ^FF0000new password^000000 to protect your storage from thieves.";
-	set @code,callfunc("F_EntKafCode");
-	if(!@code) {
+	.@code = callfunc("F_EntKafCode");
+	if (!.@code) {
 		mes "The password hasn't been changed.";
 		emotion ET_SCRATCH;
 		return;
 	}
 	next;
 	mes .@npc_name$;
-	if(Zeny < 5000) {
+	if (Zeny < 5000) {
 		mes "You don't have enough zeny.";
 		emotion ET_MONEY;
 		return;
 	}
-	set Zeny,Zeny-5000;
-	set #kafra_code,@code;
+	Zeny -= 5000;
+	#kafra_code = .@code;
 	mes "You've protected your storage with a secret password.";
-	mes "Thank you for using "+.@comp_name$+".";
+	mes "Thank you for using " + .@comp_name$ + ".";
 	emotion ET_THANKS;
 	return;
 }
@@ -583,88 +579,92 @@ S_SET:
 //===================================================
 function	script	F_EntKafCode	{
 	mes "Enter a number 1000~10000000:";
-	set @code_,0;
-	set @kafcode_try,@kafcode_try+1;
-	if(@kafcode_try>10) {
-		set @kafcode_try,0;
+	@kafcode_try += 1;
+	if (@kafcode_try > 10) {
+		@kafcode_try = 0;
 		logmes "Tried to fit storage password.";
+		return 0;
 	}
-	if(input(@code_) == 1) {
+	if (input(.@code_) == 1) {
 		mes "You can't use such big password.";
 		return 0;
 	}
-	if(@code_<1000) {
+	if (.@code_ < 1000) {
 		mes "You shouldn't use such short password.";
 		return 0;
 	}
-	return @code_;
+	return .@code_;
 }
 
 //===================================================
 // Warp Points / View Points Function
 //===================================================
 function	script	F_KafSet	{
-	cleararray @wrpC$[0],"",getarraysize(@wrpC$);
-	cleararray @wrpD$[0],"",getarraysize(@wrpD$);
-	cleararray @wrpP$[0],"",getarraysize(@wrpP$);
-	cleararray @viewpX[0],"",getarraysize(@viewpX);
-	cleararray @viewpY[0],"",getarraysize(@viewpY);
-	if (strnpcinfo(4) == "prontera") {
+	deletearray @wrpC$[0], getarraysize(@wrpC$);
+	deletearray @wrpD$[0], getarraysize(@wrpD$);
+	deletearray @wrpP$[0], getarraysize(@wrpP$);
+	deletearray @viewpX[0], getarraysize(@viewpX);
+	deletearray @viewpY[0], getarraysize(@viewpY);
+
+	.@map$ = strnpcinfo(4);
+	if (.@map$ == "prontera") {
 		setarray @wrpD$[0], "Izlude", "Geffen", "Payon", "Morroc", "Orc Dungeon", "Alberta";
 		setarray @wrpP[0], 600, 1200, 1200, 1200, 1700, 1800;
 		setarray @viewpX[0], 151, 29, 282, 152;
 		setarray @viewpY[0], 29, 207, 200, 326;
-	} else if (strnpcinfo(4) == "alberta") {
+	} else if (.@map$ == "alberta") {
 		setarray @wrpP[0], 1200, 1800, 1800;
 		setarray @wrpD$[0], "Payon", "Morroc", "Prontera";
 		setarray @viewpX[0], 28, 113, 0, 0;
 		setarray @viewpY[0], 229, 60, 0, 0;
-	} else if (strnpcinfo(4) == "aldebaran") {
+	} else if (.@map$ == "aldebaran") {
 		setarray @wrpP[0], 1200, 1200, 1800, 1700;
 		setarray @wrpD$[0], "Geffen", "Juno" , "Izlude", "Mjolnir Dead Pit";
-	} else if (strnpcinfo(4) == "comodo" ) {
+	} else if (.@map$ == "comodo" ) {
 		setarray @wrpD$[0], "Morroc", "Comodo Pharos Beacon", "Umbala";
 		setarray @wrpP[0], 1800, 1200, 1800;
-	} else if (strnpcinfo(4) == "cmd_fild07") {
+	} else if (.@map$ == "cmd_fild07") {
 		setarray @wrpD$[0], "Comodo", "Morroc";
 		setarray @wrpP[0], 1200, 1200;
-	} else if (strnpcinfo(4) == "geffen") {
+	} else if (.@map$ == "geffen") {
 		setarray @wrpD$[0], "Prontera", "Al De Baran", "Orc Dungeon", "Mjolnir Dead Pit";
 		setarray @wrpP[0], 1200, 1200, 1700, 1700;
 		setarray @viewpX[0], 120, 203;
 		setarray @viewpY[0], 62, 123;
-	} else if (strnpcinfo(4) == "izlude") {
+	} else if (.@map$ == "izlude") {
 		setarray @wrpD$[0], "Geffen", "Payon", "Morroc", "Al De Baran";
 		setarray @wrpP[0], 1200, 1200, 1200, 1800;
-	} else if (strnpcinfo(4) == "morocc") {
+	} else if (.@map$ == "morocc") {
 		setarray @wrpD$[0], "Prontera", "Payon", "Alberta", "Comodo", "Comodo Pharos Beacon";
 		setarray @wrpP[0], 1200, 1200, 1800, 1800, 1200;
 		setarray @viewpX[0], 156, 163, 28, 292;
 		setarray @viewpY[0], 97, 260, 167, 211;
-	} else if (strnpcinfo(4) == "umbala") {
+	} else if (.@map$ == "umbala") {
 		setarray @wrpD$[0], "Comodo";
 		setarray @wrpP[0], 1800;
-	} else if (strnpcinfo(4) == "payon") {
+	} else if (.@map$ == "payon") {
 		setarray @wrpD$[0], "Prontera", "Alberta", "Morroc";
 		setarray @wrpP[0], 1200, 1200, 1200;
-	} else if (strnpcinfo(4) == "yuno") {
+	} else if (.@map$ == "yuno") {
 		setarray @wrpD$[0], "Al De Baran";
 		setarray @wrpP[0], 1200;
 		setarray @viewpX[0], 328, 278, 153, 0;
 		setarray @viewpY[0], 108, 221, 187, 0;
-	} else if (strnpcinfo(4) == "job3_rune01") {
+	} else if (.@map$ == "job3_rune01") {
 		setarray @wrpD$[0], "Izlude", "Geffen", "Payon", "Morroc", "Alberta";
 		setarray @wrpP[0], 600, 1200, 1200, 1200, 1800;
 	}
 
+	.@warp_size = getarraysize(@wrpD$);
+
 	// VIP pricing varies across the regional servers; this is most practical.
 	if (VIP_SCRIPT && !vip_status(VIP_STATUS_ACTIVE)) {
-		for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
-			setd "@wrpP["+.@i+"]",getd("@wrpP["+.@i+"]") * 2;
+		for ( .@i = 0; .@i < .@warp_size; .@i++ )
+			@wrpP[.@i] *= 2;
 	}
 
-	for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
-		setd "@wrpC$["+.@i+"]",getd("@wrpD$["+.@i+"]")+" -> "+getd("@wrpP["+.@i+"]")+" z";
-	setd "@wrpC$["+getarraysize(@wrpC$)+"]","Cancel";
+	for ( .@i = 0; .@i < .@warp_size; .@i++ )
+		@wrpC$[.@i] = @wrpD$[.@i] + " -> " + @wrpP[.@i] + " z";
+	@wrpC$[ .@warp_size ] = "Cancel";
 	return;
 }

+ 4 - 4
npc/kafras/kafras.txt

@@ -427,7 +427,7 @@ moscovia,223,191,3	script	Kafra Employee::kaf_mosk	114,{
 	cutin "kafra_04",2;
 	callfunc "F_Kafra",0,3,0,80,700;
 	savepoint "moscovia",221,194,1,1;
-	callfunc "F_KafEnd",0,3,"in the city of Moscovia";
+	callfunc "F_KafEnd",0,1,"in the city of Moscovia";
 }
 
 // Amatsu
@@ -628,7 +628,7 @@ prt_fild05,290,224,3	script	Kafra Employee::prt_fild05	114,{
 	mes "what can I do for you today?";
 	callfunc "F_Kafra",5,1,1,40,0;
 	savepoint "prt_fild05",274,243,1,1;
-	callfunc "F_KafEnd",0,1, "at the Prontera Culverts";
+	callfunc "F_KafEnd",0,1,"at the Prontera Culverts";
 }
 
 // - Coal Mine (Dead Pitt)
@@ -657,7 +657,7 @@ moc_ruins,59,157,5	script	Kafra Employee::moc_ruins	114,{
 	mes "what can I do for you today?";
 	callfunc "F_Kafra",5,2,1,90,1200;
 	savepoint "moc_ruins",41,141,1,1;
-	callfunc "F_KafEnd",0,1," at the Pyramids";
+	callfunc "F_KafEnd",0,1,"at the Pyramids";
 }
 
 // - Orc Dungeon
@@ -685,5 +685,5 @@ alb2trea,59,69,5	script	Kafra Employee::kaf_alb2trea	117,{
 	mes "How may I assist you?";
 	callfunc "F_Kafra",5,2,1,50,0;
 	savepoint "alb2trea",92,64,1,1;
-	callfunc "F_KafEnd",0,1,0,"at Sunken Ship";
+	callfunc "F_KafEnd",0,1,"at Sunken Ship";
 }

+ 8 - 0
npc/other/Global_Functions.txt

@@ -759,3 +759,11 @@ function	script	close3	{
 	cutin "",255;
 	end;
 }
+
+//////////////////////////////////////////////////////////////////////////////////
+// Return true if the card is a charm (enchant card), false otherwise.
+//////////////////////////////////////////////////////////////////////////////////
+function	script	F_IsCharm	{
+	.@id = getarg(0);
+	return ((.@id >= 4700 && .@id < 5000) || (.@id >= 29000 && .@id <= 29162));
+}

+ 2 - 2
npc/other/turbo_track.txt

@@ -51,12 +51,12 @@ OnStartArena:
 OnInit:
 	if (compare(strnpcinfo(0),"main")) end;
 	if (compare(strnpcinfo(2),"n1")) {
-		waitingroom "Solo Mode",60,"Solo Mode#n1::OnStartArena",1;
+		waitingroom "Solo Mode",60,"Solo Mode#n1::OnStartArena",1,1000,10;
 	} else {
 		if (compare(strnpcinfo(1),"4")) set .@in, 4;
 		if (compare(strnpcinfo(1),"8")) set .@in, 8;
 		if (compare(strnpcinfo(1),"16")) set .@in, 16;
-		waitingroom strnpcinfo(1),60,strnpcinfo(0)+"::OnStartArena",.@in,1000,10,99;
+		waitingroom strnpcinfo(1),60,strnpcinfo(0)+"::OnStartArena",.@in,1000,10;
 	}
 	enablewaitingroomevent strnpcinfo(0);
 	end;

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

@@ -1031,7 +1031,7 @@ OnTouch:
 2@pump,1,1,4	duplicate(Monster Hole#n)	Monster Hole#h	-1
 2@pump,1,1,4	duplicate(Boss Creation#n)	Boss Creation#h	-1
 2@pump,39,88,4	duplicate(Missing, the Cleaner#no)	Missing, the Cleaner#ho	545
-2@pump,38,100,0	duplicate(Culvert Entrance#n)	Culvert Entrance#h	45,3,3
+2@pump,38,100,0	duplicate(Culvert Entrance#n)	Culvert Entrance#h	3,3
 
 //MD_Putmob "2@pump" 0 0 0 0 20 HYDRA 0 0 2
 2@pump,1,1,4	duplicate(Hydra#n)	Hydra#h	-1

+ 17 - 15
npc/re/merchants/card_separation.txt

@@ -105,7 +105,8 @@
 		break;
 	}
 
-	setarray .@equip_card[0], getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
+	setarray .@check_equip_card[0], getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
+	setarray .@equip_card[0], .@check_equip_card[0], .@check_equip_card[1], .@check_equip_card[2], .@check_equip_card[3];
 	set .@mvp_list$,
 		"|4408|4128|4456|4168|4142"+  //Gloom_Under_Night_Card, Golden_Bug_Card, Nidhogg_Shadow_Card, Dark_Lord_Card, Doppelganger_Card
 		"|4134|4137|4386|4407|4357"+  //Dracula_Card, Drake_Card, Detale_Card, Randgris_Card, B_Seyren_Card
@@ -118,9 +119,9 @@
 		"|4363|4324|4361|4330|4342|"; //B_Magaleta_Card, Garm_Card, B_Harword_Card, Dark_Snake_Lord_Card, Rsx_0806_Card
 
 	if (.@Jeremy) {
-		for(set .@i,0; .@i<4; set .@i,.@i+1) {
-			if (.@equip_card[.@i] >= 4700) // Armor Enchant System
-				set .@equip_card[.@i],0;
+		for ( .@i = 0; .@i < MAX_SLOTS; .@i++ ) {
+			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		if (!getarraysize(.@equip_card)) {
 			mes .@n$;
@@ -136,7 +137,7 @@
 		// Official "Richard" script uses a hardcoded list including every possible item.
 		//if (!getequipisequiped(.@equip_num)) {
 		//	mes "[Richard]";
-		//	mes "I'm sorry. We don't provide that equipmnet yet.";
+		//	mes "I'm sorry. We don't provide that equipment yet.";
 		//	close;
 		//}
 
@@ -144,11 +145,12 @@
 		mes "Which number socket do you want to separate the card? From the left socket, they are sorted 1,2,3,4.";
 		next;
 		set .@menu$,"";
-		for(set .@i,0; .@i<4; set .@i,.@i+1) {
-			if (.@equip_card[.@i] && .@equip_card[.@i] < 4700) // Armor Enchant System
-				set .@menu$, .@menu$+"Socket "+(.@i+1)+" - "+getitemname(.@equip_card[.@i])+":";
-			else
-				set .@menu$, .@menu$+"^777777Socket "+(.@i+1)+" - No card^000000:";
+		for ( .@i = 0; .@i < MAX_SLOTS; .@i++ ) {
+			if (.@equip_card[.@i] && callfunc("F_IsCharm",.@equip_card[.@i]) == false) // Armor Enchant System
+				.@menu$ = .@menu$ + "Socket " + (.@i+1) + " - " + getitemname(.@equip_card[.@i])+":";
+			else {
+				.@menu$ = .@menu$ + "^777777Socket " + (.@i+1) + " - No card^000000:";
+			}
 		}
 		set .@i, select("Stop the work:"+.@menu$);
 		switch(.@i) {
@@ -158,7 +160,7 @@
 			close;
 		default:
 			set .@slot, .@i-2;
-			if (.@equip_card[.@slot] == 0 || .@equip_card[.@slot] >= 4700) {
+			if (.@equip_card[.@slot] == 0 || callfunc("F_IsCharm",.@equip_card[.@slot]) == true) {
 				mes .@n$;
 				mes "This socket is not equipped with any card. Why don't you check again?";
 				close;
@@ -287,7 +289,7 @@
 	set .@equip_refine, getequiprefinerycnt(.@equip_num);
 
 	// anti-hack
-	if (callfunc("F_IsEquipCardHack", .@equip_num, .@equip_card[0], .@equip_card[1], .@equip_card[2], .@equip_card[3]))
+	if (callfunc("F_IsEquipCardHack", .@equip_num, .@check_equip_card[0], .@check_equip_card[1], .@check_equip_card[2], .@check_equip_card[3]))
 		close;
 
 	delequip .@equip_num;
@@ -314,12 +316,12 @@
 		}
 	} else {
 		set .@card, .@equip_card[.@slot];
-		set .@equip_card[.@slot],0;
+		set .@check_equip_card[.@slot],0;
 
-		// Chance of retaining equipment.
+		// Chance of retaining equipment (all enchantments are preserved).
 		if (rand(1,.@sf_w_num) < 61) {
 			set .@equip_safe,1;
-			getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+			getitem2 .@equip_id,1,1,.@equip_refine,0,.@check_equip_card[0],.@check_equip_card[1],.@check_equip_card[2],.@check_equip_card[3];
 		}
 
 		// Chance of retaining card.

+ 5 - 5
npc/re/merchants/enchan_ko.txt

@@ -258,15 +258,15 @@ que_ng,75,20,3	script	Artisan Tene#ko	762,{
 
 	// Initialization
 	if (.@select == 2) {
-		if (.@sot03_ck) {
-			if (.@equip_card[2] < 4700) { // Armor Enchant System
+		if (.@sot03_ck) {// reset only 3rd slot
+			if (callfunc("F_IsCharm",.@equip_card[2]) == false) { // Armor Enchant System
 				mes "[Artisan Tene]";
 				mes "The third slot is is not enchanted. Please check again."; //custom translation
 				close;
 			}
 			set .@equip_card[2],0;
 		} else {
-			if (.@equip_card[3] < 4700) { // Armor Enchant System
+			if (callfunc("F_IsCharm",.@equip_card[3]) == false) { // Armor Enchant System
 				mes "[Artisan Tene]";
 				mes "This equipment is is not enchanted. Please check again."; //custom translation
 				close;
@@ -294,8 +294,8 @@ que_ng,75,20,3	script	Artisan Tene#ko	762,{
 	else                           set .@ko_type01,5;
 
 	//custom translations
-	if (.@equip_card[3] >= 4700) { // Armor Enchant System
-		if (.@equip_card[2] >= 4700) {
+	if (callfunc("F_IsCharm",.@equip_card[3]) == true) { // Armor Enchant System
+		if (callfunc("F_IsCharm",.@equip_card[2]) == true) {
 			mes "[Artisan Tene]";
 			mes "This equipment cannot be further enchanted.";
 			next;

+ 3 - 3
npc/re/merchants/enchan_mal.txt

@@ -649,9 +649,9 @@ L_Socket:
 		delequip EQI_HAND_R;
 
 //		GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
-		for(set .@i,0; .@i<4; set .@i,.@i+1) {
-			if (.@equip_card[.@i] >= 4700) // Armor Enchant System
-				set .@equip_card[.@i],0;
+		for ( .@i = getiteminfo(.@equip_id,10); .@i < MAX_SLOTS; .@i++ ) {
+			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
 

+ 3 - 3
npc/re/merchants/enchan_mora.txt

@@ -1150,9 +1150,9 @@ L_Socket:
 		delequip .@part;
 
 //		GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
-		for(set .@i,0; .@i<4; set .@i,.@i+1) {
-			if (.@equip_card[.@i] >= 4700) // Armor Enchant System
-				set .@equip_card[.@i],0;
+		for ( .@i = getiteminfo(.@equip_id,10); .@i < MAX_SLOTS; .@i++ ) {
+			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
 

+ 1 - 1
npc/re/merchants/enchan_upg.txt

@@ -250,7 +250,7 @@ prt_in,28,73,3	script	Devil Enchant Master#prq	63,{
 			mes "You need to bring some money to initialize!!";
 			close;
 		}
-		if (.@equip_card[3] < 4700) { // Armor Enchant System
+		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
 			mes "This item is not enchanted!";
 			close;
 		}

+ 11 - 0
npc/re/other/achievements.txt

@@ -276,3 +276,14 @@ yuno_fild07,113,339,0	duplicate(ach_treasure#core)	#yuno_ach7::120058	HIDDEN_WAR
 yuno_fild08,179,209,0	duplicate(ach_treasure#core)	#yuno_ach8::120059	HIDDEN_WARP_NPC,5,5
 yuno_fild09,166,228,0	duplicate(ach_treasure#core)	#yuno_ach9::120060	HIDDEN_WARP_NPC,5,5
 yuno_fild11,141,357,0	duplicate(ach_treasure#core)	#yuno_ach10::120061	HIDDEN_WARP_NPC,5,5
+
+// If the feature is turned off these NPCs are useless
+-	script	AchievementInit	-1,{
+	end;
+
+OnInit:
+	if( !getbattleflag( "feature.achievement" ) ){
+		unloadnpc "ach_treasure#core";
+	}
+	end;
+}

+ 1296 - 0
npc/re/quests/quests_14_3.txt

@@ -0,0 +1,1296 @@
+//===== rAthena Script =======================================
+//= Quest NPCs related to episode 14.3
+//===== Description: =========================================
+//= [Walkthrough Conversion]
+//- Dimensional Travel Quest (access to Flame Basin / Flame Cave)
+//- Others NPCs related to ep14.3
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//============================================================
+
+// Dimensional Travel Quest
+morocc,138,238,4	script	Piled Rags#ep14bs	4_M_DIEMAN,{
+	if (checkweight(501,1) == 0 || (MaxWeight - Weight) < 1000) {
+		mes "- You are carrying too many items to proceed with the quest. -";
+		close;
+	}
+	if (BaseLevel < 140) {
+		mes "- There is a pile of dirty rags. -";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 0) {
+		mes "- There is a pile of dirty rags. -";
+		next;
+		if (select( "Leave it.", "Remove it." ) == 1) {
+			mes "- You left the pile of dirty rags where it is. -";
+			close;
+		}
+		mes "[???]";
+		mes "Ugh...";
+		next;
+		mes "- A moan is heard underneath the pile of rags. -";
+		next;
+		if (select( "Run.", "Shake the rags." ) == 1) {
+			mes "- Startled, you ran. -";
+			close;
+		}
+		mes "[" + strcharinfo(0) + "]";
+		mes "Hey,";
+		mes "wake up!";
+		next;
+		mes "[???]";
+		mes "Ugh...";
+		next;
+		mes "[" + strcharinfo(0) + "]";
+		mes "Are you all right?";
+		next;
+		mes "[???]";
+		mes "Ugh...";
+		mes "I n-need food...";
+		mes "I could even eat ^0000FFMonster's Feed^000000. Please...";
+		next;
+		mes "- Again he lost consciousness, exhausted just from talking.";
+		mes "You should feed him ^0000FFMonster's Feed^000000. -";
+		setquest 11349;// Dimensional Travel
+		ep14_3_dimensional_travel = 1;
+		close;
+	}
+	if (ep14_3_dimensional_travel < 3) {
+		if (ep14_3_dimensional_travel == 2)
+			cutin "ep143_tadir.bmp",2;
+		else {
+			if (countitem(528) < 1) {
+				mes "- Again he lost consciousness, exhausted just from talking.";
+				mes "You should feed him ^0000FFMonster's Feed^000000. -";
+				close;
+			}
+			mes "[???]";
+			mes "Ugh...";
+			next;
+			if (select( "Leave it.", "Give Monster's Feed." ) == 1) {
+				mes "[???]";
+				mes "Ugh... H-help...";
+				close;
+			}
+			mes "[???]";
+			mes "Ugh...";
+			mes "Yuck!";
+			cutin "ep143_tadir.bmp",2;
+			delitem 528,1;// Monster's Feed
+			completequest 11349;// Dimensional Travel
+			setquest 11350;// Dimensional Travel
+			ep14_3_dimensional_travel = 2;
+			next;
+			mes "[???]";
+			mes "*Chomp Chomp*";
+			mes "*Barf*";
+			next;
+			mes "[???]";
+			mes "Phew...";
+			next;
+			mes "[" + strcharinfo(0) + "]";
+			mes "Are you all right?";
+			next;
+			mes "[???]";
+			mes "*Retch* Oh, yes, thanks to you.";
+			mes "*Retch*";
+			next;
+			mes "[???]";
+			mes "I thought I was going to die. I'm lucky to be alive.";
+			next;
+			mes "[???]";
+			mes "I've been having nothing but bad luck lately.";
+			next;
+			mes "[???]";
+			mes "I got sucked into some strange place, separated from the rest of my party. The place I arrived was terrible. There was no sign of Human habitation.";
+			next;
+			mes "[???]";
+			mes "It's a miracle that I'm here.";
+			next;
+			mes "[???]";
+			mes "I lucked out.";
+			mes "Still alive.";
+			mes "Hah hah hah!";
+			next;
+			mes "[???]";
+			mes "Oh!";
+			mes "Where are my manners? I forgot to thank you properly.";
+			next;
+			mes "[???]";
+			mes "Thank you";
+			mes "for feeding me, though the feed tasted horrible.";
+			next;
+			mes "[???]";
+			mes "I'm glad I didn't die on the street. The world is still a beautiful place.";
+			mes "I'm moved.";
+			next;
+			mes "[Tamarin]";
+			mes "My name is ^0000FFTamarin^000000.";
+			mes "I'm an adventurer, and no, this isn't my preferred attire.";
+			next;
+			select("Introduce yourself.");
+			mes "[Tamarin]";
+			mes "" + strcharinfo(0) + ", huh? That's a good name.";
+			next;
+		}
+		mes "[Tamarin]";
+		mes "Ah,";
+		mes "I'd better do something before people start asking if I'm homeless.";
+		next;
+		mes "[Tamarin]";
+		mes "Do you know a place where I can wash myself?";
+		next;
+		if (select( "Tell him the place.", "Say you don't know." ) == 2) {
+			mes "[Tamarin]";
+			mes "Water is scarce in the desert, huh?";
+			close3;
+		}
+		mes "[Tamarin]";
+		mes "Ah,";
+		mes "do you mean the ^0000FFoasis near the northwestern sphinx^000000?";
+		next;
+		mes "[Tamarin]";
+		mes "I've been in Morroc, but this is my first time inside the village.";
+		mes "I remember hearing that the place holds special water.";
+		next;
+		mes "[Tamarin]";
+		mes "I feel excited to wash myself with the special water!";
+		mes "I'm going to the oasis now. Could you wait for me?";
+		next;
+		mes "[Tamarin]";
+		mes "It'll take a while before I feel strong again, but at least I can walk on my own.";
+		mes "Hah hah hah!";
+		next;
+		if (select( "Watch him.", "Accompany him." ) == 1) {
+			mes "[Tamarin]";
+			mes "(Braces himself and inhales.)";
+			mes "Wait, wait.";
+			mes "I can stand up on my own.";
+			next;
+			mes "[Tamarin]";
+			mes "Wait, wait!";
+			close3;
+		}
+		mes "[Tamarin]";
+		mes "How kind of you!";
+		mes "The world is still an okay place to live.";
+		next;
+		mes "[Tamarin]";
+		mes "Then, let's go to the ^0000FFoasis near the northwestern sphinx^000000.";
+		erasequest 11350;// Dimensional Travel
+		setquest 11351;// Dimensional Travel
+		ep14_3_dimensional_travel = 3;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 3) {
+		mes "[Tamarin]";
+		mes "How kind of you!";
+		mes "The world is still an okay place to live.";
+		cutin "ep143_tadir.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Then, let's go to the ^0000FFoasis near the northwestern sphinx^000000.";
+		close3;
+	}
+	mes "- There is a pile of dirty rags. -";
+	close;
+
+OnInit:
+	questinfo 11349, QTYPE_QUEST, 1;
+	setquestinfo_level 11349,140,175;
+	end;
+}
+
+moc_ruins,106,140,4	script	Tamarin#ep14bs_ru	4_M_TAMARIN,{
+	if (ep14_3_dimensional_travel == 3 || ep14_3_dimensional_travel == 4) {
+		if (ep14_3_dimensional_travel == 3) {
+			mes "[Tamarin]";
+			mes "Pah!";
+			mes "This feels great!";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "The water feels too warm for my liking, but beggars can't be choosers.";
+			cutin "ep143_tasta.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "You saved me from starvation, and took me to this great place. I must have been a great person in the past life";
+			mes "to deserve such kindness.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "I want to repay you, fellow adventurer.";
+			mes "I lost all my belongings when I fell into that strange hole and got separated from my party,";
+			cutin "ep143_tasta.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "but at least I can tell you an ^0000FFinteresting story^000000.";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "It's about the strange place I've been to.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			if (select( "Not interested.", "I'm listening." ) == 1) {
+				mes "[Tamarin]";
+				mes "All right, then.";
+				mes "I thought you were serious about adventuring.";
+				cutin "ep143_tahuk.bmp",2;
+				next;
+				mes "[Tamarin]";
+				mes "Then";
+				mes "do you want your Monster's Feed back?";
+				cutin "ep143_tasta.bmp",2;
+				next;
+				mes "[Tamarin]";
+				mes "*Retch*";
+				cutin "ep143_taang.bmp",2;
+				close3;
+			}
+			ep14_3_dimensional_travel = 4;
+			mes "[Tamarin]";
+			mes "I knew you'd be interested!";
+			mes "Nothing piques adventurers' interest like the story of a strange place, right?";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "Ahem.";
+			mes "The story begins with my journey to the ^0000FFOther World^000000, the latest hot spot for adventurers.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "Adventurer Tamarin and his party went on a journey to the land of the unknown, Other World.";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "Their journey was perilous, but they bravely moved forward.";
+			cutin "ep143_taang.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "Oh,";
+			mes "why am I speaking in the third-person perspective?";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "My original inspiration was Bard, but then I became a Hunter because my friends thought that suited me better.";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			select("Ask him to be more straightforward.");
+			mes "[Tamarin]";
+			mes "Yes.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "A while ago, my friends and I decided to explore the Other World together.";
+			cutin "ep143_tasta.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "Since it'd be our first visit to the Other World, we wanted to go to a more popular spot, but one of us wouldn't have it--he was so excited that he started acting out of control.";
+			cutin "ep143_taang.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "When I came back to my senses, I was alone in a strange place.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "The ^0000FFland was burning with perpetual flames^000000 that weren't too hot to touch, and ^0000FFstrange-looking plants and insects^000000 were crawling all over the place.";
+			next;
+			mes "[Tamarin]";
+			mes "At first I yelled for help and moved around hoping to find others, but all to no avail.";
+			next;
+			mes "[Tamarin]";
+			mes "After a few days of having nothing to eat, I started to eat anything I saw off the ground, and I had the worst diarrhea ever.";
+			cutin "ep143_taang.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "I didn't know how many days had passed before I saw a group of some entities that I thought were men at a glance.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "But ^0000FFthey looked too strange to pass as human^000000.";
+			mes "I couldn't talk to them, so I just jumped into the Crack that they came through.";
+			next;
+			mes "[Tamarin]";
+			mes "My knees gave way and I rolled on my side. When I looked around, I was back at the ^0000FFDimensional Crack^000000 where my friends and I first arrived.";
+			next;
+			mes "[Tamarin]";
+			mes "I came out through the ^0000FFMorroc Dimensional Teleporter^000000 and used every ounce of my energy to get to Morroc.";
+			next;
+			mes "[Tamarin]";
+			mes "Sigh...";
+			mes "I wonder if my friends are safe.";
+			cutin "ep143_tasta.bmp",2;
+			next;
+		}
+		mes "[Tamarin]";
+		mes "I should seek them out,";
+		mes "but first I want to go back to that strange place when I get my full strength back. Not many people have a chance to see such a special place, you know.";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Fortunately for me, with the ^0000FFMorroc restoration work^000000 underway, I shouldn't have a problem making money through some part-time jobs.";
+		next;
+		if (select( "Tell him have safe travel.", "Tell him you want to tag along." ) == 1) {
+			mes "[Tamarin]";
+			mes "I will.";
+			mes "Thank you for saving me.";
+			cutin "ep143_tahuk.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "This is the beauty of adventuring:";
+			mes "making new friends!";
+			cutin "ep143_tasmi.bmp",2;
+			next;
+			mes "[Tamarin]";
+			mes "I'll be in Morroc for a while, making some money and getting ready for another adventure. I hope I can see you again before I leave.";
+			close3;
+		}
+		mes "[Tamarin]";
+		mes "!!";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Do you mean it?";
+		next;
+		mes "[Tamarin]";
+		mes "By the gods I'm a lucky bastard!";
+		mes "*Sob*";
+		cutin "ep143_taang.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Then meet me at the ^0000FFDimensional Crack^000000. I need to replenish myself first.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "It may take a while for me to get everything packed, so get your other business done in the meantime.";
+		erasequest 11351;// Dimensional Travel
+		setquest 11352;// Dimensional Travel
+		ep14_3_dimensional_travel = 5;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 5) {
+		mes "[Tamarin]";
+		mes "Then meet me at the ^0000FFDimensional Crack^000000. I need to replenish myself first.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "It may take a while for me to get everything packed, so get your other business done in the meantime.";
+		close3;
+	}
+	mes "[Tamarin]";
+	mes "Pah!";
+	mes "This feels great!";
+	cutin "ep143_tasmi.bmp",2;
+	close3;
+}
+
+dali,112,69,4	script	Tamarin#ep14bs_cha	4_M_TAMARIN,{
+	if (ep14_3_dimensional_travel == 5) {
+		mes "[Tamarin]";
+		mes "" + strcharinfo(0) + ", over here!";
+		mes "You're early.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "(Glancing around surreptitiously)";
+		mes "I hope no one's watching us.";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "I've hidden the opening to that place: I didn't want anyone to get there before me.";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "At that time, I was too distracted to remember where the opening was, but I think it's definitely ^0000FFsomewhere on the 2nd floor^000000.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Meet me in front of the ^0000FFHidden Crack^000000. Make sure no one follows you there.";
+		mes "I've ^0000FFcovered the opening with dirt^000000. I hope no one dug it open.";
+		erasequest 11352;// Dimensional Travel
+		setquest 11353;// Dimensional Travel
+		ep14_3_dimensional_travel = 6;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 6) {
+		mes "[Tamarin]";
+		mes "I've hidden the opening to that place: I didn't want anyone to get there before me.";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "At that time, I was too distracted to remember where the opening was, but I think it's definitely ^0000FFsomewhere on the 2nd floor^000000.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Meet me in front of the ^0000FFHidden Crack^000000. Make sure no one follows you there.";
+		mes "I've ^0000FFcovered the opening with dirt^000000. I hope no one dug it open.";
+		close3;
+	}
+	mes "[Tamarin]";
+	mes "Hm, my mark had better stay where I left it.";
+	cutin "ep143_tahuk.bmp",2;
+	close3;
+}
+
+dali02,90,62,0	script	Sand Mound#ep14bs	4_SOIL,{
+	if (ep14_3_dimensional_travel < 6) {
+		mes "- A mound of sand stands awkwardly, looking out of place. -";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 6) {
+		mes "- A mound of sand stands awkwardly, looking out of place. -";
+		next;
+		mes "[Tamarin]";
+		mes "Whew!";
+		mes "I'm glad you've found me.";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Let me clear the dirt...";
+		mes "Be mindful of the opening. It's quite narrow.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		if (select( "Enter.", "Quit." ) == 2) {
+			mes "[Tamarin]";
+			mes "Aren't you going in?";
+			cutin "ep143_tahuk.bmp",2;
+			close3;
+		}
+		mes "- The passage is barely wide enough to contain one person. -";
+		completequest 11353;// Dimensional Travel
+		ep14_3_dimensional_travel = 7;
+		close2;
+		warp "moro_vol",136,135;
+		end;
+	}
+	mes "- A mound of sand stands awkwardly, looking out of place. -";
+	next;
+	if (select( "Enter.", "Quit." ) == 2) {
+		mes "You decided not to enter.";
+		close;
+	}
+	mes "- The passage is barely wide enough to contain one person. -";
+	close2;
+	warp "moro_vol",136,135;
+	end;
+}
+
+moro_vol,137,136,0	script	Sand Mound#ep14bs_	4_SOIL,{
+	mes "- A mound of sand stands awkwardly, looking out of place. -";
+	next;
+	if (select( "Return to the Dimensional Crack.", "Quit." ) == 2) {
+		mes "You decided not to enter.";
+		close;
+	}
+	mes "- The passage is barely wide enough to contain one person. -";
+	close2;
+	warp "dali02",91,63;
+	end;
+}
+
+moro_vol,91,105,1	script	Eclage Teleporter#143_1	PORTAL,{
+	mes "[Dophe]";
+	mes "This teleporter is connected to Eclage.";
+	mes "It'll be destroyed once our operation is over, but for now it's something we cannot live without.";
+	next;
+	mes "Use the teleporter to move to Eclage.";
+	next;
+	if (select( "Move to Eclage.", "Cancel." ) == 2) {
+		mes "Do not use the teleporter.";
+		close;
+	}
+	mes "Move to Eclage.";
+	close2;
+	warp "ecl_in01",38,96;
+	end;
+}
+
+ecl_in01,38,98,1	script	Interdimensional Device#ecl	PORTAL,{
+	if (ep14_3_dimensional_travel < 8) {
+		mes "[Eclage Guard]";
+		mes "This teleporter is connected to the recently discovered hideout of the Demon God.";
+		mes "Only those allowed to enter the hideout can use this teleporter.";
+		close;
+	}
+	mes "This teleporter is connected to the recently discovered hideout of the Demon God.";
+	mes "Do you want to use it?";
+	next;
+	if (select( "Move to the Demon God's hideout.", "Quit." ) == 2) {
+		mes "Do not use the teleporter.";
+		close;
+	}
+	mes "Use the teleporter to move to the Demon God's hideout.";
+	close2;
+	warp "moro_vol",91,102;
+	end;
+}
+
+ecl_in01,40,96,3	script	Eclage Guard#143_6	4_M_FAIRYSOLDIER,{
+	mes "[Eclage Guard]";
+	mes "How may I help you?";
+	next;
+	switch( select( "What's that teleporter?", "Why is it so crowded in here?", "Demon God's hideout?", "Goodbye." ) ) {
+	case 1:
+		mes "[Eclage Guard]";
+		mes "It's connected to the recently discovered hideout the of Demon God.";
+		mes "It's scientifically designed to send its user directly to the Dimensional Crack where his hideout is.";
+		next;
+		mes "[Eclage Guard]";
+		mes "Many a warrior already left to the hideout.";
+		mes "So long as Morroc exists, Yggdrasil is not safe. I'm going to join the Expedition.";
+		close;
+	case 2:
+		mes "[Eclage Guard]";
+		mes "It turns out Demon God ran from Morroc to hide out in our dimension.";
+		mes "He has to be dealt with, either banished back to his realm or destroyed.";
+		next;
+		mes "[Eclage Guard]";
+		mes "If you want to join the Expedition to defeat the Demon God, then use this teleporter.";
+		mes "It'll send you directly to the Expedition Camp.";
+		close;
+	case 3:
+		mes "[Eclage Guard]";
+		mes "You know the Dimensional Crack, don't you? Recently it's been revealed that the Crack is made up of dimensional passageways.";
+		mes "We can now use those passageways to explore inside the Crack.";
+		next;
+		mes "[Eclage Guard]";
+		mes "Originally the Crack was created by the Demon God to aid in his escape,";
+		mes "so it'd been thought investigating the Crack could locate him.";
+		next;
+		mes "[Eclage Guard]";
+		mes "And it was; finally his hideout has been discovered.";
+		mes "His traces and his demon soldiers are sighted mainly around the giant hill in the center.";
+		next;
+		mes "[Eclage Guard]";
+		mes "If you want more details, then you should visit the actual site.";
+		mes "Just use the teleporter over there.";
+		close;
+	case 4:
+		mes "[Eclage Guard]";
+		mes "May Yggdrasil bless you.";
+		close;
+	}
+}
+
+moro_vol,132,140,4	script	Tamarin#ep14bs_ju	4_M_TAMARIN,{
+	if (ep14_3_dimensional_travel == 7) {
+		mes "[Tamarin]";
+		mes "Whoa!";
+		mes "I didn't expect to see so many people.";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "I'm disappointed that I'm not the first one to discover the place, and am glad that I'm not alone in this dismal place.";
+		cutin "ep143_taang.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "I see more of those entities that look sort of like men.";
+		mes "This place might be much more than I thought it was!";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Look!";
+		mes "Walking trees!";
+		mes "Grrr-!";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Barget Tiblack]";
+		mes "HEY!";
+		mes "What the hell do you think you're doing?!";
+		cutin "",255;
+		setquest 11354;// Specimen Collection
+		ep14_3_dimensional_travel = 8;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 8) {
+		mes "[Tamarin]";
+		mes "Look!";
+		mes "Walking trees!";
+		mes "Grrr-!";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Barget Tiblack]";
+		mes "HEY!";
+		mes "What the hell do you think you're doing?!";
+		cutin "",255;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 9) {
+		mes "[Tamarin]";
+		mes "They might kick us out if they know we sneaked in.";
+		mes "Let's do what they ask for now, yeah?";
+		cutin "ep143_taang.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 10 || ep14_3_dimensional_travel == 11) {
+		mes "[Tamarin]";
+		mes "Collecting the plant specimens doesn't sound too difficult. We can split them between us.";
+		cutin "ep143_tasta.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "^0000FFWhen you collect 25 Sonia stems, meet me by the big rock in the center of this place^000000.";
+		if (ep14_3_dimensional_travel == 10) {
+			erasequest 11356;// Specimen Collection
+			setquest 11357;// Specimen Collection
+			ep14_3_dimensional_travel = 11;
+		}
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 12) {
+		if (countitem(6690) < 25) {
+			mes "[Tamarin]";
+			mes "Ooh! (Wincing)";
+			mes "You don't have enough stems.";
+			mes "Get more and take them to Barget.";
+			cutin "ep143_tahuk.bmp",2;
+			close3;
+		}
+		mes "[Tamarin]";
+		mes "Let's report to Barget first.";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 14 || ep14_3_dimensional_travel == 15) {
+		mes "[Tamarin]";
+		mes "Come on,";
+		mes "hurry over to ^0000FFInstructor Rugen^000000!";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 16) {
+		mes "[Tamarin]";
+		mes "Thank the gods, who knew that thing I ate out of hunger would save me?";
+		mes "Let's report to Barget.";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel > 16) {
+		mes "[Tamarin]";
+		mes "Arrgh!";
+		mes "" + strcharinfo(0) + " Get in the cave before everyone else explores it!";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	mes "[Tamarin]";
+	mes "Ugh...";
+	mes "I was the first to come to this place!";
+	cutin "ep143_taang.bmp",2;
+	close3;
+}
+
+moro_vol,142,131,5	script	Barget Tiblack#ep14bs	4_M_ALCHE_D,{
+	if (checkweight(501,1) == 0 || (MaxWeight - Weight) < 1000) {
+		mes "- You are carrying too many items to proceed with the quest. -";
+		close;
+	}
+	if (ep14_3_dimensional_travel < 8) {
+		mes "[Barget Tiblack]";
+		mes "Ugh, I'm exhausted.";
+		mes "I understand the urgency, but that doesn't mean I like being bossed around.";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 8) {
+		mes "[Barget Tiblack]";
+		mes "You've ruined my precious samples!";
+		mes "I've asked people of your ilk to steer clear of my work zone. Didn't your superiors tell you that?";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I haven't even finished the research at the camp, and they dragged me away for yet another burdening project.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I demand an assistant!";
+		mes "Enough with that budget problem!";
+		mes "Argh!";
+		next;
+		mes "[Barget Tiblack]";
+		mes "...";
+		mes "...";
+		next;
+		mes "[Barget Tiblack]";
+		mes "All right.";
+		mes "You two over there!";
+		mes "You must have too much time on your hands, loitering about aimlessly. Make yourself useful and help me collect samples.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "You've ruined my existing samples, after all.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "First, I want to collect animal specimens.";
+		mes "It's not uncommon to see mutant animals around here. Recently, one of them was confirmed as a ^0000FFcompletely new species^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "^0000FFThis new species of insect is called the Firebugs because they're surrounded by flames and live in fire pits like that over there^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Firebugs that crawl out of their pits die soon after.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Please investigate ^0000FF20 fire pits and collect 50 Burning Insect Shells from Firebugs^000000.";
+		mes "Be careful not to burn yourself in the process.";
+		erasequest 11354;// Specimen Collection
+		setquest 11355;// Specimen Collection
+		ep14_3_dimensional_travel = 9;
+		close;
+	}
+	if (ep14_3_dimensional_travel < 12) {
+		if (ep14_3_dimensional_travel == 9) {
+			if (countitem(6689) < 50 || checkquest(11355,HUNTING) != 2) {
+				mes "[Barget Tiblack]";
+				mes "First, I want to collect animal specimens.";
+				mes "It's not uncommon to see mutant animals around here. Recently, one of them was confirmed as a ^0000FFcompletely new species^000000.";
+				next;
+				mes "[Barget Tiblack]";
+				mes "^0000FFThis new species of insect is called the Firebugs because they're surrounded by flames and live in fire pits like that over there^000000.";
+				next;
+				mes "[Barget Tiblack]";
+				mes "Firebugs that crawl out of their pits die soon after.";
+				next;
+				mes "[Barget Tiblack]";
+				mes "Please investigate ^0000FF20 fire pits and collect 50 Burning Insect Shells from Firebugs^000000.";
+				mes "Be careful not to burn yourself in the process.";
+				close;
+			}
+			mes "[Barget Tiblack]";
+			mes "Oh,";
+			mes "well done!";
+			mes "You finished your task more quickly than I anticipated.";
+			delitem 6689,50;// Burning Bug Skin
+			erasequest 11355;// Specimen Collection
+			setquest 11356;// Specimen Collection
+			ep14_3_dimensional_travel = 10;
+			next;
+			mes "[Barget Tiblack]";
+			mes "Ouch, HOT!";
+			mes "*Huffing Puffing*";
+			mes "Let me bottle them before they get cold, and send them to the lab.";
+			next;
+		}
+		mes "[Barget Tiblack]";
+		mes "Now, it's time for plant specimens.";
+		mes "Our target plant is called Sonia, a very primitive type of plant.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "At a glance, Sonias look like plastic tubes, but their structure is very minimal.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "They're not difficult to gather. Please ^0000FFpick 50 Sonias and bring me 50 stems^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Sonia specimens are the last of my specimen collection. If you happen to ^0000FFsee peculiar Sonias^000000, please don't hesitate to let me know.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Try not to stray too far away from the base. It's too dangerous out there.";
+		mes "Come back safely.";
+		next;
+		mes "[Tamarin]";
+		mes "Hm...";
+		mes "" + strcharinfo(0) + ", wait!";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 12) {
+		if (countitem(6690) < 25) {
+			mes "[Barget Tiblack]";
+			mes "How are you doing with collecting Sonias?";
+			close;
+		}
+		mes "[Barget Tiblack]";
+		mes "Ah,";
+		mes "welcome back!";
+		mes "I forgot to tell you ^0000FFnot to go near the rock in the center of this place^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "When I realized my mistake, I called a rescue party, so worried for your safety. I'm glad you're back unscathed.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I apologize for being a total jerk.";
+		mes "I was stressed out about my heavy workload.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I still have so many things to do... Sigh...";
+		next;
+		select("Tell her about the central rock.");
+		mes "[Barget Tiblack]";
+		mes "Say WHAT?!";
+		mes "You went there?!";
+		mes "And you came back unscathed? How?";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Everyone else who went there ^0000FFfell into a coma due to the noxious gas released from the rock^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "What did you do?";
+		mes "This is a great discovery!";
+		next;
+		select("Relay what happened.");
+		mes "[Barget Tiblack]";
+		mes "You ate a Sonia stem.";
+		mes "Okay, I've known the stem is nontoxic, but I haven't finished its substance research yet. Did you experience any side effect?";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Wow!";
+		mes "This really is a great discovery!";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I'd better get back to the research...";
+		mes "No, we first must ^0000FFtreat those patients who need Sonia stems. Please bring them to me.^000000";
+		next;
+		mes "[Barget Tiblack]";
+		mes "^0000FFInstructor Rugen manages them^000000, so you can bring them to him.";
+		mes "Please hand me the document. I'll sign it for you.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I'd better get back to my stem research. I'll ask someone else for assistance.";
+		mes "You lucked out this time. Better not make a habit of eating things off the ground.";
+		erasequest 11358;// Specimen Collection
+		setquest 11359;// Antidote
+		ep14_3_dimensional_travel = 13;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 13) {
+		mes "[Barget Tiblack]";
+		mes "I'd better get back to the research...";
+		mes "No, we first must ^0000FFtreat those patients who need Sonia stems. Please bring them to me.^000000";
+		next;
+		mes "[Barget Tiblack]";
+		mes "^0000FFInstructor Rugen manages them^000000, so you can bring them to him.";
+		mes "Please hand me the document. I'll sign it for you.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I'd better get back to my stem research. I'll ask someone else for assistance.";
+		mes "You lucked out this time. Better not make a habit of eating things off the ground.";
+		close;
+	}
+	if (ep14_3_dimensional_travel < 16) {
+		mes "[Barget Tiblack]";
+		mes "Did you see Instructor Rugen?";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 16) {
+		mes "[Barget Tiblack]";
+		mes "Hah hah hah!";
+		mes "How did it go?";
+		mes "They worked, didn't they?";
+		next;
+		mes "[Barget Tiblack]";
+		mes "I have high hopes for my research.";
+		mes "Your seemingly reckless decision has saved many lives.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "With this, we'll soon be able to investigate that ^0000FFsuspicious cave^000000 from the inside out!";
+		next;
+		select("What cave?");
+		mes "[Barget Tiblack]";
+		mes "Oh, the cave that releases the noxious gas.";
+		mes "The gas is ^0000FFso thick in the air, you can't see the cave entrance clearly^000000.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "Those who we gave the first batch of the vaccine already left to the cave.";
+		mes "We haven't heard from them yet. I'd like to believe it's a good sign.";
+		next;
+		mes "[Barget Tiblack]";
+		mes "If it weren't two of you, I could have pulled all my hair out in frustration.";
+		mes "Good job, you guys!";
+		getexp 0,1500000;
+		completequest 11362;// Antidote
+		ep14_3_dimensional_travel = 17;
+		close;
+	}
+	mes "[Barget Tiblack]";
+	mes "Those who we gave the first batch of the vaccine already left to the cave.";
+	mes "We haven't heard from them yet. I'd like to believe it's a good sign.";
+	next;
+	mes "[Barget Tiblack]";
+	mes "If it weren't two of you, I could have pulled all my hair out in frustration.";
+	mes "Good job, you guys!";
+	close;
+}
+
+moro_vol,101,74,4	script	Patient#ep14bs2	4_F_FAIRYKID6,{
+	mes "[Patient]";
+	mes "*Moan*";
+	close;
+}
+
+moro_vol,101,72,4	script	Patient#ep14bs1	4_M_PATIENT,{
+	mes "[Patient]";
+	mes "Ugh...";
+	close;
+}
+
+moro_vol,103,71,6	script	Patient#ep14bs3	4_F_PATIENT,{
+	mes "[Patient]";
+	mes "*Groan*";
+	close;
+}
+
+moro_vol,106,69,4	script	Patient#ep14bs4	4_M_PATIENT,{
+	mes "[Patient]";
+	mes "Aww... Ugh...";
+	close;
+}
+
+moro_vol,104,70,4	script	Intoxicated Patient#ep1	4_M_LIEMAN,{
+	if (ep14_3_dimensional_travel == 14) {
+		mes "[Poisoned Patient]";
+		mes "Ugh...";
+		next;
+		mes "- You feed him a Sonia stem. The color instantly returns to his face. -";
+		erasequest 11360;// Antidote
+		setquest 11361;// Antidote
+		ep14_3_dimensional_travel = 15;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 15) {
+		mes "[Poisoned Patient]";
+		mes "Ugh...";
+		next;
+		mes "- You feed him a Sonia stem. The color instantly returns to his face. -";
+		mes "- Talk to Instructor Rugen. -";
+		close;
+	}
+	mes "[Poisoned Patient]";
+	mes "Ugh...";
+	close;
+}
+
+moro_vol,105,71,5	script	Instructor Rugen#ep14bs	4_M_YOUNGKNIGHT,{
+	if (ep14_3_dimensional_travel < 13) {
+		mes "[Instructor Rugen]";
+		mes "Phew...";
+		mes "Why were you so reckless?";
+		next;
+		mes "[Instructor Rugen]";
+		mes "Is this worth it?";
+		mes "...";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 13) {
+		mes "[Instructor Rugen]";
+		mes "Phew...";
+		mes "Why were you so reckless?";
+		next;
+		mes "[Instructor Rugen]";
+		mes "Is this worth it?";
+		mes "...";
+		next;
+		if (select( "Talk to him.", "No, he looks too upset to talk." ) == 2) {
+			mes "[Instructor Rugen]";
+			mes "Sigh...";
+			mes "This is just...";
+			close;
+		}
+		mes "[Instructor Rugen]";
+		mes "How may I help you?";
+		mes "If you're seeking medical assistance, then please describe your symptoms at the reception desk and wait until help arrives.";
+		next;
+		select("Give Sonia stems.");
+		if (countitem(6690) < 25) {
+			mes "[Instructor Rugen]";
+			mes "These aren't enough.";
+			mes "Could you check the number of your Sonia stems?";
+			close;
+		}
+		mes "[Instructor Rugen]";
+		mes "Are you serious?";
+		mes "Dr. Tiblack sent you, so I should believe you.";
+		mes "I'll feed these to the patients.";
+		delitem 6690,25;// Yummy Stem
+		erasequest 11359;// Antidote
+		setquest 11360;// Antidote
+		ep14_3_dimensional_travel = 14;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 14) {
+		mes "[Instructor Rugen]";
+		mes "Are you serious?";
+		mes "Dr. Tiblack sent you, so I should believe you.";
+		mes "I'll feed these to the patients.";
+		close;
+	}
+	if (ep14_3_dimensional_travel == 15) {
+		mes "[Instructor Rugen]";
+		mes "Oh!";
+		mes "Otto!";
+		mes "Can you see me?";
+		next;
+		mes "[Otto]";
+		mes "Ugh...";
+		next;
+		mes "[Instructor Rugen]";
+		mes "Oh!";
+		mes "It worked!";
+		next;
+		mes "[Instructor Rugen]";
+		mes "The patients are showing remarkable improvements, though they need to stay in bed for now.";
+		mes "I'll feed the stems to the most critical patients, and wait for Dr. Tiblack to finish her research.";
+		next;
+		mes "[Instructor Rugen]";
+		mes "I'll give you a report on the patients' responses to the stem. Please bring the report to ^0000FFDr. Tiblack^000000.";
+		mes "Hah hah.";
+		mes "It worked!";
+		erasequest 11361;// Antidote
+		setquest 11362;// Antidote
+		ep14_3_dimensional_travel = 16;
+		close;
+	}
+	if (ep14_3_dimensional_travel == 16) {
+		mes "[Instructor Rugen]";
+		mes "The patients are showing remarkable improvements, though they need to stay in bed for now.";
+		mes "I'll feed the stems to the most critical patients, and wait for Dr. Tiblack to finish her research.";
+		next;
+		mes "[Instructor Rugen]";
+		mes "I'll give you a report on the patients' responses to the stem. Please bring the report to ^0000FFDr. Tiblack^000000.";
+		mes "Hah hah.";
+		mes "It worked!";
+		close;
+	}
+	mes "[Instructor Rugen]";
+	mes "I'm glad that the research resulted in our favor.";
+	mes "My comrades are well on their way to a full recovery.";
+	mes "Thank to you.";
+	close;
+}
+
+// Flame Cave entrance
+moro_vol,198,179,4	script	Tamarin#ep14bs_st	4_M_TAMARIN,{
+	if (ep14_3_dimensional_travel < 11) {
+		mes "[Tamarin]";
+		mes "Hm...";
+		mes "We don't have time for this!";
+		cutin "ep143_taang.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 11) {
+		if (countitem(6690) < 25 || checkquest(11357,HUNTING) != 2) {
+			mes "[Tamarin]";
+			mes "^0000FFWhen you collect 25 Sonia stems, meet me here^000000.";
+			cutin "ep143_tasta.bmp",2;
+			close3;
+		}
+		mes "[Tamarin]";
+		mes "I don't remember this rock was so big.";
+		mes "Or seeing these strange things around it.";
+		mes "I also smell ^0000FFsmoke^000000.";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "Again,";
+		mes "I don't remember seeing ^0000FFso many strange animals and plants^000000 either.";
+		mes "These are Sonias, right? They weren't so many before.";
+		next;
+		mes "[Tamarin]";
+		mes "If they were, I wouldn't have had to starve.";
+		mes "Sonias were the most delicious and least toxic among all the plants I tried.";
+		cutin "ep143_taang.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "" + strcharinfo(0) + ", do you want to taste it?";
+		mes "I brought a few stems for memories' sake.";
+		cutin "ep143_tasmi.bmp",2;
+		next;
+		cutin "",255;
+		mes "- Taste of Sonia -";
+		mes "Its thick, tongue-warming sap fills your mouth with delicious aroma.";
+		next;
+		mes "[Tamarin]";
+		mes "What do you think?";
+		mes "Delicious, huh?";
+		cutin "ep143_tahuk.bmp",2;
+		next;
+		mes "[Tamarin]";
+		mes "I've got only a few left. Let's take turns to gather some more.";
+		cutin "ep143_tasmi.bmp",2;
+		erasequest 11357;// Specimen Collection
+		setquest 11358;// Specimen Collection
+		ep14_3_dimensional_travel = 12;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 12) {
+		mes "[Tamarin]";
+		mes "I've got only a few left. Let's take turns to gather some more.";
+		cutin "ep143_tasmi.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel < 16) {
+		mes "[Tamarin]";
+		mes "Come on,";
+		mes "hurry over to ^0000FFInstructor Rugen^000000!";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	if (ep14_3_dimensional_travel == 16) {
+		mes "[Tamarin]";
+		mes "Thank the gods, who knew that thing I ate out of hunger would save me?";
+		mes "Let's report to Barget.";
+		cutin "ep143_tahuk.bmp",2;
+		close3;
+	}
+	mes "[Tamarin]";
+	mes "Arrgh!";
+	mes "" + strcharinfo(0) + " get in there before everyone else explores it!";
+	cutin "ep143_tahuk.bmp",2;
+	next;
+	if (select( "Enter.", "Quit." ) == 2) {
+		mes "[Tamarin]";
+		mes "Ah...";
+		cutin "ep143_taang.bmp",2;
+		close3;
+	}
+	mes "[Tamarin]";
+	mes "The floor is dark. Watch your step!";
+	close2;
+	warp "moro_cav",40,50;
+	end;
+}
+
+// Others
+ecl_in01,44,99,1	script	Combat Laphine#143_4	4_M_FAIRYSOLDIER2,{
+	mes "[Combat Laphine]";
+	mes "I'm nervous.";
+	close;
+}
+
+ecl_in01,46,99,1	script	Combat Laphine#143_5	4_M_FAIRYSOLDIER2,{
+	mes "[Combat Laphine]";
+	mes "I hope I can return in one piece.";
+	close;
+}
+
+ecl_in01,48,99,1	script	Combat Laphine#143_6	4_M_FAIRYSOLDIER2,{
+	mes "[Combat Laphine]";
+	mes "Hmm...";
+	close;
+}
+ecl_in01,44,97,1	script	Combat Laphine#143_7	4_F_FAIRYSOLDIER,{
+	mes "[Combat Laphine]";
+	mes "Shush.";
+	close;
+}
+
+ecl_in01,46,97,1	script	Combat Laphine#143_8	4_F_FAIRYSOLDIER,{
+	mes "[Combat Laphine]";
+	mes "Mwa hah hah, it's time for me to shine!";
+	close;
+}
+
+ecl_in01,48,97,1	script	Combat Laphine#143_9	4_F_FAIRYSOLDIER,{
+	mes "[Combat Laphine]";
+	mes "I must have been out of my mind when I decided to join the army. Sigh, why does the Door to Verities have to be so high up there?";
+	close;
+}
+
+ecl_in01,46,102,3	script	Commander Laphine#143_1	4_M_FAIRYSOLDIER,5,5,{
+	mes "[Commander Laphine]";
+	mes "Evil must be nipped in the butt.";
+	mes "You're unexpected visitors from the Midgard Continent.";
+	next;
+	mes "[Commander Laphine]";
+	mes "If you  are the cause doom to ourselves OR Yggdrasil, then we won't hesitate to fight you.";
+	close;
+
+OnTouch_:
+	if (.talk == 0) {
+		.talk = 1;
+		npctalk "Commander: Soldiers, finally it's time to put your training to use!";
+		sleep 2000;
+		npctalk "Argh!", "Combat Laphine#143_4";
+		npctalk "Argh!", "Combat Laphine#143_5";
+		npctalk "Argh!", "Combat Laphine#143_6";
+		npctalk "Ah!", "Combat Laphine#143_7";
+		npctalk "Argh!", "Combat Laphine#143_8";
+		npctalk "Argh!", "Combat Laphine#143_9";
+		sleep 2000;
+		npctalk "Commander: Did someone just whimper?";
+		sleep 3000;
+		npctalk "Commander: Don't disappoint your comrades at the Splendide advance base!";
+		sleep 3000;
+		npctalk "Commander: Stay focused! We're going to finish off the Demon God!";
+		sleep 2000;
+		npctalk "Yeah, yeah.", "Combat Laphine#143_7";
+		sleep 2000;
+		npctalk "...", "Combat Laphine#143_4";
+		npctalk "Ah...", "Combat Laphine#143_5";
+		npctalk "...", "Combat Laphine#143_6";
+		npctalk "...", "Combat Laphine#143_8";
+		sleep 3000;
+		npctalk "Commander: Ah, suddenly I can't see...";
+		.talk = 0;
+	}
+	end;
+}
+
+ecl_in01,37,90,3	script	Magic Scholar Lemony#14	4_F_FAIRY2,{
+	mes "[Lemony]";
+	mes "Did you read the latest issue of the Door to Verities magazine?";
+	mes "Was Avant's new teleporter really featured in it?";
+	next;
+	mes "[Armandi]";
+	mes "Yes, just the basic principles and the information relevant to the Humans.";
+	mes "I didn't quite understand it all.";
+	next;
+	mes "[Lemony]";
+	mes "I wonder if this means Avant has finally decided to pursue his interest in research activities.";
+	next;
+	mes "[Lemony]";
+	mes "Hey, Human.";
+	mes "Were you eavesdropping on us? Well, though it wasn't like we're discussing secrets.";
+	next;
+	mes "[Lemony]";
+	mes "Oh, right. Are you too going there?";
+	mes "You know, the hideout of the Demon God who created some of the Space Time Dimensional Cracks has recently been discovered.";
+	next;
+	mes "[Lemony]";
+	mes "If you're curious, then use that teleporter to the hideout over there.";
+	mes "There will be quite a spectacle to watch.";
+	mes "Oh, just so you know, you might be throwing away your life. *Giggle*";
+	next;
+	mes "[Armandi]";
+	mes "Lemony, you really need to work on improving your personality.";
+	mes "Tsk, tsk.";
+	close;
+}
+
+ecl_in01,35,89,6	script	Magic Scholar Armandi#1	4_M_FAIRYKID6,{
+	mes "[Armandi]";
+	mes "I hope the Interdimensional Device won't take a heavy toll on the world.";
+	mes "By the way, Avant never fails to amaze me.";
+	next;
+	mes "[Lemony]";
+	mes "Ack, I hate that guy.";
+	next;
+	mes "[Armandi]";
+	mes "Avant may be repulsive,";
+	mes "but he's the best at what he does.";
+	next;
+	mes "[Lemony]";
+	mes "That, I agree.";
+	mes "Only he could pull off this kind of teleporter.";
+	mes "Why is he helping the Mayor, anyway?";
+	next;
+	mes "[Armandi]";
+	mes "When I asked him, he mumbled something about repentance.";
+	mes "I can only guess it has something to do with the Mayor's birth.";
+	next;
+	mes "[Armandi]";
+	mes "I wanted to ask more, but he looked down his nose at me.";
+	mes "Sigh, it's unfair such a jerk is considered the best in magical science.";
+	next;
+	mes "[Lemony]";
+	mes "You can always study hard to beat him.";
+	close;
+}
+
+// Warps
+moro_cav,64,13,0	warp	#flame_cave_out	3,3,moro_vol,198,176
+
+// Merchants
+moro_vol,95,96,6	shop	Tool Merchant	4_CAT_DOWN,611:-1,501:-1,502:-1,503:-1,504:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,1750:-1
+
+// Placeholder (unknown scripts)
+// ecl_in01,47,92,0	script	#ecl_buff_N	HIDDEN_WARP_NPC
+// ecl_in01,48,44,0	script	#ecl_buff_S	HIDDEN_WARP_NPC
+// ecl_in01,23,68,0	script	#ecl_buff_W	HIDDEN_WARP_NPC
+// ecl_in01,48,67,0	script	#ecl_orb_buff	HIDDEN_WARP_NPC
+// ecl_in01,71,67,0	script	#ecl_buff_E	HIDDEN_WARP_NPC
+// ecl_in01,47,27,0	script	#mgate03	HIDDEN_WARP_NPC

+ 2 - 2
npc/re/quests/quests_malangdo.txt

@@ -10662,6 +10662,7 @@ mal_in01,15,16,3	script	Fallen Angel#mal	403,{
 		}
 		specialeffect2 EF_REPAIRWEAPON;
 		progressbar "ffff00",2;
+		setarray .@equip_card[0], getequipcardid(EQI_GARMENT,0),getequipcardid(EQI_GARMENT,1),getequipcardid(EQI_GARMENT,2),getequipcardid(EQI_GARMENT,3);
 		if (getequipisequiped(EQI_GARMENT) == 0) {
 			mes "[Fallen Angel]";
 			mes "The Archangel Wing has been taken out!";
@@ -10677,13 +10678,12 @@ mal_in01,15,16,3	script	Fallen Angel#mal	403,{
 			mes "I can't do it if you can't pay!";
 			close;
 		}
-		if (getequipcardid(EQI_GARMENT,3) < 4700) { // Armor Enchant System
+		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
 			mes "[Fallen Angel]";
 			mes "This equipment has not been enchanted, please check it again!";
 			close;
 		}
 		set .@equip_refine, getequiprefinerycnt(EQI_GARMENT);
-		setarray .@equip_card[0], getequipcardid(EQI_GARMENT,0),getequipcardid(EQI_GARMENT,1),getequipcardid(EQI_GARMENT,2);
 		delitem 6417,3; //Silvervine
 		delequip EQI_GARMENT;
 		getitem2 2573,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],0; //Archangel_Wing

+ 1 - 0
npc/re/scripts_athena.conf

@@ -153,6 +153,7 @@ npc: npc/re/quests/mrsmile.txt
 npc: npc/re/quests/ninja_quests.txt
 npc: npc/re/quests/pile_bunker.txt
 npc: npc/re/quests/quests_13_1.txt
+npc: npc/re/quests/quests_14_3.txt
 npc: npc/re/quests/quests_15_1.txt
 npc: npc/re/quests/quests_15_2.txt
 npc: npc/re/quests/quests_aldebaran.txt

+ 6 - 6
sql-files/item_db.sql

@@ -1611,7 +1611,7 @@ REPLACE INTO `item_db` VALUES (2756,'Chemical_Ring','Chemical Ring',4,0,NULL,0,N
 REPLACE INTO `item_db` VALUES (2757,'Insecticide_Ring','Insecticide Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_Insect,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2758,'Fisher_Ring','Fischer Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_Fish,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2759,'Decussate_Ring','Decussate Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_Demon,15;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (2760,'Bloody_Ring','Bloody Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_DemiHuman,15; bonus2 bExpAddRace,RC_Player,15;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (2760,'Bloody_Ring','Bloody Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_DemiHuman,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2761,'Satanic_Ring','Satanic Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_Angel,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2762,'Dragoon_Ring','Dragon Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,1,0,0,'bonus2 bExpAddRace,RC_Dragon,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (2763,'Skul_Ring_C','Neo Skull Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFE,2,2,136,NULL,95,0,0,'bonus bAtkRate,5; bonus bMatkrate,5; bonus bMaxHPrate,5; bonus2 bSkillHeal,"AL_HEAL",5; skill "MG_SIGHT",1;',NULL,NULL);
@@ -1820,7 +1820,7 @@ REPLACE INTO `item_db` VALUES (4150,'Goat_Card','Goat Card',6,20,NULL,10,NULL,NU
 REPLACE INTO `item_db` VALUES (4151,'Gajomart_Card','Gajomart Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_Plant,-20; bonus2 bExpAddRace,RC_Plant,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4152,'Galapago_Card','Galapago Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Juice,50; bonus3 bAddMonsterDropItem,531,RC_Insect,300; bonus3 bAddMonsterDropItem,532,RC_Insect,300; bonus3 bAddMonsterDropItem,534,RC_Insect,300;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4153,'Crab_Card','Crab Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1266,30;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4154,'Rice_Cake_Boy_Card','Dumpling Child Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,529,RC_Player,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,530,RC_Player,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4154,'Rice_Cake_Boy_Card','Dumpling Child Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4155,'Goblin_Leader_Card','Goblin Leader Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bAddRace2,RC2_Goblin,30;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4156,'Steam_Goblin_Card','Goblin Steamrider Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Formless,7;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4157,'Goblin_Archer_Card','Goblin Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Undead,7;',NULL,NULL);
@@ -1911,7 +1911,7 @@ REPLACE INTO `item_db` VALUES (4241,'Archangeling_Card','Arc Angeling Card',6,20
 REPLACE INTO `item_db` VALUES (4242,'Apocalips_Card','Apocalipse Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bVit,2; if(getrefine()>8) bonus bMaxHP,800;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4243,'Antonio_Card','Antonio Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_TELEPORT",1,500;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4244,'Alarm_Card','Alarm Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"MG_SIGHT",1,200; bonus bMaxHP,300; bonus bVit,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4245,'Am_Mut_Card','Am Mut Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; bonus2 bExpAddRace,RC_Player,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4245,'Am_Mut_Card','Am Mut Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4246,'Assulter_Card','Assaulter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_DemiHuman,7; bonus2 bCriticalAddRace,RC_Player,7;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4247,'Aster_Card','Aster Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1074,30;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4248,'Ancient_Mummy_Card','Ancient Mummy Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_CRUCIS",5,30;',NULL,NULL);
@@ -1922,7 +1922,7 @@ REPLACE INTO `item_db` VALUES (4252,'Alligator_Card','Alligator Card',6,20,NULL,
 REPLACE INTO `item_db` VALUES (4253,'Alice_Card','Alice Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubClass,Class_Boss,40; bonus2 bSubClass,Class_Normal,-40;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4254,'Tirfing_Card','Ogretooth Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubSize,Size_Medium,25; bonus bDef,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4255,'Orc_Lady_Card','Orc Lady Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bAddRace2,3,30;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4256,'Orc_Archer_Card','Orc Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,12034,RC_Player,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4256,'Orc_Archer_Card','Orc Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4257,'Wild_Rose_Card','Wild Rose Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus bAgi,1; if(BaseClass==Job_Thief) bonus bFlee2,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4258,'Wicked_Nymph_Card','Evil Nymph Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMaxSP,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4259,'Wooden_Golem_Card','Wooden Golem Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus bHPrecovRate,30;',NULL,NULL);
@@ -1975,7 +1975,7 @@ REPLACE INTO `item_db` VALUES (4305,'Turtle_General_Card','Turtle General Card',
 REPLACE INTO `item_db` VALUES (4306,'Toad_Card','Toad Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bFlee2,1;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4307,'Kind_Of_Beetle_Card','Beetle King Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Fish,5;',NULL,'heal 0,-5;');
 REPLACE INTO `item_db` VALUES (4308,'Tri_Joint_Card','Tri Joint Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Formless,5;',NULL,'heal 0,-5;');
-REPLACE INTO `item_db` VALUES (4309,'Parasite_Card','Parasite Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bSubEle,Ele_Neutral,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4309,'Parasite_Card','Parasite Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bSubRace,RC_Formless,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4310,'Panzer_Goblin_Card','Panzer Goblin Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Demon,7;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4311,'Permeter_Card','Permeter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Dark,15; bonus2 bSubEle,Ele_Undead,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4312,'Fur_Seal_Card','Seal Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bFlee,3; bonus bHit,10; if(BaseClass==Job_Acolyte) { bonus2 bCriticalAddRace,RC_Undead,9; bonus2 bCriticalAddRace,RC_Demon,9; }',NULL,NULL);
@@ -2680,7 +2680,7 @@ REPLACE INTO `item_db` VALUES (5464,'Zaha_Doll_Hat','Zaha Doll Hat',4,20,NULL,0,
 #REPLACE INTO `item_db` VALUES (5469,'Noble_Hat','Musketeer Hat',4,20,NULL,300,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,30,1,466,'bonus bStr,2; bonus3 bAutoSpellWhenHit,"BS_ADRENALINE",1,7;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5470,'Eyes_Of_Darkness','Eye Of Darkness',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,7,2,512,NULL,50,0,467,'bonus bDex,1; bonus2 bResEff,Eff_Blind,10000;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5471,'Hairband_Of_Reginleif','Hairband Of Reginleif',4,20,NULL,800,NULL,1,NULL,0,0xFFFFFFFF,7,2,512,NULL,50,0,468,'bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3;',NULL,NULL);
-#REPLACE INTO `item_db` VALUES (5472,'Red_White_Hat','Red Hat',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,469,'bonus3 bAddMonsterDropItem,550,RC_DemiHuman,3; bonus3 bAddMonsterDropItem,550,RC_Player,3;',NULL,NULL);
+#REPLACE INTO `item_db` VALUES (5472,'Red_White_Hat','Red Hat',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,469,'bonus3 bAddMonsterDropItem,550,RC_DemiHuman,3;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5473,'Forceps_Hairpin','Nipper Crab Hairpin',4,20,NULL,500,NULL,4,NULL,0,0xFFFFFFFF,7,2,256,NULL,30,1,470,'bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,100; bonus3 bAddMonsterDropItem,991,RC_Fish,3;',NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5474,'Notice_Board','AFK Hat',4,20,NULL,700,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,10,0,471,NULL,NULL,NULL);
 #REPLACE INTO `item_db` VALUES (5475,'Cube_Mask','Mask Cube',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,7,2,513,NULL,0,0,472,NULL,NULL,NULL);

+ 308 - 22
sql-files/item_db_re.sql

@@ -711,7 +711,7 @@ REPLACE INTO `item_db_re` VALUES (1313,'Tourist_Axe','Tourist Axe',5,0,NULL,500,
 REPLACE INTO `item_db_re` VALUES (1314,'F_Tomahawk_C','Tomahawk',5,2,NULL,0,'200',NULL,1,0,0x000444A2,63,2,34,4,'0',0,7,'bonus bAtkEle,Ele_Wind;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1315,'F_Right_Epsilon_C','Light Epsilon',5,1,NULL,0,'229',NULL,1,0,0x000444A2,63,2,34,4,'1',0,7,'bonus bAtkEle,Ele_Holy; bonus bStr,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1316,'Adventure_Axe','Adventure Axe',5,0,NULL,0,'100',NULL,1,0,0x00040420,63,2,2,1,'1',0,6,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1317,'Academy_Axe','Academy Axe',5,0,NULL,1600,'130',NULL,1,1,0x00040420,63,2,2,1,'1',1,6,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1317,'Academy_Axe','Academy Axe',5,0,NULL,1600,'130',NULL,1,1,0x00040420,63,2,2,1,'30',1,6,'bonus bUnbreakableWeapon,1; bonus bAspdRate,5-(BaseLevel/10); bonus bMaxHP,200-(40*(BaseLevel/10));',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1318,'Dofle_Axe','Deflation Axe',5,50000,NULL,1800,'180',NULL,1,2,0x000654E2,63,2,2,4,'105',1,6,'bonus bUnbreakableWeapon,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1319,'TE_Woe_Axe','TE Woe Axe',5,0,NULL,0,'100',NULL,1,0,0x000654E3,63,2,2,3,'40',1,6,'bonus bUnbreakableWeapon,1; bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Freeze,3000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1321,'Dofle_Axe_','Deflation Axe',5,50000,NULL,1800,'180',NULL,1,3,0x000654E2,63,2,2,4,'105',1,6,'bonus bUnbreakableWeapon,1;',NULL,NULL);
@@ -963,7 +963,7 @@ REPLACE INTO `item_db_re` VALUES (1577,'Krieger_Book2','Glorious Apocalypse',5,2
 REPLACE INTO `item_db_re` VALUES (1578,'Book_Of_Prayer','Book Of Prayer',5,20,NULL,0,'140',NULL,1,0,0x00410100,63,2,2,3,'0',0,15,'bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,'137',NULL,1,2,0x00410100,63,2,2,4,'85',1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1580,'Encyclopedia_C','Giant Encyclopedia',5,0,NULL,0,'145:100',NULL,1,0,0x00410100,63,2,2,3,'0',0,15,'bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1581,'F_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,'135',NULL,1,2,0x00410100,63,2,2,3,'1',0,15,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1581,'F_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,'135',NULL,1,2,0x00410100,63,2,2,3,'1',0,15,'bonus bMatkRate,20; bonus bAspdRate,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1582,'E_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,'135',NULL,1,2,0x00410100,63,2,2,3,'1',0,15,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1583,'P_Dic1','Eden Book I',5,0,NULL,0,'135:110',NULL,1,0,0x00410100,63,2,2,3,'60',0,15,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1584,'Chilly_Spell_Book','Cold Magic Book',5,56000,NULL,1000,'100:160',NULL,1,2,0x00010000,63,2,2,4,'100',1,15,'bonus bAtkEle,Ele_Water; bonus bUnbreakableWeapon,1; bonus bDex,1; .@r = getrefine(); bonus2 bSkillAtk,"MG_COLDBOLT",(.@r*3); bonus2 bSkillAtk,"SO_DIAMONDDUST",(.@r*3); bonus2 bSkillUseSP,"MG_COLDBOLT",-(.@r*5); bonus2 bSkillUseSP,"SO_DIAMONDDUST",-(.@r*5);',NULL,NULL);
@@ -1034,7 +1034,7 @@ REPLACE INTO `item_db_re` VALUES (1649,'Rafini_Staff','Laphine Staff',5,20,NULL,
 REPLACE INTO `item_db_re` VALUES (1650,'P_Staff1','Eden Staff I',5,0,NULL,0,'60:125',NULL,1,0,0x00818314,63,2,2,2,'26',0,10,'bonus bInt,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1651,'P_Staff2','Eden Staff II',5,0,NULL,0,'60:150',NULL,1,0,0x00818314,63,2,2,2,'40',0,10,'bonus bInt,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1652,'Tourist_Staff','Tourist Staff',5,0,NULL,500,'35:0',NULL,1,0,0x00818315,63,2,2,1,'1',0,10,'bonus bMatkRate,15; bonus bInt,2; bonus bAgi,1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1653,'Staff_Of_Healing_C','Staff of Healing',5,20,NULL,0,'10:100',NULL,1,0,0x00008110,63,2,2,3,'1',0,10,'bonus bAtkEle,Ele_Holy;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1653,'Staff_Of_Healing_C','Staff of Healing',5,20,NULL,0,'10:100',NULL,1,0,0x00008110,63,2,2,3,'1',0,10,'bonus bAtkEle,Ele_Holy; bonus bHealPower,18;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1654,'Mental_Stick','Mental Stick',5,20,NULL,500,'40:170',NULL,1,1,0x00818315,63,2,2,3,'102',1,10,'.@r = getrefine(); if(.@r>5) { bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",(.@r-5)*2; bonus bMaxHPrate,-(.@r-5)*2; } bonus2 bSkillVariableCast,"SO_PSYCHIC_WAVE",-3000; bonus2 bSkillUseSP,"SO_PSYCHIC_WAVE",-60;',NULL,'itemheal 0,-100;');
 REPLACE INTO `item_db_re` VALUES (1655,'Adventure_Staff','Adventure Staff',5,0,NULL,0,'60',NULL,1,0,0x00810204,63,2,2,1,'1',0,10,'bonus bUnbreakableWeapon,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1656,'Academy_Wand','Academy Wand',5,0,NULL,600,'60',NULL,1,1,0x00810204,63,2,2,1,'1',1,10,'bonus bUnbreakableWeapon,1;',NULL,NULL);
@@ -1052,12 +1052,12 @@ REPLACE INTO `item_db_re` VALUES (1667,'TE_Woe_Staff','TE Woe Staff',5,0,NULL,0,
 REPLACE INTO `item_db_re` VALUES (1668,'Sword_Stick','Sword Stick',5,10,NULL,500,'120:150',NULL,NULL,2,0x800200,63,2,2,4,'80',1,10,'bonus bAspdRate,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1669,'Thanos_Staff','Thanatos Staff',5,10,NULL,1000,'100:200',NULL,1,1,0x00018314,56,2,2,4,'120',1,10,'bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bHealPower,15; bonus bMagicHPGainValue,500; bonus bMagicSPGainValue,50; bonus2 bHPLossRate,100,10000;',NULL,'heal -1000,0;');
 REPLACE INTO `item_db_re` VALUES (1670,'RWC_Memory_Staff','RWC Memory Staff',5,20,NULL,500,'25:30',NULL,1,1,0x00818315,63,2,2,3,'1',1,10,'.@r = getrefine(); bonus bMatk,30*(.@r/3); if(.@r>=6) bonus2 bMagicAddClass,Class_All,(.@r>=9?10:5); if(.@r>=9) bonus4 bAutoSpell,"HW_MAGICPOWER",1,10,0;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1671,'Staff_Of_Evil_Slayer','Devil Won Staff',5,10,NULL,800,'30:155',NULL,NULL,1,0x00818315,63,2,2,3,'100',1,10,'bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus bMatkRate,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1671,'Staff_Of_Evil_Slayer','Devil Won Staff',5,10,NULL,800,'30:155',NULL,NULL,1,0x00818315,63,2,2,3,'100',1,10,'bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus2 bMagicAddRace,RC_Undead,10; bonus2 bMagicAddRace,RC_Demon,10; .@r = getrefine(); if(.@r>=12) bonus bMatkRate,7; else if(.@r>=9) bonus bMatkRate,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1673,'Half_BF_Staff4','Half BF Staff4',5,20,NULL,0,'70:125',NULL,1,0,0x00818314,63,2,2,3,'80',1,10,'bonus bInt,3; bonus bDex,2; bonus bDelayRate,-10; bonus2 bSPLossRate,5,12000; bonus bUnbreakableWeapon,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1674,'Half_BF_Staff2','Half BF Staff2',5,20,NULL,0,'70:125',NULL,1,0,0x00818314,63,2,2,3,'80',1,10,'bonus bInt,3; bonus bDex,3; bonus2 bMagicAddRace,RC_DemiHuman,10; bonus2 bMagicAddRace,RC_Player,10; bonus3 bAddEff,Eff_Stun,200,ATF_SKILL; bonus bUnbreakableWeapon,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1675,'Walking_Stick_','Gentleman\'s Staff',5,20,NULL,500,'40:125',NULL,1,3,0x00818314,63,2,2,4,'50',1,10,'bonus bDex,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1676,'Baculum_Daemonicum','Baculum Daemonicum',5,20,NULL,1200,'60:150',NULL,1,2,0x00818315,63,2,2,4,'80',1,10,'bonus bAtkEle,Ele_Dark; bonus bUnbreakableWeapon,1; bonus bVariableCastrate,-10; if (BaseLevel > 99){ bonus bMatk,30; } if(getrefine() > 8){ bonus2 bResEff,Eff_Blind,3000; bonus bUseSPrate,-10; }',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (1677,'Ru_Blue_Wand','Blue Wand',5,10,NULL,0,'50',NULL,1,1,0x00000200,56,2,2,3,'100',1,10,'bonus bStr,5; bonus bInt,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1677,'Ru_Blue_Wand','Blue Wand',5,10,NULL,0,'50:200',NULL,1,1,0x00000200,56,2,2,3,'100',1,10,'bonus bDex,5; bonus bInt,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1678,'Ru_Gold_Wand','Ru Gold Wand',5,0,NULL,0,'50',NULL,1,2,0x00000200,56,2,2,3,'120',1,10,'bonus bDex,8; bonus bInt,8;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1679,'Rafini_Staff_S','Laphine Staff',5,20,NULL,500,'30:180',NULL,1,2,0x00818315,63,2,2,3,'100',1,10,'bonus bFixedCastRate,-getrefine();',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1680,'Crimson_One-Handed_Staff','Crimson One-Handed Staff',5,10,NULL,600,'60:70',NULL,1,2,0x00818315,63,2,2,3,'70',1,10,'.@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1;',NULL,NULL);
@@ -1197,6 +1197,7 @@ REPLACE INTO `item_db_re` VALUES (1831,'P_Knuckle1','Eden Knuckle I',5,0,NULL,0,
 REPLACE INTO `item_db_re` VALUES (1832,'Velum_Claw','Vellum Claw',5,20,NULL,650,'160',NULL,1,0,0x00008100,63,2,2,4,'95',1,12,'bonus2 bAddRace,RC_Player,100; .@r = getrefine(); if(.@r>7) { bonus2 bAddRace,RC_Player,20; } if(.@r>9) { bonus2 bVariableCastrate,"MO_EXTREMITYFIST",-100; bonus2 bFixedCastrate,"MO_EXTREMITYFIST",-100; bonus4 bAutoSpellOnSkill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,10000; bonus2 bHPLossRate,500,3000; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1833,'Claw_Of_Flash','Claw of Flash',5,60000,NULL,400,'140',NULL,1,2,0x00008100,63,2,2,4,'105',1,12,'bonus bAspd,1; bonus bAspdRate,getrefine(); bonus2 bAddSize,Size_Medium,getrefine();',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1834,'TE_Woe_Fist','TE Woe Fist',5,0,NULL,0,'150',NULL,1,0,0x00008100,63,2,2,3,'40',1,12,'bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Freeze,3000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (1835,'Spartacus','Spartacus',5,0,NULL,600,'100',NULL,1,2,0x00008100,63,2,2,4,'50',1,12,'bonus bUnbreakableWeapon,1; .@r = getrefine(); bonus2 bAddClass,Class_All,.@r; if(.@r>9) { bonus bNoSizeFix,0; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1836,'Thanos_Knuckle','Thanatos Knuckle',5,10,NULL,600,'160:100',NULL,1,1,0x00008000,56,2,2,4,'120',1,12,'bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bHPDrainRate,50,5; bonus2 bSPDrainRate,10,5; bonus2 bHPLossRate,100,10000;',NULL,'heal -1000,0;');
 REPLACE INTO `item_db_re` VALUES (1837,'Iron_nail','Iron Nail',5,10,NULL,1500,'100',NULL,NULL,1,0x00008100,63,2,2,3,'50',1,12,'bonus bAspdRate,-5; bonus bAspdRate,((getrefine()+1)/2);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (1838,'Half_BF_Knuckle1','Half BF Knuckle1',5,20,NULL,0,'30',NULL,1,0,0x00008100,63,2,2,3,'80',1,12,'bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,1;',NULL,NULL);
@@ -1995,7 +1996,7 @@ REPLACE INTO `item_db_re` VALUES (2756,'Chemical_Ring','Chemical Ring',4,0,NULL,
 REPLACE INTO `item_db_re` VALUES (2757,'Insecticide_Ring','Insecticide Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_Insect,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2758,'Fisher_Ring','Fischer Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_Fish,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2759,'Decussate_Ring','Decussate Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_Demon,15;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2760,'Bloody_Ring','Bloody Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_DemiHuman,15; bonus2 bExpAddRace,RC_Player,15;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2760,'Bloody_Ring','Bloody Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_DemiHuman,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2761,'Satanic_Ring','Satanic Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_Angel,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2762,'Dragoon_Ring','Dragon Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bExpAddRace,RC_Dragon,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2763,'Skul_Ring_C','Neo Skull Ring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFE,18,2,136,NULL,'95',0,0,'bonus2 bAddClass,Class_All,5; bonus bMatkrate,5; bonus bMaxHPrate,5; skill "MG_SIGHT",1;',NULL,NULL);
@@ -2368,7 +2369,7 @@ REPLACE INTO `item_db_re` VALUES (4150,'Goat_Card','Goat Card',6,20,NULL,10,NULL
 REPLACE INTO `item_db_re` VALUES (4151,'Gajomart_Card','Gajomart Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_Plant,-20; bonus2 bExpAddRace,RC_Plant,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4152,'Galapago_Card','Galapago Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Juice,50; bonus3 bAddMonsterDropItem,531,RC_Insect,300; bonus3 bAddMonsterDropItem,532,RC_Insect,300; bonus3 bAddMonsterDropItem,534,RC_Insect,300;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4153,'Crab_Card','Crab Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1266,30;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (4154,'Rice_Cake_Boy_Card','Dumpling Child Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,529,RC_Player,300; bonus3 bAddMonsterDropItem,530,RC_Player,100;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4154,'Rice_Cake_Boy_Card','Dumpling Child Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddItemGroupHealRate,IG_Candy,50; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,300; bonus3 bAddMonsterDropItem,530,RC_DemiHuman,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4155,'Goblin_Leader_Card','Goblin Leader Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bAddRace2,RC2_Goblin,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4156,'Steam_Goblin_Card','Goblin Steamrider Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Formless,7;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4157,'Goblin_Archer_Card','Goblin Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Undead,7;',NULL,NULL);
@@ -2459,7 +2460,7 @@ REPLACE INTO `item_db_re` VALUES (4241,'Archangeling_Card','Arc Angeling Card',6
 REPLACE INTO `item_db_re` VALUES (4242,'Apocalips_Card','Apocalipse Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bVit,2; if(getrefine()>8) bonus bMaxHP,800;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4243,'Antonio_Card','Antonio Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_TELEPORT",1,500;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4244,'Alarm_Card','Alarm Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"MG_SIGHT",1,200; bonus bMaxHP,300; bonus bVit,1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (4245,'Am_Mut_Card','Am Mut Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10; bonus2 bExpAddRace,RC_Player,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4245,'Am_Mut_Card','Am Mut Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,-20; bonus2 bSubRace,RC_Player,-20; bonus2 bExpAddRace,RC_DemiHuman,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4246,'Assulter_Card','Assaulter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_DemiHuman,7; bonus2 bCriticalAddRace,RC_Player,7;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4247,'Aster_Card','Aster Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1074,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4248,'Ancient_Mummy_Card','Ancient Mummy Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_CRUCIS",5,30;',NULL,NULL);
@@ -2470,7 +2471,7 @@ REPLACE INTO `item_db_re` VALUES (4252,'Alligator_Card','Alligator Card',6,20,NU
 REPLACE INTO `item_db_re` VALUES (4253,'Alice_Card','Alice Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubClass,Class_Boss,40; bonus2 bSubClass,Class_Normal,-40;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4254,'Tirfing_Card','Ogretooth Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubSize,Size_Medium,25; bonus bDef,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4255,'Orc_Lady_Card','Orc Lady Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bAddRace2,RC2_Orc,30;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (4256,'Orc_Archer_Card','Orc Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; bonus3 bAddMonsterDropItem,12034,RC_Player,100;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4256,'Orc_Archer_Card','Orc Archer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4257,'Wild_Rose_Card','Wild Rose Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus bAgi,1; if(BaseClass==Job_Thief) bonus bFlee2,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4258,'Wicked_Nymph_Card','Evil Nymph Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMaxSP,50;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4259,'Wooden_Golem_Card','Wooden Golem Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus bHPrecovRate,30;',NULL,NULL);
@@ -2523,7 +2524,7 @@ REPLACE INTO `item_db_re` VALUES (4305,'Turtle_General_Card','Turtle General Car
 REPLACE INTO `item_db_re` VALUES (4306,'Toad_Card','Toad Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bFlee2,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4307,'Kind_Of_Beetle_Card','Beetle King Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Fish,5;',NULL,'heal 0,-5;');
 REPLACE INTO `item_db_re` VALUES (4308,'Tri_Joint_Card','Tri Joint Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Formless,5;',NULL,'heal 0,-5;');
-REPLACE INTO `item_db_re` VALUES (4309,'Parasite_Card','Parasite Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bSubEle,Ele_Neutral,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4309,'Parasite_Card','Parasite Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bDef,1; bonus2 bSubRace,RC_Formless,5;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4310,'Panzer_Goblin_Card','Panzer Goblin Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Demon,7;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4311,'Permeter_Card','Permeter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Dark,15; bonus2 bSubEle,Ele_Undead,15;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4312,'Fur_Seal_Card','Seal Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bFlee,3; bonus bHit,10; if(BaseClass==Job_Acolyte) { bonus2 bCriticalAddRace,RC_Undead,9; bonus2 bCriticalAddRace,RC_Demon,9; }',NULL,NULL);
@@ -2793,7 +2794,7 @@ REPLACE INTO `item_db_re` VALUES (4577,'Elvira_Card','Elvira Card',6,20,NULL,10,
 REPLACE INTO `item_db_re` VALUES (4578,'Pyuriel_Card','Angry Student Pyuriel Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,30; bonus2 bSubRace,RC_All,-10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4579,'Lora_Card','Warrior Lola Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getiteminfo(getequipid(EQI_HAND_R),11) == W_MACE) { bonus bBaseAtk,20; bonus bCritical,10; } .@r = getrefine(); bonus bBaseAtk,.@r; bonus bCritical,.@r;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4580,'Kades_Card','Dark Guardian Kades Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Water,50; bonus2 bSubEle,Ele_Earth,50; bonus2 bSubEle,Ele_Fire,50; bonus2 bSubEle,Ele_Wind,50; bonus2 bSubEle,Ele_Dark,50; bonus2 bSubEle,Ele_Undead,50; bonus2 bSubEle,Ele_Holy,-100; bonus2 bSubEle,Ele_Ghost,-100;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (4581,'Rudo_Card','Rudo Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'autobonus "{ sc_start SC_SPEEDUP1,3000,50; bonus bAgi,44; heal 0,-40; }",3,3000,0;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4581,'Rudo_Card','Rudo Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'autobonus "{ bonus bAgi,44; heal 0,-40; }",500,3000,0,"{ sc_start SC_SPEEDUP1,3000,50; }";',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4582,'Bungisngis_Card','Bungisngis Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,(getrefine()/2);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4583,'Engkanto_Card','Engkanto Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Poison,30; bonus2 bMagicAddEle,Ele_Poison,30; bonus2 bIgnoreDefRaceRate,RC_Plant,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4584,'Manananggal_Card','Manananggal Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bSPDrainValue,1; bonus bMaxSPrate,-1;',NULL,NULL);
@@ -2887,7 +2888,7 @@ REPLACE INTO `item_db_re` VALUES (4685,'V_B_Magaleta_Card','True Margaretha Sori
 REPLACE INTO `item_db_re` VALUES (4686,'V_B_Katrinn_Card','True Kathryne Keyron Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"WL_CRIMSONROCK",20+.@b;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4687,'V_B_Shecil_Card','True Cecil Damon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"RA_CLUSTERBOMB",20+.@b;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4688,'V_B_Harword_Card','True Howard Alt-Eisen Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"NC_AXETORNADO",20+.@b;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (4689,'V_B_Seyren_Card','True Seyren Windsor Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"LK_IGNITIONBREAK",20+.@b;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4689,'V_B_Seyren_Card','True Seyren Windsor Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"RK_IGNITIONBREAK",20+.@b;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4690,'V_B_Randel_Card','True Randel Lawrence Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"LG_EARTHDRIVE",20+.@b;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4691,'V_B_Flamel_Card','True Flamel Emure Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"GN_CART_TORNADO",20+.@b;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4692,'V_B_Celia_Card','True Celia Alde Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'if(getrefine() > 9) .@b+=20; if(getequipweaponlv(-1) == 4) .@b += 20; bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20+.@b;',NULL,NULL);
@@ -3150,6 +3151,49 @@ REPLACE INTO `item_db_re` VALUES (4947,'Thrift3','Economy Lv3',6,10,NULL,0,NULL,
 REPLACE INTO `item_db_re` VALUES (4948,'Skill_Delay1','After Skill Delay Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4949,'Skill_Delay2','After Skill Delay Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4950,'Skill_Delay3','After Skill Delay Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-6;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4951,'Darkness_Drop','Darkness Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Dark,2; bonus2 bMagicAtkEle,Ele_Dark,2; bonus2 bSubEle,Ele_Dark,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4952,'Fire_Drop','Fire Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Fire,2; bonus2 bMagicAtkEle,Ele_Fire,2; bonus2 bSubEle,Ele_Fire,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4953,'Water_Drop','Water Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Water,2; bonus2 bMagicAtkEle,Ele_Water,2; bonus2 bSubEle,Ele_Water,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4954,'Earth_Drop','Earth Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Earth,2; bonus2 bMagicAtkEle,Ele_Earth,2; bonus2 bSubEle,Ele_Earth,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4955,'Holy_Drop','Holy Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddEle,Ele_Holy,2; bonus2 bMagicAtkEle,Ele_Holy,2; bonus2 bSubEle,Ele_Holy,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4956,'Recovery_Drop','Recovery Drop',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],2; bonus2 bSkillHeal2,.@skills$[.@i],2; } /* TODO: Depending on some recovery items HP recovery amount + 2% */',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4957,'Famitsus_Power','Famitsu\'s Power',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHP,832;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4958,'Gemini','Gemini',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4959,'Sagittarius','Sagittarius',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4960,'Aquarius','Aquarius',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-2;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4961,'Aries','Aries',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4962,'Cancer','Cancer',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtk,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4963,'Taurus','Taurus',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtk,4; bonus bHit,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4964,'Capricorn','Capricorn',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bMagicAddRace,RC_All,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4965,'Pisces','Pisces',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVariableCastrate,-2;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4966,'Scorpio','Scorpio',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddRace,RC_All,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4967,'Leo','Leo',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4968,'Virgo','Virgo',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],1; }',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4969,'Libra','Libra',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal2,.@skills$[.@i],1; } /* TODO: Depending on some recovery items HP recovery amount + 1% */',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4970,'Fire_Property_Reactor','Fire Property Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDefEle,Ele_Fire;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4971,'Water_Property_Reactor','Water Property Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDefEle,Ele_Water;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4972,'Earth_Property_Reactor','Earth Property Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDefEle,Ele_Earth;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4973,'Wind_Property_Reactor','Wind Property Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDefEle,Ele_Wind;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4974,'Fire_Resistance_Reactor','Fire Resistance Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Fire,25; bonus2 bSubEle,Ele_Water,-25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4975,'Water_Resistance_Reactor','Water Resistance Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Water,25; bonus2 bSubEle,Ele_Wind,-25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4976,'Earth_Resistance_Reactor','Earth Resistance Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Earth,25; bonus2 bSubEle,Ele_Fire,-25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4977,'Wind_Resistance_Reactor','Wind Resistance Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Wind,25; bonus2 bSubEle,Ele_Earth,-25;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4978,'Recovery_Reactor_101','Recovery Reactor 101',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) bonus2 bHPRegenRate,100,5000; else bonus2 bHPRegenRate,50,5000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4979,'Recovery_Reactor_102','Recovery Reactor 102',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) bonus2 bSPRegenRate,5,5000; else bonus2 bHPRegenRate,3,5000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4980,'Recovery_Reactor_201','Recovery Reactor 201',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) bonus2 bRegenPercentHP,100,5000; else bonus2 bRegenPercentHP,50,5000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4981,'Recovery_Reactor_202','Recovery Reactor 202',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) bonus2 bRegenPercentSP,100,5000; else bonus2 bRegenPercentSP,50,5000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4982,'STR_Supplement_Reactor','STR Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) { .@bonus = 10; } bonus bBaseAtk,.@bonus + 5*(readparam(bStr)/10);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4983,'INT_Supplement_Reactor','INT Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'if (getrefine()>=7) { .@bonus = 10; } bonus bMatk,.@bonus + 5*(readparam(bInt)/10);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4984,'DEF_Supplement_Reactor','DEF SupplementReactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDef,100;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4985,'PD_Supplement_Reactor','PD Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4986,'Attack_Supplement_Reactor','Attack Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4987,'Magic_Supplement_Reactor','Magic Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,20;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4988,'HP_Supplement_Reactor','HP Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,5;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4989,'SP_Supplement_Reactor','SP Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSPrate,3;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4990,'Frozen_Supplement_Reactor','Frozen Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bResEff,Eff_Freeze,10000;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4991,'ASPD_Supplement_Reactor','ASPD Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspd,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4992,'HPAbsorb1_Supplement_Reactor','HP Absorb Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bHPDrainRate,10,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (4993,'SPAbsorb1_Supplement_Reactor','SP Absorb Supplement Reactor',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSPDrainRate,10,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4994,'Rune_of_Strength_Lv_1','Rune of Strength Lv 1',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,5; } if (.@r>=10) { bonus bAtkRate,5; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4995,'Rune_of_Strength_Lv_2','Rune of Strength Lv 2',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,6; } if (.@r>=11) { bonus bStr,1; bonus bAtkRate,7; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (4996,'Rune_of_Strength_Lv_3','Rune of Strength_Lv 3',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'.@r = getrefine(); if (.@r>=7) { bonus bStr,7; } if (.@r>=12) { bonus bStr,1; bonus bAtkRate,8; } if (.@r>=13) { bonus bStr,1; bonus bAtkRate,2; }',NULL,NULL);
@@ -3360,7 +3404,7 @@ REPLACE INTO `item_db_re` VALUES (5198,'Drooping_Bunny','Drooping Bunny',4,10,NU
 REPLACE INTO `item_db_re` VALUES (5199,'Baseball_Cap_I','Baseball Cap',4,0,NULL,200,NULL,3,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,216,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5200,'Coppola','Coppola',4,10,NULL,300,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,252,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5201,'Party_Hat_B','Party Hat',4,20,NULL,300,NULL,4,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,144,'bonus bAllStats,3;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5202,'Pumpkin_Hat_','Fantastic Pumpkin-Head',4,20,NULL,200,NULL,3,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,206,'bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500; bonus3 bAddMonsterDropItem,529,RC_Player,1500;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5202,'Pumpkin_Hat_','Fantastic Pumpkin-Head',4,20,NULL,200,NULL,3,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,206,'bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5203,'Tongue_Mask','Smiling Mask',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,63,2,513,NULL,'0',0,253,'bonus bSpeedRate,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5204,'Event_Pierrot_Nose','Rudolph\'s Nose',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'0',0,49,'bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5205,'Wreath','Emperor\'s Laurel Crown',4,20,NULL,1000,NULL,3,NULL,0,0xFFFFFFFF,63,2,768,NULL,'0',1,261,'bonus bAllStats,1; bonus bMdef,3;',NULL,NULL);
@@ -3630,7 +3674,7 @@ REPLACE INTO `item_db_re` VALUES (5468,'Parade_Cap','Parade Hat',4,20,NULL,800,N
 REPLACE INTO `item_db_re` VALUES (5469,'Noble_Hat','Musketeer Hat',4,20,NULL,300,NULL,4,NULL,1,0xFFFFFFFF,63,2,256,NULL,'60',1,466,'bonus bDex,3; bonus bFlee,3; .@r = getrefine(); if(.@r>=7){ bonus bFlee,3; bonus bLongAtkRate,3; } if(.@r>=9){ bonus bFlee,4; bonus bLongAtkRate,2; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5470,'Eyes_Of_Darkness','Eye Of Darkness',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,467,'bonus bDex,1; bonus2 bResEff,Eff_Blind,10000;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5471,'Hairband_Of_Reginleif','Hairband Of Reginleif',4,20,NULL,800,NULL,2,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,468,'bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5472,'Red_White_Hat','Red Hat',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,469,'bonus3 bAddMonsterDropItem,554,RC_DemiHuman,200; bonus3 bAddMonsterDropItem,554,RC_Player,200;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5472,'Red_White_Hat','Red Hat',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,469,'bonus3 bAddMonsterDropItem,554,RC_DemiHuman,200;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5473,'Forceps_Hairpin','Nipper Crab Hairpin',4,20,NULL,500,NULL,8,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,470,'bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,30; bonus3 bAddMonsterDropItem,991,RC_Fish,100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5474,'Notice_Board','AFK Hat',4,20,NULL,700,NULL,2,NULL,0,0xFFFFFFFF,63,2,256,NULL,'10',0,471,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5475,'Cube_Mask','Mask Cube',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,513,NULL,'0',0,472,'bonus bAllStats,1;',NULL,NULL);
@@ -3928,7 +3972,7 @@ REPLACE INTO `item_db_re` VALUES (5766,'Amistr_Cap','Amistr Cap',4,20,NULL,500,N
 REPLACE INTO `item_db_re` VALUES (5767,'Samurai_Mask','Samurai Mask',4,20,NULL,300,NULL,1,NULL,0,0xFFFFFFFF,63,2,1,NULL,'50',0,644,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5768,'Sakura_Coronet','Sakura Coronet',4,20,NULL,800,NULL,1,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,645,'bonus bMdef,3; bonus bMaxSP,25;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5769,'Gold_Angel_Sculpture','Gold Angel Sculpture',4,100,NULL,0,NULL,2,NULL,0,0xFFFFFFFF,63,2,256,NULL,'70',0,646,'skill "RG_GRAFFITI",1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (5770,'Splash_Hat','Splash Hat',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,649,'autobonus "{ sc_start SC_WINDWEAPON,180000,1; }",3,180000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }";',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (5770,'Splash_Hat','Splash Hat',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,649,'autobonus "{}",3,180000,BF_WEAPON,"{ sc_start SC_WINDWEAPON,180000,1; specialeffect2 EF_ENHANCE; }";',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5771,'Family_Hat','Family Hat',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,650,'bonus bDex,1; bonus bMdef,1; bonus bMaxHPrate,2; bonus bMaxSPrate,2; skill "PR_MAGNIFICAT",1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5772,'Red_Navy_Hat','Red Navy Hat',4,3000,NULL,500,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'95',1,651,'bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (5773,'Navy_Beret','Navy Beret',4,3000,NULL,500,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'95',1,652,'bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player,10;',NULL,NULL);
@@ -8524,10 +8568,10 @@ REPLACE INTO `item_db_re` VALUES (14611,'M_Def_Potion','M Def Potion',11,0,NULL,
 REPLACE INTO `item_db_re` VALUES (14612,'M_Mdef_Potion','M Mdef Potion',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_SPELLBREAKER; sc_start SC_MDEF_RATE,120000,3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14613,'RWC_Scroll_2012','RWC Scroll 2012',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_RWC_Scroll_2012);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14614,'Ex_Def_Potion','Ex Def Potion',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_GUARD; sc_start SC_DEF_RATE,1800000,3; sc_start SC_MDEF_RATE,1800000,3;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (14616,'STR_Biscuit_Stick','Bar Cookie Of Strength',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_STRFOOD,1800000,15; sc_start SC_INCATKRATE,600000,rand(11,111);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (14617,'VIT_Biscuit_Stick','Bar Cookie Of Vitality',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_VITFOOD,1800000,15; sc_start SC_INCDEFRATE,600000,rand(11,33);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (14616,'STR_Biscuit_Stick','Bar Cookie Of Strength',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_STRFOOD,1800000,15; sc_start SC_ATKPOTION,600000,rand(11,111);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (14617,'VIT_Biscuit_Stick','Bar Cookie Of Vitality',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_VITFOOD,1800000,15; bonus_script "{ bonus bHPRecovRate,rand(11,33); }",1800,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14618,'AGI_Biscuit_Stick','Bar Cookie Of Agility',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_AGIFOOD,1800000,15; sc_start SC_FLEEFOOD,600000,rand(11,33);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (14619,'INT_Biscuit_Stick','Bar Cookie Of Intelligence',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INTFOOD,1800000,15; sc_start SC_INCMATKRATE,600000,rand(11,111);',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (14619,'INT_Biscuit_Stick','Bar Cookie Of Intelligence',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INTFOOD,1800000,15; sc_start SC_MATKPOTION,600000,rand(11,111);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14620,'DEX_Biscuit_Stick','Bar Cookie Of Dexterity',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_DEXFOOD,1800000,15; sc_start SC_HITFOOD,600000,rand(11,33);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14621,'LUK_Biscuit_Stick','Bar Cookie Of Lucky',18,1,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LUKFOOD,1800000,15; sc_start SC_CRIFOOD,600000,rand(11,33);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (14623,'Golden_Treasure_Box_','Golden Treasure Box',18,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*getitem callfunc("F_Rand",Devilring card, Angeling card, 11 weapons smelting ticket, armor smelting 11 ticket , horns of the buffalo, ring of recovery, pink bunny costume hair band)*/',NULL,NULL);
@@ -9864,7 +9908,7 @@ REPLACE INTO `item_db_re` VALUES (18976,'Old_Minstrel_Song_Hat','Old Minstrel So
 REPLACE INTO `item_db_re` VALUES (18977,'Old_Midas_Whisper','Old Midas Whisper',4,10,NULL,100,NULL,10,NULL,1,0x00040000,56,2,256,NULL,'170',1,629,'bonus bAllStats,1; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bLongAtkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"GN_CARTCANNON",15*.@r/2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18978,'Old_Magic_Stone_Hat','Old Magic Stone Hat',4,10,NULL,100,NULL,10,NULL,1,0x00000200,56,2,256,NULL,'170',1,630,'bonus bAllStats,1; .@r = getrefine(); bonus bMdef,5; bonus bMatkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"WL_SOULEXPANSION",5*.@r/2; bonus2 bSkillCooldown,"WL_CRIMSONROCK",-1000-(.@r*100);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18979,'Old_Blazing_Soul','Old Blazing Soul',4,10,NULL,100,NULL,10,NULL,1,0x00008000,56,2,256,NULL,'170',1,631,'bonus bAllStats,1; .@r = getrefine(); bonus bBaseAtk,4*.@r; bonus bCritical,2*.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"SR_RAMPAGEBLASTER",15*.@r/2; bonus2 bSkillAtk,"SR_RIDEINLIGHTNING",20*.@r/2;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (18980,'Old_Wind_Whisper','Old Wind Whisper',4,10,NULL,100,NULL,10,NULL,1,0x10000,56,2,256,NULL,'170',1,633,'bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus2 bSkillAtk,"SO_POISON_BUSTER",15*.@r/2; bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20*.@r/2;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (18980,'Old_Wind_Whisper','Old Wind Whisper',4,10,NULL,100,NULL,10,NULL,1,0x10000,56,2,256,NULL,'170',1,633,'bonus bAllStats,1; .@r = getrefine(); bonus bAtk2,4*.@r; bonus bMatkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus2 bSkillAtk,"SO_POISON_BUSTER",15*(.@r/2); bonus2 bSkillAtk,"SO_VARETYR_SPEAR",20*(.@r/2);',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18981,'Old_Dying_Swan','Old Dying Swan',4,10,NULL,100,NULL,10,NULL,1,0x00080000,56,0,256,NULL,'170',1,635,'bonus bAllStats,1; .@r = getrefine(); bonus bLongAtkRate,.@r; bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus2 bSkillAtk,"CG_ARROWVULCAN",20*.@r/2; bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",5*.@r/2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18982,'Old_Circlet_Of_Bone','Old Circlet Of Bones',4,10,NULL,100,NULL,10,NULL,1,0x00001000,56,2,256,NULL,'170',1,1141,'bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bCriticalRate,.@r; bonus bAspdRate,1; bonus2 bSkillAtk,"GC_CROSSIMPACT",10*.@r/2; bonus2 bSkillAtk,"GC_CROSSRIPPERSLASHER",20*.@r/2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (18983,'Old_Protect_Of_Crown','Old Protect Of Crown',4,10,NULL,100,NULL,10,NULL,1,0x00004000,56,2,256,NULL,'170',1,1140,'bonus bAllStats,1; .@r = getrefine(); bonus bMaxHPrate,.@r/2; bonus bMaxSPrate,.@r/2; bonus bMdef,5; bonus bBaseAtk,4*.@r; bonus bAspd,.@r/5; bonus2 bSkillAtk,"LG_CANNONSPEAR",20*.@r/2; bonus2 bSkillAtk,"LG_OVERBRAND",5*.@r/2;',NULL,NULL);
@@ -9885,6 +9929,7 @@ REPLACE INTO `item_db_re` VALUES (19038,'12_Anniversary_Crown_Of_Saint','12 Anni
 REPLACE INTO `item_db_re` VALUES (19039,'12_Anniversary_Elf_Ears','12 Anniversary Elf Ears',4,10,NULL,120,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'0',1,875,'bonus2 bSubRace,RC_All,4; bonus2 bSubRace,RC_Player,-4;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19047,'Angeling_KnitCap','Angeling KnitCap',4,0,NULL,300,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'20',1,953,'bonus2 bSPGainRace,RC_Angel,5; bonus bHPGainValue,100; .@r = getrefine(); if (.@r >= 5) { bonus2 bSubRace,RC_Angel,5+((.@r >= 7) ? 5 : 0); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19048,'Elemental_Clothe','Elemental Clothes',4,0,NULL,500,NULL,45,NULL,1,0xFFFFFFFF,63,2,16,NULL,'80',1,NULL,'.@r = getrefine(); bonus bLongAtkRate,2+((.@r >= 9) ? 3 : 0)+((.@r >= 7) ? 2 : 0); if (.@r >= 7) bonus bUnbreakableArmor,1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19050,'Loki_Nidhogg_Hat','Loki & Nidhoggur\'s Hat',4,0,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,1304,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19051,'Warrior_Moon_Cat','Warrior Moon Cat',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,1308,'/*Enables use of Level 1 Monster\'s Cry*/ bonus bAllStats,3; bonus2 bHPDrainRate,40,5; bonus2 bSPDrainRate,10,2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19052,'Sigruns_Wing','Rental Sigrun\'s Wing',4,10,NULL,0,NULL,2,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,568,'if (Class == Job_Swordman || Class == Job_Thief || Class == Job_Merchant || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Star_Gladiator2) bonus bAspd,1; else if (Class == Job_Mage || Class == Job_Acolyte || Class == Job_Ninja || Class == Job_Soul_Linker) { bonus bMatk,5; bonus bHealPower,2; } else if (Class == Job_Archer || Class == Job_Gunslinger) bonus bLongAtkRate,2; else if (Class == Job_Novice || Class == Job_SuperNovice) { bonus bMaxHP,120; bonus bMaxSP,60; }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19053,'Fighter_Moon_Cat','Fighter Moon Cat',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,1308,'/*Enables use of Level 1 Monster\'s Cry*/ .@r = getrefine(); bonus bAllStats,3; bonus2 bAddEff,Eff_Stun,500+(.@r*100);',NULL,NULL);
@@ -10701,7 +10746,7 @@ REPLACE INTO `item_db_re` VALUES (20374,'C_Mechanical_Plant_Hat','Costume Mechan
 REPLACE INTO `item_db_re` VALUES (20375,'C_Ignis_Cap','Costume Ignis Cap',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,803,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20376,'C_Memory_of_Lovers','Costume Memory of Lovers',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,1072,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20377,'C_Flight_Cap','Costume Flight Cap',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,820,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (20378,'C_Sky_Met','Costume Sky Met',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,868,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20378,'C_Skymet','Costume Sky Met',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,868,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20379,'C_Pocketwatch_Hair_Ornament','Costume Pocketwatch Hair Ornament',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1404,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20380,'C_Mechanical_Feather_Hairband','Costume Mechanical Feather Hairband',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1405,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20381,'C_Steampunk_Hat','Costume Steampunk Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1406,NULL,NULL,NULL);
@@ -10793,6 +10838,10 @@ REPLACE INTO `item_db_re` VALUES (20507,'C_Poring_Bag','Costume Poring Bag',4,0,
 REPLACE INTO `item_db_re` VALUES (20508,'C_Poster_Girl_Hat','Costume Poster Girl Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1446,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20509,'C_Wings_of_Uriel','Costume Wings of Uriel',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,17,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20510,'C_SwordWing','Costume Sword Wing',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,19,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20511,'C_Blue_Fairy_Wing','Blue Wings of Fairy',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,21,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20512,'C_Bag_of_Adventurer_j','Costume Adventurer\'s Backpack',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,2,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20514,'C_Thanatos_Sword','Costume Thanatos Sword',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,23,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (20516,'C_Wings_of_Michael','Costume Wings of Michael',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,24,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20600,'Fantastic_Aura','Fantastic Aura',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,0,'/*TODO: View ID*/ bonus bUnbreakableHelm,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20700,'Egir_Manteau','Egir Manteau',4,200000,NULL,300,NULL,10,NULL,1,0xFFFFFFFF,63,2,4,NULL,'110',1,0,'bonus bUnbreakableGarment,1; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); }',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (20702,'TE_Woe_Muffler','TE Woe Muffler',4,0,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,63,2,4,NULL,'40',1,NULL,'bonus bMdef,5; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;',NULL,NULL);
@@ -11106,6 +11155,7 @@ REPLACE INTO `item_db_re` VALUES (22808,'Special_Gift_Box','Special Gift Box',2,
 REPLACE INTO `item_db_re` VALUES (22812,'Sealed_Dracula_Scroll','Sealed Dracula Scroll',2,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,'1',NULL,NULL,'getitem callfunc("F_Rand",6228,6232,22813,19937,17314, 6635),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22813,'Bearer\'s_Shadow_Box','Bearer\'s Shadow Box',2,10,NULL,10,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,'1',NULL,NULL,'getitem callfunc("F_Rand",24180,24181,24182,24183,24184,24185),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22814,'Cat_Hand_Ticket','Cat Hand Ticket',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (22822,'Summer_Vacation_Costumes','Summer Vacation Costumes',2,NULL,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,NULL,NULL,'1',NULL,NULL,'sc_start SC_DRESSUP,600000,1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22823,'Sealed_Sniper_Scroll','Sealed Sniper Scroll',2,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*getitem callfunc("F_Rand",4491,6228,6232,24196, Hasty Shadow Armor, 19882, 17474, 6635),1;*/',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22826,'Enchant_Stone_Box4','Costume Enchantment Stone Box 4',2,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (22827,'Shadow_Cube','Shadow Cube',2,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*No Info*/',NULL,NULL);
@@ -11490,7 +11540,7 @@ REPLACE INTO `item_db_re` VALUES (27165,'Dark_Faceworm_Card','Dark Faceworm Card
 REPLACE INTO `item_db_re` VALUES (27166,'Faceworm_Egg_Card','Faceworm Egg Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'.@r = getrefine(); .@sub = 2+(.@r >= 9 ? 3 : .@r >= 7 ? 1 : 0); bonus bNearAtkDef,.@sub; bonus bMagicAtkDef,.@sub;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (27167,'Faceworm_Larva_Card','Faceworm Larva Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,15; bonus2 bMagicAddSize,Size_All,getrefine()*3;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (27168,'Irene_High_Elder_Card','Irene High Elder Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus bHit,10 + 5 * (getrefine()/3);',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (27169,'Payon_Soldier_Card','Payon Soldier Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'.@atk = 5; .@r = getrefine(); if(getiteminfo(getequipid(EQI_HAND_R),11) == W_SPEAR && .@r >= 10){ .@atk += 20; if(.@r >= 14){ .@atk += 20; } } } bonus bAtk,.@atk; bonus bMatk,.@atk;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (27169,'Payon_Soldier_Card','Payon Soldier Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'.@atk = 5; .@r = getrefine(); if(getiteminfo(getequipid(EQI_HAND_R),11) == W_SPEAR && .@r >= 10){ .@atk += 20; if(.@r >= 14){ .@atk += 20; } } bonus bAtk,.@atk; bonus bMatk,.@atk;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (27181,'Airship_Raid_Card','Airship Raid Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'.@r = getrefine(); bonus bLongAtkRate,1 + .@r/2; bonus bCritical,.@r/2;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (27182,'Captain_Felock_Card','Captain Felock Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bAtk,30; .@r = getrefine(); bonus2 bSkillAtk,"RL_AM_BLAST",.@r >= 10 ? 60 : 30; bonus2 bSkillAtk,"RL_HAMMER_OF_GOD",.@r >= 10 ? 60 : 30;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (27183,'Gigantes_Card','Gigantes Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,128,NULL,NULL,NULL,NULL,'bonus bAtk,20; if(readparam(bStr) >= 120) { bonus bAtk,20; bonus bAspdRate,-3; }',NULL,NULL);
@@ -11833,7 +11883,7 @@ REPLACE INTO `item_db_re` VALUES (31084,'C_Long_Pony_White','Costume Long Pony W
 REPLACE INTO `item_db_re` VALUES (31085,'C_Long_Pony_Crimson','Costume Long Pony Crimson',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1525,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31086,'C_Long_Pony_Purple','Costume Long Pony Purple',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1526,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31087,'C_Dwarf_Beard','Costume Dwarf Beard',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1349,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (31088,'C_Mad_Hatter','Costume Mad Hatter',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1421,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31088,'C_Mad_Hatter','Costume Mad Hatter',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,5120,NULL,'1',0,1421,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31089,'C_Exploding_Crimson_Flame','Costume Exploding Crimson Flame',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31090,'C_Angelring_Hat','Costume Angelring Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,348,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31091,'C_Show_Me_The_Zeny','Costume Show Me The Zeny',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,0,NULL,NULL,NULL);
@@ -11891,6 +11941,8 @@ REPLACE INTO `item_db_re` VALUES (31150,'C_Shalosh_Head_Dress','Costume Shalosh
 REPLACE INTO `item_db_re` VALUES (31151,'C_Chasher_Ear','Costume Cheshire\'s Cat Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1565,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31152,'C_Piamette_BowTie_Red','Costume Piamette\'s Red Bow Tie',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1566,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31153,'C_Aniv_Star_Hat2','Costume Cactus Flower Corsage',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1567,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31154,'C_Cap','C Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,14,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31158,'C_Squirrel_Ear_Hat','Costume Squirrel Ear Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1486,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31160,'C_Rune_Helm','Costume Rune Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1361,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31161,'C_Tiger_Mask','Costume Tiger Mask',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,181,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31162,'C_Shaving_Foam','Costume Shaving Foam',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1129,NULL,NULL,NULL);
@@ -11904,4 +11956,238 @@ REPLACE INTO `item_db_re` VALUES (31169,'C_Hat_Of_Outlaw','Costume Hilarious Ban
 REPLACE INTO `item_db_re` VALUES (31170,'C_Wind_Wings','Costume Wings of Wind',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,493,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31171,'C_Nekomimi','Costume Nekomimi',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,182,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (31172,'C_Roast_Memory','Costume Roast Memory',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,7168,NULL,'1',0,1576,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31173,'C_Oyster_Parakeet','Costume Oyster Parakeet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,419,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31174,'C_Suspicious_Bread_Bag','C Suspicious Bread Bag',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,429,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31175,'C_Strawberry_Hat','Costume Strawberry Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,755,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31176,'C_Looking','C Looking',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1577,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31177,'C_Tail_Hat','C Tail Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1578,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31178,'C_Fire_Muffler','C Fire Muffler',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1579,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31179,'C_Wolf_Masquerade','C Wolf Masquerade',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1580,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31180,'C_King_Sura_Headband','C King Sura Headband',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1581,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31181,'C_Necklace_Rosary','Costume Necklace Rosary',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1471,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31182,'C_Side_Cap','Costume Side Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,529,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31183,'C_Fallen_Angel_Blessing','Costume Blessing of Fallen Angel',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1250,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31184,'C_Hawkeye','Costume Hawkeye',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,609,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31185,'C_Engineer_Cap','Costume Engineer Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,608,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31186,'C_Black_Cat','Costume Black Cat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1582,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31187,'C_War_Princess_Ribbon','Costume War Princess Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1583,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31188,'C_Mono_Gothic_Bonnet','Costume Mono Gothic Bonnet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1584,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31189,'C_Cat_Ears_Cape_Red','Costume Red Cat Ears Cape',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1591,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31190,'C_Angel_Mini_Silk_Hat_B','Costume Black Angel Mini Silk Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1586,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31191,'C_Whikebain_Ears_Gold','Vibrant Cat Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1588,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31192,'C_Bluecat_Ear','Blue Cat Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1589,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31193,'C_Tare_Ahat','Costume Drooping Ahat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1590,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31194,'C_Spinning_Propeller','Costume Spinning Propeller',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,270,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31195,'C_Choco_Minihat','Costume Mini Chocolate Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1592,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31196,'C_JP_EV12','C Drooping Chuni Penguin',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1596,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31197,'C_Egg_Crispinette','Costume Egg Crispinette',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1598,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31198,'C_Octopus_Hat','C Octopus Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,538,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31199,'C_Weird_Beard','C Weird Beard',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,21,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31200,'C_Wrapping_Ribbon','C Wrapping Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1599,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31201,'C_Royal_Rabbit_Crown','C Royal Rabbit Crown',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1600,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31202,'C_Dog_Officer','C Dog Officer',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1601,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31203,'C_Charcoal_Stove','C Charcoal Stove',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1602,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31204,'C_Drooping_White_Cat','C Drooping White Cat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,378,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31205,'C_Large_Orc_Hero_Helm','C Large Orc Hero Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,381,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31206,'C_Rune_Hairband','C Rune Hairband',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,564,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31207,'C_Dokkebi_Mask','C Dokkebi Mask',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,6144,NULL,'1',0,689,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31208,'C_Straight_Long_YL','C Straight_Long Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1603,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31209,'C_Straight_Long_WH','C Straight Long White',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1604,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31210,'C_Side_Pigtail_BU','C Side Pigtail Blue',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1605,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31211,'C_Side_Pigtail_RD','C Side Pigtail Red',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1606,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31212,'C_Side_Pigtail_YL','C Side Pigtail Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1607,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31213,'C_Side_Pigtail_GN','C Side Pigtail Green',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1608,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31214,'C_Side_Pigtail_BL','C Side Pigtail Black',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1609,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31215,'C_Side_Pigtail_WH','C Side Pigtail White',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1610,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31216,'C_Side_Pigtail_OM','C Side Pigtail Brown',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1611,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31217,'C_Side_Pigtail_PP','C Side Pigtail Purple',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1612,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31218,'C_Low_Pony_BU','C Low Pony Blue',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1613,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31219,'C_Low_Pony_RD','C Low Pony Red',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1614,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31220,'C_Low_Pony_YL','C Low Pony Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1615,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31221,'C_Low_Pony_GN','C Low Pony Green',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1616,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31222,'C_Low_Pony_BL','C Low Pony Black',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1617,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31223,'C_Low_Pony_WH','C Low Pony White',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1618,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31224,'C_Low_Pony_OM','C Low Pony Brown',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1619,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31225,'C_Low_Pony_PP','C Low Pony Purple',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1620,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31226,'C_Long_Twin_BU','C Long Twin Blue',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1621,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31227,'C_Long_Twin_RD','C Long Twin Red',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1622,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31228,'C_Long_Twin_YL','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1623,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31229,'C_Long_Twin_GN','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1624,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31230,'C_Long_Twin_BL','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1625,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31231,'C_Long_Twin_WH','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1626,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31232,'C_Long_Twin_OM','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1627,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31233,'C_Long_Twin_PP','C Long Twin Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1628,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31234,'C_Persica','C Persica',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,659,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31235,'C_Large_Ribbon_Muffler_Mid','C Large Ribbon Muffler Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1312,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31236,'C_Vicious_Mind_Aura_Mid','C Vicious Mind Aura Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1267,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31237,'C_Pale_Yellow_Ribbon_Lower','C Pale Yellow Ribbon Lower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1474,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31238,'C_True_Love_Upper','C True Love Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,489,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31239,'C_Love_Rabbit_Hood_Upper','C Love Rabbit Hood Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,549,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31240,'C_Whisper_Mask_','C Whisper Mask Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,321,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31241,'C_Burning_Sun_Lower','C Burning Sun Lower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,654,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31242,'C_Anubis_Helm_','C Anubis Hat Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,485,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31243,'C_Tongue_Mask_Mid','C Tongue Mask Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,253,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31244,'C_Skymet_','C Skymet Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,868,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31245,'C_Cherry','C Cherry',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,602,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31246,'C_Humming_Bird','C Humming Bird',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,702,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31247,'C_Hippo_Hat','C Hippo Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,859,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31248,'C_Isabella_Red_Ears','C Isabella Red Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1030,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31249,'C_Rabbit_Hopping','C Hopping Rabbit',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1635,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31250,'C_Wonderful_Beast_Ear','C Wonderful Beast Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1636,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31251,'C_Cat_Mouth','C Cats Mouth',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1637,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31252,'C_Cat_Ear_Hat_White','C White Cat Ears Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1638,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31253,'C_Rinzu_Helmet','C Rinzu Helmet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,548,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31254,'C_Red_Hare_Hat','C Red Hare Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,7168,NULL,'1',0,1631,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31255,'C_Sweet_Helmet','C Sweet Helmet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,1374,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31256,'C_Jaguar_Mask','C Jaguar Mask',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,6144,NULL,'1',0,530,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31260,'C_Observer_J','C Observer',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1639,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31261,'C_Soda_in_Mouth','C Soda in Mouth',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1643,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31262,'C_Disposable_3D_Glasses','C Disposable 3D Glasses',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,661,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31263,'C_Disposable_Popcorn_Hat','C Disposable Popcorn Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,415,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31264,'C_Wings_of_Protector_Lower','C Wings of Protector Lower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,990,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31265,'C_Straight_Pony_Blue_Mid','C Straight Pony Blue Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1394,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31266,'C_Straight_Pony_Red_Mid','C Straight Pony Red Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1392,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31267,'C_Straight_Pony_Yellow_Mid','C Straight Pony Yellow Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1389,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31268,'C_Straight_Pony_Green_Mid','C Straight_Pony Green Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1390,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31269,'C_Straight_Pony_Black_Mid','C Straight Pony Black Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1371,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31270,'C_Straight_Pony_White_Mid','C Straight Pony White Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1395,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31271,'C_Straight_Pony_Crimson_Mid','C Straight Pony Crimson Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1393,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31272,'C_Straight_Pony_Purple_Mid','C Straight Pony Purple Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1391,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31273,'C_Cowlick_Blue_Mid','C Cowlick Blue Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1387,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31274,'C_Cowlick_Red_Mid','C Cowlick Red Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1385,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31275,'C_Cowlick_Yellow_Mid','C Cowlick Yellow Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1382,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31276,'C_Cowlick_Green_Mid','C Cowlick Green Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1383,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31277,'C_Cowlick_Black_Mid','C Cowlick Black Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1372,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31278,'C_Cowlick_White_Mid','C Cowlick White Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1388,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31279,'C_Cowlick_Crimson_Mid','C Cowlick Crimson Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1386,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31280,'C_Cowlick_Purple_Mid','C Cowlick Purple Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1384,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31281,'C_Loose_Wave_Twin_Blue_Mid','C Loose Wave Twin Blue Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1401,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31282,'C_Loose_Wave_Twin_Red_Mid','C Loose Wave Twin Red Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1399,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31283,'C_Loose_Wave_Twin_Yellow_Mid','C Loose Wave Twin Yellow Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1396,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31284,'C_Loose_Wave_Twin_Green_Mid','C Loose Wave Twin Green Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1397,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31285,'C_Loose_Wave_Twin_Black_Mid','C Loose Wave Twin Black Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1373,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31286,'C_Loose_Wave_Twin_White_Mid','C Loose Wave Twin White Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1402,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31287,'C_Loose_Wave_Twin_Crimson_Mid','C Loose Wave Twin Crimson Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1400,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31288,'C_Loose_Wave_Twin_Purple_Mid','C Loose Wave Twin Purple Mid',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1398,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31289,'C_Black_Wing_Ears_Lower','C Black Wing Ears Lower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1336,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31290,'C_Angels_Feather_Cap','C Angels Feather Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,929,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31291,'C_Devils_Feather_Cap','C Devils Feather Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,930,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31293,'C_Kings_Crown_Purple','C Crown of Ancient King Purple',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1651,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31294,'C_Jirant_Circlet_Red','C Jirant Circlet Red',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1652,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31295,'C_Red_Wing_Hat','C Red Wing Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,613,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31296,'C_Strawberry_in_Mouth','C Strawberry in Mouth',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,861,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31297,'C_Fruit_of_Love','C Fruit of Love',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,140,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31298,'C_Sepia_Parade_Hat','C Sepia Parade Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,682,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31299,'C_White_Rabbit','C White Rabbit',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1656,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31300,'C_Warm_Cat_Muffler','C Warm Cat Muffler',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1657,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31301,'C_Blinking_Eyes','C Blinking Eyes',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1658,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31302,'C_Black_Magenta_Ribbon','C Black Magenta Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1659,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31303,'C_Black_Ramen_Hat_','C Black Ramen Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1338,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31304,'C_Summer_Fan','C Summer Fan',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1051,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31306,'C_Toucan_Hat','C Toucan Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,528,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31307,'C_Violet_Macaw','C Violet Macaw',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,656,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31308,'C_Protect_Feathers','C Protect Feathers',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1232,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31309,'C_Pure_White_Marching_Hat','C Pure White Marching Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1470,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31310,'C_666_Black_Elven_Ears','C 666 Black_ Elven Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,498,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31311,'C_Dolor_Thanatos_Mask','C Dolor Thanatos Mask',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,6144,NULL,'1',0,666,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31312,'C_Hades_Helm','C Hades Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,523,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31313,'C_FallenAngelWingEar','C Fallen Angel Wing Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1662,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31314,'C_Ghost_Holiday','C Ghost Holiday',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1663,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31315,'C_Stall_Of_Angel','C Stall of Angel',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1664,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31316,'C_C_FlutterButterfly_BL','C Black Fluttering Butterfly',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1665,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31317,'C_15th_Anniversary_Wing','C 15th Anniversary Wing',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1660,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31318,'C_Gerhard_Von_Devi','Costume Gerhard Von Devi',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1092,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31319,'C_Summer_Fan_','C Summer Fan',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1051,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31320,'C_Pinwheel_Hat','C Pinwheel Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,456,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31321,'C_Shining_Sunflower','C Shining Sunflower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,681,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31322,'C_Candy_Hat','C Candy Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,853,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31323,'C_Yellow_Hunting_Cap','C Yellow Hunting Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,484,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31325,'C_Queen_Scarabas_Helmet','C Queen Scarabas Helmet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,5120,NULL,'1',0,1231,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31326,'C_Rolf_Von_Ziege_666_II','C Rolf Von Ziege 666 II',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,946,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31327,'C_Wood_Goblins_Nose','C Wood Goblins Nose',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,737,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31328,'C_Faceworm_Eggshell','C Faceworm Eggshell',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1356,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31329,'C_Alice_Wig','Costume Alice Wig',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1673,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31330,'C_Fallen_Angel_Valletta','Costume Fallen Angel Valletta',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1674,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31331,'C_Chung_E_Shinyon_Cap','C Chung e Shinyon Cap',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1675,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31332,'C_Khalitzburg_KN_Helm_BL','C Black Khalitzburg Knight Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1676,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31368,'C_Harvest_Festa_Hat','C Thanksgiving Memorial Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1677,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31369,'C_Straight_Long_WH_','Costume Straight Long White',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1604,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31370,'C_Straight_Long_YL_','Costume Straight Long Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1603,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31373,'C_Crown_of_Ancient_king','C Crown of Ancient king',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1412,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31374,'C_Explosion_gum','C Explosion gum',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1414,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31375,'C_Mystic_Eye','C Mystic Eye',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1490,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31376,'C_Ancient_Dragon_Coronet_Purple','C Ancient Dragon Coronet Purple',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1680,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31377,'C_Glastheim_Obeserver','C Glastheim Obeserver',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1041,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31378,'C_Catharina_Von_Brad_60th','C Catharina Von Brad 60th',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1527,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31379,'C_Wind-Up_Key','C Wind-Up Key',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1335,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31380,'C_Crow','C Crow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1035,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31381,'C_Diabolic_Lapel','Costume Diabolic Lapel',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1681,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31382,'C_Cat_Ears_Punkish','Costume Cat Ears Punkish',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1682,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31383,'C_Volume_Low_Twin','Costume Volume Low Twin',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1683,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31384,'C_False_Ears','Costume False Ears',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1684,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31385,'C_Gothic_Pumpkin_Head','Costume Gothic Pumpkin Head',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1685,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31387,'C_Jjakk','C Jjakk',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1687,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31389,'C_White_Bird_Rose','C White Bird Rose',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1688,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31390,'C_Let_It_Snow','C Let It Snow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1690,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31391,'C_Floating_Stone_of_Sage','C Floating Stone of Sage',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1230,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31392,'C_Radio_Antenna','C Radio Antenna',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,347,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31393,'C_Vajra','C Vajra',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,983,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31394,'C_Magician_White_Hat','C Magician White Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,283,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31395,'C_Book_Of_Magic','C Book of Magic',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1691,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31396,'C_Sorcerer_Hood','C Sorcerer Hood',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1692,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31397,'C_Sitting_Pope','C Sitting Pope',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1553,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31398,'C_Blinking_Thin_Eyes','C Blinking Thin Eyes',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1693,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31399,'C_Darkness_Veil','C Darkness Veil',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1694,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31400,'C_Ribbon','C Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,17,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31401,'C_Nuns_Veil','C Nuns Veil',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,176,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31402,'C_Idun_Green_Apple','C Iduns Green Apple',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1698,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31403,'C_Wall','C Wall',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1699,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31404,'C_Poring_Traffic_Light','C Poring Traffic Light',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1700,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31405,'C_Eleanor_Wig_YL','C Eleanor Wig Yellow',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1701,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31406,'C_Nydhog_Wig_WH','C Nydhoggur Wig White',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1702,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31407,'C_Alice_Wig_PK','C Alice Wig Peach',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1703,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31408,'C_Ragnarok_Rush_Goat','C Ragnarok Rush Goat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,41,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31409,'C_Barrel_Helm','C Barrel Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,7168,NULL,'1',0,1498,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31410,'C_GodsHelm','Costume God\'s Helm',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1678,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31411,'C_Leo_Diadem','C Leo Diadem',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,566,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31412,'C_Virgo_Crown','C Virgo Crown',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,573,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31413,'C_Taurus_Crown','C_ Taurus Crown',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,536,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31414,'C_Cancer_Diadem','C Cancer Diadem',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,560,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31415,'C_Wanderers_ Sakkat','Costume Wanderer\'s Sakkat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,3072,NULL,'1',0,558,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31417,'C_Rice_Ball_Hat','C Rice Ball Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,556,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31418,'C_Green_Onion_in_Mouth','C Green Onion in Mouth',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,824,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31420,'C_Shining_Santa_Poring','C Shining Santa Poring',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,961,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31432,'C_Floating_Ice','C Floating Ice',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1562,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31433,'C_Celestial_Circle','C Celestial Circle',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1073,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31434,'C_Cloud_Burst','C Cloud Burst',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,705,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31435,'C_Ghost_Magicians_Knit_Hat','C Ghost Magicians Knit Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,854,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31436,'C_Lazy_Cat','C Lazy Cat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,274,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31437,'C_Baby_Penguin','C Baby Penguin',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1705,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31438,'C_Fluffy_Angel_Cape','C Fluffy Angel Cape',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1706,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31439,'C_Fluffy_Heart_Earmuffs','C Fluffy Heart Earmuffs',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1707,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31440,'C_Snow_Bear_Hood','C Snow Bear Hood',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1708,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31441,'C_Penguin_Cap_BU','C Penguin Cap Blue',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1709,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31442,'C_Smile_Mask_Middle','C Smile Mask Middle',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,65,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31443,'C_Munak_Hat_','C Munak Hat Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,51,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31444,'C_Bongun_Hat_','C Bongun Hat Upper',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,139,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31446,'C_Toy_Syringe','C Toy Syringe',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,842,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31447,'C_Light_Moonlight_Hat','C Light Moonlight_Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,913,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31448,'C_Stings_Silk_Ribbon','C Stings Silk Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1457,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31449,'C_Blue_Rose_Eyepatch','C Blue Rose Eyepatch',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1712,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31450,'C_Lolita_Two_Side_Up','C Lolita Two Side Up',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1713,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31451,'C_Blue_Frill_Ribbon','C Blue Frill Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1714,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31452,'C_White_Cat','C White Cat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1715,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31453,'C_L_RibbonMuff_Black','C Large Ribbon Muffler Black',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1716,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31455,'C_Enchanted_Dog','C Super Cute Dog',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,6144,NULL,'1',0,1718,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31457,'C_Laughing_Wonderful_Wolf_Hat','C Laughing Wonderful Wolf Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1016,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31464,'C_Bloom_Afro','C Bloom Afro',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,837,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31468,'C_Stripe_Hat','C Stripe Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1728,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31470,'C_Scroll_of_Tengu','C Scroll of Tengu',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1445,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31471,'C_Celestial_Flower','C Celestial Flower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,438,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31472,'C_Fairy_Feathers','C Fairy Feathers',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,1723,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31473,'C_Tipsy','C Tipsy',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1724,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31474,'C_Straight_Long_BL','C Straight Long Black',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1725,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31475,'C_Black_Fox_Ear_Ribbon','C Black Fox Ears Ribbon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1726,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31476,'C_Cherry_Blossom_Hat_YL','C Yellow Cherry Blossom Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,1727,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (31478,'C_Eleanor_Wig_','C Eleanors Wig Lower',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,1502,NULL,NULL,NULL);
 

+ 122 - 8
sql-files/mob_db_re.sql

@@ -256,6 +256,7 @@ REPLACE INTO `mob_db_re` VALUES (1183,'CHONCHON_','Chonchon','Chonchon',5,63,1,3
 REPLACE INTO `mob_db_re` VALUES (1184,'FABRE_','Fabre','Fabre',1,30,1,1,0,1,4,7,0,0,1,2,1,1,4,5,10,12,0,4,22,0x2003885,400,1672,672,480,0,0,0,0,0,0,0,914,2000,949,250,1502,80,721,2,511,350,705,500,1501,200,0,0,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (1185,'WHISPER_','Whisper','Whisper',34,1796,1,483,737,1,198,239,0,45,1,51,14,0,60,0,10,12,0,1,28,0x0,150,1960,960,504,0,0,0,0,0,0,0,1001,10,1059,100,0,0,2333,1,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (1186,'WHISPER_BOSS','Giant Whisper','Giant Whisper',66,2570,0,630,710,1,282,341,94,45,40,79,44,51,67,31,10,12,0,6,48,0x2003695,250,2536,1536,672,0,0,0,0,0,0,0,1001,150,1059,5335,2282,1,2333,10,0,0,0,0,0,0,0,0,0,0,4303,1);
+#1187,SWITCH
 REPLACE INTO `mob_db_re` VALUES (1188,'BON_GUN','Bongun','Bongun',59,2510,1,531,597,1,189,218,88,5,55,24,24,5,34,10,10,12,1,1,29,0x3095,200,1720,500,420,0,0,0,0,0,0,0,1094,5500,7014,40,618,60,5046,1,609,15,508,1000,508,1250,0,0,0,0,4212,1);
 REPLACE INTO `mob_db_re` VALUES (1189,'ORC_ARCHER','Orc Archer','Orc Archer',78,4835,1,922,1161,9,260,303,67,31,55,32,24,30,99,15,10,12,1,7,22,0x3095,300,1960,620,480,0,0,0,0,0,0,0,1063,4656,1753,1000,1756,2500,1755,2500,1734,2,507,1400,509,900,0,0,0,0,4256,1);
 REPLACE INTO `mob_db_re` VALUES (1190,'ORC_LORD','Orc Lord','Orc Lord',55,552000,1,156240,122760,1,780,1428,256,92,95,95,103,96,155,85,10,12,2,7,82,0x6283695,100,1248,500,360,31102,968,5500,617,2000,0,0,1363,400,2621,400,5007,400,1371,400,617,1000,985,4268,16000,100,0,0,0,0,4135,1);
@@ -285,6 +286,8 @@ REPLACE INTO `mob_db_re` VALUES (1213,'HIGH_ORC','High Orc','High Orc',81,4193,1
 REPLACE INTO `mob_db_re` VALUES (1214,'CHOCO','Choco','Choco',48,1080,1,369,414,1,120,167,70,30,40,45,32,19,42,20,10,12,0,2,23,0x3095,150,1028,528,360,0,0,0,0,0,0,0,7011,5335,942,7000,985,53,513,5000,634,20,532,1000,607,25,0,0,0,0,4285,1);
 REPLACE INTO `mob_db_re` VALUES (1215,'STEM_WORM','Stem Worm','Stem Worm',84,4530,1,1080,1215,1,266,307,73,50,55,37,25,47,70,30,10,12,1,3,24,0x3095,300,1956,756,528,0,0,0,0,0,0,0,7012,5335,509,1800,1968,10,756,115,997,5,0,0,608,45,0,0,0,0,4224,1);
 REPLACE INTO `mob_db_re` VALUES (1216,'PENOMENA','Penomena','Penomena',85,4589,1,1116,1556,7,292,333,85,32,76,38,35,35,89,10,10,12,1,5,25,0x3695,400,832,500,600,0,0,0,0,0,0,0,7013,4850,962,8000,938,7000,525,200,719,15,1258,1,716,550,0,0,0,0,4314,1);
+#1217,ORC_WARRIOR
+#1218,PECO_EGG
 REPLACE INTO `mob_db_re` VALUES (1219,'KNIGHT_OF_ABYSS','Knight of Abyss','Abysmal Knight',122,23297,1,4779,4013,1,810,1002,102,50,121,55,68,70,97,37,10,12,2,7,87,0x3695,300,1500,500,1000,0,0,0,0,0,0,0,1064,5335,7023,5,2318,1,1421,25,0,0,985,369,15014,10,0,0,0,0,4140,1);
 REPLACE INTO `mob_db_re` VALUES (1220,'M_DESERT_WOLF','Desert Wolf','Desert Wolf',103,9447,1,349,218,1,254,313,114,47,93,69,63,61,82,42,10,12,1,2,23,0x3695,200,1120,420,288,0,0,0,0,0,0,0,1253,5,7030,5500,2311,1,517,1200,920,2000,756,53,0,0,0,0,0,0,4082,1);
 REPLACE INTO `mob_db_re` VALUES (1221,'M_SAVAGE','Savage','Savage',26,2092,0,321,203,1,146,177,16,5,1,26,54,10,37,10,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,1028,6000,514,150,702,3,2276,2,605,15,757,70,0,0,0,0,0,0,4078,1);
@@ -2240,15 +2243,15 @@ REPLACE INTO `mob_db_re` VALUES (2997,'G_XM_CELINE_KIMI','Kimi\'s Phantom','Kimi
 #3017,EP14_3_DEATH_C_MOB2
 #3018,EP14_3_DEATH_C_MOB3
 #3019,CELINE_KIMI
-#3020,FIRE_CONDOR
-#3021,FIRE_SAND_MAN
-#3022,FIRE_FRILLDORA
-#3023,FIRE_GOLEM
+REPLACE INTO `mob_db_re` VALUES (3020,'FIRE_CONDOR','Fire Condor','Fire Condor',141,125114,1,7021,7481,1,1364,2565,71,45,104,72,66,10,113,52,10,12,1,2,43,0x0000081,110,1148,648,480,0,0,0,0,0,0,0,6691,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3021,'FIRE_SAND_MAN','Fire Sand Man','Fire Sandman',143,130501,1,7207,7734,1,1404,2760,122,73,84,36,25,55,124,35,10,12,1,0,63,0x003885,150,1672,720,288,0,0,0,0,0,0,0,6694,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3022,'FIRE_FRILLDORA','Fire Frilldora','Fire Frilldora',147,141301,1,7807,8199,1,1511,2903,134,40,148,38,128,45,121,30,10,12,1,2,63,0x0000081,130,1540,720,432,0,0,0,0,0,0,0,6694,1500,6696,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3023,'FIRE_GOLEM','Fire Golem','Fire Golem',148,180213,1,8912,9464,1,1478,2799,292,102,70,78,267,25,84,25,10,12,2,0,83,0x003885,200,1608,816,396,0,0,0,0,0,0,0,6693,2000,6695,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #3024,14_3_MERCENARY_A
 #3025,14_3_MERCENARY_B
-#3026,FIREPIT
-#3027,FULBUK
-#3028,SONIA
+REPLACE INTO `mob_db_re` VALUES (3026,'FIREPIT','Fire Pit','Fire Pit',17,10,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3027,'FULBUK','Fire Bug','Fire Bug',150,234,1,58,47,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x0000001,120,1288,288,768,0,0,0,0,0,0,0,6689,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db_re` VALUES (3028,'SONIA','Sonia','Sonia',17,20,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,0,0,0,0,0,0,0,6690,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #3029,GRIM_REAPER_ANKOU
 #3030,STANDING_SOUL
 #3031,MUTANT_NECROMANCER
@@ -3302,7 +3305,118 @@ REPLACE INTO `mob_db_re` VALUES (3508,'DR_EGGRING_G','Eggring','Eggring',20,220,
 #20108,TW_KIEL
 #20109,TW_TAO_GUNKA
 #20110,TW_KNIGHT_OF_WINDSTORM
-
+#20111,MD_TRE_DRAKE
+#20112,MD_MANHOLE
+#20113,MD_TRE_MIMIC
+#20114,MD_TRE_WRAITH
+#20115,MD_TRE_PIRATE_SKEL
+#20116,MD_TRE_WHISPER
+#20117,MD_TRE_HYDRA
 #20118,GOBLIN_KING
 #20119,BAD_CATCUMBER
 
+#20165,MD_TOUCAN
+#20166,FLAME_GHOST
+#20167,ICE_GHOST
+#20168,B_FLAME_GHOST
+#20169,B_ICE_GHOST
+#20170,GARGOYLE_MJ
+#20171,STING_MJ
+#20172,RAYDRIC_MJ
+#20173,RAYDRIC_ARCHER_MJ
+#20174,RAGGED_ZOMBIE_MJ
+#20175,EXTRA_JOKER
+#20176,ERZSEBET
+#20177,JENIFFER
+#20178,GENERAL_ORC
+#20179,SIEGLOUSE
+
+#20181,VH_AMON_RA
+#20182,VH_BAPHOMET
+#20183,VH_DARK_LORD
+#20184,VH_DOPPELGANGER
+#20185,VH_DRACULA
+#20186,VH_DRAKE
+#20187,VH_EDDGA
+#20188,VH_GARM
+#20189,VH_GOLDEN_BUG
+#20190,VH_KNIGHT_OF_WS
+#20191,VH_MAYA
+#20192,VH_MISTRESS
+#20193,VH_MOONLIGHT
+#20194,VH_ORC_LORD
+#20195,VH_ORK_HERO
+#20196,VH_OSIRIS
+#20197,VH_PHARAOH
+#20198,VH_PHREEONI
+#20199,VH_TAO_GUNKA
+#20200,VH_TURTLE_GENERAL
+#20201,VH_B_SEYREN
+#20202,VH_B_HARWORD
+#20203,VH_B_EREMES
+#20204,VH_B_KATRINN
+#20205,VH_B_MAGALETA
+#20206,VH_LORD_OF_DEATH
+#20207,VH_ENTWEIHEN
+#20208,VH_NAGHT_SIEGER
+#20209,VH_DETALE
+#20210,VH_THANATOS
+#20211,VH_APOCALIPS_H
+#20212,VH_KIEL_
+#20213,VH_RANDGRIS
+#20214,VH_RSX_0806
+#20215,VH_B_YGNIZEM
+#20216,VH_ATROCE
+#20217,VH_BEELZEBUB_
+#20218,VH_FALLINGBISHOP
+#20219,VH_GLOOM_U_N
+#20220,VH_IFRIT
+#20221,VH_KTULLANUX
+#20222,VH_H_HUNTER_EV
+#20223,VH_MM_CUTIE
+#20224,VH_VENOM_KIMERA
+#20225,VH_B_SHECIL
+#20226,VH_B_RANDEL
+#20227,VH_B_FLAMEL
+#20228,VH_B_TRENTINI
+#20229,VH_CHARLESTON3
+#20230,VH_GRAND_PERE
+#20231,VH_S_NYDHOG
+#20232,VH_QUEEN_SCARABA
+#20233,VH_KRAKEN
+#20234,VH_TIMEHOLDER
+#20235,VH_INCAN_SAMURAI
+#20236,VH_BACSOJIN
+#20237,VH_DARK_S_LORD
+#20238,VH_LADY_TANEE
+#20239,VH_GOPINICH
+#20240,VH_LEAK
+#20241,VH_MECHASPIDER
+#20242,VH_PYURIEL
+#20243,VH_KADES
+#20244,VH_GIOIA
+#20245,VH_DAEHYON
+#20246,VH_B_CELIA
+#20247,VH_B_CHEN
+#20248,VH_B_ALPHOCCIO
+#20249,VH_B_GERTIE
+#20250,VH_ENTWEIHEN_R
+#20251,VH_ENTWEIHEN_H
+#20252,VH_ENTWEIHEN_M
+#20253,VH_ENTWEIHEN_S
+#20254,VH_MIMIC
+#20255,ILL_TEDDY_BEAR_R
+#20256,ILL_TEDDY_BEAR_Y
+#20257,ILL_TEDDY_BEAR_G
+#20258,ILL_TEDDY_BEAR_W
+#20259,ILL_TEDDY_BEAR_B
+#20260,ILL_TEDDY_BEAR_S
+#20261,ILL_PITMAN
+#20262,ILL_MINERAL
+#20263,ILL_OBSIDIAN
+#20264,G_ILL_TEDDY_BEAR_R
+#20265,G_ILL_TEDDY_BEAR_Y
+#20266,G_ILL_TEDDY_BEAR_G
+#20267,G_ILL_TEDDY_BEAR_W
+#20268,G_ILL_TEDDY_BEAR_B
+

+ 3 - 0
sql-files/mob_skill_db_re.sql

@@ -11103,6 +11103,9 @@ REPLACE INTO `mob_skill_db_re` VALUES (2997,'Kimi\'s Phantom@NPC_WIDESLEEP','att
 REPLACE INTO `mob_skill_db_re` VALUES (2997,'Kimi\'s Phantom@NPC_WIDESOULDRAIN','attack',680,3,10000,5000,50000,'no','self','myhpltmaxrate','10',NULL,NULL,NULL,NULL,NULL,'42',NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (2997,'Kimi\'s Phantom@NPC_MAXPAIN','attack',716,3,10000,3000,50000,'no','self','myhpltmaxrate','10',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (2997,'Kimi\'s Phantom@NPC_POWERUP','attack',349,1,10000,0,50000,'no','self','myhpltmaxrate','5',NULL,NULL,NULL,NULL,NULL,'6',NULL);
+
+REPLACE INTO `mob_skill_db_re` VALUES (3026,'Fire Pit@NPC_DEATHSUMMON','dead',718,3,10000,0,10000,'no','self','always','0',3027,3027,3027,NULL,NULL,NULL,NULL);
+
 REPLACE INTO `mob_skill_db_re` VALUES (3038,'Hidden Mob 7@NPC_INVISIBLE','idle',353,1,10000,0,30000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `mob_skill_db_re` VALUES (3038,'Hidden Mob 7@NPC_INVISIBLE','attack',353,1,10000,0,30000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 #REPLACE INTO `mob_skill_db_re` VALUES ( 3038,'Hidden Mob 7@NPC_HELLBURNING','idle',719,1,10000,0,3000,'yes','self','always','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

+ 4 - 0
src/char/char.cpp

@@ -2064,10 +2064,14 @@ int char_loadName(uint32 char_id, char* name){
 		safestrncpy(name, data, NAME_LENGTH);
 		return 1;
 	}
+#if PACKETVER < 20180221
 	else
 	{
 		safestrncpy(name, charserv_config.char_config.unknown_char_name, NAME_LENGTH);
 	}
+#else
+	name[0] = '\0';
+#endif
 	return 0;
 }
 

+ 5 - 0
src/char/char.hpp

@@ -101,7 +101,12 @@ enum pincode_state : uint8 {
 #if 0
 	PINCODE_KSSN	= 6, // Not supported since we do not store KSSN
 #endif
+#if PACKETVER >= 20180124
+	// The button for pin code access was removed
+	PINCODE_PASSED  = PINCODE_OK,
+#else
 	PINCODE_PASSED	= 7,
+#endif
 	PINCODE_WRONG	= 8,
 	PINCODE_MAXSTATE
 };

+ 9 - 10
src/char/char_logif.cpp

@@ -662,18 +662,17 @@ int chlogif_reqvipdata(uint32 aid, uint8 flag, int32 timediff, int mapfd) {
 * HA 0x2720
 * Request account info to login-server
 */
-int chlogif_req_accinfo(int fd, int u_fd, int u_aid, int u_group, int account_id, int8 type) {
+int chlogif_req_accinfo(int fd, int u_fd, int u_aid, int account_id, int8 type) {
 	loginif_check(-1);
 	//ShowInfo("%d request account info for %d (type %d)\n", u_aid, account_id, type);
-	WFIFOHEAD(login_fd,23);
+	WFIFOHEAD(login_fd,19);
 	WFIFOW(login_fd,0) = 0x2720;
 	WFIFOL(login_fd,2) = fd;
 	WFIFOL(login_fd,6) = u_fd;
 	WFIFOL(login_fd,10) = u_aid;
-	WFIFOL(login_fd,14) = u_group;
-	WFIFOL(login_fd,18) = account_id;
-	WFIFOB(login_fd,22) = type;
-	WFIFOSET(login_fd,23);
+	WFIFOL(login_fd,14) = account_id;
+	WFIFOB(login_fd,18) = type;
+	WFIFOSET(login_fd,19);
 	return 1;
 }
 
@@ -686,16 +685,16 @@ int chlogif_parse_AccInfoAck(int fd) {
 		return 0;
 	else {
 		int8 type = RFIFOB(fd, 18);
-		if (type == 0 || RFIFOREST(fd) < 155+PINCODE_LENGTH+NAME_LENGTH) {
-			mapif_accinfo_ack(false, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), 0, -1, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+		if (type == 0 || RFIFOREST(fd) < 122+NAME_LENGTH) {
+			mapif_accinfo_ack(false, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), 0, -1, 0, 0, NULL, NULL, NULL, NULL, NULL);
 			RFIFOSKIP(fd,19);
 			return 1;
 		}
 		type>>=1;
 		mapif_accinfo_ack(true, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), type, RFIFOL(fd,19), RFIFOL(fd,23), RFIFOL(fd,27),
 			RFIFOCP(fd,31), RFIFOCP(fd,71), RFIFOCP(fd,87), RFIFOCP(fd,111),
-			RFIFOCP(fd,122), RFIFOCP(fd,155), RFIFOCP(fd,155+PINCODE_LENGTH));
-		RFIFOSKIP(fd,155+PINCODE_LENGTH+NAME_LENGTH);
+			RFIFOCP(fd,122));
+		RFIFOSKIP(fd,122+NAME_LENGTH);
 	}
 	return 1;
 }

+ 1 - 1
src/char/char_logif.hpp

@@ -39,7 +39,7 @@ int chlogif_parse_updip(int fd, struct char_session_data* sd);
 
 int chlogif_parse_vipack(int fd);
 int chlogif_reqvipdata(uint32 aid, uint8 flag, int32 timediff, int mapfd);
-int chlogif_req_accinfo(int fd, int u_fd, int u_aid, int u_group, int account_id, int8 type);
+int chlogif_req_accinfo(int fd, int u_fd, int u_aid, int account_id, int8 type);
 
 int chlogif_parse(int fd);
 

+ 2 - 3
src/char/inter.cpp

@@ -478,7 +478,7 @@ void mapif_parse_accinfo(int fd) {
 	}
 
 	/* it will only get here if we have a single match then ask login-server to fetch the `login` record */
-	if (!account_id || chlogif_req_accinfo(fd, u_fd, u_aid, u_group, account_id, type) != 1) {
+	if (!account_id || chlogif_req_accinfo(fd, u_fd, u_aid, account_id, type) != 1) {
 		inter_to_fd(fd, u_fd, u_aid, (char *)msg_txt(213));
 	}
 	return;
@@ -489,7 +489,7 @@ void mapif_parse_accinfo(int fd) {
  */
 void mapif_accinfo_ack(bool success, int map_fd, int u_fd, int u_aid, int account_id, int8 type,
 	int group_id, int logincount, int state, const char *email, const char *last_ip, const char *lastlogin,
-	const char *birthdate, const char *user_pass, const char *pincode, const char *userid)
+	const char *birthdate, const char *userid)
 {
 	
 	if (map_fd <= 0 || !session_isActive(map_fd))
@@ -507,7 +507,6 @@ void mapif_accinfo_ack(bool success, int map_fd, int u_fd, int u_aid, int accoun
 
 	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(217), account_id);
 	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(218), userid, group_id, state);
-	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(219), user_pass[0] != '\0' ? user_pass : msg_txt(220), pincode[0] != '\0' ? msg_txt(220) : pincode);
 	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(221), email, birthdate);
 	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(222), last_ip, geoip_getcountry(str2ip(last_ip)));
 	inter_to_fd(map_fd, u_fd, u_aid, (char *)msg_txt(223), logincount, lastlogin);

+ 1 - 1
src/char/inter.hpp

@@ -26,7 +26,7 @@ int inter_mapif_init(int fd);
 int mapif_disconnectplayer(int fd, uint32 account_id, uint32 char_id, int reason);
 void mapif_accinfo_ack(bool success, int map_fd, int u_fd, int u_aid, int account_id, int8 type,
 	int group_id, int logincount, int state, const char *email, const char *last_ip, const char *lastlogin,
-	const char *birthdate, const char *user_pass, const char *pincode, const char *userid);
+	const char *birthdate, const char *userid);
 
 int inter_log(const char *fmt,...);
 

+ 10 - 3
src/common/mmo.h

@@ -34,12 +34,20 @@
 #define MAX_INVENTORY 100 ///Maximum items in player inventory
 /** Max number of characters per account. Note that changing this setting alone is not enough if the client is not hexed to support more characters as well.
 * Max value tested was 265 */
-#define MAX_CHARS 9 
+#ifndef MAX_CHARS
+	#if PACKETVER >= 20180124
+		#define MAX_CHARS 15
+	#elif PACKETVER >= 20100413
+		#define MAX_CHARS 12
+	#else
+		#define MAX_CHARS 9
+	#endif
+#endif
 /** Number of slots carded equipment can have. Never set to less than 4 as they are also used to keep the data of forged items/equipment. [Skotlex]
 * Note: The client seems unable to receive data for more than 4 slots due to all related packets having a fixed size. */
 #define MAX_SLOTS 4
 #define MAX_AMOUNT 30000 ////Max amount of a single stacked item
-#define MAX_ZENY 1000000000 ///Max zeny
+#define MAX_ZENY INT_MAX ///Max zeny
 #define MAX_BANK_ZENY SINT32_MAX ///Max zeny in Bank
 #define MAX_FAME 1000000000 ///Max fame points
 #define MAX_CART 100 ///Maximum item in cart
@@ -131,7 +139,6 @@
 //Mercenary System
 #define MC_SKILLBASE 8201
 #define MAX_MERCSKILL 40
-#define MAX_MERCENARY_CLASS 61
 
 //Elemental System
 #define MAX_ELEMENTALSKILL 42

+ 2 - 1
src/common/sql.c

@@ -78,7 +78,8 @@ Sql* Sql_Malloc(void)
 	self->lengths = NULL;
 	self->result = NULL;
 	self->keepalive = INVALID_TIMER;
-	self->handle.reconnect = 1;
+	my_bool reconnect = 1;
+	mysql_options(&self->handle, MYSQL_OPT_RECONNECT, &reconnect);
 	return self;
 }
 

+ 5 - 13
src/login/loginchrif.cpp

@@ -717,15 +717,15 @@ int logchrif_parse_accinfo(int fd) {
 	if( RFIFOREST(fd) < 23 )
 		return 0;
 	else {
-		int map_fd = RFIFOL(fd, 2), u_fd = RFIFOL(fd, 6), u_aid = RFIFOL(fd, 10), u_group = RFIFOL(fd, 14), account_id = RFIFOL(fd, 18);
-		int8 type = RFIFOB(fd, 22);
+		int map_fd = RFIFOL(fd, 2), u_fd = RFIFOL(fd, 6), u_aid = RFIFOL(fd, 10), account_id = RFIFOL(fd, 14);
+		int8 type = RFIFOB(fd, 18);
 		AccountDB* accounts = login_get_accounts_db();
 		struct mmo_account acc;
-		RFIFOSKIP(fd,23);
+		RFIFOSKIP(fd,19);
 
 		// Send back the result to char-server
 		if (accounts->load_num(accounts, &acc, account_id)) {
-			int len = 155 + PINCODE_LENGTH + NAME_LENGTH;
+			int len = 122 + NAME_LENGTH;
 			//ShowInfo("Found account info for %d, requested by %d\n", account_id, u_aid);
 			WFIFOHEAD(fd, len);
 			WFIFOW(fd, 0) = 0x2721;
@@ -741,15 +741,7 @@ int logchrif_parse_accinfo(int fd) {
 			safestrncpy(WFIFOCP(fd, 71), acc.last_ip, 16);
 			safestrncpy(WFIFOCP(fd, 87), acc.lastlogin, 24);
 			safestrncpy(WFIFOCP(fd, 111), acc.birthdate, 11);
-			if ((unsigned int)u_group >= acc.group_id) {
-				safestrncpy(WFIFOCP(fd, 122), acc.pass, 33);
-				safestrncpy(WFIFOCP(fd, 155), acc.pincode, PINCODE_LENGTH);
-			}
-			else {
-				memset(WFIFOP(fd, 122), '\0', 33);
-				memset(WFIFOP(fd, 155), '\0', PINCODE_LENGTH);
-			}
-			safestrncpy(WFIFOCP(fd, 155 + PINCODE_LENGTH), acc.userid, NAME_LENGTH);
+			safestrncpy(WFIFOCP(fd, 122), acc.userid, NAME_LENGTH);
 			WFIFOSET(fd, len);
 		}
 		else {

+ 5 - 9
src/map/achievement.cpp

@@ -292,11 +292,6 @@ bool achievement_update_achievement(struct map_session_data *sd, int achievement
 	clif_achievement_update(sd, &sd->achievement_data.achievements[i], sd->achievement_data.count - sd->achievement_data.incompleteCount);
 	sd->achievement_data.save = true; // Flag to save with the autosave interval
 
-	if (sd->achievement_data.sendlist) {
-		clif_achievement_list_all(sd);
-		sd->achievement_data.sendlist = false;
-	}
-
 	return true;
 }
 
@@ -329,15 +324,16 @@ void achievement_get_reward(struct map_session_data *sd, int achievement_id, tim
 
 	// Only update in the cache, db was updated already
 	sd->achievement_data.achievements[i].rewarded = rewarded;
+	sd->achievement_data.save = true;
 
 	run_script(adb->rewards.script, 0, sd->bl.id, fake_nd->bl.id);
 	if (adb->rewards.title_id) {
 		sd->titles.push_back(adb->rewards.title_id);
-		sd->achievement_data.sendlist = true;
+		clif_achievement_list_all(sd);
+	}else{
+		clif_achievement_reward_ack(sd->fd, 1, achievement_id);
+		clif_achievement_update(sd, &sd->achievement_data.achievements[i], sd->achievement_data.count - sd->achievement_data.incompleteCount);
 	}
-
-	clif_achievement_reward_ack(sd->fd, 1, achievement_id);
-	clif_achievement_update(sd, &sd->achievement_data.achievements[i], sd->achievement_data.count - sd->achievement_data.incompleteCount);
 }
 
 /**

+ 5 - 3
src/map/atcommand.cpp

@@ -7346,7 +7346,7 @@ ACMD_FUNC(showmobs)
 
 	if((mob_id = atoi(mob_name)) == 0)
 		mob_id = mobdb_searchname(mob_name);
-	if(mob_id > 0 && mobdb_checkid(mob_id) == 0){
+	if(mobdb_checkid(mob_id) == 0){
 		snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1250),mob_name); // Invalid mob id %s!
 		clif_displaymessage(fd, atcmd_output);
 		return 0;
@@ -9731,13 +9731,15 @@ ACMD_FUNC(costume) {
 		"Wedding",
 		"Xmas",
 		"Summer",
+		"Summer2",
 		"Hanbok",
-		"Oktoberfest",
+		"Oktoberfest"
 	};
 	const int name2id[] = {
 		SC_WEDDING,
 		SC_XMAS,
 		SC_SUMMER,
+		SC_DRESSUP,
 		SC_HANBOK,
 		SC_OKTOBERFEST
 	};
@@ -9779,7 +9781,7 @@ ACMD_FUNC(costume) {
 		return -1;
 	}
 
-	sc_start(&sd->bl, &sd->bl, (sc_type)name2id[k], 100, 0, -1);
+	sc_start(&sd->bl, &sd->bl, (sc_type)name2id[k], 100, name2id[k] == SC_DRESSUP ? 1 : 0, -1);
 
 	return 0;
 }

+ 15 - 6
src/map/battle.cpp

@@ -3322,12 +3322,16 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 	if( sd && !skill_id ) {	// if no skill_id passed, check for double attack [helvetica]
 		short i;
 		if( ( ( skill_lv = pc_checkskill(sd,TF_DOUBLE) ) > 0 && sd->weapontype1 == W_DAGGER )
-			|| ( sd->bonus.double_rate > 0 && sd->weapontype1 != W_FIST ) //Will fail bare-handed
-			|| ( sc && sc->data[SC_KAGEMUSYA] && sd->weapontype1 != W_FIST )) // Need confirmation
+			|| ( sd->bonus.double_rate > 0 && sd->weapontype1 != W_FIST ) // Will fail bare-handed
+			|| ( sc && sc->data[SC_KAGEMUSYA] && sd->weapontype1 != W_FIST )) // Will fail bare-handed
 		{	//Success chance is not added, the higher one is used [Skotlex]
-                        int max_rate = max(5*skill_lv,sd->bonus.double_rate);
-                        if(sc && sc->data[SC_KAGEMUSYA]) max_rate= max(max_rate,sc->data[SC_KAGEMUSYA]->val1*3);
-                        
+			int max_rate = 0;
+
+			if (sc && sc->data[SC_KAGEMUSYA])
+				max_rate = sc->data[SC_KAGEMUSYA]->val1 * 10; // Same rate as even levels of TF_DOUBLE
+			else
+				max_rate = max(5 * skill_lv, sd->bonus.double_rate);
+
 			if( rnd()%100 < max_rate ) {
 				wd.div_ = skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1);
 				wd.type = DMG_MULTI_HIT;
@@ -6847,7 +6851,7 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
 	ssc = status_get_sc(src);
 
 	if (flag & BF_SHORT) {//Bounces back part of the damage.
-		if ( !status_reflect && sd && sd->bonus.short_weapon_damage_return ) {
+		if ( sd && sd->bonus.short_weapon_damage_return ) {
 			rdamage += damage * sd->bonus.short_weapon_damage_return / 100;
 			rdamage = i64max(rdamage,1);
 		} else if( status_reflect && sc && sc->count ) {
@@ -8009,7 +8013,11 @@ static const struct _battle_data {
 	{ "player_damage_delay_rate",           &battle_config.pc_damage_delay_rate,            100,    0,      INT_MAX,        },
 	{ "defunit_not_enemy",                  &battle_config.defnotenemy,                     0,      0,      1,              },
 	{ "gvg_traps_target_all",               &battle_config.vs_traps_bctall,                 BL_PC,  BL_NUL, BL_ALL,         },
+#ifdef RENEWAL
+	{ "traps_setting",                      &battle_config.traps_setting,                   2,      0,      2,              },
+#else
 	{ "traps_setting",                      &battle_config.traps_setting,                   0,      0,      2,              },
+#endif
 	{ "summon_flora_setting",               &battle_config.summon_flora,                    1|2,    0,      1|2,            },
 	{ "clear_skills_on_death",              &battle_config.clear_unit_ondeath,              BL_NUL, BL_NUL, BL_ALL,         },
 	{ "clear_skills_on_warp",               &battle_config.clear_unit_onwarp,               BL_ALL, BL_NUL, BL_ALL,         },
@@ -8494,6 +8502,7 @@ static const struct _battle_data {
 	{ "event_refine_chance",                &battle_config.event_refine_chance,             0,      0,      1,              },
 	{ "autoloot_adjust",                    &battle_config.autoloot_adjust,                 0,      0,      1,              },
 	{ "broadcast_hide_name",                &battle_config.broadcast_hide_name,             2,      0,      NAME_LENGTH,    },
+	{ "skill_drop_items_full",              &battle_config.skill_drop_items_full,           0,      0,      1,              },
 	{ "display_tax_info",                   &battle_config.display_tax_info,                0,      0,      1,              },
 
 #include "../custom/battle_config_init.inc"

+ 1 - 0
src/map/battle.hpp

@@ -638,6 +638,7 @@ struct Battle_Config
 	int event_refine_chance;
 	int autoloot_adjust;
 	int broadcast_hide_name;
+	int skill_drop_items_full;
 	int display_tax_info;
 
 #include "../custom/battle_config_struct.inc"

+ 142 - 37
src/map/clif.cpp

@@ -78,7 +78,7 @@ enum mail_type {
 
 /** Converts item type to display it on client if necessary.
 * @param nameid: Item ID
-* @return item type. For IT_PETEGG will be displayed as IT_WEAPON. If Shadow Weapon of IT_SHADOWGEAR as IT_WEAPON and else as IT_ARMOR
+* @return item type. For IT_PETEGG will be displayed as IT_ARMOR. If Shadow Weapon of IT_SHADOWGEAR as IT_WEAPON and else as IT_ARMOR
 */
 static inline int itemtype(unsigned short nameid) {
 	struct item_data* id = itemdb_search(nameid); //Use itemdb_search, so non-existance item will use dummy data and won't crash the server. bugreport:8468
@@ -89,7 +89,7 @@ static inline int itemtype(unsigned short nameid) {
 		else
 			return IT_ARMOR;
 	}
-	return ( type == IT_PETEGG ) ? IT_WEAPON : type;
+	return ( type == IT_PETEGG ) ? IT_ARMOR : type;
 }
 
 
@@ -4519,7 +4519,7 @@ void clif_storageitemadded(struct map_session_data* sd, struct item* i, int inde
 	WFIFOL(fd, 4) = amount; // amount
 	WFIFOW(fd, 8) = ( view > 0 ) ? view : i->nameid; // id
 #if PACKETVER >= 5
-	WFIFOB(fd,10) = itemdb_type(i->nameid); //type
+	WFIFOB(fd,10) = itemtype(i->nameid); //type
 	offset += 1;
 #endif
 	WFIFOB(fd,10+offset) = i->identify; //identify flag
@@ -6509,13 +6509,23 @@ void clif_wis_end(int fd, int result)
 
 /// Returns character name requested by char_id (ZC_ACK_REQNAME_BYGID).
 /// 0194 <char id>.L <name>.24B
+/// 0af7 <flag>.W <char id>.L <name>.24B
 void clif_solved_charname(int fd, int charid, const char* name)
 {
+#if PACKETVER >= 20180221
+	WFIFOHEAD(fd,packet_len(0xaf7));
+	WFIFOW(fd,0) = 0xaf7;
+	WFIFOW(fd,2) = name[0] ? 3 : 2;
+	WFIFOL(fd,4) = charid;
+	safestrncpy(WFIFOCP(fd, 8), name, NAME_LENGTH);
+	WFIFOSET(fd,packet_len(0x0af7));
+#else
 	WFIFOHEAD(fd,packet_len(0x194));
 	WFIFOW(fd,0)=0x194;
 	WFIFOL(fd,2)=charid;
 	safestrncpy(WFIFOCP(fd,6), name, NAME_LENGTH);
 	WFIFOSET(fd,packet_len(0x194));
+#endif
 }
 
 
@@ -7902,20 +7912,23 @@ void clif_send_petstatus(struct map_session_data *sd)
 void clif_pet_emotion(struct pet_data *pd,int param)
 {
 	unsigned char buf[16];
+	s_pet_db *pet_db_ptr;
 
 	nullpo_retv(pd);
 
+	pet_db_ptr = pd->get_pet_db();
+
 	memset(buf,0,packet_len(0x1aa));
 
 	WBUFW(buf,0)=0x1aa;
 	WBUFL(buf,2)=pd->bl.id;
-	if(param >= 100 && pd->petDB->talk_convert_class) {
-		if(pd->petDB->talk_convert_class < 0)
+	if(param >= 100 && pet_db_ptr->talk_convert_class) {
+		if(pet_db_ptr->talk_convert_class < 0)
 			return;
-		else if(pd->petDB->talk_convert_class > 0) {
+		else if(pet_db_ptr->talk_convert_class > 0) {
 			// replace mob_id component of talk/act data
 			param -= (pd->pet.class_ - 100)*100;
-			param += (pd->petDB->talk_convert_class - 100)*100;
+			param += (pet_db_ptr->talk_convert_class - 100)*100;
 		}
 	}
 	WBUFL(buf,6)=param;
@@ -12275,6 +12288,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
 /// Request to use a ground skill.
 /// 0116 <skill lv>.W <skill id>.W <x>.W <y>.W (CZ_USE_SKILL_TOGROUND)
 /// 0366 <skill lv>.W <skill id>.W <x>.W <y>.W (CZ_USE_SKILL_TOGROUND2)
+/// 0AF4 <skill lv>.W <skill id>.W <x>.W <y>.W <unknown>.B (CZ_USE_SKILL_TOGROUND3)
 /// There are various variants of this packet, some of them have padding between fields.
 void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd)
 {
@@ -12289,6 +12303,8 @@ void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd)
 		RFIFOW(fd,info->pos[1]), //skill num
 		RFIFOW(fd,info->pos[2]), //pos x
 		RFIFOW(fd,info->pos[3]), //pos y
+		// TODO: find out what this is intended to do
+		//RFIFOB(fd, info->pos[4])
 		-1	//Skill more info.
 	);
 }
@@ -14300,6 +14316,7 @@ void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
 
 /// Toggles a single friend online/offline [Skotlex] (ZC_FRIENDS_STATE).
 /// 0206 <account id>.L <char id>.L <state>.B
+/// 0206 <account id>.L <char id>.L <state>.B <name>.24B >= 20180221
 /// state:
 ///     0 = online
 ///     1 = offline
@@ -14319,6 +14336,9 @@ void clif_friendslist_toggle(struct map_session_data *sd,uint32 account_id, uint
 	WFIFOL(fd, 2) = sd->status.friends[i].account_id;
 	WFIFOL(fd, 6) = sd->status.friends[i].char_id;
 	WFIFOB(fd,10) = !online; //Yeah, a 1 here means "logged off", go figure...
+#if PACKETVER >= 20180221
+	safestrncpy(WFIFOCP(fd, 11), sd->status.friends[i].name, NAME_LENGTH);
+#endif
 	WFIFOSET(fd, packet_len(0x206));
 }
 
@@ -14337,21 +14357,29 @@ int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap)
 
 /// Sends the whole friends list (ZC_FRIENDS_LIST).
 /// 0201 <packet len>.W { <account id>.L <char id>.L <name>.24B }*
+/// 0201 <packet len>.W { <account id>.L <char id>.L }* >= 20180221
 void clif_friendslist_send(struct map_session_data *sd)
 {
 	int i = 0, n, fd = sd->fd;
+#if PACKETVER >= 20180221
+	const int size = 8;
+#else
+	const int size = 8 + NAME_LENGTH;
+#endif
 
 	// Send friends list
-	WFIFOHEAD(fd, MAX_FRIENDS * 32 + 4);
+	WFIFOHEAD(fd, MAX_FRIENDS * size + 4);
 	WFIFOW(fd, 0) = 0x201;
 	for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) {
-		WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id;
-		WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id;
-		safestrncpy(WFIFOCP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH);
+		WFIFOL(fd, 4 + size * i + 0) = sd->status.friends[i].account_id;
+		WFIFOL(fd, 4 + size * i + 4) = sd->status.friends[i].char_id;
+#if PACKETVER < 20180221
+		safestrncpy(WFIFOCP(fd, 4 + size * i + 8), sd->status.friends[i].name, NAME_LENGTH);
+#endif
 	}
 
 	if (i) {
-		WFIFOW(fd,2) = 4 + 32 * i;
+		WFIFOW(fd,2) = 4 + size * i;
 		WFIFOSET(fd, WFIFOW(fd,2));
 	}
 
@@ -16558,10 +16586,10 @@ static void clif_quest_len(int def_len, int info_len, int avail_quests, int *lim
 	(*len_out) = ((*limit_out) * info_len) + def_len;
 }
 
-/// Sends list of all quest states (ZC_ALL_QUEST_LIST).
-/// 02b1 <packet len>.W <num>.L { <quest id>.L <active>.B }*num
+/// Sends list of all quest states
+/// 02b1 <packet len>.W <num>.L { <quest id>.L <active>.B }*num (ZC_ALL_QUEST_LIST)
 /// 097a <packet len>.W <num>.L { <quest id>.L <active>.B <remaining time>.L <time>.L <count>.W { <mob_id>.L <killed>.W <total>.W <mob name>.24B }*count }*num (ZC_ALL_QUEST_LIST2)
-/// 09f8 <packet len>.W <num>.L { <quest id>.L <active>.B <remaining time>.L <time>.L <count>.W { <mob_id>.L <killed>.W <total>.W <mob name>.24B }*count }*num (ZC_ALL_QUEST_LIST3)	// TODO!
+/// 09f8 <packet len>.W <num>.L { <quest id>.L <active>.B <remaining time>.L <time>.L <count>.W { <hunt identification>.L <mob type>.L <mob_id>.L <min level>.W <max level>.W <killed>.W <total>.W <mob name>.24B }*count }*num  (ZC_ALL_QUEST_LIST3)
 void clif_quest_send_list(struct map_session_data *sd)
 {
 	int fd = sd->fd;
@@ -16570,9 +16598,19 @@ void clif_quest_send_list(struct map_session_data *sd)
 	int limit = 0;
 
 #if PACKETVER >= 20141022
-	clif_quest_len(offset, 15 + ((10 + NAME_LENGTH) * MAX_QUEST_OBJECTIVES), sd->avail_quests, &limit, &i);
+#if PACKETVER >= 20150513
+	int size = 22 + NAME_LENGTH;
+#else
+	int size = 10 + NAME_LENGTH;
+#endif
+
+	clif_quest_len(offset, 15 + ( size * MAX_QUEST_OBJECTIVES), sd->avail_quests, &limit, &i);
 	WFIFOHEAD(fd,i);
+#if PACKETVER >= 20150513
+	WFIFOW(fd, 0) = 0x9f8;
+#else
 	WFIFOW(fd, 0) = 0x97a;
+#endif
 	WFIFOL(fd, 4) = limit;
 
 	for (i = 0; i < limit; i++) {
@@ -16596,8 +16634,20 @@ void clif_quest_send_list(struct map_session_data *sd)
 			for( j = 0; j < qi->objectives_count; j++ ){
 				mob = mob_db(qi->objectives[j].mob);
 
+#if PACKETVER >= 20150513
+				WFIFOL(fd, offset) = sd->quest_log[i].quest_id * 1000 + j;
+				offset += 4;
+				WFIFOL(fd, offset) = 0; // TODO: Find info - mobType
+				offset += 4;
+#endif
 				WFIFOL(fd, offset) = qi->objectives[j].mob;
 				offset += 4;
+#if PACKETVER >= 20150513
+				WFIFOW(fd, offset) = 0; // TODO: Find info - levelMin
+				offset += 2;
+				WFIFOW(fd, offset) = 0; // TODO: Find info - levelMax
+				offset += 2;
+#endif
 				WFIFOW(fd, offset) = sd->quest_log[i].count[j];
 				offset += 2;
 				WFIFOW(fd, offset) = qi->objectives[j].count;
@@ -16663,31 +16713,71 @@ void clif_quest_send_mission(struct map_session_data *sd)
 }
 
 
-/// Notification about a new quest (ZC_ADD_QUEST).
-/// 02b3 <quest id>.L <active>.B <start time>.L <expire time>.L <mobs>.W { <mob id>.L <mob count>.W <mob name>.24B }*3
+/// Notification about a new quest
+/// 02b3 <quest id>.L <active>.B <start time>.L <expire time>.L <mobs>.W { <mob id>.L <mob count>.W <mob name>.24B }*3 (ZC_ADD_QUEST)
+/// 08fe <packet len>.W  { <quest id>.L <mob id>.L <total count>.W <current count>.W }*3 (ZC_HUNTING_QUEST_INFO)
+/// 09f9 <quest id>.L <active>.B <start time>.L <expire time>.L <mobs>.W { <hunt identification>.L <mob type>.L <mob id>.L <min level>.W <max level>.W <mob count>.W <mob name>.24B }*3 (ZC_ADD_QUEST_EX)
 void clif_quest_add(struct map_session_data *sd, struct quest *qd)
 {
 	int fd = sd->fd;
-	int i;
+	int i, offset;
 	struct quest_db *qi = quest_search(qd->quest_id);
+#if PACKETVER >= 20150513
+	int cmd = 0x9f9;
+#else
+	int cmd = 0x2b3;
+#endif
 
-	WFIFOHEAD(fd, packet_len(0x2b3));
-	WFIFOW(fd, 0) = 0x2b3;
+	WFIFOHEAD(fd, packet_len(cmd));
+	WFIFOW(fd, 0) = cmd;
 	WFIFOL(fd, 2) = qd->quest_id;
 	WFIFOB(fd, 6) = qd->state;
 	WFIFOB(fd, 7) = qd->time - qi->time;
 	WFIFOL(fd, 11) = qd->time;
 	WFIFOW(fd, 15) = qi->objectives_count;
 
-	for (i = 0; i < qi->objectives_count; i++) {
+	for (i = 0, offset = 17; i < qi->objectives_count; i++) {
 		struct mob_db *mob;
-		WFIFOL(fd, i*30+17) = qi->objectives[i].mob;
-		WFIFOW(fd, i*30+21) = qd->count[i];
+#if PACKETVER >= 20150513
+		WFIFOL(fd, offset) = qd->quest_id * 1000 + i;
+		offset += 4;
+		WFIFOL(fd, offset) = 0; // TODO: Find info - mobType
+		offset += 4;
+#endif
+		WFIFOL(fd, offset) = qi->objectives[i].mob;
+		offset += 4;
+#if PACKETVER >= 20150513
+		WFIFOW(fd, offset) = 0; // TODO: Find info - levelMin
+		offset += 2;
+		WFIFOW(fd, offset) = 0; // TODO: Find info - levelMax
+		offset += 2;
+#endif
+		WFIFOW(fd, offset) = qd->count[i];
+		offset += 2;
 		mob = mob_db(qi->objectives[i].mob);
-		safestrncpy(WFIFOCP(fd, i*30+23), mob->jname, NAME_LENGTH);
+		safestrncpy(WFIFOCP(fd, offset), mob->jname, NAME_LENGTH);
+		offset += NAME_LENGTH;
+	}
+
+	WFIFOSET(fd, packet_len(cmd));
+
+#if PACKETVER >= 20150513
+	int len = 4 + qi->objectives_count * 12;
+
+	WFIFOHEAD(fd, len);
+	WFIFOW(fd, 0) = 0x8fe;
+	WFIFOW(fd, 2) = len;
+
+	for( i = 0, offset = 4; i < qi->objectives_count; i++, offset += 12 ){
+		WFIFOL(fd, offset) = qd->quest_id * 1000 + i;
+		WFIFOL(fd, offset+4) = qi->objectives[i].mob;
+		WFIFOW(fd, offset + 10) = qi->objectives[i].count;
+		WFIFOW(fd, offset + 12) = qd->count[i];
 	}
 
-	WFIFOSET(fd, packet_len(0x2b3));
+	WFIFOSET(fd, len);
+
+#endif
 }
 
 
@@ -16704,30 +16794,45 @@ void clif_quest_delete(struct map_session_data *sd, int quest_id)
 }
 
 
-/// Notification of an update to the hunting mission counter (ZC_UPDATE_MISSION_HUNT).
-/// 02b5 <packet len>.W <mobs>.W { <quest id>.L <mob id>.L <total count>.W <current count>.W }*3
+/// Notification of an update to the hunting mission counter
+/// 02b5 <packet len>.W <mobs>.W { <quest id>.L <mob id>.L <total count>.W <current count>.W }*3 (ZC_UPDATE_MISSION_HUNT)
+/// 09fa <packet len>.W <mobs>.W { <quest id>.L <hunt identification>.L <total count>.W <current count>.W }*3 (ZC_UPDATE_MISSION_HUNT_EX)
 void clif_quest_update_objective(struct map_session_data *sd, struct quest *qd, int mobid)
 {
 	int fd = sd->fd;
-	int i;
+	int i, offset;
 	struct quest_db *qi = quest_search(qd->quest_id);
 	int len = qi->objectives_count * 12 + 6;
+#if PACKETVER >= 20150513
+	int cmd = 0x9fa;
+#else
+	int cmd = 0x2b5;
+#endif
 
 	WFIFOHEAD(fd, len);
-	WFIFOW(fd, 0) = 0x2b5;
-	WFIFOW(fd, 2) = len;
+	WFIFOW(fd, 0) = cmd;
 	WFIFOW(fd, 4) = qi->objectives_count;
 
-	for (i = 0; i < qi->objectives_count; i++) {
+	for (i = 0, offset = 6; i < qi->objectives_count; i++) {
 		if (mobid == 0 || mobid == qi->objectives[i].mob) {
-			WFIFOL(fd, i * 12 + 6) = qd->quest_id;
-			WFIFOL(fd, i * 12 + 10) = qi->objectives[i].mob;
-			WFIFOW(fd, i * 12 + 14) = qi->objectives[i].count;
-			WFIFOW(fd, i * 12 + 16) = qd->count[i];
+			WFIFOL(fd, offset) = qd->quest_id;
+			offset += 4;
+#if PACKETVER >= 20150513
+			WFIFOL(fd, offset) = qd->quest_id * 1000 + i;
+			offset += 4;
+#else
+			WFIFOL(fd, offset) = qi->objectives[i].mob;
+			offset += 4;
+#endif
+			WFIFOW(fd, offset) = qi->objectives[i].count;
+			offset += 2;
+			WFIFOW(fd, offset) = qd->count[i];
+			offset += 2;
 		}
 	}
 
-	WFIFOSET(fd, len);
+	WFIFOW(fd, 2) = offset;
+	WFIFOSET(fd, offset);
 }
 
 

+ 10 - 0
src/map/clif_obfuscation.hpp

@@ -408,6 +408,16 @@
 		packet_keys(0x348F4BD7,0x7A425A54,0x628F589A);
 	#elif PACKETVER == 20180117 // 2018-01-17aRagexeRE
 		packet_keys(0x21F477F4,0x37F437F4,0x37F437F4);
+	#elif PACKETVER == 20180124 // 2018-01-24bRagexeRE
+		packet_keys(0x7EAA1CE0,0x415D1CFD,0x4C8F19FA);
+	#elif PACKETVER == 20180207 // 2018-02-07bRagexeRE
+		packet_keys(0x45AA1B44,0x20E716B7,0x5388105C);
+	#elif PACKETVER == 20180213 // 2018-02-13aRagexeRE
+		packet_keys(0x189D69B2,0x43B85EAD,0x2B7A687E);
+	#elif PACKETVER == 20180221 // 2018-02-21aRagexeRE or 2018-02-21bRagexeRE
+		packet_keys(0x6E2F6233,0x193B0A66,0x0D1D2CA5);
+	#elif PACKETVER == 20180307 // 2018-03-07bRagexeRE
+		packet_keys(0x47DA10EB,0x4B922CCF,0x765C5055);
 	#elif PACKETVER > 20110817
 		#error Unsupported packet version.
 	#endif

+ 26 - 1
src/map/clif_packetdb.hpp

@@ -2222,7 +2222,6 @@
 	packet(0x09FD,-1); // ZC_NOTIFY_MOVEENTRY11
 	packet(0x09FE,-1); // ZC_NOTIFY_NEWENTRY11
 	packet(0x09FF,-1); // ZC_NOTIFY_STANDENTRY11
-	//packet(0x09F8,-1); // ZC_ALL_QUEST_LIST3
 #endif
 
 // 2015-02-25aRagexeRE
@@ -2282,6 +2281,12 @@
 	// Pet Evolution System
 	parseable_packet(0x09FB,-1,clif_parse_dull,0); // CZ_PET_EVOLUTION
 	packet(0x09FC,6); // ZC_PET_EVOLUTION_RESULT
+
+	// Quest UI
+	packet(0x08FE,-1); // ZC_HUNTING_QUEST_INFO
+	packet(0x09F8,-1); // ZC_ALL_QUEST_LIST3
+	packet(0x09F9,143); // ZC_ADD_QUEST_EX
+	packet(0x09FA,-1); // ZC_UPDATE_MISSION_HUNT_EX
 #endif
 
 // 2015-05-20aRagexe
@@ -2344,6 +2349,7 @@
 	packet(0x0A43,85);
 	packet(0x0A44,-1);
 	packet(0x0ABD,10);
+	parseable_packet(0x0ACE,4,clif_parse_dull,0);
 #endif
 
 // 2017-08-30bRagexeRE
@@ -2352,4 +2358,23 @@
 	packet(0x0ACC,18);
 #endif
 
+// 2018-02-07bRagexeRE
+#if PACKETVER >= 20180207
+	parseable_packet(0x0AF4,11,clif_parse_UseSkillToPos,2,4,6,8,10);
+#endif
+
+// 2018-02-21aRagexeRE or 2018-02-21bRagexeRE
+#if PACKETVER >= 20180221
+	packet(0x0206,35); // ZC_FRIENDS_STATE
+	packet(0x0af7,32);
+#endif
+
+// 2018-03-07bRagexeRE
+#if PACKETVER >= 20180307
+	parseable_packet(0x0A68,3,clif_parse_dull,0);
+	packet(0x0AE2,7);
+	parseable_packet(0x0AEF,2,clif_parse_dull,0);
+	packet(0x0AF0,10);
+#endif
+
 #endif /* _CLIF_PACKETDB_HPP_ */

+ 155 - 0
src/map/clif_shuffle.hpp

@@ -4563,6 +4563,161 @@
 	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
 	parseable_packet(0x0875,36,clif_parse_StoragePassword,0);
 	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2018-01-24bRagexeRE
+#elif PACKETVER == 20180124
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0436,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0802,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x085F,36,clif_parse_StoragePassword,0);
+	//parseable_packet(0x0868,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x086A,18,clif_parse_PartyBookingRegisterReq,2,4);
+	//parseable_packet(0x086F,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x087A,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0888,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0890,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0919,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0940,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0946,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x094D,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0958,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0961,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2018-02-07bRagexeRE
+#elif PACKETVER == 20180207
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_ReqClickBuyingStore,2);
+	//parseable_packet(0x0360,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0870,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0881,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x092C,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x092E,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0940,6,clif_parse_TickSend,2);
+	parseable_packet(0x0950,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2018-02-13aRagexeRE
+#elif PACKETVER == 20180213
+	parseable_packet(0x0369,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x0802,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0817,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x085A,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x086F,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0874,6,clif_parse_TickSend,2);
+	parseable_packet(0x0875,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0878,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x087B,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0882,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x088C,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0892,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0898,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	//parseable_packet(0x089C,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x08A3,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x08A5,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x08A9,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x08AD,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0917,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0922,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0924,10,clif_parse_UseSkillToPos,2,4,6,8);
+	//parseable_packet(0x0926,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0933,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0936,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x093C,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0943,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0955,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x095A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0962,5,clif_parse_HomMenu,2,4);
+// 2018-02-21aRagexeRE or 2018-02-21bRagexeRE
+#elif PACKETVER == 20180221
+	parseable_packet(0x0202,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	//parseable_packet(0x0366,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0436,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0838,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0867,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x086C,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x086F,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0871,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0876,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0879,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x087D,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0880,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0881,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0883,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x088F,6,clif_parse_SolveCharName,2);
+	//parseable_packet(0x0891,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0897,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0899,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x089D,6,clif_parse_TickSend,2);
+	parseable_packet(0x0917,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x091E,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0929,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x093D,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x094B,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x094D,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x094E,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0957,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0964,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x096A,7,clif_parse_ActionRequest,2,6);
+// 2018-03-07bRagexeRE
+#elif PACKETVER == 20180307
+	parseable_packet(0x035F,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0437,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x07E4,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0861,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0862,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0864,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x086C,6,clif_parse_TickSend,2);
+	parseable_packet(0x0870,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0872,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0877,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x088D,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0893,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x089B,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x08A6,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x08AA,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x08AB,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0917,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0920,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0937,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0939,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x093D,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0941,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0944,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0948,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x0951,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0954,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0957,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0969,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0281,4,NULL,0); // CZ_GANGSI_RANK
 #endif
 
 #endif /* _CLIF_SHUFFLE_HPP_ */

+ 15 - 7
src/map/itemdb.cpp

@@ -1419,6 +1419,12 @@ static int itemdb_readdb(void){
 				continue;
 			memset(str, 0, sizeof(str));
 
+			p = strstr(line,"//");
+
+			if( p != nullptr ){
+				*p = '\0';
+			}
+
 			p = line;
 			while( ISSPACE(*p) )
 				++p;
@@ -1446,14 +1452,14 @@ static int itemdb_readdb(void){
 				ShowError("itemdb_readdb: Invalid format (Script column) in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
 				continue;
 			}
-			str[19] = p;
+			str[19] = p + 1;
 			p = strstr(p+1,"},");
 			if( p == NULL )
 			{
 				ShowError("itemdb_readdb: Invalid format (Script column) in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
 				continue;
 			}
-			p[1] = '\0';
+			*p = '\0';
 			p += 2;
 
 			// OnEquip_Script
@@ -1462,14 +1468,14 @@ static int itemdb_readdb(void){
 				ShowError("itemdb_readdb: Invalid format (OnEquip_Script column) in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
 				continue;
 			}
-			str[20] = p;
+			str[20] = p + 1;
 			p = strstr(p+1,"},");
 			if( p == NULL )
 			{
 				ShowError("itemdb_readdb: Invalid format (OnEquip_Script column) in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
 				continue;
 			}
-			p[1] = '\0';
+			*p = '\0';
 			p += 2;
 
 			// OnUnequip_Script (last column)
@@ -1478,9 +1484,10 @@ static int itemdb_readdb(void){
 				ShowError("itemdb_readdb: Invalid format (OnUnequip_Script column) in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
 				continue;
 			}
-			str[21] = p;
+			str[21] = p + 1;
+			p = &str[21][strlen(str[21]) - 2];
 
-			if ( str[21][strlen(str[21])-2] != '}' ) {
+			if ( *p != '}' ) {
 				/* lets count to ensure it's not something silly e.g. a extra space at line ending */
 				int v, lcurly = 0, rcurly = 0;
 
@@ -1496,8 +1503,9 @@ static int itemdb_readdb(void){
 					continue;
 				}
 			}
+			*p = '\0';
 
-			if (!itemdb_parse_dbrow(str, path, lines, 0))
+			if (!itemdb_parse_dbrow(str, path, lines, SCRIPT_IGNORE_EXTERNAL_BRACKETS))
 				continue;
 
 			count++;

+ 102 - 100
src/map/mercenary.cpp

@@ -4,6 +4,7 @@
 #include "mercenary.hpp"
 
 #include <stdlib.h>
+#include <map>
 #include <math.h>
 
 #include "../common/cbasetypes.h"
@@ -25,27 +26,19 @@
 #include "trade.hpp"
 #include "npc.hpp"
 
-struct s_mercenary_db mercenary_db[MAX_MERCENARY_CLASS]; // Mercenary Database
-static uint16 mercenary_count;
+std::map<uint16, struct s_mercenary_db> mercenary_db_data;
 
 /**
-* Search Mercenary by class
-* @param class_ Class ID of Mercenary
-* @return The index of mercenary on mercenary_db, or -1 if not found
-**/
-static int16 mercenary_search_index(int class_) {
-	int16 i;
-	ARR_FIND(0, mercenary_count, i, mercenary_db[i].class_ == class_);
-	return (i == mercenary_count)?-1:i;
-}
-
-/**
-* Check if the Class ID is a Mercenary
-* @param class_ The Class ID
-* @return true if Class ID is a Mercenary, false otherwise
-**/
-bool mercenary_class(int class_){
-	return (bool)(mercenary_search_index(class_) > -1);
+ * Search Mercenary by class
+ * @param class_ Class ID of Mercenary
+ * @return A pointer to the mercenary db entry or nullptr if not found
+ **/
+struct s_mercenary_db *mercenary_db( uint16 class_ ){
+	if( mercenary_db_data.find(class_) != mercenary_db_data.end() ){
+		return &mercenary_db_data.at(class_);
+	}else{
+		return nullptr;
+	}
 }
 
 /**
@@ -53,12 +46,14 @@ bool mercenary_class(int class_){
 * @param class_ The Class ID
 * @return View Data of Mercenary
 **/
-struct view_data * mercenary_get_viewdata(int class_){
-	int i = mercenary_search_index(class_);
-	if( i < 0 )
-		return 0;
+struct view_data *mercenary_get_viewdata( uint16 class_ ){
+	struct s_mercenary_db *db = mercenary_db(class_);
 
-	return &mercenary_db[i].vd;
+	if( db ){
+		return &db->vd;
+	}else{
+		return nullptr;
+	}
 }
 
 /**
@@ -82,16 +77,17 @@ short mercenary_skill_get_index(uint16 skill_id) {
 * @param lifetime Contract duration
 * @return false if failed, true otherwise
 **/
-bool mercenary_create(struct map_session_data *sd, int class_, unsigned int lifetime) {
+bool mercenary_create(struct map_session_data *sd, uint16 class_, unsigned int lifetime) {
 	struct s_mercenary merc;
 	struct s_mercenary_db *db;
-	int16 i;
 	nullpo_retr(false,sd);
 
-	if( (i = mercenary_search_index(class_)) < 0 )
+	db = mercenary_db(class_);
+
+	if( !db ){
 		return false;
+	}
 
-	db = &mercenary_db[i];
 	memset(&merc,0,sizeof(struct s_mercenary));
 
 	merc.char_id = sd->status.char_id;
@@ -123,24 +119,24 @@ int mercenary_get_lifetime(struct mercenary_data *md) {
 /**
 * Get Guild type of Mercenary
 * @param md Mercenary
-* @return -1 if not found, 0 - ARCH_MERC_GUILD, 1 - SPEAR_MERC_GUILD, or 2 - SWORD_MERC_GUILD
+* @return enum e_MercGuildType
 **/
-int mercenary_get_guild(struct mercenary_data *md){
+enum e_MercGuildType mercenary_get_guild(struct mercenary_data *md){
 	uint16 class_;
 
 	if( md == NULL || md->db == NULL )
-		return -1;
+		return NONE_MERC_GUILD;
 
 	class_ = md->db->class_;
 
-	if( class_ >= 6017 && class_ <= 6026 )
+	if( class_ >= MERID_MER_ARCHER01 && class_ <= MERID_MER_ARCHER10 )
 		return ARCH_MERC_GUILD;
-	if( class_ >= 6027 && class_ <= 6036 )
+	if( class_ >= MERID_MER_LANCER01 && class_ <= MERID_MER_LANCER10 )
 		return SPEAR_MERC_GUILD;
-	if( class_ >= 6037 && class_ <= 6046 )
+	if( class_ >= MERID_MER_SWORDMAN01 && class_ <= MERID_MER_SWORDMAN10 )
 		return SWORD_MERC_GUILD;
 
-	return -1;
+	return NONE_MERC_GUILD;
 }
 
 /**
@@ -150,21 +146,24 @@ int mercenary_get_guild(struct mercenary_data *md){
 **/
 int mercenary_get_faith(struct mercenary_data *md) {
 	struct map_session_data *sd;
-	uint16 class_;
+	enum e_MercGuildType guild;
 
 	if( md == NULL || md->db == NULL || (sd = md->master) == NULL )
 		return 0;
 
-	class_ = md->db->class_;
-
-	if( class_ >= 6017 && class_ <= 6026 )
-		return sd->status.arch_faith;
-	if( class_ >= 6027 && class_ <= 6036 )
-		return sd->status.spear_faith;
-	if( class_ >= 6037 && class_ <= 6046 )
-		return sd->status.sword_faith;
-
-	return 0;
+	guild = mercenary_get_guild(md);
+
+	switch( guild ){
+		case ARCH_MERC_GUILD:
+			return sd->status.arch_faith;
+		case SPEAR_MERC_GUILD:
+			return sd->status.spear_faith;
+		case SWORD_MERC_GUILD:
+			return sd->status.sword_faith;
+		case NONE_MERC_GUILD:
+		default:
+			return 0;
+	}
 }
 
 /**
@@ -174,22 +173,27 @@ int mercenary_get_faith(struct mercenary_data *md) {
 **/
 void mercenary_set_faith(struct mercenary_data *md, int value) {
 	struct map_session_data *sd;
-	uint16 class_;
+	enum e_MercGuildType guild;
 	int *faith;
 
 	if( md == NULL || md->db == NULL || (sd = md->master) == NULL )
 		return;
 
-	class_ = md->db->class_;
-
-	if( class_ >= 6017 && class_ <= 6026 )
-		faith = &sd->status.arch_faith;
-	else if( class_ >= 6027 && class_ <= 6036 )
-		faith = &sd->status.spear_faith;
-	else if( class_ >= 6037 && class_ <= 6046 )
-		faith = &sd->status.sword_faith;
-	else
-		return;
+	guild = mercenary_get_guild(md);
+
+	switch( guild ){
+		case ARCH_MERC_GUILD:
+			faith = &sd->status.arch_faith;
+			break;
+		case SPEAR_MERC_GUILD:
+			faith = &sd->status.spear_faith;
+			break;
+		case SWORD_MERC_GUILD:
+			faith = &sd->status.sword_faith;
+			break;
+		case NONE_MERC_GUILD:
+			return;
+	}
 
 	*faith += value;
 	*faith = cap_value(*faith, 0, SHRT_MAX);
@@ -203,21 +207,24 @@ void mercenary_set_faith(struct mercenary_data *md, int value) {
 **/
 int mercenary_get_calls(struct mercenary_data *md) {
 	struct map_session_data *sd;
-	uint16 class_;
+	enum e_MercGuildType guild;
 
 	if( md == NULL || md->db == NULL || (sd = md->master) == NULL )
 		return 0;
 
-	class_ = md->db->class_;
-
-	if( class_ >= 6017 && class_ <= 6026 )
-		return sd->status.arch_calls;
-	if( class_ >= 6027 && class_ <= 6036 )
-		return sd->status.spear_calls;
-	if( class_ >= 6037 && class_ <= 6046 )
-		return sd->status.sword_calls;
-
-	return 0;
+	guild = mercenary_get_guild(md);
+
+	switch( guild ){
+		case ARCH_MERC_GUILD:
+			return sd->status.arch_calls;
+		case SPEAR_MERC_GUILD:
+			return sd->status.spear_calls;
+		case SWORD_MERC_GUILD:
+			return sd->status.sword_calls;
+		case NONE_MERC_GUILD:
+		default:
+			return 0;
+	}
 }
 
 /**
@@ -227,22 +234,27 @@ int mercenary_get_calls(struct mercenary_data *md) {
 **/
 void mercenary_set_calls(struct mercenary_data *md, int value) {
 	struct map_session_data *sd;
-	uint16 class_;
+	enum e_MercGuildType guild;
 	int *calls;
 
 	if( md == NULL || md->db == NULL || (sd = md->master) == NULL )
 		return;
 
-	class_ = md->db->class_;
-
-	if( class_ >= 6017 && class_ <= 6026 )
-		calls = &sd->status.arch_calls;
-	else if( class_ >= 6027 && class_ <= 6036 )
-		calls = &sd->status.spear_calls;
-	else if( class_ >= 6037 && class_ <= 6046 )
-		calls = &sd->status.sword_calls;
-	else
-		return;
+	guild = mercenary_get_guild(md);
+
+	switch( guild ){
+		case ARCH_MERC_GUILD:
+			calls = &sd->status.arch_calls;
+			break;
+		case SPEAR_MERC_GUILD:
+			calls = &sd->status.spear_calls;
+			break;
+		case SWORD_MERC_GUILD:
+			calls = &sd->status.sword_calls;
+			break;
+		case NONE_MERC_GUILD:
+			return;
+	}
 
 	*calls += value;
 	*calls = cap_value(*calls, 0, INT_MAX);
@@ -347,16 +359,16 @@ bool mercenary_recv_data(struct s_mercenary *merc, bool flag)
 	struct map_session_data *sd;
 	struct mercenary_data *md;
 	struct s_mercenary_db *db;
-	int i = mercenary_search_index(merc->class_);
+
+	db = mercenary_db(merc->class_);
 
 	if( (sd = map_charid2sd(merc->char_id)) == NULL )
 		return false;
-	if( !flag || i < 0 ) { // Not created - loaded - DB info
+	if( !flag || !db ){ // Not created - loaded - DB info
 		sd->status.mer_id = 0;
 		return false;
 	}
 
-	db = &mercenary_db[i];
 	if( !sd->md ) {
 		sd->md = md = (struct mercenary_data*)aCalloc(1,sizeof(struct mercenary_data));
 		md->bl.type = BL_MER;
@@ -477,16 +489,11 @@ int mercenary_checkskill(struct mercenary_data *md, uint16 skill_id) {
 static bool mercenary_readdb_sub(char* str[], int columns, int current)
 {
 	int ele;
-	uint16 i, class_ = atoi(str[0]);
+	uint16 class_ = atoi(str[0]);
 	struct s_mercenary_db *db;
 	struct status_data *status;
 
-	//Find the ID, already exist or not in mercenary_db
-	ARR_FIND(0,mercenary_count,i,mercenary_db[i].class_ == class_);
-	if (i >= mercenary_count)
-		db = &mercenary_db[mercenary_count];
-	else
-		db = &mercenary_db[i];
+	db = &mercenary_db_data[class_];
 
 	db->class_ = class_;
 	safestrncpy(db->sprite, str[1], NAME_LENGTH);
@@ -534,8 +541,6 @@ static bool mercenary_readdb_sub(char* str[], int columns, int current)
 	status->amotion = atoi(str[24]);
 	status->dmotion = atoi(str[25]);
 	
-	if (i >= mercenary_count)
-		mercenary_count++;
 	return true;
 }
 
@@ -546,10 +551,10 @@ void mercenary_readdb(void) {
 	const char *filename[]={ "mercenary_db.txt",DBIMPORT"/mercenary_db.txt"};
 	uint8 i;
 
-	mercenary_count = 0; //Reset the counter
-	memset(mercenary_db,0,sizeof(mercenary_db));
+	mercenary_db_data.clear();
+
 	for(i = 0; i<ARRAYLENGTH(filename); i++){
-		sv_readdb(db_path, filename[i], ',', 26, 26, MAX_MERCENARY_CLASS, &mercenary_readdb_sub, i > 0);
+		sv_readdb(db_path, filename[i], ',', 26, 26, -1, &mercenary_readdb_sub, i > 0);
 	}
 }
 
@@ -560,13 +565,11 @@ static bool mercenary_read_skilldb_sub(char* str[], int columns, int current)
 {// <merc id>,<skill id>,<skill level>
 	struct s_mercenary_db *db;
 	uint16 class_, skill_id, skill_lv;
-	uint8 i = 0;
 	short idx = -1;
 
 	class_ = atoi(str[0]);
-	ARR_FIND(0, MAX_MERCENARY_CLASS, i, class_ == mercenary_db[i].class_);
-	if( i == MAX_MERCENARY_CLASS )
-	{
+	db = mercenary_db(class_);
+	if( !db ){
 		ShowError("read_mercenary_skilldb : Class %d not found in mercenary_db for skill entry.\n", class_);
 		return false;
 	}
@@ -577,7 +580,6 @@ static bool mercenary_read_skilldb_sub(char* str[], int columns, int current)
 		return false;
 	}
 
-	db = &mercenary_db[i];
 	skill_lv = atoi(str[2]);
 
 	db->skill[idx].id = skill_id;
@@ -612,5 +614,5 @@ void do_init_mercenary(void){
 * Do Final Mercenary datas
 **/
 void do_final_mercenary(void){
-	//Nothing to do yet
+	mercenary_db_data.clear();
 }

+ 14 - 6
src/map/mercenary.hpp

@@ -13,11 +13,21 @@
 #define MAX_MER_DISTANCE 15
 
 enum e_MercGuildType {
+	NONE_MERC_GUILD = -1,
 	ARCH_MERC_GUILD,
 	SPEAR_MERC_GUILD,
 	SWORD_MERC_GUILD,
 };
 
+enum MERID {
+	MERID_MER_ARCHER01 = 6017,
+	MERID_MER_ARCHER10 = 6026,
+	MERID_MER_LANCER01,
+	MERID_MER_LANCER10 = 6036,
+	MERID_MER_SWORDMAN01,
+	MERID_MER_SWORDMAN10 = 6046
+};
+
 struct s_mercenary_db {
 	int class_;
 	char sprite[NAME_LENGTH], name[NAME_LENGTH];
@@ -30,8 +40,6 @@ struct s_mercenary_db {
 	} skill[MAX_MERCSKILL];
 };
 
-extern struct s_mercenary_db mercenary_db[MAX_MERCENARY_CLASS];
-
 struct mercenary_data {
 	struct block_list bl;
 	struct unit_data ud;
@@ -51,10 +59,10 @@ struct mercenary_data {
 	unsigned devotion_flag : 1;
 };
 
-bool mercenary_class(int class_);
-struct view_data * mercenary_get_viewdata(int class_);
+struct s_mercenary_db *mercenary_db(uint16 class_);
+struct view_data * mercenary_get_viewdata(uint16 class_);
 
-bool mercenary_create(struct map_session_data *sd, int class_, unsigned int lifetime);
+bool mercenary_create(struct map_session_data *sd, uint16 class_, unsigned int lifetime);
 bool mercenary_recv_data(struct s_mercenary *merc, bool flag);
 void mercenary_save(struct mercenary_data *md);
 
@@ -65,7 +73,7 @@ int mercenary_delete(struct mercenary_data *md, int reply);
 void mercenary_contract_stop(struct mercenary_data *md);
 
 int mercenary_get_lifetime(struct mercenary_data *md);
-int mercenary_get_guild(struct mercenary_data *md);
+enum e_MercGuildType mercenary_get_guild(struct mercenary_data *md);
 int mercenary_get_faith(struct mercenary_data *md);
 void mercenary_set_faith(struct mercenary_data *md, int value);
 int mercenary_get_calls(struct mercenary_data *md);

+ 7 - 3
src/map/mob.cpp

@@ -3043,8 +3043,12 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 
 	}
 
-	if(!md->spawn) //Tell status_damage to remove it from memory.
-		return 5; // Note: Actually, it's 4. Oh well...
+	if(!md->spawn){ //Tell status_damage to remove it from memory.
+		struct unit_data *ud = unit_bl2ud(&md->bl);
+
+		// If the unit is currently in a walk script, it will be removed there
+		return ud->state.walk_script ? 3 : 5; // Note: Actually, it's 4. Oh well...
+	}
 
 	// MvP tomb [GreenBox]
 	if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && map[md->bl.m].flag.notomb != 1)
@@ -3390,7 +3394,7 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id)
 		if (mobdb_checkid(data.id) == 0)
 			continue;
 
-		if (map_search_freecell(&md2->bl, 0, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 0)) {
+		if (skill_id != NPC_DEATHSUMMON && map_search_freecell(&md2->bl, 0, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 0)) {
 			data.x = x;
 			data.y = y;
 		} else {

+ 5 - 0
src/map/mob.hpp

@@ -44,6 +44,11 @@ struct guardian_data;
 enum MOBID {
 	MOBID_PORING			= 1002,
 	MOBID_RED_PLANT			= 1078,
+	MOBID_BLUE_PLANT,
+	MOBID_GREEN_PLANT,
+	MOBID_YELLOW_PLANT,
+	MOBID_WHITE_PLANT,
+	MOBID_SHINING_PLANT,
 	MOBID_BLACK_MUSHROOM	= 1084,
 	MOBID_MARINE_SPHERE		= 1142,
 	MOBID_EMPERIUM			= 1288,

+ 5 - 0
src/map/npc.hpp

@@ -1087,6 +1087,11 @@ enum e_job_types
 	JT_4_M_DANGDANG,
 	JT_4_F_DANGDANG1,
 	JT_4_LEAFCAT,
+	JT_4_NASARIAN,
+	JT_4_NASARIAN_EM,
+	JT_4_TEDDY_BEAR_W,
+	JT_4_TEDDY_BEAR_B,
+	JT_4_TEDDY_BEAR_B_L,
 	NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999
 
 	// Unofficial

+ 1 - 0
src/map/party.cpp

@@ -964,6 +964,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id
 
 	if(!party_id || (p = party_search(party_id)) == NULL)
 		return 0;
+	party_check_state(p);
 	switch(skill_id) {
 		case TK_COUNTER: //Increase Triple Attack rate of Monks.
 			if (!p->state.monk) return 0;

+ 15 - 8
src/map/pc.cpp

@@ -1114,6 +1114,8 @@ uint8 pc_isequip(struct map_session_data *sd,int n)
 			return ITEM_EQUIP_ACK_FAIL;
 		if(item->equip & EQP_ACC && sd->sc.data[SC__STRIPACCESSORY])
 			return ITEM_EQUIP_ACK_FAIL;
+		if (item->equip & EQP_ARMS && sd->sc.data[SC__WEAKNESS])
+			return ITEM_EQUIP_ACK_FAIL;
 		if(item->equip && (sd->sc.data[SC_KYOUGAKU] || sd->sc.data[SC_SUHIDE]))
 			return ITEM_EQUIP_ACK_FAIL;
 
@@ -1532,7 +1534,6 @@ void pc_reg_received(struct map_session_data *sd)
 		sd->achievement_data.total_score = 0;
 		sd->achievement_data.level = 0;
 		sd->achievement_data.save = false;
-		sd->achievement_data.sendlist = false;
 		sd->achievement_data.count = 0;
 		sd->achievement_data.incompleteCount = 0;
 		sd->achievement_data.achievements = NULL;
@@ -5398,22 +5399,23 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil
  *------------------------------------------*/
 int pc_steal_coin(struct map_session_data *sd,struct block_list *target)
 {
-	int rate,skill;
+	int rate, target_lv;
 	struct mob_data *md;
+
 	if(!sd || !target || target->type != BL_MOB)
 		return 0;
 
 	md = (TBL_MOB*)target;
+	target_lv = status_get_lv(target);
 
 	if (md->state.steal_coin_flag || md->sc.data[SC_STONE] || md->sc.data[SC_FREEZE] || status_bl_has_mode(target,MD_STATUS_IMMUNE) || status_get_race2(&md->bl) == RC2_TREASURE)
 		return 0;
 
-	// FIXME: This formula is either custom or outdated.
-	skill = pc_checkskill(sd,RG_STEALCOIN)*10;
-	rate = skill + (sd->status.base_level - md->level)*3 + sd->battle_status.dex*2 + sd->battle_status.luk*2;
+	rate = sd->battle_status.dex / 2 + 2 * (sd->status.base_level - target_lv) + (10 * pc_checkskill(sd, RG_STEALCOIN)) + sd->battle_status.luk / 2;
 	if(rnd()%1000 < rate)
 	{
-		int amount = md->level*10 + rnd()%100;
+		// Zeny Steal Amount: (rnd() % (10 * target_lv + 1 - 8 * target_lv)) + 8 * target_lv
+		int amount = (rnd() % (2 * target_lv + 1)) + 8 * target_lv; // Reduced formula
 
 		pc_getzeny(sd, amount, LOG_TYPE_STEAL, NULL);
 		md->state.steal_coin_flag = 1;
@@ -7714,7 +7716,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 	if(sd->status.pet_id > 0 && sd->pd) {
 		struct pet_data *pd = sd->pd;
 		if( !map[sd->bl.m].flag.noexppenalty ) {
-			pet_set_intimate(pd, pd->pet.intimate - pd->petDB->die);
+			pet_set_intimate(pd, pd->pet.intimate - pd->get_pet_db()->die);
 			if( pd->pet.intimate < 0 )
 				pd->pet.intimate = 0;
 			clif_send_petdata(sd,sd->pd,1,pd->pet.intimate);
@@ -10872,10 +10874,15 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current)
 		baselv = (uint32)atoi(fields[3]);
 		joblv = (uint32)atoi(fields[4]);
 		offset = 5;
-	} else {
+	}
+	else if (columns == 3 + MAX_PC_SKILL_REQUIRE * 2) {
 		baselv = joblv = 0;
 		offset = 3;
 	}
+	else {
+		ShowWarning("pc_readdb_skilltree: Invalid number of colums in skill %hu of job %d's tree.\n", skill_id, class_);
+		return false;
+	}
 
 	if(!pcdb_checkid(class_))
 	{

+ 0 - 1
src/map/pc.hpp

@@ -607,7 +607,6 @@ struct map_session_data {
 		int total_score;                  ///< Total achievement points
 		int level;                        ///< Achievement level
 		bool save;                        ///< Flag to know if achievements need to be saved
-		bool sendlist;                    ///< Flag to know if all achievements should be sent to the player (refresh list if an achievement has a title)
 		uint16 count;                     ///< Total achievements in log
 		uint16 incompleteCount;           ///< Total incomplete achievements in log
 		struct achievement *achievements; ///< Achievement log entries

+ 34 - 22
src/map/pet.cpp

@@ -167,11 +167,14 @@ int pet_attackskill(struct pet_data *pd, int target_id)
 int pet_target_check(struct pet_data *pd,struct block_list *bl,int type)
 {
 	int rate;
+	s_pet_db* pet_db_ptr;
 
 	nullpo_ret(pd);
 
 	Assert((pd->master == 0) || (pd->master->pd == pd));
 
+	pet_db_ptr = pd->get_pet_db();
+
 	if(bl == NULL || bl->type != BL_MOB || bl->prev == NULL ||
 		pd->pet.intimate < battle_config.pet_support_min_friendly ||
 		pd->pet.hungry < 1 ||
@@ -191,21 +194,21 @@ int pet_target_check(struct pet_data *pd,struct block_list *bl,int type)
 		return 0;
 
 	if(!type) {
-		rate = pd->petDB->attack_rate;
+		rate = pet_db_ptr->attack_rate;
 		rate = rate * pd->rate_fix / 1000;
 
-		if(pd->petDB->attack_rate > 0 && rate <= 0)
+		if(pet_db_ptr->attack_rate > 0 && rate <= 0)
 			rate = 1;
 	} else {
-		rate = pd->petDB->defence_attack_rate;
+		rate = pet_db_ptr->defence_attack_rate;
 		rate = rate * pd->rate_fix / 1000;
 
-		if(pd->petDB->defence_attack_rate > 0 && rate <= 0)
+		if(pet_db_ptr->defence_attack_rate > 0 && rate <= 0)
 			rate = 1;
 	}
 
 	if(rnd()%10000 < rate) {
-		if(pd->target_id == 0 || rnd()%10000 < pd->petDB->change_target_rate)
+		if(pd->target_id == 0 || rnd()%10000 < pet_db_ptr->change_target_rate)
 			pd->target_id = bl->id;
 	}
 
@@ -249,6 +252,7 @@ static int pet_hungry(int tid, unsigned int tick, int id, intptr_t data)
 {
 	struct map_session_data *sd;
 	struct pet_data *pd;
+	s_pet_db *pet_db_ptr;
 	int interval;
 
 	sd = map_id2sd(id);
@@ -260,6 +264,7 @@ static int pet_hungry(int tid, unsigned int tick, int id, intptr_t data)
 		return 1;
 
 	pd = sd->pd;
+	pet_db_ptr = pd->get_pet_db();
 
 	if(pd->pet_hungry_timer != tid) {
 		ShowError("pet_hungry_timer %d != %d\n",pd->pet_hungry_timer,tid);
@@ -290,9 +295,9 @@ static int pet_hungry(int tid, unsigned int tick, int id, intptr_t data)
 	clif_send_petdata(sd,pd,2,pd->pet.hungry);
 
 	if(battle_config.pet_hungry_delay_rate != 100)
-		interval = (pd->petDB->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
+		interval = (pet_db_ptr->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
 	else
-		interval = pd->petDB->hungry_delay;
+		interval = pet_db_ptr->hungry_delay;
 
 	if(interval <= 0)
 		interval = 1;
@@ -354,7 +359,7 @@ static int pet_performance(struct map_session_data *sd, struct pet_data *pd)
 	int val;
 
 	if (pd->pet.intimate > 900)
-		val = (pd->petDB->s_perfor > 0) ? 4 : 3;
+		val = (pd->get_pet_db()->s_perfor > 0) ? 4 : 3;
 	else if(pd->pet.intimate > 750) //TODO: this is way too high
 		val = 2;
 	else
@@ -380,7 +385,7 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
 
 	pet_lootitem_drop(pd,sd);
 	memset(&tmp_item,0,sizeof(tmp_item));
-	tmp_item.nameid = pd->petDB->EggID;
+	tmp_item.nameid = pd->get_pet_db()->EggID;
 	tmp_item.identify = 1;
 	tmp_item.card[0] = CARD0_PET;
 	tmp_item.card[1] = GetWord(pd->pet.pet_id,0);
@@ -450,7 +455,6 @@ bool pet_data_init(struct map_session_data *sd, struct s_pet *pet)
 	pd->bl.id = npc_get_new_npc_id();
 
 	pd->master = sd;
-	pd->petDB = pet_db_ptr;
 	pd->db = mob_db(pet->class_);
 	memcpy(&pd->pet, pet, sizeof(struct s_pet));
 	status_set_viewdata(&pd->bl, pet->class_);
@@ -473,7 +477,7 @@ bool pet_data_init(struct map_session_data *sd, struct s_pet *pet)
 	if( battle_config.pet_status_support )
 		run_script(pet_db_ptr->pet_script,0,sd->bl.id,0);
 
-	if( pd->petDB ) {
+	if( pd->get_pet_db() ) {
 		if( pet_db_ptr->pet_loyal_script )
 			status_calc_pc(sd,SCO_NONE);
 
@@ -778,7 +782,7 @@ int pet_menu(struct map_session_data *sd,int menunum)
 	if(!sd->status.pet_id || sd->pd->pet.intimate <= 0 || sd->pd->pet.incubate)
 		return 1;
 
-	egg_id = itemdb_exists(sd->pd->petDB->EggID);
+	egg_id = itemdb_exists(sd->pd->get_pet_db()->EggID);
 
 	if (egg_id) {
 		if ((egg_id->flag.trade_restriction&0x01) && !pc_inventoryblank(sd)) {
@@ -874,6 +878,7 @@ int pet_change_name_ack(struct map_session_data *sd, char* name, int flag)
 int pet_equipitem(struct map_session_data *sd,int index)
 {
 	struct pet_data *pd;
+	s_pet_db *pet_db_ptr;
 	unsigned short nameid;
 
 	nullpo_retr(1, sd);
@@ -882,10 +887,13 @@ int pet_equipitem(struct map_session_data *sd,int index)
 
 	if (!pd)
 		return 1;
+	
+	if((pet_db_ptr = pd->get_pet_db()) == nullptr)
+		return 1;
 
 	nameid = sd->inventory.u.items_inventory[index].nameid;
 
-	if(pd->petDB->AcceID == 0 || nameid != pd->petDB->AcceID || pd->pet.equip != 0) {
+	if(pet_db_ptr->AcceID == 0 || nameid != pet_db_ptr->AcceID || pd->pet.equip != 0) {
 		clif_equipitemack(sd,0,0,ITEM_EQUIP_ACK_FAIL);
 		return 1;
 	}
@@ -971,9 +979,13 @@ static int pet_unequipitem(struct map_session_data *sd, struct pet_data *pd)
  */
 static int pet_food(struct map_session_data *sd, struct pet_data *pd)
 {
+	nullpo_retr(1, sd);
+	nullpo_retr(1, pd);
+
+	s_pet_db *pet_db_ptr = pd->get_pet_db();
 	int i,k;
 
-	k = pd->petDB->FoodID;
+	k = pet_db_ptr->FoodID;
 	i = pc_search_inventory(sd,k);
 
 	if( i < 0 ) {
@@ -985,12 +997,12 @@ static int pet_food(struct map_session_data *sd, struct pet_data *pd)
 	pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
 
 	if( pd->pet.hungry > 90 )
-		pet_set_intimate(pd, pd->pet.intimate - pd->petDB->r_full);
+		pet_set_intimate(pd, pd->pet.intimate - pet_db_ptr->r_full);
 	else {
 		if( battle_config.pet_friendly_rate != 100 )
-			k = (pd->petDB->r_hungry * battle_config.pet_friendly_rate) / 100;
+			k = (pet_db_ptr->r_hungry * battle_config.pet_friendly_rate) / 100;
 		else
-			k = pd->petDB->r_hungry;
+			k = pet_db_ptr->r_hungry;
 
 		if( pd->pet.hungry > 75 ) {
 			k = k >> 1;
@@ -1009,16 +1021,16 @@ static int pet_food(struct map_session_data *sd, struct pet_data *pd)
 		pd->pet.intimate = 1000;
 
 	status_calc_pet(pd,SCO_NONE);
-	pd->pet.hungry += pd->petDB->fullness;
+	pd->pet.hungry += pet_db_ptr->fullness;
 
 	if( pd->pet.hungry > 100 )
 		pd->pet.hungry = 100;
 
-	log_feeding(sd, LOG_FEED_PET, pd->petDB->FoodID);
+	log_feeding(sd, LOG_FEED_PET, pet_db_ptr->FoodID);
 
 	clif_send_petdata(sd,pd,2,pd->pet.hungry);
 	clif_send_petdata(sd,pd,1,pd->pet.intimate);
-	clif_pet_food(sd,pd->petDB->FoodID,1);
+	clif_pet_food(sd, pet_db_ptr->FoodID,1);
 
 	return 0;
 }
@@ -1136,11 +1148,11 @@ static int pet_ai_sub_hard(struct pet_data *pd, struct map_session_data *sd, uns
 	}
 
 	// Return speed to normal.
-	if (pd->status.speed != pd->petDB->speed) {
+	if (pd->status.speed != pd->get_pet_db()->speed) {
 		if (pd->ud.walktimer != INVALID_TIMER)
 			return 0; // Wait until the pet finishes walking back to master.
 
-		pd->status.speed = pd->petDB->speed;
+		pd->status.speed = pd->get_pet_db()->speed;
 		pd->ud.state.change_walk_target = pd->ud.state.speed_changed = 1;
 	}
 

+ 6 - 3
src/map/pet.hpp

@@ -98,6 +98,8 @@ struct pet_loot {
 	unsigned short max;
 };
 
+struct s_pet_db *pet_db(uint16 pet_id);
+
 struct pet_data {
 	struct block_list bl;
 	struct unit_data ud;
@@ -105,7 +107,6 @@ struct pet_data {
 	struct s_pet pet;
 	struct status_data status;
 	struct mob_db *db;
-	struct s_pet_db *petDB;
 	int pet_hungry_timer;
 	int target_id;
 	struct {
@@ -123,9 +124,11 @@ struct pet_data {
 
 	int masterteleport_timer;
 	struct map_session_data *master;
-};
 
-struct s_pet_db *pet_db(uint16 pet_id);
+	s_pet_db* get_pet_db() {
+		return pet_db(this->pet.class_);
+	}
+};
 
 bool pet_create_egg(struct map_session_data *sd, unsigned short item_id);
 int pet_hungry_val(struct pet_data *pd);

+ 23 - 4
src/map/script.cpp

@@ -5087,6 +5087,20 @@ BUILDIN_FUNC(next)
 	return SCRIPT_CMD_SUCCESS;
 }
 
+/// Clears the dialog and continues the script without a next button.
+///
+/// clear;
+BUILDIN_FUNC(clear)
+{
+	TBL_PC* sd;
+
+	if (!script_rid2sd(sd))
+		return SCRIPT_CMD_FAILURE;
+
+	clif_scriptclear(sd, st->oid);
+	return SCRIPT_CMD_SUCCESS;
+}
+
 /// Ends the script and displays the button 'close' on the npc dialog.
 /// The dialog is closed when the button is pressed.
 ///
@@ -18599,7 +18613,7 @@ BUILDIN_FUNC(unitskillusepos)
 
 /// Pauses the execution of the script, detaching the player
 ///
-/// sleep <mili seconds>;
+/// sleep <milli seconds>;
 BUILDIN_FUNC(sleep)
 {
 	// First call(by function call)
@@ -18609,7 +18623,7 @@ BUILDIN_FUNC(sleep)
 		ticks = script_getnum(st, 2);
 
 		if (ticks <= 0) {
-			ShowError("buildin_sleep2: negative amount('%d') of milli seconds is not supported\n", ticks);
+			ShowError("buildin_sleep: negative or zero amount('%d') of milli seconds is not supported\n", ticks);
 			return SCRIPT_CMD_FAILURE;
 		}
 
@@ -18642,7 +18656,7 @@ BUILDIN_FUNC(sleep2)
 		ticks = script_getnum(st, 2);
 
 		if (ticks <= 0) {
-			ShowError( "buildin_sleep2: negative amount('%d') of milli seconds is not supported\n", ticks );
+			ShowError( "buildin_sleep2: negative or zero amount('%d') of milli seconds is not supported\n", ticks );
 			return SCRIPT_CMD_FAILURE;
 		}
 
@@ -18980,7 +18994,7 @@ BUILDIN_FUNC(mercenary_create)
 
 	class_ = script_getnum(st,2);
 
-	if( !mercenary_class(class_) )
+	if( !mercenary_db(class_) )
 		return SCRIPT_CMD_SUCCESS;
 
 	contract_time = script_getnum(st,3);
@@ -23377,6 +23391,10 @@ BUILDIN_FUNC(unloadnpc) {
 	if( nd == NULL ){
 		ShowError( "buildin_unloadnpc: npc '%s' was not found.\n", name );
 		return SCRIPT_CMD_FAILURE;
+	} else if ( nd->bl.id == st->oid ) {
+		// Supporting self-unload isn't worth the problem it may cause. [Secret]
+		ShowError("buildin_unloadnpc: You cannot self-unload NPC '%s'.\n.", name);
+		return SCRIPT_CMD_FAILURE;
 	}
 
 	npc_unload_duplicates(nd);
@@ -23782,6 +23800,7 @@ struct script_function buildin_func[] = {
 	// NPC interaction
 	BUILDIN_DEF(mes,"s*"),
 	BUILDIN_DEF(next,""),
+	BUILDIN_DEF(clear,""),
 	BUILDIN_DEF(close,""),
 	BUILDIN_DEF(close2,""),
 	BUILDIN_DEF(menu,"sl*"),

+ 23 - 0
src/map/script.hpp

@@ -1865,6 +1865,29 @@ enum e_hat_effects {
 	HAT_EF_QSCARABA,
 	HAT_EF_FSTONE,
 	HAT_EF_MAGICCIRCLE,
+	HAT_EF_GODCLASS,
+	HAT_EF_GODCLASS2,
+	HAT_EF_LEVEL99_RED,
+	HAT_EF_LEVEL99_ULTRAMARINE,
+	HAT_EF_LEVEL99_CYAN,
+	HAT_EF_LEVEL99_LIME,
+	HAT_EF_LEVEL99_VIOLET,
+	HAT_EF_LEVEL99_LILAC,
+	HAT_EF_LEVEL99_SUN_ORANGE,
+	HAT_EF_LEVEL99_DEEP_PINK,
+	HAT_EF_LEVEL99_BLACK,
+	HAT_EF_LEVEL99_WHITE,
+	HAT_EF_LEVEL160_RED,
+	HAT_EF_LEVEL160_ULTRAMARINE,
+	HAT_EF_LEVEL160_CYAN,
+	HAT_EF_LEVEL160_LIME,
+	HAT_EF_LEVEL160_VIOLET,
+	HAT_EF_LEVEL160_LILAC,
+	HAT_EF_LEVEL160_SUN_ORANGE,
+	HAT_EF_LEVEL160_DEEP_PINK,
+	HAT_EF_LEVEL160_BLACK,
+	HAT_EF_LEVEL160_WHITE,
+	HAT_EF_FULL_BLOOMCHERRY_TREE,
 	HAT_EF_MAX
 };
 

+ 58 - 0
src/map/script_constants.hpp

@@ -1481,6 +1481,7 @@
 	export_constant(SC_DORAM_SVSP);
 	export_constant(SC_FALLEN_ANGEL);
 	export_constant(SC_CHEERUP);
+	export_constant(SC_DRESSUP);
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);
 #endif
@@ -4943,6 +4944,11 @@
 	export_constant_npc(JT_4_M_DANGDANG);
 	export_constant_npc(JT_4_F_DANGDANG1);
 	export_constant_npc(JT_4_LEAFCAT);
+	export_constant_npc(JT_4_NASARIAN);
+	export_constant_npc(JT_4_NASARIAN_EM);
+	export_constant_npc(JT_4_TEDDY_BEAR_W);
+	export_constant_npc(JT_4_TEDDY_BEAR_B);
+	export_constant_npc(JT_4_TEDDY_BEAR_B_L);
 	#undef export_constant_npc
 
 	/* special effects */
@@ -6103,11 +6109,63 @@
 	export_constant(HAT_EF_QSCARABA);
 	export_constant(HAT_EF_FSTONE);
 	export_constant(HAT_EF_MAGICCIRCLE);
+	export_constant(HAT_EF_GODCLASS);
+	export_constant(HAT_EF_GODCLASS2);
+	export_constant(HAT_EF_LEVEL99_RED);
+	export_constant(HAT_EF_LEVEL99_ULTRAMARINE);
+	export_constant(HAT_EF_LEVEL99_CYAN);
+	export_constant(HAT_EF_LEVEL99_LIME);
+	export_constant(HAT_EF_LEVEL99_VIOLET);
+	export_constant(HAT_EF_LEVEL99_LILAC);
+	export_constant(HAT_EF_LEVEL99_SUN_ORANGE);
+	export_constant(HAT_EF_LEVEL99_DEEP_PINK);
+	export_constant(HAT_EF_LEVEL99_BLACK);
+	export_constant(HAT_EF_LEVEL99_WHITE);
+	export_constant(HAT_EF_LEVEL160_RED);
+	export_constant(HAT_EF_LEVEL160_ULTRAMARINE);
+	export_constant(HAT_EF_LEVEL160_CYAN);
+	export_constant(HAT_EF_LEVEL160_LIME);
+	export_constant(HAT_EF_LEVEL160_VIOLET);
+	export_constant(HAT_EF_LEVEL160_LILAC);
+	export_constant(HAT_EF_LEVEL160_SUN_ORANGE);
+	export_constant(HAT_EF_LEVEL160_DEEP_PINK);
+	export_constant(HAT_EF_LEVEL160_BLACK);
+	export_constant(HAT_EF_LEVEL160_WHITE);
+	export_constant(HAT_EF_FULL_BLOOMCHERRY_TREE);
 
 	/* pet catch */
 	export_constant(PET_CATCH_UNIVERSAL);
 	export_constant(PET_CATCH_UNIVERSAL_ITEM);
 
+	/* monster modes */
+	export_constant(MD_NONE);
+	export_constant(MD_CANMOVE);
+	export_constant(MD_LOOTER);
+	export_constant(MD_AGGRESSIVE);
+	export_constant(MD_ASSIST);
+	export_constant(MD_CASTSENSOR_IDLE);
+	export_constant(MD_NORANDOM_WALK);
+	export_constant(MD_NOCAST_SKILL);
+	export_constant(MD_CANATTACK);
+	export_constant(MD_CASTSENSOR_CHASE);
+	export_constant(MD_CHANGECHASE);
+	export_constant(MD_ANGRY);
+	export_constant(MD_CHANGETARGET_MELEE);
+	export_constant(MD_CHANGETARGET_CHASE);
+	export_constant(MD_TARGETWEAK);
+	export_constant(MD_RANDOMTARGET);
+	export_constant(MD_IGNOREMELEE);
+	export_constant(MD_IGNOREMAGIC);
+	export_constant(MD_IGNORERANGED);
+	export_constant(MD_MVP);
+	export_constant(MD_IGNOREMISC);
+	export_constant(MD_KNOCKBACK_IMMUNE);
+	export_constant(MD_TELEPORT_BLOCK);
+	export_constant(MD_FIXED_ITEMDROP);
+	export_constant(MD_DETECTOR);
+	export_constant(MD_STATUS_IMMUNE);
+	export_constant(MD_SKILL_IMMUNE);
+
 	#undef export_constant
 	#undef export_constant2
 	#undef export_parameter

+ 76 - 38
src/map/skill.cpp

@@ -1421,8 +1421,15 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		skill_break_equip(src,bl, EQP_SHIELD, 150*skill_lv, BCT_ENEMY);
 		break;
 
-	case CH_TIGERFIST:
-		sc_start(src,bl,SC_STOP,(10+skill_lv*10),0,skill_get_time2(skill_id,skill_lv));
+	case CH_TIGERFIST: {
+		uint16 basetime = skill_get_time(skill_id, skill_lv);
+		uint16 mintime = 30 * (status_get_lv(src) + 100);
+
+		if (status_get_class_(bl) == CLASS_BOSS)
+			basetime /= 5;
+		basetime = min((basetime * status_get_agi(bl)) / -200 + basetime, mintime) / 2;
+		sc_start(src, bl, SC_STOP, (1 + skill_lv) * 10, 0, basetime);
+	}
 		break;
 
 	case LK_SPIRALPIERCE:
@@ -1513,9 +1520,8 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		sc_start(src,bl,SC_FLING,100, sd?sd->spiritball_old:5,skill_get_time(skill_id,skill_lv));
 		break;
 	case GS_DISARM:
-		rate = 3*skill_lv;
-		if (sstatus->dex > tstatus->dex)
-			rate += (sstatus->dex - tstatus->dex)/5; //TODO: Made up formula
+		rate = sstatus->dex / (4 * (7 - skill_lv)) + sstatus->luk / (4 * (6 - skill_lv));
+		rate = rate + status_get_lv(src) - (tstatus->agi * rate / 100) - tstatus->luk - status_get_lv(bl);
 		skill_strip_equip(src,bl, EQP_WEAPON, rate, skill_lv, skill_get_time(skill_id,skill_lv));
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
 		break;
@@ -1909,6 +1915,8 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 					case SC_CLAN_INFO:		case SC_SWORDCLAN:		case SC_ARCWANDCLAN:
 					case SC_GOLDENMACECLAN:	case SC_CROSSBOWCLAN:
 					case SC_DAILYSENDMAILCNT:
+					case SC_WEDDING:		case SC_XMAS:			case SC_SUMMER:
+					case SC_DRESSUP:		case SC_HANBOK:			case SC_OKTOBERFEST:
 						continue;
 					case SC_WHISTLE:		case SC_ASSNCROS:		case SC_POEMBRAGI:
 					case SC_APPLEIDUN:		case SC_HUMMING:		case SC_DONTFORGETME:
@@ -4101,8 +4109,8 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 					}
 					break;
 				case WL_CHAINLIGHTNING_ATK: {
-						skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,9 - skl->type); // Hit a Lightning on the current Target
 						skill_toggle_magicpower(src, skl->skill_id); // Only the first hit will be amplified
+						skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,9 - skl->type); // Hit a Lightning on the current Target
 						if( skl->type < (4 + skl->skill_lv - 1) && skl->x < 3  )
 						{ // Remaining Chains Hit
 							struct block_list *nbl = NULL; // Next Target of Chain
@@ -6502,30 +6510,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case SA_FROSTWEAPON:
 	case SA_LIGHTNINGLOADER:
 	case SA_SEISMICWEAPON:
-		if (dstsd) {
-			if(dstsd->status.weapon == W_FIST ||
-				(dstsd->sc.count && !dstsd->sc.data[type] &&
-				(	//Allow re-enchanting to lenghten time. [Skotlex]
-					dstsd->sc.data[SC_FIREWEAPON] ||
-					dstsd->sc.data[SC_WATERWEAPON] ||
-					dstsd->sc.data[SC_WINDWEAPON] ||
-					dstsd->sc.data[SC_EARTHWEAPON] ||
-					dstsd->sc.data[SC_SHADOWWEAPON] ||
-					dstsd->sc.data[SC_GHOSTWEAPON] ||
-					dstsd->sc.data[SC_ENCPOISON]
-				))
-				) {
-				if (sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
-				clif_skill_nodamage(src,bl,skill_id,skill_lv,0);
-				break;
-			}
+		if (dstsd && dstsd->status.weapon == W_FIST) {
+			if (sd)
+				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
+			clif_skill_nodamage(src,bl,skill_id,skill_lv,0);
+			break;
 		}
 		// 100% success rate at lv4 & 5, but lasts longer at lv5
 		if(!clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,(60+skill_lv*10),skill_lv, skill_get_time(skill_id,skill_lv)))) {
+			if (dstsd){
+				short index = dstsd->equip_index[EQI_HAND_R];
+				if (index&EQP_WEAPON && dstsd->inventory_data[index]->type == IT_WEAPON)
+					pc_unequipitem(dstsd, index, 3); //Must unequip the weapon instead of breaking it [Daegaladh]
+			}
 			if (sd)
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
-			if (skill_break_equip(src,bl, EQP_WEAPON, 10000, BCT_PARTY) && sd && sd != dstsd)
-				clif_displaymessage(sd->fd, msg_txt(sd,669));
 		}
 		break;
 
@@ -6969,7 +6968,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 
 	case MO_ABSORBSPIRITS:
 		i = 0;
-		if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) &&
+		if (dstsd && (sd == dstsd || map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) &&
 			((dstsd->class_&MAPID_BASEMASK) != MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK) != MAPID_REBELLION)) { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
 			if (dstsd->spiritball > 0) {
 				i = dstsd->spiritball * 7;
@@ -7951,6 +7950,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 					case SC_CROSSBOWCLAN:
 					case SC_JUMPINGCLAN:
 					case SC_DAILYSENDMAILCNT:
+					case SC_WEDDING:		case SC_XMAS:			case SC_SUMMER:
+					case SC_DRESSUP:		case SC_HANBOK:			case SC_OKTOBERFEST:
 						continue;
 					case SC_WHISTLE:
 					case SC_ASSNCROS:
@@ -8194,6 +8195,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 
 	case NPC_SUMMONSLAVE:
 	case NPC_SUMMONMONSTER:
+	case NPC_DEATHSUMMON:
 		if(md && md->skill_idx >= 0)
 			mob_summonslave(md,md->db->skill[md->skill_idx].val,skill_lv,skill_id);
 		break;
@@ -9098,7 +9100,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
  		break;
 
 	case RK_FIGHTINGSPIRIT: {
-			// val1: ATKBonus: Caster: 70 + 7 * PartyMember. Member: 70 + 7 * PartyMember / 2
+			// val1: ATKBonus: Caster: 70 + 7 * PartyMember. Member: (70 + 7 * PartyMember) / 2
 			// val2: ASPD boost: [RK_RUNEMASTERYlevel * 4 / 10] * 10 ==> RK_RUNEMASTERYlevel * 4
 			if( flag&1 ) {
 				if( skill_area_temp[1] == bl->id )
@@ -9109,7 +9111,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 				if( sd && sd->status.party_id ) {
 					skill_area_temp[0] = party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count);
 					skill_area_temp[1] = src->id;
-					skill_area_temp[3] = 70 + 7 * skill_area_temp[0] / 2;
+					skill_area_temp[3] = (70 + 7 * skill_area_temp[0]) / 2;
 					skill_area_temp[4] = skill_get_time(skill_id,skill_lv);
 					party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id);
 				}
@@ -9419,6 +9421,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 					case SC_CLAN_INFO:		case SC_SWORDCLAN:		case SC_ARCWANDCLAN:
 					case SC_GOLDENMACECLAN:	case SC_CROSSBOWCLAN:
 					case SC_DAILYSENDMAILCNT:
+					case SC_WEDDING:		case SC_XMAS:			case SC_SUMMER:
+					case SC_DRESSUP:		case SC_HANBOK:			case SC_OKTOBERFEST:
 					continue;
 				case SC_ASSUMPTIO:
 					if( bl->type == BL_MOB )
@@ -9957,7 +9961,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case SR_ASSIMILATEPOWER:
 		if (flag&1) {
 			i = 0;
-			if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) {
+			if (dstsd && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) {
 				if (dstsd->spiritball > 0) {
 					i = dstsd->spiritball;
 					pc_delspiritball(dstsd,dstsd->spiritball,0);
@@ -11443,7 +11447,7 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
 			skill_check_unit_range(src,ud->skillx,ud->skilly,ud->skill_id,ud->skill_lv)
 		  )
 		{
-			if (sd) clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_DUPLICATE_RANGEIN,0);
+			if (sd) clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
 			break;
 		}
 		if( skill_get_unit_flag(ud->skill_id)&UF_NOFOOTSET &&
@@ -11981,16 +11985,38 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 			if (rnd()%100 < 50) {
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 			} else {
-				TBL_MOB* md = mob_once_spawn_sub(src, src->m, x, y, "--ja--",(skill_lv < 2 ? MOBID_BLACK_MUSHROOM + rnd()%2 : MOBID_RED_PLANT + rnd()%6),"", SZ_SMALL, AI_NONE);
-				int t;
-				if (!md) break;
+				TBL_MOB* md = NULL;
+				int t, mob_id;
+
+				if (skill_lv == 1)
+					mob_id = MOBID_BLACK_MUSHROOM + rnd() % 2;
+				else {
+					int rand_val = rnd() % 100;
+
+					if (rand_val < 30)
+						mob_id = MOBID_GREEN_PLANT;
+					else if (rand_val < 55)
+						mob_id = MOBID_RED_PLANT;
+					else if (rand_val < 80)
+						mob_id = MOBID_YELLOW_PLANT;
+					else if (rand_val < 90)
+						mob_id = MOBID_WHITE_PLANT;
+					else if (rand_val < 98)
+						mob_id = MOBID_BLUE_PLANT;
+					else
+						mob_id = MOBID_SHINING_PLANT;
+				}
+
+				md = mob_once_spawn_sub(src, src->m, x, y, "--ja--", mob_id, "", SZ_SMALL, AI_NONE);
+				if (!md)
+					break;
 				if ((t = skill_get_time(skill_id, skill_lv)) > 0)
 				{
 					if( md->deletetimer != INVALID_TIMER )
 						delete_timer(md->deletetimer, mob_timer_delete);
 					md->deletetimer = add_timer (tick + t, mob_timer_delete, md->bl.id, 0);
 				}
-				mob_spawn (md);
+				mob_spawn(md);
 			}
 		}
 		break;
@@ -14967,6 +14993,12 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 				return false;
 			}
 			break;
+		case AL_HOLYWATER:
+			if(pc_search_inventory(sd,ITEMID_EMPTY_BOTTLE) < 0) {
+				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
+				return false;
+			}
+			break;
 		case MO_CALLSPIRITS:
 			if(sc && sc->data[SC_RAISINGDRAGON])
 				skill_lv += sc->data[SC_RAISINGDRAGON]->val1;
@@ -18967,7 +18999,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
 		data = itemdb_search(nameid);
 
 		if (runemastery_skill_lv >= 10) temp_qty = 1 + rnd()%3;
-		else if (runemastery_skill_lv > 5) temp_qty = 1 + rnd()%2;
+		else if (runemastery_skill_lv > 4) temp_qty = 1 + rnd()%2;
 		else temp_qty = 1;
 
 		if (data->stack.inventory) {
@@ -19415,7 +19447,9 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
 							for (l = 0; l < total_qty; l += tmp_item.amount) {
 								if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
 									clif_additem(sd,0,0,flag);
-									map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+									if( battle_config.skill_drop_items_full ){
+										map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+									}
 								}
 							}
 							k++;
@@ -19433,7 +19467,9 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
 		} else if (tmp_item.amount) { //Success
 			if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
 				clif_additem(sd,0,0,flag);
-				map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+				if( battle_config.skill_drop_items_full ){
+					map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+				}
 			}
 			if (skill_id == GN_MIX_COOKING || skill_id == GN_MAKEBOMB || skill_id ==  GN_S_PHARMACY) {
 				clif_produceeffect(sd,6,nameid);
@@ -19490,7 +19526,9 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
 					tmp_item.identify = 1;
 					if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
 						clif_additem(sd,0,0,flag);
-						map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+						if( battle_config.skill_drop_items_full ){
+							map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0);
+						}
 					}
 					clif_produceeffect(sd,7,nameid);
 					clif_misceffect(&sd->bl,6);

+ 42 - 25
src/map/status.cpp

@@ -1147,12 +1147,14 @@ void initChangeTables(void)
 
 	// Geffen Magic Tournament Buffs
 	StatusIconChangeTable[SC_GEFFEN_MAGIC1] = SI_GEFFEN_MAGIC1;
-    StatusIconChangeTable[SC_GEFFEN_MAGIC2] = SI_GEFFEN_MAGIC2;
-    StatusIconChangeTable[SC_GEFFEN_MAGIC3] = SI_GEFFEN_MAGIC3;
+	StatusIconChangeTable[SC_GEFFEN_MAGIC2] = SI_GEFFEN_MAGIC2;
+	StatusIconChangeTable[SC_GEFFEN_MAGIC3] = SI_GEFFEN_MAGIC3;
 
 	// RODEX
 	StatusIconChangeTable[SC_DAILYSENDMAILCNT] = SI_DAILYSENDMAILCNT;
 
+	StatusIconChangeTable[SC_DRESSUP] = SI_DRESS_UP;
+
 	/* Other SC which are not necessarily associated to skills */
 	StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD;
 	StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD;
@@ -1370,6 +1372,7 @@ void initChangeTables(void)
 
 	// Clans
 	StatusDisplayType[SC_CLAN_INFO] = BL_PC|BL_NPC;
+	StatusDisplayType[SC_DRESSUP] = BL_PC;
 
 	/* StatusChangeState (SCS_) NOMOVE */
 	StatusChangeStateTable[SC_ANKLE]				|= SCS_NOMOVE;
@@ -2352,10 +2355,10 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
 	float temp_aspd = 0;
 
 	amotion = job_info[classidx].aspd_base[sd->weapontype1]; // Single weapon
-	if (sd->status.weapon > MAX_WEAPON_TYPE)
-		amotion += job_info[classidx].aspd_base[sd->weapontype2] / 4; // Dual-wield
 	if (sd->status.shield)
 		amotion += job_info[classidx].aspd_base[MAX_WEAPON_TYPE];
+	else if (sd->weapontype2 && sd->equip_index[EQI_HAND_R] != sd->equip_index[EQI_HAND_L])
+		amotion += job_info[classidx].aspd_base[sd->weapontype2] / 4; // Dual-wield
 
 	switch(sd->status.weapon) {
 		case W_BOW:
@@ -2787,22 +2790,21 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt)
 			ShowError("status_calc_mob: No castle set at map %s\n", map[md->bl.m].name);
 		else if(gc->castle_id < 24 || md->mob_id == MOBID_EMPERIUM) {
 #ifdef RENEWAL
-			status->max_hp += 50 * gc->defense;
-			status->max_sp += 70 * gc->defense;
+			status->max_hp += 50 * (gc->defense / 5);
 #else
 			status->max_hp += 1000 * gc->defense;
-			status->max_sp += 200 * gc->defense;
 #endif
 			status->hp = status->max_hp;
-			status->sp = status->max_sp;
 			status->def += (gc->defense+2)/3;
 			status->mdef += (gc->defense+2)/3;
 		}
 		if(md->mob_id != MOBID_EMPERIUM) {
-			status->batk += status->batk * 10*md->guardian_data->guardup_lv/100;
-			status->rhw.atk += status->rhw.atk * 10*md->guardian_data->guardup_lv/100;
-			status->rhw.atk2 += status->rhw.atk2 * 10*md->guardian_data->guardup_lv/100;
-			status->aspd_rate -= 100*md->guardian_data->guardup_lv;
+			status->max_hp += 1000 * gc->defense;
+			status->hp = status->max_hp;
+			status->batk += 2 * md->guardian_data->guardup_lv + 8;
+			status->rhw.atk += 2 * md->guardian_data->guardup_lv + 8;
+			status->rhw.atk2 += 2 * md->guardian_data->guardup_lv + 8;
+			status->aspd_rate -= 2 * md->guardian_data->guardup_lv + 3;
 		}
 	}
 
@@ -2882,7 +2884,7 @@ void status_calc_pet_(struct pet_data *pd, enum e_status_calc_opt opt)
 		memcpy(&pd->status, &pd->db->status, sizeof(struct status_data));
 		pd->status.mode = MD_CANMOVE; // Pets discard all modes, except walking
 		pd->status.class_ = CLASS_NORMAL;
-		pd->status.speed = pd->petDB->speed;
+		pd->status.speed = pd->get_pet_db()->speed;
 
 		if(battle_config.pet_attack_support || battle_config.pet_damage_support) {
 			// Attack support requires the pet to be able to attack
@@ -3724,9 +3726,11 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 
 	if( sd->pd ) { // Pet Bonus
 		struct pet_data *pd = sd->pd;
-		if( pd && pd->petDB && pd->petDB->pet_loyal_script && pd->pet.intimate >= battle_config.pet_equip_min_friendly )
-			run_script(pd->petDB->pet_loyal_script,0,sd->bl.id,0);
-		if( pd && pd->pet.intimate > 0 && (!battle_config.pet_equip_required || pd->pet.equip > 0) && pd->state.skillbonus == 1 && pd->bonus )
+		s_pet_db *pet_db_ptr = pd->get_pet_db();
+
+		if( pet_db_ptr != nullptr && pet_db_ptr->pet_loyal_script && pd->pet.intimate >= battle_config.pet_equip_min_friendly )
+			run_script(pd->get_pet_db()->pet_loyal_script,0,sd->bl.id,0);
+		if( pd->pet.intimate > 0 && (!battle_config.pet_equip_required || pd->pet.equip > 0) && pd->state.skillbonus == 1 && pd->bonus )
 			pc_bonus(sd,pd->bonus->type, pd->bonus->val);
 	}
 
@@ -4062,7 +4066,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 		sd->subele[ELE_HOLY] += skill*5;
 	if((skill=pc_checkskill(sd,BS_SKINTEMPER))>0) {
 		sd->subele[ELE_NEUTRAL] += skill;
-		sd->subele[ELE_FIRE] += skill*4;
+		sd->subele[ELE_FIRE] += skill*5;
 	}
 	if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0) {
 #ifdef RENEWAL
@@ -7657,7 +7661,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
 		vd = npc_get_viewdata(class_);
 	else if (homdb_checkid(class_))
 		vd = hom_get_viewdata(class_);
-	else if (mercenary_class(class_))
+	else if (mercenary_db(class_))
 		vd = mercenary_get_viewdata(class_);
 	else if (elemental_class(class_))
 		vd = elemental_get_viewdata(class_);
@@ -8807,6 +8811,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 	case SC_SUMMER:
 	case SC_HANBOK:
 	case SC_OKTOBERFEST:
+	case SC_DRESSUP:
 		if (!vd)
 			return 0;
 		break;
@@ -10948,10 +10953,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val2 = src->id;
 			break;
 		case SC_HEAT_BARREL:
-			//kRO Update 2016-05-25
-			val2 = val1 * 5; // -fixed casttime
-			val3 = 6 + val1 * 2; // ATK
-			val4 = 25 + val1 * 5; // -hit
+			{
+				uint8 n = 10;
+				if (sd)
+					n = (uint8)sd->spiritball_old;
+
+				//kRO Update 2016-05-25
+				val2 = n * 5; // -fixed casttime
+				val3 = (6 + val1 * 2) * n; // ATK
+				val4 = 25 + val1 * 5; // -hit
+			}
 			break;
 		case SC_P_ALTER:
 			{
@@ -11075,6 +11086,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			case SC_SUMMER:
 			case SC_HANBOK:
 			case SC_OKTOBERFEST:
+			case SC_DRESSUP:
 				if( !vd )
 					break;
 				clif_changelook(bl,LOOK_BASE,vd->class_);
@@ -11134,6 +11146,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_GOLDENMACECLAN:
 		case SC_CROSSBOWCLAN:
 		case SC_JUMPINGCLAN:
+		case SC_DRESSUP:
 			val_flag |= 1;
 			break;
 		// Start |1|2 val_flag setting
@@ -11279,6 +11292,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_SUMMER:
 		case SC_HANBOK:
 		case SC_OKTOBERFEST:
+		case SC_DRESSUP:
 		case SC_SUHIDE:
 			unit_stop_attack(bl);
 			break;
@@ -11442,6 +11456,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			opt_flag |= 0x4;
 			break;
 		case SC_SUMMER:
+		case SC_DRESSUP:
 			sc->option |= OPTION_SUMMER;
 			opt_flag |= 0x4;
 			break;
@@ -11677,6 +11692,7 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_SUMMER:
 			case SC_HANBOK:
 			case SC_OKTOBERFEST:
+			case SC_DRESSUP:
 			case SC_NOCHAT:
 			case SC_FUSION:
 			case SC_EARTHSCROLL:
@@ -11750,9 +11766,9 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_SPRITEMABLE:
 			case SC_DORAM_BUF_01:
 			case SC_DORAM_BUF_02:
-            case SC_GEFFEN_MAGIC1:
-            case SC_GEFFEN_MAGIC2:
-            case SC_GEFFEN_MAGIC3:
+			case SC_GEFFEN_MAGIC1:
+			case SC_GEFFEN_MAGIC2:
+			case SC_GEFFEN_MAGIC3:
 			// Costumes
 			case SC_MOONSTAR:
 			case SC_SUPER_STAR:
@@ -12450,6 +12466,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 		opt_flag |= 0x4;
 		break;
 	case SC_SUMMER:
+	case SC_DRESSUP:
 		sc->option &= ~OPTION_SUMMER;
 		opt_flag |= 0x4;
 		break;

+ 1 - 0
src/map/status.hpp

@@ -839,6 +839,7 @@ enum sc_type : int16 {
 	SC_FALLEN_ANGEL,
 
 	SC_CHEERUP,
+	SC_DRESSUP,
 
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled

+ 35 - 51
src/map/storage.cpp

@@ -3,11 +3,12 @@
 
 #include "storage.hpp"
 
+#include <map>
+
 #include <stdlib.h>
 #include <string.h>
 
 #include "../common/cbasetypes.h"
-#include "../common/db.h"
 #include "../common/nullpo.h"
 #include "../common/malloc.h"
 #include "../common/showmsg.h"
@@ -23,7 +24,9 @@
 #include "log.hpp"
 #include "battle.hpp"
 
-static DBMap* guild_storage_db; ///Databases of guild_storage : int guild_id -> struct guild_storage*
+///Databases of guild_storage : int guild_id -> struct guild_storage
+std::map<int, struct s_storage> guild_storage_db;
+
 struct s_storage_table *storage_db;
 int storage_count;
 
@@ -102,7 +105,6 @@ void storage_sortitem(struct item* items, unsigned int size)
  */
 void do_init_storage(void)
 {
-	guild_storage_db = idb_alloc(DB_OPT_RELEASE_DATA);
 	storage_db = NULL;
 	storage_count = 0;
 }
@@ -114,36 +116,26 @@ void do_init_storage(void)
  */
 void do_final_storage(void)
 {
-	guild_storage_db->destroy(guild_storage_db,NULL);
+	guild_storage_db.clear();
 	if (storage_db)
 		aFree(storage_db);
 	storage_db = NULL;
 	storage_count = 0;
 }
 
-/**
- * Parses storage and saves 'dirty' ones upon reconnect.
- * @author [Skotlex]
- * @see DBApply
- * @return 0
- */
-static int storage_reconnect_sub(DBKey key, DBData *data, va_list ap)
-{
-	struct s_storage *stor = static_cast<s_storage *>(db_data2ptr(data));
-
-	if (stor->dirty && stor->status == 0) //Save closed storages.
-		storage_guild_storagesave(0, stor->id, 0);
-
-	return 0;
-}
-
 /**
  * Function to be invoked upon server reconnection to char. To save all 'dirty' storages
  * @author [Skotlex]
  */
-void do_reconnect_storage(void)
-{
-	guild_storage_db->foreach(guild_storage_db, storage_reconnect_sub);
+void do_reconnect_storage(void){
+	for( auto entry : guild_storage_db ){
+		struct s_storage stor = entry.second;
+
+		// Save closed storages.
+		if( stor.dirty && stor.status == 0 ){
+			storage_guild_storagesave(0, stor.id, 0);
+		}
+	}
 }
 
 /**
@@ -532,24 +524,6 @@ void storage_storage_quit(struct map_session_data* sd, int flag)
 	storage_storagesave(sd);
 }
 
-/**
- * Create a guild_storage stucture and add it into the db
- * @see DBCreateData
- * @param key
- * @param args
- * @return 
- */
-static DBData create_guildstorage(DBKey key, va_list args)
-{
-	struct s_storage *gs = NULL;
-
-	gs = (struct s_storage *) aCalloc(sizeof(struct s_storage), 1);
-	gs->type = TABLE_GUILD_STORAGE;
-	gs->id = key.i;
-
-	return db_ptr2data(gs);
-}
-
 /**
  * Retrieve the guild_storage of a guild
  * will create a new storage if none found for the guild
@@ -558,10 +532,18 @@ static DBData create_guildstorage(DBKey key, va_list args)
  */
 struct s_storage *guild2storage(int guild_id)
 {
-	struct s_storage *gs = NULL;
+	struct s_storage *gs;
+
+	if (guild_search(guild_id) == nullptr)
+		return nullptr;
 
-	if (guild_search(guild_id) != NULL)
-		gs = (struct s_storage *)idb_ensure(guild_storage_db,guild_id,create_guildstorage);
+	gs = guild2storage2(guild_id);
+	
+	if( gs == nullptr ){
+		gs = &guild_storage_db[guild_id];
+		gs->id = guild_id;
+		gs->type = TABLE_GUILD_STORAGE;
+	}
 
 	return gs;
 }
@@ -570,21 +552,23 @@ struct s_storage *guild2storage(int guild_id)
  * See if the guild_storage exist in db and fetch it if it's the case
  * @author : [Skotlex]
  * @param guild_id : guild_id to search the storage
- * @return s_storage or NULL
+ * @return s_storage or nullptr
  */
-struct s_storage *guild2storage2(int guild_id)
-{
-	return (struct s_storage*)idb_get(guild_storage_db,guild_id);
+struct s_storage *guild2storage2(int guild_id){
+	if( guild_storage_db.find(guild_id) != guild_storage_db.end() ){
+		return &guild_storage_db[guild_id];
+	}else{
+		return nullptr;
+	}
 }
 
 /**
  * Delete a guild_storage and remove it from db
  * @param guild_id : guild to remove the storage from
- * @return 0
  */
 void storage_guild_delete(int guild_id)
 {
-	idb_remove(guild_storage_db,guild_id);
+	guild_storage_db.erase(guild_id);
 }
 
 /**
@@ -924,7 +908,7 @@ bool storage_guild_storagesave(uint32 account_id, int guild_id, int flag)
 	struct s_storage *stor = guild2storage2(guild_id);
 
 	if (stor) {
-		if (flag) //Char quitting, close it.
+		if (flag&CSAVE_QUIT) //Char quitting, close it.
 			stor->status = false;
 
 		if (stor->dirty)

+ 29 - 4
src/map/unit.cpp

@@ -416,11 +416,35 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
 
 	if (bl->x == ud->to_x && bl->y == ud->to_y) {
 		if (ud->walk_done_event[0]){
-			npc_event_do_id(ud->walk_done_event,bl->id);
-			ud->walk_done_event[0] = 0;
+			char walk_done_event[EVENT_NAME_LENGTH];
+
+			// Copying is required in case someone uses unitwalkto inside the event code
+			safestrncpy(walk_done_event, ud->walk_done_event, EVENT_NAME_LENGTH);
+
+			ud->state.walk_script = true;
+
+			// Execute the event
+			npc_event_do_id(walk_done_event,bl->id);
+
+			ud->state.walk_script = false;
+
+			// Check if the unit was killed
+			if( status_isdead(bl) ){
+				struct mob_data* md = BL_CAST(BL_MOB, bl);
+
+				if( md && !md->spawn ){
+					unit_free(bl, CLR_OUTSIGHT);
+				}
+
+				return 0;
+			}
+
+			// Check if another event was set
+			if( !strcmp(ud->walk_done_event,walk_done_event) ){
+				// If not remove it
+				ud->walk_done_event[0] = 0;
+			}
 		}
-		if (ud->state.walk_script)
-			ud->state.walk_script = 0;
 	}
 
 	switch(bl->type) {
@@ -1695,6 +1719,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
 		switch( skill_id ) {
 			case NPC_SUMMONSLAVE:
 			case NPC_SUMMONMONSTER:
+			case NPC_DEATHSUMMON:
 			case AL_TELEPORT:
 				if( ((TBL_MOB*)src)->master_id && ((TBL_MOB*)src)->special_state.ai )
 					return 0;