MAATRIX GAMES / Блог / FiveM: система телефона (LB Phone и аналоги)

FiveM: система телефона (LB Phone и аналоги)

MAATRIX GAMES

RP-сервер без нормального телефона — это сервер, где игроки не могут написать друг другу сообщение, вызвать такси или получить звонок от диспетчера, не выходя из игры в Discord. Телефон — один из тех модов, без которого современный FiveM RP просто не воспринимается серьёзно, а выбор и настройка конкретного решения при этом умеет съесть не один вечер на зависимостях, конфигах и правах доступа. Разберём, как поставить и настроить телефон — на примере LB Phone как самого популярного варианта сейчас, — и куда смотреть, если решил взять аналог.

Какой телефон выбрать: LB Phone и альтернативы

LB Phone (наследник более старого gksphone) — на сегодня один из самых функциональных и активно поддерживаемых телефонов для FiveM: готовый набор приложений (звонки, SMS, контакты, камера/галерея, заметки, банк, почта, доска объявлений, гараж и обычно ещё соцсеть-приложение — конкретный набор и названия чуть отличаются между версиями), гибкая система разрешений по job/gang и встроенная поддержка нескольких фреймворков через прослойку-бридж.

Из альтернатив на рынке чаще всего встречаются:

  • qb-phone — телефон, который исторически шёл в комплекте с QBCore. Проще, меньше приложений «из коробки», зато минимум зависимостей и легче разобраться новичку.
  • npwd (Non-Phone Widget Device) — телефон на React/NUI, framework-agnostic, ценится за производительность интерфейса и модульность, но требует чуть больше возни с интеграцией под конкретный сервер.
  • Форки и клоны перечисленных решений под конкретные комьюнити — обычно урезанная или, наоборот, доработанная версия одного из трёх вариантов выше.

Если сервер уже стоит на ESX или QBCore и ты не готов тратить время на глубокую кастомизацию — LB Phone почти всегда закрывает задачу быстрее всего благодаря готовым бриджам под оба фреймворка. Если фреймворк самописный или сильно кастомный — вероятно, придётся писать свой бридж в любом случае, и тогда выбор телефона стоит делать по тому, насколько понятна его документация и структура кода, а не по количеству приложений. Если ты ещё не определился с ядром сервера — сначала посмотри сравнение ESX и QBCore, это сильно упростит выбор телефона.

Установка LB Phone с нуля: зависимости и структура

LB Phone требует пару обязательных зависимостей, которые нужно поставить и заускать раньше самого телефона в server.cfg:

ensure ox_lib
ensure oxmysql
ensure lb-phone

Порядок важен: ox_lib и oxmysql (или совместимая обёртка над MySQL, если на сервере используется другая) должны стартовать раньше телефона, иначе ресурс упадёт с ошибкой при инициализации. После распаковки архива с GitHub-репозитория в resources/[phone]/lb-phone первым делом накатывается SQL-файл, который идёт в комплекте с ресурсом — он создаёт таблицы под номера телефонов, контакты, сообщения, фото в галерее и переписку. Импортировать его можно через phpMyAdmin, HeidiSQL или консольный клиент:

mysql -u <user> -p <database> < lb-phone.sql

Дальше нужно указать используемый фреймворк и систему инвентаря — это делается либо прямым значением в config.lua, либо (в более новых версиях) через отдельные файлы бриджей в подпапке bridge/, каждый из которых отвечает за конкретный framework (ESX, QBCore, ox_core) или инвентарь (ox_inventory, qb-inventory и так далее). Если у тебя нестандартная связка — потребуется написать свой мини-бридж по образцу существующих: там обычно всего несколько функций вроде получения идентификатора игрока, баланса и предметов инвентаря.

После первого запуска стоит зайти на сервер тестовым персонажем и проверить, что телефон открывается по стандартной клавише (обычно M, но переопределяется в конфиге) и номер генерируется автоматически при создании персонажа — если экран телефона просто не открывается, в 90% случаев проблема в порядке ensure или в неприменённом SQL-дампе.

Поднять сервер FiveM (GTA V) за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Базовая настройка config.lua

Основные параметры, которые стоит пройти сразу после установки, лежат в config.lua в корне ресурса. Типичный набор настроек (имена полей уточняй по актуальной версии, которую ставишь — между релизами они периодически меняются):

Config.Framework = 'qbcore' -- или 'esx', 'standalone'
Config.Inventory = 'ox_inventory' -- используемый инвентарь

Config.PhoneNumber = {
    Length = 8,
    Prefix = '555' -- необязательный префикс номера
}

Config.OpenKey = 'M' -- клавиша открытия телефона
Config.CanFlip = true -- анимация "выхватить телефон"

Config.DiscordLogs = {
    Enabled = true,
    Webhook = 'https://discord.com/api/webhooks/...' -- логи действий в админ-канал
}

Отдельно стоит сразу настроить логирование через Discord-вебхук — это не про недоверие к игрокам, а про то, что споры «мне не пришло сообщение» и жалобы на подозрительные звонки без логов разбирать почти невозможно. Если на сервере уже есть тикет-бот или модераторский канал в Discord, логично завести под телефон отдельный канал и вебхук, по аналогии с тем, как это делается для Discord-интеграции RP-сервера.

Также в конфиге обычно можно включать и отключать отдельные приложения списком (Config.Apps или аналогичная таблица) — если часть встроенных приложений сервера не нужна (например, встроенный маркетплейс дублирует уже стоящую отдельную систему объявлений), их проще выключить в конфиге, чем вычищать из кода.

Интеграция с банком: баланс, переводы, приложение «Банк»

