arkparse 0.5.6__tar.gz → 0.5.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arkparse-0.5.6 → arkparse-0.5.7}/PKG-INFO +2 -2
- {arkparse-0.5.6 → arkparse-0.5.7}/pyproject.toml +1 -1
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/dino_api.py +33 -6
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/equipment.py +14 -5
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cryopods/cryopod.py +37 -36
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino.py +5 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_armor.py +1 -1
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_durability.py +23 -19
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/weapon.py +7 -2
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_property.py +2 -4
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_custom_item_data.py +3 -3
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/save_context.py +33 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/.gitignore +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/LICENSE +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/README.md +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/_deviating_structures.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/base_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/equipment_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/general_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/json_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/player_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/rcon_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/stackable_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/structure_api.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ark_tribe.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/ABERRATION.PNG +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/GENESIS_Ocean.png +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/GENESIS_OtherBiomes.png +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/LOST_COLONY.PNG +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/RAGNAROK.PNG +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/THE_ISLAND.PNG +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/heavy_inventory +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/make_composite.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/tamable_dinos.txt +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_bp +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_bp_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_bp +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_bp_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_bp +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_bp_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_bp +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_bp_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/inventory/with_item_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/stackable/stackable +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/stackable/stackable_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/trait/trait +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/trait/trait_n.json +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/consumables.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/dinos.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/placed_structures.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/player.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/resources.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/traits.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_dino_trait.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_enum.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_equipment_stat.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_item_quality.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_map.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_stat.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ftp/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ftp/ark_ftp_client.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/helpers/dino/is_wild_tamed.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/logging/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/logging/ark_save_logger.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/ark_game_object.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/bases/base.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/ark_cluster_data.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/cluster_data_dino.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/cluster_data_item.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/baby.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino_ai_controller.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino_id.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/pedigree.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/stats.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/tamed_baby.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/tamed_dino.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__armor_defaults.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/armor.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/saddle.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/shield.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/__parsed_object_base.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/dino_owner.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/inventory.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/inventory_item.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/object_crafter.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/object_owner.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/trait.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/_stackable.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/ammo.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/resource.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/structure.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/structure_with_inventory.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_base_value_parser.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_base_value_validator.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_binary_reader_base.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_byte_operator.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_fast_shim.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_insertor.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_parser.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_replacer.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/ark_binary_parser.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/ark_property.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_dino_ancestor_entry.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_item_net_id.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_my_persistent_buff_datas.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_object_property.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_struct_type.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_tracked_actor_id_category_pair_with_bool.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_unique_net_id_repl.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_vector.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_vector_bool_pair.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_insertor.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_parser.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_replacer.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_archive.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_binary_parser.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_object.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_property_container.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_set.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_value_type.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/array_property.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/game_object_reader_configuration.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/actor_transform.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_color.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_crafting_resource_requirement.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_dino_ancestor_entry.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_dino_order_id.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gacha_resource_struct.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gene_trait_struct.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gigantoraptor_bonded_struct.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_int_point.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_item_craft_queue_entry.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_item_net_id.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_key_value_pair.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_linear_color.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_milestone_tree_level_and_index.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_my_persistent_buff_datas.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_object_property.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_painting_key_value.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_patrol_group_saved_data.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_player_death_reason.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_primal_saddle_structure.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_quat.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_rotator.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_server_custom_folder.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_struct_type.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tracked_actor_id_category_pair.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tracked_actor_id_category_pair_with_bool.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tribe_alliance.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tribe_rank_group.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_unique_net_id_repl.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector2d.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector_bool_pair.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/object_reference.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/unknown_struct.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_character_config.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_character_stats.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_persistent_buff_data.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_player.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_tribute_item.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/asa_save.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/header_location.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/save_connection.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/__init__.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/heatmap_visualization.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/import_file.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/json_utils.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/map_images.py +0 -0
- {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/tm_files.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: arkparse
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.7
|
|
4
4
|
Summary: A package to parse and modify ark save files
|
|
5
5
|
Project-URL: Homepage, https://github.com/VincentHenauGithub/ark-save-parser
|
|
6
6
|
Author-email: Vincent Henau <vincent.henau.github@gmail.com>
|
|
@@ -51,7 +51,9 @@ _KNOWN_SPECIAL_CASES = [
|
|
|
51
51
|
"/Game/LostColony/Structures/CompanionBed/Structure/BP_CompanionBed_Base.BP_CompanionBed_Base_C",
|
|
52
52
|
"/Game/Water/Vessels/Brig/BrigShipBP.BrigShipBP_C",
|
|
53
53
|
"/Game/Water/Vessels/Brig/BrigShipPlayerFollowingBP_Miniboss.BrigShipPlayerFollowingBP_Miniboss_C",
|
|
54
|
-
"/Game/Water/Vessels/Sloop/SloopShipBP.SloopShipBP_C"
|
|
54
|
+
"/Game/Water/Vessels/Sloop/SloopShipBP.SloopShipBP_C",
|
|
55
|
+
"/Game/Dragontopia/Dragons/Eclipsar/Lumina/Lumina_Character_BP.Lumina_Character_BP_C",
|
|
56
|
+
"/Game/Dragontopia/Dragons/Eclipsar/Umbra/Umbra_Character_BP.Umbra_Character_BP_C"
|
|
55
57
|
]
|
|
56
58
|
|
|
57
59
|
|
|
@@ -81,6 +83,20 @@ class DinoApi:
|
|
|
81
83
|
def is_applicable_bp(blueprint: str) -> bool:
|
|
82
84
|
return DinoApi._DEFAULT_CONFIG.blueprint_name_filter(blueprint)
|
|
83
85
|
|
|
86
|
+
@staticmethod
|
|
87
|
+
def _get_tamed_reader_config(include_cryopodded: bool = True, only_cryopodded: bool = False) -> GameObjectReaderConfiguration:
|
|
88
|
+
if only_cryopodded:
|
|
89
|
+
property_names = ["CustomItemDatas"]
|
|
90
|
+
else:
|
|
91
|
+
property_names = ["TamedTimeStamp", "TamingTeamID"]
|
|
92
|
+
if include_cryopodded:
|
|
93
|
+
property_names.append("CustomItemDatas")
|
|
94
|
+
|
|
95
|
+
return GameObjectReaderConfiguration(
|
|
96
|
+
blueprint_name_filter=lambda name: name is not None and DinoApi.is_applicable_bp(name),
|
|
97
|
+
property_names=property_names,
|
|
98
|
+
)
|
|
99
|
+
|
|
84
100
|
def get_all_objects(self, config: GameObjectReaderConfiguration = None) -> Dict[UUID, ArkGameObject]:
|
|
85
101
|
reuse = False
|
|
86
102
|
|
|
@@ -280,14 +296,25 @@ class DinoApi:
|
|
|
280
296
|
|
|
281
297
|
def get_all_wild_tamables(self) -> Dict[UUID, Dino]:
|
|
282
298
|
return {key: dino for key, dino in self.get_all_wild().items() if dino.get_short_name() + "_C" not in Dinos.non_tameable.all_bps}
|
|
283
|
-
|
|
284
|
-
def get_all_tamed(self, include_cryopodded
|
|
285
|
-
|
|
299
|
+
|
|
300
|
+
def get_all_tamed(self, include_cryopodded=True, only_cryopodded=False) -> Dict[UUID, TamedDino]:
|
|
301
|
+
config = self._get_tamed_reader_config(
|
|
302
|
+
include_cryopodded=include_cryopodded,
|
|
303
|
+
only_cryopodded=only_cryopodded,
|
|
304
|
+
)
|
|
305
|
+
dinos = self.get_all(
|
|
306
|
+
config=config,
|
|
307
|
+
include_cryos=include_cryopodded,
|
|
308
|
+
include_wild=False,
|
|
309
|
+
include_tamed=True,
|
|
310
|
+
include_babies=True,
|
|
311
|
+
only_cryopodded=only_cryopodded,
|
|
312
|
+
)
|
|
286
313
|
|
|
287
314
|
if only_cryopodded:
|
|
288
|
-
tamed = {key: dino for key, dino in
|
|
315
|
+
tamed = {key: dino for key, dino in dinos.items() if isinstance(dino, TamedDino) and dino.cryopod is not None}
|
|
289
316
|
else:
|
|
290
|
-
tamed = {key: dino for key, dino in
|
|
317
|
+
tamed = {key: dino for key, dino in dinos.items() if isinstance(dino, TamedDino)}
|
|
291
318
|
|
|
292
319
|
if include_cryopodded:
|
|
293
320
|
return tamed
|
|
@@ -119,7 +119,10 @@ class Saddles:
|
|
|
119
119
|
crylophosaurus: str = "/Game/ASA/Dinos/Cryolophosaurus/Saddle/PrimalItemArmor_CryoSaddle.PrimalItemArmor_CryoSaddle_C"
|
|
120
120
|
deinonychus: str = "/Game/Valguero/Dinos/Deinonychus/PrimalItemArmor_DeinonychusSaddle.PrimalItemArmor_DeinonychusSaddle_C"
|
|
121
121
|
acrocanthosaurus: str = "/Game/ASA/Dinos/Acrocanthosaurus/Saddle/PrimalItemArmor_AcroSaddle.PrimalItemArmor_AcroSaddle_C"
|
|
122
|
-
|
|
122
|
+
axolotl: str = "/Game/Packs/TidesOfFortune/Dinos/Axolotl/PrimalItemArmor_AxolotlSaddle.PrimalItemArmor_AxolotlSaddle_C"
|
|
123
|
+
cherufe: str = "/Game/Genesis/Dinos/Cherufe/PrimalItemArmor_CherufeSaddle.PrimalItemArmor_CherufeSaddle_C"
|
|
124
|
+
giant_turtle: str = "/Game/Genesis/Dinos/GiantTurtle/PrimalItemArmor_GiantTurtleSaddle.PrimalItemArmor_GiantTurtleSaddle_C"
|
|
125
|
+
palaeoctopus: str = "/Game/Packs/TidesOfFortune/Dinos/Paleoctopus/Saddle/PrimalItemArmor_PalaeoctopusSaddle.PrimalItemArmor_PalaeoctopusSaddle_C"
|
|
123
126
|
|
|
124
127
|
all_bps = [yi_ling, archelon, ceratosaurus, deinosuchus, fasolasuchus, gigantoraptor_ASA,
|
|
125
128
|
shastasaurus, xiphactinus, saddle_cart_btt, rockdrake_btt, allo, ankylo,
|
|
@@ -136,7 +139,7 @@ class Saddles:
|
|
|
136
139
|
thorny_dragon, bison, deinotherium, dreadnoughtus, maelizard, gacha, gas_bags,
|
|
137
140
|
snow_owl, ravager, managarmr, velonosaur, helicoprion, gigantoraptor, desmodus,
|
|
138
141
|
soulwyn, gigadesmodus_platform, gigadesmodus, maelwyn, aureliax, ossidon, megaraptor,
|
|
139
|
-
pyromane, crylophosaurus, deinonychus, acrocanthosaurus]
|
|
142
|
+
pyromane, crylophosaurus, deinonychus, acrocanthosaurus, axolotl, cherufe, giant_turtle, palaeoctopus]
|
|
140
143
|
|
|
141
144
|
class Hazard:
|
|
142
145
|
boots: str = "/Game/Aberration/CoreBlueprints/Items/Armor/HazardSuit/PrimalItemArmor_HazardSuitBoots.PrimalItemArmor_HazardSuitBoots_C"
|
|
@@ -253,7 +256,8 @@ class Shields:
|
|
|
253
256
|
metal: str = "/Game/PrimalEarth/CoreBlueprints/Items/Armor/Shields/PrimalItemArmor_MetalShield.PrimalItemArmor_MetalShield_C"
|
|
254
257
|
riot: str = "/Game/PrimalEarth/CoreBlueprints/Items/Armor/Shields/PrimalItemArmor_TransparentRiotShield.PrimalItemArmor_TransparentRiotShield_C"
|
|
255
258
|
wood: str = "/Game/PrimalEarth/CoreBlueprints/Items/Armor/Shields/PrimalItemArmor_WoodShield.PrimalItemArmor_WoodShield_C"
|
|
256
|
-
|
|
259
|
+
tek: str = "/Game/PrimalEarth/CoreBlueprints/Items/Armor/Shields/PrimalItemArmor_ShieldTek.PrimalItemArmor_ShieldTek_C"
|
|
260
|
+
all_bps = [metal, riot, wood, tek]
|
|
257
261
|
|
|
258
262
|
class Desert:
|
|
259
263
|
boots: str = "/Game/ScorchedEarth/Outfits/PrimalItemArmor_DesertClothBoots.PrimalItemArmor_DesertClothBoots_C"
|
|
@@ -318,7 +322,7 @@ class Primitive:
|
|
|
318
322
|
crossbow: str = "/Game/PrimalEarth/CoreBlueprints/Weapons/PrimalItem_WeaponCrossbow.PrimalItem_WeaponCrossbow_C"
|
|
319
323
|
whip: str = "/Game/ScorchedEarth/WeaponWhip/PrimalItem_WeaponWhip.PrimalItem_WeaponWhip_C"
|
|
320
324
|
boomerang: str = "/Game/ScorchedEarth/WeaponBoomerang/PrimalItem_WeaponBoomerang.PrimalItem_WeaponBoomerang_C"
|
|
321
|
-
all_bps = [bow, slingshot, stone_club, torch, lance, pike, sword, shotgun, simple_pistol, crossbow]
|
|
325
|
+
all_bps = [bow, slingshot, stone_club, torch, lance, pike, sword, shotgun, simple_pistol, crossbow, whip, boomerang]
|
|
322
326
|
|
|
323
327
|
class Advanced:
|
|
324
328
|
compound_bow: str = "/Game/PrimalEarth/CoreBlueprints/Weapons/PrimalItem_WeaponCompoundBow.PrimalItem_WeaponCompoundBow_C"
|
|
@@ -334,7 +338,12 @@ class Advanced:
|
|
|
334
338
|
flamethrower: str = "/Game/ScorchedEarth/WeaponFlamethrower/PrimalItem_WeapFlamethrower.PrimalItem_WeapFlamethrower_C"
|
|
335
339
|
tek_spear: str = "/Game/LostColony/Weapons/TekSpear/PrimalItem_WeaponSpear_Tek.PrimalItem_WeaponSpear_Tek_C"
|
|
336
340
|
tek_sword: str = "/Game/PrimalEarth/CoreBlueprints/Weapons/PrimalItem_WeaponTekSword.PrimalItem_WeaponTekSword_C"
|
|
337
|
-
|
|
341
|
+
mining_drill: str = "/Game/Genesis/Weapons/MiningDrill/PrimalItem_WeaponMiningDrill.PrimalItem_WeaponMiningDrill_C"
|
|
342
|
+
hand_cannon: str = "/Game/Packs/TidesOfFortune/Weapons/HandCannon/WeaponItem/PrimalItem_WeaponHandCannon_ToF.PrimalItem_WeaponHandCannon_ToF_C"
|
|
343
|
+
tek_claws: str = "/Game/Genesis/Weapons/TekHandBlades/PrimalItem_WeaponTekClaws.PrimalItem_WeaponTekClaws_C"
|
|
344
|
+
tek_grenade_launcher: str = "/Game/Genesis/Weapons/TekGrenadeLauncher/PrimalItem_WeaponTekGrenadeLauncher.PrimalItem_WeaponTekGrenadeLauncher_C"
|
|
345
|
+
charge_lantern: str = "/Game/Aberration/WeaponRadioactiveLanternCharge/PrimalItem_WeaponRadioactiveLanternCharge.PrimalItem_WeaponRadioactiveLanternCharge_C"
|
|
346
|
+
all_bps = [compound_bow, fabricated_pistol, fabricated_shotgun, fabricated_sniper, fabricated_crossbow, longneck, assault_rifle, rocket_launcher, tek_rifle, chainsaw, flamethrower, tek_spear, tek_sword, mining_drill, hand_cannon, tek_claws, tek_grenade_launcher, charge_lantern]
|
|
338
347
|
|
|
339
348
|
class CursedWeapons:
|
|
340
349
|
chainsaw: str = "/Game/LostColony/CoreBlueprints/Items/CursedWeapons/PrimalItem_ChainSaw_Cursed.PrimalItem_ChainSaw_Cursed_C"
|
|
@@ -43,36 +43,38 @@ class EmbeddedCryopodData:
|
|
|
43
43
|
parser: ArkBinaryParser = ParserClass.from_deflated_data(bts)
|
|
44
44
|
parser.in_cryopod = True
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
nr_of_obj = parser.read_uint32()
|
|
51
|
-
ArkSaveLogger.parser_log(f"Number of embedded objects: {nr_of_obj}")
|
|
52
|
-
parser.save_context.generate_unknown = True
|
|
53
|
-
for _ in range(nr_of_obj):
|
|
54
|
-
objects.append(ArkGameObject(binary_reader=parser, from_custom_bytes=True))
|
|
55
|
-
for obj in objects:
|
|
56
|
-
# parser.position += 8 if is_legacy else 0
|
|
57
|
-
obj.read_props_at_offset(parser, legacy=is_legacy)
|
|
58
|
-
except Exception as e:
|
|
59
|
-
ArkSaveLogger.error_log(f"Error reading embedded cryopod data:")
|
|
60
|
-
parser.structured_print()
|
|
61
|
-
ArkSaveLogger.parser_log(f"Made structured print of parser at error")
|
|
46
|
+
# The embedded objects carry name ids absent from the save's
|
|
47
|
+
# name table, so unknown names are fabricated for this whole
|
|
48
|
+
# block (the debug re-parse in the except branch included).
|
|
49
|
+
with parser.save_context.unknown_names_allowed():
|
|
62
50
|
try:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
objects: List[ArkGameObject] = []
|
|
52
|
+
if not is_legacy:
|
|
53
|
+
parser.skip_bytes(8) # Skip the first 8 bytes (header)
|
|
54
|
+
nr_of_obj = parser.read_uint32()
|
|
55
|
+
ArkSaveLogger.parser_log(f"Number of embedded objects: {nr_of_obj}")
|
|
66
56
|
for _ in range(nr_of_obj):
|
|
67
57
|
objects.append(ArkGameObject(binary_reader=parser, from_custom_bytes=True))
|
|
68
58
|
for obj in objects:
|
|
69
59
|
# parser.position += 8 if is_legacy else 0
|
|
70
60
|
obj.read_props_at_offset(parser, legacy=is_legacy)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
61
|
+
except Exception as e:
|
|
62
|
+
ArkSaveLogger.error_log(f"Error reading embedded cryopod data:")
|
|
63
|
+
parser.structured_print()
|
|
64
|
+
ArkSaveLogger.parser_log(f"Made structured print of parser at error")
|
|
65
|
+
try:
|
|
66
|
+
ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, True)
|
|
67
|
+
objects = []
|
|
68
|
+
parser.position = 4 if is_legacy else 12
|
|
69
|
+
for _ in range(nr_of_obj):
|
|
70
|
+
objects.append(ArkGameObject(binary_reader=parser, from_custom_bytes=True))
|
|
71
|
+
for obj in objects:
|
|
72
|
+
# parser.position += 8 if is_legacy else 0
|
|
73
|
+
obj.read_props_at_offset(parser, legacy=is_legacy)
|
|
74
|
+
ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, False)
|
|
75
|
+
except Exception as _:
|
|
76
|
+
pass
|
|
77
|
+
raise e
|
|
76
78
|
|
|
77
79
|
if is_legacy:
|
|
78
80
|
ArkSaveLogger.parser_log("Parsed legacy cryopod data")
|
|
@@ -97,18 +99,17 @@ class EmbeddedCryopodData:
|
|
|
97
99
|
PropType = LegacyArkProperty
|
|
98
100
|
parser.skip_bytes(4)
|
|
99
101
|
ArkSaveLogger.objects_log("Detected legacy saddle data in cryopod")
|
|
100
|
-
parser.save_context.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
parser.save_context.generate_unknown = False
|
|
102
|
+
with parser.save_context.unknown_names_allowed():
|
|
103
|
+
try:
|
|
104
|
+
obj = ArkGameObject(binary_reader=parser, no_header=True)
|
|
105
|
+
except Exception as e:
|
|
106
|
+
ArkSaveLogger.error_log(f"Error reading saddle data: {e}")
|
|
107
|
+
parser.structured_print()
|
|
108
|
+
parser.store()
|
|
109
|
+
ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, True)
|
|
110
|
+
obj = ArkGameObject(binary_reader=parser, no_header=True)
|
|
111
|
+
ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, False)
|
|
112
|
+
raise e
|
|
112
113
|
|
|
113
114
|
props_to_purge = ['ItemQuantity', 'ItemStatValues', 'bAllowRemovalFromInventory', 'SteamUserItemID', 'CustomItemName', 'OriginalItemDropLocation', 'EggGenderOverride', 'ItemCustomClass', 'EggDinoAncestors', \
|
|
114
115
|
'NextSpoilingTime', 'ClusterSpoilingTimeUTC', 'CustomItemDatas', 'EggNumberMutationsApplied', 'EggNumberOfLevelUpPointsApplied', 'bHideFromInventoryDisplay', 'CustomItemColors', 'CustomCosmeticAuthVars', \
|
|
@@ -65,6 +65,11 @@ class Dino(ParsedObjectBase):
|
|
|
65
65
|
super().__init_props__()
|
|
66
66
|
|
|
67
67
|
self.is_female = self.object.get_property_value("bIsFemale", False)
|
|
68
|
+
|
|
69
|
+
# Special case for Lumina:
|
|
70
|
+
if "/Lumina/" in self.object.blueprint:
|
|
71
|
+
self.is_female = True
|
|
72
|
+
|
|
68
73
|
self.id_ = DinoId.from_data(self.object)
|
|
69
74
|
self.gene_traits = [GeneTrait(t) for t in self.object.get_array_property_value("GeneTraits")]
|
|
70
75
|
self.is_dead = self.object.get_property_value("bIsDead", False)
|
{arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_armor.py
RENAMED
|
@@ -58,7 +58,7 @@ class EquipmentWithArmor(EquipmentWithDurability):
|
|
|
58
58
|
SaddleBps.rock_drake_tek]:
|
|
59
59
|
return 45
|
|
60
60
|
elif bp in [SaddleBps.paracer, SaddleBps.diplodocus, SaddleBps.bronto, SaddleBps.paracer_platform,
|
|
61
|
-
SaddleBps.archelon, SaddleBps.carbo, MekBps.shield] or bp in Arma.all_bps:
|
|
61
|
+
SaddleBps.archelon, SaddleBps.carbo, SaddleBps.giant_turtle, MekBps.shield] or bp in Arma.all_bps:
|
|
62
62
|
# MekBps.shield is the M.D.S.M. (armor 20 per wiki); the doggo saddle
|
|
63
63
|
# (Arma.all_bps) is a 20-armor saddle.
|
|
64
64
|
return 20
|
{arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_durability.py
RENAMED
|
@@ -20,13 +20,15 @@ class EquipmentWithDurability(Equipment):
|
|
|
20
20
|
return 50
|
|
21
21
|
elif bp in ArmorBps.ghillie.all_bps or bp in ArmorBps.leather.all_bps or bp in ArmorBps.desert.all_bps:
|
|
22
22
|
return 45
|
|
23
|
-
elif bp in ArmorBps.fur.all_bps or bp in ArmorBps.arctic.all_bps
|
|
23
|
+
elif bp in ArmorBps.fur.all_bps or bp in ArmorBps.arctic.all_bps:
|
|
24
24
|
return 125
|
|
25
25
|
elif bp in ArmorBps.cloth.all_bps:
|
|
26
26
|
return 25
|
|
27
|
-
elif bp in ArmorBps.riot.all_bps or bp in ArmorBps.flak.all_bps or bp in ArmorBps.
|
|
27
|
+
elif bp in ArmorBps.riot.all_bps or bp in ArmorBps.cursed_riot.all_bps or bp in ArmorBps.flak.all_bps or bp in ArmorBps.cursed_flak.all_bps:
|
|
28
28
|
return 120
|
|
29
|
-
elif bp in ArmorBps.
|
|
29
|
+
elif bp in ArmorBps.tek.all_bps or bp in ArmorBps.cursed_tek.all_bps:
|
|
30
|
+
return 300
|
|
31
|
+
elif bp in [ArmorBps.scuba.pants, Mek.transformer]:
|
|
30
32
|
return 50
|
|
31
33
|
elif bp in [ArmorBps.scuba.chest, ArmorBps.scuba.flippers, ArmorBps.scuba.goggles]:
|
|
32
34
|
return 45
|
|
@@ -34,7 +36,7 @@ class EquipmentWithDurability(Equipment):
|
|
|
34
36
|
return 85.5
|
|
35
37
|
elif bp == ShieldBps.metal:
|
|
36
38
|
return 1250
|
|
37
|
-
elif bp
|
|
39
|
+
elif bp in [ShieldBps.riot, ShieldBps.tek]:
|
|
38
40
|
return 2300
|
|
39
41
|
elif bp == ShieldBps.wood:
|
|
40
42
|
return 350
|
|
@@ -51,38 +53,40 @@ class EquipmentWithDurability(Equipment):
|
|
|
51
53
|
return 500
|
|
52
54
|
elif bp in SaddleBps.all_bps:
|
|
53
55
|
return 100
|
|
54
|
-
elif bp
|
|
56
|
+
elif bp in [Weapons.advanced.compound_bow, Weapons.cursed.compound_bow]:
|
|
55
57
|
return 55
|
|
56
|
-
elif bp
|
|
58
|
+
elif bp in [Weapons.primitive.sword, Weapons.cursed.sword]:
|
|
57
59
|
return 70
|
|
58
60
|
elif bp == Misc.prod:
|
|
59
61
|
return 10
|
|
60
62
|
elif bp == Weapons.primitive.bow:
|
|
61
63
|
return 50
|
|
62
|
-
elif bp
|
|
64
|
+
elif bp in [Weapons.primitive.crossbow, Weapons.advanced.fabricated_crossbow, Weapons.cursed.crossbow]:
|
|
63
65
|
return 100
|
|
64
|
-
elif bp
|
|
66
|
+
elif bp in [Misc.harpoon, Weapons.cursed.harpoon]:
|
|
65
67
|
return 100
|
|
66
|
-
elif bp == Weapons.
|
|
67
|
-
return
|
|
68
|
-
elif bp
|
|
68
|
+
elif bp == Weapons.advanced.mining_drill:
|
|
69
|
+
return 700
|
|
70
|
+
elif bp in [Weapons.advanced.tek_claws, Weapons.advanced.tek_sword, Weapons.advanced.tek_grenade_launcher]:
|
|
71
|
+
return 140
|
|
72
|
+
elif bp in [Weapons.advanced.charge_lantern, Weapons.primitive.shotgun, Weapons.advanced.fabricated_shotgun, Weapons.cursed.fabricated_shotgun]:
|
|
73
|
+
return 300
|
|
74
|
+
elif bp in [Weapons.advanced.longneck, Weapons.cursed.longneck, Weapons.advanced.fabricated_sniper, Weapons.cursed.fabricated_sniper]:
|
|
69
75
|
return 70
|
|
70
|
-
elif bp in [Weapons.
|
|
76
|
+
elif bp in [Weapons.advanced.chainsaw, Weapons.cursed.chainsaw]:
|
|
71
77
|
return 80
|
|
72
|
-
elif bp
|
|
78
|
+
elif bp in [Weapons.primitive.simple_pistol, Weapons.advanced.fabricated_pistol, Weapons.cursed.fabricated_pistol, Weapons.advanced.hand_cannon]:
|
|
73
79
|
return 60
|
|
74
|
-
elif bp == Weapons.advanced.fabricated_shotgun:
|
|
75
|
-
return 120
|
|
76
|
-
elif bp == Weapons.advanced.fabricated_sniper:
|
|
77
|
-
return 70
|
|
78
80
|
elif bp == Weapons.advanced.rocket_launcher:
|
|
79
81
|
return 120
|
|
80
|
-
elif bp
|
|
82
|
+
elif bp in [Weapons.advanced.tek_rifle, Weapons.cursed.tek_rifle]:
|
|
81
83
|
return 80
|
|
82
84
|
elif bp in [Weapons.gathering.sickle, Weapons.gathering.metal_hatchet, Weapons.gathering.metal_pick,
|
|
83
85
|
Weapons.gathering.stone_hatchet, Weapons.gathering.stone_pick, Weapons.gathering.fishing_rod,
|
|
84
86
|
Weapons.advanced.assault_rifle, Weapons.primitive.slingshot, Weapons.primitive.stone_club,
|
|
85
|
-
Weapons.primitive.pike, Weapons.primitive.lance, Weapons.advanced.flamethrower, Weapons.primitive.torch
|
|
87
|
+
Weapons.primitive.pike, Weapons.primitive.lance, Weapons.advanced.flamethrower, Weapons.primitive.torch,
|
|
88
|
+
Weapons.cursed.metal_hatchet, Weapons.cursed.metal_pick, Weapons.cursed.assault_rifle,
|
|
89
|
+
Weapons.cursed.pike, Weapons.cursed.flamethrower, Weapons.cursed.tek_sword, Weapons.primitive.whip] or bp in Arma.all_bps:
|
|
86
90
|
return 40
|
|
87
91
|
elif bp == Misc.climb_pick:
|
|
88
92
|
return 65
|
|
@@ -10,6 +10,7 @@ from arkparse.utils.json_utils import DefaultJsonEncoder
|
|
|
10
10
|
|
|
11
11
|
from .__equipment import Equipment
|
|
12
12
|
from .__equipment_with_durability import EquipmentWithDurability
|
|
13
|
+
from arkparse.classes.equipment import Weapons
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class Weapon(EquipmentWithDurability):
|
|
@@ -37,16 +38,20 @@ class Weapon(EquipmentWithDurability):
|
|
|
37
38
|
def get_implemented_stats(self) -> list:
|
|
38
39
|
return super().get_implemented_stats() + [ArkEquipmentStat.DAMAGE]
|
|
39
40
|
|
|
41
|
+
def _get_damage_multiplier(self) -> float:
|
|
42
|
+
bp = getattr(self.object, 'blueprint', None) if hasattr(self, 'object') and self.object else None
|
|
43
|
+
return 0.003 if bp in [Weapons.advanced.tek_claws, Weapons.advanced.mining_drill, Weapons.advanced.tek_sword] else 0.01
|
|
44
|
+
|
|
40
45
|
def get_internal_value(self, stat: ArkEquipmentStat) -> int:
|
|
41
46
|
if stat == ArkEquipmentStat.DAMAGE:
|
|
42
|
-
value = int((self.damage - 100.0)
|
|
47
|
+
value = int(round((self.damage - 100.0) / self._get_damage_multiplier()))
|
|
43
48
|
return value if value >= 100 else 100
|
|
44
49
|
else:
|
|
45
50
|
return super().get_internal_value(stat)
|
|
46
51
|
|
|
47
52
|
def get_actual_value(self, stat: ArkEquipmentStat, internal_value: int) -> float:
|
|
48
53
|
if stat == ArkEquipmentStat.DAMAGE:
|
|
49
|
-
return round(100.0 + internal_value
|
|
54
|
+
return round(100.0 + internal_value * self._get_damage_multiplier(), 1)
|
|
50
55
|
else:
|
|
51
56
|
return super().get_actual_value(stat, internal_value)
|
|
52
57
|
|
|
@@ -178,10 +178,8 @@ class ArkProperty:
|
|
|
178
178
|
def read_property(byte_buffer: "ArkBinaryParser", in_array: bool = False, struct_end: int = -1) -> Optional["ArkProperty"]:
|
|
179
179
|
name_position = byte_buffer.get_position()
|
|
180
180
|
value_position = 0
|
|
181
|
-
byte_buffer.save_context.
|
|
182
|
-
|
|
183
|
-
key = byte_buffer.read_name()
|
|
184
|
-
byte_buffer.save_context.generate_unknown = False
|
|
181
|
+
with byte_buffer.save_context.unknown_names_allowed():
|
|
182
|
+
key = byte_buffer.read_name()
|
|
185
183
|
|
|
186
184
|
if key is None or key == "None":
|
|
187
185
|
ArkSaveLogger.parser_log("Exiting struct (None marker) (pos = " + str(byte_buffer.get_position()) + " (hex: " + hex(byte_buffer.get_position()) + "))")
|
|
@@ -47,8 +47,10 @@ class ArkCustomItemData:
|
|
|
47
47
|
skins: list[str] = None
|
|
48
48
|
|
|
49
49
|
def __init__(self, ark_binary_data: "ArkBinaryParser"):
|
|
50
|
-
ark_binary_data.save_context.
|
|
50
|
+
with ark_binary_data.save_context.unknown_names_allowed():
|
|
51
|
+
self.__read_body(ark_binary_data)
|
|
51
52
|
|
|
53
|
+
def __read_body(self, ark_binary_data: "ArkBinaryParser"):
|
|
52
54
|
total_size = self.__read_header(ark_binary_data)
|
|
53
55
|
data_start = ark_binary_data.position
|
|
54
56
|
ArkSaveLogger.parser_log(f"Reading CustomItemData at position {data_start}, expected size: {total_size} bytes")
|
|
@@ -117,8 +119,6 @@ class ArkCustomItemData:
|
|
|
117
119
|
ArkSaveLogger.parser_log(f"Float: {float_value}")
|
|
118
120
|
for name in self.names:
|
|
119
121
|
ArkSaveLogger.parser_log(f"Name: {name}")
|
|
120
|
-
|
|
121
|
-
ark_binary_data.save_context.generate_unknown = False
|
|
122
122
|
|
|
123
123
|
def to_json_obj(self, include_byte_arrays: bool = False):
|
|
124
124
|
json_obj = { "doubles": self.doubles,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from typing import Dict, List, Optional, TYPE_CHECKING
|
|
2
|
+
import threading
|
|
2
3
|
import uuid
|
|
4
|
+
from contextlib import contextmanager
|
|
3
5
|
from pathlib import Path
|
|
4
6
|
import random
|
|
5
7
|
import json
|
|
@@ -22,11 +24,42 @@ class SaveContext:
|
|
|
22
24
|
self.unknown_value: int = 0
|
|
23
25
|
self.npc_zone_volumes: List["NpcZoneVolume"] = []
|
|
24
26
|
self.all_uuids: List[uuid.UUID] = []
|
|
27
|
+
# generate_unknown is per-thread (see the property below); one SaveContext
|
|
28
|
+
# is shared by every worker thread of a parallel parse.
|
|
29
|
+
self._local = threading.local()
|
|
25
30
|
self.generate_unknown: bool = False
|
|
26
31
|
self._has_name_table: bool = False # Cached flag for fast lookup
|
|
27
32
|
self.current_time = 0
|
|
28
33
|
self.current_day = 0
|
|
29
34
|
|
|
35
|
+
@property
|
|
36
|
+
def generate_unknown(self) -> bool:
|
|
37
|
+
"""Whether name ids missing from the name table are fabricated instead of
|
|
38
|
+
raising. Thread-local: on free-threaded builds `get_game_objects` parses
|
|
39
|
+
with a ThreadPoolExecutor over this single shared context, so a plain
|
|
40
|
+
attribute would let one thread switch it off while another is still
|
|
41
|
+
inside a region that needs it on."""
|
|
42
|
+
return getattr(self._local, "generate_unknown", False)
|
|
43
|
+
|
|
44
|
+
@generate_unknown.setter
|
|
45
|
+
def generate_unknown(self, value: bool) -> None:
|
|
46
|
+
self._local.generate_unknown = bool(value)
|
|
47
|
+
|
|
48
|
+
@contextmanager
|
|
49
|
+
def unknown_names_allowed(self):
|
|
50
|
+
"""Fabricate unknown names for the duration of the block.
|
|
51
|
+
|
|
52
|
+
Restores the previous value rather than forcing it off, so nested
|
|
53
|
+
regions (a property read inside a CustomItemData, say) don't clobber
|
|
54
|
+
the enclosing one, and an exception can't leak the flag on.
|
|
55
|
+
"""
|
|
56
|
+
previous = self.generate_unknown
|
|
57
|
+
self.generate_unknown = True
|
|
58
|
+
try:
|
|
59
|
+
yield
|
|
60
|
+
finally:
|
|
61
|
+
self.generate_unknown = previous
|
|
62
|
+
|
|
30
63
|
def get_actor_transform(self, uuid_: uuid.UUID) -> Optional[ActorTransform]:
|
|
31
64
|
return self.actor_transforms.get(uuid_)
|
|
32
65
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|