mirror of
				https://github.com/MathiasLui/CSGO-Projects.git
				synced 2025-11-04 06:33:34 +00:00 
			
		
		
		
	Add AIN file indicator and nav/ain packed indicator
* Version increase to 1.2
This commit is contained in:
		
							parent
							
								
									7d7ce53dae
								
							
						
					
					
						commit
						5ef79f6426
					
				
					 6 changed files with 112 additions and 4 deletions
				
			
		| 
						 | 
					@ -4,6 +4,7 @@ using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
 | 
					using System.IO.Compression;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
| 
						 | 
					@ -115,6 +116,13 @@ namespace Damage_Calculator
 | 
				
			||||||
                    map.NavFilePath = potentialNavFile;
 | 
					                    map.NavFilePath = potentialNavFile;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Save path to AIN file if available
 | 
				
			||||||
 | 
					                string potentialAinFile = System.IO.Path.Combine(this.CsgoPath, "csgo\\maps\\graphs", System.IO.Path.GetFileNameWithoutExtension(file) + ".ain");
 | 
				
			||||||
 | 
					                if (File.Exists(potentialAinFile))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    map.AinFilePath = potentialAinFile;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Set map type
 | 
					                // Set map type
 | 
				
			||||||
                switch (System.IO.Path.GetFileNameWithoutExtension(file).Split('_').First().ToLower())
 | 
					                switch (System.IO.Path.GetFileNameWithoutExtension(file).Split('_').First().ToLower())
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -409,6 +417,59 @@ namespace Damage_Calculator
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Reads packed files from a BSP and returns whether any 1. NAV or 2. AIN files were found.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="bspFilePath">The absolute path to the BSP file.</param>
 | 
				
			||||||
 | 
					        /// <returns>A tuple containing whether nav or ain files were found, in that order.</returns>
 | 
				
			||||||
 | 
					        public (bool, bool) ReadIfPackedNavFilesInBsp(string bspFilePath)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bool navFound = false;
 | 
				
			||||||
 | 
					            bool ainFound = false;
 | 
				
			||||||
 | 
					            byte[] readZipBytes = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using (var bspFile = File.OpenRead(bspFilePath))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                using (var reader = new BinaryReader(bspFile))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // Stuff before lumps + pakfile index * lump array item length
 | 
				
			||||||
 | 
					                    reader.BaseStream.Position = 8 + (40 * 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Get lump pos and size
 | 
				
			||||||
 | 
					                    int offset = reader.ReadInt32();
 | 
				
			||||||
 | 
					                    int length = reader.ReadInt32();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Read zip file
 | 
				
			||||||
 | 
					                    reader.BaseStream.Position = offset;
 | 
				
			||||||
 | 
					                    readZipBytes = reader.ReadBytes(length);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (readZipBytes == null)
 | 
				
			||||||
 | 
					                return (false, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using (var stream = new MemoryStream(readZipBytes))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                using(var zip = new ZipArchive(stream, ZipArchiveMode.Read))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    foreach(var entry in zip.Entries)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (entry.FullName.EndsWith(".nav"))
 | 
				
			||||||
 | 
					                            // Found a packed NAV file
 | 
				
			||||||
 | 
					                            navFound = true;
 | 
				
			||||||
 | 
					                        if(entry.FullName.EndsWith(".ain"))
 | 
				
			||||||
 | 
					                            // Found a packed AIN file
 | 
				
			||||||
 | 
					                            ainFound = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (navFound && ainFound)
 | 
				
			||||||
 | 
					                            // If both already found, return prematurely
 | 
				
			||||||
 | 
					                            return (true, true);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return (navFound, ainFound);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private bool isLumpUnused(byte[] lump)
 | 
					        private bool isLumpUnused(byte[] lump)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            for(int i = 0; i < lump.Length; i++)
 | 
					            for(int i = 0; i < lump.Length; i++)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,7 @@
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.Data" />
 | 
					    <Reference Include="System.Data" />
 | 
				
			||||||
    <Reference Include="System.Drawing" />
 | 
					    <Reference Include="System.Drawing" />
 | 
				
			||||||
 | 
					    <Reference Include="System.IO.Compression" />
 | 
				
			||||||
    <Reference Include="System.Xml" />
 | 
					    <Reference Include="System.Xml" />
 | 
				
			||||||
    <Reference Include="Microsoft.CSharp" />
 | 
					    <Reference Include="Microsoft.CSharp" />
 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,7 +97,14 @@
 | 
				
			||||||
                <StackPanel>
 | 
					                <StackPanel>
 | 
				
			||||||
                    <StackPanel>
 | 
					                    <StackPanel>
 | 
				
			||||||
                        <CheckBox x:Name="chkHasMapFile" Content="Has map file" IsEnabled="False" />
 | 
					                        <CheckBox x:Name="chkHasMapFile" Content="Has map file" IsEnabled="False" />
 | 
				
			||||||
                        <CheckBox x:Name="chkHasNavFile" Content="Has nav file" IsEnabled="False" />
 | 
					                        <StackPanel Orientation="Horizontal">
 | 
				
			||||||
 | 
					                            <CheckBox x:Name="chkHasNavFile" Content="Has NAV file" IsEnabled="False" />
 | 
				
			||||||
 | 
					                            <TextBlock x:Name="txtNavFilePacked" FontSize="10" Margin="5,0,0,0" Text="(Packed)" Visibility="Collapsed" />
 | 
				
			||||||
 | 
					                        </StackPanel>
 | 
				
			||||||
 | 
					                        <StackPanel Orientation="Horizontal">
 | 
				
			||||||
 | 
					                            <CheckBox x:Name="chkHasAinFile" Content="Has AIN file" IsEnabled="False" />
 | 
				
			||||||
 | 
					                            <TextBlock x:Name="txtAinFilePacked" FontSize="10" Margin="5,0,0,0" Text="(Packed)" Visibility="Collapsed" />
 | 
				
			||||||
 | 
					                        </StackPanel>
 | 
				
			||||||
                        <StackPanel Margin="0,10,0,0" Orientation="Horizontal">
 | 
					                        <StackPanel Margin="0,10,0,0" Orientation="Horizontal">
 | 
				
			||||||
                            <TextBlock Text="Max bomb damage:" />
 | 
					                            <TextBlock Text="Max bomb damage:" />
 | 
				
			||||||
                            <TextBlock Margin="5,0,0,0" x:Name="txtBombMaxDamage" Text="0" Foreground="IndianRed" />
 | 
					                            <TextBlock Margin="5,0,0,0" x:Name="txtBombMaxDamage" Text="0" Foreground="IndianRed" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -227,7 +227,13 @@ namespace Damage_Calculator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Set indicator checkboxes
 | 
					            // Set indicator checkboxes
 | 
				
			||||||
            this.chkHasMapFile.IsChecked = map.BspFilePath != null;
 | 
					            this.chkHasMapFile.IsChecked = map.BspFilePath != null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.chkHasNavFile.IsChecked = map.NavFilePath != null;
 | 
					            this.chkHasNavFile.IsChecked = map.NavFilePath != null;
 | 
				
			||||||
 | 
					            this.chkHasAinFile.IsChecked = map.AinFilePath != null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Set packed indicators for indicator checkboxes
 | 
				
			||||||
 | 
					            this.txtNavFilePacked.Visibility = map.NavFileBspPacked ? Visibility.Visible : Visibility.Collapsed;
 | 
				
			||||||
 | 
					            this.txtAinFilePacked.Visibility = map.AinFileBspPacked ? Visibility.Visible : Visibility.Collapsed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.resetCanvas();
 | 
					            this.resetCanvas();
 | 
				
			||||||
            this.rightZoomBorder.Reset();
 | 
					            this.rightZoomBorder.Reset();
 | 
				
			||||||
| 
						 | 
					@ -354,6 +360,22 @@ namespace Damage_Calculator
 | 
				
			||||||
                    map.SpawnPoints.Add(spawn);
 | 
					                    map.SpawnPoints.Add(spawn);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (map.NavFilePath == null || map.AinFilePath == null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // If either no NAV or no AIN file has been found, try to update them via the BSP pakfile
 | 
				
			||||||
 | 
					                var navFilesFound = Globals.Settings.CsgoHelper.ReadIfPackedNavFilesInBsp(map.BspFilePath);
 | 
				
			||||||
 | 
					                if (navFilesFound.Item1)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    map.NavFileBspPacked = true;
 | 
				
			||||||
 | 
					                    map.NavFilePath = "PACKED";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (navFilesFound.Item2)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    map.AinFileBspPacked = true;
 | 
				
			||||||
 | 
					                    map.AinFilePath = "PACKED";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private Vector3 stringToVector3(string coords)
 | 
					        private Vector3 stringToVector3(string coords)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,11 +37,28 @@ namespace Damage_Calculator.Models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The absolute path to the file that holds this map's navigation meshes and callouts.
 | 
					        /// The absolute path to the file that holds this map's navigation meshes and callouts.
 | 
				
			||||||
        /// This might not always be existent, because it is generated by the map builder.
 | 
					        /// This might not always be existent, because it is generated by the map builder, but can be packed inside the BSP. In that case its value is "PACKED".
 | 
				
			||||||
        /// It is always created with maps that are in the main game, because they need callouts and bot movements.
 | 
					        /// It is always created with maps that are in the main game, because they need callouts and bot movements.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public string NavFilePath { get; set; }
 | 
					        public string NavFilePath { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Indicates whether the NAV file was packed inside of the BSP PAKFILE lump.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public bool NavFileBspPacked { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// The absolute path to the file that holds some additional navigational.
 | 
				
			||||||
 | 
					        /// This might not always be existent, because it is generated by the map builder, but can be packed inside the BSP. In that case its value is "PACKED".
 | 
				
			||||||
 | 
					        /// It *might* always be created with maps that are in the main game.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public string AinFilePath { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Indicates whether the AIN file was packed inside of the BSP PAKFILE lump.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public bool AinFileBspPacked { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The map name as given in the file name, but without the prefix.
 | 
					        /// The map name as given in the file name, but without the prefix.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,5 +51,5 @@ using System.Windows;
 | 
				
			||||||
// You can specify all the values or you can default the Build and Revision Numbers
 | 
					// You can specify all the values or you can default the Build and Revision Numbers
 | 
				
			||||||
// by using the '*' as shown below:
 | 
					// by using the '*' as shown below:
 | 
				
			||||||
// [assembly: AssemblyVersion("1.0.*")]
 | 
					// [assembly: AssemblyVersion("1.0.*")]
 | 
				
			||||||
[assembly: AssemblyVersion("1.1.0.2")]
 | 
					[assembly: AssemblyVersion("1.2.0.0")]
 | 
				
			||||||
[assembly: AssemblyFileVersion("1.1.0.2")]
 | 
					[assembly: AssemblyFileVersion("1.2.0.0")]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue