Jump to content

juaosilv

Members
  • Posts

    118
  • Joined

  • Last visited

Posts posted by juaosilv

  1. 2 minutes ago, asrzkj said:

    Creio eu que não exista um automático. Além do mais, desculpe a pergunta mas... qual é a dificuldade de apertar TAB?

    Nenhuma, mas eu to com código enorme bagunçado p organizar vai demorar um poucoo.

  2. 47 minutes ago, Lord Henry said:

    Indentação manual no notepad++.

    Seleciona as linhas e aperta TAB pra adicionar 1 nível de indentação.

    Pra recuar um nível de indentação, usa Shift+TAB.

    Ah não existe nenhum automático? 

  3. Oi, eu queria saber oq vocês usam pra identar/organizar um código . Em outras linguagens eu utilizo o visual studio e ele faz esse trabalho pra mim utiliizando uma extensão, mas com MTA ele não funciona por mais q eu instale uma extensão de .Lua.

     

  4. 5 minutes ago, Barradas said:

    Então basta por na script do velocímetro em qualquer lado isso?

     

     

    Não, você deve por no local aonde deseja que apareça a quantidade de gasolina do veiculo.

    Manda o código do script de gasolina e do velocimetro que irei adicionar pra vc.

  5. Você deve ver qual elementDate o script está usando e depois fazer um getElementData no velocimetro puxando o element da gasolina.

    Provavelmente deve ser "fuel", caso seja basta por no velocímetro:

    local vehicle = getPedOccupiedVehicle(getLocalPlayer()) -- identifica o veiculo q a pessoa tá (Provavelmente já deve ter isso no seu velocimetro)
    getElementData(vehicle, "fuel") -- puxa a elementDate do veiculo.

    caso não consiga, envie a client da gasolina e a client do velocimetro.

  6. 1 minute ago, Lord Henry said:
    
    addCommandHandler("testar", function()
    	start = getTickCount() -- Salva o momento atual para usar no cálculo do progresso da animação.
    	addEventHandler("onClientRender", root, interpolationRender) -- Inicia a primeira animação.
    	setTimer (function () -- Depois de 5 segundos, inicia a outra animação.
    		start2 = getTickCount() -- Salva o novo momento atual para usar no cálculo da outra animação. Não pode usar o start pois ele pertence a primeira animação.
    		addEventHandler("onClientRender", root, interpolationRender2)
    	end, 5000, 1)
    	setTimer (function () -- Depois de 10 segundos, para de renderizar tudo.
    		removeEventHandler("onClientRender", root, interpolationRender)
    		removeEventHandler("onClientRender", root, interpolationRender2)
    		start = nil
    		start2 = nil
    	end, 10000, 1)
    end)
    
    function interpolationRender()
        local now = getTickCount() -- A cada frame, pega o momento atual.
        local endTime = start + 3000 -- Duração dessa animação: 3 segundos. (momento do final = início + 3 segundos)
        local elapsedTime = now - start -- Tempo que já passou neste frame: momento de agora - momento que começou
        local duration = endTime - start -- Duração total da animação: momento do final - momento que começou
        local progress = elapsedTime / duration -- Progresso atual da animação: tempo que já passou dividido pela duração (pois o progresso é de 0 até 1)
    	if (progress > 1) then -- Impede de repetir a animação depois que ela concluir, mantendo o progresso em 1 se ele for maior.
    		progress = 1
    	end
        local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "OutElastic") -- Y vai de 0 até 165 dependendo do progresso atual.
        dxDrawImage(184, y, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- Draw a imagem com o valor do Y.
    end
    
    function interpolationRender2()
        local now = getTickCount()
        local endTime = start2 + 3000 -- Mesma coisa que o de cima, mas usa o start2 para os cálculos.
        local elapsedTime = now - start2
        local duration = endTime - start2
        local progress = elapsedTime / duration
    	if (progress > 1) then
    		progress = 1
    	end
        local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "InElastic") -- Esse efeito não parece fazer sentido. Mas está funcionando.
        dxDrawImage(184, y, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
    end
    

     

    Obrigado irei testar mais tarde, kkkk sobre o efeito não fazer sentido é pq eu to testando ai não botei o efeito que irei utilizar mesmo botei um aleatorio so pra testes.

     

  7. 5 minutes ago, Lord Henry said:

    Ta faltando parte do código. Isso que vc mandou só funciona dentro de uma função renderizadora.

    Editei, mas eu não coloquei pq eu vou utilizar em um login então to utilizando pra testes por botão, você aperta B e abre o dx tendeu. Pra quando ficar pronto eu por no login.

  8. 5 hours ago, Lord Henry said:

    Mostre o que vc tentou fazer.

    Desculpe a demora.

    function dxPrincipal()
    prog = math.min(prog+0.02,3) 
    cX,cY,cX = interpolateBetween(0, 0, 0, 0, 165, 0,prog,"OutElastic")
    dxDrawImage(184, cY, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- to executando esse na hora
    
    cX2,cY2,cX2 = interpolateBetween(0, 0, 0, 0, 165, 0,prog,"InElastic")
    dxDrawImage(184, cY, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- quero executar esse 5 segundos dps q executa o primeiro
    end

    Essas imagens seriam tipo, eu quero executar a primeira que é um fundo, a segunda é uma logo então depois q a primeira cair do "ceu" (por causa do efeito) depois de 5 segundos cai a segunda com outro efeito consegue entender mais ou menos?

    E outra duvida, depois como eu posso fazer pra imagem ficar flutuando lentamente, subindo e descendo. Obrigado pelo seu tempo!

  9. Olá, eu estou utilizando interpolateBetween para fazer alguns "efeitos" em alguns dx. Eu queria fazer vários interpolateBetween mas com um tempo oq eu posso fazer pra por exemplo, assim que o cara abrir o menu executar o interpolateBetween principal e de pois de 5 segundos executar outro interpolateBetween, tentei usar setTime mas a imagem ficou bugada/piscando.

  10. 16 minutes ago, Lord Henry said:

    DxDrawGifImage é uma função útil que não funciona com arquivo GIF. Ela apenas vai pegar uma série de imagens e renderizar uma depois a outra em cada frame.

    Você não vai usar um GIF e sim um monte de imagens (PNG, JPG, etc) com nome sequencial (imagem01.png, imagem02.png, imagem03.png).

    A questão de lagar vai depender do tamanho e resolução das suas imagens e a quantidade delas. O processamento vai ser igual (a princípio 1 imagem diferente por frame).

    Não tem uma forma melhor de executar uma imagem em forma de gif? não sei, algo próprio pra GIF? Ou a única solução caso eu queria fazer algo animado é essa.

  11. Eu tava treinando DX e me veio a duvida. Utilizar DxDrawGifImage é uma boa solução pra quem quer fazer algo animado? Tava dando uma olhada em tópicos em inglês e alguns falaram que não é uma boa opção pq laga e tals.

    Quem entende mais da função poderia esclarecer isso?

     

  12. Just now, Lord Henry said:

    Vc deve mudar no export pro nome do seu resource. ServerIP é o nome do meu resource de segurança.

    Eu já esperava que vc fosse dar Ctrl+C e Ctrl+V sem nem ler direito.

    kkkkkkkkkkk valeu, funcionou.

  13. On 19/06/2019 at 15:05, DNL291 said:

    Aqui @juaosilv

    Com relação ao cache=false, contanto que você não utilize isso em muitos scripts não tem problema, são poucos KBs e muitas vezes é imperceptível o download, mas sugiro você fazer isso só para os scripts que você acha de muita importância.

    Desculpa por reviver o tópico, mas eu fiz tudo como está nesse outro tópico mas ele da esse erro quando inicia:



    [13:55:58] ERROR: [EXTRA]/info/server.Lua:19: attempt to index upvalue 'expor
    ts' (a function value)
     

    Linha 19:

    addEventHandler( "onResourceStart", resourceRoot,
    	function()
    		if exports["seguranca"]:isServerAllowed() ~= true then - ESSA E A 19
    			cancelEvent( true )
    		end
    	end
    )

    O script seguranca:

    local bool = false
    local function isServerAllowed()
        return bool
    end
    
    fetchRemote( "http://checkip.dyndns.com/",
    	function( response )
    		if ( response ~= "ERROR" ) then
    			SERVER_IP = response:match( "<body>Current IP Address: (.-)</body>" ) or "MEUIP"
    			if ( SERVER_IP ~= "MEUIP" ) then -- seu IP vai aqui
    				return
    			end
    			bool = true
    		end
    	end
    )
    <meta>
        <script src="server.Lua" type="server" cache="false" />
        <export function="isServerAllowed" type="server" /> 
    </meta>

     

    Ele falou algo sobre o feath demorar p pegar o ip, acho que o erro pode ser isso mas não consegui resolver.

  14. Então, fiz um dx mas quando eu clico na função a baixa ela é executada duas vezes. Se eu adiciono um removeEventHandler na mesma função do eatPizza ele não duplica só executa uma vez, mas eu preciso que o dx fique aberto quando ele clicar pra executar essa função. Alguém tem ideia do que pode ser?

            if isCursorOnElement(590, 253, 163, 27) then 
                triggerServerEvent("eatPizza", localPlayer)  
    			end
    function isCursorOnElement( posX, posY, width, height )
      if isCursorShowing( ) then
        local mouseX, mouseY = getCursorPosition( )
        local clientW, clientH = guiGetScreenSize( )
        local mouseX, mouseY = mouseX * clientW, mouseY * clientH
        if ( mouseX > posX and mouseX < ( posX + width ) and mouseY > posY and mouseY < ( posY + height ) ) then
          return true
        end
      end
      return false
    end

     

     

  15. 14 hours ago, Lord Henry said:

    Teste com arquivos client-side maiores. Algumas imagens de alta resolução, áudios, texturas. As vezes o download até ocorreu, mas foi rápido demais e nem deu pra perceber.

    E sim, desligue a máquina antes de testar de novo.

    Existe algum tópico explicando um pouco mais sobre essa proteção por IP? Já que usando cache tem que baixar novamente sempre que entra no servidor vou utilizar proteção por ip.

  16. 1 hour ago, Jonas^ said:

    Apenas arquivos client-side's são baixados e executados no PC do cara, ou seja, se o script tiver 2 lados, server e client o script não vai funcionar, agora se for apenas client se o cara for esperto ele apenas adicionar no meta, sim é capaz de funcionar tranquilamente.

    --

    Para resolver isso, é bem simples, você pode simplesmente declarar cache=false no meta e claro compilar o arquivo quanto + segurança melhor, exemplo:

    
    <meta>
    	<info author="Jonas^" version="1.0" name="Staff Mode" type="script"/>
    	<script src="server.luac" type="server"/>
    	<script src="client.luac" type="client" cache="false"/>
    </meta>
    

    Pode ver que na linha do client tem o atributo cashe=false ou seja, ele não vai ser colocado na pasta no pc do cara, basicamente isso explicando a grosso modo.

    E tem a forma complexa, que é por proteção por IP, ou seja, os arquivos só vão startar naquele devido IP.

    Interessante, mais uma duvida. Caso eu bote esse cache ele vai baixar o arquivo novamente sempre que entrar no servidor? É tipo aquela proteção que alguns usam que quando o script é baixado ele é excluido da pasta. Pq eu quero evitar que a pessoa sempre que entre tenha que baixar novamente algum script.

  17. Olá, queria saber qual é a melhor forma de proteger meus scripts. Percebi que alguns estão sendo baixados na pasta principal de resources do MTA aquela que baixa todos os mods dos servidroes que você entra.

    Minhas duvidas são:

    Se eu por em .luac os arquivos ainda vão ser baixados? (Se sim, imagino que as pessoas possam usar, claro q compilado mas ainda sim ainda poderam usar?)

    Qual a melhor forma de eu proteger os scripts pra caso mesmo em luac seja possivel usar, no caso o que eu faria pra mesmo assim não ser possivel.

     

×
×
  • Create New...