Code refactor

This commit is contained in:
Bitl 2023-01-13 13:41:00 -07:00
parent 23e597dede
commit 2305148e7b
52 changed files with 1498 additions and 3842 deletions

View File

@ -12,6 +12,8 @@
<FileAlignment>512</FileAlignment>
<Deterministic>false</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -41,17 +43,141 @@
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.1.0\lib\net46\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" />
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.ServiceModel" />
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
@ -61,6 +187,11 @@
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="LocalPaths.cs" />

View File

@ -1,4 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net48" />
<package id="NLog" version="5.1.0" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
<package id="System.Console" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Http" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net48" />
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
</packages>

View File

@ -1,24 +0,0 @@
#region Usings
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
#endregion
namespace Novetus.ClientScriptTester
{
#region LocalVars
class LocalVars
{
public static List<string> SharedArgs = new List<string>();
//a re-implementation of "Environment.NewLine" but with double spaces. Should be in NETExt, but we only use it here.
public static String DoubleSpacedNewLine
{
get
{
Contract.Ensures(Contract.Result<String>() != null);
return "\r\n\r\n";
}
}
}
#endregion
}

View File

@ -1,29 +0,0 @@
#region Usings
using System;
using System.Windows.Forms;
#endregion
namespace Novetus.ClientScriptTester
{
#region ClientScript Tester
static class ClientScriptTester
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
foreach (string s in args)
{
LocalVars.SharedArgs.Add(s);
}
Application.Run(new ClientScriptTestForm());
}
}
#endregion
}

View File

@ -1,95 +0,0 @@
namespace Novetus.ClientScriptTester
{
partial class ClientScriptTestForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClientScriptTestForm));
this.ResultLabel = new System.Windows.Forms.Label();
this.Divider1 = new System.Windows.Forms.Label();
this.OutputBox = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// ResultLabel
//
this.ResultLabel.AutoSize = true;
this.ResultLabel.Location = new System.Drawing.Point(12, 9);
this.ResultLabel.Name = "ResultLabel";
this.ResultLabel.Size = new System.Drawing.Size(102, 13);
this.ResultLabel.TabIndex = 0;
this.ResultLabel.Text = "Here are the results:";
//
// Divider1
//
this.Divider1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Divider1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.Divider1.Location = new System.Drawing.Point(8, 31);
this.Divider1.Name = "Divider1";
this.Divider1.Size = new System.Drawing.Size(780, 2);
this.Divider1.TabIndex = 1;
//
// OutputBox
//
this.OutputBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.OutputBox.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.OutputBox.Location = new System.Drawing.Point(8, 36);
this.OutputBox.Name = "OutputBox";
this.OutputBox.ReadOnly = true;
this.OutputBox.Size = new System.Drawing.Size(780, 402);
this.OutputBox.TabIndex = 2;
this.OutputBox.Text = "";
//
// ClientScriptTestForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.OutputBox);
this.Controls.Add(this.Divider1);
this.Controls.Add(this.ResultLabel);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(816, 200);
this.Name = "ClientScriptTestForm";
this.Text = "ClientScript Tester";
this.Load += new System.EventHandler(this.ClientScriptTestForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label ResultLabel;
private System.Windows.Forms.Label Divider1;
private System.Windows.Forms.RichTextBox OutputBox;
}
}

View File

@ -1,35 +0,0 @@
#region Usings
using System;
using System.Windows.Forms;
#endregion
namespace Novetus.ClientScriptTester
{
#region ClientScriptTestForm
public partial class ClientScriptTestForm : Form
{
#region Constructor
public ClientScriptTestForm()
{
InitializeComponent();
}
#endregion
#region Form Events
private void ClientScriptTestForm_Load(object sender, EventArgs e)
{
foreach (string str in LocalVars.SharedArgs)
{
if (!string.IsNullOrWhiteSpace(str))
{
OutputBox.AppendText(str + LocalVars.DoubleSpacedNewLine);
}
}
OutputBox.SelectionStart = 0;
OutputBox.ScrollToCaret();
}
#endregion
}
#endregion
}

View File

@ -1,113 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Novetus.ClientScriptTester</RootNamespace>
<AssemblyName>ClientScriptTester</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;TESTER;NOVETUS_APPS</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;TESTER;NOVETUS_APPS;NET481</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>NovetusIcon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Net" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\LocalVars.cs" />
<Compile Include="Forms\ClientScriptTestForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\ClientScriptTestForm.Designer.cs">
<DependentUpon>ClientScriptTestForm.cs</DependentUpon>
</Compile>
<Compile Include="ClientScriptTester.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Forms\ClientScriptTestForm.resx">
<DependentUpon>ClientScriptTestForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="app.manifest" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="NovetusIcon.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>SET path=$(SolutionDir)build
if not exist "%25path%25" mkdir "%25path%25"
SET path2=%25path%25\ClientScriptTester
if not exist "%25path2%25" mkdir "%25path2%25"
copy $(ProjectDir)$(OutDir) "%25path2%25"\*
del "%25path%25"\$(TargetName).vshost.exe
del "%25path%25"\$(TargetName).vshost.exe.config
del "%25path%25"\$(TargetName).vshost.exe.manifest
del "%25path%25"\$(TargetName).xml</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

View File

@ -1,33 +0,0 @@
#region Usings
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ClientScript tester")]
[assembly: AssemblyDescription("ClientScript tester tor testing ClientScript variables.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Bitl")]
[assembly: AssemblyProduct("Novetus")]
[assembly: AssemblyCopyright("(c) Bitl 2018-2021. All rights to Roblox go to the Roblox Corporation.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.3.*")]

View File

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Novetus.ClientScriptTester.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Novetus.ClientScriptTester.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Novetus.ClientScriptTester.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0"/>
</dependentAssembly>
</assemblyBinding>
<gcAllowVeryLargeObjects enabled="true"/>
</runtime>
</configuration>

View File

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config.
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

View File

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{64A99062-3C1C-4D2E-99E4-D6D92443AC98}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>Novetus.ReleasePreparer</RootNamespace>
<AssemblyName>ReleasePreparer</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>false</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;PREPARER;NET481</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;PREPARER;NET481</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>NovetusIcon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\NovetusCore\Classes\INIFile.cs">
<Link>INIFile.cs</Link>
</Compile>
<Compile Include="ReleasePreparer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="NovetusIcon.ico" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>SET path=$(SolutionDir)build
if not exist "%25path%25" mkdir "%25path%25"
copy $(ProjectDir)$(OutDir) "%25path%25"\*
del "%25path%25"\$(TargetName).vshost.exe
del "%25path%25"\$(TargetName).vshost.exe.config
del "%25path%25"\$(TargetName).vshost.exe.manifest
del "%25path%25"\$(TargetName).xml</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

View File

@ -1,34 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ReleasePreparer")]
[assembly: AssemblyDescription("A utility designed for faster releases.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Bitl")]
[assembly: AssemblyProduct("ReleasePreparer")]
[assembly: AssemblyCopyright("(c) Bitl 2018-2021. All rights to Roblox go to the Roblox Corporation.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("64a99062-3c1c-4d2e-99e4-d6d92443ac98")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.3.*")]

View File

@ -1,156 +0,0 @@
#region Usings
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
#endregion
namespace Novetus.ReleasePreparer
{
#region ReleasePreparer
class ReleasePreparer
{
static void Main(string[] args)
{
string novpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\\Novetus";
if (args.Length > 0)
{
if (args.Contains("-snapshot"))
{
string infopath = novpath + @"\\config\\info.ini";
string currver = GetBranch(infopath);
TurnOnInitialSequence(infopath);
string pathbeta = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\\betaversion.txt";
Console.WriteLine("Creating " + pathbeta);
if (!File.Exists(pathbeta))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(pathbeta))
{
sw.Write(currver);
}
}
Console.WriteLine("Created " + pathbeta);
}
else if (args.Contains("-release"))
{
DoRelease(novpath);
}
}
else
{
DoRelease(novpath);
}
}
public static void DoRelease(string novpath)
{
string infopath = novpath + @"\\config\\info.ini";
string currbranch = GetBranch(infopath);
TurnOnInitialSequence(infopath);
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\\releaseversion.txt";
Console.WriteLine("Creating " + path);
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.Write(currbranch);
}
}
Console.WriteLine("Created " + path);
}
public static void FixedFileCopy(string src, string dest, bool overwrite)
{
if (File.Exists(dest))
{
File.SetAttributes(dest, FileAttributes.Normal);
}
File.Copy(src, dest, overwrite);
File.SetAttributes(dest, FileAttributes.Normal);
}
public static void FixedFileDelete(string src)
{
if (File.Exists(src))
{
File.SetAttributes(src, FileAttributes.Normal);
File.Delete(src);
}
}
public static string GetBranch(string infopath)
{
INIFile ini = new INIFile(infopath);
return GetBranch(ini, infopath);
}
public static string GetBranch(INIFile ini, string infopath)
{
//READ
string versionbranch, extendedVersionNumber, extendedVersionTemplate, extendedVersionRevision, isLite;
string section = "ProgramInfo";
versionbranch = ini.IniReadValue(section, "Branch", "0.0");
extendedVersionNumber = ini.IniReadValue(section, "ExtendedVersionNumber", "False");
extendedVersionTemplate = ini.IniReadValue(section, "ExtendedVersionTemplate", "%version%");
extendedVersionRevision = ini.IniReadValue(section, "ExtendedVersionRevision", "-1");
isLite = ini.IniReadValue(section, "IsLite", "False");
string novpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\\Novetus\\bin\\Novetus.exe";
if (!extendedVersionNumber.Equals("False"))
{
var versionInfo = FileVersionInfo.GetVersionInfo(novpath);
return extendedVersionTemplate.Replace("%version%", versionbranch)
.Replace("%build%", versionInfo.ProductBuildPart.ToString())
.Replace("%revision%", versionInfo.FilePrivatePart.ToString())
.Replace("%extended-revision%", (!extendedVersionRevision.Equals("-1") ? extendedVersionRevision : ""))
.Replace("%lite%", (!isLite.Equals("False") ? " (Lite)" : ""));
}
else
{
return versionbranch;
}
}
public static void SetToLite(string infopath)
{
INIFile ini = new INIFile(infopath);
string section = "ProgramInfo";
string isLite = ini.IniReadValue(section, "IsLite", "False");
try
{
if (!isLite.Equals("True"))
{
ini.IniWriteValue(section, "IsLite", "True");
}
}
catch (Exception)
{
SetToLite(infopath);
}
}
public static void TurnOnInitialSequence(string infopath)
{
//READ
INIFile ini = new INIFile(infopath);
string section = "ProgramInfo";
string initialBootup = ini.IniReadValue(section, "InitialBootup", "True");
if (Convert.ToBoolean(initialBootup) == false)
{
ini.IniWriteValue(section, "InitialBootup", "True");
}
}
}
#endregion
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

View File

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32630.192
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novetus.Internal.ReleasePreparer", "Novetus.ReleasePreparer\Novetus.Internal.ReleasePreparer.csproj", "{64A99062-3C1C-4D2E-99E4-D6D92443AC98}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novetus.ClientScriptTester", "Novetus.ClientScriptTester\Novetus.ClientScriptTester.csproj", "{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{64A99062-3C1C-4D2E-99E4-D6D92443AC98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64A99062-3C1C-4D2E-99E4-D6D92443AC98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64A99062-3C1C-4D2E-99E4-D6D92443AC98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64A99062-3C1C-4D2E-99E4-D6D92443AC98}.Release|Any CPU.Build.0 = Release|Any CPU
{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83B08607-65B8-4F9C-8D0F-AB1C8EEFFAE0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {66CA6CE5-670E-48AA-A2DA-9347371D4CA0}
EndGlobalSection
EndGlobal

View File

@ -6,7 +6,8 @@ namespace Novetus.Core
{
#region Discord RPC
//code by discord obv. just renamed it to fit better.
public class DiscordRPC
//TODO: add proper c# implementation.
public class IDiscordRPC
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ReadyCallback();
@ -95,5 +96,57 @@ namespace Novetus.Core
[DllImport("discord-rpc", EntryPoint = "Discord_Respond", CallingConvention = CallingConvention.Cdecl)]
public static extern void Respond(string userId, Reply reply);
}
#endregion
public class DiscordRPC
{
public static void ReadyCallback()
{
Util.ConsolePrint("Discord RPC: Ready", 3);
}
public static void DisconnectedCallback(int errorCode, string message)
{
Util.ConsolePrint("Discord RPC: Disconnected. Reason - " + errorCode + ": " + message, 2);
}
public static void ErrorCallback(int errorCode, string message)
{
Util.ConsolePrint("Discord RPC: Error. Reason - " + errorCode + ": " + message, 2);
}
public static void JoinCallback(string secret)
{
}
public static void SpectateCallback(string secret)
{
}
public static void RequestCallback(IDiscordRPC.JoinRequest request)
{
}
public static void StartDiscord()
{
if (GlobalVars.UserConfiguration.DiscordPresence)
{
GlobalVars.handlers = new IDiscordRPC.EventHandlers();
GlobalVars.handlers.readyCallback = ReadyCallback;
GlobalVars.handlers.disconnectedCallback += DisconnectedCallback;
GlobalVars.handlers.errorCallback += ErrorCallback;
GlobalVars.handlers.joinCallback += JoinCallback;
GlobalVars.handlers.spectateCallback += SpectateCallback;
GlobalVars.handlers.requestCallback += RequestCallback;
IDiscordRPC.Initialize(GlobalVars.appid, ref GlobalVars.handlers, true, "");
Util.ConsolePrint("Discord RPC: Initalized", 3);
#if URI
ClientManagement.UpdateRichPresence(GlobalVars.LauncherState.LoadingURI, true);
#else
ClientManagement.UpdateRichPresence(ClientManagement.GetStateForType(GlobalVars.GameOpened), true);
#endif
}
}
}
#endregion
}

View File

@ -24,6 +24,9 @@
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\NovetusFuncs.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\GlobalPaths.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\GlobalVars.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\Roblox Helpers\RobloxTypes.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\Roblox Helpers\RobloxXML.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\Roblox Helpers\Vector3.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\Util.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\NetFuncs.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StorageAndFunctions\SecurityFuncs.cs" />

View File

@ -6,9 +6,9 @@ using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Security.Cryptography;
using System.Windows.Forms;
using System.Reflection;
#endregion
@ -198,24 +198,24 @@ namespace Novetus.Core
DefaultClientInfo.Description = desc;
string[] lines = {
SecurityFuncs.Base64Encode(DefaultClientInfo.UsesPlayerName.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.UsesID.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.Warning.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.LegacyMode.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.ClientMD5.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.ScriptMD5.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.Description.ToString()),
SecurityFuncs.Base64Encode(placeholder.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.Fix2007.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.AlreadyHasSecurity.ToString()),
SecurityFuncs.Base64Encode(((int)DefaultClientInfo.ClientLoadOptions).ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.SeperateFolders.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.UsesCustomClientEXEName.ToString()),
SecurityFuncs.Base64Encode(DefaultClientInfo.CustomClientEXEName.ToString().Replace("\\", "")),
SecurityFuncs.Base64Encode(DefaultClientInfo.CommandLineArgs.ToString())
SecurityFuncs.Encode(DefaultClientInfo.UsesPlayerName.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.UsesID.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.Warning.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.LegacyMode.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.ClientMD5.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.ScriptMD5.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.Description.ToString()),
SecurityFuncs.Encode(placeholder.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.Fix2007.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.AlreadyHasSecurity.ToString()),
SecurityFuncs.Encode(((int)DefaultClientInfo.ClientLoadOptions).ToString()),
SecurityFuncs.Encode(DefaultClientInfo.SeperateFolders.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.UsesCustomClientEXEName.ToString()),
SecurityFuncs.Encode(DefaultClientInfo.CustomClientEXEName.ToString().Replace("\\", "")),
SecurityFuncs.Encode(DefaultClientInfo.CommandLineArgs.ToString())
};
File.WriteAllText(path + "\\clientinfo.nov", SecurityFuncs.Base64Encode(string.Join("|", lines)));
File.WriteAllText(path + "\\clientinfo.nov", SecurityFuncs.Encode(string.Join("|", lines)));
}
//NOT FOR SDK.
@ -260,36 +260,36 @@ namespace Novetus.Core
file = reader.ReadLine();
}
string ConvertedLine = SecurityFuncs.Base64Decode(file);
string ConvertedLine = SecurityFuncs.Decode(file);
string[] result = ConvertedLine.Split('|');
usesplayername = SecurityFuncs.Base64Decode(result[0]);
usesid = SecurityFuncs.Base64Decode(result[1]);
warning = SecurityFuncs.Base64Decode(result[2]);
legacymode = SecurityFuncs.Base64Decode(result[3]);
clientmd5 = SecurityFuncs.Base64Decode(result[4]);
scriptmd5 = SecurityFuncs.Base64Decode(result[5]);
desc = SecurityFuncs.Base64Decode(result[6]);
fix2007 = SecurityFuncs.Base64Decode(result[8]);
alreadyhassecurity = SecurityFuncs.Base64Decode(result[9]);
clientloadoptions = SecurityFuncs.Base64Decode(result[10]);
usesplayername = SecurityFuncs.Decode(result[0]);
usesid = SecurityFuncs.Decode(result[1]);
warning = SecurityFuncs.Decode(result[2]);
legacymode = SecurityFuncs.Decode(result[3]);
clientmd5 = SecurityFuncs.Decode(result[4]);
scriptmd5 = SecurityFuncs.Decode(result[5]);
desc = SecurityFuncs.Decode(result[6]);
fix2007 = SecurityFuncs.Decode(result[8]);
alreadyhassecurity = SecurityFuncs.Decode(result[9]);
clientloadoptions = SecurityFuncs.Decode(result[10]);
folders = "False";
usescustomname = "False";
customname = "";
try
{
commandlineargs = SecurityFuncs.Base64Decode(result[11]);
commandlineargs = SecurityFuncs.Decode(result[11]);
bool parsedValue;
if (bool.TryParse(commandlineargs, out parsedValue))
{
folders = SecurityFuncs.Base64Decode(result[11]);
commandlineargs = SecurityFuncs.Base64Decode(result[12]);
folders = SecurityFuncs.Decode(result[11]);
commandlineargs = SecurityFuncs.Decode(result[12]);
bool parsedValue2;
if (bool.TryParse(commandlineargs, out parsedValue2))
{
usescustomname = SecurityFuncs.Base64Decode(result[12]);
customname = SecurityFuncs.Base64Decode(result[13]);
commandlineargs = SecurityFuncs.Base64Decode(result[14]);
usescustomname = SecurityFuncs.Decode(result[12]);
customname = SecurityFuncs.Decode(result[13]);
commandlineargs = SecurityFuncs.Decode(result[14]);
}
}
}
@ -297,7 +297,7 @@ namespace Novetus.Core
{
//fake this option until we properly apply it.
clientloadoptions = "2";
commandlineargs = SecurityFuncs.Base64Decode(result[10]);
commandlineargs = SecurityFuncs.Decode(result[10]);
}
info.UsesPlayerName = Convert.ToBoolean(usesplayername);
@ -365,7 +365,8 @@ namespace Novetus.Core
if (initial)
{
GlobalVars.presence.largeImageKey = GlobalVars.imagekey_large;
GlobalVars.presence.startTimestamp = SecurityFuncs.UnixTimeNow();
var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
GlobalVars.presence.startTimestamp = (long)timeSpan.TotalSeconds;
}
string ValidMapname = (string.IsNullOrWhiteSpace(mapname) ? "Place1" : mapname);
@ -425,7 +426,7 @@ namespace Novetus.Core
break;
}
DiscordRPC.UpdatePresence(ref GlobalVars.presence);
IDiscordRPC.UpdatePresence(ref GlobalVars.presence);
}
}
@ -1046,7 +1047,7 @@ namespace Novetus.Core
string fileMD5 = parsedFileParams[1];
string fullFilePath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\" + filePath;
if (!SecurityFuncs.CheckMD5(fileMD5, fullFilePath))
if (!CheckMD5(fileMD5, fullFilePath))
{
#if URI
UpdateStatus(label, "The client has been detected as modified.");
@ -1074,10 +1075,90 @@ namespace Novetus.Core
}
}
public static bool CheckMD5(string MD5Hash, string path)
{
if (!File.Exists(path))
return false;
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(path))
{
byte[] hash = md5.ComputeHash(stream);
string clientMD5 = BitConverter.ToString(hash).Replace("-", "");
if (clientMD5.Equals(MD5Hash))
{
return true;
}
else
{
return false;
}
}
}
}
public static bool checkClientMD5(string client)
{
if (!GlobalVars.AdminMode)
{
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
{
string rbxexe = "";
string BasePath = GlobalPaths.BasePath + "\\clients\\" + client;
if (GlobalVars.SelectedClientInfo.LegacyMode)
{
rbxexe = BasePath + "\\RobloxApp.exe";
}
else if (GlobalVars.SelectedClientInfo.SeperateFolders)
{
rbxexe = BasePath + "\\client\\RobloxApp_client.exe";
}
else if (GlobalVars.SelectedClientInfo.UsesCustomClientEXEName)
{
rbxexe = BasePath + @"\\" + GlobalVars.SelectedClientInfo.CustomClientEXEName;
}
else
{
rbxexe = BasePath + "\\RobloxApp_client.exe";
}
return CheckMD5(GlobalVars.SelectedClientInfo.ClientMD5, rbxexe);
}
else
{
return true;
}
}
else
{
return true;
}
}
public static bool checkScriptMD5(string client)
{
if (!GlobalVars.AdminMode)
{
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
{
string rbxscript = GlobalPaths.BasePath + "\\clients\\" + client + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua";
return CheckMD5(GlobalVars.SelectedClientInfo.ScriptMD5, rbxscript);
}
else
{
return true;
}
}
else
{
return true;
}
}
#if URI
public static void LaunchRBXClient(string ClientName, ScriptType type, bool no3d, bool nomap, EventHandler e, Label label)
#else
public static void LaunchRBXClient(string ClientName, ScriptType type, bool no3d, bool nomap, EventHandler e)
public static void LaunchRBXClient(string ClientName, ScriptType type, bool no3d, bool nomap, EventHandler e)
#endif
{
#if LAUNCHER
@ -1271,7 +1352,7 @@ namespace Novetus.Core
{
if (info.AlreadyHasSecurity != true)
{
if (SecurityFuncs.checkClientMD5(ClientName) && SecurityFuncs.checkScriptMD5(ClientName))
if (checkClientMD5(ClientName) && checkScriptMD5(ClientName))
{
OpenClient(type, rbxexe, args, ClientName, mapname, e);
}
@ -1755,6 +1836,13 @@ namespace Novetus.Core
}
}
public static string CopyMapToRBXAsset()
{
string clientcontentpath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\content\\temp.rbxl";
Util.FixedFileCopy(GlobalVars.UserConfiguration.MapPath, clientcontentpath, true);
return GlobalPaths.AltBaseGameDir + "temp.rbxl";
}
public static string CompileScript(string code, string tag, string endtag, string mapfile, string luafile, string rbxexe, bool usesharedtags = true)
{
return CompileScript(GlobalVars.UserConfiguration.SelectedClient, code, tag, endtag, mapfile, luafile, rbxexe, usesharedtags);
@ -1823,7 +1911,7 @@ namespace Novetus.Core
string extractedCode = GetArgsFromTag(code, start, end);
#if LAUNCHER
string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location) : "";
string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(Assembly.GetExecutingAssembly().Location) : "";
#else
string md5dir = !info.AlreadyHasSecurity ? SecurityFuncs.GenerateMD5(GlobalPaths.RootPathLauncher + "\\Novetus.exe") : "";
#endif
@ -1878,7 +1966,7 @@ namespace Novetus.Core
.Replace("%extrad%", GlobalPaths.extraGameDir + GlobalVars.UserCustomization.Extra)
.Replace("%hat4d%", GlobalPaths.hatGameDir + GlobalVars.UserCustomization.Extra)
.Replace("%mapfiled%", GlobalPaths.BaseGameDir + GlobalVars.UserConfiguration.MapPathSnip.Replace(@"\\", @"\").Replace(@"/", @"\"))
.Replace("%mapfilec%", extractedCode.Contains("%mapfilec%") ? NovetusFuncs.CopyMapToRBXAsset() : "")
.Replace("%mapfilec%", extractedCode.Contains("%mapfilec%") ? CopyMapToRBXAsset() : "")
.Replace("%tripcode%", GlobalVars.PlayerTripcode)
.Replace("%scripttype%", Generator.GetNameForType(type))
.Replace("%notifications%", GlobalVars.UserConfiguration.ShowServerNotifications.ToString().ToLower())

View File

@ -11,7 +11,8 @@ using System.Drawing.Imaging;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.Runtime.Versioning;
using System.Xml;
using System.Xml.Linq;
#endregion
namespace Novetus.Core
@ -971,7 +972,8 @@ namespace Novetus.Core
if (!forcewrite)
{
string curval = NovetusFuncs.GenerateAndReturnTripcode();
//Powered by https://github.com/davcs86/csharp-uhwid
string curval = UHWIDEngine.AdvancedUid;
if (!GlobalVars.PlayerTripcode.Equals(curval))
{
GlobalVars.PlayerTripcode = curval;
@ -1360,6 +1362,101 @@ namespace Novetus.Core
GlobalVars.UserCustomization = new FileFormat.CustomizationConfig();
ReloadLoadoutValue();
}
public static string GetItemTextureLocalPath(string item, string nameprefix)
{
//don't bother, we're offline.
if (GlobalVars.ExternalIP.Equals("localhost"))
return "";
if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%"))
return "";
if (item.Contains("http://") || item.Contains("https://"))
{
string peram = "id=";
string fullname = nameprefix + "Temp.png";
if (item.Contains(peram))
{
string id = item.After(peram);
fullname = id + ".png";
}
else
{
return item;
}
Downloader download = new Downloader(item, fullname, "", GlobalPaths.AssetCacheDirAssets);
try
{
string path = download.GetFullDLPath();
download.InitDownloadNoDialog(path);
return GlobalPaths.AssetCacheAssetsGameDir + download.fileName;
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
}
}
return "";
}
public static string GetItemTextureID(string item, string name, AssetCacheDefBasic assetCacheDef)
{
//don't bother, we're offline.
if (GlobalVars.ExternalIP.Equals("localhost"))
return "";
if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%"))
return "";
if (item.Contains("http://") || item.Contains("https://"))
{
string peram = "id=";
if (!item.Contains(peram))
{
return item;
}
Downloader download = new Downloader(item, name + "Temp.rbxm", "", GlobalPaths.AssetCacheDirAssets);
try
{
string path = download.GetFullDLPath();
download.InitDownloadNoDialog(path);
string oldfile = File.ReadAllText(path);
string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile)).Replace("&#9;", "\t").Replace("#9;", "\t");
XDocument doc = null;
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false };
Stream filestream = Util.GenerateStreamFromString(fixedfile);
using (XmlReader xmlReader = XmlReader.Create(filestream, xmlReaderSettings))
{
xmlReader.MoveToContent();
doc = XDocument.Load(xmlReader);
}
return RobloxXML.GetURLInNodes(doc, assetCacheDef.Class, assetCacheDef.Id[0], item);
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
}
}
return "";
}
public static void ReloadLoadoutValue(bool localizeOnlineClothing = false)
{
@ -1404,15 +1501,15 @@ namespace Novetus.Core
if (localizeOnlineClothing)
{
GlobalVars.TShirtTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.TShirt, "TShirt", new AssetCacheDefBasic("ShirtGraphic", new string[] { "Graphic" }));
GlobalVars.ShirtTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Shirt, "Shirt", new AssetCacheDefBasic("Shirt", new string[] { "ShirtTemplate" }));
GlobalVars.PantsTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Pants, "Pants", new AssetCacheDefBasic("Pants", new string[] { "PantsTemplate" }));
GlobalVars.FaceTextureID = NovetusFuncs.GetItemTextureID(GlobalVars.UserCustomization.Face, "Face", new AssetCacheDefBasic("Decal", new string[] { "Texture" }));
GlobalVars.TShirtTextureID = GetItemTextureID(GlobalVars.UserCustomization.TShirt, "TShirt", new AssetCacheDefBasic("ShirtGraphic", new string[] { "Graphic" }));
GlobalVars.ShirtTextureID = GetItemTextureID(GlobalVars.UserCustomization.Shirt, "Shirt", new AssetCacheDefBasic("Shirt", new string[] { "ShirtTemplate" }));
GlobalVars.PantsTextureID = GetItemTextureID(GlobalVars.UserCustomization.Pants, "Pants", new AssetCacheDefBasic("Pants", new string[] { "PantsTemplate" }));
GlobalVars.FaceTextureID = GetItemTextureID(GlobalVars.UserCustomization.Face, "Face", new AssetCacheDefBasic("Decal", new string[] { "Texture" }));
GlobalVars.TShirtTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.TShirtTextureID, "TShirt");
GlobalVars.ShirtTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.ShirtTextureID, "Shirt");
GlobalVars.PantsTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.PantsTextureID, "Pants");
GlobalVars.FaceTextureLocal = NovetusFuncs.GetItemTextureLocalPath(GlobalVars.FaceTextureID, "Face");
GlobalVars.TShirtTextureLocal = GetItemTextureLocalPath(GlobalVars.TShirtTextureID, "TShirt");
GlobalVars.ShirtTextureLocal = GetItemTextureLocalPath(GlobalVars.ShirtTextureID, "Shirt");
GlobalVars.PantsTextureLocal = GetItemTextureLocalPath(GlobalVars.PantsTextureID, "Pants");
GlobalVars.FaceTextureLocal = GetItemTextureLocalPath(GlobalVars.FaceTextureID, "Face");
}
}

View File

@ -81,7 +81,7 @@ namespace Novetus.Core
LoadingURI = 6
}
public static DiscordRPC.EventHandlers handlers;
public static IDiscordRPC.EventHandlers handlers;
#endregion
#region Class definitions
@ -97,7 +97,7 @@ namespace Novetus.Core
public static string DefaultIP = "localhost";
public static int DefaultRobloxPort = 53640;
public static GameServer CurrentServer = new GameServer(DefaultIP, DefaultRobloxPort);
public static string ExternalIP = SecurityFuncs.GetExternalIPAddress();
public static string ExternalIP = NovetusFuncs.GetExternalIPAddress();
public static ScriptType GameOpened = ScriptType.None;
public static string PlayerTripcode = "";
#if LAUNCHER || URI
@ -127,7 +127,7 @@ namespace Novetus.Core
#region Discord Variables
//discord
public static DiscordRPC.RichPresence presence;
public static IDiscordRPC.RichPresence presence;
public static string appid = "505955125727330324";
public static string imagekey_large = "novetus_large";
public static string image_ingame = "ingame_small";

View File

@ -10,15 +10,40 @@ using Titanium.Web.Proxy.Models;
namespace Novetus.Core
{
#region NetFuncs
public static class NetFuncs
{
public static void InitUPnP(EventHandler<DeviceEventArgs> DeviceFound, EventHandler<DeviceEventArgs> DeviceLost)
public static void InitUPnP()
{
if (GlobalVars.UserConfiguration.UPnP)
{
NatUtility.DeviceFound += DeviceFound;
NatUtility.StartDiscovery();
try
{
NatUtility.DeviceFound += DeviceFound;
NatUtility.StartDiscovery();
Util.ConsolePrint("UPnP: Service initialized", 3);
}
catch (Exception ex)
{
Util.LogExceptions(ex);
Util.ConsolePrint("UPnP: Unable to initialize UPnP. Reason - " + ex.Message, 2);
}
}
}
public static void DeviceFound(object sender, DeviceEventArgs args)
{
try
{
INatDevice device = args.Device;
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
Util.ConsolePrint("UPnP: Device '" + IP + "' registered.", 3);
StartUPnP(device, Protocol.Udp, GlobalVars.UserConfiguration.RobloxPort);
StartUPnP(device, Protocol.Tcp, GlobalVars.UserConfiguration.RobloxPort);
}
catch (Exception ex)
{
Util.LogExceptions(ex);
Util.ConsolePrint("UPnP: Unable to register device. Reason - " + ex.Message, 2);
}
}
@ -26,14 +51,25 @@ namespace Novetus.Core
{
if (GlobalVars.UserConfiguration.UPnP)
{
Mapping checker = device.GetSpecificMapping(protocol, port);
int mapPublic = checker.PublicPort;
int mapPrivate = checker.PrivatePort;
if (mapPublic == -1 && mapPrivate == -1)
try
{
Mapping portmap = new Mapping(protocol, port, port);
device.CreatePortMap(portmap);
Mapping checker = device.GetSpecificMapping(protocol, port);
int mapPublic = checker.PublicPort;
int mapPrivate = checker.PrivatePort;
if (mapPublic == -1 && mapPrivate == -1)
{
Mapping portmap = new Mapping(protocol, port, port);
device.CreatePortMap(portmap);
}
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
Util.ConsolePrint("UPnP: Port " + port + " opened on '" + IP + "' (" + protocol.ToString() + ")", 3);
}
catch (Exception ex)
{
Util.LogExceptions(ex);
Util.ConsolePrint("UPnP: Unable to open port mapping. Reason - " + ex.Message, 2);
}
}
}
@ -42,14 +78,25 @@ namespace Novetus.Core
{
if (GlobalVars.UserConfiguration.UPnP)
{
Mapping checker = device.GetSpecificMapping(protocol, port);
int mapPublic = checker.PublicPort;
int mapPrivate = checker.PrivatePort;
if (mapPublic != -1 && mapPrivate != -1)
try
{
Mapping portmap = new Mapping(protocol, port, port);
device.DeletePortMap(portmap);
Mapping checker = device.GetSpecificMapping(protocol, port);
int mapPublic = checker.PublicPort;
int mapPrivate = checker.PrivatePort;
if (mapPublic != -1 && mapPrivate != -1)
{
Mapping portmap = new Mapping(protocol, port, port);
device.DeletePortMap(portmap);
}
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
Util.ConsolePrint("UPnP: Port " + port + " closed on '" + IP + "' (" + protocol.ToString() + ")", 3);
}
catch (Exception ex)
{
Util.LogExceptions(ex);
Util.ConsolePrint("UPnP: Unable to close port mapping. Reason - " + ex.Message, 2);
}
}
}

View File

@ -1,13 +1,10 @@
#region Usings
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Linq;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Net;
#endregion
namespace Novetus.Core
@ -15,127 +12,69 @@ namespace Novetus.Core
#region Novetus Functions
public class NovetusFuncs
{
public static string CopyMapToRBXAsset()
public static int GenerateRandomNumber()
{
string clientcontentpath = GlobalPaths.ClientDir + @"\\" + GlobalVars.UserConfiguration.SelectedClient + @"\\content\\temp.rbxl";
Util.FixedFileCopy(GlobalVars.UserConfiguration.MapPath, clientcontentpath, true);
return GlobalPaths.AltBaseGameDir + "temp.rbxl";
}
CryptoRandom random = new CryptoRandom();
int randomID = 0;
int randIDmode = random.Next(0, 8);
int idlimit = 0;
public static string GetItemTextureLocalPath(string item, string nameprefix)
{
//don't bother, we're offline.
if (GlobalVars.ExternalIP.Equals("localhost"))
return "";
if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%"))
return "";
if (item.Contains("http://") || item.Contains("https://"))
switch (randIDmode)
{
string peram = "id=";
string fullname = nameprefix + "Temp.png";
if (item.Contains(peram))
{
string id = item.After(peram);
fullname = id + ".png";
}
else
{
return item;
}
Downloader download = new Downloader(item, fullname, "", GlobalPaths.AssetCacheDirAssets);
try
{
string path = download.GetFullDLPath();
download.InitDownloadNoDialog(path);
return GlobalPaths.AssetCacheAssetsGameDir + download.fileName;
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
}
case 0:
idlimit = 9;
break;
case 1:
idlimit = 99;
break;
case 2:
idlimit = 999;
break;
case 3:
idlimit = 9999;
break;
case 4:
idlimit = 99999;
break;
case 5:
idlimit = 999999;
break;
case 6:
idlimit = 9999999;
break;
case 7:
idlimit = 99999999;
break;
case 8:
default:
break;
}
return "";
}
public static string GetItemTextureID(string item, string name, AssetCacheDefBasic assetCacheDef)
{
//don't bother, we're offline.
if (GlobalVars.ExternalIP.Equals("localhost"))
return "";
if (!GlobalVars.SelectedClientInfo.CommandLineArgs.Contains("%localizeonlineclothing%"))
return "";
if (item.Contains("http://") || item.Contains("https://"))
if (idlimit > 0)
{
string peram = "id=";
if (!item.Contains(peram))
{
return item;
}
Downloader download = new Downloader(item, name + "Temp.rbxm", "", GlobalPaths.AssetCacheDirAssets);
try
{
string path = download.GetFullDLPath();
download.InitDownloadNoDialog(path);
string oldfile = File.ReadAllText(path);
string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile)).Replace("&#9;", "\t").Replace("#9;", "\t");
XDocument doc = null;
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false };
Stream filestream = Util.GenerateStreamFromString(fixedfile);
using (XmlReader xmlReader = XmlReader.Create(filestream, xmlReaderSettings))
{
xmlReader.MoveToContent();
doc = XDocument.Load(xmlReader);
}
return RobloxXML.GetURLInNodes(doc, assetCacheDef.Class, assetCacheDef.Id[0], item);
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
}
randomID = random.Next(0, idlimit);
}
else
{
randomID = random.Next();
}
return "";
//2147483647 is max id.
return randomID;
}
public static void GeneratePlayerID()
{
int randomID = SecurityFuncs.GenerateRandomNumber();
int randomID = GenerateRandomNumber();
//2147483647 is max id.
GlobalVars.UserConfiguration.UserID = randomID;
}
public static string GenerateAndReturnTripcode()
{
//Powered by https://github.com/davcs86/csharp-uhwid
return UHWIDEngine.AdvancedUid;
}
public static void PingMasterServer(bool online, string reason)
{
if (online)
{
GlobalVars.ServerID = SecurityFuncs.RandomString(30) + SecurityFuncs.GenerateRandomNumber();
GlobalVars.ServerID = RandomString(30) + GenerateRandomNumber();
GlobalVars.PingURL = "http://" + GlobalVars.UserConfiguration.ServerBrowserServerAddress +
"/list.php?name=" + GlobalVars.UserConfiguration.ServerBrowserServerName +
"&ip=" + (!string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : GlobalVars.ExternalIP) +
@ -152,45 +91,42 @@ namespace Novetus.Core
}
Util.ConsolePrint("Pinging master server. " + reason, 4);
Task.Factory.StartNew(() => TryPing());
}
Task.Factory.StartNew(() => {
string response = Util.HttpGet(GlobalVars.PingURL);
private static void TryPing()
{
string response = Util.HttpGet(GlobalVars.PingURL);
if (!string.IsNullOrWhiteSpace(response))
{
Util.ConsolePrint(response, response.Contains("ERROR:") ? 2 : 4);
if (response.Contains("ERROR:"))
if (!string.IsNullOrWhiteSpace(response))
{
GlobalVars.ServerID = "N/A";
Util.ConsolePrint(response, response.Contains("ERROR:") ? 2 : 4);
if (response.Contains("ERROR:"))
{
GlobalVars.ServerID = "N/A";
}
}
}
if (!GlobalVars.ServerID.Equals("N/A"))
{
Util.ConsolePrint("Master server ping successful. Your server's ID is " + GlobalVars.ServerID, 4);
}
if (!GlobalVars.ServerID.Equals("N/A"))
{
Util.ConsolePrint("Master server ping successful. Your server's ID is " + GlobalVars.ServerID, 4);
}
GlobalVars.PingURL = "";
GlobalVars.PingURL = "";
});
}
public static string[] LoadServerInformation()
{
string[] lines1 = {
SecurityFuncs.Base64Encode(!string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : GlobalVars.ExternalIP),
SecurityFuncs.Base64Encode(GlobalVars.UserConfiguration.RobloxPort.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.UserConfiguration.SelectedClient)
SecurityFuncs.Encode(!string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : GlobalVars.ExternalIP),
SecurityFuncs.Encode(GlobalVars.UserConfiguration.RobloxPort.ToString()),
SecurityFuncs.Encode(GlobalVars.UserConfiguration.SelectedClient)
};
string URI = "novetus://" + SecurityFuncs.Base64Encode(string.Join("|", lines1), true);
string URI = "novetus://" + SecurityFuncs.Encode(string.Join("|", lines1), true);
string[] lines2 = {
SecurityFuncs.Base64Encode("localhost"),
SecurityFuncs.Base64Encode(GlobalVars.UserConfiguration.RobloxPort.ToString()),
SecurityFuncs.Base64Encode(GlobalVars.UserConfiguration.SelectedClient)
SecurityFuncs.Encode("localhost"),
SecurityFuncs.Encode(GlobalVars.UserConfiguration.RobloxPort.ToString()),
SecurityFuncs.Encode(GlobalVars.UserConfiguration.SelectedClient)
};
string URI2 = "novetus://" + SecurityFuncs.Base64Encode(string.Join("|", lines2), true);
string URI2 = "novetus://" + SecurityFuncs.Encode(string.Join("|", lines2), true);
GameServer server = new GameServer((!string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : GlobalVars.ExternalIP),
GlobalVars.UserConfiguration.RobloxPort);
string[] text = {
@ -208,16 +144,6 @@ namespace Novetus.Core
return text;
}
public static void CreateTXT()
{
List<string> text = new List<string>();
text.AddRange(LoadServerInformation());
string txt = GlobalPaths.BasePath + "\\" + GlobalPaths.ServerInfoFileName;
File.WriteAllLines(txt, text);
Util.ConsolePrint("Server Information sent to file " + txt, 4);
}
#if LAUNCHER || URI
public static void LaunchCharacterCustomization()
{
@ -293,386 +219,33 @@ namespace Novetus.Core
return finalUrl;
}
public static void SetupAdminPassword()
public static string RandomString(int length = 30, string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz")
{
CryptoRandom random = new CryptoRandom();
string Name1 = SecurityFuncs.GenerateName(random.Next(4, 12));
string Name2 = SecurityFuncs.GenerateName(random.Next(4, 12));
GlobalVars.Important = Name1 + Name2;
GlobalVars.Important2 = SecurityFuncs.Encipher(GlobalVars.Important, random.Next(2, 13));
return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
}
public static string GetExternalIPAddress()
{
string ipAddress;
try
{
ipAddress = new WebClient().DownloadString("https://ipv4.icanhazip.com/").TrimEnd();
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
ipAddress = "localhost";
}
return ipAddress;
}
}
#endregion
#region Roblox Helpers
#region Vector3
public class Vector3
{
public double X;
public double Y;
public double Z;
public Vector3(double aX, double aY, double aZ)
{
X = aX;
Y = aY;
Z = aZ;
}
}
#endregion
#region Roblox File Types
public enum RobloxFileType
{
//RBXL and RBXM
RBXL,
RBXM,
//Items
Hat,
Head,
Face,
TShirt,
Shirt,
Pants,
Script,
HeadNoCustomMesh
}
#endregion
#region Asset Cache Definition
public class AssetCacheDefBasic
{
public AssetCacheDefBasic(string clas, string[] id)
{
Class = clas;
Id = id;
}
public string Class { get; set; }
public string[] Id { get; set; }
}
public class AssetCacheDef : AssetCacheDefBasic
{
public AssetCacheDef(string clas, string[] id, string[] ext,
string[] dir, string[] gamedir) : base(clas, id)
{
Ext = ext;
Dir = dir;
GameDir = gamedir;
}
public string[] Ext { get; set; }
public string[] Dir { get; set; }
public string[] GameDir { get; set; }
}
#endregion
#region Roblox Type Definitions
public struct RobloxDefs
{
//item defs below
public static AssetCacheDef ItemHatFonts
{
get
{
return new AssetCacheDef("SpecialMesh",
new string[] { "MeshId", "TextureId" },
new string[] { ".mesh", ".png" },
new string[] { GlobalPaths.hatdirFonts, GlobalPaths.hatdirTextures },
new string[] { GlobalPaths.hatGameDirFonts, GlobalPaths.hatGameDirTextures });
}
}
public static AssetCacheDef ItemHatSound
{
get
{
return new AssetCacheDef("Sound",
new string[] { "SoundId" },
new string[] { ".wav" },
new string[] { GlobalPaths.hatdirSounds },
new string[] { GlobalPaths.hatGameDirSounds });
}
}
public static AssetCacheDef ItemHatScript
{
get
{
return new AssetCacheDef("Script",
new string[] { "LinkedSource" },
new string[] { ".lua" },
new string[] { GlobalPaths.hatdirScripts },
new string[] { GlobalPaths.hatGameDirScripts });
}
}
public static AssetCacheDef ItemHatLocalScript
{
get
{
return new AssetCacheDef("LocalScript",
new string[] { "LinkedSource" },
new string[] { ".lua" },
new string[] { GlobalPaths.hatdirScripts },
new string[] { GlobalPaths.hatGameDirScripts });
}
}
public static AssetCacheDef ItemHeadFonts
{
get
{
return new AssetCacheDef("SpecialMesh",
new string[] { "MeshId", "TextureId" },
new string[] { ".mesh", ".png" },
new string[] { GlobalPaths.headdirFonts, GlobalPaths.headdirTextures },
new string[] { GlobalPaths.headGameDirFonts, GlobalPaths.headGameDirTextures });
}
}
public static AssetCacheDef ItemFaceTexture
{
get
{
return new AssetCacheDef("Decal",
new string[] { "Texture" },
new string[] { ".png" },
new string[] { GlobalPaths.facedirTextures },
new string[] { GlobalPaths.faceGameDirTextures });
}
}
public static AssetCacheDef ItemShirtTexture
{
get
{
return new AssetCacheDef("Shirt",
new string[] { "ShirtTemplate" },
new string[] { ".png" },
new string[] { GlobalPaths.shirtdirTextures },
new string[] { GlobalPaths.shirtGameDirTextures });
}
}
public static AssetCacheDef ItemTShirtTexture
{
get
{
return new AssetCacheDef("ShirtGraphic",
new string[] { "Graphic" },
new string[] { ".png" },
new string[] { GlobalPaths.tshirtdirTextures },
new string[] { GlobalPaths.tshirtGameDirTextures });
}
}
public static AssetCacheDef ItemPantsTexture
{
get
{
return new AssetCacheDef("Pants",
new string[] { "PantsTemplate" },
new string[] { ".png" },
new string[] { GlobalPaths.pantsdirTextures },
new string[] { GlobalPaths.pantsGameDirTextures });
}
}
}
#endregion
#region XML Types
public enum XMLTypes
{
Token,
Bool,
Float,
String,
Vector2Int16,
Int
}
#endregion
#region Roblox XML Parser
public static class RobloxXML
{
public static void EditRenderSettings(XDocument doc, string setting, string value, XMLTypes type)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants((type != XMLTypes.Vector2Int16 ? type.ToString().ToLower() : "Vector2int16"))
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
if (type != XMLTypes.Vector2Int16)
{
item2.Value = value;
}
else
{
string[] vals = value.Split('x');
var v3 = from nodes in item2.Descendants("X")
select nodes;
foreach (var item3 in v3)
{
item3.Value = vals[0];
}
var v4 = from nodes in item2.Descendants("Y")
select nodes;
foreach (var item4 in v4)
{
item4.Value = vals[1];
}
}
}
}
}
public static bool IsRenderSettingStringValid(XDocument doc, string setting, XMLTypes type)
{
if (type != XMLTypes.String)
return false;
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants(type.ToString().ToLower())
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
return true;
}
}
return false;
}
public static string GetRenderSettings(XDocument doc, string setting, XMLTypes type)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants((type != XMLTypes.Vector2Int16 ? type.ToString().ToLower() : "Vector2int16"))
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
if (type != XMLTypes.Vector2Int16)
{
return item2.Value;
}
else
{
string ValX = "";
string ValY = "";
var v3 = from nodes in item2.Descendants("X")
select nodes;
foreach (var item3 in v3)
{
ValX = item3.Value;
}
var v4 = from nodes in item2.Descendants("Y")
select nodes;
foreach (var item4 in v4)
{
ValY = item4.Value;
}
return ValX + "x" + ValY;
}
}
}
return "";
}
public static string GetURLInNodes(XDocument doc, string itemClassValue, string itemIdValue, string url)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == itemClassValue
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants("Content")
where nodes.Attribute("name").Value == itemIdValue
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in item2.Descendants("url")
select nodes;
foreach (var item3 in v3)
{
if (!item3.Value.Contains("rbxassetid"))
{
if (!item3.Value.Contains("rbxasset"))
{
string oldurl = item3.Value;
string urlFixed = NovetusFuncs.FixURLString(oldurl, url);
string peram = "id=";
if (urlFixed.Contains(peram))
{
return urlFixed;
}
}
}
else
{
string oldurl = item3.Value;
string rbxassetid = "rbxassetid://";
string urlFixed = url + oldurl.After(rbxassetid);
string peram = "id=";
if (urlFixed.Contains(peram))
{
return urlFixed;
}
}
}
}
}
return "";
}
public static string RemoveInvalidXmlChars(string content)
{
return new string(content.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray());
}
public static string ReplaceHexadecimalSymbols(string txt)
{
string r = "[\x00-\x08\x0B\x0C\x0E-\x1F]";
return Regex.Replace(txt, r, "", RegexOptions.Compiled);
}
}
#endregion
#endregion
}

View File

@ -0,0 +1,163 @@
namespace Novetus.Core
{
#region Roblox File Types
public enum RobloxFileType
{
//RBXL and RBXM
RBXL,
RBXM,
//Items
Hat,
Head,
Face,
TShirt,
Shirt,
Pants,
Script,
HeadNoCustomMesh
}
#endregion
#region Asset Cache Definition
public class AssetCacheDefBasic
{
public AssetCacheDefBasic(string clas, string[] id)
{
Class = clas;
Id = id;
}
public string Class { get; set; }
public string[] Id { get; set; }
}
public class AssetCacheDef : AssetCacheDefBasic
{
public AssetCacheDef(string clas, string[] id, string[] ext,
string[] dir, string[] gamedir) : base(clas, id)
{
Ext = ext;
Dir = dir;
GameDir = gamedir;
}
public string[] Ext { get; set; }
public string[] Dir { get; set; }
public string[] GameDir { get; set; }
}
#endregion
#region Roblox Type Definitions
public struct RobloxDefs
{
//item defs below
public static AssetCacheDef ItemHatFonts
{
get
{
return new AssetCacheDef("SpecialMesh",
new string[] { "MeshId", "TextureId" },
new string[] { ".mesh", ".png" },
new string[] { GlobalPaths.hatdirFonts, GlobalPaths.hatdirTextures },
new string[] { GlobalPaths.hatGameDirFonts, GlobalPaths.hatGameDirTextures });
}
}
public static AssetCacheDef ItemHatSound
{
get
{
return new AssetCacheDef("Sound",
new string[] { "SoundId" },
new string[] { ".wav" },
new string[] { GlobalPaths.hatdirSounds },
new string[] { GlobalPaths.hatGameDirSounds });
}
}
public static AssetCacheDef ItemHatScript
{
get
{
return new AssetCacheDef("Script",
new string[] { "LinkedSource" },
new string[] { ".lua" },
new string[] { GlobalPaths.hatdirScripts },
new string[] { GlobalPaths.hatGameDirScripts });
}
}
public static AssetCacheDef ItemHatLocalScript
{
get
{
return new AssetCacheDef("LocalScript",
new string[] { "LinkedSource" },
new string[] { ".lua" },
new string[] { GlobalPaths.hatdirScripts },
new string[] { GlobalPaths.hatGameDirScripts });
}
}
public static AssetCacheDef ItemHeadFonts
{
get
{
return new AssetCacheDef("SpecialMesh",
new string[] { "MeshId", "TextureId" },
new string[] { ".mesh", ".png" },
new string[] { GlobalPaths.headdirFonts, GlobalPaths.headdirTextures },
new string[] { GlobalPaths.headGameDirFonts, GlobalPaths.headGameDirTextures });
}
}
public static AssetCacheDef ItemFaceTexture
{
get
{
return new AssetCacheDef("Decal",
new string[] { "Texture" },
new string[] { ".png" },
new string[] { GlobalPaths.facedirTextures },
new string[] { GlobalPaths.faceGameDirTextures });
}
}
public static AssetCacheDef ItemShirtTexture
{
get
{
return new AssetCacheDef("Shirt",
new string[] { "ShirtTemplate" },
new string[] { ".png" },
new string[] { GlobalPaths.shirtdirTextures },
new string[] { GlobalPaths.shirtGameDirTextures });
}
}
public static AssetCacheDef ItemTShirtTexture
{
get
{
return new AssetCacheDef("ShirtGraphic",
new string[] { "Graphic" },
new string[] { ".png" },
new string[] { GlobalPaths.tshirtdirTextures },
new string[] { GlobalPaths.tshirtGameDirTextures });
}
}
public static AssetCacheDef ItemPantsTexture
{
get
{
return new AssetCacheDef("Pants",
new string[] { "PantsTemplate" },
new string[] { ".png" },
new string[] { GlobalPaths.pantsdirTextures },
new string[] { GlobalPaths.pantsGameDirTextures });
}
}
}
#endregion
}

