Jump to content

Recuperar Veículo


Recommended Posts

49 minutes ago, Lord Henry said:

Atualize essa aba com F5. Eu coloquei o código depois.

ah ok, vc eh foda, vou testar ele aqui entao ja pronto daí vou assistir o vídeo entender bem toda a linha de raciocínio e comandos, daí eu vou tentar escrever o código pra entender melhor cada função

1 hour ago, Lord Henry said:

Vídeo:

  Reveal hidden contents

[vídeo removido pelo usuário]

Script:

  Reveal hidden contents

 



detran = { -- x, y, z, rotation, vehicle, colShape, ownerAccount
	[1] = {746.4, -1334.81, 13.54, 180, false, nil, nil}, -- Esta coordenada está no seu script.
	[2] = {756.4, -1334.81, 13.54, 180, false, nil, nil}, -- Esta coordenada eu inventei.
}

customCarNames = {}

function criarShapes () -- Cria cada colShape nas vagas e coloca eles na mesma table das vagas, como sendo o 5º elemento de cada uma.
    for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
        vaga[6] = createColSphere (vaga[1], vaga[2], vaga[3], 4) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 4 metros de raio.
    end
    addEventHandler ("onColShapeLeave", resourceRoot, liberarVaga) -- Ativa essa função quando um elemento sair de dentro de qualquer colShape deste resource. (se usar root, funcionaria com todos os colShapes do server e seria mais pesado de processar)
    addEventHandler ("onColShapeHit", resourceRoot, liberarVehicle) -- Ativa essa função quando um elemento entrar em qualquer colShape deste resource. Vai verificar se o elemento que entrou é o dono daquela vaga.
end
addEventHandler ("onResourceStart", resourceRoot, criarShapes)

