mirror of
				https://github.com/BubbaGumpShrump/AutoTrackR2.git
				synced 2025-11-04 02:18:59 +00:00 
			
		
		
		
	Compare commits
	
		
			No commits in common. "eb50d878b4d872fa33b86c55bf1eaee3cc615c20" and "90d24b4d9b6e4bdbb08d503e5fe373b2839f5ec2" have entirely different histories.
		
	
	
		
			
				eb50d878b4
			
			...
			
				90d24b4d9b
			
		
	
		
					 17 changed files with 624 additions and 853 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
		 Before  
							(image error) Size: 16 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before  
							(image error) Size: 114 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before  
							(image error) Size: 5.3 MiB  | 
| 
						 | 
					@ -29,13 +29,9 @@
 | 
				
			||||||
    <None Remove="Assets\SHADOWMOSES.png" />
 | 
					    <None Remove="Assets\SHADOWMOSES.png" />
 | 
				
			||||||
    <None Remove="Assets\VOX.png" />
 | 
					    <None Remove="Assets\VOX.png" />
 | 
				
			||||||
    <None Remove="Assets\WRITH.png" />
 | 
					    <None Remove="Assets\WRITH.png" />
 | 
				
			||||||
    <None Remove="Assets\ZAP.png" />
 | 
					 | 
				
			||||||
    <None Remove="config.ini" />
 | 
					    <None Remove="config.ini" />
 | 
				
			||||||
    <None Remove="Fonts\Orbitron-Bold.ttf" />
 | 
					    <None Remove="Fonts\Orbitron-Bold.ttf" />
 | 
				
			||||||
    <None Remove="Fonts\Roboto-Regular.ttf" />
 | 
					    <None Remove="Fonts\Roboto-Regular.ttf" />
 | 
				
			||||||
    <None Update="themes.json">
 | 
					 | 
				
			||||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
					 | 
				
			||||||
    </None>
 | 
					 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
