Testado em TFS 0.3.6l 8.54
Estou apenas trazendo para o fórum pois não encontrei ^^ caso tenha eu removo... explicando o sistema seria um baú que a cada determinado tempo ele pode ser aberto novamente mas sempre irá vir algum item diferente (configurável)...
Vamos ao script...
Primeiro adicione isso em
actions.xml
<action uniqueid="4005" event="script" value="quests/timechest.lua"/>
Dentro da pasta scripts crie um arquivo chamado "timechest.lua" e adicione isso dentro
-- Time Chest by Limos
local config = {
exhausttime = 7200, -- time in seconds
exhauststorage = 2301,
level = 50 -- minimum level to open the chest
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local rewarditems = {
{id = 2152, count = math.random(1, 50)},
{id = 2498, count = 1},
{id = 2492, count = 1},
{id = 2488, count = 1}
}
if(getPlayerLevel(cid) < config.level) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendCancel(cid, "You need to be level "..config.level.." to open the chest.")
return true
end
if(exhaustion.check(cid, config.exhauststorage)) then
local time = exhaustion.get(cid, config.exhauststorage)
local hours, minutes, seconds = math.floor (time / 3600), math.floor ((time - ((math.floor (time / 3600)) * 3600))/ 60), time - ((math.floor (time/60)) * 60)
if time >= 3600 then
text = hours.." "..(hours > 1 and "hours" or "hour")..", "..minutes.." "..(minutes > 1 and "minutes" or "minute").." and "..seconds.." "..(seconds > 1 and "seconds" or "second")
elseif time >= 120 then
text = minutes.." "..(minutes > 1 and "minutes" or "minute").." and "..seconds.." "..(seconds > 1 and "seconds" or "second")
else
text = seconds.." "..(seconds > 1 and "seconds" or "second")
end
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "It is empty. You need to wait "..text.." before you can get a reward again.")
return true
end
local i = math.random(1, #rewarditems)
local info = getItemInfo(rewarditems.id)
if(rewarditems.count > 1) then
text = rewarditems.count .. " " .. info.plural
else
text = info.article .. " " .. info.name
end
local item = doCreateItemEx(rewarditems.id, rewarditems.count)
if(doPlayerAddItemEx(cid, item, false) ~= RETURNVALUE_NOERROR) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
text = "You have found a reward. It is to heavy or you have not enough space."
else
text = "You have found " .. text .. "."
exhaustion.set(cid, config.exhauststorage, config.exhausttime)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, text)
return true
end
Versão com chance:
-- Time Chest by Limos
local config = {
exhausttime = 7200, -- time in seconds
exhauststorage = 2301,
level = 50 -- minimum level to open the chest
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local rewarditems = {
{id = 2492, chance = 5, count = 1}, -- start with the lowest chances
{id = 2498, chance = 10, count = 1},
{id = 2488, chance = 15, count = 1},
{id = 2152, chance = 70, count = math.random(1, 50)}
}
if(getPlayerLevel(cid) < config.level) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendCancel(cid, "You need to be level "..config.level.." to open the chest.")
return true
end
if(exhaustion.check(cid, config.exhauststorage)) then
local time = exhaustion.get(cid, config.exhauststorage)
local hours, minutes, seconds = math.floor (time / 3600), math.floor ((time - ((math.floor (time / 3600)) * 3600))/ 60), time - ((math.floor (time/60)) * 60)
if time >= 3600 then
text = hours.." "..(hours > 1 and "hours" or "hour")..", "..minutes.." "..(minutes > 1 and "minutes" or "minute").." and "..seconds.." "..(seconds > 1 and "seconds" or "second")
elseif time >= 120 then
text = minutes.." "..(minutes > 1 and "minutes" or "minute").." and "..seconds.." "..(seconds > 1 and "seconds" or "second")
else
text = seconds.." "..(seconds > 1 and "seconds" or "second")
end
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "It is empty. You need to wait "..text.." before you can get a reward again.")
return true
end
local chance = math.random(1,100)
for i = 1, #rewarditems, 1 do
if(chance < rewarditems.chance) then
local info = getItemInfo(rewarditems.id)
if(rewarditems.count > 1) then
text = rewarditems.count .. " " .. info.plural
else
text = info.article .. " " .. info.name
end
local item = doCreateItemEx(rewarditems.id, rewarditems.count)
if(doPlayerAddItemEx(cid, item, false) ~= RETURNVALUE_NOERROR) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
text = "You have found a reward. It is to heavy or you have not enough space."
else
text = "You have found " .. text .. "."
exhaustion.set(cid, config.exhauststorage, config.exhausttime)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, text)
return true
else
chance = chance - rewarditems.chance
end
end
end
Versão com level e chance:
-- Time Chest by Limos
local config = {
exhausttime = 7200, -- time in seconds
exhauststorage = 2301,
level = 25 -- minimum level to open the chest
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local rewarditems = {
[25] = {
tilllevel = 50,
{id = 3982, chance = 5, count = 1}, -- start with the lowest chances
{id = 2476, chance = 10, count = 1},
{id = 2479, chance = 15, count = 1},
{id = 2148, chance = 70, count = math.random(1, 50)}
},
[50] = {
tilllevel = 100,
{id = 7730, chance = 5, count = 1},
{id = 2466, chance = 10, count = 1},
{id = 2497, chance = 15, count = 1},
{id = 2152, chance = 70, count = math.random(1, 20)}
},
[100] = {
tilllevel = 200,
{id = 2492, chance = 5, count = 1},
{id = 2498, chance = 10, count = 1},
{id = 2195, chance = 15, count = 1},
{id = 2152, chance = 70, count = math.random(20, 50)}
},
[200] = {
tilllevel = 10000,
{id = 2472, chance = 5, count = 1},
{id = 2470, chance = 10, count = 1},
{id = 2157, chance = 15, count = 1},
{id = 2160, chance = 70, count = math.random(1, 5)}
}
}
if(getPlayerLevel(cid) < config.level) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendCancel(cid, "You need to be level "..config.level.." to open the chest.")
return true
end
if(exhaustion.check(cid, config.exhauststorage)) then
local time = exhaustion.get(cid, config.exhauststorage)
local hours, minutes, seconds = math.floor (time / 3600), math.floor ((time - ((math.floor (time / 3600)) * 3600))/ 60), time - ((math.floor (time/60)) * 60)
if time >= 3600 then
text = hours.." "..(hours == 1 and "hour" or "hours")..", "..minutes.." "..(minutes == 1 and "minute" or "minutes").." and "..seconds.." "..(seconds == 1 and "second" or "seconds")
elseif time >= 120 then
text = minutes.." "..(minutes == 1 and "minute" or "minutes").." and "..seconds.." "..(seconds == 1 and "second" or "seconds")
else
text = seconds.." "..(seconds == 1 and "second" or "seconds")
end
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "It is empty. You need to wait "..text.." before you can get a reward again.")
return true
end
local chance = math.random(1,100)
for v, x in pairs(rewarditems) do
if(getPlayerLevel(cid) >= v and getPlayerLevel(cid) < x.tilllevel) then
level = v
end
end
for i = 1, #rewarditems[level], 1 do
if(chance < rewarditems[level].chance) then
local info = getItemInfo(rewarditems[level].id)
if(rewarditems[level].count > 1) then
text = rewarditems[level].count .. " " .. info.plural
else
text = info.article .. " " .. info.name
end
local item = doCreateItemEx(rewarditems[level].id, rewarditems[level].count)
if(doPlayerAddItemEx(cid, item, false) ~= RETURNVALUE_NOERROR) then
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
text = "You have found a reward. It is to heavy or you have not enough space."
else
text = "You have found " .. text .. "."
exhaustion.set(cid, config.exhauststorage, config.exhausttime)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, text)
return true
else
chance = chance - rewarditems[level].chance
end
end
end
Creio que seja facíl de configurar é só da uma lida ali no começo do script estou sem tempo de ficar explicando muito tempo só queria trazer pra k esse conteúdo ^^
Créditos: Limos "Otland"