Exemple #1
0
 static void SendRankPrize(CrosscrowdInfoEntity crowdInfo)
 {
     if (crowdInfo.IsSendRankPrize)
     {
         return;
     }
     try
     {
         var  maxKiller = CrosscrowdInfoMgr.GetMaxKiller(crowdInfo.Idx);
         var  list      = CrosscrowdInfoMgr.GetForSendRankPrize(crowdInfo.Idx);
         bool isSend    = true;
         if (list != null)
         {
             bool isMaxKiller = false;
             foreach (var entity in list)
             {
                 isMaxKiller = false;
                 if (doSendRankPrize(crowdInfo, entity, -1, -1) != MessageCode.Success)
                 {
                     SystemlogMgr.Error("跨服群雄发奖", "发奖失败,idx=" + entity.Idx);
                     isSend = false;
                 }
             }
         }
         crowdInfo.IsSendRankPrize = isSend;
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("CrossCrowd-SendRankPrize", ex);
     }
 }
        /// <summary>
        /// 带事务的Update
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="trans">The trans.</param>
        /// <returns></returns>
        /// <remarks>2016-08-15 11:12:28</remarks>
        public bool Update(CrosscrowdInfoEntity entity, DbTransaction trans)
        {
            var       database       = new SqlDatabase(this.ConnectionString);
            DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_CrosscrowdInfo_Update");

            database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx);
            database.AddInParameter(commandWrapper, "@StartTime", DbType.DateTime, entity.StartTime);
            database.AddInParameter(commandWrapper, "@EndTime", DbType.DateTime, entity.EndTime);
            database.AddInParameter(commandWrapper, "@DomainId", DbType.Int32, entity.DomainId);
            database.AddInParameter(commandWrapper, "@PlayerCount", DbType.Int32, entity.PlayerCount);
            database.AddInParameter(commandWrapper, "@PairCount", DbType.Int32, entity.PairCount);
            database.AddInParameter(commandWrapper, "@PrizePoint", DbType.Int32, entity.PrizePoint);
            database.AddInParameter(commandWrapper, "@IsSendKillPrize", DbType.Boolean, entity.IsSendKillPrize);
            database.AddInParameter(commandWrapper, "@IsSendRankPrize", DbType.Boolean, entity.IsSendRankPrize);
            database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status);
            database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime);
            database.AddInParameter(commandWrapper, "@PrizeLegendCount", DbType.Int32, entity.PrizeLegendCount);


            int results = 0;

            if (trans != null)
            {
                results = database.ExecuteNonQuery(commandWrapper, trans);
            }
            else
            {
                results = database.ExecuteNonQuery(commandWrapper);
            }

            entity.Idx = (System.Int32)database.GetParameterValue(commandWrapper, "@Idx");

            return(Convert.ToBoolean(results));
        }
Exemple #3
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);
 }
Exemple #4
0
        private MessageCode Start(DateTime startTime, DateTime endTime)
        {
            var      crowd   = CrosscrowdInfoMgr.GetCurrent(_domainId);
            DateTime curTime = DateTime.Now;

            if (crowd != null && crowd.EndTime > curTime)
            {
                return(MessageCode.CrowdNotEnding);
            }
            if (startTime >= endTime || endTime < curTime)
            {
                return(MessageCode.NbParameterError);
            }
            crowd           = new CrosscrowdInfoEntity();
            crowd.DomainId  = _domainId;
            crowd.StartTime = startTime;
            crowd.EndTime   = endTime;
            crowd.RowTime   = DateTime.Now;
            if (CrosscrowdInfoMgr.Insert(crowd))
            {
                CrowdManagerDic = new ConcurrentDictionary <Guid, int>();
                _crowdInfo      = crowd;
                _status         = EnumLadderStatus.Running;
                //CrossChatHelper.SendBannerCrowdOpen(_domainId);
                RobotCore.Instance.RunHook(EnumMatchType.CrossCrowd, endTime);
                return(MessageCode.Success);
            }
            else
            {
                return(MessageCode.NbUpdateFail);
            }
        }
Exemple #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);
        }
