From 6432550f68a6f3585fd5d6d639e4b772415cc4e1 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Tue, 11 Aug 2026 00:25:39 +0200 Subject: [PATCH] feat(icons): Item-Icons fuer alle sechs Items 128x128 PNG mit transparentem Hintergrund, aus SVG-Quellen per ImageMagick (librsvg) erzeugt und damit reproduzierbar statt handgemalt. - Tauchmaske, quer liegende Pressluft-Kartusche mit Manometer, drei Einzelflaschen und die Doppelflasche fuer XL - Laufzeit als Zahl auf dem Farbband: ohne die waren die Einzelflaschen bei Slot-Groesse nur noch an der Bandfarbe zu unterscheiden, im 56px-Test gar nicht mehr - Kartusche bewusst liegend statt hochkant, damit sie sich von den Flaschen abhebt - die erste Fassung las sich wie eine Flasche mit Download-Pfeil - client.image faellt weg: ox_inventory laedt /.png, und die Dateien heissen genau wie die Items gen-icons.mjs schreibt zusaetzlich ein Kontrollblatt (Schachbrett, Slot-Groesse, klein), mit dem die Icons gegengeprueft wurden. Co-Authored-By: Claude Opus 5 --- .gitignore | 3 + README.md | 41 ++++++-- icons/diving_fill.png | Bin 0 -> 7884 bytes icons/diving_gear.png | Bin 0 -> 6915 bytes icons/diving_tank_large.png | Bin 0 -> 6240 bytes icons/diving_tank_medium.png | Bin 0 -> 5997 bytes icons/diving_tank_small.png | Bin 0 -> 5519 bytes icons/diving_tank_xl.png | Bin 0 -> 6328 bytes icons/gen-icons.mjs | 175 +++++++++++++++++++++++++++++++ icons/src/diving_fill.svg | 24 +++++ icons/src/diving_gear.svg | 24 +++++ icons/src/diving_tank_large.svg | 23 ++++ icons/src/diving_tank_medium.svg | 23 ++++ icons/src/diving_tank_small.svg | 23 ++++ icons/src/diving_tank_xl.svg | 34 ++++++ items_for_ox_inventory.lua | 22 ++-- t1.png | Bin 0 -> 422 bytes t1.svg | 1 + t2.png | Bin 0 -> 422 bytes t2.svg | 2 + 20 files changed, 372 insertions(+), 23 deletions(-) create mode 100644 icons/diving_fill.png create mode 100644 icons/diving_gear.png create mode 100644 icons/diving_tank_large.png create mode 100644 icons/diving_tank_medium.png create mode 100644 icons/diving_tank_small.png create mode 100644 icons/diving_tank_xl.png create mode 100644 icons/gen-icons.mjs create mode 100644 icons/src/diving_fill.svg create mode 100644 icons/src/diving_gear.svg create mode 100644 icons/src/diving_tank_large.svg create mode 100644 icons/src/diving_tank_medium.svg create mode 100644 icons/src/diving_tank_small.svg create mode 100644 icons/src/diving_tank_xl.svg create mode 100644 t1.png create mode 100644 t1.svg create mode 100644 t2.png create mode 100644 t2.svg diff --git a/.gitignore b/.gitignore index 99e8b76..321606f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ # Self-contained NUI-Vorschau, gebaut von .tools/nui-preview.mjs nui/_preview.html + +# Kontrollblatt, gebaut von icons/gen-icons.mjs +icons/_check.html diff --git a/README.md b/README.md index 07ce857..af4eac6 100644 --- a/README.md +++ b/README.md @@ -61,23 +61,28 @@ weich ein und aus. und in `ox_inventory/data/items.lua` innerhalb der `return { … }`-Klammer einfügen. Sechs Items, nichts weiter anzupassen. -3. Icons nach `cdn.d4rkst3r.de/items/` legen: `diving_gear.png`, - `diving_fill.png`, `diving_tank_small.png`, `diving_tank_medium.png`, - `diving_tank_large.png`, `diving_tank_xl.png`. +3. Die sechs PNGs aus [`icons/`](icons) nach `cdn.d4rkst3r.de/items/` hochladen. + Sie heißen genau wie die Items, deshalb braucht es kein `client.image`. Es gibt bewusst **keine** fertige `items.lua` zum Ersetzen — die würde die restlichen Items des Servers überschreiben. ## Items -| Item | Label | Laufzeit | Fülldruck | Gewicht | -|---|---|---|---|---| -| `diving_gear` | Tauchausrüstung | — | — | 5000 | -| `diving_fill` | Pressluft-Kartusche | — | — | 1000 | -| `diving_tank_small` | Tauchflasche (5 Min) | 300 s | 300 bar | 4000 | -| `diving_tank_medium` | Tauchflasche (10 Min) | 600 s | 300 bar | 7000 | -| `diving_tank_large` | Tauchflasche (15 Min) | 900 s | 300 bar | 10000 | -| `diving_tank_xl` | Tauchflasche (20 Min) | 1200 s | 300 bar | 13000 | +| Icon | Item | Label | Laufzeit | Fülldruck | Gewicht | +|---|---|---|---|---|---| +| | `diving_gear` | Tauchausrüstung | — | — | 5000 | +| | `diving_fill` | Pressluft-Kartusche | — | — | 1000 | +| | `diving_tank_small` | Tauchflasche (5 Min) | 300 s | 300 bar | 4000 | +| | `diving_tank_medium` | Tauchflasche (10 Min) | 600 s | 300 bar | 7000 | +| | `diving_tank_large` | Tauchflasche (15 Min) | 900 s | 300 bar | 10000 | +| | `diving_tank_xl` | Tauchflasche (20 Min) | 1200 s | 300 bar | 13000 | + +Die Icons liegen als 128×128 PNG mit transparentem Hintergrund in +[`icons/`](icons), die SVG-Quellen in `icons/src/`. Die Laufzeit steht als Zahl +auf dem Farbband — ohne die sind die Einzelflaschen im Inventar nur noch an der +Bandfarbe auseinanderzuhalten. Wer `capacity` ändert, sollte die Zahlen in +`icons/gen-icons.mjs` mitziehen. Dass alle Flaschen mit demselben Fülldruck starten, ist gewollt: in echt macht das Volumen die Laufzeit, nicht der Druck. Die große Flasche hält 300 bar einfach länger. @@ -197,8 +202,22 @@ solcher Punkte enthält also den Pitch. node ../.tools/lint.mjs # Lua-Lint, CfxLua-tauglich node ../.tools/nui-preview.mjs nui # HUD im Browser anschauen node docs/gen-hud-svg.mjs docs # Renderings für diese README neu bauen + +# Item-Icons neu bauen (SVG -> PNG, braucht ImageMagick mit librsvg) +node icons/gen-icons.mjs +for f in icons/src/*.svg; do + magick -background none "$f" -resize 128x128 "icons/$(basename "$f" .svg).png" +done ``` +`gen-icons.mjs` schreibt außerdem `icons/_check.html` — alle Icons auf +Schachbrett, in Slot-Größe und klein, zum Gegenschauen nach Änderungen. + +> librsvg 2.40 wirft beim Rendern der Zahlen ein +> `Invalid UTF-8 string passed to pango_layout_set_text()`. Das ist harmlos und +> passiert bei jedem ``-Element, auch im minimalsten Testfall — die Zahlen +> kommen korrekt raus. + Der Umbau ist in [PLAN.md](PLAN.md) dokumentiert, inklusive der offenen Punkte. ## Bekannte Unsicherheiten diff --git a/icons/diving_fill.png b/icons/diving_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..d419cdc2d830acd59e1c0cd356a16ca0ab24f9ac GIT binary patch literal 7884 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 literal 0 HcmV?d00001 diff --git a/icons/diving_tank_large.png b/icons/diving_tank_large.png new file mode 100644 index 0000000000000000000000000000000000000000..c013931466f2df2f16c46fa0f1361086a9acdf66 GIT binary patch literal 6240 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 BoLm3^ literal 0 HcmV?d00001 diff --git a/icons/diving_tank_xl.png b/icons/diving_tank_xl.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe3d2e5b896a022d216ae22f9bd1f6b3263a401 GIT binary patch literal 6328 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 d#NO$D(UJI-Element ein +// WARNING: Invalid UTF-8 string passed to pango_layout_set_text() +// Das ist harmlos und tritt auch beim minimalsten Testfall auf - die Zahlen auf +// den Flaschen rendern korrekt. Nachgeprueft, nicht ignoriert. +// +// Erzeugt nebenbei icons/_check.html: alle Icons auf Schachbrett, in Slot-Groesse +// und klein, zum Gegenschauen nach Aenderungen. + +import { writeFileSync, mkdirSync } from 'node:fs'; +import { join, dirname } from 'node:path'; + +const OUT = join(process.argv[2] ?? 'icons', 'src'); +mkdirSync(OUT, { recursive: true }); + +const S = 128; // Canvas, quadratisch + +const C = { + steelLight: '#cbd5e1', + steel: '#94a3b8', + steelDark: '#64748b', + valve: '#334155', + valveDark: '#1e293b', + glass: '#38bdf8', + glassDark: '#0284c7', + rubber: '#1e293b', + outline: '#0f172a' +}; + +/** Farbband pro Groesse, damit die Flaschen im Inventar auf einen Blick unterscheidbar sind. */ +const BANDS = { + small: '#4ade80', + medium: '#38bdf8', + large: '#fbbf24', + xl: '#f472b6' +}; + +const defs = ` + + + + + + + + + + + `; + +const svg = (body) => + ` + ${defs} +${body} + +`; + +/** + * Eine Tauchflasche. cx = Mittelachse, w = Breite, top/bottom = Koerper in y. + * minutes = Laufzeit aufs Band gedruckt. Ohne die Zahl sind die Einzelflaschen + * bei kleiner Darstellung nur noch an der Bandfarbe auseinanderzuhalten. + */ +function tank(cx, w, top, bottom, band, minutes) { + const x = cx - w / 2; + const h = bottom - top; + const valveW = w * 0.4; + const bandY = top + h * 0.34; + const bandH = 22; + + const label = minutes + ? `${minutes}` + : ''; + + return ` + + + + + + ${label} + `; +} + +// --- Flaschen: gleiche Breite, wachsende Hoehe. Die Silhouette traegt die Info, +// --- das Farbband hilft zusaetzlich. +const sizes = { + diving_tank_small: { w: 42, top: 48, bottom: 114, band: BANDS.small, minutes: 5 }, + diving_tank_medium: { w: 46, top: 36, bottom: 116, band: BANDS.medium, minutes: 10 }, + diving_tank_large: { w: 50, top: 26, bottom: 118, band: BANDS.large, minutes: 15 } +}; + +for (const [name, cfg] of Object.entries(sizes)) { + writeFileSync(join(OUT, `${name}.svg`), svg(tank(64, cfg.w, cfg.top, cfg.bottom, cfg.band, cfg.minutes))); +} + +// --- XL = Doppelflasche, passend zum Label. Die Zahl steht auf einem Band +// --- ueber beide Flaschen, sonst muesste sie zweimal auftauchen. +writeFileSync(join(OUT, 'diving_tank_xl.svg'), svg( + ` +${tank(46, 38, 38, 118, BANDS.xl)} +${tank(82, 38, 38, 118, BANDS.xl)} + + 20` +)); + +// --- Tauchmaske +writeFileSync(join(OUT, 'diving_gear.svg'), svg( + ` + + + + + + + ` +)); + +// --- Pressluft-Kartusche: liegende, gedrungene Form mit Manometer. Bewusst quer +// --- statt hochkant, damit sie sich auf einen Blick von den Flaschen abhebt. +writeFileSync(join(OUT, 'diving_fill.svg'), svg( + ` + + + + + + + + + ` +)); + +// --- Kontrollblatt +const NAMES = [ + 'diving_gear', 'diving_fill', + 'diving_tank_small', 'diving_tank_medium', 'diving_tank_large', 'diving_tank_xl' +]; + +const slots = (extra = '') => + NAMES.map((n) => `
${n}
`).join(''); + +writeFileSync(join(dirname(OUT), '_check.html'), ` +

