Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0003014DrachensgrabKampföffentlich2024-03-13 17:00
Reporteroglbi Bearbeitung durchSolthar  
PrioritätnormalSchweregradkleinerer FehlerReproduzierbarnicht getestet
Status zugewiesenLösungoffen 
Zusammenfassung0003014: Bergwaechter halten sich nicht an die Kampfregeln und toeten ohne Ueberzahl Einheiten in der 4. Reihe (fliehe)
Beschreibung

Der Kampfbericht ist aus dem nr. Der Kampf fand im Tutorial statt.

In einem Berg kam es zu einem Kampf zwischen Bergwaechtern. Mein Wahrnehmer stand auf fliehe und griff nicht an. Alle gegnerischen Nichtbergwaechter fluechteten. Wer immer den Wahrnehmer angriff hatte nicht die Uebermacht um ihn nach vorne zu holen.

TagsKeine Tags zugeordnet.
Angehängte Dateien
Kampf_Berg_nr.log (2,852 Bytes)   
                 In Besbotugir (-1,-2) findet ein Kampf statt.

Der Kampf wurde ausgelöst von einer unbekannten Partei, bugs (541i) und einer
  unbekannten Partei.

Heer 0: Unbekannte Partei
Kämpft gegen: Heer 1 (541i), Heer 2 (541i)
Hilft: Heer 3(xL6a), Heer 4(agb), Heer 5(-?-)
Attacke gegen: Heer 1(541i)
... in der 1. Kampflinie:
  - Bergwächter (ybs0), 1 Waldbergwächter, aggressiv, bewacht die Region.

Heer 1: bugs (541i)
Kämpft gegen: Heer 0 (-?-), Heer 5 (-?-)
Hilft: Heer 2(541i)
... in der 4. Kampflinie:
  * bug (woir), 1 Insekt, flieht, Talente: Wahrnehmung 6, hat: 40 Silber.

Heer 2: bugs (541i)
Kämpft gegen: Heer 0 (-?-), Heer 3 (xL6a), Heer 4 (agb)
Hilft: Heer 1(541i)
Attacke gegen: Heer 3(xL6a), Heer 4(agb)
... in der 1. Kampflinie:
  * Bergwächter (rkd3), 1 Bergwächter, vorne, bewacht die Region.
  * Bergwächter (1Lkr), 1 Bergwächter, vorne, bewacht die Region.
  * Bergwächter (mz8i), 1 Bergwächter, vorne (erschöpft), bewacht die
    Region, hat: 12 Höhlenglimme, 3 Eulenaugen, Speer.

Heer 3: Mondelfen Kebelins (xL6a)
Kämpft gegen: Heer 2 (541i)
Hilft: Heer 0(-?-), Heer 4(agb)
... in der 4. Kampflinie:
  - Seher Mali'rohel (601v), 1 Mondelf, flieht.

Heer 4: Anbeter des Großen Baums (agb)
Kämpft gegen: Heer 2 (541i)
Hilft: Heer 0(-?-), Heer 3(xL6a), Heer 5(-?-)
... in der 4. Kampflinie:
  - Manno Horn (man), 1 Waldmensch, flieht, hat: 11 Steine.

Heer 5: Unbekannte Partei
Kämpft gegen: Heer 1 (541i)
Hilft: Heer 0(-?-), Heer 4(agb)
Attacke gegen: Heer 1(541i)
... in der 1. Kampflinie:
  + Bergwächter (zsrd), 1 Mondbergwächter, aggressiv, bewacht die Region.

Einheiten vor der 1. Runde:
Heer  0(-?-): 1, Heer  1(541i): 0+0+0+1, Heer  2(541i): 3, Heer  3(xL6a):
  0+0+0+1, Heer  4(agb): 0+0+0+1, Heer  5(-?-): 1

Einheiten vor der 2. Runde:
Heer  0(-?-): 1, Heer  2(541i): 3, Heer  3(xL6a): 0+0+0+1, Heer  5(-?-): 1

Einheiten vor der 3. Runde:
Heer  0(-?-): 1, Heer  2(541i): 3, Heer  3(xL6a): 0+0+0+1, Heer  5(-?-): 1

Einheiten vor der 4. Runde:
Heer  0(-?-): 1, Heer  2(541i): 3, Heer  5(-?-): 1

Einheiten vor der 5. Runde:
Heer  0(-?-): 1, Heer  2(541i): 3, Heer  5(-?-): 1

