Mythos AoE Cap

Immer wieder taucht dieses Thema auf und es ist jedes Mal ein Streitpunkt. Die einen sagen „AoE Cap ist gut, da der Server sonst in die Knie geht“. Die anderen sagen „Ohne AoE Cap hat der Server weniger Last“. Die einen sagen „Ohne AoE Cap können kleine Gruppen gegen große gewinnen“. Die anderen sagen „Mit oder ohne AoE Cap ist egal, große Gruppen sind immer zu stark“. Die Diskussionen können ewig so weiter gehen.

Nachdem bei uns im TS mal wieder eine AoE Cap Diskussion ausgebrochen ist, ist mir die Idee gekommen diesen ganzen Argumenten mal auf den Grund zu gehen. Mag sein das ich verrückt bin so viel Aufwand in die Findung der Antworten zu stecken, aber ich habe Spaß an solchen Sachen. Mit gesundem Menschenverstand konnte man sich schon vieles was jetzt kommt denken, aber Beweise hatte man nicht.

Ok. Was habe ich gemacht? Ich habe mir zuerst eine theoretische Situation (Ein Szenario) ausgedacht.

Das Szenario

Es wird eine „einfache“ Situation beschrieben. Wir haben 2 Gruppen mit einer bestimmten Größe. Zuerst greift Gruppe A mit AoE‘s (z.B. Strahltornado) an, danach Gruppe B. Jede Runde dauert 1 Sekunde. Gruppe A und Gruppe B stehen vollständig in den Radien der AoE Angriffe. Stellt euch einfach eine Schlacht um eine Flagge in einem Burgfried vor. In der Vergangenheit waren das die häufigsten Lag Situationen.

Mein Szenario hat aber noch einige Schwächen. Ich ignoriere zum Beispiel die Tatsache, dass nicht jeder Spieler jede Sekunde einen Strahltornado spammt. Außerdem behandele ich die Kette mit aktiven/reaktiven Proccs überhaupt nicht. Von daher kann es die Realität nicht exakt simulieren, aber ich kann hoffentlich eine Tendenz erkennen.

Das Szenario kann auf verschiedenste Weisen weiter interpretiert werden. Dazu habe ich mir Szenario Setups ausgedacht, wie zum Beispiel der AoE Cap Typ.

Szenario Setups

AoE Cap Typ

Das wichtigste Setup ist der AoE Cap Typ. Welche Variante erzeugt die meiste Last? Hier gibt es die drei Optionen.

  • 6 Ziele
  • 60 Ziele mit Schadensreduzierung
  • Kein Cap

Gruppengröße

Immer wieder kommt das Argument auf, dass man mit einem AoE Cap keine großen Gruppen töten kann. Ist das so? Wenn ja, ab wie vielen Spielern kann man Gegner töten?

AoE Schaden (Average Damage)

Der durchschnittliche AoE Schaden bezieht sich auf den AoE Schaden an einen Gegner pro Sekunde.

Gerade mit 2.1. wurde der Schaden auf 50% reduziert. Das reduziert auch den durchschnittlichen AoE Schaden. Wieviel Einfluss hat das auf den Ausgang des Kampfes?

Heilung (Heal simulation)

Wenn Heilung aktiv ist, wird nach jeder Spieleraktion ein AoE Heal (75% des AoE Schadens) simuliert. Stellt euch am besten Heilkreise vom Heilstab dafür vor. Der AoE Heal ist auf 6 Ziele fest begrenzt. Ich habe mich auf Heilkreise beschränkt, da sie der gleichen Gesetzgebung wie einem AoE Schaden unterzogen sind.

Impact? (Impact simulation)

Einer der Spielphilosophien und Geheimnisse von Lux Dei’s Erfolg ist das Setzen eines so genannten „Impacts“. Das heißt wir koordinieren unsere Angriffe und versuchen alle gleichzeitig anzugreifen. Damit erzeugen wir eine Schadensspitze und können den Gegner häufig überrumpeln.

Wenn kein Impact gesetzt ist, greift immer eine zufällige Anzahl an Spielern pro Runde an.

AoE Schadensverteilung

Momentan trifft der AoE die 6 dichtesten Ziele mit 100%. Doch häufig laufen die Gegner umher und mal ist der eine und mal der andere dichter. Wieviel Einfluss hat es, dass man immer die gleichen Ziele trifft oder zufällige?

