Jump to content

androksi

Other Languages Moderators
  • Posts

    542
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by androksi

  1. Olá! Altere este evento onClientVehicleExit para onClientPlayerVehicleExit. Pois eles têm diferença. E também, é o que você tá usando no outro, com o player sendo o source, e o veículo como parâmetro.
  2. Tópico trancado, pois o autor conseguiu resolver o problema.
  3. Olá! Off-topic: Pedi para moverem o seu tópico da seção Inglesa para a nossa, Portuguesa. Acredito que você tenha errado aí o botão. On-topic: Isso vai depender do que o setTimer está processando. Por exemplo, digamos que seja isto: setTimer(function() outputChatBox("* Enviando mensagem para todos os jogadores a cada segundo!", root, 255, 255, 255, true) end, 1000, 0) Com certeza não vai causar impacto algum no servidor. É apenas uma linha de código, e a função é bem simples. Agora, se você deseja usar um laço de repetição em todos os jogadores e processar banco de dados junto, ou sei lá mais o que - daí sim nós teremos um problema. Um grande problema, aliás. Não sei qual é o seu nível de experiência com a linguagem Lua, nem com a base do MTA:SA. Mesmo que seja bastante, ainda assim não seria suficiente para realizar as devidas otimizações. Uma boa solução possível é usar a lib Async (link1, link2). Ela cria uma thread para processar os dados, de maneira lenta e sem causar problemas de desempenho no servidor. Digamos que você tenha uma tabela e queira usar o async. Você usaria desta maneira: setTimer(function() local players = getElementsByType("player") Async:foreach(players, false, function(player) local playerName = getPlayerName(player) outputChatBox("* Este é o seu nickname: " .. playerName, player, 255, 255, 255, true) end) end, 1000, 0) Os parâmetros do método foreach são: Uma tabela - Usei a tabela de jogadores mesmo, como exemplo Um valor true ou false - Sinalizando se a tabela é pairs ou ipairs Uma função - Que recebe no parâmetro o valor de cada iteração (também há o segundo parâmetro, que seria o índice. Optei por não utilizar) Caso tenha ficado alguma dúvida, só perguntar.
  4. Olá! Esta seção do fórum é em Português. Você pode escrever mensagens em nosso idioma aqui. Sobre a sua questão, nós não fornecemos código pronto, pois você não tentou nada, levando em consideração que nenhum código foi mostrado. Contudo, as funções que você deve usar são: addCommandHandler setElementDimension
  5. Olá! Por mais que eu não saiba a fonte desse script, irei te ajudar. Espero que não seja nada vazado. Além disso, uma observação sobre o conteúdo do seu tópico. Quando se trata de um código com muitas linhas, prefira usar a ferramenta de Spoiler. Dessa forma, não fica algo muito gigantesco na tela dos usuários. Você pode encontrar essa ferramenta aqui: https://i.imgur.com/DrdiJgj.png Agora, dada as devidas informações, aqui está o código que deve funcionar (não testei!): function getChatMessage(message, page) if message then if page == "anonymous" then triggerClientEvent(root, "setChatMessage", resourceRoot, "Anonimo: " .. message, page) elseif page == "local" then -- Adiciona uma nova verificação para a página local local x, y, z = getElementPosition(client) -- Obtém a posição do jogador que enviou a mensagem local playersInRange = getElementsWithinRange(x, y, z, 10, "player") -- Obtém apenas os jogadores que estão numa distância de 10 metros triggerClientEvent(playersInRange, "setChatMessage", resourceRoot, getPlayerName(client) .. ": " .. message, page) -- Envia a mensagem apenas para os jogadores que estão próximos else triggerClientEvent(root, "setChatMessage", resourceRoot, getPlayerName(client) .. ": " .. message, page) end end end addEvent("getChatMessage", true) addEventHandler("getChatMessage", resourceRoot, getChatMessage)
  6. Olá! Seja bem-vindo(a) ao fórum! ? Pelo diagnóstico dado por aquele executável, seu computador parece ser até que bom pra rodar o jogo. Porém, aqueles arquivos modificados podem estar fazendo com que o seu jogo venha a fechar. Recomendo que utilize um GTA:SA original, de preferência um da Steam. Aliás, um adendo: por mais que seu computador pareça bom pra rodar o MTA:SA, ainda assim irá depender do servidor que você joga. Pois, contendo muitas modificações, já começa a ficar bem pesado.
  7. Olá! Você pode limitar de duas formas, mas eu teria que saber qual é o propósito. De qualquer forma, vou escrever um exemplo de como seria. local playersInArena = {} -- Tabela onde os jogadores serão armazenados local maxPlayersInArena = 1 -- Máximo de jogadores na arena function joinArena(player) if #playersInArena >= maxPlayersInArena then -- Se o total de entradas na tabela for maior ou igual ao máximo, então iremos parar o código return false end playersInArena[#playersInArena + 1] = player -- Armazena o jogador na tabela setElementPosition(player, 0, 0, 3) -- Apenas como teste, isso irá mover o jogador para o centro do mapa end addCommandHandler("entrar", joinArena) function freeMemory() for index, player in ipairs(playersInArena) do if player == source then playersInArena[index] = nil end end end addEventHandler("onPlayerWasted", root, freeMemory) -- Anexa um evento na função » freeMemory «, caso o jogador morra addEventHandler("onPlayerQuit", root, freeMemory) -- Anexa um evento na função » freeMemory «, caso o jogador saia do servidor Faça as adaptações da maneira que desejar.
  8. Fico feliz que tenha sido isso mesmo! Infelizmente nós não podemos fornecer código que iria sobrescrever um arquivo compilado. Pelo menos não aqui, em público.
  9. Olá! Movi o seu tópico para o local mais apropriado. Sobre a sua dúvida: isso depende de como a tunagem é salva no veículo. Poderia compartilhar o trecho do código onde isso acontece?
  10. Olá! Seja bem-vindo(a) ao fórum. ? Lua é uma linguagem de programação, você não pode utilizar outras linguagens dentro dela. A propósito, Lua é apenas um requisito para você iniciar seus scripts. Na minha visão, o que você precisa dominar de fato é a sintaxe do MTA, isto é, entender como as funções e eventos funcionam. Uma vez que tenha entendido, fica bem mais fácil criar as coisas. Novamente: Lua, como linguagem de programação dentro do jogo, é apenas entender o básico. Como você já tem experiência em Python, acredito que será bem tranquilo, pois a lógica você possui. Ainda assim, mesmo a linguagem Lua não sendo compatível com outras, você pode integrar muitas coisas; como aplicativos externos, por exemplo, usando Node.js. O MTA:SA te oferece muitas ferramentas para que isso seja possível. Além do mais, Lua é bem forte quando se trata de tabelas. Ainda mais em um jogo. Deixo abaixo alguns links/tópicos importantes sobre como e por onde começar: Entenda a Wiki do MTA:SA Importante para conhecer os parâmetros e sintaxe das funções. Tutorial sobre Lua aqui, no MTA:SA Também importante para se familiarizar com o MTA:SA. Lista de vídeos feita por um membro da comunidade Os vídeos são para quem está de fato começando agora a programar aqui, no MTA:SA.
  11. Olá! Fiz um código e funcionou corretamente. local controlState = false addCommandHandler("ctoggle", function(player) controlState = not controlState for index, control in pairs({"fire", "action", "jump"}) do toggleControl(player, control, controlState) end iprint(controlState and "unblock" or "block") end) Verifique se realmente não há outro script em execução que esteja redefinindo os controles do jogo.
  12. Olá! Faça um comando com a função addCommandHandler, e então realize um laço de repetição (for) em todos os jogadores do servidor, trazendo-os para a sua dimensão. Não se esqueça de obter a sua posição antes, usando getElementPosition. Dentro do laço de repetição, o que você deve fazer é alterar a posição dos jogadores, usando setElementPosition.
  13. Olá! Use a função outputChatBox.
  14. @rznnN, tradução do que o outro administrador disse: O seu banimento não foi global, ou seja, não foi aplicado pelo MTA. O MTA não tem nenhum poder sobre os servidores. Ao invés de postar aqui, você precisa contatar o dono ou proprietário do servidor em questão, pra solicitar a revisão do seu banimento. Nesse caso, listo abaixo as páginas e sites do servidor que você pode estar entrando em contato: https://vk.com/dayzmta https://www.facebook.com/dayzultimate/ https://dayzmta.ru/
  15. Olá! Seja bem-vindo(a) ao fórum! ? O problema ocorre por conta da memória RAM (ou memória de vídeo). O computador do seu amigo não é capaz de suportar as modificações do servidor em questão. Infelizmente, não tem nada que possamos fazer.
  16. Olá! Seja bem-vindo(a) ao fórum. ? O sistema que você deseja não é tão complicado de ser feito, embora seja necessário um certo conhecimento em programação. Mesmo que eu te explique aqui, não iria adiantar, pois presumo que você não saberia por onde começar. Recomendo que você leia estes seguintes artigos: Como a Wiki funciona. Tutorial Lua para iniciantes. Playlist para você aprender a escrever os seus próprios scripts. Curso sobre algoritmos. De qualquer forma, acredito que valha a pena escrever sobre a lógica por trás. Então, serei breve: Vamos lá. O jogo irá começar quando houver 20 pessoas esperando. Para isso, nós precisamos de uma tabela, onde os jogadores ficarão armazenados. A cada jogador que digitar o comando para participar, nós o inserimos na tabela. Caso ele saia do servidor ou morra (no jogo ?), nós o retiramos da tabela, para que não ocorra bugs desnecessários. Mostrando isso em código, ficaria mais ou menos desta forma: É claro que falta algumas coisas, como por exemplo dar uma outra arma ao jogador, caso ele mate X jogadores. Espero que tenha ajudado de alguma forma.
  17. @Renato Luiz, @Fonseca_, desculpe a demora. O nome do recurso dentro do servidor deve ser discordapp e ele precisa ter permissões administrativas.
  18. Olá! Tópico movido para a seção correta por se tratar de código Lua. Sobre a sua questão, nós temos dois cenários aqui. O primeiro seria rotacionar o objeto infinitamente; o segundo, rotacionar o objeto apenas quando alguém executar uma ação. Acredito que sua vontade seja rotacionar o tempo todo. Aqui esta um tópico sobre o assunto:
  19. Olá! Por favor, use a ferramenta de formatação do fórum para enviar códigos.
  20. Olá! Primeiro de tudo, você precisa atualizar o intervalo de tempo (tick). Para isso, você pode usar o evento onClientPlayerDamage, anexado no localPlayer. Também, são necessárias algumas variáveis para salvar o estado atual da vida. Fiz um código de exemplo, que você pode usar para fazer o colete também. local screenX, screenY = guiGetScreenSize() local barWidth, barHeight = 220, 20 local barX, barY = screenX / 2 - barWidth / 2, screenY - (barHeight + 10) local changeTick = 0 local currentHealth = getElementHealth(localPlayer) local playerHealth = currentHealth addEventHandler("onClientPlayerDamage", localPlayer, function(_, _, _, loss) if loss > 0 then changeTick = getTickCount() end end) addEventHandler("onClientRender", root, function() local changeHealth = getElementHealth(localPlayer) if changeHealth ~= currentHealth then playerHealth = interpolateBetween(currentHealth, 0, 0, getElementHealth(localPlayer), 0, 0, (getTickCount() - changeTick) / 800, "InOutQuad") if playerHealth == changeHealth then currentHealth = changeHealth end end dxDrawRectangle(barX, barY, barWidth, barHeight, tocolor(20, 21, 22, 200), false) dxDrawRectangle(barX, barY, barWidth * (playerHealth / 100), barHeight, tocolor(255, 55, 55, 255), false) dxDrawRectangle(barX, barY, barWidth * (changeHealth / 100), barHeight, tocolor(255, 255, 255, 255), false) end) Demonstração: https://streamable.com/jnyky9
  21. Olá. Seja bem-vindo(a) ao fórum. ? Baixe o MTA:SA pelo site oficial e tenha um GTA:SA limpo, sem modificações.
  22. Olá! Se você está começando, nada melhor que visitar alguns links super úteis para entender a base, antes de tentar fazer qualquer coisa. Veja estes links: Tutorial de Lua + conceitos do MTA:SA Playlist de Lua para MTA:SA + projeto Entendendo a Wiki do MTA A base é importante para você não cometer erros bobos.
  23. Olá! Desculpa o atraso. Acredito que o erro esteja vindo do seu servidor MTA. Poderia dar detalhes sobre como está o nome do recurso (resource) e como está configurado as credenciais? Fique à vontade para me mandar mensagem privada aqui no fórum, caso seja necessário.
  24. Olá! Primeiro ponto que devo ressaltar aqui, é que não bugar animação é totalmente responsabilidade dos outros scripts do servidor. Agora, sobre a sua dúvida, tem algumas maneiras de fazer isso. Particularmente, eu não gosto de usar o sistema de dano do próprio GTA, pois tem aquele problema de matar e morrer, entre outros. De qualquer forma, não vou me estender muito aqui. Você pode utilizar o evento onClientPlayerDamage. Na função desse evento, você tem alguns parâmetros que são úteis, como o loss (dano tomado). Além disso, será necessário enviar uma requisição ao servidor (triggerServerEvent), fazendo com que uma animação seja aplicada ao jogador. Pra finalizar, você pode checar no evento, se a vida do jogador é menor que 30 e cancelar os danos que ele recebe. Do contrário, os outros jogadores poderiam o finalizar.
  25. Olá! Seja bem-vindo(a) ao fórum! ? Você pode começar lendo estes tópicos: Como a Wiki funciona. Tutorial Lua para iniciantes. Playlist para você aprender a escrever os seus próprios scripts. Curso sobre algoritmos. Os itens citados são para quem está começando e pode te auxiliar nessa jornada. Todavia, ainda posso te dar as funções para que você possa tentar alguma coisa. Lembrando que, além do fórum, há uma galera bastante ativa em nosso Discord oficial do MTA. Começando desde o princípio, um painel de login seria, de forma bem resumida, uma forma do jogador se autenticar. Para isso, nós precisamos que ele forneça algumas informações, como o usuário e senha. Há várias formas de você estar criando uma maneira disso acontecer. Seja através de comandos básicos, sem nenhuma interface; com interface; integrações via site e muitas outras formas. Considerando que você deseja um painel de login, presumo que nós teremos uma interface. Então, dessa forma, você precisa escolher entre trabalhar com as funções DX ou CEGUI. A diferença entre elas é, basicamente, CEGUI já vem no MTA como uma biblioteca, com diversas funções prontas para o uso. Já o DX, são apenas desenhos na tela, você usará bastante matemática básica - e, claro, criará o seu próprio layout. Darei as funções CEGUI, pois elas são bem fáceis de trabalhar. Para a criação do painel de login, você usaria as seguintes funções: guiCreateWindow - cria a janela; guiCreateEdit - cria os campos para digitar o usuário e senha; guiCreateButton - cria o botão para autenticar (e registrar, caso tenha essa característica); guiCreateLabel - cria um texto na janela, serve para auxiliar o jogador, dizendo qual é o campo de Usuário e Senha. Funções que serão úteis no decorrer da criação: Window (Janela) guiSetVisible - altera a visibilidade da janela, escondendo-a ou fazendo a aparecer. Só para constar, essa função serve para quase todos os elementos CEGUI. A janela foi apenas um exemplo de uso. Buttons (Botões) guiSetProperty - altera algumas característica do botão, como cor do texto, por exemplo; guiSetFont - altera a fonte do botão. As duas funções citadas acima também podem ser usadas em vários elementos CEGUI. Edit (Campos) guiEditSetMaxLength - altera o limite de caracteres que podem ser inseridos no campo. É extremamente importante limitar, para não ter falhas de segurança. Considerando um painel simples, irei citar apenas um evento necessário. Veja abaixo: onClientGUIClick - esse evento é chamado quando ocorre algum clique em um botão que seja da biblioteca CEGUI. As funções e eventos citados acima são parte do que nós chamamos de client-side, ou seja, coisas que rodam no computador do jogador. Agora, é necessário nós pegarmos as informações que ele digitou e mandá-las para o server-side, onde ocorrerá todo o processamento de dados. Para isso, nós utilizamos a função guiGetText, para obter o que foi inserido nos campos (editbox), e também a função triggerServerEvent, para chamar algum evento lá do server-side. Agora que nós enviamos os dados para o servidor, precisamos processá-los. Algumas funções que irão fazer parte do código, para autenticar: getAccount - obtém uma conta, se existente, e também serve para verificar se a senha está correta; logIn - autentica o jogador. Eu não entrei muito em detalhes sobre registrar uma conta, mas você pode explorar mais depois . Lembrando, novamente, sobre o nosso servidor oficial do Discord. Espero que este tópico tenha o ajudado a entender um pouco sobre. Boa sorte na sua jornada.
×
×
  • Create New...