Bleeter gehoert in den IC-Computer: dort sitzt man an einem Geraet, statt mitten auf der Strasse ein Fenster aufzuklappen. Ein Chatbefehl umgeht das und macht die Oberflaeche ueberall verfuegbar. Der Export OpenBleeter bleibt, damit andere Resources sie oeffnen koennen - etwa ein Telefon. Config.Command faellt weg, ohne Befehl hat es keine Bedeutung.
211 lines
6.9 KiB
Markdown
211 lines
6.9 KiB
Markdown
# bleeter — soziales Netz im Spiel
|
||
|
||
Feed, Werbeanzeigen, Marktplatz, Veranstaltungskalender und Gewerbeverzeichnis.
|
||
Jeder Spieler wählt sich ein Handle mit `@`, Unternehmen und Behörden bekommen
|
||
eigene Profile, für die sie Mitarbeiter freigeben.
|
||
|
||
Bedient wird es am **IC-Computer** (`pc-live`) — dort sitzt man an einem Gerät,
|
||
statt mitten auf der Straße ein Fenster aufzuklappen.
|
||
|
||
Die Resource bringt ihre eigene Oberfläche mit, die sich über den Export
|
||
`OpenBleeter` öffnen lässt — etwa aus einem Telefon heraus. Einen Chatbefehl
|
||
gibt es bewusst nicht.
|
||
|
||
---
|
||
|
||
## Installation
|
||
|
||
### 1. Ordner
|
||
|
||
```
|
||
resources/[haleoe]/bleeter/
|
||
```
|
||
|
||
### 2. Datenbank
|
||
|
||
Reihenfolge einhalten:
|
||
|
||
```bash
|
||
mysql -u BENUTZER -p DATENBANK < sql/install.sql
|
||
mysql -u BENUTZER -p DATENBANK < sql/migration_reservierte_handles.sql
|
||
mysql -u BENUTZER -p DATENBANK < sql/migration_fehlende_spalten.sql
|
||
```
|
||
|
||
| Datei | |
|
||
|---|---|
|
||
| `install.sql` | Konten, Profile, Mitglieder, Beiträge, Kommentare, Medien, Markt, Termine |
|
||
| `migration_reservierte_handles.sql` | Sperrliste für Handles – **fehlte im Grundschema**, ohne sie scheitert jede Registrierung |
|
||
| `migration_fehlende_spalten.sql` | sechs Spalten, die der Code schreibt, die aber nicht angelegt wurden |
|
||
|
||
Alle wiederholt ausführbar.
|
||
|
||
### 3. server.cfg
|
||
|
||
```
|
||
ensure oxmysql
|
||
ensure ic-mail # optional, liefert die Mailadressen
|
||
ensure bleeter
|
||
```
|
||
|
||
### 4. Bilder hochladen einrichten — **wird gebraucht**
|
||
|
||
Ohne diesen Schritt lässt sich **kein Bild hochladen**. Beiträge, Profilbilder
|
||
und Marktanzeigen bleiben dann auf verlinkte Adressen angewiesen — und die
|
||
sind unzuverlässig, weil Bilderdienste das Verlinken zeitweise sperren.
|
||
|
||
Bilder gehen zu **imgbb.com**. Der Schlüssel ist kostenlos:
|
||
|
||
1. Konto anlegen auf https://imgbb.com
|
||
2. Schlüssel holen unter https://api.imgbb.com
|
||
3. In die **`server.cfg`** eintragen, **vor** dem `ensure`:
|
||
|
||
```
|
||
set bleeter_imgbb_key "DEIN_SCHLUESSEL"
|
||
|
||
ensure bleeter
|
||
```
|
||
|
||
`set` statt `setr` — so bleibt der Schlüssel auf dem Server und geht nicht an
|
||
die Clients.
|
||
|
||
> **Warum nicht in die `config.lua`?**
|
||
> Die liegt in der Versionsverwaltung. Ein Schlüssel im Code landet damit in
|
||
> jeder Kopie und in der gesamten Historie. `Config.Media.imgbbApiKey` gibt es
|
||
> weiterhin als Rückfallebene — sinnvoll für eine Testumgebung, nicht für den
|
||
> Betrieb.
|
||
|
||
Fehlt der Schlüssel, meldet der Upload `missing_imgbb_key`.
|
||
|
||
Weitere Stellschrauben in `shared/config.lua`:
|
||
|
||
```lua
|
||
Config.Media = {
|
||
provider = 'imgbb',
|
||
maxBytes = 2 * 1024 * 1024, -- 2 MB
|
||
allowedExtensions = { 'jpg', 'jpeg', 'png' },
|
||
allowExternalUrls = true, -- Verlinken zusätzlich erlauben
|
||
requireHttps = true,
|
||
}
|
||
```
|
||
|
||
### 5. App im IC-Computer (optional)
|
||
|
||
Diese Dateien gehören nach `pc-live`:
|
||
|
||
| Datei | Ziel |
|
||
|---|---|
|
||
| `client/bleeter.lua` | `pc-live/client/` |
|
||
| `nui/js/apps/bleeter.js` | `pc-live/nui/js/apps/` |
|
||
| `nui/js/apps/bleeteradmin.js` | `pc-live/nui/js/apps/` |
|
||
| `nui/css/bleeter-embedded.css` | `pc-live/nui/css/` |
|
||
|
||
Dazu in pc-live eintragen: beide Skripte in `fxmanifest.lua` und
|
||
`nui/index.html`, die Stildatei in `fxmanifest.lua` und im `<head>`, die
|
||
App-Einträge in `desktop.js` (`APP_META` und die `case`-Zweige
|
||
`bleeter_data`, `bleeter_notify`, `bleeter_uploaded`) sowie
|
||
`AppRegistry.Register` in `server/apps.lua`.
|
||
|
||
**Zur Stildatei:** `nui/css/bleeter-embedded.css` wird **erzeugt**, nicht von
|
||
Hand gepflegt. Sie ist die gekapselte Fassung von `html/style.css` — jeder
|
||
Selektor auf `.bl-root` begrenzt. Ohne diese Kapselung würden Bleeters Regeln
|
||
für `*`, `html` und `body` den gesamten Computer einfärben. Neu erzeugen:
|
||
|
||
```bash
|
||
python3 pc-live/nui/css/erzeuge-bleeter-css.py
|
||
```
|
||
|
||
Vom Wurzelelement werden dabei nur Farben, Schrift und Variablen übernommen —
|
||
**kein Layout**. Im Original ist `.bleeter-root` ein bildschirmfüllendes
|
||
Overlay; übernähme man das, läge die App über dem ganzen Computer, auch über
|
||
der Titelleiste.
|
||
|
||
---
|
||
|
||
## Die drei Ebenen
|
||
|
||
| | wer | darf |
|
||
|---|---|---|
|
||
| **Anbieter** | am Computer als `admin@liveinvader.ls` angemeldet | Unternehmensprofile einrichten, verwalten, moderieren |
|
||
| **Unternehmen** | wer im Profil `can_manage_members` hat | eigene Leute für das Profil freigeben |
|
||
| **Spieler** | jeder | eigenes Handle mit `@` wählen |
|
||
|
||
Die Anbieterrechte kommen aus der Anmeldung in **`ic-web`** — genau eine Stelle
|
||
für alle Verwaltungsrechte. Ein zweites Rechtesystem daneben wäre eine zweite
|
||
Stelle, an der man jemanden zu entziehen vergisst.
|
||
|
||
Die Tabelle `bleeter_lifeinvader_permissions` bleibt als zweiter Weg bestehen —
|
||
der Notausgang, falls `ic-web` nicht läuft.
|
||
|
||
Bewusst getrennt: Wer für ein Unternehmen **schreiben** darf, kann sich nicht
|
||
selbst zum **Verwalter** machen.
|
||
|
||
### Konsolenbefehle
|
||
|
||
| Befehl | |
|
||
|---|---|
|
||
| `bleeterprofile` | alle Unternehmensprofile auflisten |
|
||
| `bleeterprofil <handle> <art> [server-id]` | Profil anlegen; Arten: `small_business`, `company`, `authority`, `lifeinvader` |
|
||
| `bleeterfrei <handle> <server-id> [post\|edit\|manage\|weg]` | jemanden freigeben oder entfernen |
|
||
|
||
Im Spiel nur als Anbieter, in der Serverkonsole immer.
|
||
|
||
---
|
||
|
||
## Handles
|
||
|
||
Kleinbuchstaben, Ziffern, Punkt, Unterstrich, Bindestrich; 2 bis 32 Zeichen.
|
||
|
||
`bleeter_reserved_handles` verhindert, dass Spieler sich Namen wie `lspd` oder
|
||
`weazel` greifen. **Der Anbieter darf sie sehr wohl vergeben** — dafür ist er
|
||
da. Die Sperrliste gilt deshalb nur bei der Selbstregistrierung, nicht in der
|
||
Verwaltung.
|
||
|
||
---
|
||
|
||
## Voraussetzungen
|
||
|
||
| | |
|
||
|---|---|
|
||
| `oxmysql` | Datenbankzugriff |
|
||
| `ic-mail` | Mailadresse als Ausweis bei der Registrierung |
|
||
| `es_extended` | Charaktername und Identifier |
|
||
| `ic-web` | optional – liefert die Anbieteranmeldung |
|
||
| `pc-live` | optional – für die App im Computer |
|
||
|
||
Läuft ohne Charaktersystem: fehlt eines, wird der Lizenz-Identifier als
|
||
Charakterkennung benutzt.
|
||
|
||
---
|
||
|
||
## Web-Backend
|
||
|
||
Unter `web-backend/` liegt ein Node-Dienst, der dieselben Daten über HTTP
|
||
bereitstellt — für eine Webseite außerhalb des Spiels.
|
||
|
||
```bash
|
||
cd web-backend
|
||
npm install
|
||
cp .env.example .env # ausfüllen
|
||
node server.js
|
||
```
|
||
|
||
Die `.env` enthält Datenbankzugang, JWT-Geheimnis und API-Schlüssel und ist
|
||
deshalb von der Versionsverwaltung ausgenommen.
|
||
|
||
---
|
||
|
||
## Bekannte Fallstricke
|
||
|
||
**Bilder aus fremden Quellen bleiben leer.** Bilderdienste sperren das
|
||
Verlinken zeitweise. Alle `<img>` laden mit `referrerpolicy="no-referrer"`,
|
||
was bei referer-basierten Sperren hilft — gegen eine IP-Sperre nicht. Der
|
||
verlässliche Weg ist der Upload.
|
||
|
||
**Nicht die Adresse der Seite kopieren, sondern die des Bildes.**
|
||
`imgur.com/a/…` ist ein Album, `imgur.com/…` eine Bildseite. Die App rechnet
|
||
Bildseiten selbst um und holt die Adresse auch aus BBCode-, HTML- und
|
||
Markdown-Schnipseln heraus.
|
||
|
||
**Der Fokus gehört dem Computer.** `SetNuiFocus` gilt global für den Client.
|
||
Als App im Computer greift Bleeter deshalb nicht danach — sonst sperren sich
|
||
zwei Resources gegenseitig die Maus aus.
|