Wenn dieses Setup aktiv ist, werden also nicht immer die gleichen Ziele getroffen.

Barrieren

Wenn dieses Setup aktiv ist, bekommen beide Gruppen eine Barriere. Barrieren oder andere Schilde verlängern den Kampf. Ich musste mir also keine komplizierte Schild Mechanik ausdenken, wenn ich die Länge des Kampfes beeinflussen will. Hier habe ich es mir einfach gemacht. Es wird einfach die HP verdoppelt und somit die Kampfdauer verdoppelt.

Cyrodiil Zone Splitting

Ich kann nur von außen beobachten, wie Zenimax die LOS Checks implementiert hat. Fakt ist, der Server muss irgendwoher wissen welcher gegnerische Spieler zu dem Zeitpunkt des AoE Schadens in Reichweite des AoE war. Nun ist die Frage wie wird das ermittelt?

Nehmen wir an Cyrodiil ist eine einzige Instanz, dann muss der Server ermitteln, welche gegnerischen Spieler zum Zeitpunkt des AoE’s von Spieler A in der Reichweite vom AoE waren. Ruft der Server jetzt die Position aller gegnerischen Spieler in Cyrodiil ab und prüft darüber? Oder gibt es ein anderes Verfahren?

Wenn Zone Splitting nicht aktiv ist, dann durchsucht der Server komplett Cyrodiil. In meiner Simulation habe ich den Wert auf 500 Objekte gesetzt.

Wenn Zone Splitting aktiv ist, dann ist Cyrodiil in kleine Kästchen (Zonen) aufgeteilt. Somit muss der Server nicht ganz Cyrodiil durchsuchen, sondern nur die gegnerischen Spieler in der Zone des aufgetretenen AoE Schadens. Liegt der AoE über Zonengrenzen werden alle angrenzenden Zonen durchsucht. So würde ich das machen. In der Simulation hat das die Folge, dass nur die Gegner der anderen Gruppe durchsucht werden.

Je nachdem wie groß die Zonen sind, kann also mit Zone Splitting die Anzahl von LOS Checks bei einem gefüllten Cyrodiil Server massiv verringert werden (Theoretisch). Das ist wie gesagt ein Verfahren das ich anwenden würde. Wie es letztendlich umgesetzt ist, weiß nur Zenimax selbst.

Simulation der Szenarien

Ich bin kein Mathe Genie das aus allen Szenarien und Setup Kombinationen Formeln herleiten kann. Ich kann dafür aber Programme schreiben. Also habe ich kurzerhand einen Simulator (ESO Lag Simulator) geschrieben mit dem man die Szenarien simulieren kann.

Mythos AoE Cap

Welche Ergebnisse liefert die Simulation?

Der Simulator liefert aus jeder Simulation vier Werte.

  1. Die Kampfdauer
  2. Die Anzahl der Aktionen im Kampf pro Sekunde
  3. Gesamtanzahl der Aktionen
  4. Sieger des Kampfes

Kampfdauer

Jede Sekunde des Kampfes wird aufgezeichnet und als X-Achse des Auswertegraphen verwendet.

Die Anzahl der Aktionen im Kampf pro Sekunde

Der Simulator ermittelt jede Sekunde die Aktionen (Ticks) im Kampf. Eine Aktion ist zum Beispiel ein LOS Check eines Spieler AoE‘s. Die Aktionen werden als Y-Achse des Auswertegraphen verwendet. Sprich über die Ticks bei einer bestimmten Sekunde kann man ganz gut sehen, wieviel Server Last welches Setup / Szenario erzeugt.

Sieger des Kampfes

Ab wann ist ein Sieg gegen eine größere Gruppe möglich? Welches Setup wird dazu benötigt? Wieviel Einfluss haben die AoE Cap Typen? Diese Fragen soll über den Sieger des Kampfes beantwortet werden.

Aufbau der Simulation

Jetzt wird es langsam schwierig. Wie könnte ein LOS Check aussehen? Wieviel Ticks (Aktionen des Servers) erzeugt das? Ich habe an sich keine Ahnung. Ich kann hier nur meine Erfahrung einbringen. Letztendlich muss die Simulation keinen realen LOS Check machen, sondern nur simulieren, wieviel „Ticks“ dieser benötigt. Das gleiche gilt für die Berechnung des AoE Schadens und der Heilung.

