Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Como a função está ligada à função bindKey, source não vai retornar nenhum elemento dentro da função. Ainda assim, acho sempre bom nomear variáveis, parâmetros, etc da forma certa, como nesse caso que poderia ser thePlayer ou player no lugar.
  2. Por favor, não crie outro tópico se você já criou outro relacionado, basta responder no outro. #Topic bindKey("key", "both", function( key, keyState ) if keyState == "down" then -- a tecla foi pressionada color = tocolor(r, g, b, a) else -- a tecla foi solta color = tocolor(r, g, b, a) end end)
  3. Você só vai conseguir parar pelo próprio cliente, quando precisar parar o som faça um triggerClientEvent.
  4. dxDrawImage não vai funcionar dessa forma, você vai precisar chamar addEventHandler/removeEventHandler para mostrar ou ocultar o texto, com evento onClientRender para manter na tela.
  5. function painel(thePlayer) if isPlayerInACL(thePlayer, "TAGBOPE") or isPlayerInACL(thePlayer, "grupoACL") then ----- o grupo que vc criou no painel admin triggerClientEvent(thePlayer, "BPAbrir", getRootElement()) else --outputChatBox("#FF0000* #000000[#FF0000ERRO#000000]#FFFFFF- Somente mebros da BOPE podem abrir o painel.", thePlayer, 255, 0, 0, true) end end function isPlayerInACL(player, acl) if isElement(player) and getElementType(player) == "player" and aclGetGroup(acl or "") and not isGuestAccount(getPlayerAccount(player)) then local account = getPlayerAccount(player) return isObjectInACLGroup( "user.".. getAccountName(account), aclGetGroup(acl) ) end return false end Em "grupoACL" coloque o segundo grupo permitido. Movido para: https://forum.multitheftauto.com/forum/127-programação-em-Lua/ @Sh4d00w
  6. Não faça kick, você tem muitas alternativas em vez disso. Provavelmente você queira fazer um meio de evitar que o jogador com instabilidade na conexão cause problemas para o server, você pode usar getNetworkStats para fazer trigger somente com conexão boa ou dar um setElementData no player com má conexão e usar verificações nos seus scripts. Não é difícil ocorrer instabilidades na rede, e não espere que esses kicks sejam casos raros, e isso também pode refletir na perda de jogadores por conta de kicks gratuitos.
  7. Por questão de lógica, é impossível um valor ser dois ao mesmo tempo. É como estar fazendo: local valor = 10 if valor == 10 and valor == 11 then end Com o or já está certo, basta você puxar novamente o valor com getElementData(p, "char.factionID") para saber qual dos dois números entrou no bloco.
  8. https://forum.multitheftauto.com/topic/120766-erro-cd09-and-cd16-pt-breng/?do=findComment&comment=967250
  9. Fora os erros mencionados acima, você também pode evitar esse setElementData que de forma desnecessária vai utilizar rede para atualizar no servidor. Em vez disso você pode usar uma simples variável como a do próprio botão. A função 'openButton' deveria ficar assim: function openButton() if botao then outputChatBox("| ERRO | O botão já está aberto.") else outputChatBox("Você abriu o botão.") showCursor(true) botao = guiCreateButton(0.5, 0.5, 0.09, 0.05,"Enviar mensagem", true) botaoedit = guiCreateEdit(0.59, 0.5, 0.15, 0.05, "Escreva uma mensagem aqui.", true) guiEditSetMaxLength(botaoedit, 37) addEventHandler("onClientGUIClick", botao, onClickButton, false) -- use 'false' depois da função se o evento for adicionado só para 1 único elemento end end addCommandHandler("abrirbotao", openButton) E o comando de 'tirar': function breakButton() if botao and isElement(botao) then -- verificar se existe o botão, isto é, ele está na tela destroyElement(botao) -- remover elemento destroyElement(botaoedit) botao = nil -- limpar referência na memória botaoedit = nil showCursor(false) outputChatBox("Botão e edit removidos") else outputChatBox("Erro: O Botão não está na tela, use /abrirbotao") end end addCommandHandler("tirar", breakButton) Função do "onClientGUIClick": function onClickButton(button) if (button == "left") then -- aqui se refere ao botão do mouse que vc clicou, não o botão do jogo showCursor(false) local texto = guiGetText(botaoedit) if texto == "" then -- essa condição verifica se o campo de edição está vazio, se sim notifica o jogador return outputChatBox("Digite algum texto!") end outputChatBox(texto) destroyElement(botao) destroyElement(botaoedit) -- vc também pode usar source aqui, a 'source' deste evento é o elemento da GUI clicado, neste caso, o botão botao = nil botaoedit = nil --[[ Em vez de fazer sumir o botão/edit, irei destruir os elementos, vc pode optar por isso quando por exemplo criar poucos elementos cegui e quiser uma otimização ]] end end (leia os comentários pelo código) (código não-testado)
  10. https://wiki.multitheftauto.com/wiki/O_arquivo_Meta
  11. Bans de servidor não tem como ser resolvido pelo MTA, por favor contate os admins de tal servidor em relação ao seu problema. Busque pelo fórum/discord ou um contato direto com um staff. @MandelaBranco
  12. I'll answer you in our native language: Dá uma olhada nesse post e sigas as etapas nos links: Também certifique-se que nenhum programa esteja impedindo o funcionamento do MTA e que sua internet não esteja com nenhum problema.
  13. getTickCount vai retornar sempre um valor diferente, a cada execução, pois ele retorna o tempo em milissegundos desde que o sistema do servidor foi iniciado (clientside o do sistema do cliente). Então isto: local tick = getTickCount() No onClientResourceStart, vai guardar o tempo do momento que o onClientResourceStart ocorrer. É como um cronômetro, você aperta ele e fazendo uma analogia, a variável tick = getTickCount é executada. Então você para esse cronometro e você quer saber quanto tempo se passou, então terá de fazer o seguinte, já tendo o 'tick' com o tempo em que o cronômetro foi ativado: tempo_decorrido = getTickCount() - tick print("se passaram ".. tempo_decorrido .." milissegundos" ) * Lembrando que getTickCount() sempre será maior que o 'tick' armazenado anteriormente. Então: tick-getTickCount() É uma forma equivocada de subtrair, isso vai retornar um valor negativo. Não sei se conseguiu entender, mas é essa lógica que está no código. if getTickCount()-tick > 20000 then --[[ Subtrai o tempo atual com o tempo armazenado na variável 'tick' e verifica se a diferença é de 20000ms (20 segundos) Se for, armazena novamente getTickCount na variável 'tick' e esse ciclo sempre irá se repetir ]] Quanto a este trecho: imgAtual = (imgAtual == imagensTotal and 1) or (imgAtual + 1) É uma simplificação de uma condição if (operação ternária com and, or). Com if statements ficaria assim: if imgAtual == 2 then imgAtual = 1 else imgAtual = imgAtual+ 1 end imgAtual == imagensTotal Isso representa uma comparação, e irá retornar uma boolean (true/false) Aplicando no exemplo do meu código, se for true imgAtual irá receber 1 or (se não for) imgAtual terá o valor de imgAtual + 1 Vai retornar uma interger (número inteiro). Por isso lá no dxDrawImage estou convertendo para uma string, que seria "1.png" imagem com o nome 1, extensão png. Se suas imagens são na sequencia img1.png, img2.png basta você fazer um tostring da forma que o Lord Henry mostrou.
  14. Lembre-se de ver os tópicos fixados pelo fórum, vai responder suas perguntas futuras e te ajudar a ter um entendimento de como aqui e o MTA funciona. https://forum.multitheftauto.com/topic/116681-informações-úteis-scriptingconfiguraçõestutoriais-para-o-mta/
  15. O código acima deve ser server-side, lembre-se de deixar no meta.xml type="server" e dar ACL para o resource.
  16. Aqui um exemplo com a lógica: local imagensTotal = 2 local imgAtual = 1 local tick = getTickCount() -- isto dentro do onClientRender if getTickCount()-tick > 20000 then tick = getTickCount() imgAtual = (imgAtual == imagensTotal and 1) or (imgAtual + 1) end Que ficaria assim: local imagensTotal = 2 local imgAtual = 1 addEventHandler("onClientResourceStart", resourceRoot, function() local tick = getTickCount() addEventHandler("onClientRender", root, renderImgBackground) end) function renderImgBackground() if getTickCount()-tick > 20000 then tick = getTickCount() imgAtual = (imgAtual == imagensTotal and 1) or (imgAtual + 1) end dxDrawImage( x, y, width, height, tostring(imgAtual)..".png" ) end Neste resource você vai precisar dar prioridade no download. Coloque no meta, por exemplo: <download_priority_group>10</download_priority_group>
  17. valor = 1000 if player and getPlayerMoney(player) >= valor then local id = tonumber(id) local ammo = tonumber(ammo) giveWeapon(player,id,ammo) takeWeapon(source,id,ammo) takePlayerMoney(player, valor) end ^ Exemplo
  18. Veja o comentário que deixei na linha 8. Mova destroyElement(finalm2) para o timer depois do removeEventHandler.
  19. client é uma variável predefinida que só é usada no lado server. Tente isto: function Dxcinto() dxDrawText("Oi", screenW * 0.3873, screenH * 0.8060, screenW * 0.6186, screenH * 0.8503, tocolor(254, 209, 0, 255), 1.50, "default-bold", "center", "center", false, false, false, false, false) end function Pcinto (bool) if bool and getElementData(source, "Cinto") == false then if dxVisivle ~= true then addEventHandler("onClientRender", root, Dxcinto) dxVisivle = true end elseif bool ~= true and getElementData(source,"Cinto") then if dxVisivle then removeEventHandler("onClientRender", root, Dxcinto) dxVisivle = false end end end addEvent("PCinto", true) addEventHandler("PCinto", root, Pcinto) Server: function entrouv (thePlayer, seat, jacked) triggerClientEvent(thePlayer, "PCinto", thePlayer, eventName == "onVehicleEnter") end addEventHandler ( "onVehicleEnter", getRootElement(), entrouv ) addEventHandler ( "onVehicleExit", getRootElement(), entrouv )
  20. Normalmente vai dentro do trecho da função de dominar, vai depender da sua lógica definida no código. Se tiver alguma dificuldade, posta aqui seu código.
  21. onVehicleExit Faz o trigger nesse evento e para 'remover o dx' use removeEventHandler "onClientRender" Esse código também poderia ser feito clientside com onClientVehicleEnter e onClientVehicleExit.
  22. Tá falando do mapa F11 ou o de teleport do freeroam? No F11 não tem nada que por padrão faça mostrar os players no F11.
  23. Tente: function entrega2(hitElement, matchingDimension ) if getElementType(hitElement) ~= "player" then return end local v = getPedOccupiedVehicle(hitElement) if v and getElementData(v,"Carregado") == true then setElementFrozen(v,true) outputChatBox("Espere o veículo ser descarregado!",hitElement,0,0,150) setElementData(v,"Carregado",false) destroyElement(finalm2) -- se "finalm2" for a marker deste evento source vai causar erro destroyElement(blip2) setTimer(function (marker) if not (isElement(hitElement)) then return end if isElementFrozen(v) then setElementFrozen(v,false) givePlayerMoney(hitElement,math.random(1500,3500)) removeEventHandler("onVehicleExit",marker,remove2) -- certifique-se que a função 'remove2' esteja definida end end,3500,1,source) removeEventHandler("onMarkerHit",source,entrega2) end end
  24. Veja se o debug mostra algum erro (/debugscript 3) @filmac
  25. source must be a reference to the player element. Show your current code here please.
×
×
  • Create New...