#Horus Posted November 24, 2018 Share Posted November 24, 2018 (edited) 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 November 24, 2018 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted November 24, 2018 Other Languages Moderators Share Posted November 24, 2018 Da próxima vez, poste na sessão destinada a programação lua.https://forum.multitheftauto.com/forum/127-programação-em-lua/ E deixe seu código adequadamente indentado, senão fica ilegível. Link to comment
#Horus Posted November 24, 2018 Author Share Posted November 24, 2018 (edited) 10 minutes ago, Lord Henry said: Da próxima vez, poste na sessão destinada a programação lua.https://forum.multitheftauto.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 November 24, 2018 by #Horus Link to comment
Jonas^ Posted November 24, 2018 Share Posted November 24, 2018 (edited) 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 November 24, 2018 by OverKILL 1 Link to comment
#Horus Posted November 28, 2018 Author Share Posted November 28, 2018 (edited) 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 November 28, 2018 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted November 28, 2018 Other Languages Moderators Share Posted November 28, 2018 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. 1 Link to comment
#Horus Posted November 28, 2018 Author Share Posted November 28, 2018 (edited) 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 November 28, 2018 by #Horus Link to comment
#Horus Posted November 28, 2018 Author Share Posted November 28, 2018 (edited) 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 November 28, 2018 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted November 29, 2018 Other Languages Moderators Share Posted November 29, 2018 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) 1 Link to comment
#Horus Posted November 29, 2018 Author Share Posted November 29, 2018 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 Link to comment
Other Languages Moderators Lord Henry Posted November 29, 2018 Other Languages Moderators Share Posted November 29, 2018 Ah, vc não quer fazer aleatório? Quer fazer sequência, é isso? E o player só recebe após completar a última entrega? 1 Link to comment
#Horus Posted November 29, 2018 Author Share Posted November 29, 2018 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! Link to comment
Other Languages Moderators Lord Henry Posted November 29, 2018 Other Languages Moderators Share Posted November 29, 2018 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. 2 Link to comment
#Horus Posted November 29, 2018 Author Share Posted November 29, 2018 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................. Link to comment
Other Languages Moderators Lord Henry Posted November 29, 2018 Other Languages Moderators Share Posted November 29, 2018 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 1 Link to comment
#Horus Posted November 30, 2018 Author Share Posted November 30, 2018 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 ? Link to comment
Other Languages Moderators Lord Henry Posted November 30, 2018 Other Languages Moderators Share Posted November 30, 2018 Usando onPlayerQuit. Link to comment
#Horus Posted December 1, 2018 Author Share Posted December 1, 2018 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 ? Link to comment
DNL291 Posted December 1, 2018 Share Posted December 1, 2018 (edited) 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 December 1, 2018 by DNL291 1 Link to comment
#Horus Posted December 1, 2018 Author Share Posted December 1, 2018 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 ? Link to comment
DNL291 Posted December 1, 2018 Share Posted December 1, 2018 (edited) Você só trocou thePlayer por source, mas não é isso que tá no meu comentário acima. Edited December 1, 2018 by DNL291 1 Link to comment
#Horus Posted December 1, 2018 Author Share Posted December 1, 2018 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 Link to comment
DNL291 Posted December 1, 2018 Share Posted December 1, 2018 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) Link to comment
#Horus Posted December 1, 2018 Author Share Posted December 1, 2018 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 Link to comment
Vazern Posted December 1, 2018 Share Posted December 1, 2018 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. 1 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