summaryrefslogtreecommitdiff
path: root/npc/functions/class.txt
blob: b1609e9bb2d6fdfa1ab52314734cc2cc86ab2f2b (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
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
340
341
342
343
344
345
346
347
348
349
350
351
352
353
// TMW-2 Script
// Author:
//    Saulc
//    Jesusalva
//  Description:
//    Handles Colin and Luca. They say exactly the same things, afterall.

// ClassID, ClassName, OtherClass, sk1, sk2
function	script	ClassMaster	{
    .@CLASS=getarg(0);
    .@CNAME$=getarg(1);
    .@OTHER=getarg(2);
    //.name$=strnpcinfo(1);

    // Skills
    .@SK_T1=getarg(3);
    .@SK_T2=getarg(4);
    mesn;
    mesq l("I am the @@ master.", .@CNAME$);
    if (!MAGIC_LVL) goto L_NoMagic;
    if (getskilllv(.@OTHER) && !is_admin()) close;
    if (getskilllv(.@CLASS) == 0) goto L_SignUp;

    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 0) goto L_Tier2;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0;

    // Sanity check
    if (getskilllv(.@SK_T1) >= 1) mesq l("Are you using my skill?");
    if (getskilllv(.@SK_T1) >= 1) close;
    close;

L_SignUp:
    next;
    mesn;
    mesq l("You have some magic power. Do you want to join the @@? ##BThis cannot be undone##b.", .@CNAME$);
    next;
    mesn;
    mesq l("We use swords and bows to protect the people, and we use magic to spice things up! Because we're strong even without it!");
    next;
    menu
        l("What do I need to do to join?"), L_JoinReq,
        l("I'm not interested, sorry."), -;
    close;

L_JoinReq:
    mesn;
    mesq l("Ah, nothing too major, as you already have magic.");
    next;
    mesn;
    mesq l("We only require a small fee of 1 @@, or 40 @@", getitemlink(DivineApple), getitemlink(SnakeEgg));
    next;
    switch(select(
        rif(countitem(DivineApple) >= 1, l("I got the apple.")),
        rif(countitem(SnakeEgg) >= 40, l("I got the eggs.")),
        l("I will apply later."))) {

        case 1:
            delitem DivineApple, 1;
            goto L_Tier1Ok;
            break;
        case 2:
            // If player had 40 eggs, and eat 1 - they are clearly cheating.
            // It will delete all 39 eggs, and when it tries to delete the 40th,
            // it won't find and will terminate the script. No lame cheating.
            // Of course, all 39 eggs are gone for and I can't do anything about it.
            delitem SnakeEgg, 40;
            goto L_Tier1Ok;
            break;
        default:
            break;
    }

    close;

L_Tier1Ok:
    // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1.
    skill(.@SK_T1,1,0);
    skill(.@CLASS,1,0);
    mes "";
    mesn;
    mesq l("Here, learn the ##BFalkon Punch##b. It is on Physical skills tab. You can drag it to the shortcut list. Use it to protect people!");
    close;

L_NoMagic:
    next;
    mesn;
    mesq l("Your lack of magical power is critical. I dare say, you might never in your life get access to a Mana Stone.");
    next;
    mesn;
    mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone.");
    next;
    mesn;
    mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own.");
    close;

// progressbar("<color>", <seconds>)
// Script will be canceled if character moves :D
// So I probably could *try* to reuse TMW-BR Magic Tier 2 Scripts.
L_Tier2:
    next;
    mesn;
    mesq l("Wha, your magic power increased! How?! Ah, nevermind. You are eligible to get tier 2!");
    next;
    mesn;
    mesq l("But whoa, not so fast! You must pass the seven steps of a trial first!");
    next;
    mesn;
    mesq l("The first trial is simple, I'm not doing anything in special. Bring me 1 @@, or 200 @@ and 20 @@.", getitemlink(DivineApple), getitemlink(SilkCocoon), getitemlink(ChocolateMouboo));
    next;
    switch(select(
        rif(countitem(DivineApple) >= 1, l("I got the apple.")),
        rif(countitem(SilkCocoon) >= 200 && countitem(ChocolateMouboo) >= 20, l("I got the silk and chocolate.")),
        l("I will apply later."))) {

        case 1:
            delitem DivineApple, 1;
            goto L_Tier2Ok;
            break;
        case 2:
            delitem SilkCocoon, 200;
            delitem ChocolateMouboo, 20;
            goto L_Tier2Ok;
            break;
        default:
            break;
    }

    close;

L_Tier2Ok:
    // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1.
    addtoskill(.@SK_T1,2,0);
    getexp 10000, 0;
    ST_TIER=1;
    mes "";
    mesn;
    mesq l("Good, good. The skill you got earlier just raised a single level. I'll also impair some experience on you, no biggies.");
    next;
    mesn;
    mesq l("Now, the real challenge will start. You have a lot of raw power, but that doesn't gives you a lot of skills to learn.");
    next;
    mesn;
    mesq l("I can make a nice, simple potion for you. That will help the raw mana to settle on your body.");
    next;
    mesn;
    mesq l("However, beware! That potion is short-lived, you'll be running against time. Get ready to travel a lot.");
    next;
    if (nard_reputation() < 8) {
        mesn;
        mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you might fail right at the end.");
        next;
    }
    mesn;
    mesq l("Come talk to me when you're ready, and we can begin.");
    close;

L_T2_Fail:
    if (ST_TIER == 3) {
        if (countitem(SunnyCrystal) > 0) {
            delitem SunnyCrystal, 1;
        } else {
            mesn;
            mesc l("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST."), 1;
            next;
            mesn;
            mesc l("YOU WILL BE PENALIZED WITH 60% OF HEALTH."), 1;
            mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1;
            percentheal -60, -100;
            close;
        }
    }

    if (ST_TIER == 10) {
        if (countitem(JesusalvaGrimorium) > 0) {
            delitem JesusalvaGrimorium, 1;
        } else {
            mesn;
            mesc l("WARNING. YOU ARE CHEATING THE GRIMORIE QUEST."), 1;
            next;
            mesn;
            mesc l("YOU WILL BE PENALIZED WITH 70% OF HEALTH."), 1;
            mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1;
            percentheal -70, -100;
            close;
        }
    }

    mesc l(".:: Mission Failed ::."), 1;
    mesc l("You ran out of time."), 1;
    mes "";
    mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTEMPO,0,2));
    ST_TIER=1;
    close;

