function script DailyQuestPointsFunc {
@dq_earliest = gettimetick(2) - 86400;
if (DailyQuestTime < @dq_earliest)
DailyQuestTime = @dq_earliest;
// how many whole daily quest points the player has earned
// we increment DailyQuestTime by the number of seconds in that many increments
@dq_increments = (gettimetick(2) - DailyQuestTime)*BaseLevel / 86400;
DailyQuestTime = DailyQuestTime + @dq_increments*86400/BaseLevel;
// player can't regenerate any quest points, but might have a bonus
if (DailyQuestPoints >= BaseLevel)
goto L_Bonus;
// normal recharging case - increment, but don't let it recharge more than a day's worth
DailyQuestPoints = DailyQuestPoints + @dq_increments;
if (DailyQuestPoints > BaseLevel)
DailyQuestPoints = BaseLevel;
// fallthrough to bonus, which *is* allowed to push DailyQuestPoints above BaseLevel
goto L_Bonus;
L_Bonus:
DailyQuestPoints = DailyQuestPoints + DailyQuestBonus;
DailyQuestBonus = 0;
return;
}
function script DailyQuest {
callfunc "DailyQuestPointsFunc";
if (BaseLevel < @dq_level)
goto L_Low_Level;
if (DailyQuestPoints < @dq_cost)
goto L_Not_Enough_Points;
mes "\"If you bring me " + @dq_count + " " + @dq_friendly_name$ + ", I will give you a reward.\"";
menu
"I have what you want.", L_Trade,
"Take all you need.", L_All,
"Ok, I'll get to work.", L_Next,
"Nah, I'm not going to help you.", L_Next;
L_Next:
@dq_return = 1;
goto L_Exit;
L_Trade:
if (countitem(@dq_name$) < @dq_count)
goto L_Not_Enough;
delitem @dq_name$, @dq_count;
Zeny = Zeny + @dq_money;
getexp @dq_exp, 0;
DailyQuestPoints = DailyQuestPoints - @dq_cost;
if (@dq_handle_return)
goto L_Exit_Good;
mes "\"Thank you!\"";
callsub S_SayPhrase;
mes "";
mes "[" + @dq_money + " money]";
mes "[" + @dq_exp + " experience points]";
goto L_Exit_Good;
L_All:
if (countitem(@dq_name$) < @dq_count)
goto L_Not_Enough;
@item_multiple = (countitem(@dq_name$) / @dq_count);
@dp_multiple = (DailyQuestPoints / @dq_cost);
if (@dp_multiple > @item_multiple)
@multipler = @item_multiple;
if (@item_multiple >= @dp_multiple)
@multipler = @dp_multiple;
DailyQuestPoints = DailyQuestPoints - (@dq_cost * @multipler);
delitem @dq_name$, (@dq_count * @multipler);
Zeny = Zeny + (@dq_money * @multipler);
getexp (@dq_exp * @multipler), 0;
if (@dq_handle_return)
goto L_Exit_Good;
mes "\"Thank you!\"";
callsub S_SayPhrase;
mes "";
mes "[" + (@dq_money * @multipler) + " money]";
mes "[" + (@dq_exp * @multipler) + " experience points]";
goto L_Exit_Good;
L_Exit_Good:
@dq_return = 4;
goto L_Exit;
L_Not_Enough:
if (!@dq_handle_return)
mes "\"I said " + @dq_count + " " + @dq_friendly_name$ + "; you should learn to count.\"";
@dq_return = 3;
goto L_Exit;
L_Low_Level:
if (!@dq_handle_return)
mes "\"Hey, you should go kill some things to get stronger first.\"";
@dq_return = 0;
goto L_Exit;
L_Not_Enough_Points:
mes "\"You look exhausted, maybe you should rest a bit.\"";
@dq_return = 2;
goto L_Exit;
L_Exit:
set @dq_handle_return, 0; // Incase they forget
return;
S_SayPhrase:
if (@dq_handle_return)
goto L_Return;
if (DailyQuestPoints < @dq_cost)
goto L_Exhausted;
if (DailyQuestPoints > BaseLevel)
goto L_Over;
if (DailyQuestPoints > (BaseLevel*9)/10)
goto L_P90;
if (DailyQuestPoints > (BaseLevel*7)/10)
goto L_P70;
if (DailyQuestPoints > (BaseLevel*5)/10)
goto L_P50;
goto L_Low;
L_Over:
mes "\"Woah, you're bursting with power.\"";
return;
L_P90:
mes "\"You're in a very good shape.\"";
return;
L_P70:
mes "\"You don't seem very exhausted by my tasks.\"";
return;
L_P50:
mes "\"Aren't you getting weary yet?\"";
return;
L_Low:
mes "\"You look a little tired.\"";
return;
L_Exhausted:
mes "\"You look exhausted, maybe you should rest a bit.\"";
return;
L_Return:
return;
}