Skip to main content

Extract player, tribe, and server data from ARK: Survival Ascended save files

Project description

ARK: Survival Ascended Save Parser

A Python library for extracting player, tribe, and server data from ARK: Survival Ascended save files.

Features

Player Data Extraction

  • Player names (Epic Games account names)
  • Character names (in-game names)
  • Tribe membership
  • Player levels and full stats (health, stamina, weight, etc.)

Tribe Data Extraction

  • Tribe names
  • Tribe owner information
  • Member lists with names and IDs
  • Tribe logs

Server Analytics

  • Player counts across servers
  • Tribe statistics
  • Save file metadata
  • Multi-server cluster support

Advanced Features (v0.2.0)

  • Tamed dino extraction from world saves
  • Structure/building data extraction
  • Real-time save file monitoring
  • Historical data tracking and analytics

What's New

Version 0.2.0 - Feature Complete Release

  • Dino Extraction - Extract all tamed dinos with species, level, stats, owner info
  • Structure Extraction - Parse buildings with categories (Storage, Defense, Crafting, etc.)
  • Real-time Save Watching - Monitor save directory for changes with callbacks
  • Historical Tracking - SQLite-based analytics for player progression, tribe growth
  • Full Player Stats - Health, stamina, weight, oxygen, food, water, melee, speed

Version 0.1.9

  • Full Player Stats - Extract all character stats from save files
  • PlayerStatsReader - Dedicated class for stat extraction

Version 0.1.7

  • Cluster Transfers - Parse ClusterObjects folder for uploaded items/dinos/characters
  • Transfer Tracking - scan_cluster_folder() categorizes transfers by type
  • Cluster Statistics - get_cluster_summary() for storage metrics

Version 0.1.6

  • Performance Tools - Profiling, benchmarking, and optimization utilities
  • Memory-Mapped Files - OptimizedReader for large files (>50MB)

Version 0.1.5

  • Async Support - New AsyncArkSaveReader for non-blocking file I/O
  • Discord Bot Friendly - Perfect for Discord.py with sync methods

Version 0.1.4

  • Bundled Default XP Table - No external JSON required
  • Enhanced Inventory Parser - Full struct array parsing

Installation

pip install ark-asa-parser

For async support:

pip install ark-asa-parser[async]

Quick Start

from ark_asa_parser import ArkSaveReader
from pathlib import Path

# Initialize reader with path to save directory
save_dir = Path("SavedArks/TheIsland_WP")
reader = ArkSaveReader(save_dir)

# Get all players
players = reader.get_all_players()
for player in players:
    print(f"{player.player_name} ({player.character_name})")
    print(f"  Tribe ID: {player.tribe_id}")
    print(f"  Level: {player.level}")

# Get all tribes
tribes = reader.get_all_tribes()
for tribe in tribes:
    print(f"{tribe.tribe_name}")
    print(f"  Owner: {tribe.owner_name}")
    print(f"  Members: {tribe.member_count}")

Dino Extraction

from ark_asa_parser import DinoExtractor
from pathlib import Path

world_ark = Path("SavedArks/TheIsland_WP/TheIsland_WP.ark")

# Get all tamed dinos
dinos = DinoExtractor.extract_dinos_from_world(world_ark)

for dino in dinos:
    print(f"{dino.species_name} - Level {dino.level}")
    if dino.dino_name:
        print(f"  Name: {dino.dino_name}")
    if dino.owner_name:
        print(f"  Owner: {dino.owner_name}")

# Get dino species summary
summary = DinoExtractor.get_dino_summary(world_ark)
for species, count in summary.items():
    print(f"{species}: {count}")

# Get dinos for a specific tribe
tribe_dinos = DinoExtractor.get_tribe_dinos(world_ark, tribe_id=123456)

Structure Extraction

from ark_asa_parser import StructureExtractor
from pathlib import Path

world_ark = Path("SavedArks/TheIsland_WP/TheIsland_WP.ark")

# Get all structures
structures = StructureExtractor.extract_structures_from_world(world_ark)

# Get structure summary with categories
summary = StructureExtractor.get_structure_summary(world_ark)
print(f"Total structures: {summary['total']}")
for category, count in summary['by_category'].items():
    print(f"  {category}: {count}")

# Get structures for a tribe
tribe_structures = StructureExtractor.get_tribe_structures(world_ark, tribe_id=123456)

Real-time Save Watching

from ark_asa_parser import SaveWatcher, AsyncSaveWatcher
from pathlib import Path

# Thread-based watching
save_dir = Path("SavedArks/TheIsland_WP")

def on_change(event):
    print(f"[{event.event_type}] {event.file_path.name}")
    if event.player_id:
        print(f"  Player: {event.player_id}")

watcher = SaveWatcher(save_dir, poll_interval=10.0)
watcher.add_callback(on_change)
watcher.start()

