Ir para conteúdo
  • Cadastre-se

(Resolvido)[Resolvido] Alavanca que possa usar em um intervalo de tempo


Ir para solução Resolvido por zipter98,

Posts Recomendados

Olá, bem essa é minha primeira postagem e não sei se estou na área correta. Sempre me virei com scripts pegando "um pouco ali, um pouco aqui", mas dessa vez estou precisando de ajuda com esse script é o seguinte:

 

Coloquei um mecanismo tipo alavanca, ao clicar, o player abrir os portões, e depois de 5min os portões se fecham(aparecem) automaticamente.

post-55245-0-81851700-1420660812_thumb.j

 

post-55245-0-06513700-1420663016_thumb.j

 

O problema é que qualquer player pode ir la e abrir depois dos 5min

Eu queria que tive-se um intervalo de tempo para clicar na alavanca

 

Ex: Um Player clica-se e abri-se os portões, depois de 5min os portões se fecharem automaticamente (como está no script), mas que só pude-se abrir(usar a alavanca) novamente depois de 1h.

 

Portao.LUA

 

function onUse(cid, item, frompos, item2, topos)
item1pos = {x=470, y=243, z=7, stackpos=1} -- Posição do Portão 1
item2pos = {x=471, y=243, z=7, stackpos=1} -- Posição do Portão 2
getitem1 = getThingfromPos(item1pos)
getitem2 = getThingfromPos(item2pos)
UniID = 2330 -- UniqueID que vai ser adicionado na alavanca
item1ID = 9485   -- id do Portão 1
item2ID = 9485   -- id do Portão 2
 
if item.uid == UniID and item.itemid == 9531 and getitem1.itemid == item1ID then
doRemoveItem(getitem1.uid, 1)
doTransformItem(item.uid, item.itemid)
doSendMagicEffect(item1pos, 2)
broadcastMessage('Os Portões da ponte the Castle of Titans foi aberto, e se fechará em 5 minutos', MESSAGE_EVENT_ADVANCE)
addEvent(doCreateItem, 300000, 9485, 1, item1pos)
end
 
if item.uid == UniID and item.itemid == 9531 and getitem2.itemid == item2ID then
doRemoveItem(getitem2.uid, 1)
doTransformItem(item.uid, item.itemid)
doSendMagicEffect(item2pos, 2)
addEvent(doCreateItem, 300000, 9485, 1, item2pos)     
end
return TRUE
end

 

 

Agradeço desde já  :D

Editado por shadowfall (veja o histórico de edições)

F3lip3

Link para o post
Compartilhar em outros sites

Se você colocar o uniqueid na tag desta action, não vai ser necessário checá-lo no código.

Se não se importa, removi esta linha, que, ao meu ver, era inútil:

doTransformItem(item.uid, item.itemid)

Do jeito que fiz, na minha opinião, a configuração é mais fácil (se quiser adicionar um novo portão, basta colocar a posição na tabela gates).

Enfim, aqui o código:

ps: o tempo começa a ser contado depois de 5 minutos, no momento em que os portões são criados.

function onUse(cid, item, frompos, item2, topos)
    local gates = {
        {x = 470, y = 243, z = 7},     --Posições dos portões.
        {x = 471, y = 243, z = 7},
    }
    local id = 9485    --ID do portão.
    if getGlobalStorageValue(91801) > os.time() then
        return doPlayerSendCancel(cid, "Espere 1h para usar a alavanca novamente.")
    end
    for _, b in pairs(gates) do
        local gate = getTileItemById(b, id).uid
        if gate > 0 then
            doRemoveItem(gate, 1)
            doSendMagicEffect(b, 2)
            addEvent(function()
                doCreateItem(id, 1, b)
            end, 5 * 60 * 1000)
        else
            return doPlayerSendCancel(cid, "Someone already opened the gates.")
        end
    end
    broadcastMessage('Os Portões da ponte the Castle of Titans foram abertos, e se fecharão em 5 minutos', MESSAGE_EVENT_ADVANCE)
    addEvent(function()
        setGlobalStorageValue(91801, os.time() + 3600)
    end, 5 * 60 * 1000)
    return true
