Exemple #1
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);
        }
Exemple #2
0
        public PlayerKillOpponentResponse GetOpponents(Guid managerId, string opponentName)
        {
            var info = InnerGetInfo(managerId);

            if (info == null)
            {
                return(ResponseHelper.InvalidParameter <PlayerKillOpponentResponse>("managerId"));
            }
            var manager = ManagerCore.Instance.GetManager(managerId, true);

            if (manager == null)
            {
                return(ResponseHelper.InvalidParameter <PlayerKillOpponentResponse>("managerId"));
            }

            if (manager.Coin < 200)
            {
                return(ResponseHelper.Create <PlayerKillOpponentResponse>(MessageCode.LackofCoin));
            }

            var response = ResponseHelper.CreateSuccess <PlayerKillOpponentResponse>();

            if (!string.IsNullOrEmpty(opponentName))
            {
                var opponent = PlayerkillInfoMgr.GetOpponentByName(opponentName, 1);
                if (opponent == null)
                {
                    return(ResponseHelper.Create <PlayerKillOpponentResponse>(MessageCode.MissManager));
                }
                else if (opponent.Level < _pkMinLevel)
                {
                    return(ResponseHelper.Create <PlayerKillOpponentResponse>(MessageCode.PlayerKillMinLevel));
                }
                PlayerKillOpponentListEntity opponentList = new PlayerKillOpponentListEntity();
                opponentList.Opponents = new List <PlayerKillOpponentEntity>(1);

                opponent.FormationId = TeammemberCore.Instance.GetSolution(opponent.ManagerId).FormationId;
                opponentList.Opponents.Add(opponent);
                response.Data = opponentList;
            }
            else
            {
                RefreshOpponent(info, manager.Kpi);
                response.Data           = new PlayerKillOpponentListEntity();
                response.Data.Opponents = info.Opponents;
            }
            if (response.Data != null && response.Data.Opponents.Count > 0)
            {
                //扣除金币
                ManagerCore.Instance.CostCoin(manager, 200, EnumCoinConsumeSourceType.PkMatchRefresh, ShareUtil.GenerateComb().ToString());
            }
            response.Data.OpponentRefreshTimeTick = ShareUtil.GetTimeTick(info.OpponentRefreshTime);
            return(response);
        }
Exemple #3
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);
        }
Exemple #4
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);
        }
Exemple #5
0
        void GetData(Dictionary <int, List <PlayerKillOpponentEntity> > opponentDic, List <int> mergeList, ref int minKey, ref int maxKey)
        {
            int noData = 0;

            for (int i = 4; i < 20; i++)
            {
                int minKpi = i * _baseKpi;
                int maxKpi = minKpi + _baseKpi;
                minKpi = 0;
                var list = PlayerkillInfoMgr.GetOpponents(minKpi, maxKpi, 0);
                if (list != null && list.Count > 0)
                {
                    if (list.Count < _opponentCount)
                    {
                        mergeList.Add(i);
                    }
                    if (minKey == 0)
                    {
                        minKey = i;
                    }
                    else if (maxKey < i)
                    {
                        maxKey = i;
                    }
                    opponentDic.Add(i, list);
                }
                else
                {
                    if (minKpi > 5000)
                    {
                        noData++;
                        if (noData > 2)
                        {
                            return;
                        }
                    }
                    else
                    {
                        mergeList.Add(i);
                    }
                }
            }
        }
Exemple #6
0
        //MessageCode Tran_SaveLottery(DbTransaction transaction, Guid matchId, Guid managerId, ItemPackageFrame package, MailBuilder mail, int lotteryRepeatCode)
        MessageCode Tran_SaveLottery(DbTransaction transaction, Guid matchId, Guid managerId, int lotteryRepeatCode, ItemPackageFrame package, MailBuilder mail, int point)
        {
            MessageCode msg = MessageCode.Success;

            if (point > 0)
            {
                msg = PayCore.Instance.AddBonus(managerId, point, EnumChargeSourceType.PkMatchPrize,
                                                ShareUtil.GenerateComb().ToString(), transaction);
                if (msg != MessageCode.Success)
                {
                    return(msg);
                }
            }
            int returnCode = -2;

            PlayerkillInfoMgr.LotterySave(matchId, managerId, lotteryRepeatCode, ref returnCode, transaction);
            if (returnCode != 0)
            {
                return(MessageCode.NbUpdateFail);
            }
            if (package != null)
            {
                if (!package.Save(transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
                package.Shadow.Save();
            }
            if (mail != null)
            {
                if (!mail.Save(transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }

            return(MessageCode.Success);
        }
Exemple #7
0
        /// <summary>
        /// 比赛抽卡
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="matchId"></param>
        /// <returns></returns>
        public TourLotteryResponse Lottery(Guid managerId, Guid matchId)
        {
            var pkMatch = PlayerkillMatchMgr.GetById(matchId);

            if (pkMatch == null || pkMatch.HomeId != managerId)
            {
                return(ResponseHelper.InvalidParameter <TourLotteryResponse>());
            }
            var pkInfo = PlayerkillInfoMgr.GetById(managerId);

            if (pkInfo == null || pkInfo.LotteryMatchId != matchId)
            {
                return(ResponseHelper.InvalidParameter <TourLotteryResponse>());
            }
            //var itemBinding = ShareUtil.GetItemBinding(EnumItemPrizeType.PlayerKillPrize, ManagerUtil.GetVipLevel(managerId));

            var itemBinding = true;

            //处理抽奖
            if (pkMatch.Status == -1)
            {
                var package = ItemCore.Instance.GetPackage(managerId, EnumTransactionType.FriendShip);

                var itemDic = CacheFactory.ItemsdicCache.GetItem(pkMatch.PrizeItemCode);
                if (itemDic == null)
                {
                    return(ResponseHelper.InvalidParameter <TourLotteryResponse>());
                }
                MailBuilder       mail = null;
                EquipmentProperty equipmentProperty = null;
                MessageCode       result            = MessageCode.Success;
                var itemCount = 1;
                int point     = 0;
                if (itemDic.ItemType == (int)EnumItemType.Equipment)
                {
                    equipmentProperty = CacheFactory.EquipmentCache.RandomEquipmentProperty(itemDic.LinkId);
                    result            = package.AddEquipment(pkMatch.PrizeItemCode, itemBinding, false, equipmentProperty);
                }
                else if (itemDic.ItemType == (int)EnumItemType.FriendshipPoint)//友情点
                {
                    itemCount = itemDic.FourthType;
                    var manager = ManagerCore.Instance.GetManager(managerId);
                    ManagerCore.Instance.UpdateFriendShipPoint(manager, itemDic.FourthType, EnumActionType.Add);
                }
                else if (itemDic.ItemType == (int)EnumItemType.Point)//钻石
                {
                    itemCount = pkMatch.PrizeItemCount;
                    point     = itemCount;
                    //欧洲杯狂欢
                    ActivityExThread.Instance.EuropeCarnival(5, ref point);
                }
                else
                {
                    result = package.AddItem(pkMatch.PrizeItemCode, itemBinding, false);
                }
                if (result != MessageCode.Success)
                {
                    package = null;
                    mail    = new MailBuilder(managerId, pkMatch.PrizeItemCode, itemBinding, equipmentProperty, pkMatch.AwayName);
                }

                point += 1;//场次获胜额外获得1钻石

                //var code = SaveLottery(pkMatch.Idx, pkMatch.HomeId, package, mail, (int)MessageCode.TourLotteryRepeat);
                var code = SaveLottery(pkMatch.Idx, pkMatch.HomeId, (int)MessageCode.TourLotteryRepeat, package, mail, point);
                if (code == MessageCode.Success)
                {
                    var response = ResponseHelper.CreateSuccess <TourLotteryResponse>();
                    response.Data                   = new TourLotteryEntity();
                    response.Data.ItemCode          = pkMatch.PrizeItemCode;
                    response.Data.EquipmentProperty = equipmentProperty;
                    response.Data.IsBinding         = itemBinding;
                    response.Data.ItemCount         = 1;
                    if (itemDic.ItemType == (int)EnumItemType.Point)  //钻石 友情点
                    {
                        response.Data.ItemCount = point - 1;
                    }
                    else if (itemDic.ItemType == (int)EnumItemType.FriendshipPoint)
                    {
                        response.Data.ItemCount = itemCount;
                    }

                    //奥运金牌掉落
                    response.Data.OlympicTheGoldMedalId = OlympicCore.Instance.GetOlympicTheGoldMedal(
                        managerId, EnumOlympicGeyType.FriendMatch);
                    return(response);
                }
                else
                {
                    return(ResponseHelper.Create <TourLotteryResponse>(code));
                }
            }
            else
            {
                return(ResponseHelper.Create <TourLotteryResponse>(MessageCode.TourLotteryRepeat));
            }
        }
Exemple #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);
        }