diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/015-8 | |
download | serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2 serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip |
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/015-8')
-rw-r--r-- | npc/015-8/_import.txt | 7 | ||||
-rw-r--r-- | npc/015-8/_mobs.txt | 9 | ||||
-rw-r--r-- | npc/015-8/config.txt | 35 | ||||
-rw-r--r-- | npc/015-8/puzzle.txt | 133 | ||||
-rw-r--r-- | npc/015-8/sealedshrine.txt | 659 |
5 files changed, 843 insertions, 0 deletions
diff --git a/npc/015-8/_import.txt b/npc/015-8/_import.txt new file mode 100644 index 0000000..27ea890 --- /dev/null +++ b/npc/015-8/_import.txt @@ -0,0 +1,7 @@ +// Map 015-8: Ancient Hideout +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/015-8/015-8_blackbox.txt", +"npc/015-8/_mobs.txt", +"npc/015-8/config.txt", +"npc/015-8/puzzle.txt", +"npc/015-8/sealedshrine.txt", diff --git a/npc/015-8/_mobs.txt b/npc/015-8/_mobs.txt new file mode 100644 index 0000000..843eed7 --- /dev/null +++ b/npc/015-8/_mobs.txt @@ -0,0 +1,9 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 015-8: Ancient Hideout mobs +015-8,99,99,69,81 monster Mouboo 1023,32,30000,30000 +015-8,114,95,51,69 monster Robin Bandit 1153,16,30000,30000 +015-8,89,140,62,30 monster Angry Yellow Slime 1198,12,30000,30000 +015-8,97,57,62,46 monster Old Snake 1199,12,20000,20000 +015-8,67,94,34,79 monster Red Slime 1092,12,30000,30000 +015-8,100,56,48,36 monster Vampire Bat 1063,14,27000,22000 +015-8,103,95,69,81 monster Cave Maggot 1027,24,30000,30000 diff --git a/npc/015-8/config.txt b/npc/015-8/config.txt new file mode 100644 index 0000000..b03dce1 --- /dev/null +++ b/npc/015-8/config.txt @@ -0,0 +1,35 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// 015-8 Sagratha Cave Configuration File + +015-8 mapflag zone MMO +015-8-1 mapflag zone MMO + +015-8,99,179,0 script #Exit0158 NPC_HIDDEN,0,0,{ + end; + +OnTouch: + .@q=getq(HurnscaldQuest_Sagratha); + .@q2=getq2(HurnscaldQuest_Sagratha); + // Cheater Detected + if (!MAGIC_LVL || .@q < 3) { + setq HurnscaldQuest_Sagratha, 0, 0, 0; + sc_end SC_CASH_PLUSEXP; + sc_end SC_OVERLAPEXPUP; + sc_start SC_OVERLAPEXPUP, 300000, -20; + warp "Save", 0, 0; + return false; + } + + mesc l("Return to Sagratha's House?"); + if (askyesno() == ASK_YES) { + .@mapn$=SaggyInstCheck(); + warp .@mapn$, 33, 35; + changemusic .@mapn$, "eric_matyas_ghouls.ogg"; + } + closeclientdialog; + close; +} + diff --git a/npc/015-8/puzzle.txt b/npc/015-8/puzzle.txt new file mode 100644 index 0000000..a62a56a --- /dev/null +++ b/npc/015-8/puzzle.txt @@ -0,0 +1,133 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// PUZZLES and TRAPS submodule - Sagratha's Cave - 015-8 +// Uses setq3 - setq1 stage 3 +// NPC_FAKIR + NPC_STATUE_FAFA + +// Chasm at third seal +015-8,120,158,0 script #SaggyPuzzleChasm NPC_HIDDEN,0,4,{ + end; +OnTouch: + do { + if (@saggychasmok) { + slide 125, 160; + closedialog; + end; + } + + mesc l("There is a chasm."); + select + l("Drop a coin to hear how deep it is"), + l("Climb on the walls!"), + l("Run and try jumping it!"), + l("Build a bridge with wooden logs!"), + l("Uhh... I'm scared!"); + mes ""; + switch (@menu) { + case 1: + if (!Zeny) { + mesc l("You don't have money."); + } else { + Zeny-=1; + mesc l("You throw a coin on the chasm."); + next; + mesc l("... ... ..."); + next; + mesc l("You don't hear anything. This chasm must be incredibly deep."); + next; + mesc l("Falling means certain death."); + } + break; + // Let's climb the wall! + case 2: + if (readparam2(bStr) < 20 || (!countitem(MinerGloves) && !countitem(LeatherGloves))) { + mesc l("You don't have proper equipment for it."); + } else { + mesc l("Taking your sturdy glove, you attempt to walk by the wall! You are betting your life on it!"); + next; + mesc l("A stone seemed to be loose, but you barely managed to avoid falling!"); + next; + mesc l("This is difficult, but you are giving your best!!"); + next; + mesc l("You are close... You are almost there!"); + next; + // We get a bit more than 50% - we take 60%, so your chances are + // higher than jumping... But you need two stats, instead of one! + // (Top will be 120 instead of 100 - thus, 720 out of 640) + .@ponderate=(readparam2(bStr)+readparam2(bVit))/100*60; + if (rand(0,1000) < 640-(.@ponderate*6)) { + mesc l("But unfortunately, a loose stone lodges and you fall to your death."), 1; + die(); + close; + } + mesc l("You succeed in crossing the chasm!"); + @saggychasmok=true; + } + break; + // Let's run it! + case 3: + if (readparam2(bAgi) < 20 || Weight > 1500) { + mesc l("You don't have enough agility / is carrying too much to attempt it."); + } else { + mesc l("You'll give your best and attempt to run!"); + next; + mesc l("You take distance and..."); + next; + mesc l("YOU JUMP FOR ALL IT IS WORTH!!"); + // (You can always fall as top is 600 of 640) + if (rand(0,1000) < 640-(readparam2(bAgi)*6)) { + mesc l("But unfortunately, it was harder than you thought. You are dead."), 1; + die(); + close; + } + mesc l("You succeed in crossing the chasm!"); + @saggychasmok=true; + } + break; + // Let's make a bridge! + case 4: + if (countitem(WoodenLog) < 5 || !getskilllv(TMW2_CRAFT)) { + mesc l("You don't have enough wood (5 @@) or crafting skills to do it.", getitemlink(WoodenLog)); + } else { + mesc l("..."); + next; + mesc l("After hours of hard work..."); + next; + mesc l("You succeed in crossing the chasm!"); + delitem WoodenLog, 5; + @saggychasmok=true; + } + break; + default: + close; + } + next; + } while (true); + close; +} + +015-8,124,158,0 script #SaggyPuzzleChasmSkip NPC_HIDDEN,0,4,{ + end; +OnTouch: + slide 119, 160; + end; +} + + +// Controls a chest/mimic on the trap room +015-8,0,0,0 script #SaggyChestCtrl NPC_HIDDEN,{ + end; + +OnDelay: + initnpctimer; + end; + +OnTimer180000: + stopnpctimer; +OnInit: + monster "015-8", 119+rand2(-3, 3), 35+rand2(-3, 3), "Treasure Chest", any(BronzeChest,BronzeMimic,SilverChest,SilverMimic), 1, "#SaggyChestCtrl::OnDelay"; + end; +} + diff --git a/npc/015-8/sealedshrine.txt b/npc/015-8/sealedshrine.txt new file mode 100644 index 0000000..d4e4170 --- /dev/null +++ b/npc/015-8/sealedshrine.txt @@ -0,0 +1,659 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// SEALED SHRINE submodule - Sagratha's Cave - 015-8 +// Uses setq3 - setq1 stage 3 +// NPC_FAKIR + NPC_STATUE_FAFA + +// Check for validity +function script SaggySealCheck { + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + // Cheater Detected + if (!MAGIC_LVL || .@q < 3) { + setq HurnscaldQuest_Sagratha, 0, 0, 0; + sc_end SC_CASH_PLUSEXP; + sc_end SC_OVERLAPEXPUP; + sc_start SC_OVERLAPEXPUP, 300000, -20; + warp "Save", 0, 0; + closeclientdialog; + end; + return false; + } + + // Okay, if it is not stage 3, we don't need to unseal + if (.@q != 3) + return false; + return true; +} + +// Seal Spawn +// (name, seal x, seal y, stageId, {seal map}) +function script SaggySealInit { + .@n$=getarg(0); + .@x=getarg(1); + .@y=getarg(2); + .@z=getarg(3); + .@m$=getarg(4, "015-8"); + + // Do nothing if @SaggySeal$ is busy - we will NOT begin another unsealing. + if (@SaggySeal$ != "" && !.@z) + end; + else + @SaggySeal$=.@n$; + + // You're dead, drop the script + if (ispcdead()) { + npctalk l("You are dead. Aborting."); + @SaggySeal$=""; + end; + } + + // Drain some Mana + // Max wave is 9... So it should cap at 10% + .@val=7+(.@z/3); + + if (Sp < MaxSp/100*.@val) { + npctalk l("You don't have enough mana to continue. The seal remains active."); + @SaggySeal$=""; + end; + } + percentheal 0, -(.@val); + + // BaseLevel: 37 + areamonster .@m$, .@x-1, .@y-1, .@x+1, .@y+1, "Seal Guardian", MagicGoblin, (.@z/3)+1; + + switch (.@z) { + case 0: + .@mobId=any(HouseMaggot,SlimeBlast); break; + case 1: + .@mobId=AngryScorpion; break; + case 2: + .@mobId=AngryBat; break; + case 3: + .@mobId=RedSlime; break; + case 4: + .@mobId=AngryRedScorpion; break; + case 5: + .@mobId=Bandit; break; + case 6: + .@mobId=Skeleton; break; + case 7: + .@mobId=BlueSlime; break; + case 8: + .@mobId=RedMushroom; break; + case 9: + .@mobId=BlackSlime; break; + default: + Exception("ERROR, INVALID Z VALUE FOR SAGRATHA SEAL: "+.@z, RB_DEFAULT|RB_IRCBROADCAST); + .@mobId=WickedMushroom; break; + } + + monster .@m$, .@x, .@y, "Seal Protector", .@mobId, 1; + + // Schedule next sequence + if (.@z+1 < 10) + .@nx$="0"+(.@z+1); + else + .@nx$=str(.@z+1); + // 3.5s each wave, giving you ~1s to kill/endure each "boss" + .@t=3500+(.@z*980); + + addtimer2(.@t, .@n$+"::OnBreakSeal"+.@nx$); + return; +} + +// Main menu - SaggySealTrueInit +// ( .name$, x, y ) +function script SaggySealTrueInit { + // Do nothing if @SaggySeal$ is busy - we will NOT begin another unsealing. + if (@SaggySeal$ != "") + end; + + // Okay, we can begin! (variable will be filled on SaggySealInit) + mesc l("Attempt to break the seal?"); + mesc l("Warning: This will drain mana and spawn monsters. You shall not leave this cave section!"); + if (askyesno() == ASK_YES) { + npctalk3 l("You started the seal break sequence. Please stand by."); + SaggySealInit(getarg(0), getarg(1), getarg(2), 0); + } + closeclientdialog; + return; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +015-8,0,0,0 script #SaggySeal1 NPC_SUMMONING_CIRC,0,0,{ + end; + +OnTouch: + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + // Check if it can be operated + if (!SaggySealCheck()) + end; + + // Check if this seal is ok + if (.@q3 & .sealId) { + npctalkonce l("This seal was already broken, proceed to the next seal!"); + end; + } + + // It is stage 3, so we will write to setq3 that the seal is open... Soon. + SaggySealTrueInit(.name$, .x, .y); + end; + +OnBreakSeal01: + SaggySealInit(.name$, .x, .y, 1); + end; + +OnBreakSeal02: + SaggySealInit(.name$, .x, .y, 2); + end; + +OnBreakSeal03: + SaggySealInit(.name$, .x, .y, 3); + end; + +OnBreakSeal04: + SaggySealInit(.name$, .x, .y, 4); + end; + +OnBreakSeal05: + SaggySealInit(.name$, .x, .y, 5); + end; + +OnBreakSeal06: + SaggySealInit(.name$, .x, .y, 6); + end; + +OnBreakSeal07: + SaggySealInit(.name$, .x, .y, 7); + end; + +OnBreakSeal08: + SaggySealInit(.name$, .x, .y, 8); + end; + +OnBreakSeal09: + SaggySealInit(.name$, .x, .y, 9); + end; + +OnBreakSeal10: + .@q3=getq3(HurnscaldQuest_Sagratha); + npctalk3 l("The seal was broken!"); + @SaggySeal$=""; + setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; + end; + +OnInit: + .sealId=1; + + setarray .xpos, 115, 119, 116, 121, 126, 125, 137, 136, 115; + setarray .ypos, 117, 117, 119, 122, 125, 115, 117, 123, 118; + .@z=rand(getarraysize(.xpos)); + movenpc .name$, .xpos[.@z], .ypos[.@z], 0; + end; +} + + + + + + + + + + + + + + +015-8,0,0,0 script #SaggySeal2 NPC_SUMMONING_CIRC,0,0,{ + end; + +OnTouch: + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + // Check if it can be operated + if (!SaggySealCheck()) + end; + + // Check if this seal is ok + if (.@q3 & .sealId) { + npctalkonce l("This seal was already broken, proceed to the next seal!"); + end; + } + + // It is stage 3, so we will write to setq3 that the seal is open... Soon. + SaggySealTrueInit(.name$, .x, .y); + end; + +OnBreakSeal01: + SaggySealInit(.name$, .x, .y, 1); + end; + +OnBreakSeal02: + SaggySealInit(.name$, .x, .y, 2); + end; + +OnBreakSeal03: + SaggySealInit(.name$, .x, .y, 3); + end; + +OnBreakSeal04: + SaggySealInit(.name$, .x, .y, 4); + end; + +OnBreakSeal05: + SaggySealInit(.name$, .x, .y, 5); + end; + +OnBreakSeal06: + SaggySealInit(.name$, .x, .y, 6); + end; + +OnBreakSeal07: + SaggySealInit(.name$, .x, .y, 7); + end; + +OnBreakSeal08: + SaggySealInit(.name$, .x, .y, 8); + end; + +OnBreakSeal09: + SaggySealInit(.name$, .x, .y, 9); + end; + +OnBreakSeal10: + .@q3=getq3(HurnscaldQuest_Sagratha); + npctalk3 l("The seal was broken!"); + @SaggySeal$=""; + setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; + end; + +OnInit: + .sealId=2; + + setarray .xpos, 39, 33, 43, 53, 51, 55, 60, 68, 63, 56; + setarray .ypos, 120, 130, 134, 132, 119, 121, 122, 120, 129, 124; + .@z=rand(getarraysize(.xpos)); + movenpc .name$, .xpos[.@z], .ypos[.@z], 0; + end; +} + + + + + + + + + + + + + + +015-8,0,0,0 script #SaggySeal3 NPC_SUMMONING_CIRC,0,0,{ + end; + +OnTouch: + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + // Check if it can be operated + if (!SaggySealCheck()) + end; + + // Check if this seal is ok + if (.@q3 & .sealId) { + npctalkonce l("This seal was already broken, proceed to the next seal!"); + end; + } + + // It is stage 3, so we will write to setq3 that the seal is open... Soon. + SaggySealTrueInit(.name$, .x, .y); + end; + +OnBreakSeal01: + SaggySealInit(.name$, .x, .y, 1); + end; + +OnBreakSeal02: + SaggySealInit(.name$, .x, .y, 2); + end; + +OnBreakSeal03: + SaggySealInit(.name$, .x, .y, 3); + end; + +OnBreakSeal04: + SaggySealInit(.name$, .x, .y, 4); + end; + +OnBreakSeal05: + SaggySealInit(.name$, .x, .y, 5); + end; + +OnBreakSeal06: + SaggySealInit(.name$, .x, .y, 6); + end; + +OnBreakSeal07: + SaggySealInit(.name$, .x, .y, 7); + end; + +OnBreakSeal08: + SaggySealInit(.name$, .x, .y, 8); + end; + +OnBreakSeal09: + SaggySealInit(.name$, .x, .y, 9); + end; + +OnBreakSeal10: + .@q3=getq3(HurnscaldQuest_Sagratha); + npctalk3 l("The seal was broken!"); + @SaggySeal$=""; + setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; + end; + +OnInit: + .sealId=4; + + setarray .xpos, 140, 143, 146, 147, 145, 143; + setarray .ypos, 140, 141, 139, 144, 147, 143; + .@z=rand(getarraysize(.xpos)); + movenpc .name$, .xpos[.@z], .ypos[.@z], 0; + end; +} + + + + + + + +// Sagratha Seals Eletronic Barriers +015-8,120,130,0 script #SaggySealBarrier1 NPC_HIDDEN,0,4,{ +OnTouch: + if (@SaggySeal$ != "") { + npctalk3 l("The seal retaliates! It was super effective. You are dead!"); + @SaggySeal$=""; + die(); + end; + } + end; +} + +015-8,74,142,0 script #SaggySealBarrier2 NPC_HIDDEN,0,4,{ +OnTouch: + if (@SaggySeal$ != "") { + npctalk3 l("The seal retaliates! It was super effective. You are dead!"); + @SaggySeal$=""; + die(); + end; + } + end; +} + +015-8,137,154,0 script #SaggySealBarrier3 NPC_HIDDEN,0,5,{ +OnTouch: + if (@SaggySeal$ != "") { + npctalk3 l("The seal retaliates! It was super effective. You are dead!"); + @SaggySeal$=""; + die(); + end; + } + end; +} + + + + + +// Magic Barrier +015-8,94,104,0 script Dog Statue#Saggy NPC_STATUE_FAFA,{ +OnDialog: + mesn; + mesq l("This is a magical barrier, powered by three seals in your part."); + next; + mesn; + mesq l("You must break all three seals to cross this barrier! For that, walk on them!"); + next; + mesn; + mesq l("Breaking a seal is easy, just flow mana on it for enough time to it shatter."); + next; + mesn; + mesq l("I, Fafa, the Magical Statue, grant you this power! Prove your worth! And never run from the seal, or die for your cowardice!"); + close; + +OnInit: + .distance=5; + end; +} + +015-8,93,109,0 script #SaggyBarrier NPC_HIDDEN,2,0,{ + end; + +OnTouch: + if (!SaggySealCheck()) { + slide 93, 106; + end; + } + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + + // Magic Number + if (.@q3 == 7) { + npctalk3 l("The seals having been broken, the barrier was weakened! You did it! The path is now open!"); + setq1 HurnscaldQuest_Sagratha, 4; + setq3 HurnscaldQuest_Sagratha, 0; + slide 93, 106; + } else { + getmapxy(.@m$, .@x, .@y, 0); + slide .@x, .@y+3; + dispbottom l("A powerful magic barrier repels you!"); + addtimer(200, "Dog Statue#Saggy::OnDialog"); + } + end; + +} + + +015-8,93,107,0 script #SaggyBarrier2 NPC_HIDDEN,2,0,{ + end; + +OnTouch: + // You should not be on this side of the barrier + if (SaggySealCheck()) { + setq HurnscaldQuest_Sagratha, 0, 0, 0; + sc_end SC_CASH_PLUSEXP; + sc_end SC_OVERLAPEXPUP; + sc_start SC_OVERLAPEXPUP, 300000, -20; + warp "Save", 0, 0; + closeclientdialog; + end; + } + slide 93, 110; + end; + +} + + + + + +// Shrine Statue Control +// SaggyShrineStatue( .name$ ) +function script SaggyShrineStatue { + .@n$=getarg(0); + .@q=getq(HurnscaldQuest_Sagratha); + + // Initial check + if (!MAGIC_LVL || .@q < 4) { + setq HurnscaldQuest_Sagratha, 0, 0, 0; + sc_end SC_CASH_PLUSEXP; + sc_end SC_OVERLAPEXPUP; + sc_start SC_OVERLAPEXPUP, 300000, -20; + warp "Save", 0, 0; + closeclientdialog; + end; + return false; + } + + mesn l("Guardian Statue"); + if (.@q != 4) { + mesq l("..."); + next; + mesc l("The statue doesn't replies."); + close; + } + mesq l("Decipher me... Or I will devour you..."); + next; + mesc l("Take the riddle?"), 1; + mesc l("Time limit for answer: 2 minutes"); + next; + if (askyesno() == ASK_YES) { + // You have unlimited time if you don't close the dialog + addtimer(120000, .@n$+"::OnScheduledDeath"); + if (0158_Riddle_BlackBox()) { + deltimer(.@n$+"::OnScheduledDeath"); + setq1 HurnscaldQuest_Sagratha, 5; + setq3 HurnscaldQuest_Sagratha, 0; + mesn l("Guardian Statue"); + mesq l("You shall pass. Beyond this gate, she waits for you."); + next; + mesn l("Guardian Statue"); + mesq l("Your worth shall be tested, and from inside, you shall not leave."); + } else { + deltimer(.@n$+"::OnScheduledDeath"); + doevent(.@n$+"::OnScheduledDeath"); + closeclientdialog; + } + } + return; +} + +// The Sealed Shrine Itself and the guardians +015-8,96,22,0 script #SaggyShrineRight NPC_FAKIR,{ + SaggyShrineStatue(.name$); + close; + +OnScheduledDeath: + npctalk3 l("Be devoured!"); + die(); + end; + +OnInit: + .distance=5; + end; +} + +015-8,93,22,0 script #SaggyShrineLeft NPC_FAKIR,{ + SaggyShrineStatue(.name$); + close; + +OnScheduledDeath: + npctalk3 l("Be devoured!"); + die(); + end; + +OnInit: + .distance=5; + end; +} + +015-8,94,20,0 script #ShrineGate NPC_NO_SPRITE,1,0,{ + + .@q=getq(HurnscaldQuest_Sagratha); + .@q3=getq3(HurnscaldQuest_Sagratha); + // Cheater Detected + if (!MAGIC_LVL || .@q < 4) { + setq HurnscaldQuest_Sagratha, 0, 0, 0; + sc_end SC_CASH_PLUSEXP; + sc_end SC_OVERLAPEXPUP; + sc_start SC_OVERLAPEXPUP, 300000, -20; + warp "Save", 0, 0; + closeclientdialog; + end; + return false; + } + + // Quest Status 4: Riddle pending + if (.@q == 4) { + npctalk3 l("The gates are firmly shut, no amount of force will break them."); + } + + // Quest Status 5: Riddle solved, access granted + if (.@q == 5) { + enable_items(); + mesc l(".:: The Mouboo Temple ::."), 3; + mesc l("WARNING: You are about to enter a HIGH-RISK zone."), 1; + mesc l("We advise you to change your equipment now."), 1; + if (getmapusers("015-8") > 1) + mesc l("THIS IS A SOLO FIGHT, TEAMS ARE NOT ALLOWED INSIDE."), 1; + next; + disable_items(); + if (askyesno() == ASK_YES) { + setq3 HurnscaldQuest_Sagratha, 0; + closeclientdialog; + + .@map2$=SaggyInstCheck(false); + warp .@map2$, 50, 78; + end; + } + close; + } + + // Quest Status 6: Boss defeated, no instance needed + if (.@q >= 6) { + warp "015-8-1", 50, 78; + } + end; +} + |