void RefreshOpponent(PlayerkillInfoEntity info, int kpi) { LogHelper.Insert("refresh opponent:" + info.ManagerId, LogType.Info); var opponents = CacheFactory.PlayerKillCache.GetOpponents(info.ManagerId, kpi); if (opponents != null) { info.Opponents = new List <PlayerKillOpponentEntity>(opponents.Count); foreach (var entity in opponents) { info.Opponents.Add(entity.Clone()); } } info.OpponentInfo = SerializationHelper.ToByte(info.Opponents); info.OpponentRefreshTime = DateTime.Now.AddHours(2); PlayerkillInfoMgr.Update(info); }
public PlayerkillInfoEntity InnerGetInfo(Guid managerId) { var info = PlayerkillInfoMgr.GetById(managerId); if (info == null) { info = new PlayerkillInfoEntity(); info.ManagerId = managerId; info.RecordDate = DateTime.Now.Date; info.RowTime = DateTime.Now; info.UpdateTime = DateTime.Now; info.RemainByTimes = 1000; info.RemainTimes = 0; info.LotteryMatchId = Guid.Empty; info.OpponentInfo = new byte[0]; info.OpponentRefreshTime = DateTime.Now; info.SpecialItemNumber = 0; PlayerkillInfoMgr.Insert(info); } else if (info.RecordDate != DateTime.Today) { info.RecordDate = DateTime.Today; info.RemainByTimes = 1000; info.RemainTimes = 0; info.DayWinTimes = 0; info.BuyTimes = 0; info.UpdateTime = DateTime.Now; info.DayPoint = 0; info.SpecialItemNumber = 0; PlayerkillInfoMgr.Update(info); } else { if (info.RemainTimes < 0) { info.RemainTimes = 0; } if (info.RemainByTimes < 0) { info.RemainByTimes = 0; } } return(info); }
/// <summary> /// GetById /// </summary> /// <param name="managerId">managerId</param> /// <returns>PlayerkillInfoEntity</returns> /// <remarks>2016/9/6 14:33:26</remarks> public PlayerkillInfoEntity GetById(System.Guid managerId) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_PlayerkillInfo_GetById"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, managerId); PlayerkillInfoEntity 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/9/6 14:33:26</remarks> public bool Update(PlayerkillInfoEntity entity, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_PlayerkillInfo_Update"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId); database.AddInParameter(commandWrapper, "@RemainTimes", DbType.Int32, entity.RemainTimes); database.AddInParameter(commandWrapper, "@RemainByTimes", DbType.Int32, entity.RemainByTimes); database.AddInParameter(commandWrapper, "@BuyTimes", DbType.Int32, entity.BuyTimes); database.AddInParameter(commandWrapper, "@DayWinTimes", DbType.Int32, entity.DayWinTimes); database.AddInParameter(commandWrapper, "@RecordDate", DbType.DateTime, entity.RecordDate); database.AddInParameter(commandWrapper, "@Win", DbType.Int32, entity.Win); database.AddInParameter(commandWrapper, "@Lose", DbType.Int32, entity.Lose); database.AddInParameter(commandWrapper, "@Draw", DbType.Int32, entity.Draw); database.AddInParameter(commandWrapper, "@LotteryMatchId", DbType.Guid, entity.LotteryMatchId); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@UpdateTime", DbType.DateTime, entity.UpdateTime); database.AddInParameter(commandWrapper, "@OpponentInfo", DbType.Binary, entity.OpponentInfo); database.AddInParameter(commandWrapper, "@OpponentRefreshTime", DbType.DateTime, entity.OpponentRefreshTime); database.AddInParameter(commandWrapper, "@DayPoint", DbType.Int32, entity.DayPoint); database.AddInParameter(commandWrapper, "@SpecialItemNumber", DbType.Int32, entity.SpecialItemNumber); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.ManagerId = (System.Guid)database.GetParameterValue(commandWrapper, "@ManagerId"); return(Convert.ToBoolean(results)); }
/// <summary> /// 将IDataReader的当前记录读取到PlayerkillInfoEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public PlayerkillInfoEntity LoadSingleRow(IDataReader reader) { var obj = new PlayerkillInfoEntity(); obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.RemainTimes = (System.Int32)reader["RemainTimes"]; obj.RemainByTimes = (System.Int32)reader["RemainByTimes"]; obj.BuyTimes = (System.Int32)reader["BuyTimes"]; obj.DayWinTimes = (System.Int32)reader["DayWinTimes"]; obj.RecordDate = (System.DateTime)reader["RecordDate"]; obj.Win = (System.Int32)reader["Win"]; obj.Lose = (System.Int32)reader["Lose"]; obj.Draw = (System.Int32)reader["Draw"]; obj.LotteryMatchId = (System.Guid)reader["LotteryMatchId"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.UpdateTime = (System.DateTime)reader["UpdateTime"]; obj.OpponentInfo = (System.Byte[])reader["OpponentInfo"]; obj.OpponentRefreshTime = (System.DateTime)reader["OpponentRefreshTime"]; obj.DayPoint = (System.Int32)reader["DayPoint"]; obj.SpecialItemNumber = (System.Int32)reader["SpecialItemNumber"]; return(obj); }
MessageCode Tran_SaveMatch(DbTransaction transaction, NbManagerEntity manager, NbManagerextraEntity managerex, BaseMatchData pkmatchData, Guid lotteryMatchId, int win, int lose, int draw, int prizeExp, int prizeCoin, int prizeItemCode, string prizeItemString , bool isrevenge, long revengeRecordId, ref long outRevengeRecordId, PlayerkillInfoEntity info, int prizeItemCount) { if (prizeCoin > 0 || prizeExp > 0) { if (!ManagerUtil.SaveManagerData(manager, managerex, transaction)) { return(MessageCode.NbUpdateFail); } else { ManagerUtil.SaveManagerAfter(manager, managerex, transaction); } if (!NbManagerextraMgr.Update(managerex, transaction)) { return(MessageCode.NbUpdateFail); } } PlayerkillInfoMgr.Update(info); PlayerkillInfoMgr.SaveFightResult(pkmatchData.Home.ManagerId, manager.Logo, pkmatchData.Away.ManagerId, lotteryMatchId, win, lose, draw, DateTime.Now, pkmatchData.MatchId, pkmatchData.Home.Name, pkmatchData.Away.Name, pkmatchData.Home.Score, pkmatchData.Away.Score, prizeExp, prizeCoin, prizeItemCode , prizeItemString, isrevenge, revengeRecordId, prizeItemCount, ref outRevengeRecordId, transaction); return(MessageCode.Success); }
MessageCode SaveMatch(NbManagerEntity manager, NbManagerextraEntity managerex, BaseMatchData pkmatchData, Guid lotteryMatchId, int win, int lose, int draw, int prizeExp, int prizeCoin, int prizeItemCode, string prizeItemString , bool isrevenge, long revengeRecordId, ref long outRevengeRecordId, PlayerkillInfoEntity info, int pointCount) { if (manager == null) { return(MessageCode.NbUpdateFail); } try { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messageCode = Tran_SaveMatch(transactionManager.TransactionObject, manager, managerex, pkmatchData, lotteryMatchId, win, lose, draw, prizeExp, prizeCoin, prizeItemCode, prizeItemString , isrevenge, revengeRecordId, ref outRevengeRecordId, info, pointCount); if (messageCode == ShareUtil.SuccessCode) { transactionManager.Commit(); } else { transactionManager.Rollback(); } return(messageCode); } } catch (Exception ex) { SystemlogMgr.Error("SavePlayerKillMatch", ex); return(MessageCode.Exception); } }
public MessageCode MatchCallback(BaseMatchData matchData, long revengeRecordId, PlayerKillOpponentEntity awayOpp, PlayerkillInfoEntity info) { var pkmatchData = matchData; if (pkmatchData == null || pkmatchData.ErrorCode != (int)MessageCode.Success) { return(MessageCode.MatchCreateFail); } bool isrevenge = false; Guid lotteryMatchId = Guid.Empty; var winType = ShareUtil.CalWinType(pkmatchData.Home.Score, pkmatchData.Away.Score); int win = 0; int lose = 0; int draw = 0; int prizeExp = 0; int prizeCoin = 0; if (!isrevenge) { if (winType == EnumWinType.Win) { win = 1; } if (winType == EnumWinType.Lose) { lose = 1; } if (winType == EnumWinType.Draw) { draw = 1; } var prize = CacheFactory.PlayerKillCache.GetPrize(winType); prizeCoin = prize.Coin; prizeExp = prize.Exp; } int prizeItemCode = 0; string prizeItemString = ""; var manager = ManagerCore.Instance.GetManager(pkmatchData.Home.ManagerId); var managerex = ManagerCore.Instance.GetManagerExtra(pkmatchData.Home.ManagerId); var subtype = 1; if (manager.Level % 10 == 0) { subtype = manager.Level / 10; } else { subtype = manager.Level / 10 + 1; } int matchTimes = 0; PlayerkillInfoMgr.GetMatchTimes(manager.Idx, ref matchTimes); //if (winType == EnumWinType.Win) //{ var lotteryEntity = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.PlayerKill, subtype); int pointCount = 0; if (lotteryEntity != null) { //第一场友谊赛固定获得5钻石 if (matchTimes == 0) { prizeItemCode = 810001; pointCount = 5; lotteryMatchId = pkmatchData.MatchId; } else { if (winType == EnumWinType.Win) { prizeItemCode = lotteryEntity.PrizeItemCode; prizeItemString = lotteryEntity.ItemString; if (prizeItemCode == 810001) { var pointConfig = CacheFactory.PlayerKillCache.GetPointConfig(manager.VipLevel); if (pointConfig != null && (info.DayPoint + pointCount) < pointConfig.TotalPoint) { pointCount = pointConfig.PrizePoint; int point = pointCount; //欧洲杯狂欢 ActivityExThread.Instance.EuropeCarnival(5, ref point); info.DayPoint = info.DayPoint + point; info.DayPoint = info.DayPoint > pointConfig.TotalPoint ? pointConfig.TotalPoint : info.DayPoint; } else { prizeItemCode = 910001; pointCount = 5; } } else if (prizeItemCode == 910001) { prizeItemCode = 910001; pointCount = 5; } var itemcode = ActivityExThread.Instance.SummerGiftBag(4); if (itemcode > 0) { prizeItemCode = itemcode; } else { itemcode = ActivityExThread.Instance.MidAutumnActivity(4, info.SpecialItemNumber); if (itemcode > 0) { info.SpecialItemNumber++; prizeItemCode = itemcode; } } lotteryMatchId = pkmatchData.MatchId; } } } //} //LogHelper.Insert("友谊赛比赛结果处理请求:比赛id"+lotteryMatchId+",ManagerId:" + pkmatchData.Home.ManagerId.ToString() + " ,对手Id:" + pkmatchData.Away.ManagerId.ToString(), LogType.Info); double totalPlusRate = 0; //是否有vip效果 var vipRate = CacheFactory.VipdicCache.GetEffectValue(manager.VipLevel, EnumVipEffect.PkOrLeagueExpPlus); totalPlusRate += vipRate / 100.00; //是否有增加经验的Buff var buffExp = BuffPoolCore.Instance().GetBuffValue(manager.Idx, EnumBuffCode.PkMatchExp, true, false); NbManagerbuffpoolEntity buffExpEntity = null; if (buffExp != null) { if (buffExp.SrcList != null && buffExp.SrcList.Count > 0) { buffExpEntity = NbManagerbuffpoolMgr.GetById(buffExp.SrcList[0].Idx); if (buffExpEntity != null && buffExpEntity.RemainTimes > 0) { totalPlusRate += buffExp.Percent; } } } prizeExp = (int)(prizeExp * (1 + totalPlusRate)); if (matchData.Home.Score > matchData.Away.Score) { awayOpp.HasWin = true; info.OpponentInfo = SerializationHelper.ToByte(info.Opponents); //PlayerkillInfoMgr.Update(info); } //欧洲杯狂欢 ActivityExThread.Instance.EuropeCarnival(1, ref prizeExp); LogHelper.Insert(string.Format("revengeId:{0},score1:{1},score2:{2},haswin:{3}", revengeRecordId, matchData.Home.Score, matchData.Away.Score, awayOpp.HasWin), LogType.Info); OnlineCore.Instance.CalIndulgePrize(manager, ref prizeExp, ref prizeCoin); ManagerUtil.AddManagerData(manager, prizeExp, prizeCoin, 0, EnumCoinChargeSourceType.PlayerKillPrize, pkmatchData.MatchId.ToString()); long outRevengeRecordId = 0; //扣除行动力 var code = ManagerCore.Instance.SubStamina(managerex, _pkStamina, manager.Level, manager.VipLevel); if (code != MessageCode.Success) { return(code); } code = SaveMatch(manager, managerex, pkmatchData, lotteryMatchId, win, lose, draw, prizeExp, prizeCoin, prizeItemCode, prizeItemString, isrevenge, revengeRecordId, ref outRevengeRecordId, info, pointCount); //统计使用的行动力 StatisticKpiMgr.UpdateSame(ShareUtil.ZoneId, DateTime.Now.Date, 0, _pkStamina, 0, 0); if (code == MessageCode.Success) { //更新祝福Buff剩余场次数 if (buffExpEntity != null && buffExpEntity.RemainTimes > 0) { buffExpEntity.RemainTimes--; NbManagerbuffpoolMgr.Update(buffExpEntity); } //记录比赛数据 MatchCore.SaveMatchStat(pkmatchData.Home.ManagerId, EnumMatchType.PlayerKill, pkmatchData.Home.Score, pkmatchData.Away.Score, pkmatchData.Home.Score); //记录成就相关数据 AchievementTaskCore.Instance.UpdatePkMatchGoals(manager.Idx, pkmatchData.Home.Score); TaskHandler.Instance.PkOrFriendMatchCount(manager.Idx); var popList = ManagerUtil.SaveManagerAfter(manager, false); var taskPop = TaskHandler.Instance.PlayerKillFight(manager.Idx, (int)winType); if (matchData.HasTask) { //var taskPop = TaskHandler.Instance.PlayerKillFight(manager.Idx, (int)winType); if (taskPop != null && taskPop.Count > 0) { if (popList == null) { popList = taskPop; } else { popList.AddRange(taskPop); } } } MemcachedFactory.MatchPopClient.Set(matchData.MatchId, popList); } return(code); }
public static bool Insert(PlayerkillInfoEntity playerkillInfoEntity, DbTransaction trans = null, string zoneId = "") { var provider = new PlayerkillInfoProvider(zoneId); return(provider.Insert(playerkillInfoEntity, trans)); }