Deine erste BS19-Ressource
Diese Anleitung baut eine kleine Ressource von null auf: einen /checkin-Befehl, der einem Überlebenden höchstens einmal pro Stunde eine Wasserflasche gibt. Das dauert etwa 15 Minuten. Du brauchst einen laufenden BS19-Server, Zugriff auf seine Dateien und die txAdmin-Konsole sowie einen Texteditor (VS Code eignet sich gut).
Wenn es läuft, zeigt Eine Ressource auf bs_core schreiben die nächsten Schritte: Client-Code, Callbacks und die Fallen, die du vermeiden solltest.
1. Ordner anlegen
Abschnitt betitelt „1. Ordner anlegen“Lege im resources-Ordner deines Servers einen Ordner [local] an (die Klammern sind wichtig, sie machen ihn zu einer Kategorie statt einer Ressource) und darin einen Ordner bs_checkin. Bewahre deine eigenen Ressourcen in [local] auf, dann überschreiben Framework-Updates sie nie.
resources/[local]/bs_checkin/├── fxmanifest.lua├── config.lua└── server.luaDer Ordnername ist der Ressourcenname. Beginne ihn mit bs_, damit er nicht mit einem anderen Skript kollidiert.
2. fxmanifest.lua
Abschnitt betitelt „2. fxmanifest.lua“Jede FiveM-Ressource braucht diese Datei. Sie sagt dem Server, welche Dateien er laden soll und auf welcher Seite.
fx_version 'cerulean'game 'gta5'lua54 'yes'
name 'bs_checkin'description 'My first BS19 resource'
shared_scripts { '@bs_core/shared/sh_bridge.lua', -- gives you BSB (commands, callbacks) 'config.lua',}server_scripts { 'server.lua' }
dependencies { 'bs_core', 'bs_inventory' }Die Zeile @bs_core/shared/sh_bridge.lua lädt die BS19-Bridge in deine Ressource. Ohne sie gibt es BSB nicht und die Server-Datei schlägt fehl.
3. config.lua
Abschnitt betitelt „3. config.lua“Packe jeden Wert, den ein Serverbetreiber ändern wollen könnte, in eine Tabelle, damit niemand deinen Code anfassen muss.
Checkin = { item = 'water_bottle', -- any item name from bs_inventory's item list amount = 1, cooldown = 3600, -- seconds between two check-ins (1 hour)}4. server.lua
Abschnitt betitelt „4. server.lua“local lastCheckin = {} -- [charId] = os.time() of the last check-in
local function notify(src, kind, message) TriggerClientEvent('bs:ui:notify', src, { type = kind, message = message })end
BSB.RegisterCommand('checkin', nil, 'Daily survivor check-in', {}, function(src) if src == 0 then return print('Run /checkin in game, not in the console.') end
local p = exports.bs_core:GetPlayerSummary(src) if not p then return notify(src, 'error', 'Pick a character first.') end
local now = os.time() local last = lastCheckin[p.charId] if last and now - last < Checkin.cooldown then local minutes = math.ceil((Checkin.cooldown - (now - last)) / 60) return notify(src, 'error', ('Come back in %d min.'):format(minutes)) end
local ok, reason = exports.bs_inventory:GiveItem(src, Checkin.item, Checkin.amount) if not ok then return notify(src, 'error', 'No room: ' .. tostring(reason)) end
lastCheckin[p.charId] = now notify(src, 'success', ('Welcome back, %s. Here is some water.'):format(p.firstName))end)Was der Code macht, Zeile für Zeile:
BSB.RegisterCommanderstellt den Chat-Befehl.nilheißt, jeder darf ihn benutzen; setze dort eine ACE wie'bs.admin', um ihn auf das Team zu beschränken.GetPlayerSummarygibtnilzurück, solange der Spieler noch im Charakterbildschirm ist. Prüfe das also zuerst.- Die Abklingzeit wird pro Charakter (
charId) gespeichert, nicht pro Spieler, also bekommt ein zweiter Charakter seinen eigenen Check-in. Sie wird beim Neustart der Ressource zurückgesetzt, was für eine erste Ressource reicht. - Items laufen immer über
exports.bs_inventory:GiveItem. Bei vollem Inventar gibt esfalseund einen Grund zurück. Schreibe nie selbst in die Datenbank.
5. Starten
Abschnitt betitelt „5. Starten“Füge diese Zeile am Ende von server.cfg hinzu, nach den BS19-Ressourcen:
ensure bs_checkinDann in der txAdmin-Live-Konsole (kein Serverneustart nötig):
refreshensure bs_checkinrefresh lässt den Server den neuen Ordner finden. Die Konsole sollte Started resource bs_checkin ausgeben. Wenn du später eine Datei änderst, lädt ensure bs_checkin allein sie neu.
6. Im Spiel testen
Abschnitt betitelt „6. Im Spiel testen“- Verbinde dich mit dem Server und wähle einen Charakter.
- Drücke T, tippe
/checkinund drücke Enter. Du bekommst eine grüne Benachrichtigung und eine Wasserflasche im Inventar (I). - Tippe nochmal
/checkin. Du bekommst eine rote Meldung “Come back in 60 min.”.
Wenn es nicht klappt
Abschnitt betitelt „Wenn es nicht klappt“| Was du siehst | Warum | Lösung |
|---|---|---|
Couldn't find resource bs_checkin | Der Server hat den Ordner nicht gesehen oder der Name weicht ab | refresh ausführen, prüfen, dass der Ordner genau bs_checkin heißt |
attempt to index a nil value (global 'BSB') | Die Bridge-Zeile fehlt | Die Zeile @bs_core/shared/sh_bridge.lua in fxmanifest.lua prüfen |
No such export GetPlayerSummary | bs_core läuft noch nicht | ensure bs_checkin in server.cfg unter den BS19-Ressourcen lassen |
/checkin tut nichts, kein Fehler | Du bist noch im Charakterbildschirm oder der Befehl wurde nie registriert | Charakter wählen, dann in der Konsole nach einer roten [bs_checkin]-Zeile suchen |
| “No room: …” | Dein Inventar ist voll oder zu schwer | Etwas ablegen und erneut versuchen |
Jeder rote Fehler in der Konsole nennt auch Datei und Zeile. Behebe ihn, führe ensure bs_checkin erneut aus und versuche es nochmal.
Ideen für danach
Abschnitt betitelt „Ideen für danach“- Ändere
iteminconfig.luaaufbandageund führeensure bs_checkinaus. Keine Codeänderung nötig. - Gib zusätzlich etwas Bargeld:
exports.bs_core:AddMoney(src, 'cash', 25, 'checkin'). - Gib XP:
exports.bs_core:AddXP(src, 10, 'checkin'). - Sieh dir die verfügbaren Aufrufe in Übersicht über Exports und Events an.
bs19.org · Privacy · Terms · Cookie settings
Cookies and outside content
The site only needs two essential cookies to keep you logged in and protect forms. Videos and streams from YouTube and Twitch load from their servers, which can set their own cookies, so they stay off until you say yes. Nothing is pre-ticked and you can change your mind any time with "Cookie settings" at the bottom of every page. Details.
Questions about the server, the framework or the site? A real person reads this, usually within a day.