Jump to content

(Resolvido)Sistema para evento programado com tps [8.60]


Go to solution Solved by Adriano SwaTT,

Recommended Posts

Bom galera, o sisteminha é um pouquim complexo, mas vamos lá...

 

Gostaria que todo dia 1°, às 12:00, abram 6 TPs no mapa.

Esses tps devem ficar abertos por 12 horas, após esse horários eles desapareçam.

 

Porém, há dois problemas:

Um dos TPs só poderá ser acessado contendo 5 diferentes storages (o player tem que ter os 5).

O player após entrar 1 vez em qualquer um dos TPs, ele só poderá entrar novamente em qualquer um dos tps na próxima vez que o evento iniciar, ou seja, no próximo dia 1.

 

PS.: incluir mensagens informando que o evento inciou e os Tps abriram, quando os tps fecharem, que o player não pode entrar novamente no tp (caso já tenha entrado)

 

Desde já agreço!

Edited by lolksky (see edit history)
Link to post
Share on other sites

  • Solution

Boa noite.

Criei e testei o script, as funções básicas que precisa consegui executar com sucesso.

 

1. Ele cria os teleportes, cada um com uma ActionID diferente para que você possa criar um script para cada teleporte e assim configurar os requisitos para poder entrar.

2. Ele cria os teleportes no horário programado no GlobalEvents.xml, e a data fica configurada dentro do próprio script.

3. Ele remove os teleportes depois do tempo programado.

4. Ele bloqueia players que já acessaram um dos teleportes, já configurado para liberar a cada evento.

 

Vamos em GlobalEvents.xml e adicionar a tag abaixo:

<globalevent name="Teleports" time="12:00" event="script" value="teleports_progs.lua"/>

 

Agora na pasta scripts da referida, criaremos o arquivo "teleports_progs.lua" e adicionaremos o script abaixo:

--------- Script by: Adriano Swatt' ------
local dia = '1' -- qual dia do mês
local horas = 12 -- hora do evento & horas para remover os tps
local tp_id = 5023 -- ID do Teleport (Pode ser outro item, se desejar)
local gstrg_control = 12129 -- Não precisa mexer (Global Storage de Controle de Acesso)
local tp_pos = {{x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}, {x=000, y=000, z=0}} -- Coordenada Onde Nascerá os TPs
local tp_acts = {11111, 22222, 33333, 44444, 55555, 66666} -- ActionID para Cada TP (Terá que registrar em movements.xml as memas que colocar aqui)
----------- FIM DAS CONFIGURAÇÕES ---------

function onTimer()
local checkday = os.date("%d")
    if checkday == dia then
        for x = 1, #tp_pos do
        doItemSetAttribute(doCreateItem(tp_id, 1, tp_pos[x]), "aid", tp_acts[x])
        end -- FOR
        addEvent(RemoveTps, horas * 60 * 60 * 1000)
        doBroadcastMessage("Hoje é dia "..checkday.." e são exatamente "..horas..":00 horas, os teleportes de bonus foram abertos e permanecerão por "..horas.." horas.")
        if getGlobalStorageValue(gstrg_control) <= 0 then
            setGlobalStorageValue(gstrg_control, 1)
        else
            setGlobalStorageValue(gstrg_control, (getGlobalStorageValue(gstrg_control) + 1))
        end
        return true
    else
        doBroadcastMessage("Lembrem-se: Todo dia "..checkday.." às "..horas.." horas terá o evento dos teleportes.")
    end
return true
end

function RemoveTps()
    for y = 1, #tp_pos do
    doRemoveItem(getTileItemById(tp_pos[y], tp_id).uid, 1)
    end -- FOR
    doBroadcastMessage("Os teleportes foram removidos, o evento abrirá novamente no próximo dia "..dia.." exatamente às "..horas..":00 horas.")
return true
end

 

Agora em Movements.xml adicionaremos a tag, como abaixo: (Substitua os números de acordo com que configurou o script anterior/acima)

<movevent type="StepIn" actionid="11111;22222;33333;44444;55555;66666" event="script" value="Teleports_Progs.lua"/>

 

