Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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));
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        public static bool Insert(PlayerkillInfoEntity playerkillInfoEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new PlayerkillInfoProvider(zoneId);

            return(provider.Insert(playerkillInfoEntity, trans));
        }