diff --git a/Fo76ini/Fo76ini.csproj b/Fo76ini/Fo76ini.csproj index b989f19..a305980 100644 --- a/Fo76ini/Fo76ini.csproj +++ b/Fo76ini/Fo76ini.csproj @@ -202,6 +202,17 @@ + + + + + + + + + + + diff --git a/Fo76ini/Form1.Designer.cs b/Fo76ini/Form1.Designer.cs index 16cde99..d823c30 100644 --- a/Fo76ini/Form1.Designer.cs +++ b/Fo76ini/Form1.Designer.cs @@ -168,10 +168,17 @@ private void InitializeComponent() this.groupBoxInterface = new System.Windows.Forms.GroupBox(); this.groupBoxMainMenu = new System.Windows.Forms.GroupBox(); this.groupBoxGameEdition = new System.Windows.Forms.GroupBox(); + this.pictureBoxMSStore = new System.Windows.Forms.PictureBox(); + this.pictureBoxSteam = new System.Windows.Forms.PictureBox(); + this.pictureBoxBethesdaNetPTS = new System.Windows.Forms.PictureBox(); + this.pictureBoxBethesdaNet = new System.Windows.Forms.PictureBox(); + this.radioButtonEditionMSStore = new System.Windows.Forms.RadioButton(); this.radioButtonEditionBethesdaNetPTS = new System.Windows.Forms.RadioButton(); this.radioButtonEditionSteam = new System.Windows.Forms.RadioButton(); this.radioButtonEditionBethesdaNet = new System.Windows.Forms.RadioButton(); this.tabPageInfo = new System.Windows.Forms.TabPage(); + this.labelGameEdition = new System.Windows.Forms.Label(); + this.pictureBoxGameEdition = new System.Windows.Forms.PictureBox(); this.groupBoxUpdate = new System.Windows.Forms.GroupBox(); this.labelNewVersion = new System.Windows.Forms.Label(); this.buttonUpdateNow = new System.Windows.Forms.Button(); @@ -190,6 +197,7 @@ private void InitializeComponent() this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPageSettings = new System.Windows.Forms.TabPage(); this.groupBoxLaunchOptions = new System.Windows.Forms.GroupBox(); + this.labelLaunchOptionMSStoreNotice = new System.Windows.Forms.Label(); this.labelLaunchOptionTip = new System.Windows.Forms.Label(); this.radioButtonLaunchViaExecutable = new System.Windows.Forms.RadioButton(); this.radioButtonLaunchViaLink = new System.Windows.Forms.RadioButton(); @@ -249,7 +257,12 @@ private void InitializeComponent() this.groupBoxInterface.SuspendLayout(); this.groupBoxMainMenu.SuspendLayout(); this.groupBoxGameEdition.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxMSStore)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSteam)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBethesdaNetPTS)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBethesdaNet)).BeginInit(); this.tabPageInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxGameEdition)).BeginInit(); this.groupBoxUpdate.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); @@ -618,7 +631,7 @@ private void InitializeComponent() this.sliderShadowDistance.Location = new System.Drawing.Point(10, 94); this.sliderShadowDistance.Maximum = 200000; this.sliderShadowDistance.Name = "sliderShadowDistance"; - this.sliderShadowDistance.Size = new System.Drawing.Size(273, 23); + this.sliderShadowDistance.Size = new System.Drawing.Size(281, 23); this.sliderShadowDistance.SmallChange = 1000; this.sliderShadowDistance.TabIndex = 27; this.sliderShadowDistance.Text = "metroTrackBar1"; @@ -659,7 +672,7 @@ private void InitializeComponent() this.sliderLODObjects.Location = new System.Drawing.Point(103, 41); this.sliderLODObjects.Maximum = 600; this.sliderLODObjects.Name = "sliderLODObjects"; - this.sliderLODObjects.Size = new System.Drawing.Size(202, 23); + this.sliderLODObjects.Size = new System.Drawing.Size(210, 23); this.sliderLODObjects.SmallChange = 5; this.sliderLODObjects.TabIndex = 29; this.sliderLODObjects.Text = "metroTrackBar1"; @@ -676,7 +689,7 @@ private void InitializeComponent() this.sliderLODItems.Location = new System.Drawing.Point(104, 70); this.sliderLODItems.Maximum = 600; this.sliderLODItems.Name = "sliderLODItems"; - this.sliderLODItems.Size = new System.Drawing.Size(201, 23); + this.sliderLODItems.Size = new System.Drawing.Size(209, 23); this.sliderLODItems.SmallChange = 5; this.sliderLODItems.TabIndex = 30; this.sliderLODItems.Text = "metroTrackBar2"; @@ -693,7 +706,7 @@ private void InitializeComponent() this.sliderLODActors.Location = new System.Drawing.Point(103, 99); this.sliderLODActors.Maximum = 600; this.sliderLODActors.Name = "sliderLODActors"; - this.sliderLODActors.Size = new System.Drawing.Size(202, 23); + this.sliderLODActors.Size = new System.Drawing.Size(210, 23); this.sliderLODActors.SmallChange = 5; this.sliderLODActors.TabIndex = 32; this.sliderLODActors.Text = "metroTrackBar3"; @@ -724,7 +737,7 @@ private void InitializeComponent() this.sliderGrassFadeDistance.Location = new System.Drawing.Point(9, 66); this.sliderGrassFadeDistance.Maximum = 14000; this.sliderGrassFadeDistance.Name = "sliderGrassFadeDistance"; - this.sliderGrassFadeDistance.Size = new System.Drawing.Size(274, 23); + this.sliderGrassFadeDistance.Size = new System.Drawing.Size(282, 23); this.sliderGrassFadeDistance.SmallChange = 500; this.sliderGrassFadeDistance.TabIndex = 24; this.sliderGrassFadeDistance.Text = "metroTrackBar1"; @@ -975,7 +988,7 @@ private void InitializeComponent() this.sliderTAAPostOverlay.LargeChange = 1; this.sliderTAAPostOverlay.Location = new System.Drawing.Point(9, 41); this.sliderTAAPostOverlay.Name = "sliderTAAPostOverlay"; - this.sliderTAAPostOverlay.Size = new System.Drawing.Size(274, 23); + this.sliderTAAPostOverlay.Size = new System.Drawing.Size(282, 23); this.sliderTAAPostOverlay.TabIndex = 27; this.sliderTAAPostOverlay.Text = "metroTrackBar1"; this.toolTip.SetToolTip(this.sliderTAAPostOverlay, "Sharpens the image.\r\n\r\nRecommended: 0.2\r\nDefault: 0.2\r\n\r\nAffected values: fTAAPos" + @@ -991,7 +1004,7 @@ private void InitializeComponent() this.sliderTAAPostSharpen.Location = new System.Drawing.Point(9, 93); this.sliderTAAPostSharpen.Maximum = 200; this.sliderTAAPostSharpen.Name = "sliderTAAPostSharpen"; - this.sliderTAAPostSharpen.Size = new System.Drawing.Size(274, 23); + this.sliderTAAPostSharpen.Size = new System.Drawing.Size(282, 23); this.sliderTAAPostSharpen.TabIndex = 30; this.sliderTAAPostSharpen.Text = "metroTrackBar2"; this.toolTip.SetToolTip(this.sliderTAAPostSharpen, "Sharpens the image.\r\n\r\nDefault: 0.2\r\nRecommended: 0.4\r\n\r\nAffected values: fTAAPos" + @@ -1451,7 +1464,7 @@ private void InitializeComponent() this.groupBoxTAASharpening.Controls.Add(this.sliderTAAPostOverlay); this.groupBoxTAASharpening.Location = new System.Drawing.Point(9, 655); this.groupBoxTAASharpening.Name = "groupBoxTAASharpening"; - this.groupBoxTAASharpening.Size = new System.Drawing.Size(369, 134); + this.groupBoxTAASharpening.Size = new System.Drawing.Size(377, 134); this.groupBoxTAASharpening.TabIndex = 25; this.groupBoxTAASharpening.TabStop = false; this.groupBoxTAASharpening.Text = "TAA Sharpening"; @@ -1465,7 +1478,7 @@ private void InitializeComponent() 0, 0, 65536}); - this.numTAAPostSharpen.Location = new System.Drawing.Point(289, 93); + this.numTAAPostSharpen.Location = new System.Drawing.Point(297, 93); this.numTAAPostSharpen.Maximum = new decimal(new int[] { 9999999, 0, @@ -1498,7 +1511,7 @@ private void InitializeComponent() 0, 0, 65536}); - this.numTAAPostOverlay.Location = new System.Drawing.Point(289, 41); + this.numTAAPostOverlay.Location = new System.Drawing.Point(297, 41); this.numTAAPostOverlay.Maximum = new decimal(new int[] { 9999999, 0, @@ -1532,7 +1545,7 @@ private void InitializeComponent() this.groupBoxGrass.Controls.Add(this.checkBoxGrass); this.groupBoxGrass.Location = new System.Drawing.Point(9, 555); this.groupBoxGrass.Name = "groupBoxGrass"; - this.groupBoxGrass.Size = new System.Drawing.Size(369, 94); + this.groupBoxGrass.Size = new System.Drawing.Size(377, 94); this.groupBoxGrass.TabIndex = 23; this.groupBoxGrass.TabStop = false; this.groupBoxGrass.Text = "Grass"; @@ -1545,7 +1558,7 @@ private void InitializeComponent() 0, 0, 0}); - this.numGrassFadeDistance.Location = new System.Drawing.Point(289, 68); + this.numGrassFadeDistance.Location = new System.Drawing.Point(297, 68); this.numGrassFadeDistance.Maximum = new decimal(new int[] { 9999999, 0, @@ -1585,7 +1598,7 @@ private void InitializeComponent() this.groupBoxLOD.Controls.Add(this.labelLODObjects); this.groupBoxLOD.Location = new System.Drawing.Point(9, 419); this.groupBoxLOD.Name = "groupBoxLOD"; - this.groupBoxLOD.Size = new System.Drawing.Size(369, 130); + this.groupBoxLOD.Size = new System.Drawing.Size(377, 130); this.groupBoxLOD.TabIndex = 24; this.groupBoxLOD.TabStop = false; this.groupBoxLOD.Text = "LOD"; @@ -1603,7 +1616,7 @@ private void InitializeComponent() // this.numLODActors.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.numLODActors.DecimalPlaces = 1; - this.numLODActors.Location = new System.Drawing.Point(310, 100); + this.numLODActors.Location = new System.Drawing.Point(318, 100); this.numLODActors.Maximum = new decimal(new int[] { 9999999, 0, @@ -1622,7 +1635,7 @@ private void InitializeComponent() // this.numLODItems.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.numLODItems.DecimalPlaces = 1; - this.numLODItems.Location = new System.Drawing.Point(310, 71); + this.numLODItems.Location = new System.Drawing.Point(318, 71); this.numLODItems.Maximum = new decimal(new int[] { 9999999, 0, @@ -1641,7 +1654,7 @@ private void InitializeComponent() // this.numLODObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.numLODObjects.DecimalPlaces = 1; - this.numLODObjects.Location = new System.Drawing.Point(310, 41); + this.numLODObjects.Location = new System.Drawing.Point(318, 41); this.numLODObjects.Maximum = new decimal(new int[] { 9999999, 0, @@ -1690,7 +1703,7 @@ private void InitializeComponent() this.groupBoxLighting.Controls.Add(this.checkBoxGodrays); this.groupBoxLighting.Location = new System.Drawing.Point(9, 233); this.groupBoxLighting.Name = "groupBoxLighting"; - this.groupBoxLighting.Size = new System.Drawing.Size(369, 46); + this.groupBoxLighting.Size = new System.Drawing.Size(377, 46); this.groupBoxLighting.TabIndex = 15; this.groupBoxLighting.TabStop = false; this.groupBoxLighting.Text = "Lighting"; @@ -1708,7 +1721,7 @@ private void InitializeComponent() this.groupBoxShadows.Controls.Add(this.labelShadowTextureResolution); this.groupBoxShadows.Location = new System.Drawing.Point(9, 285); this.groupBoxShadows.Name = "groupBoxShadows"; - this.groupBoxShadows.Size = new System.Drawing.Size(369, 128); + this.groupBoxShadows.Size = new System.Drawing.Size(377, 128); this.groupBoxShadows.TabIndex = 16; this.groupBoxShadows.TabStop = false; this.groupBoxShadows.Text = "Shadows"; @@ -1721,7 +1734,7 @@ private void InitializeComponent() this.comboBoxShadowBlurriness.FormattingEnabled = true; this.comboBoxShadowBlurriness.Location = new System.Drawing.Point(134, 47); this.comboBoxShadowBlurriness.Name = "comboBoxShadowBlurriness"; - this.comboBoxShadowBlurriness.Size = new System.Drawing.Size(229, 21); + this.comboBoxShadowBlurriness.Size = new System.Drawing.Size(237, 21); this.comboBoxShadowBlurriness.TabIndex = 30; // // numShadowDistance @@ -1732,7 +1745,7 @@ private void InitializeComponent() 0, 0, 0}); - this.numShadowDistance.Location = new System.Drawing.Point(289, 97); + this.numShadowDistance.Location = new System.Drawing.Point(297, 97); this.numShadowDistance.Maximum = new decimal(new int[] { 9999999, 0, @@ -1764,7 +1777,7 @@ private void InitializeComponent() this.comboBoxShadowTextureResolution.FormattingEnabled = true; this.comboBoxShadowTextureResolution.Location = new System.Drawing.Point(134, 20); this.comboBoxShadowTextureResolution.Name = "comboBoxShadowTextureResolution"; - this.comboBoxShadowTextureResolution.Size = new System.Drawing.Size(229, 21); + this.comboBoxShadowTextureResolution.Size = new System.Drawing.Size(237, 21); this.comboBoxShadowTextureResolution.TabIndex = 1; // // groupBoxWater @@ -1774,7 +1787,7 @@ private void InitializeComponent() this.groupBoxWater.Controls.Add(this.checkBoxWaterDisplacement); this.groupBoxWater.Location = new System.Drawing.Point(196, 89); this.groupBoxWater.Name = "groupBoxWater"; - this.groupBoxWater.Size = new System.Drawing.Size(182, 44); + this.groupBoxWater.Size = new System.Drawing.Size(190, 44); this.groupBoxWater.TabIndex = 17; this.groupBoxWater.TabStop = false; this.groupBoxWater.Text = "Water"; @@ -1802,7 +1815,7 @@ private void InitializeComponent() this.groupBoxWeather.Controls.Add(this.checkBoxWeatherRainOcclusion); this.groupBoxWeather.Location = new System.Drawing.Point(196, 139); this.groupBoxWeather.Name = "groupBoxWeather"; - this.groupBoxWeather.Size = new System.Drawing.Size(182, 88); + this.groupBoxWeather.Size = new System.Drawing.Size(190, 88); this.groupBoxWeather.TabIndex = 18; this.groupBoxWeather.TabStop = false; this.groupBoxWeather.Text = "Weather"; @@ -1815,7 +1828,7 @@ private void InitializeComponent() this.comboBoxAnisotropicFiltering.FormattingEnabled = true; this.comboBoxAnisotropicFiltering.Location = new System.Drawing.Point(152, 33); this.comboBoxAnisotropicFiltering.Name = "comboBoxAnisotropicFiltering"; - this.comboBoxAnisotropicFiltering.Size = new System.Drawing.Size(226, 21); + this.comboBoxAnisotropicFiltering.Size = new System.Drawing.Size(234, 21); this.comboBoxAnisotropicFiltering.TabIndex = 23; // // comboBoxAntiAliasing @@ -1826,7 +1839,7 @@ private void InitializeComponent() this.comboBoxAntiAliasing.FormattingEnabled = true; this.comboBoxAntiAliasing.Location = new System.Drawing.Point(152, 6); this.comboBoxAntiAliasing.Name = "comboBoxAntiAliasing"; - this.comboBoxAntiAliasing.Size = new System.Drawing.Size(226, 21); + this.comboBoxAntiAliasing.Size = new System.Drawing.Size(234, 21); this.comboBoxAntiAliasing.TabIndex = 8; // // tabPageDisplay @@ -2015,18 +2028,19 @@ private void InitializeComponent() this.labelCredentialsExplanation.AutoSize = true; this.labelCredentialsExplanation.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelCredentialsExplanation.ForeColor = System.Drawing.Color.DimGray; - this.labelCredentialsExplanation.Location = new System.Drawing.Point(6, 93); + this.labelCredentialsExplanation.Location = new System.Drawing.Point(6, 85); this.labelCredentialsExplanation.Name = "labelCredentialsExplanation"; - this.labelCredentialsExplanation.Size = new System.Drawing.Size(262, 39); + this.labelCredentialsExplanation.Size = new System.Drawing.Size(273, 52); this.labelCredentialsExplanation.TabIndex = 5; this.labelCredentialsExplanation.Text = "Your credentials are saved into Fallout76Custom.ini\r\nThis way, you don\'t have to " + - "login if you start Fallout 76\r\nwithout the launcher."; + "login if you start Fallout 76\r\nwithout the launcher.\r\nMight only work if the gam" + + "e is installed via Bethesda.net."; // // textBoxPassword // this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxPassword.Location = new System.Drawing.Point(92, 47); + this.textBoxPassword.Location = new System.Drawing.Point(92, 41); this.textBoxPassword.Name = "textBoxPassword"; this.textBoxPassword.PasswordChar = '•'; this.textBoxPassword.Size = new System.Drawing.Size(272, 20); @@ -2037,7 +2051,7 @@ private void InitializeComponent() // this.textBoxUserName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxUserName.Location = new System.Drawing.Point(92, 22); + this.textBoxUserName.Location = new System.Drawing.Point(92, 16); this.textBoxUserName.Name = "textBoxUserName"; this.textBoxUserName.Size = new System.Drawing.Size(272, 20); this.textBoxUserName.TabIndex = 3; @@ -2045,7 +2059,7 @@ private void InitializeComponent() // checkBoxShowPassword // this.checkBoxShowPassword.AutoSize = true; - this.checkBoxShowPassword.Location = new System.Drawing.Point(92, 73); + this.checkBoxShowPassword.Location = new System.Drawing.Point(92, 67); this.checkBoxShowPassword.Name = "checkBoxShowPassword"; this.checkBoxShowPassword.Size = new System.Drawing.Size(101, 17); this.checkBoxShowPassword.TabIndex = 2; @@ -2056,7 +2070,7 @@ private void InitializeComponent() // labelPassword // this.labelPassword.AutoSize = true; - this.labelPassword.Location = new System.Drawing.Point(6, 50); + this.labelPassword.Location = new System.Drawing.Point(6, 44); this.labelPassword.Name = "labelPassword"; this.labelPassword.Size = new System.Drawing.Size(56, 13); this.labelPassword.TabIndex = 1; @@ -2065,7 +2079,7 @@ private void InitializeComponent() // labelUserName // this.labelUserName.AutoSize = true; - this.labelUserName.Location = new System.Drawing.Point(6, 25); + this.labelUserName.Location = new System.Drawing.Point(6, 19); this.labelUserName.Name = "labelUserName"; this.labelUserName.Size = new System.Drawing.Size(61, 13); this.labelUserName.TabIndex = 0; @@ -2105,20 +2119,76 @@ private void InitializeComponent() // this.groupBoxGameEdition.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxGameEdition.Controls.Add(this.pictureBoxMSStore); + this.groupBoxGameEdition.Controls.Add(this.pictureBoxSteam); + this.groupBoxGameEdition.Controls.Add(this.pictureBoxBethesdaNetPTS); + this.groupBoxGameEdition.Controls.Add(this.pictureBoxBethesdaNet); + this.groupBoxGameEdition.Controls.Add(this.radioButtonEditionMSStore); this.groupBoxGameEdition.Controls.Add(this.radioButtonEditionBethesdaNetPTS); this.groupBoxGameEdition.Controls.Add(this.radioButtonEditionSteam); this.groupBoxGameEdition.Controls.Add(this.radioButtonEditionBethesdaNet); this.groupBoxGameEdition.Location = new System.Drawing.Point(6, 123); this.groupBoxGameEdition.Name = "groupBoxGameEdition"; - this.groupBoxGameEdition.Size = new System.Drawing.Size(376, 93); + this.groupBoxGameEdition.Size = new System.Drawing.Size(383, 144); this.groupBoxGameEdition.TabIndex = 12; this.groupBoxGameEdition.TabStop = false; this.groupBoxGameEdition.Text = "Game edition"; // + // pictureBoxMSStore + // + this.pictureBoxMSStore.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxMSStore.Image = global::Fo76ini.Properties.Resources.msstore_24px; + this.pictureBoxMSStore.Location = new System.Drawing.Point(11, 109); + this.pictureBoxMSStore.Name = "pictureBoxMSStore"; + this.pictureBoxMSStore.Size = new System.Drawing.Size(24, 24); + this.pictureBoxMSStore.TabIndex = 29; + this.pictureBoxMSStore.TabStop = false; + // + // pictureBoxSteam + // + this.pictureBoxSteam.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxSteam.Image = global::Fo76ini.Properties.Resources.steam_24px; + this.pictureBoxSteam.Location = new System.Drawing.Point(11, 79); + this.pictureBoxSteam.Name = "pictureBoxSteam"; + this.pictureBoxSteam.Size = new System.Drawing.Size(24, 24); + this.pictureBoxSteam.TabIndex = 28; + this.pictureBoxSteam.TabStop = false; + // + // pictureBoxBethesdaNetPTS + // + this.pictureBoxBethesdaNetPTS.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxBethesdaNetPTS.Image = global::Fo76ini.Properties.Resources.bethesda_24px; + this.pictureBoxBethesdaNetPTS.Location = new System.Drawing.Point(11, 49); + this.pictureBoxBethesdaNetPTS.Name = "pictureBoxBethesdaNetPTS"; + this.pictureBoxBethesdaNetPTS.Size = new System.Drawing.Size(24, 24); + this.pictureBoxBethesdaNetPTS.TabIndex = 27; + this.pictureBoxBethesdaNetPTS.TabStop = false; + // + // pictureBoxBethesdaNet + // + this.pictureBoxBethesdaNet.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxBethesdaNet.Image = global::Fo76ini.Properties.Resources.bethesda_24px; + this.pictureBoxBethesdaNet.Location = new System.Drawing.Point(11, 19); + this.pictureBoxBethesdaNet.Name = "pictureBoxBethesdaNet"; + this.pictureBoxBethesdaNet.Size = new System.Drawing.Size(24, 24); + this.pictureBoxBethesdaNet.TabIndex = 26; + this.pictureBoxBethesdaNet.TabStop = false; + // + // radioButtonEditionMSStore + // + this.radioButtonEditionMSStore.AutoSize = true; + this.radioButtonEditionMSStore.Location = new System.Drawing.Point(43, 112); + this.radioButtonEditionMSStore.Name = "radioButtonEditionMSStore"; + this.radioButtonEditionMSStore.Size = new System.Drawing.Size(188, 17); + this.radioButtonEditionMSStore.TabIndex = 3; + this.radioButtonEditionMSStore.Text = "Microsoft Store / Xbox Game Pass"; + this.radioButtonEditionMSStore.UseVisualStyleBackColor = true; + this.radioButtonEditionMSStore.CheckedChanged += new System.EventHandler(this.radioButtonEditionMSStore_CheckedChanged); + // // radioButtonEditionBethesdaNetPTS // this.radioButtonEditionBethesdaNetPTS.AutoSize = true; - this.radioButtonEditionBethesdaNetPTS.Location = new System.Drawing.Point(10, 41); + this.radioButtonEditionBethesdaNetPTS.Location = new System.Drawing.Point(43, 52); this.radioButtonEditionBethesdaNetPTS.Name = "radioButtonEditionBethesdaNetPTS"; this.radioButtonEditionBethesdaNetPTS.Size = new System.Drawing.Size(118, 17); this.radioButtonEditionBethesdaNetPTS.TabIndex = 2; @@ -2129,7 +2199,7 @@ private void InitializeComponent() // radioButtonEditionSteam // this.radioButtonEditionSteam.AutoSize = true; - this.radioButtonEditionSteam.Location = new System.Drawing.Point(10, 64); + this.radioButtonEditionSteam.Location = new System.Drawing.Point(43, 82); this.radioButtonEditionSteam.Name = "radioButtonEditionSteam"; this.radioButtonEditionSteam.Size = new System.Drawing.Size(55, 17); this.radioButtonEditionSteam.TabIndex = 1; @@ -2140,7 +2210,7 @@ private void InitializeComponent() // radioButtonEditionBethesdaNet // this.radioButtonEditionBethesdaNet.AutoSize = true; - this.radioButtonEditionBethesdaNet.Location = new System.Drawing.Point(10, 18); + this.radioButtonEditionBethesdaNet.Location = new System.Drawing.Point(43, 22); this.radioButtonEditionBethesdaNet.Name = "radioButtonEditionBethesdaNet"; this.radioButtonEditionBethesdaNet.Size = new System.Drawing.Size(88, 17); this.radioButtonEditionBethesdaNet.TabIndex = 0; @@ -2150,6 +2220,8 @@ private void InitializeComponent() // // tabPageInfo // + this.tabPageInfo.Controls.Add(this.labelGameEdition); + this.tabPageInfo.Controls.Add(this.pictureBoxGameEdition); this.tabPageInfo.Controls.Add(this.groupBoxUpdate); this.tabPageInfo.Controls.Add(this.pictureBox1); this.tabPageInfo.Controls.Add(this.pictureBox2); @@ -2169,6 +2241,30 @@ private void InitializeComponent() this.tabPageInfo.Text = "Info"; this.tabPageInfo.UseVisualStyleBackColor = true; // + // labelGameEdition + // + this.labelGameEdition.BackColor = System.Drawing.Color.Black; + this.labelGameEdition.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelGameEdition.ForeColor = System.Drawing.Color.White; + this.labelGameEdition.Location = new System.Drawing.Point(0, 434); + this.labelGameEdition.Name = "labelGameEdition"; + this.labelGameEdition.Size = new System.Drawing.Size(73, 36); + this.labelGameEdition.TabIndex = 22; + this.labelGameEdition.Text = "Unknown"; + this.labelGameEdition.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // pictureBoxGameEdition + // + this.pictureBoxGameEdition.BackColor = System.Drawing.Color.Black; + this.pictureBoxGameEdition.Image = global::Fo76ini.Properties.Resources.question_mark; + this.pictureBoxGameEdition.Location = new System.Drawing.Point(6, 367); + this.pictureBoxGameEdition.Name = "pictureBoxGameEdition"; + this.pictureBoxGameEdition.Size = new System.Drawing.Size(60, 60); + this.pictureBoxGameEdition.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxGameEdition.TabIndex = 21; + this.pictureBoxGameEdition.TabStop = false; + this.pictureBoxGameEdition.Click += new System.EventHandler(this.pictureBoxGameEdition_Click); + // // groupBoxUpdate // this.groupBoxUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) @@ -2176,7 +2272,7 @@ private void InitializeComponent() this.groupBoxUpdate.Controls.Add(this.labelNewVersion); this.groupBoxUpdate.Controls.Add(this.buttonUpdateNow); this.groupBoxUpdate.Controls.Add(this.linkLabelManualDownloadPage); - this.groupBoxUpdate.Location = new System.Drawing.Point(93, 215); + this.groupBoxUpdate.Location = new System.Drawing.Point(93, 367); this.groupBoxUpdate.Name = "groupBoxUpdate"; this.groupBoxUpdate.Size = new System.Drawing.Size(279, 94); this.groupBoxUpdate.TabIndex = 20; @@ -2271,9 +2367,10 @@ private void InitializeComponent() // labelConfigVersion // this.labelConfigVersion.AutoSize = true; + this.labelConfigVersion.Font = new System.Drawing.Font("Microsoft YaHei", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelConfigVersion.Location = new System.Drawing.Point(178, 128); this.labelConfigVersion.Name = "labelConfigVersion"; - this.labelConfigVersion.Size = new System.Drawing.Size(13, 13); + this.labelConfigVersion.Size = new System.Drawing.Size(13, 16); this.labelConfigVersion.TabIndex = 9; this.labelConfigVersion.Text = "?"; // @@ -2367,16 +2464,28 @@ private void InitializeComponent() // this.groupBoxLaunchOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxLaunchOptions.Controls.Add(this.labelLaunchOptionMSStoreNotice); this.groupBoxLaunchOptions.Controls.Add(this.labelLaunchOptionTip); this.groupBoxLaunchOptions.Controls.Add(this.radioButtonLaunchViaExecutable); this.groupBoxLaunchOptions.Controls.Add(this.radioButtonLaunchViaLink); - this.groupBoxLaunchOptions.Location = new System.Drawing.Point(6, 391); + this.groupBoxLaunchOptions.Location = new System.Drawing.Point(6, 446); this.groupBoxLaunchOptions.Name = "groupBoxLaunchOptions"; - this.groupBoxLaunchOptions.Size = new System.Drawing.Size(376, 93); + this.groupBoxLaunchOptions.Size = new System.Drawing.Size(383, 93); this.groupBoxLaunchOptions.TabIndex = 25; this.groupBoxLaunchOptions.TabStop = false; this.groupBoxLaunchOptions.Text = "Launch options"; // + // labelLaunchOptionMSStoreNotice + // + this.labelLaunchOptionMSStoreNotice.AutoSize = true; + this.labelLaunchOptionMSStoreNotice.ForeColor = System.Drawing.Color.Red; + this.labelLaunchOptionMSStoreNotice.Location = new System.Drawing.Point(12, 67); + this.labelLaunchOptionMSStoreNotice.Name = "labelLaunchOptionMSStoreNotice"; + this.labelLaunchOptionMSStoreNotice.Size = new System.Drawing.Size(344, 13); + this.labelLaunchOptionMSStoreNotice.TabIndex = 3; + this.labelLaunchOptionMSStoreNotice.Text = "Fallout 76 cannot be run directly, if installed through the Microsoft Store."; + this.labelLaunchOptionMSStoreNotice.Visible = false; + // // labelLaunchOptionTip // this.labelLaunchOptionTip.AutoSize = true; @@ -2405,10 +2514,10 @@ private void InitializeComponent() this.radioButtonLaunchViaLink.AutoSize = true; this.radioButtonLaunchViaLink.Location = new System.Drawing.Point(10, 20); this.radioButtonLaunchViaLink.Name = "radioButtonLaunchViaLink"; - this.radioButtonLaunchViaLink.Size = new System.Drawing.Size(261, 17); + this.radioButtonLaunchViaLink.Size = new System.Drawing.Size(316, 17); this.radioButtonLaunchViaLink.TabIndex = 0; this.radioButtonLaunchViaLink.TabStop = true; - this.radioButtonLaunchViaLink.Text = "Launch via Steam / Bethesda.net (recommended)"; + this.radioButtonLaunchViaLink.Text = "Launch via Steam / Bethesda.net / MS Store (recommended)"; this.radioButtonLaunchViaLink.UseVisualStyleBackColor = true; // // groupBoxGamePaths @@ -2418,9 +2527,9 @@ private void InitializeComponent() this.groupBoxGamePaths.Controls.Add(this.labelGamePath); this.groupBoxGamePaths.Controls.Add(this.textBoxGamePath); this.groupBoxGamePaths.Controls.Add(this.buttonPickGamePath); - this.groupBoxGamePaths.Location = new System.Drawing.Point(6, 218); + this.groupBoxGamePaths.Location = new System.Drawing.Point(6, 273); this.groupBoxGamePaths.Name = "groupBoxGamePaths"; - this.groupBoxGamePaths.Size = new System.Drawing.Size(376, 45); + this.groupBoxGamePaths.Size = new System.Drawing.Size(383, 45); this.groupBoxGamePaths.TabIndex = 24; this.groupBoxGamePaths.TabStop = false; this.groupBoxGamePaths.Text = "Paths"; @@ -2440,14 +2549,14 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.textBoxGamePath.Location = new System.Drawing.Point(111, 16); this.textBoxGamePath.Name = "textBoxGamePath"; - this.textBoxGamePath.Size = new System.Drawing.Size(224, 20); + this.textBoxGamePath.Size = new System.Drawing.Size(231, 20); this.textBoxGamePath.TabIndex = 18; this.textBoxGamePath.TextChanged += new System.EventHandler(this.textBoxGamePath_TextChanged); // // buttonPickGamePath // this.buttonPickGamePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonPickGamePath.Location = new System.Drawing.Point(341, 14); + this.buttonPickGamePath.Location = new System.Drawing.Point(348, 14); this.buttonPickGamePath.Name = "buttonPickGamePath"; this.buttonPickGamePath.Size = new System.Drawing.Size(28, 23); this.buttonPickGamePath.TabIndex = 19; @@ -2459,9 +2568,9 @@ private void InitializeComponent() // this.buttonForceUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonForceUpdate.Location = new System.Drawing.Point(6, 628); + this.buttonForceUpdate.Location = new System.Drawing.Point(6, 683); this.buttonForceUpdate.Name = "buttonForceUpdate"; - this.buttonForceUpdate.Size = new System.Drawing.Size(376, 23); + this.buttonForceUpdate.Size = new System.Drawing.Size(383, 23); this.buttonForceUpdate.TabIndex = 23; this.buttonForceUpdate.Text = "Force auto-update"; this.buttonForceUpdate.UseVisualStyleBackColor = true; @@ -2476,9 +2585,9 @@ private void InitializeComponent() this.groupBoxBehavior.Controls.Add(this.checkBoxQuitOnGameLaunch); this.groupBoxBehavior.Controls.Add(this.checkBoxSkipBackupQuestion); this.groupBoxBehavior.Controls.Add(this.checkBoxAutoApply); - this.groupBoxBehavior.Location = new System.Drawing.Point(6, 490); + this.groupBoxBehavior.Location = new System.Drawing.Point(6, 545); this.groupBoxBehavior.Name = "groupBoxBehavior"; - this.groupBoxBehavior.Size = new System.Drawing.Size(376, 132); + this.groupBoxBehavior.Size = new System.Drawing.Size(383, 132); this.groupBoxBehavior.TabIndex = 22; this.groupBoxBehavior.TabStop = false; this.groupBoxBehavior.Text = "Behavior"; @@ -2493,7 +2602,7 @@ private void InitializeComponent() this.groupBoxLocalization.Controls.Add(this.comboBoxLanguage); this.groupBoxLocalization.Location = new System.Drawing.Point(6, 6); this.groupBoxLocalization.Name = "groupBoxLocalization"; - this.groupBoxLocalization.Size = new System.Drawing.Size(376, 111); + this.groupBoxLocalization.Size = new System.Drawing.Size(383, 111); this.groupBoxLocalization.TabIndex = 21; this.groupBoxLocalization.TabStop = false; this.groupBoxLocalization.Text = "Localization"; @@ -2523,7 +2632,7 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.buttonDownloadLanguages.Location = new System.Drawing.Point(98, 49); this.buttonDownloadLanguages.Name = "buttonDownloadLanguages"; - this.buttonDownloadLanguages.Size = new System.Drawing.Size(271, 23); + this.buttonDownloadLanguages.Size = new System.Drawing.Size(278, 23); this.buttonDownloadLanguages.TabIndex = 20; this.buttonDownloadLanguages.Text = "Download / update language files"; this.buttonDownloadLanguages.UseVisualStyleBackColor = true; @@ -2537,7 +2646,7 @@ private void InitializeComponent() this.comboBoxLanguage.FormattingEnabled = true; this.comboBoxLanguage.Location = new System.Drawing.Point(98, 22); this.comboBoxLanguage.Name = "comboBoxLanguage"; - this.comboBoxLanguage.Size = new System.Drawing.Size(271, 21); + this.comboBoxLanguage.Size = new System.Drawing.Size(278, 21); this.comboBoxLanguage.TabIndex = 17; this.comboBoxLanguage.SelectedIndexChanged += new System.EventHandler(this.comboBoxLanguage_SelectedIndexChanged); // @@ -2549,9 +2658,9 @@ private void InitializeComponent() this.groupBoxOptions.Controls.Add(this.checkBoxMultipleGameEditionsUsed); this.groupBoxOptions.Controls.Add(this.checkBoxNWMode); this.groupBoxOptions.Controls.Add(this.checkBoxReadOnly); - this.groupBoxOptions.Location = new System.Drawing.Point(6, 269); + this.groupBoxOptions.Location = new System.Drawing.Point(6, 324); this.groupBoxOptions.Name = "groupBoxOptions"; - this.groupBoxOptions.Size = new System.Drawing.Size(376, 116); + this.groupBoxOptions.Size = new System.Drawing.Size(383, 116); this.groupBoxOptions.TabIndex = 15; this.groupBoxOptions.TabStop = false; this.groupBoxOptions.Text = "Options"; @@ -2560,9 +2669,9 @@ private void InitializeComponent() // this.buttonFixIssuesEarlierVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonFixIssuesEarlierVersion.Location = new System.Drawing.Point(6, 657); + this.buttonFixIssuesEarlierVersion.Location = new System.Drawing.Point(6, 712); this.buttonFixIssuesEarlierVersion.Name = "buttonFixIssuesEarlierVersion"; - this.buttonFixIssuesEarlierVersion.Size = new System.Drawing.Size(376, 23); + this.buttonFixIssuesEarlierVersion.Size = new System.Drawing.Size(383, 23); this.buttonFixIssuesEarlierVersion.TabIndex = 19; this.buttonFixIssuesEarlierVersion.Text = "Fix settings from v1.3.1 and earlier"; this.buttonFixIssuesEarlierVersion.UseVisualStyleBackColor = true; @@ -2576,7 +2685,8 @@ private void InitializeComponent() // openFileDialogGamePath // this.openFileDialogGamePath.FileName = "Fallout76.exe"; - this.openFileDialogGamePath.Filter = "Fallout76.exe|Fallout76.exe"; + this.openFileDialogGamePath.Filter = "Fallout 76 executable|Fallout76.exe;Project76_GamePass.exe"; + this.openFileDialogGamePath.FilterIndex = 2; // // Form1 // @@ -2655,8 +2765,13 @@ private void InitializeComponent() this.groupBoxMainMenu.PerformLayout(); this.groupBoxGameEdition.ResumeLayout(false); this.groupBoxGameEdition.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxMSStore)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSteam)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBethesdaNetPTS)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBethesdaNet)).EndInit(); this.tabPageInfo.ResumeLayout(false); this.tabPageInfo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxGameEdition)).EndInit(); this.groupBoxUpdate.ResumeLayout(false); this.groupBoxUpdate.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); @@ -2831,7 +2946,6 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonFixIssuesEarlierVersion; private System.Windows.Forms.Label labelLanguage; private System.Windows.Forms.ComboBox comboBoxLanguage; - private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.PictureBox pictureBox2; private System.Windows.Forms.CheckBox checkBoxAutoApply; private System.Windows.Forms.CheckBox checkBoxSkipBackupQuestion; @@ -2856,6 +2970,15 @@ private void InitializeComponent() private System.Windows.Forms.Label labelLaunchOptionTip; private System.Windows.Forms.OpenFileDialog openFileDialogGamePath; private System.Windows.Forms.CheckBox checkBoxDenyNTFSWritePermission; + private System.Windows.Forms.RadioButton radioButtonEditionMSStore; + private System.Windows.Forms.PictureBox pictureBoxGameEdition; + private System.Windows.Forms.PictureBox pictureBoxBethesdaNet; + private System.Windows.Forms.PictureBox pictureBoxMSStore; + private System.Windows.Forms.PictureBox pictureBoxSteam; + private System.Windows.Forms.PictureBox pictureBoxBethesdaNetPTS; + private System.Windows.Forms.Label labelGameEdition; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label labelLaunchOptionMSStoreNotice; } } diff --git a/Fo76ini/Form1.Language.cs b/Fo76ini/Form1.Language.cs index 3f0ab0a..18258f5 100644 --- a/Fo76ini/Form1.Language.cs +++ b/Fo76ini/Form1.Language.cs @@ -101,7 +101,8 @@ private int SerializeControlText(XElement element, ToolTip toolTip, Control cont subControl.Name != "labelTranslationAuthor" && subControl.Name != "groupBoxWIP" && subControl.Name != "labelNewVersion" && - subControl.Name != "labelModsDeploy") + subControl.Name != "labelModsDeploy" && + subControl.Name != "labelGameEdition") { // Get XElement name: String type = "Element"; @@ -313,7 +314,7 @@ private void SerializeXMLFile(String name = null, String iso = null, String auth if (iso == null) iso = this.languageISOs[index]; if (author == null) - author = this.labelAuthorName.Text.Trim(); + author = this.labelTranslationAuthor.Text.Trim(); if (fileName == null) fileName = iso + ".template.xml"; @@ -366,43 +367,6 @@ private void SerializeXMLFile(String name = null, String iso = null, String auth private void GenerateEnglishXMLFile() { SerializeXMLFile("English (USA)", "en-US", "", "en-US.xml"); - /*// Create document and root: - XDocument xmlDoc = new XDocument(); - XElement xmlRoot = new XElement("Language"); - xmlRoot.Add(new XAttribute("name", "English (USA)")); - xmlRoot.Add(new XAttribute("iso", "en-US")); - xmlDoc.AddFirst(new XComment("\n This file is auto-generated on program start.\n Therefore any changes made to this file will be overriden.\n You can use this as a template for your own translation, though.\n")); - xmlDoc.Add(xmlRoot); - - // Serialize miscellaneous strings: - XElement xmlStrings = new XElement("Strings"); - foreach (KeyValuePair pair in Translation.localizedStrings) - xmlStrings.Add(new XElement("String", - new XAttribute("text", pair.Value), - new XAttribute("id", pair.Key))); - xmlRoot.Add(xmlStrings); - - // Create dropdowns: - XElement xmlDropDowns = new XElement("Dropdowns"); - foreach (KeyValuePair pair in this.comboBoxes) - SerializeDropDownOptions(xmlDropDowns, pair.Key, pair.Value.Items); - xmlRoot.Add(xmlDropDowns); - - // Create messageboxes: - xmlRoot.Add(MsgBox.Serialize()); - - // Serialize all control elements: - XElement xmlForm1 = new XElement("Form1", new XAttribute("title", this.Text)); - XElement xmlFormMods = new XElement("FormMods", new XAttribute("title", this.formMods.Text)); - SerializeControlText(xmlForm1, this.toolTip, this); - SerializeControlText(xmlFormMods, this.formMods.toolTip, this.formMods); - xmlRoot.Add(xmlForm1); - xmlRoot.Add(xmlFormMods); - - // Save it: - xmlDoc.Save(Path.Combine(languageFolder, "en-US.xml")); - //using (XmlTextWriter writer = new XmlTextWriter(Path.Combine(languageFolder, "en-US.xml"), new UTF8Encoding(false))) - // xmlDoc.Save(writer); */ } private void ChangeLanguage(string langFile) diff --git a/Fo76ini/Form1.cs b/Fo76ini/Form1.cs index 0f9b7b8..f5ea9ae 100644 --- a/Fo76ini/Form1.cs +++ b/Fo76ini/Form1.cs @@ -15,7 +15,7 @@ namespace Fo76ini { public partial class Form1 : Form { - public const String VERSION = "1.6.3"; + public const String VERSION = "1.7.0"; protected System.Globalization.CultureInfo enUS = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); @@ -161,7 +161,9 @@ private void Form1_Load(object sender, EventArgs e) // Load *.ini files: try { + IniFiles.Instance.GameEdition = (GameEdition)IniFiles.Instance.GetInt(IniFile.Config, "Preferences", "uGameEdition", 0); IniFiles.Instance.LoadGameInis(); + IniFiles.Instance.Set(IniFile.Config, "Preferences", "uGameEdition", (int)IniFiles.Instance.GameEdition); } catch (IniParser.Exceptions.ParsingException exc) { @@ -171,7 +173,7 @@ private void Form1_Load(object sender, EventArgs e) } catch (FileNotFoundException exc) { - MsgBox.Get("runGameToGenerateINI").Show(MessageBoxButtons.OK, MessageBoxIcon.Error); + MsgBox.Get("runGameToGenerateINI").FormatTitle(IniFiles.Instance.GetIniName(IniFile.F76), IniFiles.Instance.GetIniName(IniFile.F76Prefs)).Show(MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); return; } @@ -300,8 +302,8 @@ private void AddAllEventHandler() // Game Edition uiLoader.LinkList( - new RadioButton[] { this.radioButtonEditionBethesdaNet, this.radioButtonEditionSteam, this.radioButtonEditionBethesdaNetPTS }, - new String[] { "1", "2", "3" }, + new RadioButton[] { this.radioButtonEditionBethesdaNet, this.radioButtonEditionSteam, this.radioButtonEditionBethesdaNetPTS, this.radioButtonEditionMSStore }, + new String[] { "1", "2", "3", "4" }, IniFile.Config, "Preferences", "uGameEdition", "0" ); @@ -831,6 +833,9 @@ private void buttonLaunchGame_Click(object sender, EventArgs e) case (uint)GameEdition.BethesdaNetPTS: process = "bethesdanet://run/57"; break; + case (uint)GameEdition.MSStore: + process = "ms-windows-store://pdp/?ProductId=9nkgnmnk3k3z"; + break; default: MsgBox.Get("chooseGameEdition").Show(MessageBoxButtons.OK, MessageBoxIcon.Information); return; @@ -843,15 +848,26 @@ private void buttonLaunchGame_Click(object sender, EventArgs e) MsgBox.Get("modsGamePathNotSet").Show(MessageBoxButtons.OK, MessageBoxIcon.Information); return; } - process = Path.GetFullPath(Path.Combine(ManagedMods.Instance.GamePath, "Fallout76.exe")); + process = Path.GetFullPath(Path.Combine(ManagedMods.Instance.GamePath, ManagedMods.Instance.GameEdition == GameEdition.MSStore ? "Project76_GamePass.exe" : "Fallout76.exe")); } if (process != null) { if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bAutoApply", false)) ApplyChanges(); - System.Diagnostics.Process.Start(process); - if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bQuitOnLaunch", false)) - this.Close(); + try + { + System.Diagnostics.Process.Start(process); + if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bQuitOnLaunch", false)) + this.Close(); + } + catch (Exception ex) + { + if (ManagedMods.Instance.GameEdition == GameEdition.MSStore) + { + MsgBox.Get("msstoreRunExecutableFailed").FormatTitle(ex.Message).Show(MessageBoxIcon.Error); + return; + } + } } } @@ -924,31 +940,102 @@ private void buttonFixIssuesEarlierVersion_Click(object sender, EventArgs e) * Game edition */ - private void radioButtonEditionSteam_CheckedChanged(object sender, EventArgs e) + private void ChangeGameEdition(GameEdition edition) { - if (this.radioButtonEditionSteam.Checked) + bool restartRequired = ManagedMods.Instance.GameEdition != GameEdition.Unknown && ((ManagedMods.Instance.GameEdition == GameEdition.MSStore && edition != GameEdition.MSStore) || (ManagedMods.Instance.GameEdition != GameEdition.MSStore && edition == GameEdition.MSStore)); + + if (restartRequired && MsgBox.Get("msstoreRestartRequired").Show(MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + switch (ManagedMods.Instance.GameEdition) + { + case GameEdition.Steam: + this.radioButtonEditionSteam.Checked = true; + break; + case GameEdition.BethesdaNet: + this.radioButtonEditionBethesdaNet.Checked = true; + break; + case GameEdition.BethesdaNetPTS: + this.radioButtonEditionBethesdaNetPTS.Checked = true; + break; + case GameEdition.MSStore: + this.radioButtonEditionMSStore.Checked = true; + break; + } + return; + } + + // Change image + switch (edition) + { + case GameEdition.Steam: + this.pictureBoxGameEdition.Image = Properties.Resources.steam; + this.labelGameEdition.Text = "Steam"; + break; + case GameEdition.BethesdaNet: + this.pictureBoxGameEdition.Image = Properties.Resources.bethesda; + this.labelGameEdition.Text = "Bethesda"; + break; + case GameEdition.BethesdaNetPTS: + this.pictureBoxGameEdition.Image = Properties.Resources.bethesda_pts; + this.labelGameEdition.Text = "Bethesda\n(PTS)"; + break; + case GameEdition.MSStore: + this.pictureBoxGameEdition.Image = Properties.Resources.msstore; + this.labelGameEdition.Text = "Microsoft\nStore"; + break; + default: + this.pictureBoxGameEdition.Image = Properties.Resources.question_mark; + this.labelGameEdition.Text = "Unknown"; + break; + } + + // Currently, no way to launch game executable, if installed via MS Store: + /*if (edition == GameEdition.MSStore) + { + IniFiles.Instance.Set(IniFile.Config, "Preferences", "uLaunchOption", 1); + + this.radioButtonLaunchViaExecutable.Checked = false; + this.radioButtonLaunchViaExecutable.Enabled = false; + this.radioButtonLaunchViaLink.Checked = true; + } + else + { + this.radioButtonLaunchViaExecutable.Enabled = true; + }*/ + + IniFiles.Instance.ChangeGameEdition(edition); + this.formMods.ChangeGameEdition(edition); + this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + + if (restartRequired) { - this.formMods.ChangeGameEdition(GameEdition.Steam); - this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + IniFiles.Instance.SaveWindowState("Form1", this); + Application.Restart(); } } + private void radioButtonEditionSteam_CheckedChanged(object sender, EventArgs e) + { + if (this.radioButtonEditionSteam.Checked) + ChangeGameEdition(GameEdition.Steam); + } + private void radioButtonEditionBethesdaNet_CheckedChanged(object sender, EventArgs e) { if (this.radioButtonEditionBethesdaNet.Checked) - { - this.formMods.ChangeGameEdition(GameEdition.BethesdaNet); - this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; - } + ChangeGameEdition(GameEdition.BethesdaNet); } private void radioButtonEditionBethesdaNetPTS_CheckedChanged(object sender, EventArgs e) { if (this.radioButtonEditionBethesdaNetPTS.Checked) - { - this.formMods.ChangeGameEdition(GameEdition.BethesdaNetPTS); - this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; - } + ChangeGameEdition(GameEdition.BethesdaNetPTS); + } + + private void radioButtonEditionMSStore_CheckedChanged(object sender, EventArgs e) + { + if (this.radioButtonEditionMSStore.Checked) + ChangeGameEdition(GameEdition.MSStore); } // Nuclear Winter mode @@ -959,13 +1046,30 @@ private void checkBoxNWMode_CheckedChanged(object sender, EventArgs e) { if (MsgBox.ShowID("nwModeEnabledButModsAreDeployed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { - ManagedMods.Instance.nuclearWinterMode = IniFiles.Instance.nuclearWinterMode; + // Disable mods: + ManagedMods.Instance.nuclearWinterMode = true; + this.formMods.OpenUI(); + this.formMods.Deploy(); + } + } + else if (!IniFiles.Instance.nuclearWinterMode && ManagedMods.Instance.nuclearWinterMode && ManagedMods.Instance.Mods.Count() > 0) + { + if (MsgBox.ShowID("nwModeDisabledAndModsAreStillDisabled", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + // Enable mods: + ManagedMods.Instance.nuclearWinterMode = false; this.formMods.OpenUI(); this.formMods.Deploy(); } } } + private void pictureBoxGameEdition_Click(object sender, EventArgs e) + { + this.tabControl1.SelectTab(this.tabPageSettings); + this.groupBoxGameEdition.Focus(); + } + private void checkBoxShowPassword_CheckedChanged(object sender, EventArgs e) { // https://stackoverflow.com/questions/8185747/how-can-i-unmask-password-text-box-and-mask-it-back-to-password @@ -1131,7 +1235,14 @@ private void textBoxGamePath_TextChanged(object sender, EventArgs e) private void radioButtonLaunchViaExecutable_CheckedChanged(object sender, EventArgs e) { - this.labelLaunchOptionTip.Visible = this.radioButtonLaunchViaExecutable.Checked; + this.labelLaunchOptionTip.Visible = false; + this.labelLaunchOptionMSStoreNotice.Visible = false; + + if (ManagedMods.Instance.GameEdition == GameEdition.BethesdaNet || ManagedMods.Instance.GameEdition == GameEdition.BethesdaNetPTS) + this.labelLaunchOptionTip.Visible = this.radioButtonLaunchViaExecutable.Checked; + + else if (ManagedMods.Instance.GameEdition == GameEdition.MSStore) + this.labelLaunchOptionMSStoreNotice.Visible = this.radioButtonLaunchViaExecutable.Checked; } } } diff --git a/Fo76ini/FormMods.Designer.cs b/Fo76ini/FormMods.Designer.cs index c5f9e53..00734ea 100644 --- a/Fo76ini/FormMods.Designer.cs +++ b/Fo76ini/FormMods.Designer.cs @@ -549,9 +549,9 @@ private void InitializeComponent() this.checkBoxModsUseHardlinks.AutoSize = true; this.checkBoxModsUseHardlinks.Location = new System.Drawing.Point(6, 42); this.checkBoxModsUseHardlinks.Name = "checkBoxModsUseHardlinks"; - this.checkBoxModsUseHardlinks.Size = new System.Drawing.Size(327, 17); + this.checkBoxModsUseHardlinks.Size = new System.Drawing.Size(258, 17); this.checkBoxModsUseHardlinks.TabIndex = 1; - this.checkBoxModsUseHardlinks.Text = "[Experimental] Make hard links instead of copying files manually."; + this.checkBoxModsUseHardlinks.Text = "Make hard links instead of copying files manually."; this.toolTip.SetToolTip(this.checkBoxModsUseHardlinks, "May reduce disk space and deployment time.\r\nDoes not apply to bundled archives."); this.checkBoxModsUseHardlinks.UseVisualStyleBackColor = true; this.checkBoxModsUseHardlinks.CheckedChanged += new System.EventHandler(this.checkBoxModsUseHardlinks_CheckedChanged); @@ -676,8 +676,7 @@ private void InitializeComponent() // // openFileDialogGamePath // - this.openFileDialogGamePath.FileName = "Fallout76.exe"; - this.openFileDialogGamePath.Filter = "Fallout76.exe|Fallout76.exe"; + this.openFileDialogGamePath.Filter = "Fallout 76 executable|Fallout76.exe,Project76_GamePass.exe"; // // panel1 // diff --git a/Fo76ini/FormMods.resx b/Fo76ini/FormMods.resx index c0381ac..ba0bdb5 100644 --- a/Fo76ini/FormMods.resx +++ b/Fo76ini/FormMods.resx @@ -139,9 +139,6 @@ h+r6rFy4sEMHYIfq+sTbnbmhCbFDdX1mX7AoymZRlM0fKDLmARhb1lLZqDWmAAAAAElFTkSuQmCC - - 132, 17 - 327, 17 diff --git a/Fo76ini/IniFiles.cs b/Fo76ini/IniFiles.cs index a6a37eb..50d7a70 100644 --- a/Fo76ini/IniFiles.cs +++ b/Fo76ini/IniFiles.cs @@ -25,7 +25,8 @@ public enum GameEdition Unknown = 0, BethesdaNet = 1, Steam = 2, - BethesdaNetPTS = 3 + BethesdaNetPTS = 3, + MSStore = 4 } public class IniFiles @@ -37,9 +38,9 @@ public class IniFiles protected IniData fo76CustomData = null; protected IniData configData = null; - protected String fo76Path; + /*protected String fo76Path; protected String fo76PrefsPath; - protected String fo76CustomPath; + protected String fo76CustomPath;*/ protected String configPath; protected DateTime fo76ModTime; @@ -57,6 +58,8 @@ public class IniFiles public bool nuclearWinterMode = false; + public GameEdition GameEdition; + public static IniFiles Instance { get @@ -72,6 +75,69 @@ public static IniFiles Instance } } + public String GetIniName(IniFile iniFile, GameEdition edition = GameEdition.Unknown) + { + if (edition == GameEdition.Unknown) + edition = this.GameEdition; + bool msstore = edition == GameEdition.MSStore; + switch (iniFile) + { + case IniFile.F76: + return msstore ? "Project76.ini" : "Fallout76.ini"; + case IniFile.F76Prefs: + return msstore ? "Project76Prefs.ini" : "Fallout76Prefs.ini"; + case IniFile.F76Custom: + return msstore ? "Project76Custom.ini" : "Fallout76Custom.ini"; + case IniFile.Config: + return "QuickConfiguration.ini"; + } + return null; + } + + public String GetIniPath(IniFile iniFile, GameEdition edition) + { + switch (iniFile) + { + case IniFile.F76: + case IniFile.F76Prefs: + case IniFile.F76Custom: + return Path.Combine(this.iniParentPath, GetIniName(iniFile, edition)); + case IniFile.Config: + return this.configPath; + } + return null; + } + + public String GetIniPath(IniFile iniFile) + { + switch (iniFile) + { + case IniFile.F76: + case IniFile.F76Prefs: + case IniFile.F76Custom: + return Path.Combine(this.iniParentPath, GetIniName(iniFile)); + case IniFile.Config: + return this.configPath; + } + return null; + } + + protected IniData GetIniData(IniFile iniFile) + { + switch (iniFile) + { + case IniFile.F76: + return this.fo76Data; + case IniFile.F76Prefs: + return this.fo76PrefsData; + case IniFile.F76Custom: + return this.fo76CustomData; + case IniFile.Config: + return this.configData; + } + return null; + } + private IniFiles() { // Get the paths: @@ -80,9 +146,9 @@ private IniFiles() @"My Games\Fallout 76\" ); - this.fo76Path = Path.Combine(this.iniParentPath, "Fallout76.ini"); - this.fo76PrefsPath = Path.Combine(this.iniParentPath, "Fallout76Prefs.ini"); - this.fo76CustomPath = Path.Combine(this.iniParentPath, "Fallout76Custom.ini"); + /*this.GetIniName(IniFile.F76) = Path.Combine(this.iniParentPath, "Fallout76.ini"); + this.GetIniName(IniFile.F76Prefs) = Path.Combine(this.iniParentPath, "Fallout76Prefs.ini"); + this.GetIniName(IniFile.F76Custom) = Path.Combine(this.iniParentPath, "Fallout76Custom.ini");*/ String oldConfigPath = Path.Combine(this.iniParentPath, "QuickConfiguration.ini"); this.configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Fallout 76 Quick Configuration", "config.ini"); @@ -116,22 +182,39 @@ public void LoadGameInis() // Parse all INI files, if existing: // Do Fallout76.ini and Fallout76Prefs.ini exist? - if (!File.Exists(this.fo76Path) || !File.Exists(this.fo76PrefsPath)) - throw new FileNotFoundException("Fallout76.ini and Fallout76Prefs.ini not found"); + if (!File.Exists(GetIniPath(IniFile.F76)) || !File.Exists(GetIniPath(IniFile.F76Prefs))) + { + if (this.GameEdition == GameEdition.MSStore) + { + // Do Fallout76.ini and Fallout76Prefs.ini exist? + if (File.Exists(GetIniPath(IniFile.F76, GameEdition.Steam)) && File.Exists(GetIniPath(IniFile.F76Prefs, GameEdition.Steam))) + this.GameEdition = GameEdition.Steam; + else + throw new FileNotFoundException($"{GetIniName(IniFile.F76)} and {GetIniName(IniFile.F76Prefs)} not found"); + } + else + { + // Do Project76.ini and Project76Prefs.ini exist? + if (File.Exists(GetIniPath(IniFile.F76, GameEdition.MSStore)) && File.Exists(GetIniPath(IniFile.F76Prefs, GameEdition.MSStore))) + this.GameEdition = GameEdition.MSStore; + else + throw new FileNotFoundException($"{GetIniName(IniFile.F76)} and {GetIniName(IniFile.F76Prefs)} not found"); + } + } // Does Fallout76Custom.ini exist? If not, create it. - /*if (!File.Exists(this.fo76CustomPath)) - File.CreateText(this.fo76CustomPath).Close();*/ + /*if (!File.Exists(this.GetIniPath(IniFile.F76Custom))) + File.CreateText(this.GetIniPath(IniFile.F76Custom)).Close();*/ // Parse *.ini files: - this.fo76Data = LoadIni(this.fo76Path, false); - this.fo76ModTime = File.GetLastWriteTime(this.fo76Path); - this.fo76PrefsData = LoadIni(this.fo76PrefsPath, false); - this.fo76PrefsModTime = File.GetLastWriteTime(this.fo76PrefsPath); - if (File.Exists(this.fo76CustomPath)) - this.fo76CustomData = LoadIni(this.fo76CustomPath, false); - else if (File.Exists(this.fo76CustomPath + ".nwmodebak")) - this.fo76CustomData = LoadIni(this.fo76CustomPath + ".nwmodebak", false); + this.fo76Data = LoadIni(GetIniPath(IniFile.F76), false); + this.fo76ModTime = File.GetLastWriteTime(GetIniPath(IniFile.F76)); + this.fo76PrefsData = LoadIni(GetIniPath(IniFile.F76Prefs), false); + this.fo76PrefsModTime = File.GetLastWriteTime(GetIniPath(IniFile.F76Prefs)); + if (File.Exists(GetIniPath(IniFile.F76Custom))) + this.fo76CustomData = LoadIni(GetIniPath(IniFile.F76Custom), false); + else if (File.Exists(GetIniPath(IniFile.F76Custom) + ".nwmodebak")) + this.fo76CustomData = LoadIni(GetIniPath(IniFile.F76Custom) + ".nwmodebak", false); else this.fo76CustomData = new IniData(); @@ -149,53 +232,66 @@ public bool IsLoaded() this.configData != null; } + public void ChangeGameEdition(GameEdition edition) + { + //bool reloadRequired = (this.GameEdition == GameEdition.MSStore && edition != GameEdition.MSStore) || (this.GameEdition != GameEdition.MSStore && edition == GameEdition.MSStore); + this.GameEdition = edition; + /*if (reloadRequired) + LoadGameInis();*/ + UpdateLastModifiedDates(); + } + public void SaveGameInis(bool readOnly = false) { - SaveIni(this.fo76Path, this.fo76Data, readOnly); - SaveIni(this.fo76PrefsPath, this.fo76PrefsData, readOnly); + SaveIni(this.GetIniPath(IniFile.F76), this.fo76Data, readOnly); + SaveIni(this.GetIniPath(IniFile.F76Prefs), this.fo76PrefsData, readOnly); if (this.nuclearWinterMode) - SaveIni(this.fo76CustomPath + ".nwmodebak", this.fo76CustomData, readOnly); + SaveIni(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak", this.fo76CustomData, readOnly); else - SaveIni(this.fo76CustomPath, this.fo76CustomData, readOnly); + SaveIni(this.GetIniPath(IniFile.F76Custom), this.fo76CustomData, readOnly); UpdateLastModifiedDates(); } public void ResolveNWMode() { + SetNTFSWritePermission(true); if (this.nuclearWinterMode) { - if (!File.Exists(this.fo76CustomPath)) + if (!File.Exists(this.GetIniPath(IniFile.F76Custom))) return; - if (!File.Exists(this.fo76CustomPath + ".nwmodebak")) - File.Copy(this.fo76CustomPath, this.fo76CustomPath + ".nwmodebak"); - Utils.DeleteFile(this.fo76CustomPath); + if (!File.Exists(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) + File.Copy(this.GetIniPath(IniFile.F76Custom), this.GetIniPath(IniFile.F76Custom) + ".nwmodebak"); + Utils.DeleteFile(this.GetIniPath(IniFile.F76Custom)); } else { - if (!File.Exists(this.fo76CustomPath + ".nwmodebak")) + if (!File.Exists(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) return; - if (!File.Exists(this.fo76CustomPath)) - File.Copy(this.fo76CustomPath + ".nwmodebak", this.fo76CustomPath); - Utils.DeleteFile(this.fo76CustomPath + ".nwmodebak"); + if (!File.Exists(this.GetIniPath(IniFile.F76Custom))) + File.Copy(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak", this.GetIniPath(IniFile.F76Custom)); + Utils.DeleteFile(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak"); } UpdateLastModifiedDates(); + + if (this.GetBool(IniFile.Config, "Preferences", "bDenyNTFSWritePermission", false)) + SetNTFSWritePermission(false); } public bool FilesHaveBeenModified() { - if (this.fo76ModTime != File.GetLastWriteTime(this.fo76Path)) + if (this.fo76ModTime != File.GetLastWriteTime(this.GetIniPath(IniFile.F76))) return true; - if (this.fo76PrefsModTime != File.GetLastWriteTime(this.fo76PrefsPath)) + if (this.fo76PrefsModTime != File.GetLastWriteTime(this.GetIniPath(IniFile.F76Prefs))) return true; - if (File.Exists(this.fo76CustomPath)) + if (File.Exists(this.GetIniPath(IniFile.F76Custom))) { - if (this.fo76CustomModTime != File.GetLastWriteTime(this.fo76CustomPath)) + if (this.fo76CustomModTime != File.GetLastWriteTime(this.GetIniPath(IniFile.F76Custom))) return true; } - else if (File.Exists(this.fo76CustomPath + ".nwmodebak")) + else if (File.Exists(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) { - if (this.fo76CustomModTime != File.GetLastWriteTime(this.fo76CustomPath + ".nwmodebak")) + if (this.fo76CustomModTime != File.GetLastWriteTime(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) return true; } return false; @@ -203,13 +299,13 @@ public bool FilesHaveBeenModified() public void UpdateLastModifiedDates() { - this.fo76ModTime = File.GetLastWriteTime(this.fo76Path); - this.fo76PrefsModTime = File.GetLastWriteTime(this.fo76PrefsPath); + this.fo76ModTime = File.GetLastWriteTime(this.GetIniPath(IniFile.F76)); + this.fo76PrefsModTime = File.GetLastWriteTime(this.GetIniPath(IniFile.F76Prefs)); - if (File.Exists(this.fo76CustomPath)) - this.fo76CustomModTime = File.GetLastWriteTime(this.fo76CustomPath); - else if (File.Exists(this.fo76CustomPath + ".nwmodebak")) - this.fo76CustomModTime = File.GetLastWriteTime(this.fo76CustomPath + ".nwmodebak"); + if (File.Exists(this.GetIniPath(IniFile.F76Custom))) + this.fo76CustomModTime = File.GetLastWriteTime(this.GetIniPath(IniFile.F76Custom)); + else if (File.Exists(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) + this.fo76CustomModTime = File.GetLastWriteTime(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak"); } public void LoadConfig() @@ -249,84 +345,35 @@ public void BackupAll(String backupFolder = null) Directory.CreateDirectory(backupPath); - if (File.Exists(this.fo76Path)) + if (File.Exists(this.GetIniPath(IniFile.F76))) { tempPath = Path.Combine(backupPath, "Fallout76.ini"); - File.Copy(this.fo76Path, tempPath); + File.Copy(this.GetIniPath(IniFile.F76), tempPath); SetFileReadOnlyAttribute(tempPath, false); } - if (File.Exists(this.fo76PrefsPath)) + if (File.Exists(this.GetIniPath(IniFile.F76Prefs))) { tempPath = Path.Combine(backupPath, "Fallout76Prefs.ini"); - File.Copy(this.fo76PrefsPath, tempPath); + File.Copy(this.GetIniPath(IniFile.F76Prefs), tempPath); SetFileReadOnlyAttribute(tempPath, false); } - if (File.Exists(this.fo76CustomPath)) + if (File.Exists(this.GetIniPath(IniFile.F76Custom))) { tempPath = Path.Combine(backupPath, "Fallout76Custom.ini"); - File.Copy(this.fo76CustomPath, tempPath); + File.Copy(this.GetIniPath(IniFile.F76Custom), tempPath); SetFileReadOnlyAttribute(tempPath, false); } - if (File.Exists(this.fo76CustomPath + ".nwmodebak")) + if (File.Exists(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak")) { tempPath = Path.Combine(backupPath, "Fallout76Custom.ini.nwmodebak"); - File.Copy(this.fo76CustomPath + ".nwmodebak", tempPath); + File.Copy(this.GetIniPath(IniFile.F76Custom) + ".nwmodebak", tempPath); SetFileReadOnlyAttribute(tempPath, false); } } - - protected String GetIniName(IniFile iniFile) - { - switch (iniFile) - { - case IniFile.F76: - return "Fallout76.ini"; - case IniFile.F76Prefs: - return "Fallout76Prefs.ini"; - case IniFile.F76Custom: - return "Fallout76Custom.ini"; - case IniFile.Config: - return "QuickConfiguration.ini"; - } - return null; - } - - protected String GetIniPath(IniFile iniFile) - { - switch (iniFile) - { - case IniFile.F76: - return this.fo76Path; - case IniFile.F76Prefs: - return this.fo76PrefsPath; - case IniFile.F76Custom: - return this.fo76CustomPath; - case IniFile.Config: - return this.configPath; - } - return null; - } - - protected IniData GetIniData(IniFile iniFile) - { - switch (iniFile) - { - case IniFile.F76: - return this.fo76Data; - case IniFile.F76Prefs: - return this.fo76PrefsData; - case IniFile.F76Custom: - return this.fo76CustomData; - case IniFile.Config: - return this.configData; - } - return null; - } - protected void RemoveEmptySections(IniData data) { List sectionNames = new List(); @@ -412,17 +459,17 @@ protected void SetFileReadOnlyAttribute(String path, bool readOnly) public void SetINIsReadOnly(bool readOnly) { - SetFileReadOnlyAttribute(this.fo76Path, readOnly); - SetFileReadOnlyAttribute(this.fo76PrefsPath, readOnly); - SetFileReadOnlyAttribute(this.fo76CustomPath, readOnly); + SetFileReadOnlyAttribute(this.GetIniPath(IniFile.F76), readOnly); + SetFileReadOnlyAttribute(this.GetIniPath(IniFile.F76Prefs), readOnly); + SetFileReadOnlyAttribute(this.GetIniPath(IniFile.F76Custom), readOnly); } public bool AreINIsReadOnly() { - if (File.Exists(this.fo76Path) && File.Exists(this.fo76PrefsPath)) + if (File.Exists(this.GetIniPath(IniFile.F76)) && File.Exists(this.GetIniPath(IniFile.F76Prefs))) { - FileInfo fo76fi = new FileInfo(this.fo76Path); - FileInfo fo76Prefsfi = new FileInfo(this.fo76PrefsPath); + FileInfo fo76fi = new FileInfo(this.GetIniPath(IniFile.F76)); + FileInfo fo76Prefsfi = new FileInfo(this.GetIniPath(IniFile.F76Prefs)); return fo76fi.IsReadOnly && fo76Prefsfi.IsReadOnly; } return false; @@ -453,17 +500,11 @@ public void SetNTFSWritePermission(bool writePermission) { dSecurity.RemoveAccessRule(new FileSystemAccessRule(sidUsers, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny)); dSecurity.AddAccessRule(new FileSystemAccessRule(sidUsers, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); - - //dSecurity.RemoveAccessRule(new FileSystemAccessRule(sidAdmins, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny)); - //dSecurity.AddAccessRule(new FileSystemAccessRule(sidAdmins, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); } else { dSecurity.AddAccessRule(new FileSystemAccessRule(sidUsers, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny)); dSecurity.RemoveAccessRule(new FileSystemAccessRule(sidUsers, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); - - //dSecurity.AddAccessRule(new FileSystemAccessRule(sidAdmins, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny)); - //dSecurity.RemoveAccessRule(new FileSystemAccessRule(sidAdmins, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); } dInfo.SetAccessControl(dSecurity); } @@ -758,7 +799,7 @@ protected void FixDuplicateResourceLists() MergeLists(IniFile.F76Custom, "Archive", "sResourceArchive2List"); MergeLists(IniFile.F76Custom, "Archive", "sResourceDataDirsFinal"); - this.fo76CustomModTime = File.GetLastWriteTime(this.fo76CustomPath); + this.fo76CustomModTime = File.GetLastWriteTime(this.GetIniPath(IniFile.F76Custom)); } diff --git a/Fo76ini/Mods.cs b/Fo76ini/Mods.cs index 0551830..63b9c53 100644 --- a/Fo76ini/Mods.cs +++ b/Fo76ini/Mods.cs @@ -498,6 +498,8 @@ public static String GetEditionSuffix(GameEdition gameEdition) return "BethesdaNet"; case GameEdition.BethesdaNetPTS: return "BethesdaNetPTS"; + case GameEdition.MSStore: + return "MSStore"; default: return ""; } @@ -862,9 +864,6 @@ public void InstallModArchiveFrozen(String filePath, Action updateP return; } - if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) - Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); - if (!File.Exists(filePath)) { // Path too long? @@ -885,6 +884,10 @@ public void InstallModArchiveFrozen(String filePath, Action updateP try { + // Create Mods folder: + if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) + Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); + // Get paths: filePath = Path.GetFullPath(filePath); String fileName = Path.GetFileNameWithoutExtension(filePath); @@ -920,6 +923,14 @@ public void InstallModArchiveFrozen(String filePath, Action updateP if (done != null) done(true); } + catch (UnauthorizedAccessException ex) + { + MsgBox.Get("modsAccessDenied").FormatText("UnauthorizedAccessException: " + ex.Message).Show(MessageBoxIcon.Error); + this.logFile.WriteLine($"UnauthorizedAccessException occured while importing a folder: {ex.Message}\n{ex.StackTrace}\n"); + if (done != null) + done(false); + return; + } catch (Exception ex) { this.logFile.WriteLine($"Unhandled exception occured while importing a *.ba2 file: {ex.Message}\n{ex.StackTrace}\n"); @@ -947,9 +958,6 @@ public void InstallModArchive(String filePath, Action updateProgres return; } - if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) - Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); - if (!File.Exists(filePath)) { // Path too long? @@ -980,6 +988,10 @@ public void InstallModArchive(String filePath, Action updateProgres try { + // Create Mods folder: + if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) + Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); + // Get paths: filePath = Path.GetFullPath(filePath); String fileName = Path.GetFileNameWithoutExtension(filePath); @@ -1014,6 +1026,14 @@ public void InstallModArchive(String filePath, Action updateProgres if (done != null) done(true); } + catch (UnauthorizedAccessException ex) + { + MsgBox.Get("modsAccessDenied").FormatText("UnauthorizedAccessException: " + ex.Message).Show(MessageBoxIcon.Error); + this.logFile.WriteLine($"UnauthorizedAccessException occured while importing a folder: {ex.Message}\n{ex.StackTrace}\n"); + if (done != null) + done(false); + return; + } catch (Exception ex) { this.logFile.WriteLine($"Unhandled exception occured while importing a *.ba2 file: {ex.Message}\n{ex.StackTrace}\n"); @@ -1041,9 +1061,6 @@ public void InstallModFolder(String folderPath, Action updateProgre return; } - if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) - Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); - if (!Directory.Exists(folderPath)) { // Path too long? @@ -1074,6 +1091,10 @@ public void InstallModFolder(String folderPath, Action updateProgre try { + // Create Mods folder: + if (!Directory.Exists(Path.Combine(this.gamePath, "Mods"))) + Directory.CreateDirectory(Path.Combine(this.gamePath, "Mods")); + // Get paths: folderPath = Path.GetFullPath(folderPath); String folderName = Path.GetFileName(folderPath); @@ -1122,6 +1143,14 @@ public void InstallModFolder(String folderPath, Action updateProgre if (done != null) done(true); } + catch (UnauthorizedAccessException ex) + { + MsgBox.Get("modsAccessDenied").FormatText("UnauthorizedAccessException: " + ex.Message).Show(MessageBoxIcon.Error); + this.logFile.WriteLine($"UnauthorizedAccessException occured while importing a folder: {ex.Message}\n{ex.StackTrace}\n"); + if (done != null) + done(false); + return; + } catch (Exception ex) { this.logFile.WriteLine($"Unhandled exception occured while importing a folder: {ex.Message}\n{ex.StackTrace}\n"); @@ -1945,6 +1974,13 @@ public void Deploy(Action updateProgress = null, Action done if (done != null) done(true); } + catch (UnauthorizedAccessException ex) + { + MsgBox.Get("modsAccessDenied").FormatText("UnauthorizedAccessException: " + ex.Message).Show(MessageBoxIcon.Error); + this.logFile.WriteLine($"UnauthorizedAccessException occured while importing a folder: {ex.Message}\n{ex.StackTrace}\n"); + if (done != null) + done(false); + } catch (Exception ex) { this.logFile.WriteLine($"Unhandled exception occured: {ex.Message}\n{ex.StackTrace}"); diff --git a/Fo76ini/Properties/Resources.Designer.cs b/Fo76ini/Properties/Resources.Designer.cs index 38f81b0..05d5d00 100644 --- a/Fo76ini/Properties/Resources.Designer.cs +++ b/Fo76ini/Properties/Resources.Designer.cs @@ -80,6 +80,36 @@ internal static System.Drawing.Bitmap arrow_up { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bethesda { + get { + object obj = ResourceManager.GetObject("bethesda", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bethesda_24px { + get { + object obj = ResourceManager.GetObject("bethesda_24px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bethesda_pts { + get { + object obj = ResourceManager.GetObject("bethesda_pts", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -170,6 +200,26 @@ internal static System.Drawing.Bitmap info { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap msstore { + get { + object obj = ResourceManager.GetObject("msstore", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap msstore_24px { + get { + object obj = ResourceManager.GetObject("msstore_24px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -190,6 +240,36 @@ internal static System.Drawing.Bitmap plus { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap question_mark { + get { + object obj = ResourceManager.GetObject("question_mark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap steam { + get { + object obj = ResourceManager.GetObject("steam", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap steam_24px { + get { + object obj = ResourceManager.GetObject("steam_24px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -199,5 +279,25 @@ internal static System.Drawing.Bitmap warning { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap xbox { + get { + object obj = ResourceManager.GetObject("xbox", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap xbox_24px { + get { + object obj = ResourceManager.GetObject("xbox_24px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Fo76ini/Properties/Resources.resx b/Fo76ini/Properties/Resources.resx index 2dac1b0..18fcc8d 100644 --- a/Fo76ini/Properties/Resources.resx +++ b/Fo76ini/Properties/Resources.resx @@ -160,4 +160,34 @@ ..\icons\defrost.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\steam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\xbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bethesda-launcher.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bethesda_24px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bethesda-launcher-pts.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\msstore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\msstore_24px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\question_mark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\steam_24px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\xbox_24px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Fo76ini/Resources/bethesda-launcher-pts.png b/Fo76ini/Resources/bethesda-launcher-pts.png new file mode 100644 index 0000000..416569e Binary files /dev/null and b/Fo76ini/Resources/bethesda-launcher-pts.png differ diff --git a/Fo76ini/Resources/bethesda-launcher.png b/Fo76ini/Resources/bethesda-launcher.png new file mode 100644 index 0000000..c9a8f8a Binary files /dev/null and b/Fo76ini/Resources/bethesda-launcher.png differ diff --git a/Fo76ini/Resources/bethesda_24px.png b/Fo76ini/Resources/bethesda_24px.png new file mode 100644 index 0000000..49fc28e Binary files /dev/null and b/Fo76ini/Resources/bethesda_24px.png differ diff --git a/Fo76ini/Resources/bethesdanet.png b/Fo76ini/Resources/bethesdanet.png new file mode 100644 index 0000000..5b05a08 Binary files /dev/null and b/Fo76ini/Resources/bethesdanet.png differ diff --git a/Fo76ini/Resources/msstore.png b/Fo76ini/Resources/msstore.png new file mode 100644 index 0000000..de05ee6 Binary files /dev/null and b/Fo76ini/Resources/msstore.png differ diff --git a/Fo76ini/Resources/msstore_24px.png b/Fo76ini/Resources/msstore_24px.png new file mode 100644 index 0000000..819407f Binary files /dev/null and b/Fo76ini/Resources/msstore_24px.png differ diff --git a/Fo76ini/Resources/question_mark.png b/Fo76ini/Resources/question_mark.png new file mode 100644 index 0000000..1bb0768 Binary files /dev/null and b/Fo76ini/Resources/question_mark.png differ diff --git a/Fo76ini/Resources/steam.png b/Fo76ini/Resources/steam.png new file mode 100644 index 0000000..10eaa80 Binary files /dev/null and b/Fo76ini/Resources/steam.png differ diff --git a/Fo76ini/Resources/steam_24px.png b/Fo76ini/Resources/steam_24px.png new file mode 100644 index 0000000..ce0e7e3 Binary files /dev/null and b/Fo76ini/Resources/steam_24px.png differ diff --git a/Fo76ini/Resources/xbox.png b/Fo76ini/Resources/xbox.png new file mode 100644 index 0000000..b5b2403 Binary files /dev/null and b/Fo76ini/Resources/xbox.png differ diff --git a/Fo76ini/Resources/xbox_24px.png b/Fo76ini/Resources/xbox_24px.png new file mode 100644 index 0000000..8ea7af3 Binary files /dev/null and b/Fo76ini/Resources/xbox_24px.png differ diff --git a/Fo76ini/banner.png b/Fo76ini/banner.png index d104967..3c861ff 100644 Binary files a/Fo76ini/banner.png and b/Fo76ini/banner.png differ diff --git a/Fo76ini/banner_transparent.png b/Fo76ini/banner_transparent.png new file mode 100644 index 0000000..d104967 Binary files /dev/null and b/Fo76ini/banner_transparent.png differ diff --git a/Fo76ini/languages/de-DE.xml b/Fo76ini/languages/de-DE.xml index c6b9adf..a5436fb 100644 --- a/Fo76ini/languages/de-DE.xml +++ b/Fo76ini/languages/de-DE.xml @@ -1,5 +1,5 @@  - + @@ -102,6 +102,8 @@ Einige UI-Elemente könnten unter Umständen nicht korrekt funktionieren. Heruntergeladene Sprachdateien: {0} Das Herunterladen von Sprachen ist fehlgeschlagen. {0} + Das Wechseln von und zur Microsoft Store Edition erfordert einen Neustart des Tools. + Leider kann die Spiel aufgrund von "Sicherheitseinschränkungen" nicht direkt gestartet werden. Danke Microsoft, wir freuen uns. :( Mods wurden deaktiviert und vom Spiel entfernt. Mods wurden installiert. Mods könnten nicht installiert worden sein. @@ -140,8 +142,12 @@ Fehlermeldung: "{0}". Das kann lange dauern, abhängig von Dateigröße und Anzahl an Dateien. Möchtest du fortfahren? *.dds Dateien wurden repariert. - You've enabled the Nuclear Winter mode, but your mods are still deployed. -Do you want to disable them now? + {0} +Starte das Tool als Administrator und versuche es erneut. + Du hast den Nuclear Winter Modus aktiviert, aber deine Mods sind noch installiert. +Möchtest du sie jetzt deinstallieren? + Du hast den Nuclear Winter Modus deaktiviert, aber deine Mods wurden dadurch nicht reaktiviert. +Möchtest du sie jetzt wieder installieren? Bitte lade Archive2 runter und setze den Pfad, um *.ba2 Archive zu extrahieren. Ungültiger Pfad zu Archive2. Bitte wähle Archive2.exe @@ -164,6 +170,7 @@ Bitte wähle Archive2.exe +