Age of Empires II hat das Parsen und die Zusammenfassung des Spiels in Python 3 aufgezeichnet.
.mgl
).mgx
).mgz
).mgz
).aoe2record
).aoe2record
) Die Kernfunktionalität von mgz
ist ein Parser, der eine Python-Datenstruktur basierend auf einer aufgezeichneten Spieldatei erstellt. Es bietet auch abstrahierte Darstellungen, die die Nutzung der Daten erleichtern.
mgz
bietet zwei Parser, fast
und full
. Der fast
Parser überspringt selten benötigte Daten, während der full
Parser versucht, so viele Daten wie möglich zu analysieren. Natürlich ist der fast
Parser schneller als der full
Parser. Der full
Parser kann fast alles, der fast
nur vielleicht 80-90 %. Die summary
testet automatisch den fast
Parser und greift bei Bedarf auf den full
Parser zurück.
Abstraktionen verwenden die Parser-Ausgabe als Eingabe und geben ein Objekt mit normalisierten Daten zurück, das in den meisten Fällen einfacher zu verwenden ist. Es stehen zwei Abstraktionen zur Verfügung: summary
und model
. Die summary
Abstraktion versucht, die maximale Menge an nutzbaren Daten verfügbar zu machen. Die model
ist eingeschränkter, führt jedoch automatisch mehr Suchvorgänge durch.
Version | Modell | Zusammenfassung | schnell (Kopfzeile) | schnell (Körper) | voll (Kopfzeile) | voll (Körper) |
---|---|---|---|---|---|---|
Zeitalter der Könige ( .mgl ) | ✓ | ✓ | ✓ | |||
Die Eroberer ( .mgx ) | ✓ | ✓ | ✓ | |||
Benutzerpatch <= 1.4 ( .mgz ) | ✓ | ✓ | ✓ | ✓ | ||
Benutzerpatch 1.5 ( .mgz ) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
HD-Edition >= 4.6 | ✓ | ✓ | ✓ | ✓ | ||
HD-Edition 5.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Definitive Edition <= 13.34 ( .aoe2record ) | ✓ | ✓ | ✓ | ✓ | ||
Definitive Edition > 13.34, <= 26.21 ( .aoe2record ) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Definitive Edition > 26.21 ( .aoe2record ) | ✓ | ✓ | ✓ | ✓ | ✓ |
import os
from mgz import header , fast
with open ( '/path/to/file' , 'rb' ) as data :
eof = os . fstat ( data . fileno ()). st_size
header . parse_stream ( data )
fast . meta ( data )
while data . tell () < eof :
fast . operation ( data )
from mgz . summary import Summary
with open ( '/path/to/file' , 'rb' ) as data :
s = Summary ( data )
s . get_map ()
s . get_platform ()
# ... etc
from mgz . model import parse_match
with open ( '/path/to/file' , 'rb' ) as data :
match = parse_match ( data )
match . map . name
match . file . perspective . number
# ... etc
import json
from mgz . model import parse_match , serialize
with open ( '/path/to/file' , 'rb' ) as h :
match = parse_match ( h )
print ( json . dumps ( serialize ( match ), indent = 2 ))
F: Wo sind die Erfolge/Statistiken am Ende des Spiels?
A: In der postgame
Aktion, nur ab der Userpatch-Version verfügbar.
F: Wie kann ich die Anzahl der Ressourcen/Kills usw. zu einem bestimmten Zeitpunkt ermitteln?
A: Das geht nicht, ohne das Spiel im Spiel noch einmal durchzuspielen.
F: Wie funktioniert eine aufgezeichnete Spieldatei?
A: Der erste Teil (der header
) ist eine Momentaufnahme des anfänglichen Spielstatus. Der zweite Teil (der body
) ist eine Liste der von den Spielern ausgeführten Bewegungen. Das Spiel lädt den Header und wendet dann jede Bewegung an, um den Status entsprechend den Spielregeln zu ändern.
F: Wie kann ich dieses Paket installieren?
A: pip install mgz