//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, December 10, 2018
|
//--------------------------------------------------------
|
using System;
|
using System.Collections.Generic;
|
using vnxbqy.UI;
|
|
//登录奖励
|
|
public class LoginRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public event Action LoginAwardInfoUpdate;//领奖记录变更
|
public event Action<int> onStateUpdate;
|
|
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>();//红点
|
private Dictionary<int, int> WorldLvDic = new Dictionary<int, int>();//世界等级
|
public int DayNow = 0;//当前天
|
public int SelectedNow = 0;//获取选择天
|
public int LimitLV = 0;//限制等级
|
private const int Redpoint_key = 20921;//登录奖励红点
|
public Redpoint redPointStre = new Redpoint(209, Redpoint_key);
|
|
public bool IsOpen
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.LoginReward);
|
}
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.LoginReward);
|
}
|
}
|
|
public bool priorityOpen
|
{
|
get
|
{
|
if (redPointStre.state == RedPointState.GetReward || redPointStre.state == RedPointState.Simple)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public override void Init()
|
{
|
OpenServerActivityCenter.Instance.Register(21, this);
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
}
|
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
LoginAwardInfoDic.Clear();
|
LoginAwardDayDic.Clear();
|
LoginAwardDic.Clear();
|
WorldLvDic.Clear();
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
GetDay();
|
SetRedPoint();
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
|
}
|
private void OperationEndEvent(Operation arg1, int arg2)
|
{
|
if (arg1 == Operation.LoginReward && arg2 == 0)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(21);
|
}
|
}
|
}
|
private void DayResetEvent(int obj)
|
{
|
if (obj == (int)Operation.LoginReward)
|
{
|
GetDay();
|
SetRedPoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(21);
|
}
|
}
|
}
|
|
private void OperationStartEvent(Operation arg1, int arg2)
|
{
|
if (arg1 == Operation.LoginReward)
|
{
|
GetDay();
|
SetRedPoint();
|
if (arg2 == 0 && onStateUpdate != null)
|
{
|
onStateUpdate(21);
|
}
|
}
|
}
|
|
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];
|
if (!WorldLvDic.ContainsKey(Index))
|
{
|
WorldLvDic.Add(Index, dayInfo.WorldLV);
|
}
|
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;
|
string ItemInfoJason = ActionInfo.ItemInfo;
|
loginAward.ItemJson = ItemInfoJason;
|
// loginAward.WeekPartyItem = GetLoginrewardItemList(i, ItemInfoJason);
|
|
//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 WeekPartyItemClass[] GetLoginrewardItemList(int index, string jsonStr)
|
{
|
int count = 1;
|
var jsonData = LitJson.JsonMapper.ToObject(jsonStr);
|
Dictionary<int, WeekPartyItemClass[]> dic = new Dictionary<int, WeekPartyItemClass[]>();
|
foreach (var key in jsonData.Keys)
|
{
|
var worldLv = int.Parse(key);
|
var itemArray = LitJson.JsonMapper.ToObject<int[][]>(jsonData[key].ToJson());
|
WeekPartyItemClass[] loginrewardItem = new WeekPartyItemClass[itemArray.Length];
|
count = itemArray.Length;
|
for (int j = 0; j < itemArray.Length; j++)
|
{
|
WeekPartyItemClass loginAwardItem = new WeekPartyItemClass();
|
loginAwardItem.ItemID = itemArray[j][0];
|
loginAwardItem.ItemCnt = itemArray[j][1];
|
loginAwardItem.IsBind = itemArray[j][2];
|
loginrewardItem[j] = loginAwardItem;
|
}
|
dic.Add(worldLv, loginrewardItem);
|
}
|
int lv = 0;
|
int type = 10000;
|
if (WorldLvDic.ContainsKey(index))
|
{
|
lv = WorldLvDic[index];
|
}
|
WeekPartyItemClass[] Item = new WeekPartyItemClass[count];
|
foreach (var key in dic.Keys)
|
{
|
if (key > lv && type > key)
|
{
|
type = key;
|
Item = dic[key];
|
}
|
}
|
return Item;
|
}
|
|
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 < Dayinfo.ACount; j++)
|
{
|
var taskList = Dayinfo.TaskList[j];
|
int Index = dit.ActionType.FindIndex(s => s.TemplateID == taskList.TemplateID);
|
if (Index != -1)
|
{
|
dit.ActionType[Index].CurTimes = taskList.CurTimes;
|
dit.ActionType[Index].GotTimes = taskList.GotTimes;
|
}
|
else
|
{
|
ActionTypeClass ActionType = new ActionTypeClass();
|
ActionType.TemplateID = taskList.TemplateID;
|
ActionType.CurTimes = taskList.CurTimes;
|
ActionType.GotTimes = taskList.GotTimes;
|
dit.ActionType.Add(ActionType);
|
}
|
}
|
LoginAwardInfoDic[dayindex] = dit;
|
}
|
else
|
{
|
loginAwardPlayerClass.ActionType = new List<ActionTypeClass>();
|
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;
|
loginAwardPlayerClass.ActionType.Add(ActionType);
|
}
|
LoginAwardInfoDic.Add(dayindex, loginAwardPlayerClass);
|
}
|
}
|
GetDay();
|
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.Count; 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.Count; 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 >= 7)
|
{
|
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;
|
}
|
|
public void GetDay()
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.LoginReward, out operationBase))
|
{
|
int inday = (operationBase as EventDaysTime).GetInDayNow();
|
if (LoginAwardInfoDic.Count <= 0 && inday <= 0)
|
{
|
DayNow = 0;
|
}
|
else if (inday >= 0 && LoginAwardInfoDic.Count > 0 && inday < LoginAwardInfoDic.Count)
|
{
|
DayNow = inday;
|
}
|
else if (LoginAwardInfoDic.Count > 0 && inday >= LoginAwardInfoDic.Count)
|
{
|
DayNow = LoginAwardInfoDic.Count - 1;
|
}
|
}
|
}
|
public bool IsOpenFeatures()
|
{
|
bool Isbool = false;
|
Isbool = (OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.LoginReward)
|
|| OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.LoginReward));
|
return Isbool;
|
}
|
public bool IsJumpOpen()//是否都能执行跳转
|
{
|
bool Isbool = IsOpenFeatures();
|
if (!Isbool)
|
{
|
SysNotifyMgr.Instance.ShowTip("OutofActivityTime");
|
}
|
return Isbool;
|
}
|
}
|
|
|
|