FunZY Posted May 5, 2019 Share Posted May 5, 2019 (edited) Olá queria ajuda de vocês para um desenvolvimento meu.. Comecei a pouco tempo na programação LUA e queria algumas dicas de como posso fazer para que o player passe pelos markers na ordem, impedindo ele de passar antes da hora Exemplo: O player tem que seguir um percurso até a localização final onde ele recebe o dinheiro, mas se ele ir direto para a localização final ele consegue pegar o dinheiro, e eu queria evitar isso. Alguem sabe Como? Ps: Desculpem A bagunça ^^ local mrk = createMarker(2101.152, -1359.516, 23.000, "cylinder", 2, 0, 17, 0, 254) local blipmrk = createBlip(2101.152, -1359.516, 23.000, 9) local mrkc1 = createMarker(2230.379, -1395.32, 23.000, "cylinder", 3, 255, 0, 0, 255) local blipc1 = createBlip(2230.379, -1395.32, 24, 0) local mrkc2 = createMarker(2312.938, -1347.669, 23.000, "cylinder", 3, 255, 0, 0, 255) local blipc2 = createBlip(2312.938, -1347.669, 24.023, 0) local mrkc3 = createMarker(2334.637, -1265.624, 27.000, "cylinder", 3, 255, 0, 0, 255) local blipc3 = createBlip(2334.637, -1265.624, 27.969, 0) local blipr = createBlip(2095.229, -1367.882, 23.984, 0) local mrkr = createMarker(2095.229, -1367.882, 23.000, "cylinder", 3, 255, 0, 0, 255) setElementVisibleTo(mrkc1, root, false) setElementVisibleTo(mrk, root, true) setElementVisibleTo(blipc1, root, false) setElementVisibleTo(mrkc2, root, false) setElementVisibleTo(blipc2, root, false) setElementVisibleTo(mrkc3, root, false) setElementVisibleTo(blipc3, root, false) setElementVisibleTo(mrkr, root, false) setElementVisibleTo(blipr, root, false) veh = {} function msg(thePlayer) outputChatBox("#ff0000Digite /trab Para trabalhar como cobrador!", thePlayer, 255, 255, 255, true) end addEventHandler("onMarkerHit", mrk, msg) function commandMarker(Jogador) --- comando que deve copiar pra ter mais latinha no mapa if isElementWithinMarker(Jogador, mrk) then setElementData(Jogador, "trab", true) outputChatBox(" ", thePlayer, 255, 255, 255, true) outputChatBox(" ", thePlayer, 255, 255, 255, true) outputChatBox("Agora Você Trabalha De Cobrador. Vá até a casa dos clientes e cobre-os (siga a marcação do mapa!)", thePlayer, 255, 255, 255, true) outputChatBox(" Em seguida volte para receber! ", thePlayer, 255, 255, 255, true) outputChatBox(" ", thePlayer, 255, 255, 255, true) outputChatBox(" ", thePlayer, 255, 255, 255, true) setElementData(Jogador, "trab", true) veh[Jogador] = createVehicle(481, 2087.891, -1335.484, 23.9 + 2) warpPedIntoVehicle(Jogador, veh[Jogador]) setElementVisibleTo(mrkc1, Jogador, true) setElementVisibleTo(blipc1, Jogador, true) setElementVisibleTo(mrk, Jogador, false) setElementVisibleTo(blipmrk, Jogador, false) end end addCommandHandler("trab", commandMarker) function cobranca1(Jogador) if veh[Jogador] and isElement(veh[Jogador]) then outputChatBox("#0000FFVocê cobrou o cliente e Ele Pagou! [1/3]", thePlayer, 255, 255, 255, true) outputChatBox(" #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true) setElementVisibleTo(mrkc1, Jogador, false) setElementVisibleTo(blipc1, Jogador, false) destroyElement(mrkc1) setElementVisibleTo(blipc2, Jogador, true) setElementVisibleTo(mrkc2, Jogador, true) end end addEventHandler("onMarkerHit", mrkc1, cobranca1, delayedChat) function cobranca2(Jogador) if veh[Jogador] and isElement(veh[Jogador]) then outputChatBox("Você cobrou o cliente e Ele Pagou! [2/3]", thePlayer, 255, 255, 255, true) outputChatBox(" #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true) setElementVisibleTo(mrkc2, Jogador, false) setElementVisibleTo(blipc2, Jogador, false) destroyElement(mrkc2) setElementVisibleTo(blipc3, Jogador, true) setElementVisibleTo(mrkc3, Jogador, true) end end addEventHandler("onMarkerHit", mrkc2, cobranca2) function cobranca3(Jogador) if veh[Jogador] and isElement(veh[Jogador]) then outputChatBox("Você cobrou o ultimo cliente e Ele Pagou! [3/3]", thePlayer, 255, 255, 255, true) outputChatBox("Volte para a loja para receber seu pagamento", thePlayer, 255, 255, 255, true) setElementVisibleTo(mrkc3, Jogador, false) setElementVisibleTo(blipc3, Jogador, false) setElementVisibleTo(blipr, Jogador, true) setElementVisibleTo(mrkr, Jogador, true) end end addEventHandler("onMarkerHit", mrkc3, cobranca3) function pagamento(Jogador) if (isElement(Jogador)) and (getElementType(Jogador) == "player") then if getElementData(Jogador, "trab") then if veh[Jogador] and isElement(veh[Jogador]) then destroyElement(veh[Jogador]) outputChatBox(" #ff0000Parabéns, Você acaba de receber seu pagamento! [1000$] ", thePlayer, 255, 255, 255, true) setElementVisibleTo(mrkr, Jogador, false) setElementVisibleTo(blipr, Jogador, false) givePlayerMoney(Jogador, 1000) setTimer(function() restartResource(getThisResource()) end, 100, 1 ) end end end end addEventHandler("onMarkerHit", mrkr, pagamento) Edited May 5, 2019 by Dutchman101 indentação Link to comment
Other Languages Moderators Lord Henry Posted May 6, 2019 Other Languages Moderators Share Posted May 6, 2019 Daria pra fazer por setElementData, dai quando o player colide no marker, verifica a data do player. Se for a data do último marker, atualiza a data para este marker que ele acabou de colidir e faz o próximo marker aparecer, se não for, nada acontece. Essa data muda de acordo com o último marker que o player colidiu. Se o player tentar colidir num marker que ainda nem apareceu, seguindo essa lógica, não vai acontecer nada, pois o player não teria a data do marker anterior a ele. Inicia o trabalho, cria todos os markers com todos os seus respectivos addEventHandlers de colisão e seta todos como invisíveis, exceto o primeiro. Jogador colide no primeiro marker, que irá setar uma data no jogador, por exemplo setElementData (thePlayer, "markerData.Cobrador", 1) Torna o segundo marker visível e o primeiro invisível. Ao colidir no segundo marker, verifica a data do jogador, se for a mesma data que o marker anterior setou, então: Torna o terceiro marker visível, o segundo invisível e seta a data "markerData.Cobrador", 2 nele. Se não for a mesma data (tiver um valor diferente de 1 ou não existir a data), então: Nada acontece. E assim por diante até ser o último marker, que em vez de tornar o marker seguinte visível (não existe marker seguinte), apenas vai tornar a si mesmo invisível, remover a data do jogador e dar o dinheiro pra ele, concluindo a rota de trabalho. Mas saiba que setElementData consome muita banda larga do servidor, pois ele é sincronizado com todos os clientes por padrão. Além disso criar vários markers e vários addEventHandlers pra cada um não é nada otimizado. No entanto eu faria isso tudo diferente. Por se tratar de um trabalho single player, pra começar eu faria isso tudo client-side. (algumas coisas precisariam de triggerServerEvent, por exemplo a parte de dar dinheiro pro jogador, que tem que ser server-side) e em vez de trabalhar com setElementData, eu apenas iria criar e movimentar os markers na ordem em que o player vai colidindo com eles. Seguindo a lógica das corridas: Inicia o trabalho, criando o marker na posição 1. (as posições estariam em uma table no client-side), e faz addEventHandler de colisão no marker. Ao colidir no marker, seta a posição dele para a posição 2. Sem precisar criar outro marker e nem destruir o atual. E assim por diante até chegar na última posição da table. Quando não existir a posição seguinte, destrói o marker e dá o dinheiro pro jogador. Link to comment
FunZY Posted May 6, 2019 Author Share Posted May 6, 2019 ------------------------------------------------ ------ Trabalho entregador ------ ------ By:Pedro R. ------ ------------------------------------------------ ----------------Variaveis Editavel--------- local valor_do_pagamento = 2500 local valordopagamentochat = 2500 --------------------marker principal------ local mrk = createMarker (2101.152, -1359.516, 23.000, "cylinder", 2, 34, 158, 165, 254) local blipmrk = createBlip(2101.152, -1359.516, 23.000, 42) -------------Marker das entrega----------------- local mrkc1 = createMarker (2230.379, -1395.32, 23.000, "cylinder", 3, 255, 0, 0, 255) local blipc1 = createBlip(2230.379, -1395.32, 24, 0) local mrkc2 = createMarker (2196.394, -1280.56, 23.800, "cylinder", 3, 255, 0, 0, 255) local blipc2 = createBlip(2196.394, -1280.56, 23.800, 0) local mrkc3 = createMarker (1909.78, -1602.051, 12.400, "cylinder", 3, 255, 0, 0, 255) local blipc3 = createBlip(1909.78, -1602.051, 12.400, 0) local mrkc4 = createMarker (1321.16, -1634.648, 12.700, "cylinder", 3, 255, 0, 0, 255) local blipc4 = createBlip(1321.16, -1634.648, 12.700, 0) local mrkc5 = createMarker (2012.88, -1126.502, 24.163, "cylinder", 3, 255, 0, 0, 255) local blipc5 = createBlip(2012.88, -1126.502, 24.163, 0) ---------Marker do Pagamento------ local blipr = createBlip(2095.229, -1367.882, 23.984, 0) local mrkr = createMarker (2095.229, -1367.882, 23.000, "cylinder", 3, 255, 0, 0, 255) -----------------Config visibilidade--------- setElementVisibleTo(mrkc1, root, false) setElementVisibleTo(mrk, root, true) setElementVisibleTo(blipc1, root, false) setElementVisibleTo(mrkc2, root, false) setElementVisibleTo(blipc2, root, false) setElementVisibleTo(mrkc3, root, false) setElementVisibleTo(blipc3, root, false) setElementVisibleTo(mrkc4, root, false) setElementVisibleTo(blipc4, root, false) setElementVisibleTo(mrkc5, root, false) setElementVisibleTo(blipc5, root, false) setElementVisibleTo(mrkr, root, false) setElementVisibleTo(blipr, root, false) -------------Codigos-------- veh = {} function msg ( thePlayer ) outputChatBox("#ff0000Digite /trab Para trabalhar como cobrador!", thePlayer, 255,255,255, true) end addEventHandler("onMarkerHit", mrk, msg) function commandMarker(Jogador) --- comando que deve copiar pra ter mais latinha no mapa if isElementWithinMarker(Jogador, mrk) then setElementData(Jogador, "trab", true) outputChatBox ( " ", thePlayer, 255, 255, 255, true ) outputChatBox ( " ", thePlayer, 255, 255, 255, true ) outputChatBox ( "Agora Você Trabalha De Entregador de remédios. Vá até a casa dos clientes e entregue os remedios (siga a marcação do mapa!)", thePlayer, 255, 255, 255, true ) outputChatBox ( " Em seguida volte para receber seu pagamento! ", thePlayer, 255, 255, 255, true ) outputChatBox ( " ", thePlayer, 255, 255, 255, true ) outputChatBox ( " ", thePlayer, 255, 255, 255, true ) setElementData(Jogador, "trab", true) veh[Jogador] = createVehicle ( 581, 2087.891, -1335.484, 23.9 + 2 ) warpPedIntoVehicle(Jogador, veh[Jogador]) setElementVisibleTo(mrkc1, Jogador, true) setElementVisibleTo(blipc1, Jogador, true) setElementVisibleTo(mrk, Jogador, false) setElementVisibleTo(blipmrk, Jogador, false) end end addCommandHandler("trab", commandMarker) function cobranca1 (Jogador) if veh[Jogador] and isElement(veh[Jogador]) then setTimer ( function() outputChatBox ( "#0000FFVocê Entregou Uma encomenda! [1/5]", thePlayer, 255, 255, 255, true ) outputChatBox ( " #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkc1, Jogador, false) setElementVisibleTo(blipc1, Jogador, false) destroyElement(mrkc1) setElementVisibleTo(blipc2, Jogador, true) setElementVisibleTo(mrkc2, Jogador, true) end, 4000, 1 ) outputChatBox ( "#FFFFFFAguarde enquanto você entrega os #FF0000Remédios..", thePlayer, 255, 255, 255, true ) end end addEventHandler ("onMarkerHit", mrkc1, cobranca1, delayedChat) function cobranca2 (Jogador) if veh[Jogador] and isElement(veh[Jogador]) then setTimer ( function() outputChatBox ( "#0000FFVocê Entregou Uma encomenda! [2/5]", thePlayer, 255, 255, 255, true ) outputChatBox ( " #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkc2, Jogador, false) setElementVisibleTo(blipc2, Jogador, false) destroyElement(mrkc2) setElementVisibleTo(blipc3, Jogador, true) setElementVisibleTo(mrkc3, Jogador, true) end, 4000, 1 ) outputChatBox ( "#FFFFFFAguarde enquanto você entrega os #FF0000Remédios..", thePlayer, 255, 255, 255, true ) end end addEventHandler ("onMarkerHit", mrkc2, cobranca2) function cobranca3 (Jogador) if veh[Jogador] and isElement(veh[Jogador]) then setTimer ( function() outputChatBox ( "#0000FFVocê Entregou Uma encomenda! [3/5]", thePlayer, 255, 255, 255, true ) outputChatBox ( " #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkc3, Jogador, false) setElementVisibleTo(blipc3, Jogador, false) destroyElement(mrkc3) setElementVisibleTo(blipc4, Jogador, true) setElementVisibleTo(mrkc4, Jogador, true) end, 4000, 1 ) outputChatBox ( "#FFFFFFAguarde enquanto você entrega os #FF0000Remédios..", thePlayer, 255, 255, 255, true ) end end addEventHandler ("onMarkerHit", mrkc3, cobranca3) function cobranca4 (Jogador) if veh[Jogador] and isElement(veh[Jogador]) then setTimer ( function() outputChatBox ( "#0000FFVocê Entregou Uma encomenda! [4/5]", thePlayer, 255, 255, 255, true ) outputChatBox ( " #ff0000Siga Para o Proximo Cliente ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkc4, Jogador, false) setElementVisibleTo(blipc4, Jogador, false) destroyElement(mrkc4) setElementVisibleTo(blipc5, Jogador, true) setElementVisibleTo(mrkc5, Jogador, true) end, 4000, 1 ) outputChatBox ( "#FFFFFFAguarde enquanto você entrega os #FF0000Remédios..", thePlayer, 255, 255, 255, true ) end end addEventHandler ("onMarkerHit", mrkc4, cobranca4) function cobranca5 (Jogador) if veh[Jogador] and isElement(veh[Jogador]) then setTimer ( function() outputChatBox ( "#0000FFVocê Entregou a ultima encomenda! [5/5]", thePlayer, 255, 255, 255, true ) outputChatBox ( " #ff0000Volte para loja para receber seu pagamento! ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkc5, Jogador, false) setElementVisibleTo(blipc5, Jogador, false) destroyElement(mrkc5) setElementVisibleTo(blipr, Jogador, true) setElementVisibleTo(mrkr, Jogador, true) end, 4000, 1 ) outputChatBox ( "#FFFFFFAguarde enquanto você entrega os #FF0000Remédios..", thePlayer, 255, 255, 255, true ) end end addEventHandler ("onMarkerHit", mrkc5, cobranca5) ------------------ PAGAMENTOS!!------------------------ function pagamento (Jogador) if(isElement(Jogador)) and (getElementType(Jogador) == "player") then if getElementData(Jogador, "trab") then if veh[Jogador] and isElement(veh[Jogador]) then destroyElement (veh[Jogador]) outputChatBox ( " #ff0000Parabéns, Você acaba de receber seu pagamento! ["..valordopagamentochat.."$] ", thePlayer, 255, 255, 255, true ) setElementVisibleTo(mrkr, Jogador, false) setElementVisibleTo(blipr, Jogador, false) givePlayerMoney ( Jogador, valor_do_pagamento) setTimer(function() restartResource(getThisResource()) end, 100, 1) end end end end addEventHandler ("onMarkerHit", mrkr, pagamento) Fiz desta maneira mas se o player sair do 1° marker e for direto ao ultimo para receber o pagamento ele ainda pode. Teria alguma função que impediria isso? Link to comment
Other Languages Moderators Lord Henry Posted May 6, 2019 Other Languages Moderators Share Posted May 6, 2019 Como eu disse, setElementData. Dai quando for colidir, verifica essa data no jogador. 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