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
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
|
//#############################################
// author: alastrim, PjotrOrial
//#############################################
// This npc teaches you the speed skill.
// used variables:
// QUEST_MIRIAM:
// 0 either fully completed the quests in here, or not started.
// 1 you said the wrong words, she is insulted. (so you excuse and goto 2)
// 2 waiting for the ingredients
// 3 you brought the needed stuff. if you meet other criteria (BaseLevel, agi) you will be taught the skill
// 4 you have met the criteria of 3, but declined to take the speed test.
// 5 you tried the quest but you failed
// QUEST_MIRIAM_start
// a time in ticks. This is only !=0 if you started running to pachua.
// QUEST_MIRIAM_run
// when you reach pachua, he stores the difference of start and arrival in here.
//#############################################
// after you gained the speed skill, all variables are reset to zero.
//#############################################
006-1,115,111,0|script|Miriam|175
{
setarray @npc_loc, 115, 111, 2;
callfunc "PCtoNPCRange";
if (@npc_check)
goto L_Close;
if (getskilllv(SKILL_SPEED)) goto L_fast;
if (getequipid(equip_torso) < 0) goto L_naked;
if (QUEST_MIRIAM == 0) goto L_intro;
if (QUEST_MIRIAM == 1) goto L_ask1;
if (QUEST_MIRIAM == 2) goto L_ask2;
if (QUEST_MIRIAM == 3) goto L_teach;
if (QUEST_MIRIAM == 4) goto L_testoffer;
if (QUEST_MIRIAM_run != 0) goto L_checktime;
if (QUEST_MIRIAM_start != 0) goto L_wasting;
if (QUEST_MIRIAM == 5) goto L_testoffer;
goto L_intro;
L_intro:
mes "You see a woman sitting in the hot sand with eyes wide open... But she does not seem to be looking at something in particular...";
next;
menu
"Ehr... Hi, my name is " +strcharinfo(0)+ ". Are you OK?",L_Next;
L_Next:
mes "[Miriam]";
mes "\"...";
next;
menu
"Hello?",L_Continue;
L_Continue:
mes "[Miriam]";
mes "\"Yes, I am. Why? Do you think I am not OK? I am OK. You interrupted my meditation. Now I will need hours to calm down and stay quiet! Yes, yes, I know, I'm a fast talker!\"";
next;
mes "\"In fact, I am fast in everything I do! I can kill a Mountain Snake before it even starts to think about attacking me! Yes my friend, in a battle, speed is power!";
next;
menu
"Wow! Very impressi...",L_More;
L_More:
mes "[Miriam]";
mes "\"Yes, yes, I know. But if there is one thing I am NOT good at, it is meditation! My master said I need to meditate, but... Ohh! So difficult to stay quiet! And when you FINALLY do, someone INTERRUPTS you, asking if you are 'OK'...\"";
next;
menu
"Oh, I am sorry! I didn't know you were meditating...",L_WallText;
L_WallText:
mes "[Miriam]";
mes "\"You are really sorry? Ok, but that is not enough... I need you to do something for me. As you can imagine, I will need a lot of time to concentrate and get back to the state I was when you interrupted me.\"";
next;
mes "\"But the problem is that I wasn't expecting to be here for so long, so I will need some food and something to drink.\"";
next;
mes "\"So, if you really want to prove that you are sorry, bring me 5 Concentration Potions and 10 Snake Tongues.\"";
next;
menu
"Ok, but those potions will not help with your mental concent...",L_MoreTalking,
"Sorry, but I can't help you right now.",L_canthelp;
L_MoreTalking:
mes "[Miriam]";
mes "\"ah, ah, ah... I know what I am doing! Now run and get what I asked.\"";
set QUEST_MIRIAM, 2;
close;
L_canthelp:
mes "[Miriam]";
mes "\"Oh, really? So you better pray to not need my help in the future!\"";
set QUEST_MIRIAM, 1;
close;
L_canthelp2:
mes "[Miriam]";
mes "\"...\"";
next;
mes "\"...\"";
next;
mes "\"Well, if you don't have time to help, at least don't make things difficult for me!\"";
close;
L_ask1:
mes "[Miriam]";
mes "\"So, you are back... have you changed your mind about my request?\"";
next;
menu
"Yes, I will get what you want!",L_WillGetItems,
"No, I have no time right now.",L_canthelp2;
L_WillGetItems:
set QUEST_MIRIAM, 2;
mes "\"Good. So, run and get it!\"";
close;
L_ask2:
mes "[Miriam]";
mes "\"Did you get what I asked for?\"";
next;
menu
"Yes, here it is!",L_getitems,
"What was that again?", L_ask3,
"No, not yet.",L_Hurry;
L_Hurry:
mes "\"So please hurry up!\"";
close;
L_ask3:
mes "[Miriam]";
mes "\"You have a small mind, haven't you? I am meditating here and I asked you to bring me stuff, so I can concentrate better.\"";
next;
mes "\"And stop asking such silly questions in the future.\"";
next;
mes "\"So, if you really want to help me now, bring me 5 Concentration Potions and 10 Snake Tongues.\"";
close;
L_getitems:
if (countitem("SnakeTongue") < 10
|| countitem("ConcentrationPotion") < 5)
goto L_notenough;
delitem "SnakeTongue", 10;
delitem "ConcentrationPotion", 5;
set QUEST_MIRIAM, 3;
mes "[Miriam]";
mes "\"Good job! Now I have enough food to stay in this desert for days!\"";
next;
mes "\"Now, since you helped me, maybe I can teach you a basic skill, but only if you prove yourself to be a fast runner! Come back and talk to me when you think you are prepared to learn.\"";
close;
L_notenough:
mes "[Miriam]";
mes "\"Hey, you don't have all that I asked. Come back when you have everything.\"";
close;
L_teach:
mes "[Miriam]";
mes "\"Hmm... do you think you can learn the special Speed skill?\"";
next;
menu
"Yes, I am prepared...", L_Prepared,
"I am already fast.", L_notfast;
L_Prepared:
set @torso$, getitemlink(getequipid(equip_torso));
set @weight, MaxWeight/Weight;
if (@weight < 3)
goto L_heavyweight;
if (Agi < 60)
goto L_slow;
if (BaseLevel < 60)
goto L_lowlevel;
if (countitem("SteelShield") > 0
|| countitem("WarlordHelmet") > 0
|| countitem("CrusadeHelmet") > 0
|| countitem("WarlordPlate") > 0
|| countitem("KnightsHelmet") > 0
|| countitem("InfantryHelmet") > 0
|| countitem("ChainmailShirt") > 0
|| countitem("WarlordBoots") > 0
|| countitem("LightPlatemail") > 0
|| countitem("CandleHelmet") > 0)
goto L_heavymetal;
goto L_offer;
L_heavyweight:
mes "[Miriam]";
mes "\"Wow... Why do you bring so many things with you? You must be carrying more than one third of your own weight! I won't teach you unless you get rid of some stuff... \"";
close;
L_heavymetal:
mes "[Miriam]";
mes "\"Hmm... I see... You want to be one of those lazy slow warriors... wasting all their strength carrying kilos of metal clothes... Why does no one see the great advantages of a beautiful, flexible, lightweight armor nowadays?\"";
next;
mes "\"Come back here when you get rid of this junk...\"";
close;
L_slow:
mes "[Miriam]";
mes "Oh, wait, wait... " +Agi+ " Agility? Are you serious? What do you do with all your Character points? Put them all to 'Strength'? Really... I don't even want to know... Come back here when you have a decent character points distribution!\"";
close;
L_lowlevel:
mes "[Miriam]";
mes "\"Come back here when you are old enough. I even wonder how you could get here so unexperienced as you are.\"";
close;
L_offer:
mes "[Miriam]";
mes "\"Hmm! You look great in these clothes! They look very comfortable too... And it seems like you are not carrying too much weight.\"";
next;
if (!(getskilllv(SKILL_POOL)))
goto L_noskill;
menu
"Yes, I look really good in this " +@torso$+ ".",L_TorsoNext;
L_TorsoNext:
mes "[Miriam]";
mes "\"I see. I like the way you distributed your Character Points too... " +Agi+ " points to Agility! You really know how to prepare yourself for a good fight!\"";
next;
mes "\"Well... Even if you have a potential to be a good fighter, moving the way you do will not help. You need to be fast to avoid the monsters. \"";
next;
mes "\"So, if you pass a small test I can teach you a skill that will increase your walking speed! You will not be as fast as I am, but I am sure it will be useful.\"";
next;
menu
"I'm in! What kind of test is it?",L_test,
"I don't think I need more speed right now",L_GiveUp;
L_test:
mes "[Miriam]";
mes "\"Great! The test is simple. You need to run as fast as you can from the place where I am sitting to the mountains and talk to Pachua, the chief. When you get there and talk to Pachua, he will send a special smoke signal to me, so I can know how much time it took for you to get there.\"";
next;
mes "\"If you make it in a good time, I will teach you the special speeding skill. If not, you can always try again. So, are you ready?\"";
next;
menu
"Yes, let's do it!",L_LetsDoThis,
"No, I need to stretch my muscles first!",L_stretch;
L_LetsDoThis:
close2;
message strcharinfo(0), "Miriam quickly grabs your arm and pull you to the place where she is sitting.";
// Warp the player to the place where the NPC is defined, so he can't cheat.
warp "032-1",55,21;
npctalk "Run " +strcharinfo(0)+ ", run!";
set QUEST_MIRIAM, 5;
set QUEST_MIRIAM_start, gettimetick(2);
set QUEST_MIRIAM_cheat, 0;
end;
L_naked:
mes "[Miriam]";
mes "\"Hmmm?! Please put on some clothes before talking to me.\"";
close;
L_notfast:
mes "[Miriam]";
mes "\"Hah! If you think so...\"";
close;
L_noskill:
mes "[Miriam]";
mes "\"For a person like you, I could even teach a useful skill! Too bad you don't have the basic abillities to learn it...\"";
close;
L_GiveUp:
mes "[Miriam]";
mes "\"Oh, that is too bad... But if you change your mind, come back!\"";
set QUEST_MIRIAM, 4;
close;
L_testoffer:
mes "[Miriam]";
mes "\"Are you ready for the test now?\"";
next;
menu
"Yes!",L_test,
"Not yet.",L_Close;
L_Close:
close;
L_warning:
mes "[Miriam]";
mes "\"I know very well what you tried to do. I will not teach you the speed skill if you keep trying this kind of trick!\"";
next;
goto L_testoffer;
L_stretch:
mes "[Miriam]";
mes "\"Ok. Good idea... Stretching exercises can increase your flexibility and even prevent injuries!\"";
set QUEST_MIRIAM, 4;
close;
L_wasting:
mes "[Miriam]";
mes "\"Don't waste your time talking to me! RUN and talk to Pachua!\"";
close;
L_checktime:
if (QUEST_MIRIAM_cheat != 0)
goto L_warning;
if (QUEST_MIRIAM_run <= 210)
goto L_goodjob;
goto L_tryagain;
L_tryagain:
mes "[Miriam]";
mes "\"You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. It is not enough.\"";
set QUEST_MIRIAM_run, 0;
close;
L_goodjob:
mes "[Miriam]";
mes "\"Great job! You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. Very impressive for a person like you.\"";
next;
mes "\"Now I need you to relax. Do NOT move. This teaching process can be painful sometimes.\"";
next;
mes "Miriam stares into your eyes and starts to scream some strange words very close to your ears.";
next;
mes "You feel dizzy and as soon as you move your head and look to the ground, Miriam pushes you hard, sending you meters away from her.";
close2;
warp "032-1",55,22;
// free all used player variables. This can be done, since there is a conditional on the speedskill at the beginning.
set QUEST_MIRIAM_start, 0;
set QUEST_MIRIAM_run, 0;
set QUEST_MIRIAM, 0;
message strcharinfo(0), "[You gain 2500 experience points]";
message strcharinfo(0), "[You learned Speed Skill]";
setskill SKILL_SPEED, 1;
getexp 2500, 0;
set QUEST_MIRIAM_cheat, 0; // reset just in case it is still set.
close;
L_fast:
mes "[Miriam]";
mes "\"I hope you make a good use of your new skill... Take care!\"";
set QUEST_MIRIAM_cheat, 0; // reset just in case it is still set.
close;
}
|