Tony Scripter Posted March 17, 2021 Share Posted March 17, 2021 Olá pessoal boa noite, gostaria de sabe se e possivel eu ter mais de uma txd em 1 veiculo exemplo, tenho uma mercedes com textura branca, e quero dar um comando /cardrift, ai ele aplica uma textura de drift com cores etc, isso teria que mudar para visão de todos os players não so na do que digitou o comando Link to comment
Other Languages Moderators androksi Posted March 18, 2021 Other Languages Moderators Share Posted March 18, 2021 Olá. Sim, é possível. O único porém é que depende de como o carro foi feito. Às vezes pode ser difícil, às vezes pode ser bem simples. Abrindo a textura do veículo com algum programa de visualização, como o Magic TXD, por exemplo, dá pra saber mais ou menos como você iria aplicar uma textura. Uma vez que você sabe, estas funções serão necessárias: dxCreateShader dxCreateTexture engineApplyShaderToWorldTexture triggerClientEvent - para sincronizar com todos os jogadores. 1 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 12 hours ago, andr0xy said: Olá. Sim, é possível. O único porém é que depende de como o carro foi feito. Às vezes pode ser difícil, às vezes pode ser bem simples. Abrindo a textura do veículo com algum programa de visualização, como o Magic TXD, por exemplo, dá pra saber mais ou menos como você iria aplicar uma textura. Uma vez que você sabe, estas funções serão necessárias: dxCreateShader dxCreateTexture engineApplyShaderToWorldTexture triggerClientEvent - para sincronizar com todos os jogadores. Entendi então o veículo teria que ser adaptado para usar, mas seria muito difícil fazer esse script ? E essa adaptação ? Nunca utilizei essas funções tirando a triggerClientEvent Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 Sim, ele deveria ser adaptado. Não tenho experiência alguma com modelagem de veículos, mas o pessoal pode te ajudar lá no Discord oficial do MTA. Mas dando uma resposta bem superficial, pelo o que eu já vi nos canais de ajuda, não me parece ser algo de outro planeta. Sobre o script, para quem ainda tá na jornada é sim um pouco complicado entender. Comece a fazer, veja o que consegue. Traga as dúvidas para cá ou use o Discord para pedir ajuda. 1 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 Ok irei tentar fazer o script aqui vou ver se consigo importar para um carro padrão do proprio game para que fique mais facil, qualquer duvida irei retornar na comunidade. Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 44 minutes ago, andr0xy said: Sim, ele deveria ser adaptado. Não tenho experiência alguma com modelagem de veículos, mas o pessoal pode te ajudar lá no Discord oficial do MTA. Mas dando uma resposta bem superficial, pelo o que eu já vi nos canais de ajuda, não me parece ser algo de outro planeta. Sobre o script, para quem ainda tá na jornada é sim um pouco complicado entender. Comece a fazer, veja o que consegue. Traga as dúvidas para cá ou use o Discord para pedir ajuda. Duas pergunta andr0xy, como eu poderia testar o script para ver se está pegando para todos ?, outra coisa e possivel salvar a textura ? exemplo a pessoa deu o comando e depois ela nunca mais precisar dar o comando quando der spawn no veiculo novamente Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 Respondendo a primeira pergunta, usar o triggerClientEvent corretamente já é suficiente; segunda pergunta, sim, totalmente possível. Crie um ID para cada textura e salve-o numa tabela que teria o jogador indexado. Além do mais, é importante que você crie um cache server-side, para que, assim que os jogadores logarem no servidor, sincronizar com as texturas já ativas nos veículos. Sendo assim, quando o jogador logar, esse cache é enviado para o client-side e lá todas as texturas existentes seriam criadas. 1 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 38 minutes ago, andr0xy said: Respondendo a primeira pergunta, usar o triggerClientEvent corretamente já é suficiente; segunda pergunta, sim, totalmente possível. Crie um ID para cada textura e salve-o numa tabela que teria o jogador indexado. Além do mais, é importante que você crie um cache server-side, para que, assim que os jogadores logarem no servidor, sincronizar com as texturas já ativas nos veículos. Sendo assim, quando o jogador logar, esse cache é enviado para o client-side e lá todas as texturas existentes seriam criadas. Entendi você poderia me dar um exemplo desse cache no server ? Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 Seria mais ou menos desta forma: Spoiler local texturesCache = {} addCommandHandler("apply", function(player, _, textureID) local veh = getPedOccupiedVehicle(player) if veh and textureID then texturesCache[player] = {veh, textureID} -- Salvamos o veículo e o ID da textura end end) -- Assim que o jogador logar addEventHandler("onPlayerLogin", root, function() if #texturesCache > 0 then -- Checamos se de fato existe texturas criadas triggerClientEvent(source, "createTexturesCache", source, texturesCache) -- Então enviamos ao client-side, para criar apenas para o jogador que acabou de logar end end) -- Lembrando que é importante sempre anular o índice do jogador assim que ele sai do servidor addEventHandler("onPlayerQuit", root, function() if texturesCache[source] then -- Aqui também teria alguma lógica para remover a textura do carro deste jogador texturesCache[source] = nil end end) 1 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 8 hours ago, andr0xy said: Seria mais ou menos desta forma: Hide contents Bom eu apenas copiei esse codigo que você mandou para min porem não funcionou o script, teria alguma coisa errado ? na Function Apply que está exportando a todos ? local texturesCache = {} addCommandHandler("apply", function(player, _, textureID) local veh = getPedOccupiedVehicle(player) if veh and textureID then texturesCache[player] = {veh, textureID} end end) addEventHandler("onPlayerLogin", root, function(source) if #texturesCache > 0 then triggerClientEvent(source, "Apply", source, texturesCache) end end) addEventHandler("onPlayerQuit", root, function(source) if texturesCache[source] then texturesCache[source] = nil end end) function Apply(source) triggerClientEvent(getRootElement(), "Apply", getRootElement(), source) end Ao lado cliente está deste modo function Apply(localPlayer) Paint[localPlayer] = {} Paint[localPlayer][1] = dxCreateShader("texturechanger.fx", 0, 100, false, "vehicle") Paint[localPlayer][2] = dxCreateTexture("image1.png") -- change color if Paint[localPlayer][1] and Paint[localPlayer][2] then dxSetShaderValue(Paint[localPlayer][1], "TEXTURE", Paint[localPlayer][2]) engineApplyShaderToWorldTexture(Paint[localPlayer][1], "remap_federal", theVehicle) end end addEvent("Apply", true) addEventHandler("Apply", getRootElement(), Apply) Obs não pegou mas tem uma variavel Paint = {} Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 A função Apply não me fez sentido algum, assim como o client-side também. Server-side: Usando source como parâmetro Usando root como sourceElement do triggerClientEvent Passando o source como um parâmetro no triggerClientEvent Não vejo a função Apply sendo chamada Client-side: localPlayer como parâmetro de função (???) A tabela, sim, está correta, porém não vejo sentido usar localPlayer. Peço que se esforce um pouco mais lendo a Wiki e entenda como os eventos funcionam. Você pode também ver estes dois vídeos: #1 e #2. É de um amigo aqui do fórum, o tópico completo sobre os vídeos está aqui. 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 (edited) 1 hour ago, andr0xy said: A função Apply não me fez sentido algum, assim como o client-side também. Server-side: Usando source como parâmetro Usando root como sourceElement do triggerClientEvent Passando o source como um parâmetro no triggerClientEvent Não vejo a função Apply sendo chamada Client-side: localPlayer como parâmetro de função (???) A tabela, sim, está correta, porém não vejo sentido usar localPlayer. Peço que se esforce um pouco mais lendo a Wiki e entenda como os eventos funcionam. Você pode também ver estes dois vídeos: #1 e #2. É de um amigo aqui do fórum, o tópico completo sobre os vídeos está aqui. Entendi fiz algumas modificações Spoiler Paint = {} function Apply() Paint[1] = dxCreateShader("texturechanger.fx", 0, 100, false, "vehicle") Paint[2] = dxCreateTexture("image1.png") -- change color if Paint[1] and Paint[2] then dxSetShaderValue(Paint[1], "TEXTURE", Paint[2]) engineApplyShaderToWorldTexture(Paint[1], "remap_federal", theVehicle) end end addEvent("Apply", true) addEventHandler("Apply", root, Apply) function Command() theVehicle = getPedOccupiedVehicle(localPlayer) if theVehicle then if (getElementModel(theVehicle) == 490) then Apply() end end end addCommandHandler("teste", Command) Edited March 19, 2021 by Tony Scripter Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 (edited) Pode até funcionar, mas não da maneira que deve. Não consigo criar um exemplo que seja simples e fácil de entender, teria que explicar outros vários conceitos. Inclusive, esses conceitos acredito eu que você ainda não tá muito por dentro. Pedi para que você assistisse aos vídeos sobre a manipulação de eventos, não os vi no seu código acima - nem alguma tentativa. Caso você queira ver meu exemplo: download - o link expira em 1 dia. Edited March 19, 2021 by andr0xy 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 Ja vi uma vez aquele video, porem a gente tem que colocar em pratica nao da para aprender so vendo. Link to comment
Other Languages Moderators Lord Henry Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 Daria pra simplesmente salvar o ID das texturas de cada veículo em uma tabela JSON dentro da conta do jogador com toJSON e setAccountData. Assim cada conta teria seus IDs salvos em cada veículo. Dai ao logar, aplicaria essas texturas salvas nos veículos. Se salvar no script, todas as configurações dos jogadores serão perdidas se reiniciar o resource. A não ser que se faça um banco de dados, que no fim das contas dá até mais trabalho do que salvar na conta do jogador. 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 (edited) Entendi mas seria muito complexo para meu nivel de programação, uma pergunta para utilização de toJSON seria necessario um sqlite ? 42 minutes ago, andr0xy said: Pode até funcionar, mas não da maneira que deve. Não consigo criar um exemplo que seja simples e fácil de entender, teria que explicar outros vários conceitos. Inclusive, esses conceitos acredito eu que você ainda não tá muito por dentro. Pedi para que você assistisse aos vídeos sobre a manipulação de eventos, não os vi no seu código acima - nem alguma tentativa. Caso você queira ver meu exemplo: download - o link expira em 1 dia. Uma pergunta a este codigo na utilização de local playersOnly = getElementsByType("player") Porque você utilizou getElementsByType("") ? isso não e a mesma coisa que utilizar ( player ) ? Edited March 19, 2021 by Tony Scripter Link to comment
Other Languages Moderators androksi Posted March 19, 2021 Other Languages Moderators Share Posted March 19, 2021 Estou pegando todos os jogadores apenas, para não ter que passar o root no primeiro parâmetro do triggerClientEvent. Como você quer sincronizar para os outros jogadores, é necessário enviar para eles também. 1 Link to comment
Tony Scripter Posted March 19, 2021 Author Share Posted March 19, 2021 7 hours ago, andr0xy said: Estou pegando todos os jogadores apenas, para não ter que passar o root no primeiro parâmetro do triggerClientEvent. Como você quer sincronizar para os outros jogadores, é necessário enviar para eles também. Entendi, essa função então e muito util obrigado, irei começar a ver aqueles videos que você me passou quanto mais conteudo melhor 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