L_T2_S0:
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 1) goto L_T2_S1;
    if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail;

    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 2) goto L_T2_S2;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 3) goto L_T2_S3;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 4) goto L_T2_S4;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 5) goto L_T2_S5;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 6) goto L_T2_S6;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER <= 9) goto L_T2_S7;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 10) goto L_T2_Final;
    mesc l("Error, error, L_T2_S0 General Error, REPORT ME");
    close;

L_T2_S1:
    //.@CLASS .@CNAME$ .@OTHER
    mes "";
    mesn;
    mesq l("So, young disciple! I wish I could just chant some gibberish words and that automatically granted you more skills, but alas, that won't work.");
    next;
    if (nard_reputation() < 8) {
        mesn;
        mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you will fail right at the end.");
        next;
    }
    mesn;
    mesq l("I can, however, prepare you a potion. But beware, that potion will only last 35 minutes once baked.");
    next;
    mesn; // PiberriesInfusion
    mesq l("If it expires, you'll need to do another. To bake it I need 1 @@, 10 @@ and a @@. Have Mauve and Money, lots of it.", getitemlink(EverburnPowder), getitemlink(MaggotSlime), getitemlink(EmptyBottle));
    next;
    select
        rif(countitem(MaggotSlime) >= 10 && countitem(EverburnPowder) && countitem(EmptyBottle), l("I have everything.")),
        l("I'm not ready.");

    mes "";
    if (@menu == 2) {
        mesn;
        mesq l("Yes, as you see, the costs are high. Prepare yourself.");
        close;
    }

    delitem EmptyBottle, 1;
    delitem EverburnPowder, 1;
    delitem MaggotSlime, 10;
    ST_TIER=2;
    set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35);
    getexp 400, 0;
    mesn;
    mesc l("The class master mix the powder with the slime inside the bottle, and makes some weird mixture.");
    next;
    mesn;
    mesc l("He pours something on it, you're not sure what. He then utters some magic words.");
    next;
    // Reset timer, this is the place where it should really happen.
    set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35);
    mesn;
    mesq l("The potion is baked, you have thirty five minutes! Read as fast as you can, don't miss details!");
    next;
    mesn;
    mesq l("First thing is to get a @@. One from black market won't do, go to Halinarzo!", getitemlink(SunnyCrystal));
    next;
    mesn;
    mesq l("Speak with ##BBarzil##b. Tell him I need it, he'll give you one from my inventory. HURRY UP!");
    close;

