Добавьте автомобили на FiveM дилерский центр (таблица ESX vehicles, QBCore, QBox)
Как добавить автомобиль на дилерский центр: таблицы ESX vehicles и vehicle_categories, записи QBCore и QBox shared vehicles.lua, и почему автомобиль показывается без цены.
Типичные симптомы:
The addon car works with /car, but the dealership does not sell it. Or it shows with no name, no price, or in the wrong category.Дилерский центр продаёт, что указано в его данных, а не то, что существует в игре. Добавление автомобиля требует двух шагов: модель должна быть потоком передана в игру, затем она должна быть указана в данных, которые использует ваш фреймворк. Эта статья охватывает второй шаг для ESX, QBCore и QBox.
Шаг первый: модель должна быть потоком
Если модель не загружена, дилерский центр не может её показать, и покупка не спавнит ничего. Сначала добавьте автомобиль как ресурс и проверьте, работает ли он в игре:
/car mycarИспользуйте имя спавна, которое приходит из vehicles.meta автомобиля. Если /car не работает, исправьте это перед тем как трогать магазин, см. добавление дополнительных автомобилей.
ESX: таблица vehicles
Дилерский центр ESX читает две SQL таблицы. vehicle_categories содержит категории, показанные в меню магазина, и vehicles содержит автомобили.
DESCRIBE vehicle_categories;
DESCRIBE vehicles;В стандартной базе данных ESX Legacy они выглядят так:
| Таблица | Столбцы |
|---|---|
vehicle_categories |
name, label |
vehicles |
name, model, price, category |
Добавьте категорию, если вам нужна новая:
INSERT INTO vehicle_categories (name, label) VALUES ('mycars', 'My cars');Затем добавьте автомобиль:
INSERT INTO vehicles (name, model, price, category)
VALUES ('My Car', 'mycar', 85000, 'mycars');name— это ярлык, показанный в магазине.model— это имя спавна, как в/car. Нижний регистр, ровный.price— целое число.categoryдолжен совпадать сnameстроки вvehicle_categories, иначе автомобиль не появится ни в какой категории.
Перезагрузите ресурс дилерского центра или весь магазин, чтобы он ещё раз прочитал таблицу. Ваш список столбцов может отличаться, если вы используете пользовательский магазин автомобилей, поэтому доверяйте DESCRIBE больше, чем этой таблице.
Совет: чтобы увидеть, как выглядит рабочий автомобиль, скопируйте значения строки, которая уже находится в магазине, с помощью
SELECT * FROM vehicles LIMIT 5;и отредактируйте их.
QBCore: shared/vehicles.lua
QBCore хранит свой список транспортных средств в файле Lua, qb-core/shared/vehicles.lua. Каждая запись — это автомобиль:
['mycar'] = {
model = 'mycar',
name = 'My Car',
brand = 'Mic',
price = 85000,
category = 'sports',
categoryLabel = 'Sports',
hash = `mycar`,
shop = 'pdm',
},Поля:
model: имя спавна, то же, что и ключ таблицы.nameиbrand: что показывает магазин.price: цена продажи.categoryиcategoryLabel: группа в меню.hash: хеш модели. Форма с backtick вычисляет её для вас.shop: id дилерского центра, который её продаёт, например значение по умолчанию. Имя магазина, которое не существует, означает, что никакой магазин не продаёт автомобиль.
Точный макет зависит от версии qb-core. Некоторые версии используют таблицу, ключ которой — модель, другие используют простой список. Откройте свой собственный файл и скопируйте соседнюю запись, затем измените значения, чтобы структура всегда совпадала.
После редактирования перезагрузите qb-core и ресурс дилерского центра. Перезагрузка основного сервера на живом сервере отключает игроков в некоторых установках, поэтому делайте это в спокойное время, или перезагрузите весь сервер.
QBox: qbx_core shared vehicles
QBox держит транспортные средства в собственном ядре, qbx_core/shared/vehicles.lua. Идея та же, что и на QBCore: запись с моделью, имя, бренд, цена, категория и магазин. QBox изменяет макет своих данных между выпусками, поэтому откройте файл и скопируйте запись, которая уже работает на вашей версии, затем отредактируйте её.
Перезагрузите qbx_core и ваш дилерский центр. Не запускайте отдельную папку qb-core рядом с ней, см. преобразование QBCore скриптов в QBox.
Скрипты дилерского центра с их собственной конфигурацией
Не каждый дилерский центр использует список фреймворка. Некоторые читают свой собственный файл конфигурации или таблицу базы данных, и таблица vehicles или общий файл игнорируется. Сначала проверьте конфигурацию скрипта на список транспортных средств. Если у него есть один, добавьте автомобиль там тоже.
Проблемы с именем, ценой и категорией
Автомобиль не показывает имя. Поле name пусто, или дилерский центр использует имя отображения игры. Имя отображения в игре приходит из AddTextEntry с gameName модели в vehicles.meta. Без этого магазин может показать NULL или модель. Установите ярлык в ваших данных.
Автомобиль, который стоит 0 или бесплатный. Цена отсутствует или не является числом. Удалите кавычки вокруг неё.
Категория не показывается. На ESX значение category не имеет строки в vehicle_categories. На QBCore ярлык категории отсутствует, или магазин фильтрует по категории, которую он не знает.
Неправильное имя спавна. Mycar и mycar — это не то же самое в поиске данных. Используйте имя ровно так, как оно определено, в нижнем регистре.
Куплен, но нет автомобиля. Покупка сработала, а спавн не сработал. Модель не потоком передана клиенту, или пластина и владелец не сохранены. Проверьте консоль и базу данных, см. таблицы гаража.
Обработка и производительность дополнительных автомобилей
Добавленный автомобиль с плохой обработкой или тяжелой моделью вредит всему серверу. Проверьте обработку перед его продажей, отредактируйте обработку транспортного средства, и протестируйте модель на память текстур, см. oversized assets.
Добавьте много автомобилей сразу
Для пака автомобилей цикл в SQL экономит время на ESX. Напишите строки в одном утверждении:
INSERT INTO vehicles (name, model, price, category) VALUES
('Car A', 'cara', 60000, 'mycars'),
('Car B', 'carb', 75000, 'mycars'),
('Car C', 'carc', 90000, 'mycars');На QBCore и QBox вставьте записи одну за другой в файл Lua, с запятой после каждой.
Контрольный список
| Проблема | Решение |
|---|---|
Автомобиль работает с /car, но не продаётся |
Добавьте его в таблицу vehicles, или shared/vehicles.lua |
| Автомобиль отсутствует в категории на ESX | category должна совпадать с name в vehicle_categories |
| Имя или цена не показывается | Заполните name и price, с ценой как числом |
| Никто не продаёт автомобиль на QBCore или QBox | Проверьте, что значение shop совпадает с дилерским центром |
| Покупка не спавнит ничего | Модель не потоком передана: сначала исправьте дополнительный автомобиль |
| Отредактированные данные не имеют никакого эффекта | Перезагрузите ресурс данных и дилерский центр |
| Ошибки файла Lua после редактирования | Проверьте запятые и скобки вокруг вашей новой записи |
Короткие ответы
Почему мой дополнительный автомобиль не на дилерском центре?
Магазин только выводит, что находится в его данных: таблица vehicles на ESX, или shared/vehicles.lua на QBCore и QBox. Добавление автомобиля в поток сервера — это отдельный шаг, и оба нужны.
Какое имя модели я ввожу в таблицу?
Имя спавна транспортного средства, то, которое используется в /car, которое определено в vehicles.meta транспортного средства. Оно должно совпадать ровно, в нижнем регистре.
Нужно ли мне перезагружать сервер после добавления автомобиля?
Перезагрузите ресурс, который содержит данные, и скрипт дилерского центра. На ESX магазин обычно читает таблицу при запуске, поэтому перезагрузки этого достаточно.
Скрипты без этой проблемы
Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →
Chameleon Paints82 краски-хамелеона с переливом цвета в одном меню — наносятся в один клик.Смотреть скрипт →
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →