Exemplo n.º 1
0
        private void ProcessCarList(Chunk chunk)
        {
            var newSize = chunk.Size - Reader.AlignToBoundary(0x10);

            if (newSize % 0xD0 != 0)
            {
                throw new InvalidDataException("Malformed car list chunk");
            }

            Progress?.Report("Processing car list");

            while (Stream.Position < chunk.EndOffset)
            {
                var cti = BinaryHelpers.ReadStruct <CarTypeInfo>(Reader);

                //Debug.WriteLine("{0} {1} ({2})", cti.ManufacturerName, cti.BaseModelName, cti.UsageType);

                var acr = new AaronCarRecord();
                acr.BaseModelName     = cti.BaseModelName;
                acr.CarTypeName       = cti.CarTypeName;
                acr.ManufacturerName  = cti.ManufacturerName;
                acr.DefaultBasePaint  = cti.DefaultBasePaint;
                acr.DefaultSkinNumber = cti.DefaultSkinNumber;
                acr.Skinnable         = cti.Skinnable;
                acr.UsageType         = cti.UsageType;

                _carService.AddCar(acr);
                HashResolver.Add(cti.CarTypeNameHash, cti.CarTypeName);
            }

            this.GenerateHashes();
        }
Exemplo n.º 2
0
        private AaronCarPartAttribute ConvertAttribute(CarPartAttribute rawAttribute)
        {
            AaronCarPartAttribute attribute = new AaronCarPartAttribute();

            attribute.Name = HashResolver.Resolve(rawAttribute.NameHash);

            switch (attribute.Name)
            {
            case "TEXTURE":
            case "LOD_CHARACTERS_OFFSET":
            case "NAME_OFFSET":
                this.LoadSingleAttribString(attribute, rawAttribute);
                break;

            case "LOD_BASE_NAME":
                this.LoadDoubleAttribString(attribute, rawAttribute);
                break;

            default:
                //attribute.Value = rawAttribute.iParam;
                this.SetAttributeValue(attribute, rawAttribute);
                break;
            }
            return(attribute);
        }
Exemplo n.º 3
0
 public override void Read(BinaryReader br)
 {
     this.ClassHash   = br.ReadUInt32();
     this.RowNameHash = br.ReadUInt32();
     br.ReadInt32();
     this.Class   = HashResolver.Resolve(this.ClassHash);
     this.RowName = HashResolver.Resolve(this.RowNameHash);
 }
Exemplo n.º 4
0
        public override void Read(BinaryReader br)
        {
            ClassHash   = br.ReadUInt32();
            RowNameHash = br.ReadUInt32();
            Factor      = br.ReadSingle();

            Class   = HashResolver.Resolve(ClassHash);
            RowName = HashResolver.Resolve(RowNameHash);
        }
Exemplo n.º 5
0
 public override string ToString()
 {
     return($"{nameof(UnknownRpc)}(" +
            $"{nameof(NetId)}: {NetId.Value}, " +
            (Name != null
                ? $"{nameof(Name)}: {Name}, "
                : $"{nameof(Hash)}: {HashResolver.LookupRpc(Hash)}, ") +
            $"{nameof(Payload)}: {Convert.ToBase64String(Payload)}" +
            ")");
 }
Exemplo n.º 6
0
        public override void Read(BinaryReader br)
        {
            ClassHash   = br.ReadUInt32();
            RowNameHash = br.ReadUInt32();
            br.ReadInt32();
            Level = br.ReadUInt32();

            Class   = HashResolver.Resolve(ClassHash);
            RowName = HashResolver.Resolve(RowNameHash);
        }
