-
Posts
4,005 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
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. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
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. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
E o exemplo que eu dei, só funciona no veículo do seu script, não funciona com os outros veículos pelo mapa. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
É 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. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
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. 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. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
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. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
-
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
Sim. -
Respawn de veículo por tempo (precisando de ajuda)
Lord Henry replied to #Gubiani's topic in Programação em Lua
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. -
Eu faria assim: function deladm (thePlayer, cmd) local accountName = getAccountName (getPlayerAccount (thePlayer)) if cmd == "sairadmin" then if isObjectInACLGroup ("user."..accountName, aclGetGroup ("Admin")) then aclGroupRemoveObject (aclGetGroup("Admin"), "user."..accountName) outputChatBox ("Sua conta foi removida do grupo 'Admin'.", thePlayer, 255, 255, 0) else outputChatBox ("Sua conta já não está no grupo 'Admin'.", thePlayer, 255, 0, 0) end elseif cmd == "sairbp" then if isObjectInACLGroup ("user."..accountName, aclGetGroup ("BOPE")) then aclGroupRemoveObject (aclGetGroup("BOPE"), "user."..accountName) outputChatBox ("Sua conta foi removida do grupo 'BOPE'.", thePlayer, 255, 255, 0) else outputChatBox ("Sua conta já não está no grupo 'BOPE'.", thePlayer, 255, 0, 0) end -- elseif e assim por diante... end end addCommandHandler ("sairadmin", deladm) addCommandHandler ("sairbp", deladm) -- addCommandHandler ("sair...", deladm) O resource precisará ter permissão de Admin. Para isso, adicione o objeto resource.nomeDesteResource na ACL Group Admin.
-
Saberia me explicar pra que serve a segunda e a quarta linha do código?
-
Isso acontece pois você está usando a mesma posição para todos os markers de saída, ao colidir em um, está ativando nos demais também. Você precisa usar o parâmetro de matchingDimension para que só funcione se o jogador estiver na mesma dimensão que o marker. Ta ae, deixei comentários pra ficar melhor de entender e algumas observações. -- Prefeitura de Los Santos mEnCenLS = createMarker (1481.12, -1771.81, 17.8, "cylinder", 1.5, 255, 0, 0) -- Evite posições muito decimadas. Prefira no máximo 2 casas decimais. mSaiCenLS = createMarker (390.03, 173.8, 1007.38, "cylinder", 1.5, 255, 0, 0) -- Saiba que esse tipo de marker possui colisão igual ao de tipo checkpoint. mEmpLS = createMarker (362.48, 173.74, 1007.38, "cylinder", 1.25, 255, 255, 0) -- Marker para o painel de empregos setElementInterior (mEmpLS, 3) setElementDimension (mEmpLS, 1) setElementInterior (mSaiCenLS, 3) setElementDimension (mSaiCenLS, 1) createBlipAttachedTo (mEnCenLS, 40, 2, 255, 0, 0, 255, 0, 600) -- Distância não deve ser grande demais para evitar excesso de blips no radar. -- Prefeitura de San Fierro mEnCenSF = createMarker (-2765.90918, 375.61075, 5.33468, "cylinder", 1.5, 255, 0, 0) mSaiCenSF = createMarker (390.03101, 173.79352, 1007.38281, "cylinder", 1.5, 255, 0, 0) mEmpSF = createMarker (362.47623, 173.74311, 1007.38281, "cylinder", 1.25, 255, 255, 0) -- Marker para o painel de empregos setElementInterior (mEmpSF, 3) setElementDimension (mEmpSF, 2) setElementInterior (mSaiCenSF, 3) setElementDimension (mSaiCenSF, 2) createBlipAttachedTo (mEnCenSF, 40, 2, 255, 0, 0, 255, 0, 600) -- Prefeitura de Las Venturas mEnCenLV = createMarker (2375.6, 2307.55, 7.14, "cylinder", 1.5, 255, 0, 0) mSaiCenLV = createMarker (390, 173.8, 1007.38, "cylinder", 1.5, 255, 0, 0) mEmpLV = createMarker (362.48, 173.74, 1007.38, "cylinder", 1.25, 255, 255, 0) -- Marker para o painel de empregos setElementInterior (mEmpLV, 3) setElementDimension (mEmpLV, 3) setElementInterior (mSaiCenLV, 3) setElementDimension (mSaiCenLV, 3) createBlipAttachedTo (mEnCenLV, 40, 2, 255, 0, 0, 255, 0, 2000) function fadeMe (thePlayer) fadeCamera (thePlayer, false) setTimer (fadeCamera, 2000, 1, thePlayer, true) -- Optei por demorar mais pra voltar a câmera para não pegar o interior sendo carregado. end function telesPref (hitElement, matchingDimension) -- Função de todos os markers. Pois vc colocou root no addEventHandler. if source == mEnCenLS then -- Entrada da Prefeitura de LS. if matchingDimension then -- Se o elemento que colidiu está na mesma dimensão do marker, então: if hitElement and getElementType (hitElement) == "player" then -- Se o elemento que colidiu for um player, então: if not getPedOccupiedVehicle (hitElement) then -- Se o jogador que colidiu não estiver em um veículo, então: fadeMe (hitElement) -- Escurece a câmera do player e volta ao normal depois de 2 segundos. setTimer (setElementInterior, 1000, 1, hitElement, 3) -- Depois de escurecer, seta o jogador no interior 3. setTimer (setElementDimension, 1000, 1, hitElement, 1) -- Depois de escurecer, seta o jogador na dimensão 1. setTimer (setElementPosition, 1000, 1, hitElement, 384.8, 173.8, 1008.38, true) -- Depois de escurecer, seta o jogador na posição de dentro. setTimer (setPedRotation, 1000, 1, hitElement, 90) -- Depois de escurecer, aponta o jogador para oeste. -- 1 segundo depois, volta a câmera ao normal. end end end elseif source == mSaiCenLS then -- Saída da Prefeitura de LS. if matchingDimension then if hitElement and getElementType (hitElement) == "player" then if not getPedOccupiedVehicle (hitElement) then fadeMe (hitElement) setTimer (setElementInterior, 1000, 1, hitElement, 0) setTimer (setElementDimension, 1000, 1, hitElement, 0) setTimer (setElementPosition, 1000, 1, hitElement, 1480.92, -1769.21, 18.79, true) setTimer (setPedRotation, 1000, 1, hitElement, 0) -- Aponta o jogador para o norte. end end end elseif source == mEnCenSF then -- Entrada da Prefeitura de SF. if matchingDimension then if hitElement and getElementType (hitElement) == "player" then if not getPedOccupiedVehicle (hitElement) then fadeMe (hitElement) setTimer (setElementInterior, 1000, 1, hitElement, 3) setTimer (setElementDimension, 1000, 1, hitElement, 2) setTimer (setElementPosition, 1000, 1, hitElement, 384.8, 173.8, 1008.38, true) setTimer (setPedRotation, 1000, 1, hitElement, 90) end end end elseif source == mSaiCenSF then -- Saída da Prefeitura de SF. if matchingDimension then if hitElement and getElementType (hitElement) == "player" then if not getPedOccupiedVehicle (hitElement) then fadeMe (hitElement) setTimer (setElementInterior, 1000, 1, hitElement, 0) setTimer (setElementDimension, 1000, 1, hitElement, 0) setTimer (setElementPosition, 1000, 1, hitElement, -2758.37, 375.68, 4.33, true) setTimer (setPedRotation, 1000, 1, hitElement, 270) end end end elseif source == mEnCenLV then -- Entrada da Prefeitura de LV. if matchingDimension then if hitElement and getElementType (hitElement) == "player" then if not getPedOccupiedVehicle (hitElement) then fadeMe (hitElement) setTimer (setElementInterior, 1000, 1, hitElement, 3) setTimer (setElementDimension, 1000, 1, hitElement, 3) setTimer (setElementPosition, 1000, 1, hitElement, 384.8, 173.8, 1008.38, true) setTimer (setPedRotation, 1000, 1, hitElement, 90) end end end elseif source == mSaiCenLV then -- Saída da Prefeitura de LV. if matchingDimension then if hitElement and getElementType (hitElement) == "player" then if not getPedOccupiedVehicle (hitElement) then fadeMe (hitElement) setTimer (setElementInterior, 1000, 1, hitElement, 0) setTimer (setElementDimension, 1000, 1, hitElement, 0) setTimer (setElementPosition, 1000, 1, hitElement, 2375.74, 2311.94, 8.14, true) setTimer (setPedRotation, 1000, 1, hitElement, 0) end end end end end addEventHandler ("onMarkerHit", root, telesPref) -- Executa essa função ao colidir com qualquer marker.
-
Na próxima vez, divulgue na área correta para divulgações de servidores. https://forum.multitheftauto.com/forum/175-servidores-para-jogar/
-
MTA se fecha sozinho
Lord Henry replied to MatheusRomano's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Já tentou reinstalar o GTA e o MTA? Verificou se há algum outro programa entrando em conflito? Seu GTA possui algum mod? Se tiver, limpe-o e deixe sem mods. -
TOPLIST
Lord Henry replied to XavierMapper's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Só muda o nome. Mas se colocar um nome ilegal, pode sumir pra sempre. -
EXECUTAR O MOD APENAS UMA VEZ POR CONTA
Lord Henry replied to FeniXMTA's topic in Programação em Lua
Não entendi o seu objetivo em fazer isso. Mas existe um evento que é chamado sempre que um jogador faz login. onPlayerLogin -
Você pode ver no menu ESC, na lista de servidores.
-
Não temos. Mas você pode procurar aqui: https://community.multitheftauto.com/index.php?p=resources
-
[ERRO]Resources
Lord Henry replied to Myt's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Atualize sua versão do MTA. -
No seu código existe um timer sem nome com repetição infinita, vc deveria ter feito com apenas 1 repetição.
-
Concordo. E está correta a sua ideia em setar as ACLs do jogador como element data, assim ela pode ser lida facilmente no client sem ficar usando triggers. Fazer a verificação direto no server seria inviável e pesado no processamento, visto que cada vez que cada jogador tomar dano, o client precisaria de um triggerServerEvent para verificar isso no server, o que acaba consumindo muito processamento.
-
Armas na base
Lord Henry replied to Marcelo_F94's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Vá no editor de mapas do MTA e crie um pickup (botão com ícone de coração). Coloque o pickup no lugar que deseja. Clique 2x no pickup para acessar as propriedades dele. Mude o tipo do pickup para a arma que deseja. Mude a quantidade de munição que o pickup dará. (recomendo que não ultrapasse 9999) Mude o tempo de respawn do pickup. (mínimo 3000) [3 segundos] Salve o mapa e pronto. -
Mantenha o código indentado para ficar legível. E o que esse código deveria fazer?
-
Isso não existe. O que era pra acontecer aqui? tempoMission = tempoMission 0:01
-
Como Faço para colocar os mapa que crio aqui no forum ?
Lord Henry replied to ARQBRUNOVINICIUS's topic in Mapas para MTA:SA
Upe no site da comunidade oficial: https://community.multitheftauto.com/index.php?p=resources Poste o link na sessão de mapas deste mesmo fórum, seguindo as regras de postagem: Não pode ser resource que viole as regras da comunidade. (regras aqui) No seu post, você deve dizer o nome do seu mapa e uma descrição sobre ele, o que ele faz, pra que serve, etc. Você deve estar atento para comentários, sugestões e críticas que podem surgir nos comentários do seu post. Espero ter ajudado.