Jump to content

Como matar um timer dentro de uma tabela?


Recommended Posts

Eu sei que a função que deve ser usada é o killTimer mas não consigo utilizar.

Segue o script:

tempTimers = {} -- Tabela que armazena os timers

-- COMO O TIMER É SETADO
tempTimers[seller] = setTimer ( function(seller)
            if table.remove(sellOrders, returnPOS(sellOrders, seller, 2)) then return outputChatBox("Sua proposta de venda expirou.", seller) end
        end, 1000*120, 1, seller)

-- COMO EU TENTEI MATA O TIMER
killTimer(tempTimers[seller])
killTimer(tempTimers[seller][1])

-- Ambos dão erro de index

Como eles estão sendo colocados na table?

Achei que estária assim:

tempTimers = {
[userdata] = {timer},
[userdata] = {timer}
}

userdata sei que é o player, porém achei que pra acessar o timer bastava colocar o [1] -> tempTimers[seller][1] 

Como realmente está a table?

  • Thanks 1
Link to comment
  • Other Languages Moderators

O seu código está correto, Gaimo. Tenha certeza de que está utilizando o nome corretamente (no caso, acho que seller seria o jogador).

Exemplo abaixo é apenas uma brincadeira que eu fiz pra você entender. Quando você digita /desafio, um timer é iniciado. Dentro de 15 segundos você deve entrar em um veículo. Quando entrar, o timer deve ser parado e anulado.

local tempTimers = {}

addCommandHandler("desafio", function(player)
    if not tempTimers[player] then
        outputChatBox("Você tem 15 segundos para entrar num veículo!", player, 0, 255, 0)

        tempTimers[player] = setTimer(function(p)
            outputChatBox("O tempo acabou.", p, 255, 255, 0)
            tempTimers[p] = nil
        end, 15 * 1000, 1, player)
    end
end)

addEventHandler("onVehicleEnter", root, function(thePlayer, seat)
    if seat == 0 then
        if tempTimers[thePlayer] and isTimer(tempTimers[thePlayer]) then
            killTimer(tempTimers[thePlayer])
            tempTimers[thePlayer] = nil
        end

        outputChatBox("Muito bem! Você entrou no veículo em tempo.", thePlayer, 255, 0, 0)
    end
end)

 

  • Like 1
Link to comment

Funcionou, mas fiquei com uma dúvida, não sei se foi porque inverti a ordem de uma linha ou porque usei sua verificação: 
if tempTimers[thePlayer] and isTimer(tempTimers[thePlayer]) then

Inclusive MUITO BOA!!

Mas tenho quase certeza que é a verificação.... Mesmo deletando o pedido de venda antes do timer  o seller ainda ta na variavel
Saca só:

addCommandHandler("aceitar", function(buyer, commandName)
    if buyer then
        seller = sellOrders[returnPOS(sellOrders, buyer, 2)][2]
        -- EXISTE UM PEDIDO DE VENDA PARA O COMPRADOR?
        if #sellOrders == 0 then return end
        if returnPOS(sellOrders, buyer, 2) ~= false then
            -------- AQUI EU PEGO O SELLER ------------
            seller = sellOrders[returnPOS(sellOrders, buyer, 2)][2]
            -----------------------------------------------------
            weapon = sellOrders[returnPOS(sellOrders, buyer, 2)][3]


            takeWeapon(seller, weapon)
            giveWeapon(buyer, weapon, 1)
            
            outputChatBox("Nome do vendedor: "..getPlayerName(seller), buyer)

            ----------------COMO EU TAVA DELETANDO ------------------
			table.remove(sellOrders, returnPOS(sellOrders, buyer, 2))
			killTimer(tempTimers[seller])
            ---------------------------------------------------------


			---------- COM SUA VERIFICACAO----------------------------
            if tempTimers[seller] and isTimer(tempTimers[seller]) then
                killTimer(tempTimers[seller]) -- ?????????
                tempTimers[seller] = nil
            end
            table.remove(sellOrders, returnPOS(sellOrders, buyer, 2))
			----------------------------------------------------------
            
            outputChatBox("Troca realizada com sucesso.", seller and buyer)

            
        end
        outputChatBox("=========FIM DO SCRIPT=========", seller)
    end
end, false, false)

Bom agora está funcionando, OBRIGADO!

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...