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); }
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); }
/// <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); }