Reihenfolge auf dem gleichen Feld der Tickleiste ist nicht eindeutig

Issue #99 resolved
Koofaen Chioone created an issue

Es kommt manchmal vor, dass Tokens, die auf dem gleichen Tick stehen die Reihenfolge tauschen. Das passiert sogar clientseitig, dass meine Spieler einen anderen Token oben sehen als ich. Ich bin auch der Meinung, dass die Reihenfolge sich auch während des Kampfes bei mir schon mal geändert hat. Das macht taktische Kämpfe natürlich etwas schwieriger, wenn die Spieler nicht wissen, ob sie vor oder nach einem NPC handeln dürfen.

Comments (13)

  1. Simon Reuter

    Dies ist mir bisher nicht aufgefallen. Ich bräuchte eine Anleitung um den Fehler reproduzieren zu können.

  2. Koofaen Chioone reporter

    Ich habe leider noch keinen Weg gefunden um den Fehler zu repdroduzieren, aber ab und zu passiert es noch. Ich behelfe mich jetzt mit einem Addon, welches den Aktiven Akteur mit einem Symbol auf der Karte markiert. Damit ist der aktuelle Akteur wenigstens synchron zwischen allen Clients.

    Wie wird das denn intern eigentlich gehandhabt? Wird für jedes Tickfeld noch mal ein weiteres Feld gepflegt in dem die Akteure sich einreihen?

    Ich muss auch noch ergänzen, dass ich selbst den Fehler noch nicht nachvollziehen konnte, ich verlasse mich nur auf die Aussage meiner Spieler, dass bei Ihnen jemand anderes dran gewesen wäre.

  3. Koofaen Chioone reporter

    Ich habe gesehen, dass es eine Änderung hierzu in der aktuellen Version 0.9.1 gab. Ob die das Problem behoben hat, kann ich nicht sagen, es ist mir aber auch nicht explizit aufgefallen.

    Allerdings funktioniert es jetzt mit Monk’s Little Details nicht mehr korrekt. Das Modul habe ich als Workaround verwendet, da es den aktiven Kämpfer für alle mit einer animierten Hervorhebung markiert und auch ein Banner einblendet, wenn der Spieler jetzt oder als nächstes dran ist. Das hat mit der vorherigen Art, wie die Tokens auf der Tickleiste markiert werden wunderbar funktioniert.

    Ich meine gesehen zu haben, dass die Token vorher mit 3 Nachkommastellen sortiert wurden, wer auf welcher Position auf dem aktuellen Tick stehen. Das scheint Monk’s Little Details gemerkt zu haben, dass Tick 1,001 und 1,002 nicht das gleiche sind. Aktuell sieht es so aus, als ob jetzt beide auf Tick 1 stehen, aber es ein zweites Feld gibt, welches die Reihenfolge innerhalb des Ticks angibt. Dieses berücksichtigt Monk’s Little Details nicht und kommt daher komplett durcheinander.

    Es wird zwar korrekt der erste auf dem Feld als aktiver Token markiert, aber der zweite auf dem Feld nicht, wenn er dran ist. Erst, wenn der dritte (sofern es einen gibt) auf dem gleichen Feld dran ist, wird der zweite gleichzeitig mit dem ersten als Aktiv markiert. Allerdings der dritte nicht, welcher dran sein sollte. Das ganz löst sich erst wieder auf, wenn der nächste Tick dran ist. Dann geht da Spiel wieder von vorne los.

    Monk’s Little Details kann noch wesentlich mehr als das, aber in erster Linie nutze ich es für die Kampfmarkierung und ich finde, dass dies einen erheblichen Mehrwert bietet, weswegen ich es sehr schade finden würde, wenn es nicht mehr unterstützt wird. Ggf. kann man ja mit beiden Lösungen arbeiten, also mit den Nachkommastellen und dem zusätzlichen Feld, damit das Modul nicht kaputt geht, aber die neue Methode die Token eindeutig zu sortieren trotzdem genutzt wird.

    Daher möchte ich dich bitten, dass du es ermöglichst, dass die Kampfhervorhebung von Monk’s Little Details wieder funktioniert.

    Brauchst du eine genauere Anleitung um das Problem zu repdroduzieren?

  4. Simon Reuter

    Auch in 0.9.1 wird eine Fließkommazahl als Initiativewert (Ticknummer) verwendet. Da hat sich nichts verändert. Warum Monks Little Details nicht den korrekten Spieler anzeigt weiß ich nicht. Foundry selbst zeigt in der UI den korrekten “aktuellen Spieler” an. Ich werde da mal reinschauen, kann aber nicht versprechen zu jedem Modul kompatibel zu bleiben.

  5. Koofaen Chioone reporter

    Mir ist aufgefallen, dass die Nachkommastellen nicht aktualisiert werden, wenn ein Token das aktuelle Tickfeld verlässt:

    Liegt es vielleicht daran? Kann man das problemlos jedes mal aktualisieren, wenn sich etwas auf dem aktuellen Tick ändert?

  6. Simon Reuter

    Da hat sich zu 0.8.x nichts verändert. Wenn ich die Nachkommastellen aktualisieren würde erzeuge ich recht viele Datenbankänderungen ohne Not. Deswegen würde ich das ungern tun.

  7. Koofaen Chioone reporter

    Ich habe ein bisschen rumgeschaut und die Stelle vom Code gefunden, die den Fehler auslöst. Ich kann nur leider nicht abschätzen, wozu genau sie benötigt wird.

    Es geht um die module/combat/combat.js

    In Zeile 157 ganz am Ende ist der folgende Block:

        _onUpdateEmbeddedDocuments(embeddedName, documents, result, options, userId) {
            //super._onUpdateEmbeddedDocuments(embeddedName, documents, result, options, userId);
            this.setupTurns();
            // Render the collection
             if ( this.isActive && (options.render !== false) ) this.collection.render();
        }
    

    Durch ihn wird der nächste Akteur nicht von Monk’s Little Details markiert.

    Welche Funktion erfüllt dieser Block und ist das ggf. ein Fehler den Monk beheben müsste? Dann würde ich mich an ihn wenden. Ohne den Block scheint es aber noch problemlos zu funktionieren. Er ist auch komplett neu in 0.9.1 hinzugekommen.

  8. Simon Reuter

    Dieser Block überschreibt die Default-Implementierung wenn ein Combatant aktualisiert wird (Änderung des Initiative-Werts). In der Default-Implementierung wird dafür gesorgt, dass nach Änderung des Initiativwerts der gleiche Spieler wie vor der Änderung der aktuelle Spieler ist. Das ist bei Splittermond aber nicht gewünscht. Es ist immer der Spieler an der Reihe, der den niedrigsten Initiativwert hat. Ich veröffentliche gleich noch eine Version an der ich noch etwas Bugfixing im Bereich “Combat” betrieben habe. Die Werte “round” und “turn” sind dann konstant 0 und die Spielerreihenfolge wird nur durch die Sortierung des “turns”-Array festgelegt.

  9. Koofaen Chioone reporter

    In der Default-Implementierung wird dafür gesorgt, dass nach Änderung des Initiativwerts der gleiche Spieler wie vor der Änderung der aktuelle Spieler ist.

    Das kann ich so nicht nachvollziehen. ich habe den Block bei mir mal komplett rausgelöscht und es funktioniert bei mir genau, wie ich es erwarte, wenn ich die Token auf der Tickleiste verschiebe. Selbst wenn ich den aktuellen Token nehme und erneut auf das aktuelle Tickfeld ziehe, wird er als letzter auf dem aktuellen Tick einsortiert und jemand anderes ist dran.

    Die neueste Änderung lässt Monk’s Little Details auch komplett kaputt gehen. Es werden einfach alle Token markiert und die Markierungen verschwinden nie.
    Zusätzlich verschwindet jetzt auch die komplette Tickleiste, wenn man einen neuen Token dem Kampf hinzufügt, wenn er noch keine Initiative hat.

    Immerhin die negativen Initiativewerte funktionieren jetzt korrekt, aber das haben sie bei 0.8.5 ja auch schon. Ich sehe leider gar keine Verbesserung ggü. 0.8.5 sondern nur, was alles nicht mehr funktioniert. Ich möchte nicht undankbar erscheinen, ich weiß zu schätzen, was du hier in deiner Freizeit tust, aber es ist auch frustrierend, dass funktionierende Setups ohne ersichtlichen Grund auf einmal nicht mehr gehen und ich die Wahl habe auf die anderen Bugfixe (wie https://bitbucket.org/rpgframework-cloud/splittermond-fvtt/issues/119/npc-charakterbogen) und Features zu verzichten, mein Setup zu beschneiden oder jede neue Version selbst in Teilen wieder zurückzupatchen.

    Gerade benutze ich 0.9.2 mit zwei eigenen Änderungen und werde die Version wohl jetzt locken. Das heißt keine negative Initiative und kaputte NCP-Sheets. Aber das ist mir lieber als dass die Tickleiste und die Kampfmarkierungen nicht richtig funktionieren. Das ist leider keine Dauerlösung, da ich ja auch in Zukunft neue Funktionen nutzen möchte.

  10. Simon Reuter

    Das kann ich so nicht nachvollziehen. ich habe den Block bei mir mal komplett rausgelöscht und es funktioniert bei mir genau, wie ich es erwarte, wenn ich die Token auf der Tickleiste verschiebe. Selbst wenn ich den aktuellen Token nehme und erneut auf das aktuelle Tickfeld ziehe, wird er als letzter auf dem aktuellen Tick einsortiert und jemand anderes ist dran.

    Ich weiß nicht, warum du das nicht so nachvollziehen kannst. Genau das was ich beschrieben habe, macht dieser Code und ist Standardverhalten von Foundry. Es kann sein, dass das andere Modul dieses Verhalten überschreibt und du es deswegen nicht so siehst, aber ich baue dieses System nicht für dieses Modul. Der CombatTracker wurde in V10 leider strukturell verändert, sodass der SplittermondCombatTracker aus V9 so nicht mehr richtig funktioniert (Vorher konnte ich einfach einen Getter in Combat überschreiben um die aktuelle Kampfrunde auf den aktuellen Tick zu setzen.).

    …aber es ist auch frustrierend, dass funktionierende Setups ohne ersichtlichen Grund auf einmal nicht mehr gehen

    Der Grund ist einfach: V10 hat sehr viel verändert. Und das Splittermond-System macht gerade im Kampf vieles anders, als andere Systeme. Foundry macht aktuell fast jedes Jahr strukturelle API-Änderungen (letzte war von 0.7.x->0.8.x). Mit diesen Änderungen muss man Leben und man kann nicht erwarten, dass eine Modulkompatibilität bestehen bleibt. Ich schätze in einem Jahr wird es einen ähnlichen “Bruch” geben. Vielleicht schaue ich mir einzelne Module mal an und stelle Kompatibilität her, aber deinen fix kann ich so leider nicht umsetzen, da ansonsten andere Fehler entstehen. (Änderst du den Tickwert eines Spielers im Kampf, wird dieser zwar entsprechend auf der Leiste vorgesetzt, in der CombatTracker-UI wird dieser Spieler jedoch als aktueller Spieler hervorgehoben und nicht der Spieler mit geringerem Tickwert). Aktuell ist der Kampf IMMER in Round 0, Turn 0 (Also Runde 0 und erster Spieler der Spielerliste des Kampfs) und nur die Reihenfolge der Spieler wird angepasst.

  11. Simon Reuter

    Ich habe mir das Modul jetzt mal angeschaut und werde in der nächsten Woche ein paar Änderungen vornehmen, damit eine teilkompatibilität vorhanden ist. Die Markierungen sollten funktionieren. Die Spielerbenachrichtigungen (Dass sich der nächste Spieler bereit machen soll), werden wahrscheinlich nicht funktionieren, da Monks Modul gewisse Updates nur durchführt, wenn sich Eigenschaften der Combat-Klasse ändern, die bei Splittermond Konstant sind (Turn ist z.B. immer 0, da immer der erste Spieler der Turn-Liste am Zug ist).

    Jedoch wird sich das Verhalten des Kampfes etwas verändern. Nach dem Initiativewurf muss der Kampf mit “Begin Combat” (Button unten im Combat-Tracker) gestartet werden. Nur so kann ich feststellen, ob ein Spieler dem Kampf nachträglich hinzugefügt wurde oder die Initiative vor dem Beginn des Kampfes gewürfelt wurde. Die Tickleiste wird dann auch nur bei begonnenem Kampf angezeigt. Ich werde später die Tickleiste noch erweitern, sodass die Initiative auch von der Tickleiste gewürfelt werden kann und der Kampf auch hier begonnen werden kann. Dann brauch man den Combat-Tracker nicht als zusätzliches UI-Element.

  12. Log in to comment