public async Task <ushort> GetMaxCraftedItemLevel() { if (_maxCraftedItemLevel == 0) { var items = _cyalume.GetExcelSheet <Item>(); _maxCraftedItemLevel = items.GetRows() .Where(item => item.CanBeHq) .Max(item => item.LevelItem); } return(await Task.FromResult(_maxCraftedItemLevel)); }
private void DiscoverLevelPaths(Lumina.Lumina lumina) { var territoryType = lumina.GetExcelSheet <TerritoryType>(); foreach (var row in territoryType) { var basePath = $"bg/{row.Bg}"; } }
static void Main(string[] args) { var sqpack = args.Length == 0 ? @"C:\Program Files (x86)\SquareEnix\FINAL FANTASY XIV - A Realm Reborn\game\sqpack" : args[0]; var cyalume = new Cyalume(sqpack); var worlds = new Dictionary <int, string>( cyalume.GetExcelSheet <World>() .GetRows() .Where(row => row.IsPublic) .Select(row => new KeyValuePair <int, string>(row.RowId, row.Name))); File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "world.json"), JsonConvert.SerializeObject(worlds)); }
public MusicPageViewModel(Lumina.Lumina lumina = null) { _lumina = lumina ?? Locator.Current.GetService <Lumina.Lumina>(); _bgms = _lumina.GetExcelSheet <BGM>().GetRows().Where(b => _lumina.FileExists(b.File)).ToList(); _searchResults = this .WhenAnyValue(x => x.SearchFilter) .Throttle(TimeSpan.FromMilliseconds(250)) .Select(filter => filter?.Trim().ToLowerInvariant()) .DistinctUntilChanged() .SelectMany(SearchFilesAsync) .ObserveOn(RxApp.MainThreadScheduler) .ToProperty(this, x => x.SearchResults, SearchFiles()); }
public static void GenerateJSON(Cyalume luminaEn, Cyalume luminaDe, Cyalume luminaFr, Cyalume luminaJp, HttpClient http, string outputPath) { var towns = luminaEn.GetExcelSheet <Town>(); var townsDe = luminaDe.GetExcelSheet <Town>(); var townsFr = luminaFr.GetExcelSheet <Town>(); var townsJp = luminaJp.GetExcelSheet <Town>(); var townsChs = JObject.Parse(http.GetStringAsync(new Uri("https://cafemaker.wakingsands.com/Town")) .GetAwaiter().GetResult())["Results"] .Children() .Select(town => town.ToObject <XIVAPITown>()) .ToList(); townsChs.Add(new XIVAPITown { ID = 0, Name = "不知何处", }); var outputTowns = new List <JObject>(); foreach (var town in towns) { dynamic outputTown = new JObject(); outputTown.ID = town.RowId; var iconObj = town.Icon; outputTown.Icon = iconObj != 0 ? $"/i/{Util.GetIconFolder(iconObj)}/{iconObj}.png" : $"/i/{Util.GetIconFolder(060880)}/060880.png"; outputTown.Name_en = town.Name; outputTown.Name_de = townsDe.First(localItem => localItem.RowId == town.RowId).Name; outputTown.Name_fr = townsFr.First(localItem => localItem.RowId == town.RowId).Name; outputTown.Name_jp = townsJp.First(localItem => localItem.RowId == town.RowId).Name; outputTown.Name_chs = townsChs.First(localItem => localItem.ID == town.RowId).Name; outputTowns.Add(outputTown); } File.WriteAllText(Path.Combine(outputPath, "Town.json"), JsonConvert.SerializeObject(outputTowns)); }
public static void GenerateJSON(Cyalume lumina, string outputPath) { var worlds = lumina.GetExcelSheet <World>(); var outputWorlds = new List <JObject>(); foreach (var world in worlds) { dynamic outputWorld = new JObject(); outputWorld.ID = world.RowId; outputWorld.Name = world.Name; outputWorld.DataCenter = (byte)world.DataCenter.Row; outputWorld.IsPublic = world.IsPublic; outputWorlds.Add(outputWorld); } File.WriteAllText(Path.Combine(outputPath, "World.json"), JsonConvert.SerializeObject(outputWorlds)); }
public Sheet(LuminaData lumina) { this.lumina = lumina; this.excel = lumina.GetExcelSheet <TConcreteType>(); }
public static void GenerateJSON(Cyalume lumina, string outputPath) { File.WriteAllText(Path.Combine(outputPath, "ItemSearchCategory_Keys.json"), JsonConvert.SerializeObject(lumina.GetExcelSheet <ItemSearchCategory>().Select(isc => isc.RowId))); }
public static void GenerateChinese(Cyalume lumina, IEnumerable <CsvItem> itemsChs, string outputPath) { var output = new Dictionary <string, List <string[]> >(); var counter = 0; var baseTop = Console.CursorTop; var localItems = lumina.GetExcelSheet <Item>(); var categories = lumina.GetExcelSheet <ItemSearchCategory>(); Parallel.ForEach(categories, category => { if (category.RowId < 9) { goto console_update; } var categoryItems = new List <string[]>(); var filteredItems = itemsChs.Where(item => item?.ItemSearchCategory.RowId == category.RowId).ToList(); Parallel.ForEach(filteredItems, item => { var outputItem = new string[6]; var classJobAbbr = item.ItemSearchCategory.ClassJob.Value.Abbreviation ?? ""; if (item.ItemSearchCategory.ClassJob.Value.ClassJobParent.Value.Abbreviation != classJobAbbr) { classJobAbbr = item.ItemSearchCategory.ClassJob.Value.ClassJobParent.Value.Abbreviation + " " + classJobAbbr; } else if (Resources.ClassJobMap.TryGetValue(classJobAbbr, out var jobAbbr)) { classJobAbbr += " " + jobAbbr; } else if (classJobAbbr == "ADV") { classJobAbbr = ""; } var iconId = (ushort)localItems.First(itm => itm.RowId == item.Key).Icon; var icon = $"/i/{Util.GetIconFolder(iconId)}/{iconId:000000}.png"; outputItem[0] = item.Key.ToString(); outputItem[1] = item.Name; outputItem[2] = icon; outputItem[3] = item.LevelItem.ToString(); outputItem[4] = item.Rarity.ToString(); outputItem[5] = classJobAbbr; lock (categoryItems) { categoryItems.Add(outputItem); } }); categoryItems.Sort((item1, item2) => int.Parse(item2[3]) - int.Parse(item1[3])); if (categoryItems.Count == 0) { goto console_update; } output[category.RowId.ToString()] = categoryItems; console_update: Console.CursorLeft = 0; Console.CursorTop = baseTop; Console.Write($"ch: [{counter}/{categories.Count() - 1}]"); Console.CursorLeft = 10 + counter.ToString("000").Length; Console.Write(" "); counter++; }); File.WriteAllText(Path.Combine(outputPath, "categories_chs.js"), JsonConvert.SerializeObject(output)); Console.WriteLine(); }
public static void Generate(Cyalume luminaEn, Cyalume luminaDe, Cyalume luminaFr, Cyalume luminaJp, string outputPath) { string[] langs = { "en", "de", "fr", "ja" }; Cyalume[] realms = { luminaEn, luminaDe, luminaFr, luminaJp }; IEnumerable <Item>[] itemSheets = { luminaEn.GetExcelSheet <Item>(), luminaDe.GetExcelSheet <Item>(), luminaFr.GetExcelSheet <Item>(), luminaJp.GetExcelSheet <Item>() }; var baseTop = Console.CursorTop; Parallel.For(0, 4, i => { dynamic output = new JObject(); var categories = realms[i].GetExcelSheet <ItemSearchCategory>(); foreach (var category in categories) { if (category.RowId < 9) { goto console_update; } var categoryItems = new List <string[]>(); var sortedItems = itemSheets[i].Where(item => item.ItemSearchCategory.Row == category.RowId).ToList(); sortedItems.Sort((item1, item2) => (int)(item2.LevelItem.Row - item1.LevelItem.Row)); foreach (var item in sortedItems) { var outputItem = new string[6]; var classJobAbbr = item.ItemSearchCategory.Value.ClassJob.Value.Abbreviation; if (item.ItemSearchCategory.Value.ClassJob.Value.ClassJobParent.Value.Abbreviation != classJobAbbr) { classJobAbbr = item.ItemSearchCategory.Value.ClassJob.Value.ClassJobParent.Value.Abbreviation + " " + classJobAbbr; } else if (Resources.ClassJobMap.TryGetValue(classJobAbbr, out var jobAbbr)) { classJobAbbr += " " + jobAbbr; } else if (classJobAbbr == "ADV" || classJobAbbr == "ABE" || classJobAbbr == "AVN") { classJobAbbr = ""; } outputItem[0] = item.RowId.ToString(); outputItem[1] = item.Name; outputItem[2] = $"/i/{item.Icon}.png"; outputItem[3] = item.LevelItem.Row.ToString(); outputItem[4] = item.Rarity.ToString(); outputItem[5] = classJobAbbr; categoryItems.Add(outputItem); } if (categoryItems.Count == 0) { goto console_update; } output[category.RowId.ToString()] = JToken.FromObject(categoryItems); console_update: Console.CursorLeft = 0; Console.CursorTop = baseTop + i; Console.Write($"{langs[i]}: [{category.RowId}/{categories.Count() - 1}]"); Console.CursorLeft = 10 + category.RowId.ToString("000").Length; Console.Write(" "); } File.WriteAllText(Path.Combine(outputPath, $"categories_{langs[i]}.js"), JsonConvert.SerializeObject(output)); }); Console.CursorLeft = 0; Console.CursorTop = baseTop + 4; }