using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MMO { public class MMOUserData : MMOStorageBase { public Action DelUpdateDiamond; public Action DelUpdateLevel; [SerializeField] private bool mHasFirstLoaded = false; public bool HasFirstLoaded { get => mHasFirstLoaded; } [SerializeField] private bool mIsGuideFinished = false; public bool IsGuideFinished { get => mIsGuideFinished; } [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; DelUpdateDiamond?.Invoke(mDiamond); 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 mTaskRecordList = new List(); public List TaskRecordList => mTaskRecordList; [SerializeField] private Dictionary mTaskValueDic = new Dictionary(); public void FinishLoading() { mHasFirstLoaded = true; Save(); } public void FinishGuide() { mIsGuideFinished = true; Save(); } 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 void CheckTask() { for (int i = 0; i < mTaskRecordList.Count; i++) { AddTaskValue(mTaskRecordList[i]); } } 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) { tValue = UnityEngine.Random.Range(0, 1000); } mTaskValueDic.Add(pRecord.RecordKey, tValue); Save(); } } public int GetTaskValue(string pKey) { if (!mTaskValueDic.ContainsKey(pKey)) { return 0; } return mTaskValueDic[pKey]; } public void SetTaskValue(string pKey, int pValue) { if (!mTaskValueDic.ContainsKey(pKey)) { return; } mTaskValueDic[pKey] = pValue; Save(); } } [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.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; } }