public MessageCode SaveWincountPrize(NbManagerEntity manager, LeagueWincountrecordEntity leagueWincountRecord, ItemPackageFrame package, int point, int coin) { try { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetConnectionString(EnumDbType.Main))) { transactionManager.BeginTransaction(); var messageCode = Tran_SaveWincountPrizePrize(transactionManager.TransactionObject, manager, leagueWincountRecord, package, point, coin); if (messageCode == MessageCode.Success) { transactionManager.Commit(); } else { transactionManager.Rollback(); } return(messageCode); } } catch (Exception ex) { SystemlogMgr.ErrorByZone("SavePrize", ex); return(MessageCode.Exception); } }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>LeagueWincountrecordEntity</returns> /// <remarks>2016/6/17 10:32:30</remarks> public LeagueWincountrecordEntity GetById(System.Int32 idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_LeagueWincountrecord_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx); LeagueWincountrecordEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// 将IDataReader的当前记录读取到LeagueWincountrecordEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public LeagueWincountrecordEntity LoadSingleRow(IDataReader reader) { var obj = new LeagueWincountrecordEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.LeagueId = (System.Int32)reader["LeagueId"]; obj.WinCount1 = (System.Int32)reader["WinCount1"]; obj.WinCount1Status = (System.Int32)reader["WinCount1Status"]; obj.WinCount2 = (System.Int32)reader["WinCount2"]; obj.WinCount2Status = (System.Int32)reader["WinCount2Status"]; obj.WinCount3 = (System.Int32)reader["WinCount3"]; obj.WinCount3Status = (System.Int32)reader["WinCount3Status"]; obj.MaxWinCount = (System.Int32)reader["MaxWinCount"]; obj.UpdateTime = (System.DateTime)reader["UpdateTime"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.PrizeDate = (System.DateTime)reader["PrizeDate"]; obj.PrizeStep = (System.String)reader["PrizeStep"]; return(obj); }
/// <summary> /// GetRecord /// </summary> /// <param name="managerId">managerId</param> /// <param name="leagueId">leagueId</param> /// <returns>LeagueWincountrecordEntity</returns> /// <remarks>2016/6/17 10:32:30</remarks> public LeagueWincountrecordEntity GetRecord(System.Guid managerId, System.Int32 leagueId) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("C_LeagueWincountRecord_GetRecord"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, managerId); database.AddInParameter(commandWrapper, "@LeagueId", DbType.Int32, leagueId); LeagueWincountrecordEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016/6/17 10:32:30</remarks> public bool Update(LeagueWincountrecordEntity entity, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_LeagueWincountrecord_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId); database.AddInParameter(commandWrapper, "@LeagueId", DbType.Int32, entity.LeagueId); database.AddInParameter(commandWrapper, "@WinCount1", DbType.Int32, entity.WinCount1); database.AddInParameter(commandWrapper, "@WinCount1Status", DbType.Int32, entity.WinCount1Status); database.AddInParameter(commandWrapper, "@WinCount2", DbType.Int32, entity.WinCount2); database.AddInParameter(commandWrapper, "@WinCount2Status", DbType.Int32, entity.WinCount2Status); database.AddInParameter(commandWrapper, "@WinCount3", DbType.Int32, entity.WinCount3); database.AddInParameter(commandWrapper, "@WinCount3Status", DbType.Int32, entity.WinCount3Status); database.AddInParameter(commandWrapper, "@MaxWinCount", DbType.Int32, entity.MaxWinCount); database.AddInParameter(commandWrapper, "@UpdateTime", DbType.DateTime, entity.UpdateTime); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@PrizeDate", DbType.Date, entity.PrizeDate); database.AddInParameter(commandWrapper, "@PrizeStep", DbType.AnsiString, entity.PrizeStep); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.Idx = (System.Int32)database.GetParameterValue(commandWrapper, "@Idx"); return(Convert.ToBoolean(results)); }
public static bool Update(LeagueWincountrecordEntity leagueWincountrecordEntity, DbTransaction trans = null, string zoneId = "") { var provider = new LeagueWincountrecordProvider(zoneId); return(provider.Update(leagueWincountrecordEntity, trans)); }
private MessageCode SaveMatchConfirm(NbManagerEntity manager, ItemPackageFrame package, LeagueRecordEntity leagueRecordInfo, LeagueManagerrecordEntity nextManagerRecord, LeagueManagerrecordEntity leagueManagerRecord, int point, bool isUpdatenextManagerRecord, LaegueManagerinfoEntity leagueManagerInfo, LeagueFightMapFrame fightMap, NbManagerextraEntity managerExtra, LeagueWincountrecordEntity leagueWinCount, DbTransaction trans) { if (!ManagerUtil.SaveManagerData(manager, managerExtra, trans)) { return(MessageCode.NbUpdateFail); } if (!NbManagerextraMgr.Update(managerExtra, trans)) { return(MessageCode.NbUpdateFail); } if (package != null) { if (!package.Save(trans)) { return(MessageCode.NbUpdateFail); } package.Shadow.Save(); } if (!LeagueRecordMgr.Update(leagueRecordInfo, trans)) { return(MessageCode.NbUpdateFail); } if (isUpdatenextManagerRecord) { if (nextManagerRecord != null) { if (!LeagueManagerrecordMgr.Update(nextManagerRecord, trans)) { return(MessageCode.NbUpdateFail); } } } if (!LaegueManagerinfoMgr.Update(leagueManagerInfo, trans)) { return(MessageCode.NbUpdateFail); } if (!LeagueManagerrecordMgr.Update(leagueManagerRecord, trans)) { return(MessageCode.NbUpdateFail); } if (point > 0) { var code = PayCore.Instance.AddBonus(manager.Idx, point, EnumChargeSourceType.LeaguePrize, ShareUtil.GenerateComb().ToString(), trans); return(code); } if (!fightMap.SaveFIghtMap(trans)) { return(MessageCode.NbUpdateFail); } if (!LeagueWincountrecordMgr.Update(leagueWinCount, trans)) { return(MessageCode.NbUpdateFail); } return(MessageCode.Success); }
/// <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); }
private bool UpdateWincountRecord(Guid managerId, int leagueId, int starNumber, ref LeagueWincountrecordEntity leagueWincountRecord) { if (leagueWincountRecord == null) { leagueWincountRecord = LeagueWincountrecordMgr.GetRecord(managerId, leagueId); } leagueWincountRecord.MaxWinCount += starNumber; var winConfig = CacheFactory.LeagueCache.GetLeagueStar(leagueId); var prizeStatus = leagueWincountRecord.PrizeStep.Split(','); for (int i = 0; i < winConfig.Count; i++) { if (prizeStatus.Length < i + 1) { prizeStatus[i] = "0"; } if (leagueWincountRecord.MaxWinCount >= winConfig[i].StarNumber) { if (prizeStatus[i] == "0") { prizeStatus[i] = "1"; } } } leagueWincountRecord.PrizeStep = string.Join(",", prizeStatus); leagueWincountRecord.UpdateTime = DateTime.Now; return(true); }
/// <summary> /// 联赛打比赛 /// </summary> /// <param name="leagueId"></param> /// <param name="managerId"></param> /// <returns></returns> public LeagueFightResultResponse Fight(Guid managerId, int leagueId) { var manager = ManagerCore.Instance.GetManager(managerId); if (manager == null) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.NbParameterError)); } var managerExtra = ManagerCore.Instance.GetManagerExtra(managerId); if (managerExtra == null) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.NbParameterError)); } if (managerExtra.Stamina < 5) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.LeagueStaminaNotEnough)); } var currectLeague = LeagueManagerrecordMgr.GetManagerMarkInfo(managerId, leagueId); if (currectLeague == null) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.NbParameterError)); } var leagueRecordInfo = LeagueRecordMgr.GetById(currectLeague.LeagueRecordId); if (leagueRecordInfo == null) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.NbParameterError)); } if (leagueRecordInfo.Schedule > currectLeague.MaxWheelNumber) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.LeagueHavePass)); } //扣除行动力 var code = ManagerCore.Instance.SubStamina(managerExtra, 5, manager.Level, manager.VipLevel); if (code != MessageCode.Success) { return(ResponseHelper.Create <LeagueFightResultResponse>(code)); } //遍历对阵 int botStatus = 0;//0=主队和客队都是NPC 1 我是主队 2 我是客队 var npchome = Guid.Empty; var npcaway = Guid.Empty; var matchId = ShareUtil.GenerateComb(); //获取对阵记录 var fightMap = new LeagueFightMapFrame(managerId); //获取对阵 var pairList = CreateFightMap(currectLeague.FightDicId, leagueRecordInfo.Schedule); BaseMatchData managerMatch = null; foreach (var item in pairList) { botStatus = 0; if (item.HomeId == 0) { botStatus = 1; npchome = managerId; npcaway = CacheFactory.LeagueCache.GetLeagueNpcGuid(leagueId, item.AwayId); } else if (item.AwayId == 0) { botStatus = 2; npchome = CacheFactory.LeagueCache.GetLeagueNpcGuid(leagueId, item.HomeId); npcaway = managerId; } else { npchome = CacheFactory.LeagueCache.GetLeagueNpcGuid(leagueId, item.HomeId); npcaway = CacheFactory.LeagueCache.GetLeagueNpcGuid(leagueId, item.AwayId); } SingleMatch(leagueRecordInfo.Schedule, npchome, npcaway, item.HomeId, item.AwayId, leagueRecordInfo.LaegueId, matchId, botStatus, fightMap, ref managerMatch); } if (managerMatch == null) { return(ResponseHelper.Create <LeagueFightResultResponse>(MessageCode.MatchCreateFail)); } LeagueWincountrecordEntity leagueWincountRecord = null; //记录比赛数据 if (managerMatch.Away.IsBot) { MatchCore.SaveMatchStat(managerId, EnumMatchType.League, managerMatch.Home.Score, managerMatch.Away.Score, managerMatch.Home.Score); } else { MatchCore.SaveMatchStat(managerId, EnumMatchType.League, managerMatch.Away.Score, managerMatch.Home.Score, managerMatch.Away.Score); } var response = ResponseHelper.CreateSuccess <LeagueFightResultResponse>(); response.Data = new LeagueFightResult { HomeGoals = managerMatch.Home.Score, AwayGoals = managerMatch.Away.Score, PrizeList = new List <LeaguePrizeEntity>() }; int star = 0; if (managerMatch.Home.Score > managerMatch.Away.Score) { if (managerMatch.Home.ManagerId == managerId) { star = managerMatch.Home.Score - managerMatch.Away.Score; response.Data.Result = 0; } else { response.Data.Result = 2; } } else if (managerMatch.Home.Score == managerMatch.Away.Score) { response.Data.Result = 1; } else { if (managerMatch.Away.ManagerId == managerId) { star = managerMatch.Away.Score - managerMatch.Home.Score; response.Data.Result = 0; } else { response.Data.Result = 2; } } var winType = CalWinType(response.Data.Result); LaegueManagerinfoEntity leagueManagerInfo = null; if (winType == EnumWinType.Win) { leagueManagerInfo = LaegueManagerinfoMgr.GetById(managerId); if (leagueManagerInfo.DailyWinUpdateTime.Date != DateTime.Now.Date) { leagueManagerInfo.DailyWinCount = 1; } else { leagueManagerInfo.DailyWinCount++; } leagueManagerInfo.DailyWinUpdateTime = DateTime.Now; } //更新胜场奖励 star = star > 3 ? 3 : star; star = star < 0 ? 0 : star; UpdateWincountRecord(managerId, leagueId, star, ref leagueWincountRecord); currectLeague.MatchId = matchId; currectLeague.UpdateTime = DateTime.Now; var result = MatchConfirm(manager, leagueRecordInfo, currectLeague, leagueManagerInfo, managerMatch, fightMap, managerExtra, leagueWincountRecord); if (result.Code != (int)MessageCode.Success) { return(ResponseHelper.Create <LeagueFightResultResponse>(result.Code)); } var pop = TaskHandler.Instance.LeagueFight(managerId, (int)winType); if (pop != null) { MemcachedFactory.MatchPopClient.Set(managerId, pop); } response.Data.StarNumber = star; response.Data.Stamina = managerExtra.Stamina; response.Data.PrizeList = result.Data.PrizeList; response.Data.VipExp = result.Data.VipExp; response.Data.MatchId = managerMatch.MatchId; return(response); }
private MessageCode Tran_SaveWincountPrizePrize(DbTransaction transaction, NbManagerEntity manager, LeagueWincountrecordEntity leagueWincountRecord, ItemPackageFrame package, int point, int coin) { if (point > 0) { var code = PayCore.Instance.AddBonus(leagueWincountRecord.ManagerId, point, EnumChargeSourceType.LeaguePrize, ShareUtil.GenerateComb().ToString(), transaction); if (code != MessageCode.Success) { return(code); } } else if (coin > 0) { var code = ManagerCore.Instance.AddCoin(manager, coin, EnumCoinChargeSourceType.LeaguePrize, ShareUtil.GenerateComb().ToString(), transaction); if (code != MessageCode.Success) { return(code); } } else { if (!package.Save(transaction)) { return(MessageCode.FailUpdate); } package.Shadow.Save(); } if (!LeagueWincountrecordMgr.Update(leagueWincountRecord, transaction)) { return(MessageCode.FailUpdate); } return(MessageCode.Success); }