| 
						 | 
					@ -103,15 +99,6 @@
 | 
				
			||||||
    <Resource Include="Assets\WRITH.png">
 | 
					    <Resource Include="Assets\WRITH.png">
 | 
				
			||||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
					      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
				
			||||||
    </Resource>
 | 
					    </Resource>
 | 
				
			||||||
    <Resource Include="Assets\cinderborn.png">
 | 
					 | 
				
			||||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
					 | 
				
			||||||
    </Resource>
 | 
					 | 
				
			||||||
    <Resource Include="Assets\shadowguard.png">
 | 
					 | 
				
			||||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
					 | 
				
			||||||
    </Resource>
 | 
					 | 
				
			||||||
    <Resource Include="Assets\ZAP.png">
 | 
					 | 
				
			||||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
					 | 
				
			||||||
    </Resource>
 | 
					 | 
				
			||||||
    <Resource Include="config.ini" />
 | 
					    <Resource Include="config.ini" />
 | 
				
			||||||
    <Resource Include="Fonts\Orbitron-Bold.ttf">
 | 
					    <Resource Include="Fonts\Orbitron-Bold.ttf">
 | 
				
			||||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
					      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -207,7 +207,7 @@
 | 
				
			||||||
                                                   Margin="0,7,0,5"/>
 | 
					                                                   Margin="0,7,0,5"/>
 | 
				
			||||||
                                        <Slider x:Name="ThemeSlider"
 | 
					                                        <Slider x:Name="ThemeSlider"
 | 
				
			||||||
                                                Minimum="0"
 | 
					                                                Minimum="0"
 | 
				
			||||||
                                                Maximum="24"
 | 
					                                                Maximum="21"
 | 
				
			||||||
                                                Value="0"
 | 
					                                                Value="0"
 | 
				
			||||||
                                                TickFrequency="1"
 | 
					                                                TickFrequency="1"
 | 
				
			||||||
                                                IsSnapToTickEnabled="True"
 | 
					                                                IsSnapToTickEnabled="True"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -131,14 +131,13 @@ public partial class HomePage : UserControl
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Ship
 | 
					        // Ship
 | 
				
			||||||
        TrackREventDispatcher.JumpDriveStateChangedEvent += (data) =>
 | 
					        TrackREventDispatcher.JumpDriveStateChangedEvent += (shipName) =>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Dispatcher.Invoke(() =>
 | 
					            Dispatcher.Invoke(() =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                PlayerShipTextBox.Text = data.ShipName;
 | 
					                PlayerShipTextBox.Text = LocalPlayerData.CurrentGameMode == GameMode.PersistentUniverse ? shipName : "Unknown";
 | 
				
			||||||
                AdjustFontSize(PlayerShipTextBox);
 | 
					                AdjustFontSize(PlayerShipTextBox);
 | 
				
			||||||
                LocalPlayerData.PlayerShip = data.ShipName;
 | 
					                LocalPlayerData.PlayerShip = shipName;
 | 
				
			||||||
                LocalPlayerData.LastSeenVehicleLocation = data.Location;
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,14 +170,13 @@ public partial class HomePage : UserControl
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        EnemyPilot = actorDeathData.VictimPilot,
 | 
					                        EnemyPilot = actorDeathData.VictimPilot,
 | 
				
			||||||
                        EnemyShip = actorDeathData.VictimShip,
 | 
					                        EnemyShip = actorDeathData.VictimShip,
 | 
				
			||||||
                        Location = LocalPlayerData.LastSeenVehicleLocation,
 | 
					 | 
				
			||||||
                        OrgAffiliation = playerData?.OrgName,
 | 
					                        OrgAffiliation = playerData?.OrgName,
 | 
				
			||||||
                        Weapon = actorDeathData.Weapon,
 | 
					                        Weapon = actorDeathData.Weapon,
 | 
				
			||||||
                        Ship = LocalPlayerData.PlayerShip ?? "Unknown",
 | 
					                        Ship = LocalPlayerData.PlayerShip ?? "Unknown",
 | 
				
			||||||
                        Method = actorDeathData.DamageType,
 | 
					                        Method = actorDeathData.DamageType,
 | 
				
			||||||
                        RecordNumber = playerData?.UEERecord,
 | 
					                        RecordNumber = playerData?.UEERecord,
 | 
				
			||||||
                        GameVersion = LocalPlayerData.GameVersion ?? "Unknown",
 | 
					                        GameVersion = LocalPlayerData.GameVersion ?? "Unknown",
 | 
				
			||||||
                        TrackRver = "2.10",
 | 
					                        TrackRver = LocalPlayerData.GameVersion?.Replace("v", "") ?? "Unknown",
 | 
				
			||||||
                        Enlisted = playerData?.JoinDate,
 | 
					                        Enlisted = playerData?.JoinDate,
 | 
				
			||||||
                        KillTime = DateTime.UtcNow.ToString("dd MMM yyyy HH:mm"),
 | 
					                        KillTime = DateTime.UtcNow.ToString("dd MMM yyyy HH:mm"),
 | 
				
			||||||
                        PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg"
 | 
					                        PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,5 +14,5 @@ public static class LocalPlayerData
 | 
				
			||||||
    public static string? PlayerShip;
 | 
					    public static string? PlayerShip;
 | 
				
			||||||
    public static string? GameVersion;
 | 
					    public static string? GameVersion;
 | 
				
			||||||
    public static GameMode CurrentGameMode;
 | 
					    public static GameMode CurrentGameMode;
 | 
				
			||||||
    public static string? LastSeenVehicleLocation = "Unknown";
 | 
					    public static string? LastSeenVehicleLocation;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2,12 +2,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace AutoTrackR2.LogEventHandlers;
 | 
					namespace AutoTrackR2.LogEventHandlers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public struct JumpDriveStateChangedData
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    public string ShipName { get; set; }
 | 
					 | 
				
			||||||
    public string Location { get; set; }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class JumpDriveStateChangedEvent : ILogEventHandler
 | 
					public class JumpDriveStateChangedEvent : ILogEventHandler
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public Regex Pattern { get; }
 | 
					    public Regex Pattern { get; }
 | 
				
			||||||
| 
						 | 
					@ -15,7 +9,7 @@ public class JumpDriveStateChangedEvent : ILogEventHandler
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public JumpDriveStateChangedEvent()
 | 
					    public JumpDriveStateChangedEvent()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Pattern = new Regex(@"<Jump Drive State Changed>.*.adam: (?<ShipName>.*.) in zone (?<Location>.*.)\)");
 | 
					        Pattern = new Regex(@"<Jump Drive State Changed>.*.adam: (?<ShipName>.*.) in");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public void Handle(LogEntry entry)
 | 
					    public void Handle(LogEntry entry)
 | 
				
			||||||
| 
						 | 
					@ -24,19 +18,10 @@ public class JumpDriveStateChangedEvent : ILogEventHandler
 | 
				
			||||||
        var match = Pattern.Match(entry.Message);
 | 
					        var match = Pattern.Match(entry.Message);
 | 
				
			||||||
        if (!match.Success) return;
 | 
					        if (!match.Success) return;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var data = new JumpDriveStateChangedData
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Location = match.Groups["Location"].Value
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        match = _cleanUpPattern.Match(match.Groups["ShipName"].Value);
 | 
					        match = _cleanUpPattern.Match(match.Groups["ShipName"].Value);
 | 
				
			||||||
        if (match.Success)
 | 
					        if (match.Success)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            data.ShipName = match.Groups[1].Value;
 | 
					            TrackREventDispatcher.OnJumpDriveStateChangedEvent(match.Groups[1].Value);;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (!string.IsNullOrEmpty(data.ShipName) && !string.IsNullOrEmpty(data.Location))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            TrackREventDispatcher.OnJumpDriveStateChangedEvent(data);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ public class RequestJumpFailedEvent : ILogEventHandler
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public RequestJumpFailedEvent()
 | 
					    public RequestJumpFailedEvent()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Pattern = new Regex(@"<Request Jump Failed>.*.adam: (?<ShipName>.*.) in zone (?<Location>.*.)\)");
 | 
					        Pattern = new Regex(@"<Request Jump Failed>.*.adam: (?<ShipName>.*.) in");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public void Handle(LogEntry entry)
 | 
					    public void Handle(LogEntry entry)
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,10 @@ public class RequestJumpFailedEvent : ILogEventHandler
 | 
				
			||||||
        var match = Pattern.Match(entry.Message);
 | 
					        var match = Pattern.Match(entry.Message);
 | 
				
			||||||
        if (!match.Success) return;
 | 
					        if (!match.Success) return;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        var data = new JumpDriveStateChangedData
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Location = match.Groups["Location"].Value
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        match = _cleanUpPattern.Match(match.Groups["ShipName"].Value);
 | 
					        match = _cleanUpPattern.Match(match.Groups["ShipName"].Value);
 | 
				
			||||||
        if (match.Success)
 | 
					        if (match.Success)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            data.ShipName = match.Groups[1].Value;
 | 
					            TrackREventDispatcher.OnJumpDriveStateChangedEvent(match.Groups[1].Value);;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        if (!string.IsNullOrEmpty(data.ShipName) && !string.IsNullOrEmpty(data.Location))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            TrackREventDispatcher.OnJumpDriveStateChangedEvent(data);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -21,16 +21,14 @@ public class VehicleDestructionEvent : ILogEventHandler
 | 
				
			||||||
    public Regex Pattern { get; }
 | 
					    public Regex Pattern { get; }
 | 
				
			||||||
    public VehicleDestructionEvent()
 | 
					    public VehicleDestructionEvent()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        const string patternStr = """
 | 
					        Pattern = new Regex("""
 | 
				
			||||||
                                  <(?<timestamp>[^>]+)> \[Notice\] <Vehicle Destruction> CVehicle::OnAdvanceDestroyLevel: 
 | 
					                            "<(?<timestamp>[^>]+)> \[Notice\] <Vehicle Destruction> CVehicle::OnAdvanceDestroyLevel: " +
 | 
				
			||||||
                                  Vehicle '(?<vehicle>[^']+)' \[\d+\] in zone '(?<vehicle_zone>[^']+)' 
 | 
					                            "Vehicle '(?<vehicle>[^']+)' \[\d+\] in zone '(?<vehicle_zone>[^']+)' " +
 | 
				
			||||||
                                  \[pos x: (?<pos_x>[-\d\.]+), y: (?<pos_y>[-\d\.]+), z: (?<pos_z>[-\d\.]+) 
 | 
					                            "\[pos x: (?<pos_x>[-\d\.]+), y: (?<pos_y>[-\d\.]+), z: (?<pos_z>[-\d\.]+) " +
 | 
				
			||||||
                                  vel x: [^,]+, y: [^,]+, z: [^\]]+\] driven by '(?<driver>[^']+)' \[\d+\] 
 | 
					                            "vel x: [^,]+, y: [^,]+, z: [^\]]+\] driven by '(?<driver>[^']+)' \[\d+\] " +
 | 
				
			||||||
                                  advanced from destroy level (?<destroy_level_from>\d+) to (?<destroy_level_to>\d+) 
 | 
					                            "advanced from destroy level (?<destroy_level_from>\d+) to (?<destroy_level_to>\d+) " +
 | 
				
			||||||
                                  caused by '(?<caused_by>[^']+)' \[\d+\] with '(?<damage_type>[^']+)'
 | 
					                            "caused by '(?<caused_by>[^']+)' \[\d+\] with '(?<damage_type>[^']+)'"
 | 
				
			||||||
                                  """;
 | 
					                            """);
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        Pattern = new Regex(Regex.Replace(patternStr, @"\t|\n|\r", ""));
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void Handle(LogEntry entry)
 | 
					    public void Handle(LogEntry entry)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,8 +42,7 @@ public class LogHandler
 | 
				
			||||||
        new InPersistentUniverseEvent(),
 | 
					        new InPersistentUniverseEvent(),
 | 
				
			||||||
        new GameVersionEvent(),
 | 
					        new GameVersionEvent(),
 | 
				
			||||||
        new JumpDriveStateChangedEvent(),
 | 
					        new JumpDriveStateChangedEvent(),
 | 
				
			||||||
        new RequestJumpFailedEvent(),
 | 
					        new RequestJumpFailedEvent()
 | 
				
			||||||
        new VehicleDestructionEvent()
 | 
					 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    public LogHandler(string? logPath)
 | 
					    public LogHandler(string? logPath)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,24 +25,7 @@ namespace AutoTrackR2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void ChangeLogoImage(string imagePath)
 | 
					        public void ChangeLogoImage(string imagePath)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            Logo.Source = new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                // Ensure the path starts with a forward slash for WPF resource paths
 | 
					 | 
				
			||||||
                if (!imagePath.StartsWith("/"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    imagePath = "/" + imagePath;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                // Create a pack URI for the resource
 | 
					 | 
				
			||||||
                Uri uri = new Uri($"pack://application:,,,/AutoTrackR2;component{imagePath}", UriKind.Absolute);
 | 
					 | 
				
			||||||
                Logo.Source = new BitmapImage(uri);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            catch (Exception ex)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                // Log the error or handle it appropriately
 | 
					 | 
				
			||||||
                Debug.WriteLine($"Error loading logo image: {ex.Message}");
 | 
					 | 
				
			||||||
                // Optionally set a default logo or handle the error
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public MainWindow()
 | 
					        public MainWindow()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,9 +49,9 @@ public static class TrackREventDispatcher
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Jump Drive state has changed
 | 
					    // Jump Drive state has changed
 | 
				
			||||||
    // Todo: Add proper data for this event. Right now only ship name is used.
 | 
					    // Todo: Add proper data for this event. Right now only ship name is used.
 | 
				
			||||||
    public static event Action<JumpDriveStateChangedData>? JumpDriveStateChangedEvent;
 | 
					    public static event Action<string>? JumpDriveStateChangedEvent;
 | 
				
			||||||
    public static void OnJumpDriveStateChangedEvent(JumpDriveStateChangedData data)
 | 
					    public static void OnJumpDriveStateChangedEvent(string shipName)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        JumpDriveStateChangedEvent?.Invoke(data);
 | 
					        JumpDriveStateChangedEvent?.Invoke(shipName);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,6 @@ public struct KillData
 | 
				
			||||||
    public string? Enlisted;
 | 
					    public string? Enlisted;
 | 
				
			||||||
    public string? RecordNumber;
 | 
					    public string? RecordNumber;
 | 
				
			||||||
    public string? OrgAffiliation;
 | 
					    public string? OrgAffiliation;
 | 
				
			||||||
    public string? Location;
 | 
					 | 
				
			||||||
    public string? Player;
 | 
					    public string? Player;
 | 
				
			||||||
    public string? Weapon;
 | 
					    public string? Weapon;
 | 
				
			||||||
    public string? Ship;
 | 
					    public string? Ship;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,6 @@ using System.Text.Json;
 | 
				
			||||||
using System.Text.RegularExpressions;
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
using AutoTrackR2.LogEventHandlers;
 | 
					using AutoTrackR2.LogEventHandlers;
 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.Security.Cryptography;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace AutoTrackR2;
 | 
					namespace AutoTrackR2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,27 +24,6 @@ public static class WebHandler
 | 
				
			||||||
        public string? trackr_version { get; set; }
 | 
					        public string? trackr_version { get; set; }
 | 
				
			||||||
        public string? location { get; set; }
 | 
					        public string? location { get; set; }
 | 
				
			||||||
        public long time { get; set; }
 | 
					        public long time { get; set; }
 | 
				
			||||||
        public string hash { get; set; } = string.Empty;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static string GenerateKillHash(string victimName, long timestamp)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // Combine victim name and timestamp
 | 
					 | 
				
			||||||
        string combined = $"{victimName}_{timestamp}";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Create SHA256 hash
 | 
					 | 
				
			||||||
        using (SHA256 sha256 = SHA256.Create())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(combined));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Convert byte array to hex string
 | 
					 | 
				
			||||||
            StringBuilder builder = new StringBuilder();
 | 
					 | 
				
			||||||
            for (int i = 0; i < bytes.Length; i++)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                builder.Append(bytes[i].ToString("x2"));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return builder.ToString();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static async Task<PlayerData?> GetPlayerData(string enemyPilot)
 | 
					    public static async Task<PlayerData?> GetPlayerData(string enemyPilot)
 | 
				
			||||||
| 
						 | 
					@ -104,7 +82,6 @@ public static class WebHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static async Task SubmitKill(KillData killData)
 | 
					    public static async Task SubmitKill(KillData killData)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
 | 
					 | 
				
			||||||
        var apiKillData = new APIKillData
 | 
					        var apiKillData = new APIKillData
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            victim_ship = killData.EnemyShip,
 | 
					            victim_ship = killData.EnemyShip,
 | 
				
			||||||
| 
						 | 
					@ -117,9 +94,8 @@ public static class WebHandler
 | 
				
			||||||
            loadout_ship = killData.Ship,
 | 
					            loadout_ship = killData.Ship,
 | 
				
			||||||
            game_version = killData.GameVersion,
 | 
					            game_version = killData.GameVersion,
 | 
				
			||||||
            trackr_version = killData.TrackRver,
 | 
					            trackr_version = killData.TrackRver,
 | 
				
			||||||
            location = killData.Location,
 | 
					            location = "Unknown",
 | 
				
			||||||
            time = timestamp,
 | 
					            time = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
 | 
				
			||||||
            hash = GenerateKillHash(killData.EnemyPilot!, timestamp)
 | 
					 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (string.IsNullOrEmpty(apiKillData.rsi))
 | 
					        if (string.IsNullOrEmpty(apiKillData.rsi))
 | 
				
			||||||
| 
						 | 
					@ -147,7 +123,6 @@ public static class WebHandler
 | 
				
			||||||
        Console.WriteLine($"API URL: {ConfigManager.ApiUrl}register-kill");
 | 
					        Console.WriteLine($"API URL: {ConfigManager.ApiUrl}register-kill");
 | 
				
			||||||
        Console.WriteLine($"Victim: {apiKillData.victim}");
 | 
					        Console.WriteLine($"Victim: {apiKillData.victim}");
 | 
				
			||||||
        Console.WriteLine($"Victim Ship: {apiKillData.victim_ship}");
 | 
					        Console.WriteLine($"Victim Ship: {apiKillData.victim_ship}");
 | 
				
			||||||
        Console.WriteLine($"Location: {apiKillData.location}");
 | 
					 | 
				
			||||||
        Console.WriteLine($"Weapon: {apiKillData.weapon}");
 | 
					        Console.WriteLine($"Weapon: {apiKillData.weapon}");
 | 
				
			||||||
        Console.WriteLine($"Method: {apiKillData.method}");
 | 
					        Console.WriteLine($"Method: {apiKillData.method}");
 | 
				
			||||||
        Console.WriteLine($"Game Mode: {apiKillData.gamemode}");
 | 
					        Console.WriteLine($"Game Mode: {apiKillData.gamemode}");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,321 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    "Blue": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#00A9E0",
 | 
					 | 
				
			||||||
        "Button": "#0F1A2B",
 | 
					 | 
				
			||||||
        "Background": "#1D2D44",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/AutoTrackR.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Green": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#1D9F00",
 | 
					 | 
				
			||||||
        "Button": "#262424",
 | 
					 | 
				
			||||||
        "Background": "#072501",
 | 
					 | 
				
			||||||
        "Text": "#D7AF3C",
 | 
					 | 
				
			||||||
        "AltText": "#DCD6C4"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/AutoTrackR.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Red": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#D32F2F",
 | 
					 | 
				
			||||||
        "Button": "#424242",
 | 
					 | 
				
			||||||
        "Background": "#212121",
 | 
					 | 
				
			||||||
        "Text": "#E0E0E0",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/AutoTrackR.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Purple": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#32CD32",
 | 
					 | 
				
			||||||
        "Button": "#33065F",
 | 
					 | 
				
			||||||
        "Background": "#43065F",
 | 
					 | 
				
			||||||
        "Text": "#00FF00",
 | 
					 | 
				
			||||||
        "AltText": "#B3976E"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/AutoTrackR.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "GN": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FF0000",
 | 
					 | 
				
			||||||
        "Button": "#1A0000",
 | 
					 | 
				
			||||||
        "Background": "#0A0000",
 | 
					 | 
				
			||||||
        "Text": "#FFD700",
 | 
					 | 
				
			||||||
        "AltText": "#FF4500"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/GN.png",
 | 
					 | 
				
			||||||
        "Primary": "#FF0000"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "NW": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#B92D2D",
 | 
					 | 
				
			||||||
        "Button": "#1C1C1C",
 | 
					 | 
				
			||||||
        "Background": "#262424",
 | 
					 | 
				
			||||||
        "Text": "#01DDDA",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/NW.png",
 | 
					 | 
				
			||||||
        "Primary": "#01DDDA"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "D3VL": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#AA0000",
 | 
					 | 
				
			||||||
        "Button": "#333333",
 | 
					 | 
				
			||||||
        "Background": "#220000",
 | 
					 | 
				
			||||||
        "Text": "#FF0000",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/D3VL.png",
 | 
					 | 
				
			||||||
        "Primary": "#CC0000"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "HIT": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#B92D2D",
 | 
					 | 
				
			||||||
        "Button": "#1C1C1C",
 | 
					 | 
				
			||||||
        "Background": "#262424",
 | 
					 | 
				
			||||||
        "Text": "#7d7d7d",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/HIT.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "WRAITH": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#ff0000",
 | 
					 | 
				
			||||||
        "Button": "#2a2a2a",
 | 
					 | 
				
			||||||
        "Background": "#0a0a0a",
 | 
					 | 
				
			||||||
        "Text": "#DFDFDF",
 | 
					 | 
				
			||||||
        "AltText": "#8B0000"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/WRITH.png",
 | 
					 | 
				
			||||||
        "Primary": "#ff0000"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Cinderborn": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FF4500",
 | 
					 | 
				
			||||||
        "Button": "#2A0A0A",
 | 
					 | 
				
			||||||
        "Background": "#1A0000",
 | 
					 | 
				
			||||||
        "Text": "#FF8C42",
 | 
					 | 
				
			||||||
        "AltText": "#FF6B35"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/cinderborn.png",
 | 
					 | 
				
			||||||
        "Primary": "#FF4500"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "EMP": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#F5721C",
 | 
					 | 
				
			||||||
        "Button": "#535353",
 | 
					 | 
				
			||||||
        "Background": "#080000",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#CEA75B"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/EMP.png",
 | 
					 | 
				
			||||||
        "Primary": "#F3BD9B"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "AVS": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#00BFFF",
 | 
					 | 
				
			||||||
        "Button": "#001F3F",
 | 
					 | 
				
			||||||
        "Background": "#000B1A",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#87CEEB"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/AVSQN.png",
 | 
					 | 
				
			||||||
        "Primary": "#00BFFF"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "HEX": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#00FF00",
 | 
					 | 
				
			||||||
        "Button": "#001A00",
 | 
					 | 
				
			||||||
        "Background": "#000D00",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#39FF14"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/HEX.png",
 | 
					 | 
				
			||||||
        "Primary": "#00FF00"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Mammon": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FFD700",
 | 
					 | 
				
			||||||
        "Button": "#2C2C2C",
 | 
					 | 
				
			||||||
        "Background": "#1A1A1A",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#DAA520"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/MAMMON.png",
 | 
					 | 
				
			||||||
        "Primary": "#FFD700"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Shadow Moses": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FF69B4",
 | 
					 | 
				
			||||||
        "Button": "#2C2C2C",
 | 
					 | 
				
			||||||
        "Background": "#2C1F28",
 | 
					 | 
				
			||||||
        "Text": "#E6E6E6",
 | 
					 | 
				
			||||||
        "AltText": "#FF1493"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/ShadowMoses.png",
 | 
					 | 
				
			||||||
        "Primary": "#FF69B4"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Mongrel Squad": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#00BFFF",
 | 
					 | 
				
			||||||
        "Button": "#003366",
 | 
					 | 
				
			||||||
        "Background": "#001F3F",
 | 
					 | 
				
			||||||
        "Text": "#E6F3FF",
 | 
					 | 
				
			||||||
        "AltText": "#87CEEB"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/BOBGREL.png",
 | 
					 | 
				
			||||||
        "Primary": "#00BFFF"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Feezy": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FFA500",
 | 
					 | 
				
			||||||
        "Button": "#1B0C04",
 | 
					 | 
				
			||||||
        "Background": "#1B0C04",
 | 
					 | 
				
			||||||
        "Text": "#FFE4B5",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/chibifox.png",
 | 
					 | 
				
			||||||
        "Primary": "#FFA500"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "NMOS": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#EAB787",
 | 
					 | 
				
			||||||
        "Button": "#601C1B",
 | 
					 | 
				
			||||||
        "Background": "#170402",
 | 
					 | 
				
			||||||
        "Text": "#F6DBAD",
 | 
					 | 
				
			||||||
        "AltText": "#EBCAA0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/NMOS.png",
 | 
					 | 
				
			||||||
        "Primary": "#EAB787"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Rakk": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FF00FF",
 | 
					 | 
				
			||||||
        "Button": "#1C1C1C",
 | 
					 | 
				
			||||||
        "Background": "#0A0A0A",
 | 
					 | 
				
			||||||
        "Text": "#E6E6E6",
 | 
					 | 
				
			||||||
        "AltText": "#00BFFF"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/RACKETEERS.png",
 | 
					 | 
				
			||||||
        "Primary": "#FF00FF"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Blightveil": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#8B4AC6",
 | 
					 | 
				
			||||||
        "Button": "#2A2035",
 | 
					 | 
				
			||||||
        "Background": "#1A1621",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#FF3333"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/Blightveil.png",
 | 
					 | 
				
			||||||
        "Primary": "#8B4AC6"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Gankhub": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#ffa500",
 | 
					 | 
				
			||||||
        "Button": "#2C2C2C",
 | 
					 | 
				
			||||||
        "Background": "#1b1b1b",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#ffa500"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/Gankhub.png"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "IronPoint": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FF0000",
 | 
					 | 
				
			||||||
        "Button": "#1C1C1C",
 | 
					 | 
				
			||||||
        "Background": "#000000",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#A88F2C"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/IP.png",
 | 
					 | 
				
			||||||
        "Primary": "#FF0000"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Shadow Guardian": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#8B0000",
 | 
					 | 
				
			||||||
        "Button": "#1A0000",
 | 
					 | 
				
			||||||
        "Background": "#0A0000",
 | 
					 | 
				
			||||||
        "Text": "#D3D3D3",
 | 
					 | 
				
			||||||
        "AltText": "#B22222"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/shadowguard.png",
 | 
					 | 
				
			||||||
        "Primary": "#8B0000"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "VOX": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#C0C0C0",
 | 
					 | 
				
			||||||
        "Button": "#1C1C1C",
 | 
					 | 
				
			||||||
        "Background": "#424242",
 | 
					 | 
				
			||||||
        "Text": "#FFD700",
 | 
					 | 
				
			||||||
        "AltText": "#817E79"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/VOX.png",
 | 
					 | 
				
			||||||
        "Primary": "#FFD700"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "Zap": {
 | 
					 | 
				
			||||||
      "Colors": {
 | 
					 | 
				
			||||||
        "Accent": "#FFD700",
 | 
					 | 
				
			||||||
        "Button": "#1A1A1A",
 | 
					 | 
				
			||||||
        "Background": "#0A0A0A",
 | 
					 | 
				
			||||||
        "Text": "#FFFFFF",
 | 
					 | 
				
			||||||
        "AltText": "#FFA500"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "Logo": {
 | 
					 | 
				
			||||||
        "Path": "/Assets/ZAP.png",
 | 
					 | 
				
			||||||
        "Primary": "#FFD700"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	

