zexus
Member
- Joined
- Oct 1, 2016
- Messages
- 133
- Reaction score
- 18
I found and use this amazing quest system i found on forum.
How it work? You can do the same quest, but after some time
For example, you can do:
sabre quest, each 15 mins
katana quest, each 10 hours
But there is a problem:
Players have to go on the chest click on it to check how many time left to do the quest again
It's too boring, so i had i idea, but idk if it is possible to do
There is a way to put on quest log all this quests with a text showing how many time left to do the quest again, how it is in this part of the script
Code:
local mins = 60
local hours = 60 * 60
local days = 24 * 60 * 60
local quests = {
-- /data/creaturescripts/quests.lua
-- rook
[8000] = { item = 2385, lvl = 1, time = 15 * mins}, -- sabre
[8001] = { item = 2485, lvl = 2, time = 30 * mins}, -- doublet
[8002] = { item = 2526, lvl = 3, time = 50 * mins}, -- studded shield
[8003] = { item = 2530, lvl = 5, time = 3 * hours}, -- copper shield
[8004] = { item = 2480, lvl = 5, time = 5 * hours}, -- legion helmet
[8005] = { item = 2412, lvl = 5, time = 10 * hours}, -- katana
}
function isLevelRequired(value)
return type(value) == "table" and true, value.item, value.lvl or false, value
end
function onUse(cid, item, fromPos, item2, toPos)
local levelRequired, quest, level = isLevelRequired(quests[item.actionid])
if levelRequired then
if getPlayerLevel(cid) < level then
doPlayerSendCancel(cid, "Sorry, level: " .. level .. " or higher to complete this quest.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return true
end
end
if quest then
local storage = 200000 + item.actionid
local quest = quests[item.actionid]
if quest then
local timeNow = os.time()
if timeNow - getPlayerStorageValue(cid, item.actionid) >= 0 then
if getPlayerFreeCap(cid) >= getItemWeightById(quest.item, 1) then
doPlayerAddItem(cid, quest.item, 1)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..getItemNameById(quest.item)..'.')
setPlayerStorageValue(cid, item.actionid, timeNow + quest.time)
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a '..getItemNameById(quest.item)..'. It weighs '..getItemWeightById(quest.item, 1)..'.00 and it is too heavy.')
end
elseif getPlayerStorageValue(cid, item.actionid) < 0 then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty.')
elseif getPlayerStorageValue(cid, item.actionid)-timeNow > days then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/days) ..' days to do it again.')
elseif getPlayerStorageValue(cid, item.actionid)-timeNow > hours then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/hours) ..' hours to do it again.')
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/mins) ..' minutes to do it again.')
end
end
end
return true
end
How it work? You can do the same quest, but after some time
For example, you can do:
sabre quest, each 15 mins
katana quest, each 10 hours
But there is a problem:
Players have to go on the chest click on it to check how many time left to do the quest again
It's too boring, so i had i idea, but idk if it is possible to do
There is a way to put on quest log all this quests with a text showing how many time left to do the quest again, how it is in this part of the script
Code:
elseif getPlayerStorageValue(cid, item.actionid) < 0 then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty.')
elseif getPlayerStorageValue(cid, item.actionid)-timeNow > days then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/days) ..' days to do it again.')
elseif getPlayerStorageValue(cid, item.actionid)-timeNow > hours then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/hours) ..' hours to do it again.')
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'It is empty, you must wait '.. math.ceil(((getPlayerStorageValue(cid, item.actionid)) - timeNow)/mins) ..' minutes to do it again.')
end