Jump to content

Veículo por ACL


Recommended Posts

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) 

 

Link to comment
  • Other Languages Moderators

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

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},
       },
       ["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 -- 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

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

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

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

Edited by Lord Henry
Link to comment
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.

Link to comment

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)

 

Edited by SherlocK
Link to comment
  • Other Languages Moderators
6 hours ago, SherlocK said:

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.

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.

Edited by Lord Henry
Link to comment
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...

Link to comment
  • Other Languages Moderators

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,
        },
    },

 

Edited by Lord Henry
Link to comment
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)

 

 

Link to comment
  • Other Languages Moderators

A tabela vehHandling não existe fora daquele escopo do for onde ela foi criada, pois ela está numa variável local. Remova o for dela lá em baixo e coloque dentro do for principal, que cria os veículos. Faça assim:

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
    for handling, value in pairs (vehHandling) do -- Para cada item da tabela vehHandling, faça:
        setVehicleHandling (vehAutos[i]["Viatura"], handling, value) -- Aplica a handling e seu respectivo valor no veículo.
    end
end

 

Edited by Lord Henry
Link to comment

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? 

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