E em scripts, criaremos o arquivo "Teleports_Progs.lua" e adicionaremos o código abaixo:

-------- Script by: Adriano Swatt' -------
local gstrg_control = 12129 -- Não precisa mexer (Global Storage de Controle de Acesso)
local tp_exe = 11111 -- ID da ActionID do Teleport Exclusivo (Necessita 5 storages)
local stors = {11111, 22222, 33333, 44444, 55555} -- Storages o player precisa para o teleport exclusivo
local tp_acts = {
    [11111] = {{x=000, y=000, z=0}}, -- ActionID de cada teleport e coordenada pra onde o player irá (Tem que ser a mesma do outro script)
    [22222] = {{x=000, y=000, z=0}}, -- teleport 2
    [33333] = {{x=000, y=000, z=0}}, -- teleport 3
    [44444] = {{x=000, y=000, z=0}}, -- teleport 4
    [55555] = {{x=000, y=000, z=0}}, -- teleport 5
    [66666] = {{x=000, y=000, z=0}}  -- teleport 6
}
local msgs = {
"Você não tem todas as quests necessárias.", -- Mensagem quando não tiver todas storages
"Você já entrou em um dos teleportes bônus hoje.", -- Mensagem quando já tiver acessado um dos teleportes
"Parabéns, você entrou no teleporte bônus." -- Mensagem ao entrar em algum teleporte
} -- Mensagens
----------- FIM DAS CONFIGURAÇÕES ---------

function onStepIn(cid, item, position, fromPosition)
local tp_check = tp_acts[item.actionid]
local gstrg = getGlobalStorageValue(gstrg_control)
local getSto = getPlayerStorageValue

    if item.actionid ~= tp_exe then
        if tp_check then
            if getSto(cid, gstrg_control) < (gstrg) then
                doPlayerSendCancel(cid, msgs[3])
                doTeleportThing(cid, tp_check[1])
                setPlayerStorageValue(cid, gstrg_control, (getGlobalStorageValue(gstrg_control)))
            else
                doPlayerSendCancel(cid, msgs[2])
                doTeleportThing(cid, fromPosition)
            end
        end
    else
        if getSto(cid, gstrg_control) < (gstrg) then
            if getSto(cid, stors[1]) >= 1 and getSto(cid, stors[2]) >= 1 and getSto(cid, stors[3]) >= 1 and getSto(cid, stors[4]) >= 1 and getSto(cid, stors[5]) >= 1 then
                doPlayerSendCancel(cid, msgs[3])
                doTeleportThing(cid, tp_check[1])
                setPlayerStorageValue(cid, gstrg_control, (getGlobalStorageValue(gstrg_control)))
            else
                doPlayerSendCancel(cid, msgs[1])
                doTeleportThing(cid, fromPosition)
            end
        else
            doPlayerSendCancel(cid, msgs[2])
            doTeleportThing(cid, fromPosition)
        end
    end
    return true
end
 

 

Testei e funcionou perfeitamente.

 

Boa sorte.

Caso ocorra algum erro, ou até mesmo para agradecer, dê um FeedBack. ;)

 

Abraços.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Cara, eu cometi um erro e passei uma informação errônea.

 

onde se lê: "2°  O player após entrar 1 vez em qualquer um dos TPs, ele só poderá entrar novamente em qualquer um dos tps na próxima vez que o evento iniciar, ou seja, no próximo dia 1."

Seria na verdade: " O player após entrar 1 vez no TP que precisa dos storages, ele só poderá entrar novamente em qualquer um dos tps na próxima vez que o evento iniciar, ou seja, no próximo dia 1."

 

Teria como corrigir isso?  Peço-lhe desculpas, foi falta de atenção minha.  :D

Link to post
Share on other sites

Tente substituir o movements por este:

