Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
                }
            }
        }