Exemplo n.º 1
0
 static MessageCode doSendRankPrize(CrosscrowdInfoEntity crowd, CrosscrowdSendRankPrizeEntity entity, int maxPoint, int maxLegendCount)
 {
     try
     {
         if (entity.Status != 0)
         {
             return(MessageCode.Success);
         }
         if (entity.Score <= 0)
         {
             return(MessageCode.Success);
         }
         string      prizeItemString = "";
         var         mail            = new MailBuilder(entity.ManagerId, EnumMailType.CrossCrowdRank, entity.Rank);
         MessageCode mess            = BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossRank, entity.Rank, maxPoint, maxLegendCount, ref prizeItemString);
         if (mess != MessageCode.Success)
         {
             return(mess);
         }
         entity.Status = 1;
         CrosscrowdInfoMgr.SaveRankPrizeStatus(entity.Idx, entity.Status);
         if (!mail.Save(entity.SiteId))
         {
             return(MessageCode.NbParameterError);
         }
         SavePrizeRecord(entity.ManagerId, EnumCrowdPrizeCategory.CrossRank, "history:" + entity.Idx,
                         prizeItemString, entity.SiteId);
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("CrossCrowd-doSendRankPrize", ex);
         return(MessageCode.NbParameterError);
     }
     return(MessageCode.Success);
 }
        public static void SendPrize(CrossladderManagerhistoryEntity manager, EnumCrossLadderPrizeType crossLadderPrizeType, EnumMailType mailType, int seasonStatus)
        {
            if (string.IsNullOrEmpty(manager.PrizeItems))
            {
                manager.PrizeItems = "";
                MailBuilder mail = null;

                int packId = CacheFactory.CrossLadderCache.GetRankPrize(crossLadderPrizeType, manager.Rank,seasonStatus);
                if (packId <= 0)
                {
                    SystemlogMgr.Info("CrossLadderSendPrize", "no packid for rank:" + manager.Rank);
                    return;
                }
                mail = new MailBuilder(mailType, manager.ManagerId,manager.Season,manager.Rank,manager.RecordDate);
                var code = MallCore.Instance.BuildPackMail(packId, ref mail);
                if (code != MessageCode.Success)
                {
                    SystemlogMgr.Info("CrossLadderSendPrize", "build pack fail rank:" + manager.Rank + ",packId:" + packId);
                    return;
                }
                manager.PrizeItems = "pack:" + packId;
                manager.UpdateTime = DateTime.Now;
                try
                {
                    CrossladderManagerhistoryMgr.SavePrize(manager.Idx,manager.PrizeItems);
                    mail.Save(manager.SiteId);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("CrossLadderSendPrize", ex);
                }
            }
        }
Exemplo n.º 3
0
        public MessageCode RefreshStatus()
        {
            DateTime date = DateTime.Now;

            foreach (var item in _transferDic.Values)
            {
                if (date >= item.TransferDuration)
                {
                    item.Status = 3;//流拍。 从数据库删除
                    if (TransferMainMgr.Delete(item.TransferId))
                    {
                        var mail = new MailBuilder(item.SellId, item.ItemCode, item.ItemName, EnumMailType.TransferRunOff);
                        if (!mail.Save(item.SellZoneName))
                        {
                            SystemlogMgr.Error("邮件发送失败",
                                               "邮件发送失败,ManagerId:" + item.SellId + ",ZoneName:" + item.SellZoneName + ",ItemCode:" +
                                               item.ItemCode);
                        }
                        Remove(item.TransferId);
                    }
                }
            }
            foreach (var entity in _tenTransferList)
            {
                //过了10分钟的放到另外一个字典
                if (entity.TransferStartTime.AddMinutes(10) < date)
                {
                    _transferDic.TryAdd(entity.TransferId, entity);
                }
            }
            _tenTransferList = _tenTransferList.FindAll(r => r.TransferStartTime.AddMinutes(10) > date);
            Sort();
            return(MessageCode.Success);
        }
Exemplo n.º 4
0
        int SendItemByType(NbManagershareEntity shareEntity, List <ConfigMallgiftbagEntity> prizeList)
        {
            if (prizeList.Count <= 0)
            {
                return((int)MessageCode.NbParameterError);
            }
            var mail = new MailBuilder(shareEntity.ManagerId, "分享礼包", 0, prizeList, EnumMailType.Share, 0, 0);

            //    var mail = new MailBuilder(shareEntity.ManagerId, point, coin, itemList, EnumMailType.Share);
            using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
            {
                transactionManager.BeginTransaction();
                var f = true;
                if (!mail.Save(transactionManager.TransactionObject))
                {
                    f = false;
                }

                if (!NbManagershareMgr.Update(shareEntity, transactionManager.TransactionObject))
                {
                    f = false;
                }
                if (f)
                {
                    transactionManager.Commit();
                }
                else
                {
                    transactionManager.Rollback();
                    return((int)MessageCode.Exception);
                }
            }
            return((int)MessageCode.Success);
        }
Exemplo n.º 5
0
        static void doSendKillPrize(CrosscrowdInfoEntity crowd, Guid matchId, Guid managerId, string awayName, string siteId, int maxPoint, int maxLegendCount)
        {
            var    mail            = new MailBuilder(managerId, EnumMailType.CrossCrowdKill, awayName);
            string prizeItemString = "";

            BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossKill, 1, maxPoint, maxLegendCount, ref prizeItemString);
            if (string.IsNullOrEmpty(prizeItemString))
            {
                return;
            }
            mail.Save(siteId);
            SavePrizeRecord(managerId, EnumCrowdPrizeCategory.CrossKill, matchId.ToString(), prizeItemString, siteId);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 针对某场比赛押注的某个经理开奖,如果博彩中了,就给奖励,否则给予惩罚
        /// </summary>
        /// <param name="match">The match.</param>
        /// <param name="gamble">The gamble.</param>
        private static void OpenGamble(DailycupMatchEntity match, DailycupGambleEntity gamble)
        {
            int matchResult;

            if (match.HomeScore > match.AwayScore)
            {
                matchResult = 1;
            }
            else if (match.HomeScore == match.AwayScore)
            {
                matchResult = 1;//平局算主队赢
            }
            else
            {
                matchResult = 2;
            }

            var resultPoint = 0;

            try
            {
                int newLevel = 0;
                if (matchResult == gamble.GambleResult) //押中
                {
                    gamble.Status = (int)EnumGambleStatus.Success;
                    resultPoint   = gamble.GamblePoint * 2;
                    //欧洲杯狂欢
                    ActivityExThread.Instance.EuropeCarnival(2, ref resultPoint);
                }
                else //押失败
                {
                    gamble.Status = (int)EnumGambleStatus.Fail;
                }
                gamble.ResultPoint = resultPoint;

                //猜中发奖励
                if (resultPoint > 0)
                {
                    var mail = new MailBuilder(gamble);
                    mail.Save();
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("OpenGamble", string.Format("每日杯赛开奖error{2},matchId:{0},gambleId:{1}", match.Idx, gamble.Idx, ex.Message), ex.StackTrace);
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 下架
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="transferId"></param>
        /// <param name="zoneName"></param>
        /// <returns></returns>
        public MessageCodeResponse SoldOut(Guid managerId, Guid transferId, string zoneName)
        {
            MessageCodeResponse response = new MessageCodeResponse();

            try
            {
                if (!IsOpen(managerId, zoneName))
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.TransferNotOpen));
                }
                var info = GetInfo(transferId);
                if (info == null || info.Status == 1)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemSoldOut));
                }
                if (info.Status == 2)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemHaveSellOut));
                }
                if (info.SellId != managerId)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NotSoldOutAuthority));
                }
                info.Status     = 1;
                info.UpdateTime = DateTime.Now;
                if (!TransferMainMgr.Delete(transferId))
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbUpdateFail));
                }
                Remove(transferId);
                var mail = new MailBuilder(managerId, info.ItemCode, info.ItemName, EnumMailType.TransferSoldOut);
                if (!mail.Save(info.SellZoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + info.SellId + ",ZoneName:" + info.SellZoneName + ",ItemCode:" +
                                       info.ItemCode);
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("下架", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemplo n.º 8
0
        static void SendMaxKillerPrize(CrosscrowdInfoEntity crowdInfo)
        {
            var entity = CrosscrowdMaxkillerrecordMgr.GetMaxKiller(crowdInfo.Idx);

            if (entity != null && entity.Status == 0)
            {
                try
                {
                    var mail = new MailBuilder(entity.ManagerId, EnumMailType.CrowdMaxKiller);
                    mail.AddAttachment(1, _maxKillerPrizeItem, false, 0);
                    mail.Save(entity.SiteId);
                    entity.Status     = 1;
                    entity.PrizeItems = _maxKillerPrizeItem.ToString();
                    CrosscrowdMaxkillerrecordMgr.Update(entity);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("CrossCrowd-SendMaxKillerPrize", ex);
                }
            }
        }
Exemplo n.º 9
0
 /// <summary>
 /// 分享游戏奖励(发放奖励)
 /// </summary>
 /// <param name="record"></param>
 /// <param name="mail"></param>
 /// <returns></returns>
 private MessageCode SavePrize(ShareManagerEntity record, MailBuilder mail)
 {
     using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault()))
     {
         transactionManager.BeginTransaction();
         var messageCode = MessageCode.NbUpdateFail;
         do
         {
             if (record.Idx == 0)
             {
                 if (!ShareManagerMgr.Insert(record, transactionManager.TransactionObject))
                 {
                     break;
                 }
             }
             else
             {
                 if (!ShareManagerMgr.Update(record, transactionManager.TransactionObject))
                 {
                     break;
                 }
             }
             if (!mail.Save(transactionManager.TransactionObject))
             {
                 break;
             }
             messageCode = MessageCode.Success;
         } while (false);
         if (messageCode == MessageCode.Success)
         {
             transactionManager.Commit();
         }
         else
         {
             transactionManager.Rollback();
         }
     }
     return(MessageCode.Success);
 }
