Ir para conteúdo
  • 0

Sistema De Tempo


fokus090

Pergunta

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:

 

    doPlayerSendCancel(cid, "Tempo: " .. getPlayerStorageValue(cid, STORAGE) .. ".")

 

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! smile_positivo.gif

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

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 :)

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, agradeço muito por ter respondido ao meu pedido.

Tenho apenas UMA pergunta sobre o seu Script :.

 

Onde eu configuro no Script para por o Player ter 5 Min. ou 10 Min para finalizar a Quest?

 

Isso ai foi só pra parte solo. Pra parte em grupo fica mais difícil.

 

Eu fiz alguns protótipos aqui, mas minha dificuldade é sempre na hora de 'diminuir o tempo'. Porquê, se eu usar GlobalStorage, não sei fazer o tempo 'diminuir apenas 1 segundo'. Porque o Script é ativado pelo Movements. Então todos os players do Grupo passa pelo mesmo Tile. Então se no Script eu colocar pra diminuir 1 segundo, todos vão diminuir 1 segundo ao mesmo tempo, dependendo de quantos players tem dentro da Quest. Vou dar um exemplo pra ficar mais claro:.

 

if getPlayerStorageValue(cid, hours) == 0 then
doPlayerSendCancel(cid, "Tempo: " .. getPlayerStorageValue(cid, hours) .. ".")
setPlayerStorageValue(cid, hours, getPlayerStorageValue(cid, hours) - 1)
addEvent(doMsg, delay*1000, cid)

 

No exemplo á cima, é para diminuir o 1 segundo (Value) corretamente. Mas se tiver 3 Players na Party, então ao invés de 1 segundos, sumiria 3 segundos. Já tentei por para apenas o Líder acionar essa diminuição, mas aí se o Lider morrer durante á Quest estragaria o Tempo. Então eu estou sem idéias.

 

OBS²: Desculpe pelo texto gigante que postei, é que tem tempos que ninguém faz um pedido bom igual esse. Acabei me empolgando :)

 

Sua impolgação só me motiva á continuar Postando Pedidos. shuSHuhsuHSUS he.gif

 

OBS: A Quest tem como FOCO o trabalho em Grupo. Agradeceria se pudesse me dar uma ajudinha nesse Sistema.Mas para facilitar á sua Vida, estou Preso apenas á uma barreira. Eu quero diminuir o segundo de maneira ordenada. É como o exemplo que citei alí em cima (se tiver 3 Players na Party, então ao invés de 1 segundos, sumiria 3 segundos). Gostaria de uma idéia de resolver isso.

 

Abraços e Obrigado!

Editado por Frenesy
Link para o comentário
Compartilhar em outros sites

  • 0

1) Você configura o tempo aqui:

 

local tempo = 60 -- Tempo em segundos

 

2) Vai ai uma dica.

 

Fazendo pelo GlobalStorage, seta uma storage alternativa e faz uma verificação assim:

 

if getGlobalStorageValue(13791) == -1 then
setGlobalStorageValue(13791, 1)
(...)
end

 

No lugar do (...) você coloca o resto do script de tempo. Dessa maneira, o script só executará uma vez após alguém pisar no tile.

 

E no script que para o tempo e finaliza a quest, adiciona isso:

 

setGlobalStorageValue(13791, -1)

 

Tente fazer ai, conseguindo sozinho você aprende mais. Se realmente não conseguir, posta o resto do seu script que eu termino pra você.

 

OBS: Editei o post ali em cima, eu tinha esquecido de umas coisas no script.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Esse é o Sistema de Tempo (Solo) que eu criei. Bem básico, mas funciona da maneira que eu queria. Gostaria da ajuda de alguem para poder torna-lá funcional para um Grupo tambem.

 

