#Gubiani Posted August 4, 2018 Share Posted August 4, 2018 carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) -- modelo e as coordenadas do veiculo criado. setVehicleRespawnPosition (carro, 2475, -1657, 14, 0, 0, 0) -- ponto de respawn do veiculo. function Veh(ThePlayer) local vehicle = getPedOccupiedVehicle (ThePlayer) -- verifica se o jogador está no veiculo. if not vehicle then -- se o jogador não estiver no veiculo então... setTimer (respawnVehicle, 10000, 1, carro) -- conta 10 segundos para respawnar o veiculo. setTimer (setVehicleEngineState, 10000, 1, carro, false) -- conta 10 segundos para desligar o motor do veiculo. outputChatBox("Seu veiculo será respawnado em 10 segundos! Entre nele novamente") -- mensagem de aviso para o player. else cancelEvent() -- estou com dúvida aqui, quando eu entro no veiculo ele mesmo assim respawna... end end addEventHandler("onVehicleExit", root, Veh) Boas pessoal, estou com dúvida nesse script que escrevi, quando eu entro nele novamente não para a contagem e acaba respawnando o que eu posso fazer para arrumar isso? Obrigado. Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 9 hours ago, #Gubiani said: [...] quando eu entro nele novamente não para a contagem e acaba respawnando [...] Não existe nenhum evento nesse script que ative ao entrar no veículo. Como por exemplo um onVehicleEnter Além disso, você precisa colocar seu timer em uma variável para poder cancelá-lo depois. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Mas dai tenho que criar outra função que ative na hora que o player estiver dentro do veiculo? Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 Sim. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Fiz isso aqui, porém, ainda não está funcionando.. carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) -- modelo e as coordenadas do veiculo criado. setVehicleRespawnPosition (carro, 2475, -1657, 14, 0, 0, 0) -- ponto de respawn do veiculo. function foraVeh(ThePlayer) local vehicle = getPedOccupiedVehicle (ThePlayer) -- verifica se o jogador está no veiculo. if not vehicle then -- se o jogador não estiver no veiculo então... setTimer (respawnVehicle, 10000, 1, carro) -- conta 10 segundos para respawnar o veiculo. setTimer (setVehicleEngineState, 10000, 1, carro, false) -- conta 10 segundos para desligar o motor do veiculo. outputChatBox("Seu veiculo será respawnado em 10 segundos! Entre nele novamente", ThePlayer, 255, 255, 255, true) -- mensagem de aviso para o player. else cancelEvent() -- estou com dúvida aqui, quando eu entro no veiculo ele mesmo assim respawna... end end addEventHandler("onVehicleExit", root, foraVeh) function dentroVeh(ThePlayer) local vehicle = getPedOccupiedVehicle (ThePlayer) if vehicle then else end end addEventHandler ("onVehicleEnter", root, dentroVeh) Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 10 minutes ago, Lord Henry said: Além disso, você precisa colocar seu timer em uma variável para poder cancelá-lo depois. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 (edited) Hummm, beleza vou tentar fazer algo aqui Tem que ser uma variável global ? EDIT Edited August 4, 2018 by #Gubiani Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 Sim, pois vc declarou o timer dentro de uma função. Se ela for local, as outras funções não terão acesso a ela. Declare a variável do timer como uma tabela vazia antes da primeira função e depois use-a, indexando com o jogador. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Bom eu abri a tabela, mas sou leigo, o que eu posso por dentro das chaves, e como eu chamo o setTimer? carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) -- modelo e as coordenadas do veiculo criado. setVehicleRespawnPosition (carro, 2475, -1657, 14, 0, 0, 0) -- ponto de respawn do veiculo. setTimer { } function foraVeh(ThePlayer) local vehicle = getPedOccupiedVehicle (ThePlayer) -- verifica se o jogador está no veiculo. if not vehicle then -- se o jogador não estiver no veiculo então... outputChatBox("Seu veiculo será respawnado em 10 segundos! Entre nele novamente", ThePlayer, 255, 255, 255, true) -- mensagem de aviso para o player. else end end addEventHandler("onVehicleExit", root, foraVeh) function dentroVeh(ThePlayer) local vehicle = getPedOccupiedVehicle (ThePlayer) if vehicle then else end end addEventHandler ("onVehicleEnter", root, dentroVeh) Link to comment
[M]ister Posted August 4, 2018 Share Posted August 4, 2018 Se quiser aproveitar algo: carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) addEventHandler("onVehicleExit", root, function(player) if (#getVehicleOccupants(source) == 0) then outputChatBox("Seu veiculo será respawnado em 10 segundos! Entre nele novamente",player) setTimer(function(veh) if (#getVehicleOccupants(veh) == 0) then respawnVehicle(veh) setVehicleEngineState(veh,false) end end,10000,1,source) end end ) Dessa forma ele não irá respawnar quando sair do veículo caso exista outros jogadores dentro. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 @MaligNos Pode me explicar passo a passo teu código, para que serve as hashtag, enfim, me explique para eu entender melhor Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 Eu fiz assim, pode testar: carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) -- Cria o veículo na coordenada específica. (essa posição é por padrão o ponto de respawn) globalTimer = {} -- tabela vazia global. function startRespawn (thePlayer) -- Evite usar letra maiúscula no início de variáveis. -- vehicle é uma palavra reservada, não use-a para dar nome de variável. if source ~= carro then return end -- Se o veículo que o jogador saiu não for o veículo deste script, nada acontece. if not isTimer (globalTimer[thePlayer]) then -- Verifica se o jogador já possui um timer ativo. outputChatBox ("Seu veiculo será respawnado em 10 segundos! Entre nele novamente", thePlayer) -- Mensagem de aviso para o player. globalTimer[thePlayer] = setTimer (function() -- Conta 10 segundos respawnVehicle (carro) -- Respawna o veículo. setVehicleEngineState (carro, false) -- Desliga o motor do veículo. end, 10000, 1) -- Tempo e repetições do timer. else resetTimer (globalTimer[thePlayer]) -- Se já existe o timer do jogador, reinicia ele. end end addEventHandler ("onVehicleExit", root, startRespawn) -- Executa essa função quando qualquer um sair de qualquer veículo. function cancelRespawn (thePlayer) if source ~= carro then return end -- Se o veículo que o jogador entrou não for o veículo deste script, nada acontece. if isTimer (globalTimer[thePlayer]) then -- Se existe o timer deste jogador, então: killTimer (globalTimer[thePlayer]) -- Cancela o timer deste jogador e o veículo não vai mais respawnar até que ele saia de novo do veículo. outputChatBox ("Seu veiculo não será mais respawnado.", thePlayer) -- Mensagem de aviso para o player. end end addEventHandler ("onVehicleEnter", root, cancelRespawn) -- Executa essa função quando qualquer um entrar em qualquer veículo. 4 minutes ago, #Gubiani said: @MaligNos Pode me explicar passo a passo teu código, para que serve as hashtag, enfim, me explique para eu entender melhor A hashtag indica o tamanho de uma tabela. No caso, a função getVehicleOccupants retorna uma tabela com todos os jogadores que estão dentro de um veículo. A tabela vazia tem tamanho 0. Por exemplo, essa tabela qualquer aqui: tabelaQualquer = {32, 15, 50} -- Table com 3 elementos de valores numéricos. No caso acima, se eu usar #tabelaQualquer, isso será igual a 3. 1 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Humm, então eu colocando a tabela ele verifica quantos jogadores estão dentro do veículo ? eu testei teu script @Lord Henry deu certinho como você deixou nos comentários Me surgiu uma dúvida Lord, na linha 9 do teu código, por que tu colocou uma função dentro do setTimer, e uma função sem nome ? Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 Just now, #Gubiani said: Humm, então eu colocando a tabela ele verifica quantos jogadores estão dentro do veículo ? eu testei teu script @Lord Henry deu certinho como você deixou nos comentários É que na verdade o exemplo do @MaligNos está mais avançado, ele está querendo evitar que o veículo respawne com outro jogador dentro. Eu apenas corrigi o seu exemplo para fazer somente o que vc quer que ele faça. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Eu testei o script do @MaligNos e respawna mesmo estando dentro do veículo... E achei muito confuso o o tipo e as sequencias das funções dele, não tem como deixar mais organizado ? Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 E o exemplo que eu dei, só funciona no veículo do seu script, não funciona com os outros veículos pelo mapa. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 (edited) E quando eu quiser criar varios veiculos e todos terem um ponto de respawn e localidade diferentes e quiser que todos eles quando o player desocupar ele conte o respawn? Por que eu quero fazer meio que um lugar de veiculos livres para os novatos usar @Lord Henry Edited August 4, 2018 by #Gubiani Link to comment
[M]ister Posted August 4, 2018 Share Posted August 4, 2018 5 minutes ago, #Gubiani said: Eu testei o script do @MaligNos e respawna mesmo estando dentro do veículo... E achei muito confuso o o tipo e as sequencias das funções dele, não tem como deixar mais organizado ? É, pelo que vi não era para acontecer de respawnar com o jogador dentro, depois posso tentar verificar melhor... 6 minutes ago, Lord Henry said: E o exemplo que eu dei, só funciona no veículo do seu script, não funciona com os outros veículos pelo mapa. Exatamente, no script que mandei passou despercebido a verificação se o veículo que irá respawnar é o mesmo criado e armazenado na variável "carro" 1 Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 13 minutes ago, #Gubiani said: Me surgiu uma dúvida Lord, na linha 9 do teu código, por que tu colocou uma função dentro do setTimer, e uma função sem nome ? Desculpe, não tinha visto essa pergunta. No caso, a função pertence ao timer, por isso não precisa dar nome a ela pois o nome está no timer. Eu preferi fazer assim pois é muito melhor fazer uma função inteira dentro do timer do que fazer 1 timer para cada comando que será feito após 10 segundos. 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Just now, Lord Henry said: Desculpe, não tinha visto essa pergunta. No caso, a função pertence ao timer, por isso não precisa dar nome a ela pois o nome está no timer. Eu preferi fazer assim pois é muito melhor fazer uma função inteira dentro do timer do que fazer 1 timer para cada comando que será feito após 10 segundos. Entendi Link to comment
Other Languages Moderators Lord Henry Posted August 4, 2018 Other Languages Moderators Share Posted August 4, 2018 (edited) Fiz agora com 2 veículos, pra colocar mais veículos é só vc ir adicionando eles na primeira table. Não se esqueça de colocar vírgula no final. carros = { -- Tabela com vários veículos em suas posições. createVehicle (411, 2475, -1657, 13.1, 0, 0, 0), -- Cria o veículo na coordenada específica. (essa posição é por padrão o ponto de respawn) createVehicle (411, 2480, -1657, 13.1, 0, 0, 0), -- Cria outro veículo na outra coordenada e assim por diante. Este é um caso raro onde o elemento pode ser chamado sem estar em uma variável. -- (precisa ter a vírgula no final de cada veículo pois os elementos de uma table precisam estar separados entre vírgulas) } globalTimer = {} -- tabela vazia global. Os timers serão anexados aos veículos e não nos jogadores. function startRespawn (thePlayer) local meuCarro = false -- Variável local, que será preenchida pelo veículo que o jogador saiu se ele estiver na tabela carros. for i, vehicle in ipairs (carros) do -- Para cada veículo da table 'carros', faça: if source == vehicle then -- Se o veículo que o jogador saiu for um veículo deste script, então: meuCarro = vehicle break -- (Break = sair deste FOR) Para de verificar os outros carros, pois o veículo já foi encontrado. end end if not meuCarro then return end -- Se o veículo que o jogador saiu não está na lista acima (não faz parte deste script), então nada acontece. if not isTimer (globalTimer[meuCarro]) then -- Verifica se o veículo já possui um timer ativo. Se não tiver, então: if (#getVehicleOccupants(meuCarro) > 0) then return end -- Não faz nada se ainda houver alguém dentro do veículo e não inicia o timer. outputChatBox ("Esse veiculo será respawnado em 10 segundos! Entre nele novamente!", thePlayer) -- Mensagem de aviso para o player. globalTimer[meuCarro] = setTimer (function() -- Conta 10 segundos respawnVehicle (meuCarro) -- Respawna o veículo. setVehicleEngineState (meuCarro, false) -- Desliga o motor do veículo. end, 10000, 1) -- Tempo e repetições do timer. else resetTimer (globalTimer[meuCarro]) -- Se já existe o timer do veículo, reinicia ele. end end addEventHandler ("onVehicleExit", root, startRespawn) -- Executa essa função quando qualquer um sair de qualquer veículo. function cancelRespawn (thePlayer) local meuCarro = false -- Variável local, que será preenchida pelo veículo que o jogador entrou se ele estiver na tabela carros. for i, vehicle in ipairs (carros) do -- Para cada veículo da table 'carros', faça: if source == vehicle then -- Se o veículo que o jogador entrou for um veículo deste script, então: meuCarro = vehicle break -- (Break = sair deste FOR) Para de verificar os outros carros, pois o veículo já foi encontrado. end end if not meuCarro then return end -- Se o veículo que o jogador entrou não está na lista acima (não faz parte deste script), então nada acontece. if isTimer (globalTimer[meuCarro]) then -- Se existe o timer deste veículo, então: killTimer (globalTimer[meuCarro]) -- Cancela o timer deste veículo e ele não vai mais respawnar até que o último jogador saia de novo do veículo. outputChatBox ("Esse veiculo não será mais respawnado.", thePlayer) -- Mensagem de aviso para o player. end end addEventHandler ("onVehicleEnter", root, cancelRespawn) -- Executa essa função quando qualquer um entrar em qualquer veículo. Edited August 4, 2018 by Lord Henry Erro de comentário e correção de indentação. 1 Link to comment
[M]ister Posted August 4, 2018 Share Posted August 4, 2018 Agora acho que deve funcionar a minha solução também: createVehicle (411, 2475, -1657, 14, 0, 0, 0) createVehicle (411, 2475, -1657, 14, 0, 0, 0) addEventHandler("onVehicleExit", resourceRoot, -- resourceRoot define que nosso evento só será acionado nos veículos criados pelo próprio resource function(player) if (numeroPassageiros(source) == 0) then outputChatBox("Seu veiculo será respawnado em 10 segundos! Entre nele novamente",player) setTimer(function(veh) if (numeroPassageiros(veh) == 0) then respawnVehicle(veh) setVehicleEngineState(veh,false) end end,10000,1,source) end end ) function numeroPassageiros(veh) local numero = 0 for assento, jogador in pairs(getVehicleOccupants(veh)) do numero = numero + 1 end return numero end A função getVehicleOccupants() retorna uma tabela com indexes desordenados que se referem ao assento que o player ocupa, podendo começar inclusive com 0, e nesses casos o uso da # (hashtag) na tentativa de obter a quantidade de elementos é incorreta, e retornará sempre o valor: 0 ... por isso nã solução que lhe enviei anteriormente não foi funcional 1 Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Opa, muito obrigado, à todos vou estudar o script de vocês, se eu tiver alguma dúvida posso por aqui nesse mesmo tópico ? Link to comment
#Gubiani Posted August 4, 2018 Author Share Posted August 4, 2018 Como vou fazer para o script reconhecer quando o veiculo explode ou cair na agua por exemplo e executar o respawn tenho que fazer uma função para cada evento? Link to comment
[M]ister Posted August 5, 2018 Share Posted August 5, 2018 4 hours ago, #Gubiani said: Opa, muito obrigado, à todos vou estudar o script de vocês, se eu tiver alguma dúvida posso por aqui nesse mesmo tópico ? Apenas se o assunto for o mesmo 2 hours ago, #Gubiani said: Como vou fazer para o script reconhecer quando o veiculo explode ou cair na agua por exemplo e executar o respawn tenho que fazer uma função para cada evento? createVehicle (411, 2475, -1657, 14, 0, 0, 0) createVehicle (411, 2475, -1657, 14, 0, 0, 0) addEventHandler("onResourceStart", resourceRoot, function() for _, veh in ipairs(getElementsByType("vehicle", resourceRoot)) do toggleVehicleRespawn(veh, true) setVehicleIdleRespawnDelay(veh, 10000) -- respawnar após 10 segundos sem ninguém no veículo setVehicleRespawnDelay(veh, 5000) -- respawnar em 5 segundos após o veículo explodir end end ) setTimer(function() for _,veh in ipairs(getElementsByType("vehicle", resourceRoot)) do if isElementInWater(veh) and not next(getVehicleOccupants(veh)) then respawnVehicle(veh) end end end,5000,0) -- a cada 5 segundos verifica se existe veículo na água, caso sim, aciona a função para respawnar ele addEventHandler ( "onVehicleRespawn", resourceRoot, function() setVehicleEngineState(source,false) end ) Esse timer com verificação para respawnar caso caia na água acho meio desnecessário, pois se caiu na água o player vai sair do veículo ou vai morrer e dessa forma já vai ser respawnado pela função setVehicleIdleRespawnDelay() 1 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