Recommended Posts

Quando o player chegar no marker, ao invez de pegar o trabalho de uma vez, ele ter q digitar o comando do addCommandHandler

Obs: A Mensagem de quando ele passa em cima do marker mandando o player digitar o tal comando eu ja sei fazer.. mas tentei de varias formas adicionar o addCommandHandler e fracassei!

Eu tambem queria saber, como faço pro marker do "Mfim4" sumir após o player completar o trabalho! 

O Marker do Mfim4 fica no lugar, mesmo sem a pessoa estar no trabalho e ele nao sai

 

server.lua

local Minicio4 = createMarker (1038.02332, -1337.93970, 12.8, "cylinder", 1, 16, 102, 231, 100)
local Mfim4 = createMarker ( 2801.29663, -1088.36243, 30.72142 -1, "cylinder", 2, 0 ,255 ,0, 255 )

local Bfim4 = createBlipAttachedTo ( Mfim4, 19 )
setElementVisibleTo ( Bfim4, root, false )


veh = {}
function incio4 (source)
if isElementWithinMarker(source, Minicio4) then
if veh[source] and isElement( veh[source] ) then destroyElement ( veh[source] )
veh[source] = nil
end
x,y,z = getElementPosition(source)
Trabalho = true
veh[source] = createVehicle(498,1009.50598, -1355.16431, 13.34428)
setElementVisibleTo ( Bfim4, source, true )
warpPedIntoVehicle ( source, veh[source] )
dxMsg(source, "Leve as rosquinhas ate a bandeira no radar!", "info")
end
end
addEventHandler( "onMarkerHit", Minicio4, incio4 )

function fim4 (source)
if veh[source] and isElement(veh[source]) then
destroyElement (veh[source])
givePlayerMoney(source,2500) -------------- Caso queira mudar o dinheiro que o player vai ganhar ao finalizar o trabalho
setElementVisibleTo ( Bfim4, source, false )
setElementVisibleTo ( entregafinalizar, source, false )
dxMsg(source, "Você entregou as rosquinhas a fabrica e ganhou R$2500!", "sucess")
else
end
end
addEventHandler("onMarkerHit",Mfim4 ,fim4)

function sair4 (source)
if (veh[source]) and isElement(veh[source]) then
setElementVisibleTo ( Bfim4, source, false )
destroyElement (veh[source])
dxMsg(source, "Você saiu do veiculo e perdeu o trabalho!", "error")
else
end
end
addEventHandler ( "onVehicleExit", getRootElement(), sair4 )

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

 

 

 

O Client eu fiz um script text que fica esrito em cima do marker o nome do trabalho mas isso nao tem nada haver ent n colocarei!

 

Edited by #Horus

Share this post


Link to post
10 minutes ago, Lord Henry said:

Da próxima vez, poste na sessão destinada a programação lua.
https://forum.mtasa.com/forum/127-programação-em-lua/

E deixe seu código adequadamente indentado, senão fica ilegível.

 

Perdão! Posso repostar lá ? Eu re-fiz o codigo, so que mudei o nome dos markers e da funcoes para facilitar 

Edited by #Horus

Share this post


Link to post
35 minutes ago, #Horus said:

Perdão! Posso repostar lá ? Eu re-fiz o codigo, so que mudei o nome dos markers e da funcoes para facilitar 

Código devidamente indentado é assim:

 

local Minicio4 = createMarker (1038.02332, -1337.93970, 12.8, "cylinder", 1, 16, 102, 231, 100)
local Mfim4 = createMarker ( 2801.29663, -1088.36243, 30.72142 -1, "cylinder", 2, 0 ,255 ,0, 255 )

local Bfim4 = createBlipAttachedTo ( Mfim4, 19 )
setElementVisibleTo ( Bfim4, root, false )

local veh = {}
function incio4 (source)
	if isElementWithinMarker(source, Minicio4) then
		if veh[source] and isElement( veh[source] ) then 
      		destroyElement ( veh[source] )
			veh[source] = nil
		end
		x,y,z = getElementPosition(source)
		Trabalho = true
		veh[source] = createVehicle(498,1009.50598, -1355.16431, 13.34428)
		setElementVisibleTo ( Bfim4, source, true )
		warpPedIntoVehicle ( source, veh[source] )
		dxMsg(source, "Leve as rosquinhas ate a bandeira no radar!", "info")
	end
