Other Languages Moderators Lord Henry Posted August 5, 2018 Other Languages Moderators Share Posted August 5, 2018 Realmente, esqueci do fato do jogador morrer e não sair do veículo. Assim funcionará perfeitamente: carros = { -- Tabela com vários veículos em suas posições. createVehicle (411, 2475, -1657, 13.2, 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.2, 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. for i, vehicle in ipairs (carros) do -- Para cada veículo da table 'carros', faça: toggleVehicleRespawn (vehicle, true) -- Permite que eles respawnem automaticamente. setVehicleIdleRespawnDelay (vehicle, 10000) -- Respawnar após 10 segundos sem ninguém no veículo. (Ex: jogador morre e não sai do veículo, ou alguém empurra o veículo de sua posição sem entrar nele) setVehicleRespawnDelay (vehicle, 5000) -- Respawnar após 5 segundos que explodiu. (Ex: Veículo explode sem ninguém sair dele.) end 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. 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. No caso de cair na água, vai acontecer exatamente como o @MaligNos disse: Ou os ocupantes do veículo morrerão dentro dele (deixando o veículo inativo e respawnando com o setVehicleIdleRespawnDelay), ou eles sairão do veículo (ativando o timer de saída). Caso o veículo exploda com ou sem ninguém dentro, ele respawnará com o setVehicleRespawnDelay. ------------------------------------------------------------------- 39 minutes ago, MaligNos said: [...] createVehicle (411, 2475, -1657, 14, 0, 0, 0) createVehicle (411, 2475, -1657, 14, 0, 0, 0) addEventHandler("onResourceStart", resourceRoot, [...] [...] Tome cuidado, vc está criando 2 veículos idênticos no mesmo lugar. 1 1 Link to comment
[M]ister Posted August 5, 2018 Share Posted August 5, 2018 13 minutes ago, Lord Henry said: Tome cuidado, vc está criando 2 veículos idênticos no mesmo lugar. Ah sim, queria apenas deixar claro ao @#Gubiani que ele pode criar n-veículos, que o script suportaria... 1 Link to comment
#Gubiani Posted August 5, 2018 Author Share Posted August 5, 2018 @MaligNos Como que na linha 9, o script entende que ele explodiu ? Link to comment
#Gubiani Posted August 5, 2018 Author Share Posted August 5, 2018 @Lord Henry Eu não entendi muito algumas funções ali das linhas: 11, 12, e 13 Link to comment
[M]ister Posted August 5, 2018 Share Posted August 5, 2018 29 minutes ago, #Gubiani said: @Lord Henry Eu não entendi muito algumas funções ali das linhas: 11, 12, e 13 Qual a dúvida ? ainda deixamos comentários explicando suas funcionalidades... Basicamente estávamos tentando reinventar a roda... o MTA já dispõe de funções nativas que suprem as necessidade de respawnar veículo quando o player abandona ou explodi o veículo, não necessitando que criemos funções anexadas a eventos: local carro = createVehicle (411, 2475, -1657, 14, 0, 0, 0) toggleVehicleRespawn(carro,true) -- DIFINE QUE O VEÍCULO ESTÁ SUJEITO ÀS FUNÇÕES DE RESPAWN (setVehicleIdleRespawnDelay E setVehicleRespawnDelay) -- ISSO: setVehicleIdleRespawnDelay(carro,10000) -- É IGUAL A ISSO: function saiu(player) setTimer(respawnVehicle,10000,1,source) end addEventHandler ("onVehicleExit", carro, saiu) -- ISSO: setVehicleRespawnDelay(carro,5000) -- É IGUAL A ISSO: function explodiu() setTimer(respawnVehicle,5000,1,source) end addEventHandler("onVehicleExplode", carro, explodiu) *Foi apenas um exemplo lógico, certamente o código fonte das funções setVehicleIdleRespawnDelay/setVehicleRespawnDelay é mais complexo 1 Link to comment
#Gubiani Posted August 5, 2018 Author Share Posted August 5, 2018 (edited) Ah Beleza, entendi, então esse sistema ai está bugando no sistema de quando e saio de veiculo e ele respawna e não espera o tempo total setado, por exemplo eu setei para quando o jogador saísse do veiculo respawnar em 1 minuto e ele ta respawnado por esse motivo, de quando o veiculo é empurrado ou quando ele explode e ai ta respawnando antes do tempo setado: for i, vehicle in ipairs (carros) do -- Para cada veículo da table 'carros', faça: toggleVehicleRespawn (vehicle, true) -- Permite que eles respawnem automaticamente. setVehicleIdleRespawnDelay (vehicle, 10000) -- Respawnar após 10 segundos sem ninguém no veículo. (Ex: jogador morre e não sai do veículo, ou alguém empurra o veículo de sua posição sem entrar nele) setVehicleRespawnDelay (vehicle, 5000) -- Respawnar após 5 segundos que explodiu. (Ex: Veículo explode sem ninguém sair dele.) e não está funcionando este: EDIT ignora a função cancelRespawn! 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. 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, 60000, 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 5, 2018 by #Gubiani ignora a função cancelRespawn Link to comment
Other Languages Moderators Lord Henry Posted August 5, 2018 Other Languages Moderators Share Posted August 5, 2018 (edited) Ele está respawnando antes pois o tempo de idle (inativo) dele está para 10 segundos. Mude essa parte para isso: setVehicleIdleRespawnDelay (vehicle, 60000) -- 60 mil = 60 segundos. Em vez de reinventarmos a roda, é melhor deixar tudo automático mesmo carros = { -- Tabela com vários veículos em suas posições. createVehicle (411, 2475, -1657, 13.2, 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.2, 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. } for i, vehicle in ipairs (carros) do -- Para cada veículo da table 'carros', faça: toggleVehicleRespawn (vehicle, true) -- Permite que eles respawnem automaticamente. setVehicleIdleRespawnDelay (vehicle, 60000) -- Respawnar após 60 segundos de inatividade do veículo. (Ex: Sem ninguém no veículo, ou alguém empurra o veículo pra fora de sua posição sem entrar nele) setVehicleRespawnDelay (vehicle, 5000) -- Respawnar após 5 segundos que explodiu. (Ex: Veículo explode sem ninguém sair nem entrar nele.) end Edited August 5, 2018 by Lord Henry 1 Link to comment
#Gubiani Posted August 5, 2018 Author Share Posted August 5, 2018 Beleza, tudo certo agora, Obrigado! @Lord Henry e @MaligNos Ajudaram muito! 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