// 是否有任一档次中的任一项可以领取 public bool CanGetAnyAward(GameClient client) { if (client == null || !InAwardTime()) { return(false); } List <_AwardInfo> myDataLst = _GetMyActInfoFromDB(client); if (myDataLst == null) { return(false); } foreach (var info in myDataLst) { // 找到对应的充值档次 _ChargeLvl cl = chargeLvlList.Find(_cl => _cl.Id == info.AwardId); if (cl == null) { return(false); } foreach (var award in cl.AwardList) { // 判断本档次中达成的天数中,是否有任意天数未领取 if (award.LianXuDay <= info.LianXuDay && Global.GetIntSomeBit(info.AwardFlag, award.LianXuDay) == 0) { return(true); } } } return(false); }
// 初始化配置文件信息 public bool Init() { try { GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(CfgFile)); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(CfgFile)); if (null == xml) { return(false); } XElement args = xml.Element("Activities"); if (null != args) { FromDate = Global.GetSafeAttributeStr(args, "FromDate"); ToDate = Global.GetSafeAttributeStr(args, "ToDate"); ActivityType = (int)Global.GetSafeAttributeLong(args, "ActivityType"); AwardStartDate = Global.GetSafeAttributeStr(args, "AwardStartDate"); AwardEndDate = Global.GetSafeAttributeStr(args, "AwardEndDate"); } args = xml.Element("GiftList"); Dictionary <int, _ChargeLvl> awardId2ChargeLvl = new Dictionary <int, _ChargeLvl>(); if (null != args) { IEnumerable <XElement> xmlItems = args.Elements(); foreach (var xmlItem in xmlItems) { if (null == xmlItem) { continue; } int awardId = (int)Global.GetSafeAttributeLong(xmlItem, "Group"); int needCharge = (int)Global.GetSafeAttributeLong(xmlItem, "NeedZuanShi"); _ChargeLvl chargeLvl = null; if (!awardId2ChargeLvl.TryGetValue(awardId, out chargeLvl)) { chargeLvl = new _ChargeLvl(); chargeLvl.Id = awardId; chargeLvl.NeedCharge = needCharge; awardId2ChargeLvl[awardId] = chargeLvl; } _DayAward dayAward = new _DayAward(); dayAward.LianXuDay = (int)Global.GetSafeAttributeLong(xmlItem, "Day"); string goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsOne"); if (string.IsNullOrEmpty(goodsIDs)) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项为空", CfgFile)); } else { string[] fields = goodsIDs.Split('|'); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile)); } else { dayAward.AwardGoods.GoodsDataList.AddRange(HuodongCachingMgr.ParseGoodsDataList(fields, "连续充值活动goods1配置")); } } goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo"); if (string.IsNullOrEmpty(goodsIDs)) { } else { string[] fields = goodsIDs.Split('|'); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile)); } else { //将物品字符串列表解析成物品数据列表 dayAward.AwardGoods.GoodsDataList.AddRange(HuodongCachingMgr.ParseGoodsDataList(fields, "连续充值活动goods2配置")); } } chargeLvl.AwardList.Add(dayAward); } chargeLvlList.AddRange(awardId2ChargeLvl.Values.ToList()); PredealDateTime(); } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", CfgFile, ex.Message)); return(false); } return(true); }
// 领奖 public JieriLianXuChargeErrorCode HandleGetAward(GameClient client, int awardId, int day) { if (!InAwardTime() || client == null) { return(JieriLianXuChargeErrorCode.NotAwardTime); } _ChargeLvl cl = chargeLvlList.Find(_cl => _cl.Id == awardId); if (cl == null) { // 找不到该档次 return(JieriLianXuChargeErrorCode.ConfigError); } _DayAward da = cl.AwardList.Find(_da => _da.LianXuDay == day); if (da == null) { // 找不到该档次的day信息 return(JieriLianXuChargeErrorCode.ConfigError); } List <_AwardInfo> myDataLst = _GetMyActInfoFromDB(client); if (myDataLst == null) { // 找不到我的领奖信息 return(JieriLianXuChargeErrorCode.DBFailed); } var info = myDataLst.Find(_info => _info.AwardId == awardId); if (info == null) { // 找不到该档次的领奖信息 return(JieriLianXuChargeErrorCode.ConfigError); } if (info.LianXuDay < day || Global.GetIntSomeBit(info.AwardFlag, day) == 1) { // 尚未达成或者已经领取 return(JieriLianXuChargeErrorCode.NotMeetAwardCond); } if (da.AwardGoods != null && da.AwardGoods.GoodsDataList != null && da.AwardGoods.GoodsDataList.Count > 0) { // 发放的是礼包,只有1个 int AwardGoodsCnt = da.AwardGoods.GoodsDataList.Count(goods => Global.IsRoleOccupationMatchGoods(client, goods.GoodsID)); if (!Global.CanAddGoodsNum(client, AwardGoodsCnt)) { // 背包不足 return(JieriLianXuChargeErrorCode.NoBagSpace); } } int newAwardFlag = Global.SetIntSomeBit(day, info.AwardFlag, true); if (!_UpdateAwardFlag2DB(client, awardId, newAwardFlag)) { // 更新领奖信息失败啊啊啊啊 return(JieriLianXuChargeErrorCode.DBFailed); } info.AwardFlag = newAwardFlag; GiveAward(client, da.AwardGoods); //_GiveAward2Client(client, da.AwardGoods1); // 检查图标 if (client._IconStateMgr.CheckJieriLianXuCharge(client)) { client._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, client._IconStateMgr.IsAnyJieRiTipActived()); client._IconStateMgr.SendIconStateToClient(client); } return(JieriLianXuChargeErrorCode.Success); }