예제 #1
0
        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);
        }
예제 #2
0
		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;
		}
예제 #3
0
        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);
        }
예제 #4
0
		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;
		}
예제 #5
0
		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);
					}
				}
			}
		}
예제 #6
0
		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;
		}
예제 #7
0
		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;
		}