Jump to content

Trabalho


Recommended Posts

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 by Dutchman101
indentação
Link to comment
  • Other Languages Moderators

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.

  1. 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.
  2. Jogador colide no primeiro marker, que irá setar uma data no jogador, por exemplo setElementData (thePlayer, "markerData.Cobrador", 1)
  3. Torna o segundo marker visível e o primeiro invisível.
  4. Ao colidir no segundo marker, verifica a data do jogador, se for a mesma data que o marker anterior setou, então:
    1. Torna o terceiro marker visível, o segundo invisível e seta a data "markerData.Cobrador", 2 nele.
  5. Se não for a mesma data (tiver um valor diferente de 1 ou não existir a data), então:
    1. Nada acontece.
  6. 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:

  1. 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.
  2. Ao colidir no marker, seta a posição dele para a posição 2. Sem precisar criar outro marker e nem destruir o atual.
  3. 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
------------------------------------------------
------		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

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