-------- Script by: Adriano Swatt' -------
local gstrg_control = 12129 -- Não precisa mexer (Global Storage de Controle de Acesso)
local tp_exe = 11111 -- ID da ActionID do Teleport Exclusivo (Necessita 5 storages)
local stors = {11111, 22222, 33333, 44444, 55555} -- Storages o player precisa para o teleport exclusivo
local tp_acts = {
    [11111] = {{x=000, y=000, z=0}}, -- ActionID de cada teleport e coordenada pra onde o player irá (Tem que ser a mesma do outro script)
    [22222] = {{x=000, y=000, z=0}}, -- teleport 2
    [33333] = {{x=000, y=000, z=0}}, -- teleport 3
    [44444] = {{x=000, y=000, z=0}}, -- teleport 4
    [55555] = {{x=000, y=000, z=0}}, -- teleport 5
    [66666] = {{x=000, y=000, z=0}}  -- teleport 6
}
local msgs = {
"Você não tem todas as quests necessárias.", -- Mensagem quando não tiver todas storages
"Você já entrou em um dos teleportes bônus hoje.", -- Mensagem quando já tiver acessado um dos teleportes
"Parabéns, você entrou no teleporte bônus." -- Mensagem ao entrar em algum teleporte
} -- Mensagens
----------- FIM DAS CONFIGURAÇÕES ---------

function onStepIn(cid, item, position, fromPosition)
local tp_check = tp_acts[item.actionid]
local gstrg = getGlobalStorageValue(gstrg_control)
local getSto = getPlayerStorageValue

    if item.actionid ~= tp_exe then
        if tp_check then
            doPlayerSendCancel(cid, msgs[3])
            doTeleportThing(cid, tp_check[1])
        end
    else
        if getSto(cid, gstrg_control) < (gstrg) then
            if getSto(cid, stors[1]) >= 1 and getSto(cid, stors[2]) >= 1 and getSto(cid, stors[3]) >= 1 and getSto(cid, stors[4]) >= 1 and getSto(cid, stors[5]) >= 1 then
                doPlayerSendCancel(cid, msgs[3])
                doTeleportThing(cid, tp_check[1])
                setPlayerStorageValue(cid, gstrg_control, (getGlobalStorageValue(gstrg_control)))
            else
                doPlayerSendCancel(cid, msgs[1])
                doTeleportThing(cid, fromPosition)
            end
        else
            doPlayerSendCancel(cid, msgs[2])
            doTeleportThing(cid, fromPosition)
        end
    end
    return true
end

 

Boa sorte.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Não é para substituir o arquivo LUA do globalevents, e sim o do movements. "Teleports_Progs.lua".

É o segundo script.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Mas é da pasta movements e não globalevents.

O da globalevents tem que ficar o primeiro que te mandei.

 

Veja o que postou:

Evento onTime not found (data/globalevents/scripts/teleports_progs.lua)

 

Está colocando errado, abra a pasta movements e pegue o script que te mandei.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

 

Muda:

function onTimer()
para:
function onTime()
E vê se o erro continua.

 

Boa noite,

Zipter98, o erro está acusando porque ele substituiu o arquivo errado, como pode ver no erro, ele substituiu o arquivo do globalevents, e colocou um do movements, onde não existe a função onTimer().

Por isso o erro.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Há servidores, como o seu, que existe a função onTimer. Já, em outros servidores, esta função não existe ou adota o nome de onTime. Se você cria um arquivo com o callback onTimer num servidor que o correto seria onTime, vai acusar este erro que o autor postou. 

Edited by zipter98 (see edit history)

não respondo pms solicitando suporte em programação/scripting

Link to post
Share on other sites

Eu fiz o que o zipter disse e sumiu o erro.

Porém, quanto ao funcionamento, os TPS abrem e talz, mas qdo eu passo sobre eles, nao teleporta. É como se andasse sobre ele normalmente.

 

@UP

 

tinha um errim aqui no AID.

Vou testar novamente corrigido.

 

 

Está ocorrendo o seguinte: mesmo com os storages, quando eu passo no TP q precisa dos storages, diz que eu não os tenho.

Edited by lolksky (see edit history)
Link to post
Share on other sites

Há servidores, como o seu, que existe a função onTimer. Já, em outros servidores, esta função não existe ou adota o nome de onTime. Se você cria um arquivo com o callback onTimer num servidor que o correto seria onTime, vai acusar este erro que o autor postou. 

