SherlocK
-
Posts
41 -
Joined
-
Last visited
Posts posted by SherlocK
-
-
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
Spoilerlocal 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)
-
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...
-
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.
Spoilerlocal 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)
-
On 26/11/2021 at 18:40, Lord Henry said:
Crie o veículo dentro de uma tabela, juntamente com as características dele.
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.
-
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)
-
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)
-
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)
-
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
-
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
-
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
-
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
-
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 )
-
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:
[vídeo removido pelo usuário]
Script:
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
-
1 minute ago, Lord Henry said:
Eu deixaria do jeito que está, utilizando todos os parâmetros.
ok, vc n me passou o código então vou assistindo e fazendo aqui
-
1 hour ago, Lord Henry said:
[vídeo removido pelo usuário]
no caso o parâmetro ownerAccount eu n vou precisar fazer correto?
-
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)
-
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
-
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
-
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
-
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.
-
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
-
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?
-
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
-
15 hours ago, Lord Henry said:
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
Veículo por ACL
in Programação em Lua
Posted
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?