Tickleiste bleibt nach Ende des Kampfes bestehen

Issue #120 resolved
Koofaen Chioone created an issue

Wenn der Kampf über die Begegnungsübersicht per “Beenden” beendet wird, bleibt die Tickleiste am oberen Bildschirmrand bestehen, bis man die Seite per F5 neu lädt oder einen neuen Kampf beginnt.

Schritte zum Reproduzieren

  1. Alle Module deaktivieren
  2. Kampf beginnen
  3. Initiative auswürfeln
  4. Kampf über die Schaltfläche beenden
  5. Die Tickleiste bleibt stehen
  6. F5 drücken
  7. Tickleiste ist weg

Comments (16)

  1. Simon Reuter

    Welche Foundry-Version nutzt du? Konnte diesen Effekt bisher nicht rekonstruieren. Welche Module sind sonst noch aktiv?

  2. Koofaen Chioone reporter

    Noch die 9er wegen fehlender Abhängigkeiten zu anderen Modulen. Das passiert auch, wenn alle Module deaktiviert sind.

    Ich teste die Tage noch mal, ob ich mehr rausfinde. Ggf. mit Developer Console.

  3. Simon Reuter

    Ich habe das ganze unter V9 und V10 getestet und konnte den Fehler leider nicht reproduzieren.

  4. Koofaen Chioone reporter

    Ich habe es gerade noch mal getestet mit V9 und der Fehler ist immer noch da. Habe auch FoundryVTT mal komplett durchgestartet und sichergestellt, dass wirklich alle Module aus waren.

    Wenn ich den Kampf beende kommt folgendes in der Console:

    foundry.js:3053 Foundry VTT | Rendering Dialog
    backend.mjs:306 Foundry VTT | Deleted Combat with id [DIXu943yivuQ7y23]
    foundry.js:319 TypeError: Cannot read properties of null (reading 'getVirtualStatusTokens')
    at tick-bar-hud.js:165:44
    at Array.map (<anonymous>)
    at TickBarHud.getData (tick-bar-hud.js:162:60)
    at TickBarHud._render (foundry.js:3062:29)
    at TickBarHud.render (foundry.js:3021:10)
    at CombatEncounters.render (foundry.js:11279:32)
    at CombatEncounters._onDeleteDocuments (foundry.js:11384:42)
    at ClientDatabaseBackend._handleDeleteDocuments (foundry.js:10442:16)
    at ClientDatabaseBackend._deleteDocuments (foundry.js:10345:17)
    at async SplittermondCombat.deleteDocuments (document.mjs:410:21)
    onError @ foundry.js:319
    (anonymous) @ foundry.js:3023
    Promise.catch (async)
    render @ foundry.js:3021
    render @ foundry.js:11279
    _onDeleteDocuments @ foundry.js:11384
    _handleDeleteDocuments @ foundry.js:10442
    _deleteDocuments @ foundry.js:10345
    await in _deleteDocuments (async)
    delete @ backend.mjs:215
    await in delete (async)
    deleteDocuments @ document.mjs:410
    delete @ document.mjs:471
    callback @ foundry.js:44207
    submit @ foundry.js:44151
    _onClickButton @ foundry.js:44114
    dispatch @ jquery.min.js:2
    v.handle @ jquery.min.js:2

    Ich benutze übrigens Chromium.

  5. Simon Reuter

    Ich konnte den Fehler so leider nicht reproduzieren. Hast du vielleicht noch einen zweiten Encounter offen?

  6. Koofaen Chioone reporter

    Nein, ich werde das aber noch mal als minimalsetup nachstellen. Vielleicht finde ich so eine Ursache

  7. Koofaen Chioone reporter

    Wenn ich eine neue Welt erstelle verschwindet die Tickleiste wie gewollt. Also kann ich bestätigen, dass es generell funktioniert. Also ist auch nichts an meinem Foundry oder dem Spielsystem kaputt.

    Allerdings kriege ich den Fehler in meiner normalen Welt selbst mit einem komplett neuerstellen leeren Char. Ich habe aber gesehen, dass man einfach einen neuen Token zu einer neuen Begnung hinzufügen kann, dann verschwindet die Leiste. Das ist für mich ein akzeptabler Work-Around bis ich V10 ausprobiert habe. Anscheinend hat irgendein Modul etwas so nachhaltig bei mir geändert, dass das System damit nicht mehr klarkommt.

    Gibt es vielleicht eine Routine, die ausgeführt wird, wenn man Token einem neuen Kampf hinzufügt, der noch nicht begonnen hat, bezüglich der Tickleiste, welcher am Ende des Kampfes nicht aufgerufen wird?

  8. Koofaen Chioone reporter

    Mit V10 besteht der Fehler nicht mehr. Daher kann das Issue zu. Irgendwann wird ja jeder patchen.

  9. Koofaen Chioone reporter

    Interessanterweise hatte ich direkt einen laufenden Kampf ohne Teilnehmer auf Tick 34, als ich auf V10 geupdatet habe. Ggf. war das das Problem.

  10. Koofaen Chioone reporter

    Ich konnte es durch Zufall noch weiter eingrenzen. Solange mindestens ein Teilnehmer des Kampfes noch einen Initiative-Wert hat, ist die Leiste zu sehen. Ich glaube, dass beim Kampf beenden die Initiative nicht gelöscht wird. Aber ich weiß nicht, wie ich das überprüfen kann.

    Ich kann die Tickleiste jetzt entfernen indem ich eins der folgenden Dinge tue:

    • F5 drücken um die Seite neu zu laden (Das deutet für mich darauf hin, dass die Initiative irgendwo Clientseitig gecacht oder gespeichert wird)
    • Den Knopf für “Initiative zurücksetzen” drücke (Den Knopf gibt es nur solange eine Begegnung da ist, ob jemand drin ist, ob derjenige Intiative hat oder ob der Kampf läuft ist dabei egal. Solang es eine Begegnung gibt, ist der Button da)
    • Allen Teilnehmern, die Initiative haben, mit Rechtsklick die “Initiative löschen”
    • Alle Teilnehmer, die Initiative haben, editieren und das Feld für Initiative leeren

  11. Koofaen Chioone reporter
    • changed status to open

    Ich habe den Fehler gefunden, aber leider nicht die eigentliche Ursache. Dafür reicht mein Javascript dann doch nicht aus :D

    e.actor.getVirtualStatusTokens() kann nicht aufgerufen werden, weil e.actor == null ist. Ich weiß nicht, wieso das bei mir so ist.

    Aber mit dem folgenden Patch funktioniert es so wie es sollte. Ich habe jetzt erst mal nicht festgestellt, dass dadurch etwas anderes kaputt geht. Eine Überprüfung, ob etwas null ist, sollte ja auch nicht das Problem sein, zumal es anscheinend vorkommen kann.

    diff --git a/module/apps/tick-bar-hud.js b/module/apps/tick-bar-hud.js
    index e8139c3..dbda9e8 100644
    --- a/module/apps/tick-bar-hud.js
    +++ b/module/apps/tick-bar-hud.js
    @@ -160,10 +160,15 @@ export default class TickBarHud extends Application {
                 }
    
                 var virtualTokens = combat.combatants.contents.map(e => {
    +                if ( e.actor == null){
    +                    var virtualTokensReturnValue = [];
    +                } else {
    +                    var virtualTokensReturnValue = e.actor.getVirtualStatusTokens() || [];
    +                };
                     return {
                         combatant: e,
    -                    virtualTokens: e.actor.getVirtualStatusTokens() || [],                    
    -                }
    +                    virtualTokens: virtualTokensReturnValue,
    +                };
                 });
    
                 var iniData = combat.turns
    
  12. Log in to comment