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; }