summaryrefslogtreecommitdiff
path: root/npc/002-2
diff options
context:
space:
mode:
Diffstat (limited to 'npc/002-2')
-rw-r--r--npc/002-2/_import.txt21
-rw-r--r--npc/002-2/_warps.txt19
-rwxr-xr-xnpc/002-2/bakery.txt148
-rwxr-xr-xnpc/002-2/barber.txt10
-rwxr-xr-xnpc/002-2/bleacher.txt130
-rwxr-xr-xnpc/002-2/casino.txt195
-rwxr-xr-xnpc/002-2/dedication.txt8
-rwxr-xr-xnpc/002-2/hetchel.txt417
-rwxr-xr-xnpc/002-2/imec.txt115
-rwxr-xr-xnpc/002-2/inya.txt206
-rwxr-xr-xnpc/002-2/kps.txt152
-rwxr-xr-xnpc/002-2/kylian.txt360
-rwxr-xr-xnpc/002-2/latoy.txt26
-rwxr-xr-xnpc/002-2/mapflags.txt2
-rwxr-xr-xnpc/002-2/omar.txt331
-rwxr-xr-xnpc/002-2/phaet.txt28
-rwxr-xr-xnpc/002-2/rebecca.txt82
-rwxr-xr-xnpc/002-2/shops.txt2
-rwxr-xr-xnpc/002-2/stranger.txt394
-rwxr-xr-xnpc/002-2/troupe_leader.txt61
20 files changed, 2707 insertions, 0 deletions
diff --git a/npc/002-2/_import.txt b/npc/002-2/_import.txt
new file mode 100644
index 00000000..b7dc062e
--- /dev/null
+++ b/npc/002-2/_import.txt
@@ -0,0 +1,21 @@
+// Map 002-2: Sandstorm Desert Indoors
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/002-2/_warps.txt",
+"npc/002-2/bakery.txt",
+"npc/002-2/barber.txt",
+"npc/002-2/bleacher.txt",
+"npc/002-2/casino.txt",
+"npc/002-2/dedication.txt",
+"npc/002-2/hetchel.txt",
+"npc/002-2/imec.txt",
+"npc/002-2/inya.txt",
+"npc/002-2/kps.txt",
+"npc/002-2/kylian.txt",
+"npc/002-2/latoy.txt",
+"npc/002-2/mapflags.txt",
+"npc/002-2/omar.txt",
+"npc/002-2/phaet.txt",
+"npc/002-2/rebecca.txt",
+"npc/002-2/shops.txt",
+"npc/002-2/stranger.txt",
+"npc/002-2/troupe_leader.txt",
diff --git a/npc/002-2/_warps.txt b/npc/002-2/_warps.txt
new file mode 100644
index 00000000..984973cf
--- /dev/null
+++ b/npc/002-2/_warps.txt
@@ -0,0 +1,19 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 002-2: Sandstorm Desert Indoors warps
+002-2,44,34,0 warp #002-2_44_34 0,0,002-1,73,36
+002-2,44,20,0 warp #002-2_44_20 1,0,002-2,45,78
+002-2,46,79,0 warp #002-2_46_79 1,0,002-2,43,21
+002-2,46,55,0 warp #002-2_46_55 1,0,002-2,44,109
+002-2,45,110,0 warp #002-2_45_110 1,0,002-2,45,56
+002-2,23,110,0 warp #002-2_23_110 0,0,002-1,67,30
+002-2,34,20,0 warp #002-2_34_20 0,0,002-2,79,69
+002-2,37,20,0 warp #002-2_37_20 0,0,002-2,72,31
+002-2,72,32,0 warp #002-2_72_32 0,0,002-2,37,21
+002-2,79,70,0 warp #002-2_79_70 0,0,002-2,34,21
+002-2,75,101,0 warp #002-2_75_101 0,0,002-1,109,46
+002-2,83,101,0 warp #002-2_83_101 0,0,002-1,115,46
+002-2,78,132,0 warp #002-2_78_132 0,0,002-1,114,36
+002-2,68,121,0 warp #002-2_68_121 0,0,002-1,110,28
+002-2,120,67,0 warp #002-2_120_67 0,0,002-1,99,44
+002-2,120,95,0 warp #002-2_120_95 0,0,002-1,57,36
+002-2,119,132,0 warp #002-2_119_132 0,0,002-1,57,27
diff --git a/npc/002-2/bakery.txt b/npc/002-2/bakery.txt
new file mode 100755
index 00000000..c1e9ebbe
--- /dev/null
+++ b/npc/002-2/bakery.txt
@@ -0,0 +1,148 @@
+
+002-2,21,22,0 script Riskim NPC148,{
+ mes "[Riskim]";
+ mes "";
+ mes "\"Welcome to our bakery!\"";
+
+ callfunc "KadiyaSubquestConsts";
+ if ((@Q_kadiya_status == @Q_STATUS_WANTS_CHOCOCAKE)
+ && (countitem ("MopoxCurePotion") > 0))
+ goto L_lace_chococake;
+
+ if ((@Q_kadiya_status == @Q_STATUS_WANTS_ORANGECUPCAKE)
+ && (countitem ("MopoxCurePotion") > 0))
+ goto L_lace_cupcake;
+
+ mes "\"Would you mind bringing me ##B6 acorns##b please? I need them to make flour so I can bake some chocolate cakes. I will be so delicious!\"";
+ next;
+ mes "\"Uh... I mean... the cakes will be delicious...\" %%;";
+ next;
+
+ @dq_level = 15;
+ @dq_cost = 3;
+ @dq_count = 6;
+ @dq_name$ = "Acorn";
+ @dq_friendly_name$ = "acorns";
+ @dq_money = 250;
+ @dq_exp = 50;
+
+ callfunc "DailyQuest";
+
+ next;
+ mes "\"Don't forget: our bakery is the best!\"";
+ close;
+
+L_lace_chococake:
+ next;
+ menu
+ "Thanks! Let me have a look around...", L_End,
+ "Can you put this potion into a Chocolate Cake?", L_Next,
+ "Goodbye!", L_End;
+
+L_Next:
+ mes "[Riskim]";
+ mes "";
+ mes "You take the potion out and attempt to show it to Riskim, but he takes a step back.";
+ mes "\"Oh! I remember that smell...\"";
+ mes "\"Elanore's Mopox potion, right? She made me drink that too...\"";
+ mes "He chuckles.";
+ mes "\"Yes. Well, you definitely want to hide that somehow.\"";
+ next;
+ mes "[Riskim]";
+ mes "";
+ mes "\"We'll need extra chocolate for that one. If you can give me ten pieces of chocolate, the Mopox potion, and a payment of 400 GP, I'll bake you a special Chocolate Cake that hides the taste.\"";
+ next;
+ menu
+ "I will get them for you.", L_End,
+ "Here you are!", L_Continue,
+ "Maybe later.", L_End;
+
+L_Continue:
+ if (countitem("ChocolateBar") < 10)
+ goto L_lacking_ingredients;
+ if (countitem("MopoxCurePotion") < 1)
+ goto L_lacking_ingredients;
+ if (Zeny < 400)
+ goto L_lacking_Zeny;
+ delitem "MopoxCurePotion", 1;
+ delitem "ChocolateBar", 10;
+ getitem "LacedChocolateCake", 1;
+ Zeny = Zeny - 400;
+
+ mes "[Riskim]";
+ mes "";
+ mes "\"Please have a seat!\"";
+ mes "You watch as Riskim melts the chocolate, stirs in the potion, and then glazes a cake with the mixture.";
+ mes "\"It's a bit more chocolaty than your average chocolate cake, so it should help mask that awful taste.\"";
+ next;
+ mes "[Riskim]";
+ mes "";
+ mes "Riskim hands you the cake.";
+ mes "\"Here you are! I hope this helps.\"";
+ close;
+
+L_lacking_Zeny:
+ mes "[Riskim]";
+ mes "";
+ mes "\"I'm sorry, but I have to charge 400 GP. I've got to make a living somehow.\"";
+ close;
+
+L_lacking_ingredients:
+ mes "[Riskim]";
+ mes "";
+ mes "\"Sorry, but I need both the ten Chocolate Bars and your potion for this. Please come back later when you have everything.\"";
+ close;
+
+L_lace_cupcake:
+ next;
+ menu
+ "Thanks! Let me have a look around...", L_End,
+ "Can mix a potion into an Orange Cupcake?", L_More,
+ "Goodbye!", L_End;
+
+L_More:
+ mes "[Riskim]";
+ mes "";
+ mes "\"Orange Cupcakes? Oh dear... I'm sorry, but I have a very bad allergy to oranges.\"";
+ next;
+ mes "[Riskim]";
+ mes "";
+ mes "\"Perhaps the Chef at Dimond's Cove can help you. We get all of our cupcakes from him.\"";
+ next;
+ goto L_End;
+
+L_End:
+ close;
+}
+
+002-2,28,31,0 script Sara NPC108,{
+ mes "[Sara]";
+ mes "";
+ mes "\"Hello!\"";
+ mes "\"If you'd like to buy something, just ask Drabur.\"";
+ mes "\"If you need something made-to-order, talk to Riskim.\"";
+ close;
+}
+
+002-2,25,22,0 shop Drabur NPC112,736:100,737:125,738:150,739:150,513:15,519:50,534:45,527:150,508:10
+
+002-2,21,28,0 script Iormo NPC160,{
+ mes "[Iormo]";
+ mes "";
+ mes "\"The cake sure is good, but this room can get messy with all the flour.\"";
+ close;
+}
+
+002-2,24,27,0 script Rynoh NPC159,{
+ mes "[Rynoh]";
+ mes "";
+ mes "\"The cakes may be expensive, but they sure are delicious!\"";
+ close;
+}
+
+002-2,26,27,0 script Ontas NPC154,{
+ mes "[Ontas]";
+ mes "";
+ mes "\"We come here almost every week! This place has some of the best bread I've ever eaten!\"";
+ close;
+}
diff --git a/npc/002-2/barber.txt b/npc/002-2/barber.txt
new file mode 100755
index 00000000..5b880e4b
--- /dev/null
+++ b/npc/002-2/barber.txt
@@ -0,0 +1,10 @@
+002-2,22,77,0 script Issay NPC156,{
+ mes "[Issay the Barber]";
+ mes "\"Want to change your hairstyle?\"";
+ next;
+ callfunc "Barber";
+ mes "[Issay the Barber]";
+ mes "\"Come again!\"";
+ close;
+}
+
diff --git a/npc/002-2/bleacher.txt b/npc/002-2/bleacher.txt
new file mode 100755
index 00000000..daea556d
--- /dev/null
+++ b/npc/002-2/bleacher.txt
@@ -0,0 +1,130 @@
+
+002-2,72,92,0 script Candide NPC156,{
+ mes "[Candide]";
+ mes "\"Greetings! I am Candide the Bleacher.";
+ mes "Tulimshar is my homeland, where I learned the ancient art of bleaching.\"";
+ next;
+ mes "\"Bleaching was originally done by the sun, but now we use ash combined with special ingredients to remove color from fabric.\"";
+ next;
+ menu
+ "What is needed for the bleaching process?", L_Materials,
+ "I'd like to bleach something.", L_bleach_menu,
+ "So long.", L_close;
+
+L_Materials:
+ mes "[Candide]";
+ mes "\"For each item, I will need 3 piles of ash and 5,000 GP for the special ingredients.\"";
+ next;
+ menu
+ "I'd like to bleach something.", L_bleach_menu,
+ "So long.", L_close;
+
+L_bleach_menu:
+ if (countitem("PileOfAsh") < 3) goto L_No_Ash;
+ if (Zeny < 5000) goto L_No_Money;
+ cleararray @CANDIDE_items,0,getarraysize(@CANDIDE_items);
+ cleararray @CANDIDE_color,0,getarraysize(@CANDIDE_color);
+ cleararray @CANDIDE_menu$,"",getarraysize(@CANDIDE_menu$);
+ @w = 0;
+ freeloop 1; // do not check for infinity loop
+ callsub S_LoopArray;
+ freeloop 0; // re-enable infinity loop check
+ @w = 0;
+ @c = 0;
+ @p = 0;
+ if(@CANDIDE_menu$[0] == "") goto L_Nothing;
+ mes "[Candide]";
+ mes "\"Yes?\"";
+ next;
+ menu
+ "Nevermind.", L_close,
+ @CANDIDE_menu$[0], L_MenuItems, // base array was too big for a dynamic menu so we can't use it
+ @CANDIDE_menu$[1], L_MenuItems,
+ @CANDIDE_menu$[2], L_MenuItems,
+ @CANDIDE_menu$[3], L_MenuItems,
+ @CANDIDE_menu$[4], L_MenuItems,
+ @CANDIDE_menu$[5], L_MenuItems,
+ @CANDIDE_menu$[6], L_MenuItems,
+ @CANDIDE_menu$[7], L_MenuItems,
+ @CANDIDE_menu$[8], L_MenuItems,
+ @CANDIDE_menu$[9], L_MenuItems,
+ @CANDIDE_menu$[10], L_MenuItems,
+ @CANDIDE_menu$[11], L_MenuItems,
+ @CANDIDE_menu$[12], L_MenuItems,
+ @CANDIDE_menu$[13], L_MenuItems,
+ @CANDIDE_menu$[14], L_MenuItems,
+ @CANDIDE_menu$[15], L_MenuItems,
+ @CANDIDE_menu$[16], L_MenuItems,
+ @CANDIDE_menu$[17], L_MenuItems;
+
+S_LoopArray:
+ @c = 0;
+ callsub S_LoopColor;
+ @w = @w + 1;
+ if(@w < getarraysize($@DYE_items$)) goto S_LoopArray;
+ return;
+
+S_LoopColor:
+ if(countitem($@DYE_colors$[@c] + $@DYE_items$[@w]) > 0)
+ goto L_AddToMenu;
+ goto L_LoopColor2;
+
+L_AddToMenu:
+ @CANDIDE_items[@p] = @w;
+ @CANDIDE_color[@p] = @c;
+ @CANDIDE_menu$[@p] = $@DYE_color_names$[@c]+" "+$@DYE_item_names$[@w];
+ @p = @p + 1;
+ goto L_LoopColor2;
+
+L_LoopColor2:
+ @c = @c + 1;
+ if(@c < getarraysize($@DYE_colors$)) goto S_LoopColor;
+ return;
+
+L_Nothing:
+ mes "[Candide]";
+ mes "\"Sorry, you have nothing to bleach.\"";
+ next;
+ goto L_close;
+
+L_MenuItems:
+ if (countitem("PileOfAsh") < 3) goto L_No_Ash;
+ if (Zeny < 5000) goto L_No_Money;
+ @m = @menu - 2;
+ @it$ = $@DYE_colors$[@CANDIDE_color[@m]] + $@DYE_items$[@CANDIDE_items[@m]];
+ if(getitemlink(@it$) == "Unknown Item") mapexit;
+ delitem @it$, 1;
+ delitem "PileOfAsh", 3;
+ Zeny = Zeny - 5000;
+ getitem $@DYE_items$[@CANDIDE_items[@m]], 1;
+ goto L_Again;
+
+L_Again:
+ mes "[Candide]";
+ mes "\"Would you like to bleach something else?\"";
+ next;
+ menu
+ "Yes.", L_bleach_menu,
+ "No.", L_close;
+
+L_No_Ash:
+ mes "[Candide]";
+ mes "\"You don't have enough ash for me to bleach anything.";
+ mes "I need three piles.\"";
+ next;
+ goto L_close;
+
+L_No_Money:
+ mes "[Candide]";
+ mes "\"You don't have enough gold for me to bleach anything.";
+ mes "I need 5,000 GP for supplies.\"";
+ next;
+ goto L_close;
+
+L_close:
+ mes "[Candide]";
+ mes "\"Come again.\"";
+ close2;
+ emotion EMOTE_GRIN, strcharinfo(0);
+ end;
+}
diff --git a/npc/002-2/casino.txt b/npc/002-2/casino.txt
new file mode 100755
index 00000000..5f123962
--- /dev/null
+++ b/npc/002-2/casino.txt
@@ -0,0 +1,195 @@
+002-2,79,68,0 script #CasinoEntrance NPC32767,13,0,{
+ QUEST_NorthTulimshar = QUEST_NorthTulimshar | $@knowCasinoNT;
+ if (QL_KYLIAN != 6)
+ goto L_End;
+ message strcharinfo(0), "You wonder if Kylian would be interested in visiting the Casino.";
+ goto L_End;
+
+L_End:
+ end;
+}
+
+002-2,86,29,0 script Valdo NPC117,{
+ mes "[Valdo the Worker]";
+ mes "\"Please let me work. I've got a lot to do and not enough time to do it!\"";
+ close;
+}
+
+002-2,84,62,0 script Slots#1 NPC400,{
+ callfunc "SlotMachine";
+ close;
+}
+
+002-2,86,62,0 script Slots#2 NPC400,{
+ callfunc "SlotMachine";
+ close;
+}
+
+002-2,88,62,0 script Slots#3 NPC400,{
+ callfunc "SlotMachine";
+ close;
+}
+
+002-2,78,56,0 shop MoneyChanger NPC124,503:10
+
+002-2,75,60,0 script BlackJack NPC107,{
+ mes "[Croupier]";
+ mes "\"Would you like to play Black Jack?";
+ mes "You will need 15 casino coins.\"";
+ next;
+ menu
+ "Sure.", L_Begin,
+ "Not now.", L_close;
+
+L_Begin:
+ if(countitem("CasinoCoins") < 15) goto L_NoCoin;
+ delitem "CasinoCoins", 15;
+ @croupier = rand(0, 4);
+ @croupier = @croupier + 17;
+ @player = rand(4, 21);
+ mes "Your cards are worth " + @player + " points.";
+ if(@player == 21) goto L_End;
+ mes "Do you want another card?\"";
+ menu
+ "Yes.", L_Another,
+ "No.", L_End;
+
+L_Another:
+ @tempace = rand(2, 11);
+ if (@tempace == 11) goto L_Ace;
+ @player = @player + @tempace;
+ if (@player > 21) goto L_Lost;
+ if (@player == 21) goto L_End;
+ mes "Your cards are worth " + @player + " points.";
+ mes "Do you want another card?\"";
+ menu
+ "Yes.", L_Another,
+ "No.", L_End;
+
+L_End:
+ if (@player <= @croupier) goto L_Lost;
+ mes "Your cards are worth " + @player + " points.";
+ mes "\"I have " + @croupier + " points.";
+ mes "Congratulations! You won!";
+ mes "You get 45 casino coins!\"";
+ getitem "CasinoCoins", 45;
+ goto L_close;
+
+L_NoCoin:
+ mes "\"Sorry, but you need at least 15 coins to play.\"";
+ goto L_close;
+
+L_Lost:
+ mes "\"I'm sorry, but you lost.";
+ mes "Your cards are worth " + @player + " points.";
+ mes "I have " + @croupier + " points.\"";
+ goto L_close;
+
+L_Ace:
+ @player = @player + 11;
+ if (@player > 21) set @player, @player - 10;
+ if (@player > 21) goto L_Lost;
+ if (@player == 21) goto L_End;
+ mes "Your cards are worth " + @player + " points.";
+ mes "Do you want to take another card?";
+ menu
+ "Yes", L_Another,
+ "No", L_End;
+
+L_close:
+ mes "\"Be sure to come back again.\"";
+ @croupier = 0;
+ @player = 0;
+ @tempace = 0;
+ close;
+}
+
+002-2,69,67,0 script Roulette NPC107,{
+ mes "[Croupier]";
+ mes "\"Good evening monsieur...";
+ mes "How much would you like to bet?\"";
+ next;
+ menu
+ "1 coin", L_b1,
+ "5 coins", L_b5,
+ "10 coins", L_b10,
+ "50 coins", L_b50,
+ "100 coins", L_b100,
+ "Maybe I'll play later.", L_close;
+
+L_b1:
+ @bet = 1;
+ goto L_Check;
+
+L_b5:
+ @bet = 5;
+ goto L_Check;
+
+L_b10:
+ @bet = 10;
+ goto L_Check;
+
+L_b50:
+ @bet = 50;
+ goto L_Check;
+
+L_b100:
+ @bet = 100;
+ goto L_Check;
+
+L_Check:
+ if(countitem("CasinoCoins") < @bet) goto L_NoCoin;
+ menu
+ "Choose a color...", L_PickColor,
+ "Choose a number...", L_Number;
+
+L_PickColor:
+ menu
+ "Black.", L_Color,
+ "Red.", L_Color;
+
+L_Color:
+ delitem "CasinoCoins", @bet;
+ @color = rand(2);
+ if(@color == 1) goto L_Lost;
+ mes "You won!";
+ getitem "CasinoCoins", @bet * 2;
+ goto L_close;
+
+L_Number:
+ menu
+ "0", L_MenuItems, "00", L_MenuItems, "1", L_MenuItems, "2", L_MenuItems, "3", L_MenuItems, "4", L_MenuItems, "5", L_MenuItems, "6", L_MenuItems, "7", L_MenuItems, "8", L_MenuItems,
+ "9", L_MenuItems, "10", L_MenuItems, "11", L_MenuItems, "12", L_MenuItems, "13", L_MenuItems, "14", L_MenuItems, "15", L_MenuItems, "16", L_MenuItems, "17", L_MenuItems, "18", L_MenuItems,
+ "19", L_MenuItems, "20", L_MenuItems, "21", L_MenuItems, "22", L_MenuItems, "23", L_MenuItems, "24", L_MenuItems, "25", L_MenuItems, "26", L_MenuItems, "27", L_MenuItems, "28", L_MenuItems,
+ "29", L_MenuItems, "30", L_MenuItems, "31", L_MenuItems, "32", L_MenuItems, "33", L_MenuItems, "34", L_MenuItems, "35", L_MenuItems, "36", L_MenuItems;
+
+L_MenuItems:
+ delitem "CasinoCoins", @bet;
+ if (@menu == 1) set @number, 0;
+ if (@menu == 2) set @number, 37;
+ if (@menu >= 3) set @number, @menu - 2;
+
+ @roulette = rand(38);
+ if (@roulette == 37) mes "The ball stopped on 00.";
+ if (@roulette < 37) mes "The ball stopped on " + @roulette + ".";
+ if (@number != @roulette) goto L_Lost;
+ mes "\"You won!\"";
+ getitem "CasinoCoins", @bet * 10;
+ goto L_close;
+
+L_NoCoin:
+ mes "\"You don't have enough coins to play.\"";
+ goto L_close;
+
+L_Lost:
+ mes "\"I'm sorry, but you lost.\"";
+ goto L_close;
+
+L_close:
+ mes "Come again!";
+ @number = 0;
+ @roulette = 0;
+ @color = 0;
+ @bet = 50;
+ close;
+}
diff --git a/npc/002-2/dedication.txt b/npc/002-2/dedication.txt
new file mode 100755
index 00000000..31978298
--- /dev/null
+++ b/npc/002-2/dedication.txt
@@ -0,0 +1,8 @@
+
+002-2,116,123,0 script #IreneDedication NPC400,{
+ mes "~ Irene Christina ~";
+ mes "The song in this house is dedicated to Irene.";
+ next;
+ mes "She had seen only twenty hours of this world when she died in her father's arms.";
+ close;
+}
diff --git a/npc/002-2/hetchel.txt b/npc/002-2/hetchel.txt
new file mode 100755
index 00000000..82e8f02d
--- /dev/null
+++ b/npc/002-2/hetchel.txt
@@ -0,0 +1,417 @@
+
+002-2,76,92,0 script Hetchel NPC376,{
+ @wg_state = ((QUEST_WG_state & BYTE_0_MASK) >> BYTE_0_SHIFT);
+ @spants_state = ((QUEST_WG_state & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
+ @SHEET_COCOONS_NR = 25;
+ @SHEET_ZENY = 500;
+ @spants_minlvl = 45;
+ setarray @spants_req_hmn$, "Silk Cocoons", "Pieces of Cotton Cloth", "Silk Headbands";
+ setarray @spants_req$, "SilkCocoon", "CottonCloth", "SilkHeadband";
+ setarray @spants_req_amt, 154, 14, 2;
+ @spants_reward = 45000;
+ @spants_job_reward = 10000;
+ @SheetCount = 0;
+
+ if (@wg_state < 11)
+ goto L_WG_quest_not_done;
+ if ( BaseLevel > @spants_minlvl && @spants_state < 1 ) goto L_Spants_Cry;
+ if ( @spants_state == 1 ) goto L_Spants_Cry_2;
+ if ( @spants_state == 2 ) goto L_Spants_Start;
+ if ( @spants_state > 2 && @spants_state < 8 ) goto L_Spants_Steal;
+ if ( @spants_state == 8 ) goto L_Spants_Make;
+
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Main_menu;
+
+L_WG_quest_not_done:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles.";
+ mes "My best client is Lora Tay, at Dimond's.";
+ mes "What can I do for you?\"";
+ menu
+ "Sorry to bother, I'm new to this country, just visting.", L_close,
+ "What are you selling?", L_Main_menu;
+
+L_Spants_Cry:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Spants_Cry_Cont_1;
+
+L_Spants_Cry_2:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Main_menu,
+ "Hey you have been crying so badly, can I help you somehow?", L_Spants_Reply_Cry,
+ "Give Hetchel something to dry her tears", L_Spants_Tears;
+
+L_Spants_Start:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Main_menu,
+ "So you are looking for new goals in your life?", L_Spants_No_Cry;
+
+L_Spants_Steal:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Main_menu,
+ "About the Pants...", L_Spants_Steal_Cont;
+
+L_Spants_Make:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello I am Hetchel, I weave fine textiles, what can I do for you?\"";
+ menu
+ "Sorry to bother, I'm just visiting.", L_close,
+ "I am looking for silk sheets, Lora Tay told me that I could find some in this market. Can you help?", L_Main_menu,
+ "Hey what about the Pants you were planning to make?", L_Spants_Make_Cont;
+
+L_Spants_Cry_Cont_1:
+ mes "You notice how the tiny woman blushes, she suddenly bursts into tears.";
+ next;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Hello\"";
+ mes "Hetchel hides her face in her hands";
+ mes "";
+ mes "";
+ menu
+ "\"Hey, what is the problem?\"", L_Spants_Reply_Cry,
+ "Give Hetchel something to dry her tears", L_Spants_Tears,
+ "\"Oh really? Just sell me some Silk Sheets if you have them\"", L_Main_menu;
+
+L_Spants_Tears:
+ mes "Choose the item you want to give her.";
+ next;
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ setarray @items$, "RedCottonCloth", "GreenCottonCloth", "DarkBlueCottonCloth", "YellowCottonCloth", "LightBlueCottonCloth", "PinkCottonCloth", "BlackCottonCloth", "OrangeCottonCloth", "PurpleCottonCloth", "DarkGreenCottonCloth", "HitchhikersTowel", "WhiteHitchhikersTowel", "RedHitchhikersTowel", "GreenHitchhikersTowel", "BlueHitchhikersTowel", "YellowHitchhikersTowel", "PurpleHitchhikersTowel", "OrangeHitchhikersTowel", "PinkHitchhikersTowel", "TealHitchhikersTowel", "LimeHitchhikersTowel", "SnakeSkin", "LeatherPatch", "SnakeTongue", "MountainSnakeTongue", "GrassSnakeTongue", "CaveSnakeTongue", "BatWing", "RottenRags", "BrokenDoll", "RedDottedWrap", "BlueDottedWrap", "PurpleStripedWrap", "RedGoldenStripedWrap", "GreenRedStripedWrap", "YellowWrap", "WhiteWrap", "BlueWrap", "PurpleWrap", "GreenWrap", "Doll", "BookPage";
+ setarray @item_names$, "Red Cotton Cloth", "Green Cotton Cloth", "Dark Blue Cotton Cloth", "Yellow Cotton Cloth", "Light Blue Cotton Cloth", "Pink Cotton Cloth", "Black Cotton Cloth", "Orange Cotton Cloth", "Purple Cotton Cloth", "Dark Green Cotton Cloth", "Hitchhiker's Towel", "White Hitchhiker's Towel", "Red Hitchhiker's Towel", "Green Hitchhiker's Towel", "Blue Hitchhiker's Towel", "Yellow Hitchhiker's Towel", "Purple Hitchhiker's Towel", "Orange Hitchhiker's Towel", "Pink Hitchhiker's Towel", "Teal Hitchhiker's Towel", "Lime Hitchhiker's Towel", "Snake Skin", "Leather Patch", "Snake Tongue", "Mountain Snake Tongue", "Grass Snake Tongue", "Cave Snake Tongue", "Bat Wing", "Rotten Rags", "Broken Doll", "Red Dotted Wrap", "Blue Dotted Wrap", "Purple Striped Wrap", "Red Golden Striped Wrap", "Green Red Striped Wrap", "Yellow Wrap", "White Wrap", "Blue Wrap", "Purple Wrap", "Green Wrap", "Doll", "Book Page";
+ callfunc "DynamicItemMenu$";
+ @spants_wipe_thingy$ = @item$;
+ if (@spants_wipe_thingy$ == "") goto L_close;
+ if (countitem(@spants_wipe_thingy$) < 1) goto L_Spants_No_Item;
+ if (@spants_wipe_thingy$ == "RedCottonCloth") goto L_Spants_Tears_Cont;
+ if (@spants_wipe_thingy$ == "RedHitchhikersTowel") goto L_Spants_Tears_Towel;
+ mes "Hetchel looks at you, then looks at the" + @spants_wipe_thingy$ + ".";
+ mes "She hangs her head and weeps more";
+ mes "Red is the only color I have ever loved, bring me something red to dry my tears";
+ goto L_close;
+
+L_Spants_Tears_Towel:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"No, I recognize this towel, it is one of those warping towels, are you trying to mess with me?\"";
+ goto L_close;
+
+L_Spants_No_Item:
+ mes "Oh you do not have it.";
+ goto L_close;
+
+L_Spants_Tears_Cont:
+ mes "Hetchel dries her tears with the Red Piece of Cloth you gave her.";
+ mes "This seems to have consoled her.";
+ delitem "RedCottonCloth", 1;
+ @spants_state = 2;
+ callsub S_Update_Spants;
+ goto L_Spants_No_Cry;
+
+L_Spants_No_Cry:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Oh thank you my dear friend.";
+ mes "Yes, to some extent.";
+ next;
+ mes "I am just so sad because I realized that this is going to be the thing I will be doing for the rest of my life\"";
+ menu
+ "\"You are still young, Hetchel, You can still accomplish things\"", L_Spants_Cry_Cont_2,
+ "\"Yes, you are probably correct.\"", L_close;
+
+L_Spants_Cry_Cont_2:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "Hetchel thinks for a while";
+ mes "";
+ mes "\"Oh my friend, I have been dreaming of making a garment of my own.";
+ mes "It always bothered me to see all those wizards and witches here being naked under their cloaks\"";
+ mes "\"They must be so embarrassed - they are true heroes to give up their dignity to be able to fight the perils of this world\"";
+ mes "Hetchel sobs";
+ menu
+ "\"So you want to make pants for mages?\"", L_Spants_Cry_Cont_3,
+ "\"This sounds ridiculous. Good Bye.\"", L_close;
+
+L_Spants_Cry_Cont_3:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Ok, so I figured I could make some trousers like Lora Tay makes but from the much finer Material the Silk Worms are making for us\"";
+ mes "\"But I really need the base plans for the trousers, otherwise I do not know how to attempt this.";
+ mes "Can you get me those plans from her?\"";
+ menu
+ "\"No, sorry I am too busy for that\"", L_close,
+ "\"Of course!\"", L_Spants_Cry_Cont_4;
+
+L_Spants_Cry_Cont_4:
+ @spants_state = 3;
+ callsub S_Update_Spants;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Oh wait! I am not sure if it is such a good idea to ask her about that, I think she would not give the plans to you anyway.";
+ mes "Maybe you can find a way to get those plans on a different way?";
+ mes "I think there are some people in Hurnscald who have their means of getting you every possible item there is\"";
+ next;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "Please please please - I need those plans";
+ goto L_close;
+
+L_Spants_Reply_Cry:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"...\"";
+ @spants_state = 1;
+ callsub S_Update_Spants;
+ goto L_close;
+
+
+L_Spants_Steal_Cont:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Have you gotten hold of the plans?\"";
+ menu
+ "Yes I have them somewhere here", L_Spants_Steal_Cont2,
+ "No, not yet", L_close;
+
+L_Spants_Steal_Cont2:
+ if(@spants_state < 7) goto L_Spants_No_Item;
+ @spants_state = 8;
+ callsub S_Update_Spants;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Oh this is miraculous\"";
+ mes "";
+ mes "Hetchel sheds some tears of joy";
+ next;
+ mes "You hand her the crumpled plans Crastur the Ugly gave you.";
+ next;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"I need to figure out how to do this now... \"";
+ next;
+ mes "Hetchel adjusts her glasses and reads carefully";
+ next;
+ mes "She seems to be very busy, maybe you should come back later.";
+ goto L_close;
+
+L_Spants_Make_Cont:
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Yes, I already made a prototype but it cost me a lot of time and effort.";
+ mes "I can give it to you if you are willing to pay for my expenses though.\"";
+ menu
+ "What do you want for those silken pants?", L_Spants_Make_Cont_2,
+ "No, I am not particularly interested.", L_close;
+
+L_Spants_Make_Cont_2:
+ if(getarraysize(@spants_req_amt) < 3 || getarraysize(@spants_req$) < 3 || getarraysize(@spants_req_hmn$) < 3)
+ goto L_Spants_Error;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"I need you to bring me " + @spants_req_amt[0] +" "+ @spants_req_hmn$[0] + ", " + @spants_req_amt[1] +" "+ @spants_req_hmn$[1] + " and " + @spants_req_amt[2] +" "+ @spants_req_hmn$[2];
+ next;
+ mes "You will not have to pay for my time, I am so proud to have accomplished this on my own!\"";
+ menu
+ "\"I have those items with me\"", L_Spants_Pay,
+ "\"I am still looking for them\"", L_close,
+ "\"What do you need again?\"", L_Spants_Make_Cont_2;
+
+L_Spants_Pay:
+ if (countitem(@spants_req$[0]) < @spants_req_amt[0] || countitem(@spants_req$[1]) < @spants_req_amt[1] || countitem(@spants_req$[2]) < @spants_req_amt[2])
+ goto L_Spants_No_Item;
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_TooMany;
+ mes "Hetchel takes your items.";
+ delitem @spants_req$[0], @spants_req_amt[0];
+ delitem @spants_req$[1], @spants_req_amt[1];
+ delitem @spants_req$[2], @spants_req_amt[2];
+ getitem "SilkPants", 1;
+ @spants_state = 9;
+ callsub S_Update_Spants;
+ next;
+ mes "[Hetchel the weaver]";
+ mes "";
+ mes "\"Here are your pants my dear.";
+ mes "Keep them safe I do not know if I will ever try this again.\"";
+ getexp @spants_reward, @spants_job_reward;
+ goto L_close;
+
+L_Spants_Error:
+ mes "Something went wrong in the script, please inform a developer about that";
+ close;
+
+L_Main_menu:
+ mes "[Hetchel]";
+ mes "\"I have some silk sheets: double-elbow squares.\"";
+ menu
+ "I'm not interested at the moment, maybe later; thanks anyway.", L_close,
+ "Can I buy some?", L_Next;
+
+L_Next:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"Sure but you need to provide raw materials.";
+ mes "I'll need " + @SHEET_COCOONS_NR +" silk cocoons per sheet,";
+ mes "and also " + @SHEET_ZENY +" GP per sheet for my work.\"";
+ next;
+ if (countitem("SilkCocoon") == 0)
+ goto L_sheet_no_cocoon;
+ goto L_sheet_menu;
+
+L_sheet_menu:
+ menu
+ "I have what you asked for.", L_Next1,
+ "Sorry I didn't pay attention enough, what do you need?", L_how_many_cocoons,
+ "Oops! Sorry, I'll come back soon with them.", L_close;
+
+L_Next1:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"How many would you like?\"";
+ input @SheetCount;
+ if (@SheetCount == 0)
+ goto L_zero_sheet;
+ if (countitem("SilkCocoon") < @SheetCount * @SHEET_COCOONS_NR)
+ goto L_sheet_missing_cocoons;
+ if (Zeny < @SheetCount * @SHEET_ZENY)
+ goto L_sheet_missing_Zeny;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("SilkSheet") < 1 && countitem("SilkCocoon") > @SheetCount * @SHEET_COCOONS_NR)
+ goto L_TooMany;
+ Zeny = Zeny - @SheetCount * @SHEET_ZENY;
+ delitem "SilkCocoon", @SheetCount * @SHEET_COCOONS_NR;
+ getitem "SilkSheet", @SheetCount;
+ mes "[Hetchel]";
+ mes "";
+ mes "\"Thank you, I hope the sheets will fit your needs.";
+ mes "Please greet Lora for me when you see her.\"";
+ emotion EMOTE_HAPPY, strcharinfo(0);
+ goto L_close;
+
+L_sheet_missing_cocoons:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"I'm sorry, but I need " + @SheetCount * @SHEET_COCOONS_NR + ", not " + countitem("SilkCocoon") + ".\"";
+ goto L_close;
+
+L_sheet_missing_Zeny:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"No, no no. The way this works is that you give me the GP first and I give you the sheets afterwards.";
+ mes "You're " + (@SheetCount * @SHEET_ZENY - Zeny) + " GP short, so come back when you can afford the sheets you asked for!\"";
+ goto L_close;
+
+L_how_many_cocoons:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"I need an average of " + @SHEET_COCOONS_NR + " cocoons per sheet";
+ mes "and also " + @SHEET_ZENY + " GP per sheet for my work.\"";
+ next;
+ goto L_sheet_menu;
+
+L_sheet_no_cocoon:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"You don't have any cocoon? I'm sorry I can't do anything for you.\"";
+ menu
+ "I'll seek for them.", L_close,
+ "Where can I get cocoons?", L_Next2;
+
+L_Next2:
+ mes "[Hetchel]";
+ mes "\"Silk cocoons come from Silkworms. Silkworms live in the woodland area around Hurnscald.";
+ mes "Silkworms like especially woods and dark areas. You can go there by ferry.\"";
+ goto L_close;
+
+
+L_zero_sheet:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"It's the best way to get quickly served!\"";
+ goto L_close;
+
+L_TooMany:
+ mes "[Hetchel]";
+ mes "";
+ mes "\"Your bag hasn't room enough. Store some things and come back.\"";
+ goto L_close;
+
+S_Update_Spants:
+ QUEST_WG_state = (QUEST_WG_state & ~(NIBBLE_2_MASK) | (@spants_state << NIBBLE_2_SHIFT));
+ return;
+
+L_close:
+ QUEST_WG_state = (QUEST_WG_state & ~(NIBBLE_2_MASK) | (@spants_state << NIBBLE_2_SHIFT));
+ @wg_state = 0;
+ @spants_state = 0;
+ @spants_minlvl = 0;
+ @spants_reward = 0;
+ @spants_job_reward = 0;
+ @spants_wipe_thingy = "";
+ @SHEET_COCOONS_NR = 0;
+ @SHEET_ZENY = 0;
+ @SheetCount = 0;
+ @wg_state = 0;
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ close;
+}
+
+002-2,73,95,0 script HetchelDebug NPC376,{
+set @wg_state, ((QUEST_WG_state & BYTE_0_MASK) >> BYTE_0_SHIFT);
+set @spants_state, ((QUEST_WG_state & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
+
+mes "Lora Tay Quest State: "+ @wg_state;
+mes "Silk Pants Quest State: "+ @spants_state;
+
+menu
+ "Set Lora Tay Quest State", L_Lora_Tay,
+ "Set Silk Pants Quest State", L_Spants,
+ "Close", L_close;
+
+L_Lora_Tay:
+ mes "Set Lora Tay Visited State (0 - reset , 11 - enough for SilkPants Quest)";
+ input @wg_state;
+ goto L_close;
+
+L_Spants:
+ mes "Set SilkPants Quest State (0 - reset)";
+ input @spants_state;
+ goto L_close;
+
+L_close:
+ QUEST_WG_state = (QUEST_WG_state & ~(BYTE_0_MASK) | (@wg_state << BYTE_0_SHIFT));
+ @wg_state = 0;
+ QUEST_WG_state = (QUEST_WG_state & ~(NIBBLE_2_MASK) | (@spants_state << NIBBLE_2_SHIFT));
+ @spants_state = 0;
+ close;
+
+OnInit:
+ if (!debug)
+ disablenpc "HetchelDebug";
+ end;
+}
diff --git a/npc/002-2/imec.txt b/npc/002-2/imec.txt
new file mode 100755
index 00000000..dfd7187f
--- /dev/null
+++ b/npc/002-2/imec.txt
@@ -0,0 +1,115 @@
+002-2,36,75,0 script Imec NPC162,{
+ @Exp = 90;
+ @money = 500;
+ @lvl = 10;
+
+ if (QL_IMEC >= 3) goto L_Stingers;
+ if (QL_IMEC == 2) goto L_Return;
+ if (QL_IMEC == 1) goto L_Bring;
+
+ mes "[Imec]";
+ mes "%%9";
+ mes "\"The Wizard's Council shut down my shop!";
+ mes "Why'd they have to make such a fuss over a little poison?\"";
+ next;
+ mes "\"Someday, I'm going to get my permit back from those self-righteous snobs!\"";
+ next;
+ mes "He looks at you.";
+ next;
+ mes "[Imec]";
+ mes "%%D";
+ mes "\"Hey... I've got an idea!";
+ next;
+ mes "I just finished writing an appeal to the Council. If you bring it to the government building near the docks, they might be less... closed-minded.\"";
+ goto L_Offer;
+
+L_Offer:
+ menu
+ "Just tell me how to get there.",L_Explain,
+ "I'll do it.",L_Next,
+ "No way!",L_close;
+
+L_Next:
+ mes "";
+ mes "[Imec]";
+ mes "\"Great! Here's the appeal.\"";
+ mes "Imec gives you a sealed letter, which you store in a safe pocket outside of your inventory.";
+ QL_IMEC = 1;
+ goto L_close;
+
+L_Explain:
+ mes "";
+ mes "[Imec]";
+ mes "\"Head north until you get to the docks – it's just west of the ferry.\"";
+ next;
+ mes "\"There are a couple of other offices inside. You can form a party if you want, but don't take too long.\"";
+ if (BaseLevel < WEDDING_MIN_LEVEL) mes "\"Once you're older, you can even get married there.\"";
+ next;
+ mes "\"So... will you submit my appeal for me?\"";
+ if (QL_IMEC == 0)
+ goto L_Offer;
+ goto L_close;
+
+L_Bring:
+ mes "[Imec]";
+ mes "\"What are you waiting for? I'm not paying you till after the job is done!\"";
+ menu
+ "Where is it again?",L_Explain,
+ "I'm on my way.",L_close;
+
+L_Return:
+ mes "[Imec]";
+ mes "\"Ah! You're back! How'd it go?\"";
+ mes "You hand the letter of acknowledgment over to Imec.";
+ next;
+ mes "[Imec]";
+ mes "\"Great! I'm sure I'll be able to open my shop again soon.\"";
+ next;
+ mes "It seems as though Imec has lost interest in you already.";
+ menu
+ "You mentioned a reward...",L_Next1;
+
+L_Next1:
+ mes "";
+ mes "[Imec]";
+ mes "\"What? Oh, right. Here, have this.\"";
+ getexp @Exp, 0;
+ Zeny = Zeny + @money;
+ QL_IMEC = 3;
+ next;
+ if (BaseLevel >= @lvl)
+ goto L_Transition_Stingers;
+ if (BaseLevel < @lvl)
+ mes "\"Come back to see me once you grow stronger; I might have a job for you later on.\"";
+ goto L_close;
+
+L_Transition_Stingers:
+ mes "\"Actually, you could be of further use to me.\"";
+ next;
+ goto L_Stingers;
+
+L_Stingers:
+ mes "[Imec]";
+ @dq_level = @lvl;
+ @dq_cost = 3;
+ @dq_count = 3;
+ @dq_name$ = "ScorpionStinger";
+ @dq_friendly_name$ = "Scorpion Stingers";
+ @dq_money = 200;
+ @dq_exp = 40;
+
+ callfunc "DailyQuest";
+ goto L_close;
+
+L_close:
+ @money = 0;
+ @dq_level = 0;
+ @dq_cost = 0;
+ @dq_count = 0;
+ @dq_name$ = "";
+ @dq_friendly_name$ = "";
+ @dq_money = 0;
+ @dq_exp = 0;
+ @dq_return = 0;
+ close;
+}
diff --git a/npc/002-2/inya.txt b/npc/002-2/inya.txt
new file mode 100755
index 00000000..787f8a56
--- /dev/null
+++ b/npc/002-2/inya.txt
@@ -0,0 +1,206 @@
+
+002-2,116,61,0 shop #InyaShop NPC32767,4014:2500
+
+002-2,116,61,0 script Inya NPC106,{
+ mes "[Inya]";
+ mes "\"I am Inya, a jeweler of fine rings. I sell and make rings.\"";
+ next;
+ mes "\"If you have a Simple Ring and a gem, I can set the gem in it for 100,000 gold pieces.\"";
+ next;
+ mes "\"Also, if you have a ring with gems on it, I can remove the gems and return the Simple Ring to you for 50,000 gold pieces.\"";
+ next;
+ mes "\"So, how can I help you?\"";
+ menu
+ "What jewelry do you have for sale?", L_Inya_Shop,
+ "I have a wedding ring, will that do?", L_Inya_Wedding_Ring,
+ "I'd like to remove a gem (50000 GP).", L_Inya_Remove_RingGem,
+ "I'd like to add a gem (100000 GP).", L_Inya_Add_RingGem,
+ "Not interested.", L_Inya_NotInterested;
+
+L_Inya_Shop:
+ close2;
+ shop "#InyaShop";
+
+L_Inya_Wedding_Ring:
+ mes "[Inya]";
+ mes "\"No, sorry. I do not alter wedding rings at this time.\"";
+ close;
+
+L_Inya_Remove_RingGem:
+ mes "[Inya]";
+ mes "\"What kind of gem would you like to have removed?\"";
+ menu
+ "Diamond.", L_Inya_Remove_Diamond,
+ "Ruby.", L_Inya_Remove_Ruby,
+ "Emerald.", L_Inya_Remove_Emerald,
+ "Sapphire.", L_Inya_Remove_Sapphire,
+ "Topaz.", L_Inya_Remove_Topaz,
+ "Amethyst.", L_Inya_Remove_Amethyst,
+ "I've changed my mind.", L_Inya_NotInterested;
+
+L_Inya_Add_RingGem:
+ mes "[Inya]";
+ mes "\"What kind of gem would you like to add?\"";
+ menu
+ "Diamond.", L_Inya_Add_Diamond,
+ "Ruby.", L_Inya_Add_Ruby,
+ "Emerald.", L_Inya_Add_Emerald,
+ "Sapphire.", L_Inya_Add_Sapphire,
+ "Topaz.", L_Inya_Add_Topaz,
+ "Amethyst.", L_Inya_Add_Amethyst,
+ "I've changed my mind.", L_Inya_NotInterested;
+
+L_Inya_Remove_Diamond:
+ if ( (Zeny < 50000)
+ | (countitem ("DiamondRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "DiamondRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Remove_Ruby:
+ if ( (Zeny < 50000)
+ | (countitem ("RubyRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "RubyRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Remove_Emerald:
+ if ( (Zeny < 50000)
+ | (countitem ("EmeraldRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "EmeraldRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Remove_Sapphire:
+ if ( (Zeny < 50000)
+ | (countitem ("SapphireRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "SapphireRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Remove_Topaz:
+ if ( (Zeny < 50000)
+ | (countitem ("TopazRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "TopazRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Remove_Amethyst:
+ if ( (Zeny < 50000)
+ | (countitem ("AmethystRing") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 50000;
+ delitem "AmethystRing", 1;
+ getitem "SimpleRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Diamond:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Diamond") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Diamond", 1;
+ getitem "DiamondRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Ruby:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Ruby") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Ruby", 1;
+ getitem "RubyRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Emerald:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Emerald") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Emerald", 1;
+ getitem "EmeraldRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Sapphire:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Sapphire") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Sapphire", 1;
+ getitem "SapphireRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Topaz:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Topaz") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Topaz", 1;
+ getitem "TopazRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_Add_Amethyst:
+ if ( (Zeny < 100000)
+ | (countitem ("SimpleRing") < 1)
+ | (countitem ("Amethyst") < 1) )
+ goto L_Inya_Not_Enough;
+ Zeny = Zeny - 100000;
+ delitem "SimpleRing", 1;
+ delitem "Amethyst", 1;
+ getitem "AmethystRing", 1;
+ mes "[Inya]";
+ mes "\"Here you go.\"";
+ close;
+
+L_Inya_NotInterested:
+ mes "[Inya]";
+ mes "\"Come back later and I will try to be of assistance.\"";
+ close;
+
+L_Inya_Not_Enough:
+ mes "[Inya]";
+ mes "\"I am sorry, you simply do not seem to have the necessary items for me to help you. Please come back when you do, and I would be more than happy to help you out.\"";
+ close;
+}
diff --git a/npc/002-2/kps.txt b/npc/002-2/kps.txt
new file mode 100755
index 00000000..bcdfb1e7
--- /dev/null
+++ b/npc/002-2/kps.txt
@@ -0,0 +1,152 @@
+002-2,120,89,0 script KPS Manager NPC191,{
+ @run = ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
+ @run_cnt = ((QUEST_NorthTulimshar & TWOBIT_9_MASK) >> TWOBIT_9_SHIFT);
+ if (QL_KYLIAN == 15)
+ goto L_SeeKylian;
+ if (QL_KYLIAN == 14)
+ goto L_RunComplete;
+ if (QL_KYLIAN == 13)
+ goto L_RunStarted;
+ if (QL_KYLIAN == 12)
+ goto L_JobSelect;
+ if (QL_KYLIAN == 11)
+ goto L_AcceptJob;
+ if (QL_KYLIAN == 10)
+ goto L_OfferJob;
+ goto L_Default;
+
+L_Default:
+ mes "[KPS Manager]";
+ mes "\"A rich salesman named Kylian bought this shop recently.\"";
+ mes "\"I'm waiting for him to give the go-ahead on opening it up, but I haven't heard from him in a while.\"";
+ next;
+ mes "\"I wonder if he needs any help...\"";
+ next;
+ mes "\"If you could go over and check on him in the inn while I tend to the store, I'd really appreciate it.\"";
+ goto L_close;
+
+L_OfferJob:
+ mes "[KPS Manager]";
+ mes "\"Hello! How can I help you today?\"";
+ menu
+ "My name is " + strcharinfo(0) + ".", L_MyName,
+ "Nothing.", L_close;
+
+L_MyName:
+ QL_KYLIAN = 11;
+ mes "\"Ah. Kylian said you would be dropping by.\"";
+ next;
+ mes "\"I assume you are looking for some work?\"";
+ menu
+ "Yes.", L_StartJob,
+ "No.", L_close;
+
+L_AcceptJob:
+ mes "[KPS Manager]";
+ mes "\"Interested in some work?\"";
+ menu
+ "Yes.", L_StartJob,
+ "No.", L_close;
+
+L_StartJob:
+ @run = 0;
+ callfunc "SetKylianRun";
+ @run_cnt = 0;
+ callfunc "SetKylianRunCnt";
+ QL_KYLIAN = 12;
+ goto L_JobSelect;
+
+L_StartJobAgain:
+ @run = 0;
+ callfunc "SetKylianRun";
+ QL_KYLIAN = 12;
+ goto L_JobSelect;
+
+L_JobSelect:
+ if ((gettimetick(2) - Kylian_Timer) < 86400)
+ goto L_NoPackages;
+ mes "[KPS Manager]";
+ mes "\"We have a number of deliveries that need to go all over the world.\"";
+ next;
+ goto L_RandJob;
+
+L_RandJob:
+ @rand_quest = rand(1,3);
+ goto L_JobInfo;
+
+L_JobInfo:
+ mes "\"We have a delivery for ##B" + $@random_quests$[@rand_quest] + "##b.\"";
+ menu
+ "I'll take it.", L_StartRun,
+ "Anything else?", L_RandJob,
+ "I need a break.", L_close;
+
+L_StartRun:
+ QL_KYLIAN = 13;
+ @run = @rand_quest;
+ callfunc "SetKylianRun";
+ Kylian_Timer = gettimetick(2);
+ goto L_close;
+
+L_RunStarted:
+ mes "Deliver this package to ##B" + $@random_quests$[@run] + "##b.\"";
+ goto L_close;
+
+L_RunComplete:
+ @elapsed_time = (gettimetick(2) - Kylian_Timer);
+ if (@elapsed_time > 600)
+ goto L_Failed;
+ @run_cnt = (@run_cnt + 1);
+ callfunc "SetKylianRunCnt";
+ // Set Kylian wants to see you reward state
+ if (@run_cnt > 3)
+ goto L_KylianReward;
+ goto L_RunAgain;
+
+L_SeeKylian:
+ mes "\"You need to go see Kylian before I can give you any more work.\"";
+ goto L_close;
+
+L_Failed:
+ mes "\"If you're faster next time, you can earn a bonus.\"";
+ next;
+ goto L_RunAgain;
+
+L_KylianReward:
+ Zeny = Zeny + $@delivery_money;
+ getexp ($@delivery_exp_mod * BaseLevel), 0;
+ callfunc "SetKylianRun";
+ QL_KYLIAN = 15;
+ mes "[" + $@delivery_money + " money]";
+ mes "[" + ($@delivery_exp_mod * BaseLevel) + " experience points]";
+ next;
+ mes "\"I've got news for you! Kylian wants me to send you over right away.\"";
+ goto L_close;
+
+L_RunAgain:
+ Zeny = Zeny + $@delivery_money;
+ getexp ($@delivery_exp_mod * BaseLevel), 0;
+ callfunc "SetKylianRun";
+ mes "[" + $@delivery_money + " money]";
+ mes "[" + ($@delivery_exp_mod * BaseLevel) + " experience points]";
+ next;
+ mes "\"Good job! Keep up the nice work, and I'm sure the boss will give you a bonus.\"";
+ next;
+ goto L_StartJobAgain;
+
+L_NoPackages:
+ mes "\"Sorry, but we don't have any more jobs open right now.\"";
+ mes "\"Come back tomorrow; maybe we will have some more work then.\"";
+ goto L_close;
+
+L_close:
+ close;
+}
+function script SetKylianRun {
+ QUEST_NorthTulimshar = (QUEST_NorthTulimshar & ~(TWOBIT_8_MASK)) | (@run << TWOBIT_8_SHIFT);
+ return;
+}
+function script SetKylianRunCnt {
+ QUEST_NorthTulimshar = (QUEST_NorthTulimshar & ~(TWOBIT_9_MASK)) | (@run_cnt << TWOBIT_9_SHIFT);
+ return;
+}
diff --git a/npc/002-2/kylian.txt b/npc/002-2/kylian.txt
new file mode 100755
index 00000000..22263199
--- /dev/null
+++ b/npc/002-2/kylian.txt
@@ -0,0 +1,360 @@
+
+
+
+
+- script #businessmanNTconfig NPC32767,{
+ end;
+
+OnInit:
+ // Nibble 4
+ // Used in Random Quest later as a Nibble
+ $@knowYanisNT = (1 << 16);
+ $@knowLatoyNT = (1 << 17);
+ $@knowWeellosNT = (1 << 18);
+ $@knowCasinoNT = (1 << 19);
+
+ // Random Quests for Later
+ setarray $@random_quests$, "None", "Falkurn", "Old Wizard", "Baktar";
+ $@delivery_money = 100;
+ $@delivery_exp_mod = 10;
+ end;
+}
+002-2,44,107,0 script #KylianOut NPC32767,1,1,{
+ @KylianNTLicense = 0;
+ @KylianNTSightSeeing = 0;
+ @KylianNTCasino = 0;
+ end;
+}
+002-2,43,101,0 script Kylian NPC193,{
+ @acorn_amount = 12;
+ @suitcase_money = 100;
+ @suitcase_exp = 50;
+ @license_money = 50;
+ @license_exp = 20;
+ @sightseeing_money = 50;
+ @sightseeing_exp = 20;
+ @food_money = 50;
+ @food_exp = 20;
+ @clothes_money = 50;
+ @clothes_exp = 20;
+ @fun_money = 50;
+ @fun_exp = 20;
+
+ if (QL_KYLIAN == 15) goto L_Done;
+ if (QL_KYLIAN >= 11) goto L_Helping;
+ if (QL_KYLIAN == 10) goto L_OfferedJob;
+ if (QL_KYLIAN == 9) goto L_Shop;
+ if (@KylianNTCasino) goto L_CasinoDone;
+ if (QL_KYLIAN == 8) goto L_DesertHat;
+ if (QL_KYLIAN == 7) goto L_Clothes;
+ if (@KylianNTSightSeeing) goto L_SightSeeingDone;
+ if (QL_KYLIAN == 6) goto L_Casino;
+ if (QL_KYLIAN == 5) goto L_Food;
+ if (@KylianNTLicense) goto L_LicenseDone;
+ if (QL_KYLIAN == 4) goto L_SightSeeing;
+ if (QL_KYLIAN == 3) goto L_ShopLicense;
+ if (QL_KYLIAN >= 1) goto L_Suitcase;
+
+ mes "[Kylian]";
+ mes "\"Ah! Are you the room service? I've some requests.\"";
+ menu
+ "Sure... What can I do for you?",L_Luggage,
+ "No I'm not!",L_Next;
+
+L_Next:
+ mes "[Kylian]";
+ mes "\"Too bad. Would you be interested in earning some quick money with some errands regardless?\"";
+ menu
+ "I'm a great adventurer! I don't do petty errands.",L_close,
+ "No. I'm busy.",L_close,
+ "Well... OK.",L_Luggage;
+
+L_Luggage:
+ mes "[Kylian]";
+ mes "\"I need you to get my luggage from the docks. Just show this paper to the sailor who's watching the luggage.\"";
+ mes "He gives you his ticket, which you promptly store in a safe pocket outside of your inventory.";
+ QL_KYLIAN = 1;
+ goto L_close;
+
+L_Suitcase: // QL_KYLIAN >= 1, but below 3
+ mes "[Kylian]";
+ mes "\"Did you get my luggage from the docks?\"";
+ if (QL_KYLIAN != 2)
+ goto L_close;
+ menu
+ "Here it is.",L_Continue,
+ "Don't worry; I'm on my way.",L_close;
+
+L_Continue:
+ if (countitem("LeatherSuitcase") < 1)
+ goto L_NoItem;
+ delitem "LeatherSuitcase", 1;
+ Zeny = Zeny + @suitcase_money;
+ getitem "Acorn", @acorn_amount;
+ getexp @suitcase_exp, 0;
+ QL_KYLIAN = 3;
+ next;
+ mes "[Kylian]";
+ mes "\"Ah! Very good. I have some urgent paperwork that I've been needing to attend to.\"";
+ mes "He gives you some money.";
+ next;
+ mes "[Kylian]";
+ mes "\"Before you go, I also happen to have some acorns left over from my trip.\"";
+ mes "\"You can have them if you wish; they're rather tasty.\"";
+ mes "If, however, you don't like them, you could take them to the Tulimshar bakery. I heard they use them to make a special kind of flour.\"";
+ next;
+ goto L_ShopLicense;
+
+L_ShopLicense: // QL_KYLIAN == 3
+ mes "[Kylian]";
+ mes "\"I'm a salesman and came to Tulimshar because I'm thinking about establishing a shop here.\"";
+ mes "\"While I'm going through my papers, could you find out whom I have to talk to about opening up a shop in this city?\"";
+ if (!(QUEST_NorthTulimshar & $@knowYanisNT))
+ goto L_close;
+ menu
+ "You need to go and talk to Yanis in the government building.",L_GovBuild,
+ "I'll see what I can do.",L_close;
+
+L_GovBuild:
+ Zeny = Zeny + @license_money;
+ getexp @license_exp, 0;
+ QL_KYLIAN = 4;
+ @KylianNTLicense = 1;
+ mes "[Kylian]";
+ mes "\"Ah... excellent! That's very helpful. Could you tell me how to get to that building?\"";
+ mes "You give him directions to the building.";
+ next;
+ goto L_LicenseDone;
+
+L_LicenseDone: // the player didn't log out yet after telling about Yanis
+ mes "[Kylian]";
+ mes "\"I need to prepare my papers now. I might have some more questions later on though.\"";
+ goto L_close;
+
+L_SightSeeing: // QL_KYLIAN == 4 and logged out sometime between getting to that state and now
+ mes "[Kylian]";
+ mes "\"You came here at just the right moment! I have finished my business affairs, and I think I should use my time here to learn a bit about the culture in the area. Can you tell me if there are any historical places or landmarks to visit?\"";
+ if (!(QUEST_NorthTulimshar & $@knowWeellosNT))
+ goto L_close;
+ menu
+ "There's a very old building not far from here.",L_HistBuild,
+ "I don't know, but I'll have a look around.",L_close;
+
+L_HistBuild:
+ Zeny = Zeny + @sightseeing_money;
+ getexp @sightseeing_exp, 0;
+ QL_KYLIAN = 5;
+ mes "[Kylian]";
+ mes "\"This sounds interesting. Please tell me the way.\"";
+ mes "You tell him how to get to the historic building.";
+ next;
+ goto L_Food;
+
+L_Food: // QL_KYLIAN == 5
+ mes "[Kylian]";
+ mes "\"While I'm out, I could also get something to eat. Do you have any suggestions for local cuisine?\"";
+ if (QL_FIERI < 4) // didn't yet help Fieri make Tonori Delight
+ goto L_close;
+ menu
+ "A man named Fieri makes a tasty Tonori Delight over at the castle.",L_SoupBer,
+ "No idea. I'll try to find out.",L_close;
+
+L_SoupBer:
+ Zeny = Zeny + @food_money;
+ getexp @food_exp, 0;
+ QL_KYLIAN = 6;
+ @KylianNTSightSeeing = 1;
+ goto L_SightSeeingDone;
+
+L_SightSeeingDone:
+ mes "[Kylian]";
+ mes "\"I'm going to see the historic building you told me about and try the local food at the castle. Thank you for the suggestions.\"";
+ goto L_close;
+
+L_Casino: // QL_KYLIAN == 6 and logged out sometime between getting to that state and now
+ mes "[Kylian]";
+ mes "\"Hello. I just came back from my sight-seeing tour, and this Tonori Delight really was delicious. I wonder what it's made of...\"";
+ next;
+ mes "\"However, I was wondering if you know about some evening attractions. Maybe somewhere to have fun?\"";
+ if (!(QUEST_NorthTulimshar & $@knowCasinoNT))
+ goto L_close;
+ menu
+ "Of course! The casino!",L_CasinoFound,
+ "Not really.",L_close;
+
+L_CasinoFound:
+ Zeny = Zeny + @casino_money;
+ getexp @casino_exp, 0;
+ QL_KYLIAN = 7;
+ mes "[Kylian]";
+ mes "\"Oh! There's a casino in this city? That's wonderful! Where can I find it?\"";
+ mes "You explain how to get to the casino.";
+ next;
+ goto L_Clothes;
+
+L_Clothes: // QL_KYLIAN == 7
+ mes "[Kylian]";
+ mes "\"I should acquire proper clothing before I go to the casino tonight. Do you know a reputable shop where high-quality clothing is sold?\"";
+ if (!(QUEST_NorthTulimshar & $@knowLatoyNT))
+ goto L_close;
+ menu
+ "Latoy's shop. It's on the west side of Tulimshar.",L_HarborDistrict,
+ "Hmmm... I don't know.",L_close;
+
+L_HarborDistrict:
+ Zeny = Zeny + @clothes_money;
+ getexp @clothes_exp, 0;
+ QL_KYLIAN = 8;
+ @KylianNTCasino = 1;
+ mes "You explain about Latoy and the quality of his shop.";
+ next;
+ mes "[Kylian]";
+ mes "\"This seems to be exactly what I need. Thanks a lot.\"";
+ goto L_close;
+
+L_CasinoDone:
+ mes "[Kylian]";
+ mes "\"I'm looking forward to going to the casino tonight. See me tomorrow, and I might have more requests.\"";
+ goto L_close;
+
+L_DesertHat: // QL_KYLIAN == 8
+ mes "Kylian looks a bit tired.";
+ next;
+ mes "[Kylian]";
+ mes "\"That was an interesting night. Thanks for your suggestion to visit the casino.\"";
+ next;
+ getinventorylist;
+ mes "\"You helped me out a lot, so I bought a souvenir for you while I was out shopping.\"";
+ if ((checkweight("DesertHat", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ getitem "DesertHat", 1;
+ QL_KYLIAN = 9;
+ next;
+ goto L_close;
+
+L_Shop:
+ mes "[Kylian]";
+ mes "\"The Council of Wizards approved my shop license!\"";
+ mes "\"I purchased a store just across the way from the inn.\"";
+ next;
+ mes "\"If you are looking for work, go see the shop keeper I have working for me there.\"";
+ mes "\"Mention your name, and he will know I sent you.\"";
+ QL_KYLIAN = 10;
+ goto L_close;
+
+L_OfferedJob:
+ mes "[Kylian]";
+ mes "\"I spoke with the shopkeeper, and he said you haven't stopped in yet.\"";
+ next;
+ mes "\"I wish you would consider working for me.\"";
+ next;
+ mes "\"KPS needs a determined, experienced adventurer like you.\"";
+ goto L_close;
+
+L_Helping:
+ mes "[Kylian]";
+ mes "\"I've heard you decided to come work for me. That's great news!\"";
+ mes "\"Keep up the good work, and I might have something a little extra for you.\"";
+ goto L_close;
+
+L_Done:
+ mes "[Kylian]";
+ mes "\"Thanks a bunch, business is booming!\"";
+ mes "\"Please, take this for all your hard work.\"";
+ next;
+ Zeny = Zeny + $@delivery_money;
+ getexp ($@delivery_exp_mod * BaseLevel), 0;
+ @run_cnt = 0;
+ callfunc "SetKylianRunCnt";
+ QL_KYLIAN = 12;
+ mes "[" + $@delivery_money + " money]";
+ mes "[" + ($@delivery_exp_mod * BaseLevel) + " experience points]";
+ next;
+ goto L_close;
+
+L_Inventory:
+ mes "[Kylian]";
+ mes "\"Oh my. You're carrying quite a lot. Come back when you have more room.\"";
+ goto L_close;
+
+L_NoItem:
+ mes "[Kylian]";
+ mes "\"I don't see it! Are you trying to tease me? This isn't funny!\"";
+ goto L_close;
+
+L_close:
+ @acorn_amount = 0;
+ @suitcase_money = 0;
+ @suitcase_exp = 0;
+ @license_money = 0;
+ @license_exp = 0;
+ @sightseeing_money = 0;
+ @sightseeing_exp = 0;
+ @food_money = 0;
+ @food_exp = 0;
+ @clothes_money = 0;
+ @clothes_exp = 0;
+ @fun_money = 0;
+ @fun_exp = 0;
+ @inventorylist_count = 0;
+ // NOT set to zero: @KylianNTLicense, @KylianNTSightSeeing and @KylianNTCasino
+ // those are used to check if the player logged out in the meanwhile
+ close;
+}
+function script KylianDebug {
+ @run = ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
+ @run_cnt = ((QUEST_NorthTulimshar & TWOBIT_9_MASK) >> TWOBIT_9_SHIFT);
+ goto L_Menu;
+
+L_Menu:
+ mes "[Kylian Debug]";
+ menu
+ "Show Quest State", L_ShowState,
+ "Set Quest State", L_SetState,
+ "Reset Timer to Now", L_WorkTimer,
+ "Reset Timer + 24 Hours", L_MoreWorkTimer,
+ "Close.", L_close;
+
+L_ShowState:
+ mes "State: " + QL_KYLIAN;
+ mes "Timer: " + Kylian_Timer;
+ mes "Time: " + gettimetick(2);
+ mes "Elapsed Time: " + (gettimetick(2) - Kylian_Timer);
+ mes "Reset Timer: 86400 > " + (gettimetick(2) - Kylian_Timer);
+ mes "Run: " + @run;
+ mes "Run NPC: " + $@random_quests$[@run];
+ mes "Run Count: " + @run_cnt;
+ goto L_Menu;
+
+L_SetState:
+ mes "\"Input the quest state desired.\"";
+ input QL_KYLIAN;
+ goto L_Menu;
+
+L_WorkTimer:
+ Kylian_Timer = gettimetick(2);
+ goto L_Menu;
+
+L_MoreWorkTimer:
+ Kylian_Timer = (gettimetick(2) - 86401);
+ goto L_Menu;
+
+L_close:
+ return;
+}
+002-2,40,101,0 script KylianDebug#1 NPC193,{
+ callfunc "KylianDebug";
+ close;
+OnInit:
+ if (!debug)
+ disablenpc "KylianDebug#1";
+ end;
+}
+002-2,118,89,0 script KylianDebug#2 NPC193,{
+ callfunc "KylianDebug";
+ close;
+OnInit:
+ if (!debug)
+ disablenpc "KylianDebug#2";
+ end;
+}
diff --git a/npc/002-2/latoy.txt b/npc/002-2/latoy.txt
new file mode 100755
index 00000000..24b9ed4f
--- /dev/null
+++ b/npc/002-2/latoy.txt
@@ -0,0 +1,26 @@
+002-2,86,93,0 shop #LatoyShop NPC32767,544:8000,868:10000,1172:3000,720:16000
+002-2,86,93,0 script Latoy NPC106,{
+ QUEST_NorthTulimshar = QUEST_NorthTulimshar | $@knowLatoyNT;
+
+ mes "[Latoy]";
+ mes "\"Is there something I can help you with?\"";
+ if (QL_KYLIAN != 7)
+ goto L_Shop;
+ next;
+ mes "Maybe this is the kind of shop Kylian is looking for?";
+ goto L_Shop;
+
+L_Shop:
+ mes "[Latoy]";
+ mes "\"How would you like to browse my wares?\"";
+ menu
+ "Yes.", L_LatoyShop,
+ "No.", L_close;
+
+L_LatoyShop:
+ close2;
+ shop "#LatoyShop";
+
+L_close:
+ close;
+}
diff --git a/npc/002-2/mapflags.txt b/npc/002-2/mapflags.txt
new file mode 100755
index 00000000..ae307dbb
--- /dev/null
+++ b/npc/002-2/mapflags.txt
@@ -0,0 +1,2 @@
+//002-2 mapflag resave 001-1,60,105
+//002-2 mapflag town
diff --git a/npc/002-2/omar.txt b/npc/002-2/omar.txt
new file mode 100755
index 00000000..1307a6f8
--- /dev/null
+++ b/npc/002-2/omar.txt
@@ -0,0 +1,331 @@
+function script KadiyaSubquestConsts {
+ @Q_kadiya_status = (QUEST_MAGIC2 & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT;
+
+ @Q_STATUS_NONE = 0;
+ @Q_STATUS_KNOWS_MOPOX = 1;
+ @Q_STATUS_MADE_MOPOX = 2;
+ @Q_STATUS_DIDNT_DRINK = 3;
+ @Q_STATUS_WANTS_CHOCOCAKE = 4;
+ @Q_STATUS_WANTS_ORANGECUPCAKE = 5;
+ @Q_STATUS_COMPLETED = 6;
+ @Q_STATUS_COMPLETED_ELANORE = 7;
+ @Q_STATUS_COMPLETED_NOELANORE = 8;
+ @Q_STATUS_COMPLETED_POST_ELANORE = 9;
+
+ if (((QUEST_MAGIC2 & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT) < 4) set @Q_kadiya_status, @Q_STATUS_NONE;
+
+ if (((QUEST_MAGIC2 & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT) > 4) set @Q_kadiya_status, @Q_STATUS_COMPLETED_POST_ELANORE;
+
+ return;
+}
+
+002-2,117,126,0 script Omar NPC162,{
+ callfunc "ElanoreFix";
+ callfunc "KadiyaSubquestConsts";
+
+ @Q_status = @Q_kadiya_status;
+
+ if (@Q_status >= @Q_STATUS_COMPLETED) goto L_cured;
+
+ if (@Q_status == @Q_STATUS_DIDNT_DRINK) goto L_didnt_drink;
+
+ if (@Q_status > @Q_STATUS_DIDNT_DRINK) goto L_make_food;
+
+ mes "[Omar]";
+ mes "\"Welcome to my humble abode.\"";
+ next;
+ menu
+ "Well met! May I ask who you are?", L_omar,
+ "What's wrong with your daughter?", L_kadiya_sick,
+ "Thank you!", L_close;
+
+L_omar:
+ mes "[Omar]";
+ mes "\"My name is Omar; I am a trader of oils and spices.\"";
+ goto L_close;
+
+L_kadiya_sick:
+ mes "[Omar]";
+ mes "\"Kadiya has caught Ponderpox, I fear.\"";
+ mes "He sighs.";
+ mes "\"She's has been feverish for many days now. I wish there were something I could do.\"";
+ next;
+ menu
+ "Have you asked Elanore the healer?", L_sick_elanore,
+ "How about the Hurnscald hospital?", L_sick_hospital,
+ "Can I help?", L_sick_self,
+ "I'm sorry to hear that.", L_Next;
+
+L_Next:
+ mes "[Omar]";
+ mes "\"Well, she is a strong girl. I am sure that she will get over it eventually.\"";
+ mes "He smiles, but you see doubt in his eyes.";
+ goto L_close;
+
+L_sick_elanore:
+ mes "[Omar]";
+ mes "\"Elanore?\"";
+ mes "He frowns.";
+ mes "\"She knows nothing. I see no point in talking to her.\"";
+ goto L_close;
+
+L_sick_hospital:
+ mes "[Omar]";
+ mes "\"Hurnscald is too far away. I don't think that it would be good for her to go on such a long trip.\"";
+ goto L_close;
+
+L_sick_self:
+ mes "[Omar]";
+ mes "\"You are very kind, but I don't think there is anything you can do.\"";
+ goto L_close;
+
+L_didnt_drink:
+ mes "[Omar]";
+ mes "\"So she has Mopox, not Ponderpox, you say? Hmm. That is much harder to cure, I think.\"";
+ mes "\"I am grateful for the effort you put into brewing a potion for her. But it does smell vile...\"";
+ next;
+ mes "[Omar]";
+ mes "\"I promised my dear wife that I would never make Kadiya eat or drink anything she doesn't like. So I won't force her to drink this.\"";
+ next;
+ mes "[Omar]";
+ @Q_status = (@Q_STATUS_WANTS_CHOCOCAKE + rand(2));
+ callsub S_Update_Var;
+ if (@Q_status == @Q_STATUS_WANTS_ORANGECUPCAKE)
+ mes "\"If only we could make it smell and taste like orange cupcakes... she really loves those cupcakes.\"";
+ if (@Q_status == @Q_STATUS_WANTS_CHOCOCAKE)
+ mes "\"If only this were a chocolate cake and not a potion... she really loves chocolate cakes.\"";
+ goto L_close;
+
+L_make_food:
+ mes "[Omar]";
+ mes "\"I should stay here to watch over her. I wish I could think of a way to convince her to drink the potion...\"";
+ if (@Q_status == @Q_STATUS_WANTS_ORANGECUPCAKE)
+ mes "\"Alas, it is not an orange cupcake.\"";
+ if (@Q_status == @Q_STATUS_WANTS_CHOCOCAKE)
+ mes "\"If only it were to smell and taste like her favourite chocolate cake...\"";
+ goto L_close;
+
+L_cured:
+ if (@Q_status == @Q_STATUS_COMPLETED) goto L_cured_choice;
+ mes "[Omar]";
+ mes "\"She is sleeping now, but she seems to be much better. I am sure that she will be up and running around again soon.\"";
+ goto L_close;
+
+L_cured_choice:
+ mes "[Omar]";
+ mes "\"I am very grateful for your help. I really was sure that it was Ponderpox, not Mopox, that she had.\"";
+ next;
+ menu
+ "Oh, it was nothing.", L_cured_nothing,
+ "I didn't do it alone; Elanore helped.", L_cured_elanore,
+ "That will be 5000 GP.", L_Next1;
+
+L_Next1:
+ mes "[Omar]";
+ mes "\"Ah, certainly.\"";
+ mes "He hands you a small bag of money.";
+ next;
+ @Q_status = @Q_STATUS_COMPLETED_NOELANORE;
+ callsub S_Update_Var;
+ Zeny = Zeny + 5000;
+ goto L_close;
+
+L_cured_nothing:
+ mes "[Omar]";
+ mes "\"No, this wasn't nothing. She is everything to me. Here, you deserve a reward.\"";
+ mes "He hands you a bag of money containing 10,000 GP and two pearls.";
+ mes "\"And feel free to drop by again whenever you would like!\"";
+ @Q_status = @Q_STATUS_COMPLETED_NOELANORE;
+ callsub S_Update_Var;
+ getitem "Pearl", 2;
+ Zeny = Zeny + 10000;
+ goto L_close;
+
+L_cured_elanore:
+ mes "[Omar]";
+ mes "Omar frowns.";
+ mes "\"That witch? You worked with her without telling me?\"";
+ mes "He looks over to his daughter, concern suddenly in his eyes.";
+ mes "\"She is looking better, though...\"";
+ next;
+ mes "[Omar]";
+ mes "Omar shakes his head.";
+ mes "\"I will have to think about this. Please leave me alone.\"";
+ next;
+ @Q_status = @Q_STATUS_COMPLETED_ELANORE;
+ callsub S_Update_Var;
+ goto L_close;
+
+L_close:
+ @Q_STATUS_KNOWS_MOPOX = 0;
+ @Q_STATUS_MADE_MOPOX = 0;
+ @Q_STATUS_DIDNT_DRINK = 0;
+ @Q_STATUS_WANTS_CHOCOCAKE = 0;
+ @Q_STATUS_WANTS_ORANGECUPCAKE = 0;
+ @Q_STATUS_COMPLETED = 0;
+ @Q_STATUS_COMPLETED_ELANORE = 0;
+ @Q_STATUS_COMPLETED_NOELANORE = 0;
+ @Q_STATUS_COMPLETED_POST_ELANORE = 0;
+ @Q_status = 0;
+ close;
+
+
+S_Update_Var:
+ QUEST_MAGIC2 = (QUEST_MAGIC2 & ~(NIBBLE_3_MASK) | (@Q_status << NIBBLE_3_SHIFT));
+ return;
+}
+
+002-2,124,124,0 script Kadiya NPC174,{
+ @child_number = 7;
+ callfunc "XmasList";
+
+ callfunc "ElanoreFix";
+ @Q_MASK = NIBBLE_3_MASK;
+ @Q_SHIFT = NIBBLE_3_SHIFT;
+ callfunc "KadiyaSubquestConsts";
+ @Q_status = @Q_kadiya_status;
+ if (@Q_status >= @Q_STATUS_COMPLETED) goto L_cured;
+
+ mes "You see a young girl lying in bed. At first she doesn't seem to notice you approaching.";
+ mes "Finally, she turns her head towards you. Judging from the sweat on her forehead and look in her eyes, she is suffering from some kind of fever.";
+ next;
+ mes "[Kadiya]";
+ mes "\"Hello,\" she says in a tiny voice.";
+ next;
+ @M_NAME = 1;
+ @M_CANDY = 2;
+ @M_POTION = 3;
+ @M_CHOCOCAKE = 4;
+ @M_CUPCAKE = 5;
+
+ setarray @choice$, "Hello! What's your name?", "Would you like some candy?", "", "", "", "", "", "";
+ setarray @choice_idx, @M_NAME, @M_CANDY, 0, 0, 0, 0, 0, 0;
+ @choices_nr = 2;
+
+ if (countitem("MopoxCurePotion") == 0) goto L_M_no_cure;
+
+ @choice_idx[@choices_nr] = @M_POTION;
+ @choice$[@choices_nr] = "This potion will cure your illness!";
+ @choices_nr = @choices_nr + 1;
+ goto L_M_no_cure;
+
+L_M_no_cure:
+ if ((countitem("LacedChocolateCake") == 0) || (@Q_status != @Q_STATUS_WANTS_CHOCOCAKE))
+ goto L_M_no_chococake;
+ @choice_idx[@choices_nr] = @M_CHOCOCAKE;
+ @choice$[@choices_nr] = "Would you like special chocolate cake?";
+ @choices_nr = @choices_nr + 1;
+ goto L_M_no_chococake;
+
+L_M_no_chococake:
+ if ((countitem("LacedOrangeCupcake") == 0) || (@Q_status != @Q_STATUS_WANTS_ORANGECUPCAKE))
+ goto L_M_no_cupcake;
+ @choice_idx[@choices_nr] = @M_CUPCAKE;
+ @choice$[@choices_nr] = "Would you like special orange cupcake?";
+ @choices_nr = @choices_nr + 1;
+ goto L_M_no_cupcake;
+
+L_M_no_cupcake:
+ @choice_idx[@choices_nr] = 0;
+ @choice$[@choices_nr] = "Goodbye.";
+ @choices_nr = @choices_nr + 1;
+
+ menu
+ @choice$[0], L_MenuItems,
+ @choice$[1], L_MenuItems,
+ @choice$[2], L_MenuItems,
+ @choice$[3], L_MenuItems,
+ @choice$[4], L_MenuItems,
+ @choice$[5], L_MenuItems;
+
+L_MenuItems:
+ @choice = @choice_idx[@menu - 1];
+
+ if (@choice == @M_NAME) goto L_name;
+ if (@choice == @M_CANDY) goto L_No_candy;
+ if (@choice == @M_POTION) goto L_Potion;
+ if (@choice == @M_CHOCOCAKE) goto L_chococake;
+ if (@choice == @M_CUPCAKE) goto L_cupcake;
+ goto L_close;
+
+L_name:
+ mes "[Kadiya]";
+ mes "She smiles a faint smile.";
+ mes "\"My name is Kadiya.\"";
+ goto L_close;
+
+L_No_candy:
+ mes "[Kadiya]";
+ mes "She hesitates for a moment.";
+ mes "\"No, thank you. I don't think I should.\"";
+ goto L_close;
+
+L_Potion:
+ mes "[Kadiya]";
+ if (@Q_status < @Q_STATUS_DIDNT_DRINK) set @Q_status, @Q_STATUS_DIDNT_DRINK;
+ callsub S_Update_Var;
+
+ mes "Kadiya grimaces and pushes the bottle away.";
+ mes "\"That smells terrible!\"";
+ next;
+ mes "[Kadiya]";
+ mes "She pulls the sheets over her head.";
+ mes "\"I won't drink that!\"";
+ goto L_close;
+
+L_chococake:
+ delitem "LacedChocolateCake", 1;
+ goto L_do_cure;
+
+L_cupcake:
+ delitem "LacedOrangeCupcake", 1;
+ goto L_do_cure;
+
+L_do_cure:
+ if (@Q_status < @Q_STATUS_COMPLETED) set @Q_status, @Q_STATUS_COMPLETED;
+ callsub S_Update_Var;
+
+ mes "[Kadiya]";
+ mes "Kadiya's eyes widen.";
+ mes "\"Oh! Daddy, is it okay if I eat this?\"";
+ mes "Omar nods and smiles. \"You should eat a bit to regain your strength, sweetheart.\"";
+ next;
+ mes "[Kadiya]";
+ mes "Kadiya devours your gift in just a handful of bites.";
+ next;
+ mes "[Kadiya]";
+ mes "She smiles. \"Thank you! I feel better already!\".";
+ next;
+ mes "[Kadiya]";
+ mes "She looks much healthier, too. Omar walks over and touches her forehead.";
+ mes "\"Now that is funny – your fever has gone down quite a bit!\"";
+ mes "He smiles at you. \"Thank you for your help!\"";
+ next;
+ mes "[Kadiya]";
+ mes "\"You should get some sleep now, sweetheart. I'm sure that you will be better soon.\"";
+ goto L_close;
+
+L_cured:
+ mes "[Kadiya]";
+ mes "Kadiya seems to be sleeping calmly. She looks much less sweaty than earlier; unless you are very much mistaken, her fever has disappeared.";
+ goto L_close;
+
+L_close:
+ @Q_status = 0;
+ @Q_MASK = 0;
+ @Q_SHIFT = 0;
+ @M_NAME = 0;
+ @M_CANDY = 0;
+ @M_POTION = 0;
+ @M_CHOCOCAKE = 0;
+ @M_CUPCAKE = 0;
+ @choice = 0;
+ @choices_nr = 0;
+ cleararray @choice_idx[0], 0, 7;
+ cleararray @choice$[0], "", 7;
+ close;
+
+S_Update_Var:
+ QUEST_MAGIC2 = (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/002-2/phaet.txt b/npc/002-2/phaet.txt
new file mode 100755
index 00000000..e9342bb5
--- /dev/null
+++ b/npc/002-2/phaet.txt
@@ -0,0 +1,28 @@
+
+002-2,75,56,0 script Phaet NPC125,0,0,{
+ mes "[Phaet the Royal Guard]";
+ mes "\"Hey, you seem tough enough! Would you like to prove your skills? I'll let you in the arena if you give me 50 gp. You can fight against other players there.\"";
+ next;
+ menu
+ "Yes", L_Sure,
+ "No", L_Next;
+
+L_Next:
+ mes "[Phaet the Royal Guard]";
+ mes "\"Ha ha, coward.\"";
+ close;
+
+L_Sure:
+ if (Zeny < 50) goto L_NoMoney;
+ Zeny = Zeny - 50;
+
+ mes "[Phaet the Royal Guard]";
+ mes "\"Get ready!\"";
+ next;
+ warp "001-3", 0, 0;
+ close;
+
+L_NoMoney:
+ mes "\"Wait a second, you don't have enough money.\"";
+ close;
+}
diff --git a/npc/002-2/rebecca.txt b/npc/002-2/rebecca.txt
new file mode 100755
index 00000000..8524dfa4
--- /dev/null
+++ b/npc/002-2/rebecca.txt
@@ -0,0 +1,82 @@
+
+002-2,44,27,0 script Rebecca NPC118,{
+ @npcname$ = "Rebecca the Inn Keeper";
+ @Cost = 100;
+ mes "[" + @npcname$ + "]";
+ mes "\"Welcome to 'The Wizard's Rest'\"";
+ goto L_MainMenu;
+
+L_MainMenu:
+ mes "\"How may I help you?\"";
+ menu
+ "Can I get a room?", L_Inn,
+ "Any interesting guests?", L_Guests,
+ "Bakery?", L_Bakery,
+ "Barber?", L_Barber,
+ "Casino?", L_Casino,
+ "Theatre?", L_Theatre,
+ "Pvp?", L_Pvp,
+ "I don't need any help, thanks.", L_close;
+
+L_Guests:
+ mes "\"We had a very rich business man show up the other day.\"";
+ next;
+ mes "\"He caused quite a stir when he paid for the penthouse so far in advance.";
+ mes "I hear he is looking for help.\"";
+ next;
+ mes "\"Other then that feel free to mingle with the guests.\"";
+ next;
+ mes "\"You can find them in the door behind me.\"";
+ goto L_close;
+
+
+L_Bakery:
+ mes "\"Ahh yes, the World Famous Riskim's bakery.\"";
+ next;
+ mes "\"They only use the finest ingredients like Acorn Flour";
+ mes "to make some of the tastest treats in Tonori.\"";
+ next;
+ mes "Second only to the Wizards' private chef, Fieri.\"";
+ goto L_MainMenu;
+
+L_Barber:
+ mes "\"Issay the barber of Tonori can be found through the door behind me\"";
+ next;
+ mes "\"The master stylist can do anything with anyones hair.\"";
+ next;
+ mes "\"He always welcomes walk ins.\"";
+ goto L_MainMenu;
+
+L_Casino:
+ mes "\"Games, Games, Games.\"";
+ next;
+ mes "\"Test your luck or skill in the Casino. From Blackjack to Pvp.\"";
+ next;
+ mes "\"Win or Lose, you'll still have fun!\"";
+ goto L_MainMenu;
+
+L_Theatre:
+ mes "\"A touring troop from Hurnscald just arrived.\"";
+ next;
+ mes "\"The are currently rehearsing for their next show.\"";
+ next;
+ mes "\"Feel free to talk to the troupe leader, they are in the theatre behind me.\"";
+ goto L_MainMenu;
+
+L_Pvp:
+ mes "\"Yes, our Casino has Pvp in the Casino behind me.\"";
+ next;
+ mes "\"Test your self against other players and gamble on the outcome.\"";
+ next;
+ mes "\"Fame and glory awaits you gladiator!\"";
+ goto L_MainMenu;
+
+L_Inn:
+ callfunc "Inn";
+ goto L_close;
+
+L_close:
+ @npcname$ = "";
+ @Cost = 0;
+ close;
+}
diff --git a/npc/002-2/shops.txt b/npc/002-2/shops.txt
new file mode 100755
index 00000000..23bb9a57
--- /dev/null
+++ b/npc/002-2/shops.txt
@@ -0,0 +1,2 @@
+
+002-2,68,25,0 shop Bartender#Casino NPC112,539:87,513:15,519:50
diff --git a/npc/002-2/stranger.txt b/npc/002-2/stranger.txt
new file mode 100755
index 00000000..98c9ffd7
--- /dev/null
+++ b/npc/002-2/stranger.txt
@@ -0,0 +1,394 @@
+002-2,38,57,0 script Stranger NPC192,{
+ @iRONINGOT = 5;
+ @PINKANTENNA = 21;
+ @Exp = 20000;
+ setarray @towelReq$[0], "HitchhikersTowel";
+
+ if (FLAGS & FLAG_TOWEL_COMPLETED) goto L_Event_Done;
+ if ((gettimetick(2)-TUT_var < 6*7*86400) || (BaseLevel < 42)) //player must be created at least 6 weeks ago and at least level 42
+ goto L_No_Event;
+ if (FLAGS & FLAG_TOWEL_HelpED) goto L_Towel;
+
+ mes "[Stranger]";
+ mes "\"Hello, hello! It's great to see you. Maybe you can help me with a little problem I have.\"";
+ next;
+ mes "\"I need some materials to repair my spacesh- ahm, it's not important why I need it.\"";
+ next;
+ mes "\"Anyway, I'd be really happy if you can give me " + @iRONINGOT + " Iron Ingots and " + @PINKANTENNA + " Pink Antennas.\"";
+ next;
+ mes "\"Do you have that for me?\"";
+ menu
+ "Yeah, sure.",L_Items,
+ "No.",L_close;
+
+L_Items:
+ if (countitem("IronIngot") < @iRONINGOT) goto L_No_Item;
+ if (countitem("PinkAntenna") < @PINKANTENNA) goto L_No_Item;
+ delitem "IronIngot", @iRONINGOT;
+ delitem "PinkAntenna", @PINKANTENNA;
+ getexp @Exp, 0;
+ FLAGS = FLAGS | FLAG_TOWEL_HelpED;
+
+ mes "[Stranger]";
+ mes "\"Great! Thank you!\"";
+ next;
+ mes "\"I have a lot of work to do now. But before you leave...\"";
+ next;
+ goto L_Towel;
+
+L_Towel:
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_Full_Inv;
+ mes "[Stranger]";
+ mes "\"On May 25th it is a very special day - Towel Day.\"";
+ next;
+ mes "\"To celebrate this I'll ask you some questions about my favourite book, The Hitchhiker's Guide to the Galaxy. If you can answer them, I'll give you something very useful.\"";
+ next;
+ mes "";
+ mes "[Server]";
+ mes "The answers might need to have whitespaces.";
+ mes "If you're using a client which confirms your answer when pressing space, change this setting before continuing.";
+ mes "";
+ next;
+ mes "[Stranger]";
+ mes "\"The first one is easy.\"";
+ next;
+
+ setarray @quiz_questions$[0],
+ "What two words are written in big friendly letters on the back cover?",
+ "What's the name of the paranoid robot?",
+ "What is the answer to life, the universe and everything?",
+ "What is the first name of the author of the hitchhikers guide?",
+ "What is the last name of the author of the hitchhikers guide?",
+ "Who is the male human protagonist?",
+ "Who is the female human protagonist?",
+ "According to the Guide, space is ___?",
+ "What is the name of the spaceship which was stolen by the president of the universe?",
+ "How many heads does Zaphod Beeblebrox have?";
+ setarray @quiz_answers$[0],
+ "Don't Panic",
+ "Marvin",
+ "42",
+ "Douglas",
+ "Adams",
+ "Arthur Philip Dent",
+ "Trillian",
+ "Big",
+ "Heart of Gold",
+ "2";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
+ mes "[Stranger]";
+ mes "\"You're absolutely right. The next one will be more tricky.\"";
+ next;
+
+ setarray @quiz_questions$[0],
+ "What is the name of the rock group claiming to be the loudest band in the universe?",
+ "What star is near Ford's home planet?",
+ "Which country does the human protagonist come from?",
+ "What is the name of the computer on The Heart of Gold?",
+ "What color is a Babel Fish?",
+ "What did the bowl of petunias think?",
+ "What body orifice should a babel fish be inserted in to work properly?",
+ "What is the name of the super computer?",
+ "What were the second most intelligent creatures on Earth?",
+ "What race creates the worst poetry in universe?",
+ "What is the name of the Vogon home planet?",
+ "What is the name of the Restaurant at the End of the Universe?";
+ setarray @quiz_answers$[0],
+ "Disaster Area",
+ "Betelgeuse",
+ "England",
+ "Eddie",
+ "Yellow",
+ "Oh no, not again",
+ "Ear",
+ "Deep Thought",
+ "Dolphins",
+ "Vogons",
+ "Vogsphere",
+ "Milliways";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
+ mes "[Stranger]";
+ mes "\"Not bad, not bad. Let's see if you can answer an even more difficult one.\"";
+ next;
+
+ setarray @quiz_questions$[0],
+ "Drinking what drink is like having your brain smashed out by a slice of lemon wrapped round a large gold brick?",
+ "How many pints of beers should you drink before hitchhiking?",
+ "What initials are carved into Zaphod Beeblebrox's brain?",
+ "What is Ford Prefect's nickname?",
+ "Who is responsible for the fjords of Norway?",
+ "What game is played on earth as a relict of memories to an ancient war?",
+ "What is the name of the triple-breasted whore from Eroticon VI?",
+ "Who will insult every living being in the universe, because he is immortal and getting bored?",
+ "What is the name of the piteous creature that is continually reincarnated and subsequently killed, each time unknowingly, by Arthur Dent?";
+ setarray @quiz_answers$[0],
+ "Pan Galactic Gargle Blaster",
+ "3",
+ "ZB",
+ "Ix",
+ "Slartibartfast",
+ "Cricket",
+ "Eccentrica Gallumbits",
+ "Wowbagger",
+ "Agrajag";
+
+ callfunc "MultiQuiz";
+ if (@success == 0) goto L_Wrong_Answer;
+
+ mes "[Stranger]";
+ mes "\"Unbelievable! You're really a wise person.\"";
+ next;
+ mes "\"One last question, but this shouldn't be a problem for you.\"";
+ next;
+ mes "\"What is the most important item for every hitchhiker to have?\"";
+ mes "";
+ mes "##BDrag & drop the item from your inventory##b.";
+ requestitem .@answer$[0];
+ if (.@answer$[0] != "Towel" && .@answer$[0] != "HitchhikersTowel")
+ goto L_Wrong_Answer;
+
+ mes "[Stranger]";
+ mes "\"There you are! A towel is really the most important item for a hitchhiker to have.\"";
+ next;
+ mes "\"Please take this.\""; // no full inventory check, this is done before the game
+ FLAGS = FLAGS | FLAG_TOWEL_COMPLETED;
+ next;
+ goto L_Explain;
+
+L_Explain:
+ mes "[Stranger]";
+ mes "\"This towel is even more useful than usual towels are. If you change its color, it uses a special techno-, ahm, let's say, it can help you to get to other places.\"";
+ next;
+ mes "\"Bring me some powder made from gemstones and a bottle of water, and I can prepare it for you.\"";
+ next;
+ mes "\"Depending on the color it will bring you to different places. It might wear out after a while and it'll loose its color, but I can prepare it for you again.\"";
+ next;
+ mes "\"Since I'm not familar with this plane-, ahm, with this area, I can't tell which places you will end up in.\"";
+ goto L_close;
+
+L_No_Event:
+ mes "[Stranger]";
+ mes "\"Hello. Isn't this a beautiful place?\"";
+ next;
+ mes "\"And it really comes in handy that I have my towel with me. A towel is about the most massively useful thing an inte- ahm, a person can have.\"";
+ next;
+ mes "\"You can read more about that in my favourite book, 'The Hitchhiker's Guide to the Galaxy'.\"";
+ if (FLAGS & FLAG_TOWEL_COMPLETED)
+ menu
+ "Thanks for the advice.",L_close,
+ "I have my towel with me too.",L_Dye;
+ goto L_close;
+
+L_Dye:
+ mes "[Stranger]";
+ mes "\"Wonderful! Let me have a look.\"";
+ mes "He's taking a very interested look at your towel.";
+ next;
+ mes "[Stranger]";
+ mes "\"I'm impressed. This is not an usual towel.\"";
+ next;
+ menu
+ "Oh? Can you explain about it?",L_Explain,
+ "I know. Could you dye it for me?",L_StartDyeTowel,
+ "It's great, isn't it? I have to go now.",L_close;
+
+L_No_Item:
+ mes "[Stranger]";
+ mes "\"Hu? It seems you haven't.\"";
+ goto L_close;
+
+L_Wrong_Answer:
+ mes "[Stranger]";
+ mes "\"Nah, that's wrong. Come back if you want to try again.\"";
+ goto L_close;
+
+L_Event_Done:
+ mes "[Stranger]";
+ mes "\"Ah, welcome back. Thanks again for your help.\"";
+ next;
+ mes "\"Shall I dye your towel?\"";
+ menu
+ "That would be great!", L_StartDyeTowel,
+ "No, thanks.", L_close;
+
+L_StartDyeTowel:
+ mes "[Stranger]";
+ mes "\"Alright, which color do you want?\"";
+ menu
+ "Red",L_Red,
+ "Yellow",L_Yellow,
+ "White",L_White,
+ "Blue",L_Blue,
+ "Green",L_Green,
+ "Purple",L_Purple,
+ "Orange",L_Orange,
+ "Pink",L_Pink,
+ "Lime",L_Lime,
+ "Teal",L_Teal,
+ "I changed my mind.", L_close;
+
+L_White:
+ // Koga
+ @warpTowelName$ = "WhiteHitchhikersTowel";
+ setarray @towelPowder$, "DiamondPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Red:
+ // Barbarians
+ @warpTowelName$ = "RedHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Green:
+ // Candor
+ @warpTowelName$ = "GreenHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Blue:
+ // Blue Sages
+ @warpTowelName$ = "BlueHitchhikersTowel";
+ setarray @towelPowder$, "SapphirePowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Yellow:
+ // Tulimshar Mines
+ @warpTowelName$ = "YellowHitchhikersTowel";
+ setarray @towelPowder$, "TopazPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Purple:
+ // Dimonds Inn
+ @warpTowelName$ = "PurpleHitchhikersTowel";
+ setarray @towelPowder$, "AmethystPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
+
+L_Orange:
+ // Graveyard
+ @warpTowelName$ = "OrangeHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder", "TopazPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
+
+L_Pink:
+ // Terranite Cave
+ @warpTowelName$ = "PinkHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder", "DiamondPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
+
+L_Teal:
+ // Mana Seed
+ @warpTowelName$ = "TealHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder", "SapphirePowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
+
+L_Lime:
+ // Panchua
+ @warpTowelName$ = "LimeHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder", "TopazPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
+
+L_DyeChecks:
+ mes "[Stranger]";
+ mes "\"Ok, I'll need a bottle of water first.\"";
+ next;
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_Full_Inv;
+ if (countitem("BottleOfWater") < 1) goto L_No_Water;
+ @powderCheckCount = 0;
+ goto L_PowderChecks;
+
+L_PowderCheckAgain:
+ mes "[Stranger]";
+ mes "\"Now I need " + @towelPowderCnt[@powderCheckCount] + " " + @towelPowder$[@powderCheckCount] + ".\"";
+ next;
+ if((@powderCheckCount + 1) == getarraysize(@towelPowder$))
+ goto L_TowelChecks;
+ @powderCheckCount = (@powderCheckCount + 1);
+ goto L_PowderChecks;
+
+L_PowderChecks:
+ if (countitem(@towelPowder$[@powderCheckCount]) < @towelPowderCnt[@powderCheckCount])
+ goto L_No_Powder;
+ goto L_PowderCheckAgain;
+
+L_TowelCheckAgain:
+ @towelCheckCount = (@towelCheckCount + 1);
+ if(@towelCheckCount >= getarraysize(@towelReq$))
+ goto L_No_Towel;
+ goto L_TowelChecks;
+
+L_TowelChecks:
+ if (countitem(@towelReq$[@towelCheckCount]) > 0)
+ goto L_DeletePowder;
+ goto L_TowelCheckAgain;
+
+L_DeleteAgain:
+ @powderCheckCount = (@powderCheckCount - 1);
+ goto L_DeletePowder;
+
+L_DeletePowder:
+ delitem @towelPowder$[@powderCheckCount], @towelPowderCnt[@powderCheckCount];
+ if (@powderCheckCount)
+ goto L_DeleteAgain;
+ goto L_DyeTowel;
+
+L_DyeTowel:
+ delitem @towelReq$[@towelCheckCount], 1;
+ delitem "BottleOfWater", 1;
+ getitem @warpTowelName$, 1;
+ mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
+ next;
+ mes "[Stranger]";
+ mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
+ goto L_close;
+
+L_No_Water:
+ mes "[Stranger]";
+ mes "\"You don't have water.\"";
+ goto L_close;
+
+L_No_Powder:
+ mes "[Stranger]";
+ mes "\"You need to bring me enough gem powder in that color. Maybe someone used to mining can help you with that.\"";
+ goto L_close;
+
+L_No_Towel:
+ mes "[Stranger]";
+ mes "\"Where's your towel? It is really useful, you should always keep it with you.\"";
+ goto L_close;
+
+L_Full_Inv:
+ mes "[Stranger]";
+ mes "\"You carry a lot of stuff with you, don't you? Maybe you should get rid of something.\"";
+ goto L_close;
+
+L_close:
+ @iRONINGOT = 0;
+ @PINKANTENNA = 0;
+ @Exp = 0;
+ @random = 0;
+ @quizparam$ = "";
+ @warpTowelName$ = "";
+ @powderCheckCount = 0;
+ @towelCheckCount = 0;
+ cleararray @towelPowder$, "", getarraysize(@towelPowder$);
+ cleararray @towelPowderCnt, "", getarraysize(@towelPowderCnt);
+ close;
+}
diff --git a/npc/002-2/troupe_leader.txt b/npc/002-2/troupe_leader.txt
new file mode 100755
index 00000000..7243be84
--- /dev/null
+++ b/npc/002-2/troupe_leader.txt
@@ -0,0 +1,61 @@
+
+002-2,81,21,0 script Troupe Leader NPC165,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (@inspector == 4) goto L_NohMask_Troupe;
+ if (@inspector == 13) goto L_NohMask_Found;
+
+ mes "[Troupe Leader]";
+ mes "\"Hello. I'm the leader of a traveling theater troupe. We'll be staying here in Tulimshar for a while.\"";
+ goto L_close;
+
+L_NohMask_Troupe:
+ mes "[Troupe Leader]";
+ mes "\"Yes, a mask was stolen from us the last night we were in Hurnscald.\"";
+ next;
+ menu
+ "Any ideas on who might have taken it?", L_NohMask_Idea,
+ "Are you sure one of your troupe members didn't hide it and commit those robberies?", L_NohMask_Accuse,
+ "Hmm...", L_close;
+
+L_NohMask_Idea:
+ @inspector = 5;
+ callsub S_Update_Mask;
+ mes "[Troupe Leader]";
+ mes "\"Hm...I did see an old man hang out near the theater after our last show.\"";
+ goto L_close;
+
+L_NohMask_Accuse:
+ mes "[Troupe Leader]";
+ mes "\"I am absolutely positive. None of my troupe have left the city since we got here. Good day!\"";
+ goto L_close;
+
+L_NohMask_Found:
+ mes "[Troupe Leader]";
+ mes "\"Thank you for finding the mask. You did such a good job, you should keep it.\"";
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_NohMask_TooMany;
+ mes "[1500 experience points]";
+ getexp 1500, 0;
+ @inspector = 14;
+ callsub S_Update_Mask;
+ getitem "NohMask", 1;
+ next;
+ mes "[Troupe Leader]";
+ mes "\"We don't need it anymore. We're doing different shows here.\"";
+ goto L_close;
+
+L_NohMask_TooMany:
+ next;
+ mes "[Troupe Leader]";
+ mes "\"Except, you don't seem to have any room for it. I'll hold onto it for you until you do have room.\"";
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+
+S_Update_Mask:
+ QUEST_Hurnscald = (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (@inspector << NIBBLE_3_SHIFT);
+ return;
+}