Fehler #32806
geschlossenBenutzeroberfläche: Client und Server stimmen oft nicht überein
Beschreibung
Etwas nervig war das schon immer, in den letzten ist dieses Problem aber gefühlt noch schlimmer geworden, weswegen ich jetzt mal ein Ticket dazu erstelle:
Die Anzeige der Bereitschaft von Fähigkeiten im Client stimmt sehr oft nicht mit dem Status des Servers überein. Das führt dazu, dass Fähigkeiten regelmässig nicht einsetzbar sind, obwohl meine Benutzeroberfäche sie als ausführbar anzeigt. "Einsetztbar" bedeutet: Abklingzeit ist abgelaufen und die Entfernung zum Ziel entspricht den Anforderungen.
Wenn man sich beim Auslösen von Fähigkeiten im Kampf durchweg an dem orientiert, was die Benutzeroberfläche mir als Spieler anzeigt, bekommt man ständig die Meldung "Fähigkeit ist noch nicht bereit", obwohl mein UI sie mir bereits wieder als "bereit" anzeigt. Oder "Ihr seid zu weit entfernt", obwohl mein UI mir anzeigt, ich stehe nah genug am Ziel. Das ist jetzt nicht unbedingt dramatisch, man drückt dann eben die Taste ein zweites Mal, oder klickt ein zweites Mal, oder läuft noch kurz etwas auf den Gegner zu. Dennoch bemerkt man ständig: Da passt etwas nicht wirklich zusammen.
Deutlich nerviger ist der Fehler bei den Argentumturnier-Dailys, für die man auf einem Reittier ebenfalls berittene gegnerische Champions besiegen muss: Hier stimmt das, was die Benutzeroberfläche des Clients anzeigt, praktisch durchweg nicht mit dem Status des Servers überein: Sturmangriffe sind nicht nutzbar, obwohl sie als "verügbar" angezeigt werden, weil man doch noch zu weit vom Gegner entfernt ist oder zu dicht dran steht. Andere Attacken sind noch blockiert, weil der Server sagt "aas könnt ihr noch nicht", obwohl mir angezeigt wird, dass ich das sehr wohl schon kann. Bevor man den Abstand dann korrigieren oder noch einen Augenblick bis zur Nutzung des Angriffs warten kann, ist der Gegner dann meist schon auf einen zugestürmt, ist davongeritten o.ä. Das macht diese Reiterkämpfe oft zu einem Glücksspiel und ist sehr lästig.
Ich rede hier von "Zustand des Clients" und "Zustand des Servers", weil ich mir die internen Abläufe beim Versuch, eine Fähigkeit zu nutzen, so vorstelle:
- Der Spieler klickt auf eine Fähigkeit oder drückt die mit dieser Fähigkeit belegte Taste.
- Ist die Fähigkeit selbst in der Benutzeroberfläche des Clients noch nicht wieder bereit, so sagt der bereits "das könnt Ihr noch nicht" oder "Fähigkeit ist noch nicht bereit".
- Zeigt der Client jedoch Bereitschaft an, wird dem Server die Nachricht geschickt "Charakter löst Fähigkeit XYZ aus".
- Der Server meldet dann entweder ein OK zurück, zusammen mit dem Ergebnis (z.B. dem verursachten Schaden). Oder eben ein "Nein, das geht noch nicht, weil diese Fähigkeit bei mir noch nicht wieder bereit ist".
- Der Client zeigt das Ergebis entsprechen der Antwort des Servers an.
Ob das dem tatsächlichem Sachverhalt entspricht, kann ich nicht sagen. Falls das aber richtig ist, fehlt hier entweder eine Synchronisation des Abklingzeiten zwischen Client und Server, indem beispielsweise der Cleint seine Visualisierung eines Cooldowns erst dann startet, wenn der Server die auch bei sich gestartet hat und dem Client mitteilt "Cooldown starten". Damit wäre der Server dem Client immer einen Tick voraus und Abklingzeiten wären auch beim Server abgelaufen, wenn der Client dies anzeigt. Oder die andere Möglichkeit: Die Neuberechnung eines gestarteten Cooldowns läuft beim Server mit so niedriger Priorität (etwa um Rechenzeit beim Server zu sparen), dass der oft noch keinen neuen Timeslot dafür bekommen hat und die Abklingzeit neu bestimmen konnte, wenn der Cooldown auf Client-Seite längst abgeschlossen ist und der Spieler erneut versucht, die Fähigkeit auszulösen.
Ich verwende die unveränderte Original-Oberfläche. Also kein alternatives UI, das für das Problem verantwortlich sein könnte.
Zugehörige Tickets
Von Moertl vor etwa 6 Jahren aktualisiert
Langstrecke schrieb:
- Der Spieler klickt auf eine Fähigkeit oder drückt die mit dieser Fähigkeit belegte Taste.
- Ist die Fähigkeit selbst in der Benutzeroberfläche des Clients noch nicht wieder bereit, so sagt der bereits "das könnt Ihr noch nicht" oder "Fähigkeit ist noch nicht bereit".
- Zeigt der Client jedoch Bereitschaft an, wird dem Server die Nachricht geschickt "Charakter löst Fähigkeit XYZ aus".
- Der Server meldet dann entweder ein OK zurück, zusammen mit dem Ergebnis (z.B. dem verursachten Schaden). Oder eben ein "Nein, das geht noch nicht, weil diese Fähigkeit bei mir noch nicht wieder bereit ist".
- Der Client zeigt das Ergebis entsprechen der Antwort des Servers an.
Ob das dem tatsächlichem Sachverhalt entspricht, kann ich nicht sagen. Falls das aber richtig ist, fehlt hier entweder eine Synchronisation des Abklingzeiten zwischen Client und Server, indem beispielsweise der Cleint seine Visualisierung eines Cooldowns erst dann startet, wenn der Server die auch bei sich gestartet hat und dem Client mitteilt "Cooldown starten". Damit wäre der Server dem Client immer einen Tick voraus und Abklingzeiten wären auch beim Server abgelaufen, wenn der Client dies anzeigt. Oder die andere Möglichkeit: Die Neuberechnung eines gestarteten Cooldowns läuft beim Server mit so niedriger Priorität (etwa um Rechenzeit beim Server zu sparen), dass der oft noch keinen neuen Timeslot dafür bekommen hat und die Abklingzeit neu bestimmen konnte, wenn der Cooldown auf Client-Seite längst abgeschlossen ist und der Spieler erneut versucht, die Fähigkeit auszulösen.Ich verwende die unveränderte Original-Oberfläche. Also kein alternatives UI, das für das Problem verantwortlich sein könnte.
Im Groben sind deine Annahmen richtig. Das würde bedeuten, dass die Update-Zeit, in der der Server neue Map-Daten mit dem Client - austauscht, zu groß ist.
Diese Update-Zeit ist vermutlich von der momentanen Serverlast abhängig.
Es kann aber auch schlichtweg an deiner I-Net-Verbindung liegen. Stichwort Latenz - Laufzeit deiner Daten zum und vom RG-Server.
Von Loading vor etwa 6 Jahren aktualisiert
Moertl schrieb:
Es kann aber auch schlichtweg an deiner I-Net-Verbindung liegen. Stichwort Latenz - Laufzeit deiner Daten zum und vom RG-Server.
Ich bezweifel mal das es an der I-Net-Verbindung hängt, da z.b. sowas ( https://redmine.rising-gods.de/issues/31046 ) auch ziemlich beeinträchtigt wird... Ich habe permanent 20-30ms Latenz, somit sollte ich keine Lags ingame haben, aber (mittlerweile sogar) in 5er inis (random hc z.b.) kann man nun auch nicht mehr Icy Touch durch spammen wie man will... Rune ist up -> Server sagt : nö, ist nicht up, man muss entweder über 5 sekunden warten ODER solange warten, bis z.b. die Frostrune ca. 5 mal "up" ist...
Macht das ICC tanken mit 6x icy touch auch weniger spaß.
Von Moertl vor etwa 6 Jahren aktualisiert
ok....ich stelle mal eine Hypothese auf :
Der aktuelle Patchstand des Client ist nicht ganz fehlerfrei. RG verändert aber den Code des Client nicht und versucht, bestimmte Dinge über den Servercode in den Griff zu bekommen. Das wiederum kann nicht zu 100% gelingen - so sehr man sich auch anstrengt, weil der Client die möglicherweise erforderlich Änderungen nicht zulässt.
Berechnungen innerhalb des Client könnten sich daraufhin vom zeitlichen Ablauf her aus irgendwelchen Gründen verzögern, was dann zu den obigen Phänomenen führt. Das Ganze in den Griff zu bekommen, ist dann eher ein Fischen in dunklen Gewässern und man muss letztendlich mit Unzulänglichkeiten leben und Kompromisse in Kauf nehmen.
Blizzard hat seinerzeit sicherlich auch solche "Fehler" erkannt und durch Patches gelöst. Dies ist aber auf RG nicht in vollem Umfang möglich.
Von Langstrecke vor etwa 6 Jahren aktualisiert
I-Net-Verbindung kann als Ursache kann ausgeschlossen werden: In einem innenstadtnahen Wohngebiet einer deutschen Grossstadt habe ich ebenfalls durchweg Latenzen von 20-30 ms.
Mir kommt es allerdings komisch vor, wenn Client und Server getrennt voneinander jeweils einen eigenen CD für Fähigkeiten verwalten. Wenn der Cooldown im Client des Spielers abgelaufen ist und die Fähigkeit dort ausgelöst wird - wieso kann der Server dann noch sagen "Nö" ? Der Client wacht ja bereits über die CDs und blockiert das Auslösen von Fähigkeiten, wenn diese noch nicht bereit sind. Warum dann der Server selbst noch zusätzliche eine eigene Abklingzeit verwaltet, erschliesst sich mir nicht.
Von Sockentester vor etwa 6 Jahren aktualisiert
- Status wurde von Neu zu Rückmeldung offen geändert
konkrete Beispielfähigkeiten bitte
Von Connex vor etwa 6 Jahren aktualisiert
Warum der Server zusätzlich nochmal alles kontrolliert was der Client machen will?
Ganz einfach, sodass man seinen Client nicht modifizieren kann und ohne Cooldown Spells benutzt, oder RangeCheck oder oder oder
Von Langstrecke vor etwa 6 Jahren aktualisiert
Ahnte ich zwischenzeitlich schon, dass die doppelte Buchführung wahrscheinlich Cheating verhindern soll.
Dann ist das Problem wohl, wer mit seinem Cooldown Timer zuerst startet: Ich vermute, dass ist der Client, nachdem der Spieler eine Fähigkeit ausgelöst hat. Der startet damit seinen CD und sagt dann dem Server "He, Fähigkeit XY wurde benutzt, starte du auch mal Deinen Cooldown". Damit hinkt der Server immer etwas hinterher, und aufgrund der höheren Auslastung des Servers führt das wahrscheinlich dazu, dass die Differenz auch nicht durch die Transferzeit von Nachrichten vom Client zum Server wettgemacht wird. Wenn der Spieler dann eine für ihn als wieder nutzbare Fähigkeit sofort wieder auslösen will, passiert es dann wohl öfter, dass der Server sagt "Geht noch nicht".
Funktionieren würde hier eine andere Sequenz:
- Spieler löst eine Fähigkeit aus
- Client meldet dies dem Server, ohne aber bereits den CD zu starten
- Server gibt sein OK, startet seinen eigenen Cooldown und meldet das OK an den Client zurück
- Erst mit der Bestätigung vom Server startet der Client seinen CD
Damit wäre der Server immer einen Tick voraus und würde durch sein Hinterherkinken keine auf dem Client bereits wieder freien Fähigkeiten blockieren. Aberd er Aufwand für diese Umsetzung wäre wohl unangemessen hoch.
Konkrete Beispiele: Wenn ich als Heiler Dauerfeuer gebe, habe ich ständig, dass ich höre "Fähigkeit ist noch nicht bereit", obwohl mir mein Client den Cooldown als abgelaufen und die Fähigkeit als wieder benutzbar anzeigt.
Ein anderes Beispiel sind sind wie gesagt die Reiterkämpfe beim Argentumturnier. Hier sind die Differenzen zwischen Client und Server schon ziemlich extrem: Fähigkeiten sind fast permanent noch blockiert, wenn der Client den CD als abgelaufen anzeigt, und zwar deutlich öfter und länger als bei normalen Charakter-Kämpfen. Sturmangriff ist bei Bewegungen ebenfalls regelmässig blockiert, weil der Client die Entfernung zum Gegner als ausreichend anzeigt, der Server aber anderer Meinung ist.
Und ein anderer Spieler hat ja bereits oben seine Erfahrungen als Frost-Todesritter dazugeschrieben.
Von sindorei vor etwa 6 Jahren aktualisiert
Einäschern vom Feuermagier
Elementarbehrrschung vom Ele
(Besonders oft beim Spammen der Fähigkeiten)
Von LordMagnum vor fast 6 Jahren aktualisiert
- Kategorie wurde auf Mechanik gesetzt
- Status wurde von Rückmeldung offen zu Neu geändert
- Zielversion wurde auf System gesetzt
Von Jeora vor fast 5 Jahren aktualisiert
- Duplikat von Fehler #26148: Nicht übereinstimmender Zustand von Fähigkeiten auf der Aktionsleiste und systemintern wurde hinzugefügt