public void WriteCoupleData(CoupleArenaCoupleDataK coupleData) { if (coupleData != null) { try { string sql = string.Format("INSERT INTO t_couple_arena_group(`couple_id`,`man_rid`,`man_zoneid`,`wife_rid`,`wife_zoneid`,`total_pk_times`,`total_win_times`,`liansheng`,`jifen`,`duanwei_type`,`duanwei_level`,`rank`,`is_divorced`,`man_data1`,`wife_data1`) VALUES({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},@man_data1,@wife_data1) ON DUPLICATE KEY UPDATE `total_pk_times`={5},`total_win_times`={6},`liansheng`={7},`jifen`={8},`duanwei_type`={9},`duanwei_level`={10},`rank`={11},`is_divorced`={12},`man_data1`=@man_data1,`wife_data1`=@wife_data1;", new object[] { coupleData.Db_CoupleId, coupleData.ManRoleId, coupleData.ManZoneId, coupleData.WifeRoleId, coupleData.WifeZoneId, coupleData.TotalFightTimes, coupleData.WinFightTimes, coupleData.LianShengTimes, coupleData.JiFen, coupleData.DuanWeiType, coupleData.DuanWeiLevel, coupleData.Rank, coupleData.IsDivorced }); DbHelperMySQL.ExecuteSqlInsertImg(sql, new List <Tuple <string, byte[]> > { new Tuple <string, byte[]>("man_data1", coupleData.ManSelectorData), new Tuple <string, byte[]>("wife_data1", coupleData.WifeSelectorData) }); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("FlushRandList2Db failed, couple_id={0},man={1},wife={2}", coupleData.Db_CoupleId, coupleData.ManRoleId, coupleData.WifeRoleId), ex, true); } } }
public List <CoupleArenaCoupleDataK> LoadRankFromDb() { MySqlDataReader sdr = null; List <CoupleArenaCoupleDataK> result = new List <CoupleArenaCoupleDataK>(); try { string sql = "SELECT `couple_id`,`man_rid`,`man_zoneid`,`man_data1`,`wife_rid`,`wife_zoneid`,`wife_data1`,`total_pk_times`,`total_win_times`,`liansheng`,`jifen`,`duanwei_type`,`duanwei_level`,`rank`,`is_divorced` FROM t_couple_arena_group ORDER BY `rank`;"; sdr = DbHelperMySQL.ExecuteReader(sql, false); while (sdr != null && sdr.Read()) { CoupleArenaCoupleDataK data = new CoupleArenaCoupleDataK(); data.Db_CoupleId = Convert.ToInt32(sdr["couple_id"]); data.ManRoleId = Convert.ToInt32(sdr["man_rid"]); data.ManZoneId = Convert.ToInt32(sdr["man_zoneid"]); if (!sdr.IsDBNull(sdr.GetOrdinal("man_data1"))) { data.ManSelectorData = (byte[])sdr["man_data1"]; } data.WifeRoleId = Convert.ToInt32(sdr["wife_rid"]); data.WifeZoneId = Convert.ToInt32(sdr["wife_zoneid"]); if (!sdr.IsDBNull(sdr.GetOrdinal("wife_data1"))) { data.WifeSelectorData = (byte[])sdr["wife_data1"]; } data.TotalFightTimes = Convert.ToInt32(sdr["total_pk_times"]); data.WinFightTimes = Convert.ToInt32(sdr["total_win_times"]); data.LianShengTimes = Convert.ToInt32(sdr["liansheng"]); data.DuanWeiType = Convert.ToInt32(sdr["duanwei_type"]); data.DuanWeiLevel = Convert.ToInt32(sdr["duanwei_level"]); data.JiFen = Convert.ToInt32(sdr["jifen"]); data.Rank = Convert.ToInt32(sdr["rank"]); data.IsDivorced = Convert.ToInt32(sdr["is_divorced"]); result.Add(data); } } catch (Exception ex) { LogManager.WriteExceptionUseCache(ex.Message); } finally { if (sdr != null) { sdr.Close(); } } return(result); }
/// <summary> /// 清除情侣数据,离婚了 /// </summary> /// <param name="roleId1"></param> /// <param name="roleId2"></param> /// <returns></returns> public int CoupleArenaPreDivorce(int roleId1, int roleId2) { lock (Mutex) { if (!IsValidCoupleIfExist(roleId1, roleId2)) { return(StdErrorCode.Error_Server_Internal_Error); } CoupleArenaQuit(roleId1, roleId2); DateTime now = TimeUtil.NowDateTime(); CoupleArenaCoupleDataK data = null; if (!IsInWeekRangeActTimes(now)) { // 非活动时间内,离婚不影响排行榜,不用清除 // 但是第一名离婚,即使复婚也不能再获得称号 data = null; if (SyncData.RoleDict.TryGetValue(roleId1, out data)) { // 设置为已离婚,并存入数据库 data.IsDivorced = 1; Persistence.WriteCoupleData(data); if (data.Rank == 1) { // 如果是第一名才设置更新时间,让GameServer同步到 SyncData.ModifyTime = now; } } return(StdErrorCode.Error_Success); } data = null; if (!SyncData.RoleDict.TryGetValue(roleId1, out data)) { // 加入离婚记录 DivorceRecord.Add(roleId1, roleId2); // 夫妻双方不再排行榜上,无效清理 return(StdErrorCode.Error_Success); } if (data == null) { return(StdErrorCode.Error_Success); } // 必须保证竞技数据清理成功 if (!Persistence.ClearCoupleData(data.Db_CoupleId)) { return(StdErrorCode.Error_DB_Faild); } // 优化删除操作 if (data.Rank - 1 >= 0 && data.Rank - 1 < SyncData.RankList.Count && SyncData.RankList[data.Rank - 1].Db_CoupleId == data.Db_CoupleId) { SyncData.RankList.RemoveAt(data.Rank - 1); } else { SyncData.RankList.RemoveAll(_r => _r.Db_CoupleId == data.Db_CoupleId); } // 加入离婚记录 DivorceRecord.Add(roleId1, roleId2); SyncData.BuildRoleDict(); SyncData.ModifyTime = now; this.IsNeedSort = true; return(StdErrorCode.Error_Success); } }
private void HandlePkResult(int man, int manzone, byte[] mandata, int wife, int wifezone, byte[] wifedata, int pkDuanWeiType, int pkDuanWeiLevel, CoupleArenaPkResultItem retData) { CoupleArenaCoupleDataK coupleData = null; if (!SyncData.RoleDict.TryGetValue(man, out coupleData)) { coupleData = new CoupleArenaCoupleDataK(); coupleData.Db_CoupleId = Persistence.GetNextDbCoupleId(); coupleData.ManRoleId = man; coupleData.ManZoneId = manzone; coupleData.ManSelectorData = mandata; coupleData.WifeRoleId = wife; coupleData.WifeZoneId = wifezone; coupleData.WifeSelectorData = wifedata; coupleData.DuanWeiLevel = _DuanWeiCfgList[0].DuanWeiLevel; coupleData.DuanWeiType = _DuanWeiCfgList[0].DuanWeiType; coupleData.Rank = SyncData.RankList.Count + 1; if (retData.Result != (int)ECoupleArenaPkResult.Invalid) { SyncData.RankList.Add(coupleData); SyncData.RoleDict[coupleData.ManRoleId] = coupleData; SyncData.RoleDict[coupleData.WifeRoleId] = coupleData; } } else { // 更新形象 coupleData.ManSelectorData = mandata; coupleData.WifeSelectorData = wifedata; } retData.OldDuanWeiType = coupleData.DuanWeiType; retData.OldDuanWeiLevel = coupleData.DuanWeiLevel; // 失败扣除自己段位的积分 _CoupleArenaDuanWeiCfg duanweiCfgLose = _DuanWeiCfgList.Find( _d => _d.DuanWeiLevel == coupleData.DuanWeiLevel && _d.DuanWeiType == coupleData.DuanWeiType); if (duanweiCfgLose == null) { LogManager.WriteLog(LogTypes.Error, string.Format("couplearena.HandlePkResult can't find duanwei cfg ,type={0}, level={1}", coupleData.DuanWeiType, coupleData.DuanWeiLevel)); return; } // 胜利奖励对方段位的积分 _CoupleArenaDuanWeiCfg duanweiCfgWin = _DuanWeiCfgList.Find( _d => _d.DuanWeiLevel == pkDuanWeiLevel && _d.DuanWeiType == pkDuanWeiType); if (duanweiCfgWin == null) { LogManager.WriteLog(LogTypes.Error, string.Format("couplearena.HandlePkResult can't find duanwei cfg ,type={0}, level={1}", pkDuanWeiType, pkDuanWeiLevel)); return; } if (retData.Result == (int)ECoupleArenaPkResult.Invalid) { retData.NewDuanWeiType = coupleData.DuanWeiType; retData.NewDuanWeiLevel = coupleData.DuanWeiLevel; } else { coupleData.TotalFightTimes++; if (retData.Result == (int)ECoupleArenaPkResult.Win) { coupleData.WinFightTimes++; coupleData.LianShengTimes++; coupleData.JiFen += duanweiCfgWin.WinJiFen; retData.GetJiFen = duanweiCfgWin.WinJiFen; } else { coupleData.LianShengTimes = 0; coupleData.JiFen += duanweiCfgLose.LoseJiFen; coupleData.JiFen = Math.Max(coupleData.JiFen, 0); retData.GetJiFen = duanweiCfgLose.LoseJiFen; } ParseDuanweiByJiFen(coupleData.JiFen, out coupleData.DuanWeiType, out coupleData.DuanWeiLevel); SyncData.ModifyTime = TimeUtil.NowDateTime(); retData.NewDuanWeiLevel = coupleData.DuanWeiLevel; retData.NewDuanWeiType = coupleData.DuanWeiType; this.IsNeedSort = true; } if (retData.Result != (int)ECoupleArenaPkResult.Invalid) { Persistence.WriteCoupleData(coupleData); } }
public int CoupleArenaPreDivorce(int roleId1, int roleId2) { int result; lock (this.Mutex) { DateTime now = TimeUtil.NowDateTime(); if (!this.IsValidCoupleIfExist(roleId1, roleId2)) { if (!this.IsInWeekRangeActTimes(now)) { CoupleArenaCoupleDataK coupleData; this.SyncData.RoleDict.TryGetValue(roleId1, out coupleData); CoupleArenaCoupleDataK coupleData2; this.SyncData.RoleDict.TryGetValue(roleId2, out coupleData2); if (coupleData != null && coupleData.IsDivorced == 1) { return(1); } if (coupleData2 != null && coupleData2.IsDivorced == 1) { return(1); } } result = -11003; } else { this.CoupleArenaQuit(roleId1, roleId2); CoupleArenaCoupleDataK data = null; if (!this.IsInWeekRangeActTimes(now)) { data = null; if (this.SyncData.RoleDict.TryGetValue(roleId1, out data)) { data.IsDivorced = 1; this.Persistence.WriteCoupleData(data); if (data.Rank == 1) { this.SyncData.ModifyTime = now; } } result = 1; } else { data = null; if (!this.SyncData.RoleDict.TryGetValue(roleId1, out data)) { this.DivorceRecord.Add(roleId1, roleId2); result = 1; } else if (data == null) { result = 1; } else if (!this.Persistence.ClearCoupleData(data.Db_CoupleId)) { result = -15; } else { if (data.Rank - 1 >= 0 && data.Rank - 1 < this.SyncData.RankList.Count && this.SyncData.RankList[data.Rank - 1].Db_CoupleId == data.Db_CoupleId) { this.SyncData.RankList.RemoveAt(data.Rank - 1); } else { this.SyncData.RankList.RemoveAll((CoupleArenaCoupleDataK _r) => _r.Db_CoupleId == data.Db_CoupleId); } this.DivorceRecord.Add(roleId1, roleId2); this.SyncData.BuildRoleDict(); this.SyncData.ModifyTime = now; this.IsNeedSort = true; result = 1; } } } } return(result); }