少年修仙传客户端代码仓库
client_linchunjie
2018-08-23 522ca3468a56c88cb15eaa428eb7499d3dba386f
System/OpenServerActivity/FlashSaleModel.cs
@@ -1,185 +1,218 @@
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class FlashSaleModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
    {
        StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            TimeMgr.Instance.OnDayEvent += OnDayEvent;
        }
        public void OnBeforePlayerDataInitialize()
        {
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
            TimeMgr.Instance.OnDayEvent -= OnDayEvent;
        }
        private void OperationEndEvent(Operation type, int state)
        {
            if (type == Operation.FlashSale && state == 0)
            {
                UpdateRedpoint();
            }
        }
        private void OperationStartEvent(Operation type, int state)
        {
            if (type == Operation.FlashSale && state == 0)
            {
                UpdateRedpoint();
            }
        }
        private void OnDayEvent()
        {
            UpdateRedpoint();
        }
        public void SetDayRemind()
        {
            if (flashSaleRedpoint.state == RedPointState.Simple)
            {
                DayRemind.Instance.SetDayRemind(DayRemind.FLASHSALE_REDPOINT, true);
                UpdateRedpoint();
            }
        }
        public bool IsOpen
        {
            get
            {
                OperationBase operationBase;
                OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
                return operationBase != null && operationBase.SatisfyOpenCondition() && operationBase.InTime(TimeUtility.ServerNow);
            }
        }
        public void SendBuyFlashSale(int index, int id)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase))
            {
                OperationFlashSale operation = operationBase as OperationFlashSale;
                if (!operation.InTime(TimeUtility.ServerNow))
                {
                    SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                    return;
                }
                var gift = operation.GetFlashSaleGift(index, id);
                if (!gift.Equals(default(OperationFlashSale.FlashSaleGift)))
                {
                    var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
                    var buyCount = 0;
                    if (buyInfo != null)
                    {
                        buyCount = buyInfo.BuyCnt;
                    }
                    if (buyCount >= gift.limitNum)
                    {
                        return;
                    }
                    if (UIHelper.GetMoneyCnt(gift.moneyType) < (ulong)gift.moneyNumber)
                    {
                        switch (gift.moneyType)
                        {
                            case 1:
                                if (VersionConfig.Get().isBanShu)
                                {
                                    SysNotifyMgr.Instance.ShowTip("GoldErr");
                                    return;
                                }
                                WindowCenter.Instance.Open<RechargeTipWin>();
                                break;
                            default:
                                SysNotifyMgr.Instance.ShowTip("LackMoney", gift.moneyType);
                                break;
                        }
                        return;
                    }
                    if (gift.moneyType == 1)
                    {
                        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
                        Language.Get("OSTimeLimitGiftConfirm", gift.moneyNumber), (bool isOk) =>
                        {
                            if (isOk)
                            {
                                C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
                                pak.NPCID = 0;
                                pak.BuyItemIndex = (ushort)gift.id;
                                pak.BuyCount = 1;
                                GameNetSystem.Instance.SendInfo(pak);
                            }
                        });
                    }
                    else
                    {
                        C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
                        pak.NPCID = 0;
                        pak.BuyItemIndex = (ushort)gift.id;
                        pak.BuyCount = 1;
                        GameNetSystem.Instance.SendInfo(pak);
                    }
                }
            }
            else
            {
                SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
            }
        }
        public bool HasNotBuyGift()
        {
            OperationBase operationBase;
            OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
            if (operationBase != null && operationBase.InTime(TimeUtility.ServerNow))
            {
                OperationFlashSale operation = operationBase as OperationFlashSale;
                var index = operation.IndexOfFlashShop();
                if (index != -1 && index < operation.flashShops.Count)
                {
                    var flashShop = operation.flashShops[index];
                    for (int i = 0; i < flashShop.gifts.Length; i++)
                    {
                        var gift = flashShop.gifts[i];
                        var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
                        if (buyInfo == null || buyInfo.BuyCnt < gift.limitNum)
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        public Redpoint flashSaleRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20904);
        private void UpdateRedpoint()
        {
            flashSaleRedpoint.state = RedPointState.None;
            if (OperationTimeHepler.Instance.InOperationTime(Operation.FlashSale)
                && HasNotBuyGift() && !DayRemind.Instance.GetDayRemind(DayRemind.FLASHSALE_REDPOINT))
            {
                flashSaleRedpoint.state = RedPointState.Simple;
            }
        }
    }
namespace Snxxz.UI
{
    public class FlashSaleModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IOpenServerActivity
    {
        StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
            TimeMgr.Instance.OnDayEvent += OnDayEvent;
            OpenServerActivityCenter.Instance.Register(4, this);
        }
        public void OnBeforePlayerDataInitialize()
        {
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
            OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
            TimeMgr.Instance.OnDayEvent -= OnDayEvent;
        }
        private void OperationEndEvent(Operation type, int state)
        {
            if (type == Operation.FlashSale && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate(4);
                }
            }
        }
        private void OperationStartEvent(Operation type, int state)
        {
            if (type == Operation.FlashSale && state == 0)
            {
                UpdateRedpoint();
                if (onStateUpate != null)
                {
                    onStateUpate(4);
                }
            }
        }
        private void OnDayEvent()
        {
            UpdateRedpoint();
        }
        public void SetDayRemind()
        {
            if (flashSaleRedpoint.state == RedPointState.Simple)
            {
                DayRemind.Instance.SetDayRemind(DayRemind.FLASHSALE_REDPOINT, true);
                UpdateRedpoint();
            }
        }
        public bool IsOpen
        {
            get
            {
                OperationBase operationBase;
                OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
                return operationBase != null && operationBase.SatisfyOpenCondition() && operationBase.InTime(TimeUtility.ServerNow);
            }
        }
        public bool InAdvanceOpen
        {
            get
            {
                OperationBase operationBase;
                OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
                return operationBase != null && operationBase.SatisfyOpenCondition() && operationBase.InAdvanceTime(TimeUtility.ServerNow);
            }
        }
        public bool priorityOpen
        {
            get
            {
                return flashSaleRedpoint.state == RedPointState.Simple;
            }
        }
        public void SendBuyFlashSale(int index, int id)
        {
            OperationBase operationBase;
            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase))
            {
                OperationFlashSale operation = operationBase as OperationFlashSale;
                if (operation.InAdvanceTime(TimeUtility.ServerNow))
                {
                    return;
                }
                if (!operation.InTime(TimeUtility.ServerNow))
                {
                    SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                    return;
                }
                var gift = operation.GetFlashSaleGift(index, id);
                if (!gift.Equals(default(OperationFlashSale.FlashSaleGift)))
                {
                    var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
                    var buyCount = 0;
                    if (buyInfo != null)
                    {
                        buyCount = buyInfo.BuyCnt;
                    }
                    if (buyCount >= gift.limitNum)
                    {
                        return;
                    }
                    if (UIHelper.GetMoneyCnt(gift.moneyType) < (ulong)gift.moneyNumber)
                    {
                        switch (gift.moneyType)
                        {
                            case 1:
                                if (VersionConfig.Get().isBanShu)
                                {
                                    SysNotifyMgr.Instance.ShowTip("GoldErr");
                                    return;
                                }
                                WindowCenter.Instance.Open<RechargeTipWin>();
                                break;
                            default:
                                SysNotifyMgr.Instance.ShowTip("LackMoney", gift.moneyType);
                                break;
                        }
                        return;
                    }
                    if (gift.moneyType == 1)
                    {
                        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
                        Language.Get("OSTimeLimitGiftConfirm", gift.moneyNumber), (bool isOk) =>
                        {
                            if (isOk)
                            {
                                C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
                                pak.NPCID = 0;
                                pak.BuyItemIndex = (ushort)gift.id;
                                pak.BuyCount = 1;
                                GameNetSystem.Instance.SendInfo(pak);
                            }
                        });
                    }
                    else
                    {
                        C0803_tagCBuyItemList pak = new C0803_tagCBuyItemList();
                        pak.NPCID = 0;
                        pak.BuyItemIndex = (ushort)gift.id;
                        pak.BuyCount = 1;
                        GameNetSystem.Instance.SendInfo(pak);
                    }
                }
            }
            else
            {
                SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
            }
        }
        public bool HasNotBuyGift()
        {
            OperationBase operationBase;
            OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase);
            if (operationBase != null && operationBase.InTime(TimeUtility.ServerNow))
            {
                OperationFlashSale operation = operationBase as OperationFlashSale;
                var index = operation.IndexOfFlashShop();
                if (index != -1 && index < operation.flashShops.Count)
                {
                    var flashShop = operation.flashShops[index];
                    for (int i = 0; i < flashShop.gifts.Length; i++)
                    {
                        var gift = flashShop.gifts[i];
                        var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id);
                        if (buyInfo == null || buyInfo.BuyCnt < gift.limitNum)
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        public Redpoint flashSaleRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20904);
        public event Action<int> onStateUpate;
        private void UpdateRedpoint()
        {
            flashSaleRedpoint.state = RedPointState.None;
            if (IsOpen && HasNotBuyGift() && !DayRemind.Instance.GetDayRemind(DayRemind.FLASHSALE_REDPOINT))
            {
                flashSaleRedpoint.state = RedPointState.Simple;
            }
        }
    }
}