🧩 Створення власного моста для фреймворку
Dream Bridge підтримує ESX, QBCore та QBX з коробки. Якщо ви використовуєте інший або змінений фреймворк, ви можете реалізувати свій власний власний міст для забезпечення сумісності.
У цьому керівництві ви дізнаєтеся, як створити новий міст, використовуючи вбудований шаблон custom
.
💡 Примітка: QBX (Qbox) повністю сумісний з мостом QBCore. Окрема реалізація не потрібна.
📁 Структура моста
Усі мости розташовані у папці bridge/
.
Кожен фреймворк (наприклад, esx
, qbcore
, custom
) має власну підпапку з:
client.lua
server.lua

Міст автоматично визначає ваш активний фреймворк через GetResourceState
.
Важливо: Якщо ваш ресурс фреймворку перейменовано (наприклад,
es_extended
→roleplay_framework
), автоматичне визначення може зазнати невдачі.
🚀 Як використовувати власний міст
Використовуйте міст custom
:
- Ви використовуєте автономний або неофіційний/непідтримуваний фреймворк
➡️ Створіть новий міст на основі шаблонуcustom
. - Вам потрібно відредагувати/змінити щось у наявному мосту.
➡️ Спробуйте спочатку відредагувати наявний міст. Наприклад, ваша таблиця owned_vehicles відрізняється від типової. У цьому випадку вам просто потрібно відредагувати функції, що стосуються транспортних засобів, у наявному мосту. Не потрібно створювати новий або редагувати все. - Жоден підтримуваний фреймворк не виявлений за замовчуванням.
➡️ Якщо ви перейменували ресурс свого фреймворку, його може не бути виявлено автоматично (наприклад,es_extended
->roleplay_framework
). У цьому випадку вам потрібно додатиGetResourceState
до вашого перейменованого ресурсу у відповідний файл моста.
🛠️ Початок роботи
- Скопіюйте папку
bridge/custom
Перейменуйте її, щоб відповідала назві вашого власного фреймворку (наприклад,bridge/myframework
). - Відредагуйте файли
client.lua
таserver.lua
Реалізуйте свою логіку у наданих функціях-заглушках. - Налаштуйте логіку визначення фреймворку
Замініть або розширте перевіркиGetResourceState
, щоб визначити ваш власний фреймворк.
✅ Приклад: client.lua
if GetResourceState('my_framework') ~= 'started' then return end
DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true
function DreamFramework.showHelpNotification(text)
-- Ваш власний код відображення довідки
end
function DreamFramework.getPlayerJobName()
return exports['my_framework']:GetJobName()
end
✅ Приклад: server.lua
if GetResourceState('my_framework') ~= 'started' then return end
DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true
function DreamFramework.getPlayerFromId(source)
return exports['my_framework']:GetPlayer(source)
end
function DreamFramework.getPlayerMoney(source, account)
local player = DreamFramework.getPlayerFromId(source)
return player.money or 0
end
🧠 Які функції потрібно реалізувати?
Ваш міст повинен реалізувати всі функції, включені в шаблон custom
та всі інші мости. Це включає:
- Функції гравця (наприклад,
getPlayerFromId
,getPlayerName
) - Управління роботою
- Інвентар та гроші
- Власність на транспортні засоби
- Події типу
OnPlayerLoaded
,OnPlayerJobChange
- Будь-які інші функції, які має місто...
Перевірте файли
bridge/custom/client.lua
таbridge/custom/server.lua
для повного списку необхідних функцій.
Кожна функція у шаблоні моста повинна бути реалізована у вашому власному мосту.
Якщо навіть одна функція відсутня, ваш фреймворк ймовірно видасть кілька помилок, порушить скрипти, що покладаються на ці функції, та спричинить непередбачувану поведінку.
➡️ Перевірте bridge/myframework/client.lua
та bridge/myframework/server.lua
, щоб переконатися у повному покритті функцій.
Відсутні функції = непрацюючий досвід.
⏰ Обробка Подій
Деякі події потрібно вручну спрацьовувати для сумісності:
RegisterNetEvent('myfw:playerLoaded', function(playerId)
OnPlayerLoaded(playerId)
end)
RegisterNetEvent('myfw:jobChanged', function(playerId, newJob)
OnPlayerJobChange(playerId, newJob.name)
end)
💬 Поради
- Використовуйте журнали типу
print("[Міст] Завантажено власний міст")
для полегшення відлагодження. - Тестуйте кожну функцію окремо в контрольованому середовищі.
- Використовуйте папку
custom
як базу — вона вже заповнена всіма необхідними заглушками.
🙌 Внесіть свій внесок у міст
Створили працюючий міст для свого власного фреймворку?
Не соромтеся поділитися ним з нами — допоможіть іншим скористатися вашою інтеграцією!
🧠 Ваш внесок може стати частиною офіційного проекту, і ви отримаєте повне визнання за свою роботу.
💡 Якщо у вас є питання або потрібна допомога, не соромтеся звертатися до нас на нашому сервері Discord.
Щасливого кодування! 🚀