// KPS (Killian Parcel Service)
// Author: Wushin
// Kylian_Timer denotes current quest time & holds last completed.
// reuse the 4 bits
// To Mark 4 Different NPCs.
// setarray $@kps_npc_bits, $@knowYanisNT, $@knowLatoyNT, $@knowWeellosNT, $@knowCasinoNT;
002-2,120,89,0|script|KPS Manager|191
{
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
set @run, ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
set @run_cnt, ((QUEST_NorthTulimshar & TWOBIT_9_MASK) >> TWOBIT_9_SHIFT);
if (@state == 15)
goto L_SeeKylian;
if (@state == 14)
goto L_RunComplete;
if (@state == 13)
goto L_RunStarted;
if (@state == 12)
goto L_JobSelect;
if (@state == 11)
goto L_AcceptJob;
if (@state == 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:
set @state, 11;
callfunc "SetKylianQuest";
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:
set @run, 0;
callfunc "SetKylianRun";
set @run_cnt, 0;
callfunc "SetKylianRunCnt";
set @state, 12;
callfunc "SetKylianQuest";
goto L_JobSelect;
L_StartJobAgain:
set @run, 0;
callfunc "SetKylianRun";
set @state, 12;
callfunc "SetKylianQuest";
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:
set @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:
set @state, 13;
callfunc "SetKylianQuest";
set @run, @rand_quest;
callfunc "SetKylianRun";
set Kylian_Timer, gettimetick(2);
goto L_Close;
L_RunStarted:
mes "Deliver this package to ##B" + $@random_quests$[@run] + "##b.\"";
goto L_Close;
L_RunComplete:
set @elapsed_time, (gettimetick(2) - Kylian_Timer);
if (@elapsed_time > 600)
goto L_Failed;
set @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:
set Zeny, Zeny + $@delivery_money;
getexp ($@delivery_exp_mod * BaseLevel), 0;
callfunc "SetKylianRun";
set @state, 15;
callfunc "SetKylianQuest";
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:
set 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
{
set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(TWOBIT_8_MASK)) | (@run << TWOBIT_8_SHIFT);
return;
}
function|script|SetKylianRunCnt
{
set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(TWOBIT_9_MASK)) | (@run_cnt << TWOBIT_9_SHIFT);
return;
}