Couto Posted April 26, 2021 Posted April 26, 2021 (edited) 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 April 26, 2021 by Couto
Boechat Posted April 26, 2021 Posted April 26, 2021 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)
Other Languages Moderators androksi Posted April 26, 2021 Other Languages Moderators Posted April 26, 2021 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.
Couto Posted April 26, 2021 Author Posted April 26, 2021 (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 April 26, 2021 by Couto
rxqp Posted April 27, 2021 Posted April 27, 2021 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)
Other Languages Moderators androksi Posted April 27, 2021 Other Languages Moderators Posted April 27, 2021 (edited) 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 April 27, 2021 by andr0xy 1
Boechat Posted April 27, 2021 Posted April 27, 2021 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
Couto Posted April 27, 2021 Author Posted April 27, 2021 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now