Перейти до основного вмісту

🧩 Створення власного моста для фреймворку

Dream Bridge підтримує ESX, QBCore та QBX з коробки. Якщо ви використовуєте інший або змінений фреймворк, ви можете реалізувати свій власний власний міст для забезпечення сумісності.

У цьому керівництві ви дізнаєтеся, як створити новий міст, використовуючи вбудований шаблон custom.

💡 Примітка: QBX (Qbox) повністю сумісний з мостом QBCore. Окрема реалізація не потрібна.


📁 Структура моста

Усі мости розташовані у папці bridge/. Кожен фреймворк (наприклад, esx, qbcore, custom) має власну підпапку з:

  • client.lua
  • server.lua
Структура моста

Міст автоматично визначає ваш активний фреймворк через GetResourceState.

Важливо: Якщо ваш ресурс фреймворку перейменовано (наприклад, es_extendedroleplay_framework), автоматичне визначення може зазнати невдачі.


🚀 Як використовувати власний міст

Використовуйте міст custom:

  • Ви використовуєте автономний або неофіційний/непідтримуваний фреймворк
    ➡️ Створіть новий міст на основі шаблону custom.
  • Вам потрібно відредагувати/змінити щось у наявному мосту.
    ➡️ Спробуйте спочатку відредагувати наявний міст. Наприклад, ваша таблиця owned_vehicles відрізняється від типової. У цьому випадку вам просто потрібно відредагувати функції, що стосуються транспортних засобів, у наявному мосту. Не потрібно створювати новий або редагувати все.
  • Жоден підтримуваний фреймворк не виявлений за замовчуванням.
    ➡️ Якщо ви перейменували ресурс свого фреймворку, його може не бути виявлено автоматично (наприклад, es_extended -> roleplay_framework). У цьому випадку вам потрібно додати GetResourceState до вашого перейменованого ресурсу у відповідний файл моста. Власний міст GetResourceState

🛠️ Початок роботи

  1. Скопіюйте папку bridge/custom
    Перейменуйте її, щоб відповідала назві вашого власного фреймворку (наприклад, bridge/myframework).
  2. Відредагуйте файли client.lua та server.lua
    Реалізуйте свою логіку у наданих функціях-заглушках.
  3. Налаштуйте логіку визначення фреймворку
    Замініть або розширте перевірки GetResourceState, щоб визначити ваш власний фреймворк.

✅ Приклад: client.lua

Приклад 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

Приклад 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.


Щасливого кодування! 🚀