#!/usr/bin/env python3 """ Example: Extract all files from an MPQ archive """ from pystorm import MPQArchive from pathlib import Path import sys def extract_all_files(archive_path, output_dir): """ Extract all files from an MPQ archive to a directory Args: archive_path: Path to the MPQ archive output_dir: Directory to extract files to """ archive_path = Path(archive_path) output_dir = Path(output_dir) if not archive_path.exists(): print(f"Error: Archive not found: {archive_path}") return False # Create output directory output_dir.mkdir(parents=True, exist_ok=True) print(f"Extracting files from: {archive_path}") print(f"Output directory: {output_dir}\n") try: with MPQArchive(str(archive_path)) as archive: # Find all files files = archive.find_files("*") total_files = len(files) if total_files == 0: print("No files found in archive") return True print(f"Found {total_files} file(s) to extract\n") # Extract each file extracted = 0 failed = 0 for i, file_info in enumerate(files, 1): filename = file_info['name'] # Create output path output_path = output_dir / filename output_path.parent.mkdir(parents=True, exist_ok=True) # Extract file try: archive.extract_file(filename, str(output_path)) extracted += 1 print(f"[{i}/{total_files}] ✓ {filename}") except Exception as e: failed += 1 print(f"[{i}/{total_files}] ✗ {filename} - Error: {e}") print(f"\n{'='*60}") print(f"Extraction complete!") print(f" Successful: {extracted}") print(f" Failed: {failed}") print(f"{'='*60}") return failed == 0 except Exception as e: print(f"Error opening archive: {e}") return False def main(): """Main entry point""" if len(sys.argv) < 2: print("Usage: python extract_all.py [output_dir]") print("\nExample:") print(" python extract_all.py game.mpq extracted_files") sys.exit(1) archive_path = sys.argv[1] output_dir = sys.argv[2] if len(sys.argv) > 2 else "extracted_files" success = extract_all_files(archive_path, output_dir) sys.exit(0 if success else 1) if __name__ == "__main__": main()