summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npc/functions/dailyquest.txt34
1 files changed, 22 insertions, 12 deletions
diff --git a/npc/functions/dailyquest.txt b/npc/functions/dailyquest.txt
index 0c99afd4..dc56895b 100644
--- a/npc/functions/dailyquest.txt
+++ b/npc/functions/dailyquest.txt
@@ -9,11 +9,11 @@
// 4 = Success
// Variables to set:
-// @dq_level - Minumal level needed to use the quest
+// @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$ - Straing name of the item as seen by user
+// @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
@@ -23,21 +23,37 @@
// Variables used inside:
// DailyQuestPoints - The number of points the player currently has
// DailyQuestTime - Time since DailyQuestPoints was lasted renewed
-// DailyQuestBonus - Additional points that get renewed daily in addition to player BaseLevel
+// DailyQuestBonus - Additional points added once in addition to player BaseLevel
// (DailyQuestBonus makes a good reward from non-daily quests)
function script DailyQuest {
- if (gettimetick(2) - DailyQuestTime > 86400) goto L_More_Points;
+ 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;
-L_Start:
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.", -;
+ "Nah, I'm not going to help you.", -;
set @dq_return, 1;
goto L_Exit;
@@ -77,12 +93,6 @@ L_Not_Enough_Points:
set @dq_return, 2;
goto L_Exit;
-L_More_Points:
- set DailyQuestPoints, BaseLevel + DailyQuestBonus;
- set DailyQuestBonus, 0;
- set DailyQuestTime, gettimetick(2);
- goto L_Start;
-
L_Exit:
set @dq_handle_return, 0; // Incase they forget
return;