Recommended Posts

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--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- 

MfJpcsR

36rmFb0

mdUykZb

Edited by UltimaterSCR

Share this post


Link to post
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.

  • Thanks 1

Share this post


Link to post

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.