Jump to content

Edit a Ped DFF/TXD Match MTA Clothing Shader


Rekyuma

Recommended Posts

Posted (edited)

Hello sir, I need help understanding how to properly edit an existing GTA:SA ped DFF and TXD to add new clothing so that it works with my custom MTA:SA clothing shader system.

 

local shader = {}
local clothes = {}


local shaderData = [[
	texture tex;
	technique replace {
		pass P0 {
			Texture[0] = tex;
		}
	}
]]

local dxImg = dxDrawImage

function removeTexture ( player, type, model, txd )

    if not shader[player] then 
        shader[player] = {}
    end
    if not shader[player][type] then 
        shader[player][type] = {}
    end

    if isElement(shader[player][type]) then 
        destroyElement(shader[player][type])
        shader[player][type] = {}
    end

    local skin = getElementModel(player)
    if type then 
        if config.clothes[skin] then 
            if config.clothes[skin][type] then 
                local textureName = config.clothes[skin][type][model]
                if textureName then 
                    shader[player][type] = dxCreateShader(shaderData, 0, 0, false, 'ped')
                    engineApplyShaderToWorldTexture(shader[player][type], textureName, player)
                end
            end
        end
    end

end
addEvent('removeTexture', true)
addEventHandler('removeTexture', root, removeTexture)

addEvent('clearClothes', true)
addEventHandler('clearClothes', root, function( player )
    if shader[player] then 
        for i,v in pairs(shader[player]) do 
            if shader[player][i] and isElement(shader[player][i]) then 
                destroyElement(shader[player][i])
                shader[player][i] = {}
            end
        end
    end
end)

function applyTexture ( player, type, model, txd )

    if not type or not model or not txd then return end

    if not shader[player] then 
        shader[player] = {}
    end
    if not shader[player][type] then 
        shader[player][type] = {}
    end
    if not clothes[player] then 
        clothes[player] = {}
    end
    if not clothes[player][type] then 
        clothes[player][type] = {}
    end

    local skin = getElementModel(player)

    if config.models[skin] then 
        local image = 'src/textures/'..config.models[skin]..'/'..type..'/'..model..'/'..txd..'.png'
        if config.corpo[skin] then 
            if config.corpo[skin][type] then 
                image = config.corpo[skin][type]..'/'..model..'/'..txd..'.png'
            end
        end
        if config.clothes[skin][type] then 
            local textureName = config.clothes[skin][type]
            
            if fileExists(image) and textureName then 
                
                removeTexture ( player, type, model, txd )
                local texture = dxCreateTexture(image)
                dxSetShaderValue(shader[player][type], 'tex', texture)
                destroyElement(texture)
                clothes[player][type] = {model, txd}

            elseif model <= 0 then 
                removeTexture ( player, type, model, txd )
                clothes[player][type] = nil
            end
        end
    end

end


function applyTatto (player, type, model, txd)
    if not shader[player] then 
        shader[player] = {}
    end
    if not shader[player][type] then 
        shader[player][type] = {}
    end
    print('chegou aqui')

    print(type, model, txd)

    local skin = getElementModel(player)

    --if config.models[skin] then 
        if config.tattos[type] then 
            local model, txd = tonumber(model), tonumber(txd)
            if config.tattos[type][model] then 
                local image = 'src/textures/tattos/'..config.tattos[type][model]..'/'..txd..'.png'
                --if fileExists(image) then 

                    if config.tattosSettings[type] then 

                        local modelo = config.tattosSettings[type]
                        if clothes[player][modelo] then 

                        local genderFolder = (skin == 9) and 'female' or 'male'
                        local bg = 'src/textures/'..genderFolder..'/'..modelo..'/'..clothes[player][modelo][1]..'/'..clothes[player][modelo][2]..'.png'

                            if fileExists(bg) then 

                                print('chegou aquii 4')
                                local texture = dxCreateRenderTarget(512, 512)
                                dxSetRenderTarget(texture)
                                dxImg(0, 0, 512, 512, bg)
                                dxImg(0, 0, 512, 512, image)
                                dxSetRenderTarget()
                                local render = function ()
                                    dxDrawImage(0, 0, 512, 512, texture)
                                end
                                addEventHandler('onClientRender', root, render)
                                setTimer(function()
                                    removeEventHandler('onClientRender', root, render)
                                    dxSetShaderValue(shader[player][modelo], 'tex', texture)
                                    destroyElement(texture)
                                end, 5000, 1)



                            else
                                print('background nC#o encontrado')
                            end

                        end

                    else
                        print('sem tipo')
                    end
            else
                print('parou aq')
            end
        else 
            print('tipo de tattoo inexistente' )
        end
    --else
        --print('modelo invalido')
   --end
end

addEvent('setPlayerRoupa', true)
addEventHandler('setPlayerRoupa', root, function(player, type, model, txd)

    if not config.models[getElementModel(player)] then return end

    if type and model then 
        local model, txd = tonumber(model), tonumber(txd) or 0
        if model > 0 and txd > 0 then 
            applyTexture ( player, type, model, txd )
            if getElementModel(player) == 7 or getElementModel(player) == 9 then 
                if type == 'peito' or type == 'barriga' or type == 'ombro' or type == 'braco' or type == 'cotovelo' or type == 'coxa' or type == 'joelho' or type == 'calcanhar' or type == 'pe' then
                    if not getElementData(player, 'Pele') then 
                        setElementData(player, 'Pele', txd)
                    end
                end
            end

            if config.repair[getElementModel(player)] then 
                if config.repair[getElementModel(player)][type] then 
                    if config.repair[getElementModel(player)][type][model] then 
                        for i,v in pairs(config.repair[getElementModel(player)][type][model]) do
                            if i == 'peito' or i == 'barriga' or i == 'ombro' or i == 'braco' or i == 'cotovelo' or i == 'coxa' or i == 'joelho' or i == 'calcanhar' or i == 'pe' then 
                                local pele = getElementData(player, 'Pele') or 1
                                if clothes[player][i] then 
                                    pele = clothes[player][i][2]
                                end
                                applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], pele )
                            else
                                if clothes[player][i] then 
                                    applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], clothes[player][i][2] )
                                else
                                    applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], 1 )
                                end
                            end
                        end
                    end
                end
            end
        else
            removeTexture ( player, type, model, txd )

            if config.repair[getElementModel(player)] then 
                if config.repair[getElementModel(player)][type] then 
                    if config.repair[getElementModel(player)][type][model] then 
                        for i,v in pairs(config.repair[getElementModel(player)][type][model]) do
                            if i == 'peito' or i == 'barriga' or i == 'ombro' or i == 'braco' or i == 'cotovelo' or i == 'coxa' or i == 'joelho' or i == 'calcanhar' or i == 'pe' then 
                                local pele = getElementData(player, 'Pele') or 1
                                if clothes[player][i] then 
                                    pele = clothes[player][i][2]
                                end
                                applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], pele )
                            else
                                if clothes[player][i] then 
                                    applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], clothes[player][i][2] )
                                else
                                    applyTexture ( player, i, config.repair[getElementModel(player)][type][model][i], 1 )
                                end
                            end
                        end
                    end
                end
            end
        end
    end

end)


addEventHandler('onClientResourceStart', resourceRoot, function()
        
    setTimer(function()
        if getElementData(localPlayer, 'ID') then 
            triggerServerEvent('loadClothesNUMIDIA', localPlayer, localPlayer)
        end
    end, 10000, 1)

end)

 

Edited by Rekyuma

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...