Page cover

▫️snt-vehicles

• Exports (Server)

local succs,result = 
exports["snt-vehicles"]:generateVehicle(characterId,model,colors,plate)
-- gera um veículo para um personagem (PERMANENTE)
-- characterId = id do personagem
-- model = modelo do veículo (index)
-- colors = [OPCIONAL] tabela das cores, primária e secundária, respectivamente e no formato: {{r,g,b},{r,g,b}} (caso não queira defina como nil, obrigatóriamente).
-- placa = [OPCIONAL] placa customizada (a função já verifica se está em uso).

-- succs = boolean (true or false) se o veículo foi gerado ou não.
-- result = resultado (string) se succs = false ou a placa gerada (plate) se for true.

---------------------------------------------------

local hasRented,rentalPlate,rentalTime = 
exports["snt-vehicles"]:hasVehicleModelRented(characterId,model)
-- verifica se um personagem já tem um veículo de aluguel de determinado modelo existem no banco de dados (expirado ou não)
-- characterId = id do personagem
-- model = modelo do veículo (index)

-- hasRented = boolean (true or false) se tem ou não
-- rentalPlate = placa do veículo
-- rentalTime = tempo de expiração

---------------------------------------------------

local succs,result = 
exports["snt-vehicles"]:generateRentalVehicle(characterId,model,days,customPlate)
-- gera um veículo para um personagem (TEMPORARIO)
-- characterId = id do personagem
-- model = modelo do veículo (index)
-- days = quantidade de dias
-- placa = [OPCIONAL] placa customizada (a função já verifica se está em uso)

-- succs = boolean (true or false) se o veículo foi gerado ou não
-- result = resultado (string) se succs = false ou a placa gerada (plate) se for true

* Dica: caso queira evitar a perca de porta-malas de veículos alugados ao serem renovados, utilize os exports "hasVehicleModelRented" e caso o player já tenha o veículo, apenas atualize os dias, usando o export abaixo. (A concessionária já faz isto por padrão).

---------------------------------------------------

local succs,result = 
exports["snt-vehicles"]:updateRentalVehicleDays(plate,days)
-- adiciona X dias ao tempo de expiração de um veículo, pela sua placa. Se ele já tiver um tempo válido, os dias adicionados passarão a contar a partir do término do tempo já existente!
-- plate = placa do veículo
-- days = quantidade de dias

\/ \/ \/ ATENÇÃO \/ \/ \/ 

exports["snt-vehicles"]:forceLoadVehicleByPlate(plate)
-- força o carregamento de um veículo no cache, é OBRIGATÓRIO chamar este export ANTES (após verificação do export "hasVehicleModelRented") de renovar,  os dias de um veículo que estava expirado. (Vide exemplo de renovação de veículo, ao final desta página)
-- plate = placa do veículo

---------------------------------------------------

local data =
exports["snt-vehicles"]:getVehicleData(plate)
-- pegar os dados de um veículo pela placa (todos disponíveis no banco de dados), útil para checar se um veículo é de um player, caso o retorno seja falso é porque não é um veículo de um player
-- plate = placa do veículo

-- data = tabela com as informações do veículo, com as mesmas keys do banco de dados (tabela: snt_characters_vehicles)

---------------------------------------------------

local friend =
exports["snt-vehicles"]:getVehicleBorrowed(plate)
-- retorna se um veículo está emprestado.
-- plate = placa do veículo.

-- friend = nil (se não estiver emprestado) ou int (id de para quem está emprestado).

---------------------------------------------------

local succs,result = 
exports["snt-vehicles"]:deleteVehicle(plate)
-- deleta um veículo pela placa, tanto do cache, quanto do banco de dados.
-- esta ação é IRREVERSÍVEL
-- plate = placa do veículo

-- succs = boolean (true or false) se o veículo foi deletado ou não
-- result = resultado (string) 

---------------------------------------------------

local succs,result = 
exports["snt-vehicles"]:updateVehicleTax(plate)
-- atualiza a taxa de um veículo, pela data atual + quantidade de dias de duração da taxa definida na configuração
-- placa = placa do veículo

-- succs = boolean (true or false) se o veículo foi atualizado ou não
-- result = resultado (string) 

---------------------------------------------------

local succs,result =
exports["snt-vehiles"]:updateVehicleStatus(plate,status)
-- atualiza o status de um veículo.
-- plate = placa do veículo
-- status = string (texto) status do veículo, usado para checar se ele pode ser retirado da garagem (> config/extras.lua)

-- succs = boolean (true or false) se o veículo foi atualizado ou não
-- result = resultado (string) 

---------------------------------------------------

