public static void Main(string[] args) { m_Assembly = Assembly.GetEntryAssembly(); /* print a banner */ Version ver = m_Assembly.GetName().Version; Console.WriteLine("SunUO Version {0}.{1}.{2} http://www.sunuo.org/", ver.Major, ver.Minor, ver.Revision); Console.WriteLine(" on {0}, runtime {1}", Environment.OSVersion, Environment.Version); if ((int)Environment.OSVersion.Platform == 128) { Console.WriteLine("Please make sure you have Mono 1.1.7 or newer! (mono -V)"); } Console.WriteLine(); /* prepare SunUO */ AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); bool debug = false; for (int i = 0; i < args.Length; ++i) { if (Insensitive.Equals(args[i], "-debug")) { debug = true; } else if (Insensitive.Equals(args[i], "-service")) { m_Service = true; } else if (Insensitive.Equals(args[i], "-profile")) { Profiling = true; } else if (args[i] == "--logfile") { string logfile = args[++i]; StreamWriter writer = new StreamWriter(new FileStream(logfile, FileMode.Append, FileAccess.Write)); writer.AutoFlush = true; Console.SetOut(writer); Console.SetError(writer); } } config = new Config(Path.Combine(BaseDirectoryInfo.CreateSubdirectory("etc").FullName, "sunuo.xml")); try { m_MultiConOut = new MultiTextWriter(Console.Out); Console.SetOut(m_MultiConOut); if (m_Service) { string filename = Path.Combine(LogDirectoryInfo.FullName, "console.log"); m_MultiConOut.Add(new FileLogger(filename)); } } catch { } m_Thread = Thread.CurrentThread; m_Process = Process.GetCurrentProcess(); if (m_Thread != null) { m_Thread.Name = "Core Thread"; } if (BaseDirectory.Length > 0) { Directory.SetCurrentDirectory(BaseDirectory); } Timer.TimerThread ttObj = new Timer.TimerThread(); timerThread = new Thread(new ThreadStart(ttObj.TimerMain)); timerThread.Name = "Timer Thread"; if (!ScriptCompiler.Compile(debug)) { return; } Console.Write("Verifying scripts:"); m_ItemCount = 0; m_MobileCount = 0; foreach (Library l in ScriptCompiler.Libraries) { int itemCount = 0, mobileCount = 0; Console.Write(" {0}[", l.Name); l.Verify(ref itemCount, ref mobileCount); Console.Write("{0} items, {1} mobiles]", itemCount, mobileCount); m_ItemCount += itemCount; m_MobileCount += mobileCount; } Console.WriteLine(" - done ({0} items, {1} mobiles)", m_ItemCount, m_MobileCount); try { ScriptCompiler.Configure(); } catch (TargetInvocationException e) { Console.WriteLine("Configure exception: {0}", e.InnerException); return; } if (!config.Exists) { config.Save(); } World.Load(); try { ScriptCompiler.Initialize(); } catch (TargetInvocationException e) { Console.WriteLine("Initialize exception: {0}", e.InnerException); return; } Region.Load(); m_MessagePump = new MessagePump(new Listener(Listener.Port)); timerThread.Start(); NetState.Initialize(); Encryption.Initialize(); EventSink.InvokeServerStarted(); try { while (!m_Closing) { Thread.Sleep(1); Mobile.ProcessDeltaQueue(); Item.ProcessDeltaQueue(); Timer.Slice(); m_MessagePump.Slice(); NetState.FlushAll(); NetState.ProcessDisposedQueue(); if (Slice != null) { Slice(); } } } catch (Exception e) { CurrentDomain_UnhandledException(null, new UnhandledExceptionEventArgs(e, true)); } if (timerThread.IsAlive) { timerThread.Abort(); } }
private static void Save(Mobile from, int x1, int y1, int x2, int y2) { World.Broadcast(0x35, true, "Spawns are being saved, please wait."); DateTime startTime = DateTime.Now; int count = 0; ArrayList itemssave = new ArrayList(); foreach (Item itemsave in World.Items.Values) { if (itemsave is PremiumSpawner && ((itemsave.X >= x1 && itemsave.X <= x2) && (itemsave.Y >= y1 && itemsave.Y <= y2) && itemsave.Map == from.Map)) { itemssave.Add(itemsave); count += 1; } } if (!Directory.Exists("Data/Monsters")) { Directory.CreateDirectory("Data/Monsters"); } using (StreamWriter op = new StreamWriter("Data/Monsters/spawns.map")) { foreach (PremiumSpawner itemsave2 in itemssave) { int mapnumber = 0; switch (itemsave2.Map.ToString()) { case "Felucca": mapnumber = 1; break; case "Trammel": mapnumber = 2; break; case "Ilshenar": mapnumber = 3; break; case "Malas": mapnumber = 4; break; case "Tokuno": mapnumber = 5; break; default: mapnumber = 6; Console.WriteLine("Monster Parser: Warning, unknown map {0}", itemsave2.Map); break; } string timer1a = itemsave2.MinDelay.ToString(); string[] timer1b = timer1a.Split(':'); int timer1c = (Utility.ToInt32(timer1b[0]) * 60) + Utility.ToInt32(timer1b[1]); string timer2a = itemsave2.MaxDelay.ToString(); string[] timer2b = timer2a.Split(':'); int timer2c = (Utility.ToInt32(timer2b[0]) * 60) + Utility.ToInt32(timer2b[1]); string towrite = ""; string towriteA = ""; string towriteB = ""; string towriteC = ""; string towriteD = ""; string towriteE = ""; if (itemsave2.CreaturesName.Count > 0) { towrite = itemsave2.CreaturesName[0].ToString(); } if (itemsave2.SubSpawnerA.Count > 0) { towriteA = itemsave2.SubSpawnerA[0].ToString(); } if (itemsave2.SubSpawnerB.Count > 0) { towriteB = itemsave2.SubSpawnerB[0].ToString(); } if (itemsave2.SubSpawnerC.Count > 0) { towriteC = itemsave2.SubSpawnerC[0].ToString(); } if (itemsave2.SubSpawnerD.Count > 0) { towriteD = itemsave2.SubSpawnerD[0].ToString(); } if (itemsave2.SubSpawnerE.Count > 0) { towriteE = itemsave2.SubSpawnerE[0].ToString(); } for (int i = 1; i < itemsave2.CreaturesName.Count; ++i) { if (itemsave2.CreaturesName.Count > 0) { towrite = towrite + ":" + itemsave2.CreaturesName[i].ToString(); } } for (int i = 1; i < itemsave2.SubSpawnerA.Count; ++i) { if (itemsave2.SubSpawnerA.Count > 0) { towriteA = towriteA + ":" + itemsave2.SubSpawnerA[i].ToString(); } } for (int i = 1; i < itemsave2.SubSpawnerB.Count; ++i) { if (itemsave2.SubSpawnerB.Count > 0) { towriteB = towriteB + ":" + itemsave2.SubSpawnerB[i].ToString(); } } for (int i = 1; i < itemsave2.SubSpawnerC.Count; ++i) { if (itemsave2.SubSpawnerC.Count > 0) { towriteC = towriteC + ":" + itemsave2.SubSpawnerC[i].ToString(); } } for (int i = 1; i < itemsave2.SubSpawnerD.Count; ++i) { if (itemsave2.SubSpawnerD.Count > 0) { towriteD = towriteD + ":" + itemsave2.SubSpawnerD[i].ToString(); } } for (int i = 1; i < itemsave2.SubSpawnerE.Count; ++i) { if (itemsave2.SubSpawnerE.Count > 0) { towriteE = towriteE + ":" + itemsave2.SubSpawnerE[i].ToString(); } } op.WriteLine("*|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}", towrite, towriteA, towriteB, towriteC, towriteD, towriteE, itemsave2.X, itemsave2.Y, itemsave2.Z, mapnumber, timer1c, timer2c, itemsave2.HomeRange, itemsave2.SpawnRange, itemsave2.SpawnID, itemsave2.Count, itemsave2.SubCountA, itemsave2.SubCountB, itemsave2.SubCountC, itemsave2.SubCountD, itemsave2.SubCountE); } } DateTime endTime = DateTime.Now; World.Broadcast(0x35, true, "{0} spawns have been saved. The entire process took {1:F1} seconds.", count, (endTime - startTime).TotalSeconds); }
static void ServerWorker(Object obj) { TcpClient cli = (TcpClient)obj; try { StreamReader reader = new StreamReader(cli.GetStream()); StreamWriter writer = new StreamWriter(cli.GetStream()); String clientInfo = reader.ReadLine(); // citanje info za najaveniot klient Console.WriteLine(clientInfo); int clid = Convert.ToInt32(clientInfo.Split(',')[0]); String pw = clientInfo.Split(',')[1]; int port = ((IPEndPoint)cli.Client.RemoteEndPoint).Port; ClientContainer cc = new ClientContainer(clid, pw, cli.GetStream(), writer); if (!listOfClients.Contains(cc)) { writer.WriteLine("Најавата е успешна."); writer.Flush(); listOfClients.AddLast(cc); Console.WriteLine("Успешно додаден клиент во листата."); while (true) { String poraka; while ((poraka = reader.ReadLine()) == null) { ; } int toId = Convert.ToInt32(poraka); if (IdExists(toId)) { Console.WriteLine("Проверка ID"); writer.WriteLine("ПОСТОИ"); writer.Flush(); String toPwd = reader.ReadLine(); ClientContainer ccon; if ((ccon = PasswordAuthentication(toId, toPwd)) != null) { Console.WriteLine("Проверка Password"); writer.WriteLine("ТОЧЕН"); writer.Flush(); String row; row = reader.ReadLine(); String [] buffer = new String[100]; buffer[0] = row; int i = 1; Console.WriteLine(buffer[0]); while (!(row = reader.ReadLine()).Equals("END")) { buffer[i] = row; //Console.WriteLine(buffer[i]); i++; //Console.WriteLine(i); } Console.WriteLine("#Пренесувам датотека " + buffer[0]); StreamWriter writerTo = ccon.getWriter(); writerTo.WriteLine(buffer[0]); writerTo.Flush(); i = 1; while (i < 100) { writerTo.WriteLine(buffer[i]); i++; } writerTo.WriteLine("END"); writerTo.Flush(); Console.WriteLine("Завршено пренесување"); } else { writer.WriteLine("ГРЕШЕН"); writer.Flush(); } } else { writer.WriteLine("НЕПОСТОИ"); writer.Flush(); } } } else { Console.WriteLine("Додавањето во листа е неуспешно."); writer.WriteLine("Најавата е неуспешна."); writer.Flush(); } } catch { } finally { if (cli != null) { cli.Close(); } } }