arkparser 0.1.2__tar.gz → 0.1.4__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.
- {arkparser-0.1.2 → arkparser-0.1.4}/PKG-INFO +55 -40
- {arkparser-0.1.2 → arkparser-0.1.4}/README.md +54 -39
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/__init__.py +4 -3
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/binary_reader.py +14 -10
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/map_config.py +23 -4
- arkparser-0.1.4/arkparser/common/normalization.py +45 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/version_detection.py +2 -2
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/data_models.py +23 -18
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/export.py +231 -78
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/__init__.py +1 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/cloud_inventory.py +6 -5
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/profile.py +65 -10
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/tribe.py +19 -11
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/world_save.py +55 -134
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/container.py +10 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/game_object.py +134 -23
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/character.py +13 -10
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/creature.py +72 -111
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/player.py +4 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/tribe.py +5 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/byte_property.py +3 -2
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/compound.py +55 -29
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/primitives.py +2 -3
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/registry.py +7 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/property_list.py +26 -21
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/registry.py +18 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/PKG-INFO +55 -40
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/SOURCES.txt +5 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/pyproject.toml +1 -1
- arkparser-0.1.4/tests/test_binary_reader.py +25 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_cloud_inventory.py +16 -0
- arkparser-0.1.4/tests/test_data_models.py +21 -0
- arkparser-0.1.4/tests/test_export.py +120 -0
- arkparser-0.1.4/tests/test_game_objects.py +43 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_models.py +47 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_profile.py +32 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_tribe.py +9 -1
- {arkparser-0.1.2 → arkparser-0.1.4}/tests/test_version_detection.py +24 -8
- arkparser-0.1.4/tests/test_world_save.py +840 -0
- arkparser-0.1.2/arkparser/py.typed +0 -0
- arkparser-0.1.2/tests/test_world_save.py +0 -252
- {arkparser-0.1.2 → arkparser-0.1.4}/LICENSE +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/exceptions.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/common/types.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/files/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/game_objects/location.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/item.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/stats.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/models/structure.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/properties/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/colors.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/misc.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser/structs/vectors.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/dependency_links.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/requires.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/arkparser.egg-info/top_level.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arkparser
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Pure Python parser for ARK: Survival Evolved and ARK: Survival Ascended save files
|
|
5
5
|
Author: Vertyco
|
|
6
6
|
License-Expression: MIT
|
|
@@ -97,13 +97,13 @@ A pure-Python library for parsing ARK: Survival Evolved (ASE) and ARK: Survival
|
|
|
97
97
|
|
|
98
98
|
## Features
|
|
99
99
|
|
|
100
|
-
- **Player Profiles** (`.arkprofile`)
|
|
101
|
-
- **Tribe Data** (`.arktribe`)
|
|
102
|
-
- **Cloud Inventory / Obelisk
|
|
103
|
-
- **World Saves** (`.ark`)
|
|
104
|
-
- **Dual Format
|
|
105
|
-
- **Export
|
|
106
|
-
- **Typed
|
|
100
|
+
- **Player Profiles** (`.arkprofile`): platform gamertag, character name, level, stats, engrams
|
|
101
|
+
- **Tribe Data** (`.arktribe`): members, ranks, logs, alliances
|
|
102
|
+
- **Cloud Inventory / Obelisk**: uploaded creatures, items, cryopod contents
|
|
103
|
+
- **World Saves** (`.ark`): full map state, including creatures, structures, items, and players
|
|
104
|
+
- **Dual Format**: automatic ASE (v5-6) / ASA (v7+, SQLite) detection
|
|
105
|
+
- **Export**: native JSON export with optional ASV-compatible naming and GPS coordinate conversion
|
|
106
|
+
- **Typed**: full type annotations, `py.typed` marker
|
|
107
107
|
|
|
108
108
|
## Installation
|
|
109
109
|
|
|
@@ -122,7 +122,8 @@ from arkparser import Profile
|
|
|
122
122
|
|
|
123
123
|
profile = Profile.load("path/to/player.arkprofile") # auto-detects ASE/ASA
|
|
124
124
|
|
|
125
|
-
print(profile.player_name) #
|
|
125
|
+
print(profile.player_name) # Platform gamertag / display name
|
|
126
|
+
print(profile.character_name) # In-game character name
|
|
126
127
|
print(profile.level) # 105
|
|
127
128
|
print(profile.tribe_id) # 1729028872
|
|
128
129
|
print(profile.engram_blueprints) # ["EngramEntry_Campfire_C", ...]
|
|
@@ -171,7 +172,7 @@ for item in inv.uploaded_items:
|
|
|
171
172
|
```python
|
|
172
173
|
from arkparser import WorldSave
|
|
173
174
|
|
|
174
|
-
# Works with both ASE (binary) and ASA (SQLite)
|
|
175
|
+
# Works with both ASE (binary) and ASA (SQLite); auto-detected
|
|
175
176
|
save = WorldSave.load("path/to/Extinction.ark") # ASE
|
|
176
177
|
save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
177
178
|
|
|
@@ -197,7 +198,7 @@ for obj in save.objects:
|
|
|
197
198
|
print(f"{tamed.name} Lv{tamed.level}")
|
|
198
199
|
```
|
|
199
200
|
|
|
200
|
-
### JSON Export
|
|
201
|
+
### JSON Export
|
|
201
202
|
|
|
202
203
|
```python
|
|
203
204
|
from arkparser import export_all
|
|
@@ -205,7 +206,7 @@ from arkparser.common import get_map_config
|
|
|
205
206
|
|
|
206
207
|
map_config = get_map_config("extinction.ark")
|
|
207
208
|
data = export_all(save, map_config)
|
|
208
|
-
# Returns: {"
|
|
209
|
+
# Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
|
|
209
210
|
```
|
|
210
211
|
|
|
211
212
|
Or export to files:
|
|
@@ -214,6 +215,18 @@ Or export to files:
|
|
|
214
215
|
from arkparser import export_to_files
|
|
215
216
|
|
|
216
217
|
export_to_files(save, "output/", map_config)
|
|
218
|
+
# Creates: tamed.json, wild.json, players.json, etc.
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
from arkparser import export_all, export_to_files
|
|
225
|
+
|
|
226
|
+
data = export_all(save, map_config, naming="asv")
|
|
227
|
+
# Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
|
|
228
|
+
|
|
229
|
+
export_to_files(save, "output/", map_config, naming="asv")
|
|
217
230
|
# Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
|
|
218
231
|
```
|
|
219
232
|
|
|
@@ -242,15 +255,17 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
242
255
|
|
|
243
256
|
#### Profile
|
|
244
257
|
|
|
245
|
-
`arkparser.files.profile.Profile
|
|
258
|
+
`arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
|
|
246
259
|
|
|
247
260
|
| Property | Type | Description |
|
|
248
261
|
|---|---|---|
|
|
249
|
-
| `player_name` | `str \| None` |
|
|
262
|
+
| `player_name` | `str \| None` | Platform gamertag / display name |
|
|
263
|
+
| `character_name` | `str \| None` | In-game character name, falling back to `player_name` when absent |
|
|
250
264
|
| `player_id` | `int \| None` | Unique player ID |
|
|
251
265
|
| `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
|
|
252
266
|
| `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
|
|
253
|
-
| `tribe_name` | `str \| None` | Always `None
|
|
267
|
+
| `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
|
|
268
|
+
| `is_female` | `bool \| None` | Parsed gender flag (`True` = female, `False` = male, `None` = absent) |
|
|
254
269
|
| `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
|
|
255
270
|
| `experience` | `float` | Total XP |
|
|
256
271
|
| `total_engram_points` | `int` | Engram points spent |
|
|
@@ -268,7 +283,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
268
283
|
|
|
269
284
|
#### Tribe (File Parser)
|
|
270
285
|
|
|
271
|
-
`arkparser.files.tribe.Tribe
|
|
286
|
+
`arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
|
|
272
287
|
|
|
273
288
|
| Property | Type | Description |
|
|
274
289
|
|---|---|---|
|
|
@@ -292,7 +307,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
292
307
|
|
|
293
308
|
#### CloudInventory
|
|
294
309
|
|
|
295
|
-
`arkparser.files.cloud_inventory.CloudInventory
|
|
310
|
+
`arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
|
|
296
311
|
|
|
297
312
|
| Property | Type | Description |
|
|
298
313
|
|---|---|---|
|
|
@@ -312,7 +327,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
312
327
|
|
|
313
328
|
#### WorldSave
|
|
314
329
|
|
|
315
|
-
`arkparser.files.world_save.WorldSave
|
|
330
|
+
`arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
|
|
316
331
|
|
|
317
332
|
| Property | Type | Description |
|
|
318
333
|
|---|---|---|
|
|
@@ -354,7 +369,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
354
369
|
|
|
355
370
|
#### GameObject
|
|
356
371
|
|
|
357
|
-
`arkparser.game_objects.game_object.GameObject
|
|
372
|
+
`arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
|
|
358
373
|
|
|
359
374
|
| Field | Type | Description |
|
|
360
375
|
|---|---|---|
|
|
@@ -380,7 +395,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
380
395
|
|
|
381
396
|
#### GameObjectContainer
|
|
382
397
|
|
|
383
|
-
`arkparser.game_objects.container.GameObjectContainer
|
|
398
|
+
`arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
|
|
384
399
|
|
|
385
400
|
| Method | Returns | Description |
|
|
386
401
|
|---|---|---|
|
|
@@ -403,7 +418,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
403
418
|
|
|
404
419
|
#### LocationData
|
|
405
420
|
|
|
406
|
-
`arkparser.game_objects.location.LocationData
|
|
421
|
+
`arkparser.game_objects.location.LocationData`: 3D position and rotation.
|
|
407
422
|
|
|
408
423
|
| Field | Type | Description |
|
|
409
424
|
|---|---|---|
|
|
@@ -428,7 +443,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
428
443
|
|
|
429
444
|
#### TamedCreature
|
|
430
445
|
|
|
431
|
-
`arkparser.models.creature.TamedCreature
|
|
446
|
+
`arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
|
|
432
447
|
|
|
433
448
|
| Property | Type | Description |
|
|
434
449
|
|---|---|---|
|
|
@@ -470,7 +485,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
470
485
|
|
|
471
486
|
#### WildCreature
|
|
472
487
|
|
|
473
|
-
`arkparser.models.creature.WildCreature
|
|
488
|
+
`arkparser.models.creature.WildCreature`: Wild creature with level and stats.
|
|
474
489
|
|
|
475
490
|
| Property | Type | Description |
|
|
476
491
|
|---|---|---|
|
|
@@ -490,7 +505,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
490
505
|
|
|
491
506
|
#### Player
|
|
492
507
|
|
|
493
|
-
`arkparser.models.player.Player
|
|
508
|
+
`arkparser.models.player.Player`: In-world player entity built from profile data.
|
|
494
509
|
|
|
495
510
|
| Property | Type | Description |
|
|
496
511
|
|---|---|---|
|
|
@@ -515,7 +530,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
515
530
|
|
|
516
531
|
#### Character
|
|
517
532
|
|
|
518
|
-
`arkparser.models.character.Character
|
|
533
|
+
`arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
|
|
519
534
|
|
|
520
535
|
| Property | Type | Description |
|
|
521
536
|
|---|---|---|
|
|
@@ -537,7 +552,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
537
552
|
|
|
538
553
|
#### Structure
|
|
539
554
|
|
|
540
|
-
`arkparser.models.structure.Structure
|
|
555
|
+
`arkparser.models.structure.Structure`: Placed structure with ownership and state.
|
|
541
556
|
|
|
542
557
|
| Property | Type | Description |
|
|
543
558
|
|---|---|---|
|
|
@@ -560,7 +575,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
560
575
|
|
|
561
576
|
#### Item
|
|
562
577
|
|
|
563
|
-
`arkparser.models.item.Item
|
|
578
|
+
`arkparser.models.item.Item`: Inventory item with quality and stats.
|
|
564
579
|
|
|
565
580
|
| Property | Type | Description |
|
|
566
581
|
|---|---|---|
|
|
@@ -583,7 +598,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
583
598
|
|
|
584
599
|
#### TribeModel
|
|
585
600
|
|
|
586
|
-
`arkparser.models.tribe.Tribe
|
|
601
|
+
`arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
|
|
587
602
|
|
|
588
603
|
| Property | Type | Description |
|
|
589
604
|
|---|---|---|
|
|
@@ -604,7 +619,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
604
619
|
|
|
605
620
|
#### TribeMember
|
|
606
621
|
|
|
607
|
-
`arkparser.models.tribe.TribeMember
|
|
622
|
+
`arkparser.models.tribe.TribeMember`: Individual tribe member.
|
|
608
623
|
|
|
609
624
|
| Field | Type | Description |
|
|
610
625
|
|---|---|---|
|
|
@@ -614,7 +629,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
614
629
|
|
|
615
630
|
#### TribeLogEntry
|
|
616
631
|
|
|
617
|
-
`arkparser.models.tribe.TribeLogEntry
|
|
632
|
+
`arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
|
|
618
633
|
|
|
619
634
|
| Field / Property | Type | Description |
|
|
620
635
|
|---|---|---|
|
|
@@ -629,7 +644,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
629
644
|
|
|
630
645
|
#### CreatureStats
|
|
631
646
|
|
|
632
|
-
`arkparser.models.stats.CreatureStats
|
|
647
|
+
`arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
|
|
633
648
|
|
|
634
649
|
| Field | Type | Description |
|
|
635
650
|
|---|---|---|
|
|
@@ -655,7 +670,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
655
670
|
|
|
656
671
|
#### Location
|
|
657
672
|
|
|
658
|
-
`arkparser.models.stats.Location
|
|
673
|
+
`arkparser.models.stats.Location`: 3D position with optional GPS conversion.
|
|
659
674
|
|
|
660
675
|
| Field | Type | Description |
|
|
661
676
|
|---|---|---|
|
|
@@ -682,7 +697,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
682
697
|
|
|
683
698
|
#### UploadedCreature
|
|
684
699
|
|
|
685
|
-
`arkparser.data_models.UploadedCreature
|
|
700
|
+
`arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
|
|
686
701
|
|
|
687
702
|
| Property | Type | Description |
|
|
688
703
|
|---|---|---|
|
|
@@ -702,7 +717,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
702
717
|
|
|
703
718
|
#### UploadedItem
|
|
704
719
|
|
|
705
|
-
`arkparser.data_models.UploadedItem
|
|
720
|
+
`arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
|
|
706
721
|
|
|
707
722
|
| Property | Type | Description |
|
|
708
723
|
|---|---|---|
|
|
@@ -723,7 +738,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
723
738
|
|
|
724
739
|
#### CryopodCreature
|
|
725
740
|
|
|
726
|
-
`arkparser.data_models.CryopodCreature
|
|
741
|
+
`arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
|
|
727
742
|
|
|
728
743
|
| Property | Type | Description |
|
|
729
744
|
|---|---|---|
|
|
@@ -746,7 +761,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
746
761
|
|
|
747
762
|
#### DinoStats
|
|
748
763
|
|
|
749
|
-
`arkparser.data_models.DinoStats
|
|
764
|
+
`arkparser.data_models.DinoStats`: Creature stat values (current and max).
|
|
750
765
|
|
|
751
766
|
| Field | Type | Description |
|
|
752
767
|
|---|---|---|
|
|
@@ -770,7 +785,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
770
785
|
|
|
771
786
|
### Export Functions
|
|
772
787
|
|
|
773
|
-
`arkparser.export
|
|
788
|
+
`arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
|
|
774
789
|
|
|
775
790
|
| Function | Returns | Description |
|
|
776
791
|
|---|---|---|
|
|
@@ -787,7 +802,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
787
802
|
|
|
788
803
|
### Map Config
|
|
789
804
|
|
|
790
|
-
`arkparser.common.map_config
|
|
805
|
+
`arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
|
|
791
806
|
|
|
792
807
|
| Function | Returns | Description |
|
|
793
808
|
|---|---|---|
|
|
@@ -801,7 +816,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
801
816
|
|
|
802
817
|
### Version Detection
|
|
803
818
|
|
|
804
|
-
`arkparser.common.version_detection
|
|
819
|
+
`arkparser.common.version_detection`: File format identification.
|
|
805
820
|
|
|
806
821
|
| Function | Returns | Description |
|
|
807
822
|
|---|---|---|
|
|
@@ -813,7 +828,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
813
828
|
|
|
814
829
|
### Exceptions
|
|
815
830
|
|
|
816
|
-
`arkparser.common.exceptions
|
|
831
|
+
`arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
|
|
817
832
|
|
|
818
833
|
| Exception | Description |
|
|
819
834
|
|---|---|
|
|
@@ -63,13 +63,13 @@ A pure-Python library for parsing ARK: Survival Evolved (ASE) and ARK: Survival
|
|
|
63
63
|
|
|
64
64
|
## Features
|
|
65
65
|
|
|
66
|
-
- **Player Profiles** (`.arkprofile`)
|
|
67
|
-
- **Tribe Data** (`.arktribe`)
|
|
68
|
-
- **Cloud Inventory / Obelisk
|
|
69
|
-
- **World Saves** (`.ark`)
|
|
70
|
-
- **Dual Format
|
|
71
|
-
- **Export
|
|
72
|
-
- **Typed
|
|
66
|
+
- **Player Profiles** (`.arkprofile`): platform gamertag, character name, level, stats, engrams
|
|
67
|
+
- **Tribe Data** (`.arktribe`): members, ranks, logs, alliances
|
|
68
|
+
- **Cloud Inventory / Obelisk**: uploaded creatures, items, cryopod contents
|
|
69
|
+
- **World Saves** (`.ark`): full map state, including creatures, structures, items, and players
|
|
70
|
+
- **Dual Format**: automatic ASE (v5-6) / ASA (v7+, SQLite) detection
|
|
71
|
+
- **Export**: native JSON export with optional ASV-compatible naming and GPS coordinate conversion
|
|
72
|
+
- **Typed**: full type annotations, `py.typed` marker
|
|
73
73
|
|
|
74
74
|
## Installation
|
|
75
75
|
|
|
@@ -88,7 +88,8 @@ from arkparser import Profile
|
|
|
88
88
|
|
|
89
89
|
profile = Profile.load("path/to/player.arkprofile") # auto-detects ASE/ASA
|
|
90
90
|
|
|
91
|
-
print(profile.player_name) #
|
|
91
|
+
print(profile.player_name) # Platform gamertag / display name
|
|
92
|
+
print(profile.character_name) # In-game character name
|
|
92
93
|
print(profile.level) # 105
|
|
93
94
|
print(profile.tribe_id) # 1729028872
|
|
94
95
|
print(profile.engram_blueprints) # ["EngramEntry_Campfire_C", ...]
|
|
@@ -137,7 +138,7 @@ for item in inv.uploaded_items:
|
|
|
137
138
|
```python
|
|
138
139
|
from arkparser import WorldSave
|
|
139
140
|
|
|
140
|
-
# Works with both ASE (binary) and ASA (SQLite)
|
|
141
|
+
# Works with both ASE (binary) and ASA (SQLite); auto-detected
|
|
141
142
|
save = WorldSave.load("path/to/Extinction.ark") # ASE
|
|
142
143
|
save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
143
144
|
|
|
@@ -163,7 +164,7 @@ for obj in save.objects:
|
|
|
163
164
|
print(f"{tamed.name} Lv{tamed.level}")
|
|
164
165
|
```
|
|
165
166
|
|
|
166
|
-
### JSON Export
|
|
167
|
+
### JSON Export
|
|
167
168
|
|
|
168
169
|
```python
|
|
169
170
|
from arkparser import export_all
|
|
@@ -171,7 +172,7 @@ from arkparser.common import get_map_config
|
|
|
171
172
|
|
|
172
173
|
map_config = get_map_config("extinction.ark")
|
|
173
174
|
data = export_all(save, map_config)
|
|
174
|
-
# Returns: {"
|
|
175
|
+
# Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
|
|
175
176
|
```
|
|
176
177
|
|
|
177
178
|
Or export to files:
|
|
@@ -180,6 +181,18 @@ Or export to files:
|
|
|
180
181
|
from arkparser import export_to_files
|
|
181
182
|
|
|
182
183
|
export_to_files(save, "output/", map_config)
|
|
184
|
+
# Creates: tamed.json, wild.json, players.json, etc.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
from arkparser import export_all, export_to_files
|
|
191
|
+
|
|
192
|
+
data = export_all(save, map_config, naming="asv")
|
|
193
|
+
# Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
|
|
194
|
+
|
|
195
|
+
export_to_files(save, "output/", map_config, naming="asv")
|
|
183
196
|
# Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
|
|
184
197
|
```
|
|
185
198
|
|
|
@@ -208,15 +221,17 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
208
221
|
|
|
209
222
|
#### Profile
|
|
210
223
|
|
|
211
|
-
`arkparser.files.profile.Profile
|
|
224
|
+
`arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
|
|
212
225
|
|
|
213
226
|
| Property | Type | Description |
|
|
214
227
|
|---|---|---|
|
|
215
|
-
| `player_name` | `str \| None` |
|
|
228
|
+
| `player_name` | `str \| None` | Platform gamertag / display name |
|
|
229
|
+
| `character_name` | `str \| None` | In-game character name, falling back to `player_name` when absent |
|
|
216
230
|
| `player_id` | `int \| None` | Unique player ID |
|
|
217
231
|
| `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
|
|
218
232
|
| `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
|
|
219
|
-
| `tribe_name` | `str \| None` | Always `None
|
|
233
|
+
| `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
|
|
234
|
+
| `is_female` | `bool \| None` | Parsed gender flag (`True` = female, `False` = male, `None` = absent) |
|
|
220
235
|
| `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
|
|
221
236
|
| `experience` | `float` | Total XP |
|
|
222
237
|
| `total_engram_points` | `int` | Engram points spent |
|
|
@@ -234,7 +249,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
234
249
|
|
|
235
250
|
#### Tribe (File Parser)
|
|
236
251
|
|
|
237
|
-
`arkparser.files.tribe.Tribe
|
|
252
|
+
`arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
|
|
238
253
|
|
|
239
254
|
| Property | Type | Description |
|
|
240
255
|
|---|---|---|
|
|
@@ -258,7 +273,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
258
273
|
|
|
259
274
|
#### CloudInventory
|
|
260
275
|
|
|
261
|
-
`arkparser.files.cloud_inventory.CloudInventory
|
|
276
|
+
`arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
|
|
262
277
|
|
|
263
278
|
| Property | Type | Description |
|
|
264
279
|
|---|---|---|
|
|
@@ -278,7 +293,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
278
293
|
|
|
279
294
|
#### WorldSave
|
|
280
295
|
|
|
281
|
-
`arkparser.files.world_save.WorldSave
|
|
296
|
+
`arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
|
|
282
297
|
|
|
283
298
|
| Property | Type | Description |
|
|
284
299
|
|---|---|---|
|
|
@@ -320,7 +335,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
320
335
|
|
|
321
336
|
#### GameObject
|
|
322
337
|
|
|
323
|
-
`arkparser.game_objects.game_object.GameObject
|
|
338
|
+
`arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
|
|
324
339
|
|
|
325
340
|
| Field | Type | Description |
|
|
326
341
|
|---|---|---|
|
|
@@ -346,7 +361,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
346
361
|
|
|
347
362
|
#### GameObjectContainer
|
|
348
363
|
|
|
349
|
-
`arkparser.game_objects.container.GameObjectContainer
|
|
364
|
+
`arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
|
|
350
365
|
|
|
351
366
|
| Method | Returns | Description |
|
|
352
367
|
|---|---|---|
|
|
@@ -369,7 +384,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
369
384
|
|
|
370
385
|
#### LocationData
|
|
371
386
|
|
|
372
|
-
`arkparser.game_objects.location.LocationData
|
|
387
|
+
`arkparser.game_objects.location.LocationData`: 3D position and rotation.
|
|
373
388
|
|
|
374
389
|
| Field | Type | Description |
|
|
375
390
|
|---|---|---|
|
|
@@ -394,7 +409,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
394
409
|
|
|
395
410
|
#### TamedCreature
|
|
396
411
|
|
|
397
|
-
`arkparser.models.creature.TamedCreature
|
|
412
|
+
`arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
|
|
398
413
|
|
|
399
414
|
| Property | Type | Description |
|
|
400
415
|
|---|---|---|
|
|
@@ -436,7 +451,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
436
451
|
|
|
437
452
|
#### WildCreature
|
|
438
453
|
|
|
439
|
-
`arkparser.models.creature.WildCreature
|
|
454
|
+
`arkparser.models.creature.WildCreature`: Wild creature with level and stats.
|
|
440
455
|
|
|
441
456
|
| Property | Type | Description |
|
|
442
457
|
|---|---|---|
|
|
@@ -456,7 +471,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
456
471
|
|
|
457
472
|
#### Player
|
|
458
473
|
|
|
459
|
-
`arkparser.models.player.Player
|
|
474
|
+
`arkparser.models.player.Player`: In-world player entity built from profile data.
|
|
460
475
|
|
|
461
476
|
| Property | Type | Description |
|
|
462
477
|
|---|---|---|
|
|
@@ -481,7 +496,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
481
496
|
|
|
482
497
|
#### Character
|
|
483
498
|
|
|
484
|
-
`arkparser.models.character.Character
|
|
499
|
+
`arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
|
|
485
500
|
|
|
486
501
|
| Property | Type | Description |
|
|
487
502
|
|---|---|---|
|
|
@@ -503,7 +518,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
503
518
|
|
|
504
519
|
#### Structure
|
|
505
520
|
|
|
506
|
-
`arkparser.models.structure.Structure
|
|
521
|
+
`arkparser.models.structure.Structure`: Placed structure with ownership and state.
|
|
507
522
|
|
|
508
523
|
| Property | Type | Description |
|
|
509
524
|
|---|---|---|
|
|
@@ -526,7 +541,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
526
541
|
|
|
527
542
|
#### Item
|
|
528
543
|
|
|
529
|
-
`arkparser.models.item.Item
|
|
544
|
+
`arkparser.models.item.Item`: Inventory item with quality and stats.
|
|
530
545
|
|
|
531
546
|
| Property | Type | Description |
|
|
532
547
|
|---|---|---|
|
|
@@ -549,7 +564,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
549
564
|
|
|
550
565
|
#### TribeModel
|
|
551
566
|
|
|
552
|
-
`arkparser.models.tribe.Tribe
|
|
567
|
+
`arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
|
|
553
568
|
|
|
554
569
|
| Property | Type | Description |
|
|
555
570
|
|---|---|---|
|
|
@@ -570,7 +585,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
570
585
|
|
|
571
586
|
#### TribeMember
|
|
572
587
|
|
|
573
|
-
`arkparser.models.tribe.TribeMember
|
|
588
|
+
`arkparser.models.tribe.TribeMember`: Individual tribe member.
|
|
574
589
|
|
|
575
590
|
| Field | Type | Description |
|
|
576
591
|
|---|---|---|
|
|
@@ -580,7 +595,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
580
595
|
|
|
581
596
|
#### TribeLogEntry
|
|
582
597
|
|
|
583
|
-
`arkparser.models.tribe.TribeLogEntry
|
|
598
|
+
`arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
|
|
584
599
|
|
|
585
600
|
| Field / Property | Type | Description |
|
|
586
601
|
|---|---|---|
|
|
@@ -595,7 +610,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
595
610
|
|
|
596
611
|
#### CreatureStats
|
|
597
612
|
|
|
598
|
-
`arkparser.models.stats.CreatureStats
|
|
613
|
+
`arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
|
|
599
614
|
|
|
600
615
|
| Field | Type | Description |
|
|
601
616
|
|---|---|---|
|
|
@@ -621,7 +636,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
621
636
|
|
|
622
637
|
#### Location
|
|
623
638
|
|
|
624
|
-
`arkparser.models.stats.Location
|
|
639
|
+
`arkparser.models.stats.Location`: 3D position with optional GPS conversion.
|
|
625
640
|
|
|
626
641
|
| Field | Type | Description |
|
|
627
642
|
|---|---|---|
|
|
@@ -648,7 +663,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
648
663
|
|
|
649
664
|
#### UploadedCreature
|
|
650
665
|
|
|
651
|
-
`arkparser.data_models.UploadedCreature
|
|
666
|
+
`arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
|
|
652
667
|
|
|
653
668
|
| Property | Type | Description |
|
|
654
669
|
|---|---|---|
|
|
@@ -668,7 +683,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
668
683
|
|
|
669
684
|
#### UploadedItem
|
|
670
685
|
|
|
671
|
-
`arkparser.data_models.UploadedItem
|
|
686
|
+
`arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
|
|
672
687
|
|
|
673
688
|
| Property | Type | Description |
|
|
674
689
|
|---|---|---|
|
|
@@ -689,7 +704,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
689
704
|
|
|
690
705
|
#### CryopodCreature
|
|
691
706
|
|
|
692
|
-
`arkparser.data_models.CryopodCreature
|
|
707
|
+
`arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
|
|
693
708
|
|
|
694
709
|
| Property | Type | Description |
|
|
695
710
|
|---|---|---|
|
|
@@ -712,7 +727,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
712
727
|
|
|
713
728
|
#### DinoStats
|
|
714
729
|
|
|
715
|
-
`arkparser.data_models.DinoStats
|
|
730
|
+
`arkparser.data_models.DinoStats`: Creature stat values (current and max).
|
|
716
731
|
|
|
717
732
|
| Field | Type | Description |
|
|
718
733
|
|---|---|---|
|
|
@@ -736,7 +751,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
736
751
|
|
|
737
752
|
### Export Functions
|
|
738
753
|
|
|
739
|
-
`arkparser.export
|
|
754
|
+
`arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
|
|
740
755
|
|
|
741
756
|
| Function | Returns | Description |
|
|
742
757
|
|---|---|---|
|
|
@@ -753,7 +768,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
753
768
|
|
|
754
769
|
### Map Config
|
|
755
770
|
|
|
756
|
-
`arkparser.common.map_config
|
|
771
|
+
`arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
|
|
757
772
|
|
|
758
773
|
| Function | Returns | Description |
|
|
759
774
|
|---|---|---|
|
|
@@ -767,7 +782,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
767
782
|
|
|
768
783
|
### Version Detection
|
|
769
784
|
|
|
770
|
-
`arkparser.common.version_detection
|
|
785
|
+
`arkparser.common.version_detection`: File format identification.
|
|
771
786
|
|
|
772
787
|
| Function | Returns | Description |
|
|
773
788
|
|---|---|---|
|
|
@@ -779,7 +794,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
779
794
|
|
|
780
795
|
### Exceptions
|
|
781
796
|
|
|
782
|
-
`arkparser.common.exceptions
|
|
797
|
+
`arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
|
|
783
798
|
|
|
784
799
|
| Exception | Description |
|
|
785
800
|
|---|---|
|
|
@@ -6,7 +6,7 @@ This package provides tools to parse various ARK save file formats:
|
|
|
6
6
|
- Profile: Player profile data (.arkprofile)
|
|
7
7
|
- Tribe: Tribe data (.arktribe)
|
|
8
8
|
- CloudInventory: Obelisk/cloud inventory data (no extension)
|
|
9
|
-
- WorldSave: World save data (.ark)
|
|
9
|
+
- WorldSave: World save data (.ark), auto-detects ASE binary and ASA SQLite
|
|
10
10
|
|
|
11
11
|
Supports both ASE (ARK: Survival Evolved) and ASA (ARK: Survival Ascended)
|
|
12
12
|
formats with automatic detection.
|
|
@@ -16,7 +16,8 @@ Example usage:
|
|
|
16
16
|
>>>
|
|
17
17
|
>>> # Load a player profile
|
|
18
18
|
>>> profile = Profile.load("path/to/profile.arkprofile")
|
|
19
|
-
>>> print(f"
|
|
19
|
+
>>> print(f"Gamertag: {profile.player_name}")
|
|
20
|
+
>>> print(f"Character: {profile.character_name}")
|
|
20
21
|
>>>
|
|
21
22
|
>>> # Load tribe data
|
|
22
23
|
>>> tribe = Tribe.load("path/to/tribe.arktribe")
|
|
@@ -26,7 +27,7 @@ Example usage:
|
|
|
26
27
|
>>> inv = CloudInventory.load("path/to/obelisk_file")
|
|
27
28
|
>>> print(f"Creatures: {inv.creature_count}, Items: {inv.item_count}")
|
|
28
29
|
>>>
|
|
29
|
-
>>> # Load any world save
|
|
30
|
+
>>> # Load any world save: ASE or ASA, auto-detected
|
|
30
31
|
>>> save = WorldSave.load("path/to/TheIsland.ark") # ASE
|
|
31
32
|
>>> save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
32
33
|
"""
|