Ermitteln der Aktionen im Kampf

Ich habe die nötigen Aktionen für euch über einen simplen Activity Chart visualisiert. Links der Baum für AoE Schaden, rechts der Baum für AoE Heilkreise. Man sieht ganz gut, dass sich der Ablauf gleicht.

Mythos AoE Cap

Die beiden ersten Aktionen „GetInside“ und „GetVisible“ bilden den eigentlichen LOS Check. Zuerst ermittelt man alle gegnerischen Spieler innerhalb des AoE Radius und dann ermittelt man aus dieser Liste alle sichtbaren Ziele, die beispielsweise nicht durch eine Mauer verdeckt sind. Die Anzahl der LOS Checks variiert nicht auf Basis des AoE Caps, sondern ist Abhängig von den verfügbaren Zielen in der Zone.

Die Aktionen „DoDmg“ und „DeathCheck“ sind komplizierter, da es hier einige Unteraktionen gibt. Zum Beispiel müssen bei aktivem AoE Cap die 6 dichtesten Ziele zuvor ermittelt werden, wohingegen bei keinem AoE Cap einfach Schaden gemacht werden kann. Mit aktivierten „Randomize target hitting“ kann simuliert werden, dass nicht immer dieselben 6 Ziele getroffen werden. Als letztes muss hier der Dropoff berechnet werden und ob der Gegner durch den Schaden getötet wurde.

Heilung ist an sich gleich wie der Schadensbaum aufgebaut. Einzige Besonderheit ist, dass hier der AoE Cap fest auf 6 Ziele begrenzt ist.

Berechnung des Schadens & Kampfende

Nachdem das Ziel das Schaden bekommen soll ermittelt wurde (Ich habe überraschender Weise festgestellt, dass der Weg dahin ziemlich lang ist. J ), muss diesem Ziel noch Schaden zugefügt werden. Ich glaube dass diese Berechnung nicht so einfach ist, denn es müssen die Mitigation und zusätzlich etwaige Proccs berechnet werden. Hier habe ich es mir einfach gemacht. Hier habe ich für jede Schadensberechnung einfach 5 Ticks veranschlagt. Ich glaube das ist die richtige Gewichtung für den ganzen Prozess.

Das Kampfende ist recht einfach zu ermitteln. Sobald alle Spieler einer Gruppe 0 HP erreicht haben, ist der Kampf beendet.

Ergebnisse/Auswertung

Mit meinem Simulator habe ich verschiedene Setups ausprobiert. Einige möchte ich hier Stichpunktartig vorstellen. Ich habe versucht die typischen Fragen zu beantworten.

Kleine Gruppen vs. Große Gruppen. Wieviel ist möglich?

Ich habe die verschiedenen AoE Cap Typen jeweils mit aktivierten Heal und einem durchschnittlichem AoE Schaden von 2000 durchgespielt.

Mythos AoE Cap

Bei dem festen „6 Targets Cap“ war es bereits bei einem 50(A)vs60(B) für Gruppe A fast unmöglich zu gewinnen. Mit aktiviertem Impact für Gruppe A konnte die Siegchance erhöht werden. Gruppe B hat dann aber immer noch in den meisten Fällen gewonnen.

Bei „60 Targets + Dropoff“ (So ist es aktuell in ESO implementiert) war bei 20(A)vs60(B) für Gruppe A nur noch eine sehr geringe Siegchance. Auch hier gilt, dass mit aktiviertem Impact Gruppe A höhere Siegchancen hatte.

Bei „No Limit“ (Kein AoE Cap) hatten sogar 6 Spieler eine kleine Chance eine Gruppe von 60 Spielern zu töten. Bei 4(A)v60(B) war dann Schluss.

