Jump to content

androksi

Other Languages Moderators
  • Posts

    545
  • Joined

  • Last visited

  • Days Won

    38

Everything posted by androksi

  1. Parabéns por encontrar o erro sozinho. Sobre a deleção de tópicos, infelizmente não é possível realizar essa ação com uma conta normal, ou seja, apenas administradores podem. (geralmente eles não deletam, precisa ter um motivo claro)
  2. O evento está com uma letra errada, é onMarkerHit, e não OnMarkerHit.
  3. O seu código está correto, Gaimo. Tenha certeza de que está utilizando o nome corretamente (no caso, acho que seller seria o jogador). Exemplo abaixo é apenas uma brincadeira que eu fiz pra você entender. Quando você digita /desafio, um timer é iniciado. Dentro de 15 segundos você deve entrar em um veículo. Quando entrar, o timer deve ser parado e anulado. local tempTimers = {} addCommandHandler("desafio", function(player) if not tempTimers[player] then outputChatBox("Você tem 15 segundos para entrar num veículo!", player, 0, 255, 0) tempTimers[player] = setTimer(function(p) outputChatBox("O tempo acabou.", p, 255, 255, 0) tempTimers[p] = nil end, 15 * 1000, 1, player) end end) addEventHandler("onVehicleEnter", root, function(thePlayer, seat) if seat == 0 then if tempTimers[thePlayer] and isTimer(tempTimers[thePlayer]) then killTimer(tempTimers[thePlayer]) tempTimers[thePlayer] = nil end outputChatBox("Muito bem! Você entrou no veículo em tempo.", thePlayer, 255, 0, 0) end end)
  4. setElementData é temporário. Assim que o jogador se desconecta do servidor, não existe mais. Use setAccountData para salvar na conta do jogador ou algum banco de dados.
  5. Sim, é possível fazer. Você pode escolher algumas formas de fazer; algumas delas são: banco de dados ou um simples arquivo de texto. Há vários eventos que detectam o que aconteceu dentro do servidor, seja com jogadores ou o servidor em si. Deixarei abaixo alguns eventos que possam ser úteis: [Antes de tudo, considere usar getRealTime para obter o horário e/ou dia que tal ação aconteceu. Em outras palavras, para ter um controle melhor sobre os acontecimentos.] onPlayerChat - Pode ser útil para obter e armazenar as mensagem que os jogadores enviaram no servidor; onPlayerCommand - Utilizado para obter os comandos que os jogadores executaram no servidor; onPlayerWasted - Com esse evento, você pode obter o jogador que matou o outro, ou suicídio; onPlayerChangeNick - Útil para obter a alteração do nome de um jogador; (Exemplo: fiz besteira no servidor e rapidamente mudei de nome. Com um registro em mãos, você iria ter uma prova) onPlayerConnect - O evento é chamado assim que um jogador clica para entrar no servidor, isto é, antes de entrar, digamos assim. Decidi adicioná-lo a lista de eventos pois pode ser útil; onPlayerPrivateMessage - Pode valer a pena salvar o registro de mensagens que os jogadores mandam via privado (/msg); onPlayerLogin - O MTA por si só já salva os registros de logins, mas caso queira criar um do zero para o seu sistema, vá em frente. Exemplo: Imagem do arquivo de registro: Lembrando que é possível salvar qualquer tipo de registro, basta usar a criatividade.
  6. androksi

    ID

    You'll need an external database or use the current one from MTA: SA. Functions that you'll need (if using external database): dbConnect, dbQuery, dbExec Functions that you'll need (if using internal MTA: SA database) setAccountData, getAccountData Events that you'll probably need: onPlayerLogin, onPlayerLogout That's all. We won't give you an existing system, try to do it by yourself. We'll help you if you have any questions. Or... try to find the resource on MTA's community (https://community.multitheftauto.com/)
  7. function getPlayersByElementData(key) local cache = {} for i, v in pairs(getElementsByType("player")) do local data = getElementData(v, key) if data then cache[#cache + 1] = v end end return cache end Use essa função para obter os jogadores que possuem determinada elementData.
  8. addEventHandler("onPlayerChangeNick", root, function(_, new) if string.find(new, "#%x%x%x%x%x%x") then -- Checa se contém código de cor cancelEvent() -- Cancela a alteração do nickname outputChatBox("* Não é permitido o uso de código de cor no nickname.", source, 255, 0, 0) end end)
  9. function removeHex(str) local nString = str while string.find(nString, "#%x%x%x%x%x%x") do nString = string.gsub(nString, "#%x%x%x%x%x%x", "") end return nString end Código correto que deve ser usado, para que os jogadores não possam burlar, usando duas cores.
  10. local temporaryACLGroups = {"Moderator", "Hacker", "Police"} -- nome dos grupos da ACL que serão removidos da conta do jogador, caso ele possua addEventHandler("onPlayerQuit", root, function() local account = getPlayerAccount(source) if isGuestAccount(account) then return false end for i = 1, #temporaryACLGroups do local aclName = temporaryACLGroups[i] local aclGroup = aclGetGroup(aclName) if aclGroup then if isObjectInACLGroup("user." .. getAccountName(account), aclGroup) then aclGroupRemoveObject(aclGroup, "user." .. getAccountName(account)) end end end end) Faça assim. Não testei, mas deve funcionar perfeitamente.
  11. Clique duas vezes em cima do resource voice, lá no painel admin do seu servidor. Há uma configuração em relação a isso. Troque o valor para false.
  12. Usando as funções fromJSON e toJSON. Se você já tentou alguma coisa, por favor, deixe o código aqui e diga qual é a sua dúvida em relação ao JSON.
  13. Poderia explicar melhor o seu conceito de tabela? Se houver um código, por favor, apresente-nos.
  14. Você pode usar essa função para criar strings aleatórias: generateString Sobre o sistema, sim, você precisará de um banco de dados, se quiser armazenar as chaves; ou, você pode salvar as chaves em um arquivo de formato JSON.
  15. addEventHandler("onPlayerJoin", root, function() local ipAddress = getPlayerIP(source) fetchRemote("http://ip-api.com/json/" .. ipAddress, callback, "", false, source) end ) function callback(data, error, player) if error == 0 then local json = fromJSON("[" .. data .. "]") if json then local country = json.country or "???" local region = json.region or "???" outputChatBox("* " .. getPlayerName(player) .. " joined the server. [" .. country .. " - " .. region .. "]", root, 255, 255, 0) end else outputChatBox("* " .. getPlayerName(player) .. " joined the server. [??? - ???]", root, 255, 255, 0) end end You need to give ACL rights to the resource. If it didn't help, try using my code above.
  16. Como o título está "server-side", vou supor que esse código seja server-side. Sim. Irá estar true para todos. Caso você queira definir a variável para um elemento, será necessário utilizar uma tabela, pois tudo o que está server-side, faz parte do jogo, e tudo o que está no client-side, faz parte do computador do jogador, tendo nenhuma relação com o jogo (a não ser que você queira). local activated = {} function active(player) -- uma forma maior, usando if e else para checar if not activated[player] then activated[player] = true else activated[player] = nil end -- ou de uma forma menor, utilizando apenas uma linha activated[player] = not activated[player] and true or nil end addCommandHandler("act", active) -- Por questões de otimização, SEMPRE adicione o evento de onPlayerQuit, quando usar esse tipo de tabela addEventHandler("onPlayerQuit", root, function() -- Veja aqui que usei SOURCE, pois source é exatamente o elemento que salvamos, porém com outro nome (player) if activated[source] then activated[source] = nil end end )
  17. O exemplo não ficou muito claro, mas se você quiser salvar vários tipos de lanches, basta usar apenas UMA tabela, por exemplo: local lanches = { "Cheese-Burger", "Cheese-Bacon", "Cheese-Salada", "Misto Quente" } E daí você pode adicionar quantos lanches você quiser, utilizando apenas uma tabela.
  18. Isso não seria object preview, esse nome é de um resource e você pode encontrar como usá-lo acessando este link.
  19. Rapaz, é mais fácil você enviar o código para mostrar-nos esses tais elementos.
  20. Nenhuma função deve ser evitada de usar, muito pelo contrário - use-as. Todas as funções irão depender da sua lógica de programação, você não pode realizar uma tarefa, na maioria das vezes, sem uma condição. Realizar verificações antes de uma execução de código pode evitar vários bugs e falhas de segurança. Um código limpo e legível, com funções e variáveis nomeadas corretamente, estruturação, organização de pastas e nomeação de arquivos, tudo isso deve conter dentro de um projeto. Não é simplesmente sair colocando qualquer nome que venha à cabeça. Pensar e raciocinar antes de escrever um código é extremamente importante na área da programação. Também, para não ocorrer bugs ou falha de segurança, tente criar possibilidades de "como isso poderia bugar?" ou "como alguém poderia burlar o sistema?". Seja criativo e veja o funcionamento do seu sistema de diferentes perspectivas, isso é muito importante. Sobre desempenho, evite ao máximo repetir linhas de código para executar uma tarefa. Crie funções para isso! Dessa forma, o seu código terá rotinas que, sempre que quiser uma parte do código, ela estará dentro de uma função, sendo assim você irá criar um ciclo e não uma bagunça. Por exemplo, ao invés de criar vários comandos para executar a mesma tarefa (exemplo abaixo): Por que não criar apenas um comando para executar a função? (exemplo abaixo) Tudo irá depender da sua criatividade, perspectiva, manutenção do código, organização e condições. Recomendo você assistir esta playlist para clarear mais as idéias e escrever um código bom e legível.
  21. Você mesmo pode criar uma função sleep(). Basta usar coroutines.
  22. Nesse caso, usando o evento onVehicleEnter, cancelEvent NÃO irá funcionar, pois o evento é ativado apenas quando o jogador entra no veículo. Seguindo a lógica, o que deve ser feito, nesse caso, é usar removePedFromVehicle. Caso você queira fazer cancelando o evento, troque o evento por onVehicleStartEnter. Observação: não recomendo usar o evento onVehicleStartEnter nessa situação, pois o trigger irá ativar e o jogador pode simplesmente cancelar a entrada, causando bugs no sistema.
  23. Я верю, что ты не можешь сделать это так просто. Попробуйте пройти по ссылке ниже. Создание внешнего веб-сервера для загрузки файлов может быть решением. Ссылка: Щелкните здесь
  24. Você pode fazer isso. Crie uma tabela com o ID do veículo como index e os valores da handling como value. A principal função e o principal evento que você deve usar: setVehicleHandling onVehicleEnter
×
×
  • Create New...