MRXBBC Posted April 1, 2020 Share Posted April 1, 2020 Tem algum meio pra que o shader seja visivel pra o outro player, por exemplo eu fiz um script de modificação de arma, mas só que a customização só aparece para o proprio player, teria como deixar visivel para os dois? function ReplaceWeapon() txd = engineLoadTXD('m4.txd', 356) engineImportTXD(txd, 356) dff = engineLoadDFF('m4.dff', 356) engineReplaceModel(dff, 356) end addEventHandler( 'onClientResourceStart', getResourceRootElement(getThisResource()), ReplaceWeapon) local tTextures = {} local pShaders = {} addEventHandler( "onClientResourceStart", resourceRoot, function() tTextures["M4A1[057]"] = dxCreateTexture("image1.png") end ) addCommandHandler( "t", function() applyShader( tTextures, localPlayer ) end ) addCommandHandler( "v", 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 -- end end Link to comment
Gw8 Posted April 1, 2020 Share Posted April 1, 2020 cara não sei se vou conseguir te ajudar porque minha especialidade é race certo, mas se fosse race seria isso local lightsShader = {} for i=1,6 do local shader = dxCreateShader("lights/lights.fx") local texture = dxCreateTexture("lights/"..i..".png","dxt3") dxSetShaderValue(shader,"gTexture",texture) lightsShader[i] = shader end function setLight(vehicle,id) engineApplyShaderToWorldTexture(lightsShader[id],"vehiclelights128",vehicle) engineApplyShaderToWorldTexture(lightsShader[id],"vehiclelightson128",vehicle) end function loadVehicleCustoms(vehicle) local player = vehicle:getController() if player then if player:getData("lightID") then setLight(vehicle,tonumber(player:getData("lightID"))) end end end addEventHandler("onClientVehicleEnter",root, function () loadVehicleCustoms(source) end ) player:setData("lightID",5) no seu caso voce precisa setar um elementData nos players que vao usar o shader e escolher um evento tipo onClientElementStreamIn ou onClientElementStreamOut pra fazer ele aparecer. Link to comment
MRXBBC Posted April 3, 2020 Author Share Posted April 3, 2020 On 01/04/2020 at 11:47, Gw8 said: cara não sei se vou conseguir te ajudar porque minha especialidade é race certo, mas se fosse race seria isso local lightsShader = {} for i=1,6 do local shader = dxCreateShader("lights/lights.fx") local texture = dxCreateTexture("lights/"..i..".png","dxt3") dxSetShaderValue(shader,"gTexture",texture) lightsShader[i] = shader end function setLight(vehicle,id) engineApplyShaderToWorldTexture(lightsShader[id],"vehiclelights128",vehicle) engineApplyShaderToWorldTexture(lightsShader[id],"vehiclelightson128",vehicle) end function loadVehicleCustoms(vehicle) local player = vehicle:getController() if player then if player:getData("lightID") then setLight(vehicle,tonumber(player:getData("lightID"))) end end end addEventHandler("onClientVehicleEnter",root, function () loadVehicleCustoms(source) end ) player:setData("lightID",5) no seu caso voce precisa setar um elementData nos players que vao usar o shader e escolher um evento tipo onClientElementStreamIn ou onClientElementStreamOut pra fazer ele aparecer. Mano tem como vc me explicar melhor? n entendi muito bem Link to comment
MRXBBC Posted April 4, 2020 Author Share Posted April 4, 2020 4 hours ago, MRXBBC said: Mano tem como vc me explicar melhor? n entendi muito bem . Link to comment
Other Languages Moderators Lord Henry Posted April 4, 2020 Other Languages Moderators Share Posted April 4, 2020 Não entendo de shaders. 1 Link to comment
MRXBBC Posted April 4, 2020 Author Share Posted April 4, 2020 2 minutes ago, Lord Henry said: Não entendo de shaders. kkkkkkkkkkkkkkkkkkk Link to comment
DNL291 Posted April 5, 2020 Share Posted April 5, 2020 Como o Gw8 disse, faça a sync do shader com elementData, eu criei o código que vai fazer a sync para todos players, se quiser que seja para alguns você terá que editar. Código: pShaders = {} tTextures = {} addEventHandler( "onClientResourceStart", resourceRoot, function() tTextures["M4A1[057]"] = dxCreateTexture("image1.png") end ) addCommandHandler( "t", function() applyShader( tTextures, localPlayer, true ) end ) addCommandHandler( "v", function() removeShader( localPlayer, true ) end ) function applyShader( t, player, sync ) 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 if sync then setElementData(player, "wTexChange", true) end end end function removeShader( player, sync ) if pShaders and isElement(player) then for _, t in pairs(pShaders) do engineRemoveShaderFromWorldTexture( t[1], t[2], player ) end if sync then setElementData(player, "wTexChange", false) end end end addEventHandler( "onClientElementDataChange", root, function(theKey, _, newValue) if theKey == "wTexChange" and source ~= localPlayer then if newValue == true then applyShader( tTextures, source ) elseif newValue == false then removeShader( source ) end end end ) Além do mais eu não testei esse código, e o mais importante, que o Gw8 também citou, é fazer ativação/desativação do shader com os eventos onClientElementStreamIn e onClientElementStreamOut. 1 1 Link to comment
MRXBBC Posted April 6, 2020 Author Share Posted April 6, 2020 On 04/04/2020 at 23:58, DNL291 said: Como o Gw8 disse, faça a sync do shader com elementData, eu criei o código que vai fazer a sync para todos players, se quiser que seja para alguns você terá que editar. Código: pShaders = {} tTextures = {} addEventHandler( "onClientResourceStart", resourceRoot, function() tTextures["M4A1[057]"] = dxCreateTexture("image1.png") end ) addCommandHandler( "t", function() applyShader( tTextures, localPlayer, true ) end ) addCommandHandler( "v", function() removeShader( localPlayer, true ) end ) function applyShader( t, player, sync ) 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 if sync then setElementData(player, "wTexChange", true) end end end function removeShader( player, sync ) if pShaders and isElement(player) then for _, t in pairs(pShaders) do engineRemoveShaderFromWorldTexture( t[1], t[2], player ) end if sync then setElementData(player, "wTexChange", false) end end end addEventHandler( "onClientElementDataChange", root, function(theKey, _, newValue) if theKey == "wTexChange" and source ~= localPlayer then if newValue == true then applyShader( tTextures, source ) elseif newValue == false then removeShader( source ) end end end ) Além do mais eu não testei esse código, e o mais importante, que o Gw8 também citou, é fazer ativação/desativação do shader com os eventos onClientElementStreamIn e onClientElementStreamOut. Muito obrigado, vou dá uma olhada aqui, pra ver se consigo fazer Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now