From 8a4bf716002a017de77fe7df301ef8e4aaf00a2e Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Fri, 9 Apr 2021 11:00:49 -0300 Subject: Initial commit --- npc/functions/daily.txt | 154 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 npc/functions/daily.txt (limited to 'npc/functions/daily.txt') diff --git a/npc/functions/daily.txt b/npc/functions/daily.txt new file mode 100644 index 00000000..6de9ef27 --- /dev/null +++ b/npc/functions/daily.txt @@ -0,0 +1,154 @@ +// The Mana World scripts. +// Author: +// TMW Team +// Jesusalva +// Description: +// Daily Quest framework +// Variables returned: +// .@dq_return - Code of what happend +// DAILY_LOWLEVEL = Low level +// DAILY_IGNORED = Ignored NPC +// DAILY_NOPTS = Not enough points +// DAILY_NOITEMS = Not enough items +// DAILY_OK = 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 - Item Aegis +// .@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 in addition to player BaseLevel + +// (DailyQuestBonus makes a good reward from non-daily quests) + +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) { + // 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 + DailyQuestPoints = DailyQuestPoints + DailyQuestBonus; + DailyQuestBonus = 0; + return; + +} + +// DailyQuest(lvl, cost, count, item, {exp, money}) +function script DailyQuest { + // Sanitize + DailyQuestPointsFunc(); + + // Load variables + .@dq_level=getarg(0); + .@dq_cost=getarg(1); + .@dq_count=getarg(2); + .@dq_name=getarg(3); + // Money defaults to 200% sell value, experience to 300% sell value + .@dq_exp=getarg(4, getiteminfo(.@dq_name, ITEMINFO_SELLPRICE)*.@dq_count*3); + .@dq_money=getarg(5, getiteminfo(.@dq_name, ITEMINFO_SELLPRICE)*.@dq_count*2); + + // Insufficient level + if (BaseLevel < .@dq_level) { + mesq l("Hey, you should go kill some things to get stronger first."); + return DAILY_LOWLEVEL; + } + + // Insufficient points + if (DailyQuestPoints < .@dq_cost) { + mesq l("You look exhausted, maybe you should rest a bit."); + return DAILY_NOPTS; + } + + mesq l("If you bring me %d %s, I will give you a reward.", .@dq_count, getitemlink(.@dq_name)); + select + l("I have what you want."), + l("Take all you need."), + l("Ok, I'll get to work."), + l("Nah, I'm not going to help you."); + mes ""; + + if (@menu >= 3) + return DAILY_IGNORED; + + if (countitem(.@dq_name) < .@dq_count) { + mesq l("I said %d %s; you should learn to count.", .@dq_count, getitemlink(.@dq_name)); + return DAILY_NOITEMS; + } + + // Default multiplier + .@multiplier = 1; + + if (@menu == 1) { + delitem .@dq_name, .@dq_count; + + Zeny = Zeny + .@dq_money; + getexp .@dq_exp, 0; + + DailyQuestPoints = DailyQuestPoints - .@dq_cost; + + } + else + { + + .@item_multiple = (countitem(.@dq_name) / .@dq_count); + .@dp_multiple = (DailyQuestPoints / .@dq_cost); + + if (.@dp_multiple > .@item_multiple) + .@multiplier = .@item_multiple; + if (.@item_multiple >= .@dp_multiple) + .@multiplier = .@dp_multiple; + + DailyQuestPoints = DailyQuestPoints - (.@dq_cost * .@multiplier); + + delitem .@dq_name, (.@dq_count * .@multiplier); + + Zeny = Zeny + (.@dq_money * .@multiplier); + getexp (.@dq_exp * .@multiplier), 0; + + if (.@dq_handle_return) + goto L_Exit_Good; + } + + mesq l("Thank you!"); + + if (DailyQuestPoints < .@dq_cost) + mesq l("You look exhausted, maybe you should rest a bit."); + else if (DailyQuestPoints > BaseLevel) + mesq l("Woah, you're bursting with power."); + else if (DailyQuestPoints > (BaseLevel*9)/10) + mesq l("You're in a very good shape."); + else if (DailyQuestPoints > (BaseLevel*7)/10) + mesq l("You don't seem very exhausted by my tasks."); + else if (DailyQuestPoints > (BaseLevel*5)/10) + mesq l("Aren't you getting weary yet?"); + else + mesq l("You look a little tired."); + + mes ""; + mesc l("+%d money", (.@dq_money * .@multiplier)); + mesc l("+%d experience points", (.@dq_exp * .@multiplier)); + return DAILY_OK; +} + -- cgit v1.2.3-60-g2f50