static bool ParseWorldServers(XmlNodeList worldServers) { if (worldServers.Count == 0) { Console.WriteLine("No worldservers in loginserver config."); return(false); } foreach (XmlNode node in worldServers) { if (node["Address"] == null) { Console.WriteLine("WorldServer is missing Address element."); return(false); } if (node["Worldmaps"] == null) { Console.WriteLine("WorldServer is missing Worldmaps element."); return(false); } string maps = node["Worldmaps"].InnerText; string address = node["Address"].InnerText; uint[] mapIds; if (maps == "all") { DataObject[] objs = DataServer.Database.SelectAllObjects(typeof(DBWorldMap)); if (objs.Length == 0) { Console.WriteLine("No world maps in database!"); return(false); } mapIds = new uint[objs.Length]; for (int i = 0; i < objs.Length; i++) { mapIds[i] = objs[i].ObjectId; } } else { string[] split = maps.Split(' '); mapIds = new uint[split.Length]; for (int i = 0; i < split.Length; i++) { try { mapIds[i] = uint.Parse(split[i]); } catch (Exception) { Console.WriteLine("Error parsing worldmap ids on worldserver: " + address); return(false); } } } ClientBase client; if (address == "local") { if (localWorldServerStarted == true) { Console.WriteLine("There can only be one local worldserver!"); return(false); } client = StartLocalWorldServer(); if (client == null) { Console.WriteLine("Failed to start local worldserver."); return(false); } } else { IPEndPoint iep = GetIPEndPoint(address); if (iep == null) { Console.WriteLine("Error parsing worldserver address " + address); return(false); } Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); if (iep.Port == 0) { iep.Port = 9003; } Console.WriteLine("Connecting to worldserver " + iep.ToString()); try { sock.Connect(iep); } catch (Exception e) { Console.WriteLine(e.Message); return(false); } client = new ClientBase(sock); } try { LoginServer.SetWorldServer(client, mapIds); } catch (Exception e) { Console.WriteLine(e.Message); return(false); } } return(true); }