summaryrefslogblamecommitdiff
path: root/world/map/npc/020-2/baktar.txt
blob: d47a6fe5cc4f42f7e6a502394dd9099720cf5b83 (plain) (tree)
1
2
3
4
5
6
7
8


                             
                                        



                                                                                      





















                                                                                                                    
                                                  

                                   

                                    
                              
 


                                                                 
 


                                                                    
 


                                                                                   
 


                                                                                               
 
                        
 


                               
 


                                 
 


                            
 


                              
 


                           
 


                              
 


                          
 



                            
 




                                                                                                     

                                                

              

                                                                                                                                                                                                                                                 
                     

         

                                                                                                                                                                                                                                                                                         



                                                                       

            







                                                                                           
                       

              



                                                                                           
                   

          



                                                                                  
                  

         



                                                                                            
               

      



                                                                                       
                

       



                                                                                     
                  

         



                                                                                  
                     

            

                                       
                   
        








                                      








                                                     
               

                                
          
 
                 

                                                           




                                                   
          
 
                   

                                                             




                                                     
          
 
               

                                                         




                                                 
          
 
              

                                                            





                                                   
 
           

                                                         





                                                
 
            

                                                           





                                                   
 
             

                                                        





                                                

         

                                                                                                      
          

              

                                                         
          

             



                                         
 








                                                                                                      





                                        














                                                                                                                                                                                     
          

          
















                                                                                                                                                
          

          



















                                                                                                                                                                       
          

          

                                                                         
                                                        
                                          
                                                                              


                             

                                        
          

                 


                                          

         















                                                                                            


                                                                                                                                  

       

                                                                                                                         
          

              





                                               
           
 
//#=========================
//#== NPC Baktar
//# Authors: Lien, PjotrOrial
//# Review: BigCrunch, Mistakes, Jenalya
//# This NPC has two stages:
//#
//# In the first stage you need to bring 7 different items, but only one of each kind.
//#
//# In the second stage he tells you what hard life he is living. He will be very aggressive telling you some stuff.
//# He will send you to kill Scroticular. That npc will be located in the labyrinth caves.
//# (its a mob actually, to be spawned only, if the players knows his name and his location)
//#
//# variables used:
//# @QUEST_Nivalis_state: NIBBLE0, NIBBLE1, NIBBLE2, NIBBLE3:
//# BYTE0 ( == NIBBLE0 | NIBBLE1)        stores in each bit information if that item was already brought.
//# bits:
//# bit 0        if you have met the npc already
//# bit 1        Desert Hat
//# bit 2        Desert Shirt
//# bit 3        Serf Hat
//# bit 4        tongue_Item
//# bit 5        eggs_Item
//# bit 6        skin_Item
//# bit 7        bugleg
//# NIBBLE2      store the progress after the item collecting stage:
//# =0 he will thank you for bringing all stuff.
//# =1 talking about his youth
//# =2 talking, you get the mission to hunt down Scroticular
//# =3 you get information where Scroticular can be found.
//# NIBBLE3     a bitmasking nibble for stage 2 again
//# bit 0  knows the name/location of the opponent
//# bit 1  killed the ugly opponent
//#=========================
020-2.gat,70,61,0|script|Baktar|191,
{
    set @npcname$, "[Baktar]";

    set @Q_MASK, BYTE_0_MASK;
    set @Q_SHIFT, BYTE_0_SHIFT;
    set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;

    set @Q_MASK2, NIBBLE_2_MASK;
    set @Q_SHIFT2, NIBBLE_2_SHIFT;
    set @Q_status2, ((QUEST_Nivalis_state) & @Q_MASK2) >> @Q_SHIFT2;

    set @Q_MASK2_BITS, NIBBLE_3_MASK;
    set @Q_SHIFT2_BITS, NIBBLE_3_SHIFT;
    set @Q_status2_bits, ((QUEST_Nivalis_state) & @Q_MASK2_BITS) >> @Q_SHIFT2_BITS;

    // if all bits are set, you brought him everything! Now we continue in Phase 2 of this npc.
    // this is not ready yet, so do not enable that stage
    // if(@Q_status == @Q_MASK) goto L_2_init;

    set @BIT_KNOWHIM, 0;

    set @BIT_DESERTHAT,1;
    set @MONEY_DESERTHAT, 1500;
    set @XP_DESERTHAT, 500;

    set @BIT_DESERTSHIRT,2;
    set @MONEY_DESERTSHIRT, 1500;
    set @XP_DESERTSHIRT, 600;

    set @BIT_SERFHAT,3;
    set @MONEY_SERFHAT, 800;
    set @XP_SERFHAT, 350;

    set @BIT_MS_TONGUE,4;
    set @MONEY_MS_TONGUE, 800;
    set @XP_MS_TONGUE, 350;

    set @BIT_MS_EGG,5;
    set @MONEY_MS_EGG, 800;
    set @XP_MS_EGG, 350;

    set @BIT_SNAKESKIN,6;
    set @MONEY_SNAKESKIN, 800;
    set @XP_SNAKESKIN, 350;

    set @BIT_BUGLEG,7;
    set @MONEY_BUGLEG, 20;
    set @XP_BUGLEG, 130;

    if(sex)
        set @type$, "man";
    if(!sex)
        set @type$, "woman";

    if(@Q_status & (1<<@BIT_KNOWHIM)) goto L_KnowAlready;
        mes @npcname$;
        mes "\"Hello, " +  @type$ + ", did you come from Tulimshar? Because you have a nice tan. \"";
    menu
        "Yes, I'm from Tulimshar", L_exotic,
        "Well, I just like sunbathing", L_Close,
        "Good bye", L_Close;

L_KnowAlready:
    mes @npcname$;
    mes "\"I love Tulimshar's stuff.  I'm collecting souvenirs from Tulimshar to help remind me of all the great times I had there.  If you give me an interesting item from the area, I'll give you a nice reward.  So, you have a new item?\"";
    goto L_startitem;

L_exotic:
    mes @npcname$;
    mes "\"I said that because I love Tulimshar's stuff...I'm collecting souvenirs from Tulimshar to help remind me of all the great times I had there.  If you give me an interesting item maybe I can give you a nice reward. But I don't need a lot, I just need one of each item.\"";
    menu
        "I have some items on me maybe you'll like them ", L_startitem,
        "Don't touch my stuff!", L_Close,
        "I'll get them. Bye.", L_Close;

L_startitem:
    setarray @exotic_item$, "", "", "", "", "", "", "";
    set @c, 0;
    set @Q_status, @Q_status | (1<<@BIT_KNOWHIM);
    callsub S_Update_Var;
    if (countitem("DesertHat") < 1 || @Q_status & (1<<@BIT_DESERTHAT) ) goto L_DesertShirt;
    set @exotic_item$[@c], "a Desert Hat ?";
    set @menuid[@c], 0;
    set @c, @c + 1;
    goto L_DesertShirt;

L_DesertShirt:
    if (countitem("DesertShirt") < 1 || @Q_status & (1<<@BIT_DESERTSHIRT) ) goto L_SerfHat;
    set @exotic_item$[@c], "a Desert Shirt ?";
    set @menuid[@c], 1;
    set @c, @c + 1;
    goto L_SerfHat;

L_SerfHat:
    if (countitem("SerfHat") < 1 || @Q_status & (1<<@BIT_SERFHAT) ) goto L_tongue;
    set @exotic_item$[@c], "a Serf Hat ?";
    set @menuid[@c], 2;
    set @c, @c + 1;
    goto L_tongue;

L_tongue:
    if (countitem("MountainSnakeTongue") < 1 || @Q_status & (1<<@BIT_MS_TONGUE)) goto L_egg;
    set @exotic_item$[@c], "a Mountain Snake Tongue ?";
    set @menuid[@c], 3;
    set @c, @c + 1;
    goto L_egg;

L_egg:
    if (countitem("MountainSnakeEgg") < 1 || @Q_status & (1<<@BIT_MS_EGG)) goto L_Skin;
    set @exotic_item$[@c], "a Mountain Snake Egg?";
    set @menuid[@c], 4;
    set @c, @c + 1;
    goto L_Skin;

L_Skin:
    if (countitem("SnakeSkin") < 1 || @Q_status & (1<<@BIT_SNAKESKIN)) goto L_bugleg;
    set @exotic_item$[@c], "a Snake Skin?";
    set @menuid[@c], 5;
    set @c, @c + 1;
    goto L_bugleg;

L_bugleg:
    if (countitem("BugLeg") < 1 || @Q_status & (1<<@BIT_BUGLEG)) goto L_NeverMind;
    set @exotic_item$[@c], "a Bug Leg?";
    set @menuid[@c], 6;
    set @c, @c + 1;
    goto L_NeverMind;

L_NeverMind:
    set @exotic_item$[@c], "Nevermind";
    set @menuid[@c], 6;
//menu for the item
    menu
        @exotic_item$[0], L_MenuItems,
        @exotic_item$[1], L_MenuItems,
        @exotic_item$[2], L_MenuItems,
        @exotic_item$[3], L_MenuItems,
        @exotic_item$[4], L_MenuItems,
        @exotic_item$[5], L_MenuItems,
        @exotic_item$[6], L_MenuItems;

L_MenuItems:
    set @menu, @menu -1;

    if (@menuid[@menu] == 0) goto L_DesertHat_Item;
    if (@menuid[@menu] == 1) goto L_DesertShirt_Item;
    if (@menuid[@menu] == 2) goto L_SerfHat_Item;
    if (@menuid[@menu] == 3) goto L_tongue_Item;
    if (@menuid[@menu] == 4) goto L_egg_Item;
    if (@menuid[@menu] == 5) goto L_skin_Item;
    if (@menuid[@menu] == 6) goto L_BugLegItem;
//if Never mind
    mes @npcname$;
    mes "\"Ok, goodbye then.\"";
    close;

L_DesertHat_Item:
    if(@Q_status & (1<<@BIT_DESERTHAT)) goto L_havealready;
    if (countitem("DesertHat") < 1) goto L_Noitem;
    delitem "DesertHat", 1;
    set Zeny, Zeny + @MONEY_DESERTHAT;
    getexp @XP_DESERTHAT,0;
    set @Q_status, @Q_status | (1<<@BIT_DESERTHAT);
    callsub S_Update_Var;
    close;

L_DesertShirt_Item:
    if(@Q_status & (1<<@BIT_DESERTSHIRT)) goto L_havealready;
    if (countitem("DesertShirt") < 1) goto L_Noitem;
    delitem "DesertShirt", 1;
    set Zeny, Zeny + @MONEY_DESERTSHIRT;
    getexp @XP_DESERTSHIRT,0;
    set @Q_status, @Q_status | (1<<@BIT_DESERTSHIRT);
    callsub S_Update_Var;
    close;

L_SerfHat_Item:
    if(@Q_status & (1<<@BIT_SERFHAT)) goto L_havealready;
    if (countitem("SerfHat") < 1) goto L_Noitem;
    delitem "SerfHat", 1;
    set Zeny, Zeny + @MONEY_SERFHAT;
    getexp @XP_SERFHAT,0;
    set @Q_status, @Q_status | (1<<@BIT_SERFHAT);
    callsub S_Update_Var;
    close;

L_tongue_Item:
    if(@Q_status & (1<<@BIT_MS_TONGUE)) goto L_havealready;
    if (countitem("MountainSnakeTongue") < 1) goto L_Noitem;
    delitem "MountainSnakeTongue", 1;
    set Zeny, Zeny + @MONEY_MS_TONGUE;
    getexp @XP_MS_TONGUE,0;
    set @Q_status, @Q_status | (1<<@BIT_MS_TONGUE);
    callsub S_Update_Var;
    close;

L_egg_Item:
    if(@Q_status & (1<<@BIT_MS_EGG)) goto L_havealready;
    if (countitem("MountainSnakeEgg") < 1) goto L_Noitem;
    delitem "MountainSnakeEgg", 1;
    set Zeny, Zeny + @MONEY_MS_EGG;
    getexp @XP_MS_EGG,0;
    set @Q_status, @Q_status | (1<<@BIT_MS_EGG);
    callsub S_Update_Var;
    close;

L_skin_Item:
    if(@Q_status & (1<<@BIT_SNAKESKIN)) goto L_havealready;
    if (countitem("SnakeSkin") < 1) goto L_Noitem;
    delitem "SnakeSkin", 1;
    set Zeny, Zeny + @MONEY_SNAKESKIN;
    getexp @XP_SNAKESKIN,0;
    set @Q_status, @Q_status | (1<<@BIT_SNAKESKIN);
    callsub S_Update_Var;
    close;

L_BugLegItem:
    if(@Q_status & (1<<@BIT_BUGLEG)) goto L_havealready;
    if (countitem("BugLeg") < 1) goto L_Noitem;
    delitem "BugLeg", 1;
    set Zeny, Zeny + @MONEY_BUGLEG;
    getexp @XP_BUGLEG,0;
    set @Q_status, @Q_status | (1<<@BIT_BUGLEG);
    callsub S_Update_Var;
    close;

L_Noitem:
    mes @npcname$;
    mes "\"Well, if you happen to get items from Tulimshar, see me first before you sell anything.\"";
    close;

L_havealready:
    mes @npcname$;
    mes "\"I already collected what you can offer me.\"";
    close;

S_Update_Var:
    set QUEST_Nivalis_state,
        (QUEST_Nivalis_state & ~(@Q_MASK)
        | (@Q_status << @Q_SHIFT));
    return;

//# The following stage is completely cutoff the first.
//# So there is no linking between the upper and lower part, except for one goto at the very beginning
//

L_2_init:

//# NIBBLE3     a bitmasking nibble for stage 2 again
//# bit 0  knows the name of the opponent
//# bit 1  killed the ugly opponent
    set @BIT_KNOWS_NAME, 0;
    set @BIT_KILLED_HIM, 1;

    if (@Q_status2 == 1) goto L_2_talk1;
    if (@Q_status2 == 2) goto L_2_talk2;
    if (@Q_status2 == 3) goto L_2_talk3;
    // fall through @Q_status2==0:
    // need to thank for bringing all stuff.
    mes @npcname$;
    mes "\"Thanks a lot for bringing me all this nice stuff!\"";
    next;
    mes "\"That helps me a lot. You see over there is already another set I collected: There are some pieces of the Hurnscald town. That sign there has been stolen from the inn.\"";
    next;
    mes "\"But do not tell anyone, please! I really like collecting things. And that sign is one of the first things I organized.\"";
    next;
    mes "\"So thank you for bringing me that stuff for my desert collection\"";
    next;
    mes "\"Do you have an idea how to arrange that to make it cool looking for my admirers?\"";
    next;
    set @Q_status2, 1;
    callsub S_Update_Var2;
    close;

L_2_talk1:
    mes @npcname$;
    mes "\"In my childhood I was called a packrat, because I collected old cans.\"";
    next;
    mes "\"But everybody does collect things right?\"";
    next;
    mes "\"So after I had collected way over 1000 cans, I started collecting snail-shells. Nice? Do you like that?\"";
    next;
    mes "\"Not many people like me. And I don't know why. It is nice to talk about such nice things. What did you collect in your childhood?\"";
    next;
    mes "He picks his nose";
    next;
    mes @npcname$;
    mes "\"Ok erm, talk to you later.\"";
    next;
    mes "\"Ok.\"";
    set @Q_status2, 2;
    callsub S_Update_Var2;
    close;

L_2_talk2:
    mes @npcname$;
    mes "\"Could you do me a favor? This ugly guy, who always attacked me....\"";
    next;
    mes "\"*sob*\"";
    next;
    mes "\"I was always bullied by him. You know in early childhood we were very nice friends. We played some roleplaying. He was the captain, and I was the soldier.";
    next;
    mes "\"Or another day he was the chieftain and I was the redskin.\"";
    next;
    mes "\"But to tell you the truth, HE was ALWAYS the one who directed me.\"";
    next;
    mes "\"I DO NOT LIKE THAT!\"";
    next;
    mes "\"I WANT TO BE THE LEADER!\"";
    next;
    mes "\"STOP HIM DOING NASTY THINGS\"";
    next;
    mes "\"I WANT YOU TO KILL THAT BASTARD!!\"";
    set @Q_status2, 3;
    callsub S_Update_Var2;
    close;

L_2_talk3:
    menu
        "Ok, I am a professional in doing such things", L_2_professional,
        "Hey do you really mean it? ", L_2_professional,
        "You calmed down again?", L_Close,
        "Oh a packrat! By the way, is that trash over there yours?", L_2_name,
        "Nevermind", L_Close;

L_Close:
    mes @npcname$;
    mes "\"Get out of my way, prank!\"";
    close;

L_2_professional:
    mes @npcname$;
    mes "\"What are you talking about?\"";
    goto L_2_talk3;

L_2_name:
    mes @npcname$;
    mes "\"ONE DAY I WILL GET A HUGE REVENGE!\"";
    next;
    mes "\"AND I MEAN IT!\"";
    next;
    mes "\"You see I am a dangerous killer. Last week I killed five slimes and a pinkie!\"";
    next;
    mes "He takes out a piece of paper... mumbling";
    mes "\"Ok Scroticular first, and then ...\"";
    set @Q_status2, 4;
    set @Q_status2_bits, @Q_status2_bits | (1<<@BIT_KNOWS_NAME);
    callsub S_Update_Var2;

    mes @npcname$;
    mes "\"What is your name again?\"";

    menu
        "I am sorry for the joke... Please forgive me", L_Next,
        "They call me Mistakes. I am a professional killer as well. You heard about that business in the terranite cave?", L_Next;

L_Next:
    mes @npcname$;
    mes "\"Alright, I see. Ok maybe I really need to calm down. Please leave me alone... I will try to calm down, ok?\"";
    close;

S_Update_Var2:
    set QUEST_Nivalis_state,
        (QUEST_Nivalis_state & ~(@Q_MASK2)
        | (@Q_status2 << @Q_SHIFT2));
    set QUEST_Nivalis_state,
        (QUEST_Nivalis_state & ~(@Q_MASK2_BITS)
        | (@Q_status2_bits << @Q_SHIFT2_BITS));
    return;
}