summaryrefslogtreecommitdiff
path: root/npc/000-2-1/peter.txt
blob: 696045cf6b494399e7dd729cd6b02cae5004b04b (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
// Evol scripts.	
// Authors:
//    4144
//    Ablu
//    Alastrim
//    Reid
//    Vasily_Makarov
// Description:
//    Rat hunter.
// 4+2 bits array:
//    ShipQuests
// Variable:
//    ShipQuests_Peter
// Values:
//    0   Doesn't know the quest.
//    1   Task given.
//    2   Task given and reward expected.
//    3   Task completed without reward.
//    4   Asked for reward after completion of the task.
//    5   Task done and reward given.
//    6   Did not start the quest.
// "000-2-2.gat" - map with mobs.
// "$@RAT_SAILOR_HELPER$" - Name of the participant.
// "$@RAT_SAILOR_DEATHS - Number of deaths when the paticipant starts the fight.
// "$@RAT_SAILOR_CONTROL" - Explanation of each index of the array:
// [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.
// [10] = Shows how many seconds passed since the player done the quest.

000-2-1.gat,72,34,0,1	script	AreaNPC	0,0,1,{

OnTouch:
    if (BaseLevel < 5) goto l_Stop;
    if ($@RAT_SAILOR_HELPER$ != "") goto l_Occupied;
    set @q, getq(ShipQuests_Peter);
    if (@q < 1 || @q > 5) goto l_Task;
    if (@q == 1 || @q == 2) goto l_Rfail;
    if (@q == 3 || @q == 4) goto l_Rwin;
    if (@q > 5) goto l_SecondTime;
    doevent "Peter::OnReturnWin";
    close;

l_Stop:
    doevent "Peter::OnStop";

    close;

l_Occupied:
    doevent "Peter::OnDontneedHelp";

    close;

l_Task:
    doevent "Peter::OnGiveTask";

    close;

l_Rfail:
    doevent "Peter::OnReturnFail";

    close;

l_Rwin:
    doevent "Peter::OnReturnWin";

}

000-2-1.gat,70,35,0,1	script	Peter	303;3,{

    if (BaseLevel < 5) goto OnTooWeak;

    set @q, getq(ShipQuests_Peter);
    if (@q == 1 || @q == 2) goto OnReturnFail;
    if (@q == 3 || @q == 4 || @q == 5)  goto OnReturnWin;
    setq ShipQuests_Peter, 6;

OnGiveTask:
    mesn;
    mesq g(l("Hey, girl!"),
           l("Hey, man!"));
    next;
    mesn;
    mesq l("I need somebody who can clean the bottom of the ship of these rattos. Can you help me?");
    next;

    menu
        l("Yeah, but what reward will I get?"), l_BonusTask,
        l("Why not, I need to train anyway."), l_Task,
        l("No, they are way too dangerous for me!"), -;

    mes "";
    mesn;
    mesq l("Ok, ok. Come back if you change your mind.");

    goto l_Quit;

OnTooWeak:
    mesn;
    mesq lg("I need help for clean the edge of the ship, but you aren't strong enough to help.");

    goto l_Quit;

OnStop:
    warp "000-2-1",72,36;

    mesn;
    mesq l("You can't go there!");

    close;

OnReturnFail:
    mesn;
    mesq l("I see it's not easy to get rid of these rattos. Do you want to try again?");
    next;

    menu
        l("Yeah, but I would like to make sure I get a reward."), l_BonusTask,
        l("Why not, I need to train anyway."), l_Task,
        l("No, they are way too dangerous for me!"), -;

    mes "";
    mesn;
    mesq l("Ok, ok. Come back if you change your mind.");

    goto l_Quit;

OnReturnWin:
    mesn;
    mesq l("Thanks again for helping me. But these rattos are a permanent problem and your help is always welcome. The only problem is that I can give you a reward only one time.");
    next;

    if (@q == 3 || @q == 4)

    menu
        l("Did you say reward? I want it!"), l_BonusTask,
        l("I am not worried about rewards. I just want to help."), l_Task,
        l("Sorry, I am not in the mood for another fight with these rattos."), -;

    if (@q == 5)

    menu
        l("No problem, I can help you anyway."), l_Task,
        l("Sorry, I am not in the mood for another fight with these rattos."), -;

    mes "";
    mesn;
    mesq l("Ok, ok. Come back if you change your mind.");

    close;

l_BonusTask:
    mes "";
    mesn;
    mesq l("I will give you @@GP.", 200);
    next;

    menu
        lg("Okay, I'm ready to work!"), -,
        l("What? This reward is too small!"), l_Quit;

    if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
    if (@q == 6) setq ShipQuests_Peter, 2;
    if (@q == 3) setq ShipQuests_Peter, 4;

    goto l_Start;

l_Task:
    mes "";
    if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
    if (@q == 6) setq ShipQuests_Peter, 1;
    goto l_Start;

l_Start:
    mes "";
    mesn;
    mesq l("Okay, you can start!");

OnStartOutside:
    if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
    set $@RAT_SAILOR_HELPER$, strcharinfo(0);
    set $@RAT_SAILOR_DEATHS, PC_DIE_COUNTER;
    initnpctimer;
    warp "000-2-2.gat", 48, 28;
    doevent "RattosControl::OnSpawn";

    goto l_Quit;

OnTimer2000:
    if (attachrid(getcharid(3,$@RAT_SAILOR_HELPER$)) == 0) goto l_Logoff;
    set $@RAT_SAILOR_CONTROL[9], $@RAT_SAILOR_CONTROL[9] + 2;
    if ($@RAT_SAILOR_CONTROL[9] > 100) goto l_Timeout;
    if (PC_DIE_COUNTER > $@RAT_SAILOR_DEATHS) goto l_Dead;
    if ($@RAT_SAILOR_CONTROL[1] && $@RAT_SAILOR_CONTROL[2] && $@RAT_SAILOR_CONTROL[3] && $@RAT_SAILOR_CONTROL[4]) goto l_Done;
    if (getmapusers("000-2-2.gat") == 0) goto l_CleaningEnd;
    goto l_CheckRattos;

    end;

l_CheckRattos:
    if ($@RAT_SAILOR_CONTROL[1]) set $@RAT_SAILOR_CONTROL[5], $@RAT_SAILOR_CONTROL[5] + 2;
    if ($@RAT_SAILOR_CONTROL[2]) set $@RAT_SAILOR_CONTROL[6], $@RAT_SAILOR_CONTROL[6] + 2;
    if ($@RAT_SAILOR_CONTROL[3]) set $@RAT_SAILOR_CONTROL[7], $@RAT_SAILOR_CONTROL[7] + 2;
    if ($@RAT_SAILOR_CONTROL[4]) set $@RAT_SAILOR_CONTROL[8], $@RAT_SAILOR_CONTROL[8] + 2;
    if ($@RAT_SAILOR_CONTROL[5] > 40) doevent "RattosControl::OnRatto1Respawn";
    if ($@RAT_SAILOR_CONTROL[6] > 40) doevent "RattosControl::OnRatto2Respawn";
    if ($@RAT_SAILOR_CONTROL[7] > 40) doevent "RattosControl::OnRatto3Respawn";
    if ($@RAT_SAILOR_CONTROL[8] > 40) doevent "RattosControl::OnRatto4Respawn";

l_NotYet:
    setnpctimer 0;

    end;

OnDontneedHelp:
    mesn;
    mesq l("I don't need your help right now, come back later.");
    next;
    mesq l("@@ is helping me.", $@RAT_SAILOR_HELPER$);

    goto l_Quit;

l_Timeout:
    mesn;
    mesq l("Hey! Be careful. You can't stay in this basement for so long, you're going to get sick. Come outside and take a break, maybe you can try again later.");
    warp "000-2-1", 72, 36;

    goto l_CleaningClose;

l_Logoff:
    goto l_CleaningEnd;

l_Dead:
// Warps the dead body outside, so it does not interfere with the getmapusers check.
    if (getmapusers("000-2-2.gat") > 0) warp "000-2-1", 61, 36;

    goto l_CleaningEnd;

l_Done:

    set $@RAT_SAILOR_CONTROL[10], $@RAT_SAILOR_CONTROL[10] + 2;
    if($@RAT_SAILOR_CONTROL[10] < 7) goto l_NotYet;
    set @q, getq(ShipQuests_Peter);
    if (@q == 2 || @q == 4) goto l_Reward;
    warp "000-2-1.gat", 72, 36;

    goto l_Thanks;

l_CleaningEnd:
    stopnpctimer;
    set $@RAT_SAILOR_HELPER$, "";
    set $@RAT_SAILOR_DEATHS, 0;
    cleararray $@RAT_SAILOR_CONTROL, 0, 10;
    killmonster "000-2-2.gat", "RattosControl::OnRatto1Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto2Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto3Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto4Death";

    end;

l_CleaningClose:
    stopnpctimer;
    set $@RAT_SAILOR_HELPER$, "";
    set $@RAT_SAILOR_DEATHS, 0;
    cleararray $@RAT_SAILOR_CONTROL, 0, 10;
    killmonster "000-2-2.gat", "RattosControl::OnRatto1Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto2Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto3Death";
    killmonster "000-2-2.gat", "RattosControl::OnRatto4Death";

    close;

l_Reward:
    mesn;
    mesq l("Good job!") + " " + l("Here's your reward!");
    getexp 100, 0;
    set zeny, zeny + 200;
    message strcharinfo(0), l("You receive 200GP!");
    setq ShipQuests_Peter, 5;

    goto l_CleaningClose;

l_Thanks:
    mesn;
    mesq l("Thanks for helping me!");
    set @q, getq(ShipQuests_Peter);
    if (@q == 1) setq ShipQuests_Peter, 3;

    goto l_CleaningClose;

l_Quit:
    set @q, 0;

    close;

}