import struct import argparse import sys #fdesc = open("extracted/out.1076.luac", "rb") #fdesc = open("extracted/out.635.luac", "rb") #fdesc = open("extracted/out.222.luac", "rb") parser = argparse.ArgumentParser("MpLua to lua-51 translator") parser.add_argument("target", help="Target MpLua compiled script") parser.add_argument("output", help="Output file") options = parser.parse_args() fdesc = open(options.target, "rb") # Header + some info hardcoded (int size, endianess, etc.) # MpEngine actually checks that these values are always the same header = fdesc.read(12) assert header == b'\x1bLuaQ\x00\x01\x04\x08\x04\x08\x01' class LuaConst(object): "Stand for Lua constants" def __init__(self, value): self.value = value def __repr__(self): return "<%s %s>" % (self.__class__, self.value) class LuaConstNil(LuaConst): pass class LuaConstByte(LuaConst): pass class LuaConstNumber(LuaConst): pass class LuaConstString(LuaConst): pass class LuaFunc(object): "Converter" def read_byte(self): return struct.unpack("B", self.stream.read(1))[0] def read_int(self): return struct.unpack("