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


                


                                                                                                                        

                                                    

                                 

                                                     

       
           

                                        
                                                                                                                                  


                                                                                

                                                                                                                   
                                                                                                                      
                                                                             
                                                                                                                           
                                                         
                                                                              





                                                           
          

                              
                                                  
                                                                    



                                                              

                

                                         
                            

                                                                                





                                                              
              



                                                                                




                               
                                                                                          
           




                                                                 


                                  




                                                  



                       
                                        






                                         
                

                                        



                                                                                      
                       
 







                                                                          
 












                                                                                                              



                
       





                                                                                                 

                                                                                                          





                                                               








                                                                                       
                                                                                                                







                                                                                                                 
                                                                                                                           
         



                                                                                                                                                 
         

                                                                 
         



                                                                                                  
                                           










                                                                                                                                   
 
         





                                        
                      











                                                                                                                        
                                

                                                                                         
         



                                                                                                    












                                                                                                                                            

                                                                                                                                   
         












                                                                                                                                                                                  

                                                                                                             

          








                                                                                                                                                  
                                                                                                                                                          

          






















                                                                                                                                                  
                  
                                                                                                                                                
                       
                                                                                                                                                                                  
                       




                                                                                                                                             














                                                                                                              





                                                                                           

                                                             
                                          

                         
           

                    
                                                      
               
                                                                                       
               
                                                               
               
                                                     
               
                                                     
               
                                                                 
               









                                                                           



                                                           


          



          
                               


                                                         
                                                






                                            
// TMW2 Scripts.
// Author:
//  Jesusalva
// Description:
//  Lua is an Alliance Officer. She takes care of miscelanneous administrative tasks, including Strange Coin generation.
//  She can also change the world's hero, give Sponsor their necklace, and is part of main storyline.

003-2,38,34,0	script	Lua#003-2	NPC_FEMALE,{
    .@n = getq(General_Narrator);

    mesn;
    mesq l("Hello, I act on the Alliance's behalf.");

