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.
Files changed (193) hide show
  1. {arkparse-0.5.6 → arkparse-0.5.7}/PKG-INFO +2 -2
  2. {arkparse-0.5.6 → arkparse-0.5.7}/pyproject.toml +1 -1
  3. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/dino_api.py +33 -6
  4. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/equipment.py +14 -5
  5. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cryopods/cryopod.py +37 -36
  6. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino.py +5 -0
  7. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_armor.py +1 -1
  8. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment_with_durability.py +23 -19
  9. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/weapon.py +7 -2
  10. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_property.py +2 -4
  11. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_custom_item_data.py +3 -3
  12. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/save_context.py +33 -0
  13. {arkparse-0.5.6 → arkparse-0.5.7}/.gitignore +0 -0
  14. {arkparse-0.5.6 → arkparse-0.5.7}/LICENSE +0 -0
  15. {arkparse-0.5.6 → arkparse-0.5.7}/README.md +0 -0
  16. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/__init__.py +0 -0
  17. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/__init__.py +0 -0
  18. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/_deviating_structures.py +0 -0
  19. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/base_api.py +0 -0
  20. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/equipment_api.py +0 -0
  21. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/general_api.py +0 -0
  22. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/json_api.py +0 -0
  23. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/player_api.py +0 -0
  24. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/rcon_api.py +0 -0
  25. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/stackable_api.py +0 -0
  26. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/api/structure_api.py +0 -0
  27. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ark_tribe.py +0 -0
  28. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/ABERRATION.PNG +0 -0
  29. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/GENESIS_Ocean.png +0 -0
  30. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/GENESIS_OtherBiomes.png +0 -0
  31. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/LOST_COLONY.PNG +0 -0
  32. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/RAGNAROK.PNG +0 -0
  33. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/THE_ISLAND.PNG +0 -0
  34. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/__init__.py +0 -0
  35. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/heavy_inventory +0 -0
  36. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/make_composite.py +0 -0
  37. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/tamable_dinos.txt +0 -0
  38. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor +0 -0
  39. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_bp +0 -0
  40. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_bp_n.json +0 -0
  41. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/armor_n.json +0 -0
  42. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle +0 -0
  43. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_bp +0 -0
  44. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_bp_n.json +0 -0
  45. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/saddle_n.json +0 -0
  46. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield +0 -0
  47. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_bp +0 -0
  48. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_bp_n.json +0 -0
  49. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/shield_n.json +0 -0
  50. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon +0 -0
  51. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_bp +0 -0
  52. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_bp_n.json +0 -0
  53. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/equipment/weapon_n.json +0 -0
  54. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/inventory/with_item_n.json +0 -0
  55. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/stackable/stackable +0 -0
  56. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/stackable/stackable_n.json +0 -0
  57. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/trait/trait +0 -0
  58. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/assets/templates/trait/trait_n.json +0 -0
  59. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/__init__.py +0 -0
  60. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/consumables.py +0 -0
  61. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/dinos.py +0 -0
  62. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/placed_structures.py +0 -0
  63. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/player.py +0 -0
  64. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/resources.py +0 -0
  65. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/classes/traits.py +0 -0
  66. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/__init__.py +0 -0
  67. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_dino_trait.py +0 -0
  68. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_enum.py +0 -0
  69. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_equipment_stat.py +0 -0
  70. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_item_quality.py +0 -0
  71. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_map.py +0 -0
  72. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/enums/ark_stat.py +0 -0
  73. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ftp/__init__.py +0 -0
  74. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/ftp/ark_ftp_client.py +0 -0
  75. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/helpers/dino/is_wild_tamed.py +0 -0
  76. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/logging/__init__.py +0 -0
  77. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/logging/ark_save_logger.py +0 -0
  78. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/ark_game_object.py +0 -0
  79. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/bases/base.py +0 -0
  80. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/ark_cluster_data.py +0 -0
  81. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/cluster_data_dino.py +0 -0
  82. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/cluster_data/cluster_data_item.py +0 -0
  83. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/__init__.py +0 -0
  84. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/baby.py +0 -0
  85. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino_ai_controller.py +0 -0
  86. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/dino_id.py +0 -0
  87. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/pedigree.py +0 -0
  88. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/stats.py +0 -0
  89. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/tamed_baby.py +0 -0
  90. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/dinos/tamed_dino.py +0 -0
  91. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__armor_defaults.py +0 -0
  92. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__equipment.py +0 -0
  93. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/__init__.py +0 -0
  94. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/armor.py +0 -0
  95. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/saddle.py +0 -0
  96. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/equipment/shield.py +0 -0
  97. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/__parsed_object_base.py +0 -0
  98. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/dino_owner.py +0 -0
  99. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/inventory.py +0 -0
  100. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/inventory_item.py +0 -0
  101. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/object_crafter.py +0 -0
  102. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/object_owner.py +0 -0
  103. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/misc/trait.py +0 -0
  104. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/__init__.py +0 -0
  105. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/_stackable.py +0 -0
  106. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/ammo.py +0 -0
  107. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/stackables/resource.py +0 -0
  108. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/__init__.py +0 -0
  109. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/structure.py +0 -0
  110. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/object_model/structures/structure_with_inventory.py +0 -0
  111. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/__init__.py +0 -0
  112. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_base_value_parser.py +0 -0
  113. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_base_value_validator.py +0 -0
  114. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_binary_reader_base.py +0 -0
  115. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_byte_operator.py +0 -0
  116. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_fast_shim.py +0 -0
  117. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/__init__.py +0 -0
  118. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_insertor.py +0 -0
  119. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_parser.py +0 -0
  120. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/_property_replacer.py +0 -0
  121. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/ark_binary_parser.py +0 -0
  122. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/ark_property.py +0 -0
  123. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/__init__.py +0 -0
  124. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_dino_ancestor_entry.py +0 -0
  125. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_item_net_id.py +0 -0
  126. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_my_persistent_buff_datas.py +0 -0
  127. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_object_property.py +0 -0
  128. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_struct_type.py +0 -0
  129. {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
  130. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_unique_net_id_repl.py +0 -0
  131. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_vector.py +0 -0
  132. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_legacy_parsing/struct/ark_vector_bool_pair.py +0 -0
  133. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_insertor.py +0 -0
  134. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_parser.py +0 -0
  135. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/_property_replacer.py +0 -0
  136. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_archive.py +0 -0
  137. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_binary_parser.py +0 -0
  138. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_object.py +0 -0
  139. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_property_container.py +0 -0
  140. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_set.py +0 -0
  141. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/ark_value_type.py +0 -0
  142. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/array_property.py +0 -0
  143. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/game_object_reader_configuration.py +0 -0
  144. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/__init__.py +0 -0
  145. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/actor_transform.py +0 -0
  146. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_color.py +0 -0
  147. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_crafting_resource_requirement.py +0 -0
  148. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_dino_ancestor_entry.py +0 -0
  149. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_dino_order_id.py +0 -0
  150. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gacha_resource_struct.py +0 -0
  151. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gene_trait_struct.py +0 -0
  152. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_gigantoraptor_bonded_struct.py +0 -0
  153. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_int_point.py +0 -0
  154. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_item_craft_queue_entry.py +0 -0
  155. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_item_net_id.py +0 -0
  156. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_key_value_pair.py +0 -0
  157. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_linear_color.py +0 -0
  158. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_milestone_tree_level_and_index.py +0 -0
  159. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_my_persistent_buff_datas.py +0 -0
  160. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_object_property.py +0 -0
  161. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_painting_key_value.py +0 -0
  162. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_patrol_group_saved_data.py +0 -0
  163. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_player_death_reason.py +0 -0
  164. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_primal_saddle_structure.py +0 -0
  165. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_quat.py +0 -0
  166. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_rotator.py +0 -0
  167. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_server_custom_folder.py +0 -0
  168. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_struct_type.py +0 -0
  169. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tracked_actor_id_category_pair.py +0 -0
  170. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tracked_actor_id_category_pair_with_bool.py +0 -0
  171. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tribe_alliance.py +0 -0
  172. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_tribe_rank_group.py +0 -0
  173. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_unique_net_id_repl.py +0 -0
  174. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector.py +0 -0
  175. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector2d.py +0 -0
  176. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/ark_vector_bool_pair.py +0 -0
  177. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/object_reference.py +0 -0
  178. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/parsing/struct/unknown_struct.py +0 -0
  179. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_character_config.py +0 -0
  180. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_character_stats.py +0 -0
  181. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_persistent_buff_data.py +0 -0
  182. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_player.py +0 -0
  183. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/player/ark_tribute_item.py +0 -0
  184. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/__init__.py +0 -0
  185. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/asa_save.py +0 -0
  186. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/header_location.py +0 -0
  187. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/saves/save_connection.py +0 -0
  188. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/__init__.py +0 -0
  189. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/heatmap_visualization.py +0 -0
  190. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/import_file.py +0 -0
  191. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/json_utils.py +0 -0
  192. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/map_images.py +0 -0
  193. {arkparse-0.5.6 → arkparse-0.5.7}/src/arkparse/utils/tm_files.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: arkparse
3
- Version: 0.5.6
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>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "arkparse"
7
- version = "0.5.6"
7
+ version = "0.5.7"
8
8
  dependencies = [
9
9
  "rcon>=2.4.9",
10
10
  "numpy>=2.3.2",
@@ -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 = True, only_cryopodded = False) -> Dict[UUID, TamedDino]:
285
- all = self.get_all(include_cryos=include_cryopodded, include_wild=False, include_tamed=True, include_babies=True, only_cryopodded=only_cryopodded)
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 all.items() if isinstance(dino, TamedDino) and dino.cryopod is not None}
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 all.items() if isinstance(dino, TamedDino)}
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
- all_bps = [metal, riot, wood]
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
- 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]
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
- try:
47
- objects: List[ArkGameObject] = []
48
- if not is_legacy:
49
- parser.skip_bytes(8) # Skip the first 8 bytes (header)
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
- ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, True)
64
- objects = []
65
- parser.position = 4 if is_legacy else 12
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
- ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, False)
72
- except Exception as _:
73
- pass
74
- raise e
75
- parser.save_context.generate_unknown = False
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.generate_unknown = True
101
- try:
102
- obj = ArkGameObject(binary_reader=parser, no_header=True)
103
- except Exception as e:
104
- ArkSaveLogger.error_log(f"Error reading saddle data: {e}")
105
- parser.structured_print()
106
- parser.store()
107
- ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, True)
108
- obj = ArkGameObject(binary_reader=parser, no_header=True)
109
- ArkSaveLogger.set_log_level(ArkSaveLogger.LogTypes.PARSER, False)
110
- raise e
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)
@@ -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
@@ -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 or bp:
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.tek.all_bps:
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.scuba.pants or bp in Mek.transformer:
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 == ShieldBps.riot:
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 == Weapons.advanced.compound_bow:
56
+ elif bp in [Weapons.advanced.compound_bow, Weapons.cursed.compound_bow]:
55
57
  return 55
56
- elif bp == Weapons.primitive.sword:
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 == Weapons.primitive.crossbow or bp == Weapons.advanced.fabricated_crossbow:
64
+ elif bp in [Weapons.primitive.crossbow, Weapons.advanced.fabricated_crossbow, Weapons.cursed.crossbow]:
63
65
  return 100
64
- elif bp == Misc.harpoon:
66
+ elif bp in [Misc.harpoon, Weapons.cursed.harpoon]:
65
67
  return 100
66
- elif bp == Weapons.primitive.simple_pistol:
67
- return 60
68
- elif bp == Weapons.advanced.longneck:
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.primitive.shotgun, Weapons.advanced.chainsaw]:
76
+ elif bp in [Weapons.advanced.chainsaw, Weapons.cursed.chainsaw]:
71
77
  return 80
72
- elif bp == Weapons.advanced.fabricated_pistol:
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 == Weapons.advanced.tek_rifle:
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] or bp in Arma.all_bps:
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) * 100)
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 / 100, 1)
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.generate_unknown = True
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.generate_unknown = True
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