end	
addEventHandler( "onMarkerHit", Minicio4, incio4 )

function fim4 (source)
	if veh[source] and isElement(veh[source]) then
		destroyElement (veh[source])
		givePlayerMoney(source,2500) -------------- Caso queira mudar o dinheiro que o player vai ganhar ao finalizar o trabalho
		setElementVisibleTo ( Bfim4, source, false )
		setElementVisibleTo ( entregafinalizar, source, false )
		dxMsg(source, "Você entregou as rosquinhas a fabrica e ganhou R$2500!", "sucess")
	-- else Por que esse else aqui? ...
	end
end
addEventHandler("onMarkerHit",Mfim4 ,fim4)

function sair4 (source)
	if (veh[source]) and isElement(veh[source]) then
		setElementVisibleTo ( Bfim4, source, false )
		destroyElement (veh[source])
		dxMsg(source, "Você saiu do veiculo e perdeu o trabalho!", "error")
	-- else Por que esse else aqui de novo? ...
	end
end
addEventHandler ( "onVehicleExit", getRootElement(), sair4 )

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

Agora me responda as perguntas que lhe fiz no script, deixei 2 linhas comentadas queria sua explicação.

 

Outra coisa não vi nada declarado relacionado a 'entregafinalizar' e no script você usa 

setElementVisibleTo ( entregafinalizar, source, false )

 

Edited by OverKILL
  • Thanks 1

Share this post


Link to post
On 24/11/2018 at 20:33, OverKILL said:

Código devidamente indentado é assim:

 


local Minicio4 = createMarker (1038.02332, -1337.93970, 12.8, "cylinder", 1, 16, 102, 231, 100)
local Mfim4 = createMarker ( 2801.29663, -1088.36243, 30.72142 -1, "cylinder", 2, 0 ,255 ,0, 255 )

local Bfim4 = createBlipAttachedTo ( Mfim4, 19 )
setElementVisibleTo ( Bfim4, root, false )

local veh = {}
function incio4 (source)
	if isElementWithinMarker(source, Minicio4) then
		if veh[source] and isElement( veh[source] ) then 
      		destroyElement ( veh[source] )
			veh[source] = nil
		end
		x,y,z = getElementPosition(source)
		Trabalho = true
		veh[source] = createVehicle(498,1009.50598, -1355.16431, 13.34428)
		setElementVisibleTo ( Bfim4, source, true )
		warpPedIntoVehicle ( source, veh[source] )
		dxMsg(source, "Leve as rosquinhas ate a bandeira no radar!", "info")
	end
end	
addEventHandler( "onMarkerHit", Minicio4, incio4 )

function fim4 (source)
	if veh[source] and isElement(veh[source]) then
		destroyElement (veh[source])
		givePlayerMoney(source,2500) -------------- Caso queira mudar o dinheiro que o player vai ganhar ao finalizar o trabalho
		setElementVisibleTo ( Bfim4, source, false )
		setElementVisibleTo ( entregafinalizar, source, false )
		dxMsg(source, "Você entregou as rosquinhas a fabrica e ganhou R$2500!", "sucess")
	-- else Por que esse else aqui? ...
	end
end
addEventHandler("onMarkerHit",Mfim4 ,fim4)

function sair4 (source)
	if (veh[source]) and isElement(veh[source]) then
		setElementVisibleTo ( Bfim4, source, false )
		destroyElement (veh[source])
		dxMsg(source, "Você saiu do veiculo e perdeu o trabalho!", "error")
	-- else Por que esse else aqui de novo? ...
	end
end
addEventHandler ( "onVehicleExit", getRootElement(), sair4 )

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

Agora me responda as perguntas que lhe fiz no script, deixei 2 linhas comentadas queria sua explicação.

 

Outra coisa não vi nada declarado relacionado a 'entregafinalizar' e no script você usa 


setElementVisibleTo ( entregafinalizar, source, false )

 

Foi erro meu perdão, eu ia colocar um DxMsg em baixo dos else, mais decidir que não, e acabei esquecendo de apagar, mesma coisa com o entregafinalizar, esqueci de renomear perdão! 

Edited by #Horus

Share this post


Link to post
On 24/11/2018 at 19:47, #Horus said:

Quando o player chegar no marker, ao invez de pegar o trabalho de uma vez, ele ter q digitar o comando do addCommandHandler

