Jump to content

Como posso otimizar o script?


Recommended Posts

Posted

Boa noite, fiz um script quase completo, queria perguntar se existe algumas trocas que eu poderia fazer para deixá-lo mais curto e/ou otimizado.

SERVER-SIDE:

entrada = createMarker(1411.7902832031, -1699.7880859375, 14.1, "arrow", 1, 255,255,0, 50)
saida = createMarker(-2029.7740478516, -119.3343963623, 1035.7, "arrow", 1, 255,255,0, 50)
cnh = createMarker(-2033.0969238281,-117.43886566162,1034.2, "cylinder", 1, 255,0,0, 50)
etapas = {

(createMarker(-868.33447265625,-1079.029296875,94.109962463379, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-798.85778808594,-1009.9039916992,81.114715576172, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-623.44805908203,-991.40704345703,66.213768005371, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-526.03784179688,-904.98547363281,55.71215057373, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-385.86874389648,-837.59167480469,47.206745147705, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-298.58383178711,-875.92852783203,46.712970733643, "checkpoint", 0, 255,0,0, 20)),

(createMarker(-342.224609375,-780.23712158203,31.194166183472, "checkpoint", 0, 255,0,0, 20))

}

carro = createVehicle(402, 0,0,0)

function marker()

	setElementInterior(saida, 3)
	setElementInterior(cnh, 3)

end

marker()

function mensagem(hitElement)

	if getElementData(hitElement, "cnh-carro") == false then

	outputChatBox("| DETRAN | digite #ff0000/cnh #ffffffpara fazer a sua.", hitElement, 255,255,255, true)

else
	outputChatBox("| DETRAN | você já possui a carteira de habilitação.", hitElement, 255,255,255, true)
end
end
addEventHandler("onMarkerHit", cnh, mensagem)

function inicio(thePlayer)


	if isElementWithinMarker(thePlayer, cnh) and getElementData(thePlayer, "cnh-carro") == false then

		fadeCamera(thePlayer, false)

		setTimer (

			function ( ... )

		setElementInterior(thePlayer, 0)
		setElementPosition(thePlayer, -876.94409179688,-1112.4317626953,98.609375)
		setElementInterior(carro, 0)
		setElementPosition(carro, -876.94409179688,-1112.4317626953,98.609375)
		warpPedIntoVehicle(thePlayer, carro)
		setMarkerSize(etapas[1], 3)

			end, 1000, 1, thePlayer)


		setTimer (

			function ( ... )


		fadeCamera(thePlayer, true)

			end, 2000, 1, thePlayer)

	end	
end
addCommandHandler("cnh", inicio)

function etapa1(hitElement)

	setMarkerSize(etapas[1], 0)
	setMarkerSize(etapas[2], 3)

end
addEventHandler("onMarkerHit", etapas[1], etapa1)

function etapa2(hitElement)

	setMarkerSize(etapas[2], 0)
	setMarkerSize(etapas[3], 3)

end
addEventHandler("onMarkerHit", etapas[2], etapa2)

function etapa3(hitElement)

	setMarkerSize(etapas[3], 0)
	setMarkerSize(etapas[4], 3)

end
addEventHandler("onMarkerHit", etapas[3], etapa3)

function etapa4(hitElement)

	setMarkerSize(etapas[4], 0)
	setMarkerSize(etapas[5], 3)

end
addEventHandler("onMarkerHit", etapas[4], etapa4)

function etapa5(hitElement)

	setMarkerSize(etapas[5], 0)
	setMarkerSize(etapas[6], 3)

end
addEventHandler("onMarkerHit", etapas[5], etapa5)

function etapa6(hitElement)

	setMarkerSize(etapas[6], 0)
	setMarkerSize(etapas[7], 3)

end
addEventHandler("onMarkerHit", etapas[6], etapa6)

function etapa7(hitElement)

	setMarkerSize(etapas[7], 0)
	outputChatBox("| INSTRUTOR DIZ: você concluiu o teste camarada, pegue sua carteira de habilitação.", hitElement)
	destroyElement(carro)
	fadeCamera(hitElement, false)

	setTimer (
		function ()

	setElementInterior(hitElement, 3)
	setElementPosition(hitElement, -2029.2668457031,-116.76811218262,1035.171875)
	setElementData(hitElement,"cnh-carro", true)
	fadeCamera(hitElement, true)

		end, 2000, 1, hitElement)

end
addEventHandler("onMarkerHit", etapas[7], etapa7)

function aoSair(thePlayer)

	setMarkerSize(etapas[1], 0)
	outputChatBox("| INSTRUTOR DIZ: você saiu do veículo e não terminou a prova.", thePlayer)
	destroyElement(carro)
	fadeCamera(thePlayer, false)

	setTimer (

		function ()

	setElementInterior(thePlayer, 3)
	setElementPosition(thePlayer, -2029.2668457031,-116.76811218262,1035.171875)
	fadeCamera(thePlayer, true)

		end, 2000, 1, thePlayer)


end
addEventHandler("onVehicleExit", getRootElement(), aoSair)

Depois pretendo fazer o CLIENT-SIDE em CEGUI.

Obrigado pela compreensão :)

  • Moderators
Posted

Não exagere no uso de linhas em branco.

E não precisa da função marker(). Coloque aqueles setElementInterior fora de funções.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted

 

  • Otimização básica :

Faça as variáveis localmente sempre que possível.
Você poderia ter feito esse código client-side; Quanto mais código sever-side, mais 'peso' para o servidor.

  • Encurtar e Otimizar o código

Você pode deixar uma só função lidando com o onMarkerHit. Além disso, em vez de ter criado todas as markers numa tabela, faça isso com os locais x,y,z da marker.
Para controlar a rota, utilizar uma variável que irá manter o index da marker na tabela; Esse será o índice da tabela que corresponde ao marker atual criado, dessa forma, quando criar a próxima rota é só indexar a tabela das coordenadas incrementando +1 no índice.

Este exemplo mostra isso na prática:

local markerAtual
local rota
function inicio(thePlayer)
    
    rota = 1
    local x,y,z = unpack(etapas[rota])
    markerAtual = createMarker( x,y,z, "checkpoint", 0, 255,0,0, 20 )
end
addCommandHandler("cnh", inicio)

addEventHandler("onMarkerHit", resourceRoot, function()

    if isElement(markerAtual) then
        destroyElement(markerAtual)
    end
    rota = rota + 1
    if rota == #etapas then
        return outputChatBox( "Todas rotas concluídas" )
    end
    local x,y,z = unpack(etapas[rota])
    markerAtual = createMarker( x,y,z, "checkpoint", 0, 255,0,0, 20 )
end, true, "low")

Outra outra, sempre use tabulação e não quebre muitas linhas excessivamente.

Please do not PM me with scripting related question nor support, use the forums instead.

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.
×
×
  • Create New...