Jump to content

Dúvida sobre settimer


Recommended Posts

Boa tarde turma, estou criando um sistema de carga/descarga de caminhões para o meu servidor e queria adicionar um sistema que o jogador ao sair do veículo que ele iniciou viagem, ela tenha determinado tempo para voltar ao veículo ou a entrega será cancelada. Queria saber o que devo usar pra salvar o veículo que ele usou no momento que fez o carregamento,  estou usando "Caminhao[source] = getPedOccupiedVehicle(source)" no momento do carregamento para tentar salvar o veículo, mas quando o jogador sai do veículo que ele usou para carregar o timer começa a contar mas quando ele entra em qualquer veículo o killtimer é acionado mas eu quero que o killtimer seja acionado apenas caso ele volte para o veículo que foi usado no carregamento, o que devo usar?

Agradeço quem puder ajudar.

 

function Exit_Veh (source)
	if getElementData(source, "Viagem") == true then
		exports.Scripts_Dxmessages:outputDx(source, "Você tem 60 segundos para voltar pro caminhão", "warning")
		Tempo[source] = setTimer ( function()
			canceljobtimer (source)
			setElementData(source, "Viagem", false)
			exports.Scripts_Dxmessages:outputDx(source, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
		end, 10000, 1 )
	end
end
addEventHandler ("onVehicleExit", getRootElement(), Exit_Veh)

function Enter_Veh (source)
	if (Caminhao[source]) and isElement(Caminhao[source]) then	
		if isTimer(Tempo[source]) then
			killTimer(Tempo[source])
			exports.Scripts_Dxmessages:outputDx(source, "Você voltou pro seu veículo", "warning")
		end
	end
end
addEventHandler ("onVehicleEnter", getRootElement(), Enter_Veh)

 

Edited by Couto
Link to post

source já é uma variável reservada pelo sistema, não a use como parâmetro.

Veja se assim vai funcionar:

function Exit_Veh (player)
	if getElementData(player, "Viagem") then
		exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning")
		Tempo[player] = setTimer ( function()
			canceljobtimer (player)
			setElementData(player, "Viagem", nil)
			Tempo[player] = nil
			exports.Scripts_Dxmessages:outputDx(player, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
		end, 10000, 1, player)
	end
end
addEventHandler ("onVehicleExit", getRootElement(), Exit_Veh)

function Enter_Veh (player)
	if isElement(Caminhao[player]) and getElementType(Caminhao[player]) == 'vehicle' then 
		if isTimer(Tempo[player]) then
			killTimer(Tempo[player])
			exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning")
		end
	end
end
addEventHandler ("onVehicleEnter", getRootElement(), Enter_Veh)
Link to post

Olá.

Nos parâmetros da função do evento, eu recomendaria usar o seat (terceiro parâmetro) para checar se foi o motorista que entrou/saiu do veículo. Pois, se caso alguém entre no veículo para zoar, iria causar alguns erros no script. É bom sempre evitá-los.

Mais uma coisa: o código que o @Boechat mandou está correto, mas só faltou adicionar os parâmetros dentro da função do setTimer. :)

Link to post
Posted (edited)
4 hours ago, Boechat said:

source já é uma variável reservada pelo sistema, não a use como parâmetro.

Veja se assim vai funcionar:



function Exit_Veh (player)
	if getElementData(player, "Viagem") then
		exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning")
		Tempo[player] = setTimer ( function()
			canceljobtimer (player)
			setElementData(player, "Viagem", nil)
			Tempo[player] = nil
			exports.Scripts_Dxmessages:outputDx(player, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
		end, 10000, 1, player)
	end
end
addEventHandler ("onVehicleExit", getRootElement(), Exit_Veh)

function Enter_Veh (player)
	if isElement(Caminhao[player]) and getElementType(Caminhao[player]) == 'vehicle' then 
		if isTimer(Tempo[player]) then
			killTimer(Tempo[player])
			exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning")
		end
	end
end
addEventHandler ("onVehicleEnter", getRootElement(), Enter_Veh)

Mesmo seguindo essa função, quando eu saio do veículo que iniciei a viagem e entro em qualquer outro veículo continua ocorrendo o killtimer. Eu quero que o killtimer só ocorra no veículo que foi iniciada a viagem.

Edited by Couto
Link to post

O source do evento onVehicleEnter e o veiculo, use uma condição para saber se o veiculo no qual ele entrou e o veiculo de trabalho do mesmo

ex

function Exit_Veh (source)
    if getElementData(source, "Viagem") == true then
        exports.Scripts_Dxmessages:outputDx(source, "Você tem 60 segundos para voltar pro caminhão", "warning")
        Tempo[source] = setTimer ( function()
            canceljobtimer (source)
            setElementData(source, "Viagem", false)
            exports.Scripts_Dxmessages:outputDx(source, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
        end, 10000, 1 )
    end
end
addEventHandler ("onVehicleExit", getRootElement(), Exit_Veh)

function Enter_Veh (player)
    if (Caminhao[player]) and isElement(Caminhao[player]) then
        if source == [[--(var do veiculo do player)--]] then
            if isTimer(Tempo[source]) then
                killTimer(Tempo[source])
                exports.Scripts_Dxmessages:outputDx(source, "Você voltou pro seu veículo", "warning")
            end
        end
    end
end
addEventHandler ("onVehicleEnter", getRootElement(), Enter_Veh)

 

Link to post

source não pode ser usado como parâmetro de função, uma vez que ele é o elemento dos eventos. Ainda faltam os parâmetros do setTimer.

Spoiler

 


addEventHandler("onVehicleEnter", root, function(player, seat)
    if seat ~= 0 then
        return false
    end

    if Caminhao[player] and isElement(Caminhao[player]) and source == Caminhao[player] then
        if isTimer(Tempo[player]) then
            killTimer(Tempo[player])
            Tempo[player] = nil
            exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning")
        end
    end
end)

addEventHandler("onVehicleExit", root, function(player, seat)
    if seat ~= 0 then
        return false
    end

    local hasJob = getElementData(player, "Viagem")
    if not hasJob or hasJob == false then
        return false
    end

    if Caminhao[player] and isElement(Caminhao[player]) and source == Caminhao[player] then
        exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning")
        Tempo[player] = setTimer(function(p)
            if not isElement(p) then
                return false
            end
            canceljobtimer(p)
            removeElementData(p, "Viagem")
            exports.Scripts_Dxmessages:outputDx(p, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
        end, 10000, 1, player)
    end
end)

 

 

Edited by andr0xy
  • Thanks 1
Link to post
On 26/04/2021 at 01:41, Couto said:

Queria saber o que devo usar pra salvar o veículo que ele usou no momento que fez o carregamento,  estou usando "Caminhao[source] = getPedOccupiedVehicle(source)"

 

 

Adicione esses eventos no momento em que faz o carregamento, assim o código fica mais leve:

addEventHandler ("onVehicleEnter", Caminhao[source], Enter_Veh)

addEventHandler ("onVehicleExit", Caminhao[source], Exit_Veh)

 

 

E deixe o código assim:

function Exit_Veh (player, seat)
	if getElementData(player, "Viagem") and seat == 0 then
		exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning")
		Tempo[player] = setTimer ( function(player)
			canceljobtimer (player)
			setElementData(player, "Viagem", nil)
			Tempo[player] = nil
			exports.Scripts_Dxmessages:outputDx(player, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
		end, 10000, 1, player)
	end
end

function Enter_Veh (player, seat)
	if seat == 0 and isElement(Caminhao[player]) and Caminhao[player] == source then 
		if isTimer(Tempo[player]) then
			killTimer(Tempo[player])
			exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning")
		end
	end
end

 

Link to post
3 hours ago, andr0xy said:

source não pode ser usado como parâmetro de função, uma vez que ele é o elemento dos eventos. Ainda faltam os parâmetros do setTimer.

  Hide contents

 



addEventHandler("onVehicleEnter", root, function(player, seat)
    if seat ~= 0 then
        return false
    end

    if Caminhao[player] and isElement(Caminhao[player]) and source == Caminhao[player] then
        if isTimer(Tempo[player]) then
            killTimer(Tempo[player])
            Tempo[player] = nil
            exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning")
        end
    end
end)

addEventHandler("onVehicleExit", root, function(player, seat)
    if seat ~= 0 then
        return false
    end

    local hasJob = getElementData(player, "Viagem")
    if not hasJob or hasJob == false then
        return false
    end

    if Caminhao[player] and isElement(Caminhao[player]) and source == Caminhao[player] then
        exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning")
        Tempo[player] = setTimer(function(p)
            if not isElement(p) then
                return false
            end
            canceljobtimer(p)
            removeElementData(p, "Viagem")
            exports.Scripts_Dxmessages:outputDx(p, "Você Saiu da Van, Mercadoria Cancelada!", "warning")
        end, 10000, 1, player)
    end
end)

 

 

Funcionou chefe, valeu.

 

Muito obrigado a todos que ajudaram.

Link to post

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...