summaryrefslogblamecommitdiff
path: root/npc/018-2-1/dustman.txt
blob: 36c37f653ea1eb9eb78daa7972ed138823f79186 (plain) (tree)
1
2
3
4
5
6
7
8
9
10




                    
                                   

                                                      

                             
         











                                                                                                




                                                                     
                                                                                                                                           




                                         
         
                                                                                                                                              

         

                                                                                                                                          










                                                                           

             
                                           
                                               
                   
                 
                                                                                                              



                                                                                            
                 


                                                                                       
                                 
                                                                      


                                        
                                

                           

             
                                                                                                                                  


                                                                                                
                                                                                                                                         
                                                                                                                                           






                                                                                                                                        


                                                                                                                           
                                                                                                                                       



                                   
                                              

         

          
      
           
                                       
                                       



                                                                  
                              
     

                 
         
                                                                                           
         


                             
             
                                                                                                                                                   

                                                                                                          

                                
                                                                                                                                      

                                                     
     
 
            
           



                                                                                                                                     

             
                                                                                                                          




                                    


              
                                                           
                                  


                                

                                                        
                                  
         


                                                    
                                                            

                                   


          








                                                                                                             
                                                                                                                       






                                                                                                                                  
                                                                                                                













                                                                                                                     


                
                                                             




                                       
                                   
                                
                            



             
                                                 
                                           

        
         

             
                                         
        

           

                                              

        











                                             

 
// TMW2/LoF scripts.
// Authors:
//    TMW-LoF Team
//    Jesusalva
// Description:
//    Take care of hardcore players

