ich hoffe das ist das richtige Unterforum für sowas, wenn nicht bitte verschieben.
Mein Problem:
Seit vorgestern habe ich den Effekt das Sektoren, zunächst ein "Profitabler Handel I", etwa eine Stunde später dann "Ketzers Untergang", in der Karte maximal aufgespannt dargestellt wurden. z.B. überdeckt das HQ-Symbol dabei alles andere was im Sektor ist bis man maximal reinzoomt.
Das ist NICHT der Bug mit den Baudronen aus 6.0(?), es gibt keine "Spur" zum Sektorrand. Den (optisch) gleichen Bug gab es auch recht am Anfang von X4 schonmal (Laut Reddit-Threads von vor sechs bis sieben Jahren).
"Ketzers Untergang" hatte sich nach ca. 10h Real-Spielzeit wieder beruhigt, "Profitabler Handel I" allerdings nicht.
Der Bug wurde in der 9.0 Beta schon gemeldet (mindestens zwei mal), was allerdings jeweils ein zäher Prozess war einen Mod dazu zu bringen sich auch nur mal die (eindeutigen) Screenshots anzuschauen.
Sattdessen wurden die obligatorischen "Schiff rausgeflogen" "wenn man zum Sektorrand fliegt ist das normal", usw. "Tips" gebracht, welche in beiden Fällen, an den Screenshots leicht erkennbar, kompletter Unsinn waren.
Da diese Meldungen zumindest bisher nicht viel gebracht haben (der Bug ist ja noch da), ich keine Lust habe in einer Diskussion fünf mal "Schau endlich den Screenshot an" zu antworten (nein, das ist nicht übertrieben), und ganz allgemein zweifle das der Bug überhaupt "geziehlt" gefixt wird (kein Vorwurf - sowas zu finden ist schwer weil kaum zu reproduzieren).
Also habe ich mich selbst drangesetzt und zumindest eine Lösung für meinen Fall gesucht - und die auch gefunden. Wirkt leider nur temporär, ist aber bei Bedarf wiederholbar.
Hier mein Ansatz und vorgehen:
Mein initialer Verdacht war das ein Objekt an einer fehlerhaften Position gespawnt wird.
Zum prüfen habe ich den Save mit 7zip entpackt (Saves liegen bei mir unter Dokumente/Egosoft/X4/save/save_XXX.xml.gz) und kleines Powershell-Script gebastelt um das XML-File nach verdächtigen Positionen zu durchsuchen.
Als "verdächtig" habe ich pi mal Augenmaß 1000000 genommen.
Hier das Script:
Code: Select all
$filename = '.\save_002.xml'
$minVals = @{'x' = 0.0; 'y' = 0.0; 'z' = 0.0 }
$maxVals = @{'x' = 0.0; 'y' = 0.0; 'z' = 0.0 }
'Running...this may take quite a while...'
foreach ($line in select-string -Path $filename -Pattern ' ([x|y|z])="(-*.\d*\.*\d*)"' -All)
{
$hit = $false;
$curVals = @{'x' = 0.0; 'y' = 0.0; 'z' = 0.0 }
foreach($match in $line | Select -Expand Matches)
{
$groups = $match | Select-Object -Expand Groups
$tagName = ($groups | Where Name -eq 1 | Select -Expand Value).ToLower()
[decimal]$tagVal = $groups | Where Name -eq 2 | Select -Expand Value
if ($tagVal -lt $minVals[$tagName]) { $minVals[$tagName] = $tagVal }
if ($tagVal -gt $maxVals[$tagName]) { $maxVals[$tagName] = $tagVal }
$curVals[$tagName] = $tagVal
if ($tagVal -lt -1000000 -or $tagVal -gt 1000000) { $hit = $true; }
}
if ($hit) { "Line: " + $line.Linenumber + " | X: " + $curVals['x'] + " | Y: " + $curVals['y'] + " | Z: "+ $curVals['z'] }
}
'Min/Max values: X: ' + $minVals['x'] + '/' + $maxVals['x'] + '/' + ' | Y: ' + $minVals['y'] + '/' + $maxVals['y'] + '/' + ' | Z: ' + $minVals['z'] + '/' + $maxVals['z']
Anmerkung 2: $filename muss natürlich auf Pfad+Name zum gewünschten Save.gz gesetzt werden, in meinem Fall ist das Save Slots 2 und das Script liegt im gleichen Ordner wie der entpackte Save.
Ergebnis:
Running...this may take quite a while...
Line: 1722467 | X: -744976 | Y: 1300 | Z: 32592488
Line: 2268729 | X: -1024000 | Y: 0 | Z: -1024000
Line: 2268744 | X: -1024000 | Y: 0 | Z: 0
Line: 2268759 | X: -1024000 | Y: 0 | Z: 1024000
Line: 2268774 | X: 0 | Y: 0 | Z: -1024000
Line: 2268789 | X: 0 | Y: 0 | Z: 1024000
Line: 2268804 | X: 1024000 | Y: 0 | Z: -1024000
Line: 2268819 | X: 1024000 | Y: 0 | Z: 0
Line: 2268834 | X: 1024000 | Y: 0 | Z: 1024000
Line: 3140016 | X: -20724994 | Y: 4998.058 | Z: 7382876.5
Line: 3145456 | X: 9397819 | Y: -225.474 | Z: 13007031
Line: 5590177 | X: -25626656 | Y: -113.198 | Z: -8636004
Line: 10683250 | X: 2947496.75 | Y: 1404174.5 | Z: 4482174.5
Min/Max values: X: -25626656/9397819/ | Y: -321608.344/1404174.5/ | Z: -8636004/32592488
Die 1024000-Werte ignorieren wir mal, das sieht absichtlich aus.
Die anderen sind verdächtig.
Ich habe dann im Text-Editor (z.B. Notepad++ - ACHTUNG: Nicht von der .de Website runterladen, da ist ein Fake mit Addware drin) die betreffenden Zeilen gesucht und alle Werte auf 3 Stellen gekürz (also z.B. 2947496.75 => 496.75).
Das xml-File danach wieder mit 7zip gepackt (Hinweis: gzip als Archivformat wählen).
=> Bug-Auswirkungen beseitigt, zumindest bei mir.
Edit: TipEx
Sonstiges:
Was genau da so weit abseits gespawnt wurde kann ich nicht sagen, das Save-Format ist mir zu wirr, und da ich auf die schnelle keinen XML-Viewer auftreiben konnte der mit 70MB XMLs sinnvoll umgehen kann hab ichs auch nicht wirklich versucht das zu verstehen.
Von den wenigen Klartexten die ich im Umkreis um die falschen Positionswerte gefunden habe ausgehend würde ich auf einen Eis-Asteroiden, eine Abbau-Sonde und ein Raumschiff tippen. Beim Asteroiden bin ich bir zu 80% sicher, bei den andern eher 20%.
Da das Ganze Mining-Gedöns ja umgekremplet wurde liegt der Verdacht nahe das ein länger existierender Bug nurch das randomisierte Spanwnen von Objektgruppen wie Asteroiden jetzt häufiger auftritt. Aber das ist geraten (ich tippe als Ursache auf ein nicht initialisiertes float-Member das irgendwo als Offset auf Positionen addiert wird und damit meist 0 aber manchmal eben was extrem großes ist).
Was ich allerdings an der ganzen Sache nicht verstehe:
Dieser Bug, egal in welcher Ausprägung, existiert seit der Release.
WARUM ist bei Egosoft noch niemand auf die Idee gekommen zumindest beim laden eines Spiels einen rudimentären Sanity-Check für Positionen von Objekten durchzuführen?
Damit wären zumindest die Auswirkungen des Bugs vom Tisch.
Hoffe es hilft jemanden,
Fly safe.
PS:
Den fehlerhaften Save hab ich zwar, aber bringt nichts weil ich drei Mods nutze.