Sei disso, porém, acho que ele testou o script e pediu pra eu corrigir o script dos teleports.

Caso realmente não esteja cometendo o erro de por o arquivo movements em globalevents, realmente mudando a função onTime() resolverá.

 

#TOPICO:

Você adicionou as actionsID em movements.xml e registrou o script movements corretamente?

Edited by Adriano SwaTT (see edit history)

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Que bom que ajudou.

Só vou pedir para clicar em "Melhor Resposta" pro tópico ficar como Solucionado.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Se for outro script, sugiro que crie um tópico específico.

 

Estamos no aguardo.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Lucaix
      Eu estou querendo adicionar um evento no meu servidor porem eu não sei fazer isso, sera que alguma alma caridosa poderia me ajudar?
       
      O Objetivo do evento é ser o último sobrevivente e durar o maior tempo possível
      Aparecera um portal no templo no horario de 13:30 e 17:30.
      Após o inicio da contagem as waves terão inicio.
      A cada wave a dificuldade aumenta criaturas mais poderosas aparecerão
      A arena sera non pvp.
      Não tera um maximo de players definidos
      O prêmios sera entregue de acordo com as waves 
       



       

    • By Erimyth
      Está chegando o grande dia!! A LIVE mais esperada do Ravendawn acontecerá no dia 10/04/2021 "Sábado às 16:00h"
       
       Além dessa grande noticia da live, a equipe do Ravendawn irá distribuir 5 Chaves para o alfa (Fase 3), e 20 Chaves para o beta fechado!

      Conteúdo principal da live!
      ✔️ Primeiro trailer oficial do Ravendawn! ✔️ Perguntas e respostas com a equipe de desenvolvimento. ✔️ Sorteio de 5 Alpha Keys durante a live para os espectadores!
      🔥 Sorteio das Chaves
      Para conseguir algumas dessas chaves é muito simples! 😄
      Para cada item abaixo que você concluir você receberá pontos  e poderá ter a chance de ganhar uma chave! 😮 
      Todos os pontos serão somados e os vencedores serão selecionados aleatoriamente! ✔️
       
      🔥 Discord
      https://discord.gg/Ravendawn
      - Reaja a esta postagem no discord - 1 ponto
       
      🔥 Pontos no Facebook
      https://www.facebook.com/ravendawnonline/posts/284616256565939?_rdc=1&_rdr
      - Curta a página do Facebook - 1 ponto
      - Curta a postagem do Facebook - 1 ponto
      - Comente a postagem do Facebook marcando um amigo para assistir a transmissão ao vivo! - 2 pontos
      - Compartilhe a postagem no Facebook - 3 pontos
       
      🔥 Instagram
      https://www.instagram.com/p/CNViIQppMtH/
      - Curta a  página do Instagram - 1 ponto
      - Curta a postagem do Instagram - 1 ponto
      - Compartilhe a postagem do Instagram - 3 pontos
       
      🔥 Twitter  
      https://twitter.com/ravendawnonline/status/1379518549761347590
      - Curta a página no Twitter - 1 ponto
      - Curta o tweet do evento - 1 ponto
      - Compartilhe o tweet do evento - 3 pontos
       
      🔥Youtube  
      https://youtube.com/c/RavendawnOnline
      - Inscreva-se no nosso canal do youtube - 2 pontos
       
      🔥Twitch
      https://twitch.tv/RavendawnOnline
      - Siga nossa Twitch - 2 pontos
       
      Você tem até o dia 09/04 para participar!
      Anunciaremos os vencedores pouco antes da nossa transmissão ao vivo no dia 10 de abril, na sala de anúncios no Discord!
       
       
      Certifique-se de estar seguindo o canal oficial do Ravendawn na Twitch, para não perder a transmissão! https://twitch.tv/RavendawnOnline Se você não puder assistir a live, poderá assistir a gravação no canal do Youtube https://youtube.com/c/RavendawnOnline 😄  
    • By Breno Alves
      Olá a todos, e estou de volta pra postar alguns conteúdos...
       
      Fui atrás de um online bonus system para tfs 1.3 e não achei e portanto decidi fazer o meu, com a ajuda do @vankk.
      ================================================================================================================
      Testado em TFS 1.3 na versão 8.60.
      ================================================================================================================

      ================================================================================================================
      No seu banco de dados, execute a seguinte query
      ALTER TABLE `players` ADD `online_time` int(11) NOT NULL DEFAULT 0 ================================================================================================================
      O próximo passo é apenas para quem gostaria de que, a cada server save, o número seja zerado!
      ================================================================================================================
      Em globalevents/scripts/startup.lua, após o inicio da função onStartup() adicione o seguinte código
      db.query("UPDATE `players` SET `online_time` = 0") ================================================================================================================
      Agora crie um arquivo chamado onlinebonus.lua em creaturescripts/scripts com isso dentro
      local event = {} local function addOnlineToken(playerId) local player = Player(playerId) if not player then return false end if player:getIp() == 0 then event[player:getId()] = nil return false end player:addOnlineTime(1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você ganhou 1 online token por permanecer online por 1 hora sem deslogar.") player:addItem(12543, 1) event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end function onLogin(player) player:registerEvent("OnlineBonus") player:registerEvent("OnlineBonusLogout") if event[player:getId()] == nil then event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end return true end function onLogout(player) if event[player:getId()] then event[player:getId()] = nil end return true end -- <event type="login" name="OnlineBonus" script="onlineBonus.lua" /> -- <event type="logout" name="OnlineBonusLogout" script="onlineBonus.lua" /> A tag XML está no fim desse código.
      ================================================================================================================
      Agora, na pasta lib, crie um arquivo chamado onlineTime.lua e coloque isso dentro
      function Player.getOnlineTime(self) local resultId = db.storeQuery(string.format('SELECT online_time FROM `players` WHERE `id` = %d', self:getGuid())) if not resultId then return 0 end local value = result.getNumber(resultId, "online_time") result.free(resultId) return value end function Player.addOnlineTime(self, amount) db.query(string.format("UPDATE `players` SET `online_time` = `online_time` + %d WHERE `id` = %d", amount, self:getGuid())) end Não esqueça de registrar essa lib no lib.lua.
      ================================================================================================================
      Agora, na pasta talkactions/scripts, crie um arquivo chamado onlinebonus.lua com o seguinte código dentro:
      function onSay(player, words, param) local skill = player:getOnlineTime(player) local message = "--------[+]------- [Online Bonus System] -------[+]--------\n\nGanhe um online token a cada hora que você passa online sem deslogar.\n\n---------------------------------------------------\n Total\n Desde o server save você já ganhou " .. skill .. " online tokens." doPlayerPopupFYI(player, message) end -- <talkaction words="!onlinebonus" script="onlineBonus.lua"/> A tag XML está no fim desse código.
      ================================================================================================================
      O usuário irá receber um item a cada hora online sem deslogar.
      O item está no código de creaturescripts com o id 12543, que pode ser alterado para qualquer item que seja agrupável.
      ================================================================================================================
      É isso por hoje.
    • By jNo
      Esse script do Vodkart, da um erro no distro, pedindo Event onTime not found.

      Versão 8.60
      TFS 4.0


      function onTimer() local days = 15*24*60*60 doSaveServer() local query = db.getResult("SELECT `owner`,`id` FROM `houses`;") if (query:getID() ~= -1) then while true do local own,houseid = query:getDataInt("owner"),query:getDataInt("id") local qry = db.getResult("SELECT `lastlogin` FROM `players` WHERE `id` = "..own) if(qry:getID() ~= -1) then last = tonumber(qry:getDataInt("lastlogin")) if last < os.time() - days then setHouseOwner(houseid, NO_OWNER_PHRASE,true) end end if not(query:next()) then break end end query:free() end return true end
    • By danielduarte96
      Seguinte galera.. Eu dei uma procurada porém não encontrei. Eu gostaria de um item que desse vip (Vip permanente), e de quebra já queria o tile que a pessoa só passa caso seja vip.
       
      Agradeço desde já!
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo