mergemilitary/Assets/MMOModule/Scripts/MMOStorage/MMOUserData.cs

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