Files
Hytale_Launcher/unit1.pas
2026-02-09 01:08:56 +02:00

182 lines
4.1 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Process;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
player_name_edit: TEdit;
procedure start_btnClick(Sender: TObject);
procedure exit_btnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
procedure SetPlayerName();
public
end;
var
Form1: TForm1;
APath: String;
PLAYER_UUID: String;
PLAYER_NAME: String;
PX, PY: Integer;
MouseIsDown: Boolean;
const
Hytale_Dir = 'package\game\latest\Client\';
app_dir = 'package\game\latest';
java_exec = 'package\jre\latest\bin\java.exe';
user_dir = 'UserData';
implementation
function GenerateUniqueID: string;
var
guid: TGUID;
guidStr: string;
begin
Result := '';
if CreateGUID(guid) = 0 then
begin
guidStr := GUIDToString(guid); // Получаем GUID со скобками
guidStr := StringReplace(guidStr, '{', '', [rfReplaceAll]); // Удаляем '{'
guidStr := StringReplace(guidStr, '}', '', [rfReplaceAll]); // Удаляем '}'
Result := guidStr;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
MouseIsDown := True;
PX := X;
PY := Y;
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if MouseIsDown then
begin
SetBounds(Form1.Left + (X - PX), Form1.Top + (Y - PY), Form1.Width, Form1.Height);
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
MouseIsDown := False;
end;
procedure GenerateID();
var
f: TextFile;
FileContent: string;
tmp_uuid: string;
begin
if not FileExists(APath+user_dir+'\uuid.txt') then
begin
tmp_uuid:= GenerateUniqueID();
AssignFile(f, APath+user_dir+'\uuid.txt');
Rewrite(f);
Write(f, AnsiLowerCase(tmp_uuid));
CloseFile(f);
PLAYER_UUID:=AnsiLowerCase(tmp_uuid);
end
else
begin
AssignFile(f, APath+user_dir+'\uuid.txt');
Reset(f);
Read(f, FileContent);
CloseFile(f);
PLAYER_UUID:=FileContent;
end;
end;
procedure TForm1.SetPlayerName();
var
f: TextFile;
FileContent: string;
begin
if FileExists(APath+user_dir+'\username.txt') then
begin
AssignFile(f,APath+user_dir+'\username.txt');
Reset(f);
Read(f, FileContent);
CloseFile(f);
player_name_edit.Text:=FileContent;
PLAYER_NAME:=FileContent;
end
end;
{$R *.lfm}
{ TForm1 }
procedure TForm1.start_btnClick(Sender: TObject);
var
f: TextFile;
Process: TProcess;
Parameters: string;
begin
AssignFile(f, APath+user_dir+'\username.txt');
Rewrite(f);
Write(f, player_name_edit.Text);
CloseFile(f);
Parameters:= '--app-dir "'+APath+app_dir+'" --java-exec "'+APath+java_exec+'" --user-dir "'+APath+user_dir+'" --auth-mode offline --uuid '+PLAYER_UUID+' --name '+PLAYER_NAME;
//ShowMessage(APath+Hytale_Dir+'HytaleClient.exe '+Parameters);
if not FileExists(APath+Hytale_Dir+'HytaleClient.exe') then
begin
ShowMessage('HytaleClient.exe не найден');
Close;
end
else
begin
ChDir(APath+Hytale_Dir);
Process:= TProcess.Create(nil);
Process.Executable:= 'HytaleClient.exe';
Process.Parameters.Add(Parameters);
Process.Execute;
Close;
end
end;
procedure TForm1.exit_btnClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
APath:= ExtractFilePath(Application.ExeName);
if not ForceDirectories(ExtractFilePath(APath+user_dir+'\')) then
begin
ShowMessage('Не удалось создать папку UserData');
Close;
end;
SetPlayerName();
GenerateID();
end;
end.