/// <summary> /// 新区充值返利领取 /// </summary> /// <param name="dbMgr"></param> /// <param name="pool"></param> /// <param name="nID"></param> /// <param name="data"></param> /// <param name="count"></param> /// <param name="tcpOutPacket"></param> /// <returns></returns> private static TCPProcessCmdResults GetNewFanliAward(DBManager dbMgr, TCPOutPacketPool pool, int nID, int roleID, int activeid, string fromDate, string todate, List <int> minGateValueList, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; string strcmd = ""; try { DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(roleID); if (null == roleInfo) { strcmd = string.Format("{0}:{1}:{2}", -1001, roleID, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } int roleYuanBaoInPeriod = NewZoneActiveMgr.ComputTotalFanliValue(dbMgr, roleInfo, activeid, fromDate, todate, minGateValueList); DBUserInfo userInfo = dbMgr.GetDBUserInfo(roleInfo.UserID); //避免同一用户账号同时多次操作 lock (userInfo) { if (roleYuanBaoInPeriod > 0) { //活动时间取前一天的 DateTime sub1DayDateTime = Global.GetAddDaysDataTime(DateTime.Now, -1, true); DateTime startTime = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 0, 0, 0); DateTime endTime = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 23, 59, 59); string huoDongKeyStr = Global.GetHuoDongKeyString(startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss")); //更新已领取状态 int ret = DBWriter.AddHongDongAwardRecordForUser(dbMgr, roleInfo.UserID, (int)(ActivityTypes.NewZoneFanli), huoDongKeyStr, 1, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); if (ret < 0) { strcmd = string.Format("{0}:{1}:{2}", -1008, roleID, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } } } strcmd = string.Format("{0}:{1}:{2}", 1, roleYuanBaoInPeriod, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); }
public static TCPProcessCmdResults ProcessQueryActiveInfo(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; try { cmdData = new UTF8Encoding().GetString(data, 0, count); } catch (Exception) { LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } try { string[] fields = cmdData.Split(new char[] { ':' }); if (fields.Length != 5) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); string fromDate = fields[1].Replace('$', ':'); string toDate = fields[2].Replace('$', ':'); int activeid = Global.SafeConvertToInt32(fields[4], 10); string[] minYuanBaoArr = fields[3].Split(new char[] { '_' }); DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(ref roleID); if (null == roleInfo) { LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } List <int> minGateValueList = new List <int>(); foreach (string item in minYuanBaoArr) { minGateValueList.Add(Global.SafeConvertToInt32(item, 10)); } List <PaiHangItemData> listPaiHang = NewZoneActiveMgr.GetRankListByActiveLimit(dbMgr, fromDate, toDate, minGateValueList, activeid, minGateValueList.Count); int inputMoneyInPeriod = 0; string huoDongKeyStr = Global.GetHuoDongKeyString(fromDate, toDate); int hasgettimes = 0; string lastgettime = ""; switch (activeid) { case 34: DBQuery.GetAwardHistoryForUser(dbMgr, roleInfo.UserID, 34, huoDongKeyStr, out hasgettimes, out lastgettime); if (hasgettimes > 0) { hasgettimes = 1; } break; case 35: DBQuery.GetAwardHistoryForUser(dbMgr, roleInfo.UserID, 35, huoDongKeyStr, out hasgettimes, out lastgettime); if (hasgettimes > 0) { hasgettimes = 1; } break; case 36: DBQuery.GetAwardHistoryForRole(dbMgr, roleID, roleInfo.ZoneID, activeid, huoDongKeyStr, out hasgettimes, out lastgettime); if (hasgettimes > 0) { hasgettimes = 1; } break; case 37: inputMoneyInPeriod = NewZoneActiveMgr.ComputTotalFanliValue(dbMgr, roleInfo, activeid, fromDate, toDate, minGateValueList); if (inputMoneyInPeriod == 0) { hasgettimes = 1; } break; } NewZoneActiveData consumedata = new NewZoneActiveData { YuanBao = inputMoneyInPeriod, ActiveId = activeid, Ranklist = listPaiHang, GetState = hasgettimes }; tcpOutPacket = DataHelper.ObjectToTCPOutPacket <NewZoneActiveData>(consumedata, pool, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false, false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); }
/// <summary> /// 新服活动查询,除了冲级狂人 /// </summary> /// <param name="dbMgr"></param> /// <param name="pool"></param> /// <param name="nID"></param> /// <param name="data"></param> /// <param name="count"></param> /// <param name="tcpOutPacket"></param> /// <returns></returns> public static TCPProcessCmdResults ProcessQueryActiveInfo(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; try { cmdData = new UTF8Encoding().GetString(data, 0, count); } catch (Exception) //解析错误 { LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); } try { string[] fields = cmdData.Split(':'); if (fields.Length != 5) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); string fromDate = fields[1].Replace('$', ':'); string toDate = fields[2].Replace('$', ':'); int activeid = Global.SafeConvertToInt32(fields[4]); //排名最低元宝要求列表,依次为第一名的最小元宝,第二名的最小元宝...... string[] minYuanBaoArr = fields[3].Split('_'); DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(roleID); if (null == roleInfo) { LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); } List <int> minGateValueList = new List <int>(); foreach (var item in minYuanBaoArr) { minGateValueList.Add(Global.SafeConvertToInt32(item)); } //返回排行信息,返回消费王排行数据列表,可能没有第一名等名次 List <PaiHangItemData> listPaiHang = NewZoneActiveMgr.GetRankListByActiveLimit(dbMgr, fromDate, toDate, minGateValueList, activeid, minGateValueList.Count); //更新最大等级角色名称 和区号 //foreach (var item in listPaiHang) //{ // string id = ""; // Global.GetRoleNameAndUserID(dbMgr, item.RoleID, out item.RoleName, out id); //} //活动时间范围内的充值数,真实货币单位 int inputMoneyInPeriod = 0; //活动关键字,能够唯一标志某内活动的一个实例【在某段时间内的活动】 string huoDongKeyStr = Global.GetHuoDongKeyString(fromDate, toDate); int hasgettimes = 0; string lastgettime = ""; //判断是否领取过---活动关键字字符串唯一确定了每次活动,针对同类型不同时间的活动 switch ((ActivityTypes)activeid) { case ActivityTypes.NewZoneConsumeKing: // huoDongKeyStr = Global.GetHuoDongKeyString(fromDate, toDate); //判断是否领取过---活动关键字字符串唯一确定了每次活动,针对同类型不同时间的活动 DBQuery.GetAwardHistoryForUser(dbMgr, roleInfo.UserID, (int)(ActivityTypes.NewZoneConsumeKing), huoDongKeyStr, out hasgettimes, out lastgettime); //这个活动每次每个用户最多领取一次 if (hasgettimes > 0) { hasgettimes = 1; } break; case ActivityTypes.NewZoneRechargeKing: { // huoDongKeyStr = Global.GetHuoDongKeyString(fromDate, toDate); //判断是否领取过---活动关键字字符串唯一确定了每次活动,针对同类型不同时间的活动 DBQuery.GetAwardHistoryForUser(dbMgr, roleInfo.UserID, (int)(ActivityTypes.NewZoneRechargeKing), huoDongKeyStr, out hasgettimes, out lastgettime); //这个活动每次每个用户最多领取一次 if (hasgettimes > 0) { hasgettimes = 1; } } break; case ActivityTypes.NewZoneBosskillKing: { // huoDongKeyStr = Global.GetHuoDongKeyString(fromDate, toDate); //判断是否领取过---活动关键字字符串唯一确定了每次活动,针对同类型不同时间的活动 DBQuery.GetAwardHistoryForRole(dbMgr, roleID, roleInfo.ZoneID, activeid, huoDongKeyStr, out hasgettimes, out lastgettime); //这个活动每次每个角色最多领取一次 if (hasgettimes > 0) { hasgettimes = 1; } } break; case ActivityTypes.NewZoneFanli: { inputMoneyInPeriod = NewZoneActiveMgr.ComputTotalFanliValue(dbMgr, roleInfo, activeid, fromDate, toDate, minGateValueList); if (inputMoneyInPeriod == 0) { hasgettimes = 1; } } break; } NewZoneActiveData consumedata = new NewZoneActiveData() { YuanBao = inputMoneyInPeriod, ActiveId = activeid, Ranklist = listPaiHang, GetState = hasgettimes }; //生成排行信息的tcp对象流 tcpOutPacket = DataHelper.ObjectToTCPOutPacket <NewZoneActiveData>(consumedata, pool, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); }