Age of Empires II gravou análise e resumo de jogos em Python 3.
.mgl
).mgx
).mgz
).mgz
).aoe2record
).aoe2record
) A principal funcionalidade do mgz
é um analisador que produz uma estrutura de dados Python baseada em um arquivo de jogo gravado. Também oferece representações abstratas que facilitam o uso dos dados.
mgz
oferece dois analisadores, fast
e full
. O analisador fast
ignora dados que raramente são necessários, enquanto o analisador full
tenta analisar o máximo possível. Naturalmente, o analisador fast
é mais rápido que o analisador full
. O analisador full
pode fazer quase tudo, o fast
, talvez apenas 80-90%. O summary
tentará automaticamente o analisador fast
e retornará ao analisador full
, se necessário.
As abstrações tomam a saída do analisador como entrada e retornam um objeto com dados normalizados que é mais fácil de usar na maioria dos casos. Existem duas abstrações disponíveis, summary
e model
. A abstração summary
tenta expor a quantidade máxima de dados utilizáveis. A abstração model
é mais limitada, mas executa mais pesquisas automaticamente.
Versão | modelo | resumo | rápido (cabeçalho) | rápido (corpo) | completo (cabeçalho) | completo (corpo) |
---|---|---|---|---|---|---|
Era dos Reis ( .mgl ) | ✓ | ✓ | ✓ | |||
Os conquistadores ( .mgx ) | ✓ | ✓ | ✓ | |||
Patch do usuário <= 1.4 ( .mgz ) | ✓ | ✓ | ✓ | ✓ | ||
Patch de usuário 1.5 ( .mgz ) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Edição HD >= 4.6 | ✓ | ✓ | ✓ | ✓ | ||
Edição HD 5.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Edição Definitiva <= 13.34 ( .aoe2record ) | ✓ | ✓ | ✓ | ✓ | ||
Edição Definitiva > 13.34, <= 26.21 ( .aoe2record ) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Edição Definitiva > 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 ))
P: Onde estão as conquistas/estatísticas de final de jogo?
R: Na ação postgame
, disponível apenas na versão Userpatch.
P: Como posso saber o número de recursos/mortes/etc em um determinado momento?
R: Você não pode, sem repetir a partida no jogo.
P: Como funciona um arquivo de jogo gravado?
R: A primeira parte (o header
) é um instantâneo do estado inicial do jogo. A segunda parte (o body
) é uma lista de movimentos feitos pelos jogadores. O jogo carrega o cabeçalho e aplica cada movimento para alterar o estado de acordo com as regras do jogo.
P: Como posso instalar este pacote?
R: pip install mgz