272 lines
7.1 KiB
Python
272 lines
7.1 KiB
Python
import struct
|
|
from collections import namedtuple
|
|
|
|
CLASS_NAME = {
|
|
0x01: "Soldier",
|
|
0x02: "Fighter",
|
|
0x03: "Lycanthrope",
|
|
0x04: "Amazon",
|
|
0x05: "Knight",
|
|
0x06: "Berserker",
|
|
0x07: "Fencer",
|
|
0x08: "Phalanx",
|
|
0x09: "BeastTamer",
|
|
0x0A: "DollMaster",
|
|
0x0B: "Ninja",
|
|
0x0C: "Wizard",
|
|
0x0D: "Archer",
|
|
0x0E: "DragonTamer",
|
|
0x0F: "Valkyrie",
|
|
0x10: "Witch",
|
|
0x11: "Sorceress",
|
|
0x12: "Cleric",
|
|
0x13: "Paladin",
|
|
0x14: "Dragoon",
|
|
0x15: "BlackKnight",
|
|
0x16: "SwordMaster",
|
|
0x17: "Cataphract",
|
|
0x18: "BeastMaster",
|
|
0x19: "Enchanter",
|
|
0x1A: "NinjaMaster",
|
|
0x1B: "Archmage",
|
|
0x1C: "Diana",
|
|
0x1D: "DragonMaster",
|
|
0x1E: "Freya",
|
|
0x1F: "Siren",
|
|
0x20: "Priest",
|
|
0x21: "Princess",
|
|
0x22: "Centurion",
|
|
0x23: "Centurion",
|
|
0x24: "AngelKnight",
|
|
0x25: "Seraph",
|
|
0x26: "Lich",
|
|
0x27: "Hawkman",
|
|
0x28: "Vultan",
|
|
0x29: "Raven",
|
|
0x2A: "Werewolf",
|
|
0x2B: "Vampire",
|
|
0x2C: "Vampire",
|
|
0x2D: "Zombie",
|
|
0x2E: "Zombie",
|
|
0x2F: "Skeleton",
|
|
0x30: "Ghost",
|
|
0x31: "Gorgon",
|
|
0x32: "Pumpkinhead",
|
|
0x33: "Faerie",
|
|
0x34: "Gremlin",
|
|
0x35: "Goblin",
|
|
0x36: "Saturos",
|
|
0x37: "Ogre",
|
|
0x38: "YoungDragon",
|
|
0x39: "ThunderDragon",
|
|
0x3A: "RedDragon",
|
|
0x3B: "EarthDragon",
|
|
0x3C: "BlueDragon",
|
|
0x3D: "PlatinumDragon",
|
|
0x3E: "BlackDragon",
|
|
0x3F: "Quetzalcoatl",
|
|
0x40: "Flarebrass",
|
|
0x41: "AhziDahaka",
|
|
0x42: "Hydra",
|
|
0x43: "Bahamut",
|
|
0x44: "Tiamat",
|
|
0x45: "Wyrm",
|
|
0x46: "Wyvern",
|
|
0x47: "Griffin",
|
|
0x48: "Opinincus",
|
|
0x49: "Cockatrice",
|
|
0x4A: "Sphinx",
|
|
0x4B: "Hellhound",
|
|
0x4C: "Cerberus",
|
|
0x4D: "Giant",
|
|
0x4E: "Golem",
|
|
0x4F: "StoneGolem",
|
|
0x50: "BaldrGolem",
|
|
0x51: "Gladiator",
|
|
0x52: "Vanguard",
|
|
0x53: "General",
|
|
0x54: "Gladiator",
|
|
0x55: "Warrior",
|
|
0x56: "BlazeKnight",
|
|
0x57: "RuneKnight",
|
|
0x58: "Lord",
|
|
0x59: "General",
|
|
0x5A: "BeastMaster",
|
|
0x5B: "Priest",
|
|
0x5C: "Warlock",
|
|
0x5D: "Grappler",
|
|
0x5E: "Centurion",
|
|
0x5F: "Lycanthrope",
|
|
0x60: "Werewolf",
|
|
0x61: "Solidblade",
|
|
0x62: "Overlord",
|
|
0x63: "DarkPrince",
|
|
0x64: "SpecialClass",
|
|
0x65: "FlailMonarch",
|
|
0x66: "DeathTemplar",
|
|
0x67: "TempleCommander",
|
|
0x68: "TempleCommander",
|
|
0x69: "TempleCommander",
|
|
0x6A: "TempleCommander",
|
|
0x6B: "TempleCommander",
|
|
0x6C: "Vanity",
|
|
0x6D: "Vanity",
|
|
0x6E: "Vanity",
|
|
0x6F: "SuperiorKnight",
|
|
0x70: "SuperiorKnight",
|
|
0x71: "Gatekeeper",
|
|
0x72: "Grappler",
|
|
0x73: "KnightTemplar",
|
|
0x74: "Daemon",
|
|
0x75: "Phalanx",
|
|
0x76: "Berserker",
|
|
0x77: "Cleric",
|
|
0x78: "Archer",
|
|
0x79: "Hawkman",
|
|
0x7A: "Siren",
|
|
0x7B: "Enchanter",
|
|
0x7C: "BlackKnight",
|
|
0x7D: "SpecialClass",
|
|
0x7E: "SpecialClass",
|
|
0x7F: "SpecialClass",
|
|
0x80: "SpecialClass",
|
|
0x81: "SpecialClass",
|
|
0x82: "Barkeep",
|
|
0x83: "ElderlyMan",
|
|
0x84: "Commoner",
|
|
0x85: "Commoner",
|
|
0x86: "Danika",
|
|
0x87: "Danika_01",
|
|
0x88: "Danika_02",
|
|
0x89: "Archer",
|
|
0x8A: "Berserker",
|
|
0x8B: "BeastTamer",
|
|
0x8C: "Valkyrie",
|
|
0x8D: "Wizard",
|
|
0x8E: "Phalanx",
|
|
0x8F: "Berserker",
|
|
0x90: "Knight",
|
|
0x91: "NinjaMaster",
|
|
0x92: "DollMaster",
|
|
0x93: "KnightTemplar",
|
|
0x94: "Archmage",
|
|
0x95: "Priest",
|
|
0x96: "BlackKnight",
|
|
0x97: "DragonMaster",
|
|
0x98: "Siren",
|
|
0x99: "Saturos",
|
|
0x9A: "SwordMaster",
|
|
0x9B: "KnightTemplar",
|
|
0x9C: "Dragoon",
|
|
0x9D: "Gorgon",
|
|
0x9E: "Lich",
|
|
0x9F: "Daemon",
|
|
0xA0: "Plaladin",
|
|
0xA1: "Danika",
|
|
0xA2: "Paladin",
|
|
0xA3: "Witch",
|
|
0xA4: "DeathBahamut",
|
|
}
|
|
|
|
pattern = """4D61676E 75730000 00000000 00000000
|
|
00515104 00000059 00590132 0041003D
|
|
003C003C 003F003F 37000000 00000000
|
|
00000002 01000000 41726E6F 6C640000
|
|
00000000 00000000 00020203 00000053
|
|
00370332 003A003B 00370039 0031003B
|
|
37000000 00000000 00000000 02000000
|
|
4D612764 6F670000 00000000 00000000
|
|
00020203 00000051 00510432 003A003C
|
|
00360039 0031003B 37000000 00000000
|
|
00000000 03000000 486F6C6C 79000000
|
|
00000000 00000000 00040403 01000049
|
|
00490132 003D0033 003A003B 003D0042
|
|
37000000 00000000 00000000 04000000
|
|
4A65616E 6E650000 00000000 00000000
|
|
00040403 01000049 00490432 00390033
|
|
003B003D 003C0040 37000000 00000000
|
|
00000000 05000000 446F726F 74687900
|
|
00000000 00000000 00111103 0100004C
|
|
004C0123 003B0032 003C003D 003B0042
|
|
37000000 00000000 00000002 06000000
|
|
41737261 00000000 00000000 00000000
|
|
00020203 00000054 00540332 003C0039
|
|
00350039 0031003C 37000000 00000000
|
|
00000000 07000000 436C7964 65000000
|
|
00000000 00000000 00020203 00000052
|
|
00520332 003C003A 0038003A 0032003B
|
|
37000000 00000000 00000000 08000000
|
|
42727961 6E000000 00000000 00000000
|
|
00020203 00000051 00510232 003C0038
|
|
00350039 0031003A 38000000 00000000
|
|
00000000 09000000 4976616E 00000000
|
|
00000000 00000000 000A0A03 0000004F
|
|
004F0332 003D003A 0037003A 0033003C
|
|
36000000 00000000 00000002 0A000000
|
|
48616E6E 61000000 00000000 00000000
|
|
00040403 0100004B 004B0232 003D0034
|
|
0039003C 003A0042 36000000 00000000
|
|
00000000 0B000000 44696F00 00000000
|
|
00000000 00000000 00545404 00000054
|
|
0054012A 003E003B 00310035 00300036
|
|
32000000 00000000 00000002 0C000000
|
|
50697474 00000000 00000000 00000000
|
|
00020203 00000051 00510432 003B0037
|
|
002F0034 002D0034 32000000 00000000
|
|
00000000 0D000000 41627261 68616D00
|
|
00000000 00000000 00020203 00000050
|
|
00500432 00390037 002E0035 002F0034
|
|
32000000 00000000 00000000 0E000000
|
|
56617564 76696C6C 65000000 00000000
|
|
00020203 00000050 00500332 003B0039
|
|
002D0033 002F0033 32000000 00000000
|
|
00000000 0F000000 53657261 66696E61
|
|
00000000 00000000 00040403 0100004A
|
|
004A0432 003A0030 00330036 00360039
|
|
32000000 00000000 00000000 10000000
|
|
4B726973 00000000 00000000 00000000
|
|
00111103 01000049 00490323 003D0032
|
|
003B003A 003C0042 37000000 00000000
|
|
00000002 11000000 5A696567 6C657200
|
|
00000000 00000000 00080803 00000054
|
|
00540332 003D003B 00360038 0033003A
|
|
37000000 00000000 00000002 12000000
|
|
4F6D6567 61000000 00000000 00000000
|
|
004E4E03 02000071 00710332 004B005B
|
|
002C002D 002A0039 36000000 00000000
|
|
00000000 13000000"""
|
|
|
|
data = bytes.fromhex(pattern)
|
|
|
|
while len(data) > 0:
|
|
name = data[:0x10].decode("utf-8")
|
|
(portrait,) = struct.unpack_from('>h', data[0x10:])
|
|
(clazz,) = struct.unpack_from('>b', data[0x12:])
|
|
(level,) = struct.unpack_from('>b', data[0x13:])
|
|
(max_hp,) = struct.unpack_from('>h', data[0x16:])
|
|
(cur_hp,) = struct.unpack_from('>h', data[0x18:])
|
|
(strr,) = struct.unpack_from('>h', data[0x1C:])
|
|
(vit,) = struct.unpack_from('>h', data[0x1E:])
|
|
(intt,) = struct.unpack_from('>h', data[0x20:])
|
|
(mem,) = struct.unpack_from('>h', data[0x22:])
|
|
(agi,) = struct.unpack_from('>h', data[0x24:])
|
|
(dex,) = struct.unpack_from('>h', data[0x26:])
|
|
|
|
print(f"name= {name}")
|
|
print(f"portrait= {portrait}")
|
|
print(f"class= {CLASS_NAME[clazz]} ({clazz})")
|
|
print(f"max_health= {max_hp}")
|
|
print(f"current_health= {cur_hp}")
|
|
print(f"level= {level}")
|
|
print(f"str= {strr}")
|
|
print(f"vit= {vit}")
|
|
print(f"int= {intt}")
|
|
print(f"mem= {agi}")
|
|
print(f"agi= {agi}")
|
|
print(f"dex= {dex}")
|
|
print(f"rest= {data[0x26:0x38].hex()}")
|
|
print(" ")
|
|
|
|
data = data[0x38:]
|
|
|