summaryrefslogblamecommitdiff
path: root/npc/020-2_Nivalis/baktar.txt
blob: 799fd535b63e12928ea4101d3fd47ffbacfe9be4 (plain) (tree)














































































































                                                                                                                                                                                                                        
                                                           






























































































































































































































                                                                                                                                                                                        
                                      
             
                                           























































                                                                                                                                             
//#=========================
//#== NPC Baktar
//# Authors: Lien, PjotrOrial
//# Review: BigCrunch, Mistakes
//# 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 of the opponent
//# bit 1  killed the ugly opponent
//#=========================
020-2.gat,70,61,0	script	Baktar	183,{
        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.
        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, 20000;
        set @XP_BUGLEG, 10000;

        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", -,
                "Good bye", -;
        close;

L_KnowAlready:
                mes @npcname$;
                mes "\"So, you have a new item?\"";
        goto L_startitem;
close;

L_exotic:
                mes @npcname$;
                mes "\"I said that because I love Tulimshar's stuff ... if you give me an interesting item maybe I can give you a nice reward. But I don't need lots of stuff, I need only one example of each item.\"";
        menu        "I have some items on me maybe you'll like them ", L_startitem,
                        "Don't touch my stuff!", -,
                        "I'll get them. Bye.", -;
        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;

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;

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;

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;

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

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;

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;

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

        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_DESERSHIRT);
                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 "\"Where is your item?\"";
                close;

L_havealready:
                mes @npcname$;
                mes "\"Well, I already have one of those.\"";
                close;

S_Update_Var:
        set QUEST_Nivalis_state,
            (QUEST_Nivalis_state & ~(@Q_MASK)
                | (@Q_status << @Q_SHIFT));
        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;



//# 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;
        if (@Q_status2 == 4) goto L_2_talk4;
        // 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 ben 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 in 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 the 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?", -,
                        "Oh a packrat! By the way, is that trash over there yours?", L_2_name,
                        "Nevermind", -;
        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", -,
                        "They call me Mistakes; I am a professional killer as well. You heard about that business in the terranite cave?", -;
        mes @npcname$;
        mes "\"Alright, I see. Ok maybe I really need to calm down. Please let 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;
}