Eu sinceramente faria automaticamente em vez de ter que digitar o comando, pois acho um saco ter que usar comando pra tudo. Mas enfim, vamos lá:

Quando o player encostar no marker, você terá a função com o evento onMarkerHit, que é ativada ao colidir nesse marker, certo? Da mesma forma que teria se fosse iniciar o trabalho automaticamente. Mas em vez de iniciar o trabalho, dentro dessa função você apenas irá colocar o outputChatBox avisando pra ele usar o comando.

Na função do addCommandHandler, você deve verificar se o jogador está dentro do marker de início e se ele está a pé, caso contrário ele poderá usar o comando enquanto já estiver trabalhando. Caso ele esteja a pé e esteja dentro do marker então inicia o trabalho, criando o veículo, movendo o player nele e criando o marker de objetivo e setando como data, o próprio jogador como dono dele. Além disso, ainda nesta função, depois de criar o marker de objetivo, você deve adicionar o evento onMarkerHit do marker de objetivo por meio do addEventHandler.

Na função do onMarkerHit do marker de objetivo, você deve verificar se o elemento que colidiu nele é o dono do marker, caso contrário qualquer um que colidir nele iria receber a grana do marker. Se colidir no marker e for o dono dele, remove o evento que ativa essa função usando removeEventHandler, destrói o blip, destrói o marker de objetivo e o veículo do trabalho. Então dá o dinheiro pro jogador e pronto.

Se o player sair do veículo você deve ter uma função com o evento onVehicleExit, que removerá o evento do marker de objetivo, destruirá o veículo, o blip e o marker de objetivo.

local Minicio4 = createMarker (1038, -1338, 12.8, "cylinder", 1, 16, 102, 231, 255) -- 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 Mfim4 = {} -- Marker final específico do player.
local Bfim4 = {} -- Blip do marker final específico do player.

function inicio4 (hitElement)
	if hitElement and getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("Digite /trampo4 para iniciar este emprego.", hitElement) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
	end
end	
addEventHandler ("onMarkerHit", Minicio4, inicio4)

