static ManagerInput GetTransferNpc(MatchManagerInfo managerInfo) { var data = CacheFactory.NpcdicCache.GetTransferData(managerInfo.ManagerId); managerInfo.Name = data.Name; return(data); }
/// <summary> /// Runs the arena match. /// </summary> void RunMatch() { if (_fightDic == null) { return; } foreach (var item in _fightDic.Values) { var matchHome = new MatchManagerInfo(item.HomeId, item.HomeSiteId, false, item.HomeIsBot); var matchAway = new MatchManagerInfo(item.AwayId, item.AwaySiteId, false, item.AwayIsBot); var matchData = new BaseMatchData((int)EnumMatchType.CrossLadder, item.Idx, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); //使用多线程 _nbThreadPool.Add(() => Fight(matchData, item)); } _nbThreadPool.WaitAll(); _ladderInfo.Groups = _fightDic.Count; _ladderInfo.RowTime = DateTime.Now; _ladderInfo.Season = CacheFactory.CrossLadderCache.GetCurrentSeasonIndex(); _ladderInfo.Status = 2; _ladderInfo.UpdateTime = DateTime.Now; _ladderInfo.FightList = null; _fightDic = null; CrossladderInfoMgr.Insert(_ladderInfo); _ladderInfo = null; }
public static ManagerInput BuildTransferManager(MatchManagerInfo managerInfo, bool isGuide = false, DTOBuffMemberView buffView = null, string siteId = "") { try { if (managerInfo.IsNpc) { return(GetTransferNpc(managerInfo)); } if (null == buffView) { buffView = BuffDataCore.Instance().GetMembers(managerInfo.ManagerId, true, siteId); } return(CreateTransferManager(managerInfo, buffView, isGuide, siteId)); } catch (Exception ex) { SystemlogMgr.Error("BuildTransferManager", ex); throw; } }
static ManagerInput CreateTransferManagerArena(MatchManagerInfo managerInfo, DTOBuffMemberView buffView, bool isGuide, ArenaTeammemberFrame arenaFrame, string siteId = "") { if (null == buffView) { return(null); } var manager = MatchDataHelper.GetManager(managerInfo.ManagerId, false, false, siteId); var solution = MatchDataHelper.GetArenaSolution(arenaFrame); string name = managerInfo.IsBot ? _botName : manager.Name; managerInfo.Name = name; var dstData = new ManagerInput(); dstData.Mid = managerInfo.ManagerId; dstData.Name = name; dstData.Logo = manager.Logo.ToString(); dstData.FormId = solution.FormationId; dstData.FormLv = solution.FormationLevel; dstData.ClothId = buffView.ClothId; dstData.Skills = buffView.LiveSkillList; dstData.SubSkills = buffView.SubSkills; if (null != buffView.MatchPropList) { dstData.PropList = new List <PropInput>(); foreach (var item in buffView.MatchPropList) { dstData.PropList.Add(new PropInput(item.Point, item.Percent, item.BuffId)); } } if (null != buffView.MatchBoostList) { dstData.BoostList = new List <BoostInput>(); foreach (var item in buffView.MatchBoostList) { dstData.BoostList.Add(new BoostInput(item.BoostType, item.Point, item.Percent, item.BuffId)); } } BuildManagerData(dstData, buffView, manager.VipLevel, managerInfo.BuffScale, isGuide); return(dstData); }
/// <summary> /// Runs the arena match. /// </summary> void RunMatch() { if (_fightDic == null) { return; } foreach (var item in _fightDic.Values) { var matchHome = new MatchManagerInfo(item.HomeId, false, item.HomeIsBot); var matchAway = new MatchManagerInfo(item.AwayId, false, item.AwayIsBot); if (isGuide)//引导。 必胜 { matchHome.BuffScale = 200; matchAway.BuffScale = 50; } var matchData = new BaseMatchData((int)EnumMatchType.Ladder, item.Idx, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); //使用多线程 _nbThreadPool.Add(() => Fight(matchData, item)); } _nbThreadPool.WaitAll(); _ladderInfo.Groups = _fightDic.Count; _ladderInfo.RowTime = DateTime.Now; _ladderInfo.Season = 1; _ladderInfo.Status = 2; _ladderInfo.UpdateTime = DateTime.Now; _ladderInfo.FightList = null; _fightDic = null; LadderInfoMgr.Insert(_ladderInfo); _ladderInfo = null; }
/// <summary> /// Runs the arena match. /// </summary> void RunMatch() { if (_matchDic == null) { return; } try { Status = EnumLadderStatus.Running; foreach (var item in _matchDic.Values) { var matchHome = new MatchManagerInfo(item.HomeId, item.HomeSiteId); var matchAway = new MatchManagerInfo(item.AwayId, item.AwaySiteId); var matchData = new BaseMatchData((int)EnumMatchType.CrossCrowd, item.Idx, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); Fight(matchData, item); } _matchDic = null; _pairRecord.RowTime = DateTime.Now; CrosscrowdPairrecordMgr.Insert(_pairRecord); _pairRecord = null; } catch (Exception ex) { SystemlogMgr.Error("CrossCrowdProcess-RunMatch", ex); } finally { Status = EnumLadderStatus.End; if (_clearFightDicDelegate != null) { _clearFightDicDelegate(); } } }
private void PostInit() { List <ComboData> data = new List <ComboData>(); foreach (MatchManagerType t in Enum.GetValues(typeof(MatchManagerType))) { MatchManagerInfo i = MatchManagerInfoAccessor.GetInfo(t); //#if DEBUG // v debugu pridat vsechny managery data.Add(new ComboData { Id = t, Name = i.Text }); /*#else * if (!i.IsDebug) * data.Add(new ComboData { Id = t, Name = i.Text }); #endif*/ } cbType.ItemsSource = data; cbType.DisplayMemberPath = "Name"; cbType.SelectedValuePath = "Id"; cbType.SelectedValue = MatchManagerType.ONLY_SCORE; data = new List <ComboData>(); foreach (GameLevel l in Enum.GetValues(typeof(GameLevel))) { LevelInfo i = LevelInfoAccessor.GetInfo(l); //#if DEBUG // v debugu pridat vsechny mapy data.Add(new ComboData { Id = l, Name = i.Text }); /*#else * if (!i.IsDebug) * data.Add(new ComboData { Id = l, Name = i.Text }); #endif*/ } cbMap.ItemsSource = data; cbMap.DisplayMemberPath = "Name"; cbMap.SelectedValuePath = "Id"; cbMap.SelectedValue = GameLevel.BASIC_MAP; #if DEBUG tbName.Text = "Test"; #endif //#if DEBUG // pridani dostupnych botu pro testovani data = new List <ComboData>(); data.Add(new ComboData { Id = BotType.LEVEL1, Name = BotNameAccessor.GetBotName(BotType.LEVEL1) }); data.Add(new ComboData { Id = BotType.LEVEL2, Name = BotNameAccessor.GetBotName(BotType.LEVEL2) }); data.Add(new ComboData { Id = BotType.LEVEL3, Name = BotNameAccessor.GetBotName(BotType.LEVEL3) }); cbBot.ItemsSource = data; cbBot.DisplayMemberPath = "Name"; cbBot.SelectedValuePath = "Id"; cbBot.SelectedValue = BotType.LEVEL1; /*#else * tbBotCount.Visibility = Visibility.Hidden; * cbBot.Visibility = Visibility.Hidden; * lblBot.Visibility = Visibility.Hidden; * lblBotCount.Visibility = Visibility.Hidden; #endif*/ }
/// <summary> /// 打比赛 /// </summary> /// <param name="managerId"></param> /// <param name="opponentId"></param> /// <returns></returns> public ArenaFightResponse Fight(Guid managerId, Guid opponentId) { ArenaFightResponse response = new ArenaFightResponse(); response.Data = new ArenaFight(); try { //还未开始 if (!IsStart) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.SeasonNotStart)); } if (IsEnd) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.SeasonNotStart)); } DateTime date = DateTime.Now; var info = GetArenaInfo(managerId); //阵型未组建完成 if (info == null) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.TeammemberNotNumber)); } RestoreStamina(info); //体力不足 if (info.Stamina <= 0) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.StaminaInsufficient)); } var arenaInfo = new ArenaTeammemberFrame(managerId, (EnumArenaType)this.ArenaType, info.SiteId); //阵型人数<7 if (arenaInfo.TeammebmerDic.Count < 7) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.TeammemberNotNumber)); } info.OpponentList = AnalyseOpponent(info.Opponent); //对手列表里找对手 var opponent = info.OpponentList.OpponentList.Find(r => r.OpponentManagerId == opponentId); if (opponent == null) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbParameterError)); } if (!opponent.IsNpc) { //对手信息 var opponentInfo = new ArenaTeammemberFrame(opponentId, (EnumArenaType)this.ArenaType, opponent.OpponentZoneName); //对手信息不完整 刷新 if (info.OpponentList == null || info.OpponentList.OpponentList.Count == 0 || opponentInfo.TeammebmerDic.Count < 7) { List <Guid> matcOpponet = null; if (info.OpponentList != null) { matcOpponet = info.OpponentList.MatchOpponent; } var opponentList = RefreshOpponent(managerId, info.DanGrading, matcOpponet); info.OpponentList = opponentList; info.Opponent = GenerateString(info.OpponentList); ArenaManagerinfoMgr.Update(info); return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbParameterError)); } } var matchHome = new MatchManagerInfo(managerId, info.SiteId, info.ArenaType); MatchManagerInfo matchAway = null; if (!opponent.IsNpc) { matchAway = new MatchManagerInfo(opponent.OpponentManagerId, opponent.OpponentZoneName, info.ArenaType); } else { matchAway = new MatchManagerInfo(opponent.OpponentManagerId, true, info.ArenaType); } var matchId = ShareUtil.GenerateComb(); var matchData = new BaseMatchData((int)EnumMatchType.Arena, matchId, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); MatchCore.CreateMatch(matchData); if (matchData.ErrorCode != (int)MessageCode.Success) { return(ResponseHelper.Create <ArenaFightResponse>(matchData.ErrorCode)); } //打比赛 自己为主队 int homeGoals = matchData.Home.Score; int awayGoals = matchData.Away.Score; if (info.Stamina == info.MaxStamina) { info.StaminaRestoreTime = date; } info.Stamina--; if (info.OpponentList.MatchOpponent == null) { info.OpponentList.MatchOpponent = new List <Guid>(); } info.OpponentList.MatchOpponent.Add(opponentId); //打完比赛重新刷新对手 info.OpponentList = RefreshOpponent(managerId, info.DanGrading, info.OpponentList.MatchOpponent); info.Opponent = GenerateString(info.OpponentList); if (homeGoals > awayGoals) //胜利了获得对手的积分 { info.Integral += opponent.GetIntegral; response.Data.Integral = opponent.GetIntegral; info.UpdateTime = DateTime.Now; } //计算段位 CalculateDanGrading(ref info); info.Status = 1; response.Data.StaminEntity = RestoreStamina(info, false); if (!ArenaManagerinfoMgr.Update(info)) { return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbUpdateFail)); } response.Data.OpponentList = info.OpponentList.OpponentList; response.Data.MyIntegral = info.Integral; response.Data.DanGrading = info.DanGrading; //更新排名 SetRank(managerId, info.Integral); response.Data.MyRank = GetRank(managerId); response.Data.MatchId = matchId; if (info.DanGrading == 1) { response.Data.IsMaxDanGrading = true; } else { var dangradingConfig = CacheFactory.ArenaCache.GetDangrading(info.DanGrading); if (dangradingConfig != null) { response.Data.UpIntegral = dangradingConfig.Integral - info.Integral; } } MemcachedFactory.ArenaMatchClient.Set <BaseMatchData>(matchId, matchData); } catch (Exception ex) { SystemlogMgr.Error("打比赛", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }
private MatchCreateResponse doFight(Guid managerId, Guid awayId, long revengeRecordId, bool hasTask) { var info = InnerGetInfo(managerId); if (info == null) { return(ResponseHelper.InvalidParameter <MatchCreateResponse>("info")); } info.Opponents = SerializationHelper.FromByte <List <PlayerKillOpponentEntity> >(info.OpponentInfo); if (info.Opponents == null) { return(ResponseHelper.InvalidParameter <MatchCreateResponse>("opponents")); } var awayOpp = info.Opponents.Find(d => d.ManagerId == awayId); if (awayOpp == null) { return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.PlayerKillNoAway)); } if (awayOpp.HasWin) { return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.PlayerKillWinOver)); } var managerex = ManagerCore.Instance.GetManagerExtra(managerId); var manager = ManagerCore.Instance.GetManager(managerId); if (manager == null || managerex == null) { return(ResponseHelper.Create <MatchCreateResponse>((int)MessageCode.MissManager)); } if (managerex.Stamina < _pkStamina) { return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.LeagueStaminaNotEnough)); } var matchHome = new MatchManagerInfo(manager.Idx, "", false, 20); //构建客队 var matchAway = new MatchManagerInfo(awayId, false, false); //创建一场比赛 Guid matchId = ShareUtil.GenerateComb(); var matchData = new BaseMatchData((int)EnumMatchType.PlayerKill, matchId, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; matchData.HasTask = hasTask; var taskListShow = TaskCore.Instance.GetTaskListShow(managerId); if (taskListShow.Tasks.Find(t => t.TaskId == 1001) != null) { matchData.IsGuide = true; } MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); MatchCore.CreateMatch(matchData); if (matchData.ErrorCode == (int)MessageCode.Success) { MatchCallback(matchData, revengeRecordId, awayOpp, info); } else { return(ResponseHelper.Create <MatchCreateResponse>(matchData.ErrorCode)); } var response = ResponseHelper.MatchCreateResponse(matchId); var managerExtra = ManagerCore.Instance.GetManagerExtra(managerId); response.Data.Stamina = managerExtra.Stamina; return(response); }
/// <summary> /// 单场比赛 /// </summary> /// <param name="round"></param> /// <param name="homeGuid"></param> /// <param name="awayGuid"></param> /// <param name="homeId"></param> /// <param name="awayId"></param> /// <param name="leagueId"></param> /// <param name="matchId"></param> /// <param name="npcStatus"></param> /// <param name="fightMap"></param> /// <param name="managerMatch"></param> public MessageCode SingleMatch(int round, Guid homeGuid, Guid awayGuid, int homeId, int awayId, int leagueId, Guid matchId, int npcStatus, LeagueFightMapFrame fightMap, ref BaseMatchData managerMatch) { try { bool homeIsBot = true; bool awayIsBot = true; switch (npcStatus) { case 1: homeIsBot = false; break; case 2: awayIsBot = false; break; default: matchId = ShareUtil.GenerateComb(); break; } //构建主队 var matchHome = new MatchManagerInfo(homeGuid, homeIsBot, false); ////构建客队 var matchAway = new MatchManagerInfo(awayGuid, awayIsBot, false); ////创建一场比赛 var matchData = new BaseMatchData((int)EnumMatchType.League, matchId, matchHome, matchAway); //比赛数据 matchData.ErrorCode = (int)MessageCode.MatchWait; matchData.RowTime = DateTime.Now; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); if (npcStatus == 0) { matchData.ErrorCode = (int)MessageCode.Success; matchData.Home.Score = CacheFactory.LeagueCache.GetGoalsMap(leagueId, homeId); matchData.Away.Score = CacheFactory.LeagueCache.GetGoalsMap(leagueId, awayId); } else { MatchCore.CreateMatch(matchData); if (matchData.ErrorCode != (int)MessageCode.Success) { return((MessageCode)matchData.ErrorCode); } //测试用 ------------ //matchData.ErrorCode = (int)MessageCode.Success; //matchData.Home.Score = 5; //matchData.Away.Score = 2; //------------------- managerMatch = matchData; } int homeGoals = matchData.Home.Score; int awayGoals = matchData.Away.Score; SaveMatchScore(leagueId, round, homeId, awayId, homeGoals, awayGoals, fightMap, npcStatus); } catch (Exception ex) { SystemlogMgr.Error("League.Match", ex); return(MessageCode.NbParameterError); } return(MessageCode.Success); }
DailycupMatchEntity Fight(DailycupCompetitorsEntity home, DailycupCompetitorsEntity away, int round) { DailycupMatchEntity dailycupMatch = new DailycupMatchEntity(); dailycupMatch.DailyCupId = _dailycup.Idx; dailycupMatch.HomeManager = home.ManagerId; dailycupMatch.HomeName = home.ManagerName; dailycupMatch.HomeLogo = home.Logo; dailycupMatch.Idx = ShareUtil.GenerateComb(); dailycupMatch.Round = round; dailycupMatch.ChipInCount = 0; dailycupMatch.RowTime = DateTime.Now; dailycupMatch.Status = 0; dailycupMatch.HomeLevel = home.Level; dailycupMatch.HomePower = home.kpi; dailycupMatch.HomeWorldScore = home.WorldScore; if (away == null) //轮空 { dailycupMatch.AwayManager = Guid.Empty; dailycupMatch.AwayName = ""; dailycupMatch.AwayScore = 0; dailycupMatch.HomeScore = 0; dailycupMatch.AwayLogo = ""; } else { try { home.MaxRound = round; away.MaxRound = round; home.Rank = _dailycup.Round - round + 1; away.Rank = _dailycup.Round - round + 1; var matchHome = new MatchManagerInfo(home.ManagerId, false, false); var matchAway = new MatchManagerInfo(away.ManagerId, false, false); var matchData = new BaseMatchData((int)EnumMatchType.Dailycup, dailycupMatch.Idx, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; matchData.NoDraw = true; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); MatchCore.CreateMatch(matchData); ////测试用 ------------ //matchData.ErrorCode = (int)MessageCode.Success; //matchData.Home.Score = 5; //matchData.Away.Score = 2; if (matchData.ErrorCode == (int)MessageCode.Success) { dailycupMatch.AwayManager = away.ManagerId; dailycupMatch.AwayName = away.ManagerName; dailycupMatch.AwayLevel = away.Level; dailycupMatch.AwayLogo = away.Logo; dailycupMatch.AwayPower = away.kpi; dailycupMatch.AwayWorldScore = away.WorldScore; dailycupMatch.HomeScore = matchData.Home.Score; dailycupMatch.AwayScore = matchData.Away.Score; if (matchData.Away.Score > matchData.Home.Score) { away.WinCount++; if (round == _dailycup.Round) { away.Rank = -1; } } else { home.WinCount++; if (round == _dailycup.Round) { home.Rank = -1; } } AddMatchStat(dailycupMatch); } else { dailycupMatch.AwayManager = Guid.Empty; dailycupMatch.AwayName = ""; dailycupMatch.AwayScore = 0; dailycupMatch.HomeScore = 0; dailycupMatch.AwayLogo = ""; SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2},code:{3}", round, home.Idx, away.Idx, matchData.ErrorCode)); return(dailycupMatch); } } catch (Exception ex) { SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2}", round, home.Idx, away.Idx)); throw ex; } } return(dailycupMatch); }