Jump to content

Preciso de ajuda em um trabalho.


Recommended Posts

E ai, gurizada, criei um trabalho recentemente de leiteiro, tu pega o veiculo na fazenda entrega o leite, depois retorna à fazenda recebe a grana e o veiculo é destruido, certo isso ta rodando de boa, o meu problema é quando o player sair do veiculo durante o trabalho ele deverá ser destruído em um tempo, fiz duas funções na qual estão na "onVehicleEnter" e "onVehicleExit", porém não está reconhecendo e não acontece nada, quem poder ajudar fico grato. as funções ditas acima estão em: sairVeh e entrarVeh

 
 mInicio = createMarker (1073.20752, -343.23349, 72.99219, "cylinder", 1.5, 255, 0, 0, 255, getRootElement())
 bInicio = createBlipAttachedTo (mInicio, 42, 2, 255, 255, 255, 255, 600)
 tabela = {} -- tabela vazia para receber valores.
 globaltimer = {}

function tInicial(elemento, dim)
	if source == mInicio then -- Inicio do trabalho.
        if elemento and isElement(elemento) and getElementType(elemento) == "player" and dim and not tabela[elemento] then -- se o elemento for um player e estiver na mesma dimensão e não ter nenhum valor na tabela então:
        	if not getPedOccupiedVehicle (elemento) then
                  tabela[elemento] = {} -- cria um valor na tabela
                  tabela[elemento]["skin"] = setElementModel (elemento, 158) -- cria um valor chamada skin dentro da tabela e ela seta a skin do player para 158
                  tabela[elemento]["carro"] = createVehicle (478, 1059.50110, -342.88776, 73.99219, 0, 0, 0) -- cria um veiculo e grava na tabela do player.
                  tabela[elemento]["marker"] = createMarker (1545.62268, 16.95301, 23.14063, "cylinder", 1.5, 255, 0, 0, 255) -- cria um marker e grava na tabela do player.
                  tabela[elemento]["blip"] = createBlipAttachedTo (tabela[elemento]["marker"], 0, 2, 255, 0, 0, 255, 9999) -- cria um blip no local do marker de inicio e grava na tabela do player.
                  addEventHandler("onMarkerHit", tabela[elemento]["marker"], tEntrega) -- quando o player atingir o marker chama a função tEntrega.
            end
        end     
 	end
end
addEventHandler("onMarkerHit", mInicio, tInicial) -- quando o player atingir o marker inicia a função tInicial

function sairVeh (elemento)
  local meuCarro = false
	if elemento and isElement(elemento) and getElementType(elemento) == "player" and tabela[elemento] and tabela[elemento]["carro"] then
		if source == vehicle then
				meuCarro = vehicle	
        end
    end
	if not meuCarro then return end
		if not isTimer (globalTimer[meuCarro]) then
	      outputChatBox ("#FF0000ATENÇÃO: #8E8E8ERetorne para o veiculo da fazenda em 1 minuto, senão, perderá o trabalho!", elemento, 255, 255, 255, true)
		globalTimer[meuCarro] = setTimer (function()
			destroyElement (meuCarro) -- Respawna o veículo.
										end, 20000, 1) 
		else
        resetTimer (globalTimer[meuCarro])
	end	
end
addEventHandler ("onVehicleExit", root, sairVeh)

function entrarveh (elemento)
	local meuCarro = false 
	if elemento and isElement(elemento) and getElementType(elemento) == "player" and tabela[elemento] and tabela[elemento]["carro"] then
		if source == vehicle then
				meuCarro = vehicle	
		end
	end
	if not meuCarro then return end
	if isTimer (globalTimer[meuCarro]) then
		killTimer (globalTimer[meuCarro]) 
	end
end
addEventHandler ("onVehicleEnter", root, entrarVeh)

function tEntrega(elemento, dim)
	if elemento and isElement(elemento) and getElementType(elemento) == "vehicle" and dim then
		p = getVehicleOccupant(elemento, 0)
		if p and tabela[p] and tabela[p]["carro"] and elemento == tabela[p]["carro"] then
			destroyElement(tabela[p]["blip"])
			destroyElement(tabela[p]["marker"])
			tabela[p]["mVeh"] = createMarker (1045.57288, -306.22220, 72.99308, "cylinder", 1.5, 255, 0, 0, 255)
            tabela[p]["bmVeh"] = createBlipAttachedTo (tabela[p]["mVeh"], 0, 2, 255, 0, 0, 255, 9999)
            outputChatBox("#FF6600AVISO: #8E8E8EVocê entregou os leites! Volte para a fazenda.", p, 255, 255, 255, true)
            addEventHandler ("onMarkerHit", tabela[p]["mVeh"], tEntregaVeh)
		else
			outputChatBox("#FF0000ATENÇÃO:  #8E8E8EEste não é o carro da fazenda!", p, 255, 0, 0, true)
		end
	end
end

