cheahjs / palworld-save-tools

Tools for converting Palworld .sav files to JSON and back
MIT License
766 stars 64 forks source link

Incompatibility with v0.2.4.0 #174

Open Banxiaxiala opened 1 month ago

Banxiaxiala commented 1 month ago

Common issues before reporting

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.

Exception: Warning: EOF not reached for Droppedcharacter PalMapObjectDeathDroppedcharacterModel: ori.8576756849d439409646b2c2e8a481f95f6s52dd9355044a3d9a658e2c6ficd5acd391763892641932dbddd1E5746100000000000000000000060fc0fd51400000000000 remaining:12 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.

8A023B7F456537A98BCF68B5733BE13E.zip

idarlund commented 1 month ago

Getting same error in linux. Under is traceback. Seems like someone died on the server and maybe didn't pick up the stuff left behind, maybe? Is there a workaround for this issue?

Loading GVAS file
Traceback (most recent call last):
  File "/home/steam/.local/bin/palworld-save-tools", line 8, in 
    sys.exit(main())
             ^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/commands/convert.py", line 71, in main
    convert_sav_to_json(
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/commands/convert.py", line 114, in convert_sav_to_json
    gvas_file = GvasFile.read(
                ^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/gvas.py", line 131, in read
    gvas_file.properties = reader.properties_until_end()
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 386, in properties_until_end
    properties[name] = self.property(type_name, size, f"{path}.{name}")
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 399, in property
    value = self.struct(path)
            ^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 510, in struct
    value = self.struct_value(struct_type, path)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 537, in struct_value
    return self.properties_until_end(path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 386, in properties_until_end
    properties[name] = self.property(type_name, size, f"{path}.{name}")
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/archive.py", line 396, in property
    value = self.custom_properties[path][0](self, type_name, size, path)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/rawdata/map_object.py", line 45, in decode
    map_concrete_model.decode_bytes(
  File "/home/steam/.local/lib/python3.12/site-packages/palworld_save_tools/rawdata/map_concrete_model.py", line 454, in decode_bytes
    raise Exception(
Exception: Warning: EOF not reached for DroppedCharacter PalMapObjectDeathDroppedCharacterModel: ori: 83e4fae26a4beabef29bc0859777015e9818f49de1461413b99cce90a0801ce2cfe2a78e8d4746e76e26b3afeb7752444050e235000000000000000000000000907628252013000001000000 remaining: 12            
cheahjs commented 1 month ago

I haven't had time to add compatibility. You will need to exclude map objects from being parsed for now with --custom-properties:

--custom-properties=.worldSaveData.GroupSaveDataMap,.worldSaveData.CharacterSaveParameterMap.Value.RawData,.worldSaveData.ItemContainerSaveData.Value.RawData,.worldSaveData.ItemContainerSaveData.Value.Slots.Slots.RawData,.worldSaveData.CharacterContainerSaveData.Value.Slots.Slots.RawData,.worldSaveData.DynamicItemSaveData.DynamicItemSaveData.RawData,.worldSaveData.FoliageGridSaveDataMap.Value.ModelMap.Value.RawData,.worldSaveData.FoliageGridSaveDataMap.Value.ModelMap.Value.InstanceDataMap.Value.RawData,.worldSaveData.BaseCampSaveData.Value.RawData,.worldSaveData.BaseCampSaveData.Value.WorkerDirector.RawData,.worldSaveData.BaseCampSaveData.Value.WorkCollection.RawData,.worldSaveData.BaseCampSaveData.Value.ModuleMap,.worldSaveData.WorkSaveData
idarlund commented 1 month ago

thanks for the workaround! this also opened my eyes to a more efficient parsing - as I only need some of the information in the sav file for my use-case <3