Postado Janeiro 23, 2015 10 anos 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: 1° Um dos TPs só poderá ser acessado contendo 5 diferentes storages (o player tem que ter os 5). 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. 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! Editado Janeiro 23, 2015 10 anos por lolksky (veja o histórico de edições) ~~ [show Off] Lolksky ~~
Postado Janeiro 24, 2015 10 anos Solução 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.
Postado Janeiro 24, 2015 10 anos Autor 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: "2° 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. ~~ [show Off] Lolksky ~~
Postado Janeiro 24, 2015 10 anos 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.
Postado Janeiro 24, 2015 10 anos Autor Deu o erro "event onTime not found" :S ~~ [show Off] Lolksky ~~
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.