using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 双倍 (多倍充值) /// namespace vnxbqy.UI { public class MultiRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { Operation multiRechargeType = Operation.MultiRecharge; int regesitType = 24; public bool IsOpen { get { return OperationTimeHepler.Instance.SatisfyOpenCondition(multiRechargeType); } } public bool IsAdvance { get { return false; } } public bool priorityOpen { get { return redpoint.state == RedPointState.Simple; } } public event Action MultiRechargeUpdate; public event Action onStateUpdate; public override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; OpenServerActivityCenter.Instance.Register(regesitType, this); } public void OnBeforePlayerDataInitialize() { multiRechargeDict.Clear(); } 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(multiRechargeType, out operationBase)) { if (resetType == operationBase.resetType) { UpdateRedpoint(); } } } private void OperationEndEvent(Operation operationType, int state) { if (operationType == multiRechargeType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(regesitType); } } } private void OperationStartEvent(Operation operationType, int state) { if (operationType == multiRechargeType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(regesitType); } } } #region 服务端数据 public Dictionary multiRechargeDict = new Dictionary(); public void UpdateMultiRecharge(HAA28_tagMCRechargePrizePlayerInfo package) { for (int i = 0; i < package.Count; i++) { multiRechargeDict[package.PlayerInfoList[i].CTGID] = package.PlayerInfoList[i].PrizeCount; } UpdateRedpoint(); if (MultiRechargeUpdate != null) { MultiRechargeUpdate(); } } //是否有多倍充值 public bool isFirstRechageActiveByCTGID(int ctgID) { if (!IsOpen) { return false; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase)) { OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge; var reward = multiOP.GetReward(TimeUtility.ServerNow); if (reward != null) { for (int i = 0; i < reward.recharges.Count; i++) { var recharge = reward.recharges[i]; if (recharge.CTGID == ctgID) { if (multiRechargeDict.ContainsKey(ctgID) && multiRechargeDict[ctgID] < recharge.PrizeCountLimit) { return true; } } } } } return false; } //首充返利仙玉金额,外部调用根据金额地板除获得倍数 public int GetFirstRechageNumByCTGID(int ctgID) { if (!IsOpen) { return 0; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase)) { OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge; var reward = multiOP.GetReward(TimeUtility.ServerNow); if (reward != null) { for (int i = 0; i < reward.recharges.Count; i++) { var recharge = reward.recharges[i]; if (recharge.CTGID == ctgID) { return recharge.GoldPrize; } } } } return 0; } #endregion #region 红点 public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20924); public bool isOpenWin = false; public void UpdateRedpoint() { redpoint.state = RedPointState.None; if (!IsOpen) { return; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase)) { redpoint.state = isOpenWin ? RedPointState.None : RedPointState.Simple; } } #endregion } }