using System; using System.Collections.Generic; using System.Game.Account; // using com.taptap.tapsdk.bindings.csharp; using FJson; using Framework.Save; using Framework.Utils; using Framework.Utils.Extend; using Framework.Utils.SingletonTemplate; // using LeanCloud.Storage; using ToffeeHttp.Runtime; using ToffeeHttp.Runtime.Core; using UnityEditor; using UnityEngine; public class Account : MgrBase { //单存档模式, 开启后只以本地存档作为唯一存档数据,并只会建立一份存档,如果为false,这会根据不同账号创建对应账号的本地存档数据(本地存放)并根据账号自动切换。 //此选项不建议后期频繁改动 private const bool SAVE_SINGE_MODEL = true; public AccountGameData AccountGameData; public AccountSystemData AccountSystemData; public string UserID { get { if (this.IsLogin) return this.Token; return this.LocalId; } } public string LocalId { get { if (this.LocalUserID == null) LoadLocalUserID(); return this.LocalUserID; } } private string SaveToken { get { #pragma warning disable CS0162 if (SAVE_SINGE_MODEL) { return this.LocalId; } else { return this.UserID; } #pragma warning restore CS0162 } } public string LocalUserID { get; private set; } public int LoginChannel { get; private set; } public bool IsLogin { get; private set; } public string Token { get; private set; } private const string LastTable = "Last"; private static string LastSaveToken(string table) => table + LastTable; protected override void OnCreateMge() { SetLogout(); } public void SetLogin(string token, int channel) { this.Token = token; this.LoginChannel = channel; this.IsLogin = true; LoadLocation(); } public void SetLogout() { this.Token = null; this.LocalUserID = null; this.LoginChannel = -1; this.IsLogin = false; // this.NetUser = null; LoadLocation(); } private void LoadLocalUserID() { if (PlayerPrefs.HasKey("LOCALUSERID")) { this.LocalUserID = PlayerPrefs.GetString("LOCALUSERID"); } else { this.LocalUserID = Guid.NewGuid().ToString(); PlayerPrefs.SetString("LOCALUSERID", this.LocalUserID); } } /// /// 加载本地指定token的资源 /// private void LoadLocation() { if (SaveManager.Instance.HasSave(SaveData.Game, this.SaveToken) == false) { if (SaveManager.Instance.HasSave(SaveData.Game, LastSaveToken(this.SaveToken))) { this.AccountGameData = SaveManager.Instance.Load(SaveData.Game, LastSaveToken(this.SaveToken)); } } else { try { this.AccountGameData = SaveManager.Instance.Load(SaveData.Game, this.SaveToken); if (this.AccountGameData == null || this.AccountGameData.IsNull()) { //如果主存档为空,尝试读取备用存档 this.AccountGameData = SaveManager.Instance.Load(SaveData.Game, LastSaveToken(this.SaveToken)); } else { //缓存到备用存档中 SaveManager.Instance.Save(SaveData.Game , this.AccountGameData,LastSaveToken(this.SaveToken)); } } catch (Exception e) { Debug.LogError("主存档异常!激活备份存档 " + e); //如果主存档为空,尝试读取备用存档 this.AccountGameData = SaveManager.Instance.Load(SaveData.Game, LastSaveToken(this.SaveToken)); } } if (this.AccountGameData == null) { this.AccountGameData = new AccountGameData(); SaveManager.Instance.Save(SaveData.Game , this.AccountGameData,LastSaveToken(this.SaveToken)); } if (SaveManager.Instance.HasSave(SaveData.System, this.SaveToken) == false) { if (SaveManager.Instance.HasSave(SaveData.System, LastSaveToken(this.SaveToken))) { this.AccountSystemData = SaveManager.Instance.Load(SaveData.System, LastSaveToken(this.SaveToken)); } } else { try { this.AccountSystemData = SaveManager.Instance.Load(SaveData.System, this.SaveToken); if (this.AccountSystemData == null || this.AccountSystemData.IsNull()) { //如果主存档为空,尝试读取备用存档 this.AccountSystemData = SaveManager.Instance.Load(SaveData.System, LastSaveToken(this.SaveToken)); } else { //缓存到备用存档中 SaveManager.Instance.Save(SaveData.System , this.AccountSystemData,LastSaveToken(this.SaveToken)); } } catch (Exception e) { //如果主存档为空,尝试读取备用存档 this.AccountSystemData = SaveManager.Instance.Load(SaveData.System, LastSaveToken(this.SaveToken)); } } if (this.AccountSystemData == null) { this.AccountSystemData = new AccountSystemData(); SaveManager.Instance.Save(SaveData.System , this.AccountSystemData,LastSaveToken(this.SaveToken)); } this.AccountGameData.NullCheck(); this.AccountSystemData.NullCheck(); SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken); SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken); } public void Save() { SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken); SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken); } public void Save(SaveData saveData) { #if UNITY_EDITOR Debug.Log("游戏存档更新: " + saveData); #endif switch (saveData) { case SaveData.Game: SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken); break; case SaveData.System: SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken); break; default: break; } } #if UNITY_EDITOR [MenuItem("Tools/ClearData")] public static void ClearData() { SaveManager.Instance.DeleteSave(SaveData.Game , Instance.SaveToken); SaveManager.Instance.DeleteSave(SaveData.System, Instance.SaveToken); Debug.Log("删除存档:" + SaveManager.Instance.BaseConfig.RootPath); } #endif /// /// 此处用于每次进入游戏后 将获取到的离线时长用于游戏内其他需要被显示时间影响的数据 /// /// public void OfflineControl (TimeSpan offlineTimeSpan) { // Account.Instance.AccountGameData.OncePriceRaffleDuration // = Account.Instance.AccountGameData.OncePriceRaffleDuration.Overly_Min (0 , -(float)offlineTimeSpan.TotalSeconds); // Account.Instance.AccountGameData.OncePriceRaffleDurationTenText // = Account.Instance.AccountGameData.OncePriceRaffleDurationTenText.Overly_Min (0 , -(float)offlineTimeSpan.TotalSeconds); Account.Instance.Save(SaveData.Game); } }