summaryrefslogtreecommitdiff
path: root/npc/000-2-2
diff options
context:
space:
mode:
Diffstat (limited to 'npc/000-2-2')
-rw-r--r--npc/000-2-2/_import.txt5
-rw-r--r--npc/000-2-2/doors.txt75
-rw-r--r--npc/000-2-2/mapflags.txt1
-rw-r--r--npc/000-2-2/ratto.txt98
4 files changed, 179 insertions, 0 deletions
diff --git a/npc/000-2-2/_import.txt b/npc/000-2-2/_import.txt
new file mode 100644
index 00000000..81d32fdf
--- /dev/null
+++ b/npc/000-2-2/_import.txt
@@ -0,0 +1,5 @@
+// Map 000-2-2: Hold
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/000-2-2/doors.txt",
+"npc/000-2-2/mapflags.txt",
+"npc/000-2-2/ratto.txt",
diff --git a/npc/000-2-2/doors.txt b/npc/000-2-2/doors.txt
new file mode 100644
index 00000000..c97a7c5d
--- /dev/null
+++ b/npc/000-2-2/doors.txt
@@ -0,0 +1,75 @@
+// Evol scripts.
+// Authors:
+// Ablu
+// Alastrim
+// Jesusalva
+// Reid
+// Description:
+// Doors NPCs.
+
+000-2-2,48,29,0 script DoorUpwards NPC_HIDDEN,0,0,{
+
+OnTouch:
+ // Actually this will never work because Instanced map
+ if (mobcount("000-2-2","all") > 0) goto L_Warn;
+
+ goto L_Warp;
+
+L_Warn:
+ .@q = getq(ShipQuests_Peter);
+ if (.@q >= 15) goto L_Warp;
+
+ mesn "Narrator";
+ mesc(l("There are still some monsters left! Do you want to abort the quest?"), 9);
+ next;
+
+ menu
+ l("Yes."), L_Warp,
+ l("No."), -;
+
+ slide 48, 28;
+ closeclientdialog;
+ close;
+
+L_Warp:
+ warp "000-2-1", 72, 36;
+
+ deltimer("Peter::OnLowTime");
+ deltimer("Peter::OnTimeout");
+ closeclientdialog;
+ close;
+}
+
+// Besides the door, Alige is hiding himself and would rather not be disturbed
+000-2-2,24,31,0 script LeftDoor NPC_HIDDEN,0,0,{
+
+OnTouch:
+ mesn "Narrator";
+ mesc(l("It seems that you need a key to open this door."), 9);
+ next;
+ mesc(l("What do you want to do?"), 9);
+ next;
+
+ menu
+ rif(countitem(JohanneKey) > 0, l("Use the key.")), L_Warp,
+ l("Break the door."), L_Break,
+ l("Go away."), -;
+
+ closeclientdialog;
+ close;
+
+L_Break:
+
+ mes "";
+ mesn "Narrator";
+ mesc(l("You hear a loud scream. It must be the creaking of the wooden door..."), 9);
+
+ close;
+
+L_Warp:
+ mes "";
+ mesn "Narrator";
+ mesc(l("Wait, it seems someone is blocking the door from the other side!"), 9);
+
+ close;
+}
diff --git a/npc/000-2-2/mapflags.txt b/npc/000-2-2/mapflags.txt
new file mode 100644
index 00000000..5202b332
--- /dev/null
+++ b/npc/000-2-2/mapflags.txt
@@ -0,0 +1 @@
+000-2-2 mapflag nosave 000-2-1,50,38
diff --git a/npc/000-2-2/ratto.txt b/npc/000-2-2/ratto.txt
new file mode 100644
index 00000000..d30ccd17
--- /dev/null
+++ b/npc/000-2-2/ratto.txt
@@ -0,0 +1,98 @@
+// Evol Script.
+// Author:
+// Ablu
+// Alastrim
+// Jesusalva
+// Reid
+// Description:
+// Ratto killer.
+// The only "lose" conditions are:
+// 1- dying, but this is not handled anywhere
+// 2- Time running out, Peter handles that automatically.
+// Note that if you die here, you won't be able to return and will need to
+// start the quest over again. (I wonder why it is not handled by an OnDeath event)
+// iirc, logout will automatically destroy the instance and clear timers, so it
+// doesn't needs the script writer to handle logout cleanup (only death).
+
+000-2-2,0,0,0 script RattosControl NPC_HIDDEN,{
+ end;
+
+// Each monster on the basement have its own respawn cycle.
+// We use a XOR (^) operand to mark that the killed monster is not dead anymore.
+// This is to reproduce as accurate as possible the legacy behavior of the quest.
+OnRatto1Respawn:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2^1;
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto1Death";
+ end;
+
+OnRatto2Respawn:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2^2;
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto2Death";
+ end;
+
+OnRatto3Respawn:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2^4;
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto3Death";
+ end;
+
+OnRatto4Respawn:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2^8;
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto4Death";
+ end;
+
+// When you kill a monster on basement, we must check the mob as dead, see if you
+// finally killed the last one and quest is complete, and add a timer to respawn it
+// after 1m25s (for flavor purposes, makes quest harder though)
+OnRatto1Death:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2|1;
+ .@q2=getq2(ShipQuests_Peter);
+ if (.@q2 == 15)
+ goto L_Victor;
+ addtimer(85000, "RattosControl::OnRatto1Respawn");
+ end;
+
+OnRatto2Death:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2|2;
+ .@q2=getq2(ShipQuests_Peter);
+ if (.@q2 == 15)
+ goto L_Victor;
+ addtimer(85000, "RattosControl::OnRatto2Respawn");
+ end;
+
+OnRatto3Death:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2|4;
+ .@q2=getq2(ShipQuests_Peter);
+ if (.@q2 == 15)
+ goto L_Victor;
+ addtimer(85000, "RattosControl::OnRatto3Respawn");
+ end;
+
+OnRatto4Death:
+ .@q2=getq2(ShipQuests_Peter);
+ setq2 ShipQuests_Peter, .@q2|8;
+ .@q2=getq2(ShipQuests_Peter);
+ if (.@q2 == 15)
+ goto L_Victor;
+ addtimer(85000, "RattosControl::OnRatto4Respawn");
+ end;
+
+// This label is reached when all rattos are dead. We clear the respawn timers
+// (as we are going to delete the instance map anyway), warp you outside, and
+// from there onwards, Peter handles properly rewarding you.
+OnVictor:
+ deltimer("RattosControl::OnRatto1Respawn");
+ deltimer("RattosControl::OnRatto2Respawn");
+ deltimer("RattosControl::OnRatto3Respawn");
+ deltimer("RattosControl::OnRatto4Respawn");
+ addtimercount("Peter::OnTimeout", 5000);
+ addtimer(5000, "Peter::OnDone");
+ dispbottom l("It looks like all monsters were killed.");
+ end;
+}