4 Commits

6 changed files with 311 additions and 21 deletions

3
FodyWeavers.xml Normal file
View File

@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura />
</Weavers>

33
Form1.Designer.cs generated
View File

@@ -46,6 +46,8 @@
this.label2 = new System.Windows.Forms.Label();
this.comboBox2Play = new System.Windows.Forms.ComboBox();
this.btnUninstallVersion = new System.Windows.Forms.Button();
this.btnLauncherUpdate = new System.Windows.Forms.Button();
this.labelLauncherVersion = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// textBoxUsername
@@ -118,9 +120,9 @@
//
// btnPlay
//
this.btnPlay.Location = new System.Drawing.Point(550, 26);
this.btnPlay.Location = new System.Drawing.Point(550, 150);
this.btnPlay.Name = "btnPlay";
this.btnPlay.Size = new System.Drawing.Size(104, 104);
this.btnPlay.Size = new System.Drawing.Size(104, 50);
this.btnPlay.TabIndex = 9;
this.btnPlay.Text = "Play!";
this.btnPlay.UseVisualStyleBackColor = true;
@@ -199,11 +201,33 @@
this.btnUninstallVersion.UseVisualStyleBackColor = true;
this.btnUninstallVersion.Click += new System.EventHandler(this.btnUninstallVersion_Click);
//
// btnLauncherUpdate
//
this.btnLauncherUpdate.Location = new System.Drawing.Point(550, 26);
this.btnLauncherUpdate.Name = "btnLauncherUpdate";
this.btnLauncherUpdate.Size = new System.Drawing.Size(104, 104);
this.btnLauncherUpdate.TabIndex = 18;
this.btnLauncherUpdate.Text = "LAUNCHER UPDATE AVAILIBLE";
this.btnLauncherUpdate.UseVisualStyleBackColor = true;
this.btnLauncherUpdate.Click += new System.EventHandler(this.btnLauncherUpdate_Click);
//
// labelLauncherVersion
//
this.labelLauncherVersion.AutoSize = true;
this.labelLauncherVersion.Location = new System.Drawing.Point(9, 189);
this.labelLauncherVersion.Name = "labelLauncherVersion";
this.labelLauncherVersion.Size = new System.Drawing.Size(94, 13);
this.labelLauncherVersion.TabIndex = 19;
this.labelLauncherVersion.Text = "Unknown Version.";
this.labelLauncherVersion.Click += new System.EventHandler(this.labelLauncherVersion_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(684, 161);
this.ClientSize = new System.Drawing.Size(684, 211);
this.Controls.Add(this.labelLauncherVersion);
this.Controls.Add(this.btnLauncherUpdate);
this.Controls.Add(this.btnUninstallVersion);
this.Controls.Add(this.label2);
this.Controls.Add(this.comboBox2Play);
@@ -224,6 +248,7 @@
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "IveBeenAlone\'s Hytale Launcher";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
@@ -246,6 +271,8 @@
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox comboBox2Play;
private System.Windows.Forms.Button btnUninstallVersion;
private System.Windows.Forms.Button btnLauncherUpdate;
private System.Windows.Forms.Label labelLauncherVersion;
}
}

209
Form1.cs
View File

@@ -11,6 +11,7 @@ using System.Net.Http;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
@@ -22,9 +23,16 @@ namespace HelloWorld
{
public partial class Form1 : Form
{
private const string UpdateURL = "https://ibatv.xyz/data/lnch/hy.txt";
private string SanSessionID;
private string SanTokenID;
public Form1()
{
InitializeComponent();
btnLauncherUpdate.Visible = false;
LoadComboBoxItems();
LoadDownloadedFiles();
@@ -32,8 +40,19 @@ namespace HelloWorld
string path = ".ibalaunch";
string uuidsave = ".ibalaunch\\uuid";
string usersave = ".ibalaunch\\username";
string verssave = ".ibalaunch\\lastplayedversion";
string HytaleUserData = "UserData";
Version localVersion = GetLocalVersion();
string localversionstring = localVersion.ToString();
//Console.WriteLine("Version" + localversionstring);
labelLauncherVersion.Text = localversionstring;
try
{
DirectoryInfo di = Directory.CreateDirectory(path);
@@ -94,12 +113,66 @@ namespace HelloWorld
else
{
}
// UUID File Checking
if (File.Exists(verssave))
{
FileInfo fileInfo = new FileInfo(verssave);
if (fileInfo.Length == 0)
{
Console.WriteLine("Last Played file is empty. Not setting anything.");
}
else
{
Console.WriteLine("Last Played file is not empty. Size: " + fileInfo.Length + " bytes.");
comboBox2Play.Text = File.ReadAllText(verssave);
}
}
else
{
}
}
private void button1_Click(object sender, EventArgs e){}
private void lblHelloWorld_Click(object sender, EventArgs e){}
private void label2_Click(object sender, EventArgs e){}
private void button2_Click(object sender, EventArgs e)
private async Task CheckForUpdateAsync()
{
try
{
Version localVersion = GetLocalVersion();
Version onlineVersion = await GetOnlineVersionAsync();
if (onlineVersion > localVersion)
{
btnLauncherUpdate.Visible = true;
}
}
catch (Exception ex)
{
// Optional: log or ignore
Debug.WriteLine(ex.Message);
}
}
private Version GetLocalVersion()
{
return Assembly.GetExecutingAssembly().GetName().Version;
}
private async Task<Version> GetOnlineVersionAsync()
{
using (HttpClient client = new HttpClient())
{
string versionText = await client.GetStringAsync(UpdateURL);
return new Version(versionText.Trim());
}
}
private void button1_Click(object sender, EventArgs e) { }
private void lblHelloWorld_Click(object sender, EventArgs e) { }
private void label2_Click(object sender, EventArgs e) { }
private async void button2_Click(object sender, EventArgs e)
{
// All of this shit for username data
@@ -198,6 +271,51 @@ namespace HelloWorld
var payload = new
{
uuid = "13371337-1337-1337-1337-1337" + textBoxUUID.Text,
name = textBoxUsername.Text,
scopes = new[] { "hytale:server", "hytale:client" }
};
//textBoxUUID.Text + " --name \"" + textBoxUsername.Text
string json = JsonSerializer.Serialize(payload);
using (HttpClient client = new HttpClient())
{
using (HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"))
{
HttpResponseMessage response = await client.PostAsync(
"https://sessions.sanasol.ws/game-session/child",
content
);
response.EnsureSuccessStatusCode();
string responseJson = await response.Content.ReadAsStringAsync();
// Deserialize response
SessionResponse session =
JsonSerializer.Deserialize<SessionResponse>(responseJson);
SanSessionID = session.sessionToken;
SanTokenID = session.identityToken;
//MessageBox.Show("Session created!");
Console.WriteLine("Session: " + SanSessionID + "\n\nToken: " + SanTokenID);
}
}
// Genuinely FUCK windows and C# and fucking whatever else to make this shit work
// I swear to fucking god I spent a solid 3 hours trying to make this thing
// OPEN A FUCKING EXE AND PASS ARGS CORRECTLY
@@ -213,10 +331,10 @@ namespace HelloWorld
string GamePath = "\"" + workingDirectory + "\\" + LaunchVersion + "\\" + relativeExePath + "\""; //hytale.exe
string AppPath = "\"" + workingDirectory + "\\" + LaunchVersion + Hytaleappdir + "\""; // game\latest
string UserdataPath = "\"" + baseDirectory + "UserData"+"\"";
string UserdataPath = "\"" + baseDirectory + "UserData" + "\"";
string JavaPath = "\"" + workingDirectory + "\\" + LaunchVersion + HytaleJava + "\""; // java
string arguments = " --app-dir " +AppPath+ " --user-dir " + UserdataPath + " --java-exec " + JavaPath + " --auth-mode offline --uuid 13371337-1337-1337-1337-1337" + textBoxUUID.Text + " --name \"" + textBoxUsername.Text + "\""; // Command-line arguments for the VB app
string arguments = " --app-dir " + AppPath + " --user-dir " + UserdataPath + " --java-exec " + JavaPath + " --auth-mode authenticated --uuid 13371337-1337-1337-1337-1337" + textBoxUUID.Text + " --name \"" + textBoxUsername.Text + "\"" + " --identity-token " + SanTokenID + " --session-token " + SanSessionID; // Command-line arguments for the VB app
@@ -240,15 +358,15 @@ namespace HelloWorld
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e){}
private void textBox2_TextChanged(object sender, EventArgs e){}
private void checkBox1_CheckedChanged(object sender, EventArgs e) { }
private void textBox2_TextChanged(object sender, EventArgs e) { }
private void button1_Click_1(object sender, EventArgs e)
{
Random random = new Random();
int GeneratedUUIDVal = random.Next(10000000, 100000000);
textBoxUUID.Text = GeneratedUUIDVal.ToString();
}
private void checkUUID_CheckedChanged(object sender, EventArgs e){}
private void checkUUID_CheckedChanged(object sender, EventArgs e) { }
private async void LoadComboBoxItems()
@@ -275,7 +393,7 @@ namespace HelloWorld
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { }
private async void btnInstallVersion_Click(object sender, EventArgs e)
{
@@ -297,7 +415,7 @@ namespace HelloWorld
string savePath = Path.Combine(InstallBaseDirectory, fileName);
string installDir = Path.Combine(InstallBaseDirectory, "Versions");
string localListPath = Path.Combine(installDir,"versions.txt");
string localListPath = Path.Combine(installDir, "versions.txt");
try
@@ -434,7 +552,7 @@ namespace HelloWorld
Directory.Delete(versionPath, true); // true = recursive delete
// Update local list
// string localListPath = Path.Combine(installDir, "downloaded_files.txt");
// string localListPath = Path.Combine(installDir, "downloaded_files.txt");
if (File.Exists(localListPath))
{
var downloadedFiles = File.ReadAllLines(localListPath).ToList();
@@ -455,5 +573,72 @@ namespace HelloWorld
}
}
private async void btnLauncherUpdate_Click(object sender, EventArgs e)
{
string tempExe = Path.Combine(Path.GetTempPath(), "latest.exe");
await DownloadUpdateAsync(tempExe);
StartUpdaterAndExit(tempExe);
}
private async Task DownloadUpdateAsync(string destinationPath)
{
using (HttpClient client = new HttpClient())
using (var response = await client.GetAsync("https://ibatv.xyz/data/lnch/hy/latest.exe", HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode();
using (var fs = new FileStream(
destinationPath,
FileMode.Create,
FileAccess.Write,
FileShare.None))
{
await response.Content.CopyToAsync(fs);
}
}
}
private void StartUpdaterAndExit(string newExePath)
{
string currentExe = Application.ExecutablePath;
string cmd =
$"/C timeout 2 >nul && " +
$"copy /Y \"{newExePath}\" \"{currentExe}\" && " +
$"start \"\" \"{currentExe}\"";
Process.Start(new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = cmd,
WindowStyle = ProcessWindowStyle.Normal,
CreateNoWindow = true
});
Application.Exit();
}
private async void Form1_Load(object sender, EventArgs e)
{
await CheckForUpdateAsync();
}
private void labelLauncherVersion_Click(object sender, EventArgs e) { }
public class SessionResponse
{
public string sessionToken { get; set; }
public string identityToken { get; set; }
}
}
}

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="packages\Costura.Fody.6.0.0\build\Costura.Fody.props" Condition="Exists('packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -12,7 +13,11 @@
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<PublishUrl>publish\</PublishUrl>
<IsWebBootstrapper>false</IsWebBootstrapper>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishSingleFile>true</PublishSingleFile>
<PublishUrl>Publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
@@ -22,10 +27,11 @@
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<AutorunEnabled>true</AutorunEnabled>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -48,16 +54,56 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
<SignManifests>true</SignManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>hytale.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>F2C20D945681822F49095156F092FCAC954EAA94</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>IBAHytaleLauncher_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>packages\Costura.Fody.6.0.0\lib\netstandard2.0\Costura.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Bcl.AsyncInterfaces.10.0.2\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Pipelines, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.IO.Pipelines.10.0.2\lib\net462\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Memory.4.6.3\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encodings.Web, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Text.Encodings.Web.10.0.2\lib\net462\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Text.Json.10.0.2\lib\net462\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -85,6 +131,8 @@
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="IBAHytaleLauncher_TemporaryKey.pfx" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -122,4 +170,16 @@
<Content Include="hytale.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets" Condition="Exists('packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.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\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets'))" />
<Error Condition="!Exists('packages\Fody.6.8.2\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Fody.6.8.2\build\Fody.targets'))" />
<Error Condition="!Exists('packages\Costura.Fody.6.0.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Costura.Fody.6.0.0\build\Costura.Fody.props'))" />
<Error Condition="!Exists('packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Costura.Fody.6.0.0\build\Costura.Fody.targets'))" />
</Target>
<Import Project="packages\Fody.6.8.2\build\Fody.targets" Condition="Exists('packages\Fody.6.8.2\build\Fody.targets')" />
<Import Project="packages\Costura.Fody.6.0.0\build\Costura.Fody.targets" Condition="Exists('packages\Costura.Fody.6.0.0\build\Costura.Fody.targets')" />
</Project>

View File

@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.7.26.0")]
[assembly: AssemblyFileVersion("3.7.26.0")]
[assembly: AssemblyVersion("3.9.0.0")]
[assembly: AssemblyFileVersion("3.9.0.0")]

15
packages.config Normal file
View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="6.0.0" targetFramework="net472" developmentDependency="true" />
<package id="Fody" version="6.8.2" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="10.0.2" targetFramework="net472" />
<package id="System.Buffers" version="4.6.1" targetFramework="net472" />
<package id="System.IO.Pipelines" version="10.0.2" targetFramework="net472" />
<package id="System.Memory" version="4.6.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net472" />
<package id="System.Text.Encodings.Web" version="10.0.2" targetFramework="net472" />
<package id="System.Text.Json" version="10.0.2" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.6.3" targetFramework="net472" />
<package id="System.ValueTuple" version="4.6.1" targetFramework="net472" />
</packages>