palworld-save-tools icon indicating copy to clipboard operation
palworld-save-tools copied to clipboard

v0.4.11 broke the tools

Open deafdudecomputers opened this issue 1 year ago • 11 comments

Common issues before reporting Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02d49943958c6b954da47b047e5d132174

Have you modified the save files If you have, please ensure that the JSON files are valid. No.

Have you tried the latest release Please download the palworld-save-tools-windows.zip file from releases in case it's been fixed. Yes.

Describe the bug A clear and concise description of what the bug is. After updating to v0.4.11, and letting the saves update, it'll break the tools. Due to new structure/items/etc.

Copy of .sav or .sav.json files If possible, attach the .sav or .sav.json file. Add to a zip file to compress it down from gigabytes down to megabytes to make it manageable. DD80BA3A42F28DC387DAEB9C93C01630.zip

deafdudecomputers avatar Dec 23 '24 03:12 deafdudecomputers

Can confirm:

C:\Users(user)\Desktop\Palworld save fix\palworld-save-tools-windows-v0.24.0>python convert.py Level.sav Converting Level.sav to JSON, saving to Level.sav.json Decompressing sav file Loading GVAS file Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02c5a9dff5664e9051e15db7ba4b18ffcc Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0229143a62f148709e827743886fac4444 Unknown EPalWorkTransformType, please report this: 63: EPalWorkableType::Progress: 02f4820ecc09fc28489ea3894eb9b123fd Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02f66bf5ee5d49f689722347811dfac50d Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 024f264128174d637ffb7235a36b39526e Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0293db0a284849b490064496a0f59101e5 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02a8e34939d34cdd139af408ae2bd3010e Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 0280fea648a84c0c4ab39762010df97ad1 Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 023ad6203ecd77bf41a3969c9bc424e1d9 Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 02f006fc51e29ba04bb36b0d3704f05f2f Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 027cf005d6a4bd9541b56fe556cf9b5a2b Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 02d8652e0e2a4f78419442898ec20f0a37 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 023dd44cded798454c89d44a0d9ffce889 Unknown EPalWorkTransformType, please report this: 66: EPalWorkableType::Progress: 02e2f7468f1e27e84d8d385a4a889f9de1 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02a2ebe9c7c4e1804bb6f10b3bdc445149 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0234d237912af6e647a80aae9c085805de Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 020be4c37a6047d9a4ad9dfba229755ca7 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 024de66b1adadfde4da533930adb2c84a7 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02949665174144636f4377d49b160473d9 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02aa67b988384422fc8f3bf5a3c5749a5c Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02496575944f46101e95d0e58289417e2a Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02b2bcf071fe4e82d521ba85bc8962b404 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0204fa58894e423874650135b9407e53df Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02d03f1fed3a4f57e8778a25a77c529512 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 021ecf32032b411c6fedef28bea1f0aa62 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0273879aa7514e963a7576c3bcae2c5a55 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 026bd6aebe5f49abe085c5da8ffdd809bc Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 022daca2e6c14dc837433a77a167b54df7 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02e7d598e23245e7fab366acbef707de24 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02d279cb64b34614971b7f8194d210dce5 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 021aa8e06dee40ea57a7f0b5a4cdc896c8 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02a22f3162e6447e44bb4286993a96dfa7 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02ea0b0b21294badb9e534a28e9b307b6b Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02488cf765d04b5fed492c68b928c1329f Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02d8b0d894d0415a88a0fda3ad68cfb320 Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 0271ab67918c4b766228d56e8933950626 Unknown EPalWorkTransformType, please report this: 63: EPalWorkableType::Progress: 02e6f967f42e499c47ba3bbab7d304180c Unknown EPalWorkTransformType, please report this: 0: EPalWorkableType::Progress: 02b216d5c1f04857e0d542138d20c099d1 Traceback (most recent call last): File "C:\Users(user)\Desktop\Palworld save fix\palworld-save-tools-windows-v0.24.0\convert.py", line 164, in main() File "C:\Users(user)\Desktop\Palworld save fix\palworld-save-tools-windows-v0.24.0\convert.py", line 75, inmain convert_sav_to_json( File "C:\Users(user)\Desktop\Palworld save fix\palworld-save-tools-windows-v0.24.0\convert.py", line 118, in convert_sav_to_json gvas_file = GvasFile.read( ^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\gvas.py", line 131, in read gvas_file.properties = reader.properties_until_end() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 387, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 400, in property value = self.struct(path) ^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 526, in struct value = self.struct_value(struct_type, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 553, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 387, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\archive.py", line 397, in property value = self.custom_properties[path][0](self, type_name, size, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\rawdata\group.py", line 17, in decode group["value"]["RawData"]["value"] = decode_bytes( ^^^^^^^^^^^^^ File "C:\Users(user)\AppData\Local\Programs\Python\Python311\Lib\site-packages\palworld_save_tools\rawdata\group.py", line 77, in decode_bytes raise Exception("Warning: EOF not reached") Exception: Warning: EOF not reached

SirJeffersonIII avatar Dec 23 '24 05:12 SirJeffersonIII

EPalGroupType::Guild has some extra data now I guess, before admin_player_uid is read, exactly two i64's worth of it on a freshly made world (no idea if it's actually those primitives or not, I don't know how any of this stuff works)

Adding two i64 reads before "admin_player_uid": reader.guid() over in group.py allowed the program to finish exporting a Level json for me (the two i64 values read were 0...), so it might work as a stopgap until someone who knows what they're doing takes a look at it

EDIT: Adding those two i64 writes in group.py, and then changing work.py's writer.write(p["transform"]["raw_data"]) to writer.write(bytes(p["transform"]["raw_data"])) allowed the program to create a functional SAV again (although it's not byte accurate to the SAV it came from, if that matters...) Game loads up properly with it, so this'll work for my purposes I think! Hope at least some of this helps fix the program properly

Charles445 avatar Dec 23 '24 14:12 Charles445

EPalGroupType::Guild has some extra data now I guess, before admin_player_uid is read, exactly two i64's worth of it on a freshly made world (no idea if it's actually those primitives or not, I don't know how any of this stuff works)

Adding two i64 reads before "admin_player_uid": reader.guid() over in group.py allowed the program to finish exporting a Level json for me (the two i64 values read were 0...), so it might work as a stopgap until someone who knows what they're doing takes a look at it

EDIT: Adding those two i64 writes in group.py, and then changing work.py's writer.write(p["transform"]["raw_data"]) to writer.write(bytes(p["transform"]["raw_data"])) allowed the program to create a functional SAV again (although it's not byte accurate to the SAV it came from, if that matters...) Game loads up properly with it, so this'll work for my purposes I think! Hope at least some of this helps fix the program properly

It worked for me to convert sav file to json and covert json back to sav file, although when I tried to convert the processed sav file to json file again, it will show error: return FArchiveReader.unpack_i64(self.data.read(8))[0] struct.error: unpack requires a buffer of 8 bytes

I used it for changing my player GUID, for no reason after a little update in 0.4.11, My friends' and my GUID changed and we are not able to play the game with our original characters. However, I switch the Level.sav file, it still didn't work and let me create a new character, I can't get it work.

Yiyoki avatar Dec 26 '24 11:12 Yiyoki

EPalGroupType::Guild has some extra data now I guess, before admin_player_uid is read, exactly two i64's worth of it on a freshly made world (no idea if it's actually those primitives or not, I don't know how any of this stuff works)

Adding two i64 reads before "admin_player_uid": reader.guid() over in group.py allowed the program to finish exporting a Level json for me (the two i64 values read were 0...), so it might work as a stopgap until someone who knows what they're doing takes a look at it

EDIT: Adding those two i64 writes in group.py, and then changing work.py's writer.write(p["transform"]["raw_data"]) to writer.write(bytes(p["transform"]["raw_data"])) allowed the program to create a functional SAV again (although it's not byte accurate to the SAV it came from, if that matters...) Game loads up properly with it, so this'll work for my purposes I think! Hope at least some of this helps fix the program properly

