예제 #1
0
        public void SetFromTreeNodes(TreeNode Root)
        {
            Cities = new CitiesTableItem[Root.Nodes.Count];

            for (int i = 0; i < Cities.Length; i++)
            {
                TreeNode        ChildNode = Root.Nodes[i];
                CitiesTableItem Entry     = (CitiesTableItem)ChildNode.Tag;
                Cities[i] = Entry;
            }
        }
예제 #2
0
        public void ReadFromFile(BinaryReader reader)
        {
            unk0 = reader.ReadUInt32();
            uint count0 = reader.ReadUInt32();
            uint count1 = reader.ReadUInt32();

            unk1   = reader.ReadUInt32();
            cities = new CitiesTableItem[count0];

            for (int i = 0; i < count1; i++)
            {
                CitiesTableItem item = new CitiesTableItem();

                item.RespawnPlaceOffset = reader.ReadUInt32();
                item.RespawnPlaceCount  = reader.ReadUInt32();
                uint RespawnPlacesCount1 = reader.ReadUInt32();
                uint CityAreasOffset     = reader.ReadUInt32(); // Maybe CityAreas?

                item.ID          = reader.ReadUInt32();
                item.Name        = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                item.MissionLine = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                item.SDSPrefix   = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                item.TextID.ReadFromFile(reader);
                item.CarGarageType.ReadFromFile(reader);
                item.BoatGarageType.ReadFromFile(reader);

                if (gameVersion == GamesEnumerator.MafiaI_DE)
                {
                    item.Unk01 = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                }

                item.Map = XBinCoreUtils.ReadStringPtrWithOffset(reader);

                // Content doesn't exist in M1DE.. Unused?
                if (gameVersion == GamesEnumerator.MafiaIII)
                {
                    reader.ReadUInt32();
                }

                cities[i] = item;
            }

            foreach (var Item in Cities)
            {
                Item.RespawnPlaces = new CitiesTableItem.CityRespawnPlace[Item.RespawnPlaceCount];

                for (int i = 0; i < Item.RespawnPlaces.Length; i++)
                {
                    CitiesTableItem.CityRespawnPlace RespawnPlace = new CitiesTableItem.CityRespawnPlace();
                    RespawnPlace.PosPlayer.ReadFromFile(reader);
                    RespawnPlace.DirPlayer.ReadFromFile(reader);
                    RespawnPlace.RespawnType   = (ERespawnPlaceType)reader.ReadInt32();
                    RespawnPlace.StreamMapPart = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                    Item.RespawnPlaces[i]      = RespawnPlace;
                }

                uint CityPointOffset   = reader.ReadUInt32();
                uint CityPointCount0   = reader.ReadUInt32();
                uint CityPointCount1   = reader.ReadUInt32();
                uint CityPolygonOffset = reader.ReadUInt32();
                uint CityPolygonCount0 = reader.ReadUInt32();
                uint CityPolygonCount1 = reader.ReadUInt32();

                Item.Points = new XBinVector2[CityPointCount0];
                for (int x = 0; x < CityPointCount0; x++)
                {
                    Item.Points[x] = new XBinVector2();
                    Item.Points[x].ReadFromFile(reader);
                }

                Item.Polygons = new CitiesTableItem.CityPolygon[CityPolygonCount0];
                for (int x = 0; x < CityPolygonCount0; x++)
                {
                    uint PolygonPointOffset = reader.ReadUInt32();
                    uint PolygonPointCount0 = reader.ReadUInt32();
                    uint PolygonPointCount1 = reader.ReadUInt32();

                    CitiesTableItem.CityPolygon Polygon = new CitiesTableItem.CityPolygon();
                    Polygon.Name = XBinCoreUtils.ReadStringPtrWithOffset(reader);
                    Polygon.TextID.ReadFromFile(reader);
                    Polygon.Unk0    = reader.ReadUInt64();
                    Polygon.Indexes = new ushort[PolygonPointCount0];

                    for (int z = 0; z < PolygonPointCount0; z++)
                    {
                        Polygon.Indexes[z] = reader.ReadUInt16();
                    }

                    Item.Polygons[x] = Polygon;
                }
            }
        }