public ArkContainer(ArkArrayInt8 source) { MemoryStream buffer = new MemoryStream(source.ToArray()); ArkArchive archive = new ArkArchive(buffer); ReadBinary(archive, new ReadingOptions()); }
public ArkArrayInt8 ToSignedByteArray() { MemoryStream buffer = toBuffer(); ArkArrayInt8 result = new ArkArrayInt8(); buffer.Position = 0; result.AddRange(buffer.ToArray()); return(result); }
public Tribe(string path, ReadingOptions ro) { ArkTribe tribe = new ArkTribe().ReadBinary <ArkTribe>(path, ro); StructPropertyList tribeData = tribe.GetPropertyValue <IStruct, StructPropertyList>("TribeData"); tribeName = tribeData.GetPropertyValue <string>("TribeName", defaultValue: string.Empty); ownerPlayerDataId = tribeData.GetPropertyValue <int>("OwnerPlayerDataID"); tribeId = tribeData.GetPropertyValue <int>("TribeID"); ArkArrayString membersNames = tribeData.GetPropertyValue <IArkArray, ArkArrayString>("MembersPlayerName"); if (membersNames != null) { membersPlayerName.AddRange(membersNames); foreach (string memberName in membersNames) { membersPlayerName.Add(memberName); } } ArkArrayUInt32 membersData = tribeData.GetPropertyValue <IArkArray, ArkArrayUInt32>("MembersPlayerDataID"); if (membersData != null) { foreach (int memberDataId in membersData) { membersPlayerDataId.Add(memberDataId); } } ArkArrayUInt32 tribeAdminIds = tribeData.GetPropertyValue <IArkArray, ArkArrayUInt32>("TribeAdmins"); if (tribeAdminIds != null) { foreach (int tribeAdmin in tribeAdminIds) { tribeAdmins.Add(tribeAdmin); } } ArkArrayInt8 memberRankGroups = tribeData.GetPropertyValue <IArkArray, ArkArrayInt8>("MembersRankGroups"); if (memberRankGroups != null) { foreach (byte memberRankGroup in memberRankGroups) { membersRankGroups.Add(memberRankGroup); } } setGovernment = tribeData.GetPropertyValue <bool>("SetGovernment"); IPropertyContainer tribeGovernment = tribeData.GetPropertyValue <IStruct, IPropertyContainer>("TribeGovernment"); if (tribeGovernment != null) { tribeGovernPINCode = tribeGovernment.GetPropertyValue <int>("TribeGovern_PINCode"); tribeGovernDinoOwnership = tribeGovernment.GetPropertyValue <int>("TribeGovern_DinoOwnership"); tribeGovernStructureOwnership = tribeGovernment.GetPropertyValue <int>("TribeGovern_StructureOwnership"); tribeGovernDinoTaming = tribeGovernment.GetPropertyValue <int>("TribeGovern_DinoTaming"); tribeGovernDinoUnclaimAdminOnly = tribeGovernment.GetPropertyValue <int>("TribeGovern_DinoUnclaimAdminOnly"); } else { tribeGovernDinoOwnership = 1; tribeGovernStructureOwnership = 1; } ArkArrayString logEntrys = tribeData.GetPropertyValue <IArkArray, ArkArrayString>("TribeLog"); if (logEntrys != null) { foreach (string log in logEntrys) { tribeLog.Add(log); } } logIndex = tribeData.GetPropertyValue <int>("LogIndex"); ArkArrayStruct tribeRankStructs = tribeData.GetPropertyValue <IStruct, ArkArrayStruct>("TribeRankGroups"); if (tribeRankStructs != null) { foreach (IStruct tribeRankStruct in tribeRankStructs) { tribeRankGroups.Add(new TribeRankGroup((IPropertyContainer)tribeRankStruct)); } } }
protected override void RunCommand(IEnumerable <string> args) { List <string> argsList = args.ToList(); if (showCommandHelp(argsList)) { return; } string clusterDirectory = argsList[0]; string outputDirectory = argsList[1]; ArkDataManager.LoadData(GlobalOptions.Language); List <Action> tasks = GlobalOptions.Parallel ? new List <Action>() : null; Stopwatch stopwatch = new Stopwatch(GlobalOptions.UseStopWatch); foreach (string path in Directory.EnumerateFiles(clusterDirectory)) { Action task = () => { try { ArkCloudInventory cloudInventory = new ArkCloudInventory().ReadBinary <ArkCloudInventory>(path, ReadingOptions.Create()); CustomDataContext context = new CustomDataContext { ObjectContainer = cloudInventory }; IPropertyContainer arkData = cloudInventory.InventoryData.GetPropertyValue <IPropertyContainer>("MyArkData"); CommonFunctions.WriteJson(Path.Combine(outputDirectory, path + ".json"), (generator, writingOptions) => { generator.WriteStartObject(); ArkArrayStruct tamedDinosData = arkData.GetPropertyValue <ArkArrayStruct>("ArkTamedDinosData"); if (tamedDinosData != null && tamedDinosData.Any()) { generator.WriteArrayFieldStart("creatures"); foreach (IStruct dinoStruct in tamedDinosData) { IPropertyContainer dino = (IPropertyContainer)dinoStruct; ArkContainer container = null; if (cloudInventory.InventoryVersion == 1) { ArkArrayUInt8 byteData = dino.GetPropertyValue <ArkArrayUInt8>("DinoData"); container = new ArkContainer(byteData); } else if (cloudInventory.InventoryVersion == 3) { ArkArrayInt8 byteData = dino.GetPropertyValue <ArkArrayInt8>("DinoData"); container = new ArkContainer(byteData); } ObjectReference dinoClass = dino.GetPropertyValue <ObjectReference>("DinoClass"); // Skip "BlueprintGeneratedClass " = 24 chars string dinoClassName = dinoClass.ObjectString.ToString().Substring(24); generator.WriteStartObject(); generator.WriteField("type", ArkDataManager.HasCreatureByPath(dinoClassName) ? ArkDataManager.GetCreatureByPath(dinoClassName).Name : dinoClassName); // NPE for unknown versions Creature creature = new Creature(container.Objects[0], container); generator.WriteObjectFieldStart("data"); creature.writeAllProperties(generator, context, writeAllFields); generator.WriteEndObject(); generator.WriteEndObject(); } generator.WriteEndArray(); } ArkArrayStruct arkItems = arkData.GetPropertyValue <ArkArrayStruct>("ArkItems"); if (arkItems != null) { List <Item> items = new List <Item>(); foreach (IStruct itemStruct in arkItems) { IPropertyContainer item = (IPropertyContainer)itemStruct; IPropertyContainer netItem = item.GetPropertyValue <IPropertyContainer>("ArkTributeItem"); items.Add(new Item(netItem)); } if (items.Any()) { generator.WritePropertyName("items"); Inventory.writeInventoryLong(generator, context, items, writeAllFields); } } generator.WriteEndObject(); }, writingOptions); } catch (Exception ex) { Console.Error.WriteLine("Found potentially corrupt cluster data: " + path); if (GlobalOptions.Verbose) { Console.Error.WriteLine(ex.Message); Console.Error.WriteLine(ex.StackTrace); } } }; if (tasks != null) { tasks.Add(task); } else { task(); } } if (tasks != null) { Parallel.ForEach(tasks, task => task()); } stopwatch.Stop("Loading cluster data and writing info"); stopwatch.Print(); }