Ejemplo n.º 1
0
        public bool ProcessTianTiGetPaiHangAwardsCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int result = StdErrorCode.Error_Not_Exist;
                DuanWeiRankAward duanWeiRankAward = null;
                if (CanGetMonthRankAwards(client, out duanWeiRankAward))
                {
                    List <GoodsData> goodsDataList = Global.ConvertToGoodsDataList(duanWeiRankAward.Award.Items);
                    if (!Global.CanAddGoodsDataList(client, goodsDataList))
                    {
                        result = StdErrorCode.Error_BagNum_Not_Enough;
                    }
                    else
                    {
                        result = StdErrorCode.Error_Success_No_Info;
                        client.ClientData.TianTiData.FetchMonthDuanWeiRankAwardsTime = TimeUtil.NowDateTime();
                        Global.sendToDB <int, RoleTianTiData>((int)TCPGameServerCmds.CMD_DB_TIANTI_UPDATE_ROLE_DATA, client.ClientData.TianTiData, client.ServerId);
                        for (int i = 0; i < goodsDataList.Count; i++)
                        {
                            //向DBServer请求加入某个新的物品到背包中
                            Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, goodsDataList[i].GoodsID, goodsDataList[i].GCount, goodsDataList[i].Quality, "", goodsDataList[i].Forge_level, goodsDataList[i].Binding, 0, "", true, 1, "天梯月段位排名奖励", Global.ConstGoodsEndTime, 0, goodsDataList[i].BornIndex, goodsDataList[i].Lucky, 0, goodsDataList[i].ExcellenceInfo, goodsDataList[i].AppendPropLev);
                        }
                    }
                }
                else if (duanWeiRankAward != null)
                {
                    if (client.CodeRevision <= 2)
                    {
                        result = StdErrorCode.Error_Success;
                        GameManager.ClientMgr.NotifyHintMsg(client, Global.GetLang("请等待排名更新后再领取排名奖励"));
                    }
                }

                //发送结果给客户端
                client.sendCmd(nID, result);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
