// 检测是否有未领取的奖励 public bool CanGetAnyAward(GameClient client) { if (client == null) { return(false); } if (!InAwardTime()) { return(false); } RoleGiveRecvInfo info = GetRoleGiveRecvInfo(client.ClientData.RoleID); foreach (var kvp in allAwardDict) { int awardid = kvp.Key; AwardItem item = kvp.Value; if (IsReachConition(info, item.MinAwardCondionValue) && (info.AwardFlag & (1 << awardid)) == 0) { return(true); } } return(false); }
public bool GiveAward(GameClient client, AwardItem item, ESevenDayActType type) { bool result; if (client == null || null == item) { result = false; } else { if (item.GoodsDataList != null) { for (int i = 0; i < item.GoodsDataList.Count; i++) { int nGoodsID = item.GoodsDataList[i].GoodsID; if (Global.IsCanGiveRewardByOccupation(client, nGoodsID)) { Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, item.GoodsDataList[i].GoodsID, item.GoodsDataList[i].GCount, item.GoodsDataList[i].Quality, "", item.GoodsDataList[i].Forge_level, item.GoodsDataList[i].Binding, 0, "", true, 1, this.GetActivityChineseName(type), "1900-01-01 12:00:00", item.GoodsDataList[i].AddPropIndex, item.GoodsDataList[i].BornIndex, item.GoodsDataList[i].Lucky, item.GoodsDataList[i].Strong, item.GoodsDataList[i].ExcellenceInfo, item.GoodsDataList[i].AppendPropLev, item.GoodsDataList[i].ChangeLifeLevForEquip, null, null, 0, true); } } } result = true; } return(result); }
public override bool GiveAward(GameClient client, int _params) { bool result2; if (null == client) { result2 = false; } else { bool result = true; if (null != this.MyAwardItem) { result = base.GiveAward(client, this.MyAwardItem); } if (result) { int occupation = client.ClientData.Occupation; AwardItem myOccAward = this.GetOccAward(occupation); if (null != myOccAward) { result = base.GiveAward(client, myOccAward); } } if (client._IconStateMgr.CheckThemeDaLiBao(client)) { client._IconStateMgr.SendIconStateToClient(client); } result2 = result; } return(result2); }
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); }
public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, int id) { JieriVIPYouHuiActivityConfig configData = null; bool result; if (!this.VIPYouHuiCofigDict.TryGetValue(id, out configData)) { result = false; } else { int nOccu = Global.CalcOriginalOccupationID(client); List <GoodsData> lData = new List <GoodsData>(); foreach (GoodsData item in configData.GoodsDataListOne) { lData.Add(item); } int count = configData.GoodsDataListTwo.Count; for (int i = 0; i < count; i++) { GoodsData data = configData.GoodsDataListTwo[i]; if (Global.IsCanGiveRewardByOccupation(client, data.GoodsID)) { lData.Add(data); } } AwardItem tmpAwardItem = configData.GoodsDataListThr.ToAwardItem(); foreach (GoodsData item in tmpAwardItem.GoodsDataList) { lData.Add(item); } result = Global.CanAddGoodsDataList(client, lData); } return(result); }
public bool CanGetAnyAward(GameClient client) { bool result; if (client == null) { result = false; } else if (!this.InAwardTime()) { result = false; } else { RoleGiveRecvInfo info = this.GetRoleGiveRecvInfo(client.ClientData.RoleID); foreach (KeyValuePair <int, AwardItem> kvp in this.allAwardDict) { int awardid = kvp.Key; AwardItem item = kvp.Value; if (this.IsReachConition(info, item.MinAwardCondionValue) && (info.AwardFlag & 1 << awardid) == 0) { return(true); } } result = false; } return(result); }
public static AwardItem AddAward(string awardType, int awardValue) { AwardItem awardItem = new AwardItem(awardType, awardValue); if (PlayerDataPack.IsMoney(awardType)) { PlayerDataPack.Instance.AddMoney(awardType, awardValue); } //gem if (awardType.Equals("20001")) { GemDataPack.Instance.AddRandomGem(1); } else if (awardType.Equals("20002")) { GemDataPack.Instance.AddRandomGem(2); } else if (awardType.Equals("20003")) { GemDataPack.Instance.AddRandomGem(3); } else if (awardType.Equals("20004")) { GemDataPack.Instance.AddRandomGem(4); } return(awardItem); }
/// <summary> /// 发放时限性物品 /// </summary> /// <param name="client"></param> /// <param name="item"></param> /// <param name="type"></param> /// <returns></returns> public bool GiveEffectiveTimeAward(GameClient client, AwardItem item, ESevenDayActType type) { if (null == client || null == item) { return(false); } if (item.GoodsDataList != null) { for (int i = 0; i < item.GoodsDataList.Count; i++) { int nGoodsID = item.GoodsDataList[i].GoodsID; // 物品id if (Global.IsCanGiveRewardByOccupation(client, nGoodsID)) { //添加限时物品 Global.AddEffectiveTimeGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, item.GoodsDataList[i].GoodsID, item.GoodsDataList[i].GCount, item.GoodsDataList[i].Quality, "", item.GoodsDataList[i].Forge_level, item.GoodsDataList[i].Binding, 0, "", false, 1, GetActivityChineseName((ESevenDayActType)type), item.GoodsDataList[i].Starttime, item.GoodsDataList[i].Endtime, item.GoodsDataList[i].AddPropIndex, item.GoodsDataList[i].BornIndex, item.GoodsDataList[i].Lucky, item.GoodsDataList[i].Strong, item.GoodsDataList[i].ExcellenceInfo, item.GoodsDataList[i].AppendPropLev, item.GoodsDataList[i].ChangeLifeLevForEquip); } } } return(true); }
/// <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 void RetrieveTest_withValidID_AdditionalInfo(string value) { // Arrange AwardItem item = new AwardItem("_xx1", "Award"); item.BaseTableName = value; // Act int count = item.Retrieve(false); // Assert Assert.AreEqual(1, count); Assert.AreEqual("_xx1", item.ID); Assert.AreEqual("_xxx", item.Award.ID); Assert.AreEqual($"{value} Award Category X1", item.Category); Assert.AreEqual($"{value} Award Date X1", item.Date); Assert.AreEqual($"1", item.Winner); Assert.AreEqual($"{value} Award Details X1", item.Details); Assert.AreEqual("_xxx", item.Status.ID); Assert.AreEqual($"{value} Award LastUpdated X1", item.LastUpdated); Assert.AreEqual(3, item.Persons.Count); Assert.AreEqual("_x11", item.Persons[0].ID); Assert.AreEqual("_x12", item.Persons[1].ID); Assert.AreEqual("_x13", item.Persons[2].ID); }
public static AwardItem instance() { if (_instance == null) { _instance = new AwardItem(); } return(_instance); }
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) { AwardItem myAwardItem = new AwardItem(); myAwardItem.GoodsDataList = this.OneDollarChongZhiData.GoodsDataListOne; base.GiveAward(client, myAwardItem); myAwardItem.GoodsDataList = this.OneDollarChongZhiData.GoodsDataListTwo; base.GiveAward(client, myAwardItem); return(true); }
public AwardItem GetOccAward(int _params) { AwardItem myOccAward = null; if (this.OccAwardItemDict.ContainsKey(_params)) { myOccAward = this.OccAwardItemDict[_params]; } return(myOccAward); }
public static AwardItem GenerateItem(Transform layout) { if (layout == null) { return(null); } AwardItem _item = new AwardItem(); _item.m_Cell = UniversalItemCell.GenerateItem(layout); return(_item); }
public void RetrieveAdditionalInformationTest_withInvalidID(string value) { // Arrange AwardItem item = new AwardItem("_aa1", "Award"); item.BaseTableName = value; // Act int count = item.RetrieveAdditionalInformation(); // Assert Assert.AreEqual(0, count); }
public override bool HasEnoughBagSpaceForAwardGoods(GameClient client) { bool result; if (null == client) { result = false; } else { int occupation = client.ClientData.Occupation; AwardItem myOccAward = this.GetOccAward(occupation); result = ((this.MyAwardItem.GoodsDataList.Count <= 0 && (myOccAward == null || myOccAward.GoodsDataList.Count <= 0)) || Global.CanAddGoodsDataList(client, this.MyAwardItem.GoodsDataList)); } return(result); }
private void buildRankingList(List <JieriGiveKingItemData> rankingList) { rankingList.Sort(delegate(JieriGiveKingItemData left, JieriGiveKingItemData right) { int result; if (left.TotalGive > right.TotalGive) { result = -1; } else if (left.TotalGive == right.TotalGive) { result = left.RoleID - right.RoleID; } else { result = 1; } return(result); }); int procListIdx = 0; int i = 1; while (i <= this.RANK_LVL_CNT && procListIdx < rankingList.Count) { AwardItem award = null; if (this.allAwardDict.TryGetValue(i, out award)) { JieriGiveKingItemData kingItem = rankingList[procListIdx]; if (kingItem.TotalGive >= award.MinAwardCondionValue) { kingItem.Rank = i; procListIdx++; } } i++; } this.RoleCountInList = procListIdx; for (i = rankingList.Count - 1; i >= procListIdx; i--) { rankingList[i].Rank = -1; if (i >= this.RANK_LVL_CNT) { rankingList.RemoveAt(i); } } }
private List <AwardItem> AwardItems() { List <AwardItem> awardItems = new List <AwardItem>(); int maxTries = 50; do { AwardItem awardItem = _config.AwardItems.GetRandom(); if (!awardItems.Contains(awardItem)) { awardItems.Add(awardItem); } } while (awardItems.Count < _config.AwardItemsMax && maxTries-- > 0); return(awardItems); }
private void LoadAwardItem() { var _itemMap = m_WorldBossManager.m_DropItemMap; foreach (var data in _itemMap) { if (data.Value == 0) { continue; } AwardItem _item = AwardItem.GenerateItem(m_AwardListLayout); if (_item != null) { _item.SetItemInfo(data.Key, data.Value); } } }
public void RetrieveAdditionalInformationTest_withValidID(string value) { // Arrange AwardItem item = new AwardItem("_xx1", "Award"); item.BaseTableName = value; // Act int count = item.RetrieveAdditionalInformation(); // Assert Assert.AreEqual(3, count); Assert.AreEqual(3, item.Persons.Count); Assert.AreEqual("_x11", item.Persons[0].ID); Assert.AreEqual("_x12", item.Persons[1].ID); Assert.AreEqual("_x13", item.Persons[2].ID); }
public IHttpActionResult CreateAwardForUserProfile(Guid userProfileId, [FromBody] AwardItem award) { try { var newAward = DataRepository.Instance.CreateAwardForUserProfile(userProfileId, award.AwardName, award.EarnedValue); if (newAward == null) { return(NotFound()); } return(Ok(newAward)); } catch { return(InternalServerError()); } }
// 构建排行榜数据,分两步 // 1: 排序 // 2: 根据每个档次的赠送数量限制,进行剔除 private void buildRankingList(List <JieriGiveKingItemData> rankingList) { rankingList.Sort((left, right) => { if (left.TotalGive > right.TotalGive) { return(-1); } else if (left.TotalGive == right.TotalGive) { // 赠送数量一样,按角色id从小到大排序 return(left.RoleID - right.RoleID); } else { return(1); } }); int procListIdx = 0; for (int i = 1; i <= RANK_LVL_CNT && procListIdx < rankingList.Count; ++i) { AwardItem award = null; if (!allAwardDict.TryGetValue(i, out award)) { continue; } JieriGiveKingItemData kingItem = rankingList[procListIdx]; if (kingItem.TotalGive >= award.MinAwardCondionValue) { kingItem.Rank = i; ++procListIdx; } } // 虽然进入了前N名,但是最小赠送次数不满足,剔除数据 for (int i = rankingList.Count - 1; i >= procListIdx; --i) { rankingList[i].Rank = -1; rankingList.RemoveAt(i); } }
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 override bool GiveAward(GameClient client, int _params) { bool result; if (!this.InAwardTime()) { result = false; } else { JieriVIPYouHuiActivityConfig configData = null; if (!this.VIPYouHuiCofigDict.TryGetValue(_params, out configData)) { result = false; } else { if (configData.Price > 0) { if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, configData.Price, "节日活动VIP优惠", true, true, false, DaiBiSySType.None)) { return(false); } } AwardItem myAwardItem = new AwardItem(); myAwardItem.GoodsDataList = configData.GoodsDataListOne; base.GiveAward(client, myAwardItem); myAwardItem.GoodsDataList = configData.GoodsDataListTwo; base.GiveAward(client, myAwardItem); myAwardItem = configData.GoodsDataListThr.ToAwardItem(); base.GiveEffectiveTimeAward(client, myAwardItem); this.UpdateSinglePurchase(client, _params); this.UpdateFullPurchase(client, _params); result = true; } } return(result); }
public void AwardItemTest_withID() { // Arrange AwardItem item = new AwardItem("_xx1", "Award"); // Act // Assert Assert.IsNotNull(item); Assert.IsNotNull(item.Reader); Assert.AreEqual("", item.BaseTableName); Assert.AreEqual("Award", item.TargetTableName); Assert.AreEqual("_xx1", item.ID); Assert.IsNull(item.Award); Assert.IsNull(item.Category); Assert.IsNull(item.Date); Assert.IsNull(item.Winner); Assert.IsNull(item.Details); Assert.IsNull(item.Status); Assert.IsNull(item.LastUpdated); Assert.IsNull(item.Persons); }
public void RetrieveTest_withInvalidID_AdditionalInfo(string value) { // Arrange AwardItem item = new AwardItem("_aa1", "Award"); item.BaseTableName = value; // Act int count = item.Retrieve(false); // Assert Assert.AreEqual(0, count); Assert.AreEqual("_aa1", item.ID); Assert.IsNull(item.Award); Assert.IsNull(item.Category); Assert.IsNull(item.Date); Assert.IsNull(item.Winner); Assert.IsNull(item.Details); Assert.IsNull(item.Status); Assert.IsNull(item.LastUpdated); Assert.AreEqual(0, item.Persons.Count); }
public void RetrieveBasicInformationTest_withValidID_BasicInfoOnly(string value) { // Arrange AwardItem item = new AwardItem("_xx1", "Award"); item.BaseTableName = value; // Act int count = item.RetrieveBasicInformation(true); // Assert Assert.AreEqual(1, count); Assert.AreEqual("_xx1", item.ID); Assert.AreEqual("_xxx", item.Award.ID); Assert.AreEqual($"{value} Award Category X1", item.Category); Assert.AreEqual($"{value} Award Date X1", item.Date); Assert.AreEqual($"1", item.Winner); Assert.AreEqual($"{value} Award Details X1", item.Details); Assert.AreEqual("_xxx", item.Status.ID); Assert.AreEqual($"{value} Award LastUpdated X1", item.LastUpdated); Assert.IsNull(item.Persons); }
private static List<AwardItem> CalculateAwards(ZkDataContext db) { var monthStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); var validAwards = db.SpringBattles.Where( x => (x.StartTime >= monthStart) && (x.HasBots == false) && (x.ResourceByMapResourceID.MapSupportLevel >= MapSupportLevel.Supported) && (x.ResourceByMapResourceID.MapIsSpecial == false)) .SelectMany(x => x.AccountBattleAwards) .GroupBy(x => x.AwardKey); var awardItems = new List<AwardItem>(); foreach (var awardsByType in validAwards) { var awardType = awardsByType.Key; var awardCounts = awardsByType.GroupBy(x => x.Account).Select(x => new { Account = x.Key, Count = x.Count() }).OrderByDescending(x => x.Count); var topCountM = awardCounts.First().Count; var topCollectorsM = new List<Account>(); foreach (var award in awardCounts) if (award.Count == topCountM) topCollectorsM.Add(award.Account); else break; var topScore = 0; string titleName = null; topScore = 0; var fullTitleM = ""; var topActID = 0; var topBattleID = 0; foreach (var award in awardsByType) { if (titleName == null) titleName = award.AwardDescription.Split(',').First(); int score; if (int.TryParse(Regex.Replace(award.AwardDescription, @"\D", string.Empty), out score)) if (score > topScore) { topActID = award.AccountID; topBattleID = award.SpringBattleID; topScore = score; fullTitleM = string.Join(" ", award.AwardDescription.Split(',').Skip(1)); } } var awardItem = new AwardItem { AwardType = awardType, AwardTitle = titleName, TopScoreHolderM = db.Accounts.SingleOrDefault(x => x.AccountID == topActID), TopScoreDescM = fullTitleM, TopScoreBattlePlayerM = db.SpringBattlePlayers.Include(x => x.SpringBattle) .Include(x => x.SpringBattle.ResourceByMapResourceID) .SingleOrDefault(x => (x.AccountID == topActID) && (x.SpringBattleID == topBattleID)), TopCollectorsM = topCollectorsM, TopCollectorCountM = topCountM }; awardItems.Add(awardItem); } return awardItems; }
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)); }
/// <summary> /// Returns information for ladder, awards hall of fame page /// </summary> /// <returns></returns> private LadderModel GetLadder() { var db = new ZkDataContext(); db.Database.CommandTimeout = 600; var monthStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); var validAwards = db.SpringBattles.Where(x => x.StartTime >= monthStart && !x.ResourceByMapResourceID.InternalName.Contains("SpeedMetal")) .SelectMany(x => x.AccountBattleAwards) .GroupBy(x => x.AwardKey); var awardItems = new List<AwardItem>(); foreach (var awardsByType in validAwards) { var awardType = awardsByType.Key; var awardCounts = awardsByType.GroupBy(x => x.Account).Select(x => new { Account = x.Key, Count = x.Count() }).OrderByDescending(x => x.Count); var topCountM = awardCounts.First().Count; var topCollectorsM = new List<Account>(); foreach (var award in awardCounts) { if (award.Count == topCountM) topCollectorsM.Add(award.Account); else break; } var topScore = 0; string titleName = null; topScore = 0; var fullTitleM = ""; var topActID = 0; var topBattleID = 0; foreach (var award in awardsByType) { if (titleName == null) titleName = award.AwardDescription.Split(',').First(); int score; if (int.TryParse(Regex.Replace(award.AwardDescription, @"\D", string.Empty), out score)) { if (score > topScore) { topActID = award.AccountID; topBattleID = award.SpringBattleID; topScore = score; fullTitleM = string.Join(" ", award.AwardDescription.Split(',').Skip(1)); } } } var awardItem = new AwardItem { AwardType = awardType, AwardTitle = titleName, TopScoreHolderM = db.Accounts.SingleOrDefault(x => x.AccountID == topActID), TopScoreDescM = fullTitleM, TopScoreBattlePlayerM = db.SpringBattlePlayers.SingleOrDefault(x => x.AccountID == topActID && x.SpringBattleID == topBattleID), TopCollectorsM = topCollectorsM, TopCollectorCountM = topCountM }; awardItems.Add(awardItem); } var ladderTimeout = DateTime.UtcNow.AddDays(-GlobalConst.LadderActivityDays); var top50Accounts = db.Accounts.Where(x => x.SpringBattlePlayers.Any(y => y.SpringBattle.StartTime > ladderTimeout)) .Include(x => x.Clan) .Include(x => x.Faction) .OrderByDescending(x => x.Effective1v1Elo) .WithTranslations() .Take(50) .ToList(); var top50Teams = db.Accounts.Where(x => x.SpringBattlePlayers.Any(y => y.SpringBattle.StartTime > ladderTimeout)) .Include(x => x.Clan) .Include(x => x.Faction) .OrderByDescending(x => x.EffectiveElo) .WithTranslations() .Take(50) .ToList(); return new LadderModel { AwardItems = awardItems, Top50Accounts = top50Accounts, Top50Teams = top50Teams }; }