fiz um script que da pra colocar mais de um monstro e recompensas pra cada um no mesmo script
vá em:
data/actions/actions.xml
<action actionid="ACTIOND-ID-DA-ESTATUA;ACTIONID;ACTIONID" script="questVertical.lua" />
INSIRA TODOS os actions ID das estatus, tanto das de entrada (clica pra entrar na sala), como as de recompensa
ps: se for em sequencia, tipo 5001,5002,5003... só é necessário colocar o primeiro e o ultimo, ex: 5001-5003, porém PRESTE BASTANTE ATENÇÃO!
Agora vá em:
data/actions/scripts/questVertical.lua (caso não exista pode criar e excluir os scripts antigos dessa quest)
e copie esse código dentro:
--[[ SCRIPT FEITO POR FEETADS - TIBIAKING ]]--
--[[straikar - 15/02/23]]-- / discord: FeeTads#0246
local config = {
-- actions ID da estatua da entrada
[25486] = {storage_timer = 5341352, posPlayer = {x = 1000, y = 1000, z = 7}, monster_name = "Papao", posMonstro = {x = 1000, y = 1000, z = 7}, posSaida = {x = 1000, y = 1000, z = 7}, fromP={x = 931, y = 1270, z = 9}, toP={x = 936, y = 1276, z = 9}},
[25487] = {storage_timer = 5341353, posPlayer = {x = 1001, y = 1001, z = 7}, monster_name = "Papao2", posMonstro = {x = 1001, y = 1001, z = 7}, posSaida = {x = 1001, y = 1001, z = 7}, fromP={x = 931, y = 1270, z = 9}, toP={x = 936, y = 1276, z = 9}},
-- caso queira colocar outros, só repetir ^ e mudar a storage, o action id e as posições etc..
use_cooldown_global = false, -- se vc colocar true aqui, TODAS as salas de quest onde o player tentar entrar, vão ter o mesmo cooldown ou seja 1 sala a cada 5 mins, se for false, pode entrar em outra sala logo em seguida
storage_timer_global = 5341350, -- storage de exaust pra entrar de novo
exaust_entrar_denovo = 5 * 60, -- 5*60 = 5 minutos
need_level = 100, -- level necessário para entrar / caso não precise coloque 1 ou 8
remover_player_tempo = true, -- remover o player depois de tanto tempo la dentro? / evita o player ficar la trapando o dia todo
remover_timer = 10*60, -- quando tempo la dentro pra remover? / 10*60 = 10 minutos
}
local REWARD = {
--[action id] = {rewards = {{item, quantidade}, {item, quantidade}}}, -- pode colocar quantas rewards quiser
[5032] = {storage_reward = 5441400, rewards = {{2160, 1}, {2148, 100}, {2152, 50}}},
[5033] = {storage_reward = 5441401, rewards = {{2160, 1}}}, -- quando diminuir a quantidadede recompensa, ceritifique que deixou certo a quantidade de {} pra n bugar o script
repetir_reward = false, -- ganhar a recompensa sempre que fizer a quest?
teleportar_final = {x=1000,y=1000,z=7}, -- pra onde teleportar quando ele clicar na estatua de recompensa? (normalmente eh o templo)
}
-- função de tempo
local function getTimeString(self)
local format = {
{'dia', self / 60 / 60 / 24},
{'hora', self / 60 / 60 % 24},
{'minuto', self / 60 % 60},
{'segundo', self % 60}
}
local out = {}
for k, t in ipairs(format) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
end
end
local ret = table.concat(out)
if ret:len() < 16 and ret:find('segundo') then
local a, b = ret:find(' e ')
ret = ret:sub(b+1)
end
return ret
end
-- FUNÇÃO PARA KICKAR O PLAYER DA SALA APÓS TANTO TEMPO
local function removePlayersTime(frompos, topos)
for x = frompos.x, topos.x do
for y = frompos.y, topos.y do
local remove, clean = true, true
local pos = {x = x, y = y, z = frompos.z}
local m = getTopCreature(pos).uid
if m ~= 0 and isPlayer(m) then
doTeleportThing(m, getTownTemplePosition(1))
end
end
end
return true
end
-- FUNÇÃO PARA REMOVER O BOSS AO KICKAR O PLAYER DA SALA
local function verificaBoss(frompos, topos)
for x = frompos.x, topos.x do
for y = frompos.y, topos.y do
if isMonster(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid) then
doRemoveCreature(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid)
end
end
end
end
local function give_reward(cid, entregar)
local text = 'você recebeu ' -- string que salvará o nome das recompensas
if entregar then -- existe as rewards?
for i=1, #entregar do
doPlayerAddItem(cid, entregar[i][1], entregar[i][2]) -- adiciona os item ao player
text = text..entregar[i][2]..getItemNameById(entregar[i][1])..entregar[i][1] > 1 and "s" or ""
if i == #entregar then
text = text.."." -- caso seja o ultimo coloca ponto final
else
text = text..", " -- se não, bota virgula
end
end
doPlayerSendTextMessage(cid, 22, text)
end
return true
end
local saveEvent = {} -- evento pra checkar o player na sala de espera
function onUse(cid, item, frompos, itemEx, topos)
local check = {}
local actionID = item.actionid
if config[actionID] then
-- checa o cooldown e se pode entrar na sala
if config.use_cooldown_global then
if getPlayerStorageValue(cid, config.storage_timer_global) - os.time() > 0 then
doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config.storage_timer_global) - os.time())..'.')
return true
end
else
if getPlayerStorageValue(cid, config[actionID].storage_timer) > 0 then
doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config[actionID].storage_timer) - os.time())..'.')
return true
end
end
if #getPlayersInArea(config.[actionID].fromP, config.[actionID].toP) > 0 then
doPlayerSendCancel(cid, 'Aguarde, tem jogadores la dentro.')
return true
end
if getPlayerLevel(cid) < config.need_level then
doPlayerSendCancel(cid, 'Você não tem o level necessário.')
return true
end
-- caso tenha o level, e não tenha player la dentro, então faz a quest acontecer
verificaBoss(config.[actionID].fromP, config.[actionID].to) -- remove o boss do antigo player caso haja
doTeleportThing(cid, config[actionID].posPlayer) -- teleporta o player pra posição
doCreateMonster(config[actionID].monster_name, config[actionID].posMonstro, false, true) -- cria o monstro na posição
if config.remover_player_tempo then -- se remover o player depois de tanto tempo for true
saveEvent[getPlayerGUID(cid)] = addEvent(function()
removePlayersTime(config.[actionID].fromP, config.[actionID].toP)
end, config.remover_timer * 1000) -- remover o player depois do tempo
end
if config.use_cooldown_global then
setPlayerStorageValue(cid, config.storage_timer_global, os.time() + config.exaust_entrar_denovo) -- cooldown caso seja de todas as salas / n mexer
else
setPlayerStorageValue(cid, config[actionID].storage_timer, os.time() + config.exaust_entrar_denovo) -- cooldown pra entrar de novo / n mexer
end
return true
end
-- ESTATUA DE RECOMPENSA
if REWARD[actionID] then -- caso tenha clicado na estatua de recompensa
local entregar = REWARD[actionID].rewards
if getPlayerStorageValue(cid, REWARD[actionID].storage_reward) == -1 then -- caso nunca tenha recebido a recompensa
give_reward(cid, entregar)
else -- caso ja tenha recebido
if REWARD.repetir_reward then -- checa se pode repetir a recompensa
give_reward(cid, entregar)
else -- se não só da a mensagem q ja recebeu
doPlayerSendTextMessage(cid, 22, "Você já recebeu sua recompensa.")
end
end
doTeleportThing(cid, REWARD.teleportar_final) -- teleporta o player pra posição quando clicar na estatua de recompensa
stopEvent(saveEvent[getPlayerGUID(cid)]) -- para o evento de jogar ele pro templo
saveEvent[getPlayerGUID(cid)] = nil
end
return true
end