function onStepIn(cid)
addEvent(doMsg, 1*1000, cid) -- Avança para a Contagem
setPlayerStorageValue(cid, 11110, 1) -- Minutos
setPlayerStorageValue(cid, 11111, 20) -- Segundos
return TRUE
end
function doMsg(cid)
local M = 11110 -- Minutos
local S = 11111 -- Segundos
local City = {x=443, y=500, z=8} -- Fora da Quest
if getPlayerStorageValue(cid, M) > 0 and getPlayerStorageValue(cid, S) > 0 then
 setPlayerStorageValue(cid, S, getPlayerStorageValue(cid, S) - 1)
 doPlayerSendCancel(cid, "Tempo: " .. getPlayerStorageValue(cid, M) .. " : " .. getPlayerStorageValue(cid, S) .. ".")
 addEvent(doMsg, 1*1000, cid)

elseif getPlayerStorageValue(cid, M) > 0 and getPlayerStorageValue(cid, S) == 0 then
 setPlayerStorageValue(cid, S, getPlayerStorageValue(cid, S) + 60)
 setPlayerStorageValue(cid, M, getPlayerStorageValue(cid, M) - 1)
 doPlayerSendCancel(cid, "Tempo: " .. getPlayerStorageValue(cid, M) .. " : " .. getPlayerStorageValue(cid, S) .. ".")
 addEvent(doMsg, 1*1000, cid)

elseif getPlayerStorageValue(cid, M) == 0 and getPlayerStorageValue(cid, S) > 0 then
 setPlayerStorageValue(cid, S, getPlayerStorageValue(cid, S) - 1)
 doPlayerSendCancel(cid, "Tempo: " .. getPlayerStorageValue(cid, M) .. " : " .. getPlayerStorageValue(cid, S) .. ".")
 addEvent(doMsg, 1*1000, cid)

elseif getPlayerStorageValue(cid, M) == 0 and getPlayerStorageValue(cid, S) == 0 then
doPlayerSendTextMessage(cid, 22, "O Tempo Acabou!")
addEvent(doTeleportThing, 3000, cid, City)

return TRUE
end
end

 

2) Vai ai uma dica.

 

Fazendo pelo GlobalStorage, seta uma storage alternativa e faz uma verificação assim:

 

if getGlobalStorageValue(13791) == -1 then

setGlobalStorageValue(13791, 1)

(...)

end

 

No lugar do (...) você coloca o resto do script de tempo. Dessa maneira, o script só executará uma vez após alguém pisar no tile.

 

Sua teoria ao meu vê não daria certo, porquê no meu Script há alguns "AddEvent" que faz com que o Script retorne inúmeras vezes.

 

Abraços !!

Link para o comentário
Compartilhar em outros sites

  • 0

Tó:

 

 

local gopos = {x = 100, y = 100, z = 7} -- Posição em que o player será teleportado após o tempo acabar
local timestor = 1981 -- Storage do tempo
local tempo = 60 -- Tempo em segundos

function getTime(cid)
if getGlobalStorageValue(9177) > 0 and getGlobalStorageValue(9178) == 1 then
doPlayerSendCancel(cid, "Tempo: "..getGlobalStorageValue(9177).." segundos.")
doPlayerSendCancel(getPartyMembers(cid), "Tempo: "..getGlobalStorageValue(9177).." segundos.")
setGlobalStorageValue(9177, getGlobalStorageValue(9177)-1)
addEvent(getTime, 1000, cid)
elseif getGlobalStorageValue(9177) == -1 and getGlobalStorageValue(9178) == 1 then
doPlayerSendCancel(cid, "Tempo terminado!")
doPlayerSendCancel(getPartyMembers(cid), "Tempo terminado!")
doTeleportThing(cid, gopos)
doTeleportThing(getPartyMembers(cid), gopos)
elseif getGlobalStorageValue(9178) == -1 then return true
end
return true
end

function onStepIn(cid)
if getGlobalStorageValue(13791) == -1 then
setGlobalStorageValue(13791, 1)
setGlobalStorageValue(timestor, tempo)
getTime(cid)
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 timestor = 1981 -- Storage do tempo
local tempo = 60 -- Tempo em segundos

 

No script que finaliza a quest, adicione:

setGlobalStorageValue(13791, -1)
setGlobalStorageValue(9178, -1)

 

OBS: O player precisa estar em party para funcionar o sistema em grupo.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...