I'm sorry could you explain this in a little more detail? I have 0 experience with coding but I see which py files you are changing I'm just not sure what exactly you are typing in those files? like what is an i64? Did you write "i64" literally in front of "admin_player_uid": reader.guid() ? If i could see what your group.py and work.py files looked like after you edited them that would be awesome.

Alois699 avatar Jan 02 '25 01:01 Alois699

EPalGroupType::Guild has some extra data now I guess, before admin_player_uid is read, exactly two i64's worth of it on a freshly made world (no idea if it's actually those primitives or not, I don't know how any of this stuff works) Adding two i64 reads before "admin_player_uid": reader.guid() over in group.py allowed the program to finish exporting a Level json for me (the two i64 values read were 0...), so it might work as a stopgap until someone who knows what they're doing takes a look at it EDIT: Adding those two i64 writes in group.py, and then changing work.py's writer.write(p["transform"]["raw_data"]) to writer.write(bytes(p["transform"]["raw_data"])) allowed the program to create a functional SAV again (although it's not byte accurate to the SAV it came from, if that matters...) Game loads up properly with it, so this'll work for my purposes I think! Hope at least some of this helps fix the program properly

I'm sorry could you explain this in a little more detail? I have 0 experience with coding but I see which py files you are changing I'm just not sure what exactly you are typing in those files? like what is an i64? Did you write "i64" literally in front of "admin_player_uid": reader.guid() ? If i could see what your group.py and work.py files looked like after you edited them that would be awesome.

