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

v0.3.7 update bugged the tools.

Open deafdudecomputers opened this issue 1 year ago • 15 comments

Traceback (most recent call last): File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\convert.py", line 145, in main() File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\convert.py", line 65, in main convert_sav_to_json( File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\convert.py", line 105, in convert_sav_to_json gvas_file = GvasFile.read( ^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\gvas.py", line 131, in read gvas_file.properties = reader.properties_until_end() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 399, in property value = self.struct(path) ^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 515, in struct value = self.struct_value(struct_type, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 477, in property value = self.prop_value(value_type, value_struct_type, value_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 499, in prop_value return self.struct_value(struct_type_name, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 396, in property value = self.custom_properties[path][0](self, type_name, size, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\rawdata\character.py", line 13, in decode value["value"] = decode_bytes(reader, char_bytes) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\rawdata\character.py", line 22, in decode_bytes "object": reader.properties_until_end(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 399, in property value = self.struct(path) ^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 515, in struct value = self.struct_value(struct_type, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Desktop\PalworldSaveToolsMaster\PalworldSaveTools.v0.7.3\palworld_save_tools\archive.py", line 493, in property raise Exception(f"Unknown type: {type_name} ({path})") Exception: Unknown type: ByteProperty (.SaveParameter.Rank)

Gives me an error after getting the Level.sav from updated server after the update v0.3.7. Any suggestions/inputs on how to fix this?

deafdudecomputers avatar Sep 17 '24 05:09 deafdudecomputers

AND Exception: Unknown type: ByteProperty (.SaveParameter.Talent_HP)

Choi-Jungwoo avatar Sep 17 '24 07:09 Choi-Jungwoo

TestSavev0.3.7.zip Thought I should attach my updated save from my server after updating to v0.3.7 just in case to help you debug and finding the potential fix.

deafdudecomputers avatar Sep 17 '24 13:09 deafdudecomputers

Thanks to Choi-Jungwoo above, the tool has a temporary solution.

palworld_save_tools.zip

Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

deafdudecomputers avatar Sep 18 '24 18:09 deafdudecomputers

I've compared values between IV stats + character levels and found the original values for the fields are stored in the upper 8 bits of the uint16, e.g.:

512 -> 2
4608 -> 18
5120 -> 20
7168 -> 28
9216 -> 36

(New vals on left, original on right, right values are the same as left >> 8) (Less like uint16, more like uint8 (value) and another uint8 (padding?))

unknown_str always seems to be "None" for my sample

tylercamp avatar Sep 18 '24 23:09 tylercamp

Thanks to Choi-Jungwoo above, the tool has a temporary solution.

palworld_save_tools.zip

Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

Are you saying that the code in that .zip file can properly convert the Level.sav file to JSON?

MuchDevSuchCode avatar Sep 19 '24 02:09 MuchDevSuchCode

Thanks to Choi-Jungwoo above, the tool has a temporary solution. palworld_save_tools.zip Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

Are you saying that the code in that .zip file can properly convert the Level.sav file to JSON?

As far as I am concerned, and on multiple saves, yes - it should.

I also used it for converting from local to dedicated server, and via versa, seems to be working without any issues. As far as I know.

deafdudecomputers avatar Sep 19 '24 02:09 deafdudecomputers

The only issue I can see, is if we try to use this version of tool with older saves that aren't updated on/after v0.3.7 patch, it'll error out. Besides that, the saves on/after v0.3.7 patch will work as intended.

deafdudecomputers avatar Sep 19 '24 03:09 deafdudecomputers

Checking if Python is installed as python3 INFO: Could not find files for the given pattern(s). Checking if Python is installed as python C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python.exe Found Python at python Python version: Python 3.12.6 Converting C:\TCAFiles\Users\bobasaurs\14\Pal\Saved\SaveGames\0\B378F4FE4EFAF82D90BE9399231CD6A0\Level.sav to JSON, saving to C:\TCAFiles\Users\bobasaurs\14\Pal\Saved\SaveGames\0\B378F4FE4EFAF82D90BE9399231CD6A0\Level.sav.json Decompressing sav file Loading GVAS file Traceback (most recent call last): File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\convert.py", line 164, in main() File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\convert.py", line 75, in main convert_sav_to_json( File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\convert.py", line 118, in convert_sav_to_json gvas_file = GvasFile.read( ^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\gvas.py", line 131, in read gvas_file.properties = reader.properties_until_end() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 399, in property value = self.struct(path) ^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 515, in struct value = self.struct_value(struct_type, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 477, in property value = self.prop_value(value_type, value_struct_type, value_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 499, in prop_value return self.struct_value(struct_type_name, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 396, in property value = self.custom_properties[path][0](self, type_name, size, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\rawdata\character.py", line 13, in decode value["value"] = decode_bytes(reader, char_bytes) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\rawdata\character.py", line 22, in decode_bytes "object": reader.properties_until_end(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 399, in property value = self.struct(path) ^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 515, in struct value = self.struct_value(struct_type, path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 542, in struct_value return self.properties_until_end(path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 386, in properties_until_end properties[name] = self.property(type_name, size, f"{path}.{name}") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\Downloads\palworld-save-tools-windows-v0.23.1\palworld_save_tools\archive.py", line 493, in property raise Exception(f"Unknown type: {type_name} ({path})") Exception: Unknown type: ByteProperty (.SaveParameter.Level) Press any key to continue . . .

fresh world save today gives this error ?

bmwdeejay avatar Sep 19 '24 20:09 bmwdeejay

Thanks to Choi-Jungwoo above, the tool has a temporary solution. palworld_save_tools.zip Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

Are you saying that the code in that .zip file can properly convert the Level.sav file to JSON?

As far as I am concerned, and on multiple saves, yes - it should.

I also used it for converting from local to dedicated server, and via versa, seems to be working without any issues. As far as I know.

Would you mind sharing an example of the command syntax you're using? I cant seem to get it to work no matter what.

MuchDevSuchCode avatar Sep 20 '24 01:09 MuchDevSuchCode

Thanks to Choi-Jungwoo above, the tool has a temporary solution. palworld_save_tools.zip Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

Are you saying that the code in that .zip file can properly convert the Level.sav file to JSON?

As far as I am concerned, and on multiple saves, yes - it should. I also used it for converting from local to dedicated server, and via versa, seems to be working without any issues. As far as I know.

Would you mind sharing an example of the command syntax you're using? I cant seem to get it to work no matter what.

I use my own script batch to launch convert.py. I have a repo of it if you want to check.

Basically, it's just "python convert.py Level.sav" for me.

deafdudecomputers avatar Sep 20 '24 04:09 deafdudecomputers

Thanks to Choi-Jungwoo above, the tool has a temporary solution. palworld_save_tools.zip Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

Are you saying that the code in that .zip file can properly convert the Level.sav file to JSON?

As far as I am concerned, and on multiple saves, yes - it should. I also used it for converting from local to dedicated server, and via versa, seems to be working without any issues. As far as I know.

Would you mind sharing an example of the command syntax you're using? I cant seem to get it to work no matter what.

I use my own script batch to launch convert.py. I have a repo of it if you want to check.

Basically, it's just "python convert.py Level.sav" for me.

Yes, please share your repo. Thanks!

MuchDevSuchCode avatar Sep 20 '24 16:09 MuchDevSuchCode

https://github.com/deafdudecomputers/PalWorldSaveTools This is my repo.

deafdudecomputers avatar Sep 21 '24 00:09 deafdudecomputers

https://github.com/deafdudecomputers/PalWorldSaveTools This is my repo.

Hilarious! Your repo was the one I actually used for a long while now. I only found this one after the update broke your tool. I love your work, thanks for doing it.

MuchDevSuchCode avatar Sep 21 '24 04:09 MuchDevSuchCode

Nice to hear that, lol. Glad you like it. :)

deafdudecomputers avatar Sep 21 '24 05:09 deafdudecomputers

Thanks to Choi-Jungwoo above, the tool has a temporary solution.

palworld_save_tools.zip

Both archive.py and item_container_slots.py has been updated from v0.23.1 version of tool.

THANKS SO MUCH! I needed this to move my server from windows to linux the GUIDs are fucked and the new save format is ass and doesnt convert without this patched version

HaplessIdiot avatar Sep 27 '24 04:09 HaplessIdiot