LS-Modul: Besitzkarte auf dem Luftbild und Preiskurven
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:
@@ -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.
|
||||
Reference in New Issue
Block a user