Beispiel #1
0
        private void GenerateCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            if (_SaveFileDialog == null)
            {
                _SaveFileDialog                 = new SaveFileDialog();
                _SaveFileDialog.Filter          = "C# Source File (*.cs)|*.cs";
                _SaveFileDialog.CheckPathExists = true;
                _SaveFileDialog.Title           = "Save Class";
            }

            if (_SaveFileDialog.ShowDialog() == true)
            {
                try
                {
                    App.Window.ShowLoading();

                    if (e.Parameter is GenericGumpPacket)
                    {
                        GenericGumpPacket gump = (GenericGumpPacket)e.Parameter;

                        using (FileStream stream = File.Open(_SaveFileDialog.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
                        {
                            UltimaGumpGenerator.Generate(stream, gump);
                        }
                    }
                    else if (e.Parameter is WorldObjectPacket)
                    {
                        WorldObjectPacket             item       = (WorldObjectPacket)e.Parameter;
                        QueryPropertiesResponsePacket properties = _SpyHelper.FindFirstPacket(item.Serial, typeof(QueryPropertiesResponsePacket)) as QueryPropertiesResponsePacket;

                        using (FileStream stream = File.Open(_SaveFileDialog.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
                        {
                            UltimaItemGenerator.Generate(stream, item.ObjectID, item.Hue, item.Amount, properties);
                        }
                    }
                    else if (e.Parameter is ContainerItem)
                    {
                        ContainerItem item = (ContainerItem)e.Parameter;
                        QueryPropertiesResponsePacket properties = _SpyHelper.FindFirstPacket(item.Serial, typeof(QueryPropertiesResponsePacket)) as QueryPropertiesResponsePacket;

                        using (FileStream stream = File.Open(_SaveFileDialog.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
                        {
                            UltimaItemGenerator.Generate(stream, item.ItemID, item.Hue, item.Amount, properties);
                        }
                    }
                    else if (e.Parameter is MobileIncommingPacket)
                    {
                        MobileIncommingPacket mobile = (MobileIncommingPacket)e.Parameter;
                        MobileNamePacket      name   = _SpyHelper.FindFirstPacket(mobile.Serial, typeof(MobileNamePacket)) as MobileNamePacket;

                        using (FileStream stream = File.Open(_SaveFileDialog.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
                        {
                            UltimaMobileGenerator.Generate(stream, mobile, name);
                        }
                    }
                }
                catch (Exception ex)
                {
                    ShowNotification(NotificationType.Error, ex);
                }
                finally
                {
                    HideLoading();
                }
            }
        }
        /// <summary>
        /// Generates class and saves it to stream.
        /// </summary>
        /// <param name="stream">Stream to write to.</param>
        /// <param name="gump">Gump to generate.</param>
        public static void Generate(Stream stream, GenericGumpPacket gump)
        {
            UltimaStringCollection clilocs = Globals.Instance.Clilocs;

            using (UltimaClassWriter writer = new UltimaClassWriter(stream))
            {
                writer.WriteUsing("System");
                writer.WriteUsing("Server");
                writer.WriteUsing("Server.Gumps");
                writer.WriteUsing("Server.Network");
                writer.WriteLine();
                writer.BeginNamespace("Server.Gumps");

                string className = "GenericGump";

                writer.BeginClass(className, "Gump");
                writer.BeginConstructor("public", className, null, String.Format("{0}, {1}", gump.X, gump.Y));

                for (int i = 0; i < gump.Entries.Count; i++)
                {
                    GumpEntry entry = gump.Entries[i];
                    bool      space = entry is GumpPage;

                    if (space && i != 0)
                    {
                        writer.WriteLine();
                    }

                    writer.WriteWithIndent(entry.GetRunUOLine());

                    // Comment
                    int cliloc = 0;

                    if (entry is GumpHtmlLocalized)
                    {
                        cliloc = (int)((GumpHtmlLocalized)entry).Number;
                    }
                    else if (entry is GumpHtmlLocalizedColor)
                    {
                        cliloc = (int)((GumpHtmlLocalizedColor)entry).Number;
                    }
                    else if (entry is GumpHtmlLocalizedArgs)
                    {
                        cliloc = (int)((GumpHtmlLocalizedArgs)entry).Number;
                    }

                    if (cliloc > 0 && clilocs != null)
                    {
                        string clilocText = clilocs.GetString(cliloc);

                        if (!String.IsNullOrEmpty(clilocText))
                        {
                            writer.WriteLine(" // {0}", clilocText);
                        }
                        else
                        {
                            writer.WriteLine();
                        }
                    }
                    else
                    {
                        writer.WriteLine();
                    }


                    if (space && i < gump.Entries.Count)
                    {
                        writer.WriteLine();
                    }
                }

                writer.EndConstructor();
                writer.WriteLine();
                writer.BeginOverrideMethod("public", "void", "OnResponse", "NetState sender, RelayInfo info");
                writer.EndMethod();
                writer.EndClass();
                writer.EndNamespace();

                App.Window.ShowNotification(NotificationType.Info, "Gump generation complete");
            }
        }