Couto Posted April 26, 2021 Share 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 Link to comment
Boechat Posted April 26, 2021 Share 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) Link to comment
Other Languages Moderators androksi Posted April 26, 2021 Other Languages Moderators Share 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. Link to comment
Couto Posted April 26, 2021 Author Share 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 Link to comment
rxqp Posted April 27, 2021 Share 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) Link to comment
Other Languages Moderators androksi Posted April 27, 2021 Other Languages Moderators Share 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 Link to comment
Boechat Posted April 27, 2021 Share 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 Link to comment
Couto Posted April 27, 2021 Author Share 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. Link to comment
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