// Kylian is a businessman from Argeas who wants to eventually open a shop in Tulimshar
// asks the player for several information about the city
// Quest uses Nibble 4 and 5 of QUEST_NorthTulimshar
// Author: Jenalya
// Nibble 4 is used as flags to indicate if the player knows certain places/persons
// Bit 0: player talked to Yanis in the government building
// Bit 1: player talked to Latoy on the market in North Tulimshar
// Bit 2: player talked to Weellos as the historic building
// Bit 3: player was in the casino rooms
// Nibble 5 is used to save the quest progress with Kylian
// state 1: player has the task to get the luggage from the harbor
// state 2: Adrian gave the luggage to the player
// state 3: player gave luggage to Kylian and Kylian asks who to talk to for the shop license
// after the player answered this, @KylianNTLicense is set.
// the player can only continue the quest when logging out and therefore setting that value to 0 again
// state 4: Kylian asks for a historical building to get some cultural knowledge
// state 5: Kylian asks where to get some typical food
// after the player answered this, @KylianNTSightSeeing is set.
// the player can only continue the quest when logging out and therefore setting that value to 0 again
// state 6: Kylian asks where to go to have some fun in the evening (casino)
// state 7: Kylian asks where to get exquisite clothing before going out in the evening
// after the player answered this, @KylianNTSightSeeing is set.
// the player can only continue the quest when logging out and therefore setting that value to 0 again
// state 8: Kylian was in the casino and gives a desert hat as reward
// state 9: Shop approved, go talk Kylian's shopkeeper if you are looking for work.
// state 10: Meet Shop keeper
// state 11: Start Time Trial
// state 12: Return
// state 13: Start Daily Timed
// state 14: Return
// state 15: Completed
// Kylian_Timer is used to denote start time.
// temporary variables used to check if the player logged out or left the building in the meanwhile
// this is to ensure some 'time in between' different actions of the quest
// @KylianNTLicense
// @KylianNTSightSeeing
// @KylianNTCasino
-|script|#businessmanNTconfig|32767
{
end;
OnInit:
// Nibble 4
// Used in Random Quest later as a Nibble
set $@knowYanisNT, (1 << 16);
set $@knowLatoyNT, (1 << 17);
set $@knowWeellosNT, (1 << 18);
set $@knowCasinoNT, (1 << 19);
// Random Quests for Later
setarray $@random_quests$, "None", "Falkurn", "Old Wizard", "Baktar";
set $@delivery_money, 100;
set $@delivery_exp_mod, 10;
end;
}
002-2,44,107,0|script|#KylianOut|32767,1,1
{
set @KylianNTLicense, 0;
set @KylianNTSightSeeing, 0;
set @KylianNTCasino, 0;
end;
}
002-2,43,101,0|script|Kylian|193
{
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
set @acorn_amount, 12;
set @suitcase_money, 100;
set @suitcase_exp, 50;
set @license_money, 50;
set @license_exp, 20;
set @sightseeing_money, 50;
set @sightseeing_exp, 20;
set @food_money, 50;
set @food_exp, 20;
set @clothes_money, 50;
set @clothes_exp, 20;
set @fun_money, 50;
set @fun_exp, 20;
set @fieri, ((QUEST_SouthTulimshar & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT);
if (@state == 15) goto L_Done;
if (@state >= 11) goto L_Helping;
if (@state == 10) goto L_OfferedJob;
if (@state == 9) goto L_Shop;
if (@KylianNTCasino) goto L_CasinoDone;
if (@state == 8) goto L_DesertHat;
if (@state == 7) goto L_Clothes;
if (@KylianNTSightSeeing) goto L_SightSeeingDone;
if (@state == 6) goto L_Casino;
if (@state == 5) goto L_Food;
if (@KylianNTLicense) goto L_LicenseDone;
if (@state == 4) goto L_SightSeeing;
if (@state == 3) goto L_ShopLicense;
if (@state >= 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.";
set @state, 1;
callfunc "SetKylianQuest";
goto L_Close;
L_Suitcase: // @state >= 1, but below 3
mes "[Kylian]";
mes "\"Did you get my luggage from the docks?\"";
if (@state != 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;
set Zeny, Zeny + @suitcase_money;
getitem "Acorn", @acorn_amount;
getexp @suitcase_exp, 0;
set @state, 3;
callfunc "SetKylianQuest";
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: // @state == 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:
set Zeny, Zeny + @license_money;
getexp @license_exp, 0;
set @state, 4;
callfunc "SetKylianQuest";
set @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: // @state == 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:
set Zeny, Zeny + @sightseeing_money;
getexp @sightseeing_exp, 0;
set @state, 5;
callfunc "SetKylianQuest";
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: // @state == 5
mes "[Kylian]";
mes "\"While I'm out, I could also get something to eat. Do you have any suggestions for local cuisine?\"";
if (@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:
set Zeny, Zeny + @food_money;
getexp @food_exp, 0;
set @state, 6;
callfunc "SetKylianQuest";
set @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: // @state == 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:
set Zeny, Zeny + @casino_money;
getexp @casino_exp, 0;
set @state, 7;
callfunc "SetKylianQuest";
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: // @state == 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:
set Zeny, Zeny + @clothes_money;
getexp @clothes_exp, 0;
set @state, 8;
callfunc "SetKylianQuest";
set @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: // @state == 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;
set @state, 9;
callfunc "SetKylianQuest";
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.\"";
set @state, 10;
callfunc "SetKylianQuest";
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;
set Zeny, Zeny + $@delivery_money;
getexp ($@delivery_exp_mod * BaseLevel), 0;
set @run_cnt, 0;
callfunc "SetKylianRunCnt";
set @state, 12;
callfunc "SetKylianQuest";
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:
set @acorn_amount, 0;
set @suitcase_money, 0;
set @suitcase_exp, 0;
set @license_money, 0;
set @license_exp, 0;
set @sightseeing_money, 0;
set @sightseeing_exp, 0;
set @food_money, 0;
set @food_exp, 0;
set @clothes_money, 0;
set @clothes_exp, 0;
set @fun_money, 0;
set @fun_exp, 0;
set @inventorylist_count, 0;
set @fieri, 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|SetKylianQuest
{
set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(NIBBLE_5_MASK)) | (@state << NIBBLE_5_SHIFT);
return;
}
function|script|KylianDebug
{
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
set @fieri, ((QUEST_SouthTulimshar & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
set @run, ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
set @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: " + @state;
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 @state;
callfunc "SetKylianQuest";
goto L_Menu;
L_WorkTimer:
set Kylian_Timer, gettimetick(2);
goto L_Menu;
L_MoreWorkTimer:
set Kylian_Timer, (gettimetick(2) - 86401);
goto L_Menu;
L_Close:
close;
}
002-2,40,101,0|script|KylianDebug#1|193
{
callfunc "KylianDebug";
end;
OnInit:
if (!debug)
disablenpc "KylianDebug#1";
end;
}
002-2,118,89,0|script|KylianDebug#2|193
{
callfunc "KylianDebug";
end;
OnInit:
if (!debug)
disablenpc "KylianDebug#2";
end;
}