using System; namespace vnxbqy.UI { public class FairyAffinityLoginActModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { public event Action onStateUpdate; public Redpoint redPoint = new Redpoint(MainRedDot.FairyAffinityRepoint, MainRedDot.FairyAffinityRepoint * 10 + 2); //可能挂多个父红点 public int buyValue; private uint LoginAwardState; //领取状态 可以补签 private uint LoginAwardExState; // 额外奖励领取记录 可以补签 public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_Activity2; public const int activityID = (int)NewDayActivityID.FairyAffinityLoginAct; public static Operation operaType = Operation.default44; public int actNum = 11; //对应界面 public event Action UpdateyLoginEvent; VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; OpenServerActivityCenter.Instance.Register(activityID, this, activityType); vipModel.rechargeCountEvent += VipModel_rechargeCountEvent; buyValue = int.Parse(FuncConfigConfig.Get("FairyAffinity").Numerical2); } public void OnBeforePlayerDataInitialize() { } public void OnPlayerLoginOk() { } public override void UnInit() { vipModel.rechargeCountEvent -= VipModel_rechargeCountEvent; } private void VipModel_rechargeCountEvent(int obj) { if (IsOpen) { UpdateRedpoint(); } } public bool IsOpen { get { return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType); } } public bool priorityOpen { get { return redPoint.state == RedPointState.Simple; } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType); } } private void OperationEndEvent(Operation type, int state) { if (type == operaType && state == 0) { if (onStateUpdate != null) { onStateUpdate(activityID); } UpdateRedpoint(); } } private void OperationAdvanceEvent(Operation type) { if (type == operaType) { if (onStateUpdate != null) { onStateUpdate(activityID); } } } private void OperationStartEvent(Operation type, int state) { if (type == operaType && state == 0) { if (onStateUpdate != null) { onStateUpdate(activityID); } } } public bool IsBuyAwardEx() { OperationLoginAct holiday; OperationTimeHepler.Instance.TryGetOperation(operaType, out holiday); if (holiday == null) return false; if (holiday.awardExCTGID <= 0) return false; VipModel.RechargeCount rechargeCount; vipModel.TryGetRechargeCount(holiday.awardExCTGID, out rechargeCount); var ctgConfig = CTGConfig.Get(holiday.awardExCTGID); int buyCnt = rechargeCount.totalCount; int totalCnt = ctgConfig.TotalBuyCount; return totalCnt <= buyCnt; } public int GetHaveAwardDayCnt() { OperationLoginAct holiday; OperationTimeHepler.Instance.TryGetOperation(operaType, out holiday); if (holiday == null) return 0; int num = 0; for (int i = 0; i < holiday.loginAwards.Count; i++) { //0 不可领取(日期未到) 1 可领取 2 已领取 3补签(已过天) 4 继续签到(已购买) 5 继续签到(未购买) var state = GetLoginAwardState(i + 1); if (state == 2 || state == 4 || state == 5) num += 1; } return num; } //0 不可领取(日期未到) 1 可领取 2 已领取 3补签(已过天) 4 继续签到(已购买) 5 继续签到(未购买) //day 从1开始 public int GetLoginAwardState(int day) { //校验日期 OperationLoginAct holiday; OperationTimeHepler.Instance.TryGetOperation(operaType, out holiday); if (holiday == null) return 0; int days = holiday.IndexOfDays(TimeUtility.ServerNow); //当前是第几天 if (days == -1) return 0; if (day > days + 1) return 0; if (!IsBuyAwardEx()) { if (((int)Math.Pow(2, day) & LoginAwardState) == 0) { return day != days + 1 ? 3 : 1; } else { return 5; } } else { if (((int)Math.Pow(2, day) & LoginAwardState) == 0) { return day != days + 1 ? 3 : 1; } else { return ((int)Math.Pow(2, day) & LoginAwardExState) == 0 ? 4 : 2; } } } private void UpdateRedpoint() { redPoint.state = RedPointState.None; if (!IsOpen) return; OperationLoginAct holiday; OperationTimeHepler.Instance.TryGetOperation(operaType, out holiday); if (holiday == null) return; //封包顺序如果有问题 此处为空 for (int i = 0; i < holiday.loginAwards.Count; i++) { //0 不可领取(日期未到) 1 可领取 2 已领取 3补签(已过天) 4 继续签到(已购买) 5 继续签到(未购买) if (GetLoginAwardState(holiday.loginAwards[i].DayNum) == 1 || GetLoginAwardState(holiday.loginAwards[i].DayNum) == 4) { redPoint.state = RedPointState.Simple; return; } } } public void UpdateLoginInfo(HAA70_tagMCActLoginPlayerInfoNew netPack) { if (actNum != netPack.ActNum) return; LoginAwardState = netPack.LoginAward; LoginAwardExState = netPack.LoginAwardEx; UpdateyLoginEvent?.Invoke(); UpdateRedpoint(); } public void SendGetAward(int day) { CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward(); getReward.RewardType = 70; getReward.DataEx = (uint)day; getReward.DataExStr = actNum.ToString(); getReward.DataExStrLen = (byte)getReward.DataExStr.Length; GameNetSystem.Instance.SendInfo(getReward); } public void SendGetAwardEx(int day) { CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward(); getReward.RewardType = 70; getReward.DataEx = 1000 + (uint)day; getReward.DataExStr = actNum.ToString(); getReward.DataExStrLen = (byte)getReward.DataExStr.Length; GameNetSystem.Instance.SendInfo(getReward); } } }