Гараж FiveM: owned_vehicles и player_vehicles, отсутствующие машины исправлены

Машины отсутствуют в гараже? Как работают таблицы ESX owned_vehicles и QBCore player_vehicles, сохраненные и столбцы состояния, и SQL для исправления машин, застрявших снаружи.

Типичные симптомы:

text
You bought a car, and the garage says "No vehicles". Or the car was parked at the street, the server restarted, and it is gone.

Почти каждый скрипт гаража читает то же самое: одна таблица с одной строкой за принадлежащее транспортное средство. Когда машина отсутствует, строка неправильна, а не скрипт. Эта статья объясняет две стандартные таблицы, что означают сохраненные и столбцы состояния, и SQL, который исправляет обычные случаи.

Две таблицы

ESX использует owned_vehicles. QBCore и QBox используют player_vehicles. Имена одинаковые на серверах, точные столбцы зависят от вашей версии и вашего скрипта гаража, поэтому сначала посмотрите вашу:

sql
DESCRIBE owned_vehicles;
DESCRIBE player_vehicles;

ESX: owned_vehicles

Основные столбцы в ESX Legacy:

Столбец Содержание
owner Идентификатор игрока ESX
plate Номер, уникальный за машину
vehicle JSON текст со свойствами транспортного средства
type car, boat, aircraft...
stored 1 в гараже, 0 в мире
job Установлен для рабочих транспортных средств, иначе пусто

Скрипты гаража добавляют свои собственные столбцы, например для названия гаража или состояния фунта.

QBCore и QBox: player_vehicles

Столбец Содержание
citizenid Персонаж, который владеет машиной
license Идентификатор лицензии игрока
vehicle Имя модели
hash Хеш модели
mods JSON текст со свойствами транспортного средства
plate Номер
garage ID гаража, которому принадлежит машина
state 0 снаружи, 1 в гараже, 2 конфискована
fuel, engine, body Последние сохраненные значения

QBox использует ту же таблицу с теми же идеями. Другие столбцы, такие как финансовые данные, различаются.

Свойства как JSON

Столбец vehicle на ESX и столбец mods на QBCore содержат внешний вид и настройку машины как JSON: цвета, моды, колеса, номер и так далее. Гараж читает это, когда вы выводите машину, и пишет это снова, когда вы ее паркуете.

lua
-- when storing, on the client
local props = lib.getVehicleProperties(vehicle)
TriggerServerEvent('my_garage:store', plate, json.encode(props))

JSON должна быть действительна. Если скрипт написал сломанную строку, машина не может быть восстановлена и спавнится обычная или вообще не спавнится. Статья о vehicle properties показывает, как построить и применить их.

Транспортные средства отсутствуют в гараже

Запустите эти по порядку.

1. Строка существует, но принадлежит кому-то еще

Список гаража фильтруется по владельцу. Если значение владельца не то, которое использует сервер для вашего персонажа, строка невидима:

sql
SELECT owner, plate, stored FROM owned_vehicles WHERE plate = 'MIC 001';
sql
SELECT citizenid, license, plate, state FROM player_vehicles WHERE plate = 'MIC 001';

Сравните владельца с вашим реальным персонажем:

  • ESX: идентификатор в users.identifier для этого персонажа. С многопласштным скриптом он может иметь префикс, такой как char1:, и машина, купленная до установки мультиперсонажа, имеет старое значение без него.
  • QBCore и QBox: citizenid в таблице players.

После изменения фреймворка, импорта с другого сервера или ручной вставки это наиболее распространенная причина. Исправьте это, направив строку на правильное значение:

sql
UPDATE owned_vehicles SET owner = 'char1:abcdef...' WHERE plate = 'MIC 001';
UPDATE player_vehicles SET citizenid = 'ABC12345' WHERE plate = 'MIC 001';

Замените значения на реальные из ваших таблиц.

2. Состояние застряло "снаружи"

Машина, которую вы вывели и которая никогда не вернулась, например после краша или перезагрузки, остается помеченной как снаружи. Гараж перечисляет только припаркованные машины.

ESX, установите сохраненный флаг обратно:

sql
UPDATE owned_vehicles SET `stored` = 1 WHERE `stored` = 0;

QBCore и QBox, установите состояние на garaged:

sql
UPDATE player_vehicles SET state = 1 WHERE state = 0;

Внимание: на живом сервере это также хранит машины, на которых игроки ездят прямо сейчас. Запустите это при запуске, или ограничьте это WHERE на один номер или одного владельца.

Многие серверы запускают очистку подобно этому автоматически, когда ресурс запускается, так как после перезагрузки машина не может быть снаружи. Если ваш не запускает, вы можете сделать это сами:

lua
-- server side, runs when the garage resource starts
AddEventHandler('onResourceStart', function(resource)
    if resource ~= GetCurrentResourceName() then return end
    MySQL.update('UPDATE player_vehicles SET state = 1 WHERE state = 0')
end)

Обратите внимание на обратные кавычки вокруг stored в запросе ESX: stored — зарезервированное слово в MySQL и не работает без них. Некоторые скрипты затем отправляют эти машины в состояние фунта вместо гаража, поэтому проверьте, что ожидает ваш гараж.

3. ID гаража не совпадает

На QBCore столбец garage говорит, в каком гараже живет машина. Гараж, названный в вашем конфиге, который не в строке, или переименованный гараж, не показывает ничего. Перечислите используемые значения:

sql
SELECT garage, COUNT(*) FROM player_vehicles GROUP BY garage;

Установите машины в гараж, который существует в вашем конфиге.

4. Тип машины не совпадает

Скрипты гаража разделяют машины, лодки и самолеты по столбцу type или классу транспортного средства. Лодка, сохраненная как car, никогда не показывается в гараже лодок.

Номера

Номер связывает мир, базу данных и ключи. Держите эти правила:

  • Номер уникален за строку. Дубликат вызывает загрузку неправильной машины.
  • Номер не более 8 символов в игре, столбец может быть длиннее на ESX.
  • Пробелы считаются. MIC 001 и MIC001 — два номера, поэтому используйте один формат.

Для ключей смотрите vehicle keys.

Добавить машину игроку с помощью SQL

Вы можете дать транспортное средство, вставив строку. Возьмите список столбцов из вашей собственной DESCRIBE, так как отсутствующий требуемый столбец делает вставку неудачной:

sql
INSERT INTO owned_vehicles (owner, plate, vehicle, type, `stored`)
VALUES ('identifier-here', 'MIC 001', '{"model":-1130810103,"plate":"MIC 001"}', 'car', 1);

model в JSON — это хеш модели, а не имя. Ваш фреймворк или ваш гараж обычно имеют команду или функцию, которая делает это правильно, что является более безопасным способом, когда он существует.

Контрольный список

Симптом Исправление
Гараж говорит нет транспортных средств Проверьте, что owner или citizenid совпадает с вашим персонажем
Машина застряла снаружи после краша или перезагрузки UPDATE сохраненный флаг или state обратно на garaged, в идеале при запуске
Купленная машина не показывается Проверьте, что строка существует, владелец и гараж или тип
Запрос stored дает синтаксическую ошибку Поместите обратные кавычки вокруг stored
Машина загружается без модов Проверьте, что JSON vehicle или mods действительна и не пуста
Загружается неправильная машина Посмотрите дубликаты номеров
Лодка или самолет отсутствует Проверьте, что столбец type совпадает с гаражом

Короткие ответы

Почему моей машины нет в гараже?

Либо строка не связана с вашим персонажем (неправильный владелец или citizenid), либо машина помечена как выше. Проверьте столбец владельца и сохраненный или столбец состояния в базе данных.

Что означает состояние в player_vehicles?

На QBCore и QBox state — это число: 0 означает, что машина находится в мире, 1 означает, что она находится в гараже, 2 означает, что она конфискована. Машина застрявшая на 0 не показывается в списке гаража.

Как мне вернуть каждую машину обратно в гараж?

Запустите одно UPDATE, которое устанавливает сохраненный флаг или состояние на значение garaged для строк, которые находятся снаружи. Лучше всего запустить его при запуске сервера, так как машина не может быть снаружи после перезагрузки.

Скрипты без этой проблемы

Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →Chameleon Paints82 краски-хамелеона с переливом цвета в одном меню — наносятся в один клик.Смотреть скрипт →Car BombЗакладывайте, находите и обезвреживайте бомбы в машинах — с телефоном-детонатором и мини-игрой C4.Смотреть скрипт →

Читайте также

FiveMESXQBCoreДобавьте автомобили на FiveM дилерский центр (таблица ESX vehicles, QBCore, QBox)Как добавить автомобиль на дилерский центр: таблицы ESX vehicles и vehicle_categories, записи QBCore и QBox shared vehicles.lua, и почему автомобиль показывается без цены.1 октября 2026 г. · 4 мин чтенияЧитать →FiveMESXQBCoreКлючи автомобиля FiveM: не можешь водить свой автомобиль или заблокировать его? Исправь этоКак работают системы ключей автомобилей в FiveM: списки номерных знаков, выдача ключей после спауна или покупки, блокировка с помощью SetVehicleDoorsLocked и почему вы теряете доступ к своему автомобилю.1 октября 2026 г. · 4 мин чтенияЧитать →FiveMox_libESXПолучайте и устанавливайте свойства транспортного средства в FiveM: lib, ESX и QBCoreСохраняйте и восстанавливайте моды транспортного средства, цвета и дополнения в FiveM: lib.getVehicleProperties, ESX.Game.GetVehicleProperties, QBCore.Functions.GetVehicleProperties, SetVehicleModKit и база данных.1 октября 2026 г. · 3 мин чтенияЧитать →