//#=========================
//#== 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;
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;
set @run, ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
if ((@run == 3) && (@state == 13))
goto L_Deliver;
goto L_Start;
L_Deliver:
menu
"I have a delivery for you", L_Delivery;
L_Delivery:
mes "[Baktar]";
mes "\"Ahh my delivery from Tulimshar, how nice it is to get some comforts from back home.\"";
set @state, 14;
callfunc "SetKylianQuest";
goto L_Close;
L_Start:
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;
L_Close:
close;
S_Update_Var:
set QUEST_Nivalis_state,
(QUEST_Nivalis_state & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
}