Jump to content

Rakashy

Members
  • Posts

    97
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Rakashy

  1. Bom, aí está a base do server-side. Agora crie um client-Side com dxDraw para fazer a tela preta com msg e chame ela aonde está indicado

    local PlayersCaidos = {}
    
    addEventHandler("onPlayerWasted", root, function()
        if getElementData(source, "CAIDO") == true then return end
        setElementHealth(source,10)
        setElementData(source, "CAIDO", true)
        triggerClientEvent("EVENTO QUE INICIA A TELA PRETA COM MSG", source)
        PlayersCaidos[source] = setTimer(function()
            setElementData(source, "CAIDO", false)
            triggerClientEvent("EVENTO QUE FINALIZA A TELA PRETA COM MSG", source)
            PlayersCaidos[source] = nil
        end, 2*60000, 1)
    end)

     

  2. Você pode utilizar setElementData(), e getElementData() para isso. Para Adições você utiliza 
     

    setElementData(ElementPlayer, "ELEMENTBANCO", getElementData(ElementPlayer, "ELEMENTBANCO") + VALOR ADICIONADO)

    Para remoção você utiliza :
     

    if getElementData(ElementPlayer, "ELEMENTBANCO") - VALOR REMOVIDO >= 0 then
    	setElementData(ElementPlayer, "ELEMENTBANCO", getElementData(ElementPlayer, "ELEMENTBANCO") - VALOR REMOVIDO)
    else
    	Mensagem("Você não pode remover esta quantidade de dinheiro")
    end

    Te dei os meios, não é algo difícil de se fazer, mas você precisara criar uma base em dx para o banco. Boa sorte!

  3. Bom, gostaria de saber se as animações personalizadas impedem a movimentação do ped ou se existe algo a se fazer para contornar isso. O que acontece é que mesmo utilizando uma animação que permita a movimentação do ped como base, ao inserir no jogo com engineLoadIFP() o personagem simplesmente não se move, ele fica "girando", você aperta as teclas de movimentação mas não sai do lugar. Antes que alguém diga da animação "crry_prtial" eu utilizei justamente ela como base, e para terem uma ideia, se você pegar ela original e carregar por fora com o engineLoadIFP sem alterar NADA, ela tbm fica "bugada" impedindo a movimentação, girando apenas os eixos rotacionais do ped.

  4. local Contas = dbPoll(dbQuery(database, "SELECT * FROM Contas WHERE username = ?", USUARIO), -1) -- Substitua pelos dados da sua DB Connection
    		  if type ( Contas ) == 'table' and #Contas == 0 or not Contas then -- se não houver o usuário na tabela então ele execulta as funções abaixo
              -- o que irá executar caso o usuário não exista
              else
              -- o que irá executar caso o usuário já exista.
    end

    Se ajudei da um UP aí, o código é funcional, e fácil, utilizo para fazer algumas verificações em scripts meus.

  5. Então, estou desenvolvendo uma scroll bar para meu inventário e estou com um problema para fazer os itens desaparecerem conforme a barra é rodada, já está funcional, pra cima/baixo, só que mesmo colocando o dxSetRenderTarget() os itens continuam subindo/descendo infinitamente, sem desaparecer da tela, alguém pode me dar uma força aí ? Sei que provavelmente é algo besta, más quem puder ajudar, agradeço

    O que acontece : ao invés de os itens sumirem ao sair do target render, eles continuam aparecendo, mesmo se eu subir ou descer a scroll

    spacer.png


    Código :

     

    local x, y = guiGetScreenSize() 
    local renderBox = dxCreateRenderTarget(606, 531, true)  
    local offset = 0 
    
    if renderBox then
                dxSetRenderTarget( renderBox, true )   
                -- ITENS QUE QUERO QUE RENDERIZEM DENTRO DA BOX
                dxDrawRectangle(514*sx  + Slot_X * (120*sx), 518*sy + Slot_Y * (130*sy)+offset, 116*sx, 28*sy, tocolor(5, 0, 2, 105), true)
      
                dxDrawImage(528*sx + Slot_X * (120*sx), 440*sy + Slot_Y * (130*sy)+offset, 75*sx, 70*sy, "gfx/items/"..tostring(value.img)..".png", 0, 0, 0, tocolor(255, 255, 255, 255), true)
      
                dxDrawText(tostring(value.nome), 542*sx + Slot_X * (120*sx), 525*sy + Slot_Y * (130*sy)+offset, 502*sx, 308*sy, tocolor(255, 255, 255, 255), 1.00*sy, "default", "left", "top", false, false, true, false, false
      
                dxDrawText(tonumber(value.peso), 516*sx + Slot_X * (120*sx), 425*sy + Slot_Y * (130*sy)+offset, 540*sx, 310*sy, tocolor(255, 255, 255, 255), 1.00*sy, "default", "left", "top", false, false, true, false, false)
                --FIM ITENS QUE RENDERIZAM
                dxSetRenderTarget()
                -- DRAW RENDERBOX
                dxDrawImage(509*sx, 423*sy, 606*sx, 531*sy, myRenderTarget,0,0,0, tocolor(255,255,255,0))
    end

     

  6. addEventHandler("onResourceStart",resourceRoot,
    function()
      local IP = getServerConfigSetting("serverip") -- puxa o IP do servidor
      local Script = getResourceName(getThisResource())
    	if isObjectInACLGroup( "resource." .. Script, aclGetGroup ( "Admin" ) ) then -- Verifica se o script está na ACL ADM
            ProtecaoConnect = dbConnect( "mysql", "dbname=NOME DO BANCO DE DADOS;host=URL OU IP DE CONEXÃO", "USUÁRIO", "SENHA" )
    	      local Dados = dbPoll(dbQuery(ProtecaoConnect, "SELECT * FROM (Tabela que contém os ips) WHERE IP = ?", IP), -1) -- Puxa os dados de IPS
    		  if type ( Dados ) == 'table' and #Dados == 0 or not Dados then -- Se não houver resultado para o IP ele da stop no script
    			outputDebugString("#33FF58[PROTEÇÃO] #DA1B1BEndereço IP Não autorizado!")        
    			stopResource(getThisResource())
    		    else -- Caso o resultado retorne igual a 1 (O Ip estiver na db) então ele autoriza o script
    			    outputDebugString("#33FF58[PROTEÇÃO] #DA1B1BEndereço IP Autorizado com #33FF58sucesso#DA1B1B!")
    		  end
    	else
    	    outputDebugString("Adicione o resource a ACL ADMIN para utilizar!")
    		cancelEvent(true)
        end
    end) -- Necessário colocar o script na acl ADM para iniciar.
    
    -- Verificação simples que checa a conexão com o banco de dados
    function checkConnection()
    	if not ProtecaoConnect then
    		outputDebugString("Não foi possível verificar a conexão MYSQL com a proteção, o script será encerrado!")
    		stopResource(getThisResource())
        end
    end
    setTimer(checkConnection, 60000, 0)

    Basta criar o banco de dados e adicionar os endereços IP que deseja, ele verifica se o IP está na tabela, se não estiver cancela o script. Se ajudei, de um agradecimento, tmj.

    • Like 1
  7. Opa, to com um probleminha e queria uma opinião de pessoas que entendem melhor do que eu..
    Estou desenvolvendo um sistema de inventário baseado no sistema do FiveM, o sistema possui 5 slots rápidos e meu intuito era arrastar os itens do inventário para esses slots rápidos que seriam puxados com bind 1 ao 5, o problema é que não estou conseguindo fazer o sistema de arrastar funcionar como devia, ao invés de arrastar 1 item, ele puxa todos, como na imagem abaixo :
    spacer.png

    Só pra esclarecer, os itens do inventário são puxados de um arquivo config, e no dx são gerados da seguinte forma
     

    dxDrawImage(x + Slot_X * (120*sx), y + Slot_Y * (130*sy), w, h, "gfx/items/"..tostring(value.img)..".png"000tocolor(255255255255), true


    O valor x, y, w, h são referentes a posição do mouse. Como os itens são gerados no inventário a partir de uma tabela, acho que está dando conflito, e acaba puxando todas as imagens ao invés de apenas 1, abaixo o código de mover que estou utilizando :

     

    screenW, screenH = guiGetScreenSize()
     
    x,y,w,h = 548,438,75,70  -- Aqui seria a posição do mouse, no caso teria que referenciar essa posição com todos os ícones gerados no inventário, e por estar uma posição fixa, creio que seja o motivo pra estar puxando todos os ícones.
     
    slots = {
        {179184143163, imgx = 200, imgy = 200},
        {364184143163, imgx = 385, imgy = 200}
    }
    showCursor(true)
     
    temp = {}
     
    movendo = false
    addEventHandler("onClientClick", root, function(bs)
        if b == "left" then
            if s == "down" then
                if isMouseInPosition(x,y,w,h) then
                    movendo = true
                    addEventHandler("onClientRender", root, Mover)
                end
            else
                if movendo then
                    movendo = false
                    --> criando uma variavel local para uso mais a frente
                    local inSlot = false
                    --> loop para verificar se eu soltei o item dentro de algum slot
                    for i,v in ipairs(slots) do
                        --> verificar se o mouse estava dentro de algum slot quando foi solto
                        if isMouseInPosition(v[1], v[2], v[3], v[4]) then
                            --> define a variavel para saber que o item foi para um novo slot
                            inSlot = true
                            --> define a posição da imagem do item para a posição correta dentro do novo slot
                            x,y = v.imgx, v.imgy
                            break
                        end
                    end
                    --> verificar se a imagem não foi solta em um slot e retorna para o local de origem
                    if not inSlot then
                        x,y = temp[1], temp[2]
                    end
                    --> zerar tudo para o proximo item ser movido
                    temp = {}
                    difx, dify = nil,nil
                    removeEventHandler("onClientRender", root, Mover)
                end
            end
        end
    end)
     
    difx, dify = nil,nil
    function Mover()
        --> salva a posição inicial do item para caso seja necessario voltar para a origem
        if #temp == 0 then temp[1], temp[2] = x, y end
        --> obtem a posição do mouse (isto retorna em relativo)
        local mx, my = getCursorPosition()
        --> verifica se não diferença deifinida e define
        if not difx then
            difx, dify = (screenW * mx) - x, (screenH * my) - y
        end
        --> define a posição com a diferença
        local cx, cy = (screenW * mx) - difx, (screenH * my) - dify
     
        --> define a posição da imagem com os calculos feitos
        x, y = cx, cy
    end
     
    function isMouseInPosition ( xywidthheight )
        if ( not isCursorShowing( ) ) then
            return false
        end
        local sx, sy = guiGetScreenSize ( )
        local cx, cy = getCursorPosition ( )
        local cx, cy = ( cx * sx ), ( cy * sy )
        
        return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) )
    end
  8. On 02/06/2021 at 20:30, M4DD NØG said:

    Já testou essas linhas comentadas no serverside ?

    Elas seguem a mesma logica de codificação do arquivo, porem com decodeString no lugar de encodeString
     

        -- file = fileCreate(path..'rw')
            -- fileWrite(file, decodeString('tea', FirstPart, { key = key })..SecondPart)
        -- fileClose(file)

    Eu vi e tentei seguir a mesma lógica, porém sem sucesso também... Poderia me dar algum exemplo ?

  9. 18 hours ago, Junior Lasted said:

    se você possui a senha é facil , só utilizar o exemplo do script ...

     

    
    function FileUnProtection(path, key)
    	local file = fileOpen(path)
    	local size = fileGetSize(file)
    	local FirstPart = fileRead(file, 65536 + 4)
    		fileSetPos(file, 65536 + 4)
    	local SecondPart = fileRead(file, size - (65536 + 4))
    	fileClose(file)
    
    	return string_padding_dword( decodeString('tea', FirstPart, { key = key }) )..SecondPart
    end
    
    local txd = engineLoadTXD( FileUnProtection('infernus.txd', 'GT4BAE') )
    engineImportTXD(txd, 401)
    
    local dff = engineLoadDFF( FileUnProtection('infernus.dff', 'GT4BAE') )
    engineReplaceModel(dff, 401)

    Então brother, eu tentei desta forma, porém o arquivo decodificado não é gerado, entende ? ele continua codificado, por isso vim pedir ajuda aqui, 

    Eu não quero apenas substituir o modelo dentro do jogo, preciso decodificar o arquivo pra poder conseguir edita-lo novamente pelo 3dsMax. Entendeu ? Colocar ele no jogo eu consigo tranquilo, pq como eu disse tenho a senha, então só dou um "fileUnprotection("arquivo.dff", senha) e consigo carregar no jogo

  10. 5 minutes ago, AllissonD said:

    esse custom weapons vou querer muito aprender ele e da viatura tbm to até pensando em criar 2 topicos sobre trocas de .dff e txd das armas e outro sobre txd de carros

    Eu já te dei a faca e o queijo brother. Você pode utilizar o código que te enviei para TODOS, roupas, veículos, objetos, basta trocar, no caso do veículo, ao invés da variável "ped" você utiliza "vehicle" e o restante é jogo de Textura, substitui o nome da textura, para saber qual substituir basta abrir o TXD e ver o nome da textura. 

    Para objetos use a variavel "object". E para roupas a variavel e "ped" também pois o elemento está integrado ao jogador.

    Um exemplo de como fazer um sistema de armas :

    Pegue o modelo de uma arma limpa, sem nenhum attach, pegue o modelo de uma arma com mira, remova a mira dela pelo 3dsMax e coloque no modelo da arma "Limpa". Faça isso com outras partes, carregador, silenciador, basicamente você vai montar um modelo de uma arma completa com todos os attachs utilizando partes de outros modelos, depois jogue as texturas em cima de cada parte, mira, silenciador, carregador, etc... Exporte o dff, e pronto, vc já pode brincar com as texturas utilizando este sistema, colocando texturas invisíveis em todos os attachs e dando a arma apenas com a textura padrão, e ai ao comprar uma mira por exemplo, vc adiciona a textura da mira ao modelo, não sou mt bom pra explicar mais espero que tenha entendido o conceito

    • Like 1
  11. 1 minute ago, AllissonD said:

    oloko, eu vi o seu video desse script fiquei impressionado com esse script

    Procure Rakashy no youtube e veja meus trabalhos com shader, hoje postei uma atualização do meu Custom de personagens, também tenho um sistema de skins de veiculos para Viaturas, e estou trabalhando em um custom de armas para adicionar Miras, silenciadores, carregadores, etc

    • Like 1
  12. Just now, AllissonD said:

    Obrigado mano, pela ajuda vou dar uma estudada e obrigado demais por ta me ajudando.❤️

    Pode usar ai e testar, vai funcionar certinho, ai é só replicar e alterar a textura pra ir adicionando skins, e não se esqueça de sempre desencadear esses eventos via server-side, pois se chamar o evento direto do client, a skin só irá alterar para você

    • Like 1
  13. function SetarSkin(thePlayer)
    local ShaderM4 = [[
        texture tex;
        technique replace {
            pass P0 {
                Texture[0] = tex;
            }
        }
    ]]
    
    local thePlayer = source
    local ShaderM4_RK = dxCreateShader(ShaderM4, 0, 0, false, "ped")
    local Texture_M4 = dxCreateTexture("Texturas/M4A1/M4A1-1.png") -- LOCAL AONDE ESTÁ O PNG DA TEXTURA
    engineApplyShaderToWorldTexture(ShaderM4_RK, "M4A1[057]", thePlayer) -- "M4A1[057]" é o nome da textura no .dff que vai substituir
    dxSetShaderValue(ShaderM4_RK, "tex", Texture_M4)
    end
    addEvent( "RK:DarM4A1-1", true)
    addEventHandler("RK:DarM4A1-1", getRootElement(), SetarSkin) -- Se chamar este evento com uma M4 na mão irá mudar a skin para o PNG citado.

    Está aí.. Prontinho pra você. Este vai do lado do client. Então apenas faça um esquema para dar trigger via serverside para a skin ficar visível à todos do servidor.
    De nada ;)

    Da um UP aí se ajudei

    • Like 1
  14.   setElementData(getRootElement(), "Carga", true) 

    Seu problema está ai.. Como boechat disse, não se usa elementData em "root" a não ser que queira desencadear algo para TODOS do servidor.
    Use o elemento referente ao player. No caso do lado do servidor, se da referência ao source, más tbm não se utiliza "source" como parâmetro de função, então faça referência ao jogador e chame a variável referente a ele. No seu caso parece ser "thePlayer", apenas substitua estes "getRootElement()" pelo player local e veja se resolve.

    On 19/05/2021 at 13:57, Jonas^ said:

    Não é necessário usar isto:

    
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT
    outputChatBox(" ", source) -- DÁ UM ESPAÇO EM BRANCO NO CHAT

    Para limpar o chat, basta usar:

    
    clearChatBox (source)

    Tem muita coisa errada nesse seu código, foi você mesmo que fez?

    Provavelmente sim, pode ver que existe MUITA coisa errada no código, coisa típica de quem está começando agora sem saber aonde está se metendo.... é normal errar, o que podemos fazer é aconselhar e guia-lo para o rumo certo, ai cabe a ele aprender ou não... Agora se for mais um daqueles que só vem aqui e esperam receber o código pronto, ai eu sinto muito pois não vai chegar muito longe.

  15. Então gente, nos últimos 4 meses venho desenvolvendo um sistema de customização de personagens, com sistema de fardas/mochilas/mascaras integrados, igual ao FiveM mesmo, e então resolvi ir atrás de meios de codificar meus arquivos de modelagem, foi aí que todo o problema começou...

    Acabei encontrando esse sistema aqui no forum mesmo searching for .dff .txd .col compiler - Scripting - Multi Theft Auto: Forums (mtasa.com) e tive sucesso para criptografar tanto dff quanto txd.

    Então aconteceu merd**. Acabei tendo um problema com meu HD de backup que queimou, até dei uma sumida aqui do forum por conta disso, desanimei bastante porque basicamente perdi MUITO trabalho, e os modelos originais estavam nele, e agora possuo apenas os modelos codificados. Ainda funcionam perfeitamente no meu script pois possuo a senha então apenas uso um "FileUnprotection" seguido da senha e eles carregam normalmente no jogo. A questão é que preciso editar o modelo masculino para corrigir um problema na bermuda e como está codificado não consigo mais acessar pelo 3dsMax.

    Minha pergunta é, existe alguma forma de decodificar estes arquivos novamente ? Lembrando que eu possuo a senha usada na codificação.

    Se alguém puder me dar alguma dica, aguardo resposta

  16. On 19/05/2021 at 08:43, Boechat said:

    Provavelmente você tem que dar um trigger com triggerClientEvent no lado do servidor para todos os players chamando a função de mudar a skin com o player que vai mudar de skin como parâmetro, assim o player vai mudar a skin dele em todos os clients.

    É exatamente isso mesmo, a gente que não tem tanta experiência na área as vezes passa uns sufoco besta né? eu igual doido tentando resolver os B.O pra no final ver que era algo tão simples... Consegui resolver todos os problemas tranquilamente quando parei pra ler com calma a wiki.. Obrigado pela ajuda, e pode encerrar o tópico.

  17. Tenho mais um problema e gostaria da ajuda de vocês, eu consigo substituir a textura da M4 tranquilamente, porém não estou conseguindo com outras armas, por exemplo, tentei com a Desert Eagle, e quando aplico a textura, a textura carregam porém não está alterando a skin da arma, tem algo que eu deva fazer no .dff da Desert Eagle para que ela aceite as texturas ? vi algo sobre ter que tirar o UV pra poder conseguir substituir as texturas, mais removendo o UV do .dff fica uma skin totalmente branca...A M4 eu consegui sem problemas pois encontrei o modelo da Arma já pronta para baixar, então não precisei modificar nada no .dff dela.

  18. function SetarSkin(thePlayer)
    local ShaderM4 = [[
        texture tex;
        technique replace {
            pass P0 {
                Texture[0] = tex;
            }
        }
    ]]
    
    local thePlayer = source
    local ShaderM4_RK = dxCreateShader(ShaderM4, 0, 0, false, "ped")
    local Texture_M4 = dxCreateTexture("image2.png") -- Textura
    engineApplyShaderToWorldTexture(ShaderM4_RK, "M4A1[057]", thePlayer)
    dxSetShaderValue(ShaderM4_RK, "tex", Texture_M4)
    end
    addEvent( "DarSkin", true)
    addEventHandler("DarSkin", getRootElement(), SetarSkin)

    Então mano, fiz desta forma e parece funcionar bem agora, pode dar uma olhada e me dizer se está de fato correto agora ?

×
×
  • Create New...