summaryrefslogblamecommitdiff
path: root/npc/003-0/wizard.txt
blob: 1b9d1e0b5435813bc55b386f83f905636752ed30 (plain) (tree)



















                                                                            
                                                                                                




















































                                                                                                     
                                                                                                                      





                                                                                                                            
                                                                                      



                                                                                                   
                                                                              


















































                                                                                                                          
                            
















                                                                                                         
                                                                                                             
                                                                                                           
                                                                                                                




                                                                                                          
                                                                               
                                                                              
                                                                              


                                                                                            
                                                                   
                                                                  
                                                                  









































                                                                                                   
                               











                                                                    
// TMW2 scripts.
// Authors:
//    Jesusalva
// Description:
//    Leader of the WIZARD class
//    TODO: Improve Fireball

003-0,55,25,0	script	Wizard Master	NPC_PLAYER,{
    if (!(MAGIC_SUBCLASS & CL_WIZARD))
        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(WIZARD_MAGE) < 2)
        goto L_Close;
    mesn;
    mesq l("Hey there! Do you want to join the Wizard 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_WIZARD;
    mesn;
    mesq l("Welcome to the wizard 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
// Wizard
//  MG_COLDBOLT (ice)
//  MG_LIGHTNINGBOLT (wind)
//  WZ_EARTHSPIKE (earth)
//  MG_NAPALMBEAT (ghost)
//  MG_ENERGYCOAT (For 5 minutes, raise damage reduction, but that eats MP)
// TODO: We have many other cool skills for Wizard (more AoE skills, more damage, etc)
// I will worry with that later, as that also means providing extra skills for Sage & Priest
// Note: the number of hits of bolts is the same as the skill level :D

L_Member:
    mesn;
    mesq l("Hey there! Do you want to learn new skills for a very small teaching fee?");
    select
        rif(sk_intcost(MG_ENERGYCOAT) && !getskilllv(MG_ENERGYCOAT), l("Learn Energy Coating")),
        rif(sk_intcost(MG_NAPALMBEAT) && sk_canlvup(MG_NAPALMBEAT), l("Improve Napalm Beat")),
        rif(sk_intcost(MG_COLDBOLT) && sk_canlvup(MG_COLDBOLT), l("Improve Cold Bolt")),
        rif(sk_intcost(MG_LIGHTNINGBOLT) && sk_canlvup(MG_LIGHTNINGBOLT), l("Improve Thunder Bolt")),
        rif(sk_intcost(WZ_EARTHSPIKE) && sk_canlvup(WZ_EARTHSPIKE), l("Improve Earth Spike")),
        rif(sk_intcost(MG_FIREBOLT) && sk_canlvup(MG_FIREBOLT), l("Improve Fire Bolt")),
        l("Leave Subclass"),
        l("Nothing at the moment.");
    mes "";
    switch (@menu) {
        case 1:
            mesc l("[Energy Coating]");
            mesc l("Drains Mana to reduce damage taken. The only defensive skill from wizards.");
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(Tentacles),        (getskilllv(MG_ENERGYCOAT)+1)*10, getitemlink(Tentacles));
            mesc l("@@/@@ @@", countitem(MushroomSpores),   (getskilllv(MG_ENERGYCOAT)+1)*5,  getitemlink(MushroomSpores));
            mesc l("@@/@@ @@", countitem(WolvernTooth),     (getskilllv(MG_ENERGYCOAT)+1)*3,  getitemlink(WolvernTooth));
            mesc l("@@/@@ @@", countitem(RedScorpionClaw),  (getskilllv(MG_ENERGYCOAT)+1)*1,  getitemlink(RedScorpionClaw));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(Tentacles)         < (getskilllv(MG_ENERGYCOAT)+1)*10 ||
                    countitem(MushroomSpores)    < (getskilllv(MG_ENERGYCOAT)+1)*5 ||
                    countitem(WolvernTooth)      < (getskilllv(MG_ENERGYCOAT)+1)*3 ||
                    countitem(RedScorpionClaw)   < (getskilllv(MG_ENERGYCOAT)+1)*1) goto L_Missing;

                delitem Tentacles,           (getskilllv(MG_ENERGYCOAT)+1)*10;
                delitem MushroomSpores,      (getskilllv(MG_ENERGYCOAT)+1)*5;
                delitem WolvernTooth,        (getskilllv(MG_ENERGYCOAT)+1)*3;
                delitem RedScorpionClaw,     (getskilllv(MG_ENERGYCOAT)+1)*1;

                sk_lvup(MG_ENERGYCOAT);

                next;
            }
            break;
        case 2:
            mesc l("[Napalm Beat]");
            mesc l("Astral attack with low damage value, but which can send ghosts to rest.");
            mesc l("Useful in PvP when your enemy have equipped a @@", getitemlink(AstralCube));
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(Acorn),            (getskilllv(MG_NAPALMBEAT)+1)*60, getitemlink(Acorn));
            mesc l("@@/@@ @@", countitem(Bread),            (getskilllv(MG_NAPALMBEAT)+1)*30, getitemlink(Bread));
            mesc l("@@/@@ @@", countitem(SmallMushroom),    (getskilllv(MG_NAPALMBEAT)+1)*20, getitemlink(SmallMushroom));
            mesc l("@@/@@ @@", countitem(PinkBlobime),      (getskilllv(MG_NAPALMBEAT)+1)*20,  getitemlink(PinkBlobime));
            mesc l("@@/@@ @@", countitem(RedApple),         (getskilllv(MG_NAPALMBEAT)+1)*15,  getitemlink(RedApple));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(Acorn)         < (getskilllv(MG_NAPALMBEAT)+1)*60 ||
                    countitem(Bread)         < (getskilllv(MG_NAPALMBEAT)+1)*30 ||
                    countitem(SmallMushroom) < (getskilllv(MG_NAPALMBEAT)+1)*20 ||
                    countitem(PinkBlobime)   < (getskilllv(MG_NAPALMBEAT)+1)*20 ||
                    countitem(RedApple)      < (getskilllv(MG_NAPALMBEAT)+1)*15) goto L_Missing;

                delitem Acorn,          (getskilllv(MG_NAPALMBEAT)+1)*60;
                delitem Bread,          (getskilllv(MG_NAPALMBEAT)+1)*30;
                delitem SmallMushroom,  (getskilllv(MG_NAPALMBEAT)+1)*20;
                delitem PinkBlobime,    (getskilllv(MG_NAPALMBEAT)+1)*20;
                delitem RedApple,       (getskilllv(MG_NAPALMBEAT)+1)*15;

                sk_lvup(MG_NAPALMBEAT);

                next;
            }
            break;
        // Magic Bolts
        case 3:
        case 4:
        case 5:
        case 6:
            setarray .@ASkill, MG_COLDBOLT, MG_LIGHTNINGBOLT, WZ_EARTHSPIKE, MG_FIREBOLT;
            setarray .@AItem, Coral, BatWing, PileOfAsh, Curshroom;
            setarray .@BItem, Sapphire, Emerald, Topaz, Ruby;
            setarray .@ASkill$, "Ice", "Wind", "Earth", "Fire";

            .@index=@menu-3;

            .@Skill$=.@ASkill$[.@index];
            .@Skill=.@ASkill[.@index];
            .@Item=.@AItem[.@index];
            .@ItemB=.@BItem[.@index];

        	deletearray(.@ASkill);
        	deletearray(.@AItem);
        	deletearray(.@BItem);
        	deletearray(.@ASkill$);

            mesc l("[@@ Bolt]", .@Skill$);
            mesc l("Causes a @@ bolt on the enemy. Number of hits is the skill level.", .@Skill$);
            mes "";
            mesn;
            mesq l("This useful skill will only require:");
            mesc l("@@/@@ @@", countitem(.@Item),       (getskilllv(.@Skill)+1)*30, getitemlink(.@Item));
            mesc l("@@/@@ @@", countitem(FluoPowder),   (getskilllv(.@Skill)+1)*10, getitemlink(FluoPowder));
            mesc l("@@/@@ @@", countitem(HerbalTea),    (getskilllv(.@Skill)+1)*3, getitemlink(HerbalTea));
            mesc l("@@/@@ @@", countitem(DiamondPowder),(getskilllv(.@Skill)+1)*2,  getitemlink(DiamondPowder));
            mesc l("@@/@@ @@", countitem(.@ItemB),      (getskilllv(.@Skill)+1)*1,  getitemlink(.@ItemB));
            next;
            if (askyesno() == ASK_YES) {
                if (
                    countitem(.@Item)           < (getskilllv(.@Skill)+1)*30 ||
                    countitem(FluoPowder)       < (getskilllv(.@Skill)+1)*10 ||
                    countitem(HerbalTea)        < (getskilllv(.@Skill)+1)*3 ||
                    countitem(DiamondPowder)    < (getskilllv(.@Skill)+1)*2 ||
                    countitem(.@ItemB)          < (getskilllv(.@Skill)+1)*1) goto L_Missing;

                delitem .@Item,         (getskilllv(.@Skill)+1)*30;
                delitem FluoPowder,     (getskilllv(.@Skill)+1)*10;
                delitem HerbalTea,      (getskilllv(.@Skill)+1)*3;
                delitem DiamondPowder,  (getskilllv(.@Skill)+1)*2;
                delitem .@ItemB,        (getskilllv(.@Skill)+1)*1;

                sk_lvup(.@Skill);

                next;
            }
            break;
        case 7:
            // 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 MG_ENERGYCOAT, 0, 0;
                    skill SA_DRAGONOLOGY, 0, 0;
                    skill MG_NAPALMBEAT, 0, 0;
                    skill MG_COLDBOLT, 0, 0;
                    skill MG_LIGHTNINGBOLT, 0, 0;
                    skill WZ_EARTHSPIKE, 0, 0;
                    skill MG_FIREBOLT, 0, 0;
                    MAGIC_SUBCLASS=MAGIC_SUBCLASS^CL_WIZARD;
                    mesc l("You abandoned the WIZARD 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, FancyHat); // TODO: wizard hat
    setunitdata(.@npcId, UDT_HEADMIDDLE, SorcererRobe);
    setunitdata(.@npcId, UDT_HEADBOTTOM, NPCEyes);
    setunitdata(.@npcId, UDT_WEAPON, JeansShorts);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 5);

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