Exemplo n.º 1
0
        private static bool restoreSaveData(BattleSuspend.Data data)
        {
            if (data == null || !data.ivl)
            {
                return(false);
            }
            SceneBattle instance = SceneBattle.Instance;

            if (!UnityEngine.Object.op_Implicit((UnityEngine.Object)instance))
            {
                return(false);
            }
            BattleCore battle = instance.Battle;

            if (battle == null)
            {
                return(false);
            }
            BattleSuspend.Data.Header hdr = data.hdr;
            if (hdr.apv != Application.get_version())
            {
                DebugUtility.LogWarning("BattleSuspend/Restoration failure! Version is different.");
                return(false);
            }
            if (hdr.arv != AssetManager.AssetRevision)
            {
                DebugUtility.LogWarning("BattleSuspend/Restoration failure! Revision is different.");
                return(false);
            }
            if (hdr.qid != battle.QuestID)
            {
                DebugUtility.LogWarning("BattleSuspend/Restoration failure! QuestID is different.");
                return(false);
            }
            if (hdr.bid != battle.BtlID)
            {
                DebugUtility.LogWarning("BattleSuspend/Restoration failure! BattleID is different.");
                return(false);
            }
            GameUtility.Config_AutoMode_Treasure.Value     = hdr.cat;
            GameUtility.Config_AutoMode_DisableSkill.Value = hdr.cad;
            for (int count = battle.AllUnits.Count; count < data.uil.Count; ++count)
            {
                BattleSuspend.Data.UnitInfo unitInfo = data.uil[count];
                if (!string.IsNullOrEmpty(unitInfo.boi))
                {
                    battle.BreakObjCreate(unitInfo.boi, unitInfo.ugx, unitInfo.ugy, (Unit)null, (LogSkill)null, 0);
                }
            }
            for (int index = 0; index < data.uil.Count && index < battle.AllUnits.Count; ++index)
            {
                BattleSuspend.Data.UnitInfo unit_info = data.uil[index];
                Unit allUnit = battle.AllUnits[index];
                if (!(allUnit.UnitName != unit_info.nam))
                {
                    allUnit.SetupSuspend(battle, unit_info);
                }
            }
            BattleCore.Record questRecord = battle.GetQuestRecord();
            using (List <BattleSuspend.Data.UsedItem> .Enumerator enumerator = data.itl.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    BattleSuspend.Data.UsedItem current = enumerator.Current;
                    questRecord.used_items[(OString)current.iti] = (OInt)current.num;
                    ItemData inventoryByItemId = battle.FindInventoryByItemID(current.iti);
                    if (inventoryByItemId != null)
                    {
                        inventoryByItemId.Used(current.num);
                    }
                }
            }
            TrickData.ClearEffect();
            using (List <BattleSuspend.Data.TrickInfo> .Enumerator enumerator = data.trl.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    BattleSuspend.Data.TrickInfo current = enumerator.Current;
                    Unit unitFromAllUnits = BattleSuspend.GetUnitFromAllUnits(battle, current.cun);
                    TrickData.SuspendEffect(current.tid, current.grx, current.gry, current.tag, unitFromAllUnits, current.ccl, current.rnk, current.rcp, current.rac);
                }
            }
            using (List <BattleSuspend.Data.SkillExecLogInfo> .Enumerator enumerator = data.sel.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    BattleSuspend.Data.SkillExecLogInfo current      = enumerator.Current;
                    BattleCore.SkillExecLog             skillExecLog = new BattleCore.SkillExecLog();
                    skillExecLog.Restore(current);
                    battle.SkillExecLogs.Add(current.inm, skillExecLog);
                }
            }
            BattleSuspend.Data.Variables var = data.var;
            battle.WinTriggerCount   = var.wtc;
            battle.LoseTriggerCount  = var.ltc;
            battle.ActionCount       = var.act;
            battle.Killstreak        = var.kls;
            battle.MaxKillstreak     = var.mks;
            battle.TotalHeal         = var.thl;
            battle.TotalDamagesTaken = var.tdt;
            battle.TotalDamages      = var.tdm;
            battle.NumUsedItems      = var.nui;
            battle.NumUsedSkills     = var.nus;
            battle.ClockTime         = var.ctm;
            battle.ClockTimeTotal    = var.ctt;
            battle.ContinueCount     = var.coc;
            battle.FinisherIname     = var.fns;
            instance.GoldCount       = var.glc;
            instance.RestoreTreasureCount(var.trc);
            battle.Seed              = var.rsd;
            battle.PlayByManually    = var.pbm;
            battle.IsUseAutoPlayMode = var.uam;
            if (var.ris != null)
            {
                for (int index = 0; index < var.ris.Length; ++index)
                {
                    battle.SetRandSeed(index, var.ris[index]);
                }
            }
            if (var.gsl.Count == battle.GimmickEventList.Count)
            {
                for (int index = 0; index < var.gsl.Count; ++index)
                {
                    BattleSuspend.Data.Variables.GimmickEvent gimmickEvent = var.gsl[index];
                    battle.GimmickEventList[index].count       = gimmickEvent.ctr;
                    battle.GimmickEventList[index].IsCompleted = gimmickEvent.cmp != 0;
                }
            }
            if (var.ssl.Count != 0)
            {
                battle.EventTriggers = new bool[var.ssl.Count];
                for (int index = 0; index < var.ssl.Count; ++index)
                {
                    BattleSuspend.Data.Variables.ScriptEvent scriptEvent = var.ssl[index];
                    battle.EventTriggers[index] = scriptEvent.trg;
                }
            }
            Dictionary <string, int> dictionary1 = new Dictionary <string, int>();
            int num1 = Math.Min(var.tkk.Length, var.tkv.Length);

            for (int index = 0; index < num1; ++index)
            {
                dictionary1.Add(var.tkk[index], var.tkv[index]);
            }
            battle.TargetKillstreak = dictionary1;
            Dictionary <string, int> dictionary2 = new Dictionary <string, int>();
            int num2 = Math.Min(var.mtk.Length, var.mtv.Length);

            for (int index = 0; index < num2; ++index)
            {
                dictionary2.Add(var.mtk[index], var.mtv[index]);
            }
            battle.MaxTargetKillstreak = dictionary2;
            BattleSuspend.Data.Variables.WeatherInfo wti = var.wti;
            if (!string.IsNullOrEmpty(wti.wid))
            {
                Unit unitFromAllUnits = BattleSuspend.GetUnitFromAllUnits(battle, wti.mun);
                WeatherData.SuspendWeather(wti.wid, battle.Units, unitFromAllUnits, wti.rnk, wti.rcp, wti.ccl);
            }
            return(true);
        }