/// <summary> /// 领取赛季奖励 /// </summary> /// <param name="managerId"></param> /// <param name="leagueRecordId"></param> /// <returns></returns> public LeaguePrizeResponse GetRankPrize(Guid managerId, Guid leagueRecordId) { var leagueRecordInfo = LeagueRecordMgr.GetById(leagueRecordId); if (leagueRecordInfo == null) { return(ResponseHelper.Create <LeaguePrizeResponse>(MessageCode.NbParameterError)); } var npcCount = CacheFactory.LeagueCache.GetTeamCount(leagueRecordInfo.LaegueId); int maxWheel = npcCount * 2; //最后一轮 if (leagueRecordInfo.Schedule <= maxWheel) { return(ResponseHelper.Create <LeaguePrizeResponse>(MessageCode.LeagueNoEnd)); } //玩家记录 var leagueManagerRecord = LeagueManagerrecordMgr.GetManagerMarkInfo(managerId, leagueRecordInfo.LaegueId); if (leagueRecordInfo.PrizeTime == DateTime.Today) { return(ResponseHelper.Create <LeaguePrizeResponse>(MessageCode.LeaguePrizeReceivedToday)); } if (leagueRecordInfo.Rank == 1) //冠军奖励 { if (leagueManagerRecord.SendFirstPassPrize) //首次通关才有奖励 { return(ResponseHelper.Create <LeaguePrizeResponse>(MessageCode.LeaguePrizeReceivedToday)); } leagueManagerRecord.SendFirstPassPrize = true; //排名奖励 var rankPrizes = LeagueCache.Instance.GetLeaguePrize(leagueRecordInfo.LaegueId, 5); int exp = 0; int coin = 0; int score = 0; int vipExp = 0; ItemPackageFrame package = null; int point = 0; var manager = ManagerCore.Instance.GetManager(managerId); SendPrize(rankPrizes, manager, leagueRecordInfo.LaegueId, ref exp, ref coin, ref score, ref package, ref point, ref vipExp); leagueRecordInfo.IsSend = true; leagueRecordInfo.Schedule = -1; leagueRecordInfo.PrizeTime = DateTime.Today; leagueRecordInfo.UpdateTime = DateTime.Now; leagueManagerRecord.Score += score; var leagueManager = LaegueManagerinfoMgr.GetById(managerId); leagueManager.SumScore += score; ManagerUtil.AddManagerData(manager, exp, coin, 0, EnumCoinChargeSourceType.LeaguePrize, ShareUtil.CreateSequential().ToString()); leagueManagerRecord.LastPrizeLeagueRecordId = new Guid(); using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetConnectionString(EnumDbType.Main))) { transactionManager.BeginTransaction(); var messageCode = SaveRankPrize(manager, leagueRecordInfo, leagueManagerRecord, leagueManager, package, point, transactionManager.TransactionObject); if (messageCode == MessageCode.Success) { transactionManager.Commit(); } else { transactionManager.Rollback(); return(ResponseHelper.Create <LeaguePrizeResponse>(messageCode)); } } //leagueManagerRecord.LastPrizeLeagueRecordId = leagueManagerRecord.LeagueRecordId; //奖励结果 var response = ResponseHelper.CreateSuccess <LeaguePrizeResponse>(); response.Data = new LeaguePrizes { PrizeList = new List <LeaguePrizeEntity>() }; foreach (var prize in rankPrizes) { var entity = new LeaguePrizeEntity(); entity.PrizeType = prize.PrizeType; entity.ItemCode = prize.PrizeType; entity.Count = prize.Count; response.Data.PrizeList.Add(entity); } response.Data.VipExp = vipExp; return(response); } return(ResponseHelper.Create <LeaguePrizeResponse>(MessageCode.LeagueNotChampion)); }
/// <summary> /// 领取好友成长奖励 /// </summary> /// <param name="account"></param> /// <param name="managerId"></param> /// <returns></returns> public GrowUpPrizeResponse GrowUpPrize(string account, Guid managerId) { GrowUpPrizeResponse response = new GrowUpPrizeResponse(); response.Data = new GrowUpPrize(); try { var manager = ManagerCore.Instance.GetManager(managerId); if (manager == null) { return(ResponseHelper.Create <GrowUpPrizeResponse>((int)MessageCode.AdMissManager)); } var list = GetFrindInviteList(account); if (list == null) { return(ResponseHelper.Create <GrowUpPrizeResponse>((int)MessageCode.ActiveNotPrize)); } FriendinvitePrizerecordEntity record = new FriendinvitePrizerecordEntity(); int mayPrize = 0; foreach (var item in list) { record.PrizeInfo += item.ByAccount + ","; mayPrize += item.MayPrize; } record.PrizeInfo = record.PrizeInfo.Substring(0, record.PrizeInfo.Length - 1); if (mayPrize <= 0) { return(ResponseHelper.Create <GrowUpPrizeResponse>((int)MessageCode.ActiveNotPrize)); } record.Account = account; record.UpdateTime = DateTime.Now; record.PrizeType = 1; record.PrizeString = mayPrize.ToString(); using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messCode = PayCore.Instance.AddBonus(managerId, mayPrize, EnumChargeSourceType.FriendInvite, ShareUtil.CreateSequential().ToString(), transactionManager.TransactionObject); if (messCode != MessageCode.Success) { transactionManager.Rollback(); return(ResponseHelper.Create <GrowUpPrizeResponse>((int)messCode)); } if (!FriendinviteMgr.SavePrize(account, transactionManager.TransactionObject)) { transactionManager.Rollback(); return(ResponseHelper.Create <GrowUpPrizeResponse>((int)MessageCode.NbParameterError)); } if (!FriendinvitePrizerecordMgr.Insert(record, transactionManager.TransactionObject)) { transactionManager.Rollback(); return(ResponseHelper.Create <GrowUpPrizeResponse>((int)MessageCode.NbParameterError)); } transactionManager.Commit(); response.Data.Point = mayPrize; response.Data.SumPoint = PayCore.Instance.GetPoint(managerId);; } } catch (Exception ex) { SystemlogMgr.Error("领取好友邀请奖励", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }
/// <summary> /// 确认比赛结果 /// </summary> /// <param name="manager"></param> /// <param name="leagueRecordInfo"></param> /// <returns></returns> public LeaguePrizeResponse MatchConfirm(NbManagerEntity manager, LeagueRecordEntity leagueRecordInfo, LeagueManagerrecordEntity leagueManagerRecord, LaegueManagerinfoEntity lagueManagerInfo, BaseMatchData matchData, LeagueFightMapFrame fightMap, NbManagerextraEntity managerExtra, LeagueWincountrecordEntity leagueWinCount) { //发放玩家单场比赛奖励--------------------------------------------------- int winType = 0; if (matchData.Home.ManagerId == manager.Idx) //玩家为主队 { if (matchData.Home.Score > matchData.Away.Score) //主队胜 { winType = 1; } else if (matchData.Home.Score == matchData.Away.Score) //平 { winType = 2; } else //负 { winType = 3; } } else //玩家为客队 { if (matchData.Home.Score < matchData.Away.Score)//客队胜 { winType = 1; } else if (matchData.Home.Score == matchData.Away.Score) //平 { winType = 2; } else//负 { winType = 3; } } var managerPrizes = LeagueCache.Instance.GetLeaguePrize(leagueRecordInfo.LaegueId, winType); int exp = 0; int coin = 0; int score = 0; ItemPackageFrame package = null; int point = 0; int vipExp = 0; SendPrize(managerPrizes, manager, leagueRecordInfo.LaegueId, ref exp, ref coin, ref score, ref package, ref point, ref vipExp); ManagerUtil.AddManagerData(manager, exp, coin, 0, EnumCoinChargeSourceType.LeaguePrize, ShareUtil.CreateSequential().ToString()); if (lagueManagerInfo == null) { lagueManagerInfo = LaegueManagerinfoMgr.GetById(manager.Idx); } lagueManagerInfo.SumScore += score; leagueManagerRecord.MatchId = new Guid(); leagueManagerRecord.UpdateTime = DateTime.Now; bool isLastWheel = false; leagueManagerRecord.Score += score; //本联赛最后一轮 if (leagueRecordInfo.Schedule >= leagueManagerRecord.MaxWheelNumber) { isLastWheel = true; leagueManagerRecord.IsPass = true; leagueManagerRecord.PassNumber += 1; } int myRank = 0; int myScore = 0; //更新排名 fightMap.UpdateRankList(); fightMap.GetRank(ref myRank, ref myScore); leagueRecordInfo.Score += score; leagueRecordInfo.Rank = myRank; //---------------------------- leagueRecordInfo.Schedule++; leagueRecordInfo.IsSend = true; leagueRecordInfo.UpdateTime = DateTime.Now; //本联赛最后一轮,如果是冠军解锁下一轮 bool isUpdatenextManagerRecord = false; LeagueManagerrecordEntity nextManagerRecord = null; if (isLastWheel) { if (leagueRecordInfo.Rank == 1) { leagueManagerRecord.LastPrizeLeagueRecordId = leagueManagerRecord.LeagueRecordId; if (leagueRecordInfo.LaegueId != 8) { nextManagerRecord = LeagueManagerrecordMgr.GetManagerMarkInfo(manager.Idx, leagueRecordInfo.LaegueId + 1); nextManagerRecord.IsLock = false; isUpdatenextManagerRecord = true; } //记录成就相关数据 AchievementTaskCore.Instance.UpdateLeagueScore(manager.Idx, leagueRecordInfo.LaegueId, myScore); TaskHandler.Instance.LeagueChampionScore(manager.Idx); } } using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetConnectionString(EnumDbType.Main))) { transactionManager.BeginTransaction(); var messageCode = SaveMatchConfirm(manager, package, leagueRecordInfo, nextManagerRecord, leagueManagerRecord, point, isUpdatenextManagerRecord, lagueManagerInfo, fightMap, managerExtra, leagueWinCount, transactionManager.TransactionObject); if (messageCode == MessageCode.Success) { transactionManager.Commit(); } else { transactionManager.Rollback(); return(ResponseHelper.Create <LeaguePrizeResponse>(messageCode)); } } //奖励结果 var response = ResponseHelper.CreateSuccess <LeaguePrizeResponse>(); response.Data = new LeaguePrizes { PrizeList = new List <LeaguePrizeEntity>() }; foreach (var prize in managerPrizes) { var entity = new LeaguePrizeEntity(); entity.PrizeType = prize.PrizeType; entity.ItemCode = prize.ItemCode; entity.Count = prize.Count; response.Data.PrizeList.Add(entity); } response.Data.VipExp = vipExp; return(response); }