Przejdź do głównej zawartości

🧩 Tworzenie niestandardowego mostu ramowego

Dream Bridge obsługuje ESX, QBCore i QBX od razu. Jeśli korzystasz z innego lub zmodyfikowanego ramowego systemu, możesz zaimplementować swój niestandardowy most w celu zapewnienia kompatybilności.

Ten przewodnik przeprowadzi cię przez tworzenie nowego mostu przy użyciu wbudowanego szablonu custom.

💡 Wskazówka: QBX (Qbox) jest w pełni kompatybilny z mostem QBCore. Nie jest wymagana osobna implementacja.


📁 Struktura mostu

Wszystkie mosty znajdują się w folderze bridge/. Każdy ramowy system (np. esx, qbcore, custom) ma swój własny podfolder z:

  • client.lua
  • server.lua
Struktura mostu

Most automatycznie wykrywa aktywny ramowy system za pomocą GetResourceState.

Ważne: Jeśli zasób twojego ramowego systemu zostanie zmieniony nazwę (np. es_extendedroleplay_framework), automatyczne wykrywanie może zawieść.


🚀 Jak używać niestandardowego mostu

Użyj mostu custom:

  • Korzystasz z samodzielnego lub nieoficjalnego/niewspieranego ramowego systemu
    ➡️ Stwórz nowy most oparty na szablonie custom.
  • Musisz edytować/zmienić coś w istniejącym moście.
    ➡️ Spróbuj najpierw edytować istniejący most. np. Tabela owned_vehicles różni się od domyślnej. W tym przypadku wystarczy edytować funkcje związane z pojazdami w istniejącym moście. Nie trzeba tworzyć nowego ani edytować wszystkiego.
  • Żaden obsługiwany ramowy system nie jest wykrywany domyślnie.
    ➡️ Jeśli zmieniłeś nazwę zasobu ramowego, może nie zostać on automatycznie wykryty (np. es_extended -> roleplay_framework). W takim przypadku musisz dodać GetResourceState do swojego zasobu o zmienionej nazwie w odpowiednim pliku mostu. Niestandardowy most GetResourceState

🛠️ Rozpoczęcie pracy

  1. Skopiuj folder bridge/custom
    Zmień nazwę, aby pasowała do nazwy twojego niestandardowego ramowego systemu (np. bridge/myframework).
  2. Zmodyfikuj zarówno client.lua, jak i server.lua
    Wprowadź swoją logikę w dostarczone szablony funkcji.
  3. Dostosuj logikę wykrywania ramowego systemu
    Zastąp lub rozszerz sprawdzenia GetResourceState, aby wykryć twój niestandardowy ramowy system.

✅ Przykład: client.lua

Przykładowy client.lua
if GetResourceState('my_framework') ~= 'started' then return end

DreamFramework.ServerFramework = 'myframework'
DreamFramework.ServerFrameworkLoaded = true

function DreamFramework.showHelpNotification(text)
-- Twój niestandardowy kod wyświetlania pomocy
end

function DreamFramework.getPlayerJobName()
return exports['my_framework']:GetJobName()
end

✅ Przykład: server.lua

Przykładowy 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

🧠 Jakie funkcje należy zaimplementować?

Twój most musi implementować wszystkie funkcje zawarte w szablonie custom oraz innych mostach. Obejmuje to:

  • Funkcje gracza (np. getPlayerFromId, getPlayerName)
  • Zarządzanie pracą
  • Inwentarz i pieniądze
  • Własność pojazdów
  • Zdarzenia takie jak OnPlayerLoaded, OnPlayerJobChange
  • Jakiekolwiek inne funkcje, które ma most... Sprawdź pliki bridge/custom/client.lua i bridge/custom/server.lua w celu uzyskania pełnej listy wymaganych funkcji.
⚠️ Wymagane funkcje są obowiązkowe

Każda pojedyncza funkcja w szablonie mostu musi być zaimplementowana w twoim niestandardowym moście.
Jeśli brakuje nawet jednej funkcji, twój ramowy system prawdopodobnie wyświetli wiele błędów, przerwie skrypty polegające na tych funkcjach i spowoduje niespodziewane zachowanie.

➡️ Sprawdź podwójnie pliki bridge/myframework/client.lua i bridge/myframework/server.lua, aby upewnić się, że wszystkie funkcje są zaimplementowane.

Brakujące funkcje = złe doświadczenie.


⏰ Obsługa zdarzeń

Niektóre zdarzenia muszą być wyzwalane ręcznie w celu zapewnienia kompatybilności:

RegisterNetEvent('myfw:playerLoaded', function(playerId)
OnPlayerLoaded(playerId)
end)

RegisterNetEvent('myfw:jobChanged', function(playerId, newJob)
OnPlayerJobChange(playerId, newJob.name)
end)

💬 Wskazówki

  • Używaj logów, takich jak print("[Most] Załadowano niestandardowy most"), aby ułatwić debugowanie.
  • Testuj każdą funkcję osobno w kontrolowanym środowisku.
  • Skorzystaj z folderu custom jako bazy — jest już wypełniony wszystkimi wymaganymi szablonami.

🙌 Przekaż swój most

Stworzyłeś działający most dla własnego ramowego systemu?
Nie krępuj się podzielić się nim z nami — pomóż innym skorzystać z twojej integracji!

🧠 Twoja kontrybucja może stać się częścią oficjalnego projektu, a ty otrzymasz pełne uznanie za swoją pracę.
💡 Jeśli masz jakiekolwiek pytania lub potrzebujesz pomocy, śmiało skontaktuj się z nami na naszym serwerze Discord.


Miłego kodowania! 🚀