Jump to content

Recommended Posts

Queria que quando o player coilidisse com o ultimo marker do objetivo, setasse um frozen nele junto da setTimer do fim3, para que eles não buguem e dupliquem ou tripliquem o givePlayerMoney, se poderem me dar umas explicações como sempre ksks

 

destinos = {
	[1] = {1905.856, -1117.615, 25.664}, -- table com todos os destinos em ordem.
	[2] = {1496.891, -691.943, 94.75},
	[3] = {1684.788, -2101.417, 13.834}
}

local Minicio3 = createMarker (2104.386, -1806.494, 12.6, "cylinder", 1, 16, 102, 231, 50) -- Cria o marker onde o player deve usar o comando.

local veh = {} -- Cada elemento específico de cada jogador deve estar em uma table para ser criado e acessado corretamente.
local Mfim3 = {} -- Marker final específico do player.
local Bfim3 = {} -- Blip do marker final específico do player.
local sourceAccount = getPlayerAccount ( source )

function inicio3 (source)
	if source and getElementType (source) == "player" and not getPedOccupiedVehicle (source) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("#1066E7────────────────  Trabalho BvP™  ────────────────",source,255,255,255,true) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
		outputChatBox ("#FF0000Trabalho de Entregador de Pizzas #FFFFFF→  Neste trabalho você terá que entregar as Pizzas até aos destinos no radar. Sua recompensa é de R$2000.",source,255,255,255,true)
		outputChatBox ("                                                        ",source,255,255,255,true)
		outputChatBox ("* Digite #FF0000/emprego3 #FFFFFFpara aceitar o trabalho.",source,255,255,255,true)
		outputChatBox ("#1066E7───────────────────────────────────────────",source,255,255,255,true)
	end
end	
addEventHandler ("onMarkerHit", Minicio3, inicio3)

