Search code examples
pythonstructmmapmemory-mapped-files

Accessing a memory-mapped file using Python


I am looking to take use of a memory mapped file from Guild Wars 2, which is designed to link into Mumble for positional audio. The file contains information on the characters coordinates and other useful information.

I have been able to access the coordinate information using this script,

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])

My problem is I am having difficulty working out how to get more information out of the file. How would I go about accessing other information that is stored, such as character name and camera position.

There is information on the file here:
https://forum-en.guildwars2.com/forum/community/api/Map-API-Mumble-Mashup http://mumble.sourceforge.net/Link

Any help would be greatly appreciated.

Cheers, Ed.


Solution

  • You can try to map more than 20 bytes from the file in mmap call, say use 1024, unpack the whole thing according to the http://mumble.sourceforge.net/Link and then extract the name and camera position:

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