Exemple #1
0
        PenaltykickManagerEntity GetManager(Guid managerId)
        {
            var      info = PenaltykickManagerMgr.GetById(managerId);
            DateTime date = DateTime.Now;

            if (info == null)
            {
                if (IsActivity)
                {
                    //默认1次免费次数,每天最多产出5个
                    info = new PenaltykickManagerEntity(managerId, 0, 1, 0, 5, 0, 0, 0, 0, "", 0, 0, RefreshExChange(),
                                                        0, 0,
                                                        false, date, date, date, date);
                    PenaltykickManagerMgr.Insert(info);
                }
                else
                {
                    info = new PenaltykickManagerEntity(managerId, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, RefreshExChange(),
                                                        0, 0,
                                                        false, date, date, date, date);
                }
            }
            //每天补充免费次数
            if (info.RefreshDate.Date != date.Date)
            {
                if (IsActivity)
                {
                    info.FreeNumber          = 1;
                    info.DayProduceLuckyCoin = 5;
                    info.RefreshDate         = date;
                    PenaltykickManagerMgr.Update(info);
                }
            }
            return(info);
        }
Exemple #2
0
        /// <summary>
        /// 刷新点球兑换
        /// </summary>
        /// <param name="managerId"></param>
        /// <returns></returns>
        public PenaltyKickExChangeResponse RefreshExChange(Guid managerId)
        {
            PenaltyKickExChangeResponse response = new PenaltyKickExChangeResponse();

            response.Data = new PenaltyKickExChange();
            try
            {
                var info = GetManager(managerId);
                if (info == null)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.MissManager));
                }
                var point = PayCore.Instance.GetPoint(managerId);
                if (point < _refreshExChangePoint)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbPointShortage));
                }
                info.ExChangeString = RefreshExChange();
                var exList = GetExChangeEntity(info.ExChangeString);
                info.ExChangeString = SetExChangeString(exList);
                info.UpdateTime     = DateTime.Now;
                using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
                {
                    transactionManager.BeginTransaction();
                    var messageCode = MessageCode.NbUpdateFail;
                    do
                    {
                        messageCode = PayCore.Instance.GambleConsume(managerId, _refreshExChangePoint, ShareUtil.GenerateComb(),
                                                                     EnumConsumeSourceType.AdTopScoreResetExchange, transactionManager.TransactionObject);
                        if (messageCode != MessageCode.Success)
                        {
                            break;
                        }
                        messageCode = MessageCode.NbUpdateFail;
                        if (!PenaltykickManagerMgr.Update(info, transactionManager.TransactionObject))
                        {
                            break;
                        }
                        messageCode = MessageCode.Success;
                    } while (false);
                    if (messageCode != MessageCode.Success)
                    {
                        transactionManager.Rollback();
                        return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode));
                    }
                    transactionManager.Commit();
                }
                response.Data.AvailableScore = info.AvailableScore;
                response.Data.ExChangeList   = exList;
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("刷新点球兑换", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #3
0
        /// <summary>
        /// 设置排名信息
        /// </summary>
        /// <returns></returns>
        public MessageCode SetRank()
        {
            if (IsActivity)//有活动才更新排名
            {
                PenaltykickManagerMgr.SetRank();
                //return MessageCode.NbUpdateFail;
            }
            var rankList = PenaltykickManagerMgr.GetRank();
            var dic      = new ConcurrentDictionary <Guid, PenaltyKickRankEntity>();

            foreach (var item in rankList)
            {
                if (!dic.ContainsKey(item.ManagerId))
                {
                    dic.TryAdd(item.ManagerId, item);
                }
            }
            _rankDic = dic;
            return(MessageCode.Success);
        }
Exemple #4
0
        MessageCode Tran_SaveAttachment(DbTransaction transaction, List <MailInfoEntity> mails, ItemPackageFrame package, NbManagerEntity manager, int coin, int sophicate, int point, int prestige, int bindPoint, int addGoldBar, Guid managerId, int addluckyCoin, int addGameCoin)
        {
            var orderId = mails[0].Idx.ToString();

            foreach (var mail in mails)
            {
                if (!MailInfoMgr.Update(mail, transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }
            if (package != null)
            {
                if (!package.Save(transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }

            if (coin > 0)
            {
                var code = ManagerCore.Instance.AddCoin(manager, coin, EnumCoinChargeSourceType.MailAttachment, orderId, transaction);
                if (code != MessageCode.Success)
                {
                    return(MessageCode.NbUpdateFail);
                }
            }
            if (sophicate > 0)
            {
                int resultSophisticate = manager.Sophisticate;
                if (!NbManagerMgr.AddSophisticate(manager.Idx, sophicate, ref resultSophisticate, transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }
            if (point > 0)
            {
                var code = PayCore.Instance.AddBonus(manager.Account, point, EnumChargeSourceType.MailAttachment,
                                                     orderId, transaction);
                if (code != MessageCode.Success)
                {
                    return(MessageCode.NbUpdateFail);
                }
            }
            if (bindPoint > 0)
            {
                var payUser = PayUserMgr.GetById(manager.Account);
                if (payUser == null)
                {
                    payUser           = new PayUserEntity();
                    payUser.Account   = manager.Account;
                    payUser.BindPoint = bindPoint;
                    payUser.RowTime   = DateTime.Now;
                    payUser.IsNew     = true;
                }
                else
                {
                    payUser.BindPoint += bindPoint;
                }
                if (payUser.IsNew)
                {
                    if (!PayUserMgr.Insert(payUser, transaction))
                    {
                        return(MessageCode.NbUpdateFail);
                    }
                }
                else
                {
                    if (!PayUserMgr.Update(payUser, transaction))
                    {
                        return(MessageCode.NbUpdateFail);
                    }
                }
            }
            if (addGoldBar > 0)
            {
                var goldBarManager = ScoutingGoldbarMgr.GetById(managerId);
                if (goldBarManager == null)
                {
                    goldBarManager = new ScoutingGoldbarEntity(managerId, addGoldBar, 0, 0, 0, DateTime.Now,
                                                               DateTime.Now);
                    if (!ScoutingGoldbarMgr.Insert(goldBarManager, transaction))
                    {
                        return(MessageCode.NbUpdateFail);
                    }
                }
                else
                {
                    goldBarManager.GoldBarNumber = goldBarManager.GoldBarNumber + addGoldBar;
                    if (!ScoutingGoldbarMgr.Update(goldBarManager, transaction))
                    {
                        return(MessageCode.NbUpdateFail);
                    }
                }
                GoldbarRecordEntity record = new GoldbarRecordEntity(0, managerId, true, addGoldBar, (int)EnumCoinChargeSourceType.MailAttachment, DateTime.Now);
                GoldbarRecordMgr.Insert(record);
            }
            if (addluckyCoin > 0)
            {
                if (!TurntableManagerMgr.AddLuckyCoin(managerId, addluckyCoin, transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }
            if (addGameCoin > 0)
            {
                if (!PenaltykickManagerMgr.AddGameCurrency(managerId, addGameCoin, transaction))
                {
                    return(MessageCode.NbUpdateFail);
                }
            }

            return(MessageCode.Success);
        }
Exemple #5
0
        /// <summary>
        /// 球探抽卡
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="scoutingId">1金币抽卡,2点券抽卡,3友情点抽卡</param>
        /// <param name="hasTask"></param>
        /// <param name="count"></param>
        /// <param name="isAutoDec"></param>
        /// <returns></returns>
        public ScoutingLotteryResponse ScoutingLottery(Guid managerId, int scoutingId, bool hasTask, int count,
                                                       bool isAutoDec = false)
        {
            //金条抽卡
            if (scoutingId == 99)
            {
                return(ScoutingLotteryGoldBar(managerId, scoutingId, count));
            }
            if (scoutingId > 3)
            {
                return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>());
            }
            bool isTen          = count == 10; //是否十连抽
            var  configScouting = CacheFactory.ScoutingCache.GetEntity(scoutingId);

            if (configScouting == null)
            {
                return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>());
            }
            var scoutingType = configScouting.Type;

            var scoutingManager    = GetById(managerId);
            var limitedOrangeCount = 0;

            ScoutingRecordfordaysMgr.GetCountByTime(managerId, DateTime.Today, DateTime.Today.AddDays(1), scoutingId,
                                                    ref limitedOrangeCount);


            LotteryEntity lottery         = null;
            List <int>    cardList        = null;
            List <int>    limitedCardList = new List <int>();

            var activityRate = _europeScoutingRate;

            if (isTen)
            {
                if (!configScouting.HasTen)
                {
                    return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>());
                }
                lottery = CacheFactory.LotteryCache.ScoutingTen(scoutingType, configScouting.OrangeLib,
                                                                configScouting.LowLib, out cardList, limitedOrangeCount, out limitedCardList);
            }
            else
            {
                lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType);
            }
            if (lottery == null)
            {
                return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingLotteryFail));
            }

            //是否免费
            bool                 isFree         = false;
            DateTime             curTime        = DateTime.Now;
            ScoutingRecordEntity scoutingRecord = new ScoutingRecordEntity();

            scoutingRecord.ManagerId = managerId;
            bool isAttendActiviyt = true;

            if (!isTen) //新手引导点券抽卡
            {
                var card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                //获取经理信息
                var manager = ManagerCore.Instance.GetManagerExtra(managerId);
                if ((scoutingType == 1 && manager.CoinScouting > 0) ||
                    (scoutingType == 2 && manager.Scouting > 0) ||
                    (scoutingType == 3 && manager.FriendScouting > 0))
                {
                    isFree = true;
                    //免费抽卡不能抽到87以上能力值的卡
                    lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 4); //免费抽卡卡库
                    card    = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                }


                if (configScouting.Type == 2 && scoutingManager.PointLotteryCount == 0)
                {
                    //第一次必得托雷斯
                    lottery.PrizeItemCode = 130153;
                    var itemstring = lottery.ItemString.Split(',');
                    itemstring[1] = lottery.PrizeItemCode.ToString();

                    lottery.ItemString = string.Join(",", itemstring);
                    isAttendActiviyt   = false;
                }
                else if (scoutingType == 3 && scoutingManager.FriendLotteryCount % 10 == 0) //友情点抽卡十次必得80-84橙卡
                {
                    lottery          = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 5);
                    card             = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                    isAttendActiviyt = false;
                }
                else if (scoutingType == 1 && scoutingManager.CoinLotteryCount % 10 == 0) //金币抽卡十次必得80-84橙卡碎片
                {
                    lottery          = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 6);
                    card             = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                    isAttendActiviyt = false;
                }
                else if (scoutingType == 2 && scoutingManager.PointLotteryCount % 10 == 0) //钻石抽卡十次必得85-87橙卡
                {
                    lottery          = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 7);
                    card             = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                    isAttendActiviyt = false;
                }
                //C罗、梅西外每天只能出3张89以上的橙卡
                if (limitedOrangeCount >= 3)
                {
                    while (card.PlayerKpi >= 89 || card.LinkId == 30001 || card.LinkId == 30002)
                    {
                        lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType);
                        card    = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                    }
                }
                else
                {
                    if (card.PlayerKpi >= 89 && (card.LinkId != 30001 || card.LinkId != 30002))
                    {
                        limitedCardList = new List <int>();
                        limitedCardList.Add(card.ItemCode);
                        isAttendActiviyt = false;
                    }
                }
            }
            if (isTen)
            {
                bool isReplace = true;
                switch (scoutingType)
                {
                case 1:     //金币
                    for (int i = 0; i < cardList.Count; i++)
                    {
                        var itemcode = ActivityExThread.Instance.SummerGiftBag(1);
                        if (itemcode > 0)
                        {
                            cardList[i] = itemcode;
                        }
                        else
                        {
                            itemcode = ActivityExThread.Instance.MidAutumnActivity(1, scoutingManager.SpecialItemCoin);
                            if (itemcode > 0)
                            {
                                scoutingManager.SpecialItemCoin++;
                                cardList[i] = itemcode;
                            }
                        }
                    }
                    var coinLottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 6);
                    cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = coinLottery.PrizeItemCode;
                    lottery.ItemString = string.Join(",", cardList);
                    break;

                case 2:     //钻石
                    int number = 0;
                    for (int i = 0; i < cardList.Count; i++)
                    {
                        if (ActivityExThread.Instance.IsActivity(EnumActivityExEffectType.EquipmentDebris, 0, 0))
                        {
                            if (RandomHelper.CheckPercentage(activityRate))
                            {
                                if (number < 2)
                                {
                                    cardList[i] = ActivityExThread.Instance.GetRandomDebris();
                                    number++;
                                }
                            }
                        }
                        var itemcode = ActivityExThread.Instance.SummerGiftBag(2);
                        if (itemcode > 0)
                        {
                            cardList[i] = itemcode;
                        }
                        else
                        {
                            itemcode = ActivityExThread.Instance.MidAutumnActivity(2, scoutingManager.SpecialItemPoint);
                            if (itemcode > 0)
                            {
                                scoutingManager.SpecialItemPoint++;
                                cardList[i] = itemcode;
                            }
                        }
                        var cardLotteryId = ActivityExThread.Instance.ScoutingDebris1(2);
                        if (cardLotteryId > 0)
                        {
                            var code = CacheFactory.LotteryCache.LotteryByLib(cardLotteryId);
                            if (code > 0)
                            {
                                cardList[i] = code;
                            }
                        }
                        var card = ItemsdicCache.Instance.GetItem(cardList[i]);
                        if (card.ItemType == (int)EnumItemType.PlayerCard && card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange && card.PlayerKpi >= 84)
                        {
                            isReplace = false;
                        }
                    }
                    if (isReplace)
                    {
                        var pointlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 7);
                        cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = pointlottery.PrizeItemCode;
                    }
                    lottery.ItemString = string.Join(",", cardList);
                    break;

                case 3:     //友情点
                    for (int i = 0; i < cardList.Count; i++)
                    {
                        var itemcode = ActivityExThread.Instance.SummerGiftBag(3);
                        if (itemcode > 0)
                        {
                            cardList[i] = itemcode;
                        }
                        else
                        {
                            itemcode = ActivityExThread.Instance.MidAutumnActivity(3, scoutingManager.SpecialItemFriend);
                            if (itemcode > 0)
                            {
                                scoutingManager.SpecialItemFriend++;
                                cardList[i] = itemcode;
                            }
                        }
                        var card = ItemsdicCache.Instance.GetItem(cardList[i]);
                        if (card.ItemType == (int)EnumItemType.PlayerCard && card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange)
                        {
                            isReplace = false;
                        }
                    }
                    if (isReplace)
                    {
                        var friendlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 5);
                        cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = friendlottery.PrizeItemCode;
                    }
                    lottery.ItemString = string.Join(",", cardList);
                    break;
                }
            }
            else
            {
                if (scoutingType == 2 &&
                    ActivityExThread.Instance.IsActivity(EnumActivityExEffectType.EquipmentDebris, 0, 0))
                {
                    if (RandomHelper.CheckPercentage(activityRate))
                    {
                        if (isAttendActiviyt)
                        {
                            lottery.PrizeItemCode = ActivityExThread.Instance.GetRandomDebris();
                            var itemstring = lottery.ItemString.Split(',');
                            itemstring[1]      = lottery.PrizeItemCode.ToString();
                            lottery.ItemString = string.Join(",", itemstring);
                        }
                    }
                }
                if (isAttendActiviyt)
                {
                    var itemcode = ActivityExThread.Instance.MidAutumnActivity(scoutingType, scoutingManager.SpecialItemFriend);
                    if (itemcode > 0)
                    {
                        switch (scoutingType)
                        {
                        case 1:
                            scoutingManager.SpecialItemCoin++;
                            break;

                        case 2:
                            scoutingManager.SpecialItemPoint++;
                            break;

                        case 3:
                            scoutingManager.SpecialItemFriend++;
                            break;
                        }
                        lottery.PrizeItemCode = itemcode;
                        var itemstring = lottery.ItemString.Split(',');
                        itemstring[1]      = lottery.PrizeItemCode.ToString();
                        lottery.ItemString = string.Join(",", itemstring);
                    }
                }
            }
            scoutingRecord.ItemCode     = lottery.PrizeItemCode;
            scoutingRecord.ItemString   = lottery.ItemString;
            scoutingRecord.RowTime      = curTime;
            scoutingRecord.ScoutingType = configScouting.Type;
            scoutingRecord.Status       = 1;
            scoutingRecord.Strength     = lottery.Strength;
            //球探抽卡
            var response = MallCore.Instance.Scouting(managerId, configScouting.MallCode, curTime, scoutingRecord, isTen,
                                                      cardList, isAutoDec, isFree);

            if (response.Code == (int)MessageCode.Success)
            {
                if (scoutingManager != null) //记录玩家抽卡信息
                {
                    if (!isTen)
                    {
                        if (scoutingType == 1)
                        {
                            scoutingManager.CoinLotteryCount += 1;
                        }
                        else if (scoutingType == 2)
                        {
                            scoutingManager.PointLotteryCount += 1;
                        }
                        else
                        {
                            scoutingManager.FriendLotteryCount += 1;
                        }
                    }
                    else
                    {
                        if (scoutingType == 1)
                        {
                            scoutingManager.CoinTenLotteryCount += 1;
                        }
                        else if (scoutingType == 2)
                        {
                            scoutingManager.PointTenLotteryCount += 1;
                        }
                        else
                        {
                            scoutingManager.FriendTenLotteryCount += 1;
                        }
                    }
                    scoutingManager.UpdateTime = DateTime.Now;
                    ScoutingManagerMgr.Update(scoutingManager);
                    response.Data.NextPointScouting  = GetLotteryNeedCount(scoutingManager.PointLotteryCount);
                    response.Data.NextCoinScouting   = GetLotteryNeedCount(scoutingManager.CoinLotteryCount);
                    response.Data.NextFriendScouting = GetLotteryNeedCount(scoutingManager.FriendLotteryCount);
                }

                foreach (var itemcode in limitedCardList)
                {
                    var scoutingRecordDays = new ScoutingRecordfordaysEntity();
                    scoutingRecordDays.ManagerId          = managerId;
                    scoutingRecordDays.CardItemCodeThen89 = itemcode;
                    scoutingRecordDays.RowTime            = DateTime.Now;
                    scoutingRecordDays.ScoutingType       = scoutingType;
                    ScoutingRecordfordaysMgr.Insert(scoutingRecordDays);
                }

                int orangeCount     = 0;
                int purpleCount     = 0;
                int luckyCoinNumber = 0;
                //点球游戏币数量
                int         gameCurrency = 0;
                MailBuilder mail         = null;
                if (isTen)
                {
                    foreach (var card in cardList)
                    {
                        HandleOrangeCard(managerId, card, ref orangeCount, ref purpleCount, hasTask, ref luckyCoinNumber);
                        ActivityExThread.Instance.ScoutingDebris(managerId, card, ref mail);
                        if (response.Data.OlympicTheGoldMedalId == 0)
                        {
                            //奥运金牌掉落
                            response.Data.OlympicTheGoldMedalId = OlympicCore.Instance.GetOlympicTheGoldMedal(
                                managerId, (EnumOlympicGeyType)scoutingId);
                        }
                        //点球游戏币 20%概率 最多2个
                        if (RandomHelper.CheckPercentage(20) && gameCurrency < 2)
                        {
                            gameCurrency++;
                        }
                    }
                }
                else
                {
                    HandleOrangeCard(managerId, response.Data.ItemCode, ref orangeCount, ref purpleCount, hasTask, ref luckyCoinNumber);
                    ActivityExThread.Instance.ScoutingDebris(managerId, response.Data.ItemCode, ref mail);
                    //奥运金牌掉落
                    response.Data.OlympicTheGoldMedalId = OlympicCore.Instance.GetOlympicTheGoldMedal(
                        managerId, (EnumOlympicGeyType)scoutingId);
                    //点球游戏币 20%概率
                    if (RandomHelper.CheckPercentage(20))
                    {
                        gameCurrency++;
                    }
                }
                if (mail != null)
                {
                    mail.Save();
                }
                //如果有点球活动
                if (PenaltyKickCore.Instance.IsActivity)
                {
                    //成功增加数量
                    int successAddNumber = 0;
                    PenaltykickManagerMgr.AddSystemProduceGameCurrency(managerId, gameCurrency, ref successAddNumber);
                    gameCurrency = successAddNumber;
                }
                else
                {
                    gameCurrency = 0;
                }

                List <PopMessageEntity> popList = TaskHandler.Instance.ScoutingLottery(managerId, 1);
                response.Data.PopMsg          = popList;
                response.Data.LuckyCoinNumber = luckyCoinNumber;
                response.Data.GameCurrency    = gameCurrency;
                if (response.Data.AddReiki > 0)
                {
                    ManagerCore.Instance.DeleteCache(managerId);
                }
            }
            return(response);
        }
Exemple #6
0
        /// <summary>
        /// 积分兑换
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="itemCode"></param>
        /// <returns></returns>
        public PenaltyKickExChangeResponse ExChange(Guid managerId, int itemCode)
        {
            PenaltyKickExChangeResponse response = new PenaltyKickExChangeResponse();

            response.Data = new PenaltyKickExChange();
            try
            {
                var info = GetManager(managerId);
                if (info == null)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.MissManager));
                }
                var exList = GetExChangeEntity(info.ExChangeString);
                if (exList == null)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbParameterError));
                }
                //获取要兑换的物品
                var exItem = exList.Find(r => r.ItemCode == itemCode);
                if (exItem == null)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.ExChangeItemNot));
                }
                //已经兑换过
                if (exItem.Status == 1)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.RepeatExChange));
                }
                //积分不足
                if (info.AvailableScore < exItem.Price)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.LadderExchangeScoreShortage));
                }
                info.AvailableScore = info.AvailableScore - exItem.Price;
                exItem.Status       = 1;
                //所有物品都兑换完了  自动刷新
                if (!exList.Exists(r => r.Status == 0))
                {
                    info.ExChangeString = RefreshExChange();
                    exList = GetExChangeEntity(info.ExChangeString);
                }
                else
                {
                    info.ExChangeString = SetExChangeString(exList);
                }

                info.UpdateTime = DateTime.Now;
                var package = ItemCore.Instance.GetPackage(managerId, EnumTransactionType.AdTopScorerKeep);
                if (package == null)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbParameterError));
                }
                var messageCode = package.AddItem(exItem.ItemCode);
                if (messageCode != MessageCode.Success)
                {
                    return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode));
                }
                using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
                {
                    transactionManager.BeginTransaction();
                    messageCode = MessageCode.NbUpdateFail;
                    do
                    {
                        if (!package.Save(transactionManager.TransactionObject))
                        {
                            break;
                        }
                        if (!PenaltykickManagerMgr.Update(info, transactionManager.TransactionObject))
                        {
                            break;
                        }
                        messageCode = MessageCode.Success;
                    } while (false);
                    if (messageCode != MessageCode.Success)
                    {
                        transactionManager.Rollback();
                        return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode));
                    }
                    transactionManager.Commit();
                    package.Shadow.Save();
                }
                response.Data.AvailableScore = info.AvailableScore;
                response.Data.ExChangeList   = exList;
                response.Data.ItemCode       = exItem.ItemCode;
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("点球积分兑换", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #7
0
        /// <summary>
        /// 开始射门
        /// </summary>
        /// <param name="managerId"></param>
        /// <returns></returns>
        public PenaltyKickShootResponse Shoot(Guid managerId)
        {
            var response = new PenaltyKickShootResponse();

            response.Data = new PenaltyKickShoot();
            try
            {
                if (!IsActivity)
                {
                    return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.AdMissSeason));
                }
                var info = GetManager(managerId);
                if (info == null)
                {
                    return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.MissManager));
                }
                if (info.Status != 1)
                {
                    return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.GameEnd));
                }
                if (info.ShootLog.Length > 0)
                {
                    var shootList = info.ShootLog.Split(',');
                    if (shootList.Length >= 5)
                    {
                        return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.GameEnd));
                    }
                }
                //背包满了  不让踢球
                var package = ItemCore.Instance.GetPackage(managerId, EnumTransactionType.AdTopScorerKeep);
                if (package == null)
                {
                    return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.NbParameterError));
                }
                if (package.IsFull)
                {
                    return(ResponseHelper.Create <PenaltyKickShootResponse>(MessageCode.ItemPackageFull));
                }
                //射门结果
                var shootResult = GetShootResult(info.ShooterAttribute);
                //射门结果处理
                Shoot(info, shootResult.IsGoals);
                int score = 0;
                //进球了才有奖励
                var prizeList = new List <PrizeEntity>();
                if (shootResult.IsGoals)
                {
                    score++; //每进一球加一点
                    prizeList = GetPrize(info.ShootLog, info.MaxCombGoals);
                    foreach (var item in prizeList)
                    {
                        switch (item.ItemType)
                        {
                        case 3:     //物品
                            var code = package.AddItems(item.ItemCode, item.ItemCount);
                            if (code != MessageCode.Success)
                            {
                                return(ResponseHelper.Create <PenaltyKickShootResponse>(code));
                            }
                            break;

                        case 5:     //积分
                            score += item.ItemCount;
                            break;
                        }
                    }
                    info.AvailableScore += score;
                    info.TotalScore     += score;
                    info.ScoreChangeTime = DateTime.Now;
                }
                info.UpdateTime = DateTime.Now;
                using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
                {
                    transactionManager.BeginTransaction();
                    var messageCode = MessageCode.NbUpdateFail;
                    do
                    {
                        if (shootResult.IsGoals)
                        {
                            if (!package.Save(transactionManager.TransactionObject))
                            {
                                break;
                            }
                        }
                        if (!PenaltykickManagerMgr.Update(info, transactionManager.TransactionObject))
                        {
                            break;
                        }
                        messageCode = MessageCode.Success;
                    } while (false);
                    if (messageCode != MessageCode.Success)
                    {
                        transactionManager.Rollback();
                        return(ResponseHelper.Create <PenaltyKickShootResponse>(messageCode));
                    }
                    transactionManager.Commit();
                    package.Shadow.Save();
                }

                response.Data.Info        = GetManagerInfoResponse(info);
                response.Data.ShootResult = shootResult;
                response.Data.ItemList    = prizeList;
                //更新排名信息
                UpdateRank(info);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("点球射门", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #8
0
        /// <summary>
        /// 开始游戏
        /// </summary>
        /// <param name="managerId"></param>
        /// <returns></returns>
        public GetPenaltyKickInfoResponse Join(Guid managerId)
        {
            var response = new GetPenaltyKickInfoResponse();

            response.Data = new GetPenaltyKickInfo();
            try
            {
                //不在活动时间内
                if (!IsActivity)
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.AdMissSeason));
                }
                var manager = ManagerCore.Instance.GetManager(managerId);
                if (null == manager)
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.MissManager));
                }
                var info = GetManager(managerId);
                if (info == null)
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.MissManager));
                }
                //游戏还未结束
                if (info.Status == 1)
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.GameNotEnd));
                }
                bool isfree = false;
                if (info.FreeNumber > 0)
                {
                    info.FreeNumber--;
                    isfree = true;
                }
                else
                {
                    if (info.GameCurrency <= 0)
                    {
                        return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.GameCurrencyNumberNot));
                    }
                    info.GameCurrency--;
                }
                info.Status = 1;
                //获取踢球球员属性
                var shooterAttribute = GetShooterId(managerId);
                if (shooterAttribute == 0)
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.NbParameterError));
                }
                info.ShooterAttribute = shooterAttribute;
                info.ShootNumber++;
                info.ShootLog     = "";
                info.CombGoals    = 0;
                info.MaxCombGoals = 0;
                info.UpdateTime   = DateTime.Now;
                if (!PenaltykickManagerMgr.Update(info))
                {
                    return(ResponseHelper.Create <GetPenaltyKickInfoResponse>(MessageCode.NbUpdateFail));
                }
                //插入消费记录
                PenaltykickManagerMgr.InsertRecord(managerId, 1, isfree);
                response.Data = GetManagerInfoResponse(info);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("点球开始游戏", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #9
0
        private MessageCode SendPrize(PenaltykickSeasonEntity seasonInfo)
        {
            if (seasonInfo.Idx == 0)
            {
                return(MessageCode.Success);
            }
            PenaltykickManagerMgr.SetRank();
            var prizeList = PenaltykickManagerMgr.GetNotPrize(seasonInfo.Idx);

            seasonInfo.IsPrize   = true;
            seasonInfo.PrizeTime = DateTime.Now;
            foreach (var item in prizeList)
            {
                if (item.IsPrize || item.TotalScore < 500)
                {
                    continue;
                }
                item.IsPrize = true;
                //排名奖励
                var prize = CacheFactory.AdCache.GetPrize(3, item.Rank);
                if (prize == null || prize.Count == 0)
                {
                    continue;
                }
                //邮件
                var mail = new MailBuilder(item.Rank, item.ManagerId);
                foreach (var p in prize)
                {
                    switch (p.ItemType)
                    {
                    case 3:    //暂时只有物品奖励
                        mail.AddAttachment(p.ItemCount, p.ItemCode, false, 1);
                        break;

                    case 10:    //金条
                        mail.AddAttachment(EnumCurrencyType.GoldBar, p.ItemCount);
                        break;
                    }
                }
                using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
                {
                    transactionManager.BeginTransaction();
                    var messageCode = MessageCode.NbUpdateFail;
                    do
                    {
                        if (!PenaltykickManagerMgr.Update(item, transactionManager.TransactionObject))
                        {
                            break;
                        }
                        if (!mail.Save(transactionManager.TransactionObject))
                        {
                            break;
                        }
                        messageCode = MessageCode.Success;
                    } while (false);
                    if (messageCode != MessageCode.Success)
                    {
                        transactionManager.Rollback();
                    }
                    transactionManager.Commit();
                }
            }
            PenaltykickSeasonMgr.Update(seasonInfo);
            return(MessageCode.Success);
        }