View File

@ -0,0 +1,203 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
namespace Novetus.Core
{
#region XML Types
public enum XMLTypes
{
Token,
Bool,
Float,
String,
Vector2Int16,
Int
}
#endregion
#region Roblox XML Parser
public static class RobloxXML
{
public static void EditRenderSettings(XDocument doc, string setting, string value, XMLTypes type)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants((type != XMLTypes.Vector2Int16 ? type.ToString().ToLower() : "Vector2int16"))
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
if (type != XMLTypes.Vector2Int16)
{
item2.Value = value;
}
else
{
string[] vals = value.Split('x');
var v3 = from nodes in item2.Descendants("X")
select nodes;
foreach (var item3 in v3)
{
item3.Value = vals[0];
}
var v4 = from nodes in item2.Descendants("Y")
select nodes;
foreach (var item4 in v4)
{
item4.Value = vals[1];
}
}
}
}
}
public static bool IsRenderSettingStringValid(XDocument doc, string setting, XMLTypes type)
{
if (type != XMLTypes.String)
return false;
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants(type.ToString().ToLower())
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
return true;
}
}
return false;
}
public static string GetRenderSettings(XDocument doc, string setting, XMLTypes type)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "RenderSettings"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants((type != XMLTypes.Vector2Int16 ? type.ToString().ToLower() : "Vector2int16"))
where nodes.Attribute("name").Value == setting
select nodes;
foreach (var item2 in v2)
{
if (type != XMLTypes.Vector2Int16)
{
return item2.Value;
}
else
{
string ValX = "";
string ValY = "";
var v3 = from nodes in item2.Descendants("X")
select nodes;
foreach (var item3 in v3)
{
ValX = item3.Value;
}
var v4 = from nodes in item2.Descendants("Y")
select nodes;
foreach (var item4 in v4)
{
ValY = item4.Value;
}
return ValX + "x" + ValY;
}
}
}
return "";
}
public static string GetURLInNodes(XDocument doc, string itemClassValue, string itemIdValue, string url)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == itemClassValue
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants("Content")
where nodes.Attribute("name").Value == itemIdValue
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in item2.Descendants("url")
select nodes;
foreach (var item3 in v3)
{
if (!item3.Value.Contains("rbxassetid"))
{
if (!item3.Value.Contains("rbxasset"))
{
string oldurl = item3.Value;
string urlFixed = NovetusFuncs.FixURLString(oldurl, url);
string peram = "id=";
if (urlFixed.Contains(peram))
{
return urlFixed;
}
}
}
else
{
string oldurl = item3.Value;
string rbxassetid = "rbxassetid://";
string urlFixed = url + oldurl.After(rbxassetid);
string peram = "id=";
if (urlFixed.Contains(peram))
{
return urlFixed;
}
}
}
}
}
return "";
}
public static string RemoveInvalidXmlChars(string content)
{
return new string(content.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray());
}
public static string ReplaceHexadecimalSymbols(string txt)
{
string r = "[\x00-\x08\x0B\x0C\x0E-\x1F]";
return Regex.Replace(txt, r, "", RegexOptions.Compiled);
}
}
#endregion
}

