Jump to content

androksi

Other Languages Moderators
  • Posts

    542
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by androksi

  1. Eu te sugiro a usar este recurso: pattach - ele é bem simples de trabalhar. Caso você não conheça, a comunidade chama de Bone Attach. Um recurso no qual você pode anexar objetos no corpo do jogador ou até mesmo em um pedestre. A propósito, ele já tem pré-definido a função de anexar nas costas. Leia a documentação daquele link acima.
  2. Olá, @VagaRico! O erro ocorre pois provavelmente aquelas ACLs não existem. Você precisa criá-las.
  3. Olá, @SciptNovato! Você pode usar esta função útil: getPedWeapons. Para obter o nome da arma, use esta: getWeaponNameFromID.
  4. Olá, @JoaoZanetti! Ainda não é possível. A função encontra-se com alguns bugs, acredito que por algumas limitações do próprio GTA:SA.
  5. Olá, @Von! Você pode juntar todas as funções dentro de uma só. Por exemplo, se esse spawn que você encontrou na Internet estiver dando somente uma skin, então adicione também junto as funções de dar vida (setElementHealth) e colete (setPedArmor). Se estiver confortável, envie o trecho do código onde isso ocorre para que possamos te ajudar mais facilmente.
  6. Olá, @MTS_LoneWolf! Sim, isso é possível utilizando de timers. (setTimer) A lógica por trás desse exemplo que você deu, seria usar um timer com duas (2) execuções a cada 10 segundos, ou seja, ela iria demorar 20 segundos para executar todo o processo dado como exemplo e, caso estivesse executando pela segunda vez, a função toggleAllControls também iria ser chamada. Exemplo: addCommandHandler("assaltar", function(player) toggleAllControls(player, false) givePlayerMoney(player, 5000) setTimer(function(player) if isElement(player) then -- IMPORTANTE! Aqui checará se o jogador existe, pois ele pode sair do servidor, o timer continuaria executando e geraria um erro no '/debugscript 3'. local _, rTimes = getTimerDetails(sourceTimer) -- Será armazenado na variável 'rTimes' quantas vezes restam para terminar. givePlayerMoney(player, 5000) if rTimes == 0 then -- Caso esteja restando 0, ou seja, nada, então nós voltamos à situação normal do jogador, com todos os controles funcionando. toggleAllControls(player, true) end end end, 10000, 2, player) end)
  7. Olá, @IiFEROZ! Seja bem-vindo(a) ao fórum! ? Use a função setPlayerWantedLevel.
  8. Ah, sim!!! Desculpe-me o engano. Bom, do jeito mais simples possível, você pode criar uma variável de estado e alterná-la para verdadeiro ou falso. Dependendo do estado atual, você executa um trecho de código. Mas de qualquer forma, você precisa usar uma tabela para armazenar quem está vendo o anúncio. Exemplo: local announce = { active = false, players = {} } addCommandHandler("anuncio", function(player, command, ...) local args = { ... } if #args > 0 then announce.active = not announce.active -- Alterna o estado do anúncio para true/false. if announce.active then -- Caso seja true. local message = table.concat(args, " ") local allPlayers = getElementsByType("player") -- Obtém a tabela que contém todos os jogadores do servidor. for i = 1, #allPlayers do -- Usamos um laço de repetição BEM MAIS RÁPIDO para pegar cada jogador. local p = allPlayers[i] -- Jogador. local display = textCreateDisplay() local text = textCreateTextItem(message, 0.5, 0.5, 1.5, 0, 0, 0, 255, 2, "center", "center") textDisplayAddText(display, text) textDisplayAddObserver(display, p) announce.players[p] = display -- Armazena o jogador na indíce da tabela, como o display sendo o seu valor. end else -- Se for false. for p, display in pairs(announce.players) do -- Faz um laço de repetição em todos os displays, que foram salvos em cada jogador. -- p = nossa índice (jogador), display (o display) if isElement(p) then textDisplayRemoveObserver(display, p) -- Remove o display do jogador. textDestroyDisplay(display) -- Destrói o display. end end announce.players = {} -- Limpa a tabela. end end end)
  9. Olá, @SciptNovato! Use a função textDestroyDisplay em conjunto à função setTimer. Lembrando que essa não é a melhor forma de fazer, estou apenas respondendo sua dúvida.
  10. Olá, @Leinad Raiz! Acredito que você esteja falando desta função: engineSetModelLODDistance. Exemplo de uso: engineSetModelLODDistance(1337, 100000) -- (id do modelo, distância)
  11. Vale ressaltar uma coisa: também coloque player no terceiro parâmetro, pois é totalmente desnecessário deixar todos os elementos juntos ao evento.
  12. Olá, @Rafa3101. Seja bem-vindo(a) ao fórum! Poderia explicar melhor o que houve? Pois pode ter acontecido algum problema na hospedagem. Tem alguma print de como está a aba resources?
  13. Olá, @SciptNovato! Poderia ser mais específico quanto a sua dúvida. Não ficou muito clara.
  14. Como não teve a ver com o Bitdefender, a pessoa responsável por analisar acabou deixando de lado. Então, esse problema deve ser levado como outro qualquer. Eu analisei aquele link junto com o DNL291, a gente não encontrou nada suspeito que possa estar causando esse erro. Poderia me dizer o que você instalou ou o que fez no PC nos últimos dias? Adendo: eu recomendaria você a instalar o Windows 10 (oficial do site da Microsoft) e também, um GTA:SA original. E por favor, evite usar programas que licenciam o Windows... isso pode ser ruim para o seu computador e talvez afete os jogos.
  15. @SciptNovato, indentação é uma das coisas mais importantes na programação. Geralmente, é usado 4 espaços para referenciar um novo escopo, ou seja, para cada condição, laço de repetição, função e afins, você precisa indentar, para que as coisas fiquem corretas e fáceis de serem lidas. Exemplo de código indentado: function sumOrMul(a, b, operator) if operator == "+" then return a + b elseif operator == "*" then return a * b end end Explicação do que tá acontecendo, usando imagens: Você pode perceber que, ao começar um novo escopo, eu dei 4 espaços para iniciar novamente o código. A função começa, a fecho com um end, então dou 4 espaços para começar o código. function sumOrMul(a, b, operator) end Agora, com os 4 espaços definidos, começo o código. Neste caso, é uma condição. Da mesma forma, a faço e, então, fecho um com end. function sumOrMul(a, b, operator) if operator == "+" then end end Assim acontece com o resto. A propósito, dependendo de qual editor de texto você usa, você pode configurar para o TAB ser a indentação. Mas atente-se a uma coisa: é necessário que sejam usados espaços, ao invés de tabulação. Qualquer dúvida, só mandar o papo aí!
  16. Olá, @Leinad Raiz! Seja bem-vindo(a) ao fórum. ? O erro ocorre pois você especificou que a mensagem iria ser mostrada para todos os jogadores. Para corrigir isso, altere aquele getRootElement() para thePlayer thePlayer - pois você o definiu lá na função, como sendo a variável que armazena o jogador que executou o comando.
  17. Sim, sem problemas. Caso você tenha Discord, considere entrar em nosso servidor oficial: https://discord.com/invite/mtasa - lá seria mais fácil para nós da staff te dizer as instruções. Se entrar, pode me marcar lá no canal #pt-general.
  18. Entendi. Você poderia, por favor, rodar este aplicativo (MTADiag.exe) no seu computador e nos enviar o link gerado? Basta executá-lo, aguardar por todo o processo e no final, irá gerar um link. Ele já será copiado automaticamente, só colar na sua resposta.
  19. Olá, @Caua_Ribeiro! Esse problema pode estar ocorrendo por conta do Bitdefender (antivírus). Você poderia confirmar que de fato está o usando? Pois nós da staff temos a solução para resolver, e também precisamos de alguns testes, uma vez que esse mesmo problema está ocorrendo com várias pessoas. Agradeceria se você pudesse realizar alguns testes, caso confirme que esteja usando o Bitdefender.
  20. Olá! Você está armazenando o jogador-alvo na variável targetPlayer, então use-a. setElementFrozen(targetPlayer, true) local playerVehicle = getPedOccupiedVehicle(targetPlayer)
  21. Olá! Para fazer isso, primeiro você precisa salvar a tabela original em cache. Pois, caso não haja valores com o filtro digitado pelo usuário, ela volta para a estaca zero (lista completa). Seria interessante nos dizer como você está tentando fazer, fica bem mais fácil pra gente te ajudar. Todavia, supondo que seja uma lista em GUI, junto com um campo pra digitar, dá pra fazer desta forma:
  22. Olá! Eu fiz um código e não testei, mas acredito que deve funcionar: Recomendo que você salve os dados em um banco de dados, pois dessa forma atual que fiz, assim que o resource é reiniciado, eles irão sumir. O comando pra testar é: /marker <tipo> <id referente ao tipo>. Por exemplo: /marker carro 411, /marker skin 1, /marker arma 30
  23. Olá! Seja bem-vindo(a) ao fórum. ? Aqui há outro tópico respondendo sua pergunta:
  24. @Keven Campos, foi uma boa tentativa, mas a função getVehicleHandling retorna uma tabela com índice não-numérico. Por isso o ipairs não vai funcionar corretamente. O que você pode fazer, é transformar essa tabela em um JSON. Além disso, te aconselho a criar uma whitelist das propriedades que você deseja salvar, uma vez que existem muitas delas. local handling = toJSON(getVehicleHandling(theVehicle)) Acredito que com o código acima, ele já salvaria corretamente no banco de dados, não consigo realizar testes agora. - bom, e claro, pra você carregar isso, seria usando a função fromJSON. Para transformar novamente em uma tabela que o MTA reconheça (em Lua).
×
×
  • Create New...