示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }