LS-Modul: Besitzkarte auf dem Luftbild und Preiskurven
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

Der Feed eines LS-Servers gibt viel mehr her als die Spielerzahl, die der
Monitor bisher davon benutzt hat: in denselben 49 KB stehen 163 Parzellen mit
Besitzer und Hektar, 130 Felder, jedes Fahrzeug samt Ladung und die Position
jedes Spielers. Und das Luftbild liefert der Server auch, in jeder Groesse bis
4096.

Also eine Karte: gekaufte Parzellen nach Hof eingefaerbt, Kreisflaeche gleich
Hektar, Fahrzeuge und Spieler live, dazu eine Hof-Uebersicht mit Flaeche und
Wert. Wechselt Land den Besitzer, kommt eine Meldung — beim allerersten
Durchlauf bewusst nicht, sonst haette der Botstart eine Meldung pro bereits
gekaufter Parzelle abgesetzt.

Dazu die Preiskurven aus der economy.xml: je Fruchtart, was sie in welcher der
zwoelf Perioden bringt, als Balkenzeile mit "jetzt verkaufen" oder "+43 Prozent
im Hochwinter".

Was NICHT geht, und zwar grundsaetzlich: welche Frucht auf welchem Feld steht
und wie weit sie ist. Das liegt in einer binaeren Density-Map, die kein
Endpunkt herausgibt. Ich habe 18 Dateinamen durchprobiert, es gibt genau drei.
Die Mods, die das anzeigen, sind reine HUD-Overlays ohne Ausgang. Und keiner
der fuenf anderen LS-Bots kann es, obwohl einer davon Geld kostet. Das steht
mit allen Belegen in docs/ls-feed.md, damit die Frage nicht dreimal kommt.

Beim Bauen aufgefallen:

- istLsServer() gab den Zugangs-Code zurueck statt true — die &&-Kette liefert
  den letzten wahren Wert. Beim ersten Log-Aufruf haette der Code im Klartext
  im Protokoll gestanden.
- Die Karte als PNG war 2,5 MB, als JPEG 268 KB. Es ist ein Luftbild.
- Nach Preisschwankung sortiert gewinnt Spargel: 26 bis 7540 Euro, und Weizen
  taucht gar nicht mehr auf. Die Liste arbeitet jetzt mit einer Auswahl.
- Die Jahreszeit steht in keinem Endpunkt. Schaetzbar waere sie, aber nur
  solange niemand die Zeitskala aendert — also eine Einstellung.