function tEntregaVeh(elemento, dim)
	if elemento and isElement(elemento) and getElementType(elemento) == "vehicle" and dim then
		p = getVehicleOccupant(elemento, 0)
		if p and tabela[p] and tabela[p]["carro"] and elemento == tabela[p]["carro"] then
			destroyElement (tabela[p]["carro"])
			destroyElement (tabela[p]["mVeh"])
			destroyElement (tabela[p]["bmVeh"])
			tabela[p]["carro"] = nil
			tabela[p]["marker"] = nil
			tabela[p] = nil
			givePlayerMoney(p, 150)
			outputChatBox("#2FC401PARABÉNS: #8E8E8EVocê fez a entrega com sucesso e ganhou #2FC401$150", p, 255, 255, 255, true)

        else
          outputChatBox ("#FF0000ATENÇÃO: #8E8E8EEste não é o carro da fazenda!", p, 255, 0, 0, true)
        end
    end
end

 

Link to comment
  • Other Languages Moderators

Testando seu script, de cara já veio erro na linha 54, que a função entrarVeh não existe. Vc colocou o nome da função com letra minúscula: entrarveh

Sempre deixe o /debugscript 3 ligado para procurar por erros antes de criar um post.

Link to comment
  • Other Languages Moderators

---------------------------------------

Corrigindo esse problema de sintaxe, ele funcionou o emprego aqui.

MAS, tenho algumas observações:

  1. Você precisa dar feedback ao jogador quando ele entra no primeiro marker para fazer aparecer o caminhão, ex: AVISO: Você começou a trabalhar de leiteiro, entre no caminhão ao lado e leve o leite até o blip vermelho. Dessa forma o jogador não precisa adivinhar o que deve fazer em seguida.
  2. Você só paga $150 ao jogador por cada viagem, isso é pouco, considerando o tempo de viagem e a dificuldade de subir o morro de volta até a fazenda com um caminhão de baixa potência. A não ser que no seu servidor a economia baseie-se em supervalorização da moeda, você deve pagar mais ao jogador.
  3. Você deixou o blip do emprego com distância de visualização máxima (9999). Isso não é recomendável, pois se você tiver vários empregos com blips assim, seu radar ficará entupido de blips e pelo que estou percebendo, vc irá usar o mesmo blip para todos os empregos (T = Trabalho), o que aumentará ainda mais a confusão do jogador. Minha sugestão é deixar no máximo 600, assim o blip só aparecerá no radar quando o jogador estiver mais próximo dele.

------------------------------------------------

Em relação ao código:

  1. Não entendi a necessidade de vc criar uma matriz bidimensional para colocar os markers, blips e veículos. Mas como isso parece estar funcionando, nem tentei mudar isso.
  2. Preste atenção nas cores que vc usa no seu outputChatBox. Não há necessidade de colocar um código #HEX no início do texto se você pode colocá-lo direto nos parâmetros da função. Isso é questão de otimização. Ex:
    outputChatBox ("#FF0000Texto em vermelho #00FF00e verde.", thePlayer, 255, 255, 255, true) -- Errado.
    outputChatBox ("Texto em vermelho #00FF00e verde.", thePlayer, 255, 0, 0, true) -- Certo.
    Ambos vão enviar isso: Texto em vermelho e verde.
  3. Sua função de onVehicleExit está parando de executar na metade pois você colocou uma condição impossível de validar. Depure essa função colocando alguns print por ela, dessa maneira: (precisa estar com o /debugscript 3 ligado, como sempre)
function sairVeh (elemento)
	local meuCarro = false
	print ("01") -- Coloque alguns desses pela função, para usar como depurador de código e saber onde ele está parando.
	if elemento and isElement(elemento) and getElementType(elemento) == "player" and tabela[elemento] and tabela[elemento]["carro"] then
		print ("02")
		if source == vehicle then -- vehicle não foi declarado em lugar nenhum, ele nunca vai passar daqui. (source ~= null)
			print ("03")
			meuCarro = vehicle
		end
	end
	if not meuCarro then return end -- Sempre vai parar aqui e não vai nem executar o resto. Pois meuCarro sempre será false.
	print ("04")
	if not isTimer (globalTimer[meuCarro]) then
		print ("05")
		outputChatBox ("ATENÇÃO: #8E8E8ERetorne para o veiculo da fazenda em 1 minuto, senão, perderá o trabalho!", elemento, 255, 0, 0, true)
		globalTimer[meuCarro] = setTimer (function()
			print ("06")
			destroyElement (meuCarro)
		end, 20000, 1) 
	else
		print ("07")
		resetTimer (globalTimer[meuCarro])
	end	
end
addEventHandler ("onVehicleExit", root, sairVeh)

Resultado da depuração:

01
02

Ele não chegou a ler do 03 em diante. Então significa que depois do 02 e antes do 03, houve algum problema.

Esse problema não aparece de cara no /debugscript 3 pois não é um problema de sintaxe.

Edited by Lord Henry
  • Thanks 1
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...