addEvent("WarpMyVehicle", true)
addEventHandler("WarpMyVehicle", root, function(id)
	local vehicle = getVehicleByID(id)
    if isElement(vehicle) then
        if (not getVehicleOccupant (vehicle, 0)) and (not getVehicleOccupant (vehicle, 1)) and (not getVehicleOccupant (vehicle, 2)) and (not getVehicleOccupant (vehicle, 3)) then -- Se o veículo a ser rebocado está vazio, então:
            for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
                if (vaga[5] == vehicle) then
                    return outputChatBox ("Seu veículo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).."#ff3232 já está no DETRAN.", source, 255, 50, 50, true) -- Manda isso pro jogador e para de executar essa função.
                end
            end
            if getElementInterior(source) == 0 then
                if getPlayerMoney(source) >= tonumber(1000) then
                    for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
                        if not vaga[5] then -- Se a vaga está desocupada (não tem nenhum veículo no 5º elemento da vaga), então:
                            vaga[5] = vehicle
                            vaga[7] = getAccountName (getPlayerAccount (source))
                            -- takePlayerMoney (source, 1000)
                            setElementPosition (vaga[5], vaga[1], vaga[2], vaga[3]) -- Troquei o unpack por declarar direto os itens da table.
                            setElementRotation (vaga[5], 0, 0, vaga[4])
                            -- outputChatBox ("congelou, trancou e blindou") -- Somente para testes.
                            setElementFrozen (vaga[5], true) -- Congela o veículo.
                            setVehicleLocked (vaga[5], true) -- Tranca o veículo.
                            setVehicleDamageProof (vaga[5], true) -- Blinda o veículo.
                            setVehicleDoorOpenRatio (vaga[5], 0, 0)
                            setVehicleDoorOpenRatio (vaga[5], 1, 0)
                            setVehicleDoorOpenRatio (vaga[5], 2, 0)
                            setVehicleDoorOpenRatio (vaga[5], 3, 0)
                            setVehicleDoorOpenRatio (vaga[5], 4, 0)
                            setVehicleDoorOpenRatio (vaga[5], 5, 0) -- Fecha todas as portas do veículo, para evitar que entrem nele pra zoar.
                            setVehicleEngineState (vaga[5], false) -- Desliga o motor do veículo.
                            outputChatBox ("O seu veiculo #00ff66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).."#c1c1c1 foi levado ao DETRAN.", source, 193, 193, 193, true)
                            return
                        end
                    end
                    outputChatBox ("Não há vagas disponíveis no DETRAN.", source, 255, 50, 50, true)
                else
                    outputChatBox ("Você não tem dinheiro suficiente para levarmos seu veículo até o DETRAN.", source, 255, 50, 50, true)
                end
            else
                outputChatBox ("Não podemos levar seu veículo ao DETRAN se você estiver em interiores.", source, 255, 50, 50, true)
            end
        else
            outputChatBox ("Não podemos levar seu veículo enquanto ele estiver ocupado por alguém.", source, 255, 50, 50, true)
        end
    else
        outputChatBox ("O seu veiculo não está spawnado.", source, 255, 50, 50, true)
    end
end)

function getVehicleByID(id)
	for i, veh in ipairs (getElementsByType("vehicle")) do
		if getElementData(veh, "ID") == id then
			return veh
		end
	end
end

function liberarVaga (leaveElement) -- Essa função é ativada quando qualquer elemento sair de qualquer colShape deste resource. O evento ativador só é adicionado depois que os colShapes são criados, evitando erros.
    for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
        if (source == vaga[6]) then -- Se o colShape cujo elemento saiu pertence a esta vaga, então: (source = colShape envolvido no evento)
            if (leaveElement == vaga[5]) then -- Se o elemento que saiu é o veículo desta vaga, então: (evita de liberar a vaga quando algo sai da vaga sem ser o veículo dela)
                vaga[5] = false -- Libera a vaga.
                vaga[7] = nil -- Libera o proprietário da vaga.
                if (getVehicleController(leaveElement)) then
                    outputChatBox ("Liberou a vaga #00ff66"..i.."#c1c1c1 do DETRAN.", getVehicleController(leaveElement), 193, 193, 193, true) -- Somente para testes.
                end
                return -- Para de executar essa função pois não precisa nem verificar o resto do loop.
            elseif (leaveElement) and (getElementType (leaveElement) == "player") and (not getPedOccupiedVehicle (leaveElement)) then -- Senão se o elemento que saiu for um jogador que não está em um veículo, então:
                if (getAccountName (getPlayerAccount (leaveElement)) == vaga[7]) then -- Se o jogador que saiu tem o mesmo login do proprietário desta vaga, então:
                    -- outputChatBox ("congelou, trancou e blindou") -- Somente para testes.
                    setElementPosition (vaga[5], vaga[1], vaga[2], vaga[3])
                    setElementRotation (vaga[5], 0, 0, vaga[4])
                    setElementFrozen (vaga[5], true) -- Congela novamente o veículo.
                    setVehicleLocked (vaga[5], true) -- Tranca novamente o veículo.
                    setVehicleDamageProof (vaga[5], true) -- Blinda novamente o veículo.
                    setVehicleDoorOpenRatio (vaga[5], 0, 0)
                    setVehicleDoorOpenRatio (vaga[5], 1, 0)
                    setVehicleDoorOpenRatio (vaga[5], 2, 0)
                    setVehicleDoorOpenRatio (vaga[5], 3, 0)
                    setVehicleDoorOpenRatio (vaga[5], 4, 0) -- Fecha todas as portas do veículo novamente.
                    setVehicleDoorOpenRatio (vaga[5], 5, 0)
                    setVehicleEngineState (vaga[5], false) -- Desliga o motor do veículo.
                    outputChatBox ("Seu #00ff66"..(customCarNames[getElementModel(vaga[5])] or getVehicleNameFromModel(getElementModel(vaga[5]))).."#c1c1c1 voltou a ficar protegido e trancado.", leaveElement, 193, 193, 193, true)
                    return -- Para de executar essa função pois não precisa verificar o resto do loop.
                end
            end
        end
    end
end

function liberarVehicle (hitElement) -- Essa função é ativada quando qualquer elemento entra em qualquer colShape deste resource.
    for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
        if (source == vaga[6]) then -- Se o colShape cujo elemento entrou pertence a esta vaga, então: (source = colShape envolvido no evento)
            if (hitElement) and (getElementType (hitElement) == "player") then -- Se o elemento que colidiu for um player, então:
                if (getAccountName (getPlayerAccount (hitElement)) == vaga[7]) then -- Se o jogador que entrou tem o mesmo login do proprietário desta vaga, então: (evita de liberar o veículo quando um jogador entra no colShape sem ser dono dela)
                    -- outputChatBox ("descongelou, destrancou e desblindou") -- Somente para testes.
                    setElementFrozen (vaga[5], false) -- Descongela o veículo.
                    setVehicleLocked (vaga[5], false) -- Destranca o veículo.
                    setVehicleDamageProof (vaga[5], false) -- Desblinda o veículo.
                    outputChatBox ("Este é seu #00ff66"..(customCarNames[getElementModel(vaga[5])] or getVehicleNameFromModel(getElementModel(vaga[5]))).."#c1c1c1. Liberamos ele pra você.", hitElement, 193, 193, 193, true)
                    return -- Para de executar essa função pois não precisa nem verificar o resto do loop.
                end
            end
        end
    end
end

 

 

 

 

funcionou perfeitamente, e muito melhor doq eu queria, parabéns man, muito obg pela sua ajuda, desculpa ocupar seu tempo, desculpa ae qlqr coisa sou muito leigo com essas paradas de programação e vc tirou um tempo para me ajudar. Obrigado pela força man, se eh foda ❤️

Edited by Lord Henry
Link to comment

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