end
Editado por zipter98 (veja o histórico de edições)

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

Link para o post
Compartilhar em outros sites

Cara funfo direitinho obrigado!

 

Só tinha um probleminha: quando o player clica na alavanca ficava mandando o "broadcastMessage" direto até que depois de 5min os portões aparece-se, ai parava com o "doPlayerSendCancel", mas arrumei, eu removi o addevent do "setGlobalStorageValue", agora ta perfect!   :D

 

Queria mais uma coisa se possível!

(Que somente players com guild possam usar a alavanca)

 

Agradeço se poder ajuda e se não poder também agradeço pela ajuda.

F3lip3

Link para o post
Compartilhar em outros sites

Opa, nesse exato momento estou almoçando. Estava pensando neste código, e então lembrei que não tinha feito nenhuma proteção contra esse bug. Editei meu comentário anterior com a correção. 

Sobre seu outro pedido, vou só terminar de comer e faço.

EDIT: Pronto, aqui:

function onUse(cid, item, frompos, item2, topos)
    local gates = {
        {x = 470, y = 243, z = 7},     --Posições dos portões.
        {x = 471, y = 243, z = 7},
    }
    local id = 9485    --ID do portão.
    if getGlobalStorageValue(91801) > os.time() then
        return doPlayerSendCancel(cid, "Espere 1h para usar a alavanca novamente.")
    elseif getPlayerGuildId(cid) < 1 then
        return doPlayerSendCancel(cid, "You aren't member of any guild.")
    end
    for _, b in pairs(gates) do
        local gate = getTileItemById(b, id).uid
        if gate > 0 then
            doRemoveItem(gate, 1)
            doSendMagicEffect(b, 2)
            addEvent(function()
                doCreateItem(id, 1, b)
            end, 5 * 60 * 1000)
        else
            return doPlayerSendCancel(cid, "Someone already opened the gates.")
        end
    end
    broadcastMessage('Os Portões da ponte the Castle of Titans foram abertos, e se fecharão em 5 minutos', MESSAGE_EVENT_ADVANCE)
    addEvent(function()
        setGlobalStorageValue(91801, os.time() + 3600)
    end, 5 * 60 * 1000)
    return true
end
Editado por zipter98 (veja o histórico de edições)

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

Link para o post
Compartilhar em outros sites

Cara vlw,

Você é foda  :D

 

Rsrsrs  :rolleyes:  posso pedir só mais uma coisa? Juro que é a ultima coisa

Tem como coloca o tempo que falta para pega a alavanca

EX: retirar esse

target40x40.png
return doPlayerSendCancel(cid, "Espere 1h para usar a alavanca novamente.")

E coloca um assim

target40x40.png
return doPlayerSendCancel(cid, "[Castle of Titans] Você deve aguardar 60 minuto(s) para usar a alavanca.")

Só que fique contando regressivamente: 60 minuto(s) / 59 minuto(s) / 58 minuto(s).

 

F3lip3

Link para o post
Compartilhar em outros sites
ó que fique contando regressivamente: 60 minuto(s) / 59 minuto(s) / 58 minuto(s).

Fiz uma função pra retornar o tempo do modo como você quer, porém não testei.

Códigos do membro zipter98:

function getGlobalExhaust(key)
    local t = getGlobalStorageValue(key)
    exhaust = math.floor((t - os.time()) / 60) > 0 and math.floor((t - os.time()) / 60) or 0
    return exhaust
end

local gates = {
    {x = 470, y = 243, z = 7},     --Posições dos portões.
    {x = 471, y = 243, z = 7}
}

local etime = {5, 60} -- {tempo para fechar, tempo para usar} ~ em minutos
local id = 9485 -- ID do portão.
local gstor = 91801 -- global storage

