RikeBR Posted January 19, 2019 Share Posted January 19, 2019 (edited) Opa, estou com 2 erros em um mod de trabalho: 1. quando o jogador pega o trabalho de caminhoneiro mas logo em seguida um outro jogador aperta para roubar o caminhão e cancela o roubo do veículo do player que está trabalhando, mesmo com o player fora do veículo o trabalho continua em execução, podendo assim o player dar teleport a algum local próximo da área de entrega, e finalizar o trabalho. 2. Quando o player pega o trabalho e logo em seguida ele comete suicídio, o trabalho continua em execução, mesmo eu adicionando um evento que cancele a função após a morte. Alguém poderia me ajudar nisso? Desde já agradeço. Código do mod: trab4 = createMarker ( 1222.684, -1789.943, 15.7, "cylinder", 1.5, 255, 140, 0, 255) marcacao = createMarker ( 2482.79126, -2090.34351, 18.54296, "arrow", 1.5, 255,140,0, 255) setElementVisibleTo ( marcacao, root, false ) entregartrab4 = createMarker ( -2336.06299, -1660.78528, 483.70313 , "corona", 3, 0, 255, 209, 255) setElementVisibleTo ( entregartrab4, root, false ) blipfim4 = createBlipAttachedTo(entregartrab4, 41, 3, 255, 0, 0, 255, 0, 65535, source) setElementVisibleTo ( blipfim4, root, false ) function msg (source) outputChatBox ('#ffffffPara pegar o trabalho digite #ff0000/caminhoneiro', source, 255, 255, 255, true) end addEventHandler( "onMarkerHit", trab4, msg ) carga = {} veh = {} function pegartrab4 ( source ) if isElementWithinMarker (source, trab4 ) then if veh[source] and isElement( veh[source] ) then destroyElement(veh[source] ) veh[source] = nil end local x,y,z = getElementPosition(source) veh[source] = createVehicle(403 ,2479.15234, -2091.43652, 14.56156) carga[source] = createVehicle(450 ,2487.23511, -2090.43604, 13.54688 + 1) setElementVisibleTo ( marcacao, root, true ) setElementRotation ( veh[source], 0, 0, 90) setElementRotation ( carga[source], 0, 0, 90) warpPedIntoVehicle (source,veh[source]) setElementVisibleTo ( blipfim4, source, true ) setElementVisibleTo ( entregartrab4, source, true ) outputChatBox ('#ffffffAgora pegue a carga e leve-a até o Blip no #FF0000Mount Chilliad.', source, 255, 255, 255, true) setTimer ( function() setElementVisibleTo ( marcacao, root, false ) end, 13000, 1 ) else outputChatBox ('#ffffffVocê tem que ficar no lugar certo para pegar o Trabalho de Caminhoneiro.', source, 255, 255, 255, true) end end addCommandHandler ( "caminhoneiro", pegartrab4 ) function finalizartrab4 (source) if veh[source] and isElement(veh[source]) then if (carga[source]) and isElement(carga[source]) then setElementVisibleTo ( entregartrab4, source, false ) setElementVisibleTo ( blipfim4, source, false ) givePlayerMoney (source, 8000) destroyElement (veh[source]) destroyElement (carga[source]) outputChatBox ('#ffffffTrabalho finalizado, você recebeu #0F9C08$8.000 #FFFFFFpelo serviço.', source, 255, 255, 255, true) else end end end addEventHandler( "onMarkerHit", entregartrab4, finalizartrab4 ) function sair4 (source) if (veh[source]) and isElement(veh[source]) then if (carga[source]) and isElement(carga[source]) then destroyElement (veh[source]) destroyElement (carga[source]) setElementVisibleTo ( blipfim4, source, false ) setElementVisibleTo ( entregartrab4, source, false ) outputChatBox ('#ffffffVocê saiu do veículo e perdeu o trabalho.', source, 255, 255, 255, true) end end end addEventHandler ("onVehicleExit", root, sair4) addEventHandler ("onPlayerWasted", root, sair4) Edited January 19, 2019 by Henrique Moura Link to comment
DNL291 Posted January 19, 2019 Share Posted January 19, 2019 1 - Isto dentro da função pegartrab4: addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if veh[player] ~= source then cancelEvent() end end ) local player = source addEventHandler( "onVehicleExplode", function() if veh[player] and source == veh[player] then destroyElement (veh[player]) veh[player] = nil end if carga[player] and source == carga[player] then destroyElement (carga[player]) carga[player] = nil end end ) 2 - : addEventHandler( "onPlayerQuit", function() if veh[source] then destroyPlayerVehicles( source ) end end ) function sair4 (vehicle) if eventName == "onPlayerVehicleExit" and veh[source] and vehicle == veh[source] then destroyPlayerVehicles( source ) end if (veh[source]) and isElement(veh[source]) then destroyPlayerVehicles( source ) setElementVisibleTo ( blipfim4, source, false ) setElementVisibleTo ( entregartrab4, source, false ) outputChatBox ('#ffffffVocê saiu do veículo e perdeu o trabalho.', source, 255, 255, 255, true) end end addEventHandler ("onPlayerVehicleExit", root, sair4) addEventHandler ("onPlayerWasted", root, sair4) function destroyPlayerVehicles( p ) if p then if (veh[p]) and isElement(veh[p]) then destroyElement (veh[p]) veh[p] = nil end if (carga[p]) and isElement(carga[p]) then destroyElement (carga[p]) carga[p] = nil end end end 1 Link to comment
RikeBR Posted January 20, 2019 Author Share Posted January 20, 2019 Obrigado por ajudar! Se não for pedir muito, teria como você juntar essas partes no script pra mim por favor? Sou um pouco iniciante nessa área e ainda estou aprendendo, Caso não poder eu vou tentando aqui, mas obrigado pela ajuda. Link to comment
Other Languages Moderators Lord Henry Posted January 20, 2019 Other Languages Moderators Share Posted January 20, 2019 Comece por aqui: https://www.youtube.com/watch?v=M2Af7gkbbro&list=PLHz_AreHm4dmSj0MHol_aoNYCSGFqvfXV&index=2&t=20 1 Link to comment
DNL291 Posted January 21, 2019 Share Posted January 21, 2019 On 19/01/2019 at 21:54, DNL291 said: 1 - Isto dentro da função pegartrab4: addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if veh[player] ~= source then cancelEvent() end end ) local player = source addEventHandler( "onVehicleExplode", function() if veh[player] and source == veh[player] then destroyElement (veh[player]) veh[player] = nil end if carga[player] and source == carga[player] then destroyElement (carga[player]) carga[player] = nil end end ) Esses 2 eventos é dentro da função pegartrab4 como eu já disse, não precisa nem de conhecimento em programação para fazer, acho que você nem tentou ao menos colar na função e testar, dá próxima vez faça a sua parte, aqui o código: local trab4 = createMarker ( 1222.684, -1789.943, 15.7, "cylinder", 1.5, 255, 140, 0, 255) local marcacao = createMarker ( 2482.79126, -2090.34351, 18.54296, "arrow", 1.5, 255,140,0, 255) setElementVisibleTo ( marcacao, root, false ) local entregartrab4 = createMarker ( -2336.06299, -1660.78528, 483.70313 , "corona", 3, 0, 255, 209, 255) setElementVisibleTo ( entregartrab4, root, false ) local blipfim4 = createBlipAttachedTo(entregartrab4, 41, 3, 255, 0, 0, 255, 0, 65535, source) setElementVisibleTo ( blipfim4, root, false ) function msg (source) outputChatBox ('#ffffffPara pegar o trabalho digite #ff0000/caminhoneiro', source, 255, 255, 255, true) end addEventHandler( "onMarkerHit", trab4, msg ) local carga = {} local veh = {} function pegartrab4 ( source ) if isElementWithinMarker (source, trab4 ) then if veh[source] and isElement( veh[source] ) then destroyElement(veh[source] ) veh[source] = nil end local x,y,z = getElementPosition(source) veh[source] = createVehicle(403 ,2479.15234, -2091.43652, 14.56156) carga[source] = createVehicle(450 ,2487.23511, -2090.43604, 13.54688 + 1) setElementVisibleTo ( marcacao, root, true ) setElementRotation ( veh[source], 0, 0, 90) setElementRotation ( carga[source], 0, 0, 90) warpPedIntoVehicle (source,veh[source]) setElementVisibleTo ( blipfim4, source, true ) setElementVisibleTo ( entregartrab4, source, true ) outputChatBox ('#ffffffAgora pegue a carga e leve-a até o Blip no #FF0000Mount Chilliad.', source, 255, 255, 255, true) setTimer ( function() setElementVisibleTo ( marcacao, root, false ) end, 13000, 1 ) addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if not (veh[player]) or veh[player] ~= source then cancelEvent() end end ) local player = source addEventHandler( "onVehicleExplode", veh[source], function() destroyPlayerVehicles( player ) end ) addEventHandler( "onVehicleExplode", carga[source], function() destroyPlayerVehicles( player ) end ) else outputChatBox ('#ffffffVocê tem que ficar no lugar certo para pegar o Trabalho de Caminhoneiro.', source, 255, 255, 255, true) end end addCommandHandler ( "caminhoneiro", pegartrab4 ) function finalizartrab4 (source) if veh[source] and isElement(veh[source]) then if (carga[source]) and isElement(carga[source]) then setElementVisibleTo ( entregartrab4, source, false ) setElementVisibleTo ( blipfim4, source, false ) givePlayerMoney (source, 8000) destroyElement (veh[source]) destroyElement (carga[source]) outputChatBox ('#ffffffTrabalho finalizado, você recebeu #0F9C08$8.000 #FFFFFFpelo serviço.', source, 255, 255, 255, true) else end end end addEventHandler( "onMarkerHit", entregartrab4, finalizartrab4 ) addEventHandler( "onPlayerQuit", function() if veh[source] then destroyPlayerVehicles( source ) end end ) function sair4 (vehicle) if eventName == "onPlayerVehicleExit" and veh[source] and vehicle == veh[source] then destroyPlayerVehicles( source ) end if (veh[source]) and isElement(veh[source]) then destroyPlayerVehicles( source ) setElementVisibleTo ( blipfim4, source, false ) setElementVisibleTo ( entregartrab4, source, false ) outputChatBox ('#ffffffVocê saiu do veículo e perdeu o trabalho.', source, 255, 255, 255, true) end end addEventHandler ("onPlayerVehicleExit", root, sair4) addEventHandler ("onPlayerWasted", root, sair4) function destroyPlayerVehicles( p ) if p then if (veh[p]) and isElement(veh[p]) then destroyElement (veh[p]) veh[p] = nil end if (carga[p]) and isElement(carga[p]) then destroyElement (carga[p]) carga[p] = nil end end end Link to comment
RikeBR Posted January 21, 2019 Author Share Posted January 21, 2019 8 minutes ago, DNL291 said: Esses 2 eventos é dentro da função pegartrab4 como eu já disse, não precisa nem de conhecimento em programação para fazer, acho que você nem tentou ao menos colar na função e testar, dá próxima vez faça a sua parte, aqui o código: local trab4 = createMarker ( 1222.684, -1789.943, 15.7, "cylinder", 1.5, 255, 140, 0, 255) local marcacao = createMarker ( 2482.79126, -2090.34351, 18.54296, "arrow", 1.5, 255,140,0, 255) setElementVisibleTo ( marcacao, root, false ) local entregartrab4 = createMarker ( -2336.06299, -1660.78528, 483.70313 , "corona", 3, 0, 255, 209, 255) setElementVisibleTo ( entregartrab4, root, false ) local blipfim4 = createBlipAttachedTo(entregartrab4, 41, 3, 255, 0, 0, 255, 0, 65535, source) setElementVisibleTo ( blipfim4, root, false ) function msg (source) outputChatBox ('#ffffffPara pegar o trabalho digite #ff0000/caminhoneiro', source, 255, 255, 255, true) end addEventHandler( "onMarkerHit", trab4, msg ) local carga = {} local veh = {} function pegartrab4 ( source ) if isElementWithinMarker (source, trab4 ) then if veh[source] and isElement( veh[source] ) then destroyElement(veh[source] ) veh[source] = nil end local x,y,z = getElementPosition(source) veh[source] = createVehicle(403 ,2479.15234, -2091.43652, 14.56156) carga[source] = createVehicle(450 ,2487.23511, -2090.43604, 13.54688 + 1) setElementVisibleTo ( marcacao, root, true ) setElementRotation ( veh[source], 0, 0, 90) setElementRotation ( carga[source], 0, 0, 90) warpPedIntoVehicle (source,veh[source]) setElementVisibleTo ( blipfim4, source, true ) setElementVisibleTo ( entregartrab4, source, true ) outputChatBox ('#ffffffAgora pegue a carga e leve-a até o Blip no #FF0000Mount Chilliad.', source, 255, 255, 255, true) setTimer ( function() setElementVisibleTo ( marcacao, root, false ) end, 13000, 1 ) addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if not (veh[player]) or veh[player] ~= source then cancelEvent() end end ) local player = source addEventHandler( "onVehicleExplode", veh[source], function() destroyPlayerVehicles( player ) end ) addEventHandler( "onVehicleExplode", carga[source], function() destroyPlayerVehicles( player ) end ) else outputChatBox ('#ffffffVocê tem que ficar no lugar certo para pegar o Trabalho de Caminhoneiro.', source, 255, 255, 255, true) end end addCommandHandler ( "caminhoneiro", pegartrab4 ) function finalizartrab4 (source) if veh[source] and isElement(veh[source]) then if (carga[source]) and isElement(carga[source]) then setElementVisibleTo ( entregartrab4, source, false ) setElementVisibleTo ( blipfim4, source, false ) givePlayerMoney (source, 8000) destroyElement (veh[source]) destroyElement (carga[source]) outputChatBox ('#ffffffTrabalho finalizado, você recebeu #0F9C08$8.000 #FFFFFFpelo serviço.', source, 255, 255, 255, true) else end end end addEventHandler( "onMarkerHit", entregartrab4, finalizartrab4 ) addEventHandler( "onPlayerQuit", function() if veh[source] then ) setElementVisibleTo ( entregartrab4, source, false ) outputChatBox ('#ffffffVocê saiu do veículo e perdeu o trabalho.', source, 255, 255, 255, true) veh[p] = nil destroyElement (carga[p]) carga[p] = nil Eu tentei sim, porém foi desatenção minha, estava fazendo errado mesmo, valeu por ajudar. Link to comment
DNL291 Posted January 21, 2019 Share Posted January 21, 2019 Sem problemas. Quando for assim, use o comando debugscript 3 e mostre aqui a mensagem de erro, poderia também ter mostrado o código que você testou. 1 Link to comment
RikeBR Posted January 22, 2019 Author Share Posted January 22, 2019 Estou com mais um problema no mod de trabalho, por se tratar do mesmo script, achei melhor mandar aqui mesmo do que criar um novo tópico, enfim, após o player digitar o comando para começar o trabalho, são criados todos os markers existentes no mod apenas de uma vez, e ele usa o setElementVisibleTo que muda a transparência do marker, deixando ele invisível, ou seja, o player pega o trabalho e logo em seguida caso ele souber onde fica o marker de finalização, ele passa no local e finaliza o trabalho, pulando assim o processo que deveria ser feito pelo player no trabalho, pra entender melhor aqui está um vídeo mostrando como seria esse bug https://youtu.be/v_Cs3Frw404 eu já tentei usar o destroyElement, porém da forma que usei não deu muito certo, pois ele destruiu o marker e na hora que era pra aparecer acabou não aparecendo, alguém poderia me ajudar ou dar alguma dica de como resolver isso? trab2 = createMarker ( 1222.684, -1798.941, 15.7, "cylinder", 1.5, 255, 140, 0, 0) trab3 = createMarker ( 1222.684, -1798.941, 15.1, "cylinder", 1.5, 255, 140, 0, 50) entregartrab2 = createMarker ( 113.229, -1900.505, 0.162, "corona", 3, 255, 140, 0, 255) setElementVisibleTo ( entregartrab2, root, false ) entregarparte2 = createMarker ( 2295.75073, 519.24872, -0.55000 , "corona", 3, 255,140,0, 255) setElementVisibleTo ( entregarparte2, root, false ) bliptparte2 = createBlipAttachedTo(entregarparte2, 41, 3, 255, 0, 0, 255, 0, 65535, source) setElementVisibleTo ( bliptparte2, root, false ) bliptrab2 = createBlipAttachedTo(entregartrab2, 41, 3, 255, 0, 0, 255, 0, 65535, source) setElementVisibleTo ( bliptrab2, root, false ) function msg (source) outputChatBox ('#C09F96[SERVER]: #ffffffPara pegar o trabalho digite #FF0000/marinheiro', source, 255, 255, 255, true) end addEventHandler( "onMarkerHit", trab2, msg ) veh = {} function pegartrab ( source ) if isElementWithinMarker (source, trab2 ) then if veh[source] and isElement( veh[source] ) then destroyElement(veh[source] ) veh[source] = nil end local x,y,z = getElementPosition(source) veh[source] = createVehicle(595, -1559.08801, 144.12305, 0.21072) warpPedIntoVehicle (source,veh[source]) setElementVisibleTo ( bliptrab2, source, true ) setElementVisibleTo ( entregartrab2, source, true ) --destroyElement (entregarparte2) ped = createPed ( 120, 116.467, -1894.428, 1.011, 192 ) ped2 = createPed ( 85, 116.141, -1893.496, 1.097, 192 ) ped3 = createPed ( 169, 116.035, -1892.718, 1.164, 192 ) ped4 = createPed ( 15, 115.744, -1891.669, 1.258, 192 ) outputChatBox ('#C09F96[SERVER]: #ffffffAgora vá até o Blip marcado no mapa, #FF0000Praia de LS.', source, 255, 255, 255, true) addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if not (veh[player]) or veh[player] ~= source then cancelEvent() end end ) else outputChatBox ('#C09F96[SERVER]: #ffffffVocê precisa estar no lugar certo para pegar o Trabalho.', source, 255, 255, 255, true) end end addCommandHandler ( "marinheiro", pegartrab) function parte2 (source) if veh[source] and isElement(veh[source]) then setElementVisibleTo ( entregartrab2, source, false ) setElementVisibleTo ( bliptrab2, source, false ) outputChatBox ('#C09F96[SERVER]: #ffffffParabéns, agora espere eles entrar!', source, 255, 255, 255, true) setTimer ( function() setElementVisibleTo ( bliptparte2, source, true ) setElementVisibleTo ( entregarparte2, source, true ) destroyElement (ped) destroyElement (ped2) destroyElement (ped3) destroyElement (ped4) outputChatBox ('#C09F96[SERVER]: #ffffffLeve-os até o local de destino!', source, 255, 255, 255, true) end, 3000, 1 ) else end end addEventHandler( "onMarkerHit", entregartrab2, parte2 ) function finalizar (source) if veh[source] and isElement(veh[source]) then setElementVisibleTo ( bliptparte2, source, false ) setElementVisibleTo ( entregarparte2, source, false ) givePlayerMoney (source, 10000) destroyElement (veh[source]) outputChatBox ('#C09F96[SERVER]: #ffffffTrabalho finalizado, você recebeu #7AB5DF$10.000 #ffffffpelo serviço.', source, 255, 255, 255, true) else end end addEventHandler( "onMarkerHit", entregarparte2, finalizar ) function sair (vehicle) if (veh[source]) and isElement(veh[source]) then destroyPlayerVehicles( source ) setElementVisibleTo ( entregartrab2, source, false ) setElementVisibleTo ( bliptrab2, source, false ) setElementVisibleTo ( entregarparte2, source, false ) setElementVisibleTo ( bliptparte2, source, false ) destroyElement (ped) destroyElement (ped2) destroyElement (ped3) destroyElement (ped4) outputChatBox ('#C09F96[SERVER]: #ffffffVocê perdeu o trabalho.', source, 255, 255, 255, true) end end addEventHandler ("onPlayerVehicleExit", root, sair) addEventHandler ("onPlayerWasted", root, sair) function destroyPlayerVehicles( p ) if p then if (veh[p]) and isElement(veh[p]) then destroyElement (veh[p]) veh[p] = nil end end end Link to comment
DNL291 Posted January 23, 2019 Share Posted January 23, 2019 (edited) Resumindo, o blip do local não mostra, é isso? A marker "entregartrab2" é a primeira rota e quando atingir ela será criada a segunda rota na marker "entregarparte2"? Sobre o seu código, em createBlipAttachedTo - linhas 10 e 13 no último argumento tem source, que não está definido, logo, retornará nil. Tem também esse monte de funções setElementVisibleTo que eu acho bom evitar em muitos casos, criando os elementos no lado cliente. Outra coisa, otimize o código definindo resourceRoot no fim das funções createMarker e createBlipAttachedTo, assim você também irá evitar essas linhas chatas no começo do código: setElementVisibleTo ( entregarparte2, root, false ) Corrigindo: entregartrab2 = createMarker ( 113.229, -1900.505, 0.162, "corona", 3, 255, 140, 0, 255, resourceRoot) --setElementVisibleTo ( entregartrab2, root, false ) irá dispensar o uso disso +: As variáveis em createPed não funcionarão com mais de 1 jogador, quando outra pessoa também digitar o comando irá reescrever a mesma variável do(s) jogador(es). Passe o jogador no setTimer dentro do evento "onMarkerHit" - linha 68, e use o jogador no parâmetro da função definindo na linha 60 em "function()". Edited January 23, 2019 by DNL291 1 Link to comment
RikeBR Posted January 23, 2019 Author Share Posted January 23, 2019 Não, o problema não é o blip, vou dar um exemplo mais fácil, quando o player da o comando para começar a trabalhar, iniciam todos os markers de uma só vez, porém eles ficam oculto para o jogador na parte visual, porém se o player souber a localização exata da marcação e passar em cima, a função continua executando mesmo com o marker invisível, o que eu queria fazer é deixar pro marker e a função aparecer somente em um determinado período, nesse trabalho que mandei o código, o certo seria ele começar o trabalho e pegar passageiros na praia de LS para depois finalizar, porém se ele der uma de esperto e for direto ao ponto onde finaliza o trabalho, não passando pela praia, ele irá conseguir finalizar o trabalho da mesma forma, ou seja, o que eu queria é que obrigasse ele a passar pela praia, caso não passasse ele não conseguiria finalizar o trabalho. Link to comment
DNL291 Posted January 23, 2019 Share Posted January 23, 2019 Só pra esclarecer sobre as markers, elas são criadas quando o resource é ligado, no comando é chamada a função setElementVisibleTo que vai deixar blip e marker visíveis (bliptrab2 e entregartrab2). Sobre o problema, tem duas soluções: Permitir que o jogador possa passar na marker só depois que ele pegar os passageiros, por meio de uma um setElementData ou uma variável na tabela Ou Criar a marker só depois que ele pegar os passageiros 1 Link to comment
RikeBR Posted January 23, 2019 Author Share Posted January 23, 2019 O entregartrab2 é a primeira rota e entregarparte2 é a rota final. Eu estou tentando evitar usar setElementData, qual seria o jeito de criar o marker só depois de pegar os passageiros? Link to comment
[M]ister Posted January 23, 2019 Share Posted January 23, 2019 isElementVisibleTo function finalizar (source) if veh[source] and isElement(veh[source]) then if isElementVisibleTo(entregarparte2,source) then setElementVisibleTo ( bliptparte2, source, false ) setElementVisibleTo ( entregarparte2, source, false ) givePlayerMoney (source, 10000) destroyElement (veh[source]) outputChatBox ('#C09F96[SERVER]: #ffffffTrabalho finalizado, você recebeu #7AB5DF$10.000 #ffffffpelo serviço.', source, 255, 255, 255, true) end end end addEventHandler( "onMarkerHit", entregarparte2, finalizar ) 1 Link to comment
RikeBR Posted January 23, 2019 Author Share Posted January 23, 2019 Obrigado pela ajuda de todos, já resolvi! 1 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