Agency-Vehiclekeys V2 الإعدادات
مفاتيح مركبات شاملة لـ FiveM على QBCore أو Qbox أو ESX أو بنظام مستقل تمامًا.

01الإعدادات
تثبيت سريع · config.lua · Agency-Vehiclekeys V2
--[[ ============================================================================
AGENCY VEHICLEKEYS V2 · config.lua
----------------------------------------------------------------------------
Universal keys for every vehicle: owned cars, shared keys, job vehicles and
rentals. Finds QBCore, Qbox or ESX by itself and runs fully standalone
without any of them. Everything a server owner may want to change is here.
Admins change the look and the most used switches live in the menu
(/keys, tab with the gear). Those values are saved for the whole server
and win over this file until "Reset to config.lua" is pressed.
============================================================================ ]]
Config = {}
-- =============================================================================
-- 1. GENERAL
-- =============================================================================
Config.Framework = 'auto' -- 'auto' | 'qbcore' (also Qbox) | 'esx' | 'standalone'
Config.Locale = 'en' -- en de fr es it pt nl pl cs sv da fi ro hu hr bg el tr ru uk ar hi ja ko zh
-- Debug mode: every request in the server console (who, what, result), extra
-- lines in F8, and /vkdebug in game shows everything about the car in front
-- of you. Admins can switch it in the menu as well.
Config.Debug = false
-- Where the keys are saved. 'auto' uses oxmysql when it runs (table
-- agency_vehiclekeys, created by itself) and otherwise the server's own key
-- value store, so a server without a database works as well.
Config.Storage = 'auto' -- 'auto' | 'mysql' | 'kvp'
-- Where your framework keeps the owned vehicles. 'auto' knows QBCore and Qbox
-- (player_vehicles, citizenid) and ESX (owned_vehicles, owner). Change it only
-- for a garage or framework fork with its own table.
Config.OwnedVehicles = {
table = 'auto', -- e.g. 'owned_vehicles'
owner = 'auto', -- column with the owner: citizenid (QB) / owner (ESX)
plate = 'plate', -- column with the plate
}
-- The inventory that holds lockpicks. 'auto' finds ox_inventory and
-- qs-inventory, otherwise the framework's own (qb-inventory and its forks,
-- ESX). 'none' never asks for an item.
Config.Inventory = 'auto' -- 'auto' | 'ox' | 'qs' | 'framework' | 'none'
-- How messages are shown (the V1 look and messages from the server):
-- 'auto' = Agency-Notify when it runs, then your framework, then the GTA feed.
Config.Notify = 'auto' -- 'auto' | 'agency' | 'framework' | 'gta'
-- =============================================================================
-- 2. LOOK
-- =============================================================================
Config.UI = {
-- 'v2' is the Agency-Housing look: gold, solid cards, pills.
-- 'v1' is the classic look of Vehiclekeys V1: every message as a
-- notification (Agency-Notify, your framework or the GTA feed) and the menu
-- in the old Agency style.
design = 'v2',
position = 'bottom', -- where the key fob card shows up: 'bottom' | 'right' | 'top'
scale = 1.0, -- 0.8 to 1.3
}
-- In the V2 look lock and engine messages use the key fob card; everything
-- else follows Config.Notify above. false skips Agency-Notify in 'auto'.
Config.UseAgencyNotify = true
-- =============================================================================
-- 3. CONTROLS
-- =============================================================================
-- Players can change every key in the GTA settings (Key Bindings > FiveM).
-- The defaults stay clear of the other Agency scripts: Agency Phone opens
-- with M, Agency Pad and Agency-Seatbelt use K, Agency Watch Z, Housing F7.
-- (V1 used M for the engine: set engine = 'M' for the old key.)
Config.Controls = {
lock = 'G', -- lock or unlock the nearest vehicle you have a key for
engine = 'U', -- engine on or off in the driver seat
menu = 'F5', -- the key ring
lockpick = 'H', -- pick a lock on foot, hotwire in the driver seat
indicators = true, -- arrow keys for the indicators (as in V1)
indicatorLeft = 'LEFT',
indicatorRight = 'RIGHT',
hazards = 'DOWN',
}
Config.Commands = {
menu = 'keys', -- opens the key ring (admins get the admin tabs there)
-- V1 commands, kept for everyone who is used to them:
giveKey = { 'givekey', 'gibschluessel' }, -- /givekey [id]: key of the vehicle you sit in or stand next to
removeKey = { 'removekey', 'nimm_schluessel' }, -- /removekey [id]
}
-- =============================================================================
-- 4. LOCKING
-- =============================================================================
Config.Lock = {
range = 25.0, -- metres the remote reaches (V1 used 100)
anim = true, -- key fob in hand and the click animation
chirp = true, -- short horn beep and flashing indicators
-- Vehicle classes without doors to lock: motorcycles, cycles, boats,
-- helicopters, planes and trains. They still need a key for the engine
-- when Config.Engine.needKey is on.
noLockClasses = { 8, 13, 14, 15, 16, 21 },
}
-- =============================================================================
-- 5. ENGINE AND TRUNK
-- =============================================================================
Config.Engine = {
-- false (as in V1): everyone can start and stop any engine, keys decide
-- who locks. true: the engine only runs with a key, after hotwiring or in
-- an ignored vehicle.
needKey = false,
keepRunning = true, -- the engine keeps running when you get out
remote = true, -- start and stop the engine from the key ring
}
Config.Trunk = {
remote = true, -- open and close the trunk from the key ring
}
-- =============================================================================
-- 6. SHARING KEYS
-- =============================================================================
Config.Share = {
enabled = true,
distance = 5.0, -- metres to the other player; 0 = any online player by ID
maxPerVehicle = 6, -- keys an owner can hand out per vehicle
tempHours = 0, -- temporary keys last until the next restart (0) or this many hours
showNames = false, -- character names in the list of nearby players (off: ID and distance)
}
-- =============================================================================
-- 7. JOB VEHICLES
-- =============================================================================
-- Players with the job can lock and drive these vehicles without a key.
-- models: spawn names. grade: lowest job grade. onDuty: only while on duty
-- (QBCore, Qbox, and ESX forks with duty).
-- ace: standalone servers have no jobs; give the ACE instead, for example
-- add_ace group.police agency.vehiclekeys.police allow
Config.JobKeys = {
police = {
label = 'Police',
models = { 'police', 'police2', 'police3', 'police4', 'policeb', 'policet', 'sheriff', 'sheriff2',
'fbi', 'fbi2', 'pranger', 'riot', 'nightshark', 'svolito', 'polmav', 'predator' },
grade = 0,
onDuty = true,
ace = 'agency.vehiclekeys.police',
},
ambulance = {
label = 'EMS',
models = { 'ambulance', 'firetruk', 'lguard', 'blazer2' },
grade = 0,
onDuty = true,
ace = 'agency.vehiclekeys.ambulance',
},
mechanic = {
label = 'Mechanic',
models = { 'towtruck', 'towtruck2', 'flatbed' },
grade = 0,
onDuty = false,
ace = 'agency.vehiclekeys.mechanic',
},
}
-- =============================================================================
-- 8. IGNORED VEHICLES
-- =============================================================================
-- Nobody needs a key for these, nobody can lock them. Spawn names.
Config.IgnoredModels = {
'pbus', 'bus', 'coach', 'airbus', 'rentalbus', 'tourbus',
'trash', 'trash2', 'stockade', 'taxi', 'tiptruck2', 'mixer', 'guardian', 'boxville',
'bmx', 'cruiser', 'fixter', 'scorcher', 'tribike', 'tribike2', 'tribike3',
}
-- =============================================================================
-- 9. LOCKPICKING AND HOTWIRING
-- =============================================================================
Config.Lockpick = {
enabled = true,
-- The first item the player carries is used. difficulty: 'easy' | 'medium' | 'hard'.
items = {
{ name = 'advancedlockpick', difficulty = 'easy', breakChance = 10 },
{ name = 'lockpick', difficulty = 'medium', breakChance = 35 },
},
-- Standalone servers without an inventory cannot carry items. 'auto'
-- needs an item wherever an inventory runs and none without one.
needItem = 'auto', -- 'auto' | true | false
rounds = 3, -- skill check rounds
alarmChance = 60, -- percent: the car alarm goes off
policeChance = 40, -- percent: police get a dispatch alert
notifyOwner = true, -- the owner gets a message when someone breaks in
cooldown = 10, -- seconds between two tries
alarmSeconds = 30,
-- Classes that cannot be picked (18 = emergency vehicles).
blockedClasses = { 18 },
}
Config.Hotwire = {
-- Only matters with Config.Engine.needKey = true: without a key the player
-- can hotwire the car from the driver seat. Success gives a temporary key.
enabled = true,
needItem = false, -- true: needs one of the lockpick items
rounds = 4,
difficulty = 'medium',
alarmChance = 35,
policeChance = 25,
cooldown = 15,
}
-- =============================================================================
-- 10. POLICE ALERTS
-- =============================================================================
Config.Police = {
jobs = { 'police', 'sheriff', 'lspd', 'bcso' },
onDutyOnly = true,
-- 'auto' finds ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch,
-- core_dispatch, tk_dispatch or lb-tablet; 'notify' messages every
-- officer; 'none' switches alerts off.
dispatch = 'auto',
code = '10-60',
blip = { sprite = 225, color = 1, scale = 1.0, seconds = 60 },
}
-- =============================================================================
-- 11. STANDALONE
-- =============================================================================
Config.Standalone = {
-- A player who drives off first in a vehicle that nobody has a key for
-- and that a script spawned (vMenu, admin menus, job scripts) gets a
-- temporary key for it. Ambient traffic never counts.
claimSpawned = true,
-- Admins: ACE 'agency.vehiclekeys.admin' or group.admin / group.superadmin.
adminAce = 'agency.vehiclekeys.admin',
-- Items without a framework: fill in these three functions to connect an
-- inventory of your own (return numbers / true).
itemCount = nil, -- function(source, item) return 0 end
removeItem = nil, -- function(source, item, amount) return true end
}
-- On QBCore also usable in framework mode: a script spawned vehicle nobody
-- owns goes to the first driver (admin cars, events). Off by default.
Config.ClaimSpawnedWithFramework = false
-- =============================================================================
-- 12. ADMINS
-- =============================================================================
Config.AdminGroups = { 'admin', 'god', 'superadmin' }
-- =============================================================================
-- 13. OWN TEXTS
-- =============================================================================
-- Any key from locales/en.lua can be given your own wording here. It wins over
-- every language and survives updates, for example:
-- Config.Text = { locked = 'Car locked', ui_title = 'My keys' }
Config.Text = {}
02ملف SQL
اختياري: ينشئ المورد هذه الجداول بنفسه عند بدء التشغيل. استورد هذا الملف فقط إذا كنت تُعدّ قاعدة البيانات يدويًا:
-- Agency Vehiclekeys V2
-- Optional: the script creates this table by itself on the first start when
-- oxmysql runs. Run it by hand only if your database user may not create tables.
CREATE TABLE IF NOT EXISTS `agency_vehiclekeys` (
`plate` VARCHAR(16) NOT NULL,
`identifier` VARCHAR(96) NOT NULL,
`kind` VARCHAR(12) NOT NULL DEFAULT 'shared',
`holder` VARCHAR(64) NULL DEFAULT NULL,
`granted_by` VARCHAR(96) NULL DEFAULT NULL,
`model` VARCHAR(32) NULL DEFAULT NULL,
`created` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`plate`, `identifier`),
KEY `identifier` (`identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+من المفيد معرفته
لكل خيار في config.lua وظيفة، موزعة على 13 قسمًا تبدأ بإطار العمل وتنتهي بالعبارات المخصصة. ويمكن أيضًا تغيير أكثر الإعدادات استخدامًا داخل اللعبة من تبويب Settings في حلقة المفاتيح، على مستوى الخادم بأكمله.
- عام والمظهر
- تحدد Config.Framework وConfig.Locale وConfig.Debug وConfig.Storage وConfig.Inventory وConfig.Notify طريقة عمل السكربت. يحدد Config.UI التصميم (v2 أو v1)، ومكان ظهور بطاقة مفتاح السيارة وحجمها.
- أزرار التحكم والأوامر
- يحدد Config.Controls الأزرار G وU وF5 وH ومفاتيح الأسهم للإشارات. يحدد Config.Commands الأمر /keys وأوامر V1 وهما /givekey و/removekey، مع أسمائهما البديلة بالألمانية.
- القفل والمحرك والصندوق الخلفي
- يحدد Config.Lock نطاق جهاز التحكم عن بُعد، والحركة وصوت البوق، وفئات المركبات التي لا أبواب لها لقفلها. يحدد Config.Engine ما إذا كان المحرك يحتاج إلى مفتاح، وما إذا كان سيظل يعمل، وما إذا كان يمكن تشغيله من حلقة المفاتيح. يتيح Config.Trunk فتح الصندوق الخلفي عن بُعد.
- مشاركة المفاتيح
- يحدد Config.Share المسافة إلى اللاعب الآخر، وعدد المفاتيح لكل سيارة، ومدة صلاحية المفاتيح المؤقتة، وما إذا كانت قائمة اللاعبين القريبين تعرض أسماء شخصياتهم.
- مركبات الوظائف
- يسرد Config.JobKeys مركبات الشرطة والإسعاف والميكانيكيين، مع أدنى رتبة وظيفية، وما إذا كان يجب أن يكون اللاعب في الخدمة، وACE للخوادم المستقلة.
- فتح الأقفال والتوصيل المباشر
- يحدد Config.Lockpick العناصر ومستوى صعوبتها واحتمال كسرها، وعدد الجولات، واحتمالات إطلاق الإنذار واستدعاء الشرطة، ومدة الانتظار وفئات المركبات التي لا يمكن فتح أقفالها. يحدد Config.Hotwire الإعدادات نفسها للتوصيل المباشر.
- تنبيهات الشرطة
- يحدد Config.Police وظائف الشرطة، وما إذا كان التنبيه يصل إلى الضباط الموجودين في الخدمة فقط، ونظام الإرسال (يكتشف سبعة منها تلقائيًا)، والرمز وعلامة الموقع على الخريطة.
- مستقل
- يمنح Config.Standalone أول سائق لسيارة أنشأها سكربت ولا يملك أحد مفتاحها مفتاحًا مؤقتًا، ويحدد ACE المسؤول، ويربط مخزونك الخاص باستخدام وظيفتين.
?الأسئلة المتكررة
ما الإعدادات التي تغيرها خيارات القائمة؟
التصميم، وموضع البطاقة وحجمها، ومدى التحكم عن بُعد، وقواعد المحرك، والبوق والأضواء، والمشاركة، والسيارات التي يتم إخراجها، وكسر الأقفال، والتشغيل بالأسلاك، والإنذارات ووضع التصحيح. تُحفَظ هذه الإعدادات للخادم بأكمله وتتغلب على config.lua حتى يتم الضغط على Reset to config.lua أو تشغيل vehiclekeys reset في وحدة التحكم.
كيف أستخدم النصوص الخاصة بي؟
ضع المفتاح من locales/en.lua مع النص الذي تريده في Config.Text، على سبيل المثال Config.Text = { locked = 'Car locked' }. يتغلب هذا على جميع اللغات ويظل محفوظًا بعد التحديثات.