Приложение банка в телефоне не хранит деньги само по себе — оно читает и изменяет баланс персонажа через тот же фреймворк, что и остальной сервер, обычно через бридж-функции вроде получения баланса счёта, снятия и зачисления средств. Если банковская система на сервере уже настроена по стандартной схеме ESX/QBCore (money/bank или cash/bank), интеграция в большинстве случаев работает из коробки сразу после того, как выбран правильный Config.Framework.

Переводы между игроками по номеру телефона — самая частая точка, где стоит перепроверить лимиты и логирование сразу после установки, а не когда кто-то попробует продюпать сервер:

Config.BankTransfer = {
    Enabled = true,
    MaxAmount = 50000, -- потолок за одну операцию
    Cooldown = 30, -- секунд между переводами
    LogToDiscord = true
}

Если экономика сервера уже настроена отдельно — стартовые балансы, зарплаты, штрафы и money sinks, — телефон в неё встраивается поверх, ничего не переопределяя: это просто ещё один интерфейс для тех же операций, что уже описаны в настройке экономики RP-сервера. Стоит только убедиться, что лимиты на перевод через телефон согласованы с лимитами в самой банковской системе, иначе игроки быстро найдут более щедрую из двух дыр.

Интеграция с работами и фракциями

Один из главных плюсов LB Phone и подобных решений — приложения можно ограничивать по job или gang прямо в конфиге, без правки основного кода телефона. Типичная схема — приложение видно только персонажам с нужной работой или во фракции:

Config.RestrictedApps = {
    ['dispatch'] = { jobs = {'police', 'ambulance'} },
    ['gang_chat'] = { gangs = {'ballas', 'families'} },
}

Диспетчерское приложение (911/CAD-панель) в самом телефоне обычно закрывает только базовую часть — уведомления и список активных вызовов; полноценная логика диспетчеризации (маркеры на карте, распределение вызовов между сменой) чаще всего живёт в отдельном ресурсе (например, qs-dispatch, cd_dispatch, ps-dispatch или их форки), а телефон просто подписывается на его события и показывает уведомления во встроенном приложении или push-баннером сверху экрана. Перед тем как встраивать диспетчер в телефон, стоит определиться с системой фракций и штатной структурой — если этот этап ещё не пройден, посмотри настройку системы фракций и банд.

Для обычных гражданских работ (таксист, курьер, механик) телефон обычно используется проще — как способ принять заказ через специальное приложение или получить GPS-метку точки назначения, без завязки на систему разрешений по job. Если система работ на сервере ещё не настроена — это отдельная задача, подробнее в статье про настройку работ (jobs) на RP-сервере: телефон в этой части выступает интерфейсом поверх уже существующей логики, а не заменяет её.

Кастомизация приложений

Рано или поздно захочется добавить что-то своё — брендированное приложение сервера, кастомный маркетплейс с другой логикой или интеграцию с внешним сайтом статистики. У LB Phone (и большинства современных телефонов) для этого есть система собственных приложений: разработчик кладёт свой NUI-код в отдельный ресурс и регистрирует его в телефоне через экспорт при старте:

-- клиентский код кастомного ресурса, регистрация нового приложения
exports['lb-phone']:AddCustomApp({
    identifier = 'my_custom_app',
    name = 'Моё приложение',
    -- путь к иконке и NUI-разметке кастомного приложения
    icon = 'nui://my_custom_app/icon.png',
})

Точный набор полей и способ регистрации стоит сверять по документации конкретной версии телефона, которую ставишь, — API между релизами иногда меняется. Общий принцип для всех NUI-based телефонов одинаков: своё приложение — это отдельный ресурс с HTML/CSS/JS-интерфейсом, который телефон встраивает в общую NUI-оболочку и монтирует в общий список иконок на рабочем столе.

Если параллельно ставишь и другие кастомные скрипты на сервер — общие грабли (конфликты идентификаторов ресурсов, порядок загрузки, версии зависимостей) разобраны в статье про установку кастомных скриптов на FiveM: те же принципы применимы и к кастомным приложениям телефона.

Поднять сервер FiveM (GTA V) за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Телефон не открывается по клавише M — что проверить в первую очередь?

Убедись, что ресурс запустился без ошибок в консоли (refresh + ensure lb-phone заново), что ox_lib и oxmysql стартуют раньше в server.cfg, и что SQL-дамп телефона реально импортирован в базу — без нужных таблиц ресурс часто падает молча или зависает на загрузке.

Можно ли перенести номера и переписку игроков при смене телефона на другой?

Обычно нет автоматического инструмента — структуры таблиц у разных телефонов разные. При переходе с одного решения на другое почти всегда придётся смириться с обнулением истории сообщений и контактов, либо писать миграционный SQL-скрипт вручную под конкретную пару систем.

LB Phone — платный или бесплатный?

На рынке одновременно существуют бесплатная и расширенная (платная, с дополнительными приложениями и поддержкой) версии — конкретные условия и набор функций каждой стоит уточнять на официальном ресурсе разработчика перед установкой, они периодически меняются.

Нагружает ли телефон сервер при большом онлайне?

Основная нагрузка идёт не от самого интерфейса, а от частых MySQL-запросов (сообщения, звонки, банковские операции). Если на сервере уже настроен нормальный пул подключений к базе и есть индексы на часто используемых полях, телефон не становится узким местом даже при плотном RP-онлайне.

Нужно ли что-то отдельно настраивать для голосовых звонков?

Голосовая связь через телефон обычно завязана на уже установленный голосовой ресурс (например, pma-voice или аналог) — сам телефон только инициирует канал звонка, а передачу голоса берёт на себя voice-система. Если голосовой чат ещё не настроен на сервере, это стоит сделать до интеграции звонков в телефоне.