示例#1
0
        public async Task Initialize(string baseDir)
        {
            try
            {
                Log.Verbose("Starting data load...");

                var zoneOpCodeDict =
                    JsonConvert.DeserializeObject <Dictionary <string, ushort> >(File.ReadAllText(Path.Combine(baseDir, "UIRes", "serveropcode.json")));
                ServerOpCodes = new ReadOnlyDictionary <string, ushort>(zoneOpCodeDict);

                Log.Verbose("Loaded {0} ServerOpCodes.", zoneOpCodeDict.Count);

                var clientOpCodeDict =
                    JsonConvert.DeserializeObject <Dictionary <string, ushort> >(File.ReadAllText(Path.Combine(baseDir, "UIRes", "clientopcode.json")));
                ClientOpCodes = new ReadOnlyDictionary <string, ushort>(clientOpCodeDict);

                Log.Verbose("Loaded {0} ClientOpCodes.", clientOpCodeDict.Count);


                var luminaOptions = new LuminaOptions
                {
                    CacheFileResources = true
                };

                luminaOptions.DefaultExcelLanguage = this.language switch {
                    ClientLanguage.Japanese => Language.Japanese,
                    ClientLanguage.English => Language.English,
                    ClientLanguage.German => Language.German,
                    ClientLanguage.French => Language.French,
                    _ => throw new ArgumentOutOfRangeException(nameof(this.language),
                                                               "Unknown Language: " + this.language)
                };

                gameData = new Lumina.Lumina(Path.Combine(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName), "sqpack"), luminaOptions);

                Log.Information("Lumina is ready: {0}", gameData.DataPath);

                IsDataReady = true;

                this.luminaResourceThread = new Thread(() =>
                {
                    while (true)
                    {
                        gameData.ProcessFileHandleQueue();
                        Thread.Yield();
                    }
                    // ReSharper disable once FunctionNeverReturns
                });
                this.luminaResourceThread.Start();
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Could not download data.");
            }
        }
示例#2
0
                #pragma warning restore CS8618

        public override Task Initialize()
        {
            string file    = MemoryService.GamePath + "game/ffxivgame.ver";
            string gameVer = File.ReadAllText(file);

            if (gameVer != UpdateService.SupportedGameVersion)
            {
                Log.Error(LocalizationService.GetStringFormatted("Error_WrongVersion", gameVer));
            }

            try
            {
                Lumina.LuminaOptions options = new Lumina.LuminaOptions()
                {
                    DefaultExcelLanguage         = Lumina.Data.Language.Korean,
                    PanicOnSheetChecksumMismatch = false,
                };

                this.lumina = new LuminaData(MemoryService.GamePath + "\\game\\sqpack\\", options);
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to initialize Lumina (Are your game files up to date?)", ex);
            }

            Races                  = new LuminaSheet <IRace, Race, RaceViewModel>(this.lumina);
            Tribes                 = new LuminaSheet <ITribe, Tribe, TribeViewModel>(this.lumina);
            Items                  = new LuminaSheet <IItem, GameData.Sheets.Item, GameData.ViewModels.ItemViewModel>(this.lumina);
            Dyes                   = new LuminaSheet <IDye, Stain, DyeViewModel>(this.lumina);
            BaseNPCs               = new LuminaSheet <INpcBase, ENpcBase, NpcBaseViewModel>(this.lumina);
            Territories            = new LuminaSheet <ITerritoryType, GameData.Sheets.TerritoryType, TerritoryTypeViewModel>(this.lumina);
            Weathers               = new LuminaSheet <IWeather, Weather, WeatherViewModel>(this.lumina);
            CharacterMakeCustomize = new CustomizeSheet(this.lumina);
            CharacterMakeTypes     = new LuminaSheet <ICharaMakeType, GameData.Sheets.CharaMakeType, CharaMakeTypeViewModel>(this.lumina);
            ResidentNPCs           = new LuminaSheet <INpcResident, ENpcResident, NpcResidentViewModel>(this.lumina);

            // no view models for these
            WeatherRates = this.lumina.GetExcelSheet <WeatherRate>();

            // these are json files that we write by hand
            Monsters = new JsonListSheet <Monster>("Data/Monsters.json");
            Props    = new JsonDictionarySheet <Prop>("Data/Props.json");

            return(base.Initialize());
        }
示例#3
0
        public async Task Initialize()
        {
            try
            {
                Log.Verbose("Starting data download...");

                using var client = new HttpClient()
                      {
                          BaseAddress = new Uri(DataBaseUrl)
                      };

                var opCodeDict =
                    JsonConvert.DeserializeObject <Dictionary <string, ushort> >(
                        await client.GetStringAsync(DataBaseUrl + "serveropcode.json"));
                this.ServerOpCodes = new ReadOnlyDictionary <string, ushort>(opCodeDict);

                Log.Verbose("Loaded {0} ServerOpCodes.", opCodeDict.Count);


                var luminaOptions = new LuminaOptions
                {
                    CacheFileResources = true
                };

                luminaOptions.DefaultExcelLanguage = this.language switch {
                    ClientLanguage.Japanese => Language.Japanese,
                    ClientLanguage.English => Language.English,
                    ClientLanguage.German => Language.German,
                    ClientLanguage.French => Language.French,
                    _ => throw new ArgumentOutOfRangeException(nameof(this.language),
                                                               "Unknown Language: " + this.language)
                };

                gameData = new Lumina.Lumina(Path.Combine(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName), "sqpack"), luminaOptions);

                Log.Information("Lumina is ready: {0}", gameData.DataPath);

                IsDataReady = true;
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Could not download data.");
            }
        }