public int GetBirthPoint(GameClient client, out int posX, out int posY) { int side = client.ClientData.BattleWhichSide; if (side <= 0) { KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); side = TianTiClient.getInstance().GetRoleBattleWhichSide((int)clientKuaFuServerLoginData.GameId, clientKuaFuServerLoginData.RoleId); if (side > 0) { client.ClientData.BattleWhichSide = side; } } lock (RuntimeData.Mutex) { TianTiBirthPoint TianTiBirthPoint = null; if (RuntimeData.MapBirthPointDict.TryGetValue(side, out TianTiBirthPoint)) { posX = TianTiBirthPoint.PosX; posY = TianTiBirthPoint.PosY; return(side); } } posX = 0; posY = 0; return(-1); }
/// <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); }