Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA130_tagCMViewBillboard.cs
New file @@ -0,0 +1,28 @@ using UnityEngine; using System.Collections; // A1 30 查看榜单 #tagCMViewBillboard public class CA130_tagCMViewBillboard : GameNetPackBasic { public byte Type; //榜单类型 public uint GroupValue1; //分组值1 public uint GroupValue2; //分组值2,与分组值1组合归为同组榜单数据 public ushort StartIndex; //查看的起始索引, 默认0 非名次 public byte ViewCnt; //查看条数,默认20,单次最大不超过100,和StartIndex关联 public uint ViewID; //附带查看指定ID所在名次前后数据,如玩家ID、家族ID等,与ViewCnt无关,服务端固定返回条数 public CA130_tagCMViewBillboard () { combineCmd = (ushort)0x03FE; _cmd = (ushort)0xA130; } public override void WriteToBytes () { WriteBytes (Type, NetDataType.BYTE); WriteBytes (GroupValue1, NetDataType.DWORD); WriteBytes (GroupValue2, NetDataType.DWORD); WriteBytes (StartIndex, NetDataType.WORD); WriteBytes (ViewCnt, NetDataType.BYTE); WriteBytes (ViewID, NetDataType.DWORD); } } Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA130_tagCMViewBillboard.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 78f2a8b14f2fcf847b334e66a0c8bbcb MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA130_tagMCViewBillboardRet.cs
New file @@ -0,0 +1,13 @@ using UnityEngine; using System.Collections; // A1 30 查看榜单返回信息 #tagMCViewBillboardRet public class DTCA130_tagMCViewBillboardRet : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HA130_tagMCViewBillboardRet vNetData = vNetPack as HA130_tagMCViewBillboardRet; RankModel.Instance.ReceiveRankPagePackage(vNetData); } } Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA130_tagMCViewBillboardRet.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: ec09c0f2356707545b692363b8241ca5 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -93,6 +93,7 @@ Register(typeof(HB110_tagMCTaskInfo), typeof(DTCB110_tagMCTaskInfo)); Register(typeof(HA921_tagUpdatePlayerNameResult), typeof(DTCA921_tagUpdatePlayerNameResult)); Register(typeof(H3202_tagServerResponse), typeof(DTC3202_tagServerResponse)); Register(typeof(HA130_tagMCViewBillboardRet), typeof(DTCA130_tagMCViewBillboardRet)); } Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA130_tagMCViewBillboardRet.cs
New file @@ -0,0 +1,102 @@ using UnityEngine; using System.Collections; // A1 30 查看榜单返回信息 #tagMCViewBillboardRet public class HA130_tagMCViewBillboardRet : GameNetPackBasic { public byte Type; //榜单类型 public uint GroupValue1; //分组值1 public uint GroupValue2; //分组值2,与分组值1组合归为同组榜单数据 public ushort DataTotal; //该榜单实际总数据数,分页查询时可通过此值及返回的分页最后一条榜单数据所在索引判断是否还有未查询数据 public byte PageDataCnt; public tagMCViewBillboardData[] PageDataList; //返回分页数据列表 public uint ViewID; //附带查看指定ID所在名次前后数据,如玩家ID、家族ID等 public byte ViewIDDataCnt; public tagMCViewBillboardData[] ViewIDDataList; //ViewID所在名次前后数据列表 public HA130_tagMCViewBillboardRet () { _cmd = (ushort)0xA130; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out Type, vBytes, NetDataType.BYTE); TransBytes (out GroupValue1, vBytes, NetDataType.DWORD); TransBytes (out GroupValue2, vBytes, NetDataType.DWORD); TransBytes (out DataTotal, vBytes, NetDataType.WORD); TransBytes (out PageDataCnt, vBytes, NetDataType.BYTE); PageDataList = new tagMCViewBillboardData[PageDataCnt]; for (int i = 0; i < PageDataCnt; i ++) { PageDataList[i] = new tagMCViewBillboardData(); TransBytes (out PageDataList[i].Index, vBytes, NetDataType.WORD); TransBytes (out PageDataList[i].Rank, vBytes, NetDataType.WORD); TransBytes (out PageDataList[i].ID, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].ID2, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Name1, vBytes, NetDataType.Chars, 33); TransBytes (out PageDataList[i].Name2, vBytes, NetDataType.Chars, 65); TransBytes (out PageDataList[i].Type2, vBytes, NetDataType.BYTE); TransBytes (out PageDataList[i].Value1, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value2, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value3, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value4, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value5, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value6, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value7, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].Value8, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].CmpValue, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].CmpValue2, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].CmpValue3, vBytes, NetDataType.DWORD); TransBytes (out PageDataList[i].DataLen, vBytes, NetDataType.WORD); TransBytes (out PageDataList[i].UserData, vBytes, NetDataType.Chars, PageDataList[i].DataLen); } TransBytes (out ViewID, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataCnt, vBytes, NetDataType.BYTE); ViewIDDataList = new tagMCViewBillboardData[ViewIDDataCnt]; for (int i = 0; i < ViewIDDataCnt; i ++) { ViewIDDataList[i] = new tagMCViewBillboardData(); TransBytes (out ViewIDDataList[i].Index, vBytes, NetDataType.WORD); TransBytes (out ViewIDDataList[i].Rank, vBytes, NetDataType.WORD); TransBytes (out ViewIDDataList[i].ID, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].ID2, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Name1, vBytes, NetDataType.Chars, 33); TransBytes (out ViewIDDataList[i].Name2, vBytes, NetDataType.Chars, 65); TransBytes (out ViewIDDataList[i].Type2, vBytes, NetDataType.BYTE); TransBytes (out ViewIDDataList[i].Value1, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value2, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value3, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value4, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value5, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value6, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value7, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].Value8, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].CmpValue, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].CmpValue2, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].CmpValue3, vBytes, NetDataType.DWORD); TransBytes (out ViewIDDataList[i].DataLen, vBytes, NetDataType.WORD); TransBytes (out ViewIDDataList[i].UserData, vBytes, NetDataType.Chars, ViewIDDataList[i].DataLen); } } public struct tagMCViewBillboardData { public ushort Index; //数据在榜单列表中的索引,从0开始 public ushort Rank; //名次,从1开始,代表第1名 public uint ID; public uint ID2; public string Name1; //名字1,用来显示排序对象名字 public string Name2; //名字2 public byte Type2; //附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 public uint Value1; //自定义值1 public uint Value2; //自定义值2 public uint Value3; public uint Value4; public uint Value5; public uint Value6; public uint Value7; public uint Value8; public uint CmpValue; // 比较权值 public uint CmpValue2; // 比较权值 public uint CmpValue3; // 比较权值 public ushort DataLen; public string UserData; //附加信息 } } Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA130_tagMCViewBillboardRet.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 9a61e24bf32b41b47acd3b1c74d0e0cd MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/Main.cs
@@ -68,6 +68,7 @@ managers.Add(ChatManager.Instance); managers.Add(ChatBubbleManager.Instance); managers.Add(OfficialRankManager.Instance); managers.Add(RankModel.Instance); foreach (var manager in managers) { Main/Manager/UIManager.cs
@@ -156,10 +156,10 @@ result = BASE_SORTING_ORDER * 1000; break; case UILayer.System: result = BASE_SORTING_ORDER * 10000; result = BASE_SORTING_ORDER * 2000; break; case UILayer.Loading: result = BASE_SORTING_ORDER * 100000; result = BASE_SORTING_ORDER * 3000; break; default: result = BASE_SORTING_ORDER * 10; Main/System/BillboardRank.meta
New file @@ -0,0 +1,8 @@ fileFormatVersion: 2 guid: 08c1d8892b7d07f4da3aa064215c8ce6 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: Main/System/BillboardRank/RankModel.cs
New file @@ -0,0 +1,309 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; // 支持分页查询排行榜, 本服/跨服统一使用 参考QueryRankByPage 新封包 DTCA130_tagMCViewBillboardRet public class RankModel : GameSystemManager<RankModel> { public event Action<int> onRankRefresh; public event Action<int> onMyRankRefresh; public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; } public void OnBeforePlayerDataInitialize() { m_RankPageDatas.Clear(); m_RankIDToIndex.Clear(); queryRankCD.Clear(); } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; } void ReSetRankDataEx(RankData data, HA130_tagMCViewBillboardRet.tagMCViewBillboardData serverData, int type) { data.id = serverData.ID; data.id2 = (int)serverData.ID2; data.name1 = serverData.Name1.Trim().Replace("\0", ""); data.name2 = serverData.Name2.Trim().Replace("\0", ""); data.subType = serverData.Type2; data.value1 = serverData.Value1; data.value2 = serverData.Value2; data.value3 = serverData.Value3; data.value4 = serverData.Value4; data.value5 = serverData.Value5; data.value6 = serverData.Value6; data.value7 = serverData.Value7; data.value8 = serverData.Value8; data.cmpValue = serverData.CmpValue; data.cmpValue2 = serverData.CmpValue2; data.cmpValue3 = serverData.CmpValue3; data.userData = serverData.UserData; data.rank = serverData.Rank; data.type = type; data.index = serverData.Index; } #region 分页查询 Dictionary<int, int> queryRankCD = new Dictionary<int, int>(); //首次查询CD,不影响后续的分页查询 //分页查询 排名索引按字段存储 1代表第一名 Dictionary<int, Dictionary<int, RankData>> m_RankPageDatas = new Dictionary<int, Dictionary<int, RankData>>(); //类型:ID -排名索引,通过ID进行排重删除 不同名次 同ID的数据 Dictionary<int, Dictionary<int, int>> m_RankIDToIndex = new Dictionary<int, Dictionary<int, int>>(); //!!!本服分页查询使用说明 //1. QueryRankByPage:先查询第一页,startIndex = 0, count = 30, 在第一页查询前可以选择初始化ResetQueryParam //2. ListenRankPage:一般在滚动条OnRefreshCell监听排行榜显示名次,用于分页查询 // // startIndex 和 count 配对,与watchID无关联 // watchID; //查看指定ID名次前后,查询范围服务端已固定,如果只要查指定目标,count可以设置1减少附加信息 public void QueryRankByPage(int type, int startIndex = 0, int count = 20, int watchID = 0, bool forceQuery = false, int groupValue1 = 0, int groupValue2 = 0) { if (queryRankCD.ContainsKey(type) && !forceQuery) { if (Time.time - queryRankCD[type] < 2f) { return; } } var pak = new CA130_tagCMViewBillboard(); pak.Type = (byte)type; pak.GroupValue1 = (byte)groupValue1; pak.GroupValue2 = (uint)groupValue2; pak.StartIndex = (ushort)startIndex; //排名从0开始 pak.ViewCnt = (byte)count; pak.ViewID = (uint)watchID; GameNetSystem.Instance.SendInfo(pak); queryRankCD[type] = (int)Time.time; } //监听排行榜显示名次,用于分页查询,第一页查询由外部触发 //使用场景 如界面排行榜滚动的时候每次查询30个排名名额,在显示大于m*30 +20名时,监听下一页,查询m+1页 int pageCnt = 20; //每页查询条数 int queryPointNum = 12; //查询点 int queryPageCD = 60; //内部查询点CD 避免不断上下滑动的时候过于频繁查询,外部使用重新打开的时候可以重置CD Dictionary<int, float> queryPageTimes = new Dictionary<int, float>(); //查询页CD public void ListenRankPage(int type, int index, int groupValue1 = 0, int groupValue2 = 0) { int page = index / pageCnt; if (index > page * pageCnt + queryPointNum) { if (queryPageTimes.ContainsKey(page) && Time.realtimeSinceStartup - queryPageTimes[page] < queryPageCD) return; Debug.LogFormat("分页查询:{0} - {1}", index, page); QueryRankByPage(type, pageCnt * (page + 1), pageCnt, 0, true, groupValue1, groupValue2); queryPageTimes[page] = Time.realtimeSinceStartup; } } public void ResetQueryParam() { pageCnt = 20; queryPointNum = 12; queryPageCD = 60; queryPageTimes.Clear(); } public void SetQueryParm(int pageCnt, int queryPointNum, int queryPageCD) { this.pageCnt = pageCnt; this.queryPointNum = queryPointNum; this.queryPageCD = queryPageCD; queryPageTimes.Clear(); } //跨服排行榜信息 void ReSetRankData(RankData data, HA130_tagMCViewBillboardRet.tagMCViewBillboardData serverData, int type) { data.id = serverData.ID; data.id2 = (int)serverData.ID2; data.name1 = serverData.Name1.Replace("\0", ""); data.name2 = serverData.Name2.Replace("\0", ""); data.subType = serverData.Type2; data.value1 = serverData.Value1; data.value2 = serverData.Value2; data.value3 = serverData.Value3; data.value4 = serverData.Value4; data.value5 = serverData.Value5; data.value6 = serverData.Value6; data.value7 = serverData.Value7; data.value8 = serverData.Value8; data.cmpValue = serverData.CmpValue; data.cmpValue2 = serverData.CmpValue2; data.cmpValue3 = serverData.CmpValue3; data.userData = serverData.UserData; data.rank = serverData.Rank; data.index = serverData.Index; data.type = type; //与服务端一致的跨服排行榜类型,外部自行处理不同分组分赛季等情况 } //查询本服/跨服排行榜 public void ReceiveRankPagePackage(HA130_tagMCViewBillboardRet package) { int rankType = package.Type; //部分跨服排行榜同一个榜存在分组分区的情况 //赛区3位+赛季3位+排行榜类型3位 if (rankType == 165) //CrossServerOneVsOneRewardModel.rankType { rankType = (int)package.GroupValue1 * 1000000 + (int)package.GroupValue2 * 1000 + rankType; } if (!m_RankPageDatas.ContainsKey(rankType)) { m_RankPageDatas.Add(rankType, new Dictionary<int, RankData>()); } //同ID排重删除 if (!m_RankIDToIndex.ContainsKey(rankType)) { m_RankIDToIndex.Add(rankType, new Dictionary<int, int>()); } for (int i = 0; i < package.PageDataCnt; i++) { int id = (int)package.PageDataList[i].ID; int orderIndex = (int)package.PageDataList[i].Rank; if (!m_RankIDToIndex[rankType].ContainsKey(id)) { m_RankIDToIndex[rankType][id] = orderIndex; } else if (m_RankIDToIndex[rankType][id] != orderIndex) { m_RankPageDatas[rankType].Remove(m_RankIDToIndex[rankType][id]); m_RankIDToIndex[rankType][id] = orderIndex; } } for (int i = 0; i < package.PageDataCnt; i++) { int orderIndex = (int)package.PageDataList[i].Rank; if (!m_RankPageDatas[rankType].ContainsKey(orderIndex)) { m_RankPageDatas[rankType][orderIndex] = new RankData(); } ReSetRankDataEx(m_RankPageDatas[rankType][orderIndex], package.PageDataList[i], rankType); } if (package.ViewID != 0) { //查询指定目标排名 for (int i = 0; i < package.ViewIDDataCnt; i++) { int id = (int)package.ViewIDDataList[i].ID; int orderIndex = (int)package.ViewIDDataList[i].Rank; if (!m_RankIDToIndex[rankType].ContainsKey(id)) { m_RankIDToIndex[rankType][id] = orderIndex; } else if (m_RankIDToIndex[rankType][id] != orderIndex) { m_RankPageDatas[rankType].Remove(m_RankIDToIndex[rankType][id]); m_RankIDToIndex[rankType][id] = orderIndex; } } for (int i = 0; i < package.ViewIDDataCnt; i++) { int orderIndex = (int)package.ViewIDDataList[i].Rank; if (!m_RankPageDatas[rankType].ContainsKey(orderIndex)) { m_RankPageDatas[rankType][orderIndex] = new RankData(); } ReSetRankData(m_RankPageDatas[rankType][orderIndex], package.ViewIDDataList[i], package.Type); } onMyRankRefresh?.Invoke(package.Type); } else { onRankRefresh?.Invoke(package.Type); } } //排名从0 开始 //如果是跨服排行榜 类型可能因跨服功能不同 由分组分赛季等情况组合 public Dictionary<int, RankData> GetRankPageDatas(int type) { Dictionary<int, RankData> datas = null; if (m_RankPageDatas.TryGetValue(type, out datas)) { return datas; } return null; } ////如果是跨服排行榜 类型可能因跨服功能不同 由分组分赛季等情况组合 public RankData GetMyRank(int type) { var playerId = PlayerDatas.Instance.baseData.PlayerID; Dictionary<int, RankData> rankDatas = null; if (m_RankPageDatas.TryGetValue(type, out rankDatas)) { foreach (var item in rankDatas.Values) { if (item.id == playerId) { return item; } } } return null; } public RankData GetMyRankByID(int type, int queryID) { Dictionary<int, RankData> rankDatas = null; if (m_RankPageDatas.TryGetValue(type, out rankDatas)) { foreach (var item in rankDatas.Values) { if (item.id == queryID) { return item; } } } return null; } #endregion } public class RankData { public int type; //排行榜类型 public int subType; public uint id; public int id2; public string name1; public string name2; public uint value1; public uint value2; public uint value3; public uint value4; public uint value5; public uint value6; public uint value7; public uint value8; public uint cmpValue; public uint cmpValue2; public uint cmpValue3; public string userData; public int rank; // 排名从1开始,代表第1名 public int index; //数据在榜单列表中的索引,从0开始 非排名 分页查询会用到 } Main/System/BillboardRank/RankModel.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: f59839e755cb90448af976cf01af3979 timeCreated: 1508836973 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/BillboardRank/Top3Cell.cs
New file @@ -0,0 +1,24 @@ //-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Wednesday, September 26, 2018 //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; //通用的前3排名 public class Top3Cell : MonoBehaviour { //[SerializeField] Model 显示NPC 武将模型 public void Display(int index) { } } Main/System/BillboardRank/Top3Cell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 468f1b3d47e8482469eb71131b2e9056 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Boss/MainBossEnterWin.cs
@@ -14,8 +14,19 @@ { [SerializeField] Text fbNameText; [SerializeField] Button CloseBtn; [SerializeField] Button rankBtn; protected override void InitComponent() { CloseBtn.AddListener(CloseWindow); rankBtn.AddListener(()=> { RankModel.Instance.QueryRankByPage(1); UIManager.Instance.OpenWindow<MainBossRankWin>(); }); } protected override void OnPreOpen() { Main/System/Boss/MainBossRankWin.cs
@@ -12,7 +12,7 @@ public class MainBossRankWin : UIBase { // [SerializeField] List protected override void OnPreOpen() { Main/System/DailyQuest/DailyQuestModel.cs
@@ -169,6 +169,11 @@ { var QuestConfig = DailyQuestConfig.Get(id); var LVConfig = FuncOpenLVConfig.Get(QuestConfig.UnLockFuncID); if (LVConfig == null) { Debug.LogError($"DailyQuestConfig.Get({id}) == null"); return 9999999; } int NeedLV = 0; if (LVConfig.LimitLV != 0) { Main/System/Main/HomeWin.cs
@@ -28,6 +28,10 @@ [SerializeField] Text awardCnt; [SerializeField] UIEffect taskEffect; //关卡 [SerializeField] Button bossBtn; /// <summary> /// 初始化组件 /// </summary> @@ -35,6 +39,10 @@ { avatarCell.button.AddListener(() => { }); taskButton.AddListener(OnClickTaskButton); bossBtn.AddListener(() => { UIManager.Instance.OpenWindow<MainBossEnterWin>(); }); } Main/System/Store/StoreModel.cs
@@ -1471,6 +1471,11 @@ { var redable = false; var config = StoreConfig.Get(shopId); if (config == null) { Debug.LogError($"StoreConfig {shopId} is null"); continue; } switch (config.ShopType) { case 8: