Esempio n. 1
0
        public static void Main(string[] Args)
        {
            int num3;
            m_IniPath = Path.Combine(Application.StartupPath, "Data/Config/Client.ini");
            ParseArgs(Args);
            m_FileManager = new Client.FileManager();
            if (m_FileManager.Error)
            {
                m_FileManager = null;
                GC.Collect();
            }
            else
            {
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Engine.Exception_Unhandled);
                long frequency = 0L;
                QueryPerformanceFrequency(ref frequency);
                double num2 = frequency;
                m_QPF = num2 / 1000.0;
                WantDirectory("Data/Config/");
                Debug.Trace("Entered Main()");
                Debug.Block("Environment");
                Debug.Trace("Operating System = '{0}'", Environment.OSVersion);
                Debug.Trace(".NET Framework   = '{0}'", Environment.Version);
                Debug.Trace("Base Directory   = '{0}'", m_FileManager.BasePath(""));
                Debug.Trace("Data Directory   = '{0}'", m_FileManager.ResolveMUL(""));
                Debug.EndBlock();
                Debug.Try("Setting up interop communications");
                Interop.Comm = new ExposerInterop();
                Debug.EndTry();
                Debug.Try("Initializing Strings");
                Strings.Initialize();
                Debug.EndTry();
                Benchmark benchmark = new Benchmark(6);
                Debug.Trace("Benchmarks: {0} resolution", "low");
                benchmark = null;
                m_Timers = new ArrayList();
                m_Plugins = new ArrayList();
                m_WalkTimeout = new ArrayList();
                m_Journal = new ArrayList();
                m_Doors = new ArrayList();
                m_Pings = new Queue();
                m_LoadQueue = new Queue();
                m_MapLoadQueue = new Queue();
                WantDirectory("Data/Logs/");
                Debug.Block("Main()");
                if (m_OverrideServHost != null)
                {
                    NewConfig.ServerHost = m_OverrideServHost;
                }
                if (m_OverrideServPort != -1)
                {
                    NewConfig.ServerPort = m_OverrideServPort;
                }
                switch (NewConfig.GameSize.ToLower().Trim())
                {
                    case "320x240":
                        GameWidth = 320;
                        GameHeight = 240;
                        num3 = 3;
                        goto Label_02E0;

                    case "640x480":
                        GameWidth = 640;
                        GameHeight = 480;
                        num3 = 5;
                        goto Label_02E0;

                    case "800x600":
                        GameWidth = 800;
                        GameHeight = 600;
                        num3 = 7;
                        goto Label_02E0;

                    case "1024x768":
                        GameWidth = 0x400;
                        GameHeight = 0x300;
                        num3 = 7;
                        goto Label_02E0;

                    case "1280x1024":
                        GameWidth = 0x500;
                        GameHeight = 0x400;
                        num3 = 9;
                        goto Label_02E0;

                    case "1600x1200":
                        GameWidth = 0x640;
                        GameHeight = 0x4b0;
                        num3 = 11;
                        goto Label_02E0;
                }
                MessageBox.Show(string.Format("A invalid game size of '{0}' was specified in Client.cfg. Valid sizes are: '320x240' '640x480' '800x600' '1024x768' '1280x1024' '1600x1200'", NewConfig.GameSize));
            }
            return;
            Label_02E0:;
            string[] strArray = NewConfig.ScreenSize.ToLower().Trim().Split(new char[] { 'x' });
            int num4 = -1;
            int num5 = -1;
            if (strArray.Length == 2)
            {
                num4 = num5 = 0;
                try
                {
                    num4 = int.Parse(strArray[0]);
                    num5 = int.Parse(strArray[1]);
                }
                catch
                {
                }
            }
            if ((num4 >= 320) && (num5 >= 240))
            {
                ScreenWidth = num4;
                ScreenHeight = num5;
            }
            else
            {
                MessageBox.Show(string.Format("A invalid screen size of '{0}' was specified in Client.cfg. Make sure the value is formatted correctly ('<Width>x<Height>'), and that it is 320x240 or higher.", NewConfig.ScreenSize));
            }
            GameX = (ScreenWidth - GameWidth) / 2;
            GameY = (ScreenHeight - GameHeight) / 2;
            Renderer.blockWidth = num3;
            Renderer.blockHeight = num3;
            Renderer.cellWidth = num3 << 3;
            Renderer.cellHeight = num3 << 3;
            m_ClickTimer = new Timer(new OnTick(Engine.ClickTimer_OnTick), SystemInformation.DoubleClickTime);
            Debug.Try("Initializing Display");
            m_Display = new Display();
            if (NewConfig.FullScreen)
            {
                m_Display.FormBorderStyle = FormBorderStyle.None;
                m_Display.WindowState = FormWindowState.Maximized;
            }
            m_Display.ClientSize = new Size(ScreenWidth, ScreenHeight);
            m_Display.KeyPreview = true;
            m_Display.Show();
            Debug.EndTry();
            Application.DoEvents();
            Debug.Block("Initializing DirectX");
            InitDX();
            Debug.EndBlock();
            m_Loading = true;
            m_Ingame = false;
            DrawNow();
            Benchmark benchmark2 = new Benchmark(7);
            benchmark2.Start();
            Debug.TimeBlock("Initializing Animations");
            m_Animations = new Animations();
            Debug.EndBlock();
            m_Font = new Font[10];
            m_UniFont = new UnicodeFont[3];
            Debug.TimeBlock("Initializing Gumps");
            m_Gumps = new Gumps();
            Debug.EndBlock();
            m_DefaultFont = GetUniFont(3);
            m_DefaultHue = Hues.Load(0x3b2);
            Renderer.SetText("");
            Debug.TimeBlock("Initializing Plugins");
            FindPlugins();
            Debug.EndBlock();
            Macros.Load();
            LoadParticles();
            Renderer.SetAlphaEnable(true);
            Renderer.SetFilterEnable(false);
            Renderer.AlphaTestEnable = true;
            Renderer.SetTexture(m_Halo);
            try
            {
                m_Device.ValidateDevice();
            }
            catch (Exception exception)
            {
                m_Halo.Dispose();
                m_Halo = Hues.Default.GetGump(0x71);
                m_Rain.Dispose();
                m_Rain = Texture.Empty;
                m_SkillUp.Dispose();
                m_SkillUp = Hues.Default.GetGump(0x983);
                m_SkillDown.Dispose();
                m_SkillDown = Hues.Default.GetGump(0x985);
                m_SkillLocked.Dispose();
                m_SkillLocked = Hues.Default.GetGump(0x82c);
                m_Slider.Dispose();
                m_Slider = Hues.Default.GetGump(0x845);
                for (int i = 0; i < m_Snow.Length; i++)
                {
                    m_Snow[i].Dispose();
                    m_Snow[i] = Texture.Empty;
                }
                for (int j = 0; j < m_Edge.Length; j++)
                {
                    m_Edge[j].Dispose();
                    m_Edge[j] = Texture.Empty;
                }
                Debug.Trace("ValidateDevice() failed on 32-bit textures");
                Debug.Error(exception);
            }
            Renderer.SetTexture(null);
            Renderer.SetAlphaEnable(false);
            m_Effects = new Client.Effects();
            m_Loading = false;
            Point point = m_Display.PointToClient(Cursor.Position);
            m_EventOk = true;
            MouseMove(m_Display, new MouseEventArgs(Control.MouseButtons, 0, point.X, point.Y, 0));
            Network.CheckCache();
            ShowAcctLogin();
            MouseMoveQueue();
            m_EventOk = false;
            DrawNow();
            benchmark2.StopNoLog();
            Debug.Trace("Total -> {0}", Benchmark.Format(benchmark2.Elapsed));
            m_MoveDelay = new TimeDelay(0f);
            m_LastOverCheck = new TimeDelay(0.1f);
            m_NewFrame = new TimeDelay(0.05f);
            m_SleepMode = new TimeDelay(7.5f);
            m_EventOk = true;
            PlayRandomMidi();
            bool flag = false;
            new Timer(new OnTick(Engine.Evict_OnTick), 0x9c4).Start(false);
            Animations.StartLoading();
            Unlock();
            DateTime now = DateTime.Now;
            int num10 = Ticks + 0x1388;
            bool extendProtocol = NewConfig.ExtendProtocol;
            while (!exiting)
            {
                m_SetTicks = false;
                int ticks = Ticks;
                Macros.Slice();
                if (Gumps.Invalidated)
                {
                    if (m_LastMouseArgs != null)
                    {
                        MouseMove(m_Display, m_LastMouseArgs);
                    }
                    Gumps.Invalidated = false;
                }
                if (m_MouseMoved)
                {
                    MouseMoveQueue();
                }
                if (m_NewFrame.ElapsedReset())
                {
                    Renderer.m_Frames++;
                    m_Redraw = false;
                    Renderer.Draw();
                }
                else if ((m_Redraw || m_PumpFPS) || (m_Quake || (amMoving && IsMoving())))
                {
                    m_Redraw = false;
                    Renderer.Draw();
                }
                if ((extendProtocol && m_Ingame) && ((Party.State == PartyState.Joined) && (DateTime.Now >= now)))
                {
                    now = DateTime.Now + TimeSpan.FromSeconds(0.5);
                    for (int k = 0; k < Party.Members.Length; k++)
                    {
                        Mobile mobile = Party.Members[k];
                        if (((mobile != null) && !mobile.Player) && !mobile.Visible)
                        {
                            Network.Send(new PPE_QueryPartyLocs());
                            break;
                        }
                    }
                }
                Thread.Sleep(1);
                if (GetQueueStatus(0xff) != 0)
                {
                    Application.DoEvents();
                }
                UOAM.Slice();
                if (!Network.Slice())
                {
                    flag = true;
                    break;
                }
                Network.Flush();
                TickTimers();
                if (amMoving && m_Ingame)
                {
                    DoWalk(movingDir, false);
                }
                if (m_LoadQueue.Count > 0)
                {
                    for (int m = 0; (m_LoadQueue.Count > 0) && (m < 6); m++)
                    {
                        ((ILoader) m_LoadQueue.Dequeue()).Load();
                    }
                }
                if (m_MapLoadQueue.Count > 0)
                {
                    Preload((Worker) m_MapLoadQueue.Dequeue());
                }
            }
            NewConfig.Save();
            SaveJournal();
            Thread.Sleep(5);
            if ((m_Display != null) && !m_Display.IsDisposed)
            {
                m_Display.Hide();
            }
            Thread.Sleep(5);
            Application.DoEvents();
            Thread.Sleep(5);
            Application.DoEvents();
            m_Animations.Dispose();
            if (m_ItemArt != null)
            {
                m_ItemArt.Dispose();
            }
            if (m_LandArt != null)
            {
                m_LandArt.Dispose();
            }
            if (m_TextureArt != null)
            {
                m_TextureArt.Dispose();
            }
            m_Gumps.Dispose();
            if (m_Sounds != null)
            {
                m_Sounds.Dispose();
            }
            if (m_Multis != null)
            {
                m_Multis.Dispose();
            }
            m_FileManager.Dispose();
            Cursor.Dispose();
            Music.Dispose();
            Hues.Dispose();
            GRadar.Dispose();
            if (m_Plugins != null)
            {
                m_Plugins.Clear();
                m_Plugins = null;
            }
            if (m_Rain != null)
            {
                m_Rain.Dispose();
                m_Rain = null;
            }
            if (m_Slider != null)
            {
                m_Slider.Dispose();
                m_Slider = null;
            }
            if (m_SkillUp != null)
            {
                m_SkillUp.Dispose();
                m_SkillUp = null;
            }
            if (m_SkillDown != null)
            {
                m_SkillDown.Dispose();
                m_SkillDown = null;
            }
            if (m_SkillLocked != null)
            {
                m_SkillLocked.Dispose();
                m_SkillLocked = null;
            }
            if (m_Snow != null)
            {
                for (int n = 0; n < 12; n++)
                {
                    if (m_Snow[n] != null)
                    {
                        m_Snow[n].Dispose();
                        m_Snow[n] = null;
                    }
                }
                m_Snow = null;
            }
            if (m_Edge != null)
            {
                for (int num13 = 0; num13 < 8; num13++)
                {
                    if (m_Edge[num13] != null)
                    {
                        m_Edge[num13].Dispose();
                        m_Edge[num13] = null;
                    }
                }
                m_Edge = null;
            }
            if (m_WinScrolls != null)
            {
                for (int num14 = 0; num14 < m_WinScrolls.Length; num14++)
                {
                    if (m_WinScrolls[num14] != null)
                    {
                        m_WinScrolls[num14].Dispose();
                        m_WinScrolls[num14] = null;
                    }
                }
                m_WinScrolls = null;
            }
            if (m_Halo != null)
            {
                m_Halo.Dispose();
                m_Halo = null;
            }
            if (m_Friend != null)
            {
                m_Friend.Dispose();
                m_Friend = null;
            }
            if (m_FormX != null)
            {
                m_FormX.Dispose();
                m_FormX = null;
            }
            if (m_TargetImage != null)
            {
                m_TargetImage.Dispose();
                m_TargetImage = null;
            }
            if (m_TargetCursorImage != null)
            {
                m_TargetCursorImage.Dispose();
                m_TargetCursorImage = null;
            }
            if (m_Font != null)
            {
                for (int num15 = 0; num15 < 10; num15++)
                {
                    if (m_Font[num15] != null)
                    {
                        m_Font[num15].Dispose();
                        m_Font[num15] = null;
                    }
                }
                m_Font = null;
            }
            if (m_UniFont != null)
            {
                int length = m_UniFont.Length;
                for (int num17 = 0; num17 < length; num17++)
                {
                    if (m_UniFont[num17] != null)
                    {
                        m_UniFont[num17].Dispose();
                        m_UniFont[num17] = null;
                    }
                }
                m_UniFont = null;
            }
            if (m_MidiTable != null)
            {
                m_MidiTable.Dispose();
                m_MidiTable = null;
            }
            if (m_ContainerBoundsTable != null)
            {
                m_ContainerBoundsTable.Dispose();
                m_ContainerBoundsTable = null;
            }
            Texture.DisposeAll();
            Debug.EndBlock();
            if (flag)
            {
                Debug.Trace("Network error caused termination");
            }
            Network.DumpBuffer();
            Network.Close();
            Debug.Dispose();
            Strings.Dispose();
            m_LoadQueue = null;
            m_MapLoadQueue = null;
            m_DefaultFont = null;
            m_DefaultHue = null;
            m_Display = null;
            m_Encoder = null;
            m_Effects = null;
            m_Skills = null;
            m_Features = null;
            m_Animations = null;
            m_LandArt = null;
            m_TextureArt = null;
            m_ItemArt = null;
            m_Gumps = null;
            m_Sounds = null;
            m_Multis = null;
            m_FileManager = null;
            m_Display = null;
            m_Font = null;
            m_UniFont = null;
            m_Device = null;
            m_CharacterNames = null;
            m_MoveDelay = null;
            m_Text = null;
            m_Font = null;
            m_UniFont = null;
            m_NewFrame = null;
            m_SleepMode = null;
            m_Timers = null;
            m_Plugins = null;
            m_SkillsGump = null;
            m_JournalGump = null;
            m_Journal = null;
            m_FileManager = null;
            m_Encoder = null;
            m_DefaultFont = null;
            m_DefaultHue = null;
            m_LastTarget = null;
            m_Random = null;
            m_WalkStack = null;
            m_Prompt = null;
            m_IniPath = null;
            m_Pings = null;
            m_PingTimer = null;
            m_MultiList = null;
            m_WalkTimeout = null;
            m_Servers = null;
            m_AllNames = null;
            m_Doors = null;
            m_LastOverCheck = null;
            m_LastMouseArgs = null;
            m_LastAttacker = null;
            Renderer.m_VertexPool = null;
            try
            {
                Process currentProcess = Process.GetCurrentProcess();
                currentProcess.Kill();
                currentProcess.WaitForExit();
            }
            catch
            {
            }
        }
Esempio n. 2
0
 public GumpFactory(Gumps gumps)
 {
     this.m_Gumps = gumps;
 }