018-2-1,22,29,0	script	Colonel DUSTMAN	NPC_CRUSADER,{
    .@cod=getq(LoFQuest_COD);
    .@hh=getq(LoFQuest_HH);
    mesn;
    mesq l("Hello adventurer. Are you interested in the Heroes Hold, or in the Call Of Dusty?");
    next;
    select
        l("Heroes Hold"),
        l("Call Of Dusty"),
        l("Neither, sorry");
    if (@menu == 3)
        close;
    else if (@menu == 2)
        goto L_COD;

    mes "";
    if (BaseLevel < 40) {
        mesn;
        mesq l("Well, my men went down and still haven't returned.");
        next;
        mesn;
        mesq l("I'm worried with them. Anyway, I think only heroes are allowed inside, and you are a few levels short of being a Hero...");
        next;
        mesn;
        mesq l("Take care, adventurer!");
        close;
    }
    mesn;
    mesq l("This whole region is called the Heroes Hold. It's designed for hard core, bragging-rights-hunters, high level, supreme players.");
    next;
    mesn;
    mesq l("This is the main hall. Below this stairs, you'll find the Heroes Hold Main Dungeon. It's a cave in a... uhm. Water.");
    mesq l("I thought it was meant to be lava, this being in the Land Of Fire and all, but seems like someone must bug Saulc to fix it.");
    if (.@hh > 1) {
        next;
        mesn;
        mesq l("Where could my man have went?!");
        next;
        mesn;
        mesq l("Perhaps this has something to do with the factions.");
        next;
        mesn;
        mesq l("I wonder what secrets the Heroes Hold could be hiding...");
    } else if (.@hh == 1) {
        next;
        mesn;
        mesq l("Hm, good luck out there.");
        if ((getq2(LoFQuest_HH) & HH_MASTER)) {
            mes "";
            mesn;
            mesq l("I see you finished the Master Dungeon and didn't found my men. I'll think on something.");
            next;
            mesn;
            mesq l("Thanks for your help, anyway.");
            inventoryplace CrusadeHelmet, 1, MercBoxA, 5, AncientBlueprint, 2, HeroCoin, 60;
            next;
            mes "";
            mesn;
            mesc l("You can have my team's helmet, you're now officially a crusader!");
            setq1 LoFQuest_HH, 2;
            CsysNpcCraft(CrusadeHelmet, CLASS_DAMAGE_BOSS_TARGET, 10);
            getitem MercBoxA, 5;
            getitem AncientBlueprint, 2;
            getitem HeroCoin, 60;
            getexp 100000, 1000;
        }
    } else if (.@hh == 0) {
        next;
        mesn;
        mesq l("So, let's return to the business at hand. My men went down and haven't returned. That was long ago, by the way.");
        mesq l("I can send you to at least five from the seven cave levels this dungeon have.");
        next;
        mesn;
        mesq l("Do you want to try to find them? Just search the first five floors: Novice, Intermediary, Advanced, Expert and Master.");
        mesq l("The Supreme and Ultimate floors are just a WIP bonus. So if you don't find them on the five and report back, that'll do.");
        next;
        mesc l("Accept quest?");
        if (askyesno() == ASK_YES) {
            mes "";
            mesn;
            mesq l("Wonderful! You must finish Novice, Intermediary, Advanced and Expert levels before I unlock Master level for you.");
            mesq l("I don't really understand how the dungeon works. I promise you a reward when you finish the task.");
            next;
            mesc l("You need to choose a Heroes Hold Group. This currently makes absolutely no difference whatsoever."), 1;
            mesc l("However, each group may be expanded later. You can reset group by clearing the Master Floor.", 1);
            mesc l("PS. The group names still aren't set. You're free to pinch in suggestions at LoF Discord (Legacy #discussion) :>");
            next;
            select
                l("The Loyalists"),
                l("The Wildlife");
            setq LoFQuest_HH, 1, 0, (@menu-1);
        }
    }
    close;

L_COD:
    mes "";
    // First time you're hearing about?
    if (BaseLevel >= 50 && .@cod < 1) {
        mesn;
        mesq l("Hey, do you know the ##BCall Of Dusty##b event?");
        next;
        setq LoFQuest_COD, 1;
        goto L_InformationCOD;
    }

    // Begin here
    mesn;
    mesq l("Just @@ ago, thieves stole Pihro & Pyndragon weapons.", FuzzyTime(1542570030));
    next;

    // Handle initial message
    if (BaseLevel >= 50) {
        mesn;
        mesq l("Pyndragon said he'll craft a @@ to whoever reduces them to dust. Interested?", getitemlink(Dustynator)); // BottledDust, Dustynator
        mesc l("Note: Dustynator is a high level weapon. You might not have enough level to use it yet.");
        next;
    } else if (BaseLevel < 50) {
        mesn;
        mesq l("It was a real problem, threatening them to go out of business. I think they are trying to recover the lost weapons.");
        mesc l("Attain level 50 to try this quest.");
        close;
    }

L_SkipIntro:
    mes "";
    // Is the event currently active? Or is it exchange time?
    if (.state == 0) {
        mesn;
        mesq l("The event starts hourly, when the minute clock hits zero. I'll tell everyone on this room when it starts and ends.");
        next;
        mesn;
        mesc l("Do you want to exchange some of your @@ @@ for items?", countitem(BottledDust), getitemlink(BottledDust));
        mes "";
        if (askyesno() == ASK_YES) {
        openshop;
        closedialog;
        }
        close;
    }

    mesc l("Do you want to participate on Call Of Dusty?");
    // Do you want to participate?
    if (askyesno() == ASK_YES) {
        mes "";
        mesn;
        mesq l("Do you need a refresher of the rules?");
        if (askyesno() == ASK_YES) {
            goto L_InformationCOD;
        }
        closeclientdialog;
        @COD_CHECKPOINT=0;
        warp "001-10", rand(163,171), rand(119,124);
        addtimer(120000,"#COD_BossRoomCheck::OnTimeDefeat");
        dispbottom l("Good luck!");
        close;
    }
    close;

// Information about COD
L_InformationCOD:
    mes "";
    mesn;
    mesc l("Call Of Dusty is a timed event quest. It begins hourly, when the minute clock marks zero.");
    mesc l("When the boss is defeated, or the minute clock marks fifteen, event ends.");
    next;
    mesn;
    mesc l("This is a @@, meaning only the victor party will receive the great prize.", b(l("Party Quest")));
    mesc l("You will get @@ which can then be exchanged for items once CoD event quest ends.", countitem(BottledDust));
    next;
    mesn;
    mesc l("You need be at minimum level 50 to participate. It is PVP, so watch out!");
    mesc l("The first stage is on the desert canyons. You must give a full circle on the canyon in 90 seconds.");
    mesc l("The second stage is in the first cave to northwest you can find.");
    // The full circle have about 268 tiles in distance. You have the needed time to do 2.2 circles in the most efficient fashion.
    // This means you have a time worth of 590 tiles, at 150ms, granting you 90 seconds to do this quest. (everything rounded up)
    // But due a small thing called LAG and MANAPLUS DESYNC I'm now granting a whole two minutes for this stage.
    next;
    mesn;
    mesc l("Once inside the BOSS Cave, you get a five minutes time limit to slay the boss with your party.");
    mesc l("@@. PK, however, is allowed!", b(l("Only the party from the MVP will get the reward.")));
    next;
    mesc l("The MVP is the player who did more damage to the boss.");
    mesc l("The title is transferred when the MVP is killed (either in PVP or by the boss), or when time runs out.");
    next;
    mesn;
    mesc l("The boss can blind players. Blind will reduce hit rate and evasion in 25%.");
    mesc l("Form the strongest party and win! Remember that if you don't kill the boss, you'll never win!");
    next;
    goto L_SkipIntro;

OnInit:
    .sex=G_MALE;
    .distance=5;
    .state=0; // 0- Closed, 1- Open TODO begin at right state

	tradertype(NST_CUSTOM);

	// CoD Exchange Booth Selection
	sellitem Dustynator,3000;
	sellitem ArcmageBoxset,880;
	sellitem BronzeGift,100;
	sellitem HeroCoin,1;
    end;

OnMinute00:
    .state=1;
    donpcevent("#COD_BossManager::OnEventStart");
    npctalk("Call Of Dusty: Event Start!");
    end;

OnCoDEnd:
OnMinute15:
    .state=0;
    npctalk("Call Of Dusty: Event End!");
    end;

OnMinute30:
    .state=0; // fail-safe
    donpcevent("#COD_BossManager::OnCleanUp");
    end;

// CoD Exchange Booth Prices
OnCountFunds:
	setcurrency(countitem(BottledDust));
	end;

OnPayFunds:
	if( countitem(BottledDust) < @price )
		end;
	delitem BottledDust,@price;
	purchaseok();
	end;

}