function onUse(cid, item, frompos, item2, topos)
    if getGlobalStorageValue(gstor) > os.time() then
        return doPlayerSendCancel(cid, "[Castle of Titans] Você deve aguardar "..getGlobalExhaust(gstor).." minuto(s) para usar a alavanca.")
    elseif getPlayerGuildId(cid) < 1 then
        return doPlayerSendCancel(cid, "You aren't member of any guild.")
    end
    
    for _, b in pairs(gates) do
        local gate = getTileItemById(b, id).uid
        if gate > 0 then
            doRemoveItem(gate, 1)
            doSendMagicEffect(b, 2)
            addEvent(function()
                doCreateItem(id, 1, b)
            end, 5 * 60 * 1000)
        else
            return doPlayerSendCancel(cid, "Someone already opened the gates.")
        end
    end
    
    broadcastMessage('Os Portões da ponte the Castle of Titans foram abertos, e se fecharão em 5 minutos', MESSAGE_EVENT_ADVANCE)
    addEvent(setGlobalStorageValue, etime[1] * 60000, gstor, os.time() + etime[2] * 60)
    return true
end

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

não deu nenhum erro no distro, mas, bugou!

Tipo: quando o player clica na alavanca, depois de 5min, quando os portões fecharem, o player consegue abrir denovo  :unsure:

F3lip3

Link para o post
Compartilhar em outros sites
  • Solução

Hm, curioso. Tenta esse:

ps: se não se importa, eu coloquei pra mostrar os segundos também (acho mais legal e.e). caso você não goste, só avisar que eu retiro.

function convertTime(time)
    local minutes = math.floor(time/60)
    local seconds = time - (minutes * 60)       
    return {minutes, seconds}
end
function onUse(cid, item, frompos, item2, topos)
    local msg = "[Castle of Titans] Você deve aguardar %d minuto%s e %d segundo%s para usar a alavanca."
    local gates = {
        {x = 470, y = 243, z = 7},     --Posições dos portões.
        {x = 471, y = 243, z = 7},
    }
    local id = 9485    --ID do portão.
    if getGlobalStorageValue(91801) > os.time() then
        local t = convertTime(getGlobalStorageValue(91801) - os.time())
        return doPlayerSendCancel(cid, msg:format(t[1], t[1] > 1 and "s" or "", t[2], t[2] > 1 and "s" or ""))
    elseif getPlayerGuildId(cid) < 1 then
        return doPlayerSendCancel(cid, "You aren't member of any guild.")
    end
    for _, b in pairs(gates) do
        local gate = getTileItemById(b, id).uid
        if gate > 0 then
            doRemoveItem(gate, 1)
            doSendMagicEffect(b, 2)
            addEvent(function()
                doCreateItem(id, 1, b)
            end, 5 * 60 * 1000)
        else
            return doPlayerSendCancel(cid, "Someone already opened the gates.")
        end
    end
    broadcastMessage('Os Portões da ponte the Castle of Titans foram abertos, e se fecharão em 5 minutos', MESSAGE_EVENT_ADVANCE)
    addEvent(function()
        setGlobalStorageValue(91801, os.time() + 3600)
    end, 5 * 60 * 1000)
    return true
end
Editado por zipter98 (veja o histórico de edições)

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

Link para o post
Compartilhar em outros sites

Você é o cara zipter98  :palmas:

Funfo direito agora, do jeito que eu queria!

Obrigado! pela ajuda pessoal (zipter98)

Juro que não peço mais nada rsrs.

 

Aqui um print

post-55245-0-82875100-1420755550_thumb.j

 

Muito Obrigado!

Editado por shadowfall (veja o histórico de edições)

F3lip3

Link para o post
Compartilhar em outros sites
Tipo: quando o player clica na alavanca, depois de 5min, quando os portões fecharem, o player consegue abrir denovo

Bom, eu só alterei algumas partes do código do membro e adicionei a minha função, nada mais. Provavelmente deve ter sido o addEvent que não executou corretamente.

E não tem de quê, disponha sempre.

@zipter98

Fez um método bacana, embora houvesse como simplificar.

Mesmo assim, você tem desenvolvido códigos bons, parabéns ;]

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo