summaryrefslogblamecommitdiff
path: root/npc/003-0/tanker.txt
blob: 0b4c443e7935c6c197067a3e9d3101931fe667b1 (plain) (tree)
1
2
3
4
5
6
7
8
9
10






                                                    
      

                     
      











                                                                            
                                                                                                


                              
                                                                                                




























                                                                                                                       
                                                                                                                  
           
                                                                                        

                                                                                                
                            



                                    


                                                                  




































                                                                                                                          


                                                                                                           



                                           


                                                                                                                      




























                                                                                                                        

                  


                                                                                                  

                                                           



                                                                                                                             


                                        



                                                                                                 
 



                                                                          
 
                                     
                                                                               



                     
























                                                                                                   






                         
                               











                                                       
// TMW2 scripts.
// Authors:
//    Jesusalva
// Description:
//    Leader of the TANKER class

003-0,38,41,2	script	Tanker Master	NPC_PLAYER,{
    /*
    if (!is_staff())
        goto L_Close;
    */
    if (!(MAGIC_SUBCLASS & CL_TANKER))
        goto L_SignUp;
    goto L_Member;

// Sign Up
L_SignUp:
    // Not allowed if subclass filled or not from main class
    if (total_subclass() >= max_subclass() || getskilllv(MAGIC_WARRIOR) < 2)
        goto L_Close;
    mesn;
    mesq l("Hey there! Do you want to join the Tanker Class?");
    mesc l("Warning: If you join a subclass, you can't leave it later!"), 1;
    mesc b(l("Warning: This class haven't been tested/balanced yet. Feedback is required!")), 1;
    next;
    if (askyesno() != ASK_YES)
        close;
    // TODO: Requeriment for signing up to a subclass? Or is the tier + skill quest hard enough?
    MAGIC_SUBCLASS=MAGIC_SUBCLASS|CL_TANKER;
    mesn;
    mesq l("Welcome to the tanker guild!");
    close;

// Close
L_Close:
    goodbye;
    closedialog;
    close;

L_Missing:
    mesn;
    mesq l("Hey hey! You don't have that stuff, CAN'T YOU READ?!");
    percentheal 0, -10;
    next;
    goto L_Member;

// Membership area
// Tanker
//  CR_TRUST (raise Max HP in 200 and Holy Resistance in 5%, passive)
//  CR_AUTOGUARD (5% chance to complety block attack. Freeze you for a while. Req. Shield. Last 5m.)
//  CR_DEFENDER (less damage from ranged attacks, but lowers move & attack speed. Req. Shield) - max lv 4 plz. Last 3m.
//  SM_RECOVERY (insignificant HP recovery every 10s without moving. Better with higher level.) - low mp cost

L_Member:
    mesn;
    mesq l("Hey there! Do you want to learn new skills for a very small teaching fee?");
    select
        rif(sk_intcost(CR_TRUST) && getskilllv(CR_TRUST) < 1+(degree_subclass()/2), l("Learn Last Standing Man")),
        "",
        //rif(sk_intcost(CR_AUTOGUARD) && sk_canlvup(CR_AUTOGUARD), l("Improve Guard")),
        rif(sk_intcost(CR_DEFENDER) && sk_canlvup(CR_DEFENDER), l("Improve Arrow Shield")),
        rif(sk_intcost(SM_RECOVERY) && sk_canlvup(SM_RECOVERY), l("Improve Standing HP Regen")),
        l("Leave Subclass"),
        l("Nothing at the moment.");
    mes "";
    switch (@menu) {
        case 1:
            mesc l("[Last Standing Man]");
            mesc l("Raises max HP and holy resistance. Passive.");
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(Cheese),            (getskilllv(CR_TRUST)+1)*50, getitemlink(Cheese));
            mesc l("@@/@@ @@", countitem(Coral),             (getskilllv(CR_TRUST)+1)*30, getitemlink(Coral));
            mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(CR_TRUST)+1)*20, getitemlink(PiberriesInfusion));
            mesc l("@@/@@ @@", countitem(FluoPowder),        (getskilllv(CR_TRUST)+1)*15, getitemlink(FluoPowder));
            mesc l("@@/@@ @@", countitem(HastePotion),       (getskilllv(CR_TRUST)+1)*10, getitemlink(HastePotion));
            mesc l("@@/@@ @@", countitem(DiamondPowder),     (getskilllv(CR_TRUST)+1)*3,  getitemlink(DiamondPowder));
            mesc l("@@/@@ @@", countitem(GrassCarp),         (getskilllv(CR_TRUST)+1)*1,  getitemlink(GrassCarp));
            mesc l("@@/@@ @@", countitem(ElixirOfLife),      (getskilllv(CR_TRUST)+1)*1,  getitemlink(ElixirOfLife));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(Cheese)               < (getskilllv(CR_TRUST)+1)*50 ||
                    countitem(Coral)                < (getskilllv(CR_TRUST)+1)*30 ||
                    countitem(PiberriesInfusion)    < (getskilllv(CR_TRUST)+1)*20 ||
                    countitem(FluoPowder)           < (getskilllv(CR_TRUST)+1)*15 ||
                    countitem(HastePotion)          < (getskilllv(CR_TRUST)+1)*10 ||
                    countitem(DiamondPowder)        < (getskilllv(CR_TRUST)+1)*3 ||
                    countitem(GrassCarp)            < (getskilllv(CR_TRUST)+1)*1 ||
                    countitem(ElixirOfLife)         < (getskilllv(CR_TRUST)+1)*1) goto L_Missing;

                delitem Cheese,             (getskilllv(CR_TRUST)+1)*50;
                delitem Coral,              (getskilllv(CR_TRUST)+1)*30;
                delitem PiberriesInfusion,  (getskilllv(CR_TRUST)+1)*20;
                delitem FluoPowder,         (getskilllv(CR_TRUST)+1)*15;
                delitem HastePotion,        (getskilllv(CR_TRUST)+1)*10;
                delitem DiamondPowder,      (getskilllv(CR_TRUST)+1)*3;
                delitem GrassCarp,          (getskilllv(CR_TRUST)+1)*1;
                delitem ElixirOfLife,       (getskilllv(CR_TRUST)+1)*1;

                sk_lvup(CR_TRUST);

                next;
            }
            break;
        case 2:
            mesc l("[Guard]");
            mesc l("Raises chance to entirely block an attack, but freezes you for a while. Req. Shield.");
            mes "";
            // TODO: Requirem, quest, agree
            sk_lvup(CR_AUTOGUARD);
            break;
        case 3:
            mesc l("[Arrow Shield]");
            mesc l("Decrease ranged damage taken for a few minutes, in exchange of agi and move speed. Req. Shield.");
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(PiouFeathers),     (getskilllv(CR_DEFENDER)+1)*60, getitemlink(PiouFeathers));
            mesc l("@@/@@ @@", countitem(PoisonArrow),      (getskilllv(CR_DEFENDER)+1)*10, getitemlink(PoisonArrow));
            mesc l("@@/@@ @@", countitem(CursedArrow),      (getskilllv(CR_DEFENDER)+1)*10, getitemlink(CursedArrow));
            mesc l("@@/@@ @@", countitem(OrangeCupcake),    (getskilllv(CR_DEFENDER)+1)*6,  getitemlink(OrangeCupcake));
            mesc l("@@/@@ @@", countitem(Mashmallow),       (getskilllv(CR_DEFENDER)+1)*5,  getitemlink(Mashmallow));
            mesc l("@@/@@ @@", countitem(Orange),           (getskilllv(CR_DEFENDER)+1)*4,  getitemlink(Orange));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(PiouFeathers)     < (getskilllv(CR_DEFENDER)+1)*60 ||
                    countitem(PoisonArrow)      < (getskilllv(CR_DEFENDER)+1)*10 ||
                    countitem(CursedArrow)      < (getskilllv(CR_DEFENDER)+1)*10 ||
                    countitem(OrangeCupcake)    < (getskilllv(CR_DEFENDER)+1)*6 ||
                    countitem(Mashmallow)       < (getskilllv(CR_DEFENDER)+1)*5 ||
                    countitem(Orange)           < (getskilllv(CR_DEFENDER)+1)*4) goto L_Missing;

                delitem PiouFeathers,  (getskilllv(CR_DEFENDER)+1)*60;
                delitem PoisonArrow,   (getskilllv(CR_DEFENDER)+1)*10;
                delitem CursedArrow,   (getskilllv(CR_DEFENDER)+1)*10;
                delitem PrangeCupcake, (getskilllv(CR_DEFENDER)+1)*6;
                delitem Mashmallow,    (getskilllv(CR_DEFENDER)+1)*5;
                delitem Orange,        (getskilllv(CR_DEFENDER)+1)*4;

                sk_lvup(CR_DEFENDER);

                next;
            }
            break;
        case 4:
            mesc l("[Standing Regen]");
            mesc l("Regenerate HP every 5 seconds, as if you were always eating a healing item.");
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(SM_RECOVERY)+1)*10, getitemlink(PiberriesInfusion));
            mesc l("@@/@@ @@", countitem(BlackMambaEgg),     (getskilllv(SM_RECOVERY)+1)*6,  getitemlink(BlackMambaEgg));
            mesc l("@@/@@ @@", countitem(MoubooSteak),       (getskilllv(SM_RECOVERY)+1)*4,  getitemlink(MoubooSteak));
            mesc l("@@/@@ @@", countitem(TonoriDelight),     (getskilllv(SM_RECOVERY)+1)*8,  getitemlink(TonoriDelight));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(PiberriesInfusion) < (getskilllv(SM_RECOVERY)+1)*10 ||
                    countitem(BlackMambaEgg)     < (getskilllv(SM_RECOVERY)+1)*6 ||
                    countitem(MoubooSteak)       < (getskilllv(SM_RECOVERY)+1)*4 ||
                    countitem(TonoriDelight)     < (getskilllv(SM_RECOVERY)+1)*8) goto L_Missing;

                delitem PiberriesInfusion, (getskilllv(SM_RECOVERY)+1)*10;
                delitem BlackMambaEgg,     (getskilllv(SM_RECOVERY)+1)*6;
                delitem MoubooSteak,       (getskilllv(SM_RECOVERY)+1)*4;
                delitem TonoriDelight,     (getskilllv(SM_RECOVERY)+1)*8;

                sk_lvup(SM_RECOVERY);
                //mesc l("This skill can be further improved with Job Points");

                next;
            }
            break;
        case 5:
            // All skills related may include the basic class skills if they're related.
            mesc l("WARNING: If you leave the subclass, you'll lose all skills related to it!"), 1;
            mesc l("This cannot be undone. Are you sure?"), 1;
            mes "";
            if (askyesno() == ASK_YES) {
                mes "";
                if (validatepin()) {
                    skill CR_TRUST, 0, 0;
                    skill CR_AUTOGUARD, 0, 0;
                    skill CR_DEFENDER, 0, 0;
                    skill SM_RECOVERY, 0, 0;
                    MAGIC_SUBCLASS=MAGIC_SUBCLASS^CL_TANKER;
                    mesc l("You abandoned the TANKER class!"), 1;
                    close;
                } else {
                    mesc l("Failed to validate pin. Aborting.");
                    next;
                }
            } else {
                mes "";
                mesc l("Operation aborted. Phew!");
                next;
            }
            break;
        default:
            goto L_Close;
    }

    goto L_Member;

OnInit:
    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, WarlordHelmet);
    setunitdata(.@npcId, UDT_HEADMIDDLE, WarlordPlate);
    setunitdata(.@npcId, UDT_HEADBOTTOM, SteelShield);
    setunitdata(.@npcId, UDT_WEAPON, JeansChaps);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 4);

    .sex=G_MALE;
    .distance=5;
    end;
}