Fehler #36910
offenKampfbug wenn Spells nach Kampfende und Reset noch Schaden verursachen
Beschreibung
Da der Server nach Einführung des neuen Commands ".debug combag" um Beispiele für Kampfbugs bittet - hier ist eins:
Vorbeiflug an einem der Urzeitlichen Drachen im Wilden Dickicht des Sholazarbeckens (https://de.wowhead.com/npc=28378/urzeitlicher-drache). Der Drache greift den Charakter an, der fliegt jedoch weiter, bis er ausser Reichweite ist. Der Kampfmodus wird nicht mehr abgebrochen (siehe Screenshot).
Vermutung zur Ursache: Unmittelbar bevor der Charakter ausser Reichweite war, feuerte der Drache seinen Flammenatem auf die Spielfigur ab. Hierbei handelt es sich um eine Distanzattacke ähnlich dem Feuerball eines Magiers: Der Flammenatem verfolgt den Spieler, bis er ihn trifft. Der Kampf war in diesem Moment zwar eigentlich schon beendet (Charakter ausser Reichweite), der Feuer-Angriff des Drachens jedoch immer noch unterwegs. Erst beim Aufprall der Flammen auf den Spieler endet der Kampf tatsächlich, obwohl dieser eigentlich schon nicht mehr aktiv ist -> Inkonsistenter Zustand.
Dateien
Zugehörige Tickets
Von Langstrecke vor etwa 5 Jahren aktualisiert
Nachdem ich mir den Fall nochmal etwas durch den Kopf gehen lassen hab, handelt es sich hier mit hoher Wahrscheinlichkeit um einen Synchronisationsfehler im Kampfsystem:
- Der Spieler ignoriert den Gegner und bewegt sich mit hoher Geschwindigkeit von ihm weg
- Wenn er sich weit genug vom Gegner entfernt hat, wird der Kampf beendet
- Vermutlich wird dazu eine COMBAT_END Nachricht o.ä. an den Charakter geschickt
- In diesem Fall war hier jedoch noch weiterhin ein Distanzangriff des Gegners aktiv (Flammenatem verfolgt den fliehenden Spieler und hat ihn noch nicht erreicht), als der Spieler ausser Reichweite kommt und der Kampf vom System für beendet erklärt wird
- Die noch nicht abgeschlossene Attacke auf den Charakter blockiert das Kampfende
- Die COMBAT_END Nachricht wird damit gelöscht, ohne umgesetzt worden zu sein
- Nachdem der Flammenatem des Drachens die Spielfigur erreicht hat, dort eingeschlagen ist und Schaden verursacht hat, ist auch der letzte Angriff beendet und kein weiterer mehr aktiv
- Damit könnte der Kampf nun tatsächlich beendet werden, wird es aber nicht mehr: Die bereits verschickte COMBAT_END Nachricht wurde bereits bearbeitet, ohne ausgeführt zu werden, und dann gelöscht. Eine neuerliche Nachricht zum Beenden des Kampfes wird nicht verschickt, weil das System meint, den Kampf bereits beendet zu haben
Der Fehler liegt also darin, dass eine COMBAT_END Nachricht unbearbeitet verworfen wird. Zur Lösung bieten sich 2 unterschiedliche Ansätze an:
1) Eine COMBAT_END Nachricht muss vom Charakter als ausgeführt bestätigt werden, sobald die Spielfigur tatsächlich aus dem Kampf genommen wird.
Solange dies nicht geschieht, darf das System einen Kampf nicht als erledigt ansehen, sondern muss ihn später erneut versuchen zu beenden.
Hier wird eine COMBAT_END Nachricht verschickt, ohne dass sich das Kampfsystem dafür interessiert, ob sie auch tatsächlich umgesetzt wird. Für das System ist der Kampf damit beendet (Nachricht wurde ja verschickt), während für den Charakter der Kampf weiterhin aktiv ist (das Beenden des Kampfes wurde wegen noch aktiver Attacke des Gegners abgelehnt).
2) Wird eine COMBAT_END Nachricht nur ein einziges Mal verschickt, muss Charakter-seitig darauf geachtet werden, dass sie nicht unbearbeitet verworfen wird und damit verloren geht. Das lässt sich beispielsweise durch eine Semaphore erreichen, die durch noch laufende Attacken gesetzt und nach Abschluss eines Angriffs wieder gelöscht wird.
Jede gestartete und noch nicht abgeschlossene Attacke auf die Spielfigur setzt die Semaphore, sie wird erst nach einem vollständig abgeschlossenen Angriff wieder zurückgesetzt.
Jedes Bearbeiten einer COMBAT_END Nachricht prüft zunächst diese Semaphore. Ist sie gesetzt, wird die weitere Bearbeitung blockiert und die Nachricht damit gequeued. Erst nach dem Zurücksetzen der Semaphore erfolgt die abschliessende Bearbeitung der Nachricht. So wird verhindert, dass sie unbearbeitet verloren geht.
Von OCrisis vor etwa 5 Jahren aktualisiert
Betrifft sporadisch alle fliegenden Drachen.
Das optische Auftreffen eines Zaubers ist nur eine Darstellung des Clients und hat keinerlei Bezug zum Kampfstatus. Daher konnte ich nicht bestätigen, dass der Kampfstatus nach Zeit X automatisch wieder endet. Der Kampfstatus änderte sich erst durch Distanz, unabhängig anderer Kriterien.
Der Bug scheint in Verbindung mit dem Zauber "Geburtsflammen" (https://db.rising-gods.de/?spell=52791) zu stehen.
Von Jeora vor etwa 5 Jahren aktualisiert
- Tags wurde auf Combat, Creature gesetzt
- Status wurde von Neu zu Bestätigt geändert
- Priorität wurde von Normal zu Niedrig geändert
Ich konnte es an einem Sturmgipfelwyrm etwas schneller reproduzieren:
Spell muss eintreffen, wenn man schon outfight war. Dann geht der Spieler wieder mit der Kreatur infight. Niedrige Prio, da das Ganze nicht lange anhält.
Von Jeora vor mehr als 4 Jahren aktualisiert
- Dupliziert durch Fehler #38303: Fehler #36910 Kampfbug wurde hinzugefügt
Von Jeora vor etwa 1 Jahr aktualisiert
- Dupliziert durch Fehler #41753: Dauerhaft "im Kampf" durch verzögerten Treffer möglich wurde hinzugefügt
Von Jeora vor etwa 1 Jahr aktualisiert
- Thema wurde von Kampfbug zu Kampfbug wenn Spells nach Kampfende und Reset noch Schaden verursachen geändert
- Priorität wurde von Niedrig zu Normal geändert
Aufgrund von #41753 nochmal gegengetestet: sofern man sich nicht wegbewegt bleibt man dauerhaft infight, nur wenn man weiter wegläuft wird der Kampf irgendwann beendet (daher die Prioänderung)
Von Jeora vor etwa 1 Jahr aktualisiert
- Dupliziert durch Fehler #36516: Infight-Bug nach Flucht von "Teufelskanone V1" wurde hinzugefügt