UltimaterSCR Posted February 10, 2019 Share Posted February 10, 2019 (edited) Galera, estou aprendendo a fazer scripts, e editei um script que achei na Internet de uma forma que ele pudesse ter quantos markers eu quisesse, no caso de um trabalho, porém, gostaria de saber se existe alguma forma de eu deixa-lo mais otimizado, usando loops ou algo do tipo, eu evitaria de ter que escrever quase a mesma coisa para cada Marker? Eu estou querendo fazer um trabalho de Sedex, e peguei de outro script que eu achei, uma barra que carrega na tela, então usei setElementFrozen para congelar o veículo, então a barrinha aparece e carrega, quando ela termina de carregar, o veículo é descongelado, até ai tudo bem, porém, estou usando um script que faz com que uma mensagem apareça no topo da tela, "Parabéns, você entregou uma encomenda (1/10), então tentei fazer com que primeiro aparecesse "Entregando encomenda", e após os 5 segundos do setElementFrozen, aparecesse a mensagem que entregou. Mas não estou conseguindo fazer. Então tentei fazer junto a barra de carregamento, para aparecer o ENTREGANDO ENCOMENDA, mas também não consegui. Vou deixar apenas os 2 primeiros markers, para vocês verem sobre o que eu falei de Loops, se há alguma forma de utilizar nesse código, peço desculpas se estiver mal identado, ainda sou iniciante em programação. Peço que ninguém pegue esses códigos para si, pois é um script que editei totalmente para o meu servidor, e não ficaria feliz se fosse roubado!!! ----------------------- Server-Side ----------------------- --Markers Minicio = createMarker (1222.713, -1799.09, 16.555 -1, "cylinder", 1.5, 255 ,255 ,0, 130) mk01 = createMarker ( 1261.461, -1831.496, 13.385 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk02 = createMarker ( 1426.6989746094,-961.05804443359,36.34884262085 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk03 = createMarker ( 2175.4973144531,1122.1480712891,12.679032325745 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk04 = createMarker ( 2079.6228027344,1444.5053710938,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk05 = createMarker ( 2170.8229980469,1678.8610839844,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk06 = createMarker ( 2102.5812988281,2217.4921875,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk07 = createMarker ( 2031.4614257813,1923.1041259766,12.294158935547 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk08 = createMarker ( 1697.4500732422,1451.1950683594,10.763988494873 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk09 = createMarker ( 1561.4448242188,1078.6629638672,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk10 = createMarker ( 954.54888916016,-922.796875,44.080444335938 -1, "checkpoint", 3, 255 ,255 ,0, 130) --1066.3614501953,-1341.8918457031,13.3828125 -1 --Blips Attached Binicio = createBlipAttachedTo (Minicio, 42) B01 = createBlipAttachedTo ( mk01, 19 ) B02 = createBlipAttachedTo ( mk02, 19 ) B03 = createBlipAttachedTo (mk03, 19) B04 = createBlipAttachedTo (mk04, 19) B05 = createBlipAttachedTo (mk05, 19) B06 = createBlipAttachedTo (mk06, 19) B07 = createBlipAttachedTo (mk07, 19) B08 = createBlipAttachedTo (mk08, 19) B09 = createBlipAttachedTo (mk09, 19) B10 = createBlipAttachedTo ( mk10, 19 ) --Markers Visibilidade setElementVisibleTo (Minicio, root, true) setElementVisibleTo (mk01, root, false) setElementVisibleTo (mk02, root, false) setElementVisibleTo (mk03, root, false) setElementVisibleTo (mk04, root, false) setElementVisibleTo (mk05, root, false) setElementVisibleTo (mk06, root, false) setElementVisibleTo (mk07, root, false) setElementVisibleTo (mk08, root, false) setElementVisibleTo (mk09, root, false) setElementVisibleTo (mk10, root, false) --Blips Visibilidade setElementVisibleTo (Binicio, root, false) setElementVisibleTo (B01, root, false) setElementVisibleTo (B02, root, false) setElementVisibleTo (B03, root, false) setElementVisibleTo (B04, root, false) setElementVisibleTo (B05, root, false) setElementVisibleTo (B06, root, false) setElementVisibleTo (B07, root, false) setElementVisibleTo (B08, root, false) setElementVisibleTo (B09, root, false) setElementVisibleTo (B10, root, false) veh = {} function inicio (source) if isElementWithinMarker(source, Minicio) and veh[source] and isElement( veh[source] ) then destroyElement ( veh[source] ) veh[source] = nil end x,y,z = getElementPosition(source) veh[source] = createVehicle(413, 1239.748, -1829.575, 13.404, -0, 0, 274.52) warpPedIntoVehicle ( source, veh[source] ) setCameraTarget (source) setElementData ( source, "inicio", true ) --Aqui ele torna a Data Inicio verdadeira, registrando que o player passou pela marker inicio. setElementVisibleTo ( B01, source, true ) --Torna visivel o Blip 1 setElementVisibleTo ( mk01, source, true) --Torna visivel o Marker 1 exports.Scripts_Dxmessages:outputDx(source, "Entregue as encomendas nos pontos marcados em seu GPS", "info") --outputChatBox ("#ffcc00[ #ffffffSedex #ffcc00] #ffffffEntregue as encomendas nos pontos marcados em seu GPS.",source,0,0,0,true ) end addEventHandler( "onMarkerHit", Minicio, inicio ) function mk1 (source) if isElementWithinMarker(source, mk01) and veh[source] and isElement(veh[source]) then --Checa se o elemento que está na marker 1 é o source, com o veículo source. if getElementData(source, "inicio", true) then --Ele verifica se o jogador passou pela Marker para iniciar o serviço, antes de poder pegar a Marker 1 setElementFrozen(veh[source], true) --Freeza o veículo. triggerClientEvent(source, "doShowProgressBar", source) --Barra que mostra o processo da entrega da encomenda. givePlayerMoney(source,300) setElementVisibleTo ( B01, source, false ) --Ao pegar o Marker 1, ele torna o Marker 1 invisivel. setElementVisibleTo (mk01, source, false) --Ao pegar o Blip 1, ele torna o Marker 1 invisivel. --outputChatBox("#ffcc00[ #ffffffSedex #ffcc00] #ffffffVocê entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)",source,0,0,0,true) setElementVisibleTo ( B02, source, true ) --Aqui ele torna visivel o Marker 2, para o player continuar a entrega. setElementVisibleTo (mk02, source, true) --Aqui ele torna visivel o Blip 2, para o player continuar a entrega. setTimer(setElementFrozen, 5000,1, veh[source], false) --Depois de 5 segundos o veículo é descongelado msg = setTimer(exports.Scripts_Dxmessages:outputDx(source, "Entregando encomenda", "info"), 5000, 1) --Tentativa da mensagem de entregando encomenda if isTimer(msg) == false then exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success") --Aqui era para quando o timer se tornasse falso, ou seja, não existisse mais aparecia a mensagem de entregue. setElementData ( source, "Marker01", true ) --Aqui ele registra que o player passou pela primeira marca. setTimer ( setElementData, 50, 1, source, "inicio", false ) --Aqui ele registra o inicio como false, para o player não poder pegar mais de uma vez a mesma marca. end end end end addEventHandler("onMarkerHit",mk01 ,mk1) --Depois disso, ele repete tudo de novo. function mk2 (source) if isElementWithinMarker(source, mk02) and veh[source] and isElement(veh[source]) then --Checa se o elemento que está na marker 2 é o source, com o veículo source. if getElementData(source, "Marker01", true) then --Checa se passou pela Marker 1, e assim vai... setElementFrozen(veh[source], true) triggerClientEvent(source, "doShowProgressBar", source) givePlayerMoney(source,300) setElementVisibleTo ( B02, source, false ) setElementVisibleTo (mk02, source, false) outputChatBox("#ffcc00[ #ffffffSedex #ffcc00] #ffffffVocê entregou uma encomenda! #ffcc00(#ffffff02/10#ffcc00)",source,0,0,0,true) setElementVisibleTo ( B03, source, true ) setElementVisibleTo (mk03, source, true) setTimer(setElementFrozen, 5000,1, veh[source], false) msg = setTimer(exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success"), 5000, 1) if isTimer(msg) then exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success") setElementData ( source, "Marker02", true ) setTimer ( setElementData, 50, 1, source, "Marker01", false ) end end end end addEventHandler("onMarkerHit",mk02 ,mk2) ----------------------- Client-Side ----------------------- --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Ajustar Posição da Tela--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- local screenW,screenH = guiGetScreenSize() -- Função de Reposicionar Largura e altura da tela local resW, resH = 1280, 720 local x, y = (resW/screenW),(resH/screenH) -- juntar dois elementos em x, y --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Ajustar Posição da Tela--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Barra de Carregamento--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- local tempo, valor = 1000, 4 -- Tempo de carregamento local startTick local pBarCurWidth, pBarWidth = 0, 700 -- largura e altura do dx addEvent("doShowProgressBar", true) -- Ativar um evento personalizado addEventHandler("doShowProgressBar", root, function() startTick = getTickCount() -- Começar contagem if addEventHandler("onClientRender", root, renderDXProgressBar) then -- se executar essa função fara alguma coisa, no caso n tera nada caso queira usar para desbugar script end end ) function renderDXProgressBar() local now = getTickCount() if (now + startTick) >= tempo then -- Aumentar a largura da barra pBarCurWidth = pBarCurWidth + valor startTick = getTickCount() if pBarCurWidth > pBarWidth then -- Barra de progresso cheia pBarCurWidth = pBarWidth pBarCurWidth = 0 removeEventHandler("onClientRender", root, renderDXProgressBar) startTick = nil end end dxDrawRectangle(x*358, y*316, pBarWidth, 30, tocolor(0, 0, 0, 150), false) dxDrawRectangle(x*358, y*316, pBarCurWidth, 30, tocolor(255, 255, 0, 200), false) dxDrawText( tostring( math.ceil((pBarCurWidth * 100) / pBarWidth) ).." %", x*358, y*316, (x*358) + pBarWidth, (y*316) + 29, tocolor(255,255,255), 2) dxDrawText("ENTREGANDO ENCOMENDA", x*358, y*316, tocolor(255,255,255,255),2, "roboto") --Onde tentei colocar o texto para aparecer na tela. end --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Barra de Carregamento--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- Edited February 10, 2019 by UltimaterSCR Link to comment
EvaRozik Posted February 11, 2019 Share Posted February 11, 2019 local TABLE_DATA = {} -- criaremos uma tabela para armazenar os markers e blips local TABLE_LOCATIONS = { -- x, y, z, type, size, r, g, b, a, visibleTo, blipId -- posição X, posição Y, posição Z, tipo do marker, tamanho do marker, cor r, cor g, cor b, transparência, é visível para todos? (true para sim, false para não), id do blip {1222.713, -1799.09, 16.555, "cylinder", 1.5, 255, 255, 0, 130, true, 42}, {1261.461, -1831.496, 13.385, "checkpoint", 3, 255, 255, 0, 130, false, 19}, {1426.6989746094, -961.05804443359, 36.34884262085, "checkpoint", 3, 255, 255, 0, 130, false, 19}, } addEventHandler("onResourceStart", resourceRoot, function() -- separaremos a tabela em Markers e Blips para não confundirmos TABLE_DATA.Markers = {} TABLE_DATA.Blips = {} -- criaremos também uma tabela para os veículos que os jogadores irão obter TABLE_DATA.Vehicles = {} -- faremos o loop da tabela 'TABLE_LOCATIONS' for i, v in pairs(TABLE_LOCATIONS) do --[[ Atenção! Veja o comentário abaixo de 'TABLE_LOCATIONS' para se informar do que irei dizer. - Cada item da tabela possui uma posição de localização, vejamos abaixo: v[1] = x v[2] = y v[3] = z v[4] = type v[5] = size v[6] = r v[7] = g v[8] = b v[9] = a v[10] = visibleTo v[11] = blipId Logo, aplicaremos esses valores na função createMarker ]]-- TABLE_DATA.Markers[i] = createMarker(v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]) -- configurar para aparecer ou não aparecer para todos setElementVisibleTo(TABLE_DATA.Markers[i], root, v[10]) -- criar e sincronizar o blip (ao marker) TABLE_DATA.Blips[i] = createBlipAttachedTo(TABLE_DATA.Markers[i], v[11]) -- adicionar um ID (e também salvaremos o blip) para cada marker, fazendo com que seja fácil obtê-lo em funções setElementData(TABLE_DATA.Markers[i], "marker_id", i) -- a letra i significa o total de markers dentro da tabela, neste caso temos apenas 3 items na tabela setElementData(TABLE_DATA.Markers[i], "marker_blip", TABLE_DATA.Blips[i]) -- adicionaremos uma função de hit/leave para todos os markers addEventHandler("onMarkerHit", TABLE_DATA.Markers[i], __markerHitFunction) addEventHandler("onMarkerLeave", TABLE_DATA.Markers[i], __markerLeaveFunction) end end ) function __markerHitFunction(hitElement, dimension) -- hitElement = jogador -- verificaremos se o hitElement é um jogador de fato e se a dimensão é a dele if getElementType(hitElement) == "player" and dimension then -- obtendo o id e blip do marker (lembre-se que source é o elemento do marker) local id = tonumber(getElementData(source, "marker_id")) local blip = getElementData(source, "marker_blip") -- verifique se o marker possui um id e um blip if id and blip then --[[ Visto que o marker "Início" está na primeira posição da tabela, então vamos verificar se o id dele é 1 e então executaremos sua função ]]-- if id == 1 then -- iremos executar a sua função, UltimaterSCR if TABLE_DATA.Vehicles[hitElement] and isElement(TABLE_DATA.Vehicles[hitElement]) then destroyElement(TABLE_DATA.Vehicles[hitElement]) end -- criar o veículo TABLE_DATA.Vehicles[hitElement] = createVehicle(413, 1239.748, -1829.575, 13.404, -0, 0, 274.52) warpPedIntoVehicle(hitElement, TABLE_DATA.Vehicles[hitElement]) -- configurar o elemento marker e blip para serem vistos apenas para este jogador setElementVisibleTo(source, hitElement, true) setElementVisibleTo(blip, hitElement, true) -- fazer as demais configurações e enviar a mensagem ao jogador setElementData(hitElement, "inicio", true) exports.Scripts_Dxmessages:outputDx(hitElement, "Entregue as encomendas nos pontos marcados em seu GPS", "info") end end end end Com certeza não ficou completo, mas espero que você entenda o conceito de loops. Sobre as funções, fiz apenas o básico e o código necessita ser continuado para que os markers de entrega sejam funcionais. 1 Link to comment
UltimaterSCR Posted February 11, 2019 Author Share Posted February 11, 2019 Cara entendi perfeitamente com essa explicação prática, muito obrigado ! 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