exports["snt-vehicles"]:unlockAIVehicle(vehicleNetworkId)
-- liberar um veículo de NPC no sistema de trancas automático (Caso esteja usando), usar na lockpick por exemplo.
-- vehicleNetworkId = network id do veículo

---------------------------------------------------

exports["snt-vehicles"]:unlockVehicle(vehicleNetworkId)
-- destrancar as PORTAS de um veículo.
-- vehicleNetworkId = network id do veículo

---------------------------------------------------

local isAIVehicle,isUnlocked =
exports["snt-vehicles"]:isAIVehicle(vehicleNetworkId)
-- verificar se um veículo é de NPC e se ele já foi destrancado (export "unlockAIVehicle"). Util para fazer a função da lockpick.
-- vehicleNetworkId = network id do veículo

-- isAIVehicle = boolean (true or false), se é um veículo de NPC ou não.
-- isUnlocked = boolean (true or false), se já está livre do sistema de tranca automática ou não.

---------------------------------------------------

exports["snt-vehicles"]:insertGarage(garageData)
-- inserir uma garagem via resources externos.
-- garageData = informações da garagem, conforme tabela exemplo abaixo:

local garageData = {
    name = "Garagem", -- Nome da garagem (opcional)
    permission = "permissao", -- Permissão (opcional, se for casa deve ser = nil)
    type = "PROPERTY", -- Tipo da garagem (NORMAL, PROPERTY, WATER, AIR, etc.)
    open = {x,y,z}, -- coordenada do blip da garagem
    spawns = {{x,y,z,h},{x,y,z,h}}, -- tabela com tabelas de coords das vagas
    propertyId = 15, -- ID da propriedade (caso seja de casa)
    propertyType = "house", -- Tipo da propriedade (caso seja de casa)
}

-- Note que os valores de 'propertyId' e 'propertyType' serão passados para a função 'hasPropertyPermission' no arquivo 'config/extras.lua' para verificar se o personagem tem permissão na casa em questão (caso seja uma garagem de casa), você pode manipular e inserir os dados que precisar para a verificação.

---------------------------------------------------

local succs,result =
exports["snt-vehicles"]:changeVehiclePlateIRT(oldPlate,newPlate)
-- alterar a placa de um veículo em tempo real (banco de dados, garagem, cache, veículo fora da garagem, etc).
-- recomendo que o player precise estar dentro do veículo e seja o dono do mesmo para fazer a alteração (Vide exemplo ao final da página).

-- oldPlate = placa atual do veículo
-- newPlate = nova placa

-- succs = boolean (true or false) se o veículo foi atualizado ou não
-- result = resultado (string) 

• Exports (Shared) (Server/Client)

[[ PEGAR AS INFORMAÇÕES DE UM VEÍCULO CADASTRADO ]]

local vehicleInfo = exports["snt-vehicles"]:getVehicleInfo(identifier)

-- identifier = pode ser a HASH do veículo (número) ou o INDEX (nome/modelo) (string).

-- vehicleInfo = retorna todas a tabela do veículo cadastrado em config > vehlist.

local vIndex = vehicleInfo["index"] (caso queira pegar index pela hash, etc)
local vName = vehicleInfo["name"] (nome bonitinho)
[...]

• Exemplo - Exports (Server)

[[ GERAR UM VEÍCULO PERMANENTE PARA UM PERSONAGEM ]]

local characterId = 30
local model = "panto"
exports["snt-vehicles"]:generateVehicle(characterId,model)
-- gera um panto, com placa e cor gerados automaticamente, para o ID 30.

---------------------------------------------------

local characterId = 20
local model = "neon"
local customPlate = "ALBE4321"
exports["snt-vehicles"]:generateVehicle(characterId,model,nil,customPlate)
-- gera um neon, com cor automática, e placa "ALBE4321" (se estiver disponivel) para o ID 20.

---------------------------------------------------

local characterId = 10
local model = "dubsta"
local c1 = {255,0,0,}
local c2 = {0,0,255}
local customPlate = "CUSTOM10"
exports["snt-vehicles"]:generateVehicle(characterId,model,{c1,c2},customPlate)
-- gera um dubsta3, vermelho e azul, para o id 10.

---------------------------------------------------

[[ GERAR UM VEÍCULO TEMPORÁRIO PARA UM PERSONAGEM ]]

local characterId = 15
local model = "zentorno"
local days = 30

local hasRented,rentalPlate,rentalTime =
exports["snt-vehicles"]:hasVehicleModelRented(characterId,model)

