DRS Insurance

Uma seguradora a sério: os jogadores fazem seguro aos carros num tablet, com planos, validade e apólice em papel.

v2.1.6 QBCore drs_insurance
Ver na loja

Seguradora de veículos: os jogadores fazem seguro aos seus carros num tablet, com planos Básico e Premium, validade e apólice em papel. O preço é calculado a partir do valor real de cada carro.

#Requisitos

RecursoObrigatório
qb-coreSim
ox_libSim
oxmysqlSim
qb-target ou ox_targetNão — sem target usa a tecla E

#Instalação

  1. Importa o SQL. Acrescenta as colunas insurance e insurance_expires à tabela player_vehicles (só se ainda não existirem):
drs_insurance.sql
-- DRS Insurance — adds the insurance columns to QBCore's player_vehicles
-- Compatível com MySQL e MariaDB / Works on both MySQL and MariaDB (safe to run more than once)

SET @db = DATABASE();

SET @q = IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'player_vehicles' AND COLUMN_NAME = 'insurance') = 0,
  'ALTER TABLE `player_vehicles` ADD COLUMN `insurance` VARCHAR(20) NOT NULL DEFAULT ''none''', 'DO 0');
PREPARE s FROM @q; EXECUTE s; DEALLOCATE PREPARE s;

SET @q = IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'player_vehicles' AND COLUMN_NAME = 'insurance_expires') = 0,
  'ALTER TABLE `player_vehicles` ADD COLUMN `insurance_expires` INT NOT NULL DEFAULT 0', 'DO 0');
PREPARE s FROM @q; EXECUTE s; DEALLOCATE PREPARE s;
  1. Garante que o item insurance_paper existe no qb-core/shared/items.lua (ou muda Config.DocumentItem):
qb-core/shared/items.lua
insurance_paper = { name = 'insurance_paper', label = 'Apólice de Seguro', weight = 0, type = 'item', image = 'insurance_paper.png', unique = true, useable = true, shouldClose = true, description = 'Apólice de seguro do veículo' },
  1. Coloca drs_insurance em resources e adiciona ao server.cfg:
server.cfg
ensure qb-core
ensure ox_lib
ensure oxmysql
ensure drs_insurance

#Utilização

  1. Vai ao agente de seguros (ícone no mapa) e fala com ele.
  2. No tablet aparecem todos os teus veículos com o estado do seguro: sem seguro, ativo (com data de fim) ou expirado.
  3. Escolhe o veículo e o plano. O preço aparece antes de pagares.
  4. Recebes a apólice em papel com matrícula, titular, plano, data de emissão e validade. Ao usá-la, vês os dados.

A apólice pode ser copiada numa reprografia com o DRS Printer.

#Preços

O preço de cada plano é uma percentagem do valor do carro:

PlanoPercentagemDuração
basic15%30 dias
premium35%60 dias

O valor do carro é procurado por esta ordem de prioridade: Config.CustomPrices → ficheiros de Config.PriceFiles (config do stand, carros addon incluídos) → QBCore.Shared.Vehicles. O preço final do seguro nunca é inferior a Config.MinimumPrice, o que cobre também os carros sem preço.

#Opções principais

OpçãoPor defeitoDescrição
Config.Plansver acimaPercentagem e duração de cada plano
Config.Account'bank'Conta cobrada: bank ou cash
Config.DocumentIteminsurance_paperItem da apólice
Config.DocumentReader'notify'notify ou o evento cliente de outro script para mostrar a apólice
Config.AgentPillboxModelo, posição e blip do agente
Config.Target'auto'Target ou tecla E

#Configuração completa

config.lua
Config = {}

-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'

-- Planos de seguro: preço = percentagem do preço do veículo (QBCore.Shared.Vehicles), duração em dias
-- Insurance plans: price = % of the vehicle price (QBCore.Shared.Vehicles), duration in days
Config.Plans = {
    basic   = { percent = 0.15, days = 30 },
    premium = { percent = 0.35, days = 60 },
}

-- De onde vêm os preços dos carros (além do qb-core): ficheiros de config do stand. Percebe linhas com
-- model = '...' e price = N ou costs = N. Os que não existirem são ignorados.
-- Where car prices come from (besides qb-core): the dealership's config files. Understands lines with
-- model = '...' and price = N or costs = N. Missing ones are skipped.
Config.PriceFiles = {
    { resource = 'qb-vehicleshop', file = 'config.lua' },
    { resource = 'qb-vehicleshop', file = 'shared/config.lua' },
}

-- Preços manuais (ganham a tudo) / Manual prices (override everything)
Config.CustomPrices = {
    -- ['18rs7'] = 600000,
}

-- Preço mínimo de um seguro (para veículos sem preço definido) / Minimum insurance price (vehicles without a price)
Config.MinimumPrice = 500

-- Conta de onde sai o dinheiro: 'bank' ou 'cash' / Account to charge: 'bank' or 'cash'
Config.Account = 'bank'
-- Animação de segurar um tablet enquanto o menu está aberto / Hold-a-tablet animation while the menu is open
Config.TabletAnim = true

Config.Currency = '€'

-- Documento entregue ao comprar / Document given on purchase
Config.GiveDocument = true
Config.DocumentItem = 'insurance_paper'

-- Mostrar o documento ao usá-lo: 'notify' (aviso) ou o nome de um evento cliente de outro script
-- Show the document when used: 'notify' or the name of another script's client event
Config.DocumentReader = 'notify'

-- Agente de seguros / Insurance agent
Config.Agent = {
    model = 's_m_m_highsec_01',
    coords = vector4(-70.60, -800.26, 44.23, 341.11),
    blip = { enabled = true, sprite = 408, color = 3, scale = 0.9 },
}

-- 'auto' deteta qb-target/ox_target; se nenhum existir usa a tecla E / 'auto' detects qb-target/ox_target, else E key
Config.Target = 'auto'

#Resolução de problemas

"Unknown column 'insurance'" — o SQL não foi importado.

O preço aparece sempre no mínimo — o carro não tem preço no QBCore nem no stand. Acrescenta-o em Config.CustomPrices ou indica o ficheiro de config do teu stand em Config.PriceFiles.