public bool InitConfig() { bool success = true; string fileName = ""; lock (this.RuntimeData.Mutex) { try { this.RuntimeData.LineMap2KuaFuLineDataDict.Clear(); this.RuntimeData.ServerMap2KuaFuLineDataDict.Clear(); this.RuntimeData.KuaFuMapServerIdDict.Clear(); this.RuntimeData.MapCode2KuaFuLineDataDict.Clear(); fileName = "Config/MapLine.xml"; string fullPathFileName = Global.GameResPath(fileName); XElement xml = XElement.Load(fullPathFileName); IEnumerable <XElement> nodes = xml.Elements(); foreach (XElement node in nodes) { int mapMaxOnlineCount = (int)Global.GetSafeAttributeLong(node, "MaxNum"); int mapType = (int)ConfigHelper.GetElementAttributeValueLong(node, "Type", 0L); string str = Global.GetSafeAttributeStr(node, "Line"); if (!string.IsNullOrEmpty(str)) { string[] mapLineStrs = str.Split(new char[] { '|' }); foreach (string mapLineStr in mapLineStrs) { KuaFuLineData kuaFuLineData = new KuaFuLineData(); string[] mapLineParams = mapLineStr.Split(new char[] { ',' }); kuaFuLineData.Line = int.Parse(mapLineParams[0]); kuaFuLineData.MapCode = int.Parse(mapLineParams[1]); if (mapLineParams.Length >= 3) { kuaFuLineData.ServerId = int.Parse(mapLineParams[2]); } kuaFuLineData.MapType = mapType; kuaFuLineData.MaxOnlineCount = mapMaxOnlineCount; this.RuntimeData.LineMap2KuaFuLineDataDict.TryAdd(new IntPairKey(kuaFuLineData.Line, kuaFuLineData.MapCode), kuaFuLineData); List <KuaFuLineData> list = null; if (kuaFuLineData.ServerId > 0) { if (this.RuntimeData.ServerMap2KuaFuLineDataDict.TryAdd(new IntPairKey(kuaFuLineData.ServerId, kuaFuLineData.MapCode), kuaFuLineData)) { if (!this.RuntimeData.KuaFuMapServerIdDict.TryGetValue(kuaFuLineData.ServerId, out list)) { list = new List <KuaFuLineData>(); this.RuntimeData.KuaFuMapServerIdDict.TryAdd(kuaFuLineData.ServerId, list); } list.Add(kuaFuLineData); } } if (!this.RuntimeData.MapCode2KuaFuLineDataDict.TryGetValue(kuaFuLineData.MapCode, out list)) { list = new List <KuaFuLineData>(); this.RuntimeData.MapCode2KuaFuLineDataDict.TryAdd(kuaFuLineData.MapCode, list); } list.Add(kuaFuLineData); } } } } catch (Exception ex) { success = false; LogManager.WriteLog(LogTypes.Fatal, string.Format("加载xml配置文件:{0}, 失败。", fileName), ex, true); } } return(success); }
public static bool LoadConfig() { lock (Mutex) { try { LoadConfigSuccess = true; int v; string str; #region 务器相关配置 ConfigurationManager.RefreshSection("appSettings"); ServerListUrl = ConfigurationManager.AppSettings.Get("ServerListUrl"); KuaFuServerListUrl = ConfigurationManager.AppSettings.Get("KuaFuServerListUrl"); GetPlatChargeKingUrl = ConfigurationManager.AppSettings.Get("PlatChargeKingUrl"); ConstData.HTTP_MD5_KEY = ConfigurationManager.AppSettings.Get("MD5Key"); ResourcePath = ConfigurationManager.AppSettings.Get("ResourcePath"); string platformStr = ConfigurationManager.AppSettings.Get("Platform"); for (PlatformTypes i = PlatformTypes.Tmsk; i < PlatformTypes.Max; i++) { if (0 == string.Compare(platformStr, i.ToString(), true)) { platformType = i; break; } } if (platformType == PlatformTypes.Max) { LogManager.WriteLog(LogTypes.Fatal, "必须在配置文件中设置有效的平台类型: Platform"); LoadConfigSuccess = false; return(false); } string kuaFuMapLineStr = ConfigurationManager.AppSettings.Get("KuaFuMapLine"); if (!string.IsNullOrEmpty(kuaFuMapLineStr)) { KuaFuMapLineDict.Clear(); string[] mapLineStrs = kuaFuMapLineStr.Split('|'); foreach (var mapLineStr in mapLineStrs) { KuaFuLineData kuaFuLineData = new KuaFuLineData(); string[] mapLineParams = mapLineStr.Split(','); int line; int serverId; if (mapLineParams.Length == 2 && int.TryParse(mapLineParams[0], out line) && int.TryParse(mapLineParams[1], out serverId)) { KuaFuMapLineDict[line] = serverId; } } } #endregion 务器相关配置 #region 活动相关配置 string fullFileName = GetResourcePath("Config/MapLine.xml", ResourcePathTypes.GameRes); XElement xmlFile = ConfigHelper.Load(fullFileName); str = ConfigHelper.GetElementAttributeValue(xmlFile, "add", "key", "LoadConfigFromServer", "value", "true"); if (!bool.TryParse(str, out LoadConfigFromServer)) { LoadConfigFromServer = false; } WritePerformanceLogMs = (int)ConfigHelper.GetElementAttributeValueLong(xmlFile, "add", "key", "WritePerformanceLogMs", "value", 10); LineMap2KuaFuLineDataDict.Clear(); ServerMap2KuaFuLineDataDict.Clear(); KuaFuMapServerIdDict.Clear(); MapCode2KuaFuLineDataDict.Clear(); IEnumerable <XElement> xmls = ConfigHelper.GetXElements(xmlFile, "MapLine"); foreach (var node in xmls) { MapMaxOnlineCount = (int)ConfigHelper.GetElementAttributeValueLong(node, "MaxNum", 500); str = ConfigHelper.GetElementAttributeValue(node, "Line", ""); if (!string.IsNullOrEmpty(str)) { string[] mapLineStrs = str.Split('|'); foreach (var mapLineStr in mapLineStrs) { KuaFuLineData kuaFuLineData = new KuaFuLineData(); string[] mapLineParams = mapLineStr.Split(','); kuaFuLineData.Line = int.Parse(mapLineParams[0]); kuaFuLineData.MapCode = int.Parse(mapLineParams[1]); KuaFuMapLineDict.TryGetValue(kuaFuLineData.Line, out kuaFuLineData.ServerId); kuaFuLineData.MaxOnlineCount = MapMaxOnlineCount; LineMap2KuaFuLineDataDict.TryAdd(new IntPairKey(kuaFuLineData.Line, kuaFuLineData.MapCode), kuaFuLineData); if (kuaFuLineData.ServerId > 0) { if (ServerMap2KuaFuLineDataDict.TryAdd(new IntPairKey(kuaFuLineData.ServerId, kuaFuLineData.MapCode), kuaFuLineData)) { List <KuaFuLineData> list = null; if (!KuaFuMapServerIdDict.TryGetValue(kuaFuLineData.ServerId, out list)) { list = new List <KuaFuLineData>(); KuaFuMapServerIdDict.TryAdd(kuaFuLineData.ServerId, list); } list.Add(kuaFuLineData); if (!MapCode2KuaFuLineDataDict.TryGetValue(kuaFuLineData.MapCode, out list)) { list = new List <KuaFuLineData>(); MapCode2KuaFuLineDataDict.TryAdd(kuaFuLineData.MapCode, list); } list.Add(kuaFuLineData); } } } } } #endregion 活动相关配置 #region 其他配置 HuanYingSiYuanPersistence.Instance.InitConfig(); TianTiPersistence.Instance.InitConfig(); YongZheZhanChangPersistence.Instance.InitConfig(); KuaFuCopyDbMgr.Instance.InitConfig(); SpreadPersistence.Instance.InitConfig(); AllyPersistence.Instance.InitConfig(); #endregion } catch (System.Exception ex) { LogManager.WriteException(ex.ToString()); } } return(LoadConfigSuccess); }
public bool ProcessKuaFuMapEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = 0; int toMapCode = Global.SafeConvertToInt32(cmdParams[0]); int line = Global.SafeConvertToInt32(cmdParams[1]); int toBoss = 0; int teleportId = 0; if (cmdParams.Length >= 3) { toBoss = Global.SafeConvertToInt32(cmdParams[2]); } if (cmdParams.Length >= 4) { teleportId = Global.SafeConvertToInt32(cmdParams[3]); } KuaFuLineData kuaFuLineData; if (!KuaFuMapManager.getInstance().IsKuaFuMap(toMapCode)) { result = -12; } else if (!this.RuntimeData.LineMap2KuaFuLineDataDict.TryGetValue(new IntPairKey(line, toMapCode), out kuaFuLineData)) { result = -12; } else if (!Global.CanEnterMap(client, toMapCode) || (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType != 1)) { result = -12; } else { if (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType == 1) { List <KuaFuLineData> list = KuaFuWorldClient.getInstance().GetKuaFuLineDataList(toMapCode) as List <KuaFuLineData>; if (null == list) { result = -12; goto IL_67F; } KuaFuLineData currentLineData = list.Find((KuaFuLineData x) => x.ServerId == GameManager.KuaFuServerId); if (currentLineData != null && currentLineData.Line == kuaFuLineData.Line) { result = -4011; goto IL_67F; } } if (!KuaFuMapManager.getInstance().IsKuaFuMap(client.ClientData.MapCode) && !this.CheckMap(client)) { result = -21; } else if (!this.IsGongNengOpened(client, false)) { result = -12; } else if (kuaFuLineData.OnlineCount >= kuaFuLineData.MaxOnlineCount) { result = -100; } else { int fromMapCode = client.ClientData.MapCode; if (teleportId > 0) { GameMap fromGameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(fromMapCode, out fromGameMap)) { result = -3; goto IL_67F; } MapTeleport mapTeleport = null; if (!fromGameMap.MapTeleportDict.TryGetValue(teleportId, out mapTeleport) || mapTeleport.ToMapID != toMapCode) { result = -12; goto IL_67F; } if (Global.GetTwoPointDistance(client.CurrentPos, new Point((double)mapTeleport.X, (double)mapTeleport.Y)) > 800.0) { result = -301; goto IL_67F; } } KuaFuServerLoginData kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); int kuaFuServerId; if (kuaFuLineData.MapType == 1) { if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Reborn, true)) { result = -400; goto IL_67F; } string signToken; string signKey; int rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey); if (rt == -4010) { KuaFuWorldRoleData kuaFuWorldRoleData = new KuaFuWorldRoleData { LocalRoleID = client.ClientData.LocalRoleID, UserID = client.strUserID, WorldRoleID = client.ClientData.WorldRoleID, Channel = client.ClientData.Channel, PTID = client.ClientData.ServerPTID, ServerID = client.ServerId, ZoneID = client.ClientData.ZoneID }; rt = KuaFuWorldClient.getInstance().RegPTKuaFuRoleData(ref kuaFuWorldRoleData); rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey); } if (rt < 0) { result = rt; goto IL_67F; } KFRebornRoleData rebornRoleData = KuaFuWorldClient.getInstance().Reborn_GetRebornRoleData(client.ClientData.ServerPTID, client.ClientData.LocalRoleID); if (null == rebornRoleData) { result = KuaFuWorldClient.getInstance().Reborn_RoleReborn(client.ClientData.ServerPTID, client.ClientData.LocalRoleID, client.ClientData.RoleName, client.ClientData.RebornLevel); if (result < 0) { goto IL_67F; } LogManager.WriteLog(LogTypes.Analysis, string.Format("Reborn_RoleReborn ptId={0} roleId={1} roleName={2} rebornLevel={3}", new object[] { client.ClientData.ServerPTID, client.ClientData.LocalRoleID, client.ClientData.RoleName, client.ClientData.RebornLevel }), null, true); } kuaFuServerLoginData.PTID = client.ClientData.ServerPTID; kuaFuServerLoginData.RoleId = client.ClientData.LocalRoleID; kuaFuServerLoginData.SignToken = signToken; kuaFuServerLoginData.TempRoleID = rt; kuaFuServerLoginData.SignCode = MD5Helper.get_md5_string(kuaFuServerLoginData.SignDataString() + signKey).ToLower(); kuaFuServerId = kuaFuServerLoginData.TargetServerID; } else { kuaFuServerLoginData.SignCode = null; kuaFuServerId = YongZheZhanChangClient.getInstance().EnterKuaFuMap(client.ClientData.LocalRoleID, kuaFuLineData.MapCode, kuaFuLineData.Line, client.ServerId, Global.GetClientKuaFuServerLoginData(client)); } kuaFuServerLoginData.Line = line; if (kuaFuServerId > 0) { bool flag = 0 == 0; int needMoney = (teleportId > 0) ? 0 : Global.GetMapTransNeedMoney(toMapCode); if (Global.GetTotalBindTongQianAndTongQianVal(client) < needMoney) { GameManager.ClientMgr.NotifyImportantMsg(client, StringUtil.substitute(GLang.GetLang(171, new object[0]), new object[] { needMoney, Global.GetMapName(toMapCode) }), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 27); result = -9; Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } else { int[] enterFlags = new int[5]; enterFlags[0] = fromMapCode; enterFlags[1] = teleportId; enterFlags[2] = toBoss; Global.SaveRoleParamsIntListToDB(client, new List <int>(enterFlags), "EnterKuaFuMapFlag", true); GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; result = kuaFuServerId; } } } IL_67F: client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }