使用Python访问内存映射文件

时间:2014-01-02 00:40:46

标签: python struct mmap memory-mapped-files

我希望使用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 个答案:

答案 0 :(得分:2)

您可以尝试在mmap调用中映射超过20个字节的文件,比如使用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]

答案 1 :(得分:0)

对于名称,在游戏中创建一个角色名称,并确保将其写入磁盘 - 也许是退出游戏。

然后使用二进制文件编辑器搜索名称。我偏爱http://sourceforge.net/projects/bpe/,但其中有很多。

找到相机位置可能会更加困难。我可能首先找到角色名称,然后在附近搜索可能是摄像机位置的东西。