summaryrefslogtreecommitdiff
path: root/npc/000-2-2/ratto.txt
blob: d30ccd1732c3f269c3fb9d51c35cf8499b617328 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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;
}