Interessant zu beobachten ist der Punkt, ab wann man mit einer kleinen Gruppe sicher gegen eine größere Gewinnt. Da Gruppe A immer zuerst angreift nehme ich diese als Referenz. Hier die Ergebnisse:

  • „6 Targets Cap“ ohne Impact: 70(A)v60(B) -> Man benötigte sogar mehr Spieler und B gewann trotzdem ab und zu
  • „6 Targets Cap“ mit Impact: 46(A)v60(B) -> Trotz Impact brauch man immer noch fast die gleiche Anzahl an Spielern.
  • „60 Targets + Dropoff“: 60(A)v60(B) -> Gleiches Bild, aber sicher Gewinnen sollte man bei gleicher Anzahl
  • „60 Targets + Dropoff“ mit Impact: 32(A)v60(B) -> Hier ist ein großer Unterschied zu sehen. Impacts haben also einen ziemlich großen Einfluss bei dem AoE Cap Typ.
  • „No Limit“ (Kein AoE Cap): 40(A)v60(B) -> Man kann mit einer kleineren Gruppe gewinnen, man brauch aber schon 1/3 der Gegnergruppe.
  • „No Limit“ (Kein AoE Cap) mit Impact: 12(A)v60(B) -> Hier ist auch ein großer Unterschied zu sehen. Impacts haben auch hier einen großen Einfluss.

Ich fasse die Ergebnisse zusammen. Klarer Sieger bei der Thematik ist „No Limit“ (Kein AoE Cap). Der Erfolg der kleineren Gruppe hängt aber von einigen Faktoren ab. Greifen zwei nicht koordinierte Gruppen an, benötigt man trotzdem noch ungefähr 66% der Gegnerstärke der anderen Gruppe. Hier könnten aber einzelne gute Spieler den Unterschied ausmachen und durch einen gezielten AoE den Gegner massiv schwächen.  Ist die eigene Gruppe zusätzlich noch organisiert und schafft es einen Impact zu setzen, kann man sogar mit nur 12 Spielern auch 60 oder mehr Gegner wipen.

Bei der aktuellen Implementierung „60 Targets + Dropoff“ liegt dieser Punkt für organisierte Gruppen bei  ~50% der Gegnerstärke (30v60, 12v24, etc.). Wenn nicht organisierte Truppen aufeinander treffen gewinnt an sich immer der größere Zerg. Einzelne gute Spieler können in unorganisierten Gruppen nicht hervorstechen.

Setup mit dem höchsten Server Load. Was ist das schlimmste was passieren kann?

Klarer Sieger ist hier das „6 Targets Cap“ mit teilweise bis zu 2 Millionen Overall Ticks. Voraussetzungen dafür sind außerdem, dass die Gegner umherlaufen und nebenbei noch Barrieren geworfen werden. Dieses Bild kennen wir alle und das hat den Servern damals wirklich nicht gut getan.

Mythos AoE Cap

An zweiter Stelle steht „60 Targets + Dropoff“. Der Overall Ticks Wert ist aber nur noch 1/10 so groß, wie beim „6 Targets Cap“.

Mythos AoE Cap

Einige Fragen jetzt bestimmt: Warum gab es denn mit 2.0 noch Lags? Die einzige Erklärung die ich dazu habe ist der Peak den beide AoE Typen erreichen. Beide liegen bei über 120.000 – 150.000 Ticks bei dem höchsten Wert. Wenn der Server jetzt nur 30.000 Ticks pro Sekunde abarbeiten kann stauen sich die Operationen und es kommt zum Serverlag. (Der Server benötigt 4 Sekunden um eine Sekunde im Spiel zu berechnen)

Setup mit dem niedrigsten Server Load. Was ist die beste AoE Anti-Lag Lösung?

Wie bereits oben geschrieben, habe ich ein sogenanntes Cyrodiil Zone Splitting Verfahren in die Simulation eingebaut. Wenn Zone Splitting nicht aktiv ist, durchsucht der Server komplett Cyrodiil ob das Ziel mit dem AoE getroffen werden kann. In meiner Simulation ist der Wert auf 500 gesetzt. Das heißt 250 Spieler bei beiden gegnerischen Fraktionen. Wenn Zone Splitting aktiv ist, muss der Server nicht mehr komplett Cyrodiil durchsuchen, sondern nur die aktuelle Zone in der der AoE ausgeführt wurde. In der Simulation ist die zu durchsuchende Anzahl an Objekten die gegnerische Gruppe, also 60. Nehmen wir das letzte Simulationsbeispiel.

Mythos AoE Cap