Einheiten vor der 6. Runde:
Heer  0(-?-): 1, Heer  2(541i): 3, Heer  5(-?-): 1
Bergwächter (rkd3) erzielte 1 Treffer und tötete 0 Gegner.
Bergwächter (mz8i) erzielte 1 Treffer und tötete 0 Gegner.
bug (woir) verlor 1 Personen.
Seher Mali'rohel (601v) verlor 0 Personen und 1 flohen.
Manno Horn (man) verlor 0 Personen und 1 flohen.
Heer 0(-?-): 0 Tote, 0 Geflohene, 1 Überlebende.
Heer 1(541i): 1 Tote, 0 Geflohene, 0 Überlebende.
Heer 2(541i): 0 Tote, 0 Geflohene, 3 Überlebende.
Heer 3(xL6a): 0 Tote, 1 Geflohene, 0 Überlebende.
Heer 4(agb): 0 Tote, 1 Geflohene, 0 Überlebende.
Heer 5(-?-): 0 Tote, 0 Geflohene, 1 Überlebende.
Kampf_Berg_nr.log (2,852 Bytes)   
Partei541i
Report31

Notizen / Dateien

Enno

Enno

2024-03-11 09:40

Administrator   ~0010113

Steffen, dieser Bug ist für dich!

Solthar

Solthar

2024-03-12 11:23

Manager   ~0010117

Zuletzt bearbeitet: 2024-03-12 11:24

  <race name="mountainguard" unarmedguard="yes" magres="50" maxaura="1.0" regaura="0.5" weight="10000" capacity="2000" speed="0.0" hp="1000" ac="12" damage="2d40" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="8" cannotmove="yes" nolearn="yes" teach="no" noweapons="yes">
    <ai splitsize="1"/>
    <attack type="4" damage="2d40"/>
  </race>

Also erstmal fehlt da noattack, das ist schon gefixt, aber nicht im Tutorial aktiv. Dann aber:

Bergwächter (zsrd) erzielte 1 Treffer und tötete 1 Gegner.
Heer 2 hilft zwar Heer 1, aber kämpft nicht gegen Heer 5 und Heer 5 kämpft nur gegen Heer 1. Heer 5 hat Heer 1 angegriffen, Heer 2 hat aber 3 und 4 angegriffen. Vermutlich deshalb hat sich Heer 2 nicht vor Heer 1 gestellt, was vielleicht, vielleicht aber auch nicht regelkonform ist.

Man kann irgendwie die Wer-hasst-wen-Matrix aufrufen, wie geht das, @Enno?

Auch noch komisch in meinem Test:

ZEIGE Bergwächter sagt

Bergwächter: Keine Informationen über diese Rasse verfügbar. 1000 Trefferpunkte, Angriff: 6, Verteidigung: 8, Rüstung: 12. 2 Angriffe: ein magischer Angriff, ein unbewaffneter Angriff (2d40).

Wieso ein magischer Angriff? Ist das im Spiel auch so?

Enno

Enno

2024-03-12 12:09

Administrator   ~0010118

Die natürliche Attacke (type=4) sollte als "ein unbewaffneter Angriff" angezeigt werden. Woher das auf den magischen Angriff kommt, kann ich auch nicht sagen.

Die wer-gegen-wen Matrix ist nicht einfach zu lesen. Das ist irgendwie in side.enemies und side.relations gespiechert (siehe set_enemy).

Aber ich glaube auch, Heer 5 und 2 haben kein Verhältnis zueinander, und deshalb kann Heer 5 problemlos auf Heer 1 prügeln. Das ist sicherlich so eine von den Situationen, wo die Effekte unerwartet sind, das ist lange bekannt, dass es die gibt, und ich glaube wir sind mal zu dem Schluss gekommen, dass man da nichts machen kann, finde aber die Details dazu nicht mehr.

Solthar

Solthar

2024-03-12 19:38

Manager   ~0010120

Hab das getestet, es liegt wirklich daran, dass Heer 2 attackiert hat. Wenn es das nicht tut, oder wenn es zusätzlich 0 und 5 attackiert, läuft es wie gewünscht. Das ist blöd, weil Heer 2 hier eigentlich nix falsch gemacht hat, außer nicht alle zu attackieren, und das ist, wenn die getarnt sind, unter Umständen gar nicht möglich.

Das lohnt sich vielleicht doch noch mal zu diskutieren. Solthar versteht die Kampfregeln immer noch nicht

Solthar

Solthar

2024-03-12 23:33

Manager   ~0010122

Okay, ich bin mir sicher ich habe einen Fehler in join_allies gefunden und wahrscheinlich repariert. Ich weiß nur nicht, wie ich das testen soll oder was ich überhaupt testen soll.

Enno

Enno

2024-03-13 10:17

Administrator   ~0010124

Zuletzt bearbeitet: 2024-03-13 10:17

Den Kampf zu testen ist unheimlich schwierig, das stimmt. Fang doch mal damit an, den Fehler zu beschreiben. Was ist denn das erwartete Verhalten?

