SherlocK Posted November 25, 2021 Share Posted November 25, 2021 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 Lord Henry Posted November 26, 2021 Other Languages Moderators Share Posted November 26, 2021 (edited) 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 November 26, 2021 by Lord Henry Link to comment
SherlocK Posted November 30, 2021 Author Share Posted November 30, 2021 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
SherlocK Posted November 30, 2021 Author Share Posted November 30, 2021 (edited) 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 November 30, 2021 by SherlocK Link to comment
Other Languages Moderators Lord Henry Posted November 30, 2021 Other Languages Moderators Share Posted November 30, 2021 (edited) 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 November 30, 2021 by Lord Henry Link to comment
SherlocK Posted November 30, 2021 Author Share Posted November 30, 2021 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 Lord Henry Posted December 1, 2021 Other Languages Moderators Share Posted December 1, 2021 (edited) 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 December 1, 2021 by Lord Henry Link to comment
SherlocK Posted December 1, 2021 Author Share Posted December 1, 2021 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 Lord Henry Posted December 2, 2021 Other Languages Moderators Share Posted December 2, 2021 (edited) 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 December 2, 2021 by Lord Henry Link to comment
SherlocK Posted December 2, 2021 Author Share Posted December 2, 2021 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
Other Languages Moderators Lord Henry Posted December 3, 2021 Other Languages Moderators Share Posted December 3, 2021 Cara, pode ser erro do MTA, se as vezes funciona e as vezes não. Se fosse erro do script, ele sempre falharia. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now