/// <summary> /// /// </summary> /// <param name="matchData"></param> /// <param name="crowdMatch"></param> void Fight(BaseMatchData matchData, CrosscrowdMatchEntity crowdMatch) { try { MatchCore.CreateMatch(matchData); if (matchData.ErrorCode == (int)MessageCode.Success) { crowdMatch.HomeScore = matchData.Home.Score; crowdMatch.AwayScore = matchData.Away.Score; crowdMatch.HomeName = matchData.Home.Name; crowdMatch.AwayName = matchData.Away.Name; crowdMatch.Status = 0; SavePrize(crowdMatch); } MemcachedFactory.CrowdMatchClient.Set(crowdMatch.Idx, crowdMatch); matchData = null; crowdMatch = null; } catch (Exception ex) { SystemlogMgr.Error("CrossCrowdProcess-Fight", ex); } }
/// <summary> /// /// </summary> /// <param name="matchData"></param> /// <param name="laddermatch"></param> void Fight(BaseMatchData matchData, CrossladderMatchEntity laddermatch) { if (laddermatch.HomeIsBot && laddermatch.AwayIsBot) { laddermatch.HomeScore = 0; laddermatch.AwayScore = 0; laddermatch.Status = (int)EnumLadderStatus.End; //保存比赛 CrossladderMatchMgr.Insert(laddermatch); return; } else { try { MatchCore.CreateMatch(matchData); if (matchData.ErrorCode == (int)MessageCode.Success) { laddermatch.HomeScore = matchData.Home.Score; laddermatch.AwayScore = matchData.Away.Score; laddermatch.Status = (int)EnumLadderStatus.End; CalPrizePoint(laddermatch); int returnCode = -1; //保存比赛 CrossladderMatchMgr.SaveMatch(laddermatch.DomainId, laddermatch.LadderId, laddermatch.HomeId, laddermatch.AwayId, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeLogo, laddermatch.AwayLogo, laddermatch.HomeSiteId, laddermatch.AwaySiteId, laddermatch.HomeLadderScore, laddermatch.AwayLadderScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeCoin, laddermatch.AwayCoin, laddermatch.HomeExp, laddermatch.AwayExp, laddermatch.HomeIsBot, laddermatch.AwayIsBot, laddermatch.GroupIndex, laddermatch.PrizeHomeScore, laddermatch.PrizeAwayScore, laddermatch.RowTime, laddermatch.Idx, ref returnCode); if (!laddermatch.HomeIsBot) { WebServerHandler.AddManagerData(laddermatch.HomeId, laddermatch.HomeExp, laddermatch.HomeCoin, 0, laddermatch.HomeSiteId); MatchCore.SaveMatchStat(laddermatch.HomeId, EnumMatchType.CrossLadder, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.HomeSiteId); if (laddermatch.HomeIsHook) { CrossLadderManager.Instance.UpdateHookScore(laddermatch.HomeSiteId, laddermatch.HomeId, laddermatch.PrizeHomeScore, laddermatch.HomeScore > laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeCoin); } } if (!laddermatch.AwayIsBot) { WebServerHandler.AddManagerData(laddermatch.AwayId, laddermatch.AwayExp, laddermatch.AwayCoin, 0, laddermatch.AwaySiteId); MatchCore.SaveMatchStat(laddermatch.AwayId, EnumMatchType.CrossLadder, laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.AwaySiteId); if (laddermatch.AwayIsHook) { CrossLadderManager.Instance.UpdateHookScore(laddermatch.AwaySiteId, laddermatch.AwayId, laddermatch.PrizeAwayScore, laddermatch.AwayScore < laddermatch.HomeScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.AwayCoin); } } } MemcachedFactory.LadderMatchClient.Set(laddermatch.Idx, laddermatch); } catch (Exception ex) { SystemlogMgr.Error("CrossLadderProcess-Fight", ex); } } matchData = null; laddermatch = null; }
/// <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); }
/// <summary> /// /// </summary> /// <param name="matchData"></param> /// <param name="laddermatch"></param> private void Fight(BaseMatchData matchData, LadderMatchEntity laddermatch) { try { if (laddermatch.HomeIsBot && laddermatch.AwayIsBot) { laddermatch.HomeScore = 0; laddermatch.AwayScore = 0; laddermatch.Status = (int)EnumLadderStatus.End; //保存比赛 LadderMatchMgr.Insert(laddermatch); return; } else { MatchCore.CreateMatch(matchData); ////测试用 ------------ //matchData.ErrorCode = (int)MessageCode.Success; //matchData.Home.Score = 5; //matchData.Away.Score = 2; if (matchData.ErrorCode == (int)MessageCode.Success) { laddermatch.HomeScore = matchData.Home.Score; laddermatch.AwayScore = matchData.Away.Score; laddermatch.Status = (int)EnumLadderStatus.End; CalPrizePoint(laddermatch); int returnCode = -1; //保存比赛 LadderMatchMgr.SaveMatch(laddermatch.LadderId, laddermatch.HomeId, laddermatch.AwayId, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeLadderScore, laddermatch.AwayLadderScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeCoin, laddermatch.AwayCoin, laddermatch.HomeExp, laddermatch.AwayExp, laddermatch.HomeIsBot, laddermatch.AwayIsBot, laddermatch.GroupIndex, laddermatch.PrizeHomeScore, laddermatch.PrizeAwayScore, laddermatch.RowTime, laddermatch.Idx, ref returnCode); if (!laddermatch.HomeIsBot) { AddManagerData(laddermatch.HomeId, laddermatch.HomeExp, laddermatch.HomeCoin, 0, EnumCoinChargeSourceType.Ladder, laddermatch.Idx.ToString() + "_home"); } if (!laddermatch.AwayIsBot) { AddManagerData(laddermatch.AwayId, laddermatch.AwayExp, laddermatch.AwayCoin, 0, EnumCoinChargeSourceType.Ladder, laddermatch.Idx.ToString() + "_away"); } int homeWinType = (int)CalWinType(laddermatch.HomeScore, laddermatch.AwayScore); int awayWinType = (int)CalWinType(laddermatch.AwayScore, laddermatch.HomeScore); if (!laddermatch.HomeIsBot && homeWinType == (int)EnumWinType.Win) //胜场活动 { ActivityExThread.Instance.LadderDayPrize(laddermatch.HomeId); } if (!laddermatch.AwayIsBot && awayWinType == (int)EnumWinType.Win) //胜场活动 { ActivityExThread.Instance.LadderDayPrize(laddermatch.AwayId); } if (!laddermatch.HomeIsBot) { var homepop = TaskHandler.Instance.LadderFight(laddermatch.HomeId, homeWinType); if (homepop != null) { MemcachedFactory.MatchPopClient.Set(laddermatch.HomeId, homepop); } MatchCore.SaveMatchStat(laddermatch.HomeId, EnumMatchType.Ladder, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeScore); //ActivityExThread.Instance.Ladder(laddermatch.HomeId, laddermatch.HomeLadderScore + laddermatch.PrizeHomeScore, homeWinType); //Games.NBall.Core.Guild.GuildMessage.Instance().LadderActive(laddermatch.HomeId); //ActiveCore.Instance.AddActive(laddermatch.HomeId, EnumActiveType.Ladder, 1); //记录成就相关数据 AchievementTaskCore.Instance.UpdateLadderGoals(laddermatch.HomeId, laddermatch.HomeScore, (EnumWinType)homeWinType, laddermatch.HomeLadderScore + laddermatch.PrizeHomeScore); if (laddermatch.HomeIsHook) { LadderThread.Instance.UpdateHookScore(laddermatch.HomeId, laddermatch.PrizeHomeScore, laddermatch.HomeScore > laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeCoin); } } if (!laddermatch.AwayIsBot) { var awaypop = TaskHandler.Instance.LadderFight(laddermatch.AwayId, awayWinType); if (awaypop != null) { MemcachedFactory.MatchPopClient.Set(laddermatch.AwayId, awaypop); } MatchCore.SaveMatchStat(laddermatch.AwayId, EnumMatchType.Ladder, laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore); //ActivityExThread.Instance.Ladder(laddermatch.AwayId, laddermatch.AwayLadderScore + laddermatch.PrizeAwayScore, awayWinType); //Games.NBall.Core.Guild.GuildMessage.Instance().LadderActive(laddermatch.AwayId); //ActiveCore.Instance.AddActive(laddermatch.AwayId, EnumActiveType.Ladder, 1); //记录成就相关数据 AchievementTaskCore.Instance.UpdateLadderGoals(laddermatch.AwayId, laddermatch.AwayScore, (EnumWinType)awayWinType, laddermatch.AwayLadderScore + laddermatch.PrizeAwayScore); if (laddermatch.AwayIsHook) { LadderThread.Instance.UpdateHookScore(laddermatch.AwayId, laddermatch.PrizeAwayScore, laddermatch.AwayScore < laddermatch.HomeScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.AwayCoin); } } if (!laddermatch.HomeIsBot) { var manager = ManagerCore.Instance.GetManager(laddermatch.HomeId); if (manager != null) { int cd = LadderCore.Instance.LadderNotVipMatchCD; if (manager.VipLevel > 0) { cd = LadderCore.Instance.LadderVipMatchCD; } if (!LadderCore.Instance._ManagerMatchCD.ContainsKey(laddermatch.HomeId)) //加cd { LadderCore.Instance._ManagerMatchCD.TryAdd(laddermatch.HomeId, DateTime.Now.AddSeconds(cd)); } else { LadderCore.Instance._ManagerMatchCD[laddermatch.HomeId] = DateTime.Now.AddSeconds(cd); } } } if (!laddermatch.AwayIsBot) { var manager = ManagerCore.Instance.GetManager(laddermatch.AwayId); if (manager != null) { int cd = LadderCore.Instance.LadderNotVipMatchCD; if (manager.VipLevel > 0) { cd = LadderCore.Instance.LadderVipMatchCD; } if (!LadderCore.Instance._ManagerMatchCD.ContainsKey(laddermatch.AwayId)) //加cd { LadderCore.Instance._ManagerMatchCD.TryAdd(laddermatch.AwayId, DateTime.Now.AddSeconds(cd)); } else { LadderCore.Instance._ManagerMatchCD[laddermatch.AwayId] = DateTime.Now.AddSeconds(cd); } } } } MemcachedFactory.LadderMatchClient.Set <LadderMatchEntity>(laddermatch.Idx, laddermatch); } matchData = null; laddermatch = null; } catch (Exception ex) { SystemlogMgr.Error("天梯比赛", ex); } if (laddermatch != null) { MemcachedFactory.LadderMatchClient.Delete(laddermatch.Idx); var match = LadderMatchMgr.GetById(laddermatch.Idx); MemcachedFactory.LadderMatchClient.Set(laddermatch.Idx, match); } }
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); }