You've already forked taptap2024_GJ_chidouren
init
This commit is contained in:
243
Assets/Scripts/System/Account/Account.cs
Normal file
243
Assets/Scripts/System/Account/Account.cs
Normal file
@@ -0,0 +1,243 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user