示例#1
0
        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}";
            }
        }
示例#3
0
        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));
        }
示例#4
0
        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());
        }
示例#5
0
        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));
        }
示例#6
0
        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));
        }
示例#7
0
 public Sheet(LuminaData lumina)
 {
     this.lumina = lumina;
     this.excel  = lumina.GetExcelSheet <TConcreteType>();
 }
示例#8
0
 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)));
 }
示例#9
0
        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();
        }
示例#10
0
        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;
        }