▫️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
Crie um arquivo chamado snt-vehicles.lua dentro da pasta plugins, no seu script da Hydrus, conforme imagem abaixo:
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
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