Exemplo n.º 7
0
        private void ProcessCarHashList(Chunk chunk)
        {
            if (chunk.Size % 4 != 0)
            {
                throw new InvalidDataException("malformed car hash list chunk");
            }

            Progress?.Report("Processing car part collection hash list");

            while (Stream.Position < chunk.EndOffset)
            {
                AaronCarPartCollection carPartCollection = new AaronCarPartCollection();
                carPartCollection.Name  = HashResolver.Resolve(Reader.ReadUInt32());
                carPartCollection.Parts = new SynchronizedObservableCollection <AaronCarPartRecord>();

                this._carPartService.AddCarPartCollection(carPartCollection);
            }
        }
Exemplo n.º 8
0
        private void OnExecute()
        {
            Application.Init();

            var app = new Application("EvoS.PacketInspector", GLib.ApplicationFlags.NonUnique);

            app.Register(GLib.Cancellable.Current);

            // We require data from the game assets, so ensure we have a valid data path
            if (!AssetLoader.FindAssetRoot(Settings.AtlasReactorData))
            {
                using var settingsUi = new SettingsUi();
                settingsUi.Show();
                app.AddWindow(settingsUi);
                var x = (ResponseType)settingsUi.Run();

                if (x != ResponseType.Ok)
                {
                    return;
                }
            }

            HashResolver.Init(AssetLoader.BasePath);
            Patcher.ResolveSyncListFields();
            Patcher.PatchAll();

            var win = new MainWindow();

            if (!PacketsDir.IsNullOrEmpty())
            {
                win.LoadPacketDump(PacketDumpType.PacketDirectory, PacketsDir);
            }
            else if (!ReplayFile.IsNullOrEmpty())
            {
                win.LoadPacketDump(PacketDumpType.ReplayFile, ReplayFile);
            }

            app.AddWindow(win);
            win.Show();
            Application.Run();
        }
Exemplo n.º 9
0
        private void GenerateHashes()
        {
            Progress?.Report("Building hash table");
            DebugTiming.BeginTiming("GenerateHashes");

            var racerHashes   = AaronHashLists.Get("RacerHashes");
            var copHashes     = AaronHashLists.Get("CopHashes");
            var trafficHashes = AaronHashLists.Get("TrafficHashes");

            foreach (var aaronCarRecord in _carService.GetCarsByType(CarUsageType.Racing))
            {
                //Debug.WriteLine($"Add racer hashes for {aaronCarRecord.CarTypeName}");
                foreach (var hashText in racerHashes.Select(s => s.Replace("%", aaronCarRecord.CarTypeName)))
                {
                    HashResolver.Add(Hashing.BinHash(hashText), hashText);
                }
            }

            foreach (var aaronCarRecord in _carService.GetCarsByType(CarUsageType.Cop))
            {
                //Debug.WriteLine($"Add cop hashes for {aaronCarRecord.CarTypeName}");
                foreach (var hashText in copHashes.Select(s => s.Replace("%", aaronCarRecord.CarTypeName)))
                {
                    //Debug.WriteLine(hashText);
                    HashResolver.Add(Hashing.BinHash(hashText), hashText);
                }
            }

            foreach (var aaronCarRecord in _carService.GetCarsByType(CarUsageType.Traffic))
            {
                //Debug.WriteLine($"Add traffic hashes for {aaronCarRecord.CarTypeName}");
                foreach (var hashText in trafficHashes.Select(s => s.Replace("%", aaronCarRecord.CarTypeName)))
                {
                    //Debug.WriteLine(hashText);
                    HashResolver.Add(Hashing.BinHash(hashText), hashText);
                }
            }

            DebugTiming.EndTiming("GenerateHashes");
        }
Exemplo n.º 10
0
        private void ProcessCarPartTable(Chunk chunk)
        {
            if (chunk.Size % 0xC != 0)
            {
                throw new InvalidDataException("Malformed car part table chunk");
            }

            DebugTiming.BeginTiming("ProcessCarPartTable");

            Progress?.Report("Processing car parts");

            List <AaronCarPartAttribute> attributes = new List <AaronCarPartAttribute>();

            var allCollections = _carPartService.GetCarPartCollections();
            Dictionary <int, AaronCarPartCollection> collectionsDict =
                allCollections.ToDictionary(c => allCollections.IndexOf(c), c => c);

            while (Stream.Position < chunk.EndOffset)
            {
                DBCarPart dbCarPart = BinaryHelpers.ReadStruct <DBCarPart>(Reader);

                var part = new AaronCarPartRecord();
                part.Name       = HashResolver.Resolve(dbCarPart.Hash);
                part.Attributes = this.PrepareAttributes(dbCarPart);

                attributes.AddRange(part.Attributes);
                //_carPartService.GetCarPartCollections()
                collectionsDict[dbCarPart.CarIndex].Parts.Add(part);
                //_carPartService.GetCarPartCollectionByIndex(dbCarPart.CarIndex).Parts.Add(part);
            }


            var uniqueAttribs = attributes.DistinctBy(a => a.GetHashCode()).Count();

            DebugTiming.EndTiming("ProcessCarPartTable");

            // we can discard internal attribute data now
            _attributeOffsetTables.Clear();
            _attributes.Clear();
        }
Exemplo n.º 11
0
        private void ProcessDataTable(Chunk chunk)
        {
            Progress?.Report("Processing data table");
            Stream.Align(0x10);

            var table = new AaronDataTable();

            table.Name    = HashResolver.Resolve(Reader.ReadUInt32());
            table.Entries = new List <AaronDataTableEntry>();

            while (Stream.Position < chunk.EndOffset)
            {
                var entry = new AaronDataTableEntry();
                entry.Name     = HashResolver.Resolve(Reader.ReadUInt32());
                entry.Unknown  = Reader.ReadUInt32();
                entry.Unknown2 = Reader.ReadSingle();

                table.Entries.Add(entry);
            }

            _dataTableService.AddDataTable(table);
        }
Exemplo n.º 12
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // Load hash lists
            AaronHashLists.Load("GenericHashes", @"ApplicationData\HashLists\GenericHashes.txt");
            AaronHashLists.Load("RacerHashes", @"ApplicationData\HashLists\RacerHashes.txt");
            AaronHashLists.Load("CopHashes", @"ApplicationData\HashLists\CopHashes.txt");
            AaronHashLists.Load("TrafficHashes", @"ApplicationData\HashLists\TrafficHashes.txt");

            // Register all generic hashes immediately
            foreach (var hashText in AaronHashLists.Get("GenericHashes"))
            {
                HashResolver.Add(Hashing.BinHash(hashText), hashText);
            }

            if (Directory.Exists(@"ApplicationData\CustomHashLists"))
            {
                foreach (var file in Directory.GetFiles(@"ApplicationData\CustomHashLists", "*.txt",
                                                        SearchOption.TopDirectoryOnly))
                {
                    AaronHashLists.Load(Path.GetFileNameWithoutExtension(file), file);

                    foreach (var s in AaronHashLists.Get(Path.GetFileNameWithoutExtension(file)))
                    {
                        HashResolver.Add(Hashing.BinHash(s), s);
                    }
                }
            }

            // Load templates
            AaronCarTemplates.LoadFromFile("CAR_COP", @"ApplicationData\Templates\CarTemplate_COP.json");
            AaronCarTemplates.LoadFromFile("CAR_RACER", @"ApplicationData\Templates\CarTemplate_RACER.json");
            AaronCarTemplates.LoadFromFile("CAR_TRAFFIC", @"ApplicationData\Templates\CarTemplate_TRAFFIC.json");

            // Load other data
            AaronManufacturers.LoadFromFile(@"ApplicationData\Manufacturers.txt");
        }
Exemplo n.º 13
0
 public override void Read(BinaryReader br)
 {
     this.Hash  = br.ReadUInt32();
     this.Value = HashResolver.Resolve(this.Hash);
 }
Exemplo n.º 14
0
 public override void Read(BinaryReader br)
 {
     Hash  = br.ReadUInt32();
     Value = HashResolver.Resolve(Hash);
 }