Exemple #6
0
        private void Initialize()
        {
            CrowdManagerDic      = new ConcurrentDictionary <Guid, int>();
            CompetitorDic        = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>();
            ManagerFightDic      = new Dictionary <Guid, CrowdHeartEntity>();
            _crowdResurrectionCd = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdResurrectionCd);
            _crowdCd             = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdCd);
            _crowdMaxPoint       = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdMaxPoint);
            _crowdMaxLegendCount = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdMaxLegendCount);
            _startTime           = DateTime.Now;
            //初始化分组模板
            InitGroupTemplate();

            #region Init Condition dic
            string condition = CacheFactory.AppsettingCache.GetAppSetting(EnumAppsetting.CrowdCondition);
            _conditions = new List <ArenaCondition>();
            if (!string.IsNullOrEmpty(condition))
            {
                string[] tempConditions = condition.Split('|');
                foreach (var s in tempConditions)
                {
                    string[] temp = s.Split(',');
                    _conditions.Add(new ArenaCondition(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1])));
                }
            }
            #endregion
            _nbThreadPool = new NBThreadPool(5);
            _clearTimer   = new Timer {
                Interval = ClearFightdicTime
            };
            _clearTimer.Elapsed += new ElapsedEventHandler(ClearFightDic);

            _timer = new Timer {
                Interval = 5000
            };
            _timer.Elapsed += new ElapsedEventHandler(CheckStatusJob);
            var      crowd   = CrosscrowdInfoMgr.GetCurrent(_domainId);
            DateTime curTime = DateTime.Now;
            if (crowd != null && crowd.EndTime > curTime)
            {
                _crowdInfo = crowd;
                _status    = EnumLadderStatus.Running;
                RobotCore.Instance.RunHook(EnumMatchType.CrossCrowd, _crowdInfo.EndTime);
            }
            else
            {
                _status = EnumLadderStatus.End;
            }
        }
        /// <summary>
        /// 将IDataReader的当前记录读取到CrosscrowdInfoEntity 对象
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public CrosscrowdInfoEntity LoadSingleRow(IDataReader reader)
        {
            var obj = new CrosscrowdInfoEntity();

            obj.Idx              = (System.Int32)reader["Idx"];
            obj.StartTime        = (System.DateTime)reader["StartTime"];
            obj.EndTime          = (System.DateTime)reader["EndTime"];
            obj.DomainId         = (System.Int32)reader["DomainId"];
            obj.PlayerCount      = (System.Int32)reader["PlayerCount"];
            obj.PairCount        = (System.Int32)reader["PairCount"];
            obj.PrizePoint       = (System.Int32)reader["PrizePoint"];
            obj.IsSendKillPrize  = (System.Boolean)reader["IsSendKillPrize"];
            obj.IsSendRankPrize  = (System.Boolean)reader["IsSendRankPrize"];
            obj.Status           = (System.Int32)reader["Status"];
            obj.RowTime          = (System.DateTime)reader["RowTime"];
            obj.PrizeLegendCount = (System.Int32)reader["PrizeLegendCount"];

            return(obj);
        }
Exemple #8
0
 void CrowdEnd()
 {
     try
     {
         _crowdInfo.Status = (int)EnumLadderStatus.End;
         CrosscrowdInfoMgr.Update(_crowdInfo);
         _crowdInfo    = null;
         CompetitorDic = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>();
         //CrossChatHelper.SendBannerCrowdEnd(_domainId);
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("CrossCrowd-CrowdEnd", ex);
     }
     finally
     {
         _status = EnumLadderStatus.End;
     }
 }
        /// <summary>
        /// GetById
        /// </summary>
        /// <param name="idx">idx</param>
        /// <returns>CrosscrowdInfoEntity</returns>
        /// <remarks>2016-08-15 11:12:27</remarks>
        public CrosscrowdInfoEntity GetById(System.Int32 idx)
        {
            var database = new SqlDatabase(this.ConnectionString);

            DbCommand commandWrapper = database.GetStoredProcCommand("P_CrosscrowdInfo_GetById");

            database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx);


            CrosscrowdInfoEntity obj = null;

            using (IDataReader reader = database.ExecuteReader(commandWrapper))
            {
                if (reader.Read())
                {
                    obj = LoadSingleRow(reader);
                }
            }
            return(obj);
        }
Exemple #10
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);
                }
            }
        }
Exemple #11
0
 static void SendKillPrize(CrosscrowdInfoEntity crowdInfo, int maxPoint, int maxLegendCount)
 {
     if (crowdInfo.IsSendKillPrize)
     {
         return;
     }
     try
     {
         var list = CrosscrowdInfoMgr.GetForSendKillPrize(crowdInfo.Idx);
         if (list != null)
         {
             foreach (var entity in list)
             {
                 doSendKillPrize(crowdInfo, entity, maxPoint, maxLegendCount);
             }
         }
         crowdInfo.IsSendKillPrize = true;
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("CrossCrowd-SendKillPrize", ex);
     }
 }
Exemple #12
0
 static void doSendKillPrize(CrosscrowdInfoEntity crowd, CrosscrowdSendKillPrizeEntity entity, int maxPoint, int maxLegendCount)
 {
     try
     {
         if (entity.Status != 0)
         {
             return;
         }
         if (entity.HomeMorale <= 0)
         {
             doSendKillPrize(crowd, entity.Idx, entity.AwayId, entity.HomeName, entity.AwaySiteId, maxPoint, maxLegendCount);
         }
         if (entity.AwayMorale <= 0)
         {
             doSendKillPrize(crowd, entity.Idx, entity.HomeId, entity.AwayName, entity.HomeSiteId, maxPoint, maxLegendCount);
         }
         entity.Status = 1;
         CrosscrowdMatchMgr.SaveKillPrizeStatus(entity.Idx, entity.Status);
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("CrossCrowd-doSendKillPrize", ex);
     }
 }
 /// <summary>
 /// Update
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 /// <remarks>2016-08-15 11:12:28</remarks>
 public bool Update(CrosscrowdInfoEntity entity)
 {
     return(Update(entity, null));
 }
 /// <summary>
 /// Insert
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="trans">The trans.</param>
 /// <returns></returns>
 /// <remarks>2016-08-15 11:12:28</remarks>
 public bool Insert(CrosscrowdInfoEntity entity)
 {
     return(Insert(entity, null));
 }
