Tem várias maneiras pra fazer isso, depende apenas do seu gosto, mas vou deixar 2 bem simples aqui:
1) Você pode usar exhaustion no seu script com a função onThink, usando também uma storage pra não travar o server.
function getTime(cid) if not isCreature(cid) then return true end if exhaustion.check(cid, exhastor) and getPlayerStorageValue(cid, 9178) == 1 then doPlayerSendCancel(cid, "Tempo: "..exhaustion.get(cid, exhastor).." segundos.") addEvent(getTime, 1000, cid) elseif not exhaustion.check(cid, exhastor) and getPlayerStorageValue(cid, 9178) == 1 then doPlayerSendCancel(cid, "Tempo terminado!") doTeleportThing(cid, gopos) elseif getPlayerStorageValue(cid, 9178) == -1 then return true end return true end function onThink(cid) if getPlayerStorageValue(cid, 12872) == 1 then getTime(cid) setPlayerStorageValue(cid, 12872, -1) end return true end
Configure aqui:
local gopos = {x = 100, y = 100, z = 7} -- Posição em que o player será teleportado após o tempo acabar
local exhastor = 1981 -- Storage da exhaustion
Ai no seu StepIn, você adiciona as seguintes funções:
local tempo = 60 -- Tempo em segundos local exhastor = 1981 -- Storage da exhaustion setPlayerStorageValue(cid, 9178, 1) setPlayerStorageValue(cid, 12872, 1) exhaustion.set(cid, exhastor, tempo)
Configure aqui:
local tempo = 60 -- Tempo em segundos local exhastor = 1981 -- Storage da exhaustion
2) Ou então, você pode fazer direto no StepIn com a função getTime(cid) que postei ali em cima.
local gopos = {x = 100, y = 100, z = 7} -- Posição em que o player será teleportado após o tempo acabar
local exhastor = 1981 -- Storage da exhaustion
local tempo = 60 -- Tempo em segundos
function getTime(cid)
if not isCreature(cid) then return true end
if exhaustion.check(cid, exhastor) and getPlayerStorageValue(cid, 9178) == 1 then
doPlayerSendCancel(cid, "Tempo: "..exhaustion.get(cid, exhastor).." segundos.")
addEvent(getTime, 1000, cid)
elseif not exhaustion.check(cid, exhastor) and getPlayerStorageValue(cid, 9178) == 1 then
doPlayerSendCancel(cid, "Tempo terminado!")
doTeleportThing(cid, gopos)
elseif getPlayerStorageValue(cid, 9178) == -1 then return true
end
return true
end
function onStepIn(cid)
setPlayerStorageValue(cid, 9178, 1)
exhaustion.set(cid, exhastor, tempo)
getTime(cid)
return true
end
E aqui:
function onStepIn(cid) setPlayerStorageValue(cid, 9178, 1) exhaustion.set(cid, exhastor, tempo) getTime(cid) return true end
Você coloca o resto do seu script de teleportar o player pra quest, depois de getTime(cid).
No final, seja qualquer a maneira que você utilizou, adicione essa linha na action do chest ou seja lá qual o script que finaliza a quest:
setPlayerStorageValue(cid, 9178, -1)
Ela impede do tempo continuar contando após o player acabar a quest.
------------------------------------------------------------------------------------------------------------------------------------------------------
Isso ai foi só pra parte solo. Pra parte em grupo fica mais difícil. Se eu pensar em alguma maneira, eu posto aqui, mas acho que usando funções de party dá pra fazer.
OBS: Aconselho a colocar No-Logout Zone pelo Map Editor na quest pra evitar de dar bugs no sistema.
OBS²: Desculpe pelo texto gigante que postei, é que tem tempos que ninguém faz um pedido bom igual esse. Acabei me empolgando ![]()




info
Grupo: Cavaleiro
Registrado: 19/11/10
Posts: 190
Reputação: +36
Char no Tibia: Frenesy
Tenho um "Sistema de Tempo" em mente mas não consigo desenvolve-lo. Gostaria que pudesse me ajudar.
A idéia é colocar um "Tempo" para ficar dentro da Quest. Quando o 'tempo acabar', eles são 'Teleportados para fora'.
O Sistema precisa de duas áreas de atuação. Uma para quem "Não está em Grupo (Solo)". E outra para "Quem possue um Grupo".
A idéia é simples ~~
Ao Pisar no "Tile", o Jogador é 'Teleportado para Dentro da Quest'. Nisso ele ganha um tempo (5 minutos por exemplo) para finalizá-la. O Tempo eu quero que apareça á 'todo instante' para o Jogador. Para ele saber quanto tempo está faltando. Algo tipo isso:
A Mensagem no cancel aparecerá sempre que se passar "1 segundo". Quando o Tempo acabar, o Jogador é 'Teleportado para fora da Quest'.
Quero que esse sistema funcione para o "Grupo" também, seguindo o mesmo enredo. O Jogador do Grupo passa pelo Tile, todo o Grupo vai pra dentro da Quest e todos ganham "O mesmo tempo". Quando o tempo acabar, todos vão para fora da Quest.
Por favor, me ajudem nessa idéia. Preciso muito dela!
Abraços!