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