diff options
Diffstat (limited to 'npc/000-2-2')
-rw-r--r-- | npc/000-2-2/doors.txt | 14 | ||||
-rw-r--r-- | npc/000-2-2/ratto.txt | 109 |
2 files changed, 79 insertions, 44 deletions
diff --git a/npc/000-2-2/doors.txt b/npc/000-2-2/doors.txt index 414545ef..c97a7c5d 100644 --- a/npc/000-2-2/doors.txt +++ b/npc/000-2-2/doors.txt @@ -2,6 +2,7 @@ // Authors: // Ablu // Alastrim +// Jesusalva // Reid // Description: // Doors NPCs. @@ -9,32 +10,37 @@ 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 == 5) goto L_Warp; + if (.@q >= 15) goto L_Warp; mesn "Narrator"; - mesc(l("There are still some rattos left! Do you want to abort the quest?"), 9); + mesc(l("There are still some monsters left! Do you want to abort the quest?"), 9); next; menu l("Yes."), L_Warp, l("No."), -; - warp "000-2-2", 48, 28; + 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: @@ -45,7 +51,7 @@ OnTouch: next; menu - rif(countitem(718) > 0, l("Use the key.")), L_Warp, + rif(countitem(JohanneKey) > 0, l("Use the key.")), L_Warp, l("Break the door."), L_Break, l("Go away."), -; diff --git a/npc/000-2-2/ratto.txt b/npc/000-2-2/ratto.txt index 1392d571..14f98201 100644 --- a/npc/000-2-2/ratto.txt +++ b/npc/000-2-2/ratto.txt @@ -1,68 +1,97 @@ -// Evol scripts. -// Authors: -// Ablu -// Alastrim -// Reid +// 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). -// $@RAT_SAILOR_CONTROL array explanation: -// [1] = Shows status of ratto number 1 (1 is dead and 0 is alive). -// [2] = Shows status of ratto number 2 (1 is dead and 0 is alive). -// [3] = Shows status of ratto number 3 (1 is dead and 0 is alive). -// [4] = Shows status of ratto number 4 (1 is dead and 0 is alive). -// [5] = Shows how many seconds passed since ratto number 1 died. -// [6] = Shows how many seconds passed since ratto number 2 died. -// [7] = Shows how many seconds passed since ratto number 3 died. -// [8] = Shows how many seconds passed since ratto number 4 died. -// [9] = Shows how many seconds passed since the player started the quest. - -000-2-2,47,30,0 script RattosControl NPC_HIDDEN,{ - -OnSpawn: - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto1Death"; - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto2Death"; - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto3Death"; - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto4Death"; - close; +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: - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto1Death"; - $@RAT_SAILOR_CONTROL[1] = 0; - $@RAT_SAILOR_CONTROL[5] = 0; + .@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: - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto2Death"; - $@RAT_SAILOR_CONTROL[2] = 0; - $@RAT_SAILOR_CONTROL[6] = 0; + .@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: - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto3Death"; - $@RAT_SAILOR_CONTROL[3] = 0; - $@RAT_SAILOR_CONTROL[7] = 0; + .@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: - areamonster "000-2-2", 23, 19, 50, 40, "Ratto", 1005, 1, "RattosControl::OnRatto4Death"; - $@RAT_SAILOR_CONTROL[4] = 0; - $@RAT_SAILOR_CONTROL[8] = 0; + .@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: - $@RAT_SAILOR_CONTROL[1] = 1; + .@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: - $@RAT_SAILOR_CONTROL[2] = 1; + .@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: - $@RAT_SAILOR_CONTROL[3] = 1; + .@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: - $@RAT_SAILOR_CONTROL[4] = 1; + .@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. +L_Victor: + warp "000-2-1", 72, 36; + deltimer("RattosControl::OnRatto1Respawn"); + deltimer("RattosControl::OnRatto2Respawn"); + deltimer("RattosControl::OnRatto3Respawn"); + deltimer("RattosControl::OnRatto4Respawn"); + doevent("Peter::OnDone"); end; } |