Доступ к файлу, сопоставленному с памятью, с помощью Python


Я ищу, чтобы использовать сопоставленный файл памяти из Guild Wars 2, который предназначен для связи в Mumble для позиционного аудио. Файл содержит информацию о координатах символов и другую полезную информацию.

Я смог получить доступ к координатной информации, используя этот скрипт,

import mmap
import struct

last=[]
while True:
    shmem = mmap.mmap(0, 20, "MumbleLink", mmap.ACCESS_READ)
    coord=struct.unpack("IL3f", shmem)[2:5]

    shmem.close()
    if last!=coord:
        print(coord)
        last = coord
        X = coord[2]
        Y = coord[0]
        Z = coord[1])

Моя проблема в том, что мне трудно понять, как получить больше информации из файла. Как бы я мог получить доступ к другой хранящейся информации, например имя персонажа и положение камеры.

Здесь есть информация о файле:
https://forum-en.guildwars2.com/forum/community/api/Map-API-Mumble-Mashup http://mumble.sourceforge.net/Link

Любая помощь будет весьма признательна.

Ура!, Эд.

2 4

2 ответа:

Вы можете попытаться сопоставить более 20 байт из файла в вызове mmap, скажем, использовать 1024, распаковать все это в соответствии с http://mumble.sourceforge.net/Link , а затем извлеките имя и положение камеры:

s = struct.unpack('IL3f3f3f512s3f')
name = s[11].decode('utf-16')
camera_pos_x,camera_pos_y,camera_pos_z = s[12:15]

Для имен создайте имя персонажа в игре и убедитесь, что оно записано на диск - возможно, выйдя из игры.

Затем используйте редактор двоичных файлов для поиска имени. Я неравнодушен к http://sourceforge.net/projects/bpe/, но их много.

Найти положение камеры может оказаться сложнее. Я, вероятно, начну с поиска имен персонажей, а затем поищу поблизости вещи, которые могут быть позициями камер.