diff --git a/AApp/app.config b/AApp/app.config index a4168db..3e9a985 100644 --- a/AApp/app.config +++ b/AApp/app.config @@ -1,23 +1,27 @@ - + -
+
- + - + - - + + + + + + diff --git a/Devices/Joystick/JoystickCls.cs b/Devices/Joystick/JoystickCls.cs index d2293b6..290fb00 100644 --- a/Devices/Joystick/JoystickCls.cs +++ b/Devices/Joystick/JoystickCls.cs @@ -140,7 +140,7 @@ namespace SCJMapper_V2.Devices.Joystick if ( IsJsN( command ) ) return ( cLower.EndsWith( "_x" ) || cLower.EndsWith( "_rotx" ) || cLower.EndsWith( "_throttlex" ) || cLower.EndsWith( "_y" ) || cLower.EndsWith( "_roty" ) || cLower.EndsWith( "_throttley" ) - || cLower.EndsWith( "_Z" ) || cLower.EndsWith( "_rotz" ) || cLower.EndsWith( "_throttlez" ) + || cLower.EndsWith( "_z" ) || cLower.EndsWith( "_rotz" ) || cLower.EndsWith( "_throttlez" ) || cLower.EndsWith( "_slider1" ) || cLower.EndsWith( "_slider2" ) ); else return false; @@ -425,6 +425,7 @@ namespace SCJMapper_V2.Devices.Joystick try { // Enumerate all the objects on the device. + m_sliderCount = 0; //20201231 init to 0 else it counts beyond the available ones foreach ( DeviceObjectInstance d in m_device.GetObjects( ) ) { // Set the UI to reflect what objects the joystick supports. if ( ObjectGuid.XAxis == d.ObjectType ) cmds.Add( "x" ); diff --git a/Devices/Options/FormOptions.cs b/Devices/Options/FormOptions.cs index f20c471..8762e38 100644 --- a/Devices/Options/FormOptions.cs +++ b/Devices/Options/FormOptions.cs @@ -369,7 +369,7 @@ namespace SCJMapper_V2.Devices.Options option = pOpt.OptName; tuning = m_tuningRef.TuningItem( (string)lview.Tag, option ); m_live.Load( tuning ); if ( m_live.used ) { lvi = new ListViewItem( SCUiText.Instance.Text( option ), lvg ) { Name = option }; - lvi.Name = option; lview.Items.Add( lvi ); ListViewItemSetup( lvi ); + lvi.Name = option; lview.Items.Add( lvi ); ListViewItemSetup( lvi ); // TODO get defaults from pOpt captured (showCurve, Invert, defaults...) UpdateLvOptionFromLiveValues( m_live ); } } diff --git a/Devices/Options/OptionTree.cs b/Devices/Options/OptionTree.cs index 2bac8c0..9043ffb 100644 --- a/Devices/Options/OptionTree.cs +++ b/Devices/Options/OptionTree.cs @@ -50,7 +50,7 @@ namespace SCJMapper_V2.Devices.Options /// Clone this object /// /// A deep Clone of this object - public object Clone() + public object Clone( ) { var ot = (OptionTree)this.MemberwiseClone( ); // more objects to deep copy @@ -97,18 +97,17 @@ namespace SCJMapper_V2.Devices.Options // get options for the device class var devOpts = m_profileOptions.Where( x => x.DeviceClass == device.DevClass ); - foreach (ProfileOptionRec rec in devOpts ) { + foreach ( ProfileOptionRec rec in devOpts ) { m_tuning.Add( rec.OptName, new DeviceTuningParameter( rec.OptName, device ) ); } } - public int Count - { + public int Count { get { return ( m_stringOptions.Count + 1 ); } } - public void ResetDynamicItems() + public void ResetDynamicItems( ) { foreach ( KeyValuePair kv in m_tuning ) { DeviceTuningParameter item = kv.Value; @@ -151,7 +150,7 @@ namespace SCJMapper_V2.Devices.Options /// Dump the Options as partial XML nicely formatted /// /// the action as XML fragment - public string toXML() + public string toXML( ) { string r = ""; @@ -216,7 +215,7 @@ namespace SCJMapper_V2.Devices.Options string productS = (string)options.Attribute( "Product" ); // optional 3.5 ?? string devClass = DeviceCls.DeviceClass; // the generic one - if ( !string.IsNullOrEmpty(type)) devClass = type; // get the one from the map if given (else it's a map error...) + if ( !string.IsNullOrEmpty( type ) ) devClass = type; // get the one from the map if given (else it's a map error...) // mouse arrives as type keyboard - fix it to deviceClass mouse here if ( KeyboardCls.IsDeviceClass( devClass ) ) @@ -236,14 +235,16 @@ namespace SCJMapper_V2.Devices.Options public class ProfileOptionRec : IEquatable { - public string DeviceClass { get; set; } - public string OptGroup { get; set; } - public string OptName { get; set; } - public bool ShowCurve { get; set; } - public bool ShowInvert { get; set; } - public ProfileOptionRec() + public string DeviceClass { get; set; } = ""; + public string OptGroup { get; set; } = ""; + public string OptName { get; set; } = ""; + public bool ShowCurve { get; set; } = false; + public bool ShowInvert { get; set; } = false; + public bool DefaultInvert { get; set; } = false; //20201231 - capture default inverted options + public float DefaultExponent { get; set; } = float.NaN; //20201231 - capture default exponent options + public ProfileOptionRec( ) { - DeviceClass = DeviceCls.DeviceClass; OptGroup = ""; OptName = ""; ShowCurve = false; ShowInvert = false; + DeviceClass = DeviceCls.DeviceClass; } // same class and name means records match public bool Equals( ProfileOptionRec other ) @@ -262,7 +263,7 @@ namespace SCJMapper_V2.Devices.Options /// Clears the stored optiontree items from the profile /// must be cleared before re-reading them from profile /// - public static void InitOptionReader() + public static void InitOptionReader( ) { m_profileOptions = new List( ); } @@ -277,6 +278,10 @@ namespace SCJMapper_V2.Devices.Options private static bool ReadOptiongroup( XElement optiongroupIn, string devClass, string optGroup ) { bool retVal = true; + bool grpShowCurve = false; + bool grpShowInvert = false; + bool grpDefaultInvert = false; + float grpDefaultExponent = float.NaN; // collect content and process further groups string name = (string)optiongroupIn.Attribute( "name" ); @@ -285,6 +290,33 @@ namespace SCJMapper_V2.Devices.Options uiLabel = name; // subst if not found in Action node SCUiText.Instance.Add( name, uiLabel ); // Register item for translation + // 20201231- read initial (group and item props and merge from top) + string attr = (string)optiongroupIn.Attribute( "UIShowCurve" ); + if ( !string.IsNullOrEmpty( attr ) ) { + if ( int.TryParse( attr, out int showCurve ) ) { + if ( showCurve != 0) grpShowCurve = ( showCurve == 1 ); // change only if not neutral (==0) + } + } + attr = (string)optiongroupIn.Attribute( "UIShowInvert" ); + if ( !string.IsNullOrEmpty( attr ) ) { + if ( int.TryParse( attr, out int showInvert ) ) { + if ( showInvert != 0 ) grpShowInvert = ( showInvert == 1 );; // change only if not neutral (==0) + } + } + //20201231 - get default invert / exponent value from profile + attr = (string)optiongroupIn.Attribute( "invert" ); + if ( !string.IsNullOrEmpty( attr ) ) { + if ( int.TryParse( attr, out int defaultInvert ) ) { + grpDefaultInvert = ( defaultInvert == 1 ); + } + } + attr = (string)optiongroupIn.Attribute( "exponent" ); + if ( !string.IsNullOrEmpty( attr ) ) { + if ( float.TryParse( attr, out float defaultExponent ) ) { + grpDefaultExponent = defaultExponent; + } + } + // further groups IEnumerable optiongroups = from x in optiongroupIn.Elements( ) where ( x.Name == "optiongroup" ) @@ -293,23 +325,16 @@ namespace SCJMapper_V2.Devices.Options retVal &= ReadOptiongroup( optiongroup, devClass, name ); // current is the group if we dive one down } // murks.. determine if it is a terminal node, then get items - if ( optiongroups.Count() == 0 ) { - ProfileOptionRec optRec = new ProfileOptionRec { DeviceClass = devClass, OptGroup=optGroup, OptName = name }; // create a new one - // override props if they arrive in the node - string attr = (string)optiongroupIn.Attribute( "UIShowCurve" ); - if ( !string.IsNullOrEmpty( attr ) ) { - if ( int.TryParse( attr, out int showCurve ) ) { - optRec.ShowCurve = ( showCurve == 1 ); - } - } - attr = (string)optiongroupIn.Attribute( "UIShowInvert" ); - if ( !string.IsNullOrEmpty( attr ) ) { - if ( int.TryParse( attr, out int showInvert ) ) { - optRec.ShowInvert = ( showInvert == 1 ); - } + if ( optiongroups.Count( ) == 0 ) { + // add if needed + if ( grpShowCurve || grpShowInvert ) { + ProfileOptionRec optRec = new ProfileOptionRec { DeviceClass = devClass, OptGroup=optGroup, OptName = name }; // create a new one + optRec.ShowCurve = grpShowCurve; + optRec.ShowInvert = grpShowInvert; + optRec.DefaultInvert = grpDefaultInvert; + optRec.DefaultExponent = grpDefaultExponent; + m_profileOptions.Add( optRec ); } - if ( optRec.ShowCurve || optRec.ShowInvert) - m_profileOptions.Add( optRec ); // add only if something is to tweak.. } return retVal; } diff --git a/LICENSE b/LICENSE index 91c6994..9788e32 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ The MIT License (MIT) For SCJMapper: -Copyright (c) 2019 Martin Burri +Copyright (c) 2021 Martin Burri Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Layout/ActionGroups.cs b/Layout/ActionGroups.cs index 4c62268..916bbff 100644 --- a/Layout/ActionGroups.cs +++ b/Layout/ActionGroups.cs @@ -68,28 +68,39 @@ namespace SCJMapper_V2.Layout // Define which maps belongs to which group var x = new List( ) { "spaceship_general", "spaceship_view", "spaceship_movement", "spaceship_docking", "spaceship_power", "IFCS_controls" }; m_actionDict.Add( EGroup.SpaceFlight, x ); + x = new List( ) { "spaceship_targeting", "spaceship_target_hailing", "spaceship_scanning", "spaceship_ping", "spaceship_radar", "spaceship_targeting_advanced" }; m_actionDict.Add( EGroup.SpaceTargeting, x ); - x = new List( ) { "spaceship_mining" }; + + x = new List( ) { "spaceship_mining", "tractor_beam" }; m_actionDict.Add( EGroup.SpaceMining, x ); + x = new List( ) { "turret_main", "spaceship_weapons", "spaceship_missiles", "spaceship_auto_weapons" }; m_actionDict.Add( EGroup.SpaceWeapons, x ); + x = new List( ) { "spaceship_defensive" }; m_actionDict.Add( EGroup.SpaceDefensive, x ); + x = new List( ) { "lights_controller" }; m_actionDict.Add( EGroup.Lights, x ); - x = new List( ) { "default", "prone", "player", "player_choice", "player_emotes", "player_input_optical_tracking" }; + + x = new List( ) { "default", "player", "prone", "hacking", "player_choice", "player_emotes", "player_input_optical_tracking" }; m_actionDict.Add( EGroup.Player, x ); + x = new List( ) { "zero_gravity_eva" }; m_actionDict.Add( EGroup.EVA, x ); + x = new List( ) { "vehicle_general", "vehicle_driver" }; m_actionDict.Add( EGroup.Vehicle, x ); //x = new List( ) { "vehicle_gunner" }; // removed in 3.10.0 //m_actionDict.Add( EGroup.VehicleWeapons, x ); // removed in 3.10.0 - x = new List( ) { "spaceship_hud", "ui_textfield", "ui_notification" }; + // 3.13 add "player_choice_interaction_mode" + x = new List( ) { "spaceship_hud", "ui_textfield", "ui_notification", "player_choice_interaction_mode" }; m_actionDict.Add( EGroup.Interaction, x ); + x = new List( ) { "spectator", "flycam", "view_director_mode" }; m_actionDict.Add( EGroup.Spectator, x ); + x = new List( ) { "server_renderer" }; m_actionDict.Add( EGroup.Others, x ); } diff --git a/Layout/LayoutGroups.cs b/Layout/LayoutGroups.cs index 81d2f0d..636ff25 100644 --- a/Layout/LayoutGroups.cs +++ b/Layout/LayoutGroups.cs @@ -21,7 +21,7 @@ namespace SCJMapper_V2.Layout "EVA" :[ "zero_gravity_eva" ], "Vehicle" :[ "vehicle_general", "vehicle_driver" ], "Lights" :[ "lights_controller" ], - "Interaction" :[ "spaceship_hud", "ui_textfield", "ui_notification" ], + "Interaction" :[ "spaceship_hud", "ui_textfield", "ui_notification", "player_choice_interaction_mode" ], "Spectator" :[ "spectator", "flycam", "view_director_mode" ], "Others" :[ "server_renderer" ] } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 4ad62dd..44553b3 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "2.48.0.83" )] -[assembly: AssemblyFileVersion( "2.48.0.83" )] +[assembly: AssemblyVersion( "2.50.0.85" )] +[assembly: AssemblyFileVersion( "2.50.0.85" )] diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 70dda92..3ddbd93 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace SCJMapper_V2.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/README.md b/README.md index c1d6615..b6e0ac1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # SCJMapper-V2 -SC Joystick Mapper (.Net 4.5.2; using sharpDX/OpenTK wrapper) -this should work with Win7, Win8.x Win 10 out of the box +SC Joystick Mapper (.Net 4.7.2; using sharpDX/OpenTK wrapper) +this should work with Win 10 out of the box On RSI Spectrum see https://robertsspaceindustries.com/spectrum/community/SC/forum/51473/thread/scjmapper-news-and-updates @@ -17,9 +17,9 @@ using OpenTK.1.1.1589.5942 .net wrapper (http://www.opentk.com/) * NET40\OpenTK.dll * NET40\OpenTK.GLControl.dll -using ZstdNet 1.3.1 (https://www.nuget.org/packages/ZstdNet/) +using ZstdNet 1.4.5 (https://www.nuget.org/packages/ZstdNet/) -using log4net.dll +using log4net.dll 2.0.12 Built with VisualStudio 2017 Community free version diff --git a/ReadMe.txt b/ReadMe.txt index 1f68fce..50782ab 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,23 +1,26 @@ -SC Joystick Mapper V 2.48 - Build 83 BETA -(c) Cassini, StandardToaster - 18-Aug-2020 +SC Joystick Mapper V 2.50 - Build 85 BETA +(c) Cassini, StandardToaster - 04-Apr-2021 -Contains 14 files + graphics: +Contains files + graphics: -SCJMapper.exe The program (V2.48) +SCJMapper.exe The program (V2.50) - The following files and folders MUST be in the same folder as the Exe file -SCJMapper.exe.config Program config (V2.48) -de\SCJMapper.resources.dll German language (V2.45) -fr\SCJMapper.resources.dll French language (V2.45) +SCJMapper.exe.config Program config (V2.50) +de\SCJMapper.resources.dll German language (V2.50) +fr\SCJMapper.resources.dll French language (V2.50) Storage\*.scj Folder for collected assets (V2.35) PTU_Storage\*.scj Folder for collected PTU (V2.37) SharpDX.DirectInput.dll Managed DirectInput Assembly SharpDX.dll Managed DirectX Assembly OpenTK.dll Managed OpenGL Assembly OpenTK.GLControl.dll Managed OpenGL Assembly -ZstdNet.dll Managed Zip Assembly (v2.33) -x64\libzstd.dll Native dll for ZstdNet (v2.33) -x86\libzstd.dll Native dll for ZstdNet (v2.33) +ZstdNet.dll Managed Zip Assembly +x64\libzstd.dll Native dll for ZstdNet +x86\libzstd.dll Native dll for ZstdNet +System.Memory.dll .Net pulled library +System.Buffers.dll .Net pulled library +System.Runtime.CompilerServices.Unsafe.dll .Net pulled library log4net.dll Managed Logging Assembly log4net.config.OFF Config file for logging rename without .OFF, restart and then look for trace.log in the same folder @@ -25,8 +28,8 @@ log4net.config.OFF Config file for logging SCJMapper_QGuide V2.47beta.pdf Quick Guide (v2.47) ReadMe.txt This file -graphics folder Skybox Images (V2.32) - graphics folder MUST be in the same folder as the Exe file -graphics\layouts folder Layout Images & defs (V2.46) - layouts folder MUST be in the graphics folder above +graphics folder Skybox Images - graphics folder MUST be in the same folder as the Exe file +graphics\layouts folder Layout Images & defs - layouts folder MUST be in the graphics folder above NOTE V 2.41+: search order for defaultProfile.xml to build the action tree is: @@ -50,6 +53,15 @@ Scanned for viruses before packing... cassini@burri-web.org Changelog: +V 2.50 - BETA Build 85 +- updated for the new Mapping path in USER\Client\0 (falls back to currrent if not found) +- updated actionmap groups for layout as of PTU 3.13 +V 2.49 - BETA Build 84 +- updated log4net 2.0.12, zStdLib 1.4.5 (security updates) +- update to .Net 4.7.2 +- fix - Options not properly handled +- fix - Joystick Z axis not properly handled +- fix - some device layouts V 2.48 - BETA Build 83 - updated Actionmap Groups for Layout Dialog taken from LayoutGroups.json from Documents\SCJMapper\[PTU] folder V 2.47 - BETA Build 82 diff --git a/SC/SCPath.cs b/SC/SCPath.cs index 0653d72..4177b1e 100644 --- a/SC/SCPath.cs +++ b/SC/SCPath.cs @@ -21,8 +21,7 @@ namespace SCJMapper_V2.SC /// Try to locate the launcher from Alpha 3.0.0 public - e.g. E:\G\StarCitizen\RSI Launcher /// Alpha 3.6.0 PTU launcher 1.2.0 has the same entry (but PTU location changed) /// - static private string SCLauncherDir6 - { + static private string SCLauncherDir6 { get { log.Debug( "SCLauncherDir6 - Entry" ); string scLauncher = (string)Registry.GetValue( @"HKEY_LOCAL_MACHINE\SOFTWARE\81bfc699-f883-50c7-b674-2483b6baae23", "InstallLocation", null ); @@ -44,8 +43,7 @@ namespace SCJMapper_V2.SC /// /// Try to locate the launcher from Alpha 3.0.0 PTU - e.g. E:\G\StarCitizen\RSI PTU Launcher /// - static private string SCLauncherDir5 - { + static private string SCLauncherDir5 { get { log.Debug( "SCLauncherDir5 - Entry" ); string scLauncher = (string)Registry.GetValue( @"HKEY_LOCAL_MACHINE\SOFTWARE\94a6df8a-d3f9-558d-bb04-097c192530b9", "InstallLocation", null ); @@ -118,8 +116,7 @@ namespace SCJMapper_V2.SC /// /// Returns the base SC install path from something like "E:\G\StarCitizen" /// - static private string SCBasePath - { + static private string SCBasePath { get { log.Debug( "SCBasePath - Entry" ); AppSettings.Instance.Reload( ); // local instance - reload as it might be changed outside @@ -195,8 +192,7 @@ namespace SCJMapper_V2.SC /// /// Returns the SC installation path or "" /// - static public string SCInstallPath - { + static public string SCInstallPath { get { log.Debug( "SCInstallPath - Entry" ); return SCBasePath; @@ -209,8 +205,7 @@ namespace SCJMapper_V2.SC /// Returns the SC Client path /// SC 3.0.0: search path like E:\G\StarCitizen\StarCitizen\LIVE /// - static public string SCClientPath - { + static public string SCClientPath { get { log.Debug( "SCClientPath - Entry" ); string scp = SCBasePath; @@ -227,7 +222,7 @@ namespace SCJMapper_V2.SC // 20180321 New PTU 3.1 another change in setup path - Testing for PTU first // 20190711 Lanuncher 1.2 - PTU has moved - change detection to find this one first. if ( AppSettings.Instance.UsePTU ) { - if ( Directory.Exists( Path.Combine( scp, @"StarCitizen\PTU" )) ) { + if ( Directory.Exists( Path.Combine( scp, @"StarCitizen\PTU" ) ) ) { scp = Path.Combine( scp, @"StarCitizen\PTU" ); } else if ( Directory.Exists( Path.Combine( scp, @"StarCitizenPTU\LIVE" ) ) ) { @@ -258,8 +253,7 @@ namespace SCJMapper_V2.SC /// Returns the SC ClientData path /// AC 3.0: E:\G\StarCitizen\StarCitizen\LIVE\Data /// - static public string SCClientDataPath - { + static public string SCClientDataPath { get { log.Debug( "SCClientDataPath - Entry" ); string scp = SCClientPath; @@ -282,23 +276,27 @@ namespace SCJMapper_V2.SC /// /// Returns the SC ClientData path /// AC 3.0: E:\G\StarCitizen\StarCitizen\LIVE\USER + /// AC 3.13: E:\G\StarCitizen\StarCitizen\LIVE\USER\Client\0 /// - static public string SCClientUSERPath - { + static public string SCClientUSERPath { get { log.Debug( "SCClientUSERPath - Entry" ); string scp = SCClientPath; if ( string.IsNullOrEmpty( scp ) ) return ""; // - scp = Path.Combine( scp, "USER" ); + string scpu = Path.Combine( scp, "USER", "Client", "0" ); // 20210404 new path + if ( !Directory.Exists( scpu ) ) { + scpu = Path.Combine( scp, "USER" ); // 20210404 old path + } + #if DEBUG //*************************************** // scp += "X"; // TEST not found (COMMENT OUT FOR PRODUCTIVE BUILD) //*************************************** #endif - if ( Directory.Exists( scp ) ) return scp; + if ( Directory.Exists( scpu ) ) return scpu; - log.WarnFormat( "SCClientUSERPath - StarCitizen\\LIVE\\USER subfolder does not exist: {0}", scp ); + log.WarnFormat( @"SCClientUSERPath - StarCitizen\\LIVE\\USER[\Client\0] subfolder does not exist: {0}", scpu ); return ""; } } @@ -307,9 +305,9 @@ namespace SCJMapper_V2.SC /// /// Returns the SC ClientData path /// AC 1.1.6: E:\G\StarCitizen\StarCitizen\Public + /// AC 3x: E:\G\StarCitizen\StarCitizen\LIVE or PTU /// - static public string SCClientLogsPath - { + static public string SCClientLogsPath { get { log.Debug( "SCClientLogsPath - Entry" ); string scp = SCClientPath; @@ -321,7 +319,7 @@ namespace SCJMapper_V2.SC #endif if ( Directory.Exists( scp ) ) return scp; - log.WarnFormat( "SCClientLogsPath - StarCitizen\\LIVE subfolder does not exist: {0}", scp ); + log.WarnFormat( "SCClientLogsPath - StarCitizen\\LIVE or PTU subfolder does not exist: {0}", scp ); return ""; } } @@ -331,15 +329,13 @@ namespace SCJMapper_V2.SC /// Returns the SC ClientData path /// AC 1.1.6: E:\G\StarCitizen\StarCitizen\Public\USER\Controls\Mappings /// - static public string SCClientMappingPath - { + static public string SCClientMappingPath { get { log.Debug( "SCClientMappingPath - Entry" ); string scp = SCClientUSERPath; // AC1.03 new here if ( string.IsNullOrEmpty( scp ) ) return ""; // - scp = Path.Combine( scp, "Controls" ); - scp = Path.Combine( scp, "Mappings" ); + scp = Path.Combine( scp, "Controls", "Mappings"); #if DEBUG //*************************************** // scp += "X"; // TEST not found (COMMENT OUT FOR PRODUCTIVE BUILD) @@ -347,7 +343,7 @@ namespace SCJMapper_V2.SC #endif if ( Directory.Exists( scp ) ) return scp; - log.WarnFormat( "SCClientMappingPath - StarCitizen\\LIVE\\USER\\Controls\\Mappings subfolder does not exist: {0}", scp ); + log.WarnFormat( @"SCClientMappingPath - StarCitizen\LIVE\USER\[Client\0\]Controls\Mappings subfolder does not exist: {0}", scp ); return ""; } } @@ -357,8 +353,7 @@ namespace SCJMapper_V2.SC /// Returns the SC Data.p4k file path /// SC Alpha 3.0: E:\G\StarCitizen\StarCitizen\LIVE\Data.p4k (contains the binary XML now) /// - static public string SCData_p4k - { + static public string SCData_p4k { get { log.Debug( "SCDataXML_p4k - Entry" ); string scp = SCClientPath; @@ -372,7 +367,7 @@ namespace SCJMapper_V2.SC #endif if ( File.Exists( scp ) ) return scp; - log.WarnFormat( "SCData_p4k - StarCitizen\\Public\\Data\\Data.p4k file does not exist: {0}", scp ); + log.WarnFormat( @"SCData_p4k - StarCitizen\LIVE or PTU\Data\Data.p4k file does not exist: {0}", scp ); return ""; } } @@ -382,8 +377,7 @@ namespace SCJMapper_V2.SC /// Returns the SC log file path to the latest logfile /// AC 1.1.6: E:\G\StarCitizen\StarCitizen\Public\Game.log NOTE: 1.1.6 does not longer contain the needed entries .-(( /// - static public string SCLastLog - { + static public string SCLastLog { get { log.Debug( "SCLastLog - Entry" ); string scp = SCClientLogsPath; @@ -416,8 +410,7 @@ namespace SCJMapper_V2.SC /// Returns the relative path of DefaultProfile.xml /// SC Alpha 2.2: still true .. but contains the binary XML now /// - static public string DefaultProfilePath_rel - { + static public string DefaultProfilePath_rel { get { log.Debug( "DefaultProfilePath_rel - Entry" ); return @"Libs\Config"; @@ -428,8 +421,7 @@ namespace SCJMapper_V2.SC /// Returns the name part of the DefaultProfile w/o extension... /// SC Alpha 2.2: still true .. but contains the binary XML now /// - static public string DefaultProfileName - { + static public string DefaultProfileName { get { log.Debug( "DefaultProfileName - Entry" ); return @"defaultProfile"; @@ -440,7 +432,7 @@ namespace SCJMapper_V2.SC /// Returns a summary of the detected pathes /// /// A formatted string - static public string Summary() + static public string Summary( ) { string ret = $"SC Path:\n"; diff --git a/SC/defaultProfile.xml b/SC/defaultProfile.xml index 9eeb0c6..b90cc3e 100644 --- a/SC/defaultProfile.xml +++ b/SC/defaultProfile.xml @@ -41,74 +41,73 @@ - - - - - - + + + - - + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - + - + - + - + + + @@ -123,8 +122,8 @@ - - + + @@ -141,14 +140,21 @@ - + - + + + + + + + + @@ -161,7 +167,7 @@ - + @@ -188,56 +194,33 @@ - - + + + + + - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - + + + - + @@ -252,6 +235,11 @@ + + + + + @@ -266,21 +254,28 @@ - - + + - + - - + + + + + + + + + @@ -289,44 +284,40 @@ - - + + + + + - - - - - - - - - - - - - - - - - + - + + - + + + - + + + + + + + @@ -344,25 +335,31 @@ + + - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + @@ -372,10 +369,24 @@ - + + + + + + + + - + + + + + + + + @@ -400,9 +411,11 @@ - - - + + + + + @@ -418,23 +431,12 @@ - + - - - - - - - - - - - @@ -445,104 +447,170 @@ - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + + - - + + + + + + + + + - - + + + + + + - - + + + + + + + - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + - + + @@ -554,12 +622,19 @@ - + + + + + + + + - + @@ -572,82 +647,79 @@ + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - + + + + + + + - - - - - + + + + + + + - - - - - - - + + + + + + + + + + + - + + + - - - + + + - - - - + + + + + @@ -662,18 +734,46 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + @@ -689,9 +789,13 @@ - + + + + + - + @@ -714,13 +818,21 @@ - + + - + + + + + + + + @@ -737,7 +849,14 @@ - + + + + + + + + @@ -745,6 +864,11 @@ + + + + + @@ -771,46 +895,73 @@ - - + + + - - - - - - - + + + + + + + - + + + + + + + + + + + + + + + + - - - + + + + + + - + + + + + + + + + @@ -822,8 +973,11 @@ - - + + + + + @@ -835,9 +989,10 @@ + - + @@ -856,6 +1011,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -865,31 +1041,29 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + @@ -903,44 +1077,75 @@ + - + + + + - + + + + + + + + - + + + + + + + + - + + - - - + + + - - - + + + + + + - - + + + + + + + + + + + + + + - - - @@ -1001,6 +1206,7 @@ + @@ -1052,6 +1258,20 @@ + + + + + + + + + + + + + + @@ -1229,7 +1449,8 @@ - + + @@ -1238,28 +1459,56 @@ + + + - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1319,8 +1568,8 @@ - - + + diff --git a/SCJMapper-V2.csproj b/SCJMapper-V2.csproj index 0570c13..5064093 100644 --- a/SCJMapper-V2.csproj +++ b/SCJMapper-V2.csproj @@ -10,7 +10,7 @@ Properties SCJMapper_V2 SCJMapper - v4.5.2 + v4.7.2 512 @@ -27,8 +27,8 @@ false false true - 83 - 2.48.0.83 + 85 + 2.50.0.85 false true @@ -86,8 +86,8 @@ AApp\app.manifest - - packages\log4net.2.0.3\lib\net40-full\log4net.dll + + packages\log4net.2.0.12\lib\net45\log4net.dll packages\OpenTK.1.1.1589.5942\lib\NET40\OpenTK.dll @@ -108,9 +108,19 @@ packages\SharpDX.2.6.3\Bin\DirectX11-Signed-net40\SharpDX.XInput.dll + + packages\System.Buffers.4.5.1\lib\netstandard1.1\System.Buffers.dll + + + packages\System.Memory.4.5.4\lib\netstandard1.1\System.Memory.dll + + + packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + @@ -120,8 +130,8 @@ - - packages\ZstdNet.1.3.1\lib\net45\ZstdNet.dll + + packages\ZstdNet.1.4.5\lib\net45\ZstdNet.dll @@ -383,6 +393,7 @@ Designer + @@ -505,9 +516,9 @@ This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + - +