summaryrefslogtreecommitdiff
path: root/npc/functions/dailyquest.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions/dailyquest.txt')
-rwxr-xr-xnpc/functions/dailyquest.txt164
1 files changed, 164 insertions, 0 deletions
diff --git a/npc/functions/dailyquest.txt b/npc/functions/dailyquest.txt
new file mode 100755
index 00000000..6f39e59d
--- /dev/null
+++ b/npc/functions/dailyquest.txt
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+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;
+}