383 lines
11 KiB
C#
383 lines
11 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace MMO
|
|
{
|
|
public class MMOUserData : MMOStorageBase<MMOUserData>
|
|
{
|
|
public Action<int> DelUpdateDiamond;
|
|
public Action<int> DelUpdateLevel;
|
|
|
|
public bool HasRegistered => !string.IsNullOrEmpty(mUsername);
|
|
|
|
[SerializeField] private bool mHasFirstLoaded = false;
|
|
public bool HasFirstLoaded
|
|
{
|
|
get => mHasFirstLoaded;
|
|
}
|
|
|
|
[SerializeField] private bool mHasFirstSubmitted = false;
|
|
public bool HasFirstSubmitted
|
|
{
|
|
get => mHasFirstSubmitted;
|
|
}
|
|
|
|
[SerializeField] private bool mIsGuideFinished = false;
|
|
public bool IsGuideFinished
|
|
{
|
|
get => mIsGuideFinished;
|
|
}
|
|
|
|
[SerializeField] private bool mHasBeenInvited = false;
|
|
public bool HasBeenInvited
|
|
{
|
|
get => mHasBeenInvited;
|
|
set
|
|
{
|
|
mHasBeenInvited = value;
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private bool mIsMMOUser = false;
|
|
public bool IsMMOUser
|
|
{
|
|
get => mIsMMOUser;
|
|
set
|
|
{
|
|
mIsMMOUser = value;
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private string mUsername = "";
|
|
public string Username
|
|
{
|
|
get => mUsername;
|
|
set
|
|
{
|
|
mUsername = value;
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private int mSex = 1;
|
|
public int Sex
|
|
{
|
|
get => mSex;
|
|
set
|
|
{
|
|
mSex = value;
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private int mDiamond = 0;
|
|
public int Diamond
|
|
{
|
|
get => mDiamond;
|
|
set
|
|
{
|
|
mDiamond = value;
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private int mGameLevel = 0;
|
|
public int GameLevel
|
|
{
|
|
get => mGameLevel;
|
|
set
|
|
{
|
|
mGameLevel = value;
|
|
DelUpdateLevel?.Invoke(mGameLevel);
|
|
|
|
Save();
|
|
}
|
|
}
|
|
|
|
[SerializeField] private int mRecordCount = 0;
|
|
[SerializeField] private List<MMOTaskRecord> mTaskRecordList = new List<MMOTaskRecord>();
|
|
public List<MMOTaskRecord> TaskRecordList => mTaskRecordList;
|
|
|
|
[SerializeField] private Dictionary<string, int> mTaskValueDic = new Dictionary<string, int>();
|
|
[SerializeField] private List<string> mTaskFinishList = new List<string>();
|
|
|
|
[SerializeField] private Dictionary<int, int> mSkinPieceCountDic = new Dictionary<int, int>();
|
|
[SerializeField] private Dictionary<int, int> mSkinAdCountDic = new Dictionary<int, int>();
|
|
[SerializeField] private List<int> mSkinRedeemList = new List<int>();
|
|
|
|
public void FinishLoading()
|
|
{
|
|
mHasFirstLoaded = true;
|
|
Save();
|
|
}
|
|
|
|
public void FinishFirstSubmit()
|
|
{
|
|
mHasFirstSubmitted = true;
|
|
Save();
|
|
}
|
|
|
|
public void FinishGuide()
|
|
{
|
|
mIsGuideFinished = true;
|
|
Save();
|
|
}
|
|
|
|
#region Task
|
|
public void GenerateTaskRecord(int pTaskID)
|
|
{
|
|
mRecordCount++;
|
|
MMODataTask tTask = MMOTableTask.Instance.GetData(pTaskID);
|
|
|
|
MMOTaskRecord tRecord = new MMOTaskRecord();
|
|
tRecord.RecordID = "TaskRecord" + mRecordCount;
|
|
tRecord.RewardNum = tTask.RewardNum;
|
|
|
|
tRecord.TaskID = pTaskID;
|
|
tRecord.TaskType = tTask.TaskType;
|
|
tRecord.TargetNum = tTask.TargetNum;
|
|
AddTaskValue(tRecord);
|
|
|
|
mTaskRecordList.Add(tRecord);
|
|
|
|
Save();
|
|
}
|
|
|
|
public void ModifyTaskRecord(string pRecordID, int pNewTaskID)
|
|
{
|
|
MMOTaskRecord tRecord = mTaskRecordList.Find(pItem => pItem.RecordID.Equals(pRecordID));
|
|
if (tRecord != null)
|
|
{
|
|
MMODataTask tTask = MMOTableTask.Instance.GetData(pNewTaskID);
|
|
|
|
tRecord.TaskID = pNewTaskID;
|
|
tRecord.TaskType = tTask.TaskType;
|
|
tRecord.TargetNum = tTask.TargetNum;
|
|
AddTaskValue(tRecord);
|
|
|
|
Save();
|
|
}
|
|
}
|
|
|
|
public void RemoveTaskRecord(string pRecordID)
|
|
{
|
|
MMOTaskRecord tRecord = mTaskRecordList.Find(pItem => pItem.RecordID.Equals(pRecordID));
|
|
if (tRecord != null)
|
|
{
|
|
mTaskRecordList.Remove(tRecord);
|
|
Save();
|
|
}
|
|
}
|
|
|
|
public bool HasTaskRecordOfType(MMOTaskType pType)
|
|
{
|
|
return mTaskRecordList.Find(pItem => pItem.TaskType == pType) != null;
|
|
}
|
|
|
|
public void CheckTask()
|
|
{
|
|
if (mTaskRecordList == null)
|
|
{
|
|
GenerateTaskRecord(-1);
|
|
GenerateTaskRecord(-2);
|
|
GenerateTaskRecord(101);
|
|
GenerateTaskRecord(201);
|
|
}
|
|
else
|
|
{
|
|
if (!HasFinishedTaskToday(MMOTaskType.DailyReward) && !HasTaskRecordOfType(MMOTaskType.DailyReward))
|
|
{
|
|
GenerateTaskRecord(-1);
|
|
}
|
|
if (!HasFinishedTask(MMOTaskType.InviteUsers) && !HasTaskRecordOfType(MMOTaskType.InviteUsers))
|
|
{
|
|
GenerateTaskRecord(-2);
|
|
}
|
|
if (!HasFinishedTask(MMOTaskType.GetDiamond) && !HasTaskRecordOfType(MMOTaskType.GetDiamond))
|
|
{
|
|
GenerateTaskRecord(101);
|
|
}
|
|
if (!HasFinishedTask(MMOTaskType.PassLevel) && !HasTaskRecordOfType(MMOTaskType.PassLevel))
|
|
{
|
|
GenerateTaskRecord(201);
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < mTaskRecordList.Count; i++)
|
|
{
|
|
AddTaskValue(mTaskRecordList[i]);
|
|
}
|
|
}
|
|
|
|
public void FinishTask(MMOTaskType pType)
|
|
{
|
|
int tDayOfYear = DateTime.Now.DayOfYear;
|
|
string tSaveStr = pType.ToString() + "_" + tDayOfYear;
|
|
if (!mTaskFinishList.Contains(tSaveStr))
|
|
{
|
|
mTaskFinishList.Add(tSaveStr);
|
|
Save();
|
|
}
|
|
}
|
|
|
|
public bool HasFinishedTask(MMOTaskType pType)
|
|
{
|
|
bool tHasFinished = false;
|
|
for (int i = 0; i < mTaskFinishList.Count; i++)
|
|
{
|
|
string tTaskStr = mTaskFinishList[i];
|
|
if (tTaskStr.Contains(pType.ToString()))
|
|
{
|
|
tHasFinished = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return tHasFinished;
|
|
}
|
|
|
|
public bool HasFinishedTaskToday(MMOTaskType pType)
|
|
{
|
|
int tDayOfYear = DateTime.Now.DayOfYear;
|
|
string tSaveStr = pType.ToString() + "_" + tDayOfYear;
|
|
|
|
return mTaskFinishList.Contains(tSaveStr);
|
|
}
|
|
|
|
public void AddTaskValue(MMOTaskRecord pRecord)
|
|
{
|
|
if (!mTaskValueDic.ContainsKey(pRecord.RecordKey))
|
|
{
|
|
int tValue = 0;
|
|
|
|
if (pRecord.TaskType == MMOTaskType.GetDiamond)
|
|
{
|
|
tValue = mDiamond;
|
|
}
|
|
else if (pRecord.TaskType == MMOTaskType.PassLevel)
|
|
{
|
|
tValue = mGameLevel;
|
|
}
|
|
else if (pRecord.TaskType == MMOTaskType.RiseRank)
|
|
{
|
|
MMODataTask tTask = MMOTableTask.Instance.GetData(pRecord.TaskID);
|
|
tValue = UnityEngine.Random.Range(tTask.InitialMin, tTask.InitialMax);
|
|
}
|
|
|
|
mTaskValueDic.Add(pRecord.RecordKey, tValue);
|
|
Save();
|
|
}
|
|
}
|
|
|
|
public void SetTaskValue(string pKey, int pValue)
|
|
{
|
|
if (!mTaskValueDic.ContainsKey(pKey))
|
|
{
|
|
return;
|
|
}
|
|
|
|
mTaskValueDic[pKey] = pValue;
|
|
|
|
Save();
|
|
}
|
|
|
|
public int GetTaskValue(string pKey)
|
|
{
|
|
if (!mTaskValueDic.ContainsKey(pKey))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return mTaskValueDic[pKey];
|
|
}
|
|
#endregion
|
|
|
|
#region Skin
|
|
public void AddSkinPieceCount(int pSkinID, int pAddCount)
|
|
{
|
|
if (!mSkinPieceCountDic.ContainsKey(pSkinID))
|
|
{
|
|
mSkinPieceCountDic[pSkinID] = 0;
|
|
}
|
|
|
|
mSkinPieceCountDic[pSkinID] += pAddCount;
|
|
Save();
|
|
}
|
|
|
|
public int GetSkinPieceCount(int pSkinID)
|
|
{
|
|
if (!mSkinPieceCountDic.ContainsKey(pSkinID))
|
|
{
|
|
mSkinPieceCountDic[pSkinID] = 0;
|
|
}
|
|
|
|
return mSkinPieceCountDic[pSkinID];
|
|
}
|
|
|
|
public void AddSkinAdCount(int pSkinID)
|
|
{
|
|
if (!mSkinAdCountDic.ContainsKey(pSkinID))
|
|
{
|
|
mSkinAdCountDic[pSkinID] = 0;
|
|
}
|
|
|
|
mSkinAdCountDic[pSkinID]++;
|
|
Save();
|
|
}
|
|
|
|
public bool IsSkinAdAvailable(int pSkinID)
|
|
{
|
|
MMODataSkin tData = MMOTableSkin.Instance.GetData(pSkinID);
|
|
if(!mSkinAdCountDic.ContainsKey(pSkinID))
|
|
{
|
|
mSkinAdCountDic[pSkinID] = 0;
|
|
}
|
|
|
|
return mSkinAdCountDic[pSkinID] < 10 && GetSkinPieceCount(pSkinID) < tData.MaxCount;
|
|
}
|
|
|
|
public void RedeemSkin(int pSkinID)
|
|
{
|
|
if (!mSkinRedeemList.Contains(pSkinID))
|
|
{
|
|
mSkinRedeemList.Add(pSkinID);
|
|
Save();
|
|
}
|
|
}
|
|
|
|
public bool IsSkinRedeemed(int pSkinID)
|
|
{
|
|
return mSkinRedeemList.Contains(pSkinID);
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
[Serializable]
|
|
public class MMOTaskRecord
|
|
{
|
|
public string RecordID;
|
|
public int TaskID;
|
|
public MMOTaskType TaskType;
|
|
public int RewardNum;
|
|
public int TargetNum;
|
|
|
|
public string RecordKey
|
|
{
|
|
get
|
|
{
|
|
if (TaskType == MMOTaskType.DailyReward || TaskType == MMOTaskType.DailyLevel || TaskType == MMOTaskType.DailyAds)
|
|
{
|
|
return string.Format("{0}_{1}:{2}_{3}", RecordID, TaskID, DateTime.Now.Year, DateTime.Now.DayOfYear);
|
|
}
|
|
|
|
return string.Format("{0}_{1}", RecordID, TaskID);
|
|
}
|
|
}
|
|
|
|
public bool IsFinished => MMOUserData.Instance.GetTaskValue(RecordKey) >= TargetNum;
|
|
}
|
|
} |