public void TestQueryBuild()
        {
            GameDataMigration       migration      = new GameDataMigration(null);
            IGameDataBackupProvider backupProvider = new GameDataBackupProvider();

            IEntityRestorePoint restorePoint = backupProvider.GetRestorePoint(new[] {
                typeof(Appearance),
                typeof(SyntyAppearance),
                typeof(Character),
                typeof(CharacterState),
                typeof(InventoryItem),
                typeof(User),
                typeof(GameSession),
                typeof(Village),
                typeof(VillageHouse),
                typeof(Resources),
                typeof(Skills),
                typeof(Statistics),
                typeof(MarketItem)
            });

            migration.MigrateTest(restorePoint);
        }
Exemple #2
0
        public void Apply()
        {
            ToolStatus.Text = "Exp Adjustment has been disabled.";
            return;


            ToolStatus.Text = "Loading backup files...";
            Task.Run(() =>
            {
                var backupProvider = new GameDataBackupProvider();
                var rpBefore       = backupProvider.GetRestorePoint(@"C:\backup\637367260672779696", typeof(Character), typeof(Skills));
                var rpAfter        = backupProvider.GetRestorePoint(@"C:\backup\637369626496299730", typeof(Character), typeof(Skills));

                var skillsIds       = Ravenfall.RavenNest.GetAffectedSkillsIds();
                var oldSkillsBefore = rpBefore.Get <Skills>();
                var oldSkillsAfter  = rpAfter.Get <Skills>();
                var oldChars        = rpBefore.Get <Character>();

                var builder = new ConfigurationBuilder()
                              .SetBasePath(Directory.GetCurrentDirectory())
                              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

                var configuration = builder.Build();

                var appSettingsSection = configuration.GetSection("AppSettings");
                var appSettings        = appSettingsSection.Get <AppSettings>();

                var dbContextProvider = new RavenfallDbContextProvider(Options.Create(appSettings));

                ToolStatus.Text = "Processing " + skillsIds.Length + " players...";
                var con         = dbContextProvider.Get();
                {
                    var skillsDoubled   = 0;
                    var zeroSkills      = 0;
                    var skillDeltaCount = 0;
                    var updated         = false;
                    var playersUpdated  = 0;
                    var processIndex    = 0;
                    foreach (var skillId in skillsIds)
                    {
                        ++processIndex;
                        ToolProgress.Value = (float)Math.Floor((processIndex / (float)skillsIds.Length) * 100d);

                        var skillBefore     = oldSkillsBefore.FirstOrDefault(x => x.Id == skillId);
                        var skillAfter      = oldSkillsAfter.FirstOrDefault(x => x.Id == skillId);
                        var skillListBefore = skillBefore.GetSkills();

                        var character      = oldChars.FirstOrDefault(x => x.SkillsId == skillId);
                        var skillListAfter = skillAfter.GetSkills();

                        var curSkills     = con.Skills.FirstOrDefault(x => x.Id == skillId);
                        var skillsUpdated = false;
                        for (int i = 0; i < skillListAfter.Count; i++)
                        {
                            var sb = skillListBefore[i];
                            var sa = skillListAfter[i];

                            var exp      = sb.Experience;
                            var totalExp = exp;
                            var level    = sb.Level;

                            if (sb.Level == 0)
                            {
                                ++zeroSkills;
                                level    = GameMath.OLD_ExperienceToLevel((decimal)sb.Experience);
                                totalExp = sb.Experience;
                                exp      = totalExp - (double)GameMath.OLD_LevelToExperience(level);
                            }

                            if (level == 1 && exp == 0)
                            {
                                continue;
                            }

                            var levelDelta = sa.Level - level;
                            var expDelta   = 0d;

                            if (sa.Level > 0 && levelDelta > 0)
                            {
                                expDelta    = sa.Experience;
                                var saLevel = sa.Level;
                                for (var j = 1; j <= levelDelta; ++j)
                                {
                                    expDelta += GameMath.ExperienceForLevel(level + j);
                                }
                            }

                            if (levelDelta != 0 || expDelta > 0)
                            {
                                if (levelDelta != 0)
                                {
                                    ++skillDeltaCount;
                                }
                                if (expDelta >= totalExp * 0.95d)
                                {
                                    skillsUpdated = true;
                                    Ravenfall.RavenNest.ReduceSkillExp(i, curSkills, totalExp);
                                }
                            }
                        }

                        if (skillsUpdated)
                        {
                            ToolStatus.Text = playersUpdated + " players will be updated. " + processIndex + " players processed.";
                            ++playersUpdated;
                            updated = true;
                            con.Update(curSkills);
                        }
                    }

                    //ToolStatus.Text = playersUpdated + " players will be updated. Are you sure you want to continue?";
                    confirmDialog.MessageLabel.Text = playersUpdated + " players will be updated. Are you sure you want to continue?";
                    confirmDialog.Show(result =>
                    {
                        if (result.GetValueOrDefault())
                        {
                            ToolStatus.Text = "Saving players...";
                            if (updated)
                            {
                                con.SaveChanges();
                            }
                            ToolStatus.Text = playersUpdated + " players saved.";
                        }
                        else
                        {
                            ToolStatus.Text    = "No players was saved. Save cancelled.";
                            ToolProgress.Value = 0;
                        }

                        con.Dispose();
                    });
                }
            });
        }