Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002266EresseaNACH/ROUTEöffentlich2017-03-02 08:12
ReporterSoltharBearbeitung durchEnno 
PrioritäthochAuswirkungkleinerer FehlerReproduzierbarnicht getestet
Status geschlossenLösungerledigt 
Produktversion3.10.3 
Zielversion3.10.4Behoben in Version3.10.4 
Zusammenfassung0002266: FOLGE SCHIFF funktioniert nicht
Beschreibung

Einheit Pirat (tepr) hatte
@FOLGE SCHIFF e97o
gesetzt folgte aber nur zwei Regionen weit statt 8 und blieb dann kommentarlos stehen. Meldungen über Stürme gab es nicht und die Reichweite war definitiv auch größer.

Das betrifft auch noch zwei weitere Schiffe, die dem selben Schiff folgten, aber keinen anderen Schiffen in dieser Runde, die anderen Schiffen folgten. Ich habe aber keine Erklärung, was hier anders gewesen sein könnte.

Partei
SpielE2
Report

Notizen / Dateien

Enno

Enno

2016-12-15 21:40

Administrator   ~0006863

Erster Schritt der Analyse:

Das Ziel ist Partei 1wpy, Einheit 8qcs. Es hat einen langen ROUTE-Befehl, der beginnt mit ROUTE Ost Ost PAUSE, sollte also nur zwei Felder weit gereist sein.

Enno

Enno

2016-12-15 21:43

Administrator   ~0006864

Aus dem Report von 1wpy:

Träger (8qcs) wandert von Vytbêd (27,-2) nach Stahlberg (25,-2).
Die Rechtschaffener Zorn (e97o) segelt von Vytbêd (27,-2) nach Ozean (35,-3).

Rechtschaffener Zorn (e97o), Trireme

  • Steuermann (cbj), Kapitaene (1wpy)

Mir scheint, da wird evtl. die falsche Kapitäns-Einheit für FOLGE gewählt? Warum wird im Code überhaupt einer Einheit gefolgt, und nicht einem Schiff?

Enno

Enno

2016-12-15 22:38

Administrator   ~0006865

Mit Version 3.9.4 noch einmal ausgewertet, landet das Schiff in der selben Region wie das verfolgte:

Die ITR-GR Sunrise (2sk2) segelt von Vytbêd (27,-2) nach Ozean (35,-3).

Das ist also wohl in der Tat mit der neuen Version eingeschleppt worden, wahrscheinlich durch die Änderung an FOLGE:

https://github.com/eressea/server/pull/581

Enno

Enno

2016-12-15 22:40

Administrator   ~0006866

Die Änderung war allerdings so minimal, dass ich mir das gar nicht vorstellen kann. Ich muss mal genau gucken, was da passiert. Die Einheit 8qcs ist glaube ich der richtige Hinweis, die sollte nichts mit dem FOLGE zu tun gehabt haben, warum ist die in meiner Analyse aufgetaucht?

Enno

Enno

2016-12-15 23:00

Administrator   ~0006867

Ich habe keine Ahnung, wie ich auf die Einheit gekommen bin. Bei einem erneuten Versuch, das zu debuggen, komme ich in follow_ship in diese Schleife:

rc = rconnect(rc, dir);
while (rc && moves < speed && (dir = hunted_dir(rc->attribs, id)) != NODIRECTION) {
    const char *loc = LOC(u->faction->locale, directions[dir]);
    bufp = STRLCPY_EX(bufp, " ", &size, "hunt");
    bufp = STRLCPY_EX(bufp, loc, &size, "hunt");
    moves++;
    rc = rconnect(rc, dir);
}

Nachdem zweimal Osten als Richtung für das Schiff bestimmt wurde, ist in der Region 1475719591 (97,199) Schluss, weil keine Durchreise-Spur des verfolgten Schiffes gefunden wird.

Enno

Enno

2016-12-15 23:05

Administrator   ~0006868

Keine Spur? Aber im Report steht in (29,-2):
Die Region wurde durchquert von Rechtschaffener Zorn (e97o).

Es muss also eine Spur geben, sie wird wohl nur nicht gefunden.

Enno

Enno

2016-12-15 23:10

Administrator   ~0006869

Hmm... Der einzige at_shiptrail hier ist für Schiff 2j3i, (Dämonenfrass), und ist wahrscheinlich aus der Vorwoche.

Enno

Enno

2016-12-15 23:19

Administrator   ~0006870

Seltsam: in move_ship wird der Region 1475719591 ein at_shiptrail Attribut gegeben, am Ende der Funktion ist es aber weg (dafür sind at_travelunit dort)?

Das ist gemein, weil Attribute schwer zu verfolgen sind.

Enno

Enno

2016-12-15 23:27

Administrator   ~0006871

Ich hab's! Der Fehler liegt in leave_trail, wenn bereits ein at_shiptrail in der Region ist, für ein anderes Schiff (in diesem Fall die Dämonenfrass), dann ist in Zeile 598 die Bedingung (a == NULL) false, und es wird für das neue Schiff kein zweiter Trail angelegt, glaube ich.

Enno

Enno

2016-12-15 23:36

Administrator   ~0006872

Nach einer Neuauswertung mit Reparatur sind jetzt drei Schiffe in der Zielregion, scheint also zu stimmen.

Der Fehler hat sich hier eingeschlichen:
https://github.com/eressea/server/commit/194f96c5

Der Code hat offenbar keine Tests für diesen Spezialfall. Nachliefern!

Enno

Enno

2016-12-16 17:21

Administrator   ~0006873

PR: https://github.com/eressea/server/pull/617

Genaue Ursache: Wenn die Region von einem Leuchtturm erblickt wird, und bereits ein anderes Schiff durchgesegelt ist (evtl. so wie hier in der Vorwoche), dann wurde die "hat die Region durchquert" Information für andere Schiffe nicht angelegt. Verfolger bleiben dann stehen, sobald sie die Fährte verlieren.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2016-12-11 16:46 Solthar Neuer Eintrag
2016-12-13 12:55 Enno Bearbeitung durch => Enno
2016-12-13 12:55 Enno Status neu => zugewiesen
2016-12-15 21:40 Enno Notiz hinzugefügt: 0006863
2016-12-15 21:43 Enno Notiz hinzugefügt: 0006864
2016-12-15 22:38 Enno Notiz hinzugefügt: 0006865
2016-12-15 22:40 Enno Notiz hinzugefügt: 0006866
2016-12-15 22:42 Enno Priorität normal => hoch
2016-12-15 22:42 Enno Zielversion => 3.10.4
2016-12-15 22:42 Enno Partei 1wpy =>
2016-12-15 22:42 Enno Report 1004 =>
2016-12-15 23:00 Enno Notiz hinzugefügt: 0006867
2016-12-15 23:05 Enno Notiz hinzugefügt: 0006868
2016-12-15 23:10 Enno Notiz hinzugefügt: 0006869
2016-12-15 23:19 Enno Notiz hinzugefügt: 0006870
2016-12-15 23:27 Enno Notiz hinzugefügt: 0006871
2016-12-15 23:36 Enno Notiz hinzugefügt: 0006872
2016-12-16 17:21 Enno Notiz hinzugefügt: 0006873
2016-12-16 17:32 Enno Status zugewiesen => erledigt
2016-12-16 17:32 Enno Lösung offen => erledigt
2016-12-16 17:32 Enno Behoben in Version => 3.10.4
2017-03-02 08:12 Enno Status erledigt => geschlossen