diff options
-rw-r--r-- | db/constants.conf | 1 | ||||
-rw-r--r-- | npc/034-3/gemini.txt | 1 | ||||
-rw-r--r-- | npc/034-4/exit.txt | 7 | ||||
-rw-r--r-- | npc/034-4/intro.txt | 153 |
4 files changed, 161 insertions, 1 deletions
diff --git a/db/constants.conf b/db/constants.conf index 2f245aa12..24e72a6a4 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -2103,6 +2103,7 @@ constants_db: { EE_SNOWMAN: 512 EE_CRAZYFEFE: 1024 EE_SAULC: 2048 + EE_GEMINI: 4096 comment__: "Teleporter enum" TP_NONE: 0 diff --git a/npc/034-3/gemini.txt b/npc/034-3/gemini.txt index 352a4064d..14a76e2b8 100644 --- a/npc/034-3/gemini.txt +++ b/npc/034-3/gemini.txt @@ -203,6 +203,7 @@ OnTalkNearby: end; OnInit: +OnInstanceInit: .distance=3; .pid=getnpcid(); // For players diff --git a/npc/034-4/exit.txt b/npc/034-4/exit.txt index b1b6b4d33..8b1be0fc5 100644 --- a/npc/034-4/exit.txt +++ b/npc/034-4/exit.txt @@ -21,10 +21,15 @@ OnTouch: GeminiCheck(); // Only the party leader go ahead if (strcharinfo(0) != getpartyleader(getcharid(1))) { - mesq l("%s has the key.", getpartyleader(getcharid(1))); + mes l("%s has the key.", getpartyleader(getcharid(1))); close; } + mesc l("Are you sure you want to leave?"), 1; + mesc l("You, and everyone on the party, won't be able to return."), 1; + if (askyesno() == ASK_NO) close; + closeclientdialog; + // Create maze and populate (From 45x45 to 60x60) CreateMaze(IOT_CHAR, MAZE_SIZE_M | MAZE_SIZE_G); .@mx=getmapinfo(MAPINFO_SIZE_X, MAZE_MAP$)-20; diff --git a/npc/034-4/intro.txt b/npc/034-4/intro.txt index d2dbc06e7..734c49a1f 100644 --- a/npc/034-4/intro.txt +++ b/npc/034-4/intro.txt @@ -4,5 +4,158 @@ // Description: // Gemini Sisters Quest - Part A: Party Room +034-4,43,52,0 script #GeminiNoBack NPC_HIDDEN,0,0,{ + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(8); + npctalkonce l("Oh noes ─ the door is sealed! We can only press forward!"); + end; +} +034-4,43,51,0 script #GeminiIntro NPC_HIDDEN,2,2,{ + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(8); + if (strcharinfo(0) != getpartyleader(.@p)) end; + + if (!.state) { + .mp$ = getmap(); + .pn$ = getpartyname(getcharid(1)); + .pid = getcharid(1); + .state = true; + initnpctimer; + killmonsterall(.mp$); // Cancel everything done thus far, incl. showdown + } + end; + +OnTimer1000: + .luvia = monster(.mp$, 48, 45, "Luvia Gemini", Sagratha, 1); + immortal(.luvia); + setunitdata(.luvia, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK); + end; + +OnTimer2500: + unittalk(.luvia, "Well, well, well, look at what we have here!"); + end; + +OnTimer6000: + unittalk(.luvia, "If it isn't the so-called \"%s\"!", .pn$); + end; + +OnTimer9500: + unittalk(.luvia, "I'm sure it was a long journey to reach here, and well, this IS an Inn."); + end; + + +OnTimer13000: + unittalk(.luvia, "Where are my manners, of course I'll offer you room to sleep..."); + end; + + +OnTimer16500: + unittalk(.luvia, "...Yes, I'll put all of you to sleep... PERMANENTLY! Hahahaha!"); + .@pi = getmapusers(.mp$) + 2; + areamonster(.mp$, 45, 40, 54, 45, strmobinfo(1, Scar), Scar, .@pi / 2); + end; + +OnTimer20000: + .@pi = getmapusers(.mp$) + 1; + areamonster(.mp$, 45, 40, 54, 45, strmobinfo(1, Scar), Scar, .@pi); + unittalk(.luvia, "HAHAHahahaha!"); + unitwalk(.luvia, 50, 29); + end; + +OnTimer24000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi); + end; + +OnTimer28000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi); + unitwarp(.luvia, "034-4", 45, 45); + end; + +OnTimer25000: + unitkill(.luvia); + end; + +OnTimer50000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi * 3 / 2); + end; + +OnTimer150000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi * 3 / 2); + monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi); + end; + +OnTimer300000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi * 3 / 2); + monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi); + monster(.mp$, 43, 52, strmobinfo(1, Terranite), Terranite, 1+(.@pi/2)); + end; + +OnTimer480000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, 1+(.@pi/2)); + monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, 1+(.@pi/2)); + monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, 1+(.@pi/2)); + monster(.mp$, 50, 29, strmobinfo(1, Terranite), Terranite, .@pi); + monster(.mp$, 43, 52, strmobinfo(1, Forain), Forain, .@pi); + monster(.mp$, 37, 33, strmobinfo(1, AzulSkullSlime), AzulSkullSlime, .@pi); + end; + +OnTimer540000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, Terranite), Terranite, .@pi); + monster(.mp$, 43, 52, strmobinfo(1, BlackSlimeMother), BlackSlimeMother, .@pi); + monster(.mp$, 37, 33, strmobinfo(1, BlackMamba), BlackMamba, .@pi + 1); + end; + +OnTimer600000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 50, 29, strmobinfo(1, GoboBear), GoboBear, 1+(.@pi/2)); + $@VALIA_STATUS[.pid] = 10; + stopnpctimer; + end; + +OnInit: +OnInstanceInit: + .state = false; + .mp$ = ""; + .pn$ = ""; + .pid = 0; + .luvia = 0; + end; +} + + +034-4,50,29,0 script #GeminiPartB NPC_HIDDEN,0,0,{ + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(8); + .@p=getcharid(1); + if (mobcount(getmap(), "all") > 0 || $@VALIA_STATUS[.@p] < 10) { + dispbottom l("Uh? I can't pass. I wonder why."); + end; + } + if (mobcount(getmap(), "all") <= 0 && $@VALIA_STATUS[.@p] == 10) { + $@VALIA_STATUS[.@p]=11; + } + if ($@VALIA_STATUS[.@p] >= 11) { + slide 33, 81; + } + end; +} |