From 056215d0ae4b802be01d3ade57af9ac046bc5b3d Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Wed, 7 Oct 2026 12:49:19 +0200 Subject: [PATCH] fix: Befehlsausgabe in die F8-Konsole statt nur in die Serverkonsole (#81) /tauchartikel und /tauchstand laufen jetzt ueber Diagnosebefehl: die Ausgabe geht an die F8-Konsole des Aufrufers. Reine Konsolenbefehle sind fuer Admins im Spiel offen (restricted group.admin, Betreiber 07.10.2026). print -> sag in den betroffenen Dateien; ausserhalb eines Diagnosebefehls ist sag ein print. Co-Authored-By: Claude Opus 5.5 (1M context) --- fxmanifest.lua | 1 + server/artikel.lua | 43 +++++++++++++++++++++---------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/fxmanifest.lua b/fxmanifest.lua index 8f89270..f3d5275 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -14,6 +14,7 @@ shared_scripts { } server_scripts { + '@d4rk_lib/server/diagnose_shared.lua', 'server/main.lua', -- /tauchartikel: die Items in d4rk_item anlegen, nur auf Zuruf (28.09.2026). 'server/artikel.lua', diff --git a/server/artikel.lua b/server/artikel.lua index 6915d68..5784d85 100644 --- a/server/artikel.lua +++ b/server/artikel.lua @@ -10,7 +10,8 @@ Geloeschtes zurueck"). Vorhandene Items werden NICHT angefasst - was im Panel gepflegt ist, gewinnt. - NUR AN DER SERVERKONSOLE (restricted, source 0). + SERVERKONSOLE ODER ADMIN IM SPIEL (Diagnosebefehl, restricted group.admin, + seit 07.10.2026 - vorher nur source 0; Ausgabe in die F8-Konsole, #81). Taucherflasche Kleidung (Kleiderladen, d4rk_garment -> item). Traegt die Patrone in der Metadata. Gewicht GESETZT: Geraet @@ -81,7 +82,7 @@ local function kleidungAnlegen() local ok, zeilen = pcall(function() return exports[ITEMS]:adminGarmentList() end) if not ok or type(zeilen) ~= 'table' then - print('^1 Kleidung: adminGarmentList antwortet nicht - UNGUELTIG, nichts angelegt.^7') + sag('^1 Kleidung: adminGarmentList antwortet nicht - UNGUELTIG, nichts angelegt.^7') return end @@ -99,7 +100,7 @@ local function kleidungAnlegen() local name = ('%s %s %s:%d'):format(k.pedset, k.komponente, k.collection, k.drawable) if vorhanden then - print((' Kleidung %-34s vorhanden (Item %s)%s'):format(name, tostring(vorhanden.item), + sag((' Kleidung %-34s vorhanden (Item %s)%s'):format(name, tostring(vorhanden.item), vorhanden.item == k.item and '' or ' ^3- soll ' .. k.item .. ', im Panel pruefen^7')) else local okC, erfolg, grund = pcall(function() @@ -110,27 +111,26 @@ local function kleidungAnlegen() }) end) - print((' Kleidung %-34s %s'):format(name, + sag((' Kleidung %-34s %s'):format(name, (okC and erfolg == true) and '^2angelegt -> ' .. k.item .. '^7' or ('^1FEHLER: %s^7'):format(okC and tostring(grund) or tostring(erfolg)))) end end end -RegisterCommand('tauchartikel', function(source, args) - if source ~= 0 then return end +Diagnosebefehl('tauchartikel', { restricted = 'group.admin' }, function(source, args) local nachziehen = args[1] == 'nachziehen' if GetResourceState(ITEMS) ~= 'started' then - print('^1[d4rk_divegear] tauchartikel: d4rk_items laeuft nicht - nichts angelegt.^7') + sag('^1[d4rk_divegear] tauchartikel: d4rk_items laeuft nicht - nichts angelegt.^7') return end local ok, zeilen = pcall(function() return exports[ITEMS]:adminItemList() end) if not ok or type(zeilen) ~= 'table' then - print('^1[d4rk_divegear] tauchartikel: adminItemList antwortet nicht - UNGUELTIG, nichts angelegt.^7') + sag('^1[d4rk_divegear] tauchartikel: adminItemList antwortet nicht - UNGUELTIG, nichts angelegt.^7') return end @@ -140,11 +140,11 @@ RegisterCommand('tauchartikel', function(source, args) -- GEGENPROBE: eine leere Liste hiesse "d4rk_items kennt kein einziges -- Item" - das ist nie wahr, sondern eine kaputte Antwort. if next(da) == nil then - print('^1[d4rk_divegear] tauchartikel: adminItemList lieferte 0 Items - UNGUELTIG, nichts angelegt.^7') + sag('^1[d4rk_divegear] tauchartikel: adminItemList lieferte 0 Items - UNGUELTIG, nichts angelegt.^7') return end - print(('[d4rk_divegear] tauchartikel: %d Items in d4rk_item bekannt.'):format(#zeilen)) + sag(('[d4rk_divegear] tauchartikel: %d Items in d4rk_item bekannt.'):format(#zeilen)) for _, it in ipairs(liste()) do local sollExport = it.patrone and EXPORT or nil @@ -155,9 +155,9 @@ RegisterCommand('tauchartikel', function(source, args) local passt = tonumber(z.consume) == 0 and istExport == sollExport if passt then - print((' %-20s vorhanden, passt'):format(it.name)) + sag((' %-20s vorhanden, passt'):format(it.name)) elseif not nachziehen then - print((' %-20s ^3vorhanden, consume %s / Export %s - soll 0 / %s: tauchartikel nachziehen^7') + sag((' %-20s ^3vorhanden, consume %s / Export %s - soll 0 / %s: tauchartikel nachziehen^7') :format(it.name, tostring(z.consume), tostring(istExport), tostring(sollExport))) else local w = {} @@ -168,7 +168,7 @@ RegisterCommand('tauchartikel', function(source, args) local okU, erfolg, grund = pcall(function() return exports[ITEMS]:adminItemUpdate(0, z.id, w) end) - print((' %-20s %s'):format(it.name, + sag((' %-20s %s'):format(it.name, (okU and erfolg == true) and '^2nachgezogen (consume 0)^7' or ('^1FEHLER: %s^7'):format(okU and tostring(grund) or tostring(erfolg)))) end @@ -187,16 +187,16 @@ RegisterCommand('tauchartikel', function(source, args) local okC, erfolg, grund = pcall(function() return exports[ITEMS]:adminItemCreate(0, werte) end) - print((' %-20s %s'):format(it.name, + sag((' %-20s %s'):format(it.name, (okC and erfolg == true) and '^2angelegt^7' or ('^1FEHLER: %s^7'):format(okC and tostring(grund) or tostring(erfolg)))) end end kleidungAnlegen() -end, true) +end) --[[ - /tauchstand - WAS LIEGT IN DEN SLOTS? (29.09.2026, nur Serverkonsole) + /tauchstand - WAS LIEGT IN DEN SLOTS? (29.09.2026; seit 07.10.2026 auch Admins im Spiel, F8) Betreiber: "nachdem er durchgelaufen ist sagt er du traegst keine taucherflasche". getWorn (server/main.lua) liest rigSlot und maskSlot - @@ -204,23 +204,22 @@ end, true) Patrone. Ein `clothing` mit der richtigen Kennung heisst: vor dem /tauchartikel-Eintrag gekauft, die Optik stimmt, das Item nicht. ]] -RegisterCommand('tauchstand', function(source, args) - if source ~= 0 then return end +Diagnosebefehl('tauchstand', { restricted = 'group.admin' }, function(source, args) local ziel = tonumber(args[1]) if not ziel or not GetPlayerName(ziel) then - print('[d4rk_divegear] tauchstand - Spieler nicht gefunden.') + sag('[d4rk_divegear] tauchstand - Spieler nicht gefunden.') return end - print(('[d4rk_divegear] tauchstand %d:'):format(ziel)) + sag(('[d4rk_divegear] tauchstand %d:'):format(ziel)) for _, s in ipairs({ { 'Flasche', shared.rigSlot, shared.rigItem }, { 'Maske', shared.maskSlot, shared.maskItem } }) do local slot = exports.d4rk_inventory:GetSlot(ziel, s[2]) local m = slot and slot.metadata or {} - print((' %-8s Slot %d: %s (soll %s) garment %s patrone %s oxygen %s'):format(s[1], s[2], + sag((' %-8s Slot %d: %s (soll %s) garment %s patrone %s oxygen %s'):format(s[1], s[2], slot and slot.name or '', s[3], tostring(m.garment), tostring(m.patrone), tostring(m.oxygen))) end -end, true) +end)