summaryrefslogblamecommitdiff
path: root/npc/functions/class.txt
blob: 8cad0ec4373554f54eaa5969e2610984b8c90293 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                         
                       
                      
                           



                      
                                            

                                                  
                                                

                                                                                 
                                                                                



                                                                    













































































                                                                                                                                                     
                                                                                                                                                                                                 


                                                                
                                                                                                                  






                                    
                                    










                                                                                            
                            









                                                                                                                                     
                                                                                                            







                                                                                                                      









                                                                             
                                                                     



                                  

















                                                                        


















                                                                                 
        
                              

           
                                                                                                                                                            

         
                                                                                                                  

                              
                                                                                                                                                                                                                   














                                                                                                                          


                                                      





                                                                                                                  
                                                                    














































                                                                                                                                                           

                                                                                            




                                                     
                             
 
                                                                                          









                                                                             


                                      


















                                                                                                                       
                                                        







                                                                                                                                           


          
// TMW-2 Script
// Author:
//    Saulc
//    Jesusalva
//  Description:
//    Handles Colin and Luca. They say exactly the same things, afterall.

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

    // Skills
    .@SK_T1=getarg(3);
    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 Magic Warriors? ##BThis cannot be undone##b.");
    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;
    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;
            mes col("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST.", 1);
            next;
            mesn;
            mes col("YOU WILL BE PENALIZED WITH 60% OF HEALTH.", 1);
            mes col("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY.", 1);
            percentheal -60, -100;
            close;
        }
    }

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

    mes col(".:: Mission Failed ::.", 1);
    mes col("You ran out of time.", 1);
    mes "";
    mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTIER,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 < 8) goto L_T2_S6;
    if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER == 8) goto L_T2_S7;
    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;
    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;
    mes col("The class master mix the powder with the slime inside the bottle, and makes some weird mixture.", 9);
    next;
    mesn;
    mes col("He pours something on it, you're not sure what. He then utters some magic words.", 9);
    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;
    mes col("*chants more words, while the crystal hovers the potion*", 9);
    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;

    mes col("You quickly give him the herbs, and he skillfully mix them on a potion.", 9);
    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;
    // TODO FIXME WARNING DESYNC-ED
    // 1- Pour the potion
    // 2- Add to fountain an int check
    mesq l("Talk to the Fountain. Obey every command. 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:
    mesn;
    mesq l("You did it! You're now on the last stage of this BORING and LONG quest!");
    next;
    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;

L_T2_S7:
    addtoskill(.@CLASS,2,0);
    getexp 40000, 0; // Yes, 40k experience points. Waw.
    mes col(".:: Congratulations! ::.", 2);
    mes col("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;

}