少年修仙传客户端代码仓库
8715 子 【主干】【BT2】【测试】H.活动-节日祈愿 / 【主干】【前端】【BT2】H.活动-节日祈愿-任意充值
6个文件已修改
4个文件已添加
535 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayMultiRechargeModel.cs 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayMultiRechargeModel.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayRechargeGiftWin.cs 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayRechargeGiftWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayWishPoolWin.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/HolidayWishesWin.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HolidayWishes/WishBottleAwardWin.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/OperationTimeHepler.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagMCTotalRechargePlayerInfo.cs
@@ -16,6 +16,7 @@
        var package = vNetPack as HAA1C_tagMCTotalRechargePlayerInfo;
        ModelCenter.Instance.GetModel<AccumulateRechargeModel>().UpdateAccumulateRecharge(package);
        ModelCenter.Instance.GetModel<DaysAccumulateRechargeModel>().UpdateAccumulateRecharge(package);
        ModelCenter.Instance.GetModel<HolidayMultiRechargeModel>().UpdateAccumulateRecharge(package);
    }
}
System/HolidayWishes/HolidayMultiRechargeModel.cs
New file
@@ -0,0 +1,261 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class HolidayMultiRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        public const int redPointID = 28003;
        public Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, redPointID);
        public Operation operationType = Operation.HolidayMultiRecharge;
        //节日祝福 id从101开始和精彩活动区分
        public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_JRZF;
        public const int activityID = 103;
        public bool IsOpen
        {
            get
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
            }
        }
        public bool IsAdvance
        {
            get
            {
                return false;
            }
        }
        public bool priorityOpen
        {
            get { return redpoint.state == RedPointState.Simple; }
        }
        public event Action accumulateRechargeUpdate;
        public event Action<int> onStateUpdate;
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            OpenServerActivityCenter.Instance.Register(activityID, this, activityType);
        }
        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(operationType, out operationBase))
            {
                if (resetType == operationBase.resetType)
                {
                    UpdateRedpoint();
                }
            }
        }
        private void OperationEndEvent(Operation operation, int state)
        {
            if (operation == operationType && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpdate != null)
                {
                    onStateUpdate(activityID);
                }
            }
        }
        private void OperationStartEvent(Operation operation, int state)
        {
            if (operation == operationType && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpdate != null)
                {
                    onStateUpdate(activityID);
                }
            }
        }
        #region 服务端数据
        public uint rechargeTotal { get; private set; }  //充值总额
        public uint getRewardRecord { get; private set; } //领取记录
        public uint ActNum { get; private set; } //累充类型 对应界面
        public void UpdateAccumulateRecharge(HAA1C_tagMCTotalRechargePlayerInfo package)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                if (operation.ActNum !=  package.ActNum)
                {
                    return;
                }
                ActNum = package.ActNum;
                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;
        }
        // 累充中存在任意充值档位,独立界面处理,指定判断充值额度为0.01(requireGold=1)
        // isAnyRecharge 判断是否任意充值档
        public bool SatisfyGetReward(OperationAccumulateRecharge.Recharge recharge, bool isAnyRecharge = false)
        {
            if (!IsOpen)
            {
                return false;
            }
            if (IsRewardGot(recharge))
            {
                return false;
            }
            if (rechargeTotal >= recharge.requireGold)
            {
                if (isAnyRecharge == true && recharge.requireGold != 1)
                {
                    //没有任意充值档位
                    return false;
                }
                return true;
            }
            return false;
        }
        //判断是否有任意档位
        //累充中存在任意充值档位,独立界面处理,指定判断充值额度为0.01(requireGold=1)
        public bool hasAnyRecharge()
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    if (reward.recharges.Count > 0)
                    {
                        var recharge = reward.recharges[0];
                        if (recharge.requireGold == 1)
                            return true;
                    }
                }
            }
            return false;
        }
        //领取奖励封包
        public void GetAccumulateRechargeReward(OperationAccumulateRecharge.Recharge recharge)
        {
            OperationBase operationBase;
            if (!OperationTimeHepler.Instance.InOperationTime(operationType))
            {
                SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                return;
            }
            if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, 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 = (byte)ActNum.ToString().Length;
                pak.DataExStr = ActNum.ToString();
                GameNetSystem.Instance.SendInfo(pak);
            }
        }
        #endregion
        #region 红点
        public void UpdateRedpoint()
        {
            redpoint.state = RedPointState.None;
            if (!IsOpen)
            {
                return;
            }
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, 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 (i == 0)
                        {
                            //任意充值单独界面红点
                            if (SatisfyGetReward(recharge, true))
                            {
                                redpoint.state = RedPointState.Simple;
                            }
                        }
                        //累计充值界面红点
                        //if (SatisfyGetReward(recharge))
                        //{
                        //    redpoint.state = RedPointState.Simple;
                        //    break;
                        //}
                    }
                }
            }
        }
        #endregion
    }
}
System/HolidayWishes/HolidayMultiRechargeModel.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f99dc5a91c3da8449939180fb30bcab5
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/HolidayWishes/HolidayRechargeGiftWin.cs
New file
@@ -0,0 +1,185 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
namespace Snxxz.UI
{
    public class HolidayRechargeGiftWin : Window
    {
        ButtonEx receiveBtn;
        Button rechargeBtn;
        Text receiveBtnText;
        Text TimeTxt;
        List<ItemCell> itemBaiscs = new List<ItemCell>();
        HolidayMultiRechargeModel rechargeModel { get { return ModelCenter.Instance.GetModel<HolidayMultiRechargeModel>(); } }
        PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        protected override void BindController()
        {
            itemBaiscs.Add(GetWidgt<ItemCell>("ItemCell1"));
            itemBaiscs.Add(GetWidgt<ItemCell>("ItemCell2"));
            itemBaiscs.Add(GetWidgt<ItemCell>("ItemCell3"));
            itemBaiscs.Add(GetWidgt<ItemCell>("ItemCell4"));
            itemBaiscs.Add(GetWidgt<ItemCell>("ItemCell5"));
            receiveBtn = GetWidgt<ButtonEx>("ReceiveButton");
            rechargeBtn = GetWidgt<Button>("RechargeButton");
            TimeTxt = GetWidgt<Text>("ActivityDesText");
            receiveBtnText = GetWidgt<Text>("Text");
        }
        protected override void AddListeners()
        {
            rechargeBtn.AddListener(ClickRecharge);
            receiveBtn.AddListener(OnReceiveGift);
        }
        protected override void OnPreOpen()
        {
            rechargeModel.accumulateRechargeUpdate += DisplayButton;
            DisplayButton();
            DisplayItems();
            DisplayOpenTime();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            rechargeModel.accumulateRechargeUpdate -= DisplayButton;
        }
        protected override void OnAfterClose()
        {
        }
        void DisplayOpenTime()
        {
            OperationAccumulateRecharge operation;
            if (OperationTimeHepler.Instance.TryGetOperation(rechargeModel.operationType, out operation))
            {
                TimeTxt.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime());
            }
        }
        void DisplayButton()
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(rechargeModel.operationType, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    if (reward.recharges.Count > 0)
                    {
                        var recharge = reward.recharges[0];
                        if (rechargeModel.SatisfyGetReward(recharge, true))
                        {
                            receiveBtnText.text = Language.Get("AccumulateRecharge_GetReward");
                            receiveBtn.SetColorful(receiveBtnText, true);
                            receiveBtn.interactable = true;
                        }
                        else if (rechargeModel.IsRewardGot(recharge))
                        {
                            receiveBtnText.text = Language.Get("Z1044");
                            receiveBtn.SetColorful(receiveBtnText, false);
                            receiveBtn.interactable = false;
                        }
                        else
                        {
                            receiveBtnText.text = Language.Get("AccumulateRecharge_GetReward");
                            receiveBtn.SetColorful(receiveBtnText, false);
                            receiveBtn.interactable = true;
                        }
                    }
                }
            }
        }
        private void DisplayItems()
        {
            int index = 0;
            OperationBase operationBase;
            OperationAccumulateRecharge.Recharge recharge = null;
            if (OperationTimeHepler.Instance.TryGetOperationTime(rechargeModel.operationType, 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 < itemBaiscs.Count; i++)
            {
                if (recharge != null && i < recharge.items.Count)
                {
                    var item = recharge.items[i];
                    itemBaiscs[i].gameObject.SetActive(true);
                    ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count);
                    itemBaiscs[i].Init(itemCellModel);
                    itemBaiscs[i].button.AddListener(() =>
                    {
                        ItemTipUtility.Show(item.id);
                    });
                    itemBaiscs[i].auctionIcon.gameObject.SetActive(item.bind > 0 ? true : false);
                }
                else
                {
                    itemBaiscs[i].gameObject.SetActive(false);
                }
            }
        }
        private void OnReceiveGift()
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(rechargeModel.operationType, out operationBase))
            {
                OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
                var reward = operation.GetReward(TimeUtility.ServerNow);
                if (reward != null)
                {
                    if (reward.recharges.Count > 0)
                    {
                        var recharge = reward.recharges[0];
                        if (rechargeModel.SatisfyGetReward(recharge, true))
                        {
                            if (playerPack.GetEmptyGridCount(PackType.Item) > recharge.items.Count)
                            {
                                rechargeModel.GetAccumulateRechargeReward(recharge);
                            }
                            else
                            {
                                SysNotifyMgr.Instance.ShowTip("BagFull");
                            }
                        }
                        else
                        {
                            SysNotifyMgr.Instance.ShowTip("FairylandCermonyRecharge1");
                        }
                    }
                }
            }
        }
        private void ClickRecharge()
        {
            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.VipRechargeFunc1);
        }
    }
}
System/HolidayWishes/HolidayRechargeGiftWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e245118545ae7d84992e6d57923904db
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/HolidayWishes/HolidayWishPoolWin.cs
@@ -27,6 +27,7 @@
        Text allStarNum; //可祝福的物品总数
        RichText wishLegend;
        Text OpenTime;
        Operation operationType = Operation.HolidayWish;
@@ -54,6 +55,7 @@
            allStarNum = GetWidgt<Text>("allstarnum");
            wishLegend = GetWidgt<RichText>("Content1");
            OpenTime = GetWidgt<Text>("OpenTime");
        }
@@ -136,6 +138,14 @@
                wishNeedNum2.color = UIHelper.GetUIColor(TextColType.LightYellow, true);
        }
        void DisplayOpenTime()
        {
            OperationHolidayWish operation;
            if (OperationTimeHepler.Instance.TryGetOperation(operationType, out operation))
            {
                OpenTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime());
            }
        }
        void Display()
        {
@@ -159,6 +169,7 @@
            }
            DisplayScroll();
            DisplayOpenTime();
            var itemCnt = playerPack.GetItemCountByID(PackType.Item, model.wishItemID);
System/HolidayWishes/HolidayWishesWin.cs
@@ -13,6 +13,10 @@
    public class HolidayWishesWin : OneLevelWin
    {
        HolidayMultiRechargeModel rechargeModel { get { return ModelCenter.Instance.GetModel<HolidayMultiRechargeModel>(); } }
        int wishOrder = 0; // 如果外部存在跳转或者期望打开界面,则不根据红点跳转
        #region Built-in
        protected override void AddListeners()
@@ -20,7 +24,7 @@
            base.AddListeners();
            SetFunctionListener(0, ShowLoginWin);
            SetFunctionListener(1, ShowHolidayWishPoolWin);
            SetFunctionListener(2, ShowAlchemyFairy);
            SetFunctionListener(2, ShowHolidayRechargeGiftWin);
            SetFunctionListener(3, ShowAlchemyFairyDrug);
        }
@@ -31,6 +35,7 @@
        protected override void OnPreOpen()
        {
            wishOrder = functionOrder;
            base.OnPreOpen();
            SetFunctionButtonActive(0, true);
            SetFunctionButtonActive(1, true);
@@ -47,9 +52,15 @@
                SetFunctionButtonActive(1, false);
            }
            if (!OpenServerActivityCenter.Instance.IsActivityOpen(103, (int)OpenServerActivityCenter.ActivityType.AT_JRZF))
            if (!OpenServerActivityCenter.Instance.IsActivityOpen(103, (int)OpenServerActivityCenter.ActivityType.AT_JRZF) ||
                !rechargeModel.hasAnyRecharge())
            {
                SetFunctionButtonActive(2, false);
            }
            else
            {
                //默认打开充值大礼界面
                functionOrder = 2;
            }
            if (!OpenServerActivityCenter.Instance.IsActivityOpen(104, (int)OpenServerActivityCenter.ActivityType.AT_JRZF))
@@ -62,12 +73,16 @@
        protected override void OnAfterOpen()
        {
            for (int i = 0; i < 4; i++)
            {
                if (GetFunctionButtonRedPointState(i) != RedPointState.None)
            if (wishOrder == 0)
            {
                //在OnAfterOpen处理的原因是 FunctionButton在OnEnable和OnDisable 做了注册和注销
                for (int i = 0; i < 4; i++)
                {
                    FunctionButtonInvoke(i);
                    break;
                    if (GetFunctionButtonRedPointState(i) != RedPointState.None)
                    {
                        FunctionButtonInvoke(i);
                        break;
                    }
                }
            }
        }
@@ -75,6 +90,7 @@
        protected override void OnPreClose()
        {
            base.OnPreClose();
            wishOrder = 0;
        }
        #endregion
@@ -93,10 +109,10 @@
            functionOrder = 1;
        }
        private void ShowAlchemyFairy()
        private void ShowHolidayRechargeGiftWin()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<AlchemyFairyDrugWin>();
            WindowCenter.Instance.Open<HolidayRechargeGiftWin>();
            functionOrder = 2;
        }
System/HolidayWishes/WishBottleAwardWin.cs
@@ -130,6 +130,11 @@
                            select.gameObject.SetActive(false);
                        }
                        itemSelect[index].gameObject.SetActive(true);
                        if (SelectIndex == index)
                        {
                            ItemTipUtility.Show(itemID);
                        }
                        SelectIndex = index;
                    });
System/Welfare/OperationTimeHepler.cs
@@ -224,7 +224,19 @@
        {
            OperationBase operationBase = null;
            var opreationType = package.ActNum == 1 ? Operation.AccumulateRecharge : Operation.DaysAccumulateRecharge;
            Operation opreationType = Operation.AccumulateRecharge;
            if (package.ActNum == 1)
            {
                opreationType = Operation.AccumulateRecharge;
            }
            else if (package.ActNum == 2)
            {
                opreationType = Operation.DaysAccumulateRecharge;
            }
            else if (package.ActNum == 3)
            {
                opreationType = Operation.HolidayMultiRecharge;
            }
            operationDict.TryGetValue(opreationType, out operationBase);
            if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
@@ -1135,6 +1147,7 @@
        CollectWords,   //收集文字
        HolidayLogin,   //节日登录
        HolidayWish,   //节日祝福
        HolidayMultiRecharge,//节日祝福的多日累计充值
        max,
    }
}
System/WindowBase/ModelCenter.cs
@@ -245,6 +245,7 @@
            RegisterModel<HolidayLoginModel>();
            RegisterModel<HolidayWishPoolModel>();
            RegisterModel<HolidayMultiRechargeModel>();
            inited = true;
        }