SCAR Code:
Program IDontEvenKnowWhatThisFormIsForYetXD;
(* YES I know I have weird tabbing... *)
var Form:TForm;
TabController:TPageControl;
Tabs:array[1..3] of TTabSheet;
PlayerScrollBox:TScrollBox;
PlayerFormEdits:array[1..5] of array of TEdit;
PlayerFormLabels:array[1..5] of array of TLabel;
PlayerFormChecks:array of TCheckBox;
OtherEdits:array[1..4] of TEdit;
Labels:array[1..4] of TLabel;
Checks:array[1..2] of TCheckBox;
PlayerAdd,PlayerDelete,SaveSettings,LoadSettings:TButton;
Ok,Cancel:TButton;
AnObject:TObject; // Because TObjects can't be used as variants for ThreadSafeCalls
function TheForm:Boolean; forward;
procedure SetEditProperties(var anEdit:TEdit;var aLabel:TLabel;x,y,w,h:integer;text:string;password:boolean); forward;
procedure VanishLabel; forward;
procedure SafeVanishLabel(Sender:TObject); forward;
procedure AddPlayer; forward;
procedure SafeAddPlayer(Sender:TObject); forward;
procedure DeletePlayer; forward;
procedure SafeDeletePlayer(Sender:TObject); forward;
procedure EnablePlayer(Sender:TObject); forward;
procedure ScriptTerminate; forward;
procedure SaveTheSettings(Sender:TObject); forward;
procedure LoadTheSettings(Sender:TObject); forward;
procedure OnFormClose(Sender: TObject; var CanClose: Boolean); forward;
procedure CloseForm(Sender:TObject); forward;
function TheForm:Boolean;
var i:integer;
begin
Form := CreateForm;
Form.SetBounds(0,0,600,450);
Form.Position := poScreenCenter;
Form.Caption := 'Widget''s Essence Miner';
Form.BorderIcons := [biSystemMenu];
Form.OnClick := @SafeVanishLabel;
Form.OnCloseQuery := @OnFormClose;
TabController := TPageControl.Create(Form);
TabController.Parent := Form;
TabController.SetBounds(2,2,590,385);
TabController.Visible := True;
for i := 1 to 2 do
begin
Tabs[i] := TTabSheet.Create(Form);
Tabs[i].PageControl := TabController;
end;
Tabs[1].Caption := 'Setup';
Tabs[2].Caption := 'Players';
// Tabs[3].Caption := 'Autoresponder'; // Not yet =)
for i := 1 to 4 do
begin
OtherEdits[i] := TEdit.Create(Form);
OtherEdits[i].Parent := Tabs[1];
OtherEdits[i].OnClick := @SafeVanishLabel;
Labels[i] := TLabel.Create(Form);
Labels[i].Parent := OtherEdits[i];
Labels[i].Font.Color := $AAAAAA;
Labels[i].Color := OtherEdits[i].Color;
Labels[i].Transparent := False;
Labels[i].OnClick := @SafeVanishLabel;
end;
SetEditProperties(OtherEdits[1],Labels[1],50,50,120,20,'Stats ID',False);
SetEditProperties(OtherEdits[2],Labels[2],175,50,150,20,'Stats Pass',True);
SetEditProperties(OtherEdits[3],Labels[3],50,80,135,20,'Mouse Speed',False);
SetEditProperties(OtherEdits[4],Labels[4],190,80,135,20,'Loads Per Login',False);
OtherEdits[3].Text := '15';
OtherEdits[4].Text := '4';
for i := 1 to 2 do
begin
Checks[i] := TCheckBox.Create(Form);
Checks[i].Parent := Tabs[1]
Checks[i].SetBounds(51,80+30*i,270,20);
end;
Checks[1].Caption := 'Use Pouches';
Checks[2].Caption := 'Auto-Respond';
PlayerScrollBox := TScrollBox.Create(Form);
PlayerScrollBox.Parent := Tabs[2];
PlayerScrollBox.SetBounds(10,10,560,275);
PlayerScrollBox.Color := 16119800;
SafeAddPlayer(Form);
PlayerAdd := TButton.Create(Form);
PlayerAdd.Parent := Tabs[2];
PlayerAdd.SetBounds(30,300,100,25);
PlayerAdd.Caption := 'Add Player';
PlayerAdd.OnClick := @SafeAddPlayer;
PlayerDelete := TButton.Create(Form);
PlayerDelete.Parent := Tabs[2];
PlayerDelete.SetBounds(135,300,100,25);
PlayerDelete.Caption := 'Delete Player';
PlayerDelete.OnClick := @SafeDeletePlayer;
SaveSettings := TButton.Create(Form);
SaveSettings.Parent := Form;
SaveSettings.SetBounds(5,387,100,25);
SaveSettings.Caption := 'Save Settings';
SaveSettings.OnClick := @SaveTheSettings;
LoadSettings := TButton.Create(Form);
LoadSettings.Parent := Form;
LoadSettings.SetBounds(110,387,100,25);
LoadSettings.Caption := 'LoadSettings';
LoadSettings.OnClick := @LoadTheSettings;
LoadTheSettings(Form);
Ok := TButton.Create(Form);
Ok.Parent := Form;
Ok.SetBounds(485,387,100,25);
Ok.Caption := 'OK';
Ok.OnClick := @CloseForm;
Cancel := TButton.Create(Form);
Cancel.Parent := Form;
Cancel.SetBounds(380,387,100,25);
Cancel.Caption := 'Cancel';
Cancel.OnClick := @CloseForm;
Result := (Form.ShowModal=MrOk);
end;
function ShowForm:Boolean;
var tva:Tvariantarray;
begin
result := ThreadSafeCall('TheForm',tva);
end;
procedure SetEditProperties(var anEdit:TEdit;var aLabel:TLabel;x,y,w,h:integer;text:string;password:boolean);
begin
anEdit.SetBounds(x,y,w,h);
if password then
anEdit.PasswordChar := '*';
aLabel.SetBounds(w-Form.Canvas.TextWidth(text)-5,-1,Form.Canvas.TextWidth(text)+5,20);
aLabel.Caption := text;
end;
procedure SafeVanishLabel(Sender:TObject);
var tva:Tvariantarray;
begin
AnObject := Sender;
tva := []
try
ThreadSafeCall('VanishLabel',tva);
except
Writeln('Thread error');
end;
end;
procedure VanishLabel;
var i,i2:integer;
TheEdit:TEdit;
TheLabel:TLabel;
Sender:TObject;
begin
try
Sender := AnObject;
for i := 1 to high(OtherEdits) do
if not Labels[i].visible then
Labels[i].visible := true;
for i := 1 to 5 do
for i2 := 0 to (getarraylength(PlayerFormEdits[1])-1) do
if not PlayerFormLabels[i][i2].Visible then
PlayerFormLabels[i][i2].Visible := True;
TheLabel := nil;
TheEdit := nil;
for i := 1 to high(OtherEdits) do
if (Sender=OtherEdits[i]) OR (Sender=Labels[i]) then
begin
TheLabel := Labels[i];
TheEdit := OtherEdits[i];
end;
for i := 1 to high(PlayerFormEdits) do
for i2 := 1 to getarraylength(PlayerFormEdits[1]) do
if (Sender=PlayerFormEdits[i][i2-1]) OR (Sender=PlayerFormLabels[i][i2-1]) then
begin
TheLabel := PlayerFormLabels[i][i2-1];
TheEdit := PlayerFormEdits[i][i2-1];
end;
if not ((TheEdit=nil) OR (TheLabel=nil)) then
begin
TheLabel.Visible := False;
TheEdit.SetFocus;
end else
if not (Sender=Form) then
Form.SetFocus;
Sender := nil;
AnObject := nil;
except
Writeln('Weird error with the labels *sigh*');
end;
end;
procedure AddPlayer;
var i,i2:integer;
begin
i2 := GetarrayLength(PlayerFormEdits[1]);
for i := 1 to 5 do
begin
SetarrayLength(PlayerFormEdits[i],GetarrayLength(PlayerFormEdits[i])+1);
SetarrayLength(PlayerFormLabels[i],GetarrayLength(PlayerFormLabels[i])+1);
PlayerFormEdits[i][i2] := TEdit.Create(Form);
PlayerFormEdits[i][i2].Visible := False;
PlayerFormEdits[i][i2].Parent := PlayerScrollBox;
PlayerFormEdits[i][i2].OnClick := @SafeVanishLabel;
PlayerFormLabels[i][i2] := TLabel.Create(Form);
PlayerFormLabels[i][i2].Parent := PlayerFormEdits[i][i2];
PlayerFormLabels[i][i2].Font.Color := $AAAAAA;
PlayerFormLabels[i][i2].Color := PlayerFormEdits[i][0].Color;
PlayerFormLabels[i][i2].OnClick := @SafeVanishLabel;
end;
SetarrayLength(PlayerFormChecks,GetarrayLength(PlayerFormChecks)+1);
SetEditProperties(PlayerFormEdits[1][i2],PlayerFormLabels[1][i2],25,10+25*i2,120,20,'Username',false);
SetEditProperties(PlayerFormEdits[2][i2],PlayerFormLabels[2][i2],150,10+25*i2,120,20,'Password',true);
SetEditProperties(PlayerFormEdits[3][i2],PlayerFormLabels[3][i2],275,10+25*i2,70,20,'Nick',false);
SetEditProperties(PlayerFormEdits[4][i2],PlayerFormLabels[4][i2],350,10+25*i2,70,20,'PIN',false);
SetEditProperties(PlayerFormEdits[5][i2],PlayerFormLabels[5][i2],425,10+25*i2,110,20,'Total Loads',false);
PlayerFormChecks[i2] := TCheckBox.Create(Form);
PlayerFormChecks[i2].Visible := False;
PlayerFormChecks[i2].Color := 16119800;
PlayerFormChecks[i2].Parent := PlayerScrollBox;
PlayerFormChecks[i2].SetBounds(5,11+25*i2,20,20);
PlayerFormChecks[i2].Checked := True;
PlayerFormChecks[i2].OnClick := @EnablePlayer;
for i := 1 to 5 do
begin
PlayerFormEdits[i][i2].Visible := True;
PlayerFormLabels[i][i2].Visible := True;
end;
PlayerFormChecks[i2].Visible := True;
end;
procedure SafeAddPlayer(Sender:TObject);
var tva:Tvariantarray;
begin
ThreadSafeCall('AddPlayer',tva);
end;
procedure DeletePlayer;
var i,i2:integer;
begin
try
i := GetarrayLength(PlayerFormChecks)-1;
if (i=0) then Exit;
for i2 := 1 to 5 do
begin
PlayerFormEdits[i2][i].Parent := nil;
PlayerFormLabels[i2][i].Parent := nil;
SetarrayLength(PlayerFormLabels[i2],i);
SetarrayLength(PlayerFormEdits[i2],i);
end;
PlayerFormChecks[i].Parent := nil;
SetarrayLength(PlayerFormChecks,i);
except
GetApplication.MessageBox('Error deleting player','Error',1);
end;
end;
procedure SafeDeletePlayer(Sender:TObject);
var tva:Tvariantarray;
begin
ThreadSafeCall('DeletePlayer',tva);
end;
procedure EnablePlayer(Sender:TObject);
var i,i2:integer;
begin
for i := 0 to (getarraylength(PlayerFormChecks)-1) do
if Sender=PlayerFormChecks[i] then Break;
for i2 := 1 to 4 do
begin
PlayerFormEdits[i2][i].Enabled := PlayerFormChecks[i].Checked;
if PlayerFormChecks[i].Checked then
PlayerFormEdits[i2][i].Color := $FFFFFF
else
PlayerFormEdits[i2][i].Color := $EEEEEE;
end;
end;
function Encrypt(text:string):string;
var i:integer;
begin
for i := 1 to length(text) do
result := result+Chr(ord(text[i])-8);
end;
function Decrypt(text:string):string;
var i:integer;
begin
for i := 1 to length(text) do
result := result+Chr(ord(text[i])+8);
end;
procedure SaveTheSettings(Sender:TObject);
var path:string;
i:integer;
begin
Path := AppPath+'EssMinerSettings.ini';
WriteINI('Settings','StatsID',OtherEdits[1].Text,Path);
WriteINI('Settings','StatsPass',Encrypt(OtherEdits[2].Text),Path);
WriteINI('Settings','MouseSpeed',OtherEdits[3].Text,Path);
WriteINI('Settings','Loads',OtherEdits[4].Text,Path);
WriteINI('Settings','UsePouches',BoolToStr(Checks[1].Checked),Path);
WriteINI('Settings','Autorespond',BoolToStr(Checks[2].Checked),Path);
WriteINI('Settings','Players',IntToStr(GetarrayLength(PlayerFormEdits[1])),Path);
for i := 0 to (GetarrayLength(PlayerFormEdits[1])-1) do
begin
WriteINI('Player'+inttostr(i),'User',PlayerFormEdits[1][i].Text,Path);
WriteINI('Player'+inttostr(i),'Pass',Encrypt(PlayerFormEdits[2][i].Text),Path);
WriteINI('Player'+inttostr(i),'Nick',PlayerFormEdits[3][i].Text,Path);
WriteINI('Player'+inttostr(i),'PIN',PlayerFormEdits[4][i].Text,Path);
WriteINI('Player'+inttostr(i),'Loads',PlayerFormEdits[5][i].Text,Path);
end;
end;
procedure LoadTheSettings(Sender:TObject);
var path:string;
i:integer;
begin
Path := AppPath+'EssMinerSettings.ini';
if not FileExists(path) then Exit;
OtherEdits[1].Text := ReadINI('Settings','StatsID',path);
OtherEdits[2].Text := Decrypt(ReadINI('Settings','StatsPass',path));
OtherEdits[3].Text := ReadINI('Settings','MouseSpeed',path);
OtherEdits[4].Text := ReadINI('Settings','Loads',path);
for i := 2 to GetarrayLength(PlayerFormEdits[1]) do
SafeDeletePlayer(Form);
for i := 0 to (StrToIntDef(ReadINI('Settings','Players',path),0)-1) do
begin
if (i>0) then
SafeAddPlayer(Form);
PlayerFormEdits[1][i].Text := ReadINI('Player'+inttostr(i),'User',path);
PlayerFormEdits[2][i].Text := Decrypt(ReadINI('Player'+inttostr(i),'Pass',path));
PlayerFormEdits[3][i].Text := ReadINI('Player'+inttostr(i),'Nick',path);
PlayerFormEdits[4][i].Text := ReadINI('Player'+inttostr(i),'PIN',path);
PlayerFormEdits[5][i].Text := ReadINI('Player'+inttostr(i),'Loads',path);
end;
Checks[1].Checked := StrToBoolDef(ReadINI('Settings','UsePouches',path),False);
Checks[2].Checked := StrToBoolDef(ReadINI('Settings','Autorespond',path),False);
end;
procedure OnFormClose(Sender: TObject; var CanClose: Boolean);
var message:integer;
begin
message := GetApplication.MessageBox('Would you like to save the form settings?','Save Changes?',3);
CanClose := (message<>2);
if (message=6) then
SaveTheSettings(Form);
end;
procedure CloseForm(Sender:TObject);
begin
if (Sender=Ok) then
Form.ModalResult := mrOk
else
Form.ModalResult := mrCancel;
end;
procedure ScriptTerminate;
begin
Writeln('Script ending');
// Bitmaps and such would be freed here
end;
begin
if ShowForm then
Writeln('Clicked OK')
else
Writeln('Clicked Cancel');
Writeln('Form closed');
FreeForm(Form);
writeln('Form freed');
end.
(deal with the standards :p)