Transparenz

+
${slots()}
+

Inventar-Slot 100px

+
${slots()}
+

Klein 56px

+
${slots()}
+`); + +console.log('SVGs in', OUT, '+ _check.html'); diff --git a/icons/src/diving_fill.svg b/icons/src/diving_fill.svg new file mode 100644 index 0000000..65a592c --- /dev/null +++ b/icons/src/diving_fill.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/src/diving_gear.svg b/icons/src/diving_gear.svg new file mode 100644 index 0000000..8bde5c6 --- /dev/null +++ b/icons/src/diving_gear.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/src/diving_tank_large.svg b/icons/src/diving_tank_large.svg new file mode 100644 index 0000000..a5d6b9f --- /dev/null +++ b/icons/src/diving_tank_large.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + 15 + + diff --git a/icons/src/diving_tank_medium.svg b/icons/src/diving_tank_medium.svg new file mode 100644 index 0000000..cc10565 --- /dev/null +++ b/icons/src/diving_tank_medium.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + 10 + + diff --git a/icons/src/diving_tank_small.svg b/icons/src/diving_tank_small.svg new file mode 100644 index 0000000..2c9b09e --- /dev/null +++ b/icons/src/diving_tank_small.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + 5 + + diff --git a/icons/src/diving_tank_xl.svg b/icons/src/diving_tank_xl.svg new file mode 100644 index 0000000..4ce4562 --- /dev/null +++ b/icons/src/diving_tank_xl.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + diff --git a/items_for_ox_inventory.lua b/items_for_ox_inventory.lua index bcabb84..5e58685 100644 --- a/items_for_ox_inventory.lua +++ b/items_for_ox_inventory.lua @@ -8,6 +8,10 @@ -- Bewusst KEINE fertige items.lua zum Ersetzen: die würde die restlichen Items -- des Servers mitlöschen. -- +-- Kein client.image gesetzt: ox_inventory lädt /.png, und die +-- Icons in icons/ heißen genau wie die Items. Einfach nach cdn.d4rkst3r.de/items/ +-- hochladen, fertig. +-- -- WICHTIG: kein `decay = true` auf den Flaschen. Die durability trägt hier den -- Füllstand, und ox_inventory löscht Items mit decay, sobald durability 0 erreicht -- (modules/items/server.lua) - die leere Flasche würde also verschwinden statt @@ -23,8 +27,7 @@ stack = false, close = true, consume = 0, - description = 'Maske und Tauchanzug. Benutzen zum An- und Ausziehen.', - client = { image = 'diving_gear.png' } + description = 'Maske und Tauchanzug. Benutzen zum An- und Ausziehen.' }, ['diving_fill'] = { @@ -33,8 +36,7 @@ stack = true, close = true, consume = 0, - description = 'Füllt eine Tauchflasche wieder auf.', - client = { image = 'diving_fill.png' } + description = 'Füllt eine Tauchflasche wieder auf.' }, ['diving_tank_small'] = { @@ -43,8 +45,7 @@ stack = false, close = true, consume = 0, - description = 'Kleine Tauchflasche, 300 bar. Reicht für etwa 5 Minuten.', - client = { image = 'diving_tank_small.png' } + description = 'Kleine Tauchflasche, 300 bar. Reicht für etwa 5 Minuten.' }, ['diving_tank_medium'] = { @@ -53,8 +54,7 @@ stack = false, close = true, consume = 0, - description = 'Mittlere Tauchflasche, 300 bar. Reicht für etwa 10 Minuten.', - client = { image = 'diving_tank_medium.png' } + description = 'Mittlere Tauchflasche, 300 bar. Reicht für etwa 10 Minuten.' }, ['diving_tank_large'] = { @@ -63,8 +63,7 @@ stack = false, close = true, consume = 0, - description = 'Große Tauchflasche, 300 bar. Reicht für etwa 15 Minuten.', - client = { image = 'diving_tank_large.png' } + description = 'Große Tauchflasche, 300 bar. Reicht für etwa 15 Minuten.' }, ['diving_tank_xl'] = { @@ -73,6 +72,5 @@ stack = false, close = true, consume = 0, - description = 'Doppelflasche, 300 bar. Reicht für etwa 20 Minuten.', - client = { image = 'diving_tank_xl.png' } + description = 'Doppelflasche, 300 bar. Reicht für etwa 20 Minuten.' }, diff --git a/t1.png b/t1.png new file mode 100644 index 0000000000000000000000000000000000000000..c299927e12768fb220f272689a8e806010a0a997 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU0wmSG7d!(}3dtTpz6=aiY77hwEes65fIQ)w={%6Z zUgGKN%KnOjOH5pQYS8SjK%r7k7sn8f<8Ln?x;to*H<#e36}dkpuNFnHB!^5?i`2?HIVTH+c} zl9E`GYL#4+3Zxi}42;Zl4J>pG4ML2Jtc;AUOpLV+46FgTe~DWM4fdYOKM literal 0 HcmV?d00001 diff --git a/t1.svg b/t1.svg new file mode 100644 index 0000000..1ca9fe7 --- /dev/null +++ b/t1.svg @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/t2.png b/t2.png new file mode 100644 index 0000000000000000000000000000000000000000..c299927e12768fb220f272689a8e806010a0a997 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU0wmSG7d!(}3dtTpz6=aiY77hwEes65fIQ)w={%6Z zUgGKN%KnOjOH5pQYS8SjK%r7k7sn8f<8Ln?x;to*H<#e36}dkpuNFnHB!^5?i`2?HIVTH+c} zl9E`GYL#4+3Zxi}42;Zl4J>pG4ML2Jtc;AUOpLV+46FgTe~DWM4fdYOKM literal 0 HcmV?d00001 diff --git a/t2.svg b/t2.svg new file mode 100644 index 0000000..2c328c5 --- /dev/null +++ b/t2.svg @@ -0,0 +1,2 @@ +5 \ No newline at end of file