forked from EVE-Workbench/EveAssetExtractor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
80 lines (65 loc) · 2.3 KB
/
Program.cs
File metadata and controls
80 lines (65 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
var eveOnlineGameDirectory = @"c:\CCP\EVE";
var outputDirectory = @"c:\temp\export";
foreach (var arg in args)
{
if (arg.StartsWith("--game-dir"))
{
eveOnlineGameDirectory = arg.Replace("--game-dir=", "");
} else if (arg.StartsWith("--output-dir"))
{
outputDirectory = arg.Replace("--output-dir=", "");
}
}
var resourceFile = $@"{eveOnlineGameDirectory}\tq\resfileindex.txt";
var resourceFilePrefetch = $@"{eveOnlineGameDirectory}\tq\resfileindex_prefetch.txt";
var eveOnlineResourceDirectory = $@"{eveOnlineGameDirectory}\ResFiles";
// create the output directory
Directory.CreateDirectory(outputDirectory);
List<ResourceRow> rows = [];
Console.WriteLine("EVE Online Asset Extractor");
Console.WriteLine("Created by EVE Workbench");
Console.WriteLine("---");
if (File.Exists(resourceFile) && File.Exists(resourceFilePrefetch))
{
// Read all lines from the CSV file
rows.AddRange(ReadLines(resourceFile));
rows.AddRange(ReadLines(resourceFilePrefetch));
foreach (var image in rows)
{
var mediaType = GetMediaType(image.FileName);
if(mediaType == null) continue;
Directory.CreateDirectory($@"{outputDirectory}\{mediaType}");
if (File.Exists($@"{eveOnlineResourceDirectory}\{image.Path}"))
{
var outputFile = $@"{outputDirectory}\{mediaType}\{image.FileName.Replace(@"res:/", string.Empty).Replace(@"/", "_")}";
File.Copy($@"{eveOnlineResourceDirectory}\{image.Path}", outputFile, true);
Console.WriteLine($@"Copies {eveOnlineResourceDirectory}\{image.Path} to {outputFile}");
}
}
}
List<ResourceRow> ReadLines(string file)
{
var lines = File.ReadAllLines(file);
return lines.Select(line => line.Split(',')).Select(values => new ResourceRow { FileName = values[0], Path = values[1] }).ToList();
}
string? GetMediaType(string fileName)
{
if (fileName.EndsWith(".png") || fileName.EndsWith(".jpg"))
{
return "image";
}
if (fileName.EndsWith(".webm") || fileName.EndsWith(".srt"))
{
return "video";
}
return null;
}
internal record ResourceRow
{
public required string FileName { get; set; }
public required string Path { get; set; }
}