コード例 #1
0
 public MainFrm(GeneralConfig generalConfig, FullAssetConfig config)
 {
     _startTime     = DateTime.Now;
     _generalConfig = generalConfig;
     _config        = config;
     _timer         = new Timer {
         Interval = 250
     };
     _timer.Tick += OnTimerTick;
     InitializeComponent();
 }
コード例 #2
0
        static void Main()
        {
            var baseDir       = FormatUtil.FindBasePath();
            var generalConfig = GeneralConfig.Load(baseDir);
            var config        = FullAssetConfig.Load(baseDir);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            void SaveChanges(object sender, EventArgs e) => config.Save(baseDir);

            var form = new MainFrm(generalConfig, config);

            form.SaveClicked += SaveChanges;
            Application.Run(form);
            form.SaveClicked -= SaveChanges;

            SaveChanges(null, EventArgs.Empty);
        }
コード例 #3
0
        static void Main()
        {
            var baseDir     = FormatUtil.FindBasePath();
            var config      = FullAssetConfig.Load(baseDir);
            var outpathPath = Path.Combine(baseDir, @"Formats/AssetIds");
            var xldPattern  = new Regex(@"([0-9]+).XLD$");

            var enums = new Dictionary <string, EnumData>();

            foreach (var xld in config.Xlds.Values)
            {
                if (string.IsNullOrEmpty(xld.EnumName))
                {
                    continue;
                }

                int offset = 0;
                var match  = xldPattern.Match(xld.Name);
                if (match.Success)
                {
                    offset = 100 * int.Parse(match.Groups[1].Value);
                }

                if (!enums.ContainsKey(xld.EnumName))
                {
                    enums[xld.EnumName] = new EnumData {
                        Name = xld.EnumName
                    }
                }
                ;
                var e = enums[xld.EnumName];

                foreach (var o in xld.Assets.Values.OrderBy(x => x.Id))
                {
                    var id = offset + o.Id;
                    e.Entries.Add(string.IsNullOrEmpty(o.Name)
                        ? new EnumEntry {
                        Name = $"Unknown{id}", Value = id
                    }
                        : new EnumEntry {
                        Name = Sanitise(o.Name), Value = id
                    });
                }
            }

            ItemConfig itemConfig = ItemConfig.Load(baseDir);

            enums["ItemId"] = new EnumData {
                Name = "ItemId"
            };
            foreach (var item in itemConfig.Items)
            {
                enums["ItemId"].Entries.Add(string.IsNullOrEmpty(item.Value.Name)
                    ? new EnumEntry {
                    Name = $"Unknown{item.Key}", Value = item.Key
                }
                    : new EnumEntry {
                    Name = Sanitise(item.Value.Name), Value = item.Key
                });
            }

            CoreSpriteConfig coreSpriteConfig = CoreSpriteConfig.Load(baseDir);

            enums["CoreSpriteId"] = new EnumData {
                Name = "CoreSpriteId"
            };
            foreach (var item in coreSpriteConfig.CoreSpriteIds)
            {
                enums["CoreSpriteId"].Entries.Add(new EnumEntry {
                    Name = Sanitise(item.Value), Value = item.Key
                });
            }

            foreach (var e in enums.Values)
            {
                var duplicateNames = e.Entries.GroupBy(x => x.Name).Where(x => x.Count() > 1).ToList();
                var counters       = duplicateNames.ToDictionary(x => x.Key, x => 1);

                foreach (var o in e.Entries)
                {
                    if (!counters.ContainsKey(o.Name))
                    {
                        continue;
                    }
                    var name = o.Name;

                    o.Name = name + counters[name];
                    counters[name]++;
                }
            }

            foreach (var e in enums.Values)
            {
                File.WriteAllText(Path.Combine(outpathPath, e.Name + ".cs"),
                                  $@"// Note: This file was automatically generated using Tools/GenerateEnums.
// No changes should be made to this file by hand. Instead, the relevant json 
// files should be modified and then GenerateEnums should be used to regenerate
// the various ID enums.

namespace UAlbion.Formats.AssetIds
{{
    public enum {e.Name}
    {{
" +
                                  string.Join(Environment.NewLine, e.Entries.Select(x => $"        {x.Name} = {x.Value},"))
                                  + @"
    }
}");
            }
        }
    }
コード例 #4
0
        public ReverserCore(GeneralConfig generalConfig, FullAssetConfig config)
        {
            GeneralConfig = generalConfig;
            Config        = config;

            BaseExportDirectory = Path.GetFullPath(Path.Combine(GeneralConfig.BasePath, GeneralConfig.ExportedXldPath));
            var files = Directory.EnumerateFiles(BaseExportDirectory, "*.*", SearchOption.AllDirectories);

            foreach (var file in files)
            {
                var absDir      = Path.GetDirectoryName(file) ?? "";
                var relativeDir = absDir.Substring(BaseExportDirectory.Length).TrimStart('\\').Replace("\\", "/");
                if (relativeDir.Length == 0)
                {
                    continue;
                }

                if (!Config.Xlds.ContainsKey(relativeDir))
                {
                    Config.Xlds.Add(relativeDir, new FullXldInfo());
                }

                var xld = Config.Xlds[relativeDir];
                if (!Xlds.ContainsKey(relativeDir))
                {
                    Xlds.Add(relativeDir, xld);
                }

                var    relative = file.Substring(BaseExportDirectory.Length + 1);
                var    parts    = relative.Split('\\');
                string key      = parts.Last();
                key = Path.GetFileNameWithoutExtension(key);
                if (!int.TryParse(key, out var number))
                {
                    continue;
                }

                if (!xld.Assets.ContainsKey(number))
                {
                    xld.Assets[number] = new FullAssetInfo();
                }

                FullAssetInfo asset = xld.Assets[number];
                asset.Filename = relative;
            }

            var commonPalette = File.ReadAllBytes(Path.Combine(GeneralConfig.BasePath, GeneralConfig.XldPath, "PALETTE.000"));

            var palettesPath = Path.Combine(BaseExportDirectory, "PALETTE0.XLD");

            files = Directory.EnumerateFiles(palettesPath, "*.*", SearchOption.AllDirectories);
            foreach (var file in files)
            {
                var    a             = file.Substring(palettesPath.Length + 1, 2);
                ushort paletteNumber = ushort.Parse(a);
                var    assetConfig   = Config.Xlds["PALETTE0.XLD"].Assets[paletteNumber];
                var    paletteName   = assetConfig.Name;
                if (string.IsNullOrEmpty(paletteName))
                {
                    paletteName = file.Substring(BaseExportDirectory.Length + 1);
                }

                using (var stream = File.Open(file, FileMode.Open))
                    using (var br = new BinaryReader(stream))
                    {
                        var palette = new AlbionPalette(br, (int)br.BaseStream.Length, new AssetKey(AssetType.Palette, paletteNumber), paletteNumber);
                        palette.SetCommonPalette(commonPalette);
                        Palettes.Add(palette);
                    }
            }
        }