if hasRented then

    -- caso hasRented seja true, o personagem tem ou já teve um veículo de aluguel deste modelo, logo vamos apenas atualizar os dias para que ele não gere outra placa, causando perca de porta-malas e etc.

    -- primeiramente é necessário forçar o carregamento do veículo pela placa (caso ele esteja expirado e não esteja no cache)
    exports["snt-vehicles"]:forceLoadVehicleByPlate(rentalPlate)

    -- agora é só dar um update em quantos dias forem necessários
    exports["snt-vehicles"]:updateVehicleRentalDays(rentalPlate,days)

else

    -- caso o personagem nunca tenha tido nenhum veículo alugado do modelo desejado, é só prosseguir com o export para gerar um novo veículo alugado.
    exports["snt-vehicles"]:generateRentalVehicle(characterId,model,days)
    -- lembre-se: é possível inserir o quarto parâmetro (placa customizada).

end

---------------------------------------------------

[[ ITEM "PLACA PREMIUM" PARA ALTERAR PLACA DE VEÍCULOS ]]

local blockedPlates = {
    ["placa"] = true,
    ["pvp"] = true
}

if itemIndex == "placapremium" then
            closeInventory(src)
            if isInVehicle(src) then
                local vehicle = GetVehiclePedIsIn(GetPlayerPed(src))
                if vehicle then
                    local vehPlate = GetVehicleNumberPlateText(vehicle)
                    if vehPlate then
                        vehPlate = vehPlate:gsub(" ","")
                        local vehicleData = exports["snt-vehicles"]:getVehicleData(vehPlate)
                        if vehicleData and vehicleData.owner and vehicleData.owner == characterId then
                            local newPlate = vRP.prompt(src, "Placa:", "")
                            newPlate = newPlate:gsub(" ","")
                            if blockedPlates[newPlate:lower()] then
                                return TriggerClientEvent("Notify",src,"vermelho","Placa não permitida.",5000)
                            end
                            local succs,result = exports["snt-vehicles"]:changeVehiclePlateIRT(vehPlate,newPlate)
                            if succs then
                                removeInventoryItem(characterId,itemIndex,1,true,slot)
                                TriggerClientEvent("Notify",src, "verde", "Placa atualizada.", 5000)
                            else
                                if result == "PLATE_ALREADY_IN_USE" then
                                    TriggerClientEvent("Notify",src,"vermelho","Placa já em uso!",5000)
                                else
                                    TriggerClientEvent("Notify",src,"vermelho","Placa inválida. A placa deve conter entre 1 e 8 digitos e não pode possuir espaços ou caracteres especiais!",5000)
                                end
                            end
                        else
                            TriggerClientEvent("Notify",src,"vermelho","Você não pode mudar a placa de um veículo que não é seu.",10000)
                        end
                    end
                end
            else
                TriggerClientEvent("Notify",src,"vermelho","Você precisa estar dentro de um veículo seu para utilizar este item.",10000)
            end
            return
        end

---------------------------------------------------

[[ LEMBRE-SE ]]
Praticamente todos os exports tem o retorno de sucesso,resultado. Seja sabio e utilize-os ;)

• Integração - Hydrus.gg

  1. Crie um arquivo chamado snt-vehicles.lua dentro da pasta plugins, no seu script da Hydrus, conforme imagem abaixo:

  2. Insira o seguinte código, no arquivo criado no passo acima:

local SNT_VEHICLES = exports['snt-vehicles']
Commands['SNT:addVehicle'] = function(characterId,model,days)
    if type(characterId) == 'number' and type(model) == 'string' then
        days = parseInt(days)
        local succs,result
        if days > 0 then
            local rented,plate = SNT_VEHICLES:hasVehicleModelRented(characterId,model)
            if rented then
                SNT_VEHICLES:forceLoadVehicleByPlate(plate)
                succs,result = SNT_VEHICLES:updateRentalVehicleDays(plate,days)
                if succs then
                    result = plate
                end
            else
                succs,result = SNT_VEHICLES:generateRentalVehicle(characterId,model,days)
            end
        else
            succs,result = SNT_VEHICLES:generateVehicle(characterId,model)
        end
        if succs then
            return 'Entregue -> Placa gerada: '..result
        end
        return 'Não entregue -> Erro: '..result
    end
    return 'Não entregue -> Comando incorreto / parâmetros inválidos.'
end
  1. Ao cadastrar a instrução do produto, selecione o modo avançado e utilize o comando: SNT:addVehicle $user_id MODELO DIAS - No lugar de MODELO, insira o nome de spawn (index) do veículo, conforme cadastrado. - No lugar de DIAS, insira a quantidade de dias (para veículos temporários). Caso queira inserir um veículo permanente é só não colocar nada, ou deixar como 0. Vide imagens:

Last updated