public void OnUserDoSomething(int roleID, RankType rankType, int value) { DBManager dbMgr = DBManager.getInstance(); if (null != dbMgr) { DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(ref roleID); if (null != roleInfo) { double currSecond = Global.GetOffsetSecond(DateTime.Now); roleInfo.RankValue.AddUserRankValue(rankType, value); lock (this.RankDataDictLock) { foreach (KeyValuePair <string, RankData> item in this.RankDataDict) { RankDataKey rankDataKey = RankDataKey.GetKeyFromStr(item.Key); if (null != rankDataKey) { if (rankType == rankDataKey.rankType) { double startTime = Global.GetOffsetSecond(DateTime.Parse(rankDataKey.StartDate)); double endTime = Global.GetOffsetSecond(DateTime.Parse(rankDataKey.EndDate)); if (currSecond >= startTime && currSecond <= endTime) { bool bExist = false; foreach (InputKingPaiHangData rankData in item.Value.RankDataList) { if ((RankType.Charge == rankType && rankData.UserID == roleInfo.UserID) || (RankType.Consume == rankType && rankData.UserID == roleInfo.RoleID.ToString())) { rankData.PaiHangTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); rankData.PaiHangValue += value; bExist = true; break; } } if (!bExist) { int userRankValue = roleInfo.RankValue.GetRankValue(rankDataKey); InputKingPaiHangData phData = new InputKingPaiHangData { UserID = ((RankType.Charge == rankType) ? roleInfo.UserID : roleInfo.RoleID.ToString()), PaiHang = 0, PaiHangTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), PaiHangValue = userRankValue }; item.Value.RankDataList.Add(phData); } this.BuildRank(item.Value); } } } } } } } }
private void BuildRank(RankData rankData) { if (null != rankData) { rankData.RankDataList.Sort(delegate(InputKingPaiHangData x, InputKingPaiHangData y) { int result; if (y.PaiHangValue == x.PaiHangValue) { double xTime = Global.GetOffsetSecond(DateTime.Parse(x.PaiHangTime)); double yTime = Global.GetOffsetSecond(DateTime.Parse(y.PaiHangTime)); result = (int)(xTime - yTime); } else { result = y.PaiHangValue - x.PaiHangValue; } return(result); }); List <InputKingPaiHangData> listPaiHang = new List <InputKingPaiHangData>(); if (null != rankData.minGateValueList) { int preUserPaiHang = 0; for (int i = 0; i < rankData.RankDataList.Count; i++) { InputKingPaiHangData phData = rankData.RankDataList[i]; phData.PaiHang = -1; for (int j = preUserPaiHang; j < rankData.minGateValueList.Count; j++) { if (phData.PaiHangValue >= rankData.minGateValueList[j]) { phData.PaiHang = j + 1; listPaiHang.Add(phData); preUserPaiHang = phData.PaiHang; break; } } if (phData.PaiHang < 0 || phData.PaiHang >= rankData.minGateValueList.Count) { break; } } rankData.RankDataList = listPaiHang; } } }
public override bool CheckCondition(GameClient client, int extTag) { bool result; try { JieriPlatChargeKingEveryDay.ChargeItem ci = null; if (!this.IdVsChargeItemDict.TryGetValue(extTag, out ci)) { result = false; } else { DateTime startTime = DateTime.Parse(this.FromDate); DateTime endTime = DateTime.Parse(this.ToDate); DateTime now = TimeUtil.NowDateTime(); lock (this.Mutex) { if (now < startTime.AddDays((double)ci.Day)) { return(false); } InputKingPaiHangDataEx kfpaihangData = null; if (this._kfRankDict == null || !this._kfRankDict.TryGetValue(ci.Day, out kfpaihangData)) { return(false); } DateTime rankTm; DateTime.TryParse(kfpaihangData.RankTime, out rankTm); if (rankTm < startTime.AddDays((double)ci.Day)) { return(false); } List <InputKingPaiHangData> paihangDataList = null; if (this._realRankDict == null || !this._realRankDict.TryGetValue(ci.Day, out paihangDataList)) { return(false); } InputKingPaiHangData myData = paihangDataList.Find((InputKingPaiHangData x) => 0 == string.Compare(x.UserID, client.strUserID, true)); if (myData == null || myData.PaiHang != ci.Rank) { return(false); } string huoDongKeyStr = Global.GetHuoDongKeyString(this.FromDate, this.ToDate); long hasgettimes = KFCopyRpcClient.getInstance().QueryHuodongAwardUserHist(77, huoDongKeyStr, client.strUserID); if (hasgettimes < 0L) { return(false); } int bitVal = Global.GetBitValue(ci.Day); if ((hasgettimes & (long)bitVal) == (long)bitVal) { return(false); } } result = true; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", this.CfgFile, ex.Message), null, true); result = false; } return(result); }
private static List <PaiHangItemData> GetRankListByActiveLimit(DBManager dbMgr, string fromDate, string toDate, List <int> minGateValueList, int activeId, int maxPaiHang = 3) { List <InputKingPaiHangData> listPaiHangReal = new List <InputKingPaiHangData>(); List <PaiHangItemData> ranklist = new List <PaiHangItemData>(); switch (activeId) { case 34: listPaiHangReal = Global.GetInputKingPaiHangListByHuoDongLimit(dbMgr, fromDate, toDate, null, maxPaiHang); break; case 35: listPaiHangReal = Global.GetUsedMoneyKingPaiHangListByHuoDongLimit(dbMgr, fromDate, toDate, null, maxPaiHang); break; case 36: { string paiHangDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if (!Global.IsInActivityPeriod(fromDate, toDate)) { paiHangDate = toDate; } return(NewZoneActiveMgr.GetActiveKingTypeRanklist(dbMgr, minGateValueList, activeId, paiHangDate, maxPaiHang)); } case 37: { DateTime now = DateTime.Now; DateTime huodongStartTime = new DateTime(2000, 1, 1, 0, 0, 0); DateTime.TryParse(fromDate, out huodongStartTime); DateTime sub1DayDateTime = Global.GetAddDaysDataTime(now, -1, true); string startTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).ToString("yyyy-MM-dd HH:mm:ss"); string endTime = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59).ToString("yyyy-MM-dd HH:mm:ss"); listPaiHangReal = Global.GetInputKingPaiHangListByHuoDongLimit(dbMgr, startTime, endTime, null, maxPaiHang); break; } } int preUserPaiHang = 0; int preValueid = 0; string uid = ""; bool bFirst = true; for (int i = 0; i < listPaiHangReal.Count; i++) { InputKingPaiHangData phData = listPaiHangReal[i]; phData.PaiHang = -1; if (activeId != 35) { Global.GetUserMaxLevelRole(dbMgr, phData.UserID, out phData.MaxLevelRoleName, out phData.MaxLevelRoleZoneID); } else { Global.GetRoleNameAndUserID(dbMgr, Global.SafeConvertToInt32(phData.UserID, 10), out phData.MaxLevelRoleName, out uid); } for (int j = 0; j < minGateValueList.Count; j++) { int values = phData.PaiHangValue; if (activeId == 35) { values = phData.PaiHangValue; } if (values >= minGateValueList[j]) { if (bFirst) { phData.PaiHang = j + 1; } else if (j == preValueid) { phData.PaiHang = preUserPaiHang + 1; } else if (j + 1 > preUserPaiHang) { phData.PaiHang = j + 1; } else { phData.PaiHang = preUserPaiHang + 1; } PaiHangItemData item = new PaiHangItemData(); item.Val1 = values; if (activeId == 35) { item.RoleID = Convert.ToInt32(phData.UserID); } item.RoleName = phData.MaxLevelRoleName; item.Val2 = phData.PaiHang; item.uid = phData.UserID; ranklist.Add(item); preValueid = j; preUserPaiHang = phData.PaiHang; bFirst = false; break; } } if (phData.PaiHang < 0 || phData.PaiHang >= minGateValueList.Count) { break; } } if (activeId == 37) { for (int j = 0; j < ranklist.Count; j++) { int rank = j + minGateValueList.Count - ranklist.Count; ranklist[j].Val1 = ranklist[j].Val1 * minGateValueList[rank] / 100; } } return(ranklist); }
/// <summary> /// 返回新区活动排行数据列表,不包括冲级狂人 /// </summary> /// <param name="dbMgr"></param> /// <param name="fromDate"></param> /// <param name="toDate"></param> /// <param name="minGateValueList"></param> /// <param name="maxPaiHang"></param> /// <returns></returns> private static List <PaiHangItemData> GetRankListByActiveLimit(DBManager dbMgr, string fromDate, string toDate, List <int> minGateValueList, int activeId, int maxPaiHang = 3) { //返回排行信息 List <InputKingPaiHangData> listPaiHangReal = new List <InputKingPaiHangData>(); List <PaiHangItemData> ranklist = new List <PaiHangItemData>(); switch (activeId) { case (int)ActivityTypes.NewZoneUpLevelMadman: break; case (int)ActivityTypes.NewZoneBosskillKing: string paiHangDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //如果今天活动结束,就取活动结束时间作为排行读取时间点 if (!Global.IsInActivityPeriod(fromDate, toDate)) { paiHangDate = toDate; } return(GetActiveKingTypeRanklist(dbMgr, minGateValueList, activeId, paiHangDate, maxPaiHang)); // break; case (int)ActivityTypes.NewZoneConsumeKing: listPaiHangReal = DBQuery.GetUserUsedMoneyPaiHang(dbMgr, fromDate, toDate, maxPaiHang); break; case (int)ActivityTypes.NewZoneFanli: { DateTime now = DateTime.Now; DateTime huodongStartTime = new DateTime(2000, 1, 1, 0, 0, 0); DateTime.TryParse(fromDate, out huodongStartTime); //int roleYuanBaoInPeriod = 0; //if (now.Ticks <= (huodongStartTime.Ticks + (10000L * 1000L * 24L * 60L * 60L))) //{ // return ranklist; //} /// 获取一个增加了-1天时间的DateTime DateTime sub1DayDateTime = Global.GetAddDaysDataTime(now, -1, true); string startTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).ToString("yyyy-MM-dd HH:mm:ss"); string endTime = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59).ToString("yyyy-MM-dd HH:mm:ss"); listPaiHangReal = DBQuery.GetUserInputPaiHang(dbMgr, startTime, endTime, maxPaiHang); } break; case (int)ActivityTypes.NewZoneRechargeKing: listPaiHangReal = DBQuery.GetUserInputPaiHang(dbMgr, fromDate, toDate, maxPaiHang); break; } // List<InputKingPaiHangData> listPaiHang = new List<InputKingPaiHangData>(); //上一个玩家的排行 0 表示上个玩家没有排行 int preUserPaiHang = 0; int preValueid = 0; string uid = ""; bool bFirst = true; //重整排行表 for (int n = 0; n < listPaiHangReal.Count; n++) { InputKingPaiHangData phData = listPaiHangReal[n]; phData.PaiHang = -1; if (activeId != (int)ActivityTypes.NewZoneConsumeKing) { Global.GetUserMaxLevelRole(dbMgr, phData.UserID, out phData.MaxLevelRoleName, out phData.MaxLevelRoleZoneID); } else { Global.GetRoleNameAndUserID(dbMgr, Global.SafeConvertToInt32(phData.UserID), out phData.MaxLevelRoleName, out uid); } //不满足该排行位置需要的最低数值要求,则依次降低排名 for (int i = 0; i < minGateValueList.Count; i++) { int values = Global.TransMoneyToYuanBao(phData.PaiHangValue); if (activeId == (int)ActivityTypes.NewZoneConsumeKing) { values = phData.PaiHangValue; } if (values >= minGateValueList[i]) { if (bFirst) { phData.PaiHang = i + 1; } else { if (i == preValueid) { phData.PaiHang = preUserPaiHang + 1; } else { if (i + 1 > preUserPaiHang) { phData.PaiHang = i + 1; } else { phData.PaiHang = preUserPaiHang + 1; } } } PaiHangItemData item = new PaiHangItemData(); item.Val1 = values; if (activeId == (int)ActivityTypes.NewZoneConsumeKing) { item.RoleID = Convert.ToInt32(phData.UserID); } item.RoleName = phData.MaxLevelRoleName; item.Val2 = phData.PaiHang; item.uid = phData.UserID; ranklist.Add(item); preValueid = i; preUserPaiHang = phData.PaiHang; bFirst = false; break; } } //这个靠前的排行数据没有满足排行值限制的最小要求,则其后的排行数据也满足不了 if (phData.PaiHang < 0 || phData.PaiHang >= minGateValueList.Count) { break; } } //计算充值返利 if (activeId == (int)ActivityTypes.NewZoneFanli) { for (int i = 0; i < ranklist.Count; i++) { int rank = i + minGateValueList.Count - ranklist.Count; ranklist[i].Val1 = ranklist[i].Val1 * minGateValueList[rank] / 100; } } return(ranklist); }