Enno

Enno

2024-03-13 14:16

Administrator   ~0010125

Wenn ein Verbündeter von mir attackiert wird, der niemand attackiert hat, dann schicke ich auch meine kampfbereiten Truppen, um dem zu helfen. Es würde also helfen, erst einmal ein Szenario zu konstruieren, dass den Kampf simuliert. Wie man darum einen Test konstruiert, ist erstmal zweitrangig, erster Test ist, das in einem Report zu sehen, und im Debugger betrachten zu können.

Leider habe ich gerade echt wenig Zeit. Meine Tutoriums-Partei befindet sich nämlich auch in einem Krieg.

Solthar

Solthar

2024-03-13 17:00

Manager   ~0010126

Situation:

  • 0 attackiert 1
  • 5 attackiert 1
  • 2 attackiert 3 und 4
  • 1 und 2 sind dieselbe Partei, helfen sich also
  • 0, 3, 4 und 5 helfen sich gegenseitig

Ist:

  • 0 und 1 sind Feinde wegen ATTACKIERE;
  • 5 und 1 auch, 2 und 3 auch, 2 und 4 auch.
  • Sonst gibt es keine Feinde!
  • 0,3,4 sind Freunde. 1,2 sind Freunde.

Wenn eine Einheit aus 0 angreift, sucht sie sich Gegner aus allen Feinden. Das ist nur 1. Heer 2 hilft nicht, weil 0 kein gemeinsamer Feind ist. Das kann eher nicht Absicht sein.

Soll: 2 sollte Feind von 0 und 5 werden, weil beide 1 attackieren und 2 und 1 alliiert sind.

Fehlerquelle: https://github.com/eressea/server/blob/e0b3c73047a640175f5e15683aa97f11ab00ec61/src/battle.c#L3650-L3651

In dieser Schleife sucht u (sagen wir u aus Heer 2) einen Verbündeten s (findet s = Heer 1) und dann einen Feind se von s, der nicht mit u alliiert ist (se = Heer 0). Dann nimmt u am Kampf teil. join_battle liefert aber false, weil u schon im Kampf ist. Also bricht die Schleife ab, anstatt weiter unten set_enemy(se, c->side, false); auszuführen.

Das korrigiert gibt neu:

  • 0 und 2 sind Feinde, denn der Verbündete 3 von 0 ist Feind von 2
  • 5 und 2 sind Feinde, denn der Verbündete 3 von 5 ist Feind von 2
  • 2 und 0 sind auch Feinde, denn der Verbündete 1 von 2 ist Feind von 0
  • 2 und 5 sind auch Feinde, denn Verbündeter 1 von 2 ist Feind von 5

Das ist das, was ich in diesem Beispiel will, aber macht das einen anderen Testfall kaputt?

Randbemerkung: Sobald 1 hier irgendwen attackiert, wird ihnen nicht mehr von 2 geholfen, denn Feinde von verbündeten Aggressoren werden nicht meine Feinde. Das soll Verrat verhinden.

Randbemerkung 2: Ich kann den Kampf zwar simulieren, aber aus dem Kampfbericht ist es immer wahnsinnig schwer herauszubekommen, wer wirklich auf wen einschlägt. Die Angaben sind irreführend bis Fehlerhaft. Oben heißt es zum Beispiel "Heer 2 ... Hilft: Heer 1(541i)", was aber nicht wirklich stimmt, das gibt nur die friendly-Matrix wieder, aber die enemy-Matrix muss mindestens mit ausgegeben werden.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2024-03-10 21:15 oglbi Neuer Eintrag
2024-03-10 21:15 oglbi Datei hinzugefügt: Kampf_Berg_nr.log
2024-03-11 09:39 Enno Bearbeitung durch => Solthar
2024-03-11 09:39 Enno Status neu => zugewiesen
2024-03-11 09:40 Enno Notiz hinzugefügt: 0010113
2024-03-12 11:23 Solthar Notiz hinzugefügt: 0010117
2024-03-12 11:24 Solthar Notiz bearbeitet: 0010117
2024-03-12 12:09 Enno Notiz hinzugefügt: 0010118
2024-03-12 19:38 Solthar Notiz hinzugefügt: 0010120
2024-03-12 23:33 Solthar Notiz hinzugefügt: 0010122
2024-03-13 10:17 Enno Notiz hinzugefügt: 0010124
2024-03-13 10:17 Enno Notiz bearbeitet: 0010124
2024-03-13 14:16 Enno Notiz hinzugefügt: 0010125
2024-03-13 16:19 Enno Projekt Eressea => Drachensgrab
2024-03-13 17:00 Solthar Notiz hinzugefügt: 0010126