Das Ergebnis ist beeindruckend. Der Peak liegt nur noch bei  50.000, also ungefähr 33% zum vorherigen Ergebnis. Nehmen wir die Annahme mit den 30.000 Ticks pro Sekunde benötigt der Server nur noch knapp 2 Sekunden, anstatt 4 Sekunden für die Berechnung.

Ich kann mir nicht helfen, aber die Bemerkung muss ich loswerden. Ich glaube Zenimax hat die globale Variante ohne Zoneneinteilung implementiert oder hat die Zonen zu groß gemacht. Denn könnt ihr euch noch an die entfernten Rehe erinnern? Rehe kann man auch mit einem AoE treffen. Genauso wie Wachen oder andere Tiere. Gegen alle diese Objekte muss ein LOS Check gemacht werden, denn man will ja mit einem AoE nicht ausversehen den Wolf auf der anderen Seite von Cyrodiil treffen. Falls wer das Zone Splitting näher erläutert haben möchte, kann mich gerne anschreiben, denn das möchte ich hier nicht noch näher erläutern.

Kommen wir zum Sieger der am wenigsten Server Load erzeugt. Dies ist eindeutig „No Limit“ (Kein AoE Cap). Mit einem Peak beim Worst Case von 28.000 bei einem vernünftigen Zone Splitting ist man unter 30.000 Ticks. Mit einem Impact würde man sogar nur bei 15.000 landen. Ich glaube diese Werte sprechen für sich.

Mythos AoE Cap

Warum ist „No Limit“ (Kein AoE Cap) so niedrig? Das liegt an mehreren Faktoren:

  1. Die Gegner sterben schneller
  2. Die Kämpfe sind viel kürzer
  3. Man spart Ballast in der Berechnung
    1. Ermitteln der dichtesten 6 Ziele fällt weg
    2. Der komplette Dropoff fällt weg

Einfluss des AoE Schadens (Average Damage) auf das Ergebnis. Ist mehr Schaden gut?

Als letztes möchte ich auf den durchschnittlichen AoE Schaden eingehen. Die Ergebnisse waren bei allen Typen immer das gleiche. Umso mehr Schaden, umso schneller sterben die Gegner und umso kürzer sind die Kämpfe. Wer letztendlich zuerst hohen Schaden austeilt gewinnt auch mit einer kleineren Gruppe, egal welcher AoE Cap Typ. Zum Vergleich.

„60 Targets + Dropoff“ mit Impact:  32(A)v60(B) mit 2000 Schaden

gegen

„60 Targets + Dropoff“ mit Impact:  16(A)v60(B) mit 4000 Schaden

Mythos AoE Cap

Fazit

Die Auswertung der Ergebnisse hat mir ganz klar gezeigt, welchen AoE Typ ich präferieren würde. Egal wie ich es drehe und wende ich lande immer dabei, dass „No Limit“ (Kein AoE Cap) die beste Lösung ist. Ohne AoE Cap ist der Einzelne noch wichtig und Zerg gegen Zerg ist auch noch möglich. Man muss jedoch aufpassen, dass man nicht in Situationen kommt in der ein einzelner Spieler gegen 60 ohne Probleme gewinnt. Das finde ich wieder zu extrem. Was kann man hier machen? Zenimax hat hier ein gutes Mittel. Den durchschnittlichen AoE Schaden.

Aktuell finde ich den durchschnittlichen AoE Schaden allerdings etwas zu gering. Die 50% Schadensreduzierung für mich ein Stück zu hoch. Ich würde 40% vorziehen. Momentan sind die Spieler bei gefühlt 2000-3000 durchschnittlichem AoE Schaden, optimal wären 4000. Mit einem durchschnittlichem AoE Schaden von 4000 Punkten und keinem AoE Cap sind 6 Spieler in der Lage auch mal 60 gut zu wipen.

Auch beim theoretisch aufkommenden Server Load liegt „No Limit“ (Kein AoE Cap) vorn. Entgegen einiger Meinungen, dass „6 Targets Cap“ am wenigsten Server Load erzeugt (Es erzeugt sogar mit Abstand den meisten). Ebenso die aktuelle Lösung („60 Targets + Dropoff“) erzeugt einfach zu viel Server Load. Deshalb mein Anliegen.

„Keep-It-Simple“, kein AoE Cap.