Ejemplo n.º 2
0
        public bool CanGetMonthRankAwards(GameClient client, out DuanWeiRankAward duanWeiRankAward)
        {
            duanWeiRankAward = null;
            lock (RuntimeData.Mutex)
            {
                if (client.ClientData.TianTiData.MonthDuanWeiRank > 0)
                {
                    if (RuntimeData.DuanWeiRankAwardDict.TryGetValue(client.ClientData.TianTiData.MonthDuanWeiRank, out duanWeiRankAward))
                    {
                        DateTime fetchTime = client.ClientData.TianTiData.FetchMonthDuanWeiRankAwardsTime;
                        DateTime now       = TimeUtil.NowDateTime();
                        if ((fetchTime.Month != now.Month || fetchTime.Year != now.Year))
                        {
                            if (new DateTime(fetchTime.Year, fetchTime.Month, 1) < new DateTime(RuntimeData.ModifyTime.Year, RuntimeData.ModifyTime.Month, 1))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 初始化配置
        /// </summary>
        public bool InitConfig()
        {
            bool     success          = true;
            XElement xml              = null;
            string   fileName         = "";
            string   fullPathFileName = "";
            IEnumerable <XElement> nodes;

            lock (RuntimeData.Mutex)
            {
                try
                {
                    //段位配置
                    RuntimeData.TianTiDuanWeiDict.Clear();
                    RuntimeData.DuanWeiJiFenRangeDuanWeiIdDict.Clear();

                    int preJiFen     = 0;
                    int perDuanWeiId = 0;
                    int maxDuanWeiId = 0;
                    fileName         = "Config/DuanWei.xml";
                    fullPathFileName = Global.GameResPath(fileName); //Global.IsolateResPath(fileName);
                    xml   = XElement.Load(fullPathFileName);
                    nodes = xml.Elements();
                    foreach (var node in nodes)
                    {
                        TianTiDuanWei item = new TianTiDuanWei();
                        item.ID = (int)Global.GetSafeAttributeLong(node, "ID");
                        item.NeedDuanWeiJiFen = (int)Global.GetSafeAttributeLong(node, "NeedDuanWeiJiFen");
                        item.WinJiFen         = (int)Global.GetSafeAttributeLong(node, "WinJiFen");
                        item.LoseJiFen        = (int)Global.GetSafeAttributeLong(node, "LoseJiFen");
                        item.RongYaoNum       = (int)Global.GetSafeAttributeLong(node, "RongYaoNum");
                        item.WinRongYu        = (int)Global.GetSafeAttributeLong(node, "WinRongYu");
                        item.LoseRongYu       = (int)Global.GetSafeAttributeLong(node, "LoseRongYu");

                        if (perDuanWeiId > 0)
                        {
                            RuntimeData.DuanWeiJiFenRangeDuanWeiIdDict[new RangeKey(preJiFen, item.NeedDuanWeiJiFen - 1)] = perDuanWeiId;
                        }

                        preJiFen     = item.NeedDuanWeiJiFen;
                        perDuanWeiId = item.ID;
                        maxDuanWeiId = item.ID;
                        RuntimeData.TianTiDuanWeiDict[item.ID] = item;
                    }

                    if (maxDuanWeiId > 0 && preJiFen > 0)
                    {
                        RuntimeData.DuanWeiJiFenRangeDuanWeiIdDict[new RangeKey(preJiFen, int.MaxValue)] = maxDuanWeiId;
                    }

                    //出生点配置
                    RuntimeData.MapBirthPointDict.Clear();

                    fileName         = "Config/TianTiBirthPoint.xml";
                    fullPathFileName = Global.GameResPath(fileName); //Global.IsolateResPath(fileName);
                    xml   = XElement.Load(fullPathFileName);
                    nodes = xml.Elements();
                    foreach (var node in nodes)
                    {
                        TianTiBirthPoint item = new TianTiBirthPoint();
                        item.ID          = (int)Global.GetSafeAttributeLong(node, "ID");
                        item.PosX        = (int)Global.GetSafeAttributeLong(node, "PosX");
                        item.PosY        = (int)Global.GetSafeAttributeLong(node, "PosY");
                        item.BirthRadius = (int)Global.GetSafeAttributeLong(node, "BirthRadius");

                        RuntimeData.MapBirthPointDict[item.ID] = item;
                    }

                    //段位排行奖励
                    RuntimeData.DuanWeiRankAwardDict.Clear();

                    fileName         = "Config/DuanWeiRankAward.xml";
                    fullPathFileName = Global.GameResPath(fileName); //Global.IsolateResPath(fileName);
                    xml   = XElement.Load(fullPathFileName);
                    nodes = xml.Elements();
                    foreach (var node in nodes)
                    {
                        DuanWeiRankAward item = new DuanWeiRankAward();
                        item.ID       = (int)Global.GetSafeAttributeLong(node, "ID");
                        item.StarRank = (int)Global.GetSafeAttributeLong(node, "StarRank");
                        item.EndRank  = (int)Global.GetSafeAttributeLong(node, "EndRank");
                        ConfigParser.ParseAwardsItemList(Global.GetSafeAttributeStr(node, "Award"), ref item.Award);
                        if (item.EndRank < 0)
                        {
                            item.EndRank = int.MaxValue;
                        }

                        RuntimeData.DuanWeiRankAwardDict[new RangeKey(item.StarRank, item.EndRank)] = item;
                    }

                    //活动配置
                    RuntimeData.MapCodeDict.Clear();

                    fileName         = "Config/TianTi.xml";
                    fullPathFileName = Global.GameResPath(fileName); //Global.IsolateResPath(fileName);
                    xml   = XElement.Load(fullPathFileName);
                    nodes = xml.Elements();
                    foreach (var node in nodes)
                    {
                        int mapCode = (int)Global.GetSafeAttributeLong(node, "MapCode");
                        if (!RuntimeData.MapCodeDict.ContainsKey(mapCode))
                        {
                            RuntimeData.MapCodeDict[mapCode] = 1;
                            RuntimeData.MapCodeList.Add(mapCode);
                        }

                        RuntimeData.WaitingEnterSecs = (int)Global.GetSafeAttributeLong(node, "WaitingEnterSecs");
                        RuntimeData.FightingSecs     = (int)Global.GetSafeAttributeLong(node, "FightingSecs");
                        RuntimeData.ClearRolesSecs   = (int)Global.GetSafeAttributeLong(node, "ClearRolesSecs");

                        if (!ConfigParser.ParserTimeRangeList(RuntimeData.TimePoints, Global.GetSafeAttributeStr(node, "TimePoints")))
                        {
                            success = false;
                            LogManager.WriteLog(LogTypes.Fatal, "读取跨服天梯系统时间配置(TimePoints)出错");
                        }

                        GameMap gameMap = null;
                        if (!GameManager.MapMgr.DictMaps.TryGetValue(mapCode, out gameMap))
                        {
                            success = false;
                            LogManager.WriteLog(LogTypes.Fatal, string.Format("缺少跨服天梯系统地图 {0}", mapCode));
                        }
                    }

                    //奖励配置
                    RuntimeData.DuanWeiJiFenNum  = (int)GameManager.systemParamsList.GetParamValueIntByName("DuanWeiJiFenNum");
                    RuntimeData.WinDuanWeiJiFen  = (int)GameManager.systemParamsList.GetParamValueIntByName("WinDuanWeiJiFen");
                    RuntimeData.LoseDuanWeiJiFen = (int)GameManager.systemParamsList.GetParamValueIntByName("LoseDuanWeiJiFen");
                    RuntimeData.MaxTianTiJiFen   = (int)GameManager.systemParamsList.GetParamValueIntByName("MaxTianTiJiFen");
                }
                catch (System.Exception ex)
                {
                    success = false;
                    LogManager.WriteLog(LogTypes.Fatal, string.Format("加载xml配置文件:{0}, 失败。", fileName), ex);
                }
            }

            return(success);
        }