using System;
|
|
namespace vnxbqy.UI
|
{
|
public class FairyAffinityLoginActModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public event Action<int> 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<VipModel>(); } }
|
|
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);
|
}
|
}
|
}
|