Nebelfänger Forum
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.

Nach unten
Keinhorn
Keinhorn
Anzahl der Beiträge : 16
Anmeldedatum : 31.07.18

Flugrichtungen der Valkyren beim Lichkönig Empty Flugrichtungen der Valkyren beim Lichkönig

Di März 30, 2021 2:57 pm
Hallo liebe Nebelfänger,

wie ihr ja vielleicht mitbekommen habt, hatte Cheeta die Idee sich die Flugmechaniken der Valks bei LK mal genauer anzusehen, da diese nicht wie erwartet radial nach außen fliegen, sondern manchmal schon bei geringem Positionsunterschied der aufgenommenen Spieler in verschiedene Richtungen fliegen. Implizit bedeutet das, dass es auf der Plattform Grenzen geben muss, die einen spontanen, sprunghaften Richtungsunterschied der Valks bedeuten. Das wird besonders im ICC 25 HC interessant, wo man durchaus ein Interesse an gemeinsam fliegenden Valks hat.

Ich habe sein Vorgehen unabhängig einmal mit einer anderen Herangehensweise reproduziert und möchte euch kurz das Ergebnis zeigen. Für alle interessierten
werde ich darauffolgend noch kurz die Herangehensweise erklären.

Ermittelte Flugweise:
Reales Verhalten:
Ein Bild ohne Verunstaltungen (Pfeile) könnt ihr in der Antwort auf diesen Post ganz unten finden. Bitte behaltet in Erinnerung, dass diese Arbeit hauptsächlich auf Cheetas Vorarbeit und meiner Langeweile vergangenes Wochende beruht, wenn ihr das mit anderen teilt.

Erwartete Flugrichtung:
Erwartetes Verhalten:

Kurz gesagt kann man im Sourcecode feststellen, dass die Valks unsichtbare NPCs anfliegen (ID 22515) und damit auch unintuitive Wege einschlagen. Für das Spielverhalten bedeutet das, dass auch wenn ein Spieler sehr nahe am markierten Spieler aufgenommen wird, sich seine Flugrichtung dennoch drastisch von den anderen unterscheiden kann (zum Beispiel direkt auf dem Porter), falls der markierte Spieler auf einer der als schwarz markierten Grenzen steht.

WICHTIG!
Das Verhalten und auch die Grenzlinien, an denen eine Valk bei kleinem Positionsunterschied ihre Richtung wechselt, können geringfügig abweichen, da in der Datenbank keine 3D-Informationen (Höhe der NPCs) enthalten sind und die Positionen nur auf eine Kommastelle genau abgerufen werden können. Gerade die Z-Koordinate kann aber Einfluss auf die Abstandsberechnung haben, wodurch die Grenzen in der Realität ein wenig anders sind. Allerdings ist das grobe Verhalten das Gleiche und diese Veranschaulichung dient mehr dem Verständnis der Mechanik und der Begründung, warum man beim markierten Spieler stehen sollte Razz


Zuletzt von Keinhorn am Di März 30, 2021 3:28 pm bearbeitet; insgesamt 5-mal bearbeitet

Xeraan und Thany mögen diesen Beitrag

Keinhorn
Keinhorn
Anzahl der Beiträge : 16
Anmeldedatum : 31.07.18

Flugrichtungen der Valkyren beim Lichkönig Empty Re: Flugrichtungen der Valkyren beim Lichkönig

Di März 30, 2021 3:17 pm
Nun, da das allgemeine Blabla geschafft ist, möchte ich einmal kurz darauf eingehen, wie ich dieses Verhalten und auch die Grenzen ermittelt habe.

Zuallererst habe ich mir die Valk-Implementierung im Github Quellcode des LK Fights angesehen. Interessant wird es dort zwischen Zeile 1515 und 1548, die das Verhalten der Klasse npc_valkyr_shadowguard definieren.

Quellcode Valks:

Ziemlich mittig kann man feststellen, dass mit der Zeile
Code:
GetCreatureListWithEntryInGrid(triggers, me, NPC_WORLD_TRIGGER, 150.0f);
alle Kreaturen der ID NPC_WORLD_TRIGGER gesucht werden.

Mit der Zeile
Code:
triggers.sort(Trinity::ObjectDistanceOrderPred(me));
werden die NPCs nach aufsteigendem Abstand sortiert und mit
Code:
_dropPoint.Relocate(triggers.front());
wird der nächste NPC als Droppunkt festgelegt.

Damit ist klar, wie die Valks ihre Anflugpunkte festlegen. Als nächstes muss man die numerische ID des NPC NPC_WORLD_TRIGGER herausfinden, die im Headerfile der Eiskronenzitadelle in Zeile 322 definiert ist:
Code:
NPC_WORLD_TRIGGER = 22515,

Die Koordinaten dieser NPCs kann man mit einer Abfrage der RG-Datenbank erhalten.

Auf Basis dieser Informationen habe ich ein Python-Skript geschrieben, dass folgende Dinge macht:

  1. Die Koordinaten per HTTPS-request aus der Datenbank abfragen und alle unnötigen NPCs (in anderen Zonen) entfernt

  2. Die Koordinaten im WoW-Koordinatensystem auf Pixel-Koordinaten des in der Datenbank hinterlegten Bildes mapped

  3. Für ein beliebigen Schrittabstand jeden Punkt auf dem Bild abläuft und die Entfernung zu den 10 NPCs berechnet und diese sortiert

  4. Die Punkte im Koordinatensystem ermittelt, die auf einer Grenze zwischen zwei Anflugpunkten (annähernd identischer Abstand) ermittelt

  5. Diese Puntke linear interpoliert und auf die Karte plottet


Das Ergebnis dieses Skriptes ist dann das folgende Bild
Ergebnis:

Viel Arbeit war noch den Code zu optimieren, dass die Erstellung des gesamten Bildes bei einer Berechnung des Abstandes für ca. 400k Punkte zu jeweils 10 NPCs (also 4*10^6 Abstandskalkulationen) nur ca. 6s statt ungefähr 5-7 Minuten braucht. Aber das war zugegebenermaßen eher meinem Perfektionismus als einer wirklichen Notwendigkeit geschuldet.

Xeraan, Thany und Marisia mögen diesen Beitrag

Nach oben
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten