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; | |||
|  |     } | |||
|  | } |