Jump to content

SherlocK

Members
  • Posts

    41
  • Joined

  • Last visited

Posts posted by SherlocK

  1. Show de bola, deu tudo certo. 

    Mas achei um outro probleminha que não sei se é um bug do mta ou do scritp. 

    Diversas vezes ao mexer no script o giroflex simplesmente não funciona, aperta H e ele não liga, ou ele dá apenas uma piscada e não funciona mais.
    Já aconteceu ao trocar o carro, e até mesmo sem trocar ele, apenas fazendo modificação na hand ou outra coisa sem mexer no giroflex.

    Não ocorre nenhum erro no debug nem nada. Sabe o que pode ser? 

    Ou tem como eu colocar um sistema de giroflex que costuma ser usado nas viaturas normais nesse script? 

  2. 1 hour ago, Lord Henry said:

    Ali em baixo do ["Viatura"] crie um ["Handling"] para cada veículo. E dentro deste vc coloca a tabela da handling do veículo.

    Dai no script vc chama essa parte da tabela da mesma maneira que os outros foram.

    Assim:

    local vehAutos = {
        [1] = { -- Infos da viatura 1.
            ["Veh"] = {587, 1595.05, -1711.64, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255}, -- ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB. (cor 4 da lataria não existe)
            ["Sirens"] = { -- Cada sirene separada numa sub-tabela.
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
            },
            ["Viatura"] = false, -- Onde o veículo (elemento) ficará armazenado.
            ["Handling"] = { -- (setVehicleHandling)
                ["maxVelocity"] = 230,
                ["engineAcceleration"] = 18,
                ["engineInertia"] = 60,
                ["driveType"] = "rwd",
                ["steeringLock"] = 40,
                ["collisionDamageMultiplier"] = 0.45,
                ["mass"] = 1500,
                ["turnMass"] = 3500,
                ["dragCoeff"] = 0.8,
                ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
                ["suspensionForceLevel"] = 1,
                ["suspensionDamping"] = 0.2,
                ["suspensionUpperLimit"] = 0.28,
                ["suspensionLowerLimit"] = -0.1,
                ["tractionMultiplier"] = 0.8,
                ["tractionLoss"] = 1,
                ["tractionBias"] = 0.5,
                ["brakeDeceleration"] = 7,
                ["brakeBias"] = 0.7,
            },
        },

     

    Fiz as alterações porém está dando o seguinte erro - linha175: bad argument #1 to 'pairs' (table expected, got nil).
    Tentei resolver mas não consegui, mudei o "i" e "v" entre a linha 175 e 190 em alguns partes do código mas continuou o mesmo erro.

    Segue o código atualizado 

    Spoiler
    local vehAutos = {
        [1] = { -- Infos da viatura 1.
            ["Veh"] = {587, 1595.05, -1711.64, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255}, -- ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB. (cor 4 da lataria não existe)
            ["Sirens"] = { -- Cada sirene separada numa sub-tabela.
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
           },
    	   ["Handling"] = { -- (setVehicleHandling)
                ["maxVelocity"] = 230,
                ["engineAcceleration"] = 18,
                ["engineInertia"] = 60,
                ["driveType"] = "rwd",
                ["steeringLock"] = 40,
                ["collisionDamageMultiplier"] = 0.45,
                ["mass"] = 1500,
                ["turnMass"] = 3500,
                ["dragCoeff"] = 0.8,
                ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
                ["suspensionForceLevel"] = 1,
                ["suspensionDamping"] = 0.2,
                ["suspensionUpperLimit"] = 0.28,
                ["suspensionLowerLimit"] = -0.1,
                ["tractionMultiplier"] = 0.8,
                ["tractionLoss"] = 1,
                ["tractionBias"] = 0.5,
                ["brakeDeceleration"] = 7,
                ["brakeBias"] = 0.7,
    		},
           ["Viatura"] = false, -- Onde o veículo (elemento) ficará armazenado.
        },
    	
        [2] = { -- Infos da viatura 2.
            ["Veh"] = {587, 1590.97, -1711.61, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = { -- Preencha com as informações das demais viaturas seguindo a lógica da primeira.
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
            },
    		["Handling"] = { -- (setVehicleHandling)
                ["maxVelocity"] = 230,
                ["engineAcceleration"] = 18,
                ["engineInertia"] = 60,
                ["driveType"] = "rwd",
                ["steeringLock"] = 40,
                ["collisionDamageMultiplier"] = 0.45,
                ["mass"] = 1500,
                ["turnMass"] = 3500,
                ["dragCoeff"] = 0.8,
                ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
                ["suspensionForceLevel"] = 1,
                ["suspensionDamping"] = 0.2,
                ["suspensionUpperLimit"] = 0.28,
                ["suspensionLowerLimit"] = -0.1,
                ["tractionMultiplier"] = 0.8,
                ["tractionLoss"] = 1,
                ["tractionBias"] = 0.5,
                ["brakeDeceleration"] = 7,
                ["brakeBias"] = 0.7,
    		},
            ["Viatura"] = false,
        },
    	
        [3] = { -- Infos da viatura 3.
            ["Veh"] = {587, 1587.3, -1712.11, 5.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = {
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
            },
    		["Handling"] = { -- (setVehicleHandling)
                ["maxVelocity"] = 230,
                ["engineAcceleration"] = 18,
                ["engineInertia"] = 60,
                ["driveType"] = "rwd",
                ["steeringLock"] = 40,
                ["collisionDamageMultiplier"] = 0.45,
                ["mass"] = 1500,
                ["turnMass"] = 3500,
                ["dragCoeff"] = 0.8,
                ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
                ["suspensionForceLevel"] = 1,
                ["suspensionDamping"] = 0.2,
                ["suspensionUpperLimit"] = 0.28,
                ["suspensionLowerLimit"] = -0.1,
                ["tractionMultiplier"] = 0.8,
                ["tractionLoss"] = 1,
                ["tractionBias"] = 0.5,
                ["brakeDeceleration"] = 7,
                ["brakeBias"] = 0.7,
    		},
            ["Viatura"] = false,
        },
        [4] = { -- Infos da viatura 4.
            ["Veh"] = {587, 1583.3, -1712.11, 5.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = {
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
            },
    		["Handling"] = { -- (setVehicleHandling)
                ["maxVelocity"] = 230,
                ["engineAcceleration"] = 18,
                ["engineInertia"] = 60,
                ["driveType"] = "rwd",
                ["steeringLock"] = 40,
                ["collisionDamageMultiplier"] = 0.45,
                ["mass"] = 1500,
                ["turnMass"] = 3500,
                ["dragCoeff"] = 0.8,
                ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
                ["suspensionForceLevel"] = 1,
                ["suspensionDamping"] = 0.2,
                ["suspensionUpperLimit"] = 0.28,
                ["suspensionLowerLimit"] = -0.1,
                ["tractionMultiplier"] = 0.8,
                ["tractionLoss"] = 1,
                ["tractionBias"] = 0.5,
                ["brakeDeceleration"] = 7,
                ["brakeBias"] = 0.7,
    		},
            ["Viatura"] = false,
        },
    }
    
    for i,v in pairs (vehAutos) do -- Para cada item da tabela vehAutos, faça:
        local vehInfos = v["Veh"] -- Obtém a tabela "Veh" do item.
        local vehSirens = v["Sirens"] -- Obtém a tabela "Sirens" do item.
    	local vehHandling = v["Handling"] -- Obtém a tabela "Handling" do item.
        local ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB = unpack(vehInfos) -- Obtém os dados da tabela vehInfos, separando em cada variável.
        vehAutos[i]["Viatura"] = createVehicle(ID, posX, posY, posZ, rotX, rotY, rotZ) -- Cria a viatura e armazena ela na tabela.
        removeVehicleSirens(vehAutos[i]["Viatura"]) -- Remove a sirene original, caso tenha.
        setVehicleColor(vehAutos[i]["Viatura"], r1, g1, b1, r2, g2, b2, r3, g3, b3) -- Define as cores da viatura.
        setVehicleHeadLightColor(vehAutos[i]["Viatura"], farolR, farolG, farolB) -- Define a cor do farol da viatura.
        setElementData(vehAutos[i]["Viatura"], "Descaracterizada", true) -- Define essa data na viatura.
        -- setElementFrozen(vehAutos[i]["Viatura"], false) -- Descongela a viatura (desnecessário, mas está aqui caso queira)
        for ii,vv in ipairs (vehSirens) do -- Para cada item da tabela vehSirens, faça:
            if (ii == 1) then -- Se é o primeiro item, então:
                local quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom = unpack(vv) -- Obtém os dados da tabela que está no primeiro item, separando em cada variável.
                addVehicleSirens(vehAutos[i]["Viatura"], quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom)
            else -- Se não for o primeiro item, então:
                local sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia = unpack(vv) -- Obtém os dados da tabela do item, separando em cada variável.
                setVehicleSirens(vehAutos[i]["Viatura"], sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia)
            end
        end
    end
    
    function isMyVeh(theVehicle) -- Função útil para ser usada no resto deste script.
        for _,v in pairs (vehAutos) do -- Para cada item da tabela vehAutos, faça:
            if (isElement(v["Viatura"])) then -- Se existe a viatura, então:
                if (theVehicle == v["Viatura"]) then -- Se o veículo que está sendo verificado pelo script é a viatura, então:
                    return true -- Essa função retorna true.
                end
            end
        end
        return false -- Se chegar aqui, é porque o veículo não é uma dessas viaturas, então a função retorna false.
    end
    
    for i,v in pairs (vehHandling) do
    	if i then
    		for handling, value in pairs (v) do
    			if not setModelHandling (i, handling, value) then
    			end
    		end
    	end
    end
    
    for _,v in ipairs (getElementsByType("vehicle")) do
    	if v and vehHandling[getElementModel(v)] then
    		for k,vl in pairs (vehHandling[getElementModel(v)]) do
    			setVehicleHandling (v, k, vl)
    		end
    	end
    end
    -- Para verificar se um veículo é uma das viaturas deste script, use:
    --if (isMyVeh(source)) then -- Se source é uma das viaturas deste script, então:
      
    -- Por exemplo:
    function enterMyVehicle(thePlayer, seat, jacked)
        if (isMyVeh(source)) then -- Se o veículo é uma das viaturas, então: (caso contrário, nada acontece e o jogador entra normalmente no veículo)
            local account = getPlayerAccount(thePlayer)
            if (not account or isGuestAccount(account)) then return end
            if (not isObjectInACLGroup("user."..getAccountName(account), aclGetGroup("PF"))) then
                setVehicleLocked(source, true)
                outputChatBox("Você não é da polícia", thePlayer, 255, 255, 0)
            else
                setVehicleLocked(source, false)
            end
        end
    end
    addEventHandler("onVehicleStartEnter", root, enterMyVehicle)

     

     

  3. 5 hours ago, Lord Henry said:

    Você deve trancar o veículo imediatamente após ele ser criado. Se o jogador vier com uma serra elétrica sem tentar entrar no veículo, ele consegue arrancar a porta do veículo caso ele não esteja trancado. Sempre que o motorista sair do veículo ou alguém sem permissão tentar entrar como motorista, tranque novamente.

    Sobre a handling, sim é melhor setar pelo server-side e do que no client-side. E você já está fazendo certo em usar tabelas para guardar as informações dos handlings.

    ok, perfeito! Sabe dizer se é possível fazer essa adição onde a hand dessas viaturas são diferentes das predefinições do outro script? 

    Antes dessas alterações que você conseguiu fazer eu usava o setVehicleHandling quando criava o veiculo, porém agora com essa tabela individual não faço a menor ideia de como ajustar essa configuração...

  4. Outra coisa que faltou a questão das handlings, por ser uma viatura gostaria de ajustar para ser um pouco melhor do que a do carro original.

    Eu mexo com handling e costumo usar um script onde qualquer carro criado no servidor seta a hand predefinida.
    Neste script poderia ser de duas formas, ele pode ter uma configuração X definida, como "maxVelocity" = 240, "engineAcceleration" = 19, e etc... Ou ele adicionar um valor mediante a hand que o carro já vem, "maxVelocity" + 10, "engineAcceleration" + 1, e etc...

    Não sei se é possível fazer isso com o script desta forma setando a hand no servidor, mas eu prefiro desta forma pois outros scripts que seta a hand no player acontece de mexer na suspensão ou qualquer outra coisa, ao sair e retornar ao carro, ela seta a hand novamente e tira qualquer alteração.

    Segue abaixo o script de hand que uso com uma hand de exemplo para ajudar.

    Spoiler
    local predefinedHandling = {
    
    [587] = { --BMW M2   	
    	["maxVelocity"] = 230,
    	["engineAcceleration"] = 18,
    	["engineInertia"] = 60,
    	["driveType"] = "rwd",
    	["steeringLock"] = 40,
    	["collisionDamageMultiplier"] = 0.45,
    	["mass"] = 1500,
    	["turnMass"] = 3500,
    	["dragCoeff"] = 0.8,
    	["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 },
    	["suspensionForceLevel"] = 1,
    	["suspensionDamping"] = 0.2,
    	["suspensionUpperLimit"] = 0.28,
    	["suspensionLowerLimit"] = -0.1,
    	["tractionMultiplier"] = 0.8,
    	["tractionLoss"] = 1,
    	["tractionBias"] = 0.5,
    	["brakeDeceleration"] = 7,
    	["brakeBias"] = 0.7,
    },
    
    }
    
    for i,v in pairs (predefinedHandling) do
    	if i then
    		for handling, value in pairs (v) do
    			if not setModelHandling (i, handling, value) then
    			end
    		end
    	end
    end
    
    for _,v in ipairs (getElementsByType("vehicle")) do
    	if v and predefinedHandling[getElementModel(v)] then
    		for k,vl in pairs (predefinedHandling[getElementModel(v)]) do
    			setVehicleHandling (v, k, vl)
    		end
    	end
    end
    
    function resetHandling()
    	for model in pairs (predefinedHandling) do
    		if model then
    			for k in pairs(getOriginalHandling(model)) do
    setModelHandling(model, k, nil)
    			end
    		end
    	end
    
    	for _,v in ipairs (getElementsByType("vehicle")) do
    		if v then
    			local model = getElementModel(v)
    			if predefinedHandling[model] then
    for k,h in pairs(getOriginalHandling(model)) do
    	setVehicleHandling(v, k, h)
    end
    			end
    		end
    	end
    end
    addEventHandler("onResourceStop", resourceRoot, resetHandling)

     

  5. On 26/11/2021 at 18:40, Lord Henry said:

    Crie o veículo dentro de uma tabela, juntamente com as características dele.

      Hide contents
    local vehAutos = {
        [1] = { -- Infos da viatura 1.
            ["Veh"] = {587, 1595.05, -1711.64, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255}, -- ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB. (cor 4 da lataria não existe)
            ["Sirens"] = { -- Cada sirene separada numa sub-tabela.
                [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom.
                [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia.
                [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255},
                [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255},
                [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255},
                [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255},
           },
           ["Viatura"] = false, -- Onde o veículo (elemento) ficará armazenado.
        },
        [2] = { -- Infos da viatura 2.
            ["Veh"] = {587, 1590.97, -1711.61, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = { -- Preencha com as informações das demais viaturas seguindo a lógica da primeira.
                [1] = {},
                [2] = {},
                [3] = {},
                [4] = {},
                [5] = {},
                [6] = {},
                [7] = {},
            },
            ["Viatura"] = false,
        },
        [3] = { -- Infos da viatura 3.
            ["Veh"] = {587, 1587.3, -1712.11, 5.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = {
                [1] = {},
                [2] = {},
                [3] = {},
                [4] = {},
                [5] = {},
                [6] = {},
                [7] = {},
            },
            ["Viatura"] = false,
        },
        [4] = { -- Infos da viatura 4.
            ["Veh"] = {587, 1583.3, -1712.11, 5.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255},
            ["Sirens"] = {
                [1] = {},
                [2] = {},
                [3] = {},
                [4] = {},
                [5] = {},
                [6] = {},
                [7] = {},
            },
            ["Viatura"] = false,
        },
    }
    
    for i,v in pairs (vehAutos) do -- Para cada item da tabela vehAutos, faça:
        local vehInfos = v["Veh"] -- Obtém a tabela "Veh" do item.
        local vehSirens = v["Sirens"] -- Obtém a tabela "Sirens" do item.
        local ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB = unpack(vehInfos) -- Obtém os dados da tabela vehInfos, separando em cada variável.
        vehAutos[i]["Viatura"] = createVehicle(ID, posX, posY, posZ, rotX, rotY, rotZ) -- Cria a viatura e armazena ela na tabela.
        removeVehicleSirens(vehAutos[i]["Viatura"]) -- Remove a sirene original, caso tenha.
        setVehicleColor(vehAutos[i]["Viatura"], r1, g1, b1, r2, g2, b2, r3, g3, b3) -- Define as cores da viatura.
        setVehicleHeadLightColor(vehAutos[i]["Viatura"], farolR, farolG, farolB) -- Define a cor do farol da viatura.
        setElementData(vehAutos[i]["Viatura"], "Descaracterizada", true) -- Define essa data na viatura.
        -- setElementFrozen(vehAutos[i]["Viatura"], false) -- Descongela a viatura (desnecessário, mas está aqui caso queira)
        for ii,vv in ipairs (vehSirens) do -- Para cada item da tabela vehSirens, faça:
            if (ii == 1) then -- Se é o primeiro item, então:
                local quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom = unpack(vv) -- Obtém os dados da tabela que está no primeiro item, separando em cada variável.
                addVehicleSirens(vehAutos[i]["Viatura"], quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom)
            else -- Se não for o primeiro item, então:
                local sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia = unpack(vv) -- Obtém os dados da tabela do item, separando em cada variável.
                setVehicleSirens(vehAutos[i]["Viatura"], sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia)
            end
        end
    end
    
    function isMyVeh(theVehicle) -- Função útil para ser usada no resto deste script.
        for _,v in pairs (vehAutos) do -- Para cada item da tabela vehAutos, faça:
            if (isElement(v["Viatura"])) then -- Se existe a viatura, então:
                if (theVehicle == v["Viatura"]) then -- Se o veículo que está sendo verificado pelo script é a viatura, então:
                    return true 
                
            
        
          
    
    
    
       
      
    
    
           
            
                
                  
             
            
        
    

    Remova todo aquele início do script que está para as funções e substitua pelo código acima.

    Espero ter ajudado. Preencha o resto da tabela você mesmo.

    Show de bola, vou testar aqui e logo digo se deu certo, desde já muito obrigado!!

     

    Perfeito!! Funcionou, porém ficou aquele outro detalhe referente ao player conseguir entrar no carro caso esteja com a porta aberta. Quando está com as portas fechadas ele dá como trancado, se está aberta a porta ou até mesmo caso não tenha ele entra.

  6. Gostaria de saber se é possível configurar um "grupo" de veículos criado através de um script onde tenha limitação por ACL.

    Vou ser mais específico, estou criando um script onde spawna um carro qualquer que possui na cidade com algumas configurações através do spawn, como Sirens, handling, cor e etc. Porém só consigo criar a limitação do veículo todo, mesmo fora desse spawn há a limitação até mesmo sem por o id do carro na função.

    Tem como eu criar um grupo por exemplo, vtr1, vtr2, vtr3... e ajustar a limitação de acl para apenas essas vtr's específicas, deixando os demais spawns do mesmo carro de forma livre? Ex. Conce, painel e etc.

    Outra coisa, a limitação está de uma forma que o veículo pareça trancado para quem não está na ACL, porém se alguém tentar entrar no carro estando com a porta aberta o player consegue entrar no veículo. Como faço para que quando o player que não esteja na ACL não tente nem mesmo entrar no carro, ele aperta F e não acontece nada somente acusa a mensagem?

     

    
    local auto1 = createVehicle ( 587, 1595.05359, -1711.63843, 5.6, 0, 0.0, 0 ) --- 
    setElementRotation ( auto1, 0, 0, 0)
    removeVehicleSirens(auto1)
    addVehicleSirens(auto1, 6, 2, true, false, true, true ) 
    setVehicleSirens(auto1, 1, -0.850, 2.400, 0.000, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto1, 2, 0.850, 2.400, 0.000, 0, 55, 255, 255, 255 )
    setVehicleSirens(auto1, 3, -0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto1, 4, 0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto1, 5, -0.500, -0.350, 0.630, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto1, 6, 0.500, -0.350, 0.630, 0, 0, 255, 255, 255 )
    setVehicleColor( auto1, 0, 0, 0, 255,255,255, 255,255,255 ,255,255,255 )
    setElementData(auto1,"Descaracterizada",true)
    setElementFrozen (auto1, false )
    
    local auto2 = createVehicle ( 587, 1590.96777, -1711.61438, 5.6, 0, 0, 0 ) --- 
    setElementRotation ( auto2, 0, 0, 0)
    removeVehicleSirens(auto2)
    addVehicleSirens(auto2, 6, 2, true, false, true, true ) 
    setVehicleSirens(auto2, 1, -0.850, 2.400, 0.000, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto2, 2, 0.850, 2.400, 0.000, 0, 55, 255, 255, 255 )
    setVehicleSirens(auto2, 3, -0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto2, 4, 0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto2, 5, -0.500, -0.350, 0.630, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto2, 6, 0.500, -0.350, 0.630, 0, 0, 255, 255, 255 )
    setVehicleColor( auto2, 0, 0, 0, 255,255,255, 255,255,255 ,255,255,255 )
    setElementData(auto2,"Descaracterizada",true)
    setElementFrozen (auto2, false )
    
    local auto3 = createVehicle ( 587, 1587.30481, -1712.10596, 5.6,0,0.0,0 ) --- 
    removeVehicleSirens(auto3)
    addVehicleSirens(auto3, 6, 2, true, false, true, true ) 
    setVehicleSirens(auto3, 1, -0.850, 2.400, 0.000, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto3, 2, 0.850, 2.400, 0.000, 0, 55, 255, 255, 255 )
    setVehicleSirens(auto3, 3, -0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto3, 4, 0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto3, 5, -0.500, -0.350, 0.630, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto3, 6, 0.500, -0.350, 0.630, 0, 0, 255, 255, 255 )
    setVehicleColor( auto3, 0, 0, 0, 0,0,0, 255,255,255 ,255,255,255 )
    setElementData(auto3,"Descaracterizada",true)
    setElementFrozen (auto3, false )
    
    local auto4 = createVehicle ( 587, 1583.30481, -1712.10596, 5.6,0,0.0,0 ) --- 
    setElementRotation ( auto4, 0, 0, 0)
    removeVehicleSirens(auto4)
    addVehicleSirens(auto4, 6, 2, true, false, true, true ) 
    setVehicleSirens(auto4, 1, -0.850, 2.400, 0.000, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto4, 2, 0.850, 2.400, 0.000, 0, 55, 255, 255, 255 )
    setVehicleSirens(auto4, 3, -0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto4, 4, 0.700, -2.100, 0.100, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto4, 5, -0.500, -0.350, 0.630, 255, 0, 0, 255, 255 )
    setVehicleSirens(auto4, 6, 0.500, -0.350, 0.630, 0, 0, 255, 255, 255 )
    setVehicleColor( auto4, 0, 0, 0, 0,0,0, 255,255,255 ,255,255,255 )
    setElementData(auto4,"Descaracterizada",true)
    setElementFrozen (auto4, false )
    
    
    function enterVehicle(thePlayer, seat, jacked) 
        local account = getPlayerAccount(thePlayer) 
        if (not account or isGuestAccount(account)) then return end 
        local accountName = getAccountName(account) 
        if (not isObjectInACLGroup("user.".. accountName,aclGetGroup("PF"))) then 
            setVehicleLocked(source, true) 
            outputChatBox("#ffff00Você não é da polícia", thePlayer) 
        else 
            setVehicleLocked(source, false)  		
    	end
    end 
    addEventHandler("onVehicleStartEnter",root,enterVehicle)
    
    ---- Reparo VTR 
    
    local marker = createMarker(1585.41992, -1677.68030, 5.89699-0.9,"cylinder", 2, 20, 20, 20, 255) 
    function reparar(el,md) 
    	if getElementType(el)=="vehicle" then 
    		if getElementModel(el)==587 then 
    		p=getVehicleController(el) 
    		local money = getPlayerMoney(p)
    			if (money >= 0) then      
    				takePlayerMoney(p, 0)
    				outputChatBox("Reparando veículo! Aguarde 5 segundos",p,255,0,0)
    				setElementFrozen (el, true ) 
    				setTimer(function() 
    				setElementFrozen(el, false) 
    				fixVehicle(el) 
    				end, 5000, 1) 
    			else
    			outputChatBox("Não podemos reparar sua viatura, você está com saldo negativo!",p,255,255,255)
    			return
    			end 
    		end 
    	end 
    end
    addEventHandler("onMarkerHit", marker, reparar) 

     

  7. Estou tentando fazer um script de recuo que funcione de forma mais realista mexendo o eixo Z também, porém da forma que tentei fazer não funcionou, se alguém puder me dar uma ajuda fico grato.

    local weap = {shot=false,timer=false}
    addEventHandler("onClientPlayerWeaponFire", localPlayer, function()
        local rot = getPedCameraRotation(localPlayer)
        if (isTimer(weap.timer)) then killTimer(weap.timer); end
        if (not weap.shot) then
            setCameraMatrix (x, y-0.2, z+0.3, lx, ly, lz)
    		setCameraTarget ( localPlayer )
            weap.shot = true
            weap.timer = setTimer(setPedCameraRotation, 50, 1, localPlayer, -(rot+0.28))
        else
            setCameraMatrix (x, y+0.2, z+0.3, lx, ly, lz)
    		setCameraTarget ( localPlayer )
            weap.shot = false
            weap.timer = setTimer(setPedCameraRotation, 50, 1, localPlayer, -(rot-0.28))
        end
    end)

     

  8. Estou tentando fazer um script de recuo que funcione de forma mais realista mexendo o eixo Z também, porém da forma que tentei fazer não funcionou, se alguém puder me dar uma ajuda fico grato.

    local weap = {shot=false,timer=false}
    addEventHandler("onClientPlayerWeaponFire", localPlayer, function()
        local rot = getPedCameraRotation(localPlayer)
        if (isTimer(weap.timer)) then killTimer(weap.timer); end
        if (not weap.shot) then
            setCameraMatrix (x, y-0.2, z+0.3, lx, ly, lz)
    		setCameraTarget ( localPlayer )
            weap.shot = true
            weap.timer = setTimer(setPedCameraRotation, 50, 1, localPlayer, -(rot+0.28))
        else
            setCameraMatrix (x, y+0.2, z+0.3, lx, ly, lz)
    		setCameraTarget ( localPlayer )
            weap.shot = false
            weap.timer = setTimer(setPedCameraRotation, 50, 1, localPlayer, -(rot-0.28))
        end
    end)

     

  9. 18 minutes ago, Lord Henry said:

    Já depurou o código pra ver se ele está lendo tudo?

    function pegarTag ( Jogador )
    outputChatBox ("1")
      if isElementWithinMarker (Jogador, marker ) then
      outputChatBox ("2")
        if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(Jogador)), aclGetGroup("AclPolicial")) then
    	outputChatBox ("3")
    		  aclGroupAddObject (aclGetGroup("ComandosPolicia"), "user."..getAccountName(getPlayerAccount(Jogador)))
    		  outputChatBox ("4")
    		  setPedSkin ( Jogador, 255 )
    		  outputChatBox ("5")
    		  outputChatBox ("|#FFFF00Policia Federal#FFFFFF|-Agora você está em seviço na PF", Jogador, 255, 255, 255, true)
        else
          outputChatBox ('|#FF0000Aviso#FFFFFF|- Você não tem permissão! Saia deste local', Jogador, 255, 255, 255, true)
        end
    	end
    end
    addCommandHandler ( "trabalhar", pegarTag  )

    ta lendo tudo certinho, do 1 - 5

    acabei de ver aqui, o nome na acl admin estava incorreto, por isso n ia, dscp ae o transtorno, ta funcionando 100% vlw ❤️

  10. 15 minutes ago, Eder said:

    Bom fiz os testes aqui e ta tudo certo com o seu script, só não entendi os else e tbm do jeito que vc fez qualquer player vai poder ter acesso aos comandos policiais! Refiz essa parte da verificação, da uma olhada e verifica se esta tudo certo mesmo na acl Admin.

    
    marker = createMarker(1557.796, -1604.656, 13.383 ,"cylinder", 1.1, 255 ,0 ,0 ,255)
    
    
    function pegarTag ( Jogador )
      if isElementWithinMarker (Jogador, marker ) then
        if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(Jogador)), aclGetGroup("AclPolicial")) then
    		  aclGroupAddObject (aclGetGroup("ComandosPolicia"), "user."..getAccountName(getPlayerAccount(Jogador)))
    		  outputChatBox ("|#FFFF00Policia Federal#FFFFFF|-Agora você está em seviço na PF", Jogador, 255, 255, 255, true)
        else
          outputChatBox ('|#FF0000Aviso#FFFFFF|- Você não tem permissão! Saia deste local', Jogador, 255, 255, 255, true)
        end
    	end
    end
    addCommandHandler ( "trabalhar", pegarTag  )
    
    function tirarTag ( Jogador )
      if isElementWithinMarker (Jogador, marker ) then
        if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(Jogador)), aclGetGroup("AclPolicial")) then
    		  aclGroupRemoveObject (aclGetGroup("ComandosPolicia"), "user."..getAccountName(getPlayerAccount(Jogador)))
    		  setPedSkin ( Jogador, 0 )
    		  outputChatBox ('|#FFFF00Policia Federal#FFFFFF|-Você está fora de serviço da PF.', Jogador, 255, 255, 255, true)
      else
         outputChatBox ('|#FF0000Aviso#FFFFFF|- Você não tem permissão! Saia deste local', Jogador, 255, 255, 255, true)
        end
      end
    end
    addCommandHandler ( "sair", tirarTag  )
    

     

    Como vc disse qlqr um podia ter acesso eu tinha deixado livre pois o local fica dentro da base que é restrita por acl, entao apenas quem está no grupo conseguiria chegar lá, mas obg por limitar por acl, segurança nunca é demais, vou testar aqui

    não deu, continua n adicionando na ACL, coloquei pra pegar uma skin tbm, ele pega a skin, reconhece q precisa estar em um grupo para pegar a tag, mas ele n pega, funciona td perfeitamente mas ele n adiciona o player na tag

  11.  

    8 minutes ago, Lord Henry said:

    Troque todos os sources por thePlayer. Não se usa source como parâmetro de função.

    E remova aqueles else

    OK, eh que tinha outra msg que tirei e acabei esquecendo de tirar o "se não" tbm

    8 minutes ago, Lord Henry said:

    Troque todos os sources por thePlayer. Não se usa source como parâmetro de função.

    E remova aqueles else

    não deu certo, continua sem adicionar na acl

     

  12. Just now, Eder said:

    Você deu permissão ao script na acl admin? Talvez pode ser isso, se não deu a permissão vá até a acl admin e coloque resource.nomedoscript.

    ja adicionei como resouce na acl de admin e n mudou

    10 minutes ago, Lord Henry said:

    Aparece algo no /debugscript 3?

    n, nenhum erro

  13. Fiz o script onde o player vai até o marker digita o comando /trabalhar para iniciar seu trabalho e pegar o acesso do painel e etc, mas ele não está funcionando corretamente, ele diz q o jogador bateu o ponto mas não recebe a tag com as permissões do painel, no caso ele n adiciona na acl programada.

    marker = createMarker(1559.9,-1605.8,22.25 ,"cylinder", 1.1, 255 ,0 ,0 ,0)
    
    
    function pegarTag ( source )
    	if isElementWithinMarker (source, marker ) then
    		aclGroupAddObject (aclGetGroup("ComandosPolicia"), "user."..getAccountName(getPlayerAccount(source)))
    		outputChatBox ("|#FFFF00Policia Federal#FFFFFF|-Agora você está em seviço na PF",source,255,255,255,true)
    		else
    	end
    end
    addCommandHandler ( "trabalhar", pegarTag  )
    
    function tirarTag ( source )
    	if isElementWithinMarker (source, marker ) then
    		aclGroupRemoveObject (aclGetGroup("ComandosPolicia"), "user."..getAccountName(getPlayerAccount(source)))
    		setPedSkin ( source, 0 )
    		outputChatBox ('|#FFFF00Policia Feredal#FFFFFF|-Você está fora de serviço da PF.',source,255,255,255,true)
    		else
    	end
    end
    addCommandHandler ( "sair", tirarTag  )

     

  14. 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 ❤️

  15. 1 hour ago, Lord Henry said:
    
    detran = { -- x, y, z, ocupado, colShape
    	[1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script.
    	[2] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei.
    }
    
    for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
        vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio.
    end
    

    Obs: Para poder ver colShapes precisa usar /showcol (comando só funciona em Modo Desenvolvedor).

    fiz isso juntamente com a rotação, mas ele n reconheceu q a vaga ficou livre novamente, esta certo? ou eu fiz errado?

    detran = { -- x, y, z, ocupado
        [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script.
        [2] = {751.4, -1334.81, 13.54, false},
    	[3] = {756.4, -1334.81, 13.54, false},	-- Esta coordenada eu inventei.
    }
    
    addEvent("WarpMyVehicle", true)
    addEventHandler("WarpMyVehicle", root, function(id)
        if not isPedInVehicle (source) then
    		if getElementInterior(source) == 0 then
    			if getPlayerMoney(source) >= tonumber(1000) then
    				local vehicle = getVehicleByID(id)
    				if isElement(vehicle) then
    					for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
    						local x, y, z, status = unpack (vaga) -- x, y, z são as coordenadas pra onde teleportar o veículo.
    						if not status then -- Se a vaga está desocupada, então:
    							vaga[4] = vehicle
    							vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio.
    							takePlayerMoney (source, 1000)
    							setElementPosition (vehicle, x, y, z)
    							setElementRotation(vehicle,0,0,180)
    							outputChatBox ("O seu veiculo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).." foi entregue ao Detran.", source, 193, 193, 193, true)
    							return
    						end
    					end
    					outputChatBox ("Não há vagas disponíveis no Detran.", source, 193, 193, 193, true)
    				else
    					outputChatBox ("O seu veiculo não está spawnado.", source, 193, 193, 193, true)
    				end
    			else
    				outputChatBox ("Você não tem os meios de se teletransportar para o veiculo.", source, 193, 193, 193, true)
    			end
    		else
    			outputChatBox ("Você só poderá mudar de veiculo se sair do atual.", source, 193, 193, 193, true)
    		end
    	else
    		outputChatBox ("Nós não podemos dirigir seu veiculo. Por favor, sair do outro veiculo.", source, 193, 193, 193, true)
    	end
    end)
    
    
    ----- assim tbm n deu 
    
    addEvent("WarpMyVehicle", true)
    addEventHandler("WarpMyVehicle", root, function(id)
        if not isPedInVehicle (source) then
    		if getElementInterior(source) == 0 then
    			if getPlayerMoney(source) >= tonumber(1000) then
    				local vehicle = getVehicleByID(id)
    				if isElement(vehicle) then
    					for i, vaga in ipairs (detran) do -- Para cada vaga, faça:
    						vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio.
    						local x, y, z, status = unpack (vaga) -- x, y, z são as coordenadas pra onde teleportar o veículo.
    						if not status then -- Se a vaga está desocupada, então:
    							vaga[4] = vehicle
    							takePlayerMoney (source, 1000)
    							setElementPosition (vehicle, x, y, z)
    							setElementRotation(vehicle,0,0,180)
    							outputChatBox ("O seu veiculo #00FF66"..(customCarNames[getElementModel(vehicle)] or getVehicleNameFromModel(getElementModel(vehicle))).." #c1c1c1foi entregue ao Detran.", source, 193, 193, 193, true)
    							return
    						end
    					end
    					outputChatBox ("Não há vagas disponíveis no Detran.", source, 193, 193, 193, true)
    				else
    					outputChatBox ("O seu veiculo não está spawnado.", source, 193, 193, 193, true)
    				end
    			else
    				outputChatBox ("Você não tem os meios de se teletransportar para o veiculo.", source, 193, 193, 193, true)
    			end
    		else
    			outputChatBox ("Você só poderá mudar de veiculo se sair do atual.", source, 193, 193, 193, true)
    		end
    	else
    		outputChatBox ("Nós não podemos dirigir seu veiculo. Por favor, sair do outro veiculo.", source, 193, 193, 193, true)
    	end
    end)

     

  16. 7 minutes ago, Lord Henry said:

    Claro que dá.

    Você tem uma table com todas as coordenadas das vagas, certo?

    Passa um loop nas vagas criando um colShape em cada uma das coordenadas.

    Recomendo o createColSphere, pois não precisa determinar coordenadas e tamanhos dos lados, apenas seu raio (que vc pode usar um valor fixo para todas)

    certo e como faria isso? nunca mexi com colShape, olhei a sintaxe e os exemplos mas ainda n entendi em como encaixar essa função no script q tenho.

    No caso isso tiraria a função recover do script certo? pois no próprio warp reconheceria q a vaga está livre

  17. oq estou tentando pedir é, tem como fazer com que ou fazer um shape nas vagas para reconhecer se há um veículo la ou não para acusar se a vaga está livre ou ocupada, ou fazer com que o comando para recuperar o carro do detran ( tirar da vaga ) seja restrito para o local do detran, onde ninguem q estiver fora do pátio consiga dar este comando, ou recuperar pelo painel e tals

  18. Just now, Lord Henry said:

    Cara, já falei. Esse negócio de comando é só no MEU CASO pois eu não tenho o painel. Esqueça o uso de comandos.

    sim, mas pelo oq entendi o comando seria substituído por uma função do painel de veículos. que teria o msm princípio

  19. Just now, Lord Henry said:

    Pois é, mas em todos os casos ocorre o teleporte.

    • Quando o carro vai pro DETRAN.
    • Quando o carro vai pro jogador.
    • Quando o jogador vai pro DETRAN.

    sim, mas o carro só vai para o detran, caso não esteja com ele dentro, entao ele terá q ir apé até o detran para retirar o carro. Se ele teleportar pra la vai quebrar o RP da seguinte forma, exemplo: ele está em LV e o carro quebrou, pra n chamar mec q vai demorar um monte para ir até la, ele vai manda o carro para o detran e vai e teleporta pra la logo após usando o "recv" para voltar pra cidade.

    ou se o carro teleportar até ele pode acontecer o seguinte, ele esta  dando fuga, o carro dele quebrou, ele spawna outro e clica em recuperar, o carro eh teleportado até ele e ele continua a fuga usando outro carro.

  20. Just now, Lord Henry said:

    Ou você poderia tornar os locais de DETRAN inacessíveis pelos jogadores. De forma que não tem como entrar nos veículos que estão lá.

    Dai o jogador é obrigado a puxar o carro pelo painel. (dai vc muda o sistema que em vez de teleportar o jogador pra lá, teleporta o carro pro jogador)

    Eu retirei essa função, quando recuperava o carro, ele ia direto para o jogador. Agr ele vai para o pátio do detran, onde ele tem q ir la e pegar o carro. O servidor eh de RP, se colocar pra teleportar vai quebrar esse RP

  21. 3 minutes ago, Lord Henry said:

    Sim. No seu caso seria o painel que iria liberar a vaga.

    Mas se o cara for lá manualmente buscar o carro (como eu fiz) sem usar comando nenhum. Dai a vaga vai continuar sendo considerada ocupada pelo script.

    É por isso que depois de ocupar as vagas, quando você tenta enviar outro veículo, não acontece nada. Pois ele não encontrou vaga livre.

    e n ficaria mais simples de colocar um shape para reconhecer se o veículo está no local da vaga ou não? pois pelo painel o cara poderia clicar em sla "Pegar Carro", e ser teleportado pra la de onde estivesse, quebrando o RP.

    pq tipo teria o Recuperar q o carro é teleportado para lá, e o "Pegar Carro" q seria pra retirar ele do pátio. Ou sla, tem como definir uma zona onde o comando só vai funcionar se ele tiver naquele local do detran? 

  22. 2 minutes ago, Lord Henry said:

    Como eu não disse nenhum vídeo, eu fiz o comando pois eu não tenho o painel. A questão do comando é apenas para simular mais ou menos os dados que o painel enviará para o servidor.

    O objetivo final não é ser com o mesmo comando.

    sim, eu digo a parte do recv entendeu, q tem q dar o comando para q o script entenda q a vaga ficou livre

  23. 15 hours ago, Lord Henry said:
      Ocultar conteúdo

    [vídeo removido pelo usuário]

     

    ok, entendi como funciona e agradeço as alterações a mais q você fez, mas eu não gostaria q para recuperar fosse por comando, pois o cara la na casa do chapéu vai dar o comando e vai ser teleportado ali, teria como fazer algo juntamente neste meu script que é de concessionária onde o cara chega no detran e mostra os carros dele que estão ali para ele recuperar, ou então como vc msm citou que seria bem mais simples acredito eu, que seria criar um shape onde identifica se tem um carro ali ou n para aplicar se a vaga esta livre ou ocupada ainda

×
×
  • Create New...