Projekt

Allgemein

Profil

Aktionen

Fehler #32806

geschlossen

Benutzeroberfläche: Client und Server stimmen oft nicht überein

Von Langstrecke vor mehr als 5 Jahren hinzugefügt. Vor mehr als 4 Jahren aktualisiert.

Status:
Duplikat
Priorität:
Normal
Zugewiesen an:
-
Kategorie:
Mechanik
Zielversion:
Beginn:
23.09.2018
Update Text Deutsch:

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

Duplikat von RG Live WotLK 3.3.5a - Fehler #26148: Nicht übereinstimmender Zustand von Fähigkeiten auf der Aktionsleiste und systeminternNeu26.07.2017Aktionen
Aktionen #1

Von Moertl vor mehr als 5 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.

Aktionen #2

Von Loading vor mehr als 5 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ß.

Aktionen #3

Von Moertl vor mehr als 5 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.

Aktionen #4

Von Langstrecke vor mehr als 5 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.

Aktionen #5

Von Sockentester vor mehr als 5 Jahren aktualisiert

  • Status wurde von Neu zu Rückmeldung offen geändert

konkrete Beispielfähigkeiten bitte

Aktionen #6

Von Connex vor mehr als 5 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

Aktionen #7

Von Langstrecke vor mehr als 5 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.

Aktionen #8

Von sindorei vor mehr als 5 Jahren aktualisiert

Einäschern vom Feuermagier
Elementarbehrrschung vom Ele
(Besonders oft beim Spammen der Fähigkeiten)

Aktionen #9

Von LordMagnum vor mehr als 5 Jahren aktualisiert

  • Kategorie wurde auf Mechanik gesetzt
  • Status wurde von Rückmeldung offen zu Neu geändert
  • Zielversion wurde auf System gesetzt
Aktionen #10

Von Jeora vor mehr als 4 Jahren aktualisiert

  • Duplikat von Fehler #26148: Nicht übereinstimmender Zustand von Fähigkeiten auf der Aktionsleiste und systemintern wurde hinzugefügt
Aktionen #11

Von Jeora vor mehr als 4 Jahren aktualisiert

  • Status wurde von Neu zu Duplikat geändert
Aktionen

Auch abrufbar als: Atom PDF