From 19bbd82c553a9552ba7bd902584561a7ab0c0404 Mon Sep 17 00:00:00 2001 From: Atemo Date: Thu, 16 Mar 2023 13:24:32 +0100 Subject: [PATCH] Initial release of nif_dun quests (#7349) * Added mobs db, mobs spawn and quests related to nif_dun01 and nif_dun02 * Some data after rebalance is missing but the base is there Thanks to @aleos89 @Lemongrass3110 @Pokye @OptimusM @Tokeiburu for the reviews ! --- db/re/mob_db.yml | 460 +++++++++++++- db/re/mob_skill_db.txt | 102 ++++ db/re/quest_db.yml | 51 ++ npc/re/mobs/dungeons/nif_dun.txt | 18 + npc/re/quests/quests_dungeons_200.txt | 827 ++++++++++++++++++++++++++ npc/re/scripts_monsters.conf | 1 + npc/re/scripts_warps.conf | 1 + npc/re/warps/dungeons/nif_dun.txt | 34 ++ 8 files changed, 1475 insertions(+), 19 deletions(-) create mode 100644 npc/re/mobs/dungeons/nif_dun.txt create mode 100644 npc/re/warps/dungeons/nif_dun.txt diff --git a/db/re/mob_db.yml b/db/re/mob_db.yml index 59d285e56b..bce597c234 100644 --- a/db/re/mob_db.yml +++ b/db/re/mob_db.yml @@ -97145,25 +97145,447 @@ Body: - Item: R001_Bestia_Card Rate: 1 StealProtected: true -# - Id: 20935 -# AegisName: GAN_CEANN -# - Id: 20936 -# AegisName: DISGUISER -# - Id: 20937 -# AegisName: BRUTAL_MURDERER -# - Id: 20938 -# AegisName: GHOST_CUBE -# - Id: 20939 -# AegisName: LUDE_GAL -# - Id: 20940 -# AegisName: BLUEMOON_LOLI_RURI -# - Id: 20941 -# AegisName: GROTE -# - Id: 20942 -# AegisName: PIERROTZOIST -# - Id: 20943 -# AegisName: DEATH_WITCH -# DamageTaken: 10 + - Id: 20935 + AegisName: GAN_CEANN + Name: Gan Ceann + Level: 215 + Hp: 11785610 + BaseExp: 267854 + JobExp: 188128 + Attack: 7951 + Attack2: 922 + Defense: 380 + MagicDefense: 99 + MagicResistance: 130 + Resistance: 130 + Str: 278 + Agi: 166 + Vit: 121 + Int: 121 + Dex: 178 + Luk: 123 + AttackRange: 2 + SkillRange: 10 + ChaseRange: 12 + Size: Medium + Race: Formless + Element: Neutral + ElementLevel: 1 + WalkSpeed: 155 + AttackDelay: 238 + AttackMotion: 576 + DamageMotion: 360 + Ai: 04 + Drops: + - Item: Broken_Armor_Piece + Rate: 2400 + - Item: Broken_Steel_Piece + Rate: 1600 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Shadowdecon + Rate: 12 + - Item: Zelunium + Rate: 12 + - Item: Gan_Ceann_Card + Rate: 1 + StealProtected: true + - Id: 20936 + AegisName: DISGUISER + Name: Disguiser + Level: 254 + Hp: 42303800 + BaseExp: 335956 + JobExp: 235169 + Attack: 9874 + Attack2: 1230 + Defense: 542 + MagicDefense: 168 + MagicResistance: 171 + Resistance: 187 + Str: 314 + Agi: 203 + Vit: 147 + Int: 135 + Dex: 201 + Luk: 198 + AttackRange: 2 + SkillRange: 10 + ChaseRange: 12 + Size: Medium + Race: Demon + Element: Undead + ElementLevel: 2 + WalkSpeed: 150 + AttackDelay: 384 + AttackMotion: 768 + DamageMotion: 384 + Ai: 04 + Drops: + - Item: Red_Scarf + Rate: 2500 + - Item: Tangled_Chain + Rate: 1800 + - Item: White_Powder + Rate: 50 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Zelunium + Rate: 25 + - Item: Shadowdecon + Rate: 25 + - Item: Disguiser_Card + Rate: 1 + StealProtected: true + - Id: 20937 + AegisName: BRUTAL_MURDERER + Name: Brutal Murderer + Level: 214 + Hp: 13909270 + BaseExp: 269952 + JobExp: 188966 + Attack: 8135 + Attack2: 998 + Defense: 470 + MagicDefense: 80 + MagicResistance: 143 + Resistance: 187 + Str: 277 + Agi: 174 + Vit: 175 + Int: 134 + Dex: 131 + Luk: 130 + AttackRange: 2 + SkillRange: 10 + ChaseRange: 12 + Size: Large + Race: Demihuman + Element: Neutral + ElementLevel: 2 + WalkSpeed: 175 + AttackDelay: 336 + AttackMotion: 672 + DamageMotion: 288 + Ai: 04 + Drops: + - Item: Old_Manteau + Rate: 2400 + - Item: Rusty_Cleaver + Rate: 1600 + - Item: Mr_Scream + Rate: 20 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Shadowdecon + Rate: 12 + - Item: Zelunium + Rate: 12 + - Item: Brutal_Murderer_Card + Rate: 1 + StealProtected: true + - Id: 20938 + AegisName: GHOST_CUBE + Name: Ghost Cube + Level: 213 + Hp: 12735150 + BaseExp: 261542 + JobExp: 183079 + Attack: 8114 + Attack2: 1032 + Defense: 482 + MagicDefense: 114 + MagicResistance: 171 + Resistance: 171 + Str: 274 + Agi: 185 + Vit: 161 + Int: 161 + Dex: 177 + Luk: 169 + AttackRange: 1 + SkillRange: 10 + ChaseRange: 12 + Size: Small + Race: Undead + Element: Undead + ElementLevel: 1 + WalkSpeed: 150 + AttackDelay: 624 + AttackMotion: 1248 + DamageMotion: 576 + Ai: 04 + Drops: + - Item: Piece_Of_Black_Cloth + Rate: 2400 + - Item: Ectoplasm + Rate: 2000 + - Item: Black_Powder + Rate: 250 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Shadowdecon + Rate: 12 + - Item: Zelunium + Rate: 12 + - Item: Ghost_Cube_Card + Rate: 1 + StealProtected: true + - Id: 20939 + AegisName: LUDE_GAL + Name: Lude Gal + Level: 213 + Hp: 12840680 + BaseExp: 259877 + JobExp: 181914 + Attack: 7925 + Attack2: 1001 + Defense: 410 + MagicDefense: 105 + MagicResistance: 151 + Resistance: 179 + Str: 274 + Agi: 171 + Vit: 168 + Int: 142 + Dex: 168 + Luk: 134 + AttackRange: 2 + SkillRange: 10 + ChaseRange: 12 + Size: Small + Race: Undead + Element: Undead + ElementLevel: 2 + WalkSpeed: 150 + AttackDelay: 480 + AttackMotion: 960 + DamageMotion: 480 + Ai: 04 + Drops: + - Item: Pumpkin_Bucket + Rate: 2500 + - Item: Ectoplasm + Rate: 2000 + - Item: Transparent_Cloth + Rate: 500 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Shadowdecon + Rate: 12 + - Item: Zelunium + Rate: 12 + - Item: Lude_Gal_Card + Rate: 1 + StealProtected: true + - Id: 20940 + AegisName: BLUEMOON_LOLI_RURI + Name: Blue Moon Loli Ruri + Level: 255 + Hp: 46338500 + BaseExp: 339785 + JobExp: 237850 + Attack: 9325 + Attack2: 1345 + Defense: 457 + MagicDefense: 191 + MagicResistance: 260 + Resistance: 238 + Str: 301 + Agi: 205 + Vit: 187 + Int: 204 + Dex: 192 + Luk: 205 + AttackRange: 2 + SkillRange: 10 + ChaseRange: 12 + Size: Large + Race: Demon + Element: Water + ElementLevel: 3 + WalkSpeed: 125 + AttackDelay: 510 + AttackMotion: 1020 + DamageMotion: 576 + Ai: 04 + Drops: + - Item: Black_Kitty_Doll + Rate: 500 + - Item: Striped_Socks + Rate: 2400 + - Item: Bat_Cage + Rate: 2000 + - Item: Loki's_Whispers + Rate: 2 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Shadowdecon + Rate: 25 + - Item: Bluemoon_Loli_Ruri_Card + Rate: 1 + StealProtected: true + - Id: 20941 + AegisName: GROTE + Name: Grote + Level: 253 + Hp: 47842600 + BaseExp: 346622 + JobExp: 242635 + Attack: 9354 + Attack2: 1320 + Defense: 456 + MagicDefense: 117 + MagicResistance: 153 + Resistance: 237 + Str: 311 + Agi: 207 + Vit: 187 + Int: 121 + Dex: 199 + Luk: 207 + AttackRange: 1 + SkillRange: 10 + ChaseRange: 12 + Size: Large + Race: Demon + Element: Earth + ElementLevel: 2 + WalkSpeed: 180 + AttackDelay: 792 + AttackMotion: 1584 + DamageMotion: 576 + Ai: 04 + Drops: + - Item: Hanging_Doll + Rate: 1000 + - Item: Rotten_Rope + Rate: 2500 + - Item: Tree_Knot + Rate: 2000 + - Item: Branch_Of_Dead_Tree + Rate: 5 + - Item: Bloody_Dead_Branch + Rate: 2 + - Item: Shadowdecon + Rate: 25 + - Item: Zelunium + Rate: 25 + - Item: Grote_Card + Rate: 1 + StealProtected: true + - Id: 20942 + AegisName: PIERROTZOIST + Name: Pierrotzoist + Level: 255 + Hp: 38506310 + BaseExp: 339451 + JobExp: 237616 + Attack: 9356 + Attack2: 1247 + Defense: 541 + MagicDefense: 134 + MagicResistance: 226 + Resistance: 212 + Str: 311 + Agi: 177 + Vit: 166 + Int: 177 + Dex: 201 + Luk: 169 + AttackRange: 1 + SkillRange: 10 + ChaseRange: 12 + Size: Medium + Race: Demon + Element: Dark + ElementLevel: 2 + WalkSpeed: 155 + AttackDelay: 768 + AttackMotion: 1536 + DamageMotion: 480 + Ai: 04 + Drops: + - Item: Broken_Needle + Rate: 2400 + - Item: Needle_Pouch + Rate: 2000 + - Item: Stuffed_Doll + Rate: 40 + - Item: Ectoplasm + Rate: 150 + - Item: Shadowdecon_Ore + Rate: 150 + - Item: Zelunium_Ore + Rate: 150 + - Item: Zelunium + Rate: 25 + - Item: Pierrotzoist_Card + Rate: 1 + StealProtected: true + - Id: 20943 + AegisName: DEATH_WITCH + Name: Death Witch + Level: 255 + Hp: 398856250 + BaseExp: 9051055 + JobExp: 6335739 + Attack: 14658 + Attack2: 2687 + Defense: 687 + MagicDefense: 210 + MagicResistance: 539 + Resistance: 273 + Str: 424 + Agi: 236 + Vit: 214 + Int: 423 + Dex: 241 + Luk: 174 + AttackRange: 3 + SkillRange: 10 + ChaseRange: 12 + Size: Medium + Race: Demihuman + Element: Dark + ElementLevel: 2 + WalkSpeed: 150 + AttackDelay: 517 + AttackMotion: 1134 + DamageMotion: 480 + DamageTaken: 10 + Ai: 21 + Class: Boss + Modes: + Mvp: true + Drops: + - Item: Ectoplasm + Rate: 200 + - Item: Yggdrasilberry + Rate: 1500 + - Item: Seed_Of_Yggdrasil + Rate: 1500 + - Item: Leaf_Of_Yggdrasil + Rate: 1500 + - Item: Shadowdecon + Rate: 1000 + - Item: Zelunium + Rate: 1000 + - Item: Death_Witch_Card + Rate: 1 + StealProtected: true # - Id: 20944 # AegisName: JP_E_MONSTER_151 # - Id: 20945 diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt index b8b9f761cf..f88eb8e8f3 100644 --- a/db/re/mob_skill_db.txt +++ b/db/re/mob_skill_db.txt @@ -13239,6 +13239,108 @@ 20934,R001_BESTIA@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,no,self,always,0,,,,,,, // 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,target,myhpltmaxrate,20,,,,,,, +// nif_dun +20935,GAN_CEANN@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,no,target,always,0,,,,,,, +20935,GAN_CEANN@NPC_DARKNESSATTACK,attack,190,3,500,500,5000,no,target,always,0,,,,,,6, +20935,GAN_CEANN@NPC_BLINDATTACK,attack,177,3,2000,0,5000,yes,target,always,0,,,,,,, +20935,GAN_CEANN@NPC_DARKNESSATTACK,attack,190,3,1000,500,5000,no,target,always,0,,,,,,6, +20935,GAN_CEANN@NPC_BLEEDING2,attack,764,5,2000,0,60000,yes,target,always,0,,,,,,, +20935,GAN_CEANN@NPC_BLEEDING,attack,660,5,2000,0,60000,yes,target,always,0,,,,,,, +20935,GAN_CEANN@NPC_DARKCROSS,attack,338,3,300,0,5000,yes,target,always,0,,,,,,, +20936,DISGUISER@NPC_COMBOATTACK,attack,171,2,1000,700,5000,no,target,always,0,,,,,,19, +20936,DISGUISER@NPC_PIERCINGATT,attack,158,5,500,0,5000,yes,target,always,0,,,,,,, +20936,DISGUISER@AS_GRIMTOOTH,chase,137,5,2000,0,0,yes,target,always,0,,,,,,, +20936,DISGUISER@NPC_GUIDEDATTACK,attack,172,3,8000,500,600000,no,target,always,0,,,,,,, +20936,DISGUISER@NPC_COMBOATTACK,attack,171,3,1000,500,15000,no,target,always,0,,,,,,, +20936,DISGUISER@NPC_CHANGEWIND,attack,165,1,10000,500,100000,no,self,always,0,,,,,,, +20936,DISGUISER@NPC_CHANGEFIRE,attack,164,1,10000,500,100000,no,self,always,0,,,,,,, +20936,DISGUISER@NPC_CHANGEWATER,attack,162,1,10000,500,100000,no,self,always,0,,,,,,, +20936,DISGUISER@NPC_CHANGEGROUND,attack,163,1,10000,500,100000,no,self,always,0,,,,,,, +20937,BRUTAL_MURDERER@AS_SONICBLOW,attack,136,7,500,800,5000,no,target,always,0,,,,,,29, +20937,BRUTAL_MURDERER@NPC_CURSEATTACK,attack,181,5,500,800,5000,no,target,always,0,,,,,,29, +20937,BRUTAL_MURDERER@NPC_SPLASHATTACK,attack,174,1,2000,0,5000,yes,target,always,0,,,,,,, +20937,BRUTAL_MURDERER@NPC_IGNITIONBREAK,attack,740,2,1000,300,30000,no,self,always,0,,,,,,, +20937,BRUTAL_MURDERER@NPC_CRITICALWOUND,attack,673,1,8000,300,5000,no,target,always,0,,,,,,, +20938,GHOST_CUBE@MG_STONECURSE,attack,16,10,500,1500,5000,no,target,always,0,,,,,,6, +20938,GHOST_CUBE@NPC_MENTALBREAKER,attack,159,3,500,800,5000,no,target,always,0,,,,,,29, +20938,GHOST_CUBE@NPC_BLINDATTACK,attack,177,3,2000,0,5000,yes,target,always,0,,,,,,, +20938,GHOST_CUBE@NPC_SILENCEATTACK,attack,178,3,500,700,5000,no,target,always,0,,,,,,, +20938,GHOST_CUBE@NPC_SLEEPATTACK,attack,182,3,500,0,5000,yes,target,always,0,,,,,,, +20938,GHOST_CUBE@NPC_WINDATTACK,attack,187,3,2000,0,5000,yes,target,always,0,,,,,,, +20939,LUDE_GAL@NPC_CHEAL,idle,729,3,2500,500,5000,no,self,always,0,,,,,,5, +20939,LUDE_GAL@AL_HEAL,chase,28,9,10000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,18, +20939,LUDE_GAL@AL_HEAL,attack,28,9,10000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,18, +20939,LUDE_GAL@AL_HEAL,chase,28,9,10000,500,5000,no,friend,myhpltmaxrate,30,,,,,,18, +20939,LUDE_GAL@AL_HEAL,attack,28,9,10000,500,5000,no,friend,myhpltmaxrate,30,,,,,,18, +20939,LUDE_GAL@PR_LEXAETERNA,chase,78,1,1000,1000,5000,no,target,always,0,,,,,,6, +20939,LUDE_GAL@PR_LEXAETERNA,attack,78,1,1000,1000,5000,no,target,always,0,,,,,,6, +20939,LUDE_GAL@NPC_CHEAL,chase,729,3,2500,500,5000,no,self,always,0,,,,,,5, +20939,LUDE_GAL@AM_POTIONPITCHER,attack,231,4,10000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,5, +20939,LUDE_GAL@AM_POTIONPITCHER,attack,231,4,10000,500,5000,no,friend,myhpltmaxrate,30,,,,,,5, +20939,LUDE_GAL@NPC_GROUNDATTACK,attack,185,5,2000,500,5000,no,target,always,0,,,,,,6, +20939,LUDE_GAL@NPC_STUNATTACK,attack,179,5,2000,0,0,yes,target,always,0,,,,,,, +20940,BLUEMOON_LOLI_RURI@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,, +20940,BLUEMOON_LOLI_RURI@AL_TELEPORT,walk,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,, +20940,BLUEMOON_LOLI_RURI@NPC_DARKSTRIKE,attack,340,5,500,700,5000,no,target,myhpltmaxrate,50,,,,,,6, +20940,BLUEMOON_LOLI_RURI@NPC_DARKSTRIKE,chase,340,5,500,700,5000,no,target,always,0,,,,,,6, +20940,BLUEMOON_LOLI_RURI@NPC_EMOTION,chase,197,1,2000,0,5000,yes,self,always,0,,,,,,3, +20940,BLUEMOON_LOLI_RURI@PR_LEXDIVINA,chase,76,10,500,1000,5000,no,target,always,0,,,,,,2, +20940,BLUEMOON_LOLI_RURI@PR_LEXDIVINA,attack,76,10,500,1000,5000,no,target,always,0,,,,,,2, +20940,BLUEMOON_LOLI_RURI@SA_REVERSEORCISH,chase,294,1,50,0,30000,yes,target,always,0,,,,,,18, +20940,BLUEMOON_LOLI_RURI@SA_REVERSEORCISH,attack,294,1,50,0,30000,yes,target,always,0,,,,,,18, +20941,GROTE@AS_GRIMTOOTH,chase,137,5,2000,0,5000,yes,target,always,0,,,,,,, +20941,GROTE@NPC_CURSEATTACK,attack,181,3,1000,800,5000,no,target,always,0,,,,,,6, +20941,GROTE@NPC_UNDEADATTACK,attack,347,3,500,500,5000,no,target,always,0,,,,,,6, +20941,GROTE@NPC_CHEAL,chase,729,3,2500,500,5000,no,self,always,0,,,,,,5, +20941,GROTE@NPC_COMBOATTACK,attack,171,5,1500,0,5000,yes,target,always,0,,,,,,, +20941,GROTE@NPC_WIDEBLEEDING2,attack,756,4,10000,0,15000,yes,self,always,0,,,,,,, +20941,GROTE@NPC_WIDEBLEEDING,attack,665,4,10000,0,15000,yes,self,always,0,,,,,,, +20941,GROTE@NPC_GROUNDATTACK,attack,185,5,2000,500,5000,no,target,always,0,,,,,,6, +20941,GROTE@NPC_STUNATTACK,attack,179,5,2000,0,0,yes,target,always,0,,,,,,, +20942,PIERROTZOIST@AL_DECAGI,attack,30,1,500,1000,5000,no,target,always,0,,,,,,29, +20942,PIERROTZOIST@NPC_HALLUCINATION,chase,207,1,500,500,5000,no,target,always,0,,,,,,9, +20942,PIERROTZOIST@NPC_HALLUCINATION,attack,207,1,500,500,5000,no,target,always,0,,,,,,9, +20942,PIERROTZOIST@MO_BODYRELOCATION,chase,264,1,2000,500,5000,no,target,always,0,,,,,,, +20942,PIERROTZOIST@KN_SPEARSTAB,chase,58,5,2500,0,5000,yes,target,groundattacked,0,,,,,,9, +20942,PIERROTZOIST@KN_SPEARSTAB,chase,58,5,5000,0,5000,yes,target,longrangeattacked,0,,,,,,, +20942,PIERROTZOIST@SM_MAGNUM,attack,7,4,500,500,5000,no,self,always,0,,,,,,, +20942,PIERROTZOIST@KN_TWOHANDQUICKEN,attack,60,5,2000,0,120000,yes,self,myhpltmaxrate,30,,,,,,6, +20942,PIERROTZOIST@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6, +20942,PIERROTZOIST@NPC_DARKNESSATTACK,attack,190,4,1000,0,5000,yes,target,always,0,,,,,,, +20943,DEATH_WITCH@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDESILENCE,chase,663,1,2000,1000,20000,no,self,always,0,,,,,,32, +20943,DEATH_WITCH@NPC_WIDESILENCE,attack,663,1,2000,700,25000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDEFREEZE,chase,664,1,2000,1000,20000,no,self,always,0,,,,,,36, +20943,DEATH_WITCH@NPC_WIDEFREEZE,attack,664,1,2000,1000,20000,no,self,always,0,,,,,,36, +20943,DEATH_WITCH@NPC_WIDESLEEP,chase,668,1,2000,700,25000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDESLEEP,attack,668,1,2000,700,25000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_DARKTHUNDER,chase,341,3,500,1500,15000,no,target,always,0,,,,,,, +20943,DEATH_WITCH@NPC_DARKTHUNDER,attack,341,3,500,1500,15000,no,target,always,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDESOULDRAIN,chase,680,1,1000,500,5000,no,self,always,0,,,,,,42, +20943,DEATH_WITCH@NPC_WIDESOULDRAIN,attack,680,1,1000,500,5000,no,self,always,0,,,,,,42, +20943,DEATH_WITCH@WZ_WATERBALL,attack,86,10,3000,500,25000,no,target,always,0,,,,,,0, +20943,DEATH_WITCH@WZ_WATERBALL,chase,86,10,3000,500,25000,no,target,always,0,,,,,,0, +20943,DEATH_WITCH@NPC_WIDECURSE,chase,677,1,500,800,5000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_SUMMONSLAVE,attack,196,1,10000,700,10000,no,self,slavele,3,,,,,,, +20943,DEATH_WITCH@NPC_SUMMONSLAVE,idle,196,1,10000,700,10000,no,self,slavele,3,,,,,,, +20943,DEATH_WITCH@NPC_WIDECURSE,attack,677,1,500,800,5000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDESTUN,chase,678,1,2000,1300,180000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_WIDESTUN,attack,678,1,2000,1300,180000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_DARKNESSATTACK,attack,190,5,2000,0,5000,yes,target,always,0,,,,,,29, +20943,DEATH_WITCH@NPC_DARKNESSATTACK,chase,190,5,2000,0,5000,yes,target,always,0,,,,,,29, +20943,DEATH_WITCH@WZ_FROSTNOVA,chase,88,10,3000,1000,10000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@WZ_FROSTNOVA,attack,88,10,3000,1000,10000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_PULSESTRIKE,attack,661,5,2000,0,30000,yes,self,always,0,,,,,,32, +20943,DEATH_WITCH@HW_GANBANTEIN,attack,483,1,2000,0,5000,yes,target,always,0,,,,,,, +// 20943,DEATH_WITCH@NPC_EARTHQUAKE_K,attack,750,5,10000,1500,25000,no,target,myhpltmaxrate,20,,,,,,, +20943,DEATH_WITCH@NPC_EARTHQUAKE,attack,653,5,10000,1500,25000,no,target,myhpltmaxrate,20,,,,,,, +20943,DEATH_WITCH@NPC_HELLJUDGEMENT,chase,662,2,2000,500,5000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_HELLJUDGEMENT,attack,662,2,2000,500,5000,no,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,, +// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,, +20943,DEATH_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,, +20943,DEATH_WITCH@NPC_CALLSLAVE,attack,352,1,5000,0,30000,yes,self,always,0,,,,,,, + // Training Ground outside Prontera 21064,S_DUMMY_100_SMALL@NPC_ALLHEAL,attack,687,1,10000,0,500,no,self,myhpltmaxrate,90,,,,,,, 21064,S_DUMMY_100_SMALL@NPC_ALLHEAL,idle,687,1,10000,0,500,no,self,myhpltmaxrate,90,,,,,,, diff --git a/db/re/quest_db.yml b/db/re/quest_db.yml index 93894ce596..a5a3cdac32 100644 --- a/db/re/quest_db.yml +++ b/db/re/quest_db.yml @@ -5704,24 +5704,75 @@ Body: - Id: 8595 Title: Playing with Pitaya - Standby TimeLimit: 4h + - Id: 8639 + Title: Great banquet hall in the depths of the underworld + - Id: 8640 + Title: Both the dead and the living are in high spirits + - Id: 8641 + Title: He looks cute + Targets: + - Mob: GHOST_CUBE + Count: 15 + - Mob: LUDE_GAL + Count: 15 - Id: 8642 Title: He looks cute - Standby TimeLimit: 4h + - Id: 8644 + Title: That's not an instrument + Targets: + - Mob: BRUTAL_MURDERER + Count: 10 + - Mob: GAN_CEANN + Count: 10 - Id: 8645 Title: That's not an instrument - Standby TimeLimit: 4h + - Id: 8647 + Title: Playing the piano - Id: 8648 Title: Playing the piano - Standby TimeLimit: 4h + - Id: 8649 + Title: It was a great performance + - Id: 8650 + Title: Guys with messy hair + Targets: + - Mob: DISGUISER + Count: 15 + - Mob: BLUEMOON_LOLI_RURI + Count: 15 - Id: 8651 Title: Guys with messy hair - Standby TimeLimit: 4h + - Id: 8652 + Title: Guys with messy hair + Targets: + - Mob: DISGUISER + Count: 15 + - Mob: BLUEMOON_LOLI_RURI + Count: 15 + - Id: 8653 + Title: The ones with dolls + Targets: + - Mob: GROTE + Count: 10 + - Mob: PIERROTZOIST + Count: 10 - Id: 8654 Title: The ones with dolls - Standby TimeLimit: 4h + - Id: 8655 + Title: The ones with dolls + - Id: 8656 + Title: Wake them up - Id: 8657 Title: Wake them up - Standby TimeLimit: 4h + - Id: 8658 + Title: Sorry for being sleepy (1) + - Id: 8659 + Title: Sorry for being sleepy (2) - Id: 8661 Title: "[Standby] Subjugation-Audumra Chowon-3" TimeLimit: 4h diff --git a/npc/re/mobs/dungeons/nif_dun.txt b/npc/re/mobs/dungeons/nif_dun.txt new file mode 100644 index 0000000000..b94681148f --- /dev/null +++ b/npc/re/mobs/dungeons/nif_dun.txt @@ -0,0 +1,18 @@ +//===== rAthena Script ======================================= +//= Niflheim dungeon Monsters Spawn Script +//===== Description: ========================================= +//= Spawns monsters in nif_dun. +//===== Additional Comments: ================================= +//= 1.0 First version. [Capuche] +//============================================================ + +nif_dun01 monster Gan Ceann GAN_CEANN,60 +nif_dun01 monster Brutal Murderer BRUTAL_MURDERER,60 +nif_dun01 monster Ghost Cube GHOST_CUBE,60 +nif_dun01 monster Lude Gal LUDE_GAL,60 + +nif_dun02 monster Disguiser DISGUISER,80 +nif_dun02 monster Grote GROTE,80 +nif_dun02 monster Pierrotzoist PIERROTZOIST,80 +nif_dun02 monster Blue Moon Loli Ruri BLUEMOON_LOLI_RURI,80 +nif_dun02 boss_monster Death Witch DEATH_WITCH,1,21600000,600000,0 diff --git a/npc/re/quests/quests_dungeons_200.txt b/npc/re/quests/quests_dungeons_200.txt index cbb1c59366..db19800ad7 100644 --- a/npc/re/quests/quests_dungeons_200.txt +++ b/npc/re/quests/quests_dungeons_200.txt @@ -4,6 +4,7 @@ //= [Walkthrough Conversion] //===== Changelog: =========================================== //= 1.0 Added sp_rudus4 quests. [Capuche] +//= 1.1 Added nif_dun01 and nif_dun02 quests. [Capuche] //============================================================ // sp_rudus4 @@ -478,3 +479,829 @@ OnInit: questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "isbegin_quest(16528) == 1" ); end; } + + +// nif_dun +moc_para01,14,19,7 script Old scholar#lv200 2_M_SAGE_OLD,{ + if (BaseLevel < 200) { + mes "[Old scholar]"; + mes "I would like to do more research, but if my life is really in danger..."; + next; + mes "[Old scholar]"; + mes "I have no choice but to hire a strong and sincere adventurer. Hmm..."; + next; + mes "[Old scholar]"; + mes "I think level 200 would be enough... It's easy to say, but that is not the type of person who can be easily found."; + close; + } + switch( isbegin_quest(8640) ) { + case 0: + if (isbegin_quest(8639) == 0) { + mes "[Old scholar]"; + mes "Oh, oh my, my gosh. The strong and sincere adventurer I've been looking for has appeared here."; + mes "Would you like to help me with my research?"; + next; + .@s = select( "Listen to the request", "Suspicious..." ); + mes "[Old scholar]"; + mes "Even if I look at you with my eyes I recognize your skills at a glance, please do something...!"; + if (.@s == 2) + close; + mes "...?"; + mes "What? Will you help me?"; + next; + mes "[Old scholar]"; + mes "No, that's it... Everyone refused, so the hanging words got stuck in my mouth."; + mes "Thank you for your cooperation."; + next; + select( "You're still cooperating..." ); + mes "[Old scholar]"; + mes "Come on, that's it. Of course someone as talented as you can go to Niflheim."; + mes "Of course I don't have many days left and it's not the right time for me to go and I can't come back in time."; + next; + mes "[Old scholar]"; + mes "According to recent sources... Deep in the darkness of Niflheim, the dead hold a banquet,"; + mes "in a form we cannot imagine."; + mes "But there is nowhere to hear more about it."; + next; + mes "[Old scholar]"; + mes "You'll find out soon anyway, but I'm curious now."; + mes "Can you take a look? I'll give you plenty of examples."; + next; + if (select( "That's enough. Can I come back?", "What if I can't come back?" ) == 2) { + mes "[Old scholar]"; + mes "You wouldn't even think that you wouldn't be able to come back at your level..."; + mes "If you're still that careful, okay. Come back when you're ready."; + close; + } + setquest 8639; + mes "[Garim Springfield]"; + mes "Thank you. Turns out I forgot to introduce myself."; + mes "My name is Garim Springfield."; + mes "I worked at Sage Castle for a long time... Now that I'm retired, I want to spend some leisure time here and also put in requests..."; + next; + mes "[" + strcharinfo(0) + "]"; + mes "Relax..."; + next; + mes "[Garim Springfield]"; + mes "Okay. It's worth it."; + mes "Grant an idle old man a wish."; + mes "Then I'll wait for the good news."; + close; + } + mes "[Garim Springfield]"; + mes "What are you doing? Go fast."; + close; + case 1: + mes "[Garim Springfield]"; + mes "Huh? Did you really visit the banquet hall deep in Niflheim?"; + mes "You came back alive?"; + mes "Okay then, tell me your story."; + next; + mes "[Garim Springfield]"; + mes "Hmm hmm... I see!"; + mes "I am prepared like this, so I won't be afraid if I go later!"; + next; + mes "[Garim Springfield]"; + mes "The research will last forever...!"; + completequest 8640; + close; + case 2: + mes "[Garim Springfield]"; + mes "I felt like I could do research even after dying, so I felt better."; + close; + } + end; + +OnInit: + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "BaseLevel >= 200 && isbegin_quest(8639) == 0 && isbegin_quest(8640) == 0" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8640) == 1" ); + end; +} + +niflheim,164,102,3 script Tired looking dead#lv20 4_F_NFDEADMGCIAN,{ + switch( isbegin_quest(8640) ) { + case 0: + switch( isbegin_quest(8639) ) { + case 0: + mes "[Tired looking dead]"; + mes "Ha-am..."; + mes "I can't sleep"; + mes "What's the fuss that you can't sleep even after you're dead?"; + mes "Let's get some sleep..."; + mes "I'm going to die because of the noise."; + close; + case 1: + mes "[Tired looking dead]"; + mes "Ha-am..."; + mes "Huh? What? I don't deal with peddlers."; + next; + if (select( "You have a bad complexion", "Go back quietly" ) == 2) { + mes "[Tired looking dead]"; + mes "Oh, I did mean to ask you if you had sleeping pills... But I'm dead... You won't hear me... Hmm."; + close; + } + mes "[Tired looking dead]"; + mes "Uh, how did you know?"; + mes "My complexion must look real bad..."; + mes "Do you have a sleeping pill?"; + next; + select("I'm not a junkie" ); + mes "[Tired looking dead]"; + mes "Ah... I'm sorry. I misunderstood. All the people who have come this far were weird kids or people who sold drugs, so I kicked them out."; + next; + mes "[Tired looking dead]"; + mes "By the way... how did you know that I am tired? Does my complexion look that bad?"; + next; + mes "[Tired looking dead]"; + mes "Actually, I've been dead for a while, but I've only recently come to Niflheim. So I decided to sleep here in this house..."; + mes "I can't sleep at night because it's so noisy next door."; + next; + mes "[Tired looking dead]"; + mes "No, it's the pain of not being able to sleep because the next door is noisy even though I'm already dead.."; + mes "Oh, not next door. They all ran away."; + mes "There's a reason why it is so cheap..."; + next; + mes "[Tired looking dead]"; + mes "Yes, [there]niflheim,148,124,0,101,0"; + mes "The crazy villagers over there... they have a banquet every day."; + next; + mes "[Tired looking dead]"; + mes "I'm in there every day, every day!!"; + next; + mes "[Tired looking dead]"; + mes "Ha... I know, even if it's every day, there's a set time."; + mes "By the way... If you were a drinker, who would have gone home on time, while you were alive, would you do that even in death?"; + next; + mes "[Tired looking dead]"; + mes "I'm... dead, so I just want to sleep peacefully..."; + mes "I hope they return to their senses after the banquet is over."; + next; + select( "Banquet is..." ); + mes "[Tired looking dead]"; + mes "Yeah... you look pretty strong and there's alcohol... they are dead, so it's magic."; + mes "If you can silence those who are drunk with magical powers all night long, I will reward you."; + mes "Yes, of course every day."; + next; + mes "[Milla]"; + mes "I am Milla. I am now a resident of Niflheim."; + mes "Please help me sleep, my dear."; + erasequest 8639; + setquest 8640; + close; + case 2: + end; + } + end; + case 1: + case 2: + mes "[Milla]"; + mes "Yes, thank you for coming back."; + mes "Ha-am..."; + mes "For me and my neighbors... for a good night's sleep."; + next; + if (select( "Listen to the request.", "Reject." ) == 2) { + mes "[Milla]"; + mes "You can't do this if you're busy..."; + mes "Ah, after all, the living do not hear that sound. This is my agony only known to the dead..."; + npctalk "Another Dead: Noisy! Get some sleep!", "#lv200althema", bc_self; + npctalk "Another Dead: He really can't sleep!", "#lv200althema2", bc_self; + close; + } + mes "[Milla]"; + mes "Beloved living, thank you for your mercy."; + mes "It's a luxurious facility with a banquet hall and an Opera House, but each one is a little different."; + mes "I'll ask for that kind of skill based on your kindness..."; + next; + switch( select( "He looks cute", "That's not an instrument", "Playing the piano", "Guys with messy hair", "The ones with dolls", "Wake them up", "Stop" ) ) { + case 1: + switch( checkquest(8642,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8642; + break; + } + switch( checkquest(8641,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "They look cute... but they're terribly noisy."; + mes "^0000FF" + getmonsterinfo("GHOST_CUBE", MOB_NAME) + "^000000,"; + mes "^0000FF" + getmonsterinfo("LUDE_GAL", MOB_NAME) + "^000000"; + next; + mes "[Milla]"; + mes "I wish you could beat 15 " + getmonsterinfo("GHOST_CUBE", MOB_NAME) + ""; + mes "and 15 of their mate " + getmonsterinfo("LUDE_GAL", MOB_NAME) + ", who haunted the banquet hall of the dead,"; + mes "and make them holy for a day."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8641; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I wish you could beat 15 " + getmonsterinfo("GHOST_CUBE", MOB_NAME) + ""; + mes "and 15 of their mate " + getmonsterinfo("LUDE_GAL", MOB_NAME) + ", who haunted the banquet hall of the dead,"; + mes "and make them holy for a day."; + close; + case 2: + mes "[Milla]"; + mes "Kya, did you hear them scream all the way here?"; + mes "I think I can sleep a little deeper today thanks to you..."; + mes "I have to make it through this commotion again tomorrow."; + mes "Thank you."; + erasequest 8641; + setquest 8642; + // getexp 15642570,10949790; // pre-rebalance + getexp 20300909,14210636; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + case 2: + switch( checkquest(8645,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8645; + break; + } + switch( checkquest(8644,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "It's called ^0000FF" + getmonsterinfo("BRUTAL_MURDERER", MOB_NAME) + "^000000."; + mes "They have knives in their hands... "; + mes "It's too loud to knock anywhere!"; + next; + mes "[Milla]"; + mes "I wish you could beat 10 " + getmonsterinfo("BRUTAL_MURDERER", MOB_NAME) + ""; + mes "and 10 of their mate " + getmonsterinfo("GAN_CEANN", MOB_NAME) + ", who haunted the banquet hall of the dead,"; + mes "and make them holy for a day."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead."; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8644; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I wish you could beat 10 " + getmonsterinfo("BRUTAL_MURDERER", MOB_NAME) + ""; + mes "and 10 of their mate " + getmonsterinfo("GAN_CEANN", MOB_NAME) + ", who haunted the banquet hall of the dead,"; + mes "and make them holy for a day."; + close; + case 2: + mes "[Milla]"; + mes "Kya, did you hear the sound of their cleavers and their helmets flying all the way up to here?"; + mes "I think I can sleep a little deeper today thanks to you..."; + mes "Thank you."; + erasequest 8644; + setquest 8645; + // getexp 10756120,7541880; // pre-rebalance + getexp 14106860,9874802; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + case 3: + switch( checkquest(8648,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8648; + break; + } + switch( isbegin_quest(8647) ) { + case 0: + mes "[Milla]"; + mes "If you go into the banquet hall of the dead there, there will be a piano."; + mes "It actually screams when a living person knocks on it."; + mes "Would it be fun?"; + next; + mes "[Milla]"; + mes "Play the [piano]nif_dun01,140,202,0,101,0"; + mes "of the banquet hall of the dead."; + mes "There is no such thing as a song request."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8647; + close; + case 1: + mes "[Milla]"; + mes "Play the [piano]nif_dun01,140,202,0,101,0"; + mes "of the banquet hall of the dead."; + mes "There is no such thing as a song request."; + close; + case 2: + mes "[Milla]"; + mes "Hahaha, did you hear that? It's like alcohol... No, it's like that if you drink magic and act like a hawk."; + mes "I think I can sleep a little deeper today thanks to you..."; + mes "Thank you."; + erasequest 8647; + erasequest 8649; + setquest 8648; + getexp 10000000,7500000; + close; + } + end; + case 4: + if (BaseLevel < 240) { + mes "[Milla]"; + mes "Hmm... no."; + mes "It's still too early to leave it to you..."; + mes "I'll wait until you reach level 240."; + mes "I have time."; + close; + } + switch( checkquest(8651,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8651; + break; + } + switch( isbegin_quest(8650) ) { + case 0: + case 1: + switch( checkquest(8650,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "I mean, there are kids called ^0000FF" + getmonsterinfo("DISGUISER", MOB_NAME) + "^000000. "; + mes "They've got their hair as if a bomb hit, and they look so excited."; + mes "^0000FF" + getmonsterinfo("BLUEMOON_LOLI_RURI", MOB_NAME) + "^000000, it can't be that loud when you get together with guys with broom hair."; + next; + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 15 ^0000FF" + getmonsterinfo("DISGUISER", MOB_NAME) + "^000000 and the 15 ^0000FF" + getmonsterinfo("BLUEMOON_LOLI_RURI", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8650; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 15 ^0000FF" + getmonsterinfo("DISGUISER", MOB_NAME) + "^000000 and the 15 ^0000FF" + getmonsterinfo("BLUEMOON_LOLI_RURI", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + close; + case 2: + mes "[Milla]"; + mes "Huh, huh, I can hear the bomb head dusting all the way up to here."; + mes "Thanks to you, I will sleep well today."; + mes "Thank you. See you again tomorrow."; + completequest 8650; + setquest 8651; + getexp 44984725,31489308; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + case 2: + switch( checkquest(8652,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 15 ^0000FF" + getmonsterinfo("DISGUISER", MOB_NAME) + "^000000 and the 15 ^0000FF" + getmonsterinfo("BLUEMOON_LOLI_RURI", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8652; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 15 ^0000FF" + getmonsterinfo("DISGUISER", MOB_NAME) + "^000000 and the 15 ^0000FF" + getmonsterinfo("BLUEMOON_LOLI_RURI", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + close; + case 2: + mes "[Milla]"; + mes "Huh, huh, I can hear the bomb head dusting all the way up to here."; + mes "Thanks to you, I will sleep well today."; + mes "Thank you. See you again tomorrow."; + erasequest 8652; + setquest 8651; + getexp 44984725,31489308; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + } + end; + case 5: + if (BaseLevel < 240) { + mes "[Milla]"; + mes "Hmm... no."; + mes "It's still too early to leave it to you..."; + mes "I'll wait until you reach level 240."; + mes "I have time."; + close; + } + switch( checkquest(8654,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8654; + break; + } + switch( isbegin_quest(8653) ) { + case 0: + case 1: + switch( checkquest(8653,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "If you look at the collapsed Opera House there,"; + mes "you'll see the ones with dolls. There's " + getmonsterinfo("GROTE", MOB_NAME) + " and " + getmonsterinfo("PIERROTZOIST", MOB_NAME) + "^000000..."; + mes "All the ones with dolls are so noisy."; + next; + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 10 ^0000FF" + getmonsterinfo("GROTE", MOB_NAME) + "^000000 and the 10 ^0000FF" + getmonsterinfo("PIERROTZOIST", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8653; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 10 ^0000FF" + getmonsterinfo("GROTE", MOB_NAME) + "^000000 and the 10 ^0000FF" + getmonsterinfo("PIERROTZOIST", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + close; + case 2: + mes "[Milla]"; + mes "Kyak-kyak-kyak-kyak-kyak-kyak-kyak, what did you really do?"; + mes "A while ago, " + getmonsterinfo("GROTE", MOB_NAME) + " and " + getmonsterinfo("PIERROTZOIST", MOB_NAME) + " went home saying they wouldn't make a noise again."; + mes "Of course not. They will come again tomorrow."; + mes "Thank you. See you tomorrow."; + completequest 8653; + setquest 8654; + getexp 29944101,20960871; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + case 2: + switch( checkquest(8655,HUNTING) ) { + case -1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 10 ^0000FF" + getmonsterinfo("GROTE", MOB_NAME) + "^000000 and the 10 ^0000FF" + getmonsterinfo("PIERROTZOIST", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8655; + close; + case 0: + case 1: + mes "[Milla]"; + mes "I hope you show the hot taste to"; + mes "the 10 ^0000FF" + getmonsterinfo("GROTE", MOB_NAME) + "^000000 and the 10 ^0000FF" + getmonsterinfo("PIERROTZOIST", MOB_NAME) + "^000000"; + mes "that haunt the collapsed Opera House."; + close; + case 2: + mes "[Milla]"; + mes "Kyak-kyak-kyak-kyak-kyak-kyak-kyak, what did you really do?"; + mes "A while ago, " + getmonsterinfo("GROTE", MOB_NAME) + " and " + getmonsterinfo("PIERROTZOIST", MOB_NAME) + " went home saying they wouldn't make a noise again."; + mes "Of course not. They will come again tomorrow."; + mes "Thank you. See you tomorrow."; + erasequest 8655; + setquest 8654; + getexp 29944101,20960871; // rebalance (unknown jexp, 70% of baseexp) + close; + } + end; + } + end; + case 6: + if (BaseLevel < 240) { + mes "[Milla]"; + mes "Hmm... no."; + mes "It's still too early to leave it to you..."; + mes "I'll wait until you reach level 240."; + mes "I have time."; + close; + } + switch( checkquest(8657,PLAYTIME) ) { + case -1: + break; + case 0: + case 1: + mes "[Milla]"; + mes "I think they've had enough today."; + mes "I hope you can help me tomorrow if you have time."; + close; + case 2: + erasequest 8657; + break; + } + switch( isbegin_quest(8656) ) { + case 0: + mes "[Milla]"; + mes "The smashed... no, don't say that."; + mes "If you go to the collapsed Opera House, you will find ghosts in the frames."; + mes "But they don't even have a body..."; + mes "Snoring, my dear."; + next; + mes "[Milla]"; + mes "A [ghost talking]nif_dun02,37,221,0,101,0"; + mes "and [snoring]nif_dun02,249,221,0,101,0"; + mes "inside the banquet hall of the dead, twist your nose."; + mes "You need to calm them down."; + next; + if (select( "I accept", "I'm busy today" ) == 2) { + mes "[Milla]"; + mes "Ummm..."; + mes "Yeah... Well, I won't die just because I can't sleep..."; + mes "I'm already dead"; + close; + } + mes "[Milla]"; + mes "Thank you for your kind heart."; + mes "Blessed be the mercy of the living!"; + setquest 8656; + close; + case 1: + if (isbegin_quest(8658) == 0 || isbegin_quest(8659) == 0) { + mes "[Milla]"; + mes "A [ghost talking]nif_dun02,37,221,0,101,0"; + mes "and [snoring]nif_dun02,249,221,0,101,0"; + mes "inside the banquet hall of the dead, twist your nose."; + mes "You need to calm them down."; + close; + } + mes "[Milla]"; + mes "...I can't eat any more..."; + mes "...hick."; + mes "Oh, have you been there? I fell asleep without realizing it."; + mes "It's really annoying to hear that snoring all the way..."; + next; + mes "[Milla]"; + mes "It seems that the living do not hear well."; + mes "Anyway, thank you for today."; + mes "Sleep is precious..."; + mes "Sleep enough while you're alive."; + erasequest 8656; + erasequest 8658; + erasequest 8659; + setquest 8657; + getexp 13000000,9100000; // rebalance (unknown jexp, 70% of baseexp) + close; + case 2: + end; + } + end; + case 7: + mes "[Milla]"; + mes "You can't do this if you're busy..."; + mes "Ah, after all, the living do not hear that sound. This is my agony only known to the dead..."; + npctalk "Another Dead: Noisy! Get some sleep!", "#lv200althema", bc_self; + npctalk "Another Dead: He really can't sleep!", "#lv200althema2", bc_self; + close; + } + end; + } + end; + +OnInit: + // prerequisite + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8639) == 1" ); + + // daily + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8641,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8644,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8647) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8650,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8652,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8653,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(8655,HUNTING) == 2" ); + questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8656) == 1 && isbegin_quest(8658) == 1 && isbegin_quest(8659) == 1" ); + + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8642,PLAYTIME) == 2" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8645,PLAYTIME) == 2" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8648,PLAYTIME) == 2" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8651,PLAYTIME) == 2" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8654,PLAYTIME) == 2" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(8657,PLAYTIME) == 2" ); + + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 200 && (checkquest(8641,HUNTING) == -1 && checkquest(8642,PLAYTIME) == -1)" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 200 && (checkquest(8644,HUNTING) == -1 && checkquest(8645,PLAYTIME) == -1)" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 200 && (isbegin_quest(8647) == 0 && checkquest(8648,PLAYTIME) == -1)" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 240 && (checkquest(8650,HUNTING) == -1 && checkquest(8651,PLAYTIME) == -1)" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 240 && isbegin_quest(8650) == 2 && checkquest(8652,HUNTING) == -1 && checkquest(8651,PLAYTIME) == -1" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 240 && (checkquest(8653,HUNTING) == -1 && checkquest(8654,PLAYTIME) == -1)" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 240 && isbegin_quest(8653) == 2 && checkquest(8655,HUNTING) == -1 && checkquest(8654,PLAYTIME) == -1" ); + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "BaseLevel >= 240 && (isbegin_quest(8656) == 0 && checkquest(8657,PLAYTIME) == -1)" ); + end; +} + +niflheim,160,106,3 duplicate(dummy_npc) #lv200althema CLEAR_NPC +niflheim,165,105,3 duplicate(dummy_npc) #lv200althema2 CLEAR_NPC + + +niflheim,143,125,6 script Funny Gatekeeper's Friend#lv20 LUDE_GAL,{ + npctalk "Funny Gatekeeper's Friend: Sing~ All night~ or forever~", "", bc_self; + end; +} + +niflheim,145,126,6 script Angry Gatekeeper#lv200 GHOST_CUBE,{ + npctalk "Angry Gatekeeper: Kye-Look! Living! Play! No need to go!", "", bc_self; + npctalk "Funny Gatekeeper's Friend: No need to leave! Play with us!", "Funny Gatekeeper's Friend#lv20", bc_self; + end; +} + +nif_dun01,140,202,3 script Piano#lv200 CLEAR_NPC,{ + if (isbegin_quest(8647) == 1) { + mes "I couldn't hear anything, but the dead around me seem to be in an uproar."; + mes "Let's report to Milla."; + completequest 8647; + setquest 8649; + npctalk "Clink clink... Crackle!", "Piano#lv200", bc_self; + npctalk "Sleep alive! Kyaaak!", "Exciting Cello#lv200", bc_self; + npctalk "The living man plays the piano!", "Dancing Cello#lv200", bc_self; + npctalk "Oh my God, he can't really play...", "Quiet Cello#lv200", bc_self; + npctalk "How could that be...", "Stranger Cello#lv200", bc_self; + npctalk "You ruined the atmosphere!", "Happy Cello#lv200", bc_self; + npctalk "Piano Ooo!!!", "Serious Contrabass#lv2", bc_self; + npctalk "The piano is stunned...", "Sleek Harp#lv200", bc_self; + close; + } + // note: no text + end; + +OnInit: + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "isbegin_quest(8647) == 1" ); + end; +} +nif_dun01,133,198,3 duplicate(dummy_npc) Exciting Cello#lv200 CLEAR_NPC +nif_dun01,138,195,3 duplicate(dummy_npc) Dancing Cello#lv200 CLEAR_NPC +nif_dun01,153,195,3 duplicate(dummy_npc) Quiet Cello#lv200 CLEAR_NPC +nif_dun01,152,198,3 duplicate(dummy_npc) Stranger Cello#lv200 CLEAR_NPC +nif_dun01,157,198,3 duplicate(dummy_npc) Happy Cello#lv200 CLEAR_NPC +nif_dun01,156,202,3 duplicate(dummy_npc) Serious Contrabass#lv2 CLEAR_NPC +nif_dun01,133,201,3 duplicate(dummy_npc) Sleek Harp#lv200 CLEAR_NPC + +nif_dun01,148,43,3 script Helpful Gatekeeper#240 DISGUISER,{ + if (BaseLevel < 240) { + npctalk "Helpful Gatekeeper: Uh-huh-huh. You don't have enough grooming to get through here.", "", bc_self; + npctalk "Silent Gatekeeper: ...means you are under-leveled.", "Silent Gatekeeper#240", bc_self; + end; + } + npctalk "Helpful Gatekeeper: Uh-huh-huh. Mountain, go up. Can't come down.", "", bc_self; + npctalk "Silent Gatekeeper: ...means welcome.", "Silent Gatekeeper#240", bc_self; + end; +} + +nif_dun01,143,43,7 script Silent Gatekeeper#240 GROTE,{ + npctalk "Silent Gatekeeper: ...", "", bc_self; + end; +} + +nif_dun02,37,221,3 script Sleep Talking Ghost#lv240 CLEAR_NPC,3,3,{ + if (isbegin_quest(8656) == 1) { + switch( isbegin_quest(8659) ) { + case 0: + setquest 8659; + mes "I twisted the nose of the ghost in the frame."; + mes "There was no touch, but the ghost stopped talking."; + npctalk "????????!", "", bc_self; + if (isbegin_quest(8658) == 1) + mes "Let's go report to Milla."; + close; + case 1: + mes "The ghost that was talking about is not seen, and another ghost is sleeping."; + close; + default: + end; + } + } + end; + +OnTouch: + if (isbegin_quest(8659) == 0) { + npctalk "I want to eat it too... it looks delicious...", "", bc_self; + end; + } + end; + +OnInit: + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "isbegin_quest(8656) == 1 && isbegin_quest(8659) == 0" ); + end; +} + +nif_dun02,249,221,3 script Snoring Ghost#lv240 CLEAR_NPC,3,3,{ + if (isbegin_quest(8656) == 1) { + switch( isbegin_quest(8658) ) { + case 0: + setquest 8658; + mes "I twisted the nose of the ghost in the frame."; + mes "There was no touch, but the ghost stopped snoring."; + npctalk "Nang!", "", bc_self; + if (isbegin_quest(8659) == 1) + mes "Let's go report to Milla."; + close; + case 1: + mes "The snoring ghost is nowhere to be seen, and another ghost is sleeping."; + close; + default: + end; + } + } + end; + +OnTouch: + if (isbegin_quest(8658) == 0) + npctalk "Dorolong Dorolong...", "", bc_self; + end; + +OnInit: + questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "isbegin_quest(8656) == 1 && isbegin_quest(8658) == 0" ); + end; +} diff --git a/npc/re/scripts_monsters.conf b/npc/re/scripts_monsters.conf index c7faf4a1ba..dca57f6d65 100644 --- a/npc/re/scripts_monsters.conf +++ b/npc/re/scripts_monsters.conf @@ -46,6 +46,7 @@ npc: npc/re/mobs/dungeons/mjo_dun.txt npc: npc/re/mobs/dungeons/moc_pryd.txt npc: npc/re/mobs/dungeons/moro_vol.txt npc: npc/re/mobs/dungeons/mosk_dun.txt +npc: npc/re/mobs/dungeons/nif_dun.txt npc: npc/re/mobs/dungeons/nyd_dun.txt npc: npc/re/mobs/dungeons/odin.txt npc: npc/re/mobs/dungeons/orcsdun.txt diff --git a/npc/re/scripts_warps.conf b/npc/re/scripts_warps.conf index 3422c09500..9d50540730 100644 --- a/npc/re/scripts_warps.conf +++ b/npc/re/scripts_warps.conf @@ -26,6 +26,7 @@ npc: npc/re/warps/dungeons/ecl_dun.txt npc: npc/re/warps/dungeons/harboro2.txt npc: npc/re/warps/dungeons/iz_dun.txt npc: npc/re/warps/dungeons/moc_pryd.txt +npc: npc/re/warps/dungeons/nif_dun.txt npc: npc/re/warps/dungeons/rockmi1.txt npc: npc/re/warps/dungeons/sp_rudus.txt npc: npc/re/warps/dungeons/slabw01.txt diff --git a/npc/re/warps/dungeons/nif_dun.txt b/npc/re/warps/dungeons/nif_dun.txt new file mode 100644 index 0000000000..d97434ffa0 --- /dev/null +++ b/npc/re/warps/dungeons/nif_dun.txt @@ -0,0 +1,34 @@ +//===== rAthena Script ======================================= +//= Niflheim dungeon warps script +//===== Changelogs: ========================================== +//= 1.0 First version. [Capuche] +//============================================================ + +niflheim,149,124,0 script nifla_nifdun01a WARPNPC,1,1,{ + end; +OnTouch: + if (isbegin_quest(8640) == 0) { + npctalk "Angry Gatekeeper: How are you adventurer? Go in? Do you want to go in? Kick!", "Angry Gatekeeper#lv200", bc_self; + npctalk "Funny Gatekeeper's Friend: Awesome!", "Funny Gatekeeper's Friend#lv20", bc_self; + end; + } + warp "nif_dun01",145,85; + end; +} + +nif_dun01,145,82,0 warp2 nifdun01a_nifla 1,1,niflheim,146,122 + +nif_dun01,146,36,0 script nifdun01a_nifdun02a WARPNPC,1,1,{ + end; +OnTouch: + if (BaseLevel < 240) { + npctalk "Helpful Gatekeeper: Hey, look at how you look! How can you come all the way here!", "Helpful Gatekeeper#240", bc_self; + npctalk "Silent Gatekeeper: ...means lack of training.", "Silent Gatekeeper#240", bc_self; + end; + } + warp "nif_dun02",149,23; + end; +} + +nif_dun02,162,15,0 warp2 nifdun02a_nifdun01a 1,1,nif_dun01,146,39 +nif_dun02,137,15,0 warp2 nifdun02a_nifdun01a_ 1,1,nif_dun01,146,39