per his instructions (which worked for me but again does miss some info as OP stated) open group.py - go to line 60 to find:

if group_type == "EPalGroupType::Guild":
    guild = {
        "admin_player_uid": reader.guid(),
        "players": [],
    }
    player_count = reader.i32()
    for _ in range(player_count):
        player = {
            "player_uid": reader.guid(),
            "player_info": {
                "last_online_real_time": reader.i64(),
                "player_name": reader.fstring(),
            },
        }
        guild["players"].append(player)
    group_data |= guild
if not reader.eof():
    raise Exception("

Highlight that whole section and replace it with:

if group_type == "EPalGroupType::Guild":
    # Read two i64 values and set them to 0
    unused_value_1 = reader.i64()
    unused_value_2 = reader.i64()
    unused_value_1 = 0
    unused_value_2 = 0

    guild = {
        "admin_player_uid": reader.guid(),
        "players": [],
    }
    player_count = reader.i32()
    for _ in range(player_count):
        player = {
            "player_uid": reader.guid(),
            "player_info": {
                "last_online_real_time": reader.i64(),
                "player_name": reader.fstring(),
            },
        }
        guild["players"].append(player)
    group_data |= guild
if not reader.eof():
    raise Exception("Warning: EOF not reached")
return group_data

Then open group.py and go to line 251 to find:

writer.write(p["transform"]["raw_data"]) and change it to writer.write(bytes(p["transform"]["raw_data"]))

skooze avatar Jan 04 '25 19:01 skooze

Then open group.py and go to line 251 to find:

writer.write(p["transform"]["raw_data"]) and change it to writer.write(bytes(p["transform"]["raw_data"]))

group.py only has 134 lines for me, and after searching the other .py scripts I can't find the exact string writer.write(p["transform"]["raw_data"]) anywhere. Any idea what I might be missing here?

nickXIII avatar Jan 19 '25 07:01 nickXIII

group.py only has 134 lines for me, and after searching the other .py scripts I can't find the exact string writer.write(p["transform"]["raw_data"]) anywhere. Any idea what I might be missing here?

https://github.com/cheahjs/palworld-save-tools/blob/main/palworld_save_tools/rawdata/group.py#L60 and https://github.com/cheahjs/palworld-save-tools/blob/main/palworld_save_tools/rawdata/work.py#L251

ProjectEnzoGH avatar Jan 21 '25 22:01 ProjectEnzoGH

group.py only has 134 lines for me, and after searching the other .py scripts I can't find the exact string writer.write(p["transform"]["raw_data"]) anywhere. Any idea what I might be missing here?

https://github.com/cheahjs/palworld-save-tools/blob/main/palworld_save_tools/rawdata/group.py#L60 and https://github.com/cheahjs/palworld-save-tools/blob/main/palworld_save_tools/rawdata/work.py#L251

When replacing these files (and making sure the edits suggested were done) I get the errors:

Traceback (most recent call last):
  File "C:\Test\palworld-save-tools-windows-v0.24.0\convert.py", line 164, in <module>
    main()
    ~~~~^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\convert.py", line 75, in main
    convert_sav_to_json(
    ~~~~~~~~~~~~~~~~~~~^
        args.filename,
        ^^^^^^^^^^^^^^
    ...<4 lines>...
        custom_properties_keys=args.custom_properties,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\convert.py", line 118, in convert_sav_to_json
    gvas_file = GvasFile.read(
        raw_gvas, PALWORLD_TYPE_HINTS, custom_properties, allow_nan=allow_nan
    )
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\gvas.py", line 131, in read
    gvas_file.properties = reader.properties_until_end()
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end
    properties[name] = self.property(type_name, size, f"{path}.{name}")
                       ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 399, in property
    value = self.struct(path)
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 534, in struct
    value = self.struct_value(struct_type, path)
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 561, in struct_value
    return self.properties_until_end(path)
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end
    properties[name] = self.property(type_name, size, f"{path}.{name}")
                       ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 396, in property
    value = self.custom_properties[path][0](self, type_name, size, path)
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\rawdata\group.py", line 17, in decode
    group["value"]["RawData"]["value"] = decode_bytes(
                                         ~~~~~~~~~~~~^
        reader, group_bytes, group_type
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\rawdata\group.py", line 70, in decode_bytes
    "last_online_real_time": reader.i64(),
                             ~~~~~~~~~~^^
  File "C:\Test\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 323, in i64
    return FArchiveReader.unpack_i64(self.data.read(8))[0]
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
struct.error: unpack requires a buffer of 8 bytes

SketchyUnicorns avatar Jan 22 '25 04:01 SketchyUnicorns

Then open group.py and go to line 251 to find: writer.write(p["transform"]["raw_data"]) and change it to writer.write(bytes(p["transform"]["raw_data"]))

group.py only has 134 lines for me, and after searching the other .py scripts I can't find the exact string writer.write(p["transform"]["raw_data"]) anywhere. Any idea what I might be missing here?

oOP was talking about group.py and work.py so i figure he's meant work.py in the last step.

nicopinzel avatar Feb 14 '25 13:02 nicopinzel

Then open group.py and go to line 251 to find: writer.write(p["transform"]["raw_data"]) and change it to writer.write(bytes(p["transform"]["raw_data"]))

group.py only has 134 lines for me, and after searching the other .py scripts I can't find the exact string writer.write(p["transform"]["raw_data"]) anywhere. Any idea what I might be missing here?

oOP was talking about group.py and work.py so i figure he's meant work.py in the last step.

The problem I was having is that none of the .py scripts I had were that big, so there was no line 251 to edit in either work.py or group.py. I ended up finding a different tool that was functionally the same to accomplish what I was looking for.

nickXIII avatar Feb 14 '25 13:02 nickXIII

EPalGroupType::Guild has some extra data now I guess, before admin_player_uid is read, exactly two i64's worth of it on a freshly made world (no idea if it's actually those primitives or not, I don't know how any of this stuff works) Adding two i64 reads before "admin_player_uid": reader.guid() over in group.py allowed the program to finish exporting a Level json for me (the two i64 values read were 0...), so it might work as a stopgap until someone who knows what they're doing takes a look at it EDIT: Adding those two i64 writes in group.py, and then changing work.py's writer.write(p["transform"]["raw_data"]) to writer.write(bytes(p["transform"]["raw_data"])) allowed the program to create a functional SAV again (although it's not byte accurate to the SAV it came from, if that matters...) Game loads up properly with it, so this'll work for my purposes I think! Hope at least some of this helps fix the program properly

I'm sorry could you explain this in a little more detail? I have 0 experience with coding but I see which py files you are changing I'm just not sure what exactly you are typing in those files? like what is an i64? Did you write "i64" literally in front of "admin_player_uid": reader.guid() ? If i could see what your group.py and work.py files looked like after you edited them that would be awesome.

per his instructions (which worked for me but again does miss some info as OP stated) open group.py - go to line 60 to find:

if group_type == "EPalGroupType::Guild":
    guild = {
        "admin_player_uid": reader.guid(),
        "players": [],
    }
    player_count = reader.i32()
    for _ in range(player_count):
        player = {
            "player_uid": reader.guid(),
            "player_info": {
                "last_online_real_time": reader.i64(),
                "player_name": reader.fstring(),
            },
        }
        guild["players"].append(player)
    group_data |= guild
if not reader.eof():
    raise Exception("

Highlight that whole section and replace it with:

if group_type == "EPalGroupType::Guild":
    # Read two i64 values and set them to 0
    unused_value_1 = reader.i64()
    unused_value_2 = reader.i64()
    unused_value_1 = 0
    unused_value_2 = 0

    guild = {
        "admin_player_uid": reader.guid(),
        "players": [],
    }
    player_count = reader.i32()
    for _ in range(player_count):
        player = {
            "player_uid": reader.guid(),
            "player_info": {
                "last_online_real_time": reader.i64(),
                "player_name": reader.fstring(),
            },
        }
        guild["players"].append(player)
    group_data |= guild
if not reader.eof():
    raise Exception("Warning: EOF not reached")
return group_data

Then open group.py and go to line 251 to find:

writer.write(p["transform"]["raw_data"]) and change it to writer.write(bytes(p["transform"]["raw_data"]))

I have replaced the lines and fixed indentation since I was lazy and copy pasted, I am now being met with a new error(s):

Checking if Python is installed as python3 INFO: Could not find files for the given pattern(s). Checking if Python is installed as python INFO: Could not find files for the given pattern(s). Checking if Python is installed as py C:\Windows\py.exe Found Python at py Python version: Python 3.13.2 Converting C:\Users\jcopa\OneDrive\Desktop\Palworld DatHost\Saved\SaveGames\0\6F680F994437543FAD4481A3BD1D5616\backup\world\2025.02.21-20.26.32\Level.sav to JSON, saving to C:\Users\jcopa\OneDrive\Desktop\Palworld DatHost\Saved\SaveGames\0\6F680F994437543FAD4481A3BD1D5616\backup\world\2025.02.21-20.26.32\Level.sav.json Decompressing sav file Loading GVAS file Traceback (most recent call last): File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\convert.py", line 164, in main() ~~~~^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\convert.py", line 75, in main convert_sav_to_json( ~~~~~~~~~~~~~~~~~~~^ args.filename, ^^^^^^^^^^^^^^ ...<4 lines>... custom_properties_keys=args.custom_properties, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\convert.py", line 118, in convert_sav_to_json gvas_file = GvasFile.read( raw_gvas, PALWORLD_TYPE_HINTS, custom_properties, allow_nan=allow_nan ) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\gvas.py", line 131, in read gvas_file.properties = reader.properties_until_end() ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 399, in property value = self.struct(path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 534, in struct value = self.struct_value(struct_type, path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 561, in struct_value return self.properties_until_end(path) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 496, in property value = self.prop_value(value_type, value_struct_type, value_path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 518, in prop_value return self.struct_value(struct_type_name, path) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 561, in struct_value return self.properties_until_end(path) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 496, in property value = self.prop_value(value_type, value_struct_type, value_path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 518, in prop_value return self.struct_value(struct_type_name, path) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 561, in struct_value return self.properties_until_end(path) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 496, in property value = self.prop_value(value_type, value_struct_type, value_path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 518, in prop_value return self.struct_value(struct_type_name, path) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 561, in struct_value return self.properties_until_end(path) ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\archive.py", line 396, in property value = self.custom_properties[path][0](self, type_name, size, path) File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\rawdata\foliage_model_instance.py", line 13, in decode value["value"] = decode_bytes(reader, data_bytes) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ File "C:\Users\jcopa\Downloads\palworld-save-tools-windows-v0.24.0\palworld_save_tools\rawdata\foliage_model_instance.py", line 40, in decode_bytes raise Exception("Warning: EOF not reached") Exception: Warning: EOF not reached Press any key to continue . . .

It appears that I am receiving a new EOF warning. Is this just the beginning of a chain of different lines in each .py instance that require changes ? :(

jcopas86 avatar Feb 21 '25 22:02 jcopas86