Jump to content

androksi

Other Languages Moderators
  • Posts

    535
  • Joined

  • Last visited

  • Days Won

    35

androksi last won the day on June 12

androksi had the most liked content!

About androksi

  • Birthday 23/12/1999

Member Title

  • Portuguese Section Moderator

Details

  • Gang
    Freelancer
  • Location
    Brasil
  • Occupation
    Scripter
  • Interests
    Programming, art, nature & music

Recent Profile Visitors

6,961 profile views

androksi's Achievements

Playa Partner

Playa Partner (27/54)

291

Reputation

1

Community Answers

  1. E aí, @Paulo Guilherme — tudo tranquilo? Não, não há nenhum problema. O que ocorre é que essa barra de vida e nome do jogador é padrão do MTA. Você precisa desta função para desativá-la: https://wiki.multitheftauto.com/wiki/SetPlayerNametagShowing
  2. E aí, @JulianaCXRP — como é que você tá? Primeiramente, devo apontar um erro comum de digitação que acontece. Sua cláusula MySQL tá incorreta, o correto seria WHERE, enquanto no código mostrado está WERE. Embora você mencionou que o código antigo estava funcionando corretamente, dentro do MTA não é uma boa prática usar a função MySQL LAST_INSERT_ROWID. Uma solução para isso seria criar uma variável de controle. Sempre que você iniciar o script (onResourceStart) faça uma chamada no banco de dados, com o SELECT e atribua àquela variável anteriormente mencionada. Exemplo: local lastInsertRowId = 0; addEventHandler( "onResourceStart", resourceRoot, function( ) local dbConnection = ... -- Sua conexão com o banco de dados. local function callback( qh ) local poll = dbPoll( qh, 0 ); if ( #poll <= 0 ) then lastInsertRowId = 0; return; end lastInsertRowId = poll[ #poll ].id; end dbQuery( callback, dbConnection, "SELECT * FROM `...`;" ); end ); Estou considerando que a coluna na sua tabela do banco de dados tenha o nome id. Importante: não se esqueça que você deve implementar a função AUTO_INCREMENT nessa coluna. Concluindo, sempre que você adicionar mais uma entrada no banco de dados, lembre-se de acrescentar mais um (+1) naquela variável, apenas para fins de controle e nada sairá da contagem correta.
  3. Não exatamente. Você precisa deixar assim: Observação: Percebi que no código existe um "~:" no nome da função. Se realmente for o caso, remova e deixe apenas com letras. local function onGas(element, samedim) if getElementType(element) == "player" then local currentHealth = getElementHealth(element) setElementHealth(element, currentHealth - 25) end end
  4. Opa, @Dekonpriv — beleza? Acredito que a melhor forma de alcançar esse objetivo é criando um resource separado. Por exemplo, você pode criar um resource discord_webhooks e, num arquivo server-side, definir uma tabela sendo o índice dela um nome que você referencie e o valor será o link. Olha aí abaixo: local webhooks = { [ "vehicle-logs" ] = "https://api.discord.com/...1", [ "bank-logs" ] = "https://api.discord.com/...2", [ "punishment-logs" ] = "https://api.discord.com/...3" }; function sendInfoThrough( webhookReference, data ) local discordWebhookURI = webhooks[ webhookReference ]; if ( not discordWebhookURI ) then return; end fetchRemote( discordWebhookURI, data ); -- Aqui seria a lógica que você provavelmente já fez. end Agora a função sendInfoThrough precisa ser exportada para que outros resources possam executá-la. Uma vez exportada, em outros resources você usaria desta forma: exports.discord_webhooks:sendInfoThrough( "bank-logs", { player_name = getPlayerName( player ), message = "Executou um depósito no banco." } ); exports.discord_webhooks:sendInfoThrough( "vehicle-logs", { player_name = getPlayerName( player ), message = "Comprou o veículo ..." } );
  5. E aí, @Klehber — como é que você está? Tente remover a verificação da variável isPlayerInsideMarker.
  6. Fiz um outro script que carrega aqueles arquivos criptografados. Ficará mais fácil para você entender. Você pode baixá-lo clicando aqui. Atente-se que, agora, a variável KEY também está dentro do loader.lua. Essa chave deve ser a mesma que está no arquivo que faz a criptografia. Pode ser que quando eu tiver um tempinho livre eu faça um aplicativo, software ou pequeno site só pra criptografar os arquivos, sem necessidade de adicionar um novo script no seu servidor. Acredito que seja mais prático até ksks.
  7. Não precisa deixar aquele script (encrypt-assets) ativado, ele é responsável por criptografar seus modelos e texturas somente uma vez, quando você executa o comando. Tudo o que importa está no output, que são seus arquivos protegidos Respondendo essa pergunta: Sim! O client/loader.lua deve estar na pasta da sua joalheria, assim como seus arquivos criptografados também. Não se esqueça de configurar naquela tabela o nome/caminho de onde os arquivos estão e qual o ID que está sendo substituído.
  8. E aí, @wesssley — como é que você tá? Existe sim uma maneira de você fazer isso, através das funções de criptografia base64Encode, base64Decode, encodeString e decodeString. Deixarei abaixo um código que escrevi e você pode estudar mais como funcionaria. De qualquer forma, explicarei como usar: 1. Adicione o resource no seu servidor local. Sim, eu recomendo que use um servidor local, uma vez que o resource irá fazer um processamento pesado, podendo até causar perda de performance. 2. Vá até a pasta shared e abra o arquivo settings.lua. Edite as seguintes variáveis: KEY — use uma senha bem forte, você pode gerar em algum site. (exemplo: https://my.norton.com/extspa/passwordmanager?path=pwd-gen) OUTPUT_PATH — matenha dessa forma. 3. Adicione os arquivos sem criptografia na pasta assets e também adicione-os no meta.xml. 4. Inicie o resource no seu servidor, com o comando /start encrypt-assets. Você pode acompanhar a compilação no console do seu servidor, aquele terminal fora do MTA. 5. Uma vez finalizado, os arquivos criptografados estarão na pasta assets/output. Vá até o meta.xml e altere onde os arquivos criptografados estão, que é na pasta citada anteriormente, neste passo. Além disso, atente-se ao nome do arquivo, a extensão deles mudou para .dff_encrypted ou .txd_encrypted. Deseja mover esses arquivos para outro resource? Você pode mover, desde que o client/loader.lua esteja lá, configurado da maneira correta. Anexo: https://drive.google.com/file/d/1aOkqqLCj6wAq64kwzS7IfYuredrFAf_Z/view?usp=sharing Observação: por mais que eu tenha enviado o resource pronto para uso, peço que estude como ele funciona.
  9. Olá, @Gustavik — tudo tranquilo? Esse template string é do JavaScript, portanto não é possível utilizar em Lua, a menos que você crie do zero um sistema que leia. Entretanto, em Lua, você usa %s. Deixarei um exemplo abaixo: local messages = { ["recebeu_dinheiro"] = "Você recebeu R$%s.", ["matou_alguém"] = "Você matou %s e recebeu R$%s por isso!" } outputChatBox(messages["recebeu_dinheiro"]:format(math.random(1000)), root, 0, 255, 0) outputChatBox(messages["matou_alguém"]:format("Pepe_Moreno", math.random(1000)), root, 0, 255, 0) Como você pôde ver, usamos um método da biblioteca string, o format. Lembre-se que você deve passar os valores em ordem, de acordo com a sequência.
  10. E aí, @AkiraLofy. Tudo em cima? Para realizar tal ação em HTML, você precisa também ter conhecimento básico sobre JavaScript, pois será necessário o uso da função executeBrowserJavascript. Essa função executa um código (JavaScript) na sua página HTML. Se quiser mais informações, deixarei um link abaixo sobre isso. Link: https://github.com/moon91210/mta-notifications
  11. E aí, @wesssley. Beleza? Altere esta linha no seu código: de removePedFromVehicle(occupant, vehicle) para removePedFromVehicle(occupant, source) Pois o source do evento é o próprio veículo, de acordo com o que você passou na função triggerClientEvent, segundo parâmetro.
  12. Olá, comunidade brasileira! Hoje preparei para vocês um tutorial de banco de dados, com utilização dentro do MTA:SA. Além do bônus especial usando tabelas para armazenar em cachê tudo aquilo que está no banco de dados, dessa forma evitando várias consultas desnecessárias ao banco de dados. Clique no texto abaixo para acessar o meu tutorial. Espero que seja de grande ajuda para o seu desenvolvimento com programação. Ir para o tutorial ?
  13. Olá, @SciptNovato! Tudo bem? Acredito que com este evento seja possível bloquear todos as binds: addEventHandler("onClientKey", root, function(key, press) if not press then return false end if isLoginEnabled then -- Aqui seria a variável responsável por dizer se o painel de login está na tela ou não. cancelEvent(true) end end )
  14. E aí, @SciptNovato! Belezinha? Existe a função setObjectBreakable, você pode usá-la combinando com o evento onClientResourceStart. Depois, basta criar um laço de repetição em todos os objetos do servidor e verificar com getElementModel somente aqueles modelos que você deseja — pode até criar uma tabela para isso.
  15. E aí, @SciptNovato. Beleza? Você pode usar math.floor (para arredondar para baixo) ou math.ceil (para arredondar para cima). Exemplo: local number = 25.912 print(math.floor(number)) -- 25 print(math.ceil(number)) -- 26
×
×
  • Create New...