Initial commit
This commit is contained in:
commit
2fd0d633c7
|
|
@ -0,0 +1,2 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
.vs/
|
||||
AssetDownloader/bin/
|
||||
AssetDownloader/obj/
|
||||
packages/
|
||||
VanillaLauncher/bin/
|
||||
VanillaLauncher/obj/
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
AssetDownloader/bin
|
||||
AssetDownloader/obj
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
<?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>{50457F32-C740-4417-B6D1-5E746A3E645F}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>AssetDownloader</RootNamespace>
|
||||
<AssemblyName>AssetDownloader</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
using System.Web.Script.Serialization;
|
||||
using System.Net.Http;
|
||||
using System.Security.Policy;
|
||||
using System.IO.Compression;
|
||||
|
||||
namespace Aphylla
|
||||
{
|
||||
|
||||
class AssetInfo
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string imageUrl { get; set; }
|
||||
public string location { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Program
|
||||
{
|
||||
public string thumbnailurl { get; set; }
|
||||
static void Main(string[] args)
|
||||
{
|
||||
ServicePointManager.Expect100Continue = true;
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
|
||||
if (args.Length <= 0)
|
||||
{
|
||||
Console.WriteLine("run with asset id. example: Aphylla.exe 1804739");
|
||||
}
|
||||
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
|
||||
{
|
||||
client.BaseAddress = new Uri("https://economy.roblox.com/v2/assets/" + args[0] + "/details");
|
||||
HttpResponseMessage response = client.GetAsync("").Result;
|
||||
response.EnsureSuccessStatusCode();
|
||||
string result = response.Content.ReadAsStringAsync().Result;
|
||||
JavaScriptSerializer js = new JavaScriptSerializer();
|
||||
AssetInfo assetInfo = js.Deserialize<AssetInfo>(result);
|
||||
string name = assetInfo.Name;
|
||||
AssetInfo assetInfoFile = new AssetInfo()
|
||||
{
|
||||
Name = name
|
||||
};
|
||||
|
||||
string jsonData = js.Serialize(assetInfoFile);
|
||||
File.WriteAllText(args[0] + ".info.json", jsonData);
|
||||
}
|
||||
|
||||
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
|
||||
{
|
||||
client.BaseAddress = new Uri("https://thumbnails.roblox.com/v1/assets?assetIds=" + args[0] + "&returnPolicy=PlaceHolder&size=250x250&format=Png&isCircular=false");
|
||||
HttpResponseMessage response = client.GetAsync("").Result;
|
||||
response.EnsureSuccessStatusCode();
|
||||
string result = response.Content.ReadAsStringAsync().Result;
|
||||
// File.WriteAllText("debug.txt", result);
|
||||
JavaScriptSerializer js = new JavaScriptSerializer();
|
||||
AssetInfo assetthumb = js.Deserialize<AssetInfo>("{ " + result.Split(",".ToCharArray())[2] + " }");
|
||||
downloadThumbnail(assetthumb.imageUrl);
|
||||
|
||||
}
|
||||
|
||||
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
|
||||
{
|
||||
client.BaseAddress = new Uri("https://assetdelivery.roblox.com/v2/asset/?id=" + args[0] + "&version=1");
|
||||
HttpResponseMessage response = client.GetAsync("").Result;
|
||||
response.EnsureSuccessStatusCode();
|
||||
string result = response.Content.ReadAsStringAsync().Result;
|
||||
// File.WriteAllText("debug.txt", result);
|
||||
JavaScriptSerializer js = new JavaScriptSerializer();
|
||||
AssetInfo asset = js.Deserialize<AssetInfo>("{ " + result.Split(",".ToCharArray())[1].Replace(']', ' ')); //Not how this should be done, but it's ok for now
|
||||
downloadAssetUrl(asset.location);
|
||||
}
|
||||
|
||||
void downloadThumbnail(string thumburl)
|
||||
{
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.DownloadFile(thumburl, args[0] + ".thumb.png");
|
||||
}
|
||||
void downloadAssetUrl(string assetUrl)
|
||||
{
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.Headers.Add("Accept-Encoding", "");
|
||||
var responseStream = new GZipStream(webClient.OpenRead(assetUrl), CompressionMode.Decompress);
|
||||
StreamWriter asset = new StreamWriter($"{Directory.GetCurrentDirectory()}\\{args[0]}");
|
||||
MemoryStream stream = new MemoryStream();
|
||||
responseStream.CopyTo(stream);
|
||||
asset.BaseStream.Write(stream.ToArray(), 0, stream.ToArray().Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
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("AssetDownloader")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("AssetDownloader")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[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("50457f32-c740-4417-b6d1-5e746a3e645f")]
|
||||
|
||||
// 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.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
|
||||
namespace Planifolia
|
||||
{
|
||||
partial class Planifolia
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label1.Location = new System.Drawing.Point(12, 36);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(121, 30);
|
||||
this.label1.TabIndex = 1;
|
||||
this.label1.Text = "Binary type:";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label2.Location = new System.Drawing.Point(12, 85);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(147, 30);
|
||||
this.label2.TabIndex = 2;
|
||||
this.label2.Text = "Binary version:";
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
this.textBox1.AllowDrop = true;
|
||||
this.textBox1.Location = new System.Drawing.Point(-2, 242);
|
||||
this.textBox1.Multiline = true;
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(362, 222);
|
||||
this.textBox1.TabIndex = 3;
|
||||
this.textBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.dropFile);
|
||||
this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.dropFile);
|
||||
//
|
||||
// Planifolia
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Name = "Planifolia";
|
||||
this.Text = "Planifolia";
|
||||
this.Load += new System.EventHandler(this.Planifolia_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
namespace Planifolia
|
||||
{
|
||||
public partial class Planifolia : Form
|
||||
{
|
||||
public Planifolia()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
}
|
||||
private void dropFile(object sender, DragEventArgs e)
|
||||
{
|
||||
var file = e.Data.GetData(DataFormats.FileDrop);
|
||||
string[] ohio = file as string[];
|
||||
var versionInfo = FileVersionInfo.GetVersionInfo(ohio[0]);
|
||||
string version = versionInfo.FileVersion;
|
||||
label2.Text = "Binary version: " + version;
|
||||
getBinaryType(ohio[0]);
|
||||
}
|
||||
|
||||
private void getBinaryType(string filepath)
|
||||
{
|
||||
|
||||
var versionInfo = FileVersionInfo.GetVersionInfo(filepath);
|
||||
if (versionInfo.FileDescription == "ROBLOX Game")
|
||||
{
|
||||
label1.Text = "Binary type: RobloxApp or RobloxPlayer";
|
||||
}
|
||||
if (versionInfo.FileDescription == "ROBLOX Game Client")
|
||||
{
|
||||
label1.Text = "Binary type: RobloxPlayerBeta";
|
||||
}
|
||||
else
|
||||
{
|
||||
label1.Text = "Binary type: " + versionInfo.FileDescription;
|
||||
patchFile(filepath);
|
||||
}
|
||||
|
||||
}
|
||||
private void Planifolia_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
private void patchFile(string filePath)
|
||||
{
|
||||
var file = File.ReadAllText(filePath);
|
||||
string hexString = "829B006A038B";
|
||||
int length = hexString.Length;
|
||||
byte[] bytes = new byte[length / 2];
|
||||
|
||||
for (int i = 0; i < length; i += 2)
|
||||
{
|
||||
bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
|
||||
}
|
||||
|
||||
char[] chars = Encoding.GetEncoding(932).GetChars(bytes);
|
||||
var ohio = (char)Int32.Parse("829B006A008B", NumberStyles.AllowHexSpecifier);
|
||||
|
||||
File.WriteAllText(filePath, file.Replace(chars[0] + chars[1] + chars[2] + chars[4] + chars[5] + chars[6], ohio));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
<?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>{E7E80421-2366-4158-9B38-0F4229AB62BF}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>Planifolia</RootNamespace>
|
||||
<AssemblyName>Planifolia</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</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.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Planifolia.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Planifolia.Designer.cs">
|
||||
<DependentUpon>Planifolia.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Planifolia.resx">
|
||||
<DependentUpon>Planifolia.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>
|
||||
</Compile>
|
||||
<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>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<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" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Planifolia
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new Planifolia());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
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("Planifolia")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Planifolia")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[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("e7e80421-2366-4158-9b38-0f4229ab62bf")]
|
||||
|
||||
// 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.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <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 Planifolia.Properties
|
||||
{
|
||||
/// <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", "4.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 ((resourceMan == null))
|
||||
{
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Planifolia.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?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>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <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 Planifolia.Properties
|
||||
{
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?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.
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
||||
Binary file not shown.
|
|
@ -0,0 +1,4 @@
|
|||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
892380c4dcf55b90dcd2f55ac7afaebb31573f97
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\bin\Debug\Planifolia.exe.config
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\bin\Debug\Planifolia.exe
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\bin\Debug\Planifolia.pdb
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.csproj.AssemblyReference.cache
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.Planifolia.resources
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.Properties.Resources.resources
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.csproj.GenerateResource.cache
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.csproj.CoreCompileInputs.cache
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.exe
|
||||
C:\Users\beaup\OneDrive\Documents\GitHub\VanillaLauncher\Planifolia\obj\Debug\Planifolia.pdb
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,4 @@
|
|||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Vanilla
|
||||
Vanilla, a launcher for an old brick-building game
|
||||
|
||||
# License
|
||||
read license.md. if you modify Vanilla and intend on releasing it you must do so under the GPL v3 license.
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.33920.266
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VanillaLauncher", "VanillaLauncher\VanillaLauncher.csproj", "{F60C2EED-2270-4387-90BF-A1DAE0AB3236}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aphylla", "AssetDownloader\Aphylla.csproj", "{50457F32-C740-4417-B6D1-5E746A3E645F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F60C2EED-2270-4387-90BF-A1DAE0AB3236}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F60C2EED-2270-4387-90BF-A1DAE0AB3236}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F60C2EED-2270-4387-90BF-A1DAE0AB3236}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F60C2EED-2270-4387-90BF-A1DAE0AB3236}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{50457F32-C740-4417-B6D1-5E746A3E645F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{50457F32-C740-4417-B6D1-5E746A3E645F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{50457F32-C740-4417-B6D1-5E746A3E645F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{50457F32-C740-4417-B6D1-5E746A3E645F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {4E8CF918-533A-42F2-9DB3-16B48D05AAE2}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
VanillaLauncher/bin
|
||||
VanillaLauncher/obj
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
|
||||
</startup>
|
||||
<entityFramework>
|
||||
<providers>
|
||||
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||
</providers>
|
||||
</entityFramework>
|
||||
<system.data>
|
||||
<DbProviderFactories>
|
||||
<remove invariant="System.Data.SQLite.EF6" />
|
||||
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
|
||||
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
|
||||
</system.data>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace VanillaLauncher.Classes
|
||||
{
|
||||
class ColorLoader
|
||||
{
|
||||
void loadFile()
|
||||
{
|
||||
var filepath = "files\\colors.txt";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DiscordRPC;
|
||||
|
||||
namespace VanillaLauncher.Classes
|
||||
{
|
||||
|
||||
class RichPresence
|
||||
{
|
||||
public DiscordRpcClient client;
|
||||
|
||||
public string Details { get; private set; }
|
||||
public string State { get; private set; }
|
||||
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
//using System.Net.Http;
|
||||
using System.Net;
|
||||
using System.Xml;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
namespace VanillaLauncher.Classes
|
||||
{
|
||||
class SOAP
|
||||
{
|
||||
public static void Execute(string Client)
|
||||
{
|
||||
HttpWebRequest httpWebRequest = CreateWebRequest();
|
||||
httpWebRequest.Timeout = 1000;
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
xmlDocument.LoadXml(File.ReadAllText("clients\\" + Client + "\\RCC\\SOAP.xml"));
|
||||
using (Stream outStream = httpWebRequest.GetRequestStream())
|
||||
{
|
||||
xmlDocument.Save(outStream);
|
||||
}
|
||||
// have to get response for some reason, but it errors or times out so we do this
|
||||
try
|
||||
{
|
||||
using (WebResponse webResponse = httpWebRequest.GetResponse())
|
||||
{
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static HttpWebRequest CreateWebRequest()
|
||||
{
|
||||
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:64989");
|
||||
httpWebRequest.Headers.Add("SOAP:Action");
|
||||
httpWebRequest.ContentType = "application/xml;charset=\"utf-8\"";
|
||||
httpWebRequest.Accept = "*/*";
|
||||
httpWebRequest.Method = "POST";
|
||||
return httpWebRequest;
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1 @@
|
|||
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BlueMystic
|
||||
{
|
||||
public class FlatTabControl : TabControl
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Description("Color for a decorative line"), Category("Appearance")]
|
||||
public Color LineColor { get; set; } = SystemColors.Highlight;
|
||||
|
||||
[Description("Color for all Borders"), Category("Appearance")]
|
||||
public Color BorderColor { get; set; } = SystemColors.ControlDark;
|
||||
|
||||
[Description("Back color for selected Tab"), Category("Appearance")]
|
||||
public Color SelectTabColor { get; set; } = SystemColors.ControlLight;
|
||||
|
||||
[Description("Fore Color for Selected Tab"), Category("Appearance")]
|
||||
public Color SelectedForeColor { get; set; } = SystemColors.HighlightText;
|
||||
|
||||
[Description("Back Color for un-selected tabs"), Category("Appearance")]
|
||||
public Color TabColor { get; set; } = SystemColors.ControlLight;
|
||||
|
||||
[Description("Background color for the whole control"), Category("Appearance"), Browsable(true)]
|
||||
public override Color BackColor { get; set; } = SystemColors.Control;
|
||||
|
||||
[Description("Fore Color for all Texts"), Category("Appearance")]
|
||||
public override Color ForeColor { get; set; } = SystemColors.ControlText;
|
||||
|
||||
#endregion
|
||||
|
||||
public FlatTabControl()
|
||||
{
|
||||
try
|
||||
{
|
||||
Appearance = TabAppearance.Buttons;
|
||||
DrawMode = TabDrawMode.Normal;
|
||||
ItemSize = new Size(0, 0);
|
||||
SizeMode = TabSizeMode.Fixed;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
protected override void InitLayout()
|
||||
{
|
||||
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
||||
SetStyle(ControlStyles.DoubleBuffer, true);
|
||||
SetStyle(ControlStyles.ResizeRedraw, true);
|
||||
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
||||
SetStyle(ControlStyles.UserPaint, true);
|
||||
base.InitLayout();
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
DrawControl(e.Graphics);
|
||||
}
|
||||
|
||||
internal void DrawControl(Graphics g)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Visible)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Rectangle clientRectangle = ClientRectangle;
|
||||
clientRectangle.Inflate(2, 2);
|
||||
|
||||
// Whole Control Background:
|
||||
using (Brush bBackColor = new SolidBrush(BackColor))
|
||||
{
|
||||
g.FillRectangle(bBackColor, ClientRectangle);
|
||||
}
|
||||
|
||||
Region region = g.Clip;
|
||||
|
||||
for (int i = 0; i < TabCount; i++)
|
||||
{
|
||||
DrawTab(g, TabPages[i], i);
|
||||
TabPages[i].BackColor = TabColor;
|
||||
}
|
||||
|
||||
g.Clip = region;
|
||||
|
||||
using (Pen border = new Pen(BorderColor))
|
||||
{
|
||||
g.DrawRectangle(border, clientRectangle);
|
||||
|
||||
if (SelectedTab != null)
|
||||
{
|
||||
clientRectangle.Offset(1, 1);
|
||||
clientRectangle.Width -= 2;
|
||||
clientRectangle.Height -= 2;
|
||||
g.DrawRectangle(border, clientRectangle);
|
||||
clientRectangle.Width -= 1;
|
||||
clientRectangle.Height -= 1;
|
||||
g.DrawRectangle(border, clientRectangle);
|
||||
}
|
||||
}
|
||||
|
||||
// a decorative line on top of pages:
|
||||
using (Brush bLineColor = new SolidBrush(LineColor))
|
||||
{
|
||||
Rectangle rectangle = ClientRectangle;
|
||||
rectangle.Height = 1;
|
||||
rectangle.Y = 25;
|
||||
g.FillRectangle(bLineColor, rectangle);
|
||||
|
||||
rectangle = ClientRectangle;
|
||||
rectangle.Height = 1;
|
||||
rectangle.Y = 26;
|
||||
g.FillRectangle(bLineColor, rectangle);
|
||||
}
|
||||
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
internal void DrawTab(Graphics g, TabPage customTabPage, int nIndex)
|
||||
{
|
||||
Rectangle tabRect = GetTabRect(nIndex);
|
||||
Rectangle tabTextRect = GetTabRect(nIndex);
|
||||
bool isSelected = (SelectedIndex == nIndex);
|
||||
Point[] points;
|
||||
|
||||
if (Alignment == TabAlignment.Top)
|
||||
{
|
||||
points = new[]
|
||||
{
|
||||
new Point(tabRect.Left, tabRect.Bottom),
|
||||
new Point(tabRect.Left, tabRect.Top + 0),
|
||||
new Point(tabRect.Left + 0, tabRect.Top),
|
||||
new Point(tabRect.Right - 0, tabRect.Top),
|
||||
new Point(tabRect.Right, tabRect.Top + 0),
|
||||
new Point(tabRect.Right, tabRect.Bottom),
|
||||
new Point(tabRect.Left, tabRect.Bottom)
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
points = new[]
|
||||
{
|
||||
new Point(tabRect.Left, tabRect.Top),
|
||||
new Point(tabRect.Right, tabRect.Top),
|
||||
new Point(tabRect.Right, tabRect.Bottom - 0),
|
||||
new Point(tabRect.Right - 0, tabRect.Bottom),
|
||||
new Point(tabRect.Left + 0, tabRect.Bottom),
|
||||
new Point(tabRect.Left, tabRect.Bottom - 0),
|
||||
new Point(tabRect.Left, tabRect.Top)
|
||||
};
|
||||
}
|
||||
|
||||
// Draws the Tab Header:
|
||||
Color HeaderColor = isSelected ? SelectTabColor : BackColor;
|
||||
using (Brush brush = new SolidBrush(HeaderColor))
|
||||
{
|
||||
g.FillPolygon(brush, points);
|
||||
brush.Dispose();
|
||||
g.DrawPolygon(new Pen(HeaderColor), points);
|
||||
}
|
||||
|
||||
Rectangle rectangleF = tabTextRect;
|
||||
rectangleF.Y += 2;
|
||||
|
||||
TextRenderer.DrawText(g, customTabPage.Text, Font, rectangleF,
|
||||
isSelected ? SelectedForeColor : ForeColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<Costura IncludeDebugSymbols="false">
|
||||
<ExcludeAssemblies></ExcludeAssemblies>
|
||||
</Costura>
|
||||
</Weavers>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
|
||||
<xs:element name="Weavers">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Costura" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="IncludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
<xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeRuntimeReferences" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls if runtime assemblies are also embedded.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="UseRuntimeReferencePaths" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="DisableCompression" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="DisableCleanup" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="ExcludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="IncludeRuntimeAssemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="PreloadOrder" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Titanium.Web.Proxy.Examples.Basic.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Adapted from
|
||||
/// http://stackoverflow.com/questions/13656846/how-to-programmatic-disable-c-sharp-console-applications-quick-edit-mode
|
||||
/// </summary>
|
||||
internal static class ConsoleHelper
|
||||
{
|
||||
private const uint EnableQuickEdit = 0x0040;
|
||||
|
||||
// STD_INPUT_HANDLE (DWORD): -10 is the standard input device.
|
||||
private const int StdInputHandle = -10;
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
private static extern IntPtr GetStdHandle(int nStdHandle);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
|
||||
|
||||
internal static bool DisableQuickEditMode()
|
||||
{
|
||||
var consoleHandle = GetStdHandle(StdInputHandle);
|
||||
|
||||
// get current console mode
|
||||
if (!GetConsoleMode(consoleHandle, out var consoleMode))
|
||||
// ERROR: Unable to get console mode.
|
||||
return false;
|
||||
|
||||
// Clear the quick edit bit in the mode flags
|
||||
consoleMode &= ~EnableQuickEdit;
|
||||
|
||||
// set the new mode
|
||||
if (!SetConsoleMode(consoleHandle, consoleMode))
|
||||
// ERROR: Unable to set console mode
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Titanium.Web.Proxy;
|
||||
using Titanium.Web.Proxy.EventArguments;
|
||||
using Titanium.Web.Proxy.Exceptions;
|
||||
using Titanium.Web.Proxy.Helpers;
|
||||
using Titanium.Web.Proxy.Http;
|
||||
using Titanium.Web.Proxy.Models;
|
||||
using Titanium.Web.Proxy.StreamExtended.Network;
|
||||
|
||||
|
||||
namespace VanillaLauncher.MobileProxy
|
||||
{
|
||||
public class Main
|
||||
{
|
||||
|
||||
|
||||
public void startProxy()
|
||||
{
|
||||
|
||||
var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000, true);
|
||||
var proxyServer = new ProxyServer();
|
||||
proxyServer.CertificateManager.CertificateEngine = Titanium.Web.Proxy.Network.CertificateEngine.DefaultWindows;
|
||||
proxyServer.CertificateManager.EnsureRootCertificate();
|
||||
// locally trust root certificate used by this proxy
|
||||
//proxyServer.CertificateManager.TrustRootCertificate(true);
|
||||
|
||||
// optionally set the Certificate Engine
|
||||
// Under Mono only BouncyCastle will be supported
|
||||
//proxyServer.CertificateManager.CertificateEngine = Network.CertificateEngine.BouncyCastle;
|
||||
//proxyServer.BeforeRequest += OnRequest;
|
||||
//proxyServer.BeforeResponse += OnResponse;
|
||||
|
||||
//proxyServer.ServerCertificateValidationCallback += OnCertificateValidation;
|
||||
//proxyServer.ClientCertificateSelectionCallback += OnCertificateSelection;
|
||||
|
||||
//proxyServer.EnableWinAuth = true;
|
||||
|
||||
explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000);
|
||||
|
||||
// Fired when a CONNECT request is received
|
||||
explicitEndPoint.BeforeTunnelConnectRequest += OnBeforeTunnelConnectRequest;
|
||||
|
||||
|
||||
// An explicit endpoint is where the client knows about the existence of a proxy
|
||||
// So client sends request in a proxy friendly manner
|
||||
proxyServer.AddEndPoint(explicitEndPoint);
|
||||
proxyServer.Start();
|
||||
|
||||
}
|
||||
|
||||
private async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
|
||||
{
|
||||
string hostname = e.HttpClient.Request.RequestUri.Host;
|
||||
|
||||
if (hostname.Contains("dropbox.com"))
|
||||
{
|
||||
// Exclude Https addresses you don't want to proxy
|
||||
// Useful for clients that use certificate pinning
|
||||
// for example dropbox.com
|
||||
e.DecryptSsl = false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task OnRequest(object sender, SessionEventArgs e)
|
||||
{
|
||||
Console.WriteLine(e.HttpClient.Request.Url);
|
||||
|
||||
// read request headers
|
||||
var requestHeaders = e.HttpClient.Request.Headers;
|
||||
|
||||
var method = e.HttpClient.Request.Method.ToUpper();
|
||||
if ((method == "POST" || method == "PUT" || method == "PATCH"))
|
||||
{
|
||||
// Get/Set request body bytes
|
||||
byte[] bodyBytes = await e.GetRequestBody();
|
||||
e.SetRequestBody(bodyBytes);
|
||||
|
||||
// Get/Set request body as string
|
||||
string bodyString = await e.GetRequestBodyAsString();
|
||||
e.SetRequestBodyString(bodyString);
|
||||
|
||||
// store request
|
||||
// so that you can find it from response handler
|
||||
e.UserData = e.HttpClient.Request;
|
||||
}
|
||||
|
||||
// To cancel a request with a custom HTML content
|
||||
// Filter URL
|
||||
if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("google.com"))
|
||||
{
|
||||
e.Ok("<!DOCTYPE html>" +
|
||||
"<html><body><h1>" +
|
||||
"Website Blocked" +
|
||||
"</h1>" +
|
||||
"<p>Blocked by titanium web proxy.</p>" +
|
||||
"</body>" +
|
||||
"</html>");
|
||||
}
|
||||
|
||||
// Redirect example
|
||||
if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("wikipedia.org"))
|
||||
{
|
||||
e.Redirect("https://www.paypal.com");
|
||||
}
|
||||
}
|
||||
|
||||
// Modify response
|
||||
public async Task OnResponse(object sender, SessionEventArgs e)
|
||||
{
|
||||
// read response headers
|
||||
var responseHeaders = e.HttpClient.Response.Headers;
|
||||
|
||||
//if (!e.ProxySession.Request.Host.Equals("medeczane.sgk.gov.tr")) return;
|
||||
if (e.HttpClient.Request.Method == "GET" || e.HttpClient.Request.Method == "POST")
|
||||
{
|
||||
if (e.HttpClient.Response.StatusCode == 200)
|
||||
{
|
||||
if (e.HttpClient.Response.ContentType != null && e.HttpClient.Response.ContentType.Trim().ToLower().Contains("text/html"))
|
||||
{
|
||||
byte[] bodyBytes = await e.GetResponseBody();
|
||||
e.SetResponseBody(bodyBytes);
|
||||
|
||||
string body = await e.GetResponseBodyAsString();
|
||||
e.SetResponseBodyString(body);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (e.UserData != null)
|
||||
{
|
||||
// access request from UserData property where we stored it in RequestHandler
|
||||
var request = (Request)e.UserData;
|
||||
}
|
||||
}
|
||||
|
||||
// Allows overriding default certificate validation logic
|
||||
public Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)
|
||||
{
|
||||
// set IsValid to true/false based on Certificate Errors
|
||||
if (e.SslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
|
||||
e.IsValid = true;
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
// Allows overriding default client certificate selection logic during mutual authentication
|
||||
public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
|
||||
{
|
||||
// set e.clientCertificate to override
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
using Titanium.Web.Proxy.EventArguments;
|
||||
|
||||
namespace Titanium.Web.Proxy.Examples.Basic
|
||||
{
|
||||
public static class ProxyEventArgsBaseExtensions
|
||||
{
|
||||
public static SampleClientState GetState(this ProxyEventArgsBase args)
|
||||
{
|
||||
if (args.ClientUserData == null) args.ClientUserData = new SampleClientState();
|
||||
|
||||
return (SampleClientState)args.ClientUserData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,437 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Titanium.Web.Proxy.EventArguments;
|
||||
using Titanium.Web.Proxy.Exceptions;
|
||||
using Titanium.Web.Proxy.Helpers;
|
||||
using Titanium.Web.Proxy.Http;
|
||||
using Titanium.Web.Proxy.Models;
|
||||
using Titanium.Web.Proxy.StreamExtended.Network;
|
||||
|
||||
namespace Titanium.Web.Proxy.Examples.Basic
|
||||
{
|
||||
public class ProxyTestController : IDisposable
|
||||
{
|
||||
private readonly ProxyServer proxyServer;
|
||||
|
||||
private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
private readonly ConcurrentQueue<Tuple<ConsoleColor?, string>> consoleMessageQueue
|
||||
= new ConcurrentQueue<Tuple<ConsoleColor?, string>>();
|
||||
|
||||
private ExplicitProxyEndPoint explicitEndPoint;
|
||||
|
||||
public ProxyTestController()
|
||||
{
|
||||
Task.Run(() => ListenToConsole());
|
||||
|
||||
proxyServer = new ProxyServer();
|
||||
|
||||
//proxyServer.EnableHttp2 = true;
|
||||
|
||||
// generate root certificate without storing it in file system
|
||||
//proxyServer.CertificateManager.CreateRootCertificate(false);
|
||||
|
||||
//proxyServer.CertificateManager.TrustRootCertificate();
|
||||
//proxyServer.CertificateManager.TrustRootCertificateAsAdmin();
|
||||
|
||||
proxyServer.ExceptionFunc = async exception =>
|
||||
{
|
||||
if (exception is ProxyHttpException phex)
|
||||
WriteToConsole(exception.Message + ": " + phex.InnerException?.Message, ConsoleColor.Red);
|
||||
else
|
||||
WriteToConsole(exception.Message, ConsoleColor.Red);
|
||||
};
|
||||
|
||||
proxyServer.TcpTimeWaitSeconds = 10;
|
||||
proxyServer.ConnectionTimeOutSeconds = 15;
|
||||
proxyServer.ReuseSocket = false;
|
||||
proxyServer.EnableConnectionPool = false;
|
||||
proxyServer.ForwardToUpstreamGateway = true;
|
||||
proxyServer.CertificateManager.SaveFakeCertificates = true;
|
||||
//proxyServer.ProxyBasicAuthenticateFunc = async (args, userName, password) =>
|
||||
//{
|
||||
// return true;
|
||||
//};
|
||||
|
||||
// this is just to show the functionality, provided implementations use junk value
|
||||
//proxyServer.GetCustomUpStreamProxyFunc = onGetCustomUpStreamProxyFunc;
|
||||
//proxyServer.CustomUpStreamProxyFailureFunc = onCustomUpStreamProxyFailureFunc;
|
||||
|
||||
// optionally set the Certificate Engine
|
||||
// Under Mono or Non-Windows runtimes only BouncyCastle will be supported
|
||||
//proxyServer.CertificateManager.CertificateEngine = Network.CertificateEngine.BouncyCastle;
|
||||
|
||||
// optionally set the Root Certificate
|
||||
//proxyServer.CertificateManager.RootCertificate = new X509Certificate2("myCert.pfx", string.Empty, X509KeyStorageFlags.Exportable);
|
||||
}
|
||||
|
||||
private CancellationToken CancellationToken => cancellationTokenSource.Token;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
cancellationTokenSource.Dispose();
|
||||
proxyServer.Dispose();
|
||||
}
|
||||
|
||||
public void StartProxy()
|
||||
{
|
||||
proxyServer.BeforeRequest += OnRequest;
|
||||
proxyServer.BeforeResponse += OnResponse;
|
||||
proxyServer.AfterResponse += OnAfterResponse;
|
||||
|
||||
proxyServer.ServerCertificateValidationCallback += OnCertificateValidation;
|
||||
proxyServer.ClientCertificateSelectionCallback += OnCertificateSelection;
|
||||
|
||||
//proxyServer.EnableWinAuth = true;
|
||||
|
||||
explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000);
|
||||
|
||||
// Fired when a CONNECT request is received
|
||||
explicitEndPoint.BeforeTunnelConnectRequest += OnBeforeTunnelConnectRequest;
|
||||
explicitEndPoint.BeforeTunnelConnectResponse += OnBeforeTunnelConnectResponse;
|
||||
|
||||
// An explicit endpoint is where the client knows about the existence of a proxy
|
||||
// So client sends request in a proxy friendly manner
|
||||
proxyServer.AddEndPoint(explicitEndPoint);
|
||||
proxyServer.Start();
|
||||
|
||||
// Transparent endpoint is useful for reverse proxy (client is not aware of the existence of proxy)
|
||||
// A transparent endpoint usually requires a network router port forwarding HTTP(S) packets
|
||||
// or by DNS to send data to this endPoint.
|
||||
//var transparentEndPoint = new TransparentProxyEndPoint(IPAddress.Any, 443, true)
|
||||
//{
|
||||
// // Generic Certificate hostname to use
|
||||
// // When SNI is disabled by client
|
||||
// GenericCertificateName = "localhost"
|
||||
//};
|
||||
|
||||
//proxyServer.AddEndPoint(transparentEndPoint);
|
||||
//proxyServer.UpStreamHttpProxy = new ExternalProxy("localhost", 8888);
|
||||
//proxyServer.UpStreamHttpsProxy = new ExternalProxy("localhost", 8888);
|
||||
|
||||
// SOCKS proxy
|
||||
//proxyServer.UpStreamHttpProxy = new ExternalProxy("127.0.0.1", 1080)
|
||||
// { ProxyType = ExternalProxyType.Socks5, UserName = "User1", Password = "Pass" };
|
||||
//proxyServer.UpStreamHttpsProxy = new ExternalProxy("127.0.0.1", 1080)
|
||||
// { ProxyType = ExternalProxyType.Socks5, UserName = "User1", Password = "Pass" };
|
||||
|
||||
|
||||
//var socksEndPoint = new SocksProxyEndPoint(IPAddress.Any, 1080, true)
|
||||
//{
|
||||
// // Generic Certificate hostname to use
|
||||
// // When SNI is disabled by client
|
||||
// GenericCertificateName = "google.com"
|
||||
//};
|
||||
|
||||
//proxyServer.AddEndPoint(socksEndPoint);
|
||||
|
||||
foreach (var endPoint in proxyServer.ProxyEndPoints)
|
||||
Console.WriteLine("Listening on '{0}' endpoint at Ip {1} and port: {2} ", endPoint.GetType().Name,
|
||||
endPoint.IpAddress, endPoint.Port);
|
||||
|
||||
// Only explicit proxies can be set as system proxy!
|
||||
//proxyServer.SetAsSystemHttpProxy(explicitEndPoint);
|
||||
//proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);
|
||||
if (RunTime.IsWindows) proxyServer.SetAsSystemProxy(explicitEndPoint, ProxyProtocolType.AllHttp);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
explicitEndPoint.BeforeTunnelConnectRequest -= OnBeforeTunnelConnectRequest;
|
||||
explicitEndPoint.BeforeTunnelConnectResponse -= OnBeforeTunnelConnectResponse;
|
||||
|
||||
proxyServer.BeforeRequest -= OnRequest;
|
||||
proxyServer.BeforeResponse -= OnResponse;
|
||||
proxyServer.ServerCertificateValidationCallback -= OnCertificateValidation;
|
||||
proxyServer.ClientCertificateSelectionCallback -= OnCertificateSelection;
|
||||
|
||||
proxyServer.Stop();
|
||||
|
||||
// remove the generated certificates
|
||||
//proxyServer.CertificateManager.RemoveTrustedRootCertificates();
|
||||
}
|
||||
|
||||
private async Task<IExternalProxy> OnGetCustomUpStreamProxyFunc(SessionEventArgsBase arg)
|
||||
{
|
||||
arg.GetState().PipelineInfo.AppendLine(nameof(OnGetCustomUpStreamProxyFunc));
|
||||
|
||||
// this is just to show the functionality, provided values are junk
|
||||
return new ExternalProxy
|
||||
{
|
||||
BypassLocalhost = false,
|
||||
HostName = "127.0.0.9",
|
||||
Port = 9090,
|
||||
Password = "fake",
|
||||
UserName = "fake",
|
||||
UseDefaultCredentials = false
|
||||
};
|
||||
}
|
||||
|
||||
private async Task<IExternalProxy> OnCustomUpStreamProxyFailureFunc(SessionEventArgsBase arg)
|
||||
{
|
||||
arg.GetState().PipelineInfo.AppendLine(nameof(OnCustomUpStreamProxyFailureFunc));
|
||||
|
||||
// this is just to show the functionality, provided values are junk
|
||||
return new ExternalProxy
|
||||
{
|
||||
BypassLocalhost = false,
|
||||
HostName = "127.0.0.10",
|
||||
Port = 9191,
|
||||
Password = "fake2",
|
||||
UserName = "fake2",
|
||||
UseDefaultCredentials = false
|
||||
};
|
||||
}
|
||||
|
||||
private async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
|
||||
{
|
||||
var hostname = e.HttpClient.Request.RequestUri.Host;
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(OnBeforeTunnelConnectRequest) + ":" + hostname);
|
||||
WriteToConsole("Tunnel to: " + hostname);
|
||||
|
||||
var clientLocalIp = e.ClientLocalEndPoint.Address;
|
||||
if (!clientLocalIp.Equals(IPAddress.Loopback) && !clientLocalIp.Equals(IPAddress.IPv6Loopback))
|
||||
e.HttpClient.UpStreamEndPoint = new IPEndPoint(clientLocalIp, 0);
|
||||
|
||||
if (hostname.Contains("dropbox.com"))
|
||||
// Exclude Https addresses you don't want to proxy
|
||||
// Useful for clients that use certificate pinning
|
||||
// for example dropbox.com
|
||||
e.DecryptSsl = false;
|
||||
}
|
||||
|
||||
private void WebSocket_DataSent(object sender, DataEventArgs e)
|
||||
{
|
||||
var args = (SessionEventArgs)sender;
|
||||
WebSocketDataSentReceived(args, e, true);
|
||||
}
|
||||
|
||||
private void WebSocket_DataReceived(object sender, DataEventArgs e)
|
||||
{
|
||||
var args = (SessionEventArgs)sender;
|
||||
WebSocketDataSentReceived(args, e, false);
|
||||
}
|
||||
|
||||
private void WebSocketDataSentReceived(SessionEventArgs args, DataEventArgs e, bool sent)
|
||||
{
|
||||
var color = sent ? ConsoleColor.Green : ConsoleColor.Blue;
|
||||
|
||||
foreach (var frame in args.WebSocketDecoder.Decode(e.Buffer, e.Offset, e.Count))
|
||||
{
|
||||
if (frame.OpCode == WebsocketOpCode.Binary)
|
||||
{
|
||||
var data = frame.Data.ToArray();
|
||||
var str = string.Join(",", data.ToArray().Select(x => x.ToString("X2")));
|
||||
WriteToConsole(str, color);
|
||||
}
|
||||
|
||||
if (frame.OpCode == WebsocketOpCode.Text) WriteToConsole(frame.GetText(), color);
|
||||
}
|
||||
}
|
||||
|
||||
private Task OnBeforeTunnelConnectResponse(object sender, TunnelConnectSessionEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo
|
||||
.AppendLine(nameof(OnBeforeTunnelConnectResponse) + ":" + e.HttpClient.Request.RequestUri);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
// intercept & cancel redirect or update requests
|
||||
private async Task OnRequest(object sender, SessionEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(OnRequest) + ":" + e.HttpClient.Request.RequestUri);
|
||||
|
||||
var clientLocalIp = e.ClientLocalEndPoint.Address;
|
||||
if (!clientLocalIp.Equals(IPAddress.Loopback) && !clientLocalIp.Equals(IPAddress.IPv6Loopback))
|
||||
e.HttpClient.UpStreamEndPoint = new IPEndPoint(clientLocalIp, 0);
|
||||
|
||||
if (e.HttpClient.Request.Url.Contains("yahoo.com"))
|
||||
e.CustomUpStreamProxy = new ExternalProxy("localhost", 8888);
|
||||
|
||||
WriteToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount);
|
||||
WriteToConsole(e.HttpClient.Request.Url);
|
||||
|
||||
// store it in the UserData property
|
||||
// It can be a simple integer, Guid, or any type
|
||||
//e.UserData = new CustomUserData()
|
||||
//{
|
||||
// RequestHeaders = e.HttpClient.Request.Headers,
|
||||
// RequestBody = e.HttpClient.Request.HasBody ? e.HttpClient.Request.Body:null,
|
||||
// RequestBodyString = e.HttpClient.Request.HasBody? e.HttpClient.Request.BodyString:null
|
||||
//};
|
||||
|
||||
////This sample shows how to get the multipart form data headers
|
||||
//if (e.HttpClient.Request.Host == "mail.yahoo.com" && e.HttpClient.Request.IsMultipartFormData)
|
||||
//{
|
||||
// e.MultipartRequestPartSent += MultipartRequestPartSent;
|
||||
//}
|
||||
|
||||
// To cancel a request with a custom HTML content
|
||||
// Filter URL
|
||||
//if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("yahoo.com"))
|
||||
//{
|
||||
// e.Ok("<!DOCTYPE html>" +
|
||||
// "<html><body><h1>" +
|
||||
// "Website Blocked" +
|
||||
// "</h1>" +
|
||||
// "<p>Blocked by titanium web proxy.</p>" +
|
||||
// "</body>" +
|
||||
// "</html>");
|
||||
//}
|
||||
|
||||
////Redirect example
|
||||
//if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("wikipedia.org"))
|
||||
//{
|
||||
// e.Redirect("https://www.paypal.com");
|
||||
//}
|
||||
}
|
||||
|
||||
// Modify response
|
||||
private async Task MultipartRequestPartSent(object sender, MultipartRequestPartSentEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(MultipartRequestPartSent));
|
||||
|
||||
var session = (SessionEventArgs)sender;
|
||||
WriteToConsole("Multipart form data headers:");
|
||||
foreach (var header in e.Headers) WriteToConsole(header.ToString());
|
||||
}
|
||||
|
||||
private async Task OnResponse(object sender, SessionEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(OnResponse));
|
||||
|
||||
if (e.HttpClient.ConnectRequest?.TunnelType == TunnelType.Websocket)
|
||||
{
|
||||
e.DataSent += WebSocket_DataSent;
|
||||
e.DataReceived += WebSocket_DataReceived;
|
||||
}
|
||||
|
||||
WriteToConsole("Active Server Connections:" + ((ProxyServer)sender).ServerConnectionCount);
|
||||
|
||||
var ext = Path.GetExtension(e.HttpClient.Request.RequestUri.AbsolutePath);
|
||||
|
||||
// access user data set in request to do something with it
|
||||
//var userData = e.HttpClient.UserData as CustomUserData;
|
||||
|
||||
//if (ext == ".gif" || ext == ".png" || ext == ".jpg")
|
||||
//{
|
||||
// byte[] btBody = Encoding.UTF8.GetBytes("<!DOCTYPE html>" +
|
||||
// "<html><body><h1>" +
|
||||
// "Image is blocked" +
|
||||
// "</h1>" +
|
||||
// "<p>Blocked by Titanium</p>" +
|
||||
// "</body>" +
|
||||
// "</html>");
|
||||
|
||||
// var response = new OkResponse(btBody);
|
||||
// response.HttpVersion = e.HttpClient.Request.HttpVersion;
|
||||
|
||||
// e.Respond(response);
|
||||
// e.TerminateServerConnection();
|
||||
//}
|
||||
|
||||
//// print out process id of current session
|
||||
////WriteToConsole($"PID: {e.HttpClient.ProcessId.Value}");
|
||||
|
||||
////if (!e.ProxySession.Request.Host.Equals("medeczane.sgk.gov.tr")) return;
|
||||
//if (e.HttpClient.Request.Method == "GET" || e.HttpClient.Request.Method == "POST")
|
||||
//{
|
||||
// if (e.HttpClient.Response.StatusCode == (int)HttpStatusCode.OK)
|
||||
// {
|
||||
// if (e.HttpClient.Response.ContentType != null && e.HttpClient.Response.ContentType.Trim().ToLower().Contains("text/html"))
|
||||
// {
|
||||
// var bodyBytes = await e.GetResponseBody();
|
||||
// e.SetResponseBody(bodyBytes);
|
||||
|
||||
// string body = await e.GetResponseBodyAsString();
|
||||
// e.SetResponseBodyString(body);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
private async Task OnAfterResponse(object sender, SessionEventArgs e)
|
||||
{
|
||||
WriteToConsole($"Pipelineinfo: {e.GetState().PipelineInfo}", ConsoleColor.Yellow);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows overriding default certificate validation logic
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(OnCertificateValidation));
|
||||
|
||||
// set IsValid to true/false based on Certificate Errors
|
||||
if (e.SslPolicyErrors == SslPolicyErrors.None) e.IsValid = true;
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows overriding default client certificate selection logic during mutual authentication
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
|
||||
{
|
||||
e.GetState().PipelineInfo.AppendLine(nameof(OnCertificateSelection));
|
||||
|
||||
// set e.clientCertificate to override
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private void WriteToConsole(string message, ConsoleColor? consoleColor = null)
|
||||
{
|
||||
consoleMessageQueue.Enqueue(new Tuple<ConsoleColor?, string>(consoleColor, message));
|
||||
}
|
||||
|
||||
private async Task ListenToConsole()
|
||||
{
|
||||
while (!CancellationToken.IsCancellationRequested)
|
||||
{
|
||||
while (consoleMessageQueue.TryDequeue(out var item))
|
||||
{
|
||||
var consoleColor = item.Item1;
|
||||
var message = item.Item2;
|
||||
|
||||
if (consoleColor.HasValue)
|
||||
{
|
||||
var existing = Console.ForegroundColor;
|
||||
Console.ForegroundColor = consoleColor.Value;
|
||||
Console.WriteLine(message);
|
||||
Console.ForegroundColor = existing;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
}
|
||||
|
||||
//reduce CPU usage
|
||||
await Task.Delay(50);
|
||||
}
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// User data object as defined by user.
|
||||
///// User data can be set to each SessionEventArgs.HttpClient.UserData property
|
||||
///// </summary>
|
||||
//public class CustomUserData
|
||||
//{
|
||||
// public HeaderCollection RequestHeaders { get; set; }
|
||||
// public byte[] RequestBody { get; set; }
|
||||
// public string RequestBodyString { get; set; }
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
using System.Text;
|
||||
|
||||
namespace Titanium.Web.Proxy.Examples.Basic
|
||||
{
|
||||
public class SampleClientState
|
||||
{
|
||||
public StringBuilder PipelineInfo { get; } = new StringBuilder();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace VanillaLauncher
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new Vanilla());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
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("VanillaLauncher")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("VanillaLauncher")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
[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("f60c2eed-2270-4387-90bf-a1dae0ab3236")]
|
||||
|
||||
// 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.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <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 VanillaLauncher.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", "16.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("VanillaLauncher.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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap atti {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("atti", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap atti1 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("atti1", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap ipmbgqr1e8mc1 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ipmbgqr1e8mc1", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap vanillablu2x {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("vanillablu2x", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<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" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="atti1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\atti1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="atti" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\atti.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="vanillablu2x" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\vanillablu2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ipmbgqr1e8mc1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ipmbgqr1e8mc1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <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 VanillaLauncher.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?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.
|
After Width: | Height: | Size: 157 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 160 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 552 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 673 KiB |
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,989 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
using System.Web;
|
||||
using System.Security.Principal;
|
||||
using System.IO.Compression;
|
||||
using Newtonsoft.Json;
|
||||
using System.Security;
|
||||
using System.Data.SQLite;
|
||||
using Titanium.Web.Proxy.Examples.Basic;
|
||||
using System.Reflection;
|
||||
using BlueMystic;
|
||||
using System.Net.NetworkInformation;
|
||||
namespace VanillaLauncher
|
||||
{
|
||||
|
||||
public partial class Vanilla : Form
|
||||
|
||||
{
|
||||
public class SettingsFile
|
||||
{
|
||||
public string Username { get; set; }
|
||||
public string ID { get; set; }
|
||||
|
||||
public string HostPort { get; set; }
|
||||
public string Client { get; set; }
|
||||
public string Map { get; set; }
|
||||
public string Hat1 { get; set; }
|
||||
public string Hat2 { get; set; }
|
||||
|
||||
public string Hat3 { get; set; }
|
||||
|
||||
public string Shirt { get; set; }
|
||||
public string Pants { get; set; }
|
||||
|
||||
public string TShirt { get; set; }
|
||||
public string AvatarType { get; set; }
|
||||
public string HeadColor { get; set; }
|
||||
public string TorsoColor { get; set; }
|
||||
public string LeftArmColor { get; set; }
|
||||
public string LeftLegColor { get; set; }
|
||||
public string RightArmColor { get; set; }
|
||||
public string RightLegColor { get; set; }
|
||||
|
||||
}
|
||||
string curItem { get; set; }
|
||||
bool is2007 { get; set; }
|
||||
bool isRobloxApp { get; set; }
|
||||
bool isRobloxPlayerBeta { get; set; }
|
||||
bool isRCCService { get; set; }
|
||||
bool avatarFetchRequired { get; set; }
|
||||
bool isRobloxPlayer { get; set; }
|
||||
string GlobalMap { get; set; }
|
||||
string GlobalUsername { get; set; }
|
||||
string GlobalID { get; set; }
|
||||
string GlobalHostPort { get; set; }
|
||||
string GlobalHat1 { get; set; }
|
||||
string GlobalHat2 { get; set; }
|
||||
string GlobalHat3 { get; set; }
|
||||
string GlobalShirt { get; set; }
|
||||
string GlobalPants { get; set; }
|
||||
string GlobalTshirt{ get; set; }
|
||||
string AvatarTypeStr { get; set; }
|
||||
public string HeadColor { get; set; }
|
||||
public string TorsoColor { get; set; }
|
||||
public string LeftArmColor { get; set; }
|
||||
public string LeftLegColor { get; set; }
|
||||
public string RightArmColor { get; set; }
|
||||
public string RightLegColor { get; set; }
|
||||
|
||||
private DarkModeCS DM = null;
|
||||
public Vanilla()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
|
||||
string hostsFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");
|
||||
|
||||
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
|
||||
bool administrativeMode = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
// this sucks but it doesnt launch if we don't do this
|
||||
bool administrativeMode2 = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
if (!administrativeMode2)
|
||||
{
|
||||
Process.Start("CMD.exe", "/C taskkill /F /IM nginx.exe");
|
||||
Process.Start("CMD.exe", "/C taskkill /F /IM php-cgi.exe");
|
||||
Process.Start("CMD.exe", "/C taskkill /F /IM RunHiddenConsole.exe");
|
||||
|
||||
string httpdconf = File.ReadAllText("files\\webserver\\conf\\nginx.conf");
|
||||
string CurrentDirFixed = Directory.GetCurrentDirectory().Replace(@"\", @"/");
|
||||
if (!httpdconf.Contains(CurrentDirFixed))
|
||||
{
|
||||
File.Delete("files\\webserver\\conf\\nginx.conf");
|
||||
File.Copy("files\\webserver\\conf\\nginx.conf.bak", "files\\webserver\\conf\\nginx.conf");
|
||||
}
|
||||
if (httpdconf.Contains(@"C:/Vanilla/files/webroot"))
|
||||
{
|
||||
string fixedconf = httpdconf.Replace(@"C:/Vanilla/files/webroot", CurrentDirFixed + @"/files/webroot");
|
||||
File.WriteAllText("files\\webserver\\conf\\nginx.conf", fixedconf);
|
||||
}
|
||||
}
|
||||
if (!administrativeMode)
|
||||
{
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.Verb = "runas";
|
||||
startInfo.FileName = Application.ExecutablePath;
|
||||
try
|
||||
{
|
||||
|
||||
System.Threading.Thread.Sleep(3000);
|
||||
int port = 80;
|
||||
|
||||
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
|
||||
TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
|
||||
|
||||
foreach (TcpConnectionInformation tcpi in tcpConnInfoArray)
|
||||
{
|
||||
if (tcpi.LocalEndPoint.Port == port)
|
||||
{
|
||||
MessageBox.Show(
|
||||
"WARNING! Something is using port 80, meaning Vanilla will NOT WORK! Make sure to kill any webservers you may have running.",
|
||||
"Warning",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Warning);
|
||||
|
||||
}
|
||||
}
|
||||
Process.Start("files\\webserver\\php\\RunHiddenConsole.exe", "/r " + Directory.GetCurrentDirectory() + "\\files\\webserver\\php\\php-cgi.exe -b 127.0.0.1:9123");
|
||||
Directory.SetCurrentDirectory(Directory.GetCurrentDirectory() + "\\files\\webserver\\");
|
||||
Process.Start(Directory.GetCurrentDirectory() + "\\nginx.exe");
|
||||
Directory.SetCurrentDirectory("..\\..");
|
||||
Process.Start(startInfo);
|
||||
Process.GetCurrentProcess().Kill();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!File.Exists(Directory.GetCurrentDirectory() + @"\files\vanilla.sqlite"))
|
||||
{
|
||||
SQLiteConnection.CreateFile(Directory.GetCurrentDirectory() + @"\files\vanilla.sqlite");
|
||||
|
||||
using (var sqlite2 = new SQLiteConnection(@"Data Source=" + Directory.GetCurrentDirectory() + @"\files\vanilla.sqlite"))
|
||||
{
|
||||
sqlite2.Open();
|
||||
string sql = "create table characterappearance (torsocolor text, leftlegcolor text, leftarmcolor text, rightlegcolor text, rightarmcolor text, headcolor text, asset1 text, asset2 text, asset3 text, asset4 text, asset5 text, asset6 text, asset7 text, asset8 text, asset9 text, asset10 text, asset11 text, asset12 text, asset13 text, avatartype text, userid text)";
|
||||
SQLiteCommand command = new SQLiteCommand(sql, sqlite2);
|
||||
command.ExecuteNonQuery();
|
||||
string sql2 = "create table badges (badgeId text, obtainedBy text)";
|
||||
SQLiteCommand command2 = new SQLiteCommand(sql2, sqlite2);
|
||||
command2.ExecuteNonQuery();
|
||||
string sql3 = "create table gamepasses (passId text, boughtBy text)";
|
||||
SQLiteCommand command3 = new SQLiteCommand(sql3, sqlite2);
|
||||
command3.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
DM = new DarkModeCS(this);
|
||||
Application.ApplicationExit += new EventHandler(onshutdown);
|
||||
string pathfile = Environment.GetEnvironmentVariable("PATH");
|
||||
if (!pathfile.Contains(Directory.GetCurrentDirectory() + @"\files\webserver\php"))
|
||||
{
|
||||
var name = "PATH";
|
||||
var scope = EnvironmentVariableTarget.Machine;
|
||||
var oldValue = Environment.GetEnvironmentVariable(name, scope);
|
||||
var newValue = oldValue + @";" + Directory.GetCurrentDirectory() + @"\files\webserver\php";
|
||||
Environment.SetEnvironmentVariable(name, newValue, scope);
|
||||
}
|
||||
string pathfile2 = Environment.GetEnvironmentVariable("PATH");
|
||||
if (!pathfile2.Contains(Directory.GetCurrentDirectory() + @"\files\webserver\openssl"))
|
||||
{
|
||||
var name = "PATH";
|
||||
var scope = EnvironmentVariableTarget.Machine;
|
||||
var oldValue = Environment.GetEnvironmentVariable(name, scope);
|
||||
var newValue = oldValue + @";" + Directory.GetCurrentDirectory() + @"\files\webserver\openssl";
|
||||
Environment.SetEnvironmentVariable(name, newValue, scope);
|
||||
}
|
||||
string pathfile3 = Environment.GetEnvironmentVariable("OPENSSL_CONF");
|
||||
if (pathfile3 != null)
|
||||
{
|
||||
var name = "OPENSSL_CONF";
|
||||
var scope = EnvironmentVariableTarget.Machine;
|
||||
var newValue = Directory.GetCurrentDirectory() + @"\files\webserver\php\extras\ssl\openssl.cnf";
|
||||
Environment.SetEnvironmentVariable(name, newValue, scope);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var name = "OPENSSL_CONF";
|
||||
var scope = EnvironmentVariableTarget.Machine;
|
||||
var newValue = Directory.GetCurrentDirectory() + @"\files\webserver\php\extras\ssl\openssl.cnf";
|
||||
Environment.SetEnvironmentVariable(name, newValue, scope);
|
||||
}
|
||||
FileInfo fileInfo = new FileInfo(hostsFile);
|
||||
if (!File.Exists(hostsFile))
|
||||
{
|
||||
MessageBox.Show(
|
||||
"Your HOSTS file does not exist! Vanilla will create one for you. Please restart Vanilla.",
|
||||
"Warning",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Warning);
|
||||
|
||||
File.Create(hostsFile);
|
||||
Process.GetCurrentProcess().Kill();
|
||||
|
||||
}
|
||||
if (fileInfo.IsReadOnly)
|
||||
{
|
||||
MessageBox.Show(
|
||||
"Vanilla will not work until you have disabled 'Read-Only' on your HOSTS file! Do this in C:\\Windows\\System32\\drivers\\etc.",
|
||||
"Warning",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Warning);
|
||||
|
||||
}
|
||||
if (File.ReadAllText(hostsFile).Contains("# BEGIN VANILLA HOSTS"))
|
||||
{
|
||||
string str = File.ReadAllText(hostsFile);
|
||||
int index = str.IndexOf("# BEGIN VANILLA HOSTS");
|
||||
string result = str.Substring(0, index);
|
||||
File.WriteAllText(hostsFile, result);
|
||||
}
|
||||
|
||||
//if (File.Exists(hostsFile + ".bak")) { File.Replace(hostsFile + ".bak", hostsFile, hostsFile + ".bak"); }
|
||||
// throws an error, don't use this even if it looks better
|
||||
|
||||
if (File.Exists(hostsFile + ".bak"))
|
||||
{
|
||||
File.Delete(hostsFile);
|
||||
File.Copy(hostsFile + ".bak", hostsFile);
|
||||
File.Delete(hostsFile + ".bak");
|
||||
}
|
||||
File.Copy(hostsFile, hostsFile + ".bak");
|
||||
using (StreamWriter w = File.AppendText(hostsFile))
|
||||
{
|
||||
w.WriteLine("");
|
||||
w.WriteLine("# BEGIN VANILLA HOSTS");
|
||||
w.WriteLine("127.0.0.1 www.roblox.com");
|
||||
w.WriteLine("127.0.0.1 roblox.com");
|
||||
w.WriteLine("127.0.0.1 api.roblox.com");
|
||||
w.WriteLine("127.0.0.1 assetgame.roblox.com");
|
||||
w.WriteLine("127.0.0.1 clientsettings.api.roblox.com");
|
||||
w.WriteLine("127.0.0.1 versioncompatibility.api.roblox.com");
|
||||
w.WriteLine("127.0.0.1 ephemeralcounters.api.roblox.com");
|
||||
w.WriteLine("127.0.0.1 clientsettingscdn.roblox.com");
|
||||
}
|
||||
|
||||
var files3 = from file in Directory.EnumerateFiles("files\\char\\hats") select file;
|
||||
foreach (var file in files3)
|
||||
{
|
||||
if (file.Contains(".json"))
|
||||
{
|
||||
string ohio = file.Substring(file.IndexOf("ts\\") + 3);
|
||||
int index = ohio.IndexOf(".info");
|
||||
string result = ohio.Substring(0, index);
|
||||
listBox0.Items.Add(result);
|
||||
listBox1.Items.Add(result);
|
||||
listBox2.Items.Add(result);
|
||||
}
|
||||
}
|
||||
var files4 = from file in Directory.EnumerateFiles("files\\char\\shirts") select file;
|
||||
foreach (var file in files4)
|
||||
{
|
||||
if (file.Contains(".json"))
|
||||
{
|
||||
string ohio = file.Substring(file.IndexOf("ts\\") + 3);
|
||||
int index = ohio.IndexOf(".info");
|
||||
string result = ohio.Substring(0, index);
|
||||
listBox3.Items.Add(result);
|
||||
}
|
||||
}
|
||||
var files5 = from file in Directory.EnumerateFiles("files\\char\\pants") select file;
|
||||
foreach (var file in files5)
|
||||
{
|
||||
if (file.Contains(".json"))
|
||||
{
|
||||
string ohio = file.Substring(file.IndexOf("ts\\") + 3);
|
||||
int index = ohio.IndexOf(".info");
|
||||
string result = ohio.Substring(0, index);
|
||||
listBox4.Items.Add(result);
|
||||
}
|
||||
}
|
||||
var files6 = from file in Directory.EnumerateFiles("files\\char\\t-shirts") select file;
|
||||
foreach (var file in files6)
|
||||
{
|
||||
if (file.Contains(".json"))
|
||||
{
|
||||
string ohio = file.Substring(file.IndexOf("ts\\") + 3);
|
||||
int index = ohio.IndexOf(".info");
|
||||
string result = ohio.Substring(0, index);
|
||||
listBox5.Items.Add(result);
|
||||
}
|
||||
}
|
||||
var files2 = from file2 in Directory.EnumerateDirectories("clients\\") select file2;
|
||||
foreach (var file2 in files2)
|
||||
{
|
||||
string ohio = file2.Substring(file2.IndexOf("\\") + 1);
|
||||
clientBox.Items.Add(ohio);
|
||||
|
||||
}
|
||||
var files = from file in Directory.EnumerateFiles("files\\maps", "*", SearchOption.AllDirectories) select file;
|
||||
foreach (var file in files)
|
||||
{
|
||||
mapBox.Items.Add(file);
|
||||
}
|
||||
string curDir = Directory.GetCurrentDirectory();
|
||||
if (File.Exists("files\\settings.json"))
|
||||
{
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\settings.json"));
|
||||
hostPortNew.Text = val["HostPort"];
|
||||
idBox.Text = val["ID"];
|
||||
userNameBox.Text = val["Username"];
|
||||
curItem = val["Client"];
|
||||
GlobalMap = val["Map"];
|
||||
GlobalHat1 = val["Hat1"];
|
||||
GlobalHat2 = val["Hat2"];
|
||||
GlobalHat3 = val["Hat3"];
|
||||
GlobalShirt = val["Shirt"];
|
||||
GlobalPants = val["Pants"];
|
||||
GlobalTshirt = val["TShirt"];
|
||||
ClientInfo.Text = "selected client: None";
|
||||
AvatarTypeStr = val["AvatarType"];
|
||||
HeadColor = val["HeadColor"];
|
||||
TorsoColor = val["TorsoColor"];
|
||||
LeftArmColor = val["LeftArmColor"];
|
||||
LeftLegColor = val["LeftLegColor"];
|
||||
RightArmColor = val["RightArmColor"];
|
||||
RightLegColor = val["RightLegColor"];
|
||||
|
||||
string[] values = { GlobalShirt, GlobalPants, GlobalHat1, GlobalHat2, GlobalHat3, GlobalHat3, GlobalTshirt, curItem, GlobalMap };
|
||||
|
||||
foreach(string goon in values)
|
||||
{
|
||||
|
||||
//string prefix = "listBox";
|
||||
//var increment = -1;
|
||||
// UGH !!!! i will make this work LATER. for NOW... yandere dev code
|
||||
if (goon == curItem)
|
||||
{
|
||||
var index = clientBox.FindString(curItem);
|
||||
clientBox.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalMap)
|
||||
{
|
||||
var index = mapBox.FindString(GlobalMap);
|
||||
mapBox.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalHat1)
|
||||
{
|
||||
var index = listBox0.FindString(GlobalHat1);
|
||||
listBox0.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalHat2)
|
||||
{
|
||||
var index = listBox1.FindString(GlobalHat2);
|
||||
listBox1.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalHat3)
|
||||
{
|
||||
var index = listBox2.FindString(GlobalHat3);
|
||||
listBox2.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalShirt)
|
||||
{
|
||||
var index = listBox3.FindString(GlobalShirt);
|
||||
listBox3.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalPants)
|
||||
{
|
||||
var index = listBox4.FindString(GlobalPants);
|
||||
listBox4.SelectedIndex = index;
|
||||
}
|
||||
if (goon == GlobalTshirt)
|
||||
{
|
||||
var index = listBox5.FindString(GlobalTshirt);
|
||||
listBox5.SelectedIndex = index;
|
||||
}
|
||||
|
||||
headColor.Text = val["HeadColor"];
|
||||
torsoColor.Text = val["TorsoColor"];
|
||||
leftArmColor.Text = val["LeftArmColor"];
|
||||
leftLegColor.Text = val["LeftLegColor"];
|
||||
rightArm.Text = val["RightArmColor"];
|
||||
rightLeg.Text = val["RightLegColor"];
|
||||
}
|
||||
}
|
||||
ProxyTestController controller = new ProxyTestController();
|
||||
|
||||
// Start proxy controller
|
||||
//controller.StartProxy();
|
||||
|
||||
var lines = File.ReadAllLines("files\\splashes.txt");
|
||||
var r = new Random();
|
||||
var randomLineNumber = r.Next(0, lines.Length - 1);
|
||||
splash.Text = lines[randomLineNumber];
|
||||
|
||||
if (!Directory.Exists(@"C:\ProgramData\Roblox\content") && Directory.Exists("clients\\2008M\\RCC"))
|
||||
{
|
||||
Directory.CreateDirectory(@"C:\ProgramData\Roblox\content");
|
||||
|
||||
CopyDirectory(@"clients\2008M\RCC\content", @"C:\ProgramData\Roblox\content", true);
|
||||
}
|
||||
if (String.IsNullOrEmpty(AvatarTypeStr)) { AvatarTypeStr = "R6"; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
private void button1_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
if (AvatarTypeStr == "R15") { AvatarTypeStr = "R6"; return; };
|
||||
|
||||
if (AvatarTypeStr == "R6") { AvatarTypeStr = "R15"; return; };
|
||||
|
||||
}
|
||||
public void setglobal(object sender, EventArgs e)
|
||||
{
|
||||
if (sender == hostPortNew)
|
||||
{
|
||||
GlobalHostPort = hostPortNew.Text;
|
||||
}
|
||||
if (sender == userNameBox)
|
||||
{
|
||||
GlobalUsername = userNameBox.Text;
|
||||
}
|
||||
if (sender == idBox)
|
||||
{
|
||||
GlobalID = idBox.Text;
|
||||
}
|
||||
}
|
||||
public void onshutdown(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (File.Exists("files\\settings.json"))
|
||||
{
|
||||
File.Delete("files\\settings.json");
|
||||
}
|
||||
SettingsFile jsonfile = new SettingsFile
|
||||
{
|
||||
Username = GlobalUsername,
|
||||
ID = GlobalID,
|
||||
HostPort = GlobalHostPort,
|
||||
Client = curItem,
|
||||
Map = GlobalMap,
|
||||
Hat1 = GlobalHat1,
|
||||
Hat2 = GlobalHat2,
|
||||
Hat3 = GlobalHat3,
|
||||
Shirt = GlobalShirt,
|
||||
Pants = GlobalPants,
|
||||
TShirt = GlobalTshirt,
|
||||
AvatarType = AvatarTypeStr,
|
||||
HeadColor = HeadColor,
|
||||
TorsoColor = TorsoColor,
|
||||
LeftArmColor = LeftArmColor,
|
||||
LeftLegColor = LeftLegColor,
|
||||
RightArmColor = RightArmColor,
|
||||
RightLegColor = RightLegColor
|
||||
};
|
||||
File.WriteAllText(@"files\\settings.json", JsonConvert.SerializeObject(jsonfile));
|
||||
using (StreamWriter file = File.CreateText(@"files\\settings.json"))
|
||||
{
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
serializer.Serialize(file, jsonfile);
|
||||
}
|
||||
string hostsFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");
|
||||
// don't use file.replace here or it'll cause issues
|
||||
File.Delete(hostsFile);
|
||||
File.Copy(hostsFile + ".bak", hostsFile);
|
||||
Process.Start("CMD.exe", "/C taskkill /f /im RunHiddenConsole.exe");
|
||||
Process.Start("CMD.exe", "/C taskkill /F /IM nginx.exe");
|
||||
Process.Start("CMD.exe", "/C taskkill /F /IM php-cgi.exe");
|
||||
|
||||
}
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void mapChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
if (mapBox.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
GlobalMap = mapBox.SelectedItem.ToString();
|
||||
if (GlobalMap.Contains(".gz"))
|
||||
{
|
||||
Decompress(new FileInfo(GlobalMap));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.Delete("files\\web\\1818");
|
||||
File.Copy(GlobalMap, "files\\web\\1818");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void charChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
if (sender == listBox0)
|
||||
{
|
||||
if (listBox0.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\hats\\" + listBox0.SelectedItem.ToString() + ".info.json"));
|
||||
hatName.Text = val["Name"];
|
||||
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox2.Image = Image.FromFile("files\\char\\hats\\" + listBox0.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox2.Refresh();
|
||||
GlobalHat1 = listBox0.SelectedItem.ToString();
|
||||
}
|
||||
if (sender == listBox1)
|
||||
{
|
||||
if (listBox1.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\hats\\" + listBox1.SelectedItem.ToString() + ".info.json"));
|
||||
textBox2.Text = val["Name"];
|
||||
pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox3.Image = Image.FromFile("files\\char\\hats\\" + listBox1.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox3.Refresh();
|
||||
pictureBox3.Visible = true;
|
||||
GlobalHat2 = listBox1.SelectedItem.ToString();
|
||||
}
|
||||
if (sender == listBox2)
|
||||
{
|
||||
if (listBox2.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\hats\\" + listBox2.SelectedItem.ToString() + ".info.json"));
|
||||
textBox3.Text = val["Name"];
|
||||
pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox4.Image = Image.FromFile("files\\char\\hats\\" + listBox2.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox4.Refresh();
|
||||
pictureBox4.Visible = true;
|
||||
GlobalHat3 = listBox2.SelectedItem.ToString();
|
||||
}
|
||||
if (sender == listBox3)
|
||||
{
|
||||
if (listBox3.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\shirts\\" + listBox3.SelectedItem.ToString() + ".info.json"));
|
||||
textBox4.Text = val["Name"];
|
||||
pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox5.Image = Image.FromFile("files\\char\\shirts\\" + listBox3.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox5.Refresh();
|
||||
pictureBox5.Visible = true;
|
||||
GlobalShirt = listBox3.SelectedItem.ToString();
|
||||
}
|
||||
if (sender == listBox4)
|
||||
{
|
||||
if (listBox4.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\pants\\" + listBox4.SelectedItem.ToString() + ".info.json"));
|
||||
textBox5.Text = val["Name"];
|
||||
pictureBox6.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox6.Image = Image.FromFile("files\\char\\pants\\" + listBox4.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox6.Refresh();
|
||||
pictureBox6.Visible = true;
|
||||
GlobalPants = listBox4.SelectedItem.ToString();
|
||||
}
|
||||
if (sender == listBox5)
|
||||
{
|
||||
if (listBox5.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("files\\char\\t-shirts\\" + listBox5.SelectedItem.ToString() + ".info.json"));
|
||||
textBox6.Text = val["Name"];
|
||||
pictureBox7.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
pictureBox7.Image = Image.FromFile("files\\char\\t-shirts\\" + listBox5.SelectedItem.ToString() + ".thumb.png");
|
||||
pictureBox7.Refresh();
|
||||
pictureBox7.Visible = true;
|
||||
GlobalTshirt = listBox5.SelectedItem.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void clientChanged(object Sender, System.EventArgs e)
|
||||
{
|
||||
if (clientBox.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
System.IO.DirectoryInfo di = new DirectoryInfo("files\\webroot\\");
|
||||
foreach (FileInfo file in di.GetFiles())
|
||||
{
|
||||
file.Delete();
|
||||
}
|
||||
foreach (DirectoryInfo dir in di.GetDirectories())
|
||||
{
|
||||
dir.Delete(true);
|
||||
}
|
||||
curItem = clientBox.SelectedItem.ToString();
|
||||
System.IO.Compression.ZipFile.ExtractToDirectory("files\\filesets\\" + curItem + ".zip", "files\\webroot");
|
||||
System.IO.Compression.ZipFile.ExtractToDirectory("files\\filesets\\common.zip", "files\\webroot");
|
||||
if (assetCache.Checked)
|
||||
{
|
||||
File.Replace("files\\webroot\\asset\\cacher.php", "files\\webroot\\asset\\index.php", "files\\webroot\\asset\\nocache.php");
|
||||
|
||||
File.Replace("files\\webroot\\api\\asset\\cacher.php", "files\\webroot\\api\\asset\\index.php", "files\\webroot\\api\\asset\\nocache.php");
|
||||
|
||||
}
|
||||
ClientInfo.Text = "selected client: " + curItem;
|
||||
if (File.Exists("clients\\" + curItem + "\\client.json"))
|
||||
{
|
||||
dynamic val = JsonConvert.DeserializeObject(File.ReadAllText("clients\\" + curItem + "\\client.json"));
|
||||
isRobloxApp = val["isRobloxApp"] == "true";
|
||||
isRobloxPlayerBeta = val["isRobloxPlayerBeta"] == "true";
|
||||
isRCCService = val["isRCCService"] == "true";
|
||||
is2007 = val["is2007"] == "true";
|
||||
avatarFetchRequired = val["avatarFetchRequired"] == "true";
|
||||
isRobloxPlayer = val["isRobloxPlayer"] == "true";
|
||||
}
|
||||
try
|
||||
{
|
||||
ScreenShot.Image = Image.FromFile("clients\\" + curItem + "\\photo.png");
|
||||
}
|
||||
catch
|
||||
{
|
||||
ScreenShot.Image = null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void HostButton_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
string selectedClient = curItem;
|
||||
string hostPortstring = hostPortNew.Text;
|
||||
if (isRCCService)
|
||||
{
|
||||
if (selectedClient == "2015M" || selectedClient == "2015E" || selectedClient == "2014X")
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\RCC\\");
|
||||
Process.Start("CMD.exe", "/C RCCService.exe -console -start -placeid:1818");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
else
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\RCC\\");
|
||||
Process.Start("CMD.exe", "/C RCCService.exe -console -start -verbose");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
System.Threading.Thread.Sleep(9000);
|
||||
Classes.SOAP.Execute(selectedClient);
|
||||
}
|
||||
|
||||
}
|
||||
if (isRobloxPlayer)
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxPlayer.exe", "-joinScriptUrl \"http://www.roblox.com/game/gameserver.ashx?port=" + hostPortstring + "\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
if (isRobloxApp && !isRCCService)
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxApp.exe", "-no3d -script \"loadfile('http://www.roblox.com/game/gameserver.ashx?port="+ hostPortstring + "')()\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
if (isRobloxPlayerBeta && !isRCCService)
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxPlayerBeta.exe", "-j \"http://www.roblox.com/game/gameserver.ashx?port=53640\" -t \"0\" -a \"http://roblox.com/goon\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
if (is2007)
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("Roblox.exe", "-no3d -script \"" + Directory.GetCurrentDirectory() + "\\content\\gameserver.lua\" \"" + Directory.GetCurrentDirectory() + "\\..\\..\\..\\files\\web\\1818");
|
||||
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
|
||||
//Directory.SetCurrentDirectory("..\\..\\..");
|
||||
//Process.GetCurrentProcess().Kill();
|
||||
|
||||
}
|
||||
|
||||
private void JoinButton_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (clientBox.SelectedItem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
string selectedClient = clientBox.SelectedItem.ToString();
|
||||
string ipaddr = IPBox.Text;
|
||||
string port = PortBox.Text;
|
||||
string userName = userNameBox.Text;
|
||||
string ID = idBox.Text;
|
||||
string hat1 = GlobalHat1;
|
||||
string hat2s = GlobalHat2;
|
||||
string hat3s = GlobalHat3;
|
||||
string shirts = GlobalShirt;
|
||||
string pants = GlobalPants;
|
||||
string tshirts = GlobalTshirt;
|
||||
if (isRobloxApp && !isRobloxPlayer)
|
||||
{
|
||||
string[] values = { shirts, pants, hat1, hat2s, hat3s, tshirts };
|
||||
for (int i = 0; i < values.Length; i++)
|
||||
{
|
||||
if (String.IsNullOrEmpty(values[i]))
|
||||
{
|
||||
values[i] = "0";
|
||||
}
|
||||
}
|
||||
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxApp.exe", "-build -script \"loadfile('http://www.roblox.com/game/join.ashx?username=" + userName + "&id=" + ID + "&ip=" + ipaddr + "&hat1=" + hat1 + "&hat2=" + hat2s + "&hat3=" + hat3s + "&shirt=" + shirts + "&pants=" + pants + "&tshirt=" + tshirts + "&port=" + port + "&hc=" + HeadColor + "&tc=" + TorsoColor + "&la=" + LeftArmColor + "&ll=" + LeftLegColor + "&ra=" + RightArmColor + "&rl=" + RightLegColor + "')()\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
|
||||
}
|
||||
|
||||
if (isRobloxPlayer)
|
||||
{
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxPlayer.exe", "-joinScriptUrl \"http://www.roblox.com/game/join.ashx?username=" + userName + "&id=" + ID + "&ip=" + ipaddr + "&hat1=" + hat1 + "&hat2=" + hat2s + "&hat3=" + hat3s + "&shirt=" + shirts + "&pants=" + pants + "&tshirt=" + tshirts + "&port=" + port + "&hc=" + HeadColor + "&tc=" + TorsoColor + "&la=" + LeftArmColor + "&ll=" + LeftLegColor + "&ra=" + RightArmColor + "&rl=" + RightLegColor + "\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
if (isRobloxPlayerBeta)
|
||||
{
|
||||
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("RobloxPlayerBeta.exe", "-j \"http://www.roblox.com/game/join.ashx?username=" + userName + "&id=" + ID + "&ip=" + ipaddr + "&hat1=" + hat1 + "&hat2=" + hat2s + "&hat3=" + hat3s + "&shirt=" + shirts + "&pants=" + pants + "&tshirt=" + tshirts + "&port=" + port + "&PlaceId=1818" + "&hc=" + HeadColor + "&tc=" + TorsoColor + "&la=" + LeftArmColor + "&ll=" + LeftLegColor + "&ra=" + RightArmColor + "&rl=" + RightLegColor + "\" -t \"0\" -a \"http://www.roblox.com/Login/Negotiate.ashx\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
if (avatarFetchRequired)
|
||||
{
|
||||
var request = (HttpWebRequest)WebRequest.Create("http://" + ipaddr + ":53642/v1.1/set-avatar/?userid=" + ID + "&headc=" + HeadColor + "&torsoc=" + TorsoColor + "&rarmc=" + RightArmColor + "&larmc=" + LeftArmColor + "&llegc=" + LeftLegColor + "&rlegc=" + RightLegColor + "&shirt=" + shirts + "&tshirt=" + tshirts + "&pants=" + pants + "&face=0&hat1=" + hat1 + "&hat2=" + hat2s + "&hat3=" + hat3s + "&torsop=&lap=0&llp=0&rap=0&rlp=0&hp=0&avatartype=" + AvatarTypeStr);
|
||||
var response = (HttpWebResponse)request.GetResponse();
|
||||
string responseString;
|
||||
using (var stream = response.GetResponseStream())
|
||||
{
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
responseString = reader.ReadToEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (is2007)
|
||||
{
|
||||
string[] values = { "GlobalHat1", "GlobalHat2", "GlobalHat3", "GlobalShirt", "GlobalPants", "GlobalTshirt" };
|
||||
for (int i = 0; i < values.Length; i++)
|
||||
{
|
||||
if (String.IsNullOrEmpty(values[i]))
|
||||
{
|
||||
values[i] = "0";
|
||||
}
|
||||
}
|
||||
|
||||
string someText = "loadfile(\"http://www.roblox.com/game/join.ashx?username=" + userName + "&id=" + ID + "&ip=" + ipaddr + "&hat1=" + GlobalHat1 + "&hat2=" + GlobalHat2 + "&hat3=" + GlobalHat3 + "&tshirt=" + GlobalTshirt + "&port=" + port + "&hc=" + HeadColor + "&tc=" + TorsoColor + "&la=" + LeftArmColor + "&ll=" + LeftLegColor + "&ra=" + RightArmColor + "&rl=" + RightLegColor + "\")()";
|
||||
someText = someText.Replace("=0&", "=86487700&");
|
||||
File.WriteAllText(@"clients\\" + selectedClient + "\\Player\\content\\join.lua", someText);
|
||||
|
||||
Directory.SetCurrentDirectory("clients\\" + selectedClient + "\\Player\\");
|
||||
Process.Start("Roblox.exe", "-script \"" + Directory.GetCurrentDirectory() + "\\content\\join.lua\"");
|
||||
Directory.SetCurrentDirectory("..\\..\\..");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show("something went wrong.");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void EditButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (isRobloxApp)
|
||||
{
|
||||
string selectedClient = clientBox.SelectedItem.ToString();
|
||||
Process.Start("clients\\" + selectedClient + "\\Player\\RobloxApp.exe", "\"" + Directory.GetCurrentDirectory() + "\\files\\web\\1818");
|
||||
}
|
||||
}
|
||||
private void cacheEnabled(object sender, EventArgs e)
|
||||
{
|
||||
if (assetCache.Checked)
|
||||
{
|
||||
if (File.Exists("files\\webroot\\asset\\nocache.php")) { File.Delete("files\\webroot\\asset\\nocache.php"); }
|
||||
if (File.Exists("files\\webroot\\asset\\cacher.php"))
|
||||
{
|
||||
|
||||
File.Replace("files\\webroot\\asset\\cacher.php", "files\\webroot\\asset\\index.php", "files\\webroot\\asset\\nocache.php");
|
||||
}
|
||||
if (File.Exists("files\\webroot\\api\\asset\\nocache.php")) { File.Delete("files\\webroot\\api\\asset\\nocache.php"); };
|
||||
if (File.Exists("files\\webroot\\api\\asset\\cacher.php"))
|
||||
{
|
||||
|
||||
File.Replace("files\\webroot\\api\\asset\\cacher.php", "files\\webroot\\api\\asset\\index.php", "files\\webroot\\api\\asset\\nocache.php");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (File.Exists("files\\webroot\\asset\\nocache.php"))
|
||||
{
|
||||
File.Replace("files\\webroot\\asset\\nocache.php", "files\\webroot\\asset\\index.php", "files\\webroot\\asset\\cacher.php");
|
||||
}
|
||||
if (File.Exists("files\\webroot\\api\\asset\\nocache.php"))
|
||||
{
|
||||
File.Replace("files\\webroot\\api\\asset\\nocache.php", "files\\webroot\\api\\asset\\index.php", "files\\webroot\\api\\asset\\cacher.php");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void charRemove(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (sender == pictureBox2)
|
||||
{
|
||||
listBox0.ClearSelected();
|
||||
hatName.Text = "";
|
||||
pictureBox2.Image = null;
|
||||
GlobalHat1 = "0";
|
||||
}
|
||||
if (sender == pictureBox3)
|
||||
{
|
||||
listBox1.ClearSelected();
|
||||
textBox2.Text = "";
|
||||
pictureBox3.Image = null;
|
||||
GlobalHat2 = "0";
|
||||
}
|
||||
if (sender == pictureBox4)
|
||||
{
|
||||
listBox2.ClearSelected();
|
||||
textBox3.Text = "";
|
||||
pictureBox4.Image = null;
|
||||
GlobalHat3 = "0";
|
||||
}
|
||||
if (sender == pictureBox5)
|
||||
{
|
||||
listBox3.ClearSelected();
|
||||
textBox4.Text = "";
|
||||
pictureBox5.Image = null;
|
||||
GlobalShirt = "0";
|
||||
}
|
||||
if (sender == pictureBox6)
|
||||
{
|
||||
listBox4.ClearSelected();
|
||||
textBox5.Text = "";
|
||||
pictureBox6.Image = null;
|
||||
GlobalPants = "0";
|
||||
}
|
||||
if (sender == pictureBox7)
|
||||
{
|
||||
listBox5.ClearSelected();
|
||||
textBox6.Text = "";
|
||||
pictureBox7.Image = null;
|
||||
GlobalTshirt = "0";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void CopyDirectory(string sourceDir, string destinationDir, bool recursive)
|
||||
{
|
||||
var dir = new DirectoryInfo(sourceDir);
|
||||
|
||||
if (!dir.Exists)
|
||||
throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}");
|
||||
|
||||
DirectoryInfo[] dirs = dir.GetDirectories();
|
||||
|
||||
Directory.CreateDirectory(destinationDir);
|
||||
|
||||
foreach (FileInfo file in dir.GetFiles())
|
||||
{
|
||||
string targetFilePath = Path.Combine(destinationDir, file.Name);
|
||||
file.CopyTo(targetFilePath);
|
||||
}
|
||||
if (recursive)
|
||||
{
|
||||
foreach (DirectoryInfo subDir in dirs)
|
||||
{
|
||||
string newDestinationDir = Path.Combine(destinationDir, subDir.Name);
|
||||
CopyDirectory(subDir.FullName, newDestinationDir, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
// https://www.codeproject.com/Articles/19911/Dynamically-Invoke-A-Method-Given-Strings-with-Met
|
||||
public static string InvokeStringMethod(string typeName, string methodName)
|
||||
{
|
||||
// Get the Type for the class
|
||||
Type calledType = Type.GetType(typeName);
|
||||
|
||||
// Invoke the method itself. The string returned by the method winds up in s
|
||||
String s = (String)calledType.InvokeMember(
|
||||
methodName,
|
||||
BindingFlags.InvokeMethod | BindingFlags.Public |
|
||||
BindingFlags.Static,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
|
||||
// Return the string that was returned by the called method.
|
||||
return s;
|
||||
}
|
||||
|
||||
private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) { mapBox.Items.Add(e.FullPath); }
|
||||
|
||||
private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e) { mapBox.Items.Remove(e.FullPath); }
|
||||
|
||||
|
||||
public static void Decompress(FileInfo fileToDecompress)
|
||||
{
|
||||
using (FileStream originalFileStream = fileToDecompress.OpenRead())
|
||||
{
|
||||
string currentFileName = fileToDecompress.FullName;
|
||||
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
|
||||
|
||||
using (FileStream decompressedFileStream = File.Create(@"files\web\1818"))
|
||||
{
|
||||
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
|
||||
{
|
||||
decompressionStream.CopyTo(decompressedFileStream);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void tabPage1_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Settings_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void bodyColorsChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (sender == headColor)
|
||||
HeadColor = headColor.Text;
|
||||
|
||||
if (sender == torsoColor)
|
||||
TorsoColor = torsoColor.Text;
|
||||
if (sender == leftArmColor)
|
||||
LeftArmColor = leftArmColor.Text;
|
||||
if (sender == leftLegColor)
|
||||
LeftLegColor = leftLegColor.Text;
|
||||
if (sender == rightArm)
|
||||
RightArmColor = rightArm.Text;
|
||||
if (sender == rightLeg)
|
||||
RightLegColor = rightLeg.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,276 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" />
|
||||
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
|
||||
<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>{F60C2EED-2270-4387-90BF-A1DAE0AB3236}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>VanillaLauncher</RootNamespace>
|
||||
<AssemblyName>VanillaLauncher</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
<TargetFrameworkProfile />
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<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=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</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</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.8.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Portable.BouncyCastle.1.8.8\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BrotliSharpLib, Version=0.3.2.0, Culture=neutral, PublicKeyToken=3f4e2a1cd615fcb7, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\BrotliSharpLib.0.3.3\lib\net451\BrotliSharpLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DiscordRPC, Version=1.2.1.24, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DiscordRichPresence.1.2.1.24\lib\net45\DiscordRPC.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.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>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||
<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>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\lib\net45\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.SQLite.EF6, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Data.SQLite.EF6.1.0.118.0\lib\net45\System.Data.SQLite.EF6.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.SQLite.Linq, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Data.SQLite.Linq.1.0.118.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
|
||||
</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.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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Reference>
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<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>
|
||||
</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>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</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>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.AccessControl, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net46\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
</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>
|
||||
</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>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net46\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<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" />
|
||||
<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>
|
||||
</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\net451\Titanium.Web.Proxy.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Classes\ColorLoader.cs" />
|
||||
<Compile Include="Classes\RichPresence.cs" />
|
||||
<Compile Include="Classes\SOAP.cs" />
|
||||
<Compile Include="DarkMode\DarkModeCS.cs" />
|
||||
<Compile Include="DarkMode\FlatComboBox.cs" />
|
||||
<Compile Include="DarkMode\FlatTabControl.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DarkMode\Messenger.cs" />
|
||||
<Compile Include="MobileProxy\Helpers\ConsoleHelper.cs" />
|
||||
<Compile Include="MobileProxy\Main.cs" />
|
||||
<Compile Include="MobileProxy\ProxyEventArgsBaseExtensions.cs" />
|
||||
<Compile Include="MobileProxy\ProxyTestController.cs" />
|
||||
<Compile Include="MobileProxy\SampleClientState.cs" />
|
||||
<Compile Include="Vanilla.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Vanilla.Designer.cs">
|
||||
<DependentUpon>Vanilla.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Vanilla.resx">
|
||||
<DependentUpon>Vanilla.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="Classes\App.config" />
|
||||
<None Include="packages.config" />
|
||||
<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>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\ipmbgqr1e8mc1.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\vanillablu2x.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\atti.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\atti1.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="FodyWeavers.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
|
||||
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Fody.6.5.5\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.5.5\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
|
||||
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
|
||||
<Import Project="..\packages\Fody.6.5.5\build\Fody.targets" Condition="Exists('..\packages\Fody.6.5.5\build\Fody.targets')" />
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<PublishUrlHistory>publish\</PublishUrlHistory>
|
||||
<InstallUrlHistory />
|
||||
<SupportUrlHistory />
|
||||
<UpdateUrlHistory />
|
||||
<BootstrapperUrlHistory />
|
||||
<ErrorReportUrlHistory />
|
||||
<FallbackCulture>en-US</FallbackCulture>
|
||||
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Costura.Fody" version="5.7.0" targetFramework="net46" developmentDependency="true" />
|
||||
<package id="DiscordRichPresence" version="1.2.1.24" targetFramework="net46" />
|
||||
<package id="EntityFramework" version="6.4.4" targetFramework="net45" />
|
||||
<package id="Fody" version="6.5.5" targetFramework="net46" developmentDependency="true" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net46" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="NETStandard.Library" version="1.6.1" targetFramework="net46" />
|
||||
<package id="Newtonsoft.Json" version="13.0.2" targetFramework="net45" />
|
||||
<package id="Portable.BouncyCastle" version="1.8.8" targetFramework="net472" />
|
||||
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.118.0" targetFramework="net45" requireReinstallation="true" />
|
||||
<package id="System.AppContext" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Buffers" version="4.5.1" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Collections" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Console" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Data.SQLite" version="1.0.118.0" targetFramework="net45" />
|
||||
<package id="System.Data.SQLite.Core" version="1.0.118.0" targetFramework="net45" />
|
||||
<package id="System.Data.SQLite.EF6" version="1.0.118.0" targetFramework="net45" requireReinstallation="true" />
|
||||
<package id="System.Data.SQLite.Linq" version="1.0.118.0" targetFramework="net45" requireReinstallation="true" />
|
||||
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Globalization" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.IO" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.IO.Compression" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Linq" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Memory" version="4.5.4" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Net.Http" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||
<package id="System.ObjectModel" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Reflection" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Security.AccessControl" version="5.0.0" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Threading" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" requireReinstallation="true" />
|
||||
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net46" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net46" />
|
||||
</packages>
|
||||
Loading…
Reference in New Issue