MaligNos

Members
  • Content Count

    389
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by MaligNos

  1. Não tem como definir as propriedades para jogadores específicos, mas dá para separar com base nas habilidades... por exemplo, todos os jogadores da acl Admin você define com a habilidade “pro” (definindo o norecoil) e todos os demais jogadores em outra categoria: “std” ou “poor” (sem definir o norecoil). Veja: setPedStat / onPlayerLogin / isObjectInACLGroup
  2. Na realidade tem que baixar de novo sim, pois é salvado na RAM... só não sei se é apagado quando desconecta do servidor ou na falta de energia.
  3. Se tú não liga para desempenho, pode usar o onPlayerCommand addEventHandler("onPlayerCommand",root, function(command) for i,gate in pairs(getElementsByType("object")) do if getElementData(gate,"BaseGate") then local baseName = getElementData(gate,"baseName") if isPlayerAllowed(source,gate) then if getElementData(gate,"pass") == command then --- funções que abre o portão end end end end end )
  4. Lá na última linha tá destroyElement, troque por DestroyMarker (confundi quando reescrevi o trecho)
  5. Tente usar esse: function DestroyMarker(source) if isElementWithinMarker(source, destroyM) then local veiculo = getPedOccupiedVehicle (source) if (veiculo) then destroyElement(veiculo) end end end addCommandHandler("destruir", destroyElement) Se não der, apague o arquivo, crie um novo e tente reescrever de novo, pois o código em si está ok.
  6. Se não me engano, existe animações em que é possível andar normalmente enquanto executa, talvez esse seja o caso... mas ai se a animação que você quer, não seja a que é possível andar, pode tentar coloca-la no lugar de alguma que pode: engineLoadIFP
  7. Já ouvi comentários de um tal bug quando copia e cola o código, tente ao invés de copiar, reescrever o código como está aqui.
  8. Na realidade o ponto chave de aprender é tentar! function DestroyMarker(source) if isElementWithinMarker(source, destroyM) then local veiculo = getPedOccupiedVehicle (source) if (veiculo) then destroyElement(veiculo) end end end addCommandHandler("destruir", DestroyMarker) Não entendi o que tú quer fazer com aquela tabela veh, então deixei de acordo com o que foi descrito no tópico.
  9. Infelizmente sim, embora na wiki não informe, existe essa limitação: LINK Na arma também não tem como, o que fazem é uma “gambiarra” deixando invisível o modelo real da arma e anexando ao ped objetos quaisquer que tiveram seu modelo substituído por alguma arma, ou seja, na verdade a arma personalizada pode ser uma pizza (objeto) que foi grudado na sua mão. Com armas até que é viável, já com carros usando tal técnica seria um negócio bem feioso, pois perderia interação... a lataria não danificaria, o pneu não rodaria, a porta não abriria e etc.
  10. O título pelo mesmo fica claro que é ao menos dois com a mesma .dff De qualquer modo, não tem como um player visualizar diferentes modelos/texturas num mesmo veículo. Em relação a sirene em outras motos, pode-se criar algum script de sirene personalizada, visto que addVehicleSirens não funciona com motos.
  11. txd = engineLoadTXD ( "pmerj.txd" ) engineImportTXD ( txd, 522 ) txd = engineLoadTXD ( "pmesp.txd" ) engineImportTXD ( txd, 521 ) txd = engineLoadTXD ( "detran.txd" ) engineImportTXD ( txd, 461 ) dff = engineLoadDFF ( "model.dff" ) engineReplaceModel ( dff, 522 ) engineReplaceModel ( dff, 521 ) engineReplaceModel ( dff, 461 ) Desse modo, eu teria três motos com o modelo igual, porém com a textura diferente (as texturas devem ser compatíveis com o modelo).
  12. Uma boa também é usar resourceRoot no lugar de root, assim aciona a função apenas para elementos pertencentes ao mesmo resource, evitando com isso chamadas desnecessárias por elementos de outros resources.
  13. API: https://vp9lluyksc.execute-api.sa-east-1.amazonaws.com/dev/mtasa?ip=127.0.0.1&port=22003 Pode usar por enquanto, mas o ideal é você buscar algo próprio seguindo o caminho informado pelo DNL291, pois depender de terceiros (ainda mais em serviços free) você não tem garantia de segurança, estabilidade, etc.
  14. Daquele jeito nunca irá mostrar a 1ª mensagem e também não foi definido condição de parada do timer (vai acessar posições indevidas do array). tMensagems = 1 -- TEMPO cont = 0 MensagensInfo = { "Falta 10 Minutos para acabar o Roud.", "Falta 9 Minutos para acabar o Roud.", "Falta 8 Minutos para acabar o Roud.", "Falta 7 Minutos para acabar o Roud.", "Falta 6 Minutos para acabar o Roud.", "Falta 5 Minutos para acabar o Roud.", "Falta 4 Minutos para acabar o Roud.", "Falta 3 Minutos para acabar o Roud.", "Falta 2 Minutos para acabar o Roud.", "Falta 1 Minutos para acabar o Roud.", "Roud Finalizado. X1 de Costas Será iniciado!", } setTimer(function ( ) cont = cont +1 outputChatBox ('#FF0000[INFO]: #FFFFFF'..MensagensInfo[cont] ,getRootElement(),255,255,255,true) end, tMensagems * 60000 , #MensagensInfo)
  15. Infelizmente para esses casos deve-se recorrer a alguma aplicação externa, seja gratuita ou paga, que dai basta efetuar uma simples chamada com fetchRemote que a aplicação cuida do resto. Na wiki do fetchRemote tem até um exemplo de envio de e-mail. Alguns sites que prestam esses serviços: E-mail: mailgun | sendgrid | mailtrap SMS: twilio, e vários outros por ai... O envio de e-mail é mais viável, podendo inclusive criar seu próprio servidor SMTP responsável por enviar os e-mails, e dai não precisar criar essa dependência com aplicações externas. Caso não queira muito trabalho na configuração dos servidores SMTP+HTTP, pode alugar alguma hospedagem web, que no caso já terá esses serviços, além de possibilitar ações além do envio de e-mail, usando talvez PHP-SDK / Node.js-SDK Já com SMS é mais complicado e custoso, visto as taxas das operadoras e etc… não optaria tal uso nesse caso.
  16. O ponto forte do uso de SMS/E-mail seria notificar o autor sobre as utilizações (ativações) trazendo por exemplo, qual IP ativou o resource, e com isso ser possível detectar casos de vazamento/roubo. Mas a segurança do resource em si (bloqueando utilizações indevidas), já seria o suficiente através do IP, pois o uso de SMS/E-mail para requisitar autorização de ativação se enquadraria mais como luxo, visto que o IP já é um dado que temos e é capaz de efetuar a autenticação através dele, sendo ainda que a utilização desses passos adicionais (gerar um código → enviar e-mail com o código → efetuar ação no e-mail → liberar ativação do resource) para autenticação, podem inclusive tornar o sistema mais vulnerável. Então acho que o ideal seria validar através do IP e caso o IP seja diferente do esperado, comunicasse o autor do resource de alguma forma.
  17. E com guiCreateStaticImage ? Particularmente acho esse processo de conversão custoso, a quantidade de dados transferidos seria algo considerável, e a mudança de formato não garante a segurança do dado, você basicamente está mudando o cabeçalho do arquivo e evitando a leitura por algumas aplicações, mas o corpo, o conteúdo em si, é o mesmo. Se não me engano, o fetchRemote tem um limite de dados para transferência, então dependendo do arquivo essa técnica não servirá. Acho que algo localmente, usando talvez base64 juntamente com alguma criptografia seria mais eficaz e seguro.
  18. Pelo que eu entendi, o site converte o formato do arquivo. Não sei como o MTA consegue carregar corretamente tal arquivo ao realizar essa “fake” mudança de formato... ou você fica efetuando o processo inverso ?
  19. O evento onMarketHit já está anexado ao marker (arrumar1), o que torna a verificação isElementWithinMarker desnecessária. Eficiencia, a vida de veículos vai de 0-1000 e não 0-100 (como dos peds), e o seu consertar, na realidade tá consertando todos os veículos
  20. function damagersgDayZPlayer(attacker, damagens) local victim = client outputChatBox("Ok",victim) outputChatBox("[INFO] Voce deu Dano de: "..damagens,attacker,255,0,0,true) end addEvent("damagersgDayZPlayer",true) addEventHandler("damagersgDayZPlayer",getRootElement(),damagersgDayZPlayer) victim = player que sofreu dano attacker = player que causou dano
  21. Você não usou guiGridListGetSelectedItem para identificar qual linha/coluna foi selecionada. Dica: Tente fazer tudo com gui que é mais fácil, e se der certo, você muda e coloca algumas frescuras de dx.
  22. "paida" = piada ?? Sim, complexo! Errado quem pensa o contrário... o código ali é Lua, não tem nada de outro mundo, mas a grandeza da codificação/ligações já o torna complexo. Ai já não sei, sugeri com base no perfil/dúvida. Na real tem muita gente que fica criando = (copiando/editando) uns painéis por ai, mas mal sabem lógica de programação... então se for o caso, não quer dizer nada.
  23. @Jonas^ O admin é um resource grande, com alguns trechos complexos e seus módulos todos interligados, certamente precisaria de um certo conhecimento para fazer corretamente essa “cópia”. @#DeltaSCR Sugiro que você pesquise por resources de mensagem privada, pois na comunidade/web existem vários. A lógica de um player escrever um texto em um painel, e chegar até outro player, utiliza-se: triggerClientEvent/triggerServerEvent
  24. Sim, é que ele duplicava os resources, porém os eventos e triggers como estavam iriam interferir em todos, ai se ele muda-se a música em um, ela alterava em outro também. É, o melhor seria adaptar o mesmo resource para suportar essas variações.
  25. Ele quer dois "ambientes" de DJ, no seu código no caso você permite vários markers para abrir o painel, porém a criação do som em um substituirá a de outro, porque não tratou no lado cliente.