Geprueft gegen echte Serverdaten: Zerlegen der Statusabfrage inklusive
Vollstaendigkeit aller 163 Parzellen, Ladung ohne Diesel und leere Slots,
Hof-Uebersicht ohne verlorene Parzellen, Preiskurve mit vollem und leerem
Balken an der richtigen Stelle, flache Kurve ohne Division durch Null,
Besitzwechsel inklusive Erstlauf und neu hinzugekommener Parzelle,
Hof-Namen aus der Einstellung, SVG ohne NaN und mit maskierten Namen, und der
Merker in der Datenbank inklusive kaputtem JSON.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 01:52:25 +02:00
co-authored by Claude Opus 5
parent eec170ff41
commit e215cd4c7c
8 changed files with 660 additions and 0 deletions
+1
View File
@@ -17,6 +17,7 @@ Alles, was zu lang für die [README](../README.md) ist.
|---|---|
| [konzept-zwei-seiten.md](konzept-zwei-seiten.md) | Warum Produktseite und Community-Hub getrennt sind, und wie |
| [idee-mermaid.md](idee-mermaid.md) | Diagramme im eigenen Markdown rendern — Umfang, Kosten, offene Frage |
| [ls-feed.md](ls-feed.md) | Was ein LS-Server hergibt und was nicht — Endpunkte, Koordinaten, Fallstricke |
## Textentwürfe
+92
View File
@@ -0,0 +1,92 @@
# Was ein LS-Server über sich verrät
Aufgeschrieben, damit die Frage „können wir nicht auch …" nicht dreimal
gestellt wird. Alles hier ist an einem echten FS25-Server (1.21.0.0) geprüft,
nicht aus der Dokumentation abgeschrieben — die schweigt zu den Einzelheiten.
## Die Endpunkte
Alle brauchen `?code=<Zugangs-Code>`. Der Code steht in der Abfrage-URL, die
der Hoster ausgibt; der Port ist **nicht** immer 8080.
| Endpunkt | Grösse | Inhalt |
|---|---|---|
| `dedicated-server-stats.xml` | ~49 KB | Server, Spieler, Mods, Parzellen, Felder, Fahrzeuge |
| `dedicated-server-stats-map.jpg` | 51 KB 1,5 MB | Luftbild, `size=` 512…4096, `quality=` 1…100 |
| `dedicated-server-savegame.html?file=careerSavegame` | ~20 KB | Einstellungen, Geld, Spielzeit, Modliste |
| `dedicated-server-savegame.html?file=vehicles` | ~39 KB | jedes Fahrzeug mit Preis, `farmId`, Betriebsstunden |
| `dedicated-server-savegame.html?file=economy` | ~305 KB | Preiskurve je Fruchtart über zwölf Perioden |
Andere Dateinamen antworten mit `204` und leerem Rumpf. Geprüft und **nicht**
verfügbar: `farms`, `farmland`, `farmlands`, `fields`, `field`, `items`,
`placeables`, `environment`, `sales`, `players`, `production`, `productions`,
`missions`, `densityMapHeight`, `treePlants`, `growth`, `weeds`, `fillTypes`.
## Was in der Statusabfrage steht
```xml
<Server version="1.21.0.0" mapSize="4096" mapName="…" dayTime="46057948">
<Slots capacity="4" numUsed="3">
<Player isUsed="true" isAdmin="true" uptime="128" x="…" y="…" z="…">Name</Player>
</Slots>
<Mods> <Mod name="…" author="…" version="…">Titel</Mod> <!-- 110x -->
<Farmlands><Farmland id="1" owner="0" area="22.3" price="1340352" x="…" z="…"/>
<Fields> <Field id="1" x="…" z="…" isOwned="false"/>
<Vehicles> <Vehicle name="…" type="…" x="…" z="…" fillTypes="…" fillLevels="…" isAIActive="false"/>
```
`owner` ist die Hof-**Nummer**, nicht der Spielername. Welcher Spieler zu
welchem Hof gehört, steht in keinem Endpunkt — deshalb die Zuordnung im Panel.
## Koordinaten
Weltkoordinaten laufen von `-mapSize/2` bis `+mapSize/2`. Auf das Luftbild
gerechnet: **x nach rechts, z nach unten**, linear über die volle Breite.
Gegen die Ingame-Karte geprüft: 14 von 15 markanten Feldnummern landen in der
richtigen Zone. Der eine Ausreisser ist ein sehr grosses Feld, dessen
Schwerpunkt knapp über einer Zonengrenze liegt.
**Die eingebrannten Beschriftungen H1…H8 im Luftbild taugen nicht zum
Kalibrieren.** Die zeichnet der Map-Ersteller ans Hofgebäude, nicht in den
Schwerpunkt der Parzelle, und die Nummern daneben müssen nicht zur Farmland-ID
passen. Wer daran ausrichtet, landet gut 200 px daneben.
## Was es nicht gibt
**Welche Frucht auf einem Feld steht und wie weit sie ist.** Das liegt in
`densityMap_fruits.gdm`, einer Binärdatei ohne öffentliche Spezifikation, die
nur im kompletten Savegame-ZIP steckt — und das lädt man über die
Admin-Oberfläche, nicht über den Code.
Daran ändert auch kein Mod etwas. [Crop Growth Stage
Info](https://www.farming-simulator.com/mod.php?mod_id=232903) und [Additional
Field Info](https://github.com/yumi-modding/FS25_additionalFieldInfo) berechnen
genau diese Werte, sind aber reine HUD-Overlays: Lua, `modDesc.xml`, ein Icon —
nichts, was eine Datei schreibt oder einen Port öffnet.
Bestätigt durch die Konkurrenz. Keiner dieser Bots zeigt Feldfrüchte, obwohl
einer davon Geld kostet:
- [GamePuls](https://bot.dein-gamepuls.de) — kommerziell, mit Premium-Stufe
- [Farm Sim Game](https://www.farmsimgame.com/) — gehostet
- [IceEagle132](https://github.com/IceEagle132/Farming-Simulator-25-Discord-Bot)
- [DJWoodZ](https://github.com/DJWoodZ/Farming-Simulator-Discord-Bot)
- [cloudmaker97](https://github.com/cloudmaker97/FS25-Discord-Bot)
**Die aktuelle Jahreszeit.** Sie steht in keinem Endpunkt. Aus `playTime` und
`plannedDaysPerPeriod` liesse sie sich schätzen, aber nur solange niemand die
Zeitskala ändert — deshalb ist sie eine Einstellung im Panel und kein
Rateversuch.
## Fallstricke
- **Parzellen haben nur Schwerpunkt und Fläche, keine Umrisse.** Die Karte
zeichnet flächengleiche Kreise. Bei langen schmalen Feldern sieht man das.
- **Die Modliste steht vor den Parzellen.** Wer nur die ersten Zeilen
anschaut, hält den Feed für eine reine Statusabfrage.
- **Spargel sprengt jede Preisliste.** Er schwankt zwischen 26 und 7540 € und
verdrängt nach Schwankungsbreite sortiert jede echte Feldfrucht. Deshalb
arbeitet die Preisliste mit einer Auswahl statt mit einem Ranking.
- **Das Luftbild als PNG ist zehnmal so gross wie nötig** — 2,5 MB statt
250 KB. Es ist ein Foto, also JPEG.