2011-08-24 18:40:28 -04:00
|
|
|
(**
|
2011-08-26 19:34:14 -04:00
|
|
|
* This extension was originally developed by Shuttleu and has
|
|
|
|
* since been developed by the SRL community.
|
2011-08-24 18:40:28 -04:00
|
|
|
*
|
|
|
|
* - This extension was last updated 16 August 2011 by Shuttleu
|
|
|
|
*)
|
|
|
|
|
|
|
|
program New;
|
|
|
|
|
|
|
|
const
|
|
|
|
Extension = '.ini';
|
|
|
|
|
|
|
|
type
|
|
|
|
ThePlayer = record
|
|
|
|
User, Pass, Nick, Loc, Pin: string;
|
|
|
|
Strings: array of string;
|
|
|
|
Integers: TIntegerArray;
|
|
|
|
Booleans: array of Boolean;
|
|
|
|
Active: Boolean;
|
|
|
|
end;
|
|
|
|
|
|
|
|
var
|
|
|
|
MyMenu, SRLRemoteMenuItem: TMenuItem;
|
|
|
|
ThePlayers: Array of ThePlayer;
|
|
|
|
Remote : TForm;
|
|
|
|
UserLabel, PassLabel, NickLabel, PinLabel, ActiveLabel, PlayerLabel : TLabel;
|
|
|
|
Active : TCheckBox;
|
|
|
|
User, Pass, Nick, Pin : TEdit;
|
|
|
|
SetButton1, SetButton2, CloseButton2, PreviousButton : TButton;
|
|
|
|
AddButton, DeleteButton, NextButton : TButton;
|
|
|
|
IntegersLabel, StringsLabel, BooleansLabel : array of TLabel;
|
|
|
|
Strings : array of TComboBox;
|
|
|
|
Booleans : array of TCheckBox;
|
|
|
|
Integers : array of TEdit;
|
|
|
|
HowManyPlayerss, PlayerNumber: Integer;
|
|
|
|
INIPath, TheScriptName: string;
|
|
|
|
IntegerNames, BooleanNames, StringNames: TStringArray;
|
|
|
|
TheStrings: Array of Array of string;
|
|
|
|
InstanceArray: TIntegerArray;
|
|
|
|
OpenInstance : TForm;
|
|
|
|
Label1 : TLabel;
|
|
|
|
InstanceNumber : TComboBox;
|
|
|
|
SetButton : TButton;
|
|
|
|
CloseButton : TButton;
|
|
|
|
OpenMain: Boolean;
|
|
|
|
ScriptNames: array of string;
|
|
|
|
|
|
|
|
procedure LoadVars;
|
|
|
|
var
|
|
|
|
i, j: Integer;
|
|
|
|
begin
|
|
|
|
HowManyPlayerss:= StrToInt(ReadINI('Players', 'HowMany', INIPath));
|
|
|
|
SetArrayLength(IntegerNames, StrToInt(ReadINI('Players', 'Integers', INIPath)));
|
|
|
|
SetArrayLength(StringNames, StrToInt(ReadINI('Players', 'Strings', INIPath)));
|
|
|
|
SetArrayLength(BooleanNames, StrToInt(ReadINI('Players', 'Booleans', INIPath)));
|
|
|
|
SetArrayLength(TheStrings, Length(StringNames));
|
|
|
|
for i:=0 to High(TheStrings) do
|
|
|
|
SetArrayLength(TheStrings[i], StrToInt(ReadINI('Strings', '('+IntToStr(i)+')HowMany', INIPath)));
|
|
|
|
for i:=0 to High(TheStrings) do
|
|
|
|
for j:=0 to High(TheStrings[i]) do
|
|
|
|
TheStrings[i][j]:= ReadINI('Strings', '('+IntToStr(i)+')('+IntToStr(j)+')', INIPath);
|
|
|
|
for i:=0 to High(IntegerNames) do
|
|
|
|
IntegerNames[i]:= ReadINI('Integers', IntToStr(i), INIPath);
|
|
|
|
for i:=0 to High(StringNames) do
|
|
|
|
StringNames[i]:= ReadINI('Strings', IntToStr(i), INIPath);
|
|
|
|
for i:=0 to High(BooleanNames) do
|
|
|
|
BooleanNames[i]:= ReadINI('Booleans', IntToStr(i), INIPath);
|
|
|
|
SetArrayLength(ThePlayers, HowManyPlayerss);
|
|
|
|
for i:=0 to HowManyPlayerss-1 do
|
|
|
|
begin
|
|
|
|
SetArrayLength(ThePlayers[i].Integers, StrToInt(ReadINI('Players', 'Integers', INIPath)));
|
|
|
|
SetArrayLength(ThePlayers[i].Strings, StrToInt(ReadINI('Players', 'Strings', INIPath)));
|
|
|
|
SetArrayLength(ThePlayers[i].Booleans, StrToInt(ReadINI('Players', 'Booleans', INIPath)));
|
|
|
|
ThePlayers[i].User:= ReadINI(IntToStr(i), 'User', INIPath);
|
|
|
|
ThePlayers[i].Pass:= ReadINI(IntToStr(i), 'Pass', INIPath);
|
|
|
|
ThePlayers[i].Nick:= ReadINI(IntToStr(i), 'Nick', INIPath);
|
|
|
|
ThePlayers[i].Pin:= ReadINI(IntToStr(i), 'Pin', INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[i].Integers) do
|
|
|
|
ThePlayers[i].Integers[j]:= StrToInt(ReadINI(IntToStr(i), 'Integer'+IntToStr(j), INIPath));
|
|
|
|
for j:=0 to High(ThePlayers[i].Strings) do
|
|
|
|
ThePlayers[i].Strings[j]:= ReadINI(IntToStr(i), 'String'+IntToStr(j), INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[i].Booleans) do
|
|
|
|
ThePlayers[i].Booleans[j]:= StrToBool(ReadINI(IntToStr(i), 'Boolean'+IntToStr(j), INIPath));
|
|
|
|
ThePlayers[i].Active:= StrToBool(ReadINI(IntToStr(i), 'Active', INIPath));
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure SaveVars;
|
|
|
|
var
|
|
|
|
i, j: Integer;
|
|
|
|
begin
|
|
|
|
ThePlayers[PlayerNumber].User:= User.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pass:= Pass.Text;
|
|
|
|
ThePlayers[PlayerNumber].Nick:= Nick.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pin:= Pin.Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
ThePlayers[PlayerNumber].Integers[j]:= StrToInt(Integers[j].Text);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
ThePlayers[PlayerNumber].Strings[j]:= Strings[j].Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
ThePlayers[PlayerNumber].Booleans[j]:= Booleans[j].Checked;
|
|
|
|
ThePlayers[PlayerNumber].Active:= Active.Checked;
|
|
|
|
|
|
|
|
WriteINI('Main', 'Changed', 'True', INIPath);
|
|
|
|
WriteINI('Players', 'HowMany', IntToStr(Length(ThePlayers)), INIPath);
|
|
|
|
WriteINI('Players', 'Integers', IntToStr(Length(ThePlayers[0].Integers)), INIPath);
|
|
|
|
WriteINI('Players', 'Strings', IntToStr(Length(ThePlayers[0].Strings)), INIPath);
|
|
|
|
WriteINI('Players', 'Booleans', IntToStr(Length(ThePlayers[0].Booleans)), INIPath);
|
|
|
|
|
|
|
|
|
|
|
|
for i:=0 to High(ThePlayers) do
|
|
|
|
begin
|
|
|
|
WriteINI(IntToStr(i), 'User', ThePlayers[i].User, INIPath);
|
|
|
|
WriteINI(IntToStr(i), 'Pass', ThePlayers[i].Pass, INIPath);
|
|
|
|
WriteINI(IntToStr(i), 'Nick', ThePlayers[i].Nick, INIPath);
|
|
|
|
WriteINI(IntToStr(i), 'Pin', ThePlayers[i].Pin, INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[i].Integers) do
|
|
|
|
WriteINI(IntToStr(i), 'Integer'+IntToStr(j), IntToStr(ThePlayers[i].Integers[j]), INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[i].Strings) do
|
|
|
|
WriteINI(IntToStr(i), 'String'+IntToStr(j), ThePlayers[i].Strings[j], INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[i].Booleans) do
|
|
|
|
WriteINI(IntToStr(i), 'Boolean'+IntToStr(j), BoolToStr(ThePlayers[i].Booleans[j]), INIPath);
|
|
|
|
WriteINI(IntToStr(i), 'Active', BoolToStr(ThePlayers[i].Active), INIPath);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
Procedure Click(Sender: TObject);
|
|
|
|
Begin
|
|
|
|
if ((Sender = SetButton1) or (Sender = SetButton2)) then
|
|
|
|
SaveVars;
|
|
|
|
Remote.ModalResult:= mrOk;
|
|
|
|
End;
|
|
|
|
|
|
|
|
Procedure PreviousPlayer(Sender: TObject);
|
|
|
|
var
|
|
|
|
j: Integer;
|
|
|
|
Begin
|
|
|
|
if (PlayerNumber = 0) then Exit;
|
|
|
|
|
|
|
|
ThePlayers[PlayerNumber].User:= User.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pass:= Pass.Text;
|
|
|
|
ThePlayers[PlayerNumber].Nick:= Nick.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pin:= Pin.Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
ThePlayers[PlayerNumber].Integers[j]:= StrToInt(Integers[j].Text);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
ThePlayers[PlayerNumber].Strings[j]:= Strings[j].Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
ThePlayers[PlayerNumber].Booleans[j]:= Booleans[j].Checked;
|
|
|
|
ThePlayers[PlayerNumber].Active:= Active.Checked;
|
|
|
|
|
|
|
|
Dec(PlayerNumber);
|
|
|
|
|
|
|
|
User.Text:= ThePlayers[PlayerNumber].User;
|
|
|
|
Pass.Text:= ThePlayers[PlayerNumber].Pass;
|
|
|
|
Nick.Text:= ThePlayers[PlayerNumber].Nick;
|
|
|
|
Pin.Text:= ThePlayers[PlayerNumber].Pin;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
Integers[j].Text:= IntToStr(ThePlayers[PlayerNumber].Integers[j]);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
Strings[j].Text:= ThePlayers[PlayerNumber].Strings[j];
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
Booleans[j].Checked:= ThePlayers[PlayerNumber].Booleans[j];
|
|
|
|
Active.Checked:= ThePlayers[PlayerNumber].Active;
|
|
|
|
|
|
|
|
PlayerLabel.Caption:= 'User '+IntToStr(PlayerNumber+1)+' of '+IntToStr(HowManyPlayerss);
|
|
|
|
End;
|
|
|
|
|
|
|
|
Procedure AddPlayer(Sender: TObject);
|
|
|
|
var
|
|
|
|
j: Integer;
|
|
|
|
Begin
|
|
|
|
ThePlayers[PlayerNumber].User:= User.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pass:= Pass.Text;
|
|
|
|
ThePlayers[PlayerNumber].Nick:= Nick.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pin:= Pin.Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
ThePlayers[PlayerNumber].Integers[j]:= StrToInt(Integers[j].Text);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
ThePlayers[PlayerNumber].Strings[j]:= Strings[j].Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
ThePlayers[PlayerNumber].Booleans[j]:= Booleans[j].Checked;
|
|
|
|
ThePlayers[PlayerNumber].Active:= Active.Checked;
|
|
|
|
|
|
|
|
Inc(HowManyPlayerss)
|
|
|
|
|
|
|
|
SetArrayLength(ThePlayers, HowManyPlayerss);
|
|
|
|
SetArrayLength(ThePlayers[HowManyPlayerss-1].Integers, Length(ThePlayers[HowManyPlayerss-2].Integers));
|
|
|
|
SetArrayLength(ThePlayers[HowManyPlayerss-1].Strings, Length(ThePlayers[HowManyPlayerss-2].Strings));
|
|
|
|
SetArrayLength(ThePlayers[HowManyPlayerss-1].Booleans, Length(ThePlayers[HowManyPlayerss-2].Booleans));
|
|
|
|
|
|
|
|
PlayerNumber:= HowManyPlayerss-1;
|
|
|
|
|
|
|
|
User.Text:= 'User';
|
|
|
|
Pass.Text:= 'Pass';
|
|
|
|
Nick.Text:= 'Nick';
|
|
|
|
Pin.Text:= '0000';
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
Integers[j].Text:= '0';
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
Strings[j].Text:= ReadINI('Strings', '('+IntToStr(j)+')(0)', INIPath);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
Booleans[j].Checked:= True;
|
|
|
|
Active.Checked:= True;
|
|
|
|
|
|
|
|
PlayerLabel.Caption:= 'User '+IntToStr(PlayerNumber+1)+' of '+IntToStr(HowManyPlayerss);
|
|
|
|
End;
|
|
|
|
|
|
|
|
Procedure DeletePlayer(Sender: TObject);
|
|
|
|
var
|
|
|
|
i, j: Integer;
|
|
|
|
TempPlayers: Array of ThePlayer;
|
|
|
|
Begin
|
|
|
|
if (HowManyPlayerss = 1) then Exit;
|
|
|
|
|
|
|
|
ThePlayers[PlayerNumber].User:= User.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pass:= Pass.Text;
|
|
|
|
ThePlayers[PlayerNumber].Nick:= Nick.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pin:= Pin.Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
ThePlayers[PlayerNumber].Integers[j]:= StrToInt(Integers[j].Text);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
ThePlayers[PlayerNumber].Strings[j]:= Strings[j].Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
ThePlayers[PlayerNumber].Booleans[j]:= Booleans[j].Checked;
|
|
|
|
ThePlayers[PlayerNumber].Active:= Active.Checked;
|
|
|
|
|
|
|
|
SetArrayLength(TempPlayers, HowManyPlayerss);
|
|
|
|
|
|
|
|
for i:=0 to (HowManyPlayerss-1) do
|
|
|
|
TempPlayers[i]:= ThePlayers[i];
|
|
|
|
|
|
|
|
SetArrayLength(ThePlayers, HowManyPlayerss-1);
|
|
|
|
|
|
|
|
for i:=0 to (PlayerNumber-1) do
|
|
|
|
ThePlayers[i]:= TempPlayers[i];
|
|
|
|
|
|
|
|
for i:=(PlayerNumber+1) to (High(TempPlayers)) do
|
|
|
|
ThePlayers[i-1]:= TempPlayers[i];
|
|
|
|
|
|
|
|
Dec(HowManyPlayerss);
|
|
|
|
if (PlayerNumber = HowManyPlayerss) then
|
|
|
|
Dec(PlayerNumber);
|
|
|
|
|
|
|
|
User.Text:= ThePlayers[PlayerNumber].User;
|
|
|
|
Pass.Text:= ThePlayers[PlayerNumber].Pass;
|
|
|
|
Nick.Text:= ThePlayers[PlayerNumber].Nick;
|
|
|
|
Pin.Text:= ThePlayers[PlayerNumber].Pin;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
Integers[j].Text:= IntToStr(ThePlayers[PlayerNumber].Integers[j]);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
Strings[j].Text:= ThePlayers[PlayerNumber].Strings[j];
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
Booleans[j].Checked:= ThePlayers[PlayerNumber].Booleans[j];
|
|
|
|
Active.Checked:= ThePlayers[PlayerNumber].Active;
|
|
|
|
|
|
|
|
PlayerLabel.Caption:= 'User '+IntToStr(PlayerNumber+1)+' of '+IntToStr(HowManyPlayerss);
|
|
|
|
End;
|
|
|
|
|
|
|
|
Procedure NextPlayerButton(Sender: TObject);
|
|
|
|
var
|
|
|
|
j: Integer;
|
|
|
|
Begin
|
|
|
|
if (PlayerNumber = (HowManyPlayerss-1)) then Exit;
|
|
|
|
|
|
|
|
ThePlayers[PlayerNumber].User:= User.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pass:= Pass.Text;
|
|
|
|
ThePlayers[PlayerNumber].Nick:= Nick.Text;
|
|
|
|
ThePlayers[PlayerNumber].Pin:= Pin.Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
ThePlayers[PlayerNumber].Integers[j]:= StrToInt(Integers[j].Text);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
ThePlayers[PlayerNumber].Strings[j]:= Strings[j].Text;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
ThePlayers[PlayerNumber].Booleans[j]:= Booleans[j].Checked;
|
|
|
|
ThePlayers[PlayerNumber].Active:= Active.Checked;
|
|
|
|
|
|
|
|
Inc(PlayerNumber);
|
|
|
|
|
|
|
|
User.Text:= ThePlayers[PlayerNumber].User;
|
|
|
|
Pass.Text:= ThePlayers[PlayerNumber].Pass;
|
|
|
|
Nick.Text:= ThePlayers[PlayerNumber].Nick;
|
|
|
|
Pin.Text:= ThePlayers[PlayerNumber].Pin;
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Integers) do
|
|
|
|
Integers[j].Text:= IntToStr(ThePlayers[PlayerNumber].Integers[j]);
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Strings) do
|
|
|
|
Strings[j].Text:= ThePlayers[PlayerNumber].Strings[j];
|
|
|
|
for j:=0 to High(ThePlayers[PlayerNumber].Booleans) do
|
|
|
|
Booleans[j].Checked:= ThePlayers[PlayerNumber].Booleans[j];
|
|
|
|
Active.Checked:= ThePlayers[PlayerNumber].Active;
|
|
|
|
|
|
|
|
PlayerLabel.Caption:= 'User '+IntToStr(PlayerNumber+1)+' of '+IntToStr(HowManyPlayerss);
|
|
|
|
End;
|
|
|
|
|
|
|
|
|
|
|
|
procedure RemoteForm;
|
|
|
|
var
|
|
|
|
i, j: Integer;
|
|
|
|
begin
|
|
|
|
LoadVars;
|
|
|
|
PlayerNumber:= 0;
|
|
|
|
Remote := TForm.Create(nil);
|
|
|
|
with Remote do
|
|
|
|
begin
|
|
|
|
BorderStyle := bsSingle;
|
|
|
|
BorderIcons := [];
|
|
|
|
FormStyle := fsStayOnTop;
|
|
|
|
Left := 376;
|
|
|
|
Top := 438;
|
|
|
|
Width := 192;
|
|
|
|
Height := (236+((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Caption := 'Players Remote for '+TheScriptName;
|
|
|
|
Color := clBtnFace;
|
|
|
|
Font.Color := clWindowText;
|
|
|
|
Font.Height := -11;
|
|
|
|
Font.Name := 'MS Sans Serif';
|
|
|
|
Font.Style := [];
|
|
|
|
PixelsPerInch := 96;
|
|
|
|
end;
|
|
|
|
|
|
|
|
PlayerLabel := TLabel.Create(Remote);
|
|
|
|
with PlayerLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 60;
|
|
|
|
Top := 16;
|
|
|
|
Width := 22;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'User '+IntToStr(PlayerNumber+1)+' of '+IntToStr(HowManyPlayerss);
|
|
|
|
end;
|
|
|
|
UserLabel := TLabel.Create(Remote);
|
|
|
|
with UserLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 16+24;
|
|
|
|
Width := 22;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'User';
|
|
|
|
end;
|
|
|
|
PassLabel := TLabel.Create(Remote);
|
|
|
|
with PassLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 40+24;
|
|
|
|
Width := 23;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'Pass';
|
|
|
|
end;
|
|
|
|
NickLabel := TLabel.Create(Remote);
|
|
|
|
with NickLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 64+24;
|
|
|
|
Width := 22;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'Nick';
|
|
|
|
end;
|
|
|
|
PinLabel := TLabel.Create(Remote);
|
|
|
|
with PinLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 88+24;
|
|
|
|
Width := 15;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'Pin';
|
|
|
|
end;
|
|
|
|
SetArrayLength(IntegersLabel, Length(IntegerNames));
|
|
|
|
for i:=0 to High(IntegersLabel) do
|
|
|
|
begin
|
|
|
|
IntegersLabel[i] := TLabel.Create(Remote);
|
|
|
|
with IntegersLabel[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 112+24+(i*24);
|
|
|
|
Width := 38;
|
|
|
|
Height := 13;
|
|
|
|
Caption := IntegerNames[i];
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
SetArrayLength(StringsLabel, Length(StringNames));
|
|
|
|
for i:=0 to High(StringsLabel) do
|
|
|
|
begin
|
|
|
|
StringsLabel[i] := TLabel.Create(Remote);
|
|
|
|
with StringsLabel[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 112+24+((Length(IntegerNames)+i)*24);
|
|
|
|
Width := 32;
|
|
|
|
Height := 13;
|
|
|
|
Caption := StringNames[i];
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
SetArrayLength(BooleansLabel, Length(BooleanNames));
|
|
|
|
for i:=0 to High(BooleansLabel) do
|
|
|
|
begin
|
|
|
|
BooleansLabel[i] := TLabel.Create(Remote);
|
|
|
|
with BooleansLabel[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := 112+24+(((Length(IntegerNames)+(Length(StringNames))+i)*24));
|
|
|
|
Width := 44;
|
|
|
|
Height := 13;
|
|
|
|
Caption := BooleanNames[i];
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
ActiveLabel := TLabel.Create(Remote);
|
|
|
|
with ActiveLabel do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 16;
|
|
|
|
Top := (136+(Length(IntegerNames)+Length(StringNames)+i)*24);
|
|
|
|
Width := 30;
|
|
|
|
Height := 13;
|
|
|
|
Caption := 'Active';
|
|
|
|
end;
|
|
|
|
SetArrayLength(Strings, Length(ThePlayers[0].Strings));
|
|
|
|
for i:=0 to High(Strings) do
|
|
|
|
begin
|
|
|
|
Strings[i] := TComboBox.Create(Remote);
|
|
|
|
with Strings[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 112+24+((Length(IntegerNames)+i)*24);
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
ItemHeight := 13;
|
|
|
|
TabOrder := 8;
|
|
|
|
Text := ThePlayers[0].Strings[i];
|
|
|
|
with Items do
|
|
|
|
for j:=0 to High(TheStrings[i]) do
|
|
|
|
Add(TheStrings[i][j]);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
SetArrayLength(Booleans, Length(ThePlayers[0].Booleans));
|
|
|
|
for i:=0 to High(Booleans) do
|
|
|
|
begin
|
|
|
|
Booleans[i] := TCheckBox.Create(Remote);
|
|
|
|
with Booleans[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 112+24+(((Length(IntegerNames)+(Length(StringNames))+i)*24));
|
|
|
|
Width := 16;
|
|
|
|
Height := 16;
|
|
|
|
Checked := ThePlayers[0].Booleans[i];
|
|
|
|
TabOrder := 9;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
User := TEdit.Create(Remote);
|
|
|
|
with User do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 16+24;
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
TabOrder := 10;
|
|
|
|
Text := ThePlayers[0].User;
|
|
|
|
end;
|
|
|
|
Pass := TEdit.Create(Remote);
|
|
|
|
with Pass do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 40+24;
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
PasswordChar := '*';
|
|
|
|
TabOrder := 11;
|
|
|
|
Text := ThePlayers[0].Pass;
|
|
|
|
end;
|
|
|
|
Nick := TEdit.Create(Remote);
|
|
|
|
with Nick do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 64+24;
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
TabOrder := 12;
|
|
|
|
Text := ThePlayers[0].Nick;
|
|
|
|
end;
|
|
|
|
Pin := TEdit.Create(Remote);
|
|
|
|
with Pin do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 88+24;
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
TabOrder := 13;
|
|
|
|
Text := ThePlayers[0].Pin;
|
|
|
|
end;
|
|
|
|
Active := TCheckBox.Create(Remote);
|
|
|
|
with Active do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := (136+(Length(IntegerNames)+Length(StringNames)+i)*24);
|
|
|
|
Width := 16;
|
|
|
|
Height := 16;
|
|
|
|
Checked := ThePlayers[0].Active;
|
|
|
|
TabOrder := 14;
|
|
|
|
end;
|
|
|
|
SetArrayLength(Integers, Length(ThePlayers[0].Integers));
|
|
|
|
for i:=0 to High(Integers) do
|
|
|
|
begin
|
|
|
|
Integers[i] := TEdit.Create(Remote);
|
|
|
|
with Integers[i] do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 112;
|
|
|
|
Top := 112+24+(i*24);;
|
|
|
|
Width := 70;
|
|
|
|
Height := 21;
|
|
|
|
TabOrder := 15;
|
|
|
|
Text := IntToStr(ThePlayers[0].Integers[i]);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
SetButton2 := TButton.Create(Remote);
|
|
|
|
with SetButton2 do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 15;
|
|
|
|
Top := 197+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 60;
|
|
|
|
Height := 25;
|
|
|
|
Caption := 'Set';
|
|
|
|
TabOrder := 9;
|
|
|
|
OnClick := @Click;
|
|
|
|
end;
|
|
|
|
CloseButton2 := TButton.Create(Remote);
|
|
|
|
with CloseButton2 do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 100;
|
|
|
|
Top := 197+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 60;
|
|
|
|
Height := 24;
|
|
|
|
Caption := 'Close';
|
|
|
|
TabOrder := 10;
|
|
|
|
OnClick := @Click;
|
|
|
|
end;
|
|
|
|
PreviousButton := TButton.Create(Remote);
|
|
|
|
with PreviousButton do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 7;
|
|
|
|
Top := 165+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 35;
|
|
|
|
Height := 25;
|
|
|
|
Caption := '<--';
|
|
|
|
TabOrder := 9;
|
|
|
|
OnClick := @PreviousPlayer;
|
|
|
|
end;
|
|
|
|
AddButton := TButton.Create(Remote);
|
|
|
|
with AddButton do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 52;
|
|
|
|
Top := 165+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 35;
|
|
|
|
Height := 24;
|
|
|
|
Caption := 'Add';
|
|
|
|
TabOrder := 10;
|
|
|
|
OnClick := @AddPlayer;
|
|
|
|
end;
|
|
|
|
DeleteButton := TButton.Create(Remote);
|
|
|
|
with DeleteButton do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 97;
|
|
|
|
Top := 165+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 35;
|
|
|
|
Height := 25;
|
|
|
|
Caption := 'Del';
|
|
|
|
TabOrder := 9;
|
|
|
|
OnClick := @DeletePlayer;
|
|
|
|
end;
|
|
|
|
NextButton := TButton.Create(Remote);
|
|
|
|
with NextButton do
|
|
|
|
begin
|
|
|
|
Parent := Remote;
|
|
|
|
Left := 142;
|
|
|
|
Top := 165+(((Length(BooleanNames)+Length(IntegerNames)+Length(StringNames))*24));
|
|
|
|
Width := 35;
|
|
|
|
Height := 24;
|
|
|
|
Caption := '-->';
|
|
|
|
TabOrder := 10;
|
|
|
|
OnClick := @NextPlayerButton;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure MainRemote;
|
|
|
|
begin
|
|
|
|
RemoteForm;
|
|
|
|
Remote.ShowModal;
|
|
|
|
end;
|
|
|
|
|
|
|
|
Procedure ClickButton(Sender: TObject);
|
|
|
|
Begin
|
|
|
|
if (Sender = CloseButton) then
|
|
|
|
OpenInstance.ModalResult:= mrOk;
|
|
|
|
if (Sender = SetButton) then
|
|
|
|
begin
|
|
|
|
INIPath:= INIPath+between('Instance ', '.', InstanceNumber.TEXT)+Extension;
|
|
|
|
OpenInstance.ModalResult:= mrOk;
|
|
|
|
OpenMain:= True;
|
|
|
|
end;
|
|
|
|
End;
|
|
|
|
|
|
|
|
procedure OpenInstanceForm;
|
|
|
|
var
|
|
|
|
i : Integer;
|
|
|
|
begin
|
|
|
|
OpenInstance := TForm.Create(nil);
|
|
|
|
with OpenInstance do
|
|
|
|
begin
|
|
|
|
BorderStyle := bsSingle;
|
|
|
|
BorderIcons := [];
|
|
|
|
FormStyle := fsStayOnTop;
|
|
|
|
Left := 483;
|
|
|
|
Top := 281;
|
|
|
|
Width := 305;
|
|
|
|
Height := 90;
|
|
|
|
Caption := 'Open Instance';
|
|
|
|
Color := clBtnFace;
|
|
|
|
Font.Color := clWindowText;
|
|
|
|
Font.Height := -11;
|
|
|
|
Font.Name := 'MS Sans Serif';
|
|
|
|
Font.Style := [];
|
|
|
|
PixelsPerInch := 96;
|
|
|
|
end;
|
|
|
|
Label1 := TLabel.Create(OpenInstance);
|
|
|
|
with Label1 do
|
|
|
|
begin
|
|
|
|
Parent := OpenInstance;
|
|
|
|
Left := 12;
|
|
|
|
Top := 16;
|
|
|
|
Width := 119;
|
|
|
|
Height := 17;
|
|
|
|
Caption := 'Open remote for instance';
|
|
|
|
end;
|
|
|
|
InstanceNumber := TComboBox.Create(OpenInstance);
|
|
|
|
with InstanceNumber do
|
|
|
|
begin
|
|
|
|
Parent := OpenInstance;
|
|
|
|
Left := 140;
|
|
|
|
Top := 16;
|
|
|
|
Width := 160;
|
|
|
|
Height := 21;
|
|
|
|
ItemHeight := 13;
|
|
|
|
TabOrder := 8;
|
|
|
|
Text := ScriptNames[0]+': Instance '+IntToStr(InstanceArray[0])+'.';
|
|
|
|
with Items do
|
|
|
|
for i:=0 to High(InstanceArray) do Add(ScriptNames[i]+': Instance '+IntToStr(InstanceArray[i])+'.');
|
|
|
|
end;
|
|
|
|
SetButton := TButton.Create(OpenInstance);
|
|
|
|
with SetButton do
|
|
|
|
begin
|
|
|
|
Parent := OpenInstance;
|
|
|
|
Left := 40;
|
|
|
|
Top := 48;
|
|
|
|
Width := 81;
|
|
|
|
Height := 25;
|
|
|
|
Caption := 'Open';
|
|
|
|
TabOrder := 9;
|
|
|
|
OnClick := @ClickButton;
|
|
|
|
end;
|
|
|
|
CloseButton := TButton.Create(OpenInstance);
|
|
|
|
with CloseButton do
|
|
|
|
begin
|
|
|
|
Parent := OpenInstance;
|
|
|
|
Left := 168;
|
|
|
|
Top := 48;
|
|
|
|
Width := 80;
|
|
|
|
Height := 24;
|
|
|
|
Caption := 'Close';
|
|
|
|
TabOrder := 10;
|
|
|
|
OnClick := @ClickButton;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure MainOpenInstance;
|
|
|
|
begin
|
|
|
|
OpenInstanceForm;
|
|
|
|
OpenInstance.ShowModal;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function FileNotEmpty(FilePath: string): Boolean;
|
|
|
|
begin
|
|
|
|
Result:= False;
|
|
|
|
if (FileExists(FilePath)) then
|
|
|
|
Result:= StrToBool(ReadINI('Main', 'Running', FilePath));
|
|
|
|
end;
|
|
|
|
|
|
|
|
function HowManyInstances: TIntegerArray;
|
|
|
|
var
|
|
|
|
i: Integer;
|
|
|
|
begin
|
|
|
|
InstanceArray:= [];
|
|
|
|
ScriptNames:= [];
|
|
|
|
for i:=0 to 50 do
|
|
|
|
if FileNotEmpty(INIPath+InttoStr(i)+Extension) then
|
|
|
|
begin
|
|
|
|
SetArrayLength(Result, Length(Result)+1);
|
|
|
|
Result[High(Result)]:= i;
|
|
|
|
SetArrayLength(ScriptNames, Length(ScriptNames)+1);
|
|
|
|
ScriptNames[High(ScriptNames)]:= ReadINI('Main', 'Name', INIPath+InttoStr(i)+Extension);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure LoadForm;
|
|
|
|
begin
|
|
|
|
InstanceArray:= HowManyInstances;
|
|
|
|
If (Length(InstanceArray) > 0) then
|
|
|
|
if (Length(InstanceArray) > 1) then
|
|
|
|
begin
|
|
|
|
MainOpenInstance
|
|
|
|
if OpenMain then
|
|
|
|
MainRemote;
|
|
|
|
end else
|
|
|
|
begin
|
|
|
|
INIPath:= INIPath+IntToStr(InstanceArray[0])+Extension;
|
|
|
|
MainRemote;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure SRLRemote(Sender: TObject);
|
|
|
|
begin
|
|
|
|
if (not(Sender = SRLRemoteMenuItem)) then Exit;
|
|
|
|
INIPath:= AppPath+'Scripts/SRLRemote';
|
|
|
|
TheScriptName:= 'SRL Player';
|
|
|
|
Loadform;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure Init;
|
|
|
|
begin
|
|
|
|
MyMenu := TMenuItem.Create(Simba_MainMenu);
|
|
|
|
MyMenu.Caption := 'SRL Remote';
|
|
|
|
MyMenu.Visible := False;
|
|
|
|
Simba_MainMenu.Items.Add(MyMenu);
|
|
|
|
|
|
|
|
SRLRemoteMenuItem := TMenuItem.Create(MyMenu);
|
|
|
|
SRLRemoteMenuItem.Caption := 'Player Remote';
|
|
|
|
SRLRemoteMenuItem.OnClick := @SRLRemote;
|
|
|
|
MyMenu.Add(SRLRemoteMenuItem);
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure Attach;
|
|
|
|
begin;
|
|
|
|
MyMenu.Visible := True;
|
|
|
|
end;
|
|
|
|
|
|
|
|
Procedure Detach;
|
|
|
|
begin
|
|
|
|
MyMenu.Visible := False;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function GetName : string;
|
|
|
|
begin;
|
2011-08-26 19:34:39 -04:00
|
|
|
result := 'SRL Remote';
|
2011-08-24 18:40:28 -04:00
|
|
|
end;
|
|
|
|
|
|
|
|
function GetVersion : string;
|
|
|
|
begin;
|
|
|
|
result := '1.0';
|
|
|
|
end;
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
end.
|