arkparser 0.1.2__tar.gz → 0.1.3__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.3}/PKG-INFO +50 -38
- {arkparser-0.1.2 → arkparser-0.1.3}/README.md +49 -37
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/__init__.py +2 -2
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/binary_reader.py +14 -10
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/map_config.py +23 -4
- arkparser-0.1.3/arkparser/common/normalization.py +45 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/version_detection.py +2 -2
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/data_models.py +23 -18
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/export.py +221 -78
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/__init__.py +1 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/cloud_inventory.py +6 -5
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/profile.py +15 -7
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/tribe.py +19 -11
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/world_save.py +55 -134
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/game_objects/container.py +10 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/game_objects/game_object.py +134 -23
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/character.py +13 -10
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/creature.py +72 -111
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/player.py +4 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/tribe.py +5 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/byte_property.py +3 -2
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/compound.py +55 -29
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/primitives.py +2 -3
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/registry.py +7 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/property_list.py +26 -21
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/registry.py +18 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser.egg-info/PKG-INFO +50 -38
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser.egg-info/SOURCES.txt +5 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/pyproject.toml +1 -1
- arkparser-0.1.3/tests/test_binary_reader.py +25 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/tests/test_cloud_inventory.py +16 -0
- arkparser-0.1.3/tests/test_data_models.py +21 -0
- arkparser-0.1.3/tests/test_export.py +118 -0
- arkparser-0.1.3/tests/test_game_objects.py +43 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/tests/test_models.py +47 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/tests/test_profile.py +7 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/tests/test_tribe.py +9 -1
- {arkparser-0.1.2 → arkparser-0.1.3}/tests/test_version_detection.py +24 -8
- arkparser-0.1.3/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.3}/LICENSE +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/exceptions.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/common/types.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/files/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/game_objects/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/game_objects/location.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/item.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/stats.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/models/structure.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/properties/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/__init__.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/base.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/colors.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/misc.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser/structs/vectors.py +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser.egg-info/dependency_links.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser.egg-info/requires.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/arkparser.egg-info/top_level.txt +0 -0
- {arkparser-0.1.2 → arkparser-0.1.3}/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.3
|
|
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`): 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
|
|
|
@@ -171,7 +171,7 @@ for item in inv.uploaded_items:
|
|
|
171
171
|
```python
|
|
172
172
|
from arkparser import WorldSave
|
|
173
173
|
|
|
174
|
-
# Works with both ASE (binary) and ASA (SQLite)
|
|
174
|
+
# Works with both ASE (binary) and ASA (SQLite); auto-detected
|
|
175
175
|
save = WorldSave.load("path/to/Extinction.ark") # ASE
|
|
176
176
|
save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
177
177
|
|
|
@@ -197,7 +197,7 @@ for obj in save.objects:
|
|
|
197
197
|
print(f"{tamed.name} Lv{tamed.level}")
|
|
198
198
|
```
|
|
199
199
|
|
|
200
|
-
### JSON Export
|
|
200
|
+
### JSON Export
|
|
201
201
|
|
|
202
202
|
```python
|
|
203
203
|
from arkparser import export_all
|
|
@@ -205,7 +205,7 @@ from arkparser.common import get_map_config
|
|
|
205
205
|
|
|
206
206
|
map_config = get_map_config("extinction.ark")
|
|
207
207
|
data = export_all(save, map_config)
|
|
208
|
-
# Returns: {"
|
|
208
|
+
# Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
|
|
209
209
|
```
|
|
210
210
|
|
|
211
211
|
Or export to files:
|
|
@@ -214,6 +214,18 @@ Or export to files:
|
|
|
214
214
|
from arkparser import export_to_files
|
|
215
215
|
|
|
216
216
|
export_to_files(save, "output/", map_config)
|
|
217
|
+
# Creates: tamed.json, wild.json, players.json, etc.
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
|
|
221
|
+
|
|
222
|
+
```python
|
|
223
|
+
from arkparser import export_all, export_to_files
|
|
224
|
+
|
|
225
|
+
data = export_all(save, map_config, naming="asv")
|
|
226
|
+
# Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
|
|
227
|
+
|
|
228
|
+
export_to_files(save, "output/", map_config, naming="asv")
|
|
217
229
|
# Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
|
|
218
230
|
```
|
|
219
231
|
|
|
@@ -242,7 +254,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
242
254
|
|
|
243
255
|
#### Profile
|
|
244
256
|
|
|
245
|
-
`arkparser.files.profile.Profile
|
|
257
|
+
`arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
|
|
246
258
|
|
|
247
259
|
| Property | Type | Description |
|
|
248
260
|
|---|---|---|
|
|
@@ -250,7 +262,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
250
262
|
| `player_id` | `int \| None` | Unique player ID |
|
|
251
263
|
| `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
|
|
252
264
|
| `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
|
|
253
|
-
| `tribe_name` | `str \| None` | Always `None
|
|
265
|
+
| `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
|
|
254
266
|
| `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
|
|
255
267
|
| `experience` | `float` | Total XP |
|
|
256
268
|
| `total_engram_points` | `int` | Engram points spent |
|
|
@@ -268,7 +280,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
268
280
|
|
|
269
281
|
#### Tribe (File Parser)
|
|
270
282
|
|
|
271
|
-
`arkparser.files.tribe.Tribe
|
|
283
|
+
`arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
|
|
272
284
|
|
|
273
285
|
| Property | Type | Description |
|
|
274
286
|
|---|---|---|
|
|
@@ -292,7 +304,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
292
304
|
|
|
293
305
|
#### CloudInventory
|
|
294
306
|
|
|
295
|
-
`arkparser.files.cloud_inventory.CloudInventory
|
|
307
|
+
`arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
|
|
296
308
|
|
|
297
309
|
| Property | Type | Description |
|
|
298
310
|
|---|---|---|
|
|
@@ -312,7 +324,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
312
324
|
|
|
313
325
|
#### WorldSave
|
|
314
326
|
|
|
315
|
-
`arkparser.files.world_save.WorldSave
|
|
327
|
+
`arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
|
|
316
328
|
|
|
317
329
|
| Property | Type | Description |
|
|
318
330
|
|---|---|---|
|
|
@@ -354,7 +366,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
354
366
|
|
|
355
367
|
#### GameObject
|
|
356
368
|
|
|
357
|
-
`arkparser.game_objects.game_object.GameObject
|
|
369
|
+
`arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
|
|
358
370
|
|
|
359
371
|
| Field | Type | Description |
|
|
360
372
|
|---|---|---|
|
|
@@ -380,7 +392,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
380
392
|
|
|
381
393
|
#### GameObjectContainer
|
|
382
394
|
|
|
383
|
-
`arkparser.game_objects.container.GameObjectContainer
|
|
395
|
+
`arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
|
|
384
396
|
|
|
385
397
|
| Method | Returns | Description |
|
|
386
398
|
|---|---|---|
|
|
@@ -403,7 +415,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
403
415
|
|
|
404
416
|
#### LocationData
|
|
405
417
|
|
|
406
|
-
`arkparser.game_objects.location.LocationData
|
|
418
|
+
`arkparser.game_objects.location.LocationData`: 3D position and rotation.
|
|
407
419
|
|
|
408
420
|
| Field | Type | Description |
|
|
409
421
|
|---|---|---|
|
|
@@ -428,7 +440,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
428
440
|
|
|
429
441
|
#### TamedCreature
|
|
430
442
|
|
|
431
|
-
`arkparser.models.creature.TamedCreature
|
|
443
|
+
`arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
|
|
432
444
|
|
|
433
445
|
| Property | Type | Description |
|
|
434
446
|
|---|---|---|
|
|
@@ -470,7 +482,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
470
482
|
|
|
471
483
|
#### WildCreature
|
|
472
484
|
|
|
473
|
-
`arkparser.models.creature.WildCreature
|
|
485
|
+
`arkparser.models.creature.WildCreature`: Wild creature with level and stats.
|
|
474
486
|
|
|
475
487
|
| Property | Type | Description |
|
|
476
488
|
|---|---|---|
|
|
@@ -490,7 +502,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
490
502
|
|
|
491
503
|
#### Player
|
|
492
504
|
|
|
493
|
-
`arkparser.models.player.Player
|
|
505
|
+
`arkparser.models.player.Player`: In-world player entity built from profile data.
|
|
494
506
|
|
|
495
507
|
| Property | Type | Description |
|
|
496
508
|
|---|---|---|
|
|
@@ -515,7 +527,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
515
527
|
|
|
516
528
|
#### Character
|
|
517
529
|
|
|
518
|
-
`arkparser.models.character.Character
|
|
530
|
+
`arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
|
|
519
531
|
|
|
520
532
|
| Property | Type | Description |
|
|
521
533
|
|---|---|---|
|
|
@@ -537,7 +549,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
537
549
|
|
|
538
550
|
#### Structure
|
|
539
551
|
|
|
540
|
-
`arkparser.models.structure.Structure
|
|
552
|
+
`arkparser.models.structure.Structure`: Placed structure with ownership and state.
|
|
541
553
|
|
|
542
554
|
| Property | Type | Description |
|
|
543
555
|
|---|---|---|
|
|
@@ -560,7 +572,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
560
572
|
|
|
561
573
|
#### Item
|
|
562
574
|
|
|
563
|
-
`arkparser.models.item.Item
|
|
575
|
+
`arkparser.models.item.Item`: Inventory item with quality and stats.
|
|
564
576
|
|
|
565
577
|
| Property | Type | Description |
|
|
566
578
|
|---|---|---|
|
|
@@ -583,7 +595,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
583
595
|
|
|
584
596
|
#### TribeModel
|
|
585
597
|
|
|
586
|
-
`arkparser.models.tribe.Tribe
|
|
598
|
+
`arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
|
|
587
599
|
|
|
588
600
|
| Property | Type | Description |
|
|
589
601
|
|---|---|---|
|
|
@@ -604,7 +616,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
604
616
|
|
|
605
617
|
#### TribeMember
|
|
606
618
|
|
|
607
|
-
`arkparser.models.tribe.TribeMember
|
|
619
|
+
`arkparser.models.tribe.TribeMember`: Individual tribe member.
|
|
608
620
|
|
|
609
621
|
| Field | Type | Description |
|
|
610
622
|
|---|---|---|
|
|
@@ -614,7 +626,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
614
626
|
|
|
615
627
|
#### TribeLogEntry
|
|
616
628
|
|
|
617
|
-
`arkparser.models.tribe.TribeLogEntry
|
|
629
|
+
`arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
|
|
618
630
|
|
|
619
631
|
| Field / Property | Type | Description |
|
|
620
632
|
|---|---|---|
|
|
@@ -629,7 +641,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
629
641
|
|
|
630
642
|
#### CreatureStats
|
|
631
643
|
|
|
632
|
-
`arkparser.models.stats.CreatureStats
|
|
644
|
+
`arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
|
|
633
645
|
|
|
634
646
|
| Field | Type | Description |
|
|
635
647
|
|---|---|---|
|
|
@@ -655,7 +667,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
655
667
|
|
|
656
668
|
#### Location
|
|
657
669
|
|
|
658
|
-
`arkparser.models.stats.Location
|
|
670
|
+
`arkparser.models.stats.Location`: 3D position with optional GPS conversion.
|
|
659
671
|
|
|
660
672
|
| Field | Type | Description |
|
|
661
673
|
|---|---|---|
|
|
@@ -682,7 +694,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
682
694
|
|
|
683
695
|
#### UploadedCreature
|
|
684
696
|
|
|
685
|
-
`arkparser.data_models.UploadedCreature
|
|
697
|
+
`arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
|
|
686
698
|
|
|
687
699
|
| Property | Type | Description |
|
|
688
700
|
|---|---|---|
|
|
@@ -702,7 +714,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
702
714
|
|
|
703
715
|
#### UploadedItem
|
|
704
716
|
|
|
705
|
-
`arkparser.data_models.UploadedItem
|
|
717
|
+
`arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
|
|
706
718
|
|
|
707
719
|
| Property | Type | Description |
|
|
708
720
|
|---|---|---|
|
|
@@ -723,7 +735,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
723
735
|
|
|
724
736
|
#### CryopodCreature
|
|
725
737
|
|
|
726
|
-
`arkparser.data_models.CryopodCreature
|
|
738
|
+
`arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
|
|
727
739
|
|
|
728
740
|
| Property | Type | Description |
|
|
729
741
|
|---|---|---|
|
|
@@ -746,7 +758,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
746
758
|
|
|
747
759
|
#### DinoStats
|
|
748
760
|
|
|
749
|
-
`arkparser.data_models.DinoStats
|
|
761
|
+
`arkparser.data_models.DinoStats`: Creature stat values (current and max).
|
|
750
762
|
|
|
751
763
|
| Field | Type | Description |
|
|
752
764
|
|---|---|---|
|
|
@@ -770,7 +782,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
770
782
|
|
|
771
783
|
### Export Functions
|
|
772
784
|
|
|
773
|
-
`arkparser.export
|
|
785
|
+
`arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
|
|
774
786
|
|
|
775
787
|
| Function | Returns | Description |
|
|
776
788
|
|---|---|---|
|
|
@@ -787,7 +799,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
787
799
|
|
|
788
800
|
### Map Config
|
|
789
801
|
|
|
790
|
-
`arkparser.common.map_config
|
|
802
|
+
`arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
|
|
791
803
|
|
|
792
804
|
| Function | Returns | Description |
|
|
793
805
|
|---|---|---|
|
|
@@ -801,7 +813,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
801
813
|
|
|
802
814
|
### Version Detection
|
|
803
815
|
|
|
804
|
-
`arkparser.common.version_detection
|
|
816
|
+
`arkparser.common.version_detection`: File format identification.
|
|
805
817
|
|
|
806
818
|
| Function | Returns | Description |
|
|
807
819
|
|---|---|---|
|
|
@@ -813,7 +825,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
813
825
|
|
|
814
826
|
### Exceptions
|
|
815
827
|
|
|
816
|
-
`arkparser.common.exceptions
|
|
828
|
+
`arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
|
|
817
829
|
|
|
818
830
|
| Exception | Description |
|
|
819
831
|
|---|---|
|
|
@@ -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`): 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
|
|
|
@@ -137,7 +137,7 @@ for item in inv.uploaded_items:
|
|
|
137
137
|
```python
|
|
138
138
|
from arkparser import WorldSave
|
|
139
139
|
|
|
140
|
-
# Works with both ASE (binary) and ASA (SQLite)
|
|
140
|
+
# Works with both ASE (binary) and ASA (SQLite); auto-detected
|
|
141
141
|
save = WorldSave.load("path/to/Extinction.ark") # ASE
|
|
142
142
|
save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
143
143
|
|
|
@@ -163,7 +163,7 @@ for obj in save.objects:
|
|
|
163
163
|
print(f"{tamed.name} Lv{tamed.level}")
|
|
164
164
|
```
|
|
165
165
|
|
|
166
|
-
### JSON Export
|
|
166
|
+
### JSON Export
|
|
167
167
|
|
|
168
168
|
```python
|
|
169
169
|
from arkparser import export_all
|
|
@@ -171,7 +171,7 @@ from arkparser.common import get_map_config
|
|
|
171
171
|
|
|
172
172
|
map_config = get_map_config("extinction.ark")
|
|
173
173
|
data = export_all(save, map_config)
|
|
174
|
-
# Returns: {"
|
|
174
|
+
# Returns: {"tamed": [...], "wild": [...], "players": [...], ...}
|
|
175
175
|
```
|
|
176
176
|
|
|
177
177
|
Or export to files:
|
|
@@ -180,6 +180,18 @@ Or export to files:
|
|
|
180
180
|
from arkparser import export_to_files
|
|
181
181
|
|
|
182
182
|
export_to_files(save, "output/", map_config)
|
|
183
|
+
# Creates: tamed.json, wild.json, players.json, etc.
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
For compatibility with the original [ASV (Ark Save Visualizer)](https://github.com/miragedmuk/ASV) export naming:
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
from arkparser import export_all, export_to_files
|
|
190
|
+
|
|
191
|
+
data = export_all(save, map_config, naming="asv")
|
|
192
|
+
# Returns: {"ASV_Tamed": [...], "ASV_Wild": [...], "ASV_Players": [...], ...}
|
|
193
|
+
|
|
194
|
+
export_to_files(save, "output/", map_config, naming="asv")
|
|
183
195
|
# Creates: ASV_Tamed.json, ASV_Wild.json, ASV_Players.json, etc.
|
|
184
196
|
```
|
|
185
197
|
|
|
@@ -208,7 +220,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
208
220
|
|
|
209
221
|
#### Profile
|
|
210
222
|
|
|
211
|
-
`arkparser.files.profile.Profile
|
|
223
|
+
`arkparser.files.profile.Profile`: Parser for `.arkprofile` player profile files.
|
|
212
224
|
|
|
213
225
|
| Property | Type | Description |
|
|
214
226
|
|---|---|---|
|
|
@@ -216,7 +228,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
216
228
|
| `player_id` | `int \| None` | Unique player ID |
|
|
217
229
|
| `unique_id` | `str \| None` | Platform ID (Steam/Xbox numeric ID) |
|
|
218
230
|
| `tribe_id` | `int \| None` | Tribe ID (handles ASE `TribeId` / ASA `TribeID`) |
|
|
219
|
-
| `tribe_name` | `str \| None` | Always `None
|
|
231
|
+
| `tribe_name` | `str \| None` | Always `None`; tribe name is not stored in profiles |
|
|
220
232
|
| `level` | `int` | Current level (`ExtraCharacterLevel + 1`) |
|
|
221
233
|
| `experience` | `float` | Total XP |
|
|
222
234
|
| `total_engram_points` | `int` | Engram points spent |
|
|
@@ -234,7 +246,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
234
246
|
|
|
235
247
|
#### Tribe (File Parser)
|
|
236
248
|
|
|
237
|
-
`arkparser.files.tribe.Tribe
|
|
249
|
+
`arkparser.files.tribe.Tribe`: Parser for `.arktribe` tribe data files.
|
|
238
250
|
|
|
239
251
|
| Property | Type | Description |
|
|
240
252
|
|---|---|---|
|
|
@@ -258,7 +270,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
258
270
|
|
|
259
271
|
#### CloudInventory
|
|
260
272
|
|
|
261
|
-
`arkparser.files.cloud_inventory.CloudInventory
|
|
273
|
+
`arkparser.files.cloud_inventory.CloudInventory`: Parser for obelisk/cloud inventory files. Also available as `Obelisk`.
|
|
262
274
|
|
|
263
275
|
| Property | Type | Description |
|
|
264
276
|
|---|---|---|
|
|
@@ -278,7 +290,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
278
290
|
|
|
279
291
|
#### WorldSave
|
|
280
292
|
|
|
281
|
-
`arkparser.files.world_save.WorldSave
|
|
293
|
+
`arkparser.files.world_save.WorldSave`: Unified parser for `.ark` world save files. Auto-detects ASE binary vs ASA SQLite.
|
|
282
294
|
|
|
283
295
|
| Property | Type | Description |
|
|
284
296
|
|---|---|---|
|
|
@@ -320,7 +332,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
320
332
|
|
|
321
333
|
#### GameObject
|
|
322
334
|
|
|
323
|
-
`arkparser.game_objects.game_object.GameObject
|
|
335
|
+
`arkparser.game_objects.game_object.GameObject`: The fundamental entity in ARK saves representing creatures, items, structures, players, etc.
|
|
324
336
|
|
|
325
337
|
| Field | Type | Description |
|
|
326
338
|
|---|---|---|
|
|
@@ -346,7 +358,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
346
358
|
|
|
347
359
|
#### GameObjectContainer
|
|
348
360
|
|
|
349
|
-
`arkparser.game_objects.container.GameObjectContainer
|
|
361
|
+
`arkparser.game_objects.container.GameObjectContainer`: Relationship-aware container for game objects. Supports `len()`, iteration, and indexing.
|
|
350
362
|
|
|
351
363
|
| Method | Returns | Description |
|
|
352
364
|
|---|---|---|
|
|
@@ -369,7 +381,7 @@ All file parsers support `load(source)` which accepts `str`, `Path`, or `bytes`
|
|
|
369
381
|
|
|
370
382
|
#### LocationData
|
|
371
383
|
|
|
372
|
-
`arkparser.game_objects.location.LocationData
|
|
384
|
+
`arkparser.game_objects.location.LocationData`: 3D position and rotation.
|
|
373
385
|
|
|
374
386
|
| Field | Type | Description |
|
|
375
387
|
|---|---|---|
|
|
@@ -394,7 +406,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
394
406
|
|
|
395
407
|
#### TamedCreature
|
|
396
408
|
|
|
397
|
-
`arkparser.models.creature.TamedCreature
|
|
409
|
+
`arkparser.models.creature.TamedCreature`: Tamed creature with full stats, breeding, and ownership data.
|
|
398
410
|
|
|
399
411
|
| Property | Type | Description |
|
|
400
412
|
|---|---|---|
|
|
@@ -436,7 +448,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
436
448
|
|
|
437
449
|
#### WildCreature
|
|
438
450
|
|
|
439
|
-
`arkparser.models.creature.WildCreature
|
|
451
|
+
`arkparser.models.creature.WildCreature`: Wild creature with level and stats.
|
|
440
452
|
|
|
441
453
|
| Property | Type | Description |
|
|
442
454
|
|---|---|---|
|
|
@@ -456,7 +468,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
456
468
|
|
|
457
469
|
#### Player
|
|
458
470
|
|
|
459
|
-
`arkparser.models.player.Player
|
|
471
|
+
`arkparser.models.player.Player`: In-world player entity built from profile data.
|
|
460
472
|
|
|
461
473
|
| Property | Type | Description |
|
|
462
474
|
|---|---|---|
|
|
@@ -481,7 +493,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
481
493
|
|
|
482
494
|
#### Character
|
|
483
495
|
|
|
484
|
-
`arkparser.models.character.Character
|
|
496
|
+
`arkparser.models.character.Character`: Player character from the world save (`PlayerPawnTest_*` objects).
|
|
485
497
|
|
|
486
498
|
| Property | Type | Description |
|
|
487
499
|
|---|---|---|
|
|
@@ -503,7 +515,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
503
515
|
|
|
504
516
|
#### Structure
|
|
505
517
|
|
|
506
|
-
`arkparser.models.structure.Structure
|
|
518
|
+
`arkparser.models.structure.Structure`: Placed structure with ownership and state.
|
|
507
519
|
|
|
508
520
|
| Property | Type | Description |
|
|
509
521
|
|---|---|---|
|
|
@@ -526,7 +538,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
526
538
|
|
|
527
539
|
#### Item
|
|
528
540
|
|
|
529
|
-
`arkparser.models.item.Item
|
|
541
|
+
`arkparser.models.item.Item`: Inventory item with quality and stats.
|
|
530
542
|
|
|
531
543
|
| Property | Type | Description |
|
|
532
544
|
|---|---|---|
|
|
@@ -549,7 +561,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
549
561
|
|
|
550
562
|
#### TribeModel
|
|
551
563
|
|
|
552
|
-
`arkparser.models.tribe.Tribe
|
|
564
|
+
`arkparser.models.tribe.Tribe`: Tribe data model (distinct from the file parser `arkparser.files.Tribe`). Imported as `TribeModel` from the top-level package.
|
|
553
565
|
|
|
554
566
|
| Property | Type | Description |
|
|
555
567
|
|---|---|---|
|
|
@@ -570,7 +582,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
570
582
|
|
|
571
583
|
#### TribeMember
|
|
572
584
|
|
|
573
|
-
`arkparser.models.tribe.TribeMember
|
|
585
|
+
`arkparser.models.tribe.TribeMember`: Individual tribe member.
|
|
574
586
|
|
|
575
587
|
| Field | Type | Description |
|
|
576
588
|
|---|---|---|
|
|
@@ -580,7 +592,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
580
592
|
|
|
581
593
|
#### TribeLogEntry
|
|
582
594
|
|
|
583
|
-
`arkparser.models.tribe.TribeLogEntry
|
|
595
|
+
`arkparser.models.tribe.TribeLogEntry`: Parsed tribe log entry.
|
|
584
596
|
|
|
585
597
|
| Field / Property | Type | Description |
|
|
586
598
|
|---|---|---|
|
|
@@ -595,7 +607,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
595
607
|
|
|
596
608
|
#### CreatureStats
|
|
597
609
|
|
|
598
|
-
`arkparser.models.stats.CreatureStats
|
|
610
|
+
`arkparser.models.stats.CreatureStats`: 12-stat named access for level-up points.
|
|
599
611
|
|
|
600
612
|
| Field | Type | Description |
|
|
601
613
|
|---|---|---|
|
|
@@ -621,7 +633,7 @@ High-level typed wrappers created from `GameObject` instances via `from_game_obj
|
|
|
621
633
|
|
|
622
634
|
#### Location
|
|
623
635
|
|
|
624
|
-
`arkparser.models.stats.Location
|
|
636
|
+
`arkparser.models.stats.Location`: 3D position with optional GPS conversion.
|
|
625
637
|
|
|
626
638
|
| Field | Type | Description |
|
|
627
639
|
|---|---|---|
|
|
@@ -648,7 +660,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
648
660
|
|
|
649
661
|
#### UploadedCreature
|
|
650
662
|
|
|
651
|
-
`arkparser.data_models.UploadedCreature
|
|
663
|
+
`arkparser.data_models.UploadedCreature`: Uploaded creature from obelisk data.
|
|
652
664
|
|
|
653
665
|
| Property | Type | Description |
|
|
654
666
|
|---|---|---|
|
|
@@ -668,7 +680,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
668
680
|
|
|
669
681
|
#### UploadedItem
|
|
670
682
|
|
|
671
|
-
`arkparser.data_models.UploadedItem
|
|
683
|
+
`arkparser.data_models.UploadedItem`: Uploaded item from obelisk data.
|
|
672
684
|
|
|
673
685
|
| Property | Type | Description |
|
|
674
686
|
|---|---|---|
|
|
@@ -689,7 +701,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
689
701
|
|
|
690
702
|
#### CryopodCreature
|
|
691
703
|
|
|
692
|
-
`arkparser.data_models.CryopodCreature
|
|
704
|
+
`arkparser.data_models.CryopodCreature`: Creature stored inside a cryopod.
|
|
693
705
|
|
|
694
706
|
| Property | Type | Description |
|
|
695
707
|
|---|---|---|
|
|
@@ -712,7 +724,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
712
724
|
|
|
713
725
|
#### DinoStats
|
|
714
726
|
|
|
715
|
-
`arkparser.data_models.DinoStats
|
|
727
|
+
`arkparser.data_models.DinoStats`: Creature stat values (current and max).
|
|
716
728
|
|
|
717
729
|
| Field | Type | Description |
|
|
718
730
|
|---|---|---|
|
|
@@ -736,7 +748,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
736
748
|
|
|
737
749
|
### Export Functions
|
|
738
750
|
|
|
739
|
-
`arkparser.export
|
|
751
|
+
`arkparser.export`: Native JSON export with optional ASV-compatible naming. All functions accept a `WorldSave` and optional `MapConfig` for GPS conversion.
|
|
740
752
|
|
|
741
753
|
| Function | Returns | Description |
|
|
742
754
|
|---|---|---|
|
|
@@ -753,7 +765,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
753
765
|
|
|
754
766
|
### Map Config
|
|
755
767
|
|
|
756
|
-
`arkparser.common.map_config
|
|
768
|
+
`arkparser.common.map_config`: GPS coordinate conversion for ARK maps.
|
|
757
769
|
|
|
758
770
|
| Function | Returns | Description |
|
|
759
771
|
|---|---|---|
|
|
@@ -767,7 +779,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
767
779
|
|
|
768
780
|
### Version Detection
|
|
769
781
|
|
|
770
|
-
`arkparser.common.version_detection
|
|
782
|
+
`arkparser.common.version_detection`: File format identification.
|
|
771
783
|
|
|
772
784
|
| Function | Returns | Description |
|
|
773
785
|
|---|---|---|
|
|
@@ -779,7 +791,7 @@ Lower-level data models for cloud inventory / obelisk data.
|
|
|
779
791
|
|
|
780
792
|
### Exceptions
|
|
781
793
|
|
|
782
|
-
`arkparser.common.exceptions
|
|
794
|
+
`arkparser.common.exceptions`: All exceptions inherit from `ArkParseError`.
|
|
783
795
|
|
|
784
796
|
| Exception | Description |
|
|
785
797
|
|---|---|
|
|
@@ -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.
|
|
@@ -26,7 +26,7 @@ Example usage:
|
|
|
26
26
|
>>> inv = CloudInventory.load("path/to/obelisk_file")
|
|
27
27
|
>>> print(f"Creatures: {inv.creature_count}, Items: {inv.item_count}")
|
|
28
28
|
>>>
|
|
29
|
-
>>> # Load any world save
|
|
29
|
+
>>> # Load any world save: ASE or ASA, auto-detected
|
|
30
30
|
>>> save = WorldSave.load("path/to/TheIsland.ark") # ASE
|
|
31
31
|
>>> save = WorldSave.load("path/to/Extinction_WP.ark") # ASA
|
|
32
32
|
"""
|