// The daily quests // Variables returned: // @dq_return - Code of what happend // 0 = Low level // 1 = Ignored NPC // 2 = Not enough points // 3 = Not enough items // 4 = Success // Variables to set: // @dq_level - Minimal level needed to use the quest // @dq_cost - The number of points this quest uses // @dq_count - The number of given item needed // @dq_name$ - String name of the item as seen by server // @dq_friendly_name$ - String name of the item as seen by user // @dq_money - The money reward for doing the quest // @dq_exp - Experince gained by doing the quest // Optional: // @dq_handle_return - When set to anything other then 0 the function will not print exiting text // Variables used inside: // DailyQuestPoints - The number of points the player currently has // DailyQuestTime - Time since DailyQuestPoints was lasted renewed // DailyQuestBonus - Additional points added once in addition to player BaseLevel // (DailyQuestBonus makes a good reward from non-daily quests) function script DailyQuest { set @dq_earliest, gettimetick(2) - 86400; if (DailyQuestTime < @dq_earliest) set 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 set @dq_increments, (gettimetick(2) - DailyQuestTime)*BaseLevel / 86400; set 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 set DailyQuestPoints, DailyQuestPoints + @dq_increments; if (DailyQuestPoints > BaseLevel) set DailyQuestPoints, BaseLevel; //fallthrough to bonus, which *is* allowed to push DailyQuestPoints above BaseLevel L_Bonus: if (DailyQuestBonus != 0) set DailyQuestPoints, DailyQuestPoints + DailyQuestBonus; set DailyQuestBonus, 0; 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, "Ok, I'll get to work.", -, "Nah, I'm not going to help you.", -; set @dq_return, 1; goto L_Exit; L_Trade: if (countitem(@dq_name$) < @dq_count) goto L_Not_Enough; delitem @dq_name$, @dq_count; set zeny, zeny + @dq_money; getexp @dq_exp, 0; set DailyQuestPoints, DailyQuestPoints - @dq_cost; if (@dq_handle_return) goto L_Exit_Good; mes "\"Thank you!\""; mes ""; mes "[" + @dq_money + " money]"; mes "[" + @dq_exp + " experience points]"; L_Exit_Good: set @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.\""; set @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.\""; set @dq_return, 0; goto L_Exit; L_Not_Enough_Points: if (!@dq_handle_return) mes "\"You look exhausted, maybe you should rest a bit.\""; set @dq_return, 2; goto L_Exit; L_Exit: set @dq_handle_return, 0; // Incase they forget return; }