summaryrefslogtreecommitdiff
path: root/npc/015-8
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
commita7c45a192268da2601cef47a4cdba987ae2327ca (patch)
treec5fb5b97db109fe7106496dd96498c475881046b /npc/015-8
downloadserverdata-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.txt7
-rw-r--r--npc/015-8/_mobs.txt9
-rw-r--r--npc/015-8/config.txt35
-rw-r--r--npc/015-8/puzzle.txt133
-rw-r--r--npc/015-8/sealedshrine.txt659
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;
+}
+