Jump to content

Ajuda com Clothes em shader.fx


Recommended Posts

-- Server 
function SetPedClothes( ped, clothesTexture, clothesModel, clothesType ) 
    local data =  
    { 
        ClothesTexture  = clothesTexture; 
        ClothesModel    = clothesModel; 
        ClothesType     = clothesType; 
    }; 
  
    setElementData( ped, "clothes", data ); 
  
    return addPedClothes( ped, clothesTexture, clothesModel, clothesType ); 
end 
  
-- Client 
  
function OnClientElementDataChange( dataName, oldValue ) 
    if getElementType( source ) == "player" and dataName == "clothes" then 
        local value = getElementData( source ); 
  
        if not value then 
            engineRemoveShaderFromWorldTexture( source.ClothesShader, value.ClothesModel, source ); 
  
            source.ClothesShader.Destroy(); 
  
            return; 
        end 
  
        if source.ClothesShader then 
            source.ClothesShader.Destroy(); 
  
            source.ClothesShader = null; 
        end 
  
        -- для каждого педа нужен свой шейдер, так как шейдер имеет свои значения под конкретного игрока! 
        -- сам шейдер конечно же нужно где-то хранить. 
        -- source.ClothesShader - это для примера. У себя реализуйте по своему. 
        source.ClothesShader = dxCreateShader( "files/shaders/replace.fx", 0, 0, true, 'ped' ); 
  
  
        -- Где-то и текстуру храните (какой-то конфиг в виде глобального массива или что там увас) 
        dxSetShaderValue( source.ClothesShader, "gTexture", ?.Texture ); 
  
        engineApplyShaderToWorldTexture( source.ClothesShader, clothesModel, source ); 
    end 
end 
  
-- Примерно так же и со стриммером 

 

Peguei esse código aqui pra trocar as roupas do CJ em shader.. 

Como faço pra usar esse código e trocar a camisa "tshirtwhite.txd" por exemplo?

Não sei nada de .lua,  me desculpem :/

Link to comment
9 hours ago, DNL291 said:

De onde você pegou? Você vai precisar do código .fx do shader pra funcionar.

Se você quer apenas substituir as texturas do cj, você pode usar as funções do exemplo nesta página da Wiki: https://wiki.multitheftauto.com/wiki/Clothing_Component_IDs

Peguei do proprio forum mta. Quero utilizar também pra colocar CJ de 3 cores.. Branco, negro etc

 

 

Aqui está o shader 

texture gTexture; 
technique TexReplace 
{ 
    pass P0 
    { 
        Texture[0] = gTexture; 
    } 
} 
  

 

Edited by Paantry
Link to comment
  • Other Languages Moderators

Não tenho conhecimento com shaders. Já tentei aprender aqui mas o pessoal (pelo menos da área internacional) não quis me dar uma luz.
Se tiver dúvidas quanto a programação Lua, dai posso te ajudar.

  • Like 1
Link to comment
  • Moderators

No tópico que você citou você vai precisar ter um entendimento básico pra conseguir fazer o resource. O arquivo de shader precisa estar funcionando e ligado tanto ao meta.xml quanto ao seu script.

Sobre o primeiro código do tópico mencionado, tem a tabela com as texturas que serão adicionadas com dxCreateTexture e o nome das texturas nas chaves. O shader é aplicado usando a função addClothes.

Você chegou a tentar fazer o resource? Sobre mudar a cor do CJ, você tem os arquivos das texturas?

Link to comment
14 hours ago, DNL291 said:

No tópico que você citou você vai precisar ter um entendimento básico pra conseguir fazer o resource. O arquivo de shader precisa estar funcionando e ligado tanto ao meta.xml quanto ao seu script.

Sobre o primeiro código do tópico mencionado, tem a tabela com as texturas que serão adicionadas com dxCreateTexture e o nome das texturas nas chaves. O shader é aplicado usando a função addClothes.

Você chegou a tentar fazer o resource? Sobre mudar a cor do CJ, você tem os arquivos das texturas?

Sim tenho as texturas, eu só não não sei aonde colocar a linha "dxCreatureTexture" dentro desse .lua por exemplo "tshirtwhite"

Link to comment
  • Moderators

Baixei um mod do CJ branco pra testar com o shader, e fiz o código em Lua que está funcionando, aqui está:


local tTextures = {}
local pShaders = {}

addEventHandler( "onClientResourceStart", resourceRoot,
	function()
		tTextures["cj_ped_torso"] = dxCreateTexture('cj_textures/torso.png')
		tTextures["cj_ped_legs"] = dxCreateTexture('cj_textures/legs.png')
		tTextures["cj_ped_head"] = dxCreateTexture('cj_textures/face.png')
		tTextures["cj_ped_feet"] = dxCreateTexture('cj_textures/foot.png')
	end
)

addCommandHandler( "branco",
	function()
		applyShader( tTextures, localPlayer )
	end
)

addCommandHandler( "normal",
	function()
		for _, t in pairs(pShaders) do
			engineRemoveShaderFromWorldTexture( t[1], t[2], localPlayer )
		end
	end
)

function applyShader( t, player )
	if type(t) == "table" and isElement(player) then
		for tex_name, tex_element in pairs(t) do
			local s = dxCreateShader('tex_replace.fx', 0, 0, true, 'ped')
			table.insert( pShaders, {s, tex_name} )

			dxSetShaderValue(s, 'gTexture', tex_element) 
			engineApplyShaderToWorldTexture(s, tex_name, player) 
		end
		
		--
		addPedClothes(player, "player_face", "head", 1)
		addPedClothes(player, "player_torso", "torso", 0)
		addPedClothes(player, "player_legs", "legs", 2)
		addPedClothes(player, "foot", "feet", 3)
	end
end

As texturas que usei foram do CJ sem roupa. Pra adicionar roupas vai precisar de um trabalho extra, como de modificar o painel do freeroam por exemplo pra carregar a textura correspondente à roupa selecionada. Eu deixei esses 2 comandos que é o de ativar o shader do CJ branco e o de voltar ao normal.

Sobre a modificação de uma roupa/accessório, é só fazer da mesma forma que fiz acima, este exemplo substitui uma roupa especifica do CJ:

addCommandHandler( "roupa",
	function()
		local s = dxCreateShader('tex_replace.fx', 0, 0, true, 'ped')
		ttt = dxCreateTexture('cj_textures/suit2grn.png')
		dxSetShaderValue(s, 'gTexture', ttt) 
		engineApplyShaderToWorldTexture(s, "cj_ped_torso", localPlayer)
		
		addPedClothes(localPlayer, "suit2grn", "suit2", 0)
	end
)

Pelo que percebi testando, o CJ tem 4 partes diferentes que são representadas por estas texturas: 'cj_ped_torso'; 'cj_ped_legs'; 'cj_ped_head'; 'cj_ped_feet'

Significa que independente da textura, você sempre aplica o shader numa dessas regiões que será o local do ped necessário para o shader funcionar.

Link to comment

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...