Action Daily Quest (different reward every day)

strutZ

Australian OT Member {AKA Beastn}
Joined
Nov 16, 2014
Messages
1,333
Reaction score
468
Confirmed working on 1.1.

The ID to that chest is w/e you make it because its a custom sprite ;)
 

Evil Puncker

I'd rather kiss a rattlesnake
Joined
May 30, 2009
Messages
5,366
Reaction score
1,510
Location
brazol
The ones limos posted? Aint they custom sprites? hence why he posted them? o.0
if you mean the sprite, it is not custom, it got added in rl tibia in 10.2 version, and she posted only the script, that is custom since there is no free script for the reward chest in real tibia I guess, tfs is still discussing it here :p
 

J.Dre

ClapSoft®
Joined
May 18, 2011
Messages
2,613
Reaction score
540
Location
United States
Tested with TFS 1.0





Every day people can get a different reward from the chest, which reward depens on which day it is.
You can add 1 or more items to 1 day. With more items people will get 1 of those items randomly so they won't always get the same item on a certain day.
It can be used in an actual quest so people can do it more often to get more rewards or be a part of something where people need certain items.


actions.xml
Code:
<action uniqueid="3001" script="quests/dailyquest.lua"/>

dailyquest.lua
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey)
     local config = {
         storage = 45392,
         exstorage = 40822,
         days = {
          ["Monday"] = {
               {itemid = 8839, count = math.random(1, 3)}
           },
           ["Tuesday"] = {
               {itemid = 2681, count = 1},
               {itemid = 2682, count = 1},
               {itemid = 2683, count = 1}
           },
           ["Wednesday"] = {
               {itemid = 2674, count = math.random(1, 10)},
               {itemid = 2675, count = math.random(1, 10)},
               {itemid = 2676, count = math.random(1, 10)},
               {itemid = 2673, count = math.random(1, 10)}
           },
           ["Thursday"] = {
               {itemid = 2679, count = math.random(2, 15)},
               {itemid = 2680, count = math.random(1, 5)}
           },
           ["Friday"] = {
               {itemid = 2788, count = math.random(1, 3)}
           },
           ["Saturday"] = {
               {itemid = 6393, count = 1}
           },
           ["Sunday"] = {
               {itemid = 2389, count = math.random(2, 12)},
               {itemid = 2690, count = math.random(1, 5)}
           }
         }
     }

     local player = Player(cid)
     local x = config.days[os.date("%A")]
     if player:getStorageValue(config.storage) == tonumber(os.date("%w")) and player:getStorageValue(config.exstorage) > os.time() then
         return player:sendCancelMessage("The chest is empty, come back tomorrow for a new reward.")
     end
     local c = math.random(#x)
     local info = ItemType(x[c].itemid)
     if x[c].count > 1 then
         text = x[c].count .. " " .. info:getPluralName()
     else
         text = info:getArticle() .. " " .. info:getName()
     end
     local itemx = Game.createItem(x[c].itemid, x[c].count)
     if player:addItemEx(itemx) ~= RETURNVALUE_NOERROR then
         player:getPosition():sendMagicEffect(CONST_ME_POFF)
         text = "You have found a reward weighing " .. itemx:getWeight() .. " oz. It is too heavy or you have not enough space."
     else
         text = "You have received " .. text .. "."
         player:setStorageValue(config.storage, tonumber(os.date("%w")))
         player:setStorageValue(config.exstorage, os.time() + 24*60*60)
     end
     player:sendTextMessage(MESSAGE_INFO_DESCR, text)
     return true
end
For older versions: http://pastebin.com/mZj4r7cF
Very cool script, but you shouldn't put the config inside the script because every time the script executes it has to run through the entire config, which is a waste of system resources. Instead, you can assign: count = {1, 3} and then do: math.random(count[1], count[2]) within the script, which also eliminates the need for so many "math.random" executions for each item.

Pretty sure you can write it yourself, so I didn't do so. But that will definitely help. :cool:
 
OP
Limos

Limos

Premium User
Joined
Jun 7, 2010
Messages
10,017
Reaction score
2,948
Location
Netherlands
Very cool script, but you shouldn't put the config inside the script because every time the script executes it has to run through the entire config, which is a waste of system resources. Instead, you can assign: count = {1, 3} and then do: math.random(count[1], count[2]) within the script, which also eliminates the need for so many "math.random" executions for each item.

Pretty sure you can write it yourself, so I didn't do so. But that will definitely help. :cool:
I'm aware of that (I think almost everyone is :rolleyes:), I just did it for the math.random ofc. I had it first without math.random, then I though it would be nice if people can get different amounts, so added some math.random as example and placed it under the function. But it's a good idea, updated main post.
 

strutZ

Australian OT Member {AKA Beastn}
Joined
Nov 16, 2014
Messages
1,333
Reaction score
468
tested and working
 

EwR

Well-Known Member
Joined
Aug 28, 2013
Messages
94
Reaction score
3
The only thing i need to do is put actionID: 3001 and uniqueID: 3001? in the chest?
 
OP
Limos

Limos

Premium User
Joined
Jun 7, 2010
Messages
10,017
Reaction score
2,948
Location
Netherlands
Only uniqueid 3001, you can also use an other one btw, it's just as example, but there is only 1 id used, so there is no need for both uniqueid and actionid.
 

Tarek1337

Excellent OT User
Joined
Jun 9, 2012
Messages
3,560
Reaction score
995
Location
Sweden
Only uniqueid 3001, you can also use an other one btw, it's just as example, but there is only 1 id used, so there is no need for both uniqueid and actionid.
It's possible to fix so you can get a achievement after opening 50 Daily quests chests? (fml just killed my english.)
 
OP
Limos

Limos

Premium User
Joined
Jun 7, 2010
Messages
10,017
Reaction score
2,948
Location
Netherlands
Yes, you can just add an extra storage that sets the value +1 till it's 49 and then add the achievement.
 
Top