# For Discord bots - use AsyncSaveWatcher
async def setup_watcher(bot):
    async def on_player_join(event):
        if event.event_type == 'player_join':
            channel = bot.get_channel(CHANNEL_ID)
            await channel.send(f"Player joined: {event.player_id}")
    
    watcher = AsyncSaveWatcher(save_dir)
    watcher.add_callback(on_player_join)
    await watcher.start()

Historical Tracking

from ark_asa_parser import HistoricalTracker, PlayerSnapshot
from pathlib import Path
from datetime import datetime

# Initialize tracker with SQLite database
tracker = HistoricalTracker(Path("ark_history.db"))

# Record player snapshots
snapshot = PlayerSnapshot(
    timestamp=datetime.now(),
    eos_id="player_eos_id",
    player_name="PlayerName",
    character_name="CharName",
    level=85,
    experience=1234567.0,
    tribe_id=123456,
    server_name="TheIsland"
)
tracker.record_player_snapshot(snapshot)

# Get player progression over time
progression = tracker.get_player_level_progression("player_eos_id")

# Get top level gainers
top_players = tracker.get_top_level_gainers(days=7, limit=10)

# Get server population history
population = tracker.get_server_population_history("TheIsland", days=7)

# Activity summary
summary = tracker.get_activity_summary(days=7)
print(f"Unique players: {summary['unique_players']}")

Full Player Stats

from ark_asa_parser import PlayerStatsReader
from pathlib import Path

profile_path = Path("SavedArks/TheIsland_WP/player.arkprofile")

# Extract all character stats
stats = PlayerStatsReader.extract_player_stats(profile_path)

print(f"Health: {stats.health}")
print(f"Stamina: {stats.stamina}")
print(f"Weight: {stats.weight}")
print(f"Melee: {stats.melee_damage}")
print(f"Speed: {stats.movement_speed}")

Scanning Multiple Servers

from ark_asa_parser import scan_all_servers
from pathlib import Path

cluster_path = Path("R:/PhoenixArk")
servers = scan_all_servers(cluster_path)

for server_name, reader in servers.items():
    print(f"\nServer: {server_name}")
    players = reader.get_all_players()
    tribes = reader.get_all_tribes()
    print(f"  Players: {len(players)}")
    print(f"  Tribes: {len(tribes)}")

Data Classes

PlayerData

@dataclass
class PlayerData:
    eos_id: str              # Epic Online Services ID
    player_name: str         # Epic Games account name
    character_name: str      # In-game character name
    tribe_id: int           # Tribe membership ID
    level: int              # Character level
    experience: float       # Experience points

DinoData

@dataclass
class DinoData:
    species_name: str       # "Rex", "Raptor", etc.
    dino_name: str          # Custom name if set
    level: int              # Current level
    owner_name: str         # Owner player name
    tribe_id: int           # Owning tribe ID
    health: float           # Current health
    # ... and more stats

StructureData

@dataclass
class StructureData:
    structure_type: str     # "StorageBox", "Wall", etc.
    structure_name: str     # Custom name if set
    health: float           # Current health
    owner_name: str         # Owner name
    tribe_id: int           # Owning tribe
    is_locked: bool         # Lock status

Requirements

  • Python 3.8+
  • No external dependencies for core features
  • Optional: aiofiles for async support

Development Status

Implemented

  • Player name and character extraction
  • Tribe name and member lists
  • Full player stats (health, stamina, weight, etc.)
  • Tamed dino extraction from world saves
  • Structure/building data extraction
  • Real-time save file monitoring
  • Historical data tracking and analytics
  • Cluster transfer tracking
  • Async support
  • Performance optimization tools
  • Multi-server scanning

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

License

MIT License - See LICENSE file for details

Credits

Developed by BoldPhoenix for the ARK: Survival Ascended community.

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ark_asa_parser-0.2.2.tar.gz (45.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ark_asa_parser-0.2.2-py3-none-any.whl (39.4 kB view details)

Uploaded Python 3

File details

Details for the file ark_asa_parser-0.2.2.tar.gz.

File metadata

  • Download URL: ark_asa_parser-0.2.2.tar.gz
  • Upload date:
  • Size: 45.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for ark_asa_parser-0.2.2.tar.gz
Algorithm Hash digest
SHA256 a352d56a6a3759e0583e2107c68076f9a0f4a517d22c51e774100353988938c6
MD5 2acca1becf708a8572f156d05b3a2767
BLAKE2b-256 f267c18e275383250650129370ced710845d6dbcdfe1a5a3a7a17a0d34d15ec0

See more details on using hashes here.

File details

Details for the file ark_asa_parser-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: ark_asa_parser-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 39.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for ark_asa_parser-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 292dc0290ef78f853646bb7911ea6c4b8cda8deb122488c668d229fdeb2350a7
MD5 7109c8e06d16ce38e00ec3385341b7e5
BLAKE2b-256 49a6387d32cd5f83651276941c2fd29895ee7f4edaf31009b1bf3d6a399718b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page