Exemplo n.º 10
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);
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        /// <summary>
        /// 金条抽卡
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="scoutingId"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        private ScoutingLotteryResponse ScoutingLotteryGoldBar(Guid managerId, int scoutingId, int count)
        {
            bool isTen          = count == 10; //是否十连抽
            var  configScouting = CacheFactory.ScoutingCache.GetEntity(scoutingId);

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

            var scoutingManager = ScoutingGoldbarMgr.GetById(managerId);
            int prize           = 10;

            ActivityExThread.Instance.ScoutingHalfPrice(ref prize);
            //没有数据直接返回金条数量不足
            if (scoutingManager == null)
            {
                return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingGoldBarNot));
            }
            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>();

            if (isTen)
            {
                if (!configScouting.HasTen)
                {
                    return(ResponseHelper.InvalidParameter <ScoutingLotteryResponse>());
                }
                lottery = CacheFactory.LotteryCache.ScoutingTen(scoutingType, configScouting.OrangeLib,
                                                                configScouting.LowLib, out cardList, limitedOrangeCount, out limitedCardList);
                prize = prize * 8; //8折  10连
                scoutingManager.TenNumber++;
            }
            else
            {
                lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, scoutingType);
                scoutingManager.ScoutingNumber++;
                if (scoutingManager.ScoutingNumber > 0 && scoutingManager.ScoutingNumber % 10 == 0)
                {
                    lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98);
                }
            }
            if (scoutingManager.GoldBarNumber < prize)
            {
                return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingGoldBarNot));
            }
            scoutingManager.GoldBarNumber = scoutingManager.GoldBarNumber - prize;
            if (lottery == null)
            {
                return(ResponseHelper.Create <ScoutingLotteryResponse>(MessageCode.ScoutingLotteryFail));
            }
            DateTime             curTime        = DateTime.Now;
            ScoutingRecordEntity scoutingRecord = new ScoutingRecordEntity();

            scoutingRecord.ManagerId = managerId;
            if (!isTen)
            {
                var card = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                if (scoutingManager.ScoutingNumber > 0 && scoutingManager.ScoutingNumber % 10 == 0)
                //抽卡十次必得89及以上的橙卡,元老,红卡,或传奇碎片
                {
                    lottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98);
                    card    = ItemsdicCache.Instance.GetItem(lottery.PrizeItemCode);
                }
                ////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);
                //    }
                //}
            }

            if (isTen)
            {
                bool isReplace = true;
                for (int i = 0; i < cardList.Count; i++)
                {
                    var itemcode = ActivityExThread.Instance.MidAutumnActivity(99, 0);
                    if (itemcode > 0)
                    {
                        cardList[i] = itemcode;
                    }
                    var card = ItemsdicCache.Instance.GetItem(cardList[i]);

                    if (card.ItemType == (int)EnumItemType.PlayerCard &&
                        card.PlayerCardLevel == (int)EnumPlayerCardLevel.Orange && card.PlayerKpi >= 89)
                    {
                        isReplace = false;
                    }
                    else if (card.ItemType == (int)EnumItemType.MallItem)
                    {
                        var player = CacheFactory.PlayersdicCache.GetPlayer(card.ImageId);
                        if (player != null && player.Capacity >= 89)
                        {
                            isReplace = false;
                        }
                    }
                    lottery.ItemString = string.Join(",", cardList);
                }
                if (isReplace)
                {
                    var pointlottery = CacheFactory.LotteryCache.LotteryFive(EnumLotteryType.Scouting, 98);
                    cardList[RandomHelper.GetInt32WithoutMax(0, cardList.Count)] = pointlottery.PrizeItemCode;
                }
                lottery.ItemString = string.Join(",", cardList);
            }
            scoutingRecord.ItemString   = lottery.ItemString;
            scoutingRecord.ItemCode     = lottery.PrizeItemCode;
            scoutingRecord.RowTime      = curTime;
            scoutingRecord.ScoutingType = configScouting.Type;
            scoutingRecord.Status       = 1;
            scoutingRecord.Strength     = lottery.Strength;

            scoutingManager.UpdateTiem = DateTime.Now;


            GoldbarRecordEntity goldBarRecord = new GoldbarRecordEntity();

            goldBarRecord.IsAdd         = false;
            goldBarRecord.ManagerId     = managerId;
            goldBarRecord.Number        = prize;
            goldBarRecord.OperationType = (int)EnumTransactionType.ScoutingLottery;
            goldBarRecord.RowTime       = DateTime.Now;


            #region 球探抽卡


            var response = MallCore.Instance.Scouting(managerId, DateTime.Now, scoutingRecord, scoutingManager,
                                                      isTen, cardList);

            GoldbarRecordMgr.Insert(goldBarRecord);

            #endregion

            if (response.Code == (int)MessageCode.Success)
            {
                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);
                }
                MailBuilder mail = null;
                if (isTen)
                {
                    foreach (var itemcode in cardList)
                    {
                        ActivityExThread.Instance.ScoutingDebris(managerId, itemcode, ref mail);
                    }
                }
                else
                {
                    ActivityExThread.Instance.ScoutingDebris(managerId, scoutingRecord.ItemCode, ref mail);
                }
                if (mail != null)
                {
                    mail.Save();
                }
                List <PopMessageEntity> popList = TaskHandler.Instance.ScoutingLottery(managerId, 1);
                response.Data.PopMsg              = popList;
                response.Data.LuckyCoinNumber     = 0;
                response.Data.GameCurrency        = 0;
                response.Data.NextGoldBarScouting = scoutingManager.ScoutingNumber == 0
                    ? 10
                    : 10 - scoutingManager.ScoutingNumber % 10;
                if (response.Data.AddReiki > 0)
                {
                    ManagerCore.Instance.DeleteCache(managerId);
                }
            }
            return(response);
        }
Exemplo n.º 14
0
        /// <summary>
        /// 竞拍
        /// </summary>
        /// <param name="transferId"></param>
        /// <param name="managerId"></param>
        /// <param name="zoneName"></param>
        /// <returns></returns>
        public AuctionResponse Auction(Guid transferId, Guid managerId, string zoneName)
        {
            AuctionResponse response = new AuctionResponse();

            try
            {
                if (!IsOpen(managerId, zoneName))
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.TransferNotOpen));
                }
                var entity = GetInfo(transferId);
                if (entity == null)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut));
                }
                var goldBarEntity = ScoutingGoldbarMgr.GetById(managerId, zoneName);
                if (goldBarEntity == null || goldBarEntity.GoldBarNumber < entity.Price)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ScoutingGoldBarNot));
                }
                if (entity.Status == 1)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut));
                }
                if (entity.Status == 2)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemHaveSellOut));
                }
                if (entity.SellId == managerId)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NotBuyOneself));
                }
                goldBarEntity.GoldBarNumber = goldBarEntity.GoldBarNumber - entity.Price;
                //手续费 5%
                int poundage = entity.Price * 5 / 100;
                if (poundage == 0)
                {
                    poundage = 1;
                }
                else if (poundage > 20)
                {
                    poundage = 20;
                }

                GoldbarRecordEntity auctionRecord = new GoldbarRecordEntity();
                auctionRecord.IsAdd         = false;
                auctionRecord.ManagerId     = managerId;
                auctionRecord.Number        = entity.Price;
                auctionRecord.OperationType = (int)EnumTransactionType.Transfer;
                auctionRecord.RowTime       = DateTime.Now;

                entity.DealEndId       = managerId;
                entity.DealEndPrice    = entity.Price;
                entity.DealEndZoneName = zoneName;
                entity.Status          = 2;
                entity.UpdateTime      = DateTime.Now;
                entity.Poundage        = poundage;
                if (!TransferMainMgr.Update(entity))
                {
                    entity.Status = 0;
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail));
                }
                if (!ScoutingGoldbarMgr.Update(goldBarEntity, null, zoneName))
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail));
                }

                Remove(transferId);
                //出售人邮件
                var sellMail = new MailBuilder(entity.SellId, entity.ItemName, EnumCurrencyType.GoldBar,
                                               entity.Price - poundage);
                //购买人邮件
                var buyMail = new MailBuilder(managerId, entity.ItemCode, entity.ItemName, entity.Price);
                if (!sellMail.Save(entity.SellZoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + entity.SellId + ",ZoneName:" + entity.SellZoneName + ",GoldBarNumber:" +
                                       (entity.Price - poundage));
                }
                if (!buyMail.Save(zoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + managerId + ",ZoneName:" + zoneName + ",GoldBarNumber:" +
                                       (entity.Price - poundage));
                }
                GoldbarRecordMgr.Insert(auctionRecord, null, zoneName);
                response.Data         = new AuctionEntity();
                response.Data.GoldBar = goldBarEntity.GoldBarNumber;
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("竞拍", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemplo n.º 15
0
        private string SaveBuyPointShipmentsTx(NbManagerEntity manager, int point, int bonus,
                                               PayChargehistoryEntity payEntity, ManagerMonthcardEntity monthcardEntity, MailBuilder mail,
                                               ManagerChargenumberEntity buyRecord, DicMallitemEntity mallConfig, string zoneId)
        {
            if (point > 0 || bonus > 0)
            {
                var messCode1 = PayCore.Instance.AddPoint(payEntity.Account, point, bonus, EnumChargeSourceType.GmCharge,
                                                          payEntity.BillingId, null, zoneId);
                if (messCode1 != MessageCode.Success)
                {
                    return("增加钻石失败" + point + "," + bonus + "," + (int)messCode1);
                }
                PayChargehistoryMgr.Insert(payEntity, null, zoneId);
            }
            if (monthcardEntity != null)
            {
                if (monthcardEntity.BuyNumber == 1)
                {
                    if (!ManagerMonthcardMgr.Insert(monthcardEntity, null, zoneId))
                    {
                        return("月卡发送失败");
                    }
                }
                else
                {
                    if (!ManagerMonthcardMgr.Update(monthcardEntity, null, zoneId))
                    {
                        return("月卡发送失败");
                    }
                }
            }
            if (!mail.Save(zoneId))
            {
                return("邮件发送失败");
            }

            if (buyRecord.Idx == 0)
            {
                ManagerChargenumberMgr.Insert(buyRecord, null, zoneId);
            }
            else
            {
                ManagerChargenumberMgr.Update(buyRecord, null, zoneId);
            }
            try
            {
                if (manager != null)
                {
                    var curScore   = mallConfig.EffectValue * 10;
                    var vipManager = VipManagerMgr.GetById(manager.Idx, zoneId);
                    if (vipManager != null)
                    {
                        curScore         += vipManager.VipExp;
                        vipManager.VipExp = curScore;
                        VipManagerMgr.Update(vipManager, null, zoneId);
                    }
                    else
                    {
                        vipManager = new VipManagerEntity(manager.Idx, curScore, DateTime.Now, DateTime.Now,
                                                          DateTime.Now);
                        VipManagerMgr.Insert(vipManager, null, zoneId);
                    }

                    var newlevel = CacheFactory.VipdicCache.GetVipLevel(curScore);
                    if (newlevel > manager.VipLevel)
                    {
                        manager.VipLevel = newlevel;
                        ManagerUtil.SaveManagerData(manager, null, null, zoneId);
                    }
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("ChargeUpVip", ex);
                return(ex.Message);
            }
            return("");
        }
Exemplo n.º 16
0
        /// <summary>
        /// 发奖
        /// </summary>
        /// <returns></returns>
        public MessageCode SendPrize()
        {
            //获取1000条未发奖的记录
            var prizeList = ArenaManagerrecordMgr.GetNotPrize();

            foreach (var item in prizeList)
            {
                if (item.IsPrize || item.PrizeId > 0)
                {
                    continue;
                }
                var prize = CacheFactory.ArenaCache.GetPrize(item.Rank);
                if (prize == null || prize.Count == 0)
                {
                    continue;
                }
                int arenaCoin = 0;
                var mail      = new MailBuilder(item.ManagerId, EnumMailType.Arena, item.ArenaType, item.Rank, prize,
                                                ref arenaCoin);

                item.IsPrize   = true;
                item.PrizeId   = item.Rank;
                item.PrizeTime = DateTime.Now;
                var messageCode = MessageCode.NbUpdateFail;
                using (
                    var transactionManager =
                        new TransactionManager(Dal.ConnectionFactory.Instance.GetConnectionString(EnumDbType.Support)))
                {
                    transactionManager.BeginTransaction();
                    do
                    {
                        if (!ArenaManagerinfoMgr.AddArenaCoin(item.ManagerId, arenaCoin,
                                                              transactionManager.TransactionObject))
                        {
                            break;
                        }
                        if (!ArenaManagerrecordMgr.Update(item, transactionManager.TransactionObject))
                        {
                            break;
                        }
                        messageCode = MessageCode.Success;
                    } while (false);
                    if (messageCode == MessageCode.Success)
                    {
                        transactionManager.Commit();
                    }
                    else
                    {
                        transactionManager.Rollback();
                        continue;
                    }
                }
                if (messageCode == MessageCode.Success)
                {
                    mail.Save(item.SiteId);
                }
            }

            //刷新对手和排名
            MessageCode messageResult = MessageCode.Success;

            foreach (var item in _threadDic)
            {
                var messageCode = item.Value.Refresh();
                if (messageCode != MessageCode.Success)
                {
                    messageResult = messageCode;
                }
            }
            return(messageResult);
        }
Exemplo n.º 17
0
        /// <summary>
        /// 开奖
        /// </summary>
        public void OpenGamble()
        {
            try
            {
                #region deal case
                //获取已经到了开奖时间,还没有开奖的主题
                List <GambleTitleEntity> titleList = GambleTitleMgr.GetNeedOpenGambleTitles();
                if (titleList == null)
                {
                    return;
                }
                if (titleList.Count == 0)
                {
                    return;
                }

                for (int titleIndex = 0, titleCount = titleList.Count; titleIndex < titleCount; titleIndex++)
                {
                    //如果还没有在后台设置最终哪个选项是获胜选项,就报错
                    if (titleList[titleIndex].ResultFlagId == Guid.Empty)
                    {
                        //SystemlogMgr.Error("Gamble.OpenGamble", "titleList[titleIndex].ResultFlagId == 0");
                        continue;
                    }

                    //List<GambleOptionEntity> optionList = GambleOptionMgr.GetByTitleId(titleList[titleIndex].Idx);
                    //if (optionList == null || optionList.Count == 0)
                    //{
                    //    SystemlogMgr.Error("Gamble.OpenGamble", "optionList == null || optionList.Count == 0");
                    //    continue;
                    //}
                    List <GambleHostEntity> hostList = GambleHostMgr.GetByTitleId(titleList[titleIndex].Idx);
                    if (hostList == null || hostList.Count == 0)
                    {
                        //更新状态为已开奖
                        titleList[titleIndex].Status = 2;
                        if (!GambleTitleMgr.Update(titleList[titleIndex]))
                        {
                            string msg = "GambleTitleId:" + titleList[titleIndex].Idx.ToString() + "Update status to 2 error!";
                            SystemlogMgr.Error("Gamble.OpenGamble", msg);
                        }
                        continue;
                    }

                    for (int hostIndex = 0, hostCount = hostList.Count; hostIndex < hostCount; hostIndex++)
                    {
                        List <GambleHostoptionrateEntity> rateList =
                            GambleHostoptionrateMgr.GetByHostId(hostList[hostIndex].Idx);
                        if (rateList == null)
                        {
                            continue;
                        }
                        if (rateList.Count == 0)
                        {
                            continue;
                        }
                        decimal winRate          = 0.00m;
                        int     gambleTotalMoney = 0;
                        for (int rateIndex = 0, rateCount = rateList.Count; rateIndex < rateCount; rateIndex++)
                        {
                            List <GambleDetailEntity> detailList = GambleDetailMgr.GetByOptionId(rateList[rateIndex].Idx);
                            if (detailList == null || detailList.Count == 0)
                            {
                                continue;
                            }
                            if (titleList[titleIndex].ResultFlagId == Guid.Empty)
                            {
                                SystemlogMgr.Error("Gamble.OpenGamble", "ResultFlagId is 0");
                                continue;
                            }
                            GambleOptionEntity optionRight = GambleOptionMgr.GetById(titleList[titleIndex].ResultFlagId);
                            #region 结算玩家的竞猜点券
                            //猜中的玩家
                            if (rateList[rateIndex].OptionId == titleList[titleIndex].ResultFlagId)
                            {
                                winRate          = rateList[rateIndex].WinRate;
                                gambleTotalMoney = rateList[rateIndex].GambleMoney;
                                //按照赔率进行结算,发送邮件
                                for (int detailIndex = 0, detailCount = detailList.Count; detailIndex < detailCount; detailIndex++)
                                {
                                    //该玩家的竞猜已经开过奖了
                                    if (detailList[detailIndex].Status != 0)
                                    {
                                        continue;
                                    }

                                    //给玩家结算奖金
                                    int returnMoney = Convert.ToInt32(
                                        (decimal)detailList[detailIndex].GambleMoney *
                                        rateList[rateIndex].WinRate * 0.95m);
                                    //更新状态为猜中
                                    detailList[detailIndex].Status      = 1;
                                    detailList[detailIndex].ResultMoney = returnMoney;
                                    if (!GambleDetailMgr.Update(detailList[detailIndex]))
                                    {
                                        continue;
                                    }
                                    //string mailContent = "恭喜你,在参与"+titleList[titleIndex].Title +
                                    //    "的竞猜中,成功猜中" + optionRight.OptionContent + ",获得奖励"
                                    //    + returnMoney +"点券";
                                    MailBuilder mailGambler = new MailBuilder(EnumMailType.GambleReturnToGambler,
                                                                              detailList[detailIndex].ManagerId, titleList[titleIndex].Title, optionRight.OptionContent, EnumCurrencyType.Point, returnMoney);
                                    mailGambler.Save();
                                    //更新竞猜排行榜数据
                                    int subMoney = returnMoney - detailList[detailIndex].GambleMoney;
                                    GambleRankMgr.UpdateData(detailList[detailIndex].ManagerId, detailList[detailIndex].ManagerName, subMoney);
                                }
                            }
                            //没猜中
                            else
                            {
                                for (int detailIndex = 0, detailCount = detailList.Count; detailIndex < detailCount; detailIndex++)
                                {
                                    //更新状态为未猜中
                                    detailList[detailIndex].Status = 2;
                                    GambleDetailMgr.Update(detailList[detailIndex]);
                                    //更新竞猜排行榜数据

                                    GambleRankMgr.UpdateData(detailList[detailIndex].ManagerId, detailList[detailIndex].ManagerName, 0 - detailList[detailIndex].GambleMoney);
                                }
                            }
                            #endregion
                        }

                        #region 结算庄家盈亏
                        if (hostList[hostIndex].ManagerId != LeagueConst.GambleNpcId)
                        {
                            int hostReturnMoney = Convert.ToInt32(winRate * (decimal)gambleTotalMoney);
                            int hostGambleMoney = hostList[hostIndex].TotalMoney - hostReturnMoney;
                            int tax             = 0;
                            int subMoney        = hostGambleMoney - hostList[hostIndex].HostMoney;
                            if (hostGambleMoney > hostList[hostIndex].HostMoney)
                            {
                                tax       = Convert.ToInt32((decimal)subMoney * 0.05m);
                                subMoney -= tax;
                            }
                            int hostMoney = hostGambleMoney - tax;
                            hostList[hostIndex].HostWinMoney = subMoney;
                            //string mailToHost = "你发起的竞猜"+ titleList[titleIndex].Title+"已完成奖励派发,奖池还剩余"+hostMoney
                            //    +"点券,本次竞猜你共盈利"+subMoney+"点券";
                            MailBuilder mailHost = new MailBuilder(EnumMailType.GambleReturnToHost,
                                                                   hostList[hostIndex].ManagerId, titleList[titleIndex].Title,
                                                                   EnumCurrencyType.Point, hostMoney, subMoney);
                            mailHost.Save();
                            //更新竞猜排行榜数据

                            string hostName = ManagerCore.Instance.GetManager(hostList[hostIndex].ManagerId).Name;
                            GambleRankMgr.UpdateData(hostList[hostIndex].ManagerId, hostName, subMoney);
                        }
                        #endregion
                        #region 更新Host状态为已开奖
                        hostList[hostIndex].Status = 2;
                        GambleHostMgr.Update(hostList[hostIndex]);
                        #endregion
                    }

                    //更新状态为已开奖
                    titleList[titleIndex].Status = 2;
                    if (!GambleTitleMgr.Update(titleList[titleIndex]))
                    {
                        string msg = "GambleTitleId:" + titleList[titleIndex].Idx.ToString() + "Update status to 2 error!";
                        SystemlogMgr.Error("Gamble.OpenGamble", msg);
                    }
                }
                #endregion

                #region 更新排行榜
                GambleRankMgr.UpdateRank();
                #endregion
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("Gamble.OpenGamble", ex);
            }
        }