353 lines
11 KiB
C#
353 lines
11 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using GCGame.Table;
|
|
using System;
|
|
|
|
public class ClientCustomData {
|
|
|
|
// 是否已经同步过一次服务器上的数据
|
|
private bool hasRestoreSkillData = false; // 技能是否已经同步过
|
|
public bool HasRestoreSkillData
|
|
{
|
|
get { return hasRestoreSkillData; }
|
|
}
|
|
|
|
[Serializable]
|
|
public class CustomData
|
|
{
|
|
// 技能页 <技能页索引(一二三四), 技能页>
|
|
[Serializable]
|
|
public class SkillListStruct
|
|
{
|
|
public int key;
|
|
|
|
[SerializeField]
|
|
public UserConfigData.SkillSavePage value;
|
|
}
|
|
|
|
[SerializeField]
|
|
public List<SkillListStruct> skillDic = new List<SkillListStruct>();
|
|
|
|
//public bool ContainsKey(int key)
|
|
//{
|
|
// if(skillDic == null)
|
|
// {
|
|
// return false;
|
|
// }
|
|
|
|
// for(int i = 0; i < skillDic.Count; ++i)
|
|
// {
|
|
// if(skillDic[i].key == key)
|
|
// {
|
|
// return true;
|
|
// }
|
|
// }
|
|
|
|
// return false;
|
|
//}
|
|
|
|
//public Dictionary<int, UserConfigData.SkillSavePage> skillDic = new Dictionary<int, UserConfigData.SkillSavePage>();
|
|
|
|
// 自动吃药
|
|
[SerializeField]
|
|
public AutoMedicInfoStruct autoMedicInfo = new AutoMedicInfoStruct();
|
|
}
|
|
|
|
// 自动吃药数据
|
|
// 实时变化,还是走引用吧
|
|
[Serializable]
|
|
public class AutoMedicInfoStruct
|
|
{
|
|
public int isAutoHpOn;
|
|
public int isAutoMpOn;
|
|
public float hpPercent;
|
|
public float mpPercent;
|
|
public List<int> autoHpIdList;
|
|
public List<int> autoMpIdList;
|
|
public AutoMedicInfoStruct()
|
|
{
|
|
isAutoHpOn = 1;
|
|
isAutoMpOn = 1;
|
|
hpPercent = 0.911f;
|
|
mpPercent = 0.911f;
|
|
autoHpIdList = new List<int> { -1 };
|
|
autoMpIdList = new List<int> { -1 };
|
|
}
|
|
public AutoMedicInfoStruct(int isHpOn, int isMpOn, float hpPer, float mpPer, List<int> hpIdList, List<int> mpIdList)
|
|
{
|
|
isAutoHpOn = isHpOn;
|
|
isAutoMpOn = isMpOn;
|
|
hpPercent = hpPer;
|
|
mpPercent = mpPer;
|
|
|
|
if (hpIdList != null)
|
|
{
|
|
autoHpIdList = new List<int>();
|
|
autoHpIdList.AddRange(hpIdList);
|
|
}
|
|
else
|
|
autoHpIdList = null;
|
|
|
|
if (mpIdList != null)
|
|
{
|
|
autoMpIdList = new List<int>();
|
|
autoMpIdList.AddRange(mpIdList);
|
|
}
|
|
else
|
|
autoMpIdList = null;
|
|
}
|
|
}
|
|
|
|
private CustomData playerCustomData;
|
|
public CustomData PlayerCustomData
|
|
{
|
|
get { return playerCustomData; }
|
|
private set { }
|
|
}
|
|
|
|
private string jsonStr = "";
|
|
|
|
public ClientCustomData()
|
|
{
|
|
playerCustomData = new CustomData();
|
|
}
|
|
|
|
// 请求以保存的数据
|
|
public void ReqClienCustomData()
|
|
{
|
|
ReqClientCustomData req = new ReqClientCustomData();
|
|
req.nilparam = 1;
|
|
req.SendMsg();
|
|
}
|
|
|
|
// 存数据与服务器
|
|
public void SaveDataToServer()
|
|
{
|
|
if (playerCustomData != null)
|
|
{
|
|
jsonStr = JsonUtility.ToJson(playerCustomData);
|
|
|
|
ReqSaveClientCustomData req = new ReqSaveClientCustomData();
|
|
req.data = jsonStr;
|
|
req.SendMsg();
|
|
}
|
|
|
|
RefreshAutoMedicInfo();
|
|
}
|
|
|
|
// 保存技能页数据
|
|
public void SaveSkillPageData()
|
|
{
|
|
if (playerCustomData.skillDic == null)
|
|
{
|
|
playerCustomData.skillDic = new List<CustomData.SkillListStruct>();
|
|
}
|
|
|
|
playerCustomData.skillDic.Clear();
|
|
|
|
foreach (var skillPage in UserConfigData._SkillPages)
|
|
{
|
|
if(skillPage.RoleGuid != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
CustomData.SkillListStruct newOne = new CustomData.SkillListStruct();
|
|
newOne.key = skillPage.PageIdx;
|
|
newOne.value = skillPage;
|
|
playerCustomData.skillDic.Add(newOne);
|
|
}
|
|
|
|
SaveDataToServer();
|
|
}
|
|
|
|
// 重装服务器返回的数据到到本地
|
|
// 该函数最好只触发一次。
|
|
public void RestoreData(RetClientCustomData packet)
|
|
{
|
|
// 解析json
|
|
CustomData packetData = JsonUtility.FromJson<CustomData>(packet.data);
|
|
if(packetData == null)
|
|
{
|
|
//证明第一次加载,需要默认勾选全部药品
|
|
UpdateAutoMedicInfo(null);
|
|
}else
|
|
{
|
|
UpdateAutoMedicInfo(packetData.autoMedicInfo);
|
|
SaveAndUpdateSkillPage(packetData.skillDic);
|
|
}
|
|
}
|
|
|
|
public void UpdateAutoMedicInfo(AutoMedicInfoStruct autoMedicInfo)
|
|
{
|
|
// 药品
|
|
playerCustomData.autoMedicInfo = autoMedicInfo;
|
|
|
|
if (playerCustomData.autoMedicInfo == null)
|
|
{
|
|
playerCustomData.autoMedicInfo = new AutoMedicInfoStruct();
|
|
|
|
playerCustomData.autoMedicInfo.isAutoHpOn = 1;
|
|
playerCustomData.autoMedicInfo.isAutoMpOn = 1;
|
|
playerCustomData.autoMedicInfo.hpPercent = 0.501f;
|
|
playerCustomData.autoMedicInfo.mpPercent = 0.501f;
|
|
|
|
playerCustomData.autoMedicInfo.autoHpIdList = new List<int>();
|
|
//第一次加载
|
|
var autoUseItemTab = TableManager.GetAutoUseItem();
|
|
playerCustomData.autoMedicInfo.autoMpIdList = new List<int>();
|
|
foreach (var item in autoUseItemTab)
|
|
{
|
|
if (item.Value.SubClassID == 4 && !playerCustomData.autoMedicInfo.autoHpIdList.Contains(item.Key))
|
|
{
|
|
playerCustomData.autoMedicInfo.autoHpIdList.Add(item.Key);
|
|
}
|
|
|
|
if (item.Value.SubClassID == 5 && !playerCustomData.autoMedicInfo.autoMpIdList.Contains(item.Key))
|
|
{
|
|
playerCustomData.autoMedicInfo.autoMpIdList.Add(item.Key);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (playerCustomData.autoMedicInfo.autoHpIdList == null)
|
|
playerCustomData.autoMedicInfo.autoHpIdList = new List<int> { -1 };
|
|
|
|
if (playerCustomData.autoMedicInfo.autoMpIdList == null)
|
|
playerCustomData.autoMedicInfo.autoMpIdList = new List<int> { -1 };
|
|
}
|
|
}
|
|
|
|
public void RefreshAutoMedicInfo()
|
|
{
|
|
if (AutoUseMedicPanelCtrl.Instance)
|
|
AutoUseMedicPanelCtrl.Instance.LoadMySetting();
|
|
}
|
|
|
|
// 更新数据
|
|
private void SaveAndUpdateSkillPage(List<CustomData.SkillListStruct> data)
|
|
{
|
|
// 确保仅同步一次
|
|
if(hasRestoreSkillData == true)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(data == null || data.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int pageIndex;
|
|
|
|
if(UserConfigData._SkillPages == null)
|
|
{
|
|
UserConfigData._SkillPages = new List<UserConfigData.SkillSavePage>();
|
|
foreach (var kv in data)
|
|
{
|
|
UserConfigData._SkillPages.Add(kv.value);
|
|
|
|
if (kv.value.IsUsing > 0)
|
|
{
|
|
UserConfigData._CurSkillPage = kv.value;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 用服务器的数据全部替换本地的数据(如果有的话)
|
|
for (int i = 0; i < UserConfigData._SkillPages.Count; ++i)
|
|
{
|
|
pageIndex = UserConfigData._SkillPages[i].PageIdx;
|
|
|
|
for(int j = 0; j < data.Count; ++j)
|
|
{
|
|
if(data[j].key == pageIndex && data[j].value.RoleGuid == UserConfigData._SkillPages[i].RoleGuid)
|
|
{
|
|
UserConfigData._SkillPages[i].PageName = data[j].value.PageName;
|
|
UserConfigData._SkillPages[i].IsUsing = data[j].value.IsUsing;
|
|
UserConfigData._SkillPages[i].SkillIdxs = data[j].value.SkillIdxs;
|
|
|
|
if (UserConfigData._SkillPages[i].IsUsing > 0)
|
|
{
|
|
UserConfigData._CurSkillPage = UserConfigData._SkillPages[i];
|
|
}
|
|
|
|
data.RemoveAt(j);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//if (data.ContainsKey(pageIndex) && data[pageIndex].RoleGuid == UserConfigData._SkillPages[i].RoleGuid)
|
|
//{
|
|
// UserConfigData._SkillPages[i].PageName = data[pageIndex].PageName;
|
|
// UserConfigData._SkillPages[i].IsUsing = data[pageIndex].IsUsing;
|
|
// UserConfigData._SkillPages[i].SkillIdxs = data[pageIndex].SkillIdxs;
|
|
|
|
// if (UserConfigData._SkillPages[i].IsUsing > 0)
|
|
// {
|
|
// UserConfigData._CurSkillPage = UserConfigData._SkillPages[i];
|
|
// }
|
|
|
|
// data.Remove(pageIndex);
|
|
//}
|
|
}
|
|
|
|
// 如果有比本地多的数据,继续添加
|
|
foreach (var kv in data)
|
|
{
|
|
UserConfigData._SkillPages.Add(kv.value);
|
|
|
|
if (kv.value.IsUsing > 0)
|
|
{
|
|
UserConfigData._CurSkillPage = kv.value;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (SkillBarLogic.Instance() != null)
|
|
{
|
|
hasRestoreSkillData = true;
|
|
SkillBarLogic.Instance().RefreshSkillBarInfo();
|
|
}
|
|
}
|
|
|
|
public void SortAutoItemDataList()
|
|
{
|
|
playerCustomData.autoMedicInfo.autoHpIdList.Sort(SortItemIdListByLevel);
|
|
playerCustomData.autoMedicInfo.autoMpIdList.Sort(SortItemIdListByLevel);
|
|
}
|
|
|
|
//药品数量变化刷新
|
|
public static int SortItemIdListByLevel(int itemA, int itemB)
|
|
{
|
|
if (itemA == itemB)
|
|
return 0;
|
|
|
|
var autoUseItemTabA = TableManager.GetAutoUseItemByID(itemA, 0);
|
|
var autoUseItemTabB = TableManager.GetAutoUseItemByID(itemB, 0);
|
|
var backPack = GameManager.gameManager.PlayerDataPool.BackPack;
|
|
|
|
if (autoUseItemTabA == null || autoUseItemTabB == null)
|
|
return itemA < itemB ? -1 : 1;
|
|
|
|
var itemACount = backPack.GetItemCountByDataId(itemA);
|
|
var itemBCount = backPack.GetItemCountByDataId(itemB);
|
|
|
|
if (itemACount > 0 && itemBCount <= 0)
|
|
{
|
|
return -1;
|
|
}
|
|
else if (itemACount <= 0 && itemBCount > 0)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return autoUseItemTabA.NeedLevel > autoUseItemTabB.NeedLevel ? 1 : -1;
|
|
}
|
|
}
|
|
}
|