1.0.0.3
This commit is contained in:
STAM 2022-04-13 18:40:50 +03:00 committed by GitHub
commit bb2b5442a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 23615 additions and 12209 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "src/Facepunch.Steamworks"]
path = src/Facepunch.Steamworks
url = https://github.com/Facepunch/Facepunch.Steamworks.git

View File

@ -1,7 +1,18 @@
# UniversalValveToolbox
# Universal Valve Toolbox
# [![AppVeyor](https://img.shields.io/appveyor/ci/stamepicmorg/universalvalvetoolbox?style=flat-square)](https://ci.appveyor.com/project/stamepicmorg/universalvalvetoolbox) [![Translation status](https://translate.epicm.org/widgets/universalvalvetoolbox/-/svg-badge.svg)](https://translate.epicm.org/engage/universalvalvetoolbox/?utm_source=widget) [![Size](https://img.shields.io/github/repo-size/EpicMorg/UniversalValveToolbox?label=size&style=flat-square)](https://github.com/EpicMorg/UniversalValveToolbox/archive/master.zip) [![Release](https://img.shields.io/github/v/release/EpicMorg/UniversalValveToolbox?style=flat-square)](https://github.com/EpicMorg/UniversalValveToolbox/releases) [![GitHub license](https://img.shields.io/github/license/EpicMorg/UniversalValveToolbox.svg?style=popout-square)](LICENSE.md) [![Changelog](https://img.shields.io/badge/Changelog-yellow.svg?style=popout-square)](CHANGELOG.md) [![Activity](https://img.shields.io/github/commit-activity/w/EpicMorg/UniversalValveToolbox?&style=flat-square)](https://github.com/EpicMorg/UniversalValveToolbox/commits) [![GitHub issues](https://img.shields.io/github/issues/EpicMorg/UniversalValveToolbox.svg?style=popout-square)](https://github.com/EpicMorg/UniversalValveToolbox/issues) [![GitHub forks](https://img.shields.io/github/forks/EpicMorg/UniversalValveToolbox.svg?style=popout-square)](https://github.com/EpicMorg/UniversalValveToolbox/network) [![GitHub stars](https://img.shields.io/github/stars/EpicMorg/UniversalValveToolbox.svg?style=popout-square)](https://github.com/EpicMorg/UniversalValveToolbox/stargazers) [![GitHub uses](https://img.shields.io/sourcegraph/rrc/github.com/EpicMorg/UniversalValveToolbox?style=flat-square)](https://github.com/EpicMorg/UniversalValveToolbox/pulse) [![CodeScene Code Health](https://codescene.io/projects/6852/status-badges/code-health)](https://codescene.io/projects/6852) [![CodeScene System Mastery](https://codescene.io/projects/6852/status-badges/system-mastery)](https://codescene.io/projects/6852)
[![](https://codescene.io/projects/6852/status.svg)](https://codescene.io/projects/6852/jobs/latest-successful/results)
# Description
Toolbox for easy launching some officials Valve's SDK such as Source SDK 2013 SP or MP.
# Settings
Mod could be changed at `settings.json` with `ToolboxMod` section. Supported mods: `retail`, `bundle`, `dev`.
## Retail
This is default mode. Shows all avalible users games at account. Tool launched with default steam app id `480` for requesting steam api and getting info.
## Bundle mode
If you want to distribute this tollbox with your game - edit `settings.json` and switch `ToolboxMod` to `bundle` value. And change `ToolsAppId` and `BundleAppID` for your's `SteamApp` of you game and sdk tools.
## Dev mode
Dev mode is the same mode as `bundle` but local path of root of your game folder and angine name will be get from `DevEnginePath` and `DevEngineName` values. Also You should set `ToolsAppId` and `BundleAppID` for your's `SteamApp` of you game and sdk tools.
[![](https://codescene.io/projects/6852/status.svg)](https://codescene.io/projects/6852/jobs/latest-successful/results)

@ -0,0 +1 @@
Subproject commit 1bae58560200c74fe53beeddb382aea4d83615f1

View File

@ -5,16 +5,32 @@ VisualStudioVersion = 16.0.29521.150
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalValveToolbox", "UniversalValveToolbox\UniversalValveToolbox.csproj", "{DE66895F-7317-45D3-B5CA-292253CE086A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Facepunch.Steamworks.Win32", "Facepunch.Steamworks\Facepunch.Steamworks\Facepunch.Steamworks.Win32.csproj", "{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DE66895F-7317-45D3-B5CA-292253CE086A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE66895F-7317-45D3-B5CA-292253CE086A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE66895F-7317-45D3-B5CA-292253CE086A}.Debug|x86.ActiveCfg = Debug|x86
{DE66895F-7317-45D3-B5CA-292253CE086A}.Debug|x86.Build.0 = Debug|x86
{DE66895F-7317-45D3-B5CA-292253CE086A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE66895F-7317-45D3-B5CA-292253CE086A}.Release|Any CPU.Build.0 = Release|Any CPU
{DE66895F-7317-45D3-B5CA-292253CE086A}.Release|x86.ActiveCfg = Release|x86
{DE66895F-7317-45D3-B5CA-292253CE086A}.Release|x86.Build.0 = Release|x86
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Debug|x86.ActiveCfg = Debug|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Debug|x86.Build.0 = Debug|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Release|Any CPU.Build.0 = Release|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Release|x86.ActiveCfg = Release|Any CPU
{ED9B29E8-0F90-4F9E-BD87-F5014F5FCF85}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,10 +1,18 @@
using UniversalValveToolbox.Base;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using UniversalValveToolbox.Base;
namespace UniversalValveToolbox.Model.Dto {
public class SettingsDtoModel : DtoModel {
private string lastSelectedProject;
private string[] availableLanguages;
private string language;
private string devenginepath = "C://";
private string devenginename = "My Future Game (engine)";
private ToolboxMod toolboxmod = ToolboxMod.retail;
private uint toolsappid = 480;
private uint bundleappsid = 480;
public string LastSelectedProject {
get => lastSelectedProject;
@ -20,5 +28,35 @@ namespace UniversalValveToolbox.Model.Dto {
get => language;
set => UpdateField(value, ref language);
}
[JsonConverter(typeof(StringEnumConverter))]
public ToolboxMod ToolboxMod
{
get => toolboxmod;
set => UpdateField(value, ref toolboxmod);
}
public uint ToolsAppId
{
get => toolsappid;
set => UpdateField(value, ref toolsappid);
}
public uint BundleAppID
{
get => bundleappsid;
set => UpdateField(value, ref bundleappsid);
}
public string DevEnginePath
{
get => devenginepath;
set => UpdateField(value, ref devenginepath);
}
public string DevEngineName
{
get => devenginename;
set => UpdateField(value, ref devenginename);
}
}
public enum ToolboxMod {
retail, bundle, dev
}
}

View File

@ -1,4 +1,5 @@
using System;
using Steamworks;
using System;
using System.Windows.Forms;
using UniversalValveToolbox.Model.Provider;
using UniversalValveToolbox.Utils;
@ -15,6 +16,8 @@ namespace UniversalValveToolbox {
LanguageManager.UpdateLanguage(currSettings.Language);
SteamClient.Init(currSettings.ToolsAppId);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());

View File

@ -33,5 +33,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("1.0.0.2")]
[assembly: AssemblyFileVersion("1.0.0.2")]
[assembly: AssemblyVersion("1.0.0.3")]
[assembly: AssemblyFileVersion("1.0.0.3")]

View File

@ -130,6 +130,16 @@ namespace UniversalValveToolbox.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap toolbox64 {
get {
object obj = ResourceManager.GetObject("toolbox64", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@ -118,23 +118,14 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="checked_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checked_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="valve_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\valve_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\cancel_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="refresh_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\refresh_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="human_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\human_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="info_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\info_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="checked_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checked_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="plug-silhouette_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\plug-silhouette_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -142,4 +133,16 @@
<data name="run_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\run_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\cancel_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="human_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\human_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="info_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\info_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="toolbox64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\toolbox64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -30,17 +30,24 @@
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAbout));
this.labelVersion = new System.Windows.Forms.Label();
this.pictureBoxLogo = new System.Windows.Forms.PictureBox();
this.labelTitle = new System.Windows.Forms.Label();
this.labelCopy = new System.Windows.Forms.Label();
this.labelDivider = new System.Windows.Forms.Label();
this.buttonOK = new System.Windows.Forms.Button();
this.linkLabelIconSite = new System.Windows.Forms.LinkLabel();
this.groupBox = new System.Windows.Forms.GroupBox();
this.linkLabelTI = new System.Windows.Forms.LinkLabel();
this.linkLabelFP = new System.Windows.Forms.LinkLabel();
this.pictureBoxLogo = new System.Windows.Forms.PictureBox();
this.labelCaution = new System.Windows.Forms.Label();
this.labelIconsBy = new System.Windows.Forms.Label();
this.linkLabelthoseicons = new System.Windows.Forms.LinkLabel();
this.linkLabelsmashicons = new System.Windows.Forms.LinkLabel();
this.labelEpicMorgSteamPathsLibdll = new System.Windows.Forms.Label();
this.labelFacepunchSteamworksWin32dll = new System.Windows.Forms.Label();
this.labelkasthackbindingwfdll = new System.Windows.Forms.Label();
this.labelNewtonsoftJsondll = new System.Windows.Forms.Label();
this.labelGameloopVdf = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).BeginInit();
this.groupBox.SuspendLayout();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// labelVersion
@ -48,14 +55,6 @@
resources.ApplyResources(this.labelVersion, "labelVersion");
this.labelVersion.Name = "labelVersion";
//
// pictureBoxLogo
//
this.pictureBoxLogo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBoxLogo.Image = global::UniversalValveToolbox.Properties.Resources.valve_64;
resources.ApplyResources(this.pictureBoxLogo, "pictureBoxLogo");
this.pictureBoxLogo.Name = "pictureBoxLogo";
this.pictureBoxLogo.TabStop = false;
//
// labelTitle
//
resources.ApplyResources(this.labelTitle, "labelTitle");
@ -79,29 +78,6 @@
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// linkLabelIconSite
//
resources.ApplyResources(this.linkLabelIconSite, "linkLabelIconSite");
this.linkLabelIconSite.Name = "linkLabelIconSite";
this.linkLabelIconSite.TabStop = true;
this.linkLabelIconSite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelIconSite_LinkClicked);
//
// groupBox
//
resources.ApplyResources(this.groupBox, "groupBox");
this.groupBox.Controls.Add(this.linkLabelTI);
this.groupBox.Controls.Add(this.linkLabelFP);
this.groupBox.Controls.Add(this.linkLabelIconSite);
this.groupBox.Name = "groupBox";
this.groupBox.TabStop = false;
//
// linkLabelTI
//
resources.ApplyResources(this.linkLabelTI, "linkLabelTI");
this.linkLabelTI.Name = "linkLabelTI";
this.linkLabelTI.TabStop = true;
this.linkLabelTI.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelTI_LinkClicked);
//
// linkLabelFP
//
resources.ApplyResources(this.linkLabelFP, "linkLabelFP");
@ -109,11 +85,89 @@
this.linkLabelFP.TabStop = true;
this.linkLabelFP.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelFP_LinkClicked);
//
// pictureBoxLogo
//
resources.ApplyResources(this.pictureBoxLogo, "pictureBoxLogo");
this.pictureBoxLogo.Image = global::UniversalValveToolbox.Properties.Resources.toolbox64;
this.pictureBoxLogo.Name = "pictureBoxLogo";
this.pictureBoxLogo.TabStop = false;
//
// labelCaution
//
resources.ApplyResources(this.labelCaution, "labelCaution");
this.labelCaution.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelCaution.Name = "labelCaution";
//
// labelIconsBy
//
resources.ApplyResources(this.labelIconsBy, "labelIconsBy");
this.labelIconsBy.Name = "labelIconsBy";
//
// linkLabelthoseicons
//
resources.ApplyResources(this.linkLabelthoseicons, "linkLabelthoseicons");
this.linkLabelthoseicons.Name = "linkLabelthoseicons";
this.linkLabelthoseicons.TabStop = true;
this.linkLabelthoseicons.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelTI_LinkClicked);
//
// linkLabelsmashicons
//
resources.ApplyResources(this.linkLabelsmashicons, "linkLabelsmashicons");
this.linkLabelsmashicons.Name = "linkLabelsmashicons";
this.linkLabelsmashicons.TabStop = true;
this.linkLabelsmashicons.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSI_LinkClicked);
//
// labelEpicMorgSteamPathsLibdll
//
resources.ApplyResources(this.labelEpicMorgSteamPathsLibdll, "labelEpicMorgSteamPathsLibdll");
this.labelEpicMorgSteamPathsLibdll.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelEpicMorgSteamPathsLibdll.Name = "labelEpicMorgSteamPathsLibdll";
//
// labelFacepunchSteamworksWin32dll
//
resources.ApplyResources(this.labelFacepunchSteamworksWin32dll, "labelFacepunchSteamworksWin32dll");
this.labelFacepunchSteamworksWin32dll.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelFacepunchSteamworksWin32dll.Name = "labelFacepunchSteamworksWin32dll";
//
// labelkasthackbindingwfdll
//
resources.ApplyResources(this.labelkasthackbindingwfdll, "labelkasthackbindingwfdll");
this.labelkasthackbindingwfdll.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelkasthackbindingwfdll.Name = "labelkasthackbindingwfdll";
//
// labelNewtonsoftJsondll
//
resources.ApplyResources(this.labelNewtonsoftJsondll, "labelNewtonsoftJsondll");
this.labelNewtonsoftJsondll.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelNewtonsoftJsondll.Name = "labelNewtonsoftJsondll";
//
// labelGameloopVdf
//
resources.ApplyResources(this.labelGameloopVdf, "labelGameloopVdf");
this.labelGameloopVdf.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelGameloopVdf.Name = "labelGameloopVdf";
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.labelEpicMorgSteamPathsLibdll);
this.groupBox1.Controls.Add(this.labelkasthackbindingwfdll);
this.groupBox1.Controls.Add(this.labelGameloopVdf);
this.groupBox1.Controls.Add(this.labelNewtonsoftJsondll);
this.groupBox1.Controls.Add(this.labelFacepunchSteamworksWin32dll);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// FormAbout
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.groupBox);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.linkLabelsmashicons);
this.Controls.Add(this.linkLabelthoseicons);
this.Controls.Add(this.linkLabelFP);
this.Controls.Add(this.labelIconsBy);
this.Controls.Add(this.labelCaution);
this.Controls.Add(this.buttonOK);
this.Controls.Add(this.labelDivider);
this.Controls.Add(this.labelTitle);
@ -127,8 +181,7 @@
this.ShowInTaskbar = false;
this.Load += new System.EventHandler(this.FormAbout_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).EndInit();
this.groupBox.ResumeLayout(false);
this.groupBox.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -142,9 +195,16 @@
private System.Windows.Forms.Label labelCopy;
private System.Windows.Forms.Label labelDivider;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.LinkLabel linkLabelIconSite;
private System.Windows.Forms.GroupBox groupBox;
private System.Windows.Forms.LinkLabel linkLabelTI;
private System.Windows.Forms.LinkLabel linkLabelFP;
private System.Windows.Forms.Label labelCaution;
private System.Windows.Forms.Label labelIconsBy;
private System.Windows.Forms.LinkLabel linkLabelthoseicons;
private System.Windows.Forms.LinkLabel linkLabelsmashicons;
private System.Windows.Forms.Label labelEpicMorgSteamPathsLibdll;
private System.Windows.Forms.Label labelFacepunchSteamworksWin32dll;
private System.Windows.Forms.Label labelkasthackbindingwfdll;
private System.Windows.Forms.Label labelNewtonsoftJsondll;
private System.Windows.Forms.Label labelGameloopVdf;
private System.Windows.Forms.GroupBox groupBox1;
}
}

View File

@ -6,13 +6,36 @@ namespace UniversalValveToolbox {
public partial class FormAbout : Form {
public FormAbout() {
InitializeComponent();
#region move to helper
System.Reflection.Assembly assemblyEpicMorgSteamPathsLib = System.Reflection.Assembly.LoadFrom("EpicMorg.SteamPathsLib.dll");
System.Reflection.Assembly assemblyFacepunchSteamworksWin32 = System.Reflection.Assembly.LoadFrom("Facepunch.Steamworks.Win32.dll");
System.Reflection.Assembly assemblykasthackbindingwf = System.Reflection.Assembly.LoadFrom("kasthack.binding.wf.dll");
System.Reflection.Assembly assemblyGameloopVdf = System.Reflection.Assembly.LoadFrom("Gameloop.Vdf.dll");
System.Reflection.Assembly assemblyNewtonsoftJson = System.Reflection.Assembly.LoadFrom("Newtonsoft.Json.dll");
Version verEpicMorgSteamPathsLib = assemblyEpicMorgSteamPathsLib.GetName().Version;
Version verFacepunchSteamworksWin32 = assemblyFacepunchSteamworksWin32.GetName().Version;
Version verkasthackbindingwf = assemblykasthackbindingwf.GetName().Version;
Version verGameloopVdf = assemblyGameloopVdf.GetName().Version;
Version verNewtonsoftJson = assemblyNewtonsoftJson.GetName().Version;
#endregion
labelVersion.Text = Utils.VersionHelper.AssemblyVersion;
labelTitle.Text = Utils.VersionHelper.AssemblyTitle;
labelCopy.Text = Utils.VersionHelper.AssemblyCopyright;
labelCaution.Text = labelTitle.Text + " " + labelCaution.Text;
labelEpicMorgSteamPathsLibdll.Text = "EpicMorg.SteamPathsLib.dll " + verEpicMorgSteamPathsLib.ToString();
labelFacepunchSteamworksWin32dll.Text = "Facepunch.Steamworks.Win32.dll " + verFacepunchSteamworksWin32.ToString();
labelkasthackbindingwfdll.Text = "kasthack.binding.wf.dll " + verkasthackbindingwf.ToString();
labelGameloopVdf.Text = "Gameloop.Vdf.dll " + verGameloopVdf.ToString();
labelNewtonsoftJsondll.Text = "Newtonsoft.Json.dll " + verNewtonsoftJson.ToString();
}
private void FormAbout_Load(object sender, EventArgs e) {
}
private void buttonOK_Click(object sender, EventArgs e) {
@ -30,5 +53,10 @@ namespace UniversalValveToolbox {
private void linkLabelTI_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
Process.Start("https://www.flaticon.com/authors/those-icons");
}
private void linkLabelSI_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://www.flaticon.com/authors/smashicons");
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ using System.Collections.Generic;
using UniversalValveToolbox.Utils;
using System.Globalization;
using System.Collections;
using EpicMorg.SteamPathsLib;
using Steamworks;
namespace UniversalValveToolbox {
public partial class FormAddons : Form {
@ -30,7 +30,7 @@ namespace UniversalValveToolbox {
.Cast<DictionaryEntry>()
.ToArray();
model = new FormAddonViewModel(dataProvider.Addons, dataProvider.Engines.Where(engine => SteamPathsUtil.GetSteamAppDataById(engine.Appid) != null).ToArray(), categories);
model = new FormAddonViewModel(dataProvider.Addons, dataProvider.Engines.Where(engine => isSteamAppInstall(engine.Appid)).ToArray(), categories);
UpdateAddonsComboBox();
UpdateAddonCategoryComboBox();
@ -106,6 +106,11 @@ namespace UniversalValveToolbox {
}
}
private bool isSteamAppInstall(int appId) {
var isInstall = SteamApps.IsAppInstalled(appId);
return isInstall;
}
private void UpdateAddonCategoryComboBox() {
comboBoxCategory.Items.Clear();
comboBoxCategory.Items.AddRange(model.Categories.Select(c => c.Value).ToArray());

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
using EpicMorg.SteamPathsLib;
using Steamworks;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@ -12,8 +12,10 @@ using UniversalValveToolbox.Model.Provider;
using UniversalValveToolbox.Model.ViewModel;
using UniversalValveToolbox.Utils;
namespace UniversalValveToolbox {
public partial class FormMain : Form {
namespace UniversalValveToolbox
{
public partial class FormMain : Form
{
private readonly string RUN_PROJECT_ID = "RUN_PROJECT_ID";
private EngineDtoModel[] Engines;
@ -25,21 +27,25 @@ namespace UniversalValveToolbox {
private ListViewGroup listViewGroupAddons;
private ListViewGroup listViewGroupTools;
private EngineDtoModel SelectedEngine {
get {
private EngineDtoModel SelectedEngine
{
get
{
if (Engines.Length == 0)
return null;
return Engines[comboBoxEngine.SelectedIndex];
}
}
private ProjectDtoModel SelectedProject {
private ProjectDtoModel SelectedProject
{
get => (ProjectDtoModel)((comboBoxProjects.Enabled)
? Projects.First(project => project.Name.Equals(comboBoxProjects.SelectedItem))
: null);
}
public FormMain() {
public FormMain()
{
InitializeComponent();
FillBaseMenuItems();
@ -47,21 +53,25 @@ namespace UniversalValveToolbox {
Text = VersionHelper.AssemblyTitle + VersionHelper.AssemblyVersion;
comboBoxEngine.SelectedIndexChanged += (s, e) => {
comboBoxEngine.SelectedIndexChanged += (s, e) =>
{
UpdateProjectList();
UpdateToolsList();
UpdateAddonsList();
};
}
private void FormMain_Load(object sender, EventArgs e) {
private void FormMain_Load(object sender, EventArgs e)
{
}
private void UpdateLastSelectedProject() {
private void UpdateLastSelectedProject()
{
var lastSelectedProject = dataProvider.Projects.FirstOrDefault(project => project.Name.Equals(dataProvider.Settings.LastSelectedProject));
if (lastSelectedProject != null && Engines.Length != 0) {
if (lastSelectedProject != null && Engines.Length != 0)
{
var indexEngine = comboBoxEngine.Items.IndexOf(Engines.First(engine => engine.Appid.Equals(lastSelectedProject.Engine)).Name);
comboBoxEngine.SelectedIndex = indexEngine;
@ -75,14 +85,16 @@ namespace UniversalValveToolbox {
EnvUtils.PrepareSFMData($"{SelectedProject?.Path ?? string.Empty}");
}
}
private void SaveLastSelectedProject() {
private void SaveLastSelectedProject()
{
var settings = dataProvider.Settings;
settings.LastSelectedProject = SelectedProject?.Name;
dataProvider.Settings = settings;
}
private void UpdateFormData() {
private void UpdateFormData()
{
UpdateEngineList();
UpdateProjectList();
UpdateToolsList();
@ -92,16 +104,19 @@ namespace UniversalValveToolbox {
UpdateLastSelectedProject();
}
private void UpdateNavigationBar() {
private void UpdateNavigationBar()
{
UpdateLogInStatus();
UpdateInfoNavigationBar();
}
private void toolStripStatusLabelRefresh_Click(object sender, EventArgs e) {
private void toolStripStatusLabelRefresh_Click(object sender, EventArgs e)
{
UpdateFormData();
}
public void FillBaseMenuItems() {
public void FillBaseMenuItems()
{
#region static content, do not edit
//creating groups (categores)
listViewGroupAddons = new ListViewGroup(Properties.translations.MenuCategories.catAddons);
@ -164,15 +179,15 @@ namespace UniversalValveToolbox {
});
}
private void UpdateEngineList() {
var dataProvider = new DataProvider();
Engines = dataProvider.Engines.Where(engine => {
var engineAppData = SteamPathsUtil.GetSteamAppDataById(engine.Appid);
private void UpdateEngineList()
{
return engineAppData != null && engineAppData.Installed;
}).ToArray();
if (Engines != null && Engines.Length != 0) {
GetAvailableEngines();
if (Engines != null && Engines.Length != 0)
{
comboBoxEngine.Enabled = true;
comboBoxEngine.Items.Clear();
comboBoxEngine.Items.AddRange(Engines.Select(engine => engine.Name).ToArray());
@ -181,8 +196,35 @@ namespace UniversalValveToolbox {
}
}
private void UpdateProjectList() {
if (Engines.Length == 0) {
private void GetAvailableEngines()
{
var dataProvider = new DataProvider();
if (dataProvider.Settings.ToolboxMod == ToolboxMod.dev)
{
EngineDtoModel engineValues = dataProvider.Engines.Single(engine => engine.Appid == dataProvider.Settings.BundleAppID);
Engines = new[] {
new EngineDtoModel {
Appid = (int)dataProvider.Settings.BundleAppID,
Name = dataProvider.Settings.DevEngineName,
Bin = engineValues.Bin,
Tools = engineValues.Tools
}
};
}
else {
Engines = dataProvider.Engines.Where(engine => dataProvider.Settings.ToolboxMod switch
{
ToolboxMod.retail => SteamApps.IsAppInstalled(engine.Appid),
ToolboxMod.bundle => engine.Appid == dataProvider.Settings.BundleAppID,
_ => throw new Exception($"Unrecognised toolbox mode: {dataProvider.Settings.ToolboxMod}")
}).ToArray();
}
}
private void UpdateProjectList()
{
if (Engines.Length == 0)
{
comboBoxProjects.Enabled = false;
comboBoxProjects.Items.Clear();
@ -195,7 +237,8 @@ namespace UniversalValveToolbox {
var selectEngine = Engines[comboBoxEngine.SelectedIndex];
AvailableProjects = Projects.Where(project => project.Engine == selectEngine.Appid).ToArray();
if (AvailableProjects != null && AvailableProjects.Length != 0) {
if (AvailableProjects != null && AvailableProjects.Length != 0)
{
comboBoxProjects.Enabled = true;
comboBoxProjects.Items.Clear();
@ -203,17 +246,20 @@ namespace UniversalValveToolbox {
comboBoxProjects.SelectedIndex = 0;
}
else {
else
{
comboBoxProjects.Enabled = false;
comboBoxProjects.Items.Clear();
}
}
private void UpdateToolsList() {
private void UpdateToolsList()
{
var removeItem = new List<ListViewItem>();
foreach (ListViewItem item in listViewGroupTools.Items) {
foreach (ListViewItem item in listViewGroupTools.Items)
{
removeItem.Add(item);
}
@ -222,19 +268,30 @@ namespace UniversalValveToolbox {
if (SelectedEngine == null)
return;
var pathSelectedEngine = SteamPathsUtil.GetSteamAppManifestDataById(SelectedEngine.Appid)?.Path;
var dataProvider = new DataProvider();
if (pathSelectedEngine != null) {
var pathSelectedEngine = dataProvider.Settings.ToolboxMod switch
{
ToolboxMod.retail => SteamApps.AppInstallDir(SelectedEngine.Appid),
ToolboxMod.bundle => SteamApps.AppInstallDir(dataProvider.Settings.BundleAppID),
ToolboxMod.dev => dataProvider.Settings.DevEnginePath,
_ => throw new Exception($"Unrecognised engine type: {dataProvider.Settings.ToolboxMod}")
};
if (pathSelectedEngine != null)
{
var pairPathIconTools = SelectedEngine.Tools
.Where(tool => File.Exists(Path.Combine(pathSelectedEngine, tool.Bin)))
.Select(tool => {
.Select(tool =>
{
var keyByPath = Path.Combine(pathSelectedEngine, tool.Bin);
var icon = Icon.ExtractAssociatedIcon(Path.Combine(pathSelectedEngine, tool.Bin));
return new Pair(keyByPath, icon);
});
foreach (var pair in pairPathIconTools) {
foreach (var pair in pairPathIconTools)
{
listView.SmallImageList.Images.Add((string)pair.First, (Icon)pair.Second);
listView.LargeImageList.Images.Add((string)pair.First, (Icon)pair.Second);
}
@ -243,16 +300,19 @@ namespace UniversalValveToolbox {
var itemsTools = SelectedEngine.Tools
.Where(tool => File.Exists(Path.Combine(pathSelectedEngine, tool.Bin)))
.Select(tool => {
.Select(tool =>
{
string keyByPath = null;
if (pathSelectedEngine != null)
keyByPath = Path.Combine(pathSelectedEngine, tool.Bin);
if (keyByPath == null) {
if (keyByPath == null)
{
return new ListViewItem(tool.Name, listViewGroupTools);
}
else {
else
{
return new ListViewItem(tool.Name, keyByPath, listViewGroupTools);
}
@ -260,27 +320,33 @@ namespace UniversalValveToolbox {
listView.Items.AddRange(itemsTools);
var engineData = SteamPathsUtil.GetSteamAppManifestDataById(SelectedEngine.Appid);
var enginePath = dataProvider.Settings.ToolboxMod switch
{
ToolboxMod.retail => SteamApps.AppInstallDir(SelectedEngine.Appid),
ToolboxMod.bundle => SteamApps.AppInstallDir(dataProvider.Settings.BundleAppID),
ToolboxMod.dev => dataProvider.Settings.DevEnginePath,
_ => throw new Exception($"Unrecognised engine type: {dataProvider.Settings.ToolboxMod}")
};
var isAvailableProjectBySelectEngine = Projects.Any(project => project.Engine == SelectedEngine.Appid);
if (engineData != null && isAvailableProjectBySelectEngine) {
var enginePath = engineData.Path;
if (enginePath != null && isAvailableProjectBySelectEngine)
{
var iconPathEngine = Path.Combine(enginePath, SelectedEngine.Bin);
if (enginePath != null) {
var iconPathEngine = Path.Combine(enginePath, SelectedEngine.Bin);
var runProjectListViewItem = new ListViewItem(Properties.translations.MenuItems.itmRunProject, iconPathEngine, listViewGroupTools);
runProjectListViewItem.Tag = RUN_PROJECT_ID;
var runProjectListViewItem = new ListViewItem(Properties.translations.MenuItems.itmRunProject, iconPathEngine, listViewGroupTools);
runProjectListViewItem.Tag = RUN_PROJECT_ID;
listView.Items.Add(runProjectListViewItem);
}
listView.Items.Add(runProjectListViewItem);
}
}
private void UpdateAddonsList() {
private void UpdateAddonsList()
{
var removeItem = new List<ListViewItem>();
foreach (ListViewItem item in listViewGroupAddons.Items) {
foreach (ListViewItem item in listViewGroupAddons.Items)
{
removeItem.Add(item);
}
@ -289,39 +355,45 @@ namespace UniversalValveToolbox {
if (SelectedEngine == null)
return;
var pathSelectedEngine = SteamPathsUtil.GetSteamAppManifestDataById(SelectedEngine.Appid)?.Path;
var pathSelectedEngine = SteamApps.AppInstallDir(SelectedEngine.Appid);
var addonsSelectedEngine = dataProvider.Addons.Where(a => a.Engines.Contains(SelectedEngine.Appid));
var pairPathIconTools = addonsSelectedEngine
.Where(addon => {
.Where(addon =>
{
var path = addon.Bin;
return File.Exists(path);
})
.Select(addons => {
.Select(addons =>
{
var keyByPath = addons.Bin;
var icon = Icon.ExtractAssociatedIcon(keyByPath);
return new Pair(keyByPath, icon);
});
foreach (var pair in pairPathIconTools) {
foreach (var pair in pairPathIconTools)
{
listView.SmallImageList.Images.Add((string)pair.First, (Icon)pair.Second);
listView.LargeImageList.Images.Add((string)pair.First, (Icon)pair.Second);
}
var itemsAddons = addonsSelectedEngine.Select(addons => {
var itemsAddons = addonsSelectedEngine.Select(addons =>
{
string keyByPath = null;
if (pathSelectedEngine != null)
keyByPath = Path.Combine(pathSelectedEngine, addons.Bin);
if (keyByPath == null) {
if (keyByPath == null)
{
return new ListViewItem(addons.Name, listViewGroupAddons);
}
else {
else
{
return new ListViewItem(addons.Name, keyByPath, listViewGroupAddons);
}
@ -330,7 +402,8 @@ namespace UniversalValveToolbox {
listView.Items.AddRange(itemsAddons);
}
private void UpdateInfoNavigationBar() {
private void UpdateInfoNavigationBar()
{
var countAvailableEngines = Engines.Length;
var countAvailableProjects = dataProvider.Projects.Length;
var countAvailableAddons = dataProvider.Addons.Length;
@ -339,81 +412,108 @@ namespace UniversalValveToolbox {
toolStripStatusLabelAddons.Text = Properties.translations.MenuNavbar.menuStrAddons + $"{countAvailableAddons}";
}
private void UpdateLogInStatus() {
private void UpdateLogInStatus()
{
var steamData = SteamManager.SteamData;
if (steamData.SteamPid != 0) {
if (steamData.SteamPid != 0)
{
toolStripStatusLabelSteam.Image = Properties.Resources.checked_16;
toolStripStatusLabelSteam.Text = Properties.translations.MenuNavbar.menuStrSteam + Properties.translations.MenuNavbar.menuStrOnline;
toolStripStatusLabelSteam.ToolTipText = Properties.translations.MenuNavbar.menuStrSteam + $"PID: {steamData.SteamPid.ToString()}";
}
else {
else
{
toolStripStatusLabelSteam.Image = Properties.Resources.cancel_16;
toolStripStatusLabelSteam.ToolTipText = string.Empty;
toolStripStatusLabelSteam.Text = Properties.translations.MenuNavbar.menuStrSteam + Properties.translations.MenuNavbar.menuStrOffline;
}
if (steamData.UserNameSteam != null) {
if (steamData.UserNameSteam != null)
{
toolStripStatusLabelLogin.Text = Properties.translations.MenuNavbar.menuStrLogin + $"{steamData.UserNameSteam}";
}
else {
else
{
toolStripStatusLabelLogin.Text = Properties.translations.MenuNavbar.menuStrLogin + Properties.translations.MenuNavbar.menuStrNone;
}
}
private void button_Launch_Click(object sender, EventArgs e) {
private void button_Launch_Click(object sender, EventArgs e)
{
this.OpenSettings();
}
private void listView_MouseDoubleClick(object sender, MouseEventArgs e) {
private void listView_MouseDoubleClick(object sender, MouseEventArgs e)
{
var selectItem = listView.SelectedItems[0];
var selectItemText = selectItem.Text;
EnvUtils.PrepareVProject($"{SelectedProject?.Path ?? string.Empty}");
EnvUtils.PrepareSFMData($"{SelectedProject?.Path ?? string.Empty}");
if (selectItem.Group == listViewGroupTools) {
if (RUN_PROJECT_ID.Equals(selectItem.Tag) && SelectedProject != null) {
var pathEngineBin = Path.Combine(SteamPathsUtil.GetSteamAppManifestDataById(SelectedEngine.Appid).Path, SelectedEngine.Bin);
if (selectItem.Group == listViewGroupTools)
{
if (RUN_PROJECT_ID.Equals(selectItem.Tag) && SelectedProject != null)
{
var pathEngineBin = Path.Combine(SteamApps.AppInstallDir(SelectedEngine.Appid), SelectedEngine.Bin);
Process.Start(pathEngineBin, $"-steam -game \"{SelectedProject?.Path ?? string.Empty}\" {SelectedProject.Args}");
}
var selectedTool = SelectedEngine.Tools.FirstOrDefault(tool => tool.Name == selectItemText);
if (selectedTool != null) {
var selectedEnginePath = SteamPathsUtil.GetSteamAppManifestDataById(SelectedEngine.Appid)?.Path;
if (selectedTool != null)
{
// var selectedEnginePath = SteamApps.AppInstallDir(SelectedEngine.Appid);
if (selectedEnginePath != null) {
var selectedEnginePath = dataProvider.Settings.ToolboxMod switch
{
ToolboxMod.retail => SteamApps.AppInstallDir(SelectedEngine.Appid),
ToolboxMod.bundle => SteamApps.AppInstallDir(dataProvider.Settings.BundleAppID),
ToolboxMod.dev => dataProvider.Settings.DevEnginePath,
_ => throw new Exception($"Unrecognised engine type: {dataProvider.Settings.ToolboxMod}")
};
if (selectedEnginePath != null)
{
var toolPath = Path.Combine(selectedEnginePath, selectedTool.Bin);
if (File.Exists(toolPath)) {
if (File.Exists(toolPath))
{
string finalArg = $"-steam {selectedTool.Args}";
if (!finalArg.Contains("-game")) {
finalArg += $"-game \"{SelectedProject?.Path ?? string.Empty}\"";
if (!finalArg.Contains("-game"))
{
finalArg += $" -game \"{SelectedProject?.Path ?? string.Empty}\" ";
}
Process.Start(toolPath, finalArg);
}
else
MessageBox.Show($"\"{selectedTool.Name}\" {Properties.translations.MessageBoxes.msgTextNotFound}\n{toolPath}", Properties.translations.MessageBoxes.msgWarning, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else {
else
{
DialogResult dialogResult = MessageBox.Show($"\"{SelectedEngine.Name}\" {Properties.translations.MessageBoxes.msgTextWithAppID} \"{SelectedEngine.Appid}\" {Properties.translations.MessageBoxes.msgTextNotInstalledInstall}", Properties.translations.MessageBoxes.msgWarning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes) {
if (dialogResult == DialogResult.Yes)
{
Process.Start($"steam://install/{SelectedEngine.Appid}");
}
else if (dialogResult == DialogResult.No) {
else if (dialogResult == DialogResult.No)
{
MessageBox.Show($"{Properties.translations.MessageBoxes.msgTextInstallationOf} \"{SelectedEngine.Name}\" {Properties.translations.MessageBoxes.msgTextWithAppID} \"{SelectedEngine.Appid}\" {Properties.translations.MessageBoxes.msgTextCancelled}", Properties.translations.MessageBoxes.msgInfo, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}
}
else if (selectItem.Group == listViewGroupAddons) {
else if (selectItem.Group == listViewGroupAddons)
{
var selectedAddons = dataProvider.Addons.FirstOrDefault(addon => addon.Name == selectItemText);
if (selectedAddons != null) {
if (selectedAddons != null)
{
var addonPath = Path.Combine(selectedAddons.Bin);
if (File.Exists(addonPath))
@ -424,34 +524,43 @@ namespace UniversalValveToolbox {
}
}
else if (selectItemText == Properties.translations.MenuItems.itmOpenSettings) {
else if (selectItemText == Properties.translations.MenuItems.itmOpenSettings)
{
this.OpenSettings();
}
else if (selectItemText == Properties.translations.MenuItems.itmEditConfigurations) {
else if (selectItemText == Properties.translations.MenuItems.itmEditConfigurations)
{
var frmProfiles = new FormProjects();
if (frmProfiles.ShowDialog() == DialogResult.OK) {
if (frmProfiles.ShowDialog() == DialogResult.OK)
{
UpdateFormData();
}
}
else if (selectItemText == Properties.translations.MenuItems.itmEditPlugins) {
else if (selectItemText == Properties.translations.MenuItems.itmEditPlugins)
{
var frmPlugins = new FormAddons();
if (frmPlugins.ShowDialog() == DialogResult.OK) {
if (frmPlugins.ShowDialog() == DialogResult.OK)
{
UpdateFormData();
}
}
else if (selectItemText == Properties.translations.MenuItems.itmAbout) {
else if (selectItemText == Properties.translations.MenuItems.itmAbout)
{
var frmAbout = new FormAbout();
frmAbout.ShowDialog();
}
else if (selectItemText == Properties.translations.MenuItems.itmGitHubLink) {
else if (selectItemText == Properties.translations.MenuItems.itmGitHubLink)
{
Process.Start("https://github.com/EpicMorg/UniversalValveToolbox");
}
else if (selectItemText == Properties.translations.MenuItems.itmGitHubReport) {
else if (selectItemText == Properties.translations.MenuItems.itmGitHubReport)
{
Process.Start("https://github.com/EpicMorg/UniversalValveToolbox/issues/new/choose");
}
}
private void OpenSettings() {
private void OpenSettings()
{
var dataManager = new DataProvider();
var settingsDto = dataManager.Settings;
var languageProvider = new LanguageProvider();
@ -460,14 +569,17 @@ namespace UniversalValveToolbox {
var frmSettings = new FormSettings(settingsModel);
if (frmSettings.ShowDialog() == DialogResult.OK) {
if (frmSettings.ShowDialog() == DialogResult.OK)
{
dataManager.Settings = settingsDto;
Application.Restart();
}
}
private void FormMain_FormClosing(object sender, FormClosingEventArgs e) {
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
SaveLastSelectedProject();
SteamClient.Shutdown();
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
using EpicMorg.SteamPathsLib;

using kasthack.binding.wf;
using Steamworks;
using System;
using System.Collections.Generic;
using System.Linq;
@ -21,7 +22,7 @@ namespace UniversalValveToolbox {
public FormProjects() {
InitializeComponent();
model = new FormProjectViewModel(dataProvider.Projects, dataProvider.Engines.Where(engine => SteamPathsUtil.GetSteamAppDataById(engine.Appid) != null).ToArray());
model = new FormProjectViewModel(dataProvider.Projects, dataProvider.Engines.Where(engine => isAppInstalled(engine.Appid)).ToArray());
UpdateComboBoxProject();
UpdateComboBoxEngine();
@ -34,6 +35,11 @@ namespace UniversalValveToolbox {
comboBoxEngine.Bind(a => a.SelectedIndex, model, a => a.SelectEngineIndex);
}
private bool isAppInstalled(int appId) {
var isInstall = SteamApps.IsAppInstalled(appId);
return isInstall;
}
private void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) {
UpdateComboBoxEngine();
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -74,8 +74,8 @@
//
// labelTranslationAthor
//
this.labelTranslationAthor.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.labelTranslationAthor, "labelTranslationAthor");
this.labelTranslationAthor.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelTranslationAthor.Name = "labelTranslationAthor";
//
// FormSettings

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,9 @@
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
@ -33,7 +36,27 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>valve.ico</ApplicationIcon>
<ApplicationIcon>toolbox.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
@ -51,7 +74,7 @@
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<PackageReference Include="EpicMorg.SteamPathsLib" Version="1.1.0.6" />
<!--<PackageReference Include="EpicMorg.SteamPathsLib" Version="1.1.0.6" />-->
<PackageReference Include="kasthack.binding.wf">
<Version>1.2.26</Version>
</PackageReference>
@ -184,15 +207,24 @@
<EmbeddedResource Include="UI\FormAbout.resx">
<DependentUpon>FormAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormAbout.ru-RU.resx">
<DependentUpon>FormAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormAbout.ru.resx">
<DependentUpon>FormAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormAddons.resx">
<DependentUpon>FormAddons.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormAddons.ru-RU.resx">
<DependentUpon>FormAddons.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormAddons.ru.resx">
<DependentUpon>FormAddons.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormMain.ru-RU.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormMain.ru.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
@ -202,6 +234,9 @@
<EmbeddedResource Include="UI\FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormProjects.ru-RU.resx">
<DependentUpon>FormProjects.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormProjects.ru.resx">
<DependentUpon>FormProjects.cs</DependentUpon>
</EmbeddedResource>
@ -239,6 +274,9 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>MessageBoxes.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormSettings.ru-RU.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\FormSettings.ru.resx">
<DependentUpon>FormSettings.cs</DependentUpon>
</EmbeddedResource>
@ -247,6 +285,12 @@
<None Include="json\engines\1840_sfm.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="json\engines\1950750_kl.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="json\engines\1966980_bst.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="json\engines\440_tf2.sdk.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@ -341,6 +385,7 @@
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="toolbox.ico" />
<None Include="Resources\cancel_16.png" />
<None Include="Resources\checked_16.png" />
<None Include="Resources\human_16.png" />
@ -349,7 +394,18 @@
<None Include="Resources\info_16.png" />
<None Include="Resources\plug-silhouette_16.png" />
<None Include="Resources\run_16.png" />
<Content Include="valve.ico" />
<None Include="Resources\toolbox64.png" />
<Content Include="steam_api.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="steam_api64.dll" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="..\Facepunch.Steamworks\Facepunch.Steamworks\Facepunch.Steamworks.Win32.csproj">
<Project>{ed9b29e8-0f90-4f9e-bd87-f5014f5fcf85}</Project>
<Name>Facepunch.Steamworks.Win32</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1,4 +1,4 @@
using EpicMorg.SteamPathsLib;
using Steamworks;
using System;
using System.IO;
@ -28,7 +28,7 @@ namespace UniversalValveToolbox.Utils {
if (pathProject == null || pathProject.Length == 0)
return;
var SFMpath = SteamPathsUtil.GetSteamAppManifestDataById(1840)?.Path;
var SFMpath = SteamApps.AppInstallDir(1840);
if (SFMpath == null)
return;

View File

@ -1,4 +1,5 @@
using EpicMorg.SteamPathsLib;
using Steamworks;
using System.Diagnostics;
using UniversalValveToolbox.Model.ViewModel;
namespace UniversalValveToolbox.Utils {
@ -6,8 +7,9 @@ namespace UniversalValveToolbox.Utils {
public static SteamDataViewModel SteamData {
get {
var result = new SteamDataViewModel();
result.SteamPid = SteamPathsUtil.GetActiveProcessSteamData()?.PID ?? 0;
result.UserNameSteam = SteamPathsUtil.GetSteamData()?.LastGameNameUsed ?? null;
result.SteamPid = Process.GetProcessesByName("steam")[0]?.Id ?? 0;
result.UserNameSteam = SteamClient.Name ?? null;
return result;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

View File

@ -0,0 +1,37 @@
{
"appid": 1950750,
"name": "Kayf-Life: Complete Edition",
"bin": "kl.exe",
"tools": [
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor (Slamin Tools)"
},
{
"args": "",
"bin": "bin//hlmv.exe",
"name": "Half-Life Model Viewer"
},
{
"args": "",
"bin": "bin//hlfaceposer.exe",
"name": "Half-Life FacePoser"
},
{
"args": "",
"bin": "bin//qc_eyes.exe",
"name": "QC Eyes"
},
{
"args": "-tools",
"bin": "kl.exe",
"name": "Engine Tools"
}
]
}

View File

@ -0,0 +1,37 @@
{
"appid": 1966980,
"name": "Bestiarium Project",
"bin": "bst.exe",
"tools": [
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor (Slamin Tools)"
},
{
"args": "",
"bin": "bin//hlmv.exe",
"name": "Half-Life Model Viewer"
},
{
"args": "",
"bin": "bin//hlfaceposer.exe",
"name": "Half-Life FacePoser"
},
{
"args": "",
"bin": "bin//qc_eyes.exe",
"name": "QC Eyes"
},
{
"args": "-tools",
"bin": "bst.exe",
"name": "Engine Tools"
}
]
}

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -8,6 +8,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -18,6 +18,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -18,6 +18,11 @@
"bin": "bin//hammer.exe",
"name": "Valve Hammer Editor"
},
{
"args": "",
"bin": "bin//hammerplusplus.exe",
"name": "Valve Hammer Editor ++"
},
{
"args": "",
"bin": "bin//hlmv.exe",

View File

@ -1,6 +1,11 @@
{
"LastSelectedProject": null,
"LastSelectedProject": null,
"Language": "en-US",
"AvailableLanguages": [ "en-US", "ru-RU" ],
"Theme": null
"Theme": null,
"ToolboxMod": "bundle", //retail, bundle, dev
"ToolsAppId": 1966980, //set your game real steam sdk id for init SteamApi or use 480 stub
"BundleAppID": 1950750, //set your gane steam id for get fs path
"DevEnginePath": "C://", //set you game root folder if you run dev-mod
"DevEngineName": "My Future Game (engine)" //set you game root folder if you run dev-mod
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB