少年修仙传客户端代码仓库
client_linchunjie
2018-11-06 94db2e5d172f1eb4f2a8e1a2eb3656ae01bc3e2f
4555 【1.2】【前端】累计充值活动开发
6个文件已修改
18个文件已添加
1029 ■■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagMCActTotalRechargeInfo.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagMCActTotalRechargeInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagMCTotalRechargePlayerInfo.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagMCTotalRechargePlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagMCActTotalRechargeInfo.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagMCActTotalRechargeInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeBehaviour.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeCell.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeModel.cs 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeWin.cs 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/AccumulateRechargeWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactRankModel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServerActivityWin.cs 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationAccumulateRecharge.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationAccumulateRecharge.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/OperationTimeHepler.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -11,6 +11,8 @@
    public static void Init()
    {
        // 登记相应的数据体及对应的数据转逻辑类
        Register(typeof(HAA1D_tagMCActTotalRechargeInfo), typeof(DTCAA1D_tagMCActTotalRechargeInfo));
        Register(typeof(HAA1C_tagMCTotalRechargePlayerInfo), typeof(DTCAA1C_tagMCTotalRechargePlayerInfo));
        Register(typeof(HA717_tagMCChatBubbleBoxState), typeof(DTCA717_tagMCChatBubbleBoxState));
        Register(typeof(HB913_tagGCEnterTeamFBFailReason), typeof(DTCB913_tagGCEnterTeamFBFailReason));
        Register(typeof(H0311_tagDeleteSkill), typeof(DTC0311_tagDeleteSkill));
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs
New file
@@ -0,0 +1,24 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 06, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using Snxxz.UI;
public class DTCAA1C_tagMCTotalRechargePlayerInfo : DtcBasic
{
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        var package = vNetPack as HAA1C_tagMCTotalRechargePlayerInfo;
        ModelCenter.Instance.GetModel<AccumulateRechargeModel>().UpdateAccumulateRecharge(package);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5d4ace10ce4b33248bb5e9e3eef9722b
timeCreated: 1541473219
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagMCActTotalRechargeInfo.cs
New file
@@ -0,0 +1,23 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 06, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using Snxxz.UI;
public class DTCAA1D_tagMCActTotalRechargeInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        var package = vNetPack as HAA1D_tagMCActTotalRechargeInfo;
        OperationTimeHepler.Instance.UpdateAccumulateRecharge(package);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagMCActTotalRechargeInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 62fc9c5ac30b853429d048e9bb3cb4bc
timeCreated: 1541473252
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagMCTotalRechargePlayerInfo.cs
New file
@@ -0,0 +1,19 @@
using UnityEngine;
using System.Collections;
// AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo
public class HAA1C_tagMCTotalRechargePlayerInfo : GameNetPackBasic {
    public uint GoldTotal;    //本次活动已累计充值仙玉数
    public uint AwardRecord;    //奖励领奖记录,按奖励索引二进制位存储是否已领取
    public HAA1C_tagMCTotalRechargePlayerInfo () {
        _cmd = (ushort)0xAA1C;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out GoldTotal, vBytes, NetDataType.DWORD);
        TransBytes (out AwardRecord, vBytes, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagMCTotalRechargePlayerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: b406f975a6336f843a0b69b63b646a22
timeCreated: 1541473174
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagMCActTotalRechargeInfo.cs
New file
@@ -0,0 +1,63 @@
using UnityEngine;
using System.Collections;
// AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
public class HAA1D_tagMCActTotalRechargeInfo : GameNetPackBasic {
    public string StartDate;    // 开始日期 y-m-d
    public string EndtDate;    // 结束日期 y-m-d
    public byte IsDayReset;    //是否每天重置
    public ushort LimitLV;    // 限制等级
    public byte AwardDays;
    public  tagMCTotalRechargeAwardDay[] AwardDayInfo;    //每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
    public HAA1D_tagMCActTotalRechargeInfo () {
        _cmd = (ushort)0xAA1D;
    }
    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 LimitLV, vBytes, NetDataType.WORD);
        TransBytes (out AwardDays, vBytes, NetDataType.BYTE);
        AwardDayInfo = new tagMCTotalRechargeAwardDay[AwardDays];
        for (int i = 0; i < AwardDays; i ++) {
            AwardDayInfo[i] = new tagMCTotalRechargeAwardDay();
            TransBytes (out AwardDayInfo[i].AwardCount, vBytes, NetDataType.BYTE);
            AwardDayInfo[i].AwardInfo = new tagMCTotalRechargeAward[AwardDayInfo[i].AwardCount];
            for (int j = 0; j < AwardDayInfo[i].AwardCount; j ++) {
                AwardDayInfo[i].AwardInfo[j] = new tagMCTotalRechargeAward();
                TransBytes (out AwardDayInfo[i].AwardInfo[j].AwardIndex, vBytes, NetDataType.BYTE);
                TransBytes (out AwardDayInfo[i].AwardInfo[j].NeedGold, vBytes, NetDataType.DWORD);
                TransBytes (out AwardDayInfo[i].AwardInfo[j].AwardItemCount, vBytes, NetDataType.BYTE);
                AwardDayInfo[i].AwardInfo[j].AwardItem = new tagMCTotalRechargeAwardItem[AwardDayInfo[i].AwardInfo[j].AwardItemCount];
                for (int k = 0; k < AwardDayInfo[i].AwardInfo[j].AwardItemCount; k ++) {
                    AwardDayInfo[i].AwardInfo[j].AwardItem[k] = new tagMCTotalRechargeAwardItem();
                    TransBytes (out AwardDayInfo[i].AwardInfo[j].AwardItem[k].ItemID, vBytes, NetDataType.DWORD);
                    TransBytes (out AwardDayInfo[i].AwardInfo[j].AwardItem[k].ItemCount, vBytes, NetDataType.WORD);
                    TransBytes (out AwardDayInfo[i].AwardInfo[j].AwardItem[k].IsBind, vBytes, NetDataType.BYTE);
                }
            }
        }
    }
    public struct tagMCTotalRechargeAwardDay {
        public byte AwardCount;        // 奖励档数
        public  tagMCTotalRechargeAward[] AwardInfo;        // 奖励档信息
    }
    public struct tagMCTotalRechargeAwardItem {
        public uint ItemID;
        public ushort ItemCount;
        public byte IsBind;
    }
    public struct tagMCTotalRechargeAward {
        public byte AwardIndex;        // 奖励索引 0~31
        public uint NeedGold;        // 所需仙玉数
        public byte AwardItemCount;        // 奖励物品数
        public  tagMCTotalRechargeAwardItem[] AwardItem;        // 奖励物品信息
    }
}
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagMCActTotalRechargeInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6a28a3dad71de0848a8a4414b718c004
timeCreated: 1541473173
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/AccumulateRechargeBehaviour.cs
New file
@@ -0,0 +1,119 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class AccumulateRechargeBehaviour : MonoBehaviour
    {
        [SerializeField] RectTransform m_ContainerOpen;
        [SerializeField] RectTransform m_ContainerClose;
        [SerializeField] Text m_MoneyClose;
        [SerializeField] Text m_MoneyOpen;
        [SerializeField] Image m_OpenRedpoint;
        [SerializeField] Image m_CloseRedpoint;
        [SerializeField] Button m_Select;
        AccumulateRechargeModel model
        {
            get { return ModelCenter.Instance.GetModel<AccumulateRechargeModel>(); }
        }
        int selectIndex = -1;
        private void Awake()
        {
            m_Select.onClick.AddListener(Select);
        }
        private void OnEnable()
        {
            model.selectUpdate += SelectUpdate;
            model.accumulateRechargeUpdate += AccumulateRechargeUpdate;
            model.onStateUpate += OnStateUpate;
        }
        private void OnDisable()
        {
            model.selectUpdate -= SelectUpdate;
            model.accumulateRechargeUpdate -= AccumulateRechargeUpdate;
            model.onStateUpate -= OnStateUpate;
        }
        private void OnStateUpate(int obj)
        {
            DisplayRedpoint();
        }
        private void AccumulateRechargeUpdate()
        {
            DisplayRedpoint();
        }
        public void Display(int index)
        {
            selectIndex = index;
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    if (index < reward.recharges.Count)
                    {
                        var recharge = reward.recharges[index];
                        m_MoneyClose.text = recharge.requireGold.ToString();
                        m_MoneyOpen.text = recharge.requireGold.ToString();
                        DisplayRedpoint();
                        DisplaySelect();
                    }
                }
            }
        }
        void DisplaySelect()
        {
            m_ContainerOpen.gameObject.SetActive(model.selectIndex == selectIndex);
            m_ContainerClose.gameObject.SetActive(model.selectIndex != selectIndex);
        }
        void DisplayRedpoint()
        {
            OperationBase operationBase;
            bool satisfyGet = false;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    if (selectIndex < reward.recharges.Count && selectIndex >= 0)
                    {
                        var recharge = reward.recharges[selectIndex];
                        satisfyGet = model.SatisfyGetReward(recharge) && model.IsOpen;
                    }
                }
            }
            m_OpenRedpoint.gameObject.SetActive(satisfyGet);
            m_CloseRedpoint.gameObject.SetActive(satisfyGet);
        }
        private void SelectUpdate(int index)
        {
            m_ContainerOpen.gameObject.SetActive(index == selectIndex);
            m_ContainerClose.gameObject.SetActive(index != selectIndex);
        }
        private void Select()
        {
            if (model.selectIndex != selectIndex && selectIndex != -1)
            {
                model.selectIndex = selectIndex;
            }
        }
    }
}
System/OpenServerActivity/AccumulateRechargeBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 48670b59affb5c0489d46a0f4747deb3
timeCreated: 1541489873
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/AccumulateRechargeCell.cs
New file
@@ -0,0 +1,17 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class AccumulateRechargeCell : CellView
    {
        [SerializeField] AccumulateRechargeBehaviour m_AccumulateRecharge;
        public void Display(int index)
        {
            m_AccumulateRecharge.Display(index);
        }
    }
}
System/OpenServerActivity/AccumulateRechargeCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c80e2ab2e8ab3e049a27f310655acd14
timeCreated: 1541493905
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/AccumulateRechargeModel.cs
New file
@@ -0,0 +1,219 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class AccumulateRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        public bool IsOpen
        {
            get
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.AccumulateRecharge);
            }
        }
        public bool IsAdvance
        {
            get
            {
                return false;
            }
        }
        public bool priorityOpen
        {
            get { return redpoint.state == RedPointState.Simple; }
        }
        int m_SelectIndex = 0;
        public int selectIndex
        {
            get { return m_SelectIndex; }
            set
            {
                if (m_SelectIndex != value)
                {
                    if (selectUpdate != null)
                    {
                        selectUpdate(value);
                    }
                }
                m_SelectIndex = value;
            }
        }
        public event Action accumulateRechargeUpdate;
        public event Action<int> onStateUpate;
        public event Action<int> selectUpdate;
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.AccumulateRecharge, this);
        }
        public void OnBeforePlayerDataInitialize()
        {
            rechargeTotal = 0;
            getRewardRecord = 0;
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
        }
        private void DayResetEvent(int resetType)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                if (resetType == operationBase.resetType)
                {
                    UpdateRedpoint();
                }
            }
        }
        private void OperationEndEvent(Operation operationType, int state)
        {
            if (operationType == Operation.AccumulateRecharge && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate(17);
                }
            }
        }
        private void OperationStartEvent(Operation operationType, int state)
        {
            if (operationType == Operation.AccumulateRecharge && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate(17);
                }
            }
        }
        #region 服务端数据
        public uint rechargeTotal { get; private set; }
        public uint getRewardRecord { get; private set; }
        public void UpdateAccumulateRecharge(HAA1C_tagMCTotalRechargePlayerInfo package)
        {
            rechargeTotal = package.GoldTotal;
            getRewardRecord = package.AwardRecord;
            UpdateRedpoint();
            if (accumulateRechargeUpdate != null)
            {
                accumulateRechargeUpdate();
            }
        }
        public bool IsRewardGot(OperationAccumulateRecharge.Recharge recharge)
        {
            if (recharge != null)
            {
                return IsRewardGot(recharge.index);
            }
            return false;
        }
        bool IsRewardGot(int index)
        {
            return (getRewardRecord & (1 << index)) != 0;
        }
        public bool SatisfyGetReward(OperationAccumulateRecharge.Recharge recharge)
        {
            if (!IsOpen)
            {
                return false;
            }
            if (IsRewardGot(recharge))
            {
                return false;
            }
            if (rechargeTotal >= recharge.requireGold)
            {
                return true;
            }
            return false;
        }
        public void GetAccumulateRechargeReward(OperationAccumulateRecharge.Recharge recharge)
        {
            OperationBase operationBase;
            if (!OperationTimeHepler.Instance.InOperationTime(Operation.AccumulateRecharge))
            {
                SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                return;
            }
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                if (IsRewardGot(recharge.index))
                {
                    return;
                }
                else if (rechargeTotal < recharge.requireGold)
                {
                    return;
                }
                CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward();
                pak.RewardType = (byte)GotServerRewardType.Def_RewardType_TotalRecharge;
                pak.DataEx = (uint)recharge.index;
                pak.DataExStrLen = 0;
                pak.DataExStr = string.Empty;
                GameNetSystem.Instance.SendInfo(pak);
            }
        }
        #endregion
        #region 红点
        public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20917);
        public void UpdateRedpoint()
        {
            redpoint.state = RedPointState.None;
            if (!IsOpen)
            {
                return;
            }
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    for (int i = 0; i < reward.recharges.Count; i++)
                    {
                        var recharge = reward.recharges[i];
                        if (SatisfyGetReward(recharge))
                        {
                            redpoint.state = RedPointState.Simple;
                            break;
                        }
                    }
                }
            }
        }
        #endregion
    }
}
System/OpenServerActivity/AccumulateRechargeModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2900b05d6b722c640bd01096d44bb9f7
timeCreated: 1541486509
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/AccumulateRechargeWin.cs
New file
@@ -0,0 +1,302 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 06, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class AccumulateRechargeWin : Window
    {
        [SerializeField] Text m_Money;
        [SerializeField] ItemCell[] m_Items;
        [SerializeField] Image[] m_ItemGotSigns;
        [SerializeField] Text m_Recharge;
        [SerializeField] Button m_Func;
        [SerializeField] Text m_FuncBtnTxt;
        [SerializeField] RectTransform m_ContaienrLess;
        [SerializeField] AccumulateRechargeBehaviour[] m_AccumulateRecharges;
        [SerializeField] RectTransform m_ContainerMore;
        [SerializeField] ScrollerController m_ScrollerControl;
        [SerializeField] RectTransform m_ContaienrOpen;
        [SerializeField] RectTransform m_ConatinerOverdue;
        [SerializeField] Text m_Time;
        AccumulateRechargeModel model
        {
            get { return ModelCenter.Instance.GetModel<AccumulateRechargeModel>(); }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Func.onClick.AddListener(OnFunc);
            m_ScrollerControl.OnRefreshCell += OnRefreshCell;
        }
        protected override void OnPreOpen()
        {
            model.selectIndex = 0;
            model.selectUpdate += SelectUpdate;
            model.accumulateRechargeUpdate += AccumulateRechargeUpdate;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            DisplayMoney(model.selectIndex);
            DisplayItems(model.selectIndex);
            DisplayFunc(model.selectIndex);
            DisplayRecharge();
            DisplayRewards();
            DisplayTime();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.selectUpdate -= SelectUpdate;
            model.accumulateRechargeUpdate -= AccumulateRechargeUpdate;
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void OnFunc()
        {
            OperationBase operationBase;
            OperationAccumulateRecharge.Recharge recharge = null;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (model.selectIndex >= 0 && model.selectIndex < reward.recharges.Count)
                {
                    recharge = reward.recharges[model.selectIndex];
                }
            }
            if (recharge != null)
            {
                if (model.SatisfyGetReward(recharge))
                {
                    model.GetAccumulateRechargeReward(recharge);
                }
                else
                {
                    WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.VipRechargeFunc1);
                }
            }
        }
        private void DisplayMoney(int index)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (index >= 0 && index < reward.recharges.Count)
                {
                    var recharge = reward.recharges[index];
                    m_Money.text = recharge.requireGold.ToString();
                }
            }
        }
        private void DisplayItems(int index)
        {
            OperationBase operationBase;
            OperationAccumulateRecharge.Recharge recharge = null;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (index >= 0 && index < reward.recharges.Count)
                {
                    recharge = reward.recharges[index];
                }
            }
            for (int i = 0; i < m_Items.Length; i++)
            {
                m_Items[i].cellBtn.RemoveAllListeners();
                if (recharge != null && i < recharge.items.Count)
                {
                    var item = recharge.items[i];
                    m_Items[i].gameObject.SetActive(true);
                    ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count, item.bind);
                    m_Items[i].Init(itemCellModel);
                    m_Items[i].cellBtn.AddListener(() =>
                    {
                        ItemAttrData itemAttrData = new ItemAttrData(item.id, true, (ulong)item.count, -1, item.bind);
                        ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemAttrData);
                    });
                }
                else
                {
                    m_Items[i].gameObject.SetActive(false);
                }
            }
        }
        private void DisplayRecharge()
        {
            m_Recharge.text = model.rechargeTotal.ToString();
        }
        private void DisplayFunc(int index)
        {
            OperationBase operationBase;
            OperationAccumulateRecharge.Recharge recharge = null;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (index >= 0 && index < reward.recharges.Count)
                {
                    recharge = reward.recharges[index];
                }
            }
            for (int i = 0; i < m_ItemGotSigns.Length; i++)
            {
                m_ItemGotSigns[i].gameObject.SetActive(recharge != null && model.IsRewardGot(recharge));
            }
            if (recharge == null)
            {
                m_Func.gameObject.SetActive(false);
                return;
            }
            if (model.IsRewardGot(recharge))
            {
                m_Func.SetInteractable(m_FuncBtnTxt, false);
                m_FuncBtnTxt.text = Language.Get("AccumulateRecharge_Got");
                return;
            }
            m_Func.SetInteractable(m_FuncBtnTxt, true);
            if (model.SatisfyGetReward(recharge))
            {
                m_FuncBtnTxt.text = Language.Get("AccumulateRecharge_GetReward");
            }
            else
            {
                m_FuncBtnTxt.text = Language.Get("AccumulateRecharge_Recharge");
            }
        }
        private void DisplayRewards()
        {
            OperationBase operationBase;
            OperationAccumulateRecharge.Reward reward = null;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                reward = operation.GetReward(TimeUtility.ServerNow);
            }
            m_ContaienrLess.gameObject.SetActive(reward != null && reward.recharges.Count <= 4);
            m_ContainerMore.gameObject.SetActive(reward != null && reward.recharges.Count > 4);
            if (reward != null && reward.recharges.Count <= 4)
            {
                for (int i = 0; i < m_AccumulateRecharges.Length; i++)
                {
                    if (i < reward.recharges.Count)
                    {
                        m_AccumulateRecharges[i].gameObject.SetActive(true);
                        m_AccumulateRecharges[i].Display(i);
                    }
                    else
                    {
                        m_AccumulateRecharges[i].gameObject.SetActive(false);
                    }
                }
            }
            else if (reward != null && reward.recharges.Count > 4)
            {
                m_ScrollerControl.Refresh();
                for (int i = 0; i < reward.recharges.Count; i++)
                {
                    m_ScrollerControl.AddCell(ScrollerDataType.Header, i);
                }
                m_ScrollerControl.Restart();
            }
        }
        private void DisplayTime()
        {
            m_ContaienrOpen.gameObject.SetActive(model.IsOpen);
            m_ConatinerOverdue.gameObject.SetActive(!model.IsOpen);
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                m_Time.text = operation.ToDisplayTime();
            }
        }
        private void SelectUpdate(int index)
        {
            DisplayMoney(index);
            DisplayItems(index);
            DisplayFunc(index);
        }
        private void AccumulateRechargeUpdate()
        {
            DisplayRecharge();
            DisplayFunc(model.selectIndex);
        }
        private void OnRefreshCell(ScrollerDataType type, CellView cell)
        {
            var accumulateRechargeCell = cell as AccumulateRechargeCell;
            accumulateRechargeCell.Display(cell.index);
        }
        private void DayResetEvent(int resetType)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))
            {
                if (resetType == operationBase.resetType)
                {
                    DisplayRewards();
                    DisplayTime();
                }
            }
        }
        private void OperationEndEvent(Operation operation, int state)
        {
            if (operation == Operation.AccumulateRecharge && state == 0)
            {
                DisplayTime();
            }
        }
        private void OnServerOpenDayRefresh()
        {
            DisplayRewards();
            DisplayTime();
        }
    }
}
System/OpenServerActivity/AccumulateRechargeWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a1a05819728bfab43b0577e4909355ca
timeCreated: 1541486287
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/ImpactRankModel.cs
@@ -798,6 +798,8 @@
            WishingPool,
            [Header("绑玉转盘")]
            WheelOfrtune,
            [Header("累计充值")]
            AccumulateRecharge,
        }
    }
System/OpenServerActivity/OpenServerActivityWin.cs
@@ -561,6 +561,9 @@
                case 16:
                    WindowCenter.Instance.Open<WheelOfFortuneWin>(true);
                    break;
                case 17:
                    WindowCenter.Instance.Open<AccumulateRechargeWin>(true);
                    break;
            }
        }
@@ -599,6 +602,7 @@
            WindowCenter.Instance.CloseImmediately<FlashRushToBuyWin>();
            WindowCenter.Instance.CloseImmediately<WishingPoolWin>();
            WindowCenter.Instance.CloseImmediately<WheelOfFortuneWin>();
            WindowCenter.Instance.CloseImmediately<AccumulateRechargeWin>();
        }
        private int Compare(int order_x, int order_y)
System/OpenServerActivity/OperationAccumulateRecharge.cs
New file
@@ -0,0 +1,91 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class OperationAccumulateRecharge : OperationBase
    {
        public List<Reward> rewards = new List<Reward>();
        public override bool SatisfyOpenCondition()
        {
            return PlayerDatas.Instance.baseData.LV >= limitLv;
        }
        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 override void Reset()
        {
            base.Reset();
            rewards.Clear();
        }
        public void ParseAccumulateRecharge(HAA1D_tagMCActTotalRechargeInfo package)
        {
            for (int i = 0; i < package.AwardDays; i++)
            {
                var _reward = package.AwardDayInfo[i];
                Reward reward = new Reward();
                for (int k = 0; k < _reward.AwardCount; k++)
                {
                    Recharge recharge = new Recharge();
                    recharge.requireGold = (int)_reward.AwardInfo[k].NeedGold;
                    recharge.index = _reward.AwardInfo[k].AwardIndex;
                    for (int q = 0; q < _reward.AwardInfo[k].AwardItemCount; q++)
                    {
                        var _item = _reward.AwardInfo[k].AwardItem[q];
                        recharge.items.Add(new Item()
                        {
                            id = (int)_item.ItemID,
                            count = _item.ItemCount,
                            bind = _item.IsBind,
                        });
                    }
                    reward.recharges.Add(recharge);
                }
                rewards.Add(reward);
            }
        }
        public Reward GetReward(DateTime time)
        {
            if (rewards.Count == 0)
            {
                return null;
            }
            var index = Mathf.Min(rewards.Count - 1, IndexOfTime(time));
            return rewards[index];
        }
        public class Reward
        {
            public List<Recharge> recharges = new List<Recharge>();
        }
        public class Recharge
        {
            public int index;
            public int requireGold;
            public List<Item> items = new List<Item>();
        }
        public struct Item
        {
            public int id;
            public int bind;
            public int count;
        }
    }
}
System/OpenServerActivity/OperationAccumulateRecharge.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 628f3c2ad3c339b40b72e76da8ef1fcc
timeCreated: 1541421540
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Welfare/OperationTimeHepler.cs
@@ -184,6 +184,39 @@
        }
        /// <summary>
        /// 累计充值
        /// </summary>
        /// <param name="package"></param>
        public void UpdateAccumulateRecharge(HAA1D_tagMCActTotalRechargeInfo package)
        {
            OperationBase operationBase = null;
            operationDict.TryGetValue(Operation.AccumulateRecharge, out operationBase);
            if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
            {
                ForceStopOperation(Operation.AccumulateRecharge);
            }
            else
            {
                if (operationBase == null)
                {
                    operationBase = new OperationAccumulateRecharge();
                    operationDict.Add(Operation.AccumulateRecharge, operationBase);
                }
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                operation.Reset();
                operation.limitLv = package.LimitLV;
                operation.startDate = ParseOperationDate(package.StartDate);
                operation.endDate = ParseOperationDate(package.EndtDate);
                operation.dayReset = package.IsDayReset == 1;
                operation.ParseAccumulateRecharge(package);
                if (operationTimeUpdateEvent != null)
                {
                    operationTimeUpdateEvent(Operation.AccumulateRecharge);
                }
            }
        }
        /// <summary>
        /// 限时特惠
        /// </summary>
        /// <param name="package"></param>
@@ -723,6 +756,7 @@
        MultipRealmPoint, //N倍修行点
        FlashRushToBuy, //限时抢购
        WishingWellInfo, //许愿池
        AccumulateRecharge,//累计充值
        max,
    }
}
System/WindowBase/ModelCenter.cs
@@ -203,6 +203,7 @@
            RegisterModel<RolePointModel>();
            RegisterModel<SocialModel>();
            RegisterModel<ChatBubbleModel>();
            RegisterModel<AccumulateRechargeModel>();
            inited = true;
        }
Utility/EnumHelper.cs
@@ -1167,6 +1167,7 @@
    Def_RewardType_FCParty = 14,// 仙界盛典全民来嗨14
    Def_RewardType_WishingWell = 16,//  许愿池奖励16
    Def_RewardType_OpenFunc=17,//功能预告奖励
    Def_RewardType_TotalRecharge = 18,//累计充值奖励
}
public enum MapType