static void Main(string[] args) { var savePath = @"C:\save\NoHibernation\TheIsland.ark"; // var savePath = @"C:\save\WithHibernation\TheIsland.ark"; var clusterPath = @"C:\save\cluster"; var domainOnly = true; //true: optimize loading of the domain model, false: load everything and keep references in memory //prepare var cd = new ArkClusterData(clusterPath, loadOnlyPropertiesInDomain: domainOnly); var gd = new ArkGameData(savePath, cd, 1, loadOnlyPropertiesInDomain: domainOnly); var st = Stopwatch.StartNew(); //extract savegame if (gd.Update(CancellationToken.None, null, true)?.Success == true) { Console.WriteLine($@"Elapsed (gd) {st.ElapsedMilliseconds:N0} ms"); st = Stopwatch.StartNew(); //extract cluster data: no cluster data exists for singlePlayer ArkClusterDataUpdateResult clusterResult; if (System.IO.File.Exists(clusterPath)) { clusterResult = cd.Update(CancellationToken.None); } Console.WriteLine($@"Elapsed (cd) {st.ElapsedMilliseconds:N0} ms"); st = Stopwatch.StartNew(); //assign the new data to the domain model gd.ApplyPreviousUpdate(domainOnly); Console.WriteLine($@"Elapsed (gd-apply) {st.ElapsedMilliseconds:N0} ms"); Console.WriteLine("Save data loaded!"); } else { Console.WriteLine("Failed to load save data!"); } Console.WriteLine("Press any key..."); Console.ReadKey(); }
static void Main(string[] args) { var savePath = @"C:\save\TheIsland.ark"; var clusterPath = @"C:\save\cluster"; //prepare var cd = new ArkClusterData(clusterPath); var gd = new ArkGameData(savePath, cd); var st = Stopwatch.StartNew(); //extract savegame if (gd.Update(CancellationToken.None, null, true)?.Success == true) { Console.WriteLine($@"Elapsed (gd) {st.ElapsedMilliseconds:N0} ms"); st = Stopwatch.StartNew(); //extract cluster data var clusterResult = cd.Update(CancellationToken.None); Console.WriteLine($@"Elapsed (cd) {st.ElapsedMilliseconds:N0} ms"); st = Stopwatch.StartNew(); //assign the new data to the domain model gd.ApplyPreviousUpdate(false); Console.WriteLine($@"Elapsed (gd-apply) {st.ElapsedMilliseconds:N0} ms"); Console.WriteLine("Save data loaded!"); } else { Console.WriteLine("Failed to load save data!"); } Console.WriteLine("Press any key..."); Console.ReadKey(); }
private void SendAnnouncement() { if (string.IsNullOrWhiteSpace(ClusterFolder) || string.IsNullOrWhiteSpace(SaveFilePath)) { MessageBox.Show("You must select both a cluster folder and a save file path.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrWhiteSpace(txtWebhookID.Text) || string.IsNullOrWhiteSpace(txtWebhookToken.Text) || !IsInt(txtWebhookID.Text)) { MessageBox.Show("Invalid Webhook data. ID must be an integer and both fields must have an entry.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } client = new Discord.Webhook.DiscordWebhookClient(Convert.ToUInt64(txtWebhookID.Text), txtWebhookToken.Text); var cd = new ArkClusterData(ClusterFolder, loadOnlyPropertiesInDomain: true); var gd = new ArkGameData(SaveFilePath, cd, loadOnlyPropertiesInDomain: true); //extract savegame var upd = gd.Update(CancellationToken.None, deferApplyNewData: true); if (upd == null) { return; } if (upd.Success == true) { //extract cluster data var cr = cd.Update(CancellationToken.None); //assign the new data to the domain model gd.ApplyPreviousUpdate(); // Populate Wild dinos var wildDinos = gd.WildCreatures; // init message var message = @"```autohotkey" + Environment.NewLine; // Go through entries foreach (DataGridViewRow row in dgvTrackList.Rows) { if (string.IsNullOrWhiteSpace(row.Cells[0].Value.ToString()) || string.IsNullOrWhiteSpace(row.Cells[1].Value.ToString())) { MessageBox.Show("Incomplete Data", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var dType = row.Cells[0].Value.ToString(); var searchString = row.Cells[1].Value.ToString(); //init controllers var foundDinos = false; // Get desired Dinos var queriedDinos = new List <ArkWildCreature>(); queriedDinos = wildDinos.Where(q => q.ClassName.Contains(searchString)).ToList(); // Discord if (queriedDinos.Count > 0) { foundDinos = true; message += $"{dType} sightings on " + queriedDinos.First().Location.MapName + ":" + Environment.NewLine; message += $"_{"_______",-7}_{"________________",-16}_{"_______",-7}_{"_________",-9}_" + Environment.NewLine; message += $"|{"Gender",-7}|{"Type",-16}|{"Level",-7}|{"Location",-9}|" + Environment.NewLine; message += $"|{"_______",-7}|{"________________",-16}|{"_______",-7}|{"_________",-9}|" + Environment.NewLine; foreach (var dino in queriedDinos) { var gender = $" {dino.Gender.ToString()}"; var name = $" {dino.ClassName.Split('_').First()}"; var level = $" {dino.BaseLevel.ToString()}"; var loc = $" {dino.Location.Latitude.Value.ToString("N0", CultureInfo.InvariantCulture)}, { dino.Location.Latitude.Value.ToString("N0", CultureInfo.InvariantCulture)}"; message += $"|{gender,-7}|{name,-16}|{level,-7}|{loc,-9}|" + Environment.NewLine; } message += $"|{"_______",-7}|{"________________",-16}|{"_______",-7}|{"_________",-9}|" + Environment.NewLine; } if (MessageTooLong) { message += Environment.NewLine + "```"; client.SendMessageAsync(message).Wait(); MessageFragsSent = true; message = @"```autohotkey" + Environment.NewLine; } if (!MessageTooLong && foundDinos && row.Index < dgvTrackList.RowCount) { message += Environment.NewLine + Environment.NewLine + Environment.NewLine; } } MessageTooLong = message.Length >= 2000 && !MessageFragsSent; if (MessageTooLong) { SendAnnouncement(); MessageTooLong = false; } else if (!MessageTooLong && !MessageFragsSent) { message += Environment.NewLine + "```"; client.SendMessageAsync(message).Wait(); } MessageTooLong = false; MessageFragsSent = false; } }