Jump to content

Ajuda com Clothes em shader.fx


Recommended Posts

Posted
-- 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 :/

Posted (edited)
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
  • Other Languages Moderators
Posted

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
Posted

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?

Posted
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"

Posted

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.

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