#Horus Posted January 2, 2019 Share Posted January 2, 2019 (edited) 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 January 2, 2019 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted January 3, 2019 Other Languages Moderators Share Posted January 3, 2019 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) 1 Link to comment
#Horus Posted January 3, 2019 Author Share Posted January 3, 2019 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
DNL291 Posted January 3, 2019 Share Posted January 3, 2019 @#Horus Já avisei antes, e você já deveria saber disso. Por que você não cria o tópico que é relacionado a scripting no local correto? Crie aqui da próxima vez: https://forum.multitheftauto.com/forum/127-programação-em-lua/ 1 Link to comment
#Horus Posted January 3, 2019 Author Share Posted January 3, 2019 7 minutes ago, DNL291 said: @#Horus Já avisei antes, e você já deveria saber disso. Por que você não cria o tópico que é relacionado a scripting no local correto? Crie aqui da próxima vez: https://forum.multitheftauto.com/forum/127-programação-em-lua/ Perdão crio la da próxima vez, é porque sempre que crio tópico, clico em Portuguese/Português e clico em start topic Link to comment
Other Languages Moderators Lord Henry Posted January 3, 2019 Other Languages Moderators Share Posted January 3, 2019 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. 1 Link to comment
#Horus Posted January 3, 2019 Author Share Posted January 3, 2019 (edited) 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 January 3, 2019 by #Horus Link to comment
#Horus Posted January 3, 2019 Author Share Posted January 3, 2019 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
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