少年修仙传客户端代码仓库
Client_PangDeRong
2018-10-22 f02e7141fcefa3337a173be530d7362b87ffa52a
4232 【前端】许愿池功能开发
18个文件已添加
6个文件已修改
986 ■■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA06_tagCMActWishing.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA06_tagCMActWishing.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA07_tagCMActWishingRefresh.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA07_tagCMActWishingRefresh.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA19_tagMCActWishingWellInfo.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA19_tagMCActWishingWellInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagMCActWishingWellPlayerInfo.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagMCActWishingWellPlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA19_tagMCActWishingWellInfo.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA19_tagMCActWishingWellInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagMCActWishingWellPlayerInfo.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagMCActWishingWellPlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactRankModel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationWishingWellInfo.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationWishingWellInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/PoolItemCell.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishGroupCell.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishGroupCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishingPoolModel.cs 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishingPoolWin.cs 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishingWarehouseWin.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/WishingWarehouseWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/OperationTimeHepler.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -386,6 +386,9 @@
        Register(typeof(HA3C1_tagMCDogzHelpbattleState), typeof(DTCA3C1_tagMCDogzHelpbattleState));
        #endregion
        Register(typeof(HA324_tagMCBindJadeWheelResult),typeof(DTCA324_tagMCBindJadeWheelResult));
        Register(typeof(HAA19_tagMCActWishingWellInfo), typeof(DTCAA19_tagMCActWishingWellInfo));
        Register(typeof(HAA1A_tagMCActWishingWellPlayerInfo), typeof(DTCAA1A_tagMCActWishingWellPlayerInfo));
    }
    private static void Register(Type _pack, Type _business)
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA06_tagCMActWishing.cs
New file
@@ -0,0 +1,24 @@
using UnityEngine;
using System.Collections;
// AA 06 许愿池活动许愿 #tagCMActWishing
public class CAA06_tagCMActWishing : GameNetPackBasic {
    public byte SrcWellType;    // 来源库 0-可选库 1-结果库
    public byte SrcIndex;    // 来源索引
    public byte DesWellType;    // 目标库 0-可选库 1-结果库
    public byte DesIndex;    // 目标索引
    public CAA06_tagCMActWishing () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xAA06;
    }
    public override void WriteToBytes () {
        WriteBytes (SrcWellType, NetDataType.BYTE);
        WriteBytes (SrcIndex, NetDataType.BYTE);
        WriteBytes (DesWellType, NetDataType.BYTE);
        WriteBytes (DesIndex, NetDataType.BYTE);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA06_tagCMActWishing.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a0799e6815403574f8e0804fc8f3489a
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA07_tagCMActWishingRefresh.cs
New file
@@ -0,0 +1,18 @@
using UnityEngine;
using System.Collections;
// AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh
public class CAA07_tagCMActWishingRefresh : GameNetPackBasic {
    public byte IsFree;    // 是否免费刷新
    public CAA07_tagCMActWishingRefresh () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xAA07;
    }
    public override void WriteToBytes () {
        WriteBytes (IsFree, NetDataType.BYTE);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CAA SaleActivity/CAA07_tagCMActWishingRefresh.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: b503cda0c98dd19448d4dc0e2093d333
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA19_tagMCActWishingWellInfo.cs
New file
@@ -0,0 +1,11 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// AA 19 许愿池活动信息 #tagMCActWishingWellInfo
public class DTCAA19_tagMCActWishingWellInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HAA19_tagMCActWishingWellInfo vNetData = vNetPack as HAA19_tagMCActWishingWellInfo;         OperationTimeHepler.Instance.UpdateWishingWellInfo(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA19_tagMCActWishingWellInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0f5809b019a6bd3458b831c341567252
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagMCActWishingWellPlayerInfo.cs
New file
@@ -0,0 +1,16 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// AA 1A 许愿池活动玩家信息 #tagMCActWishingWellPlayerInfo
public class DTCAA1A_tagMCActWishingWellPlayerInfo : DtcBasic {
    WishingPoolModel wishModel { get { return ModelCenter.Instance.GetModel<WishingPoolModel>(); } }
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HAA1A_tagMCActWishingWellPlayerInfo vNetData = vNetPack as HAA1A_tagMCActWishingWellPlayerInfo;         wishModel.SetWishingWellPlayerInfo(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagMCActWishingWellPlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f3b0342d3d2578d41a07f145e65fca6f
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA19_tagMCActWishingWellInfo.cs
New file
@@ -0,0 +1,43 @@
using UnityEngine;
using System.Collections;
// AA 19 许愿池活动信息 #tagMCActWishingWellInfo
public class HAA19_tagMCActWishingWellInfo : GameNetPackBasic {
    public string StartDate;    // 开始日期 y-m-d
    public string EndtDate;    // 结束日期 y-m-d
    public byte IsDayReset;    //是否每天重置
    public byte ResetType;    // 重置类型,0-0点重置;1-5点重置
    public ushort LimitLV;    // 限制等级
    public ushort Count;    // 物品数
    public  tagMCWishingWellItem[] WellItemInfo;    // 随机库物品信息
    public HAA19_tagMCActWishingWellInfo () {
        _cmd = (ushort)0xAA19;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out StartDate, vBytes, NetDataType.Chars, 10);
        TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10);
        TransBytes (out IsDayReset, vBytes, NetDataType.BYTE);
        TransBytes (out ResetType, vBytes, NetDataType.BYTE);
        TransBytes (out LimitLV, vBytes, NetDataType.WORD);
        TransBytes (out Count, vBytes, NetDataType.WORD);
        WellItemInfo = new tagMCWishingWellItem[Count];
        for (int i = 0; i < Count; i ++) {
            WellItemInfo[i] = new tagMCWishingWellItem();
            TransBytes (out WellItemInfo[i].ItemID, vBytes, NetDataType.DWORD);
            TransBytes (out WellItemInfo[i].ItemCnt, vBytes, NetDataType.WORD);
            TransBytes (out WellItemInfo[i].IsBind, vBytes, NetDataType.BYTE);
            TransBytes (out WellItemInfo[i].Mark, vBytes, NetDataType.DWORD);
        }
    }
    public struct tagMCWishingWellItem {
        public uint ItemID;        // 物品ID
        public ushort ItemCnt;        // 物品数量
        public byte IsBind;        // 是否绑定
        public uint Mark;        // 排序标识
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA19_tagMCActWishingWellInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 9e29f30207d395349a95715863102f47
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagMCActWishingWellPlayerInfo.cs
New file
@@ -0,0 +1,107 @@
using UnityEngine;
using System.Collections;
// AA 1A 许愿池活动玩家信息 #tagMCActWishingWellPlayerInfo
public class HAA1A_tagMCActWishingWellPlayerInfo : GameNetPackBasic {
    public uint FreeStartTime;    // 免费开始倒计时时间
    public uint WishCnt;    // 许愿付费刷新次数
    public byte WellItemCnt;    //许愿池物品数量
    public  tagMCPlayerWishingWellItem[] WellItemInfo;    // 随机库物品信息
    public byte CurAwardCnt;    // 当前奖励物品数量
    public  tagMCPlayerWishingWellItem[] CurAwardItemInfo;    // 当前奖励物品
    public byte LastAwardCnt;    // 可领取奖励物品数量
    public  tagMCPlayerWishingWellItem[] LastAwardItemInfo;    // 可领取奖励物品
    public HAA1A_tagMCActWishingWellPlayerInfo () {
        _cmd = (ushort)0xAA1A;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out FreeStartTime, vBytes, NetDataType.DWORD);
        TransBytes (out WishCnt, vBytes, NetDataType.DWORD);
        TransBytes (out WellItemCnt, vBytes, NetDataType.BYTE);
        WellItemInfo = new tagMCPlayerWishingWellItem[WellItemCnt];
        for (int i = 0; i < WellItemCnt; i ++) {
            WellItemInfo[i] = new tagMCPlayerWishingWellItem();
            TransBytes (out WellItemInfo[i].ItemID, vBytes, NetDataType.DWORD);
            TransBytes (out WellItemInfo[i].ItemCnt, vBytes, NetDataType.WORD);
            TransBytes (out WellItemInfo[i].IsBind, vBytes, NetDataType.BYTE);
        }
        TransBytes (out CurAwardCnt, vBytes, NetDataType.BYTE);
        CurAwardItemInfo = new tagMCPlayerWishingWellItem[CurAwardCnt];
        for (int i = 0; i < CurAwardCnt; i ++) {
            CurAwardItemInfo[i] = new tagMCPlayerWishingWellItem();
            TransBytes (out CurAwardItemInfo[i].ItemID, vBytes, NetDataType.DWORD);
            TransBytes (out CurAwardItemInfo[i].ItemCnt, vBytes, NetDataType.WORD);
            TransBytes (out CurAwardItemInfo[i].IsBind, vBytes, NetDataType.BYTE);
        }
        TransBytes (out LastAwardCnt, vBytes, NetDataType.BYTE);
        LastAwardItemInfo = new tagMCPlayerWishingWellItem[LastAwardCnt];
        for (int i = 0; i < LastAwardCnt; i ++) {
            LastAwardItemInfo[i] = new tagMCPlayerWishingWellItem();
            TransBytes (out LastAwardItemInfo[i].ItemID, vBytes, NetDataType.DWORD);
            TransBytes (out LastAwardItemInfo[i].ItemCnt, vBytes, NetDataType.WORD);
            TransBytes (out LastAwardItemInfo[i].IsBind, vBytes, NetDataType.BYTE);
        }
    }
    public struct tagMCPlayerWishingWellItem {
        public uint ItemID;        // 物品ID
        public ushort ItemCnt;        // 物品数量
        public byte IsBind;        // 是否绑定
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagMCActWishingWellPlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6456db1385cb210498985c967a4a075b
timeCreated: 1540173914
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/ImpactRankModel.cs
@@ -787,6 +787,8 @@
            FairyGrabBossNotice,
            [Header("限时抢购")]
            FlashRushToBuy,
            [Header("许愿池")]
            WishingPool,
        }
    }
System/OpenServerActivity/OperationWishingWellInfo.cs
New file
@@ -0,0 +1,103 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class OperationWishingWellInfo : OperationBase
    {
        public Dictionary<int, List<WishingWellItem>> wellItemDict = new Dictionary<int, List<WishingWellItem>>(); //key 组
        public override void Reset()
        {
            base.Reset();
            wellItemDict.Clear();
        }
        public override string ToDisplayTime()
        {
            var textBuilder = OperationTimeHepler.textBuilder;
            textBuilder.Length = 0;
            textBuilder.Append(startDate.ToDisplay());
            if (startDate != endDate)
            {
                textBuilder.Append("—");
                textBuilder.Append(endDate.ToDisplay());
            }
            return textBuilder.ToString();
        }
        public List<WishingWellItem> GetWellItemsByGroupType(int groupType)
        {
            List<WishingWellItem> items = null;
            wellItemDict.TryGetValue(groupType,out items);
            return items;
        }
        public int GetActivityDay()
        {
            int dayIndex = IndexOfDays(TimeUtility.ServerNow);
            return dayIndex + 1;
        }
        public void ParsePackage(HAA19_tagMCActWishingWellInfo package)
        {
            for (int i = 0; i < package.Count; i++)
            {
                var itemInfo = package.WellItemInfo[i];
                var wellItem = new WishingWellItem((int)itemInfo.ItemID,itemInfo.ItemCnt,itemInfo.IsBind,(int)itemInfo.Mark);
                int group = GetGroupTypeByMark(wellItem.mark);
                if(!wellItemDict.ContainsKey(group))
                {
                    List<WishingWellItem> list = new List<WishingWellItem>();
                    list.Add(wellItem);
                    wellItemDict.Add(group,list);
                }
                else
                {
                    wellItemDict[group].Add(wellItem);
                }
            }
            foreach(var key in wellItemDict.Keys)
            {
                wellItemDict[key].Sort(CompareByMark);
            }
        }
        public int GetGroupTypeByMark(int mark)
        {
            return mark / 100;
        }
        public int GetGroupIndexByMark(int mark)
        {
            return mark % 100;
        }
        public int CompareByMark(WishingWellItem start,WishingWellItem end)
        {
            if(start.mark.CompareTo(end.mark) != 0)
            {
                return -start.mark.CompareTo(end.mark);
            }
            return 0;
        }
        public class WishingWellItem
        {
            public int itemId;
            public int itemCount;
            public int isBind;
            public int mark;// 排序标识
            public WishingWellItem(int id, int count, int isBind,int mark)
            {
                this.itemId = id;
                this.itemCount = count;
                this.isBind = isBind;
                this.mark = mark;
            }
        }
    }
}
System/OpenServerActivity/OperationWishingWellInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 63866afdba3f2ad47a206dc17e8da80f
timeCreated: 1540178667
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/PoolItemCell.cs
@@ -22,15 +22,15 @@
        public void Display(int index)
        {
            this.index = index;
            int id = 0;
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(index,out id);
            WishingPoolModel.WishingWellItem wellItem = null;
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(index,out wellItem);
            bestIconObj.SetActive(false);
            ItemCellModel cellModel = new ItemCellModel(id);
            ItemCellModel cellModel = new ItemCellModel(wellItem.itemId,false,(ulong)wellItem.itemCount,wellItem.isBind);
            itemBaisc.Init(cellModel);
            itemBaisc.cellBtn.RemoveAllListeners();
            itemBaisc.cellBtn.AddListener(()=>
            {
                ItemAttrData attrData = new ItemAttrData(id);
                ItemAttrData attrData = new ItemAttrData(wellItem.itemId, true, (ulong)wellItem.itemCount, -1,wellItem.isBind);
                tipsModel.SetItemTipsModel(attrData);
            });
        }
System/OpenServerActivity/WishGroupCell.cs
New file
@@ -0,0 +1,62 @@
using EnhancedUI.EnhancedScroller;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections.Generic;
namespace Snxxz.UI
{
    public class WishGroupCell : ScrollerUI
    {
        [SerializeField] List<PoolItem> poolItems = new List<PoolItem>();
        WishingPoolModel wishModel { get { return ModelCenter.Instance.GetModel<WishingPoolModel>(); } }
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        public override void Refresh(CellView cell)
        {
            var operation = wishModel.GetOperationWishing();
            if (operation == null) return;
            var items = operation.GetWellItemsByGroupType(cell.index);
            if (items == null) return;
            for(int i = 0; i < poolItems.Count; i++)
            {
                var poolItem = poolItems[i];
                if(i < items.Count)
                {
                    poolItem.Object.SetActive(true);
                    var info = items[i];
                    ItemCellModel cellModel = new ItemCellModel(info.itemId,true,(ulong)info.itemCount,info.isBind);
                    poolItem.itemBaisc.Init(cellModel);
                    if(i == 0)
                    {
                        poolItem.bestImg.SetActive(true);
                    }
                    else
                    {
                        poolItem.bestImg.SetActive(false);
                    }
                    poolItem.itemBaisc.cellBtn.RemoveAllListeners();
                    poolItem.itemBaisc.cellBtn.AddListener(()=>
                    {
                        ItemAttrData attrData = new ItemAttrData(info.itemId,true, (ulong)info.itemCount,-1,info.isBind);
                        tipsModel.SetItemTipsModel(attrData);
                    });
                }
                else
                {
                    poolItem.Object.SetActive(false);
                }
            }
        }
        [Serializable]
        public class PoolItem
        {
            public GameObject Object;
            public CommonItemBaisc itemBaisc;
            public GameObject bestImg;
        }
    }
}
System/OpenServerActivity/WishGroupCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 788a58cd965d16646b5452012b08d27b
timeCreated: 1540193610
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/WishingPoolModel.cs
@@ -5,14 +5,18 @@
namespace Snxxz.UI
{
    public class WishingPoolModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk
    public class WishingPoolModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk,IOpenServerActivity
    {
        public event Action<int> UpdateWishingDataEvent;
        public event Action<int> UpdatePoolDataEvent;
        public event Action<int> onStateUpate;
        public const int WishRedKey = 20915;
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
            OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.FlashRushToBuy, this);
        }
        public void OnBeforePlayerDataInitialize()
@@ -23,12 +27,97 @@
        public void OnPlayerLoginOk()
        {
            SetWishingPoolData();
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            
        }
        public bool IsOpen
        {
            get
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.WishingWellInfo);
            }
        }
        public bool priorityOpen
        {
            get
            {
                return wishPoolRedpoint.state == RedPointState.Simple;
            }
        }
        public bool IsAdvance
        {
            get
            {
                return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.WishingWellInfo);
            }
        }
        private void OperationEndEvent(Operation type, int state)
        {
            if (type == Operation.WishingWellInfo && state == 1)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
                }
            }
        }
        private void OperationAdvanceEvent(Operation type)
        {
            if (type == Operation.WishingWellInfo)
            {
                if (onStateUpate != null)
                {
                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
                }
            }
        }
        private void OperationStartEvent(Operation type, int state)
        {
            if (type == Operation.WishingWellInfo && state == 1)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
                }
            }
        }
        public OperationWishingWellInfo GetOperationWishing()
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.WishingWellInfo, out operationBase))
            {
                return operationBase as OperationWishingWellInfo;
            }
            return null;
        }
        public bool TryGetFreeWishCoolTime(out int second)
        {
            second = 0;
            if (freeStartTime == 25) return false;
            int endhour = freeStartTime + 2;
            int nowHour = TimeUtility.ServerNow.Hour;
            second = (endhour - nowHour) * 3600;
            if(second > 0)
            {
                return true;
            }
            return false;
        }
        #region 本地数据
@@ -42,25 +131,47 @@
        #endregion
        #region 协议
        Dictionary<int, int> poolDataDict = new Dictionary<int, int>();
        public void SetWishingPoolData()
        Dictionary<int, WishingWellItem> poolDataDict = new Dictionary<int, WishingWellItem>();
        public int freeStartTime { get; private set; }// 免费开始倒计时时间
        public int alreadyWishNum { get; private set; } // 许愿付费刷新次数
        public void SetWishingWellPlayerInfo(HAA1A_tagMCActWishingWellPlayerInfo wishInfo)
        {
            for(int i = 0; i< 8; i++)
            freeStartTime = (int)wishInfo.FreeStartTime;
            alreadyWishNum = (int)wishInfo.WishCnt;
            for(int i = 0; i < wishInfo.WellItemCnt; i++)
            {
                int itemId = 1 + i;
                SetWishingPoolData(i,itemId);
                var itemInfo = wishInfo.WellItemInfo[i];
                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID,itemInfo.ItemCnt,itemInfo.IsBind);
                SetWishingPoolData(i,wellItem);
            }
            for(int i = 0; i < wishInfo.CurAwardCnt; i++)
            {
                var itemInfo = wishInfo.CurAwardItemInfo[i];
                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID, itemInfo.ItemCnt, itemInfo.IsBind);
                SetWishingData(i, wellItem);
            }
            wishingAwardDict.Clear();
            for (int i = 0; i < wishInfo.LastAwardCnt; i++)
            {
                var itemInfo = wishInfo.LastAwardItemInfo[i];
                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID, itemInfo.ItemCnt, itemInfo.IsBind);
                SetWishingAwardData(i, wellItem);
            }
            UpdateRedpoint();
        }
        public void SetWishingPoolData(int index, int id)
        public void SetWishingPoolData(int index, WishingWellItem wellItem)
        {
            if (!poolDataDict.ContainsKey(index))
            {
                poolDataDict.Add(index, id);
                poolDataDict.Add(index,wellItem);
            }
            else
            {
                poolDataDict[index] = id;
                poolDataDict[index] = wellItem;
            }
            if(UpdatePoolDataEvent != null)
            {
@@ -80,16 +191,16 @@
            }
        }
        Dictionary<int, int> wishingDataDict = new Dictionary<int, int>();
        public void SetWishingData(int index,int id)
        Dictionary<int, WishingWellItem> wishingDataDict = new Dictionary<int, WishingWellItem>();
        public void SetWishingData(int index, WishingWellItem wellItem)
        {
            if(!wishingDataDict.ContainsKey(index))
            {
                wishingDataDict.Add(index,id);
                wishingDataDict.Add(index,wellItem);
            }
            else
            {
                wishingDataDict[index] = id;
                wishingDataDict[index] = wellItem;
            }
            if(UpdateWishingDataEvent != null)
@@ -98,21 +209,134 @@
            }
        }
        public bool TryGetPoolDataByIndex(int index,out int id)
        Dictionary<int, WishingWellItem> wishingAwardDict = new Dictionary<int, WishingWellItem>();
        public void SetWishingAwardData(int index, WishingWellItem wellItem)
        {
           return  poolDataDict.TryGetValue(index,out id);
            if (!wishingAwardDict.ContainsKey(index))
            {
                wishingAwardDict.Add(index, wellItem);
            }
            else
            {
                wishingAwardDict[index] = wellItem;
            }
        }
        public bool IsBetterItem()
        {
            return false;
        }
        public bool TryGetWishDataByIndex(int index, out int id)
        public bool TryGetPoolDataByIndex(int index,out WishingWellItem wellItem)
        {
            return wishingDataDict.TryGetValue(index, out id);
            if(poolDataDict.TryGetValue(index, out wellItem))
            {
                if(wellItem.itemId != 0)
                {
                    return true;
                }
            }
            return false;
        }
        public bool TryGetWishDataByIndex(int index, out WishingWellItem wellItem)
        {
            if(wishingDataDict.TryGetValue(index, out wellItem))
            {
                if(wellItem.itemId != 0)
                {
                    return true;
                }
            }
            return false;
        }
        public void SendRefreshPoolInfo(int refreshType)
        {
            CAA07_tagCMActWishingRefresh wishingRefresh = new CAA07_tagCMActWishingRefresh();
            wishingRefresh.IsFree = (byte)refreshType;
            GameNetSystem.Instance.SendInfo(wishingRefresh);
        }
        public void SendRefreshWishInfo(int poolIndex,int wishIndex)
        {
            CAA06_tagCMActWishing actWishing = new CAA06_tagCMActWishing();
            actWishing.SrcWellType = 0;
            actWishing.SrcIndex = (byte)poolIndex;
            actWishing.DesWellType = 1;
            actWishing.DesIndex = (byte)wishIndex;
            GameNetSystem.Instance.SendInfo(actWishing);
        }
        #endregion
        #region 红点
        public Redpoint wishPoolRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, WishRedKey);
        public const int FREEWISH_REDKEY = 2091501;
        public Redpoint freeWishRedpoint = new Redpoint(WishRedKey, FREEWISH_REDKEY);
        public List<Redpoint> wishPointlist = new List<Redpoint>();
        public void SetWishRedpoint()
        {
            wishPointlist.Clear();
            for (int i = 0; i < 5; i++)
            {
                int redKey = WishRedKey * 100 + (i + 2);
                Redpoint redpoint = new Redpoint(WishRedKey,redKey);
                wishPointlist.Add(redpoint);
            }
        }
        private void UpdateRedpoint()
        {
            int second = 0;
            bool isCool = TryGetFreeWishCoolTime(out second);
            if(IsOpen && !isCool)
            {
                freeWishRedpoint.state = RedPointState.Simple;
            }
            else
            {
                freeWishRedpoint.state = RedPointState.None;
            }
            for (int i = 0; i < wishPointlist.Count; i++)
            {
                var wishPoint = wishPointlist[i];
                wishPoint.state = RedPointState.None;
            }
            for (int i = 0; i < wishPointlist.Count; i++)
            {
                var wishPoint = wishPointlist[i];
                WishingWellItem wellItem = null;
                bool isWishData = TryGetWishDataByIndex(i,out wellItem);
                if(!isWishData)
                {
                    wishPoint.state = RedPointState.Simple;
                    return;
                }
            }
        }
        #endregion
        public void ResetPoolData()
        {
            freeStartTime = 25;
            poolDataDict.Clear();
            wishingDataDict.Clear();
            wishingAwardDict.Clear();
        }
        public class WishingWellItem
        {
            public int itemId;
            public int itemCount;
            public int isBind;
            public WishingWellItem(int id,int count,int isBind)
            {
                this.itemId = id;
                this.itemCount = count;
                this.isBind = isBind;
            }
        }
    }
}
System/OpenServerActivity/WishingPoolWin.cs
@@ -8,11 +8,19 @@
    public class WishingPoolWin : Window
    {
        [SerializeField] DragItem dragItem;
        [SerializeField] Text activityDayText;
        [SerializeField] Text totalDayText;
        [SerializeField] Button lookAllBtn;
        [SerializeField] Button refreshWishBtn;
        [SerializeField] Text freeWishCoolText;
        [SerializeField] List<PoolItemCell> poolItemCells = new List<PoolItemCell>();
        [SerializeField] List<WishingCell> wishingCells = new List<WishingCell>();
        [SerializeField] GameObject activityOpenObj;
        [SerializeField] GameObject activityCloseObj;
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        WishingPoolModel wishingModel { get { return ModelCenter.Instance.GetModel<WishingPoolModel>(); } }
        OperationWishingWellInfo operation = null;
        #region Built-in
        protected override void BindController()
        {
@@ -21,13 +29,16 @@
        protected override void AddListeners()
        {
            refreshWishBtn.AddListener(ClickRefreshWish);
            lookAllBtn.AddListener(ClickLook);
        }
        protected override void OnPreOpen()
        {
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            wishingModel.UpdatePoolDataEvent += UpdatePoolItemByIndex;
            wishingModel.UpdateWishingDataEvent += UpdateWishItemByIndex;
            GlobalTimeEvent.Instance.hourEvent += UpdateFreeWishCool;
            Display();
        }
@@ -39,6 +50,8 @@
        {
            wishingModel.UpdatePoolDataEvent -= UpdatePoolItemByIndex;
            wishingModel.UpdateWishingDataEvent -= UpdateWishItemByIndex;
            GlobalTimeEvent.Instance.hourEvent -= UpdateFreeWishCool;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
        }
        protected override void OnAfterClose()
@@ -49,15 +62,22 @@
        private void Display()
        {
            operation = wishingModel.GetOperationWishing();
            if (operation == null) return;
            UpdatePoolItem();
            for(int i = 0; i < wishingCells.Count; i++)
            {
                UpdateWishItemByIndex(i);
            }
            dragItem.dragItemRect.gameObject.SetActive(false);
            UpdateFreeWishCool();
            UpdateActivityState();
            activityDayText.text = Language.Get("SignIn_4", Language.Get(StringUtility.Contact("Num_CHS_", operation.GetActivityDay())));
            totalDayText.text = StringUtility.Contact("活动持续", Language.Get(StringUtility.Contact("Num_CHS_",operation.totalDays + 1)), "天");
        }
        #region 许愿逻辑
        protected override void LateUpdate()
        {
           if(wishingModel.isDraging)
@@ -80,7 +100,7 @@
                }
            }
        }
        private void CheckWishingCell()
        {
            for(int i = 0; i < wishingCells.Count; i++)
@@ -91,19 +111,20 @@
                var dis = Vector3.Distance(des.center, src.center);
                if (dis < rect.rect.width / 2)
                {
                    int poolId = 0;
                    bool isPoolData = wishingModel.TryGetPoolDataByIndex(wishingModel.dragIndex, out poolId);
                    int wishId = 0;
                    bool isWishData = wishingModel.TryGetWishDataByIndex(i, out wishId);
                    if (wishId == 0)
                    {
                        wishingModel.RemovetWishingPoolData(i);
                    }
                    else
                    {
                        wishingModel.SetWishingPoolData(wishingModel.dragIndex, wishId);
                    }
                    wishingModel.SetWishingData(i,poolId);
                    //WishingPoolModel.WishingWellItem wellPoolItem = null;
                    //bool isPoolData = wishingModel.TryGetPoolDataByIndex(wishingModel.dragIndex, out wellPoolItem);
                    //WishingPoolModel.WishingWellItem wellWishItem = null;
                    //bool isWishData = wishingModel.TryGetWishDataByIndex(i, out wellWishItem);
                    //if (wellWishItem.itemId == 0)
                    //{
                    //    wishingModel.RemovetWishingPoolData(i);
                    //}
                    //else
                    //{
                    //    wishingModel.SetWishingPoolData(wishingModel.dragIndex,wellWishItem);
                    //}
                    //wishingModel.SetWishingData(i,wellPoolItem);
                    wishingModel.SendRefreshWishInfo(wishingModel.dragIndex,i);
                    break;
                }
            }
@@ -111,13 +132,13 @@
        private bool TryGetDragItem()
        {
            int id = 0;
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(wishingModel.dragIndex, out id);
            WishingPoolModel.WishingWellItem wellItem = null;
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(wishingModel.dragIndex, out wellItem);
            if (isPoolData)
            {
                dragItem.dragItemRect.gameObject.SetActive(true);
                dragItem.dragBestIcon.SetActive(false);
                ItemCellModel cellModel = new ItemCellModel(id);
                ItemCellModel cellModel = new ItemCellModel(wellItem.itemId,false,(ulong)wellItem.itemCount,wellItem.isBind);
                dragItem.dragItemBasic.Init(cellModel);
            }
            else
@@ -137,9 +158,9 @@
        private void UpdatePoolItemByIndex(int index)
        {
            int id = 0;
            WishingPoolModel.WishingWellItem wellItem = null;
            var poolItemCell = poolItemCells[index];
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(index, out id);
            bool isPoolData = wishingModel.TryGetPoolDataByIndex(index, out wellItem);
            if (isPoolData)
            {
                poolItemCell.gameObject.SetActive(true);
@@ -153,19 +174,19 @@
        private void UpdateWishItemByIndex(int index)
        {
            int id = 0;
            WishingPoolModel.WishingWellItem wellItem = null;
            var wishCell = wishingCells[index];
            bool isWishData = wishingModel.TryGetWishDataByIndex(index, out id);
            bool isWishData = wishingModel.TryGetWishDataByIndex(index, out wellItem);
            if (isWishData)
            {
                wishCell.itemBaisc.gameObject.SetActive(true);
                wishCell.noneItemObj.gameObject.SetActive(false);
                ItemCellModel cellModel = new ItemCellModel(id);
                ItemCellModel cellModel = new ItemCellModel(wellItem.itemId, false, (ulong)wellItem.itemCount, wellItem.isBind);
                wishCell.itemBaisc.Init(cellModel);
                wishCell.itemBaisc.cellBtn.RemoveAllListeners();
                wishCell.itemBaisc.cellBtn.AddListener(() =>
                {
                    ItemAttrData attrData = new ItemAttrData(id);
                    ItemAttrData attrData = new ItemAttrData(wellItem.itemId, true, (ulong)wellItem.itemCount,-1,wellItem.isBind);
                    tipsModel.SetItemTipsModel(attrData);
                });
            }
@@ -192,5 +213,66 @@
           public CommonItemBaisc dragItemBasic;
           public GameObject dragBestIcon;
        }
        #endregion
        #region 活动逻辑
        private void OperationEndEvent(Operation type, int state)
        {
            if(type == Operation.WishingWellInfo && state == 1)
            {
                UpdateActivityState();
            }
        }
        private void UpdateFreeWishCool()
        {
            int second = 0;
            bool isCool = wishingModel.TryGetFreeWishCoolTime(out second);
            if (isCool)
            {
                freeWishCoolText.gameObject.SetActive(true);
                freeWishCoolText.text = TimeUtility.SecondsToHMS(second);
            }
            else
            {
                freeWishCoolText.gameObject.SetActive(false);
            }
        }
        private void UpdateActivityState()
        {
            if (wishingModel.IsOpen)
            {
                activityOpenObj.SetActive(true);
                activityCloseObj.SetActive(false);
            }
            else
            {
                activityOpenObj.SetActive(false);
                activityCloseObj.SetActive(true);
            }
        }
        private void ClickLook()
        {
            WindowCenter.Instance.Open<WishingWarehouseWin>();
        }
        private void ClickRefreshWish()
        {
            int second = 0;
            bool isCool = wishingModel.TryGetFreeWishCoolTime(out second);
            if(isCool)
            {
            }
            else
            {
            }
        }
        #endregion
    }
}
System/OpenServerActivity/WishingWarehouseWin.cs
New file
@@ -0,0 +1,51 @@
using System;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class WishingWarehouseWin : Window
    {
        [SerializeField] ScrollerController wishGroupCtrl;
        WishingPoolModel wishModel { get { return ModelCenter.Instance.GetModel<WishingPoolModel>(); } }
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
            CreateWishGroup();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        private void CreateWishGroup()
        {
            var operation = wishModel.GetOperationWishing();
            if (operation == null) return;
            wishGroupCtrl.Refresh();
            foreach(var key in operation.wellItemDict.Keys)
            {
                wishGroupCtrl.AddCell(ScrollerDataType.Header,key);
            }
            wishGroupCtrl.Restart();
        }
    }
}
System/OpenServerActivity/WishingWarehouseWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: fe79dd1562e90624bb7c5e2443363897
timeCreated: 1540193204
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Welfare/OperationTimeHepler.cs
@@ -262,6 +262,39 @@
        }
        /// <summary>
        /// 许愿池
        /// </summary>
        /// <param name="package"></param>
        public void UpdateWishingWellInfo(HAA19_tagMCActWishingWellInfo package)
        {
            OperationBase operationBase = null;
            operationDict.TryGetValue(Operation.WishingWellInfo, out operationBase);
            if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
            {
                ForceStopOperation(Operation.WishingWellInfo);
            }
            else
            {
                if (operationBase == null)
                {
                    operationBase = new OperationWishingWellInfo();
                    operationDict.Add(Operation.WishingWellInfo, operationBase);
                }
                OperationWishingWellInfo operation = operationBase as OperationWishingWellInfo;
                operation.Reset();
                operation.limitLv = package.LimitLV;
                operation.startDate = ParseOperationDate(package.StartDate);
                operation.endDate = ParseOperationDate(package.EndtDate);
                operation.dayReset = package.IsDayReset == 1;
                operation.ParsePackage(package);
                if (operationTimeUpdateEvent != null)
                {
                    operationTimeUpdateEvent(Operation.WishingWellInfo);
                }
            }
        }
        /// <summary>
        /// 限时礼包
        /// </summary>
        /// <param name="package"></param>
@@ -688,6 +721,7 @@
        FairyCeremony, //仙界盛典
        MultipRealmPoint, //N倍修行点
        FlashRushToBuy, //限时抢购
        WishingWellInfo, //许愿池
        max,
    }
}