Exemple #15
0
        static MessageCode BuildPrizeMail(CrosscrowdInfoEntity crowd, MailBuilder mail, EnumCrowdPrizeCategory category, int categorySub, int maxPoint, int maxLegendCount, ref string prizeItemString)
        {
            try
            {//11 天梯奖励     12击杀奖励
                var prizes = CacheFactory.CrowdCache.GetRankPrizes(category, categorySub);
                if (prizes != null)
                {
                    //1	金币
                    //2	卡库	卡库id
                    //3	物品	物品code
                    //4	非彩色球魂
                    //5	点券
                    //7 绑定点卷
                    var itemCode = 0;
                    foreach (var entity in prizes)
                    {
                        if (!RandomHelper.CheckPercentage(entity.Rate))
                        {
                            continue;
                        }
                        switch (entity.Type)
                        {
                        case 1:
                            mail.AddAttachment(EnumCurrencyType.Coin, entity.Count);
                            prizeItemString += string.Format("1Coin:{0}|", entity.Count);
                            break;

                        case 2:
                            itemCode = CacheFactory.LotteryCache.LotteryByLib(entity.SubType);
                            if (itemCode > 0)
                            {
                                mail.AddAttachment(entity.Count, itemCode, entity.IsBinding, entity.Strength);
                                prizeItemString += string.Format("2Item-C:{0},I:{1},B:{2},S:{3}|", entity.Count,
                                                                 itemCode, entity.IsBinding, entity.Strength);
                            }
                            break;

                        case 3:
                            if (maxLegendCount != -1 && entity.SubType == 310165)
                            {
                                if (crowd.PrizeLegendCount < maxLegendCount)
                                {
                                    BuildPrizeMailItem(mail, entity, "3Item", ref prizeItemString);
                                    crowd.PrizeLegendCount++;
                                }
                            }
                            else
                            {
                                BuildPrizeMailItem(mail, entity, "3Item", ref prizeItemString);
                            }
                            break;

                        case 4:
                            itemCode = CacheFactory.ItemsdicCache.RandomBallsoulOthercolorForWCH();
                            if (itemCode > 0)
                            {
                                mail.AddAttachment(entity.Count, itemCode, entity.IsBinding, entity.Strength);
                                prizeItemString += string.Format("4Item-C:{0},I:{1},B:{2},S:{3}|", entity.Count,
                                                                 itemCode, entity.IsBinding, entity.Strength);
                            }
                            break;

                        case 5:
                            var totalPrizePoint = crowd.PrizePoint;
                            if (category == EnumCrowdPrizeCategory.CrossRank)
                            {
                                int point = RandomHelper.GetInt32(entity.Min, entity.Max);
                                if (point > 0)
                                {
                                    mail.AddAttachment(EnumCurrencyType.Point, point);
                                    prizeItemString += string.Format("5Point:{0}|", point);
                                }
                            }
                            else if (maxPoint == -1 || totalPrizePoint < maxPoint)
                            {
                                int point = RandomHelper.GetInt32(entity.Min, entity.Max);
                                totalPrizePoint += point;
                                if (totalPrizePoint > maxPoint)
                                {
                                    point           = maxPoint - crowd.PrizePoint;
                                    totalPrizePoint = maxPoint;
                                }
                                if (maxPoint != -1)
                                {
                                    crowd.PrizePoint = totalPrizePoint;
                                }
                                if (point > 0)
                                {
                                    mail.AddAttachment(EnumCurrencyType.Point, point);
                                    prizeItemString += string.Format("5Point:{0}|", point);
                                }
                            }
                            break;

                        case 6:
                            int prizeCount = 0;
                            if (RandomHelper.CheckPercentage(entity.Min))
                            {
                                prizeCount = RandomHelper.GetInt32(21, 30);
                            }
                            else if (RandomHelper.CheckPercentage(entity.Max))
                            {
                                prizeCount = RandomHelper.GetInt32(16, 20);
                            }
                            else
                            {
                                prizeCount = RandomHelper.GetInt32(6, 15);
                            }
                            //var prizeCount = RandomHelper.GetInt32(entity.Min, entity.Max);
                            mail.AddAttachment(prizeCount, entity.SubType, entity.IsBinding, entity.Strength);
                            prizeItemString += string.Format("3Item-C:{0},I:{1},B:{2},S:{3}|", prizeCount,
                                                             entity.SubType, entity.IsBinding, entity.Strength);
                            break;

                        case 7:
                            var totalBindPoint = crowd.PrizePoint;
                            if (category == EnumCrowdPrizeCategory.CrossRank)
                            {
                                int point = RandomHelper.GetInt32(entity.Min, entity.Max);
                                if (point > 0)
                                {
                                    mail.AddAttachment(EnumCurrencyType.BindPoint, point);
                                    prizeItemString += string.Format("8Point:{0}|", point);
                                }
                            }
                            else if (maxPoint == -1 || totalBindPoint < maxPoint)
                            {
                                int point = RandomHelper.GetInt32(entity.Min, entity.Max);
                                totalBindPoint += point;
                                if (totalBindPoint > maxPoint)
                                {
                                    point          = maxPoint - crowd.PrizePoint;
                                    totalBindPoint = maxPoint;
                                }
                                if (maxPoint != -1)
                                {
                                    crowd.PrizePoint = totalBindPoint;
                                }
                                if (point > 0)
                                {
                                    mail.AddAttachment(EnumCurrencyType.BindPoint, point);
                                    prizeItemString += string.Format("8Point:{0}|", point);
                                }
                            }
                            break;
                        }
                    }
                    if (category == EnumCrowdPrizeCategory.CrossKill)
                    {
                        if (isKillDouble)
                        {
                            mail.AddAttachment(1, 310154, false, 1);
                            prizeItemString += string.Format("3Item-C:{0},I:{1},B:{2},S:{3}|", 1,
                                                             310154, false, 1);
                        }
                    }
                    prizeItemString = prizeItemString.TrimEnd('|');
                }
            }
            catch (Exception ex)
            {
                return(MessageCode.NbParameterError);
            }
            return(MessageCode.Success);
        }
Exemple #16
0
        public static bool Update(CrosscrowdInfoEntity crosscrowdInfoEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new CrosscrowdInfoProvider(zoneId);

            return(provider.Update(crosscrowdInfoEntity, trans));
        }