Tony Scripter Posted April 21, 2021 Share Posted April 21, 2021 Estou desenvolvendo um emprego, para aprimorar a minha programação e tenho dificuldades em tabela, queria saber como eu poderia fazer um emprego no seguinte modelo: TabelaMarkers = { {1, 1, 1}, -- Primeiro Marker {2, 2, 2}, -- Segundo Marker {3, 3, 3}, -- Terceiro Marker {4, 4, 4}, -- Quarto Marker } O jogador iria pegar um carro, e iria gerar o primeiro marker, quando o player passar por cima do marker o veiculo para e fica freezado durante 5 segundos, depois que foi liberado gera o 2 marker, depois o 3 marker e por ultimo o 4 marker. Link to comment
Other Languages Moderators Lord Henry Posted April 21, 2021 Other Languages Moderators Share Posted April 21, 2021 Client-side: Spoiler local tabelaMarkers = { [1] = {0, 0, 2.1}, -- Não precisaria indexar nesse caso, mas fiz só pra ficar mais fácil saber qual posição é de qual marker. [2] = {12, 2.45, 2.1}, [3] = {22.5, -9.7, 2.1}, -- Mudei as coordenadas apenas para facilitar no teste. [4] = {36, -26, 1.5}, } local contador = 1 -- Apenas um contador que serve como iterador, para saber qual a próxima coordenada a ser usada. local theMarker = false -- Variável do marker em si. local oCarro = false -- Variável temporária do veículo em si. addEvent ("startJob", true) -- Adiciona um evento customizado, que pode ser chamado por outros scripts inclusive server-side. addEventHandler ("startJob", root, function (theCar) -- Esse evento é chamado pelo server quando o jogador usa o comando /job. theCar é o veículo criado para o jogador usar. if (source == localPlayer) then -- Evita de ativar com outros jogadores. O source foi definido lá no trigger do server no 3 parâmetro. oCarro = theCar -- Fiz isso apenas para ser possível ler o veículo nas outras funções deste script. addEventHandler ("onClientVehicleEnter", oCarro, generateMarker) -- Agora que o veículo pode ser lido pelo client, adiciona este evento que ativa quando alguém entra nele. end end) function generateMarker (ped, seat) -- Função ativada quando alguém entra no veículo theCar. if (ped == localPlayer and seat == 0) then -- Se quem entrou no veículo for o localPlayer e como motorista, então: local x, y, z = unpack (tabelaMarkers[contador]) -- Obtém as coordenadas do item [1] da tabela. if (isElement (theMarker)) then -- Se já existe o marker (o que não deveria, mas evita bugs), então: setElementPosition (theMarker, x, y, z) -- Seta a posição do marker nas coordenadas obtidas. else -- Se não existe o marker, então cria ele nas coordenadas obtidas. theMarker = createMarker (x, y, z, "cylinder") end outputChatBox ("Siga os markers até o destino.") end end function MarkerHit (hitPlayer) -- Essa função só funciona após criar o marker. if (hitPlayer == localPlayer) then -- Se o elemento que colidiu for o localPlayer, então: contador = contador + 1 -- Incrementa +1 no contador. Ou seja, se antes ele era 1, agora é 2. if (contador <= #tabelaMarkers) then -- Se existe o item [contador] na tabela, então: (se o contador é menor ou igual ao tamanho da tabela) local x, y, z = unpack (tabelaMarkers[contador]) -- Obtém as coordenadas do item [contador] da tabela. if (isElement (theMarker)) then -- Se já existe o marker (o que deve sim existir), então: setElementPosition (theMarker, x, y, z) -- Seta a posição do marker para as novas coordenadas. else -- Se não existe o marker (por bug), então: theMarker = createMarker (x, y, z, "cylinder") -- Cria o marker nas novas coordenadas. end else -- Se não existe o item [contador] na tabela, o que indica que não tem a próxima coordenada, então: destroyElement (theMarker) -- Destrói o marker theMarker = nil -- Anula a variável dele para liberar espaço da memória. outputChatBox ("Chegou ao destino.") -- Manda isso pro jogador que colidiu no último marker. contador = 1 -- Reseta o contador para não bugar na próxima vez que ele fizer a viagem. removeEventHandler ("onClientVehicleEnter", oCarro, generateMarker) -- Remove este evento, pois ele será adicionado novamente quando o jogador usar o comando /job pra recomeçar. triggerServerEvent ("deleteMyVeh", resourceRoot) -- Ativa este evento no server, que serve para deletar o veículo e anular sua variável lá. oCarro = nil -- Anula essa variável temporária. end end end addEventHandler ("onClientMarkerHit", resourceRoot, MarkerHit) -- Ativa essa função quando algo colidir em algum marker deste resource. Server-side: Spoiler local jobCars = {} -- Tabela vazia onde ficarão os veículos do emprego. addCommandHandler ("job", function (thePlayer, cmd) -- Comando para iniciar este teste. if (isElement (jobCars[thePlayer])) then -- Evita duplicar o veículo ao usar /job várias vezes. destroyElement (jobCars[thePlayer]) -- Destrói o veículo que já existia antes de criar outro. end jobCars[thePlayer] = createVehicle (589, 0, -10, 3.5) -- Cria o veículo. triggerClientEvent (thePlayer, "startJob", thePlayer, jobCars[thePlayer]) -- Ativa o evento "startJob" no cliente do thePlayer, setando thePlayer como source e jobCars[thePlayer] como 1 parâmetro de função. end) function destroyMyVeh () if (client) then -- Se esta função está sendo ativada por algum client, então: if (isElement (jobCars[client])) then -- client = localPlayer que ativou o evento "deleteMyVeh" no client-side. destroyElement (jobCars[client]) -- Destrói o veículo deste jogador. jobCars[client] = nil -- Anula a variável do veículo para liberar espaço na memória. end elseif (isElement (jobCars[source])) then -- Se o evento está sendo ativado normalmente pelo server, ou seja, pelo onPlayerQuit, então source é o jogador que saiu do server. Se existe o veículo do jogador que quitou do server, então: destroyElement (jobCars[source]) -- Destrói o veículo do jogador que quitou. jobCars[source] = nil -- Anula a variável do veículo para liberar espaço na memória. end end addEvent ("deleteMyVeh", true) -- Adiciona este evento customizado, que poderá ser chamado por outros scripts, incluindo client-side. addEventHandler ("deleteMyVeh", root, destroyMyVeh) -- Faz com que o evento customizado ative esta função. addEventHandler ("onPlayerQuit", root, destroyMyVeh) -- Também ativa esta função quando alguém desconectar do servidor. Fiz este exemplo pois é muito detalhe pra explicar só com texto. 2 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