function startJob4 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio4) 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 (498, 1009.5, -1355.2, 13.4) -- Cria o veículo do trampo.
		Mfim4[thePlayer] = createMarker (2801.3, -1088.4, 31 - 1, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador.
		setElementData (Mfim4[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		Bfim4[thePlayer] = createBlipAttachedTo (Mfim4[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
		outputChatBox ("Leve as rosquinhas ate a bandeira no radar!", thePlayer) -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("trampo4", startJob4)

function fim4 (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:
			removeEventHandler ("onMarkerHit", Mfim4[hitElement], fim4) -- Remove o evento que ativa este marker, pois ele já funcionou.
			destroyElement (veh[hitElement]) -- Destroi o veículo do trampo do jogador.
			givePlayerMoney (hitElement, 2500) -- Dá o dinheiro do trampo.
			destroyElement (Bfim4[hitElement]) -- Destroi o blip anexado ao marker de objetivo.
			Bfim4[hitElement] = nil
			destroyElement (Mfim4[hitElement]) -- Destroi o marker de objetivo.
			Mfim4[hitElement] = nil
			outputChatBox ("Você entregou as rosquinhas à fabrica e ganhou R$2500!", hitElement) -- Avisa o jogador que ele completou o trampo.
		end
	end
end

function sair4 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim4[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim4[thePlayer] = nil
		outputChatBox ("Você saiu do veiculo e perdeu o trabalho!", thePlayer) -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair4) -- Executa essa função quando o player sair de um veículo qualquer.

 

  • Thanks 1

Share this post


Link to post
2 hours ago, Lord Henry said:

Eu sinceramente faria automaticamente em vez de ter que digitar o comando, pois acho um saco ter que usar comando pra tudo. Mas enfim, vamos lá:

Quando o player encostar no marker, você terá a função com o evento onMarkerHit, que é ativada ao colidir nesse marker, certo? Da mesma forma que teria se fosse iniciar o trabalho automaticamente. Mas em vez de iniciar o trabalho, dentro dessa função você apenas irá colocar o outputChatBox avisando pra ele usar o comando.

Na função do addCommandHandler, você deve verificar se o jogador está dentro do marker de início e se ele está a pé, caso contrário ele poderá usar o comando enquanto já estiver trabalhando. Caso ele esteja a pé e esteja dentro do marker então inicia o trabalho, criando o veículo, movendo o player nele e criando o marker de objetivo e setando como data, o próprio jogador como dono dele. Além disso, ainda nesta função, depois de criar o marker de objetivo, você deve adicionar o evento onMarkerHit do marker de objetivo por meio do addEventHandler.

Na função do onMarkerHit do marker de objetivo, você deve verificar se o elemento que colidiu nele é o dono do marker, caso contrário qualquer um que colidir nele iria receber a grana do marker. Se colidir no marker e for o dono dele, remove o evento que ativa essa função usando removeEventHandler, destrói o blip, destrói o marker de objetivo e o veículo do trabalho. Então dá o dinheiro pro jogador e pronto.

Se o player sair do veículo você deve ter uma função com o evento onVehicleExit, que removerá o evento do marker de objetivo, destruirá o veículo, o blip e o marker de objetivo.


local Minicio4 = createMarker (1038, -1338, 12.8, "cylinder", 1, 16, 102, 231, 255) -- 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 Mfim4 = {} -- Marker final específico do player.
local Bfim4 = {} -- Blip do marker final específico do player.

function inicio4 (hitElement)
	if hitElement and getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("Digite /trampo4 para iniciar este emprego.", hitElement) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
	end
end	
addEventHandler ("onMarkerHit", Minicio4, inicio4)

function startJob4 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio4) 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 (498, 1009.5, -1355.2, 13.4) -- Cria o veículo do trampo.
		Mfim4[thePlayer] = createMarker (2801.3, -1088.4, 31 - 1, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador.
		setElementData (Mfim4[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		Bfim4[thePlayer] = createBlipAttachedTo (Mfim4[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
		outputChatBox ("Leve as rosquinhas ate a bandeira no radar!", thePlayer) -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("trampo4", startJob4)

function fim4 (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:
			removeEventHandler ("onMarkerHit", Mfim4[hitElement], fim4) -- Remove o evento que ativa este marker, pois ele já funcionou.
			destroyElement (veh[hitElement]) -- Destroi o veículo do trampo do jogador.
			givePlayerMoney (hitElement, 2500) -- Dá o dinheiro do trampo.
			destroyElement (Bfim4[hitElement]) -- Destroi o blip anexado ao marker de objetivo.
			Bfim4[hitElement] = nil
			destroyElement (Mfim4[hitElement]) -- Destroi o marker de objetivo.
			Mfim4[hitElement] = nil
			outputChatBox ("Você entregou as rosquinhas à fabrica e ganhou R$2500!", hitElement) -- Avisa o jogador que ele completou o trampo.
		end
	end
end

function sair4 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim4[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim4[thePlayer] = nil
		outputChatBox ("Você saiu do veiculo e perdeu o trabalho!", thePlayer) -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair4) -- Executa essa função quando o player sair de um veículo qualquer.

 

Obrigado Henry! Mas especificamente vamos dizer, eu fiz um script de trabalho basicamente semelhante a este, mas vamos supor que eu queira adicionar o addCommandHandler apenas, pois agora eu entendi sobre a data que voce criou e ja fiz praticamente o mesmo nesse meu trabalho semelhante, porem com nomes diferentes, ai agora oque eu teria de fazer para adicionar o addCommandHandler? Eu fiz o mesmo ali, pois tinha visto ate em um script que tinha baixado da net. coloquei o addEventHandler junto na function, e no final agora preciso colocar o addCommandHandler certo ?

Edited by #Horus

Share this post


Link to post
2 hours ago, Lord Henry said:

Eu sinceramente faria automaticamente em vez de ter que digitar o comando, pois acho um saco ter que usar comando pra tudo. Mas enfim, vamos lá:

Quando o player encostar no marker, você terá a função com o evento onMarkerHit, que é ativada ao colidir nesse marker, certo? Da mesma forma que teria se fosse iniciar o trabalho automaticamente. Mas em vez de iniciar o trabalho, dentro dessa função você apenas irá colocar o outputChatBox avisando pra ele usar o comando.

Na função do addCommandHandler, você deve verificar se o jogador está dentro do marker de início e se ele está a pé, caso contrário ele poderá usar o comando enquanto já estiver trabalhando. Caso ele esteja a pé e esteja dentro do marker então inicia o trabalho, criando o veículo, movendo o player nele e criando o marker de objetivo e setando como data, o próprio jogador como dono dele. Além disso, ainda nesta função, depois de criar o marker de objetivo, você deve adicionar o evento onMarkerHit do marker de objetivo por meio do addEventHandler.

Na função do onMarkerHit do marker de objetivo, você deve verificar se o elemento que colidiu nele é o dono do marker, caso contrário qualquer um que colidir nele iria receber a grana do marker. Se colidir no marker e for o dono dele, remove o evento que ativa essa função usando removeEventHandler, destrói o blip, destrói o marker de objetivo e o veículo do trabalho. Então dá o dinheiro pro jogador e pronto.

Se o player sair do veículo você deve ter uma função com o evento onVehicleExit, que removerá o evento do marker de objetivo, destruirá o veículo, o blip e o marker de objetivo.


local Minicio4 = createMarker (1038, -1338, 12.8, "cylinder", 1, 16, 102, 231, 255) -- 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 Mfim4 = {} -- Marker final específico do player.
local Bfim4 = {} -- Blip do marker final específico do player.

function inicio4 (hitElement)
	if hitElement and getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("Digite /trampo4 para iniciar este emprego.", hitElement) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
	end
end	
addEventHandler ("onMarkerHit", Minicio4, inicio4)

function startJob4 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio4) 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 (498, 1009.5, -1355.2, 13.4) -- Cria o veículo do trampo.
		Mfim4[thePlayer] = createMarker (2801.3, -1088.4, 31 - 1, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador.
		setElementData (Mfim4[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		Bfim4[thePlayer] = createBlipAttachedTo (Mfim4[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
		outputChatBox ("Leve as rosquinhas ate a bandeira no radar!", thePlayer) -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("trampo4", startJob4)

function fim4 (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:
			removeEventHandler ("onMarkerHit", Mfim4[hitElement], fim4) -- Remove o evento que ativa este marker, pois ele já funcionou.
			destroyElement (veh[hitElement]) -- Destroi o veículo do trampo do jogador.
			givePlayerMoney (hitElement, 2500) -- Dá o dinheiro do trampo.
			destroyElement (Bfim4[hitElement]) -- Destroi o blip anexado ao marker de objetivo.
			Bfim4[hitElement] = nil
			destroyElement (Mfim4[hitElement]) -- Destroi o marker de objetivo.
			Mfim4[hitElement] = nil
			outputChatBox ("Você entregou as rosquinhas à fabrica e ganhou R$2500!", hitElement) -- Avisa o jogador que ele completou o trampo.
		end
	end
end

function sair4 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim4[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim4[thePlayer] = nil
		outputChatBox ("Você saiu do veiculo e perdeu o trabalho!", thePlayer) -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair4) -- Executa essa função quando o player sair de um veículo qualquer.

 

Caso eu faça por exemplo, apos ele entregar as rosquinhas no Mfim4, ele partir para outro marker, vc me da +- um exemplo, eu teria de criar uma função para cada local de entrega ? 

Obs: Desculpe-me por tudo isso! É Porque estou tentando fazer um mini pack de trabalhos para o meu servidor, mas sem baixar da net, fazer eles do meu jeito sabe ? 

Edited by #Horus

Share this post


Link to post

No caso de ser possível fazer várias entregas seguidas no mesmo emprego, eu primeiramente colocaria todas as coordenadas possíveis dos objetivos em uma table. Depois usaria um math.random para obter uma dessas coordenadas aleatoriamente. Exemplo de math.random:

destinos = {
	[1] = {2060.7685546875, -1941.1181640625, 13.14103603363}, -- [int] = {x, y, z},
	[2] = {2086.9731445313, -1571.7086181641, 13.38231754303},
	[3] = {1922.9521484375, -1758.1259765625, 13.16081237793},
	[4] = {1032.1564941406, -1552.7036132813, 13.545647621155},
	[5] = {1133.2607421875, -1286.6201171875, 13.245727539063},
	[6] = {1162.1402587891, -1717.9711914063, 13.945343971252},
	[7] = {1249.0665283203, -2049.9089355469, 59.945289611816},
	[8] = {825.31280517578, -1870.5678710938, 12.8671875},
	[9] = {405.81915283203, -1778.1610107422, 5.5676455497742},
	[10] = {438.53366088867, -1559.4774169922, 27.096113204956}
}

function testeRandom (thePlayer)
	local x, y, z = unpack (destinos[math.random (#destinos)]) -- x, y, z recebem uma coordenada aleatória da table destinos.
	setElementPosition (thePlayer, x, y, z, true) -- Coloca o player que executou o comando nessa coordenada, só pra testes.
end
addCommandHandler ("eae", testeRandom)

 

  • Thanks 1

Share this post


Link to post
1 hour ago, Lord Henry said:

No caso de ser possível fazer várias entregas seguidas no mesmo emprego, eu primeiramente colocaria todas as coordenadas possíveis dos objetivos em uma table. Depois usaria um math.random para obter uma dessas coordenadas aleatoriamente. Exemplo de math.random:


destinos = {	[1] = {2060.7685546875, -1941.1181640625, 13.14103603363}, -- [int] = {x, y, z},	[2] = {2086.9731445313, -1571.7086181641, 13.38231754303},	[3] = {1922.9521484375, -1758.1259765625, 13.16081237793},	[4] = {1032.1564941406, -1552.7036132813, 13.545647621155},	[5] = {1133.2607421875, -1286.6201171875, 13.245727539063},	[6] = {1162.1402587891, -1717.9711914063, 13.945343971252},	[7] = {1249.0665283203, -2049.9089355469, 59.945289611816},	[8] = {825.31280517578, -1870.5678710938, 12.8671875},	[9] = {405.81915283203, -1778.1610107422, 5.5676455497742},	[10] = {438.53366088867, -1559.4774169922, 27.096113204956}}function testeRandom (thePlayer)	local x, y, z = unpack (destinos[math.random (#destinos)]) -- x, y, z recebem uma coordenada aleatória da table destinos.	setElementPosition (thePlayer, x, y, z, true) -- Coloca o player que executou o comando nessa coordenada, só pra testes.endaddCommandHandler ("eae", testeRandom)

 

E seu por exemplo quiser criar umas 3-2 coordenadas apenas ? Aí após ele entregar nas 2 primeiras coordenadas dos markers, na última ele entrega e já recebe o dinheiro finalizando o trabalho

Share this post


Link to post

Ah, vc não quer fazer aleatório? Quer fazer sequência, é isso? E o player só recebe após completar a última entrega?

  • Thanks 1

Share this post


Link to post
29 minutes ago, Lord Henry said:

Ah, vc não quer fazer aleatório? Quer fazer sequência, é isso? E o player só recebe após completar a última entrega?

Sim sim isso mesmo! 

Share this post


Link to post
destinos = {
	[1] = {2801.3, -1088.4, 30}, -- table com todos os destinos em ordem.
	[2] = {1110, -966.67, 42},
	[3] = {192.8, -1746.18, 3.5}
}

local Minicio4 = createMarker (1038, -1338, 12.8, "cylinder", 1, 16, 102, 231, 255) -- 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 Mfim4 = {} -- Marker final específico do player.
local Bfim4 = {} -- Blip do marker final específico do player.

function inicio4 (hitElement)
	if hitElement and getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("Digite /trampo4 para iniciar este emprego.", hitElement) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
	end
end	
addEventHandler ("onMarkerHit", Minicio4, inicio4)

function startJob4 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio4) 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 (498, 1009.5, -1355.2, 13.4) -- Cria o veículo do trampo.
		local x, y, z = unpack (destinos[1]) -- x, y, z recebem as coordenadas do destinos[1].
		Mfim4[thePlayer] = createMarker (x, y, z, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador na coordenada 1.
		setElementData (Mfim4[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		setElementData (Mfim4[thePlayer], "trip", 1) -- Seta uma data no marker pra saber a qual coordenada ele pertence.
		Bfim4[thePlayer] = createBlipAttachedTo (Mfim4[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
		outputChatBox ("Leve as rosquinhas até a bandeira no radar! (1/"..#destinos..")", thePlayer) -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("trampo4", startJob4)

function fim4 (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.
				outputChatBox ("Você entregou as rosquinhas no destino. Siga para o próximo. ("..getElementData (source, "trip").."/"..#destinos..")", hitElement) -- 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)
				removeEventHandler ("onMarkerHit", Mfim4[hitElement], fim4) -- 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, 2500) -- Dá o dinheiro do trampo.
				destroyElement (Bfim4[hitElement]) -- Destroi o blip anexado ao marker de objetivo.
				Bfim4[hitElement] = nil
				destroyElement (Mfim4[hitElement]) -- Destroi o marker de objetivo.
				Mfim4[hitElement] = nil
				outputChatBox ("Você entregou as rosquinhas a todos os destinos marcados e ganhou R$2500!", hitElement) -- Avisa o jogador que ele completou o trampo.
			end
		end
	end
end

function sair4 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim4[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim4[thePlayer] = nil
		outputChatBox ("Você saiu do veiculo e perdeu o trabalho!", thePlayer) -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair4) -- Executa essa função quando o player sair de um veículo qualquer.

 

  • Thanks 2

Share this post


Link to post
22 minutes ago, Lord Henry said:

destinos = {
	[1] = {2801.3, -1088.4, 30}, -- table com todos os destinos em ordem.
	[2] = {1110, -966.67, 42},
	[3] = {192.8, -1746.18, 3.5}
}

local Minicio4 = createMarker (1038, -1338, 12.8, "cylinder", 1, 16, 102, 231, 255) -- 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 Mfim4 = {} -- Marker final específico do player.
local Bfim4 = {} -- Blip do marker final específico do player.

function inicio4 (hitElement)
	if hitElement and getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then -- Quando o jogador colide no marker e está sem veículo, então:
		outputChatBox ("Digite /trampo4 para iniciar este emprego.", hitElement) -- Avisa pra ele usar o comando /trampo4 para começar o emprego.
	end
end	
addEventHandler ("onMarkerHit", Minicio4, inicio4)

function startJob4 (thePlayer, cmd)
	if isElementWithinMarker (thePlayer, Minicio4) 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 (498, 1009.5, -1355.2, 13.4) -- Cria o veículo do trampo.
		local x, y, z = unpack (destinos[1]) -- x, y, z recebem as coordenadas do destinos[1].
		Mfim4[thePlayer] = createMarker (x, y, z, "cylinder", 2, 0, 255, 0, 255, thePlayer) -- Cria o marker do objetivo do jogador na coordenada 1.
		setElementData (Mfim4[thePlayer], "owner", thePlayer) -- Seta esse jogador como dono do marker, para que só funcione com ele.
		setElementData (Mfim4[thePlayer], "trip", 1) -- Seta uma data no marker pra saber a qual coordenada ele pertence.
		Bfim4[thePlayer] = createBlipAttachedTo (Mfim4[thePlayer], 19) -- Cria o blip e anexa ao marker.
		warpPedIntoVehicle (thePlayer, veh[thePlayer]) -- Teleporta o player para o veículo do trampo.
		outputChatBox ("Leve as rosquinhas até a bandeira no radar! (1/"..#destinos..")", thePlayer) -- Avisa o player o que ele tem que fazer agora.
		addEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Adiciona o evento que faz funcionar o marker do objetivo.
	end
end
addCommandHandler ("trampo4", startJob4)

function fim4 (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.
				outputChatBox ("Você entregou as rosquinhas no destino. Siga para o próximo. ("..getElementData (source, "trip").."/"..#destinos..")", hitElement) -- 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)
				removeEventHandler ("onMarkerHit", Mfim4[hitElement], fim4) -- 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, 2500) -- Dá o dinheiro do trampo.
				destroyElement (Bfim4[hitElement]) -- Destroi o blip anexado ao marker de objetivo.
				Bfim4[hitElement] = nil
				destroyElement (Mfim4[hitElement]) -- Destroi o marker de objetivo.
				Mfim4[hitElement] = nil
				outputChatBox ("Você entregou as rosquinhas a todos os destinos marcados e ganhou R$2500!", hitElement) -- Avisa o jogador que ele completou o trampo.
			end
		end
	end
end

function sair4 (thePlayer)
	if (veh[thePlayer]) and isElement(veh[thePlayer]) then -- Se o veículo do trampo existe, então:
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) -- Remove o evento que ativa o marker de objetivo.
		destroyElement (veh[thePlayer]) -- Destroi o veículo do trampo.
		destroyElement (Bfim4[thePlayer]) -- Destroi o blip de objetivo do trampo.
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) -- Destroi o marker de objetivo do trampo.
		Mfim4[thePlayer] = nil
		outputChatBox ("Você saiu do veiculo e perdeu o trabalho!", thePlayer) -- Avisa o jogador que ele falhou no trampo.
	end
end
addEventHandler ("onVehicleExit", getRootElement(), sair4) -- Executa essa função quando o player sair de um veículo qualquer.

 

Agora aprendi a mecher com table!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mas assim, do jeito que  voce colocou no codigo ja vai em sequencia do [1] ao [3] ? 

te devo muitas henry................. 

Share this post


Link to post
5 hours ago, #Horus said:

Agora aprendi a mecher com table!!!

Agora é botar a mão na massa e fazer os paranauê mano.

5 hours ago, #Horus said:

mas assim, do jeito que  voce colocou no codigo ja vai em sequencia do [1] ao [3] ? 

Sim, já vai do [1] ao [3], pois está somando +1 a cada vez que ele entrega em um lugar.

5 hours ago, #Horus said:

te devo muitas henry................. 

O like, por exemplo. XD

  • Thanks 1

Share this post


Link to post
8 hours ago, Lord Henry said:

Agora é botar a mão na massa e fazer os paranauê mano.

Sim, já vai do [1] ao [3], pois está somando +1 a cada vez que ele entrega em um lugar.

O like, por exemplo. XD

Henry só mais uma coisa ksks, como faço pra quando o player sair do servidor, ele ser removido das datas do trabalho e do trabalho em geral ?

Share this post


Link to post
3 hours ago, Lord Henry said:

Usando onPlayerQuit.

function 4sair (thePlayer)
		removeEventHandler ("onMarkerHit", Mfim4[thePlayer], fim4) 
		destroyElement (Bfim4[thePlayer]) 
		Bfim4[thePlayer] = nil
		destroyElement (Mfim4[thePlayer]) 
		Mfim4[thePlayer] = nil
	end
end
addEventHandler ("onPlayerQuit", getRootElement(), sair4) 
 

Certo ?

Share this post


Link to post

Remova thePlayer do parâmetro (linha 1) e use source no lugar de thePlayer; O nome da função está diferente do nome chamado em addEventHandler e também inválido; O removeEventHandler não é necessário.

Edit: também vai precisar fazer o mesmo com o valor veh[jogador].

Edited by DNL291
  • Thanks 1

Share this post


Link to post
function 4sair (source)
		removeEventHandler ("onMarkerHit", Mfim4[source], fim4) 
		destroyElement (Bfim4[source]) 
		Bfim4[source] = nil
		destroyElement (Mfim4[source]) 
		Mfim4[source] = nil
	end
end
addEventHandler ("onPlayerQuit", getRootElement(), 4sair) 
 

Correto ?

Share this post


Link to post

Você só trocou thePlayer por source, mas não é isso que tá no meu comentário acima.

Edited by DNL291
  • Thanks 1

Share this post


Link to post
2 minutes ago, DNL291 said:

Você só trocou thePlayer por source, mas não é isso que tá no meu comentário acima.

Mas assim, para quando ele sair do servidor, ser removido das datas e de tudo do trabalho 

Share this post


Link to post

Enfim, teve várias coisas ali no meu post que você não deve ter entendido; Tente isto:

function sair4 ()
		if isElement(Bfim4[source]) then destroyElement (Bfim4[source]) end
		if isElement(Mfim4[source]) then destroyElement (Mfim4[source]) end
		if isElement(veh[source]) then destroyElement(veh[source]) end
		Bfim4[source] = nil
		Mfim4[source] = nil
		veh[source] = nil
	end
end
addEventHandler("onPlayerQuit", getRootElement(), sair4)

 

Share this post


Link to post
58 minutes ago, DNL291 said:

Você só trocou thePlayer por source, mas não é isso que tá no meu comentário acima.

O veh no seu post você quis se referir ao local veh { } né ? Obrigado mano

Share this post


Link to post
20 minutes ago, #Horus said:

O veh no seu post você quis se referir ao local veh { } né ? Obrigado mano

o veh é uma tabela, você provavelmente não entendeu o que ele disse.

Quando ele fala "parâmetro", quer dizer aquilo que fica dentro do () da função, que no caso seria thePlayer, não havia necessidade daquilo, e poderia trocar o elemento thePlayer por source nas funções.

Pelo que notei, aparente está utilizando mods editados da net, no seu lugar, começaria a estudar mais, e tentar fazer meus próprios mods, do 0.

A função que o @DNL291 chamou com o evento onPlayerQuit, destrói os elementos (caso eles existam, ou seja, utilizando isElement).

Na sua primeira função, você utilizava o evento, com as funções de destroyElement e deixava as tabelas nulas, porém, não fazia uma verificação, causando erros desnecessário toda vez que um jogador saísse do servidor.

  • Thanks 1

Share this post


Link to post

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.