L_Menu:
    mes "";
    menu
        l("Ok, see you later."),L_Close,
        rif(.@n == 1, l("I was found near Candor Island, on a raft, and can't remember anything. Do you know who I am?")), L_Info,
        rif(.@n == 2, l("What you asked me for, again?")), L_Task,
        rif(.@n == 3, l("Where I needed to go, again?")), L_Complete,
        rif(.@n >= 4, l("Do you think I'm ready to go to Halinarzo?")), L_Check,
        rif(is_gm(), l("I need a GM set, please!")), L_GMItems,
        rif(is_gm() && #GMEVENT_T <= gettimetick(2), l("I plan in doing an event! Give me the coins!")), L_GMEvent,
        rif(is_gm() && #GMEVENT_T > gettimetick(2), l("Trade my coins in Gift Boxes, pretty please!")), L_GMEventShop,
        rif(is_staff(), l("Tell people the name of a new hero.")), L_NewHero,
        rif((getgmlevel() == 1 || is_admin()) && #T_SPONSOR <= gettimetick(2), l("I want a Sponsor Necklace.")), L_Sponsor,
        l("Do you have any tips for beginners?"), L_Tips,
        l("I am a contributor, and I want contributor stuff."), L_Contributor,
        l("What alliance?"),-;
    mes "";
    mesn;
    mesq l("The Alliance which was formed after the war!");
    close;

L_GMItems:
    getitembound GMRobe, 1, 1;
    getitembound GMCap, 1, 1;
    logmes(strcharinfo(0)+" just took a GM set.");
    logmes(strcharinfo(0)+" just took a GM set.", LOGMES_ATCOMMAND);
    mes "";
    mesn;
    mesq lg("Here they are, miss.", "Here they are, mister.");
    mes "";
    goto L_Menu;

L_GMEvent:
    #GMEVENT_T=gettimetick(2)+(60*60*24);
    getitem StrangeCoin, 30;
    //logmes(strcharinfo(0)+" just took thirty event coins.");
    //logmes(strcharinfo(0)+" just took thirty event coins.", LOGMES_ATCOMMAND);
    mes "";
    mesn;
    mesq lg("Here they are, miss.", "Here they are, mister.");
    mes "";
    goto L_Menu;

L_GMEventShop:
    // Inflaction: Non-admins pay more out of main events (for whatever reasons)
    .@inf=1;
    if (!is_admin() && $EVENT$ == "")
        .@inf+=1;

    // Main Code
    .@s=countitem(StrangeCoin);
    mes "";
    mesn;
    mesq l("You currently have @@ @@.", countitem(StrangeCoin), getitemlink(StrangeCoin));
    mes "";
    mesc l("@@ - @@ coins", getitemlink(BronzeGift), 10*.@inf);
    mesc l("@@ - @@ coins", getitemlink(SilverGift), 20*.@inf);
    mesc l("@@ - @@ coins", getitemlink(GoldenGift), 40*.@inf);
    mesc l("@@ - @@ coins", getitemlink(PrismGift), 80*.@inf);
    mesc l("@@ - @@ coins", getitemlink(SupremeGift), 160*.@inf);
    mes "";
    menuint
        "Return to main menu", -1,
        rif(.@s > 10*.@inf, "Bronze Gift"),  10,
        rif(.@s > 20*.@inf, "Silver Gift"),  20,
        rif(.@s > 40*.@inf, "Golden Gift"),  40,
        rif(.@s > 80*.@inf, "Prism Gift"),   80,
        rif(.@s > 160*.@inf, "Supreme Gift"), 160;

    if (@menuret == -1)
        goto L_Menu;

    delitem StrangeCoin, @menuret*.@inf;
    switch (@menuret) {
        case 10:
            getitem BronzeGift, 1; break;
        case 20:
            getitem SilverGift, 1; break;
        case 40:
            getitem GoldenGift, 1; break;
        case 80:
            getitem PrismGift, 1; break;
        case 160:
            getitem SupremeGift, 1; break;
        default:
            mesc(l("A script error happened, please report: @@", @menuret), 1); break;
    }
    goto L_GMEventShop;

L_NewHero:
    mes "";
    mes l("Current hero: @@", $MOST_HEROIC$);
    input .@MH$;
    logmes "Changing hero from "+$MOST_HEROIC$+" to "+.@MH$;
    logmes(strcharinfo(0)+" changed the world's hero.", LOGMES_ATCOMMAND);
    $MOST_HEROIC$ = .@MH$;
    goto L_Menu;

L_Sponsor:
    #T_SPONSOR=gettimetick(2)+(60*60*24*30);
    rentitem "SponsorNecklace", (60*60*24*30);
    logmes(strcharinfo(0)+" just took a Sponsor Necklace.");
    logmes(strcharinfo(0)+" just took a Sponsor Necklace.", LOGMES_ATCOMMAND);
    mes "";
    mesn;
    mesq lg("Here it is, miss.", "Here it is, mister.");
    mes col("This item will be returned in 30 days counting from now, and you will need to take another.", 9);
    mes col("It cannot be dropped, traded, sold, but you can store it and use with same account.", 9);
    mes "";
    goto L_Menu;

OnLuaInfo:
    @lua_isok=1;
    end;

L_Info:
    if (!@lua_isok) {
        mes "";
        mesn;
        mesq l("Of course, give me just a minute to look up for your data, @@.", strcharinfo(0));
        next;
        mesn;
        mesq l("Please wait here on the meanwhile. Try asking Estard about parties, or talk to Eistein.");
        //mesq l("You can explore the city on the meanwhile, I need to inspect the data.");
        if (!@lua_init) {
            @lua_init=1;
            addtimer(rand(55000,65000),"Lua#003-2::OnLuaInfo");
        }
        close;
    }
    mes "...";
    next;
    mes "... ...";
    next;
    mes "... ... ...";
    next;
    mesn;
    mesq l("No criminal record, no bank account, not even a tax payment declaration.");
    next;
    mesq l("I found your birth record, but it is not complete. Here says you were born on @@.", b("Halinarzo"));
    next;
    mesq l("The problem is that Halinarzo was destroyed in the never-ending war and was just recently rebuilt.");
    next;
    mesq l("Almost all documents were lost, destroyed or damaged. I cannot even find your parents name.");
    next;
    mesq l("All I can say is that you were born there, and moved by the age of 4, but to where? I don't know.");
    next;
    mesn;
    mesq l("Sorry. At best, you can try your luck in Halinarzo, but the odds of someone recognizing you are pretty slim.");
    next;
    mesn;
    mesq l("However...");
    mesq l("You will be killed on the road if you try to go like this. The Canyon route is dangerous, and the Swamps route claimed many souls.");
    mesq l("Not to say about bandits and robbers you'll find.");
    next;
    getexp BaseLevel*30, JobLevel*5; // Reference Levels: (10, 3)
    setq General_Narrator, 2;
    mesn;
    mesq l("Lucky for you, the Alliance have means to assist you. Please show me the following:");
    goto L_Task;

L_Task:
    mesc b(l(".:: Main Quest 2-1 ::.")), 3;
    msObjective(BaseLevel >= 20, l("* @@/@@ Base Level", BaseLevel, 20));

    msObjective(JobLevel >= 6, l("* @@/@@ Job Level", JobLevel, 6));

    msObjective(Zeny >= 1000, l("* @@/@@ GP", Zeny, 1000));

    msObjective(countitem(TulimsharGuardCard), l("* @@/@@ @@", countitem(TulimsharGuardCard), 1, getitemlink(TulimsharGuardCard)));

    msObjective(countitem(FishingRod), l("* @@/@@ @@", countitem(FishingRod), 1, getitemlink(FishingRod)));

    msObjective(countitem(LifestonePendant), l("* @@/@@ @@", countitem(LifestonePendant), 1, getitemlink(LifestonePendant)));

    next;
    if (BaseLevel >= 20 &&
        JobLevel >= 6 &&
        Zeny >= 1000 &&
        countitem(TulimsharGuardCard) &&
        countitem(FishingRod) &&
        countitem(LifestonePendant))
        goto L_Finish;

    mesn;
    if (!countitem(TulimsharGuardCard))
        mesq l("I think you should look for the Lieutenant if you want the Guard Card.");
    if (!countitem(FishingRod))
        mesq l("For the fishing rod, try looking for a fisher around here. Tricky one, this quest.");
    if (!countitem(LifestonePendant))
        mesq l("I have no idea about who would make a pendant, but lifestone can be done just outside the town walls.");
    close;

L_Finish:
    getexp BaseLevel*60, JobLevel*10; // Reference Levels: (20, 6)
    setq General_Narrator, 3, 0;
    mesn;
    mesq l("Great job! You can keep these items, they will be crucial to your journey.");
    next;
L_Complete:
    mesn;
    mesq l("You see the docks on the other side of the town? There should be a ship docked there.");
    next;
    if (!$GAME_STORYLINE < 1) {
        mesn;
        mesq l("The ship can bring you to the town of Hurnscald, but we have a problem: It is currently being occupied by a Monster Army.");
        next;
        mesn;
        mesq l("That would be your next destination, but first, the monster army must be driven out!");
        next;
        mesn;
        mesq l("The Game Masters are assembling a party to storm Hurnscald and liberate it. You should try joining it!");
        next;
        mesc l(">> Hurnscald must be Liberated first, to continue this story <<"), 1;
        close;
    }
    mesn;
    mesq l("You already got the money. Go there and pay ##B Hurnscald ##b a visit. The ##B mayor ##b should be able to help you.");
    next;
    mesn;
    mesq l("Ship travels are quite expensive, so perhaps you may think it is worth to complete the other quests here?");
    next;
    .@r=reputation("Tulim");
    mesn;
    if (.@r <= 35)
        mesq l("Try helping the city guard. Talk to NPCs around the city. Outside the city walls too. And there are some people on the mines.");
    else if (.@r <= 60)
        mesq l("You are doing some progress. There are about 4 quests on the mines, 1 outside walls, and 10 on the town. Some require level, so talk to people again sometimes.");
    else if (.@r <= 85)
        mesq l("You'll soon run out of stuff to do around here, so yeah, you should extend your horizons or you may get bored soon enough.");
    else
        mesq l("Tulimshar doesn't have a lot more of quests to offer you, so you should definitely explore new places.");
    if (BaseLevel < 30)
        mesq l("I'm sure there are a lot of sidequests here until you reach level 30, but that's optional.");
    close;

L_Tips:
    mesn;
    mesq l("Hmm... First of, I would really add some agility. Agility helps you to don't be hit, and not being hit is awesome.");
    mesq l("Hm, I would also do some quests if I needed money... On other hand, maybe I could go fishing? Do I know any fisher?");
    mesq l("Ah, getting experience is hard, too... I would stay within the city. Hit and Run tactics works the best.");
    next;
    mesn;
    mesq l("Hit'n'run is not so hard... One hit, one step back... One hit, another step back... One miss, two steps back...");
    mesq l("That works with most of monsters. Well, but we all know from @@ that it is better to stay put and let mobs kill us, right?", "Apane");
    mesq l("Heh, there is death penalty indoors and outside the town. You better watch out. The mobs are on a foul mood today, very easy to get killed.");
    close;

L_Check:
    mesn;
    mesq l("Hmm... That's a though question!");
    next;
    mesn;
    if (BaseLevel < 20)
        mesq l("Currently, you stand no chance against the Snakes on the Desert Canyon.");
    else if (BaseLevel < 25)
        mesq l("Currently, you should not attempt the Desert Canyon because low level.");
    else if (BaseLevel < 30)
        mesq l("Currently, you stand no chance against the Snakes on the Desert Canyon, but you probably can cross it.");
    else if (BaseLevel < 40)
        mesq l("I'm pretty confident you can attempt the Desert Canyon, but expect to die a few times.");
    else if (BaseLevel < 50)
        mesq l("You have a high level. Go to Halinarzo already! You could even, I don't know, search for magic?!");
    else
        mesq l("Your level is so high, I'm surprised you haven't went there already. But then, most quests around there are for your level...");
    next;
    mesn;
    mesq l("Bows are good, but if you're going to the Desert Canyon, I would instead invest on a light shield. Heavy ones make you walk slower.");
    next;
    .@r=reputation("Tulim");
    mesn;
    if (.@r <= 35)
        mesq l("Try helping the city guard. Talk to NPCs around the city. Outside the city walls too. And there are some people on the mines.");
    else if (.@r <= 60)
        mesq l("You are doing some progress. There are about 4 quests on the mines, 1 outside walls, and 10 on the town. Some require level, so talk to people again sometimes.");
    else if (.@r <= 85)
        mesq l("You'll soon run out of stuff to do around here, so yeah, you should extend your horizons or you may get bored soon enough.");
    else
        mesq l("Tulimshar doesn't have a lot more of quests to offer you, so you should definitely explore new places.");
    close;

L_Contributor:
    mes "";
    .@m = htget($@CONTRIBUTORS, strtolower(strcharinfo(0)), 0);
    if (!.@m) {
        mesn;
        mesq l("Ah... Sorry, your name is not on the contributor list.");
        next;
        mesn;
        mesq l("You can colaborate with our project though! Just ask on #tmw2-dev, be it on Discord or IRC!");
        close;
    }
    mesn;
    mesq l("Ah, welcome @@. You have @@ Contributor Points.", strcharinfo(0), .@m);
    mesq l("Let's see if you can pick a reward!");
    select
        rif(!(#CRW & 128) && .@m >= 10000, l("30x Bug Leg")),
        rif(!(#CRW & 32) && .@m >= 5000 && Zeny > 10000, l("(10,000 GP) Legendary Mount")),
        rif(!(#CRW & 16) && .@m >= 2000, l("Delicious Cookie")),
        rif(!(#CRW & 64) && .@m >= 1000, l("20x Bug Leg")),
        rif(!(#CRW & 8) && .@m >= 500, l("Developer Cap")),
        rif(!(#CRW & 4) && .@m >= 250, l("Contributor Sweater")),
        rif(!(#CRW & 2) && .@m >= 100, l("Community Shirt")),
        rif(!(#CRW & 1) && .@m, l("5x Strange Coins")),
        l("Which rewards are available?"),
        l("Ok, thanks.");

    mes "";
    switch (@menu) {
        case 1:
            getitem BugLeg, 30; #CRW=#CRW|128 ; break;
        case 2:
            Zeny=Zeny-10000; getitembound "LegendaryMount", 1, 1; #CRW=#CRW|32 ; break;
        case 3:
            getitem "DeliciousCookie", 1; #CRW=#CRW|16 ; break;
        case 4:
            getitem BugLeg, 20; #CRW=#CRW|64 ; break;
        case 5:
            getitem "DEVCap", 1; #CRW=#CRW|8 ; break;
        case 6:
            getitem "ContributorSweater", 1; #CRW=#CRW|4 ; break;
        case 7:
            getitem "CommunityShirt", 1; #CRW=#CRW|2 ; break;
        case 8:
            getitem "StrangeCoin", 5; #CRW=#CRW|1 ; break;
        case 9:
            mes l("10000 - 30x @@", getitemlink(BugLeg));
            mes l("5000 (+10,000 GP) - @@", getitemlink(LegendaryTortuga));
            mes l("2000 - @@", getitemlink(DeliciousCookie));
            mes l("1000 - 20x @@", getitemlink(BugLeg));
            mes l("500 - @@", getitemlink(DEVCap));
            mes l("250 - @@", getitemlink(ContributorSweater));
            mes l("100 - @@", getitemlink(CommunityShirt));
            next;
            goto L_Contributor;
            break;
    }
    close;

L_Close:
    close;

OnInit:
    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, NPCEyes);
    setunitdata(.@npcId, UDT_HEADMIDDLE, GMRobe);
    setunitdata(.@npcId, UDT_HEADBOTTOM, LousyMoccasins);
    setunitdata(.@npcId, UDT_WEAPON, BugSlayer);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 12);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 5);

    .sex = G_FEMALE;
    .distance = 4;
    end;
}