summaryrefslogblamecommitdiff
path: root/npc/012-1/andrei.txt
blob: 046665b286e9f1b3b1535077889e2c113fa78b32 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                                   
                                                    
























































                                                                                           
                                           
                                                                 

          





                                          
















                                                                                                                             
                            
 




                    


         
                               


































                                                                              









                                               


                  










                                                                                                            

                            


        
// TMW-2 Script
// Author:
//    Jesusalva
// Description:
//    Legendary hero

// I started with 'Greetings, citzen' and then I thought on 4144.
// He would never do such formal, hero-ish introduction. So I decided for something
// more realistic, which sounded like a human hero (ie. a normal player).

012-1,75,58,0	script	Andrei Sakar	NPC_ANDREI,{
    // NLib_question (  )
    function NLib_question {
        //freeloop(true);
        do {
            @qid=rand(0,7);
        } while (! (2**@qid) & @sortable);
        debugmes "Question "+@qid;
        @sortable-=(2**@qid);
        setarray @ans$, $@NLIBa1$[@qid], $@NLIBa2$[@qid], $@NLIBa3$[@qid], $@NLIBa4$[@qid];
        setarray @val, $@NLIBmr1[@qid], $@NLIBmr2[@qid], $@NLIBmr3[@qid], $@NLIBmr4[@qid];
        /*
        @nm=15;
        @i=0;
        debugmes "BG WHILE S00002";
        while (@nm > 0) {
            do {
                @nai=rand(0,3);
            } while ((2**@nai) & @nm);
            debugmes "BG WS2 NODE";
            @nm-=@nai;
            @ans$[@i]=@as$[@nai];
            @val[@i]=@nai;
        }
        debugmes "BG NO FREE LOOP";
        //freeloop(false);
        */
        // Final: @ans$ ; @val ; @qid
        //        Question, menuret, QID

        mes "";
        addtimer(30000, "Andrei Sakar::OnTooLong");
        .@q=getq3(Q_NivalisLibday);
        setq3 Q_NivalisLibday, .@q-7;
        mesn;
        mesq $@NLIBqs$[@qid];
        menuint
            @ans$[0], @val[0],
            @ans$[1], @val[1],
            @ans$[2], @val[2],
            @ans$[3], @val[3];
        mes "";
        deltimer("Andrei Sakar::OnTooLong");
        if (@menuret == 1) {
            .@q=getq3(Q_NivalisLibday);
            setq3 Q_NivalisLibday, .@q+7;
            mesn;
            mesq l("That's right.");
            next;
        } else {
            mesn;
            mesq l("Sorry, but that's wrong.");
            close;
        }
        debugmes "BG END";
    // end
    }

    mesn l("Andrei Sakar, Legendary Hero");
    if ($NLIB_DAY || ($@GM_OVERRIDE && is_admin())) goto L_Quizz;

L_Default:
    if (strcharinfo(0) == $MOST_HEROIC$)
        mesq l("Hi, @@.", strcharinfo(0));
    else
        mesq l("Hi.");
    close;

L_Quizz:
    .@q=getq3(Q_NivalisLibday);
    if (.@q == 0) {
        setq3 Q_NivalisLibday, 100;
        .@q=100;
    } else if (.@q > 100) {
        goto L_Default;
    }

    mesq l("We are assembling forces to take Nivalis back.");
    mesq l("I'll make you five questions about lore and general knowledge. You'll have 30 seconds to read and answer each.");
    mesq l("If you finish everything, and answer everything right, you may get a reward.");
    mesq l("If you take too long you'll be penalized.");
    mesq l("Do you want to start?");
    next;
    if (askyesno() == ASK_NO)
        close;
    setarray @sortable, 255;

    NLib_question();
    NLib_question();
    NLib_question();
    NLib_question();
    NLib_question();


    mesn;
    .@q=getq3(Q_NivalisLibday);
    // You cannot go above 100 points.
    if (.@q > 100) {
        mesq l("...More bugs.");
        mesc l("A bug was found. Aborting script."), 1;
        close;
    } else if (.@q == 100) {
        mesq l("Congratulations. You really know about the world lore.");
        getitem HastePotion, 2;
        getitem StrengthPotion, 2;
        getitem Bread, 5;
    } else if (.@q > 90) {
        mesq l("Outstanding. Congratulations.");
        getitem HastePotion, 2;
        getitem StrengthPotion, 2;
        getitem Bread, 4;
    } else if (.@q > 75) {
        mesq l("Good, knowing the world lore is important.");
        getitem HastePotion, 1;
        getitem StrengthPotion, 1;
        getitem Bread, 4;
    } else if (.@q > 50) {
        mesq l("Good job.");
        getitem HastePotion, 1;
        getitem StrengthPotion, 1;
        getitem Bread, 2;
    } else if (.@q > 25) {
        mesq l("Well, that was bad, but at least you know a bit from story.");
        getitem Bread, 2;
    } else if (.@q > 0) {
        mesq l("Terrible. You know almost nothing from world lore...");
        getitem Bread, 1;
    } else {
        mesq l("You really should read the dialogs.");
    }
    // If you got a negative value, this will default to 1.
    getexp .@q*BaseLevel, .@q*JobLevel;
    setq3 Q_NivalisLibday, 9999;
    close;

OnTooLong:
    .@q=getq3(Q_NivalisLibday);
    setq3 Q_NivalisLibday, .@q-21;
    npctalk3 l("You took too long to answer.");
    close;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    /* Because I was lazy to calculate array size, it is hard-coded to eight questions numbered from 0 to 7.
    setarray $@NLIBqs$;
    setarray $@NLIBa1$;
    setarray $@NLIBa2$;
    setarray $@NLIBa3$;
    setarray $@NLIBa4$;
    setarray $@NLIBmr1;
    setarray $@NLIBmr2;
    setarray $@NLIBmr3;
    setarray $@NLIBmr4;
    */
    if ($FIRESOFSTEAM >= 10)
        disablenpc .name$;
    end;

}