#Gubiani Posted August 7, 2018 Share Posted August 7, 2018 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 Lord Henry Posted August 7, 2018 Other Languages Moderators Share Posted August 7, 2018 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 Lord Henry Posted August 7, 2018 Other Languages Moderators Share Posted August 7, 2018 (edited) --------------------------------------- Corrigindo esse problema de sintaxe, ele funcionou o emprego aqui. MAS, tenho algumas observações: 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. 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. 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: 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. 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. 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 August 7, 2018 by Lord Henry 1 Link to comment
#Gubiani Posted August 11, 2018 Author Share Posted August 11, 2018 Valeu Lord consegui arrumar! 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