public bool DBRankUpdata(ZhengDuoRankData data) { bool result; try { string sql = string.Format("REPLACE INTO t_zhengduo_rank(week,bhid,zoneid,bhname,bhLevel,zhanli,rank1,rank2,state,millisecond,serverid,lose,enemy) \r\n VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}',{11},{12})", new object[] { data.Week, data.Bhid, data.ZoneId, data.BhName, data.BhLevel, data.ZhanLi, data.Rank1, data.Rank2, data.State, data.UsedMillisecond, data.ServerID, data.Lose, data.Enemy }); result = (this.ExecuteSqlNoQuery(sql) >= 0); } catch (Exception ex) { LogManager.WriteException(ex.ToString()); result = false; } return(result); }
private List<ZhengDuoRankData> GetListByGroup(int rank1, int step) { List<ZhengDuoRankData> rankDataList = new List<ZhengDuoRankData>(); List<ZhengDuoRankData> result; if (step < 1 || step > 5) { result = rankDataList; } else { bool find = false; int rank2 = this.GetSuccessRank((EZhengDuoStep)step); int countPerGroup = 16 / rank2; for (int i = 0; i < rank2; i++) { rankDataList.Clear(); for (int j = 0; j < countPerGroup; j++) { int r = KFZhengDuoConfig.GroupInfo[i * countPerGroup + j]; if (r == rank1) { find = true; } ZhengDuoRankData rankData = this.SyncData.RankDatas[r]; if (null != rankData) { rankDataList.Add(rankData); } } if (find) { break; } } result = rankDataList; } return result; }
public Dictionary <int, ZhengDuoRankData> DBRankList(int week) { Dictionary <int, ZhengDuoRankData> dic = new Dictionary <int, ZhengDuoRankData>(); try { string strSql = string.Format("SELECT bhid,zoneid,bhname,bhLevel,zhanli,rank1,rank2,state,millisecond,serverid,lose,enemy\r\n FROM t_zhengduo_rank\r\n WHERE week='{0}'\r\n order by rank2,rank1,millisecond", week); MySqlDataReader sdr = DbHelperMySQL.ExecuteReader(strSql, false); while (sdr != null && sdr.Read()) { ZhengDuoRankData item = new ZhengDuoRankData(); item.Bhid = Convert.ToInt32(sdr["bhid"]); item.ZoneId = Convert.ToInt32(sdr["zoneid"]); item.BhName = sdr["bhname"].ToString(); item.BhLevel = Convert.ToInt32(sdr["bhLevel"]); item.ZhanLi = (long)Convert.ToInt32(sdr["zhanli"]); item.Rank1 = Convert.ToInt32(sdr["rank1"]); item.Rank2 = Convert.ToInt32(sdr["rank2"]); item.State = Convert.ToInt32(sdr["state"]); item.UsedMillisecond = Convert.ToInt32(sdr["millisecond"]); item.ServerID = Convert.ToInt32(sdr["serverid"]); item.Lose = Convert.ToInt32(sdr["lose"]); item.Enemy = Convert.ToInt32(sdr["enemy"]); item.Week = week; dic[item.Rank1] = item; } if (sdr != null) { sdr.Close(); } } catch (Exception ex) { LogManager.WriteException(ex.ToString()); return(null); } return(dic); }
private ZhengDuoRankData GetEnemy(ZhengDuoRankData rankData0, int step) { int bits = step - 2; ZhengDuoRankData result; if (bits < 0) { result = null; } else { int rank = this.GetSuccessRank((EZhengDuoStep)step); int oldRank = this.GetSuccessRank((EZhengDuoStep)(step - 1)); lock (this.Mutex) { if (rankData0 == null || rankData0.Rank2 != oldRank) { return null; } int flag0 = rankData0.Rank1 >> bits; for (int i = 0; i < this.SyncData.RankDatas.Length; i++) { ZhengDuoRankData rankData = this.SyncData.RankDatas[i]; if (rankData != null && rankData.Rank2 == oldRank) { int flag = rankData.Rank1 >> bits; if (flag0 + flag == oldRank) { return rankData; } } } } result = null; } return result; }
private void ProcessZhengDuoRank(int step, bool notify = true) { if (step >= 1) { int rank = this.GetSuccessRank((EZhengDuoStep)step); int oldRank = this.GetSuccessRank((EZhengDuoStep)(step - 1)); int nextRank = this.GetSuccessRank(step + EZhengDuoStep.Preliminarises); lock (this.Mutex) { bool update = false; int i; if (step >= 2) { for (i = 0; i < rank; i++) { bool complete = false; int successRank = int.MaxValue; List<ZhengDuoRankData> rankDataList = this.GetListByGroup(i, step); foreach (ZhengDuoRankData data in rankDataList) { if (data.Rank2 == rank) { complete = true; } else if (data.Rank2 == oldRank && data.Rank1 < successRank) { successRank = data.Rank1; } } if (!complete && successRank < 16) { int[] bhids = new int[2]; foreach (ZhengDuoRankData data in rankDataList) { data.State = 0; if (data.Rank1 == successRank) { bhids[0] = data.Bhid; data.Rank2 = rank; data.Enemy = 0; } else { bhids[1] = data.Bhid; data.Lose = 1; } this._persistence.DBRankUpdata(data); } update = true; LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地提交淘汰赛结果,无战斗结果,自动判定#successbhid={0},otherBhid={1},week={2}", bhids[0], bhids[1], this.SyncData.WeekDay), null, true); } } } i = 0; while (i < nextRank) { bool complete = false; List<int> list = new List<int>(); List<ZhengDuoRankData> rankDataList = this.GetListByGroup(i, step + 1); foreach (ZhengDuoRankData data in rankDataList) { if (data.Rank2 == rank) { list.Add(data.Rank1); } else { data.Lose = 1; this._persistence.DBRankUpdata(data); } } if (list.Count == 2) { this.SyncData.RankDatas[list[0]].Enemy = this.SyncData.RankDatas[list[1]].Bhid; this.SyncData.RankDatas[list[1]].Enemy = this.SyncData.RankDatas[list[0]].Bhid; LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地分配对手#{0}<==>{1}", this.SyncData.RankDatas[list[0]].Bhid, this.SyncData.RankDatas[list[1]].Bhid), null, true); goto IL_3B9; } if (list.Count == 1) { this.SyncData.RankDatas[list[0]].Enemy = 0; LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地分配对手#{0}无对手,直接晋级", this.SyncData.RankDatas[list[0]].Bhid), null, true); goto IL_3B9; } IL_410: i++; continue; IL_3B9: foreach (int r in list) { ZhengDuoRankData rankData = this.SyncData.RankDatas[r]; update = true; this._persistence.DBRankUpdata(rankData); } goto IL_410; } if (notify && update) { this.SyncData.Age = TimeUtil.AgeByNow(this.SyncData.Age); } } } }
public int ZhengDuoResult(int bhidSuccess, int[] bhids) { int result; if (bhids == null || bhids.Length < 2) { result = -18; } else { int week = TimeUtil.GetWeekStartDayIdNow(); lock (this.Mutex) { if (this.SyncData.WeekDay == week && this.SyncData.ZhengDuoStep > 1) { int successRank = int.MaxValue; int rank = this.GetSuccessRank((EZhengDuoStep)this.SyncData.ZhengDuoStep); List<ZhengDuoRankData> rankDataList = new List<ZhengDuoRankData>(); for (int i = 0; i < this.SyncData.RankDatas.Length; i++) { ZhengDuoRankData rankData = this.SyncData.RankDatas[i]; if (rankData != null && bhids.Contains(rankData.Bhid)) { rankDataList.Add(rankData); if (bhidSuccess > 0) { if (bhidSuccess == rankData.Bhid) { successRank = rankData.Rank1; } } else if (successRank > rankData.Rank1) { successRank = rankData.Rank1; } } } if (rankDataList.Any((ZhengDuoRankData x) => x.Rank2 == rank)) { LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地提交淘汰赛结果失败,已过期#successbhid={0},bhid0={1},bhid1={2},week={3}", new object[] { bhidSuccess, bhids[0], bhids[1], week }), null, true); return 0; } if (successRank >= 16) { return -18; } ZhengDuoFuBenData fuBenData; if (rankDataList.Count > 0 && this.Bhid2FuBenDict.TryGetValue(rankDataList[0].Bhid, out fuBenData)) { fuBenData.State = GameFuBenState.End; } LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地提交淘汰赛结果#successbhid={0},bhid0={1},bhid1={2},week={3}", new object[] { bhidSuccess, bhids[0], bhids[1], week }), null, true); foreach (ZhengDuoRankData data in rankDataList) { data.State = 0; if (data.Rank1 == successRank) { data.Rank2 = this.GetSuccessRank((EZhengDuoStep)this.SyncData.ZhengDuoStep); data.Enemy = 0; } else { data.Lose = 1; } this._persistence.DBRankUpdata(data); } this.SyncData.Age = TimeUtil.AgeByNow(this.SyncData.Age); } else { LogManager.WriteLog(LogTypes.Error, string.Format("争夺之地提交海选结果失败,非海选时间拒绝提交", new object[0]), null, true); } } result = 0; } return result; }
public int ZhengDuoSign(int serverID, int bhid, int usedTime, int zoneId, string bhName, int bhLevel, long bhZhanLi) { int week = TimeUtil.GetWeekStartDayIdNow(); lock (this.Mutex) { if (this.SyncData.WeekDay == week && this.SyncData.ZhengDuoStep == 1) { List<ZhengDuoRankData> rankDataList = new List<ZhengDuoRankData>(); int index = 0; for (int i = 0; i < this.SyncData.RankDatas.Length; i++) { ZhengDuoRankData rankData = this.SyncData.RankDatas[i]; if (rankData != null && rankData.Bhid != bhid) { rankDataList.Add(rankData); if (rankData.UsedMillisecond < usedTime) { index = rankDataList.Count; } } } if (index < 16) { ZhengDuoRankData data = new ZhengDuoRankData { Bhid = bhid, UsedMillisecond = usedTime, ServerID = serverID, ZoneId = zoneId, BhName = bhName, BhLevel = bhLevel, ZhanLi = bhZhanLi, Week = week, State = 1 }; data.Rank1 = index; data.Rank2 = 16; rankDataList.Insert(index, data); LogManager.WriteLog(LogTypes.Info, string.Format("争夺之地提交海选结果#bhid={0},usedTime={1},week={2}", bhid, usedTime, week), null, true); for (int i = 0; i < this.SyncData.RankDatas.Length; i++) { if (i < rankDataList.Count) { if (this.SyncData.RankDatas[i] != rankDataList[i]) { rankDataList[i].Rank1 = i; this._persistence.DBRankUpdata(rankDataList[i]); } this.SyncData.RankDatas[i] = rankDataList[i]; } else { this.SyncData.RankDatas[i] = null; } } this.SyncData.Age = TimeUtil.AgeByNow(this.SyncData.Age); } } else { LogManager.WriteLog(LogTypes.Error, string.Format("争夺之地提交海选结果失败,非海选时间拒绝提交", new object[0]), null, true); } } return 0; }