Ejemplo n.º 1
0
        public void OnUserDoSomething(int roleID, RankType rankType, int value)
        {
            DBManager dbMgr = DBManager.getInstance();

            if (null != dbMgr)
            {
                DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(ref roleID);
                if (null != roleInfo)
                {
                    double currSecond = Global.GetOffsetSecond(DateTime.Now);
                    roleInfo.RankValue.AddUserRankValue(rankType, value);
                    lock (this.RankDataDictLock)
                    {
                        foreach (KeyValuePair <string, RankData> item in this.RankDataDict)
                        {
                            RankDataKey rankDataKey = RankDataKey.GetKeyFromStr(item.Key);
                            if (null != rankDataKey)
                            {
                                if (rankType == rankDataKey.rankType)
                                {
                                    double startTime = Global.GetOffsetSecond(DateTime.Parse(rankDataKey.StartDate));
                                    double endTime   = Global.GetOffsetSecond(DateTime.Parse(rankDataKey.EndDate));
                                    if (currSecond >= startTime && currSecond <= endTime)
                                    {
                                        bool bExist = false;
                                        foreach (InputKingPaiHangData rankData in item.Value.RankDataList)
                                        {
                                            if ((RankType.Charge == rankType && rankData.UserID == roleInfo.UserID) || (RankType.Consume == rankType && rankData.UserID == roleInfo.RoleID.ToString()))
                                            {
                                                rankData.PaiHangTime   = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                                                rankData.PaiHangValue += value;
                                                bExist = true;
                                                break;
                                            }
                                        }
                                        if (!bExist)
                                        {
                                            int userRankValue           = roleInfo.RankValue.GetRankValue(rankDataKey);
                                            InputKingPaiHangData phData = new InputKingPaiHangData
                                            {
                                                UserID       = ((RankType.Charge == rankType) ? roleInfo.UserID : roleInfo.RoleID.ToString()),
                                                PaiHang      = 0,
                                                PaiHangTime  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                                PaiHangValue = userRankValue
                                            };
                                            item.Value.RankDataList.Add(phData);
                                        }
                                        this.BuildRank(item.Value);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
 private void BuildRank(RankData rankData)
 {
     if (null != rankData)
     {
         rankData.RankDataList.Sort(delegate(InputKingPaiHangData x, InputKingPaiHangData y)
         {
             int result;
             if (y.PaiHangValue == x.PaiHangValue)
             {
                 double xTime = Global.GetOffsetSecond(DateTime.Parse(x.PaiHangTime));
                 double yTime = Global.GetOffsetSecond(DateTime.Parse(y.PaiHangTime));
                 result       = (int)(xTime - yTime);
             }
             else
             {
                 result = y.PaiHangValue - x.PaiHangValue;
             }
             return(result);
         });
         List <InputKingPaiHangData> listPaiHang = new List <InputKingPaiHangData>();
         if (null != rankData.minGateValueList)
         {
             int preUserPaiHang = 0;
             for (int i = 0; i < rankData.RankDataList.Count; i++)
             {
                 InputKingPaiHangData phData = rankData.RankDataList[i];
                 phData.PaiHang = -1;
                 for (int j = preUserPaiHang; j < rankData.minGateValueList.Count; j++)
                 {
                     if (phData.PaiHangValue >= rankData.minGateValueList[j])
                     {
                         phData.PaiHang = j + 1;
                         listPaiHang.Add(phData);
                         preUserPaiHang = phData.PaiHang;
                         break;
                     }
                 }
                 if (phData.PaiHang < 0 || phData.PaiHang >= rankData.minGateValueList.Count)
                 {
                     break;
                 }
             }
             rankData.RankDataList = listPaiHang;
         }
     }
 }
Ejemplo n.º 3
0
        public override bool CheckCondition(GameClient client, int extTag)
        {
            bool result;

            try
            {
                JieriPlatChargeKingEveryDay.ChargeItem ci = null;
                if (!this.IdVsChargeItemDict.TryGetValue(extTag, out ci))
                {
                    result = false;
                }
                else
                {
                    DateTime startTime = DateTime.Parse(this.FromDate);
                    DateTime endTime   = DateTime.Parse(this.ToDate);
                    DateTime now       = TimeUtil.NowDateTime();
                    lock (this.Mutex)
                    {
                        if (now < startTime.AddDays((double)ci.Day))
                        {
                            return(false);
                        }
                        InputKingPaiHangDataEx kfpaihangData = null;
                        if (this._kfRankDict == null || !this._kfRankDict.TryGetValue(ci.Day, out kfpaihangData))
                        {
                            return(false);
                        }
                        DateTime rankTm;
                        DateTime.TryParse(kfpaihangData.RankTime, out rankTm);
                        if (rankTm < startTime.AddDays((double)ci.Day))
                        {
                            return(false);
                        }
                        List <InputKingPaiHangData> paihangDataList = null;
                        if (this._realRankDict == null || !this._realRankDict.TryGetValue(ci.Day, out paihangDataList))
                        {
                            return(false);
                        }
                        InputKingPaiHangData myData = paihangDataList.Find((InputKingPaiHangData x) => 0 == string.Compare(x.UserID, client.strUserID, true));
                        if (myData == null || myData.PaiHang != ci.Rank)
                        {
                            return(false);
                        }
                        string huoDongKeyStr = Global.GetHuoDongKeyString(this.FromDate, this.ToDate);
                        long   hasgettimes   = KFCopyRpcClient.getInstance().QueryHuodongAwardUserHist(77, huoDongKeyStr, client.strUserID);
                        if (hasgettimes < 0L)
                        {
                            return(false);
                        }
                        int bitVal = Global.GetBitValue(ci.Day);
                        if ((hasgettimes & (long)bitVal) == (long)bitVal)
                        {
                            return(false);
                        }
                    }
                    result = true;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", this.CfgFile, ex.Message), null, true);
                result = false;
            }
            return(result);
        }
Ejemplo n.º 4
0
        private static List <PaiHangItemData> GetRankListByActiveLimit(DBManager dbMgr, string fromDate, string toDate, List <int> minGateValueList, int activeId, int maxPaiHang = 3)
        {
            List <InputKingPaiHangData> listPaiHangReal = new List <InputKingPaiHangData>();
            List <PaiHangItemData>      ranklist        = new List <PaiHangItemData>();

            switch (activeId)
            {
            case 34:
                listPaiHangReal = Global.GetInputKingPaiHangListByHuoDongLimit(dbMgr, fromDate, toDate, null, maxPaiHang);
                break;

            case 35:
                listPaiHangReal = Global.GetUsedMoneyKingPaiHangListByHuoDongLimit(dbMgr, fromDate, toDate, null, maxPaiHang);
                break;

            case 36:
            {
                string paiHangDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                if (!Global.IsInActivityPeriod(fromDate, toDate))
                {
                    paiHangDate = toDate;
                }
                return(NewZoneActiveMgr.GetActiveKingTypeRanklist(dbMgr, minGateValueList, activeId, paiHangDate, maxPaiHang));
            }

            case 37:
            {
                DateTime now = DateTime.Now;
                DateTime huodongStartTime = new DateTime(2000, 1, 1, 0, 0, 0);
                DateTime.TryParse(fromDate, out huodongStartTime);
                DateTime sub1DayDateTime = Global.GetAddDaysDataTime(now, -1, true);
                string   startTime       = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).ToString("yyyy-MM-dd HH:mm:ss");
                string   endTime         = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59).ToString("yyyy-MM-dd HH:mm:ss");
                listPaiHangReal = Global.GetInputKingPaiHangListByHuoDongLimit(dbMgr, startTime, endTime, null, maxPaiHang);
                break;
            }
            }
            int    preUserPaiHang = 0;
            int    preValueid     = 0;
            string uid            = "";
            bool   bFirst         = true;

            for (int i = 0; i < listPaiHangReal.Count; i++)
            {
                InputKingPaiHangData phData = listPaiHangReal[i];
                phData.PaiHang = -1;
                if (activeId != 35)
                {
                    Global.GetUserMaxLevelRole(dbMgr, phData.UserID, out phData.MaxLevelRoleName, out phData.MaxLevelRoleZoneID);
                }
                else
                {
                    Global.GetRoleNameAndUserID(dbMgr, Global.SafeConvertToInt32(phData.UserID, 10), out phData.MaxLevelRoleName, out uid);
                }
                for (int j = 0; j < minGateValueList.Count; j++)
                {
                    int values = phData.PaiHangValue;
                    if (activeId == 35)
                    {
                        values = phData.PaiHangValue;
                    }
                    if (values >= minGateValueList[j])
                    {
                        if (bFirst)
                        {
                            phData.PaiHang = j + 1;
                        }
                        else if (j == preValueid)
                        {
                            phData.PaiHang = preUserPaiHang + 1;
                        }
                        else if (j + 1 > preUserPaiHang)
                        {
                            phData.PaiHang = j + 1;
                        }
                        else
                        {
                            phData.PaiHang = preUserPaiHang + 1;
                        }
                        PaiHangItemData item = new PaiHangItemData();
                        item.Val1 = values;
                        if (activeId == 35)
                        {
                            item.RoleID = Convert.ToInt32(phData.UserID);
                        }
                        item.RoleName = phData.MaxLevelRoleName;
                        item.Val2     = phData.PaiHang;
                        item.uid      = phData.UserID;
                        ranklist.Add(item);
                        preValueid     = j;
                        preUserPaiHang = phData.PaiHang;
                        bFirst         = false;
                        break;
                    }
                }
                if (phData.PaiHang < 0 || phData.PaiHang >= minGateValueList.Count)
                {
                    break;
                }
            }
            if (activeId == 37)
            {
                for (int j = 0; j < ranklist.Count; j++)
                {
                    int rank = j + minGateValueList.Count - ranklist.Count;
                    ranklist[j].Val1 = ranklist[j].Val1 * minGateValueList[rank] / 100;
                }
            }
            return(ranklist);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 返回新区活动排行数据列表,不包括冲级狂人
        /// </summary>
        /// <param name="dbMgr"></param>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <param name="minGateValueList"></param>
        /// <param name="maxPaiHang"></param>
        /// <returns></returns>
        private static List <PaiHangItemData> GetRankListByActiveLimit(DBManager dbMgr, string fromDate, string toDate, List <int> minGateValueList, int activeId, int maxPaiHang = 3)
        {
            //返回排行信息
            List <InputKingPaiHangData> listPaiHangReal = new List <InputKingPaiHangData>();
            List <PaiHangItemData>      ranklist        = new List <PaiHangItemData>();

            switch (activeId)
            {
            case (int)ActivityTypes.NewZoneUpLevelMadman:
                break;

            case (int)ActivityTypes.NewZoneBosskillKing:
                string paiHangDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                //如果今天活动结束,就取活动结束时间作为排行读取时间点
                if (!Global.IsInActivityPeriod(fromDate, toDate))
                {
                    paiHangDate = toDate;
                }
                return(GetActiveKingTypeRanklist(dbMgr, minGateValueList, activeId, paiHangDate, maxPaiHang));

            // break;
            case (int)ActivityTypes.NewZoneConsumeKing:
                listPaiHangReal = DBQuery.GetUserUsedMoneyPaiHang(dbMgr, fromDate, toDate, maxPaiHang);
                break;

            case (int)ActivityTypes.NewZoneFanli:
            {
                DateTime now = DateTime.Now;
                DateTime huodongStartTime = new DateTime(2000, 1, 1, 0, 0, 0);
                DateTime.TryParse(fromDate, out huodongStartTime);
                //int roleYuanBaoInPeriod = 0;
                //if (now.Ticks <= (huodongStartTime.Ticks + (10000L * 1000L * 24L * 60L * 60L)))
                //{

                //    return ranklist;
                //}

                /// 获取一个增加了-1天时间的DateTime
                DateTime sub1DayDateTime = Global.GetAddDaysDataTime(now, -1, true);

                string startTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).ToString("yyyy-MM-dd HH:mm:ss");
                string endTime   = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59).ToString("yyyy-MM-dd HH:mm:ss");
                listPaiHangReal = DBQuery.GetUserInputPaiHang(dbMgr, startTime, endTime, maxPaiHang);
            }

            break;

            case (int)ActivityTypes.NewZoneRechargeKing:
                listPaiHangReal = DBQuery.GetUserInputPaiHang(dbMgr, fromDate, toDate, maxPaiHang);
                break;
            }

            //  List<InputKingPaiHangData> listPaiHang = new List<InputKingPaiHangData>();

            //上一个玩家的排行 0 表示上个玩家没有排行
            int    preUserPaiHang = 0;
            int    preValueid     = 0;
            string uid            = "";
            bool   bFirst         = true;

            //重整排行表
            for (int n = 0; n < listPaiHangReal.Count; n++)
            {
                InputKingPaiHangData phData = listPaiHangReal[n];
                phData.PaiHang = -1;
                if (activeId != (int)ActivityTypes.NewZoneConsumeKing)
                {
                    Global.GetUserMaxLevelRole(dbMgr, phData.UserID, out phData.MaxLevelRoleName, out phData.MaxLevelRoleZoneID);
                }
                else
                {
                    Global.GetRoleNameAndUserID(dbMgr, Global.SafeConvertToInt32(phData.UserID), out phData.MaxLevelRoleName, out uid);
                }

                //不满足该排行位置需要的最低数值要求,则依次降低排名
                for (int i = 0; i < minGateValueList.Count; i++)
                {
                    int values = Global.TransMoneyToYuanBao(phData.PaiHangValue);
                    if (activeId == (int)ActivityTypes.NewZoneConsumeKing)
                    {
                        values = phData.PaiHangValue;
                    }
                    if (values >= minGateValueList[i])
                    {
                        if (bFirst)
                        {
                            phData.PaiHang = i + 1;
                        }
                        else
                        {
                            if (i == preValueid)
                            {
                                phData.PaiHang = preUserPaiHang + 1;
                            }
                            else
                            {
                                if (i + 1 > preUserPaiHang)
                                {
                                    phData.PaiHang = i + 1;
                                }
                                else
                                {
                                    phData.PaiHang = preUserPaiHang + 1;
                                }
                            }
                        }
                        PaiHangItemData item = new PaiHangItemData();
                        item.Val1 = values;
                        if (activeId == (int)ActivityTypes.NewZoneConsumeKing)
                        {
                            item.RoleID = Convert.ToInt32(phData.UserID);
                        }
                        item.RoleName = phData.MaxLevelRoleName;
                        item.Val2     = phData.PaiHang;
                        item.uid      = phData.UserID;
                        ranklist.Add(item);
                        preValueid     = i;
                        preUserPaiHang = phData.PaiHang;
                        bFirst         = false;
                        break;
                    }
                }

                //这个靠前的排行数据没有满足排行值限制的最小要求,则其后的排行数据也满足不了
                if (phData.PaiHang < 0 || phData.PaiHang >= minGateValueList.Count)
                {
                    break;
                }
            }

            //计算充值返利
            if (activeId == (int)ActivityTypes.NewZoneFanli)
            {
                for (int i = 0; i < ranklist.Count; i++)
                {
                    int rank = i + minGateValueList.Count - ranklist.Count;
                    ranklist[i].Val1 = ranklist[i].Val1 * minGateValueList[rank] / 100;
                }
            }

            return(ranklist);
        }