少年修仙传客户端代码仓库
client_Zxw
2019-01-18 3a6fea4b9598bf899de808e465915cec7d4eaa6f
System/OpenServerActivity/LoginRewardModel.cs
@@ -10,6 +10,14 @@
[XLua.LuaCallCSharp]
public class LoginRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public event Action LoginAwardInfoUpdate;//领奖记录变更
    public Dictionary<int, WeekPartyDayInfoClass> LoginAwardInfoDic = new Dictionary<int, WeekPartyDayInfoClass>();//领奖信息
    public Dictionary<int, WeekPartyDayClass> LoginAwardDayDic = new Dictionary<int, WeekPartyDayClass>();//每天的奖励信息
    public Dictionary<int, WeekPartyActionClass> LoginAwardDic = new Dictionary<int, WeekPartyActionClass>();//活动模板信息
    public Dictionary<int, Redpoint> RedPointDic = new Dictionary<int, Redpoint>();//红点
    public int LimitLV = 0;//限制等级
    private const int Redpoint_key = 6666;//周狂欢红点
    public Redpoint redPointStre = new Redpoint(666, Redpoint_key);
    public override void Init()
    {
      
@@ -17,18 +25,234 @@
    public void OnBeforePlayerDataInitialize()
    {
        LoginAwardInfoDic.Clear();
    }
    public void OnPlayerLoginOk()
    {
        SetRedPoint();
    }
    public override void UnInit()
    {
        
    }
    public void LoginAwardInfo(HAA0C_tagMCActLoginAwardInfo info)//登录奖励活动信息
    {
        LimitLV = info.LimitLV;
        LoginAwardDayDic.Clear();
        LoginAwardDic.Clear();
        for (int i = 0; i < info.DayCnt; i++)//每天的奖励信息
        {
            int Index = i;
            var dayInfo = info.DayInfoList[i];
            WeekPartyDayClass loginAwardDay = new WeekPartyDayClass();
            loginAwardDay.TemplateList = new int[dayInfo.ActCnt];
            for (int k = 0; k < dayInfo.ActCnt; k++)
            {
                loginAwardDay.TemplateList[k] = dayInfo.TemplateList[k];
            }
            if (LoginAwardDayDic.ContainsKey(Index))
            {
                LoginAwardDayDic[Index] = loginAwardDay;
            }
            else
            {
                LoginAwardDayDic.Add(Index, loginAwardDay);
            }
        }
        for (int i = 0; i < info.TCount; i++)// 活动模板信息
        {
            var ActionInfo = info.ActionInfo[i];
            var templateID = (int)ActionInfo.TemplateID;
            WeekPartyActionClass loginAward = new WeekPartyActionClass();
            loginAward.TemplateID = (int)ActionInfo.TemplateID;
            loginAward.ActionType = (int)ActionInfo.ActionType;
            loginAward.TotalTimes = (int)ActionInfo.TotalTimes;
            loginAward.SingleTimes = (int)ActionInfo.SingleTimes;
            loginAward.WeekPartyItem = new WeekPartyItemClass[ActionInfo.Count];
            for (int z = 0; z < ActionInfo.Count; z++)
            {
                var item = ActionInfo.ItemInfo[z];
                WeekPartyItemClass loginAwardItem = new WeekPartyItemClass();
                loginAwardItem.ItemID = (int)item.ItemID;
                loginAwardItem.ItemCnt = (int)item.ItemCnt;
                loginAwardItem.IsBind = item.IsBind;
                loginAward.WeekPartyItem[z] = loginAwardItem;
            }
            if (LoginAwardDic.ContainsKey(templateID))
            {
                LoginAwardDic[templateID] = loginAward;
            }
            else
            {
                LoginAwardDic.Add(templateID, loginAward);
            }
        }
    }
    public void LoginAwardPlayerInfo(HAA0D_tagMCActLoginAwardPlayerInfo info)//登录奖励玩家活动信息
    {
        for (int i = 0; i < info.Count; i++)
        {
            var Dayinfo = info.DayInfoList[i];
            WeekPartyDayInfoClass loginAwardPlayerClass = new WeekPartyDayInfoClass();
            var dayindex = (int)Dayinfo.DayIndex;
            loginAwardPlayerClass.DayIndex = dayindex;
            if (LoginAwardInfoDic.ContainsKey(dayindex))
            {
                var dit = LoginAwardInfoDic[dayindex];
                dit.DayIndex = dayindex;
                for (int j = 0; j < dit.ActionType.Length; j++)
                {
                    if (dit.ActionType[j].TemplateID == Dayinfo.TaskList[0].TemplateID)
                    {
                        ActionTypeClass ActionType = new ActionTypeClass();
                        ActionType.TemplateID = Dayinfo.TaskList[0].TemplateID;
                        ActionType.CurTimes = Dayinfo.TaskList[0].CurTimes;
                        ActionType.GotTimes = Dayinfo.TaskList[0].GotTimes;
                        dit.ActionType[j] = ActionType;
                    }
                }
                LoginAwardInfoDic[dayindex] = dit;
            }
            else
            {
                loginAwardPlayerClass.ActionType = new ActionTypeClass[Dayinfo.ACount];
                for (int k = 0; k < Dayinfo.ACount; k++)
                {
                    var Task = Dayinfo.TaskList[k];
                    ActionTypeClass ActionType = new ActionTypeClass();
                    ActionType.TemplateID = Task.TemplateID;
                    ActionType.CurTimes = Task.CurTimes;
                    ActionType.GotTimes = Task.GotTimes;
                    LoginAwardInfoDic.Add(dayindex, loginAwardPlayerClass);
                }
            }
        }
        SetRedPoint();
        if (LoginAwardInfoUpdate != null)
        {
            LoginAwardInfoUpdate();
        }
    }
    public int GetRewardNumber(int Day, int ID)//获取领奖次数
    {
        int Num = 0;
        if (LoginAwardInfoDic.ContainsKey(Day))
        {
            var loginAward = LoginAwardInfoDic[Day];
            for (int i = 0; i < loginAward.ActionType.Length; i++)
            {
                var ActionType = loginAward.ActionType[i];
                if (ID == ActionType.TemplateID)
                {
                    Num = ActionType.GotTimes;
                }
            }
        }
        return Num;
    }
    public int GetCarryOutNum(int Day,int ID)//获取已完成次数
    {
        int Num = 0;
        if (LoginAwardInfoDic.ContainsKey(Day))
        {
            var loginAward = LoginAwardInfoDic[Day];
            for (int i = 0; i < loginAward.ActionType.Length; i++)
            {
                var ActionType = loginAward.ActionType[i];
                if (ID == ActionType.TemplateID)
                {
                    Num = ActionType.CurTimes;
                }
            }
        }
        return Num;
    }
    public void SendLoginAwardInfo(int day, int temdayplateID)//领取奖励
    {
        CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward();
        getReward.RewardType = (byte)GotServerRewardType.Def_RewardType_ActLoginAwardAct;
        getReward.DataEx = (uint)day;
        string StrID = temdayplateID.ToString();
        getReward.DataExStrLen = (byte)StrID.Length;
        getReward.DataExStr = StrID;
        GameNetSystem.Instance.SendInfo(getReward);
    }
    private void SetRedPoint()//红点设置
    {
        SetRedPointID();
        foreach (var key in RedPointDic.Keys)
        {
            RedPointDic[key].state = RedPointState.None;
        }
        foreach (var key in RedPointDic.Keys)
        {
            RedPointDic[key].state = SetRedPointState(key);
        }
    }
    private void SetRedPointID()//设置红点ID
    {
        if (RedPointDic.Count > 0)
        {
            return;
        }
        foreach (var key in LoginAwardInfoDic.Keys)
        {
            int RedPoint = Redpoint_key * 10 + key;
            if (!RedPointDic.ContainsKey(key))
            {
                Redpoint redPointMountStare = new Redpoint(Redpoint_key, RedPoint);
                RedPointDic.Add(key, redPointMountStare);
            }
        }
    }
    private RedPointState SetRedPointState(int day)//红点状态设置
    {
        if (!LoginAwardDayDic.ContainsKey(day) || !LoginAwardInfoDic.ContainsKey(day))
        {
            return RedPointState.None;
        }
        WeekPartyDayClass loginAward = new WeekPartyDayClass();
        foreach (var key in LoginAwardDayDic.Keys)
        {
            if (key == day)
            {
                loginAward = LoginAwardDayDic[key];
            }
        }
        for (int i = 0; i < loginAward.TemplateList.Length; i++)
        {
            var TemplateID = loginAward.TemplateList[i];
            if (LoginAwardDic.ContainsKey(TemplateID))
            {
                var LoginAward = LoginAwardDic[TemplateID];
                int number = LoginAward.TotalTimes / LoginAward.SingleTimes;
                int rewardNum = GetRewardNumber(day, TemplateID);//已领奖次数
                int carryOutNum = GetCarryOutNum(day, TemplateID);//已完成次数
                int TaypeNumber = 0;
                if (carryOutNum - rewardNum > 0)
                {
                    TaypeNumber = (carryOutNum - rewardNum) / LoginAward.SingleTimes;
                }
                if (TaypeNumber > 0 && rewardNum < number)
                {
                    return RedPointState.GetReward;
                }
            }
        }
        return RedPointState.None;
    }
}