From 8a4bf716002a017de77fe7df301ef8e4aaf00a2e Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Fri, 9 Apr 2021 11:00:49 -0300 Subject: Initial commit --- npc/008-3-0/juliet.txt | 656 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 656 insertions(+) create mode 100644 npc/008-3-0/juliet.txt (limited to 'npc/008-3-0/juliet.txt') diff --git a/npc/008-3-0/juliet.txt b/npc/008-3-0/juliet.txt new file mode 100644 index 00000000..e0d256be --- /dev/null +++ b/npc/008-3-0/juliet.txt @@ -0,0 +1,656 @@ +// The Mana World scripts. +// Author: +// Jesusalva +// Description: +// Core for rescuing Juliet. +// Named as "Juliet" so `pluma npc/*/juliet.txt` resolves to something tangible. +008-3-0 mapflag nosave 008-1-1,49,158 + +008-3-0,92,89,0 script Summoning Altar#Rossy NPC_NO_SPRITE,{ + .@q2=getq2(HurnscaldQuests_Rossy); + // Not ready + if (.@q2 < ROSSY_READY) { + mesn; + mesq l("Better not touch this."); + close; + } + // Complete + if (.@q2 & ROSSY_BOSSCAVE) { + dispbottom l("You find someone hiding behind the altar."); + enablenpc instance_npcname("Juliet"); + disablenpc instance_npcname("Summoning Altar#Rossy"); + end; + } + // Battle + mesc l("This is the boss room! Be prepared for the worst!!"), 1; + callfunc("RossyCave", ROSSY_BOSSCAVE); + close; + +OnInit: + .distance = 4; + end; + +// Time to configure the map +OnInstanceInit: + .@m$=instance_mapname("008-3-0"); + // Rebuild spawns + // WARNING: Originals were generated automatically! + // print('\tareamonster(.@m$, %d, %d, %d, %d, strmobinfo(1, %s), %s, %d);' % (obj.x, obj.y, obj.x+obj.w, obj.y+obj.h, obj.name.replace(' ', ''), obj.name.replace(' ', ''), obj.max_beings)) + areamonster(.@m$, 30, 113, 37, 127, strmobinfo(1, CaveMaggot), CaveMaggot, 5); + areamonster(.@m$, 102, 116, 116, 124, strmobinfo(1, CaveMaggot), CaveMaggot, 5); + areamonster(.@m$, 79, 144, 89, 150, strmobinfo(1, CaveMaggot), CaveMaggot, 7); + areamonster(.@m$, 158, 87, 168, 99, strmobinfo(1, CaveMaggot), CaveMaggot, 7); + areamonster(.@m$, 34, 28, 37, 32, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 160, 124, 165, 127, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 155, 163, 156, 170, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 128, 146, 133, 149, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 120, 61, 125, 64, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 138, 64, 148, 71, strmobinfo(1, Crafty), Crafty, 10); + areamonster(.@m$, 129, 102, 140, 108, strmobinfo(1, Crafty), Crafty, 6); + areamonster(.@m$, 67, 114, 77, 116, strmobinfo(1, Spider), Spider, 3); + areamonster(.@m$, 109, 145, 113, 155, strmobinfo(1, Spider), Spider, 5); + areamonster(.@m$, 68, 84, 71, 91, strmobinfo(1, Spider), Spider, 4); + areamonster(.@m$, 80, 169, 80, 169, strmobinfo(1, DiamondVein), DiamondVein, 1); + areamonster(.@m$, 118, 96, 118, 96, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 131, 93, 131, 93, strmobinfo(1, CoalVeinbloc), CoalVeinbloc, 1); + areamonster(.@m$, 119, 101, 119, 101, strmobinfo(1, GoldVeinbloc), GoldVeinbloc, 1); + areamonster(.@m$, 113, 60, 136, 68, strmobinfo(1, CaveMaggot), CaveMaggot, 7); + areamonster(.@m$, 199, 68, 207, 77, strmobinfo(1, Crafty), Crafty, 5); + areamonster(.@m$, 160, 47, 177, 52, strmobinfo(1, Crafty), Crafty, 5); + areamonster(.@m$, 119, 200, 139, 204, strmobinfo(1, Spider), Spider, 5); + areamonster(.@m$, 34, 193, 45, 202, strmobinfo(1, Spider), Spider, 5); + areamonster(.@m$, 26, 115, 31, 132, strmobinfo(1, Spider), Spider, 5); + areamonster(.@m$, 82, 60, 103, 67, strmobinfo(1, CaveMaggot), CaveMaggot, 5); + areamonster(.@m$, 38, 193, 54, 197, strmobinfo(1, CaveMaggot), CaveMaggot, 5); + areamonster(.@m$, 114, 199, 126, 202, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 106, 30, 116, 37, strmobinfo(1, Crafty), Crafty, 5); + areamonster(.@m$, 78, 128, 89, 149, strmobinfo(1, Ratto), Ratto, 4); + areamonster(.@m$, 117, 141, 152, 152, strmobinfo(1, Crafty), Crafty, 10); + areamonster(.@m$, 117, 101, 135, 112, strmobinfo(1, Ratto), Ratto, 7); + areamonster(.@m$, 130, 88, 130, 88, strmobinfo(1, RubyVein), RubyVein, 1); + areamonster(.@m$, 122, 94, 122, 94, strmobinfo(1, RubyVein), RubyVein, 1); + areamonster(.@m$, 31, 181, 31, 181, strmobinfo(1, SapphireVein), SapphireVein, 1); + areamonster(.@m$, 31, 198, 31, 198, strmobinfo(1, SapphireVein), SapphireVein, 1); + areamonster(.@m$, 135, 127, 135, 127, strmobinfo(1, TopazVein), TopazVein, 1); + areamonster(.@m$, 120, 125, 120, 125, strmobinfo(1, TopazVein), TopazVein, 1); + areamonster(.@m$, 31, 112, 31, 112, strmobinfo(1, AmethystVein), AmethystVein, 1); + areamonster(.@m$, 24, 123, 24, 123, strmobinfo(1, AmethystVein), AmethystVein, 1); + areamonster(.@m$, 193, 123, 193, 123, strmobinfo(1, EmeraldVein), EmeraldVein, 1); + areamonster(.@m$, 204, 116, 204, 116, strmobinfo(1, EmeraldVein), EmeraldVein, 1); + areamonster(.@m$, 89, 168, 89, 168, strmobinfo(1, DiamondVein), DiamondVein, 1); + areamonster(.@m$, 132, 192, 132, 192, strmobinfo(1, SapphireVein), SapphireVein, 1); + areamonster(.@m$, 39, 174, 39, 174, strmobinfo(1, AmethystVein), AmethystVein, 1); + areamonster(.@m$, 44, 174, 44, 174, strmobinfo(1, TopazVein), TopazVein, 1); + areamonster(.@m$, 118, 196, 118, 196, strmobinfo(1, EmeraldVein), EmeraldVein, 1); + areamonster(.@m$, 65, 105, 65, 105, strmobinfo(1, DiamondVein), DiamondVein, 1); + areamonster(.@m$, 143, 139, 143, 139, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 156, 121, 156, 121, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 155, 166, 155, 166, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 125, 162, 125, 162, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 107, 141, 107, 141, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 77, 148, 77, 148, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 62, 119, 62, 119, strmobinfo(1, GemVeinbloc), GemVeinbloc, 1); + areamonster(.@m$, 162, 95, 162, 95, strmobinfo(1, CoalVeinbloc), CoalVeinbloc, 1); + areamonster(.@m$, 157, 66, 157, 66, strmobinfo(1, CoalVeinbloc), CoalVeinbloc, 1); + areamonster(.@m$, 112, 60, 112, 60, strmobinfo(1, CoalVeinbloc), CoalVeinbloc, 1); + areamonster(.@m$, 66, 54, 66, 54, strmobinfo(1, CoalVeinbloc), CoalVeinbloc, 1); + areamonster(.@m$, 63, 91, 63, 91, strmobinfo(1, GoldVeinbloc), GoldVeinbloc, 1); + areamonster(.@m$, 76, 127, 76, 127, strmobinfo(1, GoldVeinbloc), GoldVeinbloc, 1); + areamonster(.@m$, 111, 148, 111, 148, strmobinfo(1, GoldVeinbloc), GoldVeinbloc, 1); + /* + areamonster(.@m$, 101, 27, 104, 31, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 165, 28, 168, 32, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 199, 67, 202, 71, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 199, 109, 202, 113, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 197, 194, 200, 198, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 133, 199, 136, 203, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 34, 194, 37, 198, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + areamonster(.@m$, 26, 111, 29, 115, strmobinfo(1, PoisonSkull), PoisonSkull, 1); + */ + areamonster(.@m$, 88, 48, 88, 48, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 100, 49, 100, 49, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 130, 44, 130, 44, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 67, 47, 67, 47, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 124, 94, 124, 94, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 158, 60, 158, 60, strmobinfo(1, CoalVein), CoalVein, 1); + areamonster(.@m$, 56, 53, 56, 53, strmobinfo(1, IronVein), IronVein, 1); + areamonster(.@m$, 55, 98, 55, 98, strmobinfo(1, IronVein), IronVein, 1); + areamonster(.@m$, 62, 103, 62, 103, strmobinfo(1, IronVein), IronVein, 1); + areamonster(.@m$, 69, 125, 69, 125, strmobinfo(1, IronVein), IronVein, 1); + areamonster(.@m$, 62, 153, 62, 153, strmobinfo(1, IronVein), IronVein, 1); + areamonster(.@m$, 96, 145, 96, 145, strmobinfo(1, IronVein), IronVein, 1); + + // Yay yay yay + end; +} + +///////////////////////////////////////////////////////// +// Main script controller for Rossy Quest +- script #RossyQuest NPC_HIDDEN,{ + end; + +OnStage2: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage2")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE1; + goto OnBeat; + +OnStage4: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage4")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE2; + goto OnBeat; + +OnStage8: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage8")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE3; + goto OnBeat; + +OnStage16: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage16")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE4; + goto OnBeat; + +OnStage32: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage32")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE5; + goto OnBeat; + +OnStage64: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage64")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE6; + goto OnBeat; + +OnStage128: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage128")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE7; + goto OnBeat; + +OnStage256: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage256")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE8; + goto OnBeat; + +OnStage512: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage512")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_CAVE9; + goto OnBeat; + +OnStage1024: + if (!playerattached()) end; // ERROR + if (!@rossylock) end; // Invalid + if (mobcount(getmap(), "#RossyQuest::OnStage1024")) end; // Still working + .@q2=getq2(HurnscaldQuests_Rossy); + setq2 HurnscaldQuests_Rossy, .@q2 | ROSSY_BOSSCAVE; + goto OnBeat; + +OnBeat: + @rossylock = false; + dispbottom l("*** Cave Cleared ***"); + delcells "Rossy"+getcharid(0)+"Wall"; + .@inst = getq3(HurnscaldQuests_Rossy); + instance_set_timeout(ROSSY_INSTIME, ROSSY_INSTIME, .@inst); + if (.@q2 < ROSSY_BOSSCAVE) + addtimer2(300000, "#RossyQuest::OnTick1"); + else + deltimer("#RossyQuest::OnTick1"); + deltimer("#RossyQuest::OnTick2"); + deltimer("#RossyQuest::OnTick3"); + deltimer("#RossyQuest::OnTick4"); + deltimer("#RossyQuest::OnTick5"); + end; + +/* ****************************************** */ +OnTick1: + dispbottom l("Time remaining: %d minutes", 15); + addtimer2(300000, "#RossyQuest::OnTick2"); + end; + +OnTick2: + dispbottom l("Time remaining: %d minutes", 10); + addtimer2(300000, "#RossyQuest::OnTick3"); + end; + +OnTick3: + dispbottom l("Time remaining: %d minutes", 5); + addtimer2(240000, "#RossyQuest::OnTick4"); + end; + +OnTick4: + dispbottom l("Time remaining: 1 minute"); + addtimer2(45000, "#RossyQuest::OnTick5"); + end; + +OnTick5: + dispbottom l("Time remaining: %d seconds!", 15); + end; + +} + +///////////////////////////////////////////////////////// +// RossyCave(Cave ID) +function script RossyCave { + // Fight ongoing - cannot trigger + if (@rossylock) + return false; + + // Check quest consistency + // HurnscaldQuests_Rossy + // (MAIN QUEST, CAVE CONTROL, INSTANCE CONTROL) + .@q=getq(HurnscaldQuests_Rossy); + .@q2=getq2(HurnscaldQuests_Rossy); + .@inst=getq3(HurnscaldQuests_Rossy); + + if (instance_id() != .@inst) + return false; + if (.@q != 16) + return false; + if (!.@q2) { + dispbottom l("This looks DANGEROUS! Maybe someone around here can tell me what I'm supposed to do."); + return false; + } + if (.@q2 & .caveid) + return false; + + // --------------- + // Main node setup + .@c=getarg(0); + .@m$=getmap(); + .@n$="#RossyQuest::OnStage"+.@c; + + // Obtain and Write Configuration + switch (.@c) { + case ROSSY_CAVE1: + .@boss=PoisonSkull; + .@mobc=rand2(3,5); + .@x1=85;.@y1=21;.@x2=108;.@y2=39; + .@x3=109;.@y3=33; .@x4=109; .@y4=36; + break; + case ROSSY_CAVE2: + .@boss=Troll; + .@mobc=rand2(3,5); + .@x1=191;.@y1=103;.@x2=205;.@y2=122; + .@x3=201;.@y3=123; .@x4=201; .@y4=123; + break; + case ROSSY_CAVE3: + .@boss=FireWisp; + .@mobc=rand2(2,4); + .@x1=26;.@y1=23;.@x2=43;.@y2=36; + .@x3=38;.@y3=37; .@x4=38; .@y4=37; + break; + case ROSSY_CAVE4: + .@boss=WaterWisp; + .@mobc=rand2(6,12); + .@x1=180;.@y1=176;.@x2=206;.@y2=207; + .@x3=179;.@y3=200; .@x4=179; .@y4=200; + break; + case ROSSY_CAVE5: + .@boss=Serqet; + .@mobc=rand2(6,8); + .@x1=98;.@y1=188;.@x2=141;.@y2=207; + .@x3=97;.@y3=190; .@x4=97; .@y4=197; + break; + case ROSSY_CAVE6: + .@boss=SnakeGhost; + .@mobc=rand2(5,7); + .@x1=19;.@y1=98;.@x2=36;.@y2=136; + .@x3=37;.@y3=125; .@x4=37; .@y4=125; + break; + case ROSSY_CAVE7: + .@boss=ScorpionGhost; + .@mobc=rand2(5,7); + .@x1=22;.@y1=181;.@x2=50;.@y2=205; + .@x3=51;.@y3=192; .@x4=51; .@y4=197; + break; + case ROSSY_CAVE8: + .@boss=JackO; + .@mobc=rand2(3,5); + .@x1=158;.@y1=20;.@x2=176;.@y2=35; + .@x3=175;.@y3=36; .@x4=177; .@y4=36; + break; + case ROSSY_CAVE9: + .@boss=GreenSlimeProgenitor; + .@mobc=rand2(5,7); + .@x1=187;.@y1=58;.@x2=208;.@y2=85; + .@x3=186;.@y3=82; .@x4=186; .@y4=85; + break; + case ROSSY_BOSSCAVE: + .@boss=Golem; + .@mobc=rand2(3,5); + .@x1=84;.@y1=85;.@x2=101;.@y2=101; + .@x3=92;.@y3=102; .@x4=93; .@y4=102; + break; + default: + consolemes(CONSOLEMES_ERROR, "INVALID ROSSY CAVE ID - "+.@c+" - SCRIPT ABORTED"); + return false; + } + + // This is cast from a dialog so prompt comes before any advanced calculation + mesc l("Drop a %s here to summon monsters.", getitemlink(PileOfAsh)); + if (.@c == ROSSY_BOSSCAVE) + mesc l("This is the master's room seal, be careful!"), 1; + else + mesc l("Weaken all nine seals to be able to undo the final one."); + select + rif(countitem(PileOfAsh), l("Place pile of ashes")), + l("Run away in fear"); + mes ""; + closeclientdialog; + if (@menu == 2) + return false; + + // Delete the item and lock for the quest + delitem PileOfAsh, 1; + @rossylock = true; + + // Spawn underlings + for (.@i=0; .@i < .@mobc; .@i++) { + // FIXME: Penguin? Mister Prickel? Ice Goblin? Wolvern? + // I think all those four could be removed. + .@mobId=any(Bandit, RobinBandit, Skeleton, MisterPrickel, ManaGhost, Penguin, CraftyGhost, Zombie, Wolvern, SpiderGhost, IceGoblin); // Mobs lv 26~47 + .@mob=areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@mobId), .@mobId, 1, .@n$); + // Make it aggresive + .@bmod=getunitdata(.@mob, UDT_MODE); + setunitdata(.@mob, UDT_MODE, .@bmod|4); // 4 = MD_AGGRESSIVE + } + + // Spawn boss + .@mob=areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@boss), .@boss, 1, .@n$); + + // Obain boss basic status... + .@bhp= getunitdata(.@mob, UDT_MAXHP); + .@bat1=getunitdata(.@mob, UDT_ATKMIN); + .@bat2=getunitdata(.@mob, UDT_ATKMAX); + .@bhit=getunitdata(.@mob, UDT_HIT); + .@bmod=getunitdata(.@mob, UDT_MODE); + .@bmod=.@bmod|4; // 4 = MD_AGGRESSIVE + + // ...And Tweak Battle Status + setunitdata(.@mob, UDT_MAXHP, .@bhp*15/10); + setunitdata(.@mob, UDT_HP, .@bhp*15/10); + setunitdata(.@mob, UDT_ATKMIN, .@bat1*7/10); + setunitdata(.@mob, UDT_ATKMAX, .@bat2*7/10); + setunitdata(.@mob, UDT_HIT, .@bhit*2); + setunitdata(.@mob, UDT_MODE, .@bmod|32); // 32 = MD_BOSS + + // Build the wall so you cannot leave :> + setcells getmap(), .@x3, .@y3, .@x4, .@y4, 3, "Rossy"+getcharid(0)+"Wall"; + return true; +} + +/////////////////////////////////////////////// +// Reset quest when you die +function script RossyDeath { + if (getq(HurnscaldQuests_Rossy) != 16) + return; + if (@rossylock) + delcells("Rossy"+getcharid(0)+"Wall"); + @rossylock=false; + setq2 HurnscaldQuests_Rossy, 0; + deltimer("#RossyQuest::OnTick1"); + deltimer("#RossyQuest::OnTick2"); + deltimer("#RossyQuest::OnTick3"); + deltimer("#RossyQuest::OnTick4"); + deltimer("#RossyQuest::OnTick5"); + return; +} + +// May reset quest when you logout +function script RossyLogout { + if (getq(HurnscaldQuests_Rossy) != 16) + return; + if (@rossylock) { + delcells("Rossy"+getcharid(0)+"Wall"); + @rossylock=false; + setq2 HurnscaldQuests_Rossy, 0; + } + // FIXME: Set timers again when you login back? =/ + return; +} + +///////////////////////////////////////////////////////// +// Position the triggers + +// Begin Cave Code +008-3-0,98,27,0 script #RossyCave01 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave01"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE1; + end; +} + +// Begin Cave Code +008-3-0,199,109,0 script #RossyCave02 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave02"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE2; + end; +} + +// Begin Cave Code +008-3-0,35,26,0 script #RossyCave03 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave03"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE3; + end; +} + +// Begin Cave Code +008-3-0,198,193,0 script #RossyCave04 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave04"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE4; + end; +} + +// Begin Cave Code +008-3-0,133,200,0 script #RossyCave05 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave05"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE5; + end; +} + +// Begin Cave Code +008-3-0,27,104,0 script #RossyCave06 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave06"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE6; + end; +} + +// Begin Cave Code +008-3-0,31,192,0 script #RossyCave07 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave07"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE7; + end; +} + +// Begin Cave Code +008-3-0,165,26,0 script #RossyCave08 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave08"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE8; + end; +} + +// Begin Cave Code +008-3-0,201,69,0 script #RossyCave09 NPC_SUMMONING_CIRC,{ + if (RossyCave(.caveid)) + disablenpc instance_npcname(.name$); + close; + +OnInit: + disablenpc "#RossyCave09"; +OnInstanceInit: + .distance=1; + .caveid=ROSSY_CAVE9; + end; +} + +// -------------------------------------------------------------------- +008-3-0,92,90,0 script Juliet NPC_TANISHA,{ + // Check quest consistency + // HurnscaldQuests_Rossy + // (MAIN QUEST, CAVE CONTROL, INSTANCE CONTROL) + .@q=getq(HurnscaldQuests_Rossy); + .@q2=getq2(HurnscaldQuests_Rossy); + .@inst=getq3(HurnscaldQuests_Rossy); + + if (instance_id() != .@inst) + end; + if (!.@q2) + end; + + // A bug! + if (.@q != 16) { + disablenpc instance_npcname("Juliet", .@inst); + end; + } + + // Another bug!! + if (!(.@q2 & ROSSY_BOSSCAVE)) { + disablenpc instance_npcname("Juliet", .@inst); + end; + } + + // Prepare rewards + .@rune=any(RunestoneUruz, RunestoneRaido, RunestoneThurisaz, RunestoneKaunaz, RunestoneDagaz, RunestonePeorth); + .@gems=any(CrudeDiamond, CrudeRuby, CrudeEmerald, CrudeSapphire, CrudeTopaz, CrudeAmethyst); + inventoryplace .@rune, 1, .@gems, 1; + + // Run epilogue + mesn; + mesq l("I heard some battle noises a few minutes ago. Are you here to save me?"); + next; + select + l("Of course I'm here to save you, Rossy sent me here!"); + mes ""; + mesn; + mesc l("Juliet starts scavenging the fallen Golem."); + mesq l("Mommy teached me about precious gemstones. This Golem has quite a few of them."); + next; + mesn; + mesq l("Here you go!"); + getitem .@gems, 1; + quest_item(.@rune, 1); + quest_xp(.maxLevel, 100000); + quest_jxp(.maxLevel, 10000); + setq HurnscaldQuests_Rossy, 17, 0, .@inst; + next; + mesn; + mesq l("Thanks for helping me... I'll be on my way now."); + next; + select + l("Go safely!"), + l("Do you need an escort?"), + l("What was following you, anyway?"); + mes ""; + if (@menu == 2) { + mesn; + mesq l("I'll be fine, but thanks for the concern."); + } else if (@menu == 3) { + // This opens path for additional questline + mesn; + mesq l("Actually... I don't remember. I'm not sure why."); + next; + mesn; + mesq l("But it was big and scary! I haven't seen it since I entered this cave, though..."); + next; + mesn; + mesq l("It probably went away after seeing your bravure, tee-hee!"); + next; + mesn; + mesq l("I must go now. I've already spent too much time here already."); + } + disablenpc instance_npcname("Juliet", .@inst); + close; + +OnInit: + disablenpc "Juliet"; + .distance=4; + .maxLevel=80; + end; + +OnInstanceInit: + disablenpc instance_npcname("Juliet"); + .distance=4; + .maxLevel=90; + end; +} + + -- cgit v1.2.3-60-g2f50