216 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.6 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;
 | |
| 
 | |
|         [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<MMOTaskRecord> mTaskRecordList = new List<MMOTaskRecord>();
 | |
|         public List<MMOTaskRecord> TaskRecordList => mTaskRecordList;
 | |
| 
 | |
|         [SerializeField] private Dictionary<string, int> mTaskValueDic = new Dictionary<string, int>();
 | |
| 
 | |
|         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;
 | |
|     }
 | |
| } |