L_T2_S2:
    mesn;
    mesq l("Hurry up! Bring my @@ from Barzil in Halinarzo!! You only have @@ left!", getitemlink(SunnyCrystal), FuzzyTime(QUEST_ELEVARTEMPO,2,2));
    close;

L_T2_S3:
    if (countitem(SunnyCrystal) == 0) {
        mesn;
        mesq l("Where's the Sunny Crystal? Hurry up, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2));
    }
    delitem SunnyCrystal, 1;
    ST_TIER=4;
    getexp 250, 0;
    mesn;
    mesq l("Good, you did it!");
    next;
    mesn;
    mesc l("*chants more words, while the crystal hovers the potion*");
    next;

L_T2_S4:
    mesn;
    mesq l("I will need many Mauve Herbs! Do you have them with you? If you don't have enough, we'll lose everything! You need at most @@!", BaseLevel+40);
    select
        rif(countitem(MauveHerb), l("Yes, I have herbs. I assume the risks.")),
        l("No I don't have herbs. I'll be back.");

    if (@menu == 2)
        close;

    if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail;
    .@req=rand(BaseLevel-20, BaseLevel+40);
    // Minimum is 40, max is unknown, defaults to 100

    mesn;
    mesq l("I need @@ Herbs!", .@req);
    //next; // If you comment this next, you'll allow players to logout and prevent penalty.
    mes "";

    if (countitem(MauveHerb) < .@req) goto L_T2_Fail;
    delitem MauveHerb, .@r;
    ST_TIER=5;
    getexp .@r*3, 0;
    //getitem MagicPotion, 1;

    mesc l("You quickly give him the herbs, and he skillfully mix them on a potion.");
    next;
    // You'll get a random amount of time, based on spent herbs
    // Usually, 10~73 sec, being 73 sec = 1m13s
    QUEST_ELEVARTEMPO=QUEST_ELEVARTEMPO+rand(10,.@r-27);

L_T2_S5:
    mesn;
    mesq l("Good! Last step! West of Hurnscald, there is a magic fountain.");
    next;
    mesn;
    mesq l("Talk to the Fountain. Pour the potion on it. I advise you to put all your points on int if possible.");
    next;
    mesn;
    mesq l("Hurry up, you'll run out of time in @@!", FuzzyTime(QUEST_ELEVARTEMPO,2,2));
    close;

L_T2_S6:
    ST_TIER=7;
    mesn;
    mesq l("You did it! You're now on the last stage of this BORING and LONG quest!");
    next;

L_T2_S7:
    mesn;
    mesq l("Jesusaves wrote a grimorie, with ancient secrets of our world.");
    next;
    mesn;
    mesq l("Captain Nard have it. Fetch it with him! Quick, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2));
    close;

// You gain two skills: Provoke (works better, but limited usability) and the class skill
L_T2_Final:
    skill(.@SK_T2,1,0);
    skill(SM_PROVOKE, 1, 0);
    addtoskill(.@CLASS,2,0);
    getexp 40000, 0; // Yes, 40k experience points. Waw.
    mesc l(".:: Congratulations! ::."), 2;
    mesc l("You advanced your tier!"), 2;
    next;
    mesn;
    mesq l("Keep the Grimorie with you. It's the proof you are now Tier 2. The book shall guide your advances!");
    next;
    mesn;
    mesq lg("Yes, courageous and worthy adventurer. You did well. I won't babysit you anymore. Embrace the new world opening before you!");
    close;

}