Jump to content

androksi

Other Languages Moderators
  • Posts

    545
  • Joined

  • Last visited

  • Days Won

    38

Everything posted by androksi

  1. Funções necessárias: addCommandHandler (adicionar o comando desejado) getPlayerFromID (você deve criar) isElement (verificar se o jogador que está vindo do ID realmente é um elemento válido) getElementPosition (obtém a posição do jogador) getDistanceBetweenPoints3D (obtém a distância dos jogadores) takePlayerMoney (retira o dinheiro do jogador especificado)
  2. Olá. Eu não recomendo fazer isso. O que você pode fazer, é armazenar as informações do mapa, apenas uma vez, em uma tabela. Depois, somente quando precisar, você cria o mapa para o jogador. Crie também uma checagem de dimensão: caso o jogador for para uma dimensão que seja diferente da atual e o mapa lá ainda não esteja criado, então você envia a tabela que contém as informações do mapa para ele.
  3. Você consertou um erro e criou outro. ? Veja abaixo o que você deve fazer. Além disso, tente não usar nome de função igual do MTA. Você deixou a sua função com o mesmo nome da função do MTA. (stopSound) Não se esqueça também de alterar o nome do terceiro parâmetro do evento. Ele deve ter o mesmo nome da função escolhida.
  4. Você pode sim. Invés de adicionar o destroyElement diretamente, faça um trigger para o server-side, e destrua-o lá. NOTA: Apenas objetos que foram criados em determinado lado, podem ser removidos. Objetos criados em client-side, só podem ser manuseados client-side, e vice-versa. Porém, isso não te impede de manuseá-los através de trigger. Posso estar enganado sobre, estou apenas relatando o que aconteceu comigo a algum tempo atrás. ?
  5. function whenClick(button, state, _, _, _, _, _, clickedElement) local isLeft = button == "left" local isUp = state == "up" if isLeft and isUp then local object = clickedElement if isElement(object) and getElementType(object) == "object" then outputChatBox(getElementModel(object)) end end end addEventHandler("onClientClick", root, whenClick) Código testado. Não é necessário verificar se a pessoa que clicou é um jogador, pois apenas um jogador pode clicar. Então é sem sentido. Apenas não adicionei aquela elementData, faça isso você mesmo. O código está funcionando perfeitamente.
  6. Você tem o resource Fonts no seu servidor? Se sim: ligue-o. Se não: deixe as fontes padrão do MTA. Altere todas as fontes para "default-bold".
  7. O nome do parâmetro dos eventos, está errado. Ele possui um nome diferente da função. Inclusive, por mais que sejam lados opostos (client-side e server-side), tente utilizar nomes diferentes para funções. function stopSoundonLogin() if isElement(sound) then stopSound(sound) end end addEvent("stop", true) addEventHandler("stop", root, stopSoundonPlayerLogin) -- Aqui está o seu erro. O nome desse parâmetro é diferente do nome da função. Isso também ocorre no server-side.
  8. Olá. Recomendo usar o evento client-side onClientClick. Pois o evento que você está utilizando, ele possui uma área de clique um pouco errada. Creio eu que seja devido à sincronização. Já no evento que citei acima, ele irá reconhecer qualquer elemento, independente da posição, latência ou qualquer outra coisa.
  9. Olá. A função aclList retorna uma tabela que contém elementos server-side, o client-side não reconhece. Você precisa armazenar esses elementos já preparados para envio, como por exemplo o nome da ACL e outras coisas que a lista possui.
  10. Não se esqueça também de bloquear os botões "Client" e "Server", que ficam na aba Resources. Alguém mais espertinho pode executar um código ali que retorna o IP do jogador. (ou você pode bloquear o campo onde é escrito o código, tanto faz.) Código: outputChatBox(getPlayerIP(getPlayerFromName("nick_de_algum_jogador_aqui")), source)
  11. O evento onPlayerJoin é chamado assim que o jogador entra no servidor. Dê /reconnect e veja se funciona. Também verifique outros resources que possam vir a conflitar.
  12. O seu código está totalmente errado, totalmente sem lógica alguma. A Wiki te oferece um exemplo mais conciso sobre essa função, você poderia pegar o exemplo de lá. Somente digitar qualquer coisa sem pensar, pesquisar e revisar, não vai funcionar. Não tenha preguiça de ler, muito menos de aprender. toggleControl Faça usando server-side. Erros no seu código: root definido como parâmetro na função; thePlayer sendo passado como função na segunda linha, sendo que ele é um parâmetro da função; condição if com o escopo aberto; função toggleControl com os argumentos errados, faltando uma vírgula antes do último — ainda assim totalmente errado; definiu um evento com o nome de um parâmetro da função, isso não existe. Os eventos do MTA estão aqui: Eventos Client-side & Eventos Server-side.
  13. Hello. Wrong section to post, but I will reply you. I also have an AMD GPU, and it's totally normal not showing the percentage of it's use. Even on others games that function doesn't work. Probably an AMD issue, not a MTA issue. Just chill. MTA is using your GPU properly. Post here when you got a new question: Ajudas relacionadas ao MTA: SA (Cliente/Servidor)
  14. Sim, você pode anular variáveis. Elas são armazenadas na memória do computador. Recomendo também o uso da função collectgarbage, após anular alguma variável. Mas só um adendo: JAMAIS UTILIZE ESSA FUNÇÃO EM TODOS OS SEUS RESOURCES! Use apenas naqueles resources que você acha que está consumindo bastante memória RAM.
  15. Olá. Cara, para ser bem sincero — e também como a maioria diz — tudo depende de como você utiliza essa função. Por mais que eu brinque bastante com quem me pergunta sobre, não dispenso o uso dela, até porque é uma função, está ali para ser usada. Lembre-se apenas que tudo tem um limite, qualquer exagero é ruim para o servidor; e qualquer outra coisa. Saber usar de forma correta é super válido. Por mais que eu não a uso há um bom tempo, às vezes, para coisas simples é necessário usar, embora eu prefira usar trigger hehe. Nesse seu caso, como é que você está fazendo as missões? Pelo o que parece, está em resources separados. Por que não faz no mesmo resource, e cria uma tabela server-side, daí basta armazenar as missões que o jogador aceitou/já completou. Um ID também poderia ser criado, para cada missão, como uma forma de identificar. Dessa forma você iria apenas mandar a tabela para o client-side, e você poderia verificar se o jogador já fez ou não a missão. Contudo, sobre a questão de performance nesse caso, cara, nem se preocupe. É bem pequena, e até imperceptível. Nunca se esqueça também de remover a elementData do jogador. Alterá-la para nil ou false não adianta, ainda irá consumir a rede do seu servidor. Funções em questão das coisas que escrevi acima: setElementData triggerClientEvent triggerServerEvent removeElementData
  16. Olá, Ray. O MTA não é responsável por isso. Você deve criar resoluções personalizadas em seu computador (geralmente nas configurações da placa de vídeo).
  17. Olá. Em Lua, geralmente usa-se metatabelas para criar estruturas orientadas à objetos. Há duas maneiras de criá-las; a primeira, separando métodos e atributos em diferentes partes do código; ou, criar apenas uma tabela, que vamos nomear como se fosse o nome da classe, e nela iremos definir tudo. Irei mostrar a segunda opção, onde você cria uma tabela (classe), e já insere os métodos e atributos. A palavra self é referência do objeto criado, nesse caso, dei o nome de sandwich. Basicamente, o que a função setmetatable faz é indexar a variável-objeto (sandwich) à classe Item. Dessa forma, objeto.método ou objeto:função(), irá executar algo da classe. Sempre use a palavra self como primeiro parâmetro da função, uma vez criada dentro da classe. Também, você pode chamar as funções/métodos dentro da classe. Vejo que você tem conhecimento sobre o assunto, sabe do que estou falando.
  18. Você primeiro deve salvar essa "bolsa" no jogador, como um atributo. Após isso, você leva até o local onde será feita a lavagem de dinheiro, verifica se ele tem essa bolsa; se tiver, lava, se não tiver, manda um feedback para o jogador, dizendo que ele não possui nenhuma bolsa para lavar. Há algumas maneiras de salvar a bolsa: setElementData tabela banco de dados
  19. addEventHandler("onPlayerJoin", root, function() setElementData(source, "ID", "N/A") end) Basta adicionar esse trecho de código em qualquer parte. Assim que o jogador entrar no servidor, ele ficará automaticamente com o ID nulo (N/A). Dessa forma, quando ele logar, o ID será dado a ele, de acordo com o seu código.
  20. Armazena o resultado do loop dentro de uma tabela vazia. Depois, só mandar a tabela para o cliente. -- Server-side function getObjectsFromACL(aclName) local result = {} local acl = aclGetGroup(aclName) if not acl then return false end local objectList = aclGroupListObjects(acl) for key, value in pairs(objectList) do table.insert(result, {objectName = value}) end return result end addCommandHandler("list", function(player) triggerClientEvent(player, "onPlayerRequestObjectList", resourceRoot, getObjectsFromACL("Moderator")) end) -- Client-side addEvent("onPlayerRequestObjectList", true) addEventHandler("onPlayerRequestObjectList", resourceRoot, function(list) for i, v in pairs(list) do outputChatBox(v.objectName) end outputChatBox("Foram mostrados " .. #list .. " resultado(s).") end)
  21. Utilizando exports, o return será funcional. Já o trigger, não, pois ele é apenas usado para enviar dados, não terá retorno algum. E há um erro ali no seu código, não se usa break após return hehe. Crie uma variável status e mude ela para true/false, depois dê o retorno no final do código, fora do laço de repetição. Sendo assim, você pode usar o break. local justATest = function() local status for i = 1, 16 do if i == 4 then status = true break end end return status or false end print(tostring(justATest()))
  22. Sim, é possível. Use o evento onClientKey.
×
×
  • Create New...