-
Posts
3,971 -
Joined
-
Last visited
-
Days Won
179
Everything posted by Lord Henry
-
No seu painel de dar TAGs, adicione essa função: function getUsersInACLGroup (group) -- Group é a ACL Group que está sendo verificada. (não é o nome) local users = {} -- Tabela vazia que será preenchida com todas as contas que estão nessa ACL Group. if (group) then for _, object in ipairs(aclGroupListObjects(group) or {}) do -- Para cada objeto da aclGroup, faça: local objType = gettok (object, 1, string.byte('.')) -- Obtém tudo que estiver antes do ponto, que pode ser "user" ou "resource". if (objType == "user") then -- Se for um user, então: local _name = gettok (object, 2, string.byte('.')) -- Obtém tudo que estiver depois do ponto. No caso, o nome da conta de cada usuário. table.insert (users, _name) -- Adiciona o nome da conta na tabela users. end end return users -- Retorna uma tabela com todos os nomes das contas registradas nessa ACL Group. end end E depois quando for adicionar TAG a um novo usuário, você pode verificar quantos usuários já existem naquela ACL Group, se tiver por exemplo 10 usuários ou mais, então evita de dar a TAG. if #getUsersInACLGroup(aclGetGroup("Moderator")) < 10 then -- Se tem menos do que 10 users na ACL Group Moderator, então: -- Adiciona a nova conta normalmente na ACL Group. else -- Manda um outputChatBox dizendo que a ACL Group já atingiu o limite de usuários. end
-
Primeiro é melhor você separar os tipos de dados em sub-tabelas e usar o comando do teleporte como índice.
-
Mas é pra isso que estamos aqui. A gente te ajuda a desenvolver seus próprios scripts e a corrigir bugs, mas você precisa ter a iniciativa de tentar e começar por conta própria.
-
@yToPzz ele está reclamando que a variável name é nil (não existe). O erro está lá no triggerServerEvent do script client onde a variável name foi passada.
-
Como ficar imortal após tp por 3 sec
Lord Henry replied to realasuramc's topic in Programação em Lua
YouTube Este fórum Wiki do MTA Discord oficial do MTA -
Erro sistema de sem colisão entre veiculos.
Lord Henry replied to Nawan ZN's topic in Programação em Lua
Ao iniciar o resource, dará erro sempre que algum jogador não estiver em um veículo, pois a variável local v será false. Você pode evitar esse erro adicionando essa linha antes do for: if not v then return end Mas saiba que qualquer veículo criado depois que essa função já foi chamada, terá colisão normal. Essa função só vai deixar fantasma os veículos que já existiam antes. Além disso, você colocou root ali no eventHandler, isso significa que ele vai chamar essa função sempre que qualquer resource for iniciado. Se você quer que funcione somente ao reiniciar este resource, troque o root por resourceRoot que é a forma resumida de getResourceRootElement(getThisResource()). -
@ABR na próxima vez utilize o botão <> do fórum para colocar seu script. Não cole ele direto no texto.
-
Como ficar imortal após tp por 3 sec
Lord Henry replied to realasuramc's topic in Programação em Lua
Você pode melhorar seu código utilizando tabelas e loop em vez de ficar adicionando cada comando em uma função separada. Para deixar o jogador imortal, basta colocar uma elementData nele e verificar se ele tem essa data no client. Se tiver, cancela qualquer dano que ele recebe. server.lua local teleportes = { -- [comando] = {x, y, z, nome}, ["cj"] = {2466.6, -1669.82, 13.475, "o CJ"}, ["shp"] = {1129.24, -1468.47, 15.74, "o Shopping"}, ["conce"] = {552.06, -1260.37, 17.24, "a Concessionária"}, ["aldeia"] = {2159.42, -979.93, 17.24, "a Favela da Aldeia"}, ["ljarmas"] = {2162.64, -1732.49, 17.28, "a Loja de Armas"}, ["pvp"] = {437.1, -6549.2, 14.3, "a Área de PvP"}, } local imortais = {} function telePlayer (thePlayer, cmd) -- Função que é ativada pelo addCommandHandler. if teleportes[cmd] then -- Se o comando utilizado existe na tabela, então: if imortais[thePlayer] then -- Se o jogador ainda está imortal, então nada acontece. outputChatBox("Aguarde 3 segundos para teleportar novamente.", thePlayer, 255, 60, 0) return else imortais[thePlayer] = true -- Adiciona o jogador na tabela de imortais. setElementAlpha(thePlayer, 150) -- Deixa o player translúcido (fantasma) pra mostrar que está imortal. setElementData(thePlayer, "imortal", true) -- Coloca essa elementData nele pra deixá-lo imortal. setTimer(function() -- Depois de 3 segundos, tira o jogador da tabela de imortais, deixa ele opaco novamente e remove a data de imortal dele. imortais[thePlayer] = nil setElementAlpha(thePlayer, 255) removeElementData(thePlayer, "imortal") end, 3000, 1) end local x, y, z, nome = unpack(teleportes[cmd]) -- Pega as infos desse item da tabela e separa em variáveis. setElementPosition(thePlayer, x, y, z, true) -- Teleporta o player. -- setElementRotation(thePlayer, 0, 0, 0) outputChatBox("[Teleporte] O jogador #ffffff"..getPlayerName(thePlayer).." #FF3C00foi para "..nome..". [/"..cmd.."]", root, 255, 60, 0, true) -- Manda essa mensagem pra todo mundo. end end for cmd,v in pairs (teleportes) do -- Faz um loop pela tabela, adicionando todos os addCommandHandlers. addCommandHandler(cmd, telePlayer) end client.lua addEventHandler ("onClientPlayerDamage", root, function () if getElementData(source, "imortal") then -- Se o jogador que tomou dano tem essa elementData, então cancela o dano e nada acontece. cancelEvent() end end) addEventHandler ("onClientPlayerStealthKill", localPlayer, function (targetPlayer) if getElementData (targetPlayer, "imortal") then -- Se o jogador que está sendo alvo da facada fatal tiver essa elementData, impede que ele tome a facada e nada acontece. cancelEvent() end end) -
OnVehicleRespawn
- 2 replies
-
- 1
-
- concessionária
- mala
-
(and 4 more)
Tagged with:
-
Substitua essa linha: if isPedInVehicle(localPlayer) then Por essa: if getPedOccupiedVehicle(localPlayer) then
- 1 reply
-
- 1
-
O terceiro parâmetro representa o jogador que está tendo o veículo roubado. Se ele existe, então cancela a função. Se não existe, então entra no veículo normalmente. addEventHandler ("onVehicleStartEnter", root, function (thePlayer, seat, jacked) if isElement(jacked) then outputChatBox("Você não pode roubar o veículo de alguém.", thePlayer, 255, 150, 0) cancelEvent() end end) Obs: Ele só vai cancelar se for roubar o motorista pra dirigir o veículo dele. Se o veículo tiver passageiro mas não tiver motorista, vai entrar normalmente. Se o jogador for entrar como passageiro, também vai entrar normalmente mesmo se já tiver motorista.
-
A mira do jogador depende da câmera. Se a câmera não está no jogador, irá bugar. Se quer mirar, volte a câmera pro jogador.
-
Portas dos veículos não possuem colisão própria. A colisão pro player não atravessar a porta é a própria colisão do veículo. Se você abrir o DFF de um veículo original, vai encontrar várias esferas de colisão dentro dele, são essas esferas que evitam que o jogador atravesse o veículo ao andar em direção a ele.
-
O script precisa estar declarado como client-side no meta.xml. Além disso, certifique-se de que o volume de áudio do ambiente está configurado nas opções do menu ESC.
-
attempt to compare number with boolean
Lord Henry replied to Joao_Preis's topic in Programação em Lua
O que me chamou mais atenção, além do erro, seria você ter usado isso: if (not sql == false) then Quando poderia simplesmente ter usado isso: if (sql) then -
A primeira forma é mais direta, você não declara o nome da função. É mais fácil, porém você não vai conseguir dar unbind depois, pois não terá o nome da função para desbindar. Ideal para quando você quer dar binds permanentes, que não serão desbindadas depois. Essa forma também não permite que você chame por outras formas, por exemplo via comando. A segunda forma resolve todas as limitações da primeira, porém você precisa declarar um nome para a função. Normalmente essa é a forma mais usada. A terceira forma com função local é usada somente por usuários avançados em situações específicas. Funções locais não funcionam fora de seu escopo, porém são um pouco mais leves do que as funções globais, pois elas são apagadas da memória depois que o programa sai do escopo em que elas foram criadas. Também são mais difíceis de hackear com scripts de terceiros que reescrevem sua função. Eu particularmente uso mais a primeira e segunda forma.
- 1 reply
-
- 1
-
Olá. Os markers do tipo cylinder possuem colisão bugada. Você precisa deixá-los um pouco voando para que a colisão deles funcione. Se realmente for um problema para você, sugiro que crie markers do tipo "corona" invisíveis e use-os no script. Então os markers do tipo cylinder seriam apenas visuais.
-
Aparentemente, a variável Model não pode ser convertida para número. Ou então, não existe esse índice na tabela Config["customCarNames"] Coloque isso antes da sua linha para ver oq está na variável Model: iprint(Model)
-
Sim, é possível com interpolateBetween.
- 1 reply
-
- 1
-
A questão que mais pesa é a execução diversas vezes em pouco tempo. Trigger em loop também é pesado. Se a elementData não precisa ser sincronizada com todos os jogadores, você pode setá-la no modo de inscrição. Assim você consegue definir jogadores específicos para sincronizar essa elementData só com ele. Fica mais leve do que sincronizar com todo mundo.
-
Hospedagem de MTA no Brasil com 15ms - TimberHost
Lord Henry replied to Carlos Dorelli's topic in Serviços de hospedagem
Interessante o apoio ao MTA. Parabéns. -
Fazer trigger em loop é inviável. Se existe essa necessidade de troca constante de dados entre client-servidor, você pode usar elementDatas.
-
mta Usar setTimer ao invez do onClientRender
Lord Henry replied to eqFoxim's topic in Programação em Lua
Depende do que se deseja fazer e qual o tempo de repetição do timer. -