You've already forked taptap2024_GJ_chidouren
243 lines
8.0 KiB
C#
243 lines
8.0 KiB
C#
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<Account>
|
||
{
|
||
//单存档模式, 开启后只以本地存档作为唯一存档数据,并只会建立一份存档,如果为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);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 加载本地指定token的资源
|
||
/// </summary>
|
||
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<AccountGameData>(SaveData.Game, LastSaveToken(this.SaveToken));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(SaveData.Game, this.SaveToken);
|
||
if (this.AccountGameData == null || this.AccountGameData.IsNull())
|
||
{
|
||
//如果主存档为空,尝试读取备用存档
|
||
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(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<AccountGameData>(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<AccountSystemData>(SaveData.System, LastSaveToken(this.SaveToken));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, this.SaveToken);
|
||
if (this.AccountSystemData == null || this.AccountSystemData.IsNull())
|
||
{
|
||
//如果主存档为空,尝试读取备用存档
|
||
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, LastSaveToken(this.SaveToken));
|
||
}
|
||
else
|
||
{
|
||
//缓存到备用存档中
|
||
SaveManager.Instance.Save(SaveData.System , this.AccountSystemData,LastSaveToken(this.SaveToken));
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
//如果主存档为空,尝试读取备用存档
|
||
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(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
|
||
|
||
/// <summary>
|
||
/// 此处用于每次进入游戏后 将获取到的离线时长用于游戏内其他需要被显示时间影响的数据
|
||
/// </summary>
|
||
/// <param name="offlineTimeSpan"></param>
|
||
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);
|
||
}
|
||
|
||
} |