function startJob3 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio3) and not getPedOccupiedVehicle (thePlayer) then -- Ao usar o comando, só funciona se o jogador estiver no marker e estiver sem veículo.
		if veh[thePlayer] and isElement (veh[thePlayer]) then -- Se por acaso existir o veículo do trampo do jogador, destroi ele.
			destroyElement (veh[thePlayer])
			veh[thePlayer] = nil
		end
		veh[thePlayer] = createVehicle (468, 2095.678, -1796.701, 13.383) -- Cria o veículo do trampo.
		local x, y, z = unpack (destinos[1]) -- x, y, z recebem as coordenadas do destinos[1].
		Mfim3[thePlayer] = createMarker (x, y, z, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador na coordenada 1.
		setElementData (Mfim3[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		setElementData (Mfim3[thePlayer], "trip", 1) -- Seta uma data no marker pra saber a qual coordenada ele pertence.
		Bfim3[thePlayer] = createBlipAttachedTo (Mfim3[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
        setPedSkin ( thePlayer, 20 )
		dxMsg(thePlayer, "Leve as Pizzas ate a bandeira no radar! (1/"..#destinos..")!", "info") -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim3[thePlayer], fim3) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("emprego3", startJob3)

function fim3 (hitElement)
	if (hitElement == getElementData (source, "owner")) then -- Se o elemento que colidiu for o dono do marker, então:
		if veh[hitElement] and isElement(veh[hitElement]) then -- Se existe o veículo do trampo do jogador, então:
			if (getElementData (source, "trip") < #destinos) then -- Se a data do marker é menor que a quantidade de destinos, então: (indicando que não é a última viagem)
				local x, y, z = unpack (destinos[getElementData (source, "trip") + 1]) -- x, y, z recebem a próxima coordenada da table destinos.
				setElementPosition (source, x, y, z) -- Coloca o marker de objetivo nessa nova coordenada.
				setElementData (source, "trip", getElementData (source, "trip") + 1) -- Seta a nova viagem nesse marker.
				dxMsg(hitElement, "Você entregou as Pizzas no destino. Siga para o próximo. ("..getElementData (source, "trip").."/"..#destinos..")", "info") -- Avisa o jogador quantas viagens ele fez e quantas são no total, pra ele não pensar que está trabalhando de graça.
			else -- Se o marker de objetivo colidido não tem data menor que a quantidade de viagens, então: (indicando que esse é o último objetivo)
				dxMsg(hitElement, "Recebendo Pagamento...", "info")
				setTimer(function(hitElement)
					removeEventHandler ("onMarkerHit", Mfim3[hitElement], fim3) -- Remove o evento que ativa este marker, pois ele não será mais usado.
					destroyElement (veh[hitElement]) -- Destroi o veículo do trampo do jogador.
					givePlayerMoney (hitElement, 2000) -- Dá o dinheiro do trampo.
					if isElement(Bfim3[hitElement]) then destroyElement (Bfim3[hitElement]) end -- Destroi o blip anexado ao marker de objetivo.
					Bfim3[hitElement] = nil
					if isElement(Mfim3[hitElement]) then destroyElement (Mfim3[hitElement]) end -- Destroi o marker de objetivo.
					Mfim3[hitElement] = nil
					dxMsg(hitElement, "Pagamento recebido (R$ 2000)!", "sucess") -- Avisa o jogador que ele completou o trampo.
				end, 5000, 1,hitElement)
			end
		end
	end
end

function sair3 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim3[thePlayer], fim3) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim3[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim3[thePlayer] = nil
		destroyElement (Mfim3[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim3[thePlayer] = nil
		dxMsg(thePlayer, "Você abandonou a moto e perdeu o trabalho seu bastardo!", "error") -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair3) -- Executa essa função quando o player sair de um veículo qualquer.

function quit3 ()
		if isElement(Bfim3[source]) then destroyElement (Bfim3[source]) end
		if isElement(Mfim3[source]) then destroyElement (Mfim3[source]) end
		if isElement(veh[source]) then destroyElement(veh[source]) end
		Bfim3[source] = nil
		Mfim3[source] = nil
		veh[source] = nil
end
addEventHandler("onPlayerQuit", getRootElement(), quit3)


function kill3 ()
	if isElement(Bfim3[source]) then destroyElement (Bfim3[source]) end
	if isElement(Mfim3[source]) then
		destroyElement (Mfim3[source])
		dxMsg(source, "Você se matou e perdeu o trabalho seu imbecil!", "error")
	end
	if isElement(veh[source]) then destroyElement(veh[source]) end
	Bfim3[source] = nil
	Mfim3[source] = nil
	veh[source] = nil
end
addEventHandler("onPlayerWasted", getRootElement(), kill3)

function logout3 ()
		if isElement(Bfim3[source]) then destroyElement (Bfim3[source]) end
		if isElement(Mfim3[source]) then destroyElement (Mfim3[source]) end
		if isElement(veh[source]) then destroyElement(veh[source]) end
		Bfim3[source] = nil
		Mfim3[source] = nil
		veh[source] = nil
end
addEventHandler("onPlayerLogout", getRootElement(), logout)

function dxMsg(source, text, type)
	exports.dxmessages:outputDx(source, text, type)
end

 

Edited by #Horus
Link to comment
  • Other Languages Moderators

Você pode criar uma função com o player como parâmetro e dentro dessa função você congela ele e seta um timer para descongelar. Exemplo maroto:

function freezeMe (thePlayer)
	if isElement (thePlayer) then
		setElementFrozen (thePlayer, true)
		setTimer (setElementFrozen, 5000, 1, thePlayer, false)
	end
end

E coloque isso antes do setTimer e depois da mensagem de Recebendo Pagamento:

freezeMe (hitElement)

 

  • Thanks 1
Link to comment
20 minutes ago, Lord Henry said:

Você pode criar uma função com o player como parâmetro e dentro dessa função você congela ele e seta um timer para descongelar. Exemplo maroto:


function freezeMe (thePlayer)	if isElement (thePlayer) then		setElementFrozen (thePlayer, true)		setTimer (setElementFrozen, 5000, 1, thePlayer, false)	endend

E coloque isso antes do setTimer e depois da mensagem de Recebendo Pagamento:


freezeMe (hitElement)

 

Obrigado Henry! Mas o setTimer pra descongelar eu teria que coloca com os mesmos segundos que coloquei no setTimer para receber o dinheiro certo ? Para assim que ele colidir com o ultimo marker ( o marker que recebe o pagamento ) ele ser congelado, e praticamente na mesma hora que aparecer o Pagamento Recebido ele ser descongelado ?  

Link to comment
  • Other Languages Moderators
3 hours ago, #Horus said:

Obrigado Henry! Mas o setTimer pra descongelar eu teria que coloca com os mesmos segundos que coloquei no setTimer para receber o dinheiro certo ? Para assim que ele colidir com o ultimo marker ( o marker que recebe o pagamento ) ele ser congelado, e praticamente na mesma hora que aparecer o Pagamento Recebido ele ser descongelado ?  

Sim. Por isso que deixei 5 segundos no exemplo. Pois no seu código ele demora 5 segundos pra dar o dinheiro.

  • Thanks 1
Link to comment
35 minutes ago, Lord Henry said:

Sim. Por isso que deixei 5 segundos no exemplo. Pois no seu código ele demora 5 segundos pra dar o dinheiro.

Obrigado irmão!!! 

4 hours ago, Lord Henry said:

Você pode criar uma função com o player como parâmetro e dentro dessa função você congela ele e seta um timer para descongelar. Exemplo maroto:


function freezeMe (thePlayer)
	if isElement (thePlayer) then
		setElementFrozen (thePlayer, true)
		setTimer (setElementFrozen, 5000, 1, thePlayer, false)
	end
end

E coloque isso antes do setTimer e depois da mensagem de Recebendo Pagamento:


freezeMe (hitElement)

 

pra congelar o player na moto do entregador pizza eu adicionei uma verificação do lado de isElement, coloquei getPedOccupiedVehicle (thePlayer) then certo ?

dei uma olhada na wiki e adicionei a verificação errada ksksk OBRIGADO MANO @EDITADO

Edited by #Horus
Link to comment
40 minutes ago, Lord Henry said:

Sim. Por isso que deixei 5 segundos no exemplo. Pois no seu código ele demora 5 segundos pra dar o dinheiro.

function freezeMe (thePlayer)
	if getPedOccupiedVehicle (thePlayer) then
		local playerVehicle = getPlayerOccupiedVehicle (thePlayer)
	    local currentFreezeStatus = isElementFrozen (playerVehicle)
	    local newFreezeStatus = not currentFreezeStatus
		setElementFrozen ( playerVehicle, newFreezeStatus )
		setTimer (setElementFrozen, 5000, 1, thePlayer, false)
	end
end

 

42 minutes ago, Lord Henry said:

Sim. Por isso que deixei 5 segundos no exemplo. Pois no seu código ele demora 5 segundos pra dar o dinheiro.

Deu certo mano! Thanks 

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