public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, int _params) { JieriPlatChargeKingEveryDay.ChargeItem ci = null; bool result; if (!this.IdVsChargeItemDict.TryGetValue(_params, out ci)) { result = false; } else { AwardItem allItem = ci.allAwardGoodsOne; AwardItem occItem = ci.occAwardGoodsTwo; AwardEffectTimeItem timeItem = ci.timeAwardGoodsThr; int awardCnt = 0; if (allItem != null && allItem.GoodsDataList != null) { awardCnt += allItem.GoodsDataList.Count; } if (occItem != null && occItem.GoodsDataList != null) { awardCnt += occItem.GoodsDataList.Count((GoodsData goods) => Global.IsRoleOccupationMatchGoods(client, goods.GoodsID)); } if (timeItem != null) { awardCnt += timeItem.GoodsCnt(); } result = Global.CanAddGoodsNum(client, awardCnt); } return(result); }
/// <summary> /// 背包中是否有足够的位置 /// </summary> /// <returns></returns> public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, Int32 id) { AwardItem allItem = null, occItem = null; AwardEffectTimeItem timeItem = null; allAwardDict.TryGetValue(id, out allItem); occAwardDict.TryGetValue(id, out allItem); timeAwardDict.TryGetValue(id, out timeItem); int awardCnt = 0; if (allItem != null && allItem.GoodsDataList != null) { awardCnt += allItem.GoodsDataList.Count; } if (occItem != null && occItem.GoodsDataList != null) { awardCnt += occItem.GoodsDataList.Count(((goods) => { return(Global.IsRoleOccupationMatchGoods(client, goods.GoodsID)); })); } if (timeItem != null) { awardCnt += timeItem.GoodsCnt(); } return(Global.CanAddGoodsNum(client, awardCnt)); }
public string ProcRoleGetAward(GameClient client, int awardid) { JieriGiveErrorCode ec = JieriGiveErrorCode.Success; if (!this.InAwardTime()) { ec = JieriGiveErrorCode.NotAwardTime; } else if (!this.HasEnoughBagSpaceForAwardGoods(client, awardid)) { ec = JieriGiveErrorCode.NoBagSpace; } else { AwardItem allItem = null; AwardItem occItem = null; AwardEffectTimeItem timeItem = null; if (!this.allAwardDict.TryGetValue(awardid, out allItem) || !this.occAwardDict.TryGetValue(awardid, out occItem) || !this.timeAwardDict.TryGetValue(awardid, out timeItem)) { ec = JieriGiveErrorCode.ConfigError; } else { lock (this._allMemberMutex) { JieriGiveKingItemData myData = this.GetClientGiveKingInfo(client); if (myData == null || myData.TotalGive < allItem.MinAwardCondionValue || myData.GetAwardTimes > 0 || myData.Rank != awardid) { ec = JieriGiveErrorCode.NotMeetAwardCond; goto IL_1CB; } string dbReq = string.Format("{0}:{1}:{2}", client.ClientData.RoleID, this.FromDate.Replace(':', '$'), this.ToDate.Replace(':', '$')); string[] dbRsp = Global.ExecuteDBCmd(13205, dbReq, client.ServerId); if (dbRsp == null || dbRsp.Length != 1 || Convert.ToInt32(dbRsp[0]) <= 0) { ec = JieriGiveErrorCode.DBFailed; goto IL_1CB; } myData.GetAwardTimes = 1; } if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { LogManager.WriteLog(LogTypes.Error, string.Format("发送节日赠送王奖励的时候,发送失败,但是设置领奖成功,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid), null, true); } ec = JieriGiveErrorCode.Success; } } IL_1CB: if (ec == JieriGiveErrorCode.Success) { if (client._IconStateMgr.CheckJieriGiveKing(client)) { client._IconStateMgr.AddFlushIconState(14000, client._IconStateMgr.IsAnyJieRiTipActived()); client._IconStateMgr.SendIconStateToClient(client); } } return(string.Format("{0}:{1}", (int)ec, awardid)); }
public override bool GiveAward(GameClient client, int _params) { DateTime startTime = DateTime.Parse(this.FromDate); DateTime endTime = DateTime.Parse(this.ToDate); JieriPlatChargeKingEveryDay.ChargeItem ci = null; bool result; if (!this.IdVsChargeItemDict.TryGetValue(_params, out ci)) { result = false; } else { string huoDongKeyStr = Global.GetHuoDongKeyString(this.FromDate, this.ToDate); int ret = KFCopyRpcClient.getInstance().UpdateHuodongAwardUserHist(77, huoDongKeyStr, client.strUserID, ci.Day); if (ret < 0) { result = false; } else { AwardItem allItem = ci.allAwardGoodsOne; AwardItem occItem = ci.occAwardGoodsTwo; AwardEffectTimeItem timeItem = ci.timeAwardGoodsThr; if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { string errLogMsg = string.Format("发送节日每日平台充值王奖励的时候,发送失败,但是已经设置为领取成功, roleid={0}, rolename={1}, id={3}", client.ClientData.RoleID, client.ClientData.RoleName, _params); LogManager.WriteLog(LogTypes.Error, errLogMsg, null, true); result = false; } else { if (client._IconStateMgr.CheckJieRiPCKingEveryDay(client)) { client._IconStateMgr.SendIconStateToClient(client); } result = true; } } } return(result); }
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"); if (null != args) { IEnumerable <XElement> xmlItems = args.Elements(); foreach (var xmlItem in xmlItems) { if (null != xmlItem) { AwardItem myAwardItem = new AwardItem(); AwardItem myAwardItem2 = new AwardItem(); AwardEffectTimeItem timeAwardItem = new AwardEffectTimeItem(); myAwardItem.MinAwardCondionValue = Global.GMax(0, (int)Global.GetSafeAttributeLong(xmlItem, "MinYuanBao")); myAwardItem.AwardYuanBao = 0; 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 { myAwardItem.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置"); } } goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo"); if (string.IsNullOrEmpty(goodsIDs)) { //LogManager.WriteLog(LogTypes.Warning, string.Format("读取大型节日消费王活动配置文件中的物品配置项1失败")); } else { string[] fields = goodsIDs.Split('|'); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile)); } else { //将物品字符串列表解析成物品数据列表 myAwardItem2.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置"); } } string timeGoods = Global.GetSafeAttributeStr(xmlItem, "GoodsThr"); string timeList = Global.GetSafeAttributeStr(xmlItem, "EffectiveTime"); timeAwardItem.Init(timeGoods, timeList, "大型节日赠送王时效性物品活动配置"); string rankings = Global.GetSafeAttributeStr(xmlItem, "Ranking"); string[] paiHangs = rankings.Split('-'); if (paiHangs.Length <= 0) { continue; } int min = Global.SafeConvertToInt32(paiHangs[0]); int max = Global.SafeConvertToInt32(paiHangs[paiHangs.Length - 1]); //设置排行奖励 for (int paiHang = min; paiHang <= max; paiHang++) { allAwardDict.Add(paiHang, myAwardItem); occAwardDict.Add(paiHang, myAwardItem2); timeAwardDict.Add(paiHang, timeAwardItem); } } } } PredealDateTime(); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", CfgFile, ex.Message)); return(false); } return(true); }
// 客户端请求领取奖励 return `ec:awardid` public string ProcRoleGetAward(GameClient client, int awardid) { JieriGiveErrorCode ec = JieriGiveErrorCode.Success; do { if (!InAwardTime()) { ec = JieriGiveErrorCode.NotAwardTime; break; } if (!HasEnoughBagSpaceForAwardGoods(client, awardid)) { ec = JieriGiveErrorCode.NoBagSpace; break; } AwardItem allItem = null, occItem = null; AwardEffectTimeItem timeItem = null; if (!allAwardDict.TryGetValue(awardid, out allItem) || !occAwardDict.TryGetValue(awardid, out occItem) || !timeAwardDict.TryGetValue(awardid, out timeItem)) { ec = JieriGiveErrorCode.ConfigError; break; } lock (_allMemberMutex) { JieriGiveKingItemData myData = GetClientGiveKingInfo(client); if (myData == null || myData.TotalGive < allItem.MinAwardCondionValue || myData.GetAwardTimes > 0 || myData.Rank != awardid) { ec = JieriGiveErrorCode.NotMeetAwardCond; break; } string dbReq = string.Format("{0}:{1}:{2}", client.ClientData.RoleID, FromDate.Replace(':', '$'), ToDate.Replace(':', '$')); string[] dbRsp = Global.ExecuteDBCmd((int)TCPGameServerCmds.CMD_DB_GET_JIERI_GIVE_KING_AWARD, dbReq, client.ServerId); if (dbRsp == null || dbRsp.Length != 1 || Convert.ToInt32(dbRsp[0]) <= 0) { ec = JieriGiveErrorCode.DBFailed; break; } myData.GetAwardTimes = 1; } if (!GiveAward(client, allItem) || !GiveAward(client, occItem) || !GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { LogManager.WriteLog(LogTypes.Error, string.Format("发送节日赠送王奖励的时候,发送失败,但是设置领奖成功,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid)); } ec = JieriGiveErrorCode.Success; } while (false); if (ec == JieriGiveErrorCode.Success) { if (client._IconStateMgr.CheckJieriGiveKing(client)) { client._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, client._IconStateMgr.IsAnyJieRiTipActived()); client._IconStateMgr.SendIconStateToClient(client); } } return(string.Format("{0}:{1}", (int)ec, awardid)); }
public bool Init() { try { GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(this.CfgFile)); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(this.CfgFile)); if (null == xml) { return(false); } XElement args = xml.Element("Activities"); if (null != args) { this.FromDate = Global.GetSafeAttributeStr(args, "FromDate"); this.ToDate = Global.GetSafeAttributeStr(args, "ToDate"); this.ActivityType = (int)Global.GetSafeAttributeLong(args, "ActivityType"); this.AwardStartDate = Global.GetSafeAttributeStr(args, "AwardStartDate"); this.AwardEndDate = Global.GetSafeAttributeStr(args, "AwardEndDate"); } args = xml.Element("GiftList"); if (null != args) { IEnumerable <XElement> xmlItems = args.Elements(); foreach (XElement xmlItem in xmlItems) { if (null != xmlItem) { JieriPlatChargeKingEveryDay.ChargeItem ci = new JieriPlatChargeKingEveryDay.ChargeItem(); ci.Id = (int)Global.GetSafeAttributeLong(xmlItem, "ID"); ci.Rank = (int)Global.GetSafeAttributeLong(xmlItem, "Ranking"); ci.Day = (int)Global.GetSafeAttributeLong(xmlItem, "Day"); ci.NeedChargeYB = (int)Global.GetSafeAttributeLong(xmlItem, "MinYuanBao"); AwardItem myAwardItem = new AwardItem(); AwardItem myAwardItem2 = new AwardItem(); AwardEffectTimeItem timeAwardItem = new AwardEffectTimeItem(); string goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsOne"); if (string.IsNullOrEmpty(goodsIDs)) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", this.CfgFile), null, true); } else { string[] fields = goodsIDs.Split(new char[] { '|' }); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", this.CfgFile), null, true); } else { myAwardItem.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日活动每日平台充值王配置"); } } goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo"); if (!string.IsNullOrEmpty(goodsIDs)) { string[] fields = goodsIDs.Split(new char[] { '|' }); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", this.CfgFile), null, true); } else { myAwardItem2.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日活动每日平台充值王配置2"); } } string timeGoods = Global.GetSafeAttributeStr(xmlItem, "GoodsThr"); string timeList = Global.GetSafeAttributeStr(xmlItem, "EffectiveTime"); timeAwardItem.Init(timeGoods, timeList, "大型节日每日平台充值王时效性物品活动配置"); ci.allAwardGoodsOne = myAwardItem; ci.occAwardGoodsTwo = myAwardItem2; ci.timeAwardGoodsThr = timeAwardItem; this.IdVsChargeItemDict[ci.Id] = ci; List <JieriPlatChargeKingEveryDay.ChargeItem> chargeItemList; if (!this.DayVsChargeItemListDict.TryGetValue(ci.Day, out chargeItemList)) { chargeItemList = new List <JieriPlatChargeKingEveryDay.ChargeItem>(); chargeItemList.Add(ci); this.DayVsChargeItemListDict[ci.Day] = chargeItemList; } else { chargeItemList.Add(ci); } chargeItemList.Sort(delegate(JieriPlatChargeKingEveryDay.ChargeItem left, JieriPlatChargeKingEveryDay.ChargeItem right) { int result; if (left.Rank < right.Rank) { result = -1; } else if (left.Rank > right.Rank) { result = 1; } else { result = 0; } return(result); }); } } } base.PredealDateTime(); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", this.CfgFile, ex.Message), null, true); return(false); } return(true); }
public bool Init() { try { this.allAwardDict.Clear(); this.occAwardDict.Clear(); this.timeAwardDict.Clear(); GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath("Config/JieRiGifts/JieRiHongBaoBang.xml")); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath("Config/JieRiGifts/JieRiHongBaoBang.xml")); if (null == xml) { return(false); } XElement args = xml.Element("Activities"); if (null != args) { this.FromDate = Global.GetSafeAttributeStr(args, "FromDate"); this.ToDate = Global.GetSafeAttributeStr(args, "ToDate"); this.ActivityType = (int)Global.GetSafeAttributeLong(args, "ActivityType"); this.AwardStartDate = Global.GetSafeAttributeStr(args, "AwardStartDate"); this.AwardEndDate = Global.GetSafeAttributeStr(args, "AwardEndDate"); } args = xml.Element("GiftList"); if (null != args) { IEnumerable <XElement> xmlItems = args.Elements(); foreach (XElement xmlItem in xmlItems) { if (null != xmlItem) { AwardItem myAwardItem = new AwardItem(); AwardItem myAwardItem2 = new AwardItem(); AwardEffectTimeItem timeAwardItem = new AwardEffectTimeItem(); myAwardItem.MinAwardCondionValue = Global.GMax(0, (int)Global.GetSafeAttributeLong(xmlItem, "Threshold")); myAwardItem.AwardYuanBao = 0; string goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsOne"); if (string.IsNullOrEmpty(goodsIDs)) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", "Config/JieRiGifts/JieRiHongBaoBang.xml"), null, true); } else { string[] fields = goodsIDs.Split(new char[] { '|' }); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", "Config/JieRiGifts/JieRiHongBaoBang.xml"), null, true); } else { myAwardItem.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置"); } } goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo"); if (!string.IsNullOrEmpty(goodsIDs)) { string[] fields = goodsIDs.Split(new char[] { '|' }); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", "Config/JieRiGifts/JieRiHongBaoBang.xml"), null, true); } else { myAwardItem2.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置"); } } string timeGoods = Global.GetSafeAttributeStr(xmlItem, "GoodsThr"); string timeList = Global.GetSafeAttributeStr(xmlItem, "EffectiveTime"); timeAwardItem.Init(timeGoods, timeList, "大型节日赠送王时效性物品活动配置"); string rankings = Global.GetSafeAttributeStr(xmlItem, "Ranking"); string[] paiHangs = rankings.Split(new char[] { '-' }); if (paiHangs.Length > 0) { int min = Global.SafeConvertToInt32(paiHangs[0]); int max = Global.SafeConvertToInt32(paiHangs[paiHangs.Length - 1]); for (int paiHang = min; paiHang <= max; paiHang++) { this.allAwardDict.Add(paiHang, myAwardItem); this.occAwardDict.Add(paiHang, myAwardItem2); this.timeAwardDict.Add(paiHang, timeAwardItem); } } } } } base.PredealDateTime(); this.ActivityKeyStr = string.Format("{0}_{1}", this.FromDate.Replace(':', '$'), this.ToDate.Replace(':', '$')); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", "Config/JieRiGifts/JieRiHongBaoBang.xml", ex.Message), null, true); return(false); } return(true); }
public new void GetAward(GameClient client, int awardid) { int result = 0; if (!this.InAwardTime()) { result = -2001; } else if (!this.HasEnoughBagSpaceForAwardGoods(client, awardid)) { result = -100; } else { AwardItem allItem = null; AwardItem occItem = null; AwardEffectTimeItem timeItem = null; if (!this.allAwardDict.TryGetValue(awardid, out allItem) || !this.occAwardDict.TryGetValue(awardid, out occItem) || !this.timeAwardDict.TryGetValue(awardid, out timeItem)) { result = -3; } else { lock (this.Mutex) { JieriHongBaoKingItemData item; if (!this.recvDict.TryGetValue(client.ClientData.RoleID, out item)) { result = -20; goto IL_21F; } if (item.GetAwardTimes > 0) { result = -200; goto IL_21F; } JieriHongBaoKingItemData myData = this.GetRoleRecvKingInfo(client, 0, 0, client.ServerId); if (myData == null || myData.TotalRecv < allItem.MinAwardCondionValue || myData.GetAwardTimes > 0 || myData.Rank != awardid) { result = -20; goto IL_21F; } List <string> dbReq = new List <string> { this.ActivityKeyStr, client.ClientData.RoleID.ToString(), "1" }; int ret = Global.sendToDB <int, List <string> >(1428, dbReq, client.ServerId); if (ret < 0) { result = -15; goto IL_21F; } myData.GetAwardTimes = 1; } if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { LogManager.WriteLog(LogTypes.Error, string.Format("发送节日红包榜奖励的时候,发送失败,但是已经设置为领取成功, roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid), null, true); } client._IconStateMgr.CheckJieRiHongBaoBang(client); } } IL_21F: client.sendCmd <int>(1428, result, false); }
// 返回 ec:totalgive:totalrecv:awardflag public string ProcRoleGetAward(GameClient client, int awardid) { JieriGiveErrorCode ec = JieriGiveErrorCode.Success; do { if (!InAwardTime()) { ec = JieriGiveErrorCode.NotAwardTime; break; } if (!HasEnoughBagSpaceForAwardGoods(client, awardid)) { ec = JieriGiveErrorCode.NoBagSpace; break; } AwardItem allItem = null, occItem = null; AwardEffectTimeItem timeItem = null; if (!allAwardDict.TryGetValue(awardid, out allItem) || !occAwardDict.TryGetValue(awardid, out occItem) || !timeAwardDict.TryGetValue(awardid, out timeItem)) { ec = JieriGiveErrorCode.ConfigError; break; } RoleGiveRecvInfo info = GetRoleGiveRecvInfo(client.ClientData.RoleID); // 注意,这里可以不用所info,因为TotalGive和AwardFlag只能由玩家自己操作 if (!IsReachConition(info, allItem.MinAwardCondionValue) || (info.AwardFlag & (1 << awardid)) != 0) { ec = JieriGiveErrorCode.NotMeetAwardCond; break; } int newAwardFlag = info.AwardFlag | (1 << awardid); // 天数信息直接取info中保存的,防止查询的和领取时恰好跨天 string dbReq = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", client.ClientData.RoleID, info.TodayStart.Replace(':', '$'), info.TodayEnd.Replace(':', '$'), ActivityType, info.TodayIdxInActPeriod, newAwardFlag); string[] dbRsp = Global.ExecuteDBCmd((int)TCPGameServerCmds.CMD_DB_SPR_GET_JIERI_GIVE_AWARD, dbReq, client.ServerId); if (dbRsp == null || dbRsp.Length < 1 || Convert.ToInt32(dbRsp[0]) <= 0) { ec = JieriGiveErrorCode.DBFailed; break; } info.AwardFlag = newAwardFlag; if (!GiveAward(client, allItem) || !GiveAward(client, occItem) || !GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { LogManager.WriteLog(LogTypes.Error, string.Format("节日赠送活动奖品发送失败,但是已经设置为已发放,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid)); } ec = JieriGiveErrorCode.Success; } while (false); // 检查更新图标 if (ec == JieriGiveErrorCode.Success) { FlushIcon(client); } return(string.Format("{0}:{1}", (int)ec, awardid)); }
// 初始化活动,读取配置文件 public bool Init() { string CfgFile = GetConfigFile(); 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"); if (null != args) { IEnumerable <XElement> xmlItems = args.Elements(); foreach (var xmlItem in xmlItems) { if (null != xmlItem) { AwardItem myAwardItem = new AwardItem(); AwardItem myAwardItem2 = new AwardItem(); AwardEffectTimeItem timeAwardItem = new AwardEffectTimeItem(); myAwardItem.MinAwardCondionValue = Global.GMax(0, (int)Global.GetSafeAttributeLong(xmlItem, "Num")); myAwardItem.MinAwardCondionValue2 = Global.GMax(0, (int)Global.GetSafeAttributeLong(xmlItem, "Goods")); myAwardItem.AwardYuanBao = 0; string goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsOne"); if (string.IsNullOrEmpty(goodsIDs)) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项1失败", CfgFile)); } else { string[] fields = goodsIDs.Split('|'); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}活动配置文件中的物品配置项失败", CfgFile)); } else { myAwardItem.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, CfgFile); } } goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo"); if (string.IsNullOrEmpty(goodsIDs)) { //LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项2失败", CfgFile)); } else { string[] fields = goodsIDs.Split('|'); if (fields.Length <= 0) { LogManager.WriteLog(LogTypes.Warning, CfgFile); } else { myAwardItem2.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, CfgFile); } } string timeGoods = Global.GetSafeAttributeStr(xmlItem, "GoodsThr"); string timeList = Global.GetSafeAttributeStr(xmlItem, "EffectiveTime"); timeAwardItem.Init(timeGoods, timeList, CfgFile + " 时效性物品"); string strID = Global.GetSafeAttributeStr(xmlItem, "ID"); int id = Convert.ToInt32(strID); allAwardDict.Add(id, myAwardItem); occAwardDict.Add(id, myAwardItem2); timeAwardDict.Add(id, timeAwardItem); } } } PredealDateTime(); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", CfgFile, ex.Message)); return(false); } return(true); }
public string ProcRoleGetAward(GameClient client, int awardid) { JieriGiveErrorCode ec; if (!this.InAwardTime()) { ec = JieriGiveErrorCode.NotAwardTime; } else if (!this.HasEnoughBagSpaceForAwardGoods(client, awardid)) { ec = JieriGiveErrorCode.NoBagSpace; } else { AwardItem allItem = null; AwardItem occItem = null; AwardEffectTimeItem timeItem = null; if (!this.allAwardDict.TryGetValue(awardid, out allItem) || !this.occAwardDict.TryGetValue(awardid, out occItem) || !this.timeAwardDict.TryGetValue(awardid, out timeItem)) { ec = JieriGiveErrorCode.ConfigError; } else { RoleGiveRecvInfo info = this.GetRoleGiveRecvInfo(client.ClientData.RoleID); if (!this.IsReachConition(info, allItem.MinAwardCondionValue) || (info.AwardFlag & 1 << awardid) != 0) { ec = JieriGiveErrorCode.NotMeetAwardCond; } else { int newAwardFlag = info.AwardFlag | 1 << awardid; string dbReq = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", new object[] { client.ClientData.RoleID, info.TodayStart.Replace(':', '$'), info.TodayEnd.Replace(':', '$'), this.ActivityType, info.TodayIdxInActPeriod, newAwardFlag }); string[] dbRsp = Global.ExecuteDBCmd(13201, dbReq, client.ServerId); if (dbRsp == null || dbRsp.Length < 1 || Convert.ToInt32(dbRsp[0]) <= 0) { ec = JieriGiveErrorCode.DBFailed; } else { info.AwardFlag = newAwardFlag; if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem())) { LogManager.WriteLog(LogTypes.Error, string.Format("节日赠送活动奖品发送失败,但是已经设置为已发放,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid), null, true); } ec = JieriGiveErrorCode.Success; } } } } if (ec == JieriGiveErrorCode.Success) { this.FlushIcon(client); } return(string.Format("{0}:{1}", (int)ec, awardid)); }