View File

@ -0,0 +1,18 @@
#region Vector3
namespace Novetus.Core
{
public class Vector3
{
public double X;
public double Y;
public double Z;
public Vector3(double aX, double aY, double aZ)
{
X = aX;
Y = aY;
Z = aZ;
}
}
}
#endregion

View File

@ -21,96 +21,35 @@ namespace Novetus.Core
{
[DllImport("user32.dll")]
static extern int SetWindowText(IntPtr hWnd, string text);
public static bool IsElevated { get { return WindowsIdentity.GetCurrent().Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid); } }
public static string RandomString(int length)
public static string Decode(string EncodedData, bool useOldDecoding = false)
{
CryptoRandom random = new CryptoRandom();
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
public static int GenerateRandomNumber()
{
CryptoRandom random = new CryptoRandom();
int randomID = 0;
int randIDmode = random.Next(0, 8);
int idlimit = 0;
switch (randIDmode)
{
case 0:
idlimit = 9;
break;
case 1:
idlimit = 99;
break;
case 2:
idlimit = 999;
break;
case 3:
idlimit = 9999;
break;
case 4:
idlimit = 99999;
break;
case 5:
idlimit = 999999;
break;
case 6:
idlimit = 9999999;
break;
case 7:
idlimit = 99999999;
break;
case 8:
default:
break;
if (useOldDecoding)
{
return DecodeOld(EncodedData);
}
if (idlimit > 0)
{
randomID = random.Next(0, idlimit);
}
else
{
randomID = random.Next();
}
//2147483647 is max id.
return randomID;
}
//these 2 methods are for the clientinfo creator.
public static string Base64DecodeNew(string base64EncodedData)
{
return base64EncodedData.Decrypt();
}
public static string Base64DecodeOld(string base64EncodedData)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
//this is for everything else
public static string Base64Decode(string base64EncodedData)
{
try
{
string decode = base64EncodedData.Decrypt();
string decode = EncodedData.Decrypt();
return decode;
}
catch (Exception)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
return DecodeOld(EncodedData);
}
}
public static string Base64Encode(string plainText, bool oldVer = false)
private static string DecodeOld(string EncodedData)
{
var EncodedBytes = Convert.FromBase64String(EncodedData);
return System.Text.Encoding.UTF8.GetString(EncodedBytes);
}
public static string Encode(string plainText, bool useOldEncoding = false)
{
if (oldVer)
if (useOldEncoding)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
@ -121,98 +60,6 @@ namespace Novetus.Core
}
}
public static bool IsBase64String(string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
public static long UnixTimeNow()
{
var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
return (long)timeSpan.TotalSeconds;
}
public static bool checkClientMD5(string client)
{
if (!GlobalVars.AdminMode)
{
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
{
string rbxexe = "";
string BasePath = GlobalPaths.BasePath + "\\clients\\" + client;
if (GlobalVars.SelectedClientInfo.LegacyMode)
{
rbxexe = BasePath + "\\RobloxApp.exe";
}
else if (GlobalVars.SelectedClientInfo.SeperateFolders)
{
rbxexe = BasePath + "\\client\\RobloxApp_client.exe";
}
else if (GlobalVars.SelectedClientInfo.UsesCustomClientEXEName)
{
rbxexe = BasePath + @"\\" + GlobalVars.SelectedClientInfo.CustomClientEXEName;
}
else
{
rbxexe = BasePath + "\\RobloxApp_client.exe";
}
return CheckMD5(GlobalVars.SelectedClientInfo.ClientMD5, rbxexe);
}
else
{
return true;
}
}
else
{
return true;
}
}
public static bool checkScriptMD5(string client)
{
if (!GlobalVars.AdminMode)
{
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
{
string rbxscript = GlobalPaths.BasePath + "\\clients\\" + client + "\\content\\scripts\\" + GlobalPaths.ScriptName + ".lua";
return CheckMD5(GlobalVars.SelectedClientInfo.ScriptMD5, rbxscript);
}
else
{
return true;
}
}
else
{
return true;
}
}
public static bool CheckMD5(string MD5Hash, string path)
{
if (!File.Exists(path))
return false;
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(path))
{
byte[] hash = md5.ComputeHash(stream);
string clientMD5 = BitConverter.ToString(hash).Replace("-", "");
if (clientMD5.Equals(MD5Hash))
{
return true;
}
else
{
return false;
}
}
}
}
public static string GenerateMD5(string filename)
{
using (var md5 = MD5.Create())
@ -224,18 +71,10 @@ namespace Novetus.Core
}
}
public static bool IsElevated
{
get
{
return WindowsIdentity.GetCurrent().Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid);
}
}
public static string RandomStringTitle()
private static string RandomStringTitle()
{
CryptoRandom random = new CryptoRandom();
return new String(' ', random.Next(20));
return NovetusFuncs.RandomString(random.Next(20), " ");
}
public static void RenameWindow(Process exe, ScriptType type, string clientname, string mapname)
@ -316,51 +155,8 @@ namespace Novetus.Core
}
}
public static string GetExternalIPAddress()
{
string ipAddress;
try
{
ipAddress = new WebClient().DownloadString("https://ipv4.icanhazip.com/").TrimEnd();
}
#if URI || LAUNCHER || BASICLAUNCHER
catch (Exception ex)
{
Util.LogExceptions(ex);
#else
catch (Exception)
{
#endif
ipAddress = "localhost";
}
return ipAddress;
}
//modified from https://stackoverflow.com/questions/14687658/random-name-generator-in-c-sharp
public static string GenerateName(int len)
{
CryptoRandom r = new CryptoRandom();
string[] consonants = { "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "l", "n", "p", "q", "r", "s", "sh", "zh", "t", "v", "w", "x" };
string[] vowels = { "a", "e", "i", "o", "u", "ae", "y" };
string Name = "";
Name += consonants[r.Next(consonants.Length)].ToUpper();
Name += vowels[r.Next(vowels.Length)];
int b = 2; //b tells how many times a new letter has been added. It's 2 right now because the first two letters are already in the name.
while (b < len)
{
Name += consonants[r.Next(consonants.Length)];
b++;
Name += vowels[r.Next(vowels.Length)];
b++;
}
return Name;
}
//https://www.c-sharpcorner.com/article/caesar-cipher-in-c-sharp/
public static char cipher(char ch, int key)
private static char cipher(char ch, int key)
{
if (!char.IsLetter(ch))
{

View File

@ -907,164 +907,6 @@ namespace Novetus.Core
}
#endif
#endregion
#if !BASICLAUNCHER
#region UPnP
public static void InitUPnP()
{
if (GlobalVars.UserConfiguration.UPnP)
{
try
{
NetFuncs.InitUPnP(DeviceFound, DeviceLost);
ConsolePrint("UPnP: Service initialized", 3);
}
catch (Exception ex)
{
LogExceptions(ex);
ConsolePrint("UPnP: Unable to initialize UPnP. Reason - " + ex.Message, 2);
}
}
}
public static void StartUPnP(INatDevice device, Protocol protocol, int port)
{
if (GlobalVars.UserConfiguration.UPnP)
{
try
{
NetFuncs.StartUPnP(device, protocol, port);
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
ConsolePrint("UPnP: Port " + port + " opened on '" + IP + "' (" + protocol.ToString() + ")", 3);
}
catch (Exception ex)
{
LogExceptions(ex);
ConsolePrint("UPnP: Unable to open port mapping. Reason - " + ex.Message, 2);
}
}
}
public static void StopUPnP(INatDevice device, Protocol protocol, int port)
{
if (GlobalVars.UserConfiguration.UPnP)
{
try
{
NetFuncs.StopUPnP(device, protocol, port);
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
ConsolePrint("UPnP: Port " + port + " closed on '" + IP + "' (" + protocol.ToString() + ")", 3);
}
catch (Exception ex)
{
LogExceptions(ex);
ConsolePrint("UPnP: Unable to close port mapping. Reason - " + ex.Message, 2);
}
}
}
public static void DeviceFound(object sender, DeviceEventArgs args)
{
try
{
INatDevice device = args.Device;
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
ConsolePrint("UPnP: Device '" + IP + "' registered.", 3);
StartUPnP(device, Protocol.Udp, GlobalVars.UserConfiguration.RobloxPort);
StartUPnP(device, Protocol.Tcp, GlobalVars.UserConfiguration.RobloxPort);
}
catch (Exception ex)
{
LogExceptions(ex);
ConsolePrint("UPnP: Unable to register device. Reason - " + ex.Message, 2);
}
}
public static void DeviceLost(object sender, DeviceEventArgs args)
{
try
{
INatDevice device = args.Device;
string IP = !string.IsNullOrWhiteSpace(GlobalVars.UserConfiguration.AlternateServerIP) ? GlobalVars.UserConfiguration.AlternateServerIP : device.GetExternalIP().ToString();
ConsolePrint("UPnP: Device '" + IP + "' disconnected.", 3);
StopUPnP(device, Protocol.Udp, GlobalVars.UserConfiguration.RobloxPort);
StopUPnP(device, Protocol.Tcp, GlobalVars.UserConfiguration.RobloxPort);
}
catch (Exception ex)
{
LogExceptions(ex);
ConsolePrint("UPnP: Unable to disconnect device. Reason - " + ex.Message, 2);
}
}
#endregion
#region Discord
public static void ReadyCallback()
{
ConsolePrint("Discord RPC: Ready", 3);
}
public static void DisconnectedCallback(int errorCode, string message)
{
ConsolePrint("Discord RPC: Disconnected. Reason - " + errorCode + ": " + message, 2);
}
public static void ErrorCallback(int errorCode, string message)
{
ConsolePrint("Discord RPC: Error. Reason - " + errorCode + ": " + message, 2);
}
public static void JoinCallback(string secret)
{
}
public static void SpectateCallback(string secret)
{
}
public static void RequestCallback(DiscordRPC.JoinRequest request)
{
}
public static void StartDiscord()
{
if (GlobalVars.UserConfiguration.DiscordPresence)
{
GlobalVars.handlers = new DiscordRPC.EventHandlers();
GlobalVars.handlers.readyCallback = ReadyCallback;
GlobalVars.handlers.disconnectedCallback += DisconnectedCallback;
GlobalVars.handlers.errorCallback += ErrorCallback;
GlobalVars.handlers.joinCallback += JoinCallback;
GlobalVars.handlers.spectateCallback += SpectateCallback;
GlobalVars.handlers.requestCallback += RequestCallback;
DiscordRPC.Initialize(GlobalVars.appid, ref GlobalVars.handlers, true, "");
ConsolePrint("Discord RPC: Initalized", 3);
ClientManagement.UpdateRichPresence(ClientManagement.GetStateForType(GlobalVars.GameOpened), true);
}
}
#endregion
#endif
}
#endregion
#region Tab Control without Header
//https://stackoverflow.com/questions/23247941/c-sharp-how-to-remove-tabcontrol-border
public partial class TabControlWithoutHeader : TabControl
{
public TabControlWithoutHeader()
{
if (!DesignMode) Multiline = true;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x1328 && !DesignMode)
m.Result = new IntPtr(1);
else
base.WndProc(ref m);
}
}
#endregion
}

View File

@ -157,7 +157,7 @@ public class Splash
DateTime now = DateTime.Now;
return text.Replace("%name%", GlobalVars.UserConfiguration.PlayerName)
.Replace("%randomtext%", SecurityFuncs.RandomString(random.Next(2, (GlobalVars.UserConfiguration.LauncherStyle == Settings.Style.Stylish ? 64 : 32))))
.Replace("%randomtext%", NovetusFuncs.RandomString(random.Next(2, (GlobalVars.UserConfiguration.LauncherStyle == Settings.Style.Stylish ? 64 : 32))))
.Replace("%version%", GlobalVars.ProgramInformation.Version)
.Replace("%year%", now.Year.ToString())
.Replace("%day%", now.Day.ToString())

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
//https://stackoverflow.com/questions/23247941/c-sharp-how-to-remove-tabcontrol-border
public partial class TabControlWithoutHeader : TabControl
{
public TabControlWithoutHeader()
{
if (!DesignMode) Multiline = true;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x1328 && !DesignMode)
m.Result = new IntPtr(1);
else
base.WndProc(ref m);
}
}

View File

@ -188,7 +188,7 @@ namespace NovetusLauncher
}
if (GlobalVars.UserConfiguration.DiscordPresence)
{
DiscordRPC.Shutdown();
IDiscordRPC.Shutdown();
}
if (GlobalVars.UserConfiguration.WebProxyEnabled)
{

View File

@ -30,11 +30,36 @@ namespace NovetusLauncher
InitializeComponent();
}
//modified from https://stackoverflow.com/questions/14687658/random-name-generator-in-c-sharp
public static string GenerateName(int len)
{
CryptoRandom r = new CryptoRandom();
string[] consonants = { "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "l", "n", "p", "q", "r", "s", "sh", "zh", "t", "v", "w", "x" };
string[] vowels = { "a", "e", "i", "o", "u", "ae", "y" };
string Name = "";
Name += consonants[r.Next(consonants.Length)].ToUpper();
Name += vowels[r.Next(vowels.Length)];
int b = 2; //b tells how many times a new letter has been added. It's 2 right now because the first two letters are already in the name.
while (b < len)
{
Name += consonants[r.Next(consonants.Length)];
b++;
Name += vowels[r.Next(vowels.Length)];
b++;
}
return Name;
}
private void NovetusConsole_Load(object sender, EventArgs e)
{
Util.ConsolePrint("Novetus version " + GlobalVars.ProgramInformation.Version + " loaded.", 4);
Util.ConsolePrint("Novetus path: " + GlobalPaths.BasePath, 4);
NovetusFuncs.SetupAdminPassword();
CryptoRandom random = new CryptoRandom();
string Name1 = GenerateName(random.Next(4, 12));
string Name2 = GenerateName(random.Next(4, 12));
GlobalVars.Important = Name1 + Name2;
GlobalVars.Important2 = SecurityFuncs.Encipher(GlobalVars.Important, random.Next(2, 13));
if (argList.Length > 0)
{

View File

@ -108,26 +108,26 @@ public partial class ClientinfoEditor : Form
{
IsVersion2 = true;
label9.Text = curversion + " (v" + GlobalVars.ProgramInformation.Version + ")";
ConvertedLine = SecurityFuncs.Base64DecodeNew(file);
ConvertedLine = SecurityFuncs.Decode(file, false);
}
catch (Exception)
{
label9.Text = "v1 (v1.1)";
ConvertedLine = SecurityFuncs.Base64DecodeOld(file);
ConvertedLine = SecurityFuncs.Decode(file, true);
}
string[] result = ConvertedLine.Split('|');
usesplayername = SecurityFuncs.Base64Decode(result[0]);
usesid = SecurityFuncs.Base64Decode(result[1]);
warning = SecurityFuncs.Base64Decode(result[2]);
legacymode = SecurityFuncs.Base64Decode(result[3]);
clientmd5 = SecurityFuncs.Base64Decode(result[4]);
scriptmd5 = SecurityFuncs.Base64Decode(result[5]);
desc = SecurityFuncs.Base64Decode(result[6]);
locked = SecurityFuncs.Base64Decode(result[7]);
fix2007 = SecurityFuncs.Base64Decode(result[8]);
alreadyhassecurity = SecurityFuncs.Base64Decode(result[9]);
cmdargsorclientoptions = SecurityFuncs.Base64Decode(result[10]);
usesplayername = SecurityFuncs.Decode(result[0]);
usesid = SecurityFuncs.Decode(result[1]);
warning = SecurityFuncs.Decode(result[2]);
legacymode = SecurityFuncs.Decode(result[3]);
clientmd5 = SecurityFuncs.Decode(result[4]);
scriptmd5 = SecurityFuncs.Decode(result[5]);
desc = SecurityFuncs.Decode(result[6]);
locked = SecurityFuncs.Decode(result[7]);
fix2007 = SecurityFuncs.Decode(result[8]);
alreadyhassecurity = SecurityFuncs.Decode(result[9]);
cmdargsorclientoptions = SecurityFuncs.Decode(result[10]);
folders = "False";
usescustomname = "False";
customname = "";
@ -137,19 +137,19 @@ public partial class ClientinfoEditor : Form
{
if (IsVersion2)
{
commandargsver2 = SecurityFuncs.Base64Decode(result[11]);
commandargsver2 = SecurityFuncs.Decode(result[11]);
bool parsedValue;
if (bool.TryParse(commandargsver2, out parsedValue))
{
folders = SecurityFuncs.Base64Decode(result[11]);
commandargsver2 = SecurityFuncs.Base64Decode(result[12]);
folders = SecurityFuncs.Decode(result[11]);
commandargsver2 = SecurityFuncs.Decode(result[12]);
bool parsedValue2;
if (bool.TryParse(commandargsver2, out parsedValue2))
{
usescustomname = SecurityFuncs.Base64Decode(result[12]);
customname = SecurityFuncs.Base64Decode(result[13]);
commandargsver2 = SecurityFuncs.Base64Decode(result[14]);
usescustomname = SecurityFuncs.Decode(result[12]);
customname = SecurityFuncs.Decode(result[13]);
commandargsver2 = SecurityFuncs.Decode(result[14]);
}
else
{
@ -248,23 +248,23 @@ public partial class ClientinfoEditor : Form
if (!string.IsNullOrWhiteSpace(SelectedClientInfoPath))
{
string[] lines = {
SecurityFuncs.Base64Encode(SelectedClientInfo.UsesPlayerName.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.UsesID.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.Warning.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.LegacyMode.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.ClientMD5.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.ScriptMD5.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.Description.ToString()),
SecurityFuncs.Base64Encode(Locked.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.Fix2007.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.AlreadyHasSecurity.ToString()),
SecurityFuncs.Base64Encode(((int)SelectedClientInfo.ClientLoadOptions).ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.SeperateFolders.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.UsesCustomClientEXEName.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.CustomClientEXEName.ToString()),
SecurityFuncs.Base64Encode(SelectedClientInfo.CommandLineArgs.ToString())
SecurityFuncs.Encode(SelectedClientInfo.UsesPlayerName.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.UsesID.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.Warning.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.LegacyMode.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.ClientMD5.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.ScriptMD5.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.Description.ToString()),
SecurityFuncs.Encode(Locked.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.Fix2007.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.AlreadyHasSecurity.ToString()),
SecurityFuncs.Encode(((int)SelectedClientInfo.ClientLoadOptions).ToString()),
SecurityFuncs.Encode(SelectedClientInfo.SeperateFolders.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.UsesCustomClientEXEName.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.CustomClientEXEName.ToString()),
SecurityFuncs.Encode(SelectedClientInfo.CommandLineArgs.ToString())
};
File.WriteAllText(SelectedClientInfoPath + "\\clientinfo.nov", SecurityFuncs.Base64Encode(string.Join("|", lines)));
File.WriteAllText(SelectedClientInfoPath + "\\clientinfo.nov", SecurityFuncs.Encode(string.Join("|", lines)));
label9.Text = curversion + " (v" + GlobalVars.ProgramInformation.Version + ")";

View File

@ -145,11 +145,11 @@ namespace NovetusLauncher
try
{
string[] initialLine = line.Split('|');
DecodedLine = SecurityFuncs.Base64DecodeOld(initialLine[1]);
DecodedLine = SecurityFuncs.Decode(initialLine[1], true);
}
catch (Exception)
{
DecodedLine = SecurityFuncs.Base64DecodeOld(line);
DecodedLine = SecurityFuncs.Decode(line, true);
}
string[] serverInfo = DecodedLine.Split('|');
@ -253,11 +253,11 @@ namespace NovetusLauncher
{
public ServerBrowserDef(string name, string ip, string port, string client, string version)
{
ServerName = SecurityFuncs.Base64DecodeOld(name);
ServerIP = SecurityFuncs.Base64DecodeOld(ip);
ServerPort = Convert.ToInt32(SecurityFuncs.Base64DecodeOld(port));
ServerClient = SecurityFuncs.Base64DecodeOld(client);
ServerVersion = SecurityFuncs.Base64DecodeOld(version);
ServerName = SecurityFuncs.Decode(name, true);
ServerIP = SecurityFuncs.Decode(ip, true);
ServerPort = Convert.ToInt32(SecurityFuncs.Decode(port, true));
ServerClient = SecurityFuncs.Decode(client, true);
ServerVersion = SecurityFuncs.Decode(version, true);
}
public bool IsValid()

View File

@ -21,6 +21,9 @@
<SignAssembly>False</SignAssembly>
<DelaySign>False</DelaySign>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<IsWebBootstrapper>false</IsWebBootstrapper>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -33,11 +36,8 @@
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
@ -96,6 +96,11 @@
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference>
@ -109,10 +114,21 @@
<Reference Include="PresentationFramework" />
<Reference Include="ReachFramework" />
<Reference Include="System" />
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" />
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
@ -120,29 +136,136 @@
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security.AccessControl, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel" />
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
@ -154,6 +277,11 @@
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Titanium.Web.Proxy, Version=1.0.1.0, Culture=neutral, PublicKeyToken=8e41e1f1c790d7cf, processorArchitecture=MSIL">
<HintPath>..\packages\Titanium.Web.Proxy.3.2.0\lib\net461\Titanium.Web.Proxy.dll</HintPath>
</Reference>
@ -186,6 +314,9 @@
<Compile Include="Classes\Launcher\SplashLoader.cs" />
<Compile Include="Classes\Launcher\TreeNodeHelper.cs" />
<Compile Include="Classes\LocalVars.cs" />
<Compile Include="Classes\TabControlWithoutHeader.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Forms\Decoder.cs">
<SubType>Form</SubType>
</Compile>

View File

@ -97,8 +97,8 @@ namespace NovetusLauncher
FileManagement.CreateInitialFileListIfNeededMulti();
FileManagement.CreateAssetCacheDirectories();
Util.InitUPnP();
Util.StartDiscord();
NetFuncs.InitUPnP();
DiscordRPC.StartDiscord();
}
static void Run(string[] args, bool sdk = false, CMDState state = CMDState.CMDOpen)

View File

@ -2,16 +2,62 @@
<packages>
<package id="BrotliSharpLib" version="0.3.3" targetFramework="net48" />
<package id="DotNetZip" version="1.16.0" targetFramework="net40" />
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net48" />
<package id="Mono.Nat" version="3.0.4" targetFramework="net48" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net48" />
<package id="NLog" version="5.1.0" targetFramework="net48" />
<package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
<package id="System.Console" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
<package id="System.Net.Http" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
<package id="System.Security.AccessControl" version="6.0.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net48" />
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
<package id="Titanium.Web.Proxy" version="3.2.0" targetFramework="net48" />
</packages>

View File

@ -82,11 +82,11 @@ namespace NovetusURI
try
{
string ExtractedArg = LocalVars.SharedArgs.Replace("novetus://", "").Replace("novetus", "").Replace(":", "").Replace("/", "").Replace("?", "");
string ConvertedArg = SecurityFuncs.Base64DecodeOld(ExtractedArg);
string ConvertedArg = SecurityFuncs.Decode(ExtractedArg, true);
string[] SplitArg = ConvertedArg.Split('|');
string ip = SecurityFuncs.Base64Decode(SplitArg[0]);
string port = SecurityFuncs.Base64Decode(SplitArg[1]);
string client = SecurityFuncs.Base64Decode(SplitArg[2]);
string ip = SecurityFuncs.Decode(SplitArg[0]);
string port = SecurityFuncs.Decode(SplitArg[1]);
string client = SecurityFuncs.Decode(SplitArg[2]);
GlobalVars.UserConfiguration.SelectedClient = client;
GlobalVars.CurrentServer.ServerIP = ip;
GlobalVars.CurrentServer.ServerPort = Convert.ToInt32(port);

View File

@ -13,53 +13,6 @@ namespace NovetusURI
#region URI Loader
public partial class LoaderForm : Form
{
#region Private Variables
private DiscordRPC.EventHandlers handlers;
#endregion
#region Discord
public void ReadyCallback()
{
}
public void DisconnectedCallback(int errorCode, string message)
{
}
public void ErrorCallback(int errorCode, string message)
{
}
public void JoinCallback(string secret)
{
}
public void SpectateCallback(string secret)
{
}
public void RequestCallback(DiscordRPC.JoinRequest request)
{
}
void StartDiscord()
{
if (GlobalVars.UserConfiguration.DiscordPresence)
{
handlers = new DiscordRPC.EventHandlers();
handlers.readyCallback = ReadyCallback;
handlers.disconnectedCallback += DisconnectedCallback;
handlers.errorCallback += ErrorCallback;
handlers.joinCallback += JoinCallback;
handlers.spectateCallback += SpectateCallback;
handlers.requestCallback += RequestCallback;
DiscordRPC.Initialize(GlobalVars.appid, ref handlers, true, "");
ClientManagement.UpdateRichPresence(GlobalVars.LauncherState.LoadingURI, true);
}
}
#endregion
#region Constructor
public LoaderForm()
{
@ -131,7 +84,7 @@ namespace NovetusURI
if (GlobalVars.UserConfiguration.DiscordPresence)
{
ClientManagement.UpdateStatus(label1, "Starting Discord Rich Presence...");
StartDiscord();
DiscordRPC.StartDiscord();
}
ClientManagement.UpdateStatus(label1, "Launching Game...");
LocalFuncs.SetupURIValues();

View File

@ -53,6 +53,11 @@
<Reference Include="BrotliSharpLib, Version=0.3.2.0, Culture=neutral, PublicKeyToken=3f4e2a1cd615fcb7, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\BrotliSharpLib.0.3.3\lib\net451\BrotliSharpLib.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference>
@ -63,32 +68,151 @@
<HintPath>..\packages\NLog.5.1.0\lib\net46\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" />
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security.AccessControl, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel" />
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>C:\Users\Bitl\Documents\GitHub\Novetus\Novetus_src\Novetus\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
@ -102,6 +226,11 @@
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="Titanium.Web.Proxy, Version=1.0.1.0, Culture=neutral, PublicKeyToken=8e41e1f1c790d7cf, processorArchitecture=MSIL">
<HintPath>..\packages\Titanium.Web.Proxy.3.2.0\lib\net461\Titanium.Web.Proxy.dll</HintPath>
</Reference>
@ -126,6 +255,10 @@
<Link>Forms\CharCustom\Extended\CharacterCustomizationExtended.designer.cs</Link>
<DependentUpon>CharacterCustomizationExtended.cs</DependentUpon>
</Compile>
<Compile Include="..\NovetusLauncher\Classes\TabControlWithoutHeader.cs">
<Link>Classes\TabControlWithoutHeader.cs</Link>
<SubType>Component</SubType>
</Compile>
<Compile Include="Classes\LocalFuncs.cs" />
<Compile Include="Classes\URIReg.cs" />
<Compile Include="Forms\InstallForm.cs">

View File

@ -1,16 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BrotliSharpLib" version="0.3.3" targetFramework="net48" />
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net48" />
<package id="Mono.Nat" version="3.0.4" targetFramework="net48" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net48" />
<package id="NLog" version="5.1.0" targetFramework="net48" />
<package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />
<package id="System.Console" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net48" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
<package id="System.Net.Http" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
<package id="System.Security.AccessControl" version="6.0.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net48" />
<package id="System.Threading" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net48" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net48" />
<package id="Titanium.Web.Proxy" version="3.2.0" targetFramework="net48" />
</packages>

View File

@ -4,16 +4,11 @@
|Stable Versions|Supported|
|-------|-------|
|1.2.4.1|:white_check_mark:|
|1.2.4.1 (lite) |:white_check_mark:|
| 1.3 |:white_check_mark:|
|Snapshots|Supported|
|-------|-------|
| 1.2.5 |:white_check_mark:|
|In Development|Supported|
|-------|-------|
| 1.3 (1.2.5 Refresh)|:white_check_mark:|
| 1.3 |:white_check_mark:|
## Reporting a Vulnerability

View File

@ -4,6 +4,7 @@ Enhancements:
- Merged some static APIs into one extension.
- Restored the Help button functionality.
- All clients now work properly with the Web Proxy.
- Rearraged folder layout.
----------------------------------------------------------------------------
1.3 Snapshot v22.8412.32591.1
Enhancements: