scar Code:
//-----------------------------------------------------------------//
//-- Scar Standard Resource Library --//
//-- ยป User Manager Routines --//
//-----------------------------------------------------------------//
// * procedure LoadCheckListForm; | by Sumilion
// * procedure ShowCheckListFormModal; | by Sumilion
// * procedure ShowCheckListForm; | by Sumilion
// * procedure SavePlayers(Create: Boolean); | by Starblaster100
// * procedure LoadPlayers(SetPlayers: Boolean); | by Starblaster100
// * procedure SwitchInTabArray(NewPlace, OldPlace: Integer; var V: array of TTabSheet); | by Sumilion
// * procedure SwitchInEditArray(NewPlace, OldPlace: Integer; var V: array of TEdit); | by Sumilion
// * procedure SwitchInComboArray(NewPlace, OldPlace: Integer; var V: array of TComboBox); | by Sumilion
// * procedure OnSRLPFMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); | by Sumilion
// * procedure OnSRLPFDragDrop(Sender, Source: TObject; X, Y: Integer); | by Sumilion
// * procedure OnSRLPFDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); | by Sumilion
// * procedure DeleteInEditArray(SpotToDelete: Integer; var V: array of TEdit); | by Sumilion
// * procedure DeleteInEditArrayOfArray(SpotToDelete: Integer; var V: array of array of TEdit); | by Sumilion
// * procedure DeleteInEditArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TEdit); | by Sumilion
// * procedure DeleteInComboArray(SpotToDelete: Integer; var V: array of TComboBox); | by Sumilion
// * procedure DeleteInComboArrayOfArray(SpotToDelete: Integer; var V: array of array of TComboBox); | by Sumilion
// * procedure DeleteInComboArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TComboBox); | by Sumilion
// * procedure DeleteInTabArray(SpotToDelete: Integer; var V: array of TTabSheet); | by Sumilion
// * procedure DeleteInTabArrayOfArray(SpotToDelete: Integer; var V: array of array of TTabSheet); | by Sumilion
// * procedure DeleteInPageControlArray(SpotToDelete: Integer; var V: array of TPageControl); | by Sumilion
// * procedure SetLabelsParent(Parent: Integer); | by Sumilion
// * procedure DeletePlayerInTab(ArmyNumber, PlayerNumber, NextPlayerTab: Integer); | by Sumilion
// * procedure ClearPlayerInTab(ArmyNumber, PlayerNumber: Integer); | by Sumilion
// * procedure AddPlayerInTab(ArmyNumber: Integer); | by Sumilion
// * procedure AddArmy; | by Sumilion
// * procedure DeleteArmy(ArmyNumber, NextArmyTab: Integer); | by Sumilion
// * procedure RenameArmy(ArmyNumber: Integer); | by Sumilion
// * procedure ExportPlayerData; | by Starblaster100 / Sumilion
// * procedure ImportPlayerData; | by Starblaster100 / Sumilion
// * procedure OnSRLPFMainMenuClick(Sender: TObject); | by Sumilion
// * procedure OnSRLPFClick(Sender: TObject); | by Sumilion/Richard/ZephyrsFury
// * procedure OnSRLPFShow(Sender: TObject); | by Sumilion
// * procedure SRLPFMenuClick(Sender: TObject); | by Sumilion
// * procedure SetSRLPlayerFormArrays; | by Sumilion
// * procedure FillSRLPlayerFormTab(ArmyNumber, TabNumber: Integer); | by Sumilion
// * procedure LoadSRLPlayerForm; | by Sumilion/Richard/ZephyrsFury
// * procedure ShowSRLPFFormModal; | by Sumilion
// * procedure SRLPlayerForm(ShowForm: Boolean; Booleans, Integers, Strings, Extendeds: TStringArray); | by Sumilion
var
// Main form components
srl_PlayerForm : TForm;
srlpf_PreviousTabIndex, srlpf_Width, HowManyArmies, ActiveArmy: Integer;
srlpf_TerminateWhenDone, srlpf_SaveWhenDone: Boolean;
srlpf_ArmyPageControl : TPageControl;
srlpf_PlayerPageControl : array of TPageControl;
ArmyPages : array of TTabSheet;
ArmyNames : TStringArray;
PlayerPages : array of array of TTabSheet;
// Menu items
srlpf_ArmyPopUpMenu, srlpf_PlayerPopUpMenu: TPopupMenu;
srlpf_MainMenu: TMainMenu;
FileItem, PlayerControlItem, ArmyControlItem, ExitItem,
AddPlayerItem, DeletePlayersItem, ClearPlayersItem, SaveAndStart, SaveAndExit,
JustExitItem, JustStartItem, AddArmyItem, DeleteArmiesItem, ClearArmiesItem, RenameArmyItem,
ExportPlayersItem, ImportPlayersItem: TMenuItem;
AddArmyPopUp, DelArmyPopUp, ChangeArmyNamePopUp, ClearArmyPopUp, AddPlayerPopUp, DelPlayerPopUp, ClearPlayerPopUp: TMenuItem;
// All labels
arBooleanLabels, arIntegerLabels,
arStringLabels, arExtendedLabels : array of TLabel;
UserNameLabel, PasswordLabel, NickLabel, ActiveLabel, PinLabel, BoxRewardsLabel: TLabel;
// All changeable settings
arUserNameEdits, arPasswordEdits, arNickEdits, arPinEdits, arBoxRewardsEdits : array of array of TEdit;
arActiveComboBoxes : array of array of TComboBox;
arBooleanComboBoxes : array of array of array of TComboBox;
arIntegerEdits, arStringEdits, arExtendedEdits : array of array of array of TEdit;
// All buttons on the form
DelPlayerButton, AddPlayerButton, PreviousButton, ExitButton,
NextButton, StartButton, SaveStartButton, SaveExitButton: TButton;
// Arrays of variable settings
srlpf_Booleans, srlpf_Integers, srlpf_Strings, srlpf_Extendeds: TStringArray;
// CheckList form vars
CheckListForm : TForm;
SRLPFCheckListBox: TCheckListBox;
CheckListButton: TButton;
// Other
srlpf_SavePath: string;
EditK, EditI : Integer;
procedure SetSRLPlayerFormArrays; forward;
procedure FillSRLPlayerFormTab(ArmyNumber, TabNumber: Integer); forward;
procedure OnSRLPFShow(Sender: TObject); forward;
procedure DeletePlayerInTab(ArmyNumber, PlayerNumber, NextPlayerTab: Integer); forward;
procedure OnSRLPFClick(Sender: TObject); forward;
{*******************************************************************************
procedure LoadCheckListForm;
By: Sumilion
Description: Initializes the check list form needed for Users.scar
*******************************************************************************}
procedure LoadCheckListForm;
var
ArmyIndex: Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
CheckListForm.Position := poDesktopCenter;
CheckListForm.Width := 200;
CheckListForm.Height := 135;
CheckListForm.Color := clBtnFace;
CheckListForm.Font.Color := clWindowText;
CheckListForm.Font.Height := -11;
CheckListForm.Font.Name := 'MS Sans Serif';
CheckListForm.Font.Style := [];
CheckListForm.Visible := False;
CheckListForm.PixelsPerInch := 96;
CheckListForm.BorderIcons := [biSystemMenu];
CheckListForm.BorderStyle := bsSingle;
SRLPFCheckListBox.Parent := CheckListForm;
SRLPFCheckListBox.Width := CheckListForm.Width;
SRLPFCheckListBox.Height := CheckListForm.Height - 65;
SRLPFCheckListBox.Align := alTop;
SRLPFCheckListBox.ItemHeight := 13;
CheckListButton.Parent := CheckListForm;
CheckListButton.Left := 70;
CheckListButton.Top := 80;
CheckListButton.Width := 50;
CheckListButton.Height := 20;
CheckListButton.OnClick := @OnSRLPFClick;
end;
{*******************************************************************************
procedure ShowCheckListFormModal;
By: Sumilion
Description: Showes the form.
*******************************************************************************}
procedure ShowCheckListFormModal;
begin
CheckListForm.ShowModal;
end;
{*******************************************************************************
procedure ShowCheckListForm;
By: Sumilion
Description: Safely initializes and shows the form
*******************************************************************************}
procedure ShowCheckListForm;
var
v: TVariantArray;
begin
V := [];
ThreadSafeCall('LoadCheckListForm', V);
V := [];
ThreadSafeCall('ShowCheckListFormModal', V);
end;
{*******************************************************************************
procedure SavePlayers;
By: Starblaster100
Description: Saves the players to a file / creates a file when needed.
*******************************************************************************}
procedure SavePlayers;
var
ArmyIndex, i, j, k: Integer;
Begin
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
WriteINI('General', 'HowManyArmies', IntToStr(Length(ArmyPages)), srlpf_SavePath);
WriteINI('General', 'ActiveArmy', IntToStr(ArmyIndex), srlpf_SavePath);
for i := 0 to GetArrayLength(ArmyPages) - 1 do
begin
WriteINI('ArmyPages', 'Name[' +IntToStr(i)+ ']', ArmyPages[i].Caption, srlpf_SavePath);
WriteINI('ArmyPages', 'Number[' +IntToStr(i)+ ']', IntToStr(Length(PlayerPages[i])), srlpf_SavePath);
end;
for k := 0 to Length(ArmyPages) - 1 do
begin
for i := 0 to Length(PlayerPages[k]) - 1 do
begin
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Username', arUserNameEdits[k][i].Text, srlpf_SavePath);
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Password', arPasswordEdits[k][i].Text, srlpf_SavePath);
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Nickname', arNickEdits[k][i].Text, srlpf_SavePath);
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Active', arActiveComboBoxes[k][i].Text, srlpf_SavePath);
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Pin', arPinEdits[k][i].Text, srlpf_SavePath);
WriteINI(IntToStr(k) +',' +IntToStr(i), 'BoxRewards', Replace(arBoxRewardsEdits[k][i].Text, ' ', ''), srlpf_SavePath);
for j := 0 to Length(srlpf_Booleans) - 1 do
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Booleans[' +IntToStr(j)+ ']', arBooleanComboBoxes[k][j][i].Text, srlpf_SavePath);
for j := 0 to Length(srlpf_Integers) - 1 do
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Integers[' +IntToStr(j)+ ']', arIntegerEdits[k][j][i].Text, srlpf_SavePath);
for j := 0 to Length(srlpf_Strings) - 1 do
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Strings[' +IntToStr(j)+ ']', arStringEdits[k][j][i].Text, srlpf_SavePath);
for j := 0 to Length(srlpf_Extendeds) - 1 do
WriteINI(IntToStr(k) +',' +IntToStr(i), 'Extendeds[' +IntToStr(k)+ ']', arExtendedEdits[k][j][i].Text, srlpf_SavePath);
end;
end;
end;
{*******************************************************************************
procedure arPinEditsPress(Sender : TEdit; var Key : Char);
By: Cazax
Description: Detects if user press non numerical keys to remove them
from the Pin Edit
*******************************************************************************}
procedure arPinEditsPress(Sender: TObject; var Key: Char);
begin
If Key = '' Then
Exit;
Case Key Of
#48..#57: If Length(arPinEdits[EditK][EditI].Text) = 4 Then Key := #0;
Else
Key := #0;
End;
end;
{*******************************************************************************
procedure LoadPlayers(SetPlayers: Boolean);
By: Starblaster100
Description: Loads the players from a file
*******************************************************************************}
procedure LoadPlayers(SetPlayers: Boolean);
var
ArmyIndex, j, i, k: Integer;
Begin
HowManyArmies := StrToIntDef(ReadINI('General', 'HowManyArmies', srlpf_SavePath), 1);
ArmyIndex := StrToIntDef(ReadINI('General', 'ActiveArmy', srlpf_SavePath), 0);
ActiveArmy := ArmyIndex;
SetLength(ArmyPages, HowManyArmies);
SetLength(ArmyNames, HowManyArmies);
for i := 0 to HowManyArmies - 1 do
ArmyNames[i] := ReadINI('ArmyPages', 'Name[' +IntToStr(i)+ ']', srlpf_SavePath);
if(SetPlayers)then
begin
HowManyPlayers := StrToIntDef(ReadINI('ArmyPages', 'Number[' +IntToStr(ArmyIndex)+ ']', srlpf_SavePath), 1);
NumberOfPlayers(HowManyPlayers);
for i := 0 to HowManyPlayers - 1 do
begin
Players[i].Name := ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Username', srlpf_SavePath);
Players[i].Pass := ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Password', srlpf_SavePath);
Players[i].Nick := ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Nickname', srlpf_SavePath);
Players[i].Active := StrToBoolDef(ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Active', srlpf_SavePath), True);
Players[i].Pin := ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Pin', srlpf_SavePath);
Players[i].BoxRewards := srl_Explode(ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'BoxRewards', srlpf_SavePath), ',');
for j := 0 to Length(srlpf_Booleans) - 1 do
Players[i].Booleans[j] := StrToBoolDef(ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Booleans[' +IntToStr(j)+ ']', srlpf_SavePath), True);
for j := 0 to Length(srlpf_Integers) - 1 do
Players[i].Integers[j] := StrToIntDef(ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Integers[' +IntToStr(j)+ ']', srlpf_SavePath), 0);
for j := 0 to Length(srlpf_Strings) - 1 do
Players[i].Strings[j] := ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Strings[' +IntToStr(j)+ ']', srlpf_SavePath);
for j := 0 to Length(srlpf_Extendeds) - 1 do
Players[i].Extendeds[j] := StrToFloatDef(ReadINI(IntToStr(ArmyIndex) +',' +IntToStr(i), 'Extendeds[' +IntToStr(j)+ ']', srlpf_SavePath), 0.0);
end;
end else
begin
SetLength(PlayerPages, HowManyArmies);
for i := 0 to HowManyArmies - 1 do
begin
HowManyPlayers := StrToIntDef(ReadINI('ArmyPages', 'Number[' +IntToStr(i)+ ']', srlpf_SavePath), 1);
SetLength(PlayerPages[i], HowManyPlayers);
end;
SetSRLPlayerFormArrays;
for k := 0 to HowManyArmies - 1 do
begin
HowManyPlayers := StrToIntDef(ReadINI('ArmyPages', 'Number[' +IntToStr(k)+ ']', srlpf_SavePath), 1);
for i := 0 to HowManyPlayers - 1 do
begin
arUserNameEdits[k][i] := TEdit.Create(srl_PlayerForm);
arPasswordEdits[k][i] := TEdit.Create(srl_PlayerForm);
arPasswordEdits[k][i].PasswordChar := '*';
arNickEdits[k][i] := TEdit.Create(srl_PlayerForm);
arActiveComboBoxes[k][i] := TComboBox.Create(srl_PlayerForm);
arPinEdits[k][i] := TEdit.Create(srl_PlayerForm);
EditK := k;
EditI := i;
arPinEdits[k][i].OnKeyPress := @arPinEditsPress;
arBoxRewardsEdits[k][i] := TEdit.Create(srl_PlayerForm);
arUserNameEdits[k][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Username', srlpf_SavePath);
arPassWordEdits[k][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Password', srlpf_SavePath);
arNickEdits[k][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Nickname', srlpf_SavePath);
arActiveComboBoxes[k][i].Text := BoolToStr(StrToBoolDef(ReadINI(IntToStr(k) +',' +IntToStr(i), 'Active', srlpf_SavePath), True));
arPinEdits[k][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Pin', srlpf_SavePath);
arBoxRewardsEdits[k][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'BoxRewards', srlpf_SavePath);
for j := 0 to Length(srlpf_Booleans) - 1 do
begin
arBooleanComboBoxes[k][j][i] := TComboBox.Create(srl_PlayerForm);
arBooleanComboBoxes[k][j][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Booleans[' +IntToStr(j)+ ']', srlpf_SavePath);
end;
for j := 0 to Length(srlpf_Integers) - 1 do
begin
arIntegerEdits[k][j][i] := TEdit.Create(srl_PlayerForm);
arIntegerEdits[k][j][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Integers[' +IntToStr(j)+ ']', srlpf_SavePath);
end;
for j := 0 to Length(srlpf_Strings) - 1 do
begin
arStringEdits[k][j][i] := TEdit.Create(srl_PlayerForm);
arStringEdits[k][j][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Strings[' +IntToStr(j)+ ']', srlpf_SavePath);
end;
for j := 0 to Length(srlpf_Extendeds) - 1 do
begin
arExtendedEdits[k][j][i] := TEdit.Create(srl_PlayerForm);
arExtendedEdits[k][j][i].Text := ReadINI(IntToStr(k) +',' +IntToStr(i), 'Extendeds[' +IntToStr(j)+ ']', srlpf_SavePath);
end;
end;
end;
end;
end;
{*******************************************************************************
procedure SwitchInTabArray(NewPlace, OldPlace: Integer; var V: array of TTabSheet);
By: Sumilion
Description: Switches values in a TTabSheet array
*******************************************************************************}
procedure SwitchInTabArray(NewPlace, OldPlace: Integer; var V: array of TTabSheet);
var
k: Integer;
TempVarArray, TempAffectedArray: array of TTabSheet;
begin
SetLength(TempVarArray, Length(V));
SetLength(TempAffectedArray, 1 + (iAbs(OldPlace - NewPlace)));
for k := 0 to Length(V) - 1 do
TempVarArray[k] := V[k];
TempVarArray[NewPlace] := V[OldPlace];
if(OldPlace > NewPlace)then
begin
for k := NewPlace to OldPlace - 1 do
TempAffectedArray[k - NewPlace] := V[k];
for k := NewPlace + 1 to OldPlace do
TempVarArray[k] := TempAffectedArray[k - (NewPlace + 1)];
end else
begin
for k := OldPlace + 1 to NewPlace do
TempAffectedArray[k - (OldPlace + 1)] := V[k];
for k := OldPlace to NewPlace - 1 do
TempVarArray[k] := TempAffectedArray[k - OldPlace];
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure SwitchInEditArray(NewPlace, OldPlace: Integer; var V: array of TEdit);
By: Sumilion
Description: Switches values in a TEdit array
*******************************************************************************}
procedure SwitchInEditArray(NewPlace, OldPlace: Integer; var V: array of TEdit);
var
k: Integer;
TempVarArray, TempAffectedArray: array of TEdit;
begin
SetLength(TempVarArray, Length(V));
SetLength(TempAffectedArray, 1 + (iAbs(OldPlace - NewPlace)));
for k := 0 to Length(V) - 1 do
TempVarArray[k] := V[k];
TempVarArray[NewPlace] := V[OldPlace];
if(OldPlace > NewPlace)then
begin
for k := NewPlace to OldPlace - 1 do
TempAffectedArray[k - NewPlace] := V[k];
for k := NewPlace + 1 to OldPlace do
TempVarArray[k] := TempAffectedArray[k - (NewPlace + 1)];
end else
begin
for k := OldPlace + 1 to NewPlace do
TempAffectedArray[k - (OldPlace + 1)] := V[k];
for k := OldPlace to NewPlace - 1 do
TempVarArray[k] := TempAffectedArray[k - OldPlace];
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure SwitchInComboArray(NewPlace, OldPlace: Integer; var V: array of TComboBox);
By: Sumilion
Description: Switches values in a TComboBox array
*******************************************************************************}
procedure SwitchInComboArray(NewPlace, OldPlace: Integer; var V: array of TComboBox);
var
k: Integer;
TempVarArray, TempAffectedArray: array of TComboBox;
begin
SetLength(TempVarArray, Length(V));
SetLength(TempAffectedArray, 1 + (iAbs(OldPlace - NewPlace)));
for k := 0 to Length(V) - 1 do
TempVarArray[k] := V[k];
TempVarArray[NewPlace] := V[OldPlace];
if(OldPlace > NewPlace)then
begin
for k := NewPlace to OldPlace - 1 do
TempAffectedArray[k - NewPlace] := V[k];
for k := NewPlace + 1 to OldPlace do
TempVarArray[k] := TempAffectedArray[k - (NewPlace + 1)];
end else
begin
for k := OldPlace + 1 to NewPlace do
TempAffectedArray[k - (OldPlace + 1)] := V[k];
for k := OldPlace to NewPlace - 1 do
TempVarArray[k] := TempAffectedArray[k - OldPlace];
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure OnSRLPFMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
By: Sumilion
Description: Form action on Mouse click
*******************************************************************************}
procedure OnSRLPFMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i, ArmyIndex: Integer;
MousePosPoint: TPoint;
RightClick: Boolean;
begin
RightClick := Button;
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
case Sender of
srlpf_PlayerPageControl[ArmyIndex]:
begin
if(RightClick)then
begin
srlpf_PlayerPageControl[ArmyIndex].ActivePageIndex := srlpf_PlayerPageControl[ArmyIndex].IndexOfTabAt(x, y);
MousePosPoint := srlpf_PlayerPageControl[ArmyIndex].ClientToScreen(IntToPoint(x, y));
srlpf_PlayerPopUpMenu.Popup(MousePosPoint.x, MousePosPoint.y);
end;
if(ssCtrl in Shift)and(not RightClick)then
begin
srlpf_PlayerPageControl[ArmyIndex].BeginDrag(False);
srlpf_PreviousTabIndex := srlpf_PlayerPageControl[ArmyIndex].ActivePage.PageIndex;
end;
end;
srlpf_ArmyPageControl:
begin
if(RightClick)then
begin
srlpf_ArmyPageControl.ActivePageIndex := srlpf_ArmyPageControl.IndexOfTabAt(x, y);
MousePosPoint := srlpf_ArmyPageControl.ClientToScreen(IntToPoint(x, y));
srlpf_ArmyPopUpMenu.Popup(MousePosPoint.x, MousePosPoint.y);
end;
end;
end;
for i := 0 to Length(PlayerPages[ArmyIndex]) - 1 do
begin
if(arUserNameEdits[ArmyIndex][i].Text <> '')then
PlayerPages[ArmyIndex][i].Caption := arUserNameEdits[ArmyIndex][i].Text
else
PlayerPages[ArmyIndex][i].Caption := 'Player ' + IntToStr(i);
end;
end;
{*******************************************************************************
procedure OnSRLPFDragDrop(Sender, Source: TObject; X, Y: Integer);
By: Sumilion
Description: Form action on drag drop
*******************************************************************************}
procedure OnSRLPFDragDrop(Sender, Source: TObject; X, Y: Integer);
var
i, ArmyIndex, PlayerIndex : Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePage.PageIndex;
srlpf_PlayerPageControl[ArmyIndex].ActivePage.PageIndex := srlpf_PlayerPageControl[ArmyIndex].IndexOfTabAt(X, Y);
PlayerIndex := srlpf_PlayerPageControl[ArmyIndex].ActivePage.PageIndex;
SwitchInTabArray(PlayerIndex, srlpf_PreviousTabIndex, PlayerPages[ArmyIndex]);
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arUserNameEdits[ArmyIndex]);
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arPasswordEdits[ArmyIndex]);
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arNickEdits[ArmyIndex]);
SwitchInComboArray(PlayerIndex, srlpf_PreviousTabIndex, arActiveComboBoxes[ArmyIndex]);
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arPinEdits[ArmyIndex]);
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arBoxRewardsEdits[ArmyIndex]);
for i := 0 to Length(srlpf_Booleans) - 1 do
SwitchInComboArray(PlayerIndex, srlpf_PreviousTabIndex, arBooleanComboBoxes[ArmyIndex][i]);
for i := 0 to Length(srlpf_Integers) - 1 do
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arIntegerEdits[ArmyIndex][i]);
for i := 0 to Length(srlpf_Strings) - 1 do
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arStringEdits[ArmyIndex][i]);
for i := 0 to Length(srlpf_Extendeds) - 1 do
SwitchInEditArray(PlayerIndex, srlpf_PreviousTabIndex, arExtendedEdits[ArmyIndex][i]);
for i := 0 to srlpf_PlayerPageControl[ArmyIndex].PageCount - 1 do
if(arUserNameEdits[ArmyIndex][i].Text <> '')then
PlayerPages[ArmyIndex][i].Caption := arUserNameEdits[ArmyIndex][i].Text
else
PlayerPages[ArmyIndex][i].Caption := 'Player ' + IntToStr(i);
end;
{*******************************************************************************
procedure OnSRLPFDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
By: Sumilion
Description: Form action on drag over
*******************************************************************************}
procedure OnSRLPFDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Sender is TPageControl);
end;
{*******************************************************************************
procedure DeleteInEditArray(SpotToDelete: Integer; var V: array of TEdit);
By: Sumilion
Description: Deletes a value in a TEdit array
*******************************************************************************}
procedure DeleteInEditArray(SpotToDelete: Integer; var V: array of TEdit);
var
k, l: Integer;
TempVarArray: array of TEdit;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInEditArrayOfArray(SpotToDelete: Integer; var V: array of array of TEdit);
By: Sumilion
Description: Deletes a value in a TEdit array
*******************************************************************************}
procedure DeleteInEditArrayOfArray(SpotToDelete: Integer; var V: array of array of TEdit);
var
k, l: Integer;
TempVarArray: array of array of TEdit;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInEditArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TEdit);
By: Sumilion
Description: Deletes a value in a TEdit array
*******************************************************************************}
procedure DeleteInEditArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TEdit);
var
k, l: Integer;
TempVarArray: array of array of array of TEdit;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInComboArray(SpotToDelete: Integer; var V: array of TComboBox);
By: Sumilion
Description: Deletes a value in a TComboBox array
*******************************************************************************}
procedure DeleteInComboArray(SpotToDelete: Integer; var V: array of TComboBox);
var
k, l: Integer;
TempVarArray: array of TComboBox;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInComboArrayOfArray(SpotToDelete: Integer; var V: array of array of TComboBox);
By: Sumilion
Description: Deletes a value in a TComboBox array
*******************************************************************************}
procedure DeleteInComboArrayOfArray(SpotToDelete: Integer; var V: array of array of TComboBox);
var
k, l: Integer;
TempVarArray: array of array of TComboBox;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInComboArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TComboBox);
By: Sumilion
Description: Deletes a value in a TComboBox array
*******************************************************************************}
procedure DeleteInComboArrayOfArrayOfArray(SpotToDelete: Integer; var V: array of array of array of TComboBox);
var
k, l: Integer;
TempVarArray: array of array of array of TComboBox;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInTabArray(SpotToDelete: Integer; var V: array of TTabSheet);
By: Sumilion
Description: Deletes a value in a TTabSheet array
*******************************************************************************}
procedure DeleteInTabArray(SpotToDelete: Integer; var V: array of TTabSheet);
var
k, l: Integer;
TempVarArray: array of TTabSheet;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInTabArrayOfArray(SpotToDelete: Integer; var V: array of array of TTabSheet);
By: Sumilion
Description: Deletes a value in a TTabSheet array
*******************************************************************************}
procedure DeleteInTabArrayOfArray(SpotToDelete: Integer; var V: array of array of TTabSheet);
var
k, l: Integer;
TempVarArray: array of array of TTabSheet;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure DeleteInPageControlArray(SpotToDelete: Integer; var V: array of TPageControl);
By: Sumilion
Description: Deletes a value in a TTabSheet array
*******************************************************************************}
procedure DeleteInPageControlArray(SpotToDelete: Integer; var V: array of TPageControl);
var
k, l: Integer;
TempVarArray: array of TPageControl;
begin
SetLength(TempVarArray, Length(V) - 1);
for k := 0 to Length(V) - 1 do
begin
if not(k = SpotToDelete)then
begin
TempVarArray[l] := V[k];
l := l + 1;
end;
end;
V := TempVarArray;
end;
{*******************************************************************************
procedure SetLabelsParent(Parent: Integer);
By: Sumilion
Description: Sets all labels to the desired parent
*******************************************************************************}
procedure SetLabelsParent(Army, Tab: Integer);
var
i: Integer;
begin
UserNameLabel.Parent := PlayerPages[Army][Tab];
PasswordLabel.Parent := PlayerPages[Army][Tab];
NickLabel.Parent := PlayerPages[Army][Tab];
ActiveLabel.Parent := PlayerPages[Army][Tab];
PinLabel.Parent := PlayerPages[Army][Tab];
BoxRewardsLabel.Parent := PlayerPages[Army][Tab];
for i := 0 to Length(srlpf_Booleans) - 1 do
arBooleanLabels[i].Parent := PlayerPages[Army][Tab];
for i := 0 to Length(srlpf_Integers) - 1 do
arIntegerLabels[i].Parent := PlayerPages[Army][Tab];
for i := 0 to Length(srlpf_Strings) - 1 do
arStringLabels[i].Parent := PlayerPages[Army][Tab];
for i := 0 to Length(srlpf_Extendeds) - 1 do
arExtendedLabels[i].Parent := PlayerPages[Army][Tab];
end;
{*******************************************************************************
procedure DeletePlayerInTab(ArmyNumber, PlayerNumber, NextPlayerTab: Integer);
By: Sumilion
Description: Deletes a player in a desired tab and goes to the next desired tab.
*******************************************************************************}
procedure DeletePlayerInTab(ArmyNumber, PlayerNumber, NextPlayerTab: Integer);
var
i, d, ArmyIndex: Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
if(srlpf_PlayerPageControl[ArmyIndex].PageCount = 1)then
Exit;
if(NextPlayerTab < 0)then
NextPlayerTab := 0;
for i := PlayerNumber + 1 to Length(PlayerPages[ArmyNumber]) - 1 do
begin
arUserNameEdits[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
arPasswordEdits[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
arNickEdits[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
arActiveComboBoxes[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
arPinEdits[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
arBoxRewardsEdits[ArmyNumber][i].Parent := PlayerPages[ArmyNumber][i - 1];
for d := 0 to Length(srlpf_Booleans) - 1 do
arBooleanComboBoxes[ArmyNumber][d][i].Parent := PlayerPages[ArmyNumber][i - 1];
for d := 0 to Length(srlpf_Integers) - 1 do
arIntegerEdits[ArmyNumber][d][i].Parent := PlayerPages[ArmyNumber][i - 1];
for d := 0 to Length(srlpf_Strings) - 1 do
arStringEdits[ArmyNumber][d][i].Parent := PlayerPages[ArmyNumber][i - 1];
for d := 0 to Length(srlpf_Extendeds) - 1 do
arExtendedEdits[ArmyNumber][d][i].Parent := PlayerPages[ArmyNumber][i - 1];
end;
PlayerPages[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1].Free;
SetLength(PlayerPages[ArmyNumber], srlpf_PlayerPageControl[ArmyNumber].PageCount);
DeleteInEditArray(PlayerNumber, arUserNameEdits[ArmyNumber]);
DeleteInEditArray(PlayerNumber, arPasswordEdits[ArmyNumber]);
DeleteInEditArray(PlayerNumber, arNickEdits[ArmyNumber]);
DeleteInComboArray(PlayerNumber, arActiveComboBoxes[ArmyNumber]);
DeleteInEditArray(PlayerNumber, arPinEdits[ArmyNumber]);
DeleteInEditArray(PlayerNumber, arBoxRewardsEdits[ArmyNumber]);
for d := 0 to Length(srlpf_Booleans) - 1 do
DeleteInComboArray(PlayerNumber, arBooleanComboBoxes[ArmyNumber][d]);
for d := 0 to Length(srlpf_Integers) - 1 do
DeleteInEditArray(PlayerNumber, arIntegerEdits[ArmyNumber][d]);
for d := 0 to Length(srlpf_Strings) - 1 do
DeleteInEditArray(PlayerNumber, arStringEdits[ArmyNumber][d]);
for d := 0 to Length(srlpf_Extendeds) - 1 do
DeleteInEditArray(PlayerNumber, arExtendedEdits[ArmyNumber][d]);
srlpf_ArmyPageControl.ActivePageIndex := ArmyIndex;
srlpf_PlayerPageControl[ArmyIndex].ActivePageIndex := NextPlayerTab;
if(srlpf_PlayerPageControl[ArmyIndex].PageCount = 1)then
srlpf_PlayerPageControl[ArmyIndex].ActivePageIndex := 0;
end;
{*******************************************************************************
procedure ClearPlayerInTab(ArmyNumber, PlayerNumber: Integer);
By: Sumilion
Description: Clears player settings in tab
*******************************************************************************}
procedure ClearPlayerInTab(ArmyNumber, PlayerNumber: Integer);
var
i: Integer;
begin
arUserNameEdits[ArmyNumber][PlayerNumber].Text := '';
arPasswordEdits[ArmyNumber][PlayerNumber].Text := '';
arNickEdits[ArmyNumber][PlayerNumber].Text := '';
arActiveComboBoxes[ArmyNumber][PlayerNumber].Text := 'True';
arPinEdits[ArmyNumber][PlayerNumber].Text := '';
arBoxRewardsEdits[ArmyNumber][PlayerNumber].Text := '';
for i := 0 to Length(arBooleanComboBoxes[ArmyNumber]) - 1 do
arBooleanComboBoxes[ArmyNumber][i][PlayerNumber].Text := 'False';
for i := 0 to Length(arIntegerEdits[ArmyNumber]) - 1 do
arIntegerEdits[ArmyNumber][i][PlayerNumber].Text := '';
for i := 0 to Length(arStringEdits[ArmyNumber]) - 1 do
arStringEdits[ArmyNumber][i][PlayerNumber].Text := '';
for i := 0 to Length(arExtendedEdits[ArmyNumber]) - 1 do
arExtendedEdits[ArmyNumber][i][PlayerNumber].Text := '';
PlayerPages[ArmyNumber][PlayerNumber].Caption := 'Player ' + IntToStr(PlayerNumber);
end;
{*******************************************************************************
procedure AddPlayerInTab(ArmyNumber: Integer);
By: Sumilion
Description: Deletes a player in a desired tab and goes to the next desired tab.
*******************************************************************************}
procedure AddPlayerInTab(ArmyNumber: Integer);
var
i: Integer;
begin
SetLength(PlayerPages[ArmyNumber], Length(PlayerPages[ArmyNumber]) + 1);
SetSRLPlayerFormArrays;
arUserNameEdits[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
arPasswordEdits[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
arNickEdits[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
arActiveComboBoxes[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TComboBox.Create(srl_PlayerForm);
arActiveComboBoxes[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1].Text := 'True';
arPinEdits[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
arBoxRewardsEdits[ArmyNumber][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arBooleanComboBoxes[ArmyNumber]) - 1 do
arBooleanComboBoxes[ArmyNumber][i][Length(PlayerPages[ArmyNumber]) - 1] := TComboBox.Create(srl_PlayerForm);
for i := 0 to Length(arIntegerEdits[ArmyNumber]) - 1 do
arIntegerEdits[ArmyNumber][i][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arStringEdits[ArmyNumber]) - 1 do
arStringEdits[ArmyNumber][i][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arExtendedEdits[ArmyNumber]) - 1 do
arExtendedEdits[ArmyNumber][i][Length(PlayerPages[ArmyNumber]) - 1] := TEdit.Create(srl_PlayerForm);
FillSRLPlayerFormTab(ArmyNumber, Length(PlayerPages[ArmyNumber]) - 1);
if(ArmyNumber = srlpf_ArmyPageControl.ActivePageIndex)then
srlpf_PlayerPageControl[ArmyNumber].ActivePageIndex := Length(PlayerPages[ArmyNumber]) - 1;
end;
{*******************************************************************************
procedure AddArmy;
By: Sumilion
Description: Adds an army to the form
*******************************************************************************}
procedure AddArmy;
var
i: Integer;
begin
SetLength(ArmyPages, Length(ArmyPages) + 1);
SetLength(srlpf_PlayerPageControl, Length(ArmyPages));
ArmyPages[Length(ArmyPages) - 1] := TTabSheet.Create(srl_PlayerForm);
ArmyPages[Length(ArmyPages) - 1].Caption := 'Army ' + IntToStr(Length(ArmyPages) - 1);
ArmyPages[Length(ArmyPages) - 1].PageControl := srlpf_ArmyPageControl;
ArmyPages[Length(ArmyPages) - 1].OnShow := @OnSRLPFShow;
srlpf_PlayerPageControl[Length(ArmyPages) - 1] := TPageControl.Create(srl_PlayerForm);
with srlpf_PlayerPageControl[Length(ArmyPages) - 1] do
begin
Parent := ArmyPages[Length(ArmyPages) - 1];
Width := ArmyPages[Length(ArmyPages) - 1].Width;
Height := ArmyPages[Length(ArmyPages) - 1].Height;
Align := alBottom;
OnMouseDown := @OnSRLPFMouseDown;
OnDragDrop := @OnSRLPFDragDrop;
OnDragOver := @OnSRLPFDragOver;
end;
SetLength(PlayerPages, Length(ArmyPages));
SetLength(PlayerPages[Length(ArmyPages) - 1], 1);
SetSRLPlayerFormArrays;
arUserNameEdits[Length(ArmyPages) - 1][0] := TEdit.Create(srl_PlayerForm);
arPasswordEdits[Length(ArmyPages) - 1][0] := TEdit.Create(srl_PlayerForm);
arNickEdits[Length(ArmyPages) - 1][0] := TEdit.Create(srl_PlayerForm);
arActiveComboBoxes[Length(ArmyPages) - 1][0] := TComboBox.Create(srl_PlayerForm);
arActiveComboBoxes[Length(ArmyPages) - 1][0].Text := 'True';
arPinEdits[Length(ArmyPages) - 1][0] := TEdit.Create(srl_PlayerForm);
arBoxRewardsEdits[Length(ArmyPages) - 1][0] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arBooleanComboBoxes[Length(ArmyPages) - 1]) - 1 do
arBooleanComboBoxes[Length(ArmyPages) - 1][i][0] := TComboBox.Create(srl_PlayerForm);
for i := 0 to Length(arIntegerEdits[Length(ArmyPages) - 1]) - 1 do
arIntegerEdits[Length(ArmyPages) - 1][i][0] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arStringEdits[Length(ArmyPages) - 1]) - 1 do
arStringEdits[Length(ArmyPages) - 1][i][0] := TEdit.Create(srl_PlayerForm);
for i := 0 to Length(arExtendedEdits[Length(ArmyPages) - 1]) - 1 do
arExtendedEdits[Length(ArmyPages) - 1][i][0] := TEdit.Create(srl_PlayerForm);
FillSRLPlayerFormTab(Length(ArmyPages) - 1, 0);
srlpf_ArmyPageControl.ActivePageIndex := Length(ArmyPages) - 1;
end;
{*******************************************************************************
procedure DeleteArmy(ArmyNumber, NextArmyTab: Integer);
By: Sumilion
Description: Deletes an army in the form
*******************************************************************************}
procedure DeleteArmy(ArmyNumber, NextArmyTab: Integer);
var
i, j: Integer;
begin
if(NextArmyTab < 0)then
NextArmyTab := 0;
if(srlpf_ArmyPageControl.PageCount = 1)then
Exit;
if Armynumber > 0 then
srlpf_ArmyPageControl.ActivePageIndex := NextArmyTab
else
srlpf_ArmyPageControl.ActivePageIndex := 0;
if((srlpf_ArmyPageControl.PageCount - 1) > ArmyNumber)then
j := ArmyNumber + 1
else
j := ArmyNumber - 1;
for i := ArmyNumber + 1 to Length(ArmyPages) - 1 do
begin
srlpf_PlayerPageControl[i].Parent := ArmyPages[i - 1];
ArmyPages[i - 1].Caption := ArmyPages[i].Caption;
end;
srlpf_PlayerPageControl[ArmyNumber].Free;
ArmyPages[Length(ArmyPages) - 1].Free;
SetLength(ArmyPages, Length(ArmyPages) - 1);
DeleteInEditArrayOfArray(ArmyNumber, arUserNameEdits);
DeleteInEditArrayOfArray(ArmyNumber, arPasswordEdits);
DeleteInEditArrayOfArray(ArmyNumber, arNickEdits);
DeleteInComboArrayOfArray(ArmyNumber, arActiveComboBoxes);
DeleteInEditArrayOfArray(ArmyNumber, arPinEdits);
DeleteInEditArrayOfArray(ArmyNumber, arBoxRewardsEdits);
DeleteInComboArrayOfArrayOfArray(ArmyNumber, arBooleanComboBoxes);
DeleteInEditArrayOfArrayOfArray(ArmyNumber, arIntegerEdits);
DeleteInEditArrayOfArrayOfArray(ArmyNumber, arStringEdits);
DeleteInEditArrayOfArrayOfArray(ArmyNumber, arExtendedEdits);
DeleteInTabArrayOfArray(ArmyNumber, PlayerPages);
DeleteInPageControlArray(ArmyNumber, srlpf_PlayerPageControl);
srlpf_ArmyPageControl.ActivePageIndex := NextArmyTab;
//srlpf_PlayerPageControl[NextArmyTab].ActivePageIndex := 0;
for i := 0 to Length(ArmyPages) - 1 do
begin
if(Pos('Army', ArmyPages[i].Caption) = 1)then
ArmyPages[i].Caption := 'Army ' + IntToStr(i);
end;
end;
{*******************************************************************************
procedure RenameArmy(ArmyNumber: Integer);
By: Sumilion
Description: Renames an army's name
*******************************************************************************}
procedure RenameArmy(ArmyNumber: Integer);
var
ArmyName: string;
begin
ArmyName := Readln('New army name for : ' + ArmyPages[ArmyNumber].Caption +
Chr(13) + '(Leave blank for default)');
if(ArmyName = '')then
ArmyPages[ArmyNumber].Caption := 'Army ' + IntToStr(ArmyNumber)
else
ArmyPages[ArmyNumber].Caption := ArmyName;
end;
{*******************************************************************************
procedure ExportPlayerData;
By: Starblaster100 / Sumilion
Description: Turns the info input into the forms into a copy and pasteable
DeclarePlayers procedure
*******************************************************************************}
procedure ExportPlayerData;
var
i, j, ArmyIndex: Integer;
TempString: string;
OpenDialog1 : TSaveDialog;
a: TStringList;
begin
OpenDialog1 := TSaveDialog.Create(srl_PlayerForm);
a := TStringList.Create;
with OpenDialog1 do
begin
InitialDir := ScriptPath;
Filter := 'SCAR Scripts (*.scar)|*.scar|';
if(Execute)then
begin
if(ExtractFileExt(FileName) = '')then
TempString := FileName + '.scar'
else
TempString := FileName;
end else
begin
a.Free;
Free;
Exit;
end;
Free;
end;
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
a.Text := a.Text + 'procedure DeclarePlayers;' + Chr(13);
a.Text := a.Text + 'begin' + Chr(13);
a.Text := a.Text + ' NumberOfPlayers(' +IntToStr(Length(PlayerPages[ArmyIndex]))+ ');' + Chr(13);
a.Text := a.Text + ' HowManyBooleans := ' +IntToStr(Length(srlpf_Booleans))+ ';' + Chr(13);
for i := 0 to Length(PlayerPages[ArmyIndex])-1 do
begin
a.Text := a.Text + Chr(13);
if(arUserNameEdits[ArmyIndex][i].Text = '')then
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Name := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Name := ''' + arUserNameEdits[ArmyIndex][i].Text + ''';' + Chr(13);
if(arPasswordEdits[ArmyIndex][i].Text = '')then
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Pass := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Pass := ''' + arPasswordEdits[ArmyIndex][i].Text + ''';' + Chr(13);
if(arNickEdits[ArmyIndex][i].Text = '')then
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Nick := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Nick := ''' + arNickEdits[ArmyIndex][i].Text + ''';' + Chr(13);
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Active := ' + arActiveComboBoxes[ArmyIndex][i].Text + ';' + Chr(13);
if(arPinEdits[ArmyIndex][i].Text = '')then
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Pin := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].Pin := ''' + arPinEdits[ArmyIndex][i].Text + ''';' + Chr(13);
if(arBoxRewardsEdits[ArmyIndex][i].Text = '')then
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].BoxRewards := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' +IntToStr(i)+ '].BoxRewards := ''' + arBoxRewardsEdits[ArmyIndex][i].Text + ''';' + Chr(13);
for j := 0 to Length(srlpf_Booleans) - 1 do
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Booleans[' + IntToStr(j) + '] := ' + arBooleanComboBoxes[ArmyIndex][j][i].Text + ';' + Chr(13);
for j := 0 to Length(srlpf_Integers) - 1 do
if(arIntegerEdits[ArmyIndex][j][i].Text = '')then
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Integers[' + IntToStr(j) + '] := 0;' + Chr(13)
else
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Integers[' + IntToStr(j) + '] := ' + arIntegerEdits[ArmyIndex][j][i].Text + ';' + Chr(13);
for j := 0 to Length(srlpf_Strings) - 1 do
if(arStringEdits[ArmyIndex][j][i].Text = '')then
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Strings[' + IntToStr(j) + '] := '''';' + Chr(13)
else
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Strings[' + IntToStr(j) + '] := ''' + arStringEdits[ArmyIndex][j][i].Text + ''';' + Chr(13);
for j := 0 to Length(srlpf_Extendeds) - 1 do
if(arExtendedEdits[ArmyIndex][j][i].Text = '')then
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Extendeds[' + IntToStr(j) + '] := 0.0;' + Chr(13)
else
a.Text := a.Text + ' Players[' + IntToStr(i) + '].Extendeds[' + IntToStr(j) + '] := ' + arExtendedEdits[ArmyIndex][j][i].Text + ';' + Chr(13);
end;
a.Text := a.Text + 'end;' + Chr(13);
try
SaveToFile(a, TempString);
except
a.Free;
GetApplication.MessageBox('File not found!', '', 0);
Exit;
end;
end;
{*******************************************************************************
procedure ImportPlayerData;
By: Starblaster100 / Sumilion
Description: Inputs information from the DeclarePlayers procedure into the form
*******************************************************************************}
procedure ImportPlayerData;
var
i, j, ArmyIndex: Integer;
DeclarePlayers, TempString: string;
OpenDialog1 : TOpenDialog;
a: TStringList;
begin
OpenDialog1 := TOpenDialog.Create(srl_PlayerForm);
a := TStringList.Create;
with OpenDialog1 do
begin
InitialDir := ScriptPath;
Options := [ofFileMustExist, ofReadOnly];
Filter := 'SCAR Scripts (*.scar)|*.scar|' +
'Text Files (*.txt)|*.txt|' +
'All Files|*|';
if(Execute)then
TempString := FileName
else
begin
a.Free;
Free;
Exit;
end;
Free;
end;
try
LoadFromFile(a, TempString);
except
a.Free;
GetApplication.MessageBox('File not found!', '', 0);
Exit;
end;
DeclarePlayers := LowerCase(a.Text);
AddArmy;
a.Free;
HowManyPlayers := StrToIntDef(Between('numberofplayers(', ');', DeclarePlayers), 0);
if(HowManyPlayers = 0)then
HowManyPlayers := StrToIntDef(Between('howmanyplayers := ', ';', DeclarePlayers), 1);
ArmyIndex := srlpf_ArmyPageControl.PageCount - 1;
for i := 0 to HowManyPlayers - 2 do
AddPlayerInTab(ArmyIndex);
for i := 0 to HowManyPlayers - 1 do
begin
arUserNameEdits[ArmyIndex][i].Text := Between('players[' + IntToStr(i) + '].name := ''', ''';', DeclarePlayers);
arPassWordEdits[ArmyIndex][i].Text := Between('players[' + IntToStr(i) + '].pass := ''', ''';', DeclarePlayers);
arNickEdits[ArmyIndex][i].Text := Between('players[' + IntToStr(i) + '].nick := ''', ''';', DeclarePlayers);
arActiveComboBoxes[ArmyIndex][i].Text := Between('players[' + IntToStr(i) + '].active := ', ';', DeclarePlayers);
arPinEdits[ArmyIndex][i].Text := Between('players[' + IntToStr(i) + '].pin := ''', ''';', DeclarePlayers);
arBoxRewardsEdits[ArmyIndex][i].Text := Replace(Between('players[' + IntToStr(i) + '].boxrewards := ''', ''';', DeclarePlayers), ' ', '');
for j := 0 to Length(srlpf_Booleans) - 1 do
arBooleanComboBoxes[ArmyIndex][j][i].Text := Between('players[' + IntToStr(i) + '].booleans[' +IntToStr(j)+ '] := ', ';', DeclarePlayers);
for j := 0 to Length(srlpf_Integers) - 1 do
arIntegerEdits[ArmyIndex][j][i].Text := Between('players[' + IntToStr(i) + '].integers[' +IntToStr(j)+ '] := ', ';', DeclarePlayers);
for j := 0 to Length(srlpf_Strings) - 1 do
arStringEdits[ArmyIndex][j][i].Text := Between('players[' + IntToStr(i) + '].strings[' +IntToStr(j)+ '] := ''', ''';', DeclarePlayers);
for j := 0 to Length(srlpf_Extendeds) - 1 do
arExtendedEdits[ArmyIndex][j][i].Text := Between('players[' + IntToStr(i) + '].extendeds[' +IntToStr(j)+ '] := ', ';', DeclarePlayers);
if(arUserNameEdits[ArmyIndex][i].Text <> '')then
PlayerPages[ArmyIndex][i].Caption := arUserNameEdits[ArmyIndex][i].Text
else
PlayerPages[ArmyIndex][i].Caption := 'Player ' + IntToStr(i);
end;
end;
{*******************************************************************************
procedure OnSRLPFMainMenuClick(Sender: TObject);
By: Sumilion
Description: Form actions on the MainMenu items
*******************************************************************************}
procedure OnSRLPFMainMenuClick(Sender: TObject);
var
i, j, ArmyIndex: Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePage.PageIndex;
case Sender of
AddPlayerItem: AddPlayerInTab(ArmyIndex);
DeletePlayersItem:
begin
CheckListForm := CreateForm;
SRLPFCheckListBox := TCheckListBox.Create(CheckListForm);
SRLPFCheckListBox.Parent := CheckListForm;
CheckListButton := TButton.Create(CheckListForm);
CheckListButton.Caption := 'Delete';
CheckListForm.Caption := 'Delete Players :';
for i := 0 to srlpf_PlayerPageControl[ArmyIndex].PageCount - 1 do
begin
SRLPFCheckListBox.Items.Add(PlayerPages[ArmyIndex][i].Caption);
end;
ShowCheckListForm;
for i := SRLPFCheckListBox.Items.Count - 1 downto 0 do
begin
if(SRLPFCheckListBox.Checked[i])then
if(srlpf_PlayerPageControl[ArmyIndex].PageCount > 1)then
if(i = ArmyIndex)then
DeletePlayerInTab(ArmyIndex, i, i - 1)
else
DeletePlayerInTab(ArmyIndex, i, ArmyIndex);
end;
FreeForm(CheckListForm);
end;
ClearPlayersItem:
begin
CheckListForm := CreateForm;
SRLPFCheckListBox := TCheckListBox.Create(CheckListForm);
SRLPFCheckListBox.Parent := CheckListForm;
CheckListButton := TButton.Create(CheckListForm);
CheckListButton.Caption := 'Clear';
CheckListForm.Caption := 'Clear Players :';
for i := 0 to srlpf_PlayerPageControl[ArmyIndex].PageCount - 1 do
begin
SRLPFCheckListBox.Items.Add(PlayerPages[ArmyIndex][i].Caption);
end;
ShowCheckListForm;
for i := SRLPFCheckListBox.Items.Count - 1 downto 0 do
begin
if(SRLPFCheckListBox.Checked[i])then
ClearPlayerInTab(ArmyIndex, i);
end;
FreeForm(CheckListForm);
end;
AddArmyItem: AddArmy;
DeleteArmiesItem:
begin
CheckListForm := CreateForm;
SRLPFCheckListBox := TCheckListBox.Create(CheckListForm);
SRLPFCheckListBox.Parent := CheckListForm;
CheckListButton := TButton.Create(CheckListForm);
CheckListButton.Caption := 'Delete';
CheckListForm.Caption := 'Delete Armies :';
for i := 0 to srlpf_ArmyPageControl.PageCount - 1 do
begin
SRLPFCheckListBox.Items.Add(ArmyPages[i].Caption);
end;
ShowCheckListForm;
for i := SRLPFCheckListBox.Items.Count - 1 downto 0 do
begin
if(SRLPFCheckListBox.Checked[i])then
if(srlpf_ArmyPageControl.PageCount > 1)then
DeleteArmy(i, i - 1);
end;
FreeForm(CheckListForm);
end;
ClearArmiesItem:
begin
CheckListForm := CreateForm;
SRLPFCheckListBox := TCheckListBox.Create(CheckListForm);
SRLPFCheckListBox.Parent := CheckListForm;
CheckListButton := TButton.Create(CheckListForm);
CheckListButton.Caption := 'Clear';
CheckListForm.Caption := 'Clear Armies :';
for i := 0 to srlpf_ArmyPageControl.PageCount - 1 do
begin
SRLPFCheckListBox.Items.Add(ArmyPages[i].Caption);
end;
ShowCheckListForm;
for i := SRLPFCheckListBox.Items.Count - 1 downto 0 do
begin
if(SRLPFCheckListBox.Checked[i])then
for j := 0 to srlpf_PlayerPageControl[i].PageCount - 1 do
ClearPlayerInTab(i, j);
end;
FreeForm(CheckListForm);
end;
RenameArmyItem: RenameArmy(ArmyIndex);
SaveAndStart: srl_PlayerForm.ModalResult := mrOk;
SaveAndExit:
begin
srl_PlayerForm.ModalResult := mrOk;
srlpf_TerminateWhenDone := True;
end;
JustExitItem:
begin
srlpf_SaveWhenDone := False;
srl_PlayerForm.ModalResult := mrOk;
end;
JustStartItem:
begin
srlpf_SaveWhenDone := False;
srl_PlayerForm.ModalResult := mrOk;
srlpf_TerminateWhenDone := True;
end;
ExportPlayersItem: ExportPlayerData;
ImportPlayersItem: ImportPlayerData;
end;
end;
{*******************************************************************************
procedure OnSRLPFClick(Sender: TObject);
By: Sumilion || edited by Richard and ZephyrsFury
Description: Form action on a click on a button
*******************************************************************************}
procedure OnSRLPFClick(Sender: TObject);
var
c, i, ArmyIndex: Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePage.PageIndex;
case Sender of
PreviousButton:
begin
srlpf_PlayerPageControl[ArmyIndex].ActivePage := srlpf_PlayerPageControl[ArmyIndex].FindNextPage(srlpf_PlayerPageControl[ArmyIndex].ActivePage,
False, True);
end;
DelPlayerButton:
begin
c := srlpf_PlayerPageControl[ArmyIndex].ActivePageIndex;
DeletePlayerInTab(ArmyIndex, c, c - 1);
end;
AddPlayerButton: AddPlayerInTab(ArmyIndex);
NextButton: srlpf_PlayerPageControl[ArmyIndex].ActivePage := srlpf_PlayerPageControl[ArmyIndex].FindNextPage(srlpf_PlayerPageControl[ArmyIndex].ActivePage, True, True);
CheckListButton: CheckListForm.ModalResult := mrOk;
StartButton: begin
srl_PlayerForm.ModalResult := mrOk;
srlpf_SaveWhenDone := False;
end;
ExitButton: Begin
srl_PlayerForm.ModalResult := mrOk;
srlpf_TerminateWhenDone := True;
end;
SaveExitButton: begin
srl_PlayerForm.ModalResult := mrOk;
srlpf_TerminateWhenDone := True;
end;
SaveStartButton: srl_PlayerForm.ModalResult := mrOk;
end;
for i := c to Length(PlayerPages[ArmyIndex]) - 1 do
if(arUserNameEdits[ArmyIndex][i].Text <> '')then
PlayerPages[ArmyIndex][i].Caption := arUserNameEdits[ArmyIndex][i].Text
else
PlayerPages[ArmyIndex][i].Caption := 'Player ' + IntToStr(i);
end;
{*******************************************************************************
procedure OnSRLPFShow(Sender: TObject);
By: Sumilion
Description: Form action on a Tab show
*******************************************************************************}
procedure OnSRLPFShow(Sender: TObject);
var
i, j: Integer;
begin
for i := 0 to Length(ArmyPages) - 1 do
if(ArmyPages[i] = Sender)then
begin
SetLabelsParent(i, srlpf_PlayerPageControl[i].ActivePageIndex);
Exit;
end;
i := srlpf_ArmyPageControl.ActivePageIndex;
for j := 0 to Length(PlayerPages[i]) - 1 do
if(PlayerPages[i][j] = Sender)then
begin
SetLabelsParent(i, j);
Exit;
end;
end;
{*******************************************************************************
procedure SRLPFMenuClick(Sender: TObject);
By: Sumilion
Description: Form action on Menu click
*******************************************************************************}
procedure SRLPFMenuClick(Sender: TObject);
var
c, ArmyIndex, PlayerIndex: Integer;
begin
ArmyIndex := srlpf_ArmyPageControl.ActivePageIndex;
PlayerIndex := srlpf_PlayerPageControl[ArmyIndex].ActivePageIndex;
case Sender of
AddArmyPopUp: AddArmy;
DelArmyPopUp:
begin
c := srlpf_ArmyPageControl.ActivePageIndex;
DeleteArmy(c, c - 1);
end;
ChangeArmyNamePopUp: RenameArmy(srlpf_ArmyPageControl.ActivePageIndex);
ClearArmyPopUp:
begin
for c := 0 to srlpf_PlayerPageControl[ArmyIndex].PageCount - 1 do
ClearPlayerInTab(ArmyIndex, c);
end;
AddPlayerPopUp: AddPlayerInTab(ArmyIndex);
DelPlayerPopUp:
begin
DeletePlayerInTab(ArmyIndex, PlayerIndex, PlayerIndex - 1);
for c := PlayerIndex to Length(PlayerPages[ArmyIndex]) - 1 do
if(arUserNameEdits[ArmyIndex][c].Text <> '')then
PlayerPages[ArmyIndex][c].Caption := arUserNameEdits[ArmyIndex][c].Text
else
PlayerPages[ArmyIndex][c].Caption := 'Player ' + IntToStr(c);
end;
ClearPlayerPopUp: ClearPlayerInTab(ArmyIndex, PlayerIndex);
end;
end;
{*******************************************************************************
procedure SetSRLPlayerFormArrays;
By: Sumilion
Description: Sets the arrays for the form
*******************************************************************************}
procedure SetSRLPlayerFormArrays;
var
i, j: Integer;
begin
SetLength(srlpf_PlayerPageControl, Length(ArmyPages));
SetLength(arUserNameEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arUserNameEdits[i], Length(PlayerPages[i]));
SetLength(arPasswordEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arPasswordEdits[i], Length(PlayerPages[i]));
SetLength(arNickEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arNickEdits[i], Length(PlayerPages[i]));
SetLength(arActiveComboBoxes, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arActiveComboBoxes[i], Length(PlayerPages[i]));
SetLength(arPinEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arPinEdits[i], Length(PlayerPages[i]));
SetLength(arBoxRewardsEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
SetLength(arBoxRewardsEdits[i], Length(PlayerPages[i]));
SetLength(arBooleanLabels, Length(srlpf_Booleans));
SetLength(arBooleanComboBoxes, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
begin
SetLength(arBooleanComboBoxes[i], Length(srlpf_Booleans));
for j := 0 to Length(arBooleanComboBoxes[i]) - 1 do
SetLength(arBooleanComboBoxes[i][j], Length(PlayerPages[i]));
end;
SetLength(arIntegerLabels, Length(srlpf_Integers));
SetLength(arIntegerEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
begin
SetLength(arIntegerEdits[i], Length(srlpf_Integers));
for j := 0 to Length(arIntegerEdits[i]) - 1 do
SetLength(arIntegerEdits[i][j], Length(PlayerPages[i]));
end;
SetLength(arStringLabels, Length(srlpf_Strings));
SetLength(arStringEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
begin
SetLength(arStringEdits[i], Length(srlpf_Strings));
for j := 0 to Length(arStringEdits[i]) - 1 do
SetLength(arStringEdits[i][j], Length(PlayerPages[i]));
end;
SetLength(arExtendedLabels, Length(srlpf_Extendeds));
SetLength(arExtendedEdits, Length(ArmyPages));
for i := 0 to Length(ArmyPages) - 1 do
begin
SetLength(arExtendedEdits[i], Length(srlpf_Extendeds));
for j := 0 to Length(arExtendedEdits[i]) - 1 do
SetLength(arExtendedEdits[i][j], Length(PlayerPages[i]));
end;
end;
{*******************************************************************************
procedure FillSRLPlayerFormTab(ArmyNumber, TabNumber: Integer);
By: Sumilion
Description: Fills the tabs with components
*******************************************************************************}
procedure FillSRLPlayerFormTab(ArmyNumber, TabNumber: Integer);
var
a, b: Integer;
begin
b := 0;
PlayerPages[ArmyNumber][TabNumber] := TTabSheet.Create(srl_PlayerForm);
with PlayerPages[ArmyNumber][TabNumber] do
begin
if(arUserNameEdits[ArmyNumber][TabNumber].Text <> '')then
Caption := arUserNameEdits[ArmyNumber][TabNumber].Text
else
Caption := 'Player ' + IntToStr(TabNumber);
PageControl := srlpf_PlayerPageControl[ArmyNumber];
Parent := srlpf_PlayerPageControl[ArmyNumber];
OnMouseDown := @OnSRLPFMouseDown;
OnShow := @OnSRLPFShow;
end;
with arUserNameEdits[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 53;
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
with arPasswordEdits[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 83;
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
with arNickEdits[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 113;
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
with arActiveComboBoxes[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 143;
Width := 121;
Height := 21;
ItemHeight := 13;
TabOrder := 8;
OnClick := @OnSRLPFClick;
Items.Add('True');
Items.Add('False');
end;
with arPinEdits[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 173;
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
with arBoxRewardsEdits[ArmyNumber][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 203;
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
for a := 0 to Length(srlpf_Booleans) - 1 do
begin
b := b + 1;
with arBooleanLabels[a] do
begin
Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
Top := 206 + (b * 30);
if(srlpf_Booleans[a] = '')then
Caption := 'Boolean[' + IntToStr(a) + ']'
else
Caption := srlpf_Booleans[a];
end;
with arBooleanComboBoxes[ArmyNumber][a][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 203 + (b * 30);
Width := 121;
Height := 21;
ItemHeight := 13;
TabOrder := 8;
OnClick := @OnSRLPFClick;
if(Text = '')then
Text := 'False';
Items.Add('True');
Items.Add('False');
end;
end;
for a := 0 to Length(srlpf_Integers) - 1 do
begin
b := b + 1;
with arIntegerLabels[a] do
begin
Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
Top := 206 + (b * 30);
if(srlpf_Integers[a] = '')then
Caption := 'Integer[' + IntToStr(a) + ']'
else
Caption := srlpf_Integers[a];
end;
with arIntegerEdits[ArmyNumber][a][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 203 + (b * 30);
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
end;
for a := 0 to Length(srlpf_Strings) - 1 do
begin
b := b + 1;
with arStringLabels[a] do
begin
Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
Top := 206 + (b * 30);
if(srlpf_Strings[a] = '')then
Caption := 'String[' + IntToStr(a) + ']'
else
Caption := srlpf_Strings[a];
end;
with arStringEdits[ArmyNumber][a][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 203 + (b * 30);
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
end;
for a := 0 to Length(srlpf_Extendeds) - 1 do
begin
b := b + 1;
with arExtendedLabels[a] do
begin
Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
Top := 206 + (b * 30);
if(srlpf_Extendeds[a] = '')then
Caption := 'Extended[' + IntToStr(a) + ']'
else
Caption := srlpf_Extendeds[a];
end;
with arExtendedEdits[ArmyNumber][a][TabNumber] do
begin
Parent := PlayerPages[ArmyNumber][TabNumber];
Left := (srl_PlayerForm.Width / 2) - 64 + (srlpf_Width / 2);
Top := 203 + (b * 30);
Width := 121;
Height := 21;
TabOrder := 8;
OnMouseDown := @OnSRLPFMouseDown;
end;
end;
end;
{*******************************************************************************
procedure LoadSRLPlayerForm;
By: Sumilion || edited by Richard and ZephyrsFury
Description: Loads the main SRL player form
*******************************************************************************}
procedure LoadSRLPlayerForm;
var
i, j, ArmyIndex: Integer;
begin
srl_PlayerForm := CreateForm;
srl_PlayerForm.Position := poDesktopCenter;
srl_PlayerForm.Width := 243;
srl_PlayerForm.Height := 385 + (Length(srlpf_Booleans) * 30) + //285 + 30 +30 = 345 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) + // + extra 40 for buttons = 385
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
srl_PlayerForm.Caption := 'SRL Playerform';
srl_PlayerForm.Color := clWhite;
srl_PlayerForm.Font.Color := clWindowText;
srl_PlayerForm.Font.Height := -11;
srl_PlayerForm.Font.Name := 'MS Sans Serif';
srl_PlayerForm.Font.Style := [];
srl_PlayerForm.Visible := False;
srl_PlayerForm.PixelsPerInch := 96;
srl_PlayerForm.BorderIcons := [biSystemMenu];
srl_PlayerForm.BorderStyle := bsSingle;
srlpf_MainMenu := TMainMenu.Create(srl_PlayerForm);
FileItem := TMenuItem.Create(srl_PlayerForm);
FileItem.Caption := 'File';
ImportPlayersItem := TMenuItem.Create(srl_PlayerForm);
ImportPlayersItem.Caption := 'Import Players';
ImportPlayersItem.OnClick := @OnSRLPFMainMenuClick;
ExportPlayersItem := TMenuItem.Create(srl_PlayerForm);
ExportPlayersItem.Caption := 'Export Players';
ExportPlayersItem.OnClick := @OnSRLPFMainMenuClick;
srlpf_MainMenu.Items.Add(FileItem);
srlpf_MainMenu.Items.Items[0].Add(ImportPlayersItem);
srlpf_MainMenu.Items.Items[0].Add(ExportPlayersItem);
PlayerControlItem := TMenuItem.Create(srl_PlayerForm);
PlayerControlItem.Caption := 'Player Control';
AddPlayerItem := TMenuItem.Create(srl_PlayerForm);
AddPlayerItem.Caption := 'Add Player';
AddPlayerItem.OnClick := @OnSRLPFMainMenuClick;
DeletePlayersItem := TMenuItem.Create(srl_PlayerForm);
DeletePlayersItem.Caption := 'Delete Players';
DeletePlayersItem.OnClick := @OnSRLPFMainMenuClick;
ClearPlayersItem := TMenuItem.Create(srl_PlayerForm);
ClearPlayersItem.Caption := 'Clear Players';
ClearPlayersItem.OnClick := @OnSRLPFMainMenuClick;
srlpf_MainMenu.Items.Add(PlayerControlItem);
srlpf_MainMenu.Items.Items[1].Add(AddPlayerItem);
srlpf_MainMenu.Items.Items[1].Add(DeletePlayersItem);
srlpf_MainMenu.Items.Items[1].Add(ClearPlayersItem);
ArmyControlItem := TMenuItem.Create(srl_PlayerForm);
ArmyControlItem.Caption := 'Army Control';
AddArmyItem := TMenuItem.Create(srl_PlayerForm);
AddArmyItem.Caption := 'Add Army';
AddArmyItem.OnClick := @OnSRLPFMainMenuClick;
DeleteArmiesItem := TMenuItem.Create(srl_PlayerForm);
DeleteArmiesItem.Caption := 'Delete Armies';
DeleteArmiesItem.OnClick := @OnSRLPFMainMenuClick;
ClearArmiesItem := TMenuItem.Create(srl_PlayerForm);
ClearArmiesItem.Caption := 'Clear Armies';
ClearArmiesItem.OnClick := @OnSRLPFMainMenuClick;
RenameArmyItem := TMenuItem.Create(srl_PlayerForm);
RenameArmyItem.Caption := 'Rename Army';
RenameArmyItem.OnClick := @OnSRLPFMainMenuClick;
srlpf_MainMenu.Items.Add(ArmyControlItem);
srlpf_MainMenu.Items.Items[2].Add(AddArmyItem);
srlpf_MainMenu.Items.Items[2].Add(DeleteArmiesItem);
srlpf_MainMenu.Items.Items[2].Add(ClearArmiesItem);
srlpf_MainMenu.Items.Items[2].Add(RenameArmyItem);
ExitItem := TMenuItem.Create(srl_PlayerForm);
ExitItem.Caption := 'Exit';
SaveAndStart := TMenuItem.Create(srl_PlayerForm);
SaveAndStart.Caption := 'Save and Start';
SaveAndStart.OnClick := @OnSRLPFMainMenuClick;
SaveAndExit := TMenuItem.Create(srl_PlayerForm);
SaveAndExit.Caption := 'Save and Exit';
SaveAndExit.OnClick := @OnSRLPFMainMenuClick;
JustExitItem := TMenuItem.Create(srl_PlayerForm);
JustExitItem.Caption := 'Start';
JustExitItem.OnClick := @OnSRLPFMainMenuClick;
JustStartItem := TMenuItem.Create(srl_PlayerForm);
JustStartItem.Caption := 'Exit';
JustStartItem.OnClick := @OnSRLPFMainMenuClick;
srlpf_MainMenu.Items.Add(ExitItem);
srlpf_MainMenu.Items.Items[3].Add(SaveAndStart);
srlpf_MainMenu.Items.Items[3].Add(SaveAndExit);
srlpf_MainMenu.Items.Items[3].Add(JustExitItem);
srlpf_MainMenu.Items.Items[3].Add(JustStartItem);
srlpf_Width := 58;
for i := 0 to Length(srlpf_Booleans) - 1 do
begin
arBooleanLabels[i] := TLabel.Create(srl_PlayerForm);
arBooleanLabels[i].Caption := srlpf_Booleans[i];
srlpf_Width := Max(srlpf_Width, arBooleanLabels[i].Width);
end;
for i := 0 to Length(srlpf_Integers) - 1 do
begin
arIntegerLabels[i] := TLabel.Create(srl_PlayerForm);
arIntegerLabels[i].Caption := srlpf_Integers[i];
srlpf_Width := Max(srlpf_Width, arIntegerLabels[i].Width);
end;
for i := 0 to Length(srlpf_Strings) - 1 do
begin
arStringLabels[i] := TLabel.Create(srl_PlayerForm);
arStringLabels[i].Caption := srlpf_Strings[i];
srlpf_Width := Max(srlpf_Width, arStringLabels[i].Width);
end;
for i := 0 to Length(srlpf_Extendeds) - 1 do
begin
arExtendedLabels[i] := TLabel.Create(srl_PlayerForm);
arExtendedLabels[i].Caption := srlpf_Extendeds[i];
srlpf_Width := Max(srlpf_Width, arExtendedLabels[i].Width);
end;
srl_PlayerForm.Width := srl_PlayerForm.Width + srlpf_Width;
srlpf_ArmyPageControl := TPageControl.Create(srl_PlayerForm);
srlpf_ArmyPageControl.Parent := srl_PlayerForm;
srlpf_ArmyPageControl.Align := alNone;
srlpf_ArmyPageControl.Top := 0;
srlpf_ArmyPageControl.Width := srl_PlayerForm.Width;
srlpf_ArmyPageControl.Height := 305 + (Length(srlpf_Booleans) * 30) + //285 + 30 +30 = 345 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) +
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
srlpf_ArmyPageControl.OnMouseDown := @OnSRLPFMouseDown;
//srlpf_ArmyPageControl.OnChange := @OnSRLPFChange;
for i := 0 to Length(ArmyPages) - 1 do
begin
ArmyPages[i] := TTabSheet.Create(srl_PlayerForm);
if(ArmyNames[i] <> '')then
ArmyPages[i].Caption := ArmyNames[i]
else
ArmyPages[i].Caption := 'Army ' + IntToStr(i);
ArmyPages[i].PageControl := srlpf_ArmyPageControl;
ArmyPages[i].OnShow := @OnSRLPFShow;
end;
srlpf_ArmyPageControl.ActivePageIndex := ActiveArmy;
ArmyIndex := ActiveArmy;
SetSRLPlayerFormArrays;
for i := 0 to Length(srlpf_PlayerPageControl) - 1 do
begin
srlpf_PlayerPageControl[i] := TPageControl.Create(srl_PlayerForm);
srlpf_PlayerPageControl[i].Parent := ArmyPages[i];
srlpf_PlayerPageControl[i].Width := ArmyPages[i].Width;
srlpf_PlayerPageControl[i].Height := ArmyPages[i].Height;
srlpf_PlayerPageControl[i].Align := alBottom;
srlpf_PlayerPageControl[i].OnMouseDown := @OnSRLPFMouseDown;
srlpf_PlayerPageControl[i].OnDragDrop := @OnSRLPFDragDrop;
srlpf_PlayerPageControl[i].OnDragOver := @OnSRLPFDragOver;
end;
for j := 0 to Length(PlayerPages) - 1 do
for i := 0 to Length(PlayerPages[j]) - 1 do
FillSRLPlayerFormTab(j, i);
UserNameLabel := TLabel.Create(srl_PlayerForm);
UserNameLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
UserNameLabel.Top := 56;
UserNameLabel.Caption := 'Username';
PasswordLabel := TLabel.Create(srl_PlayerForm);
PasswordLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
PasswordLabel.Top := 86;
PasswordLabel.Caption := 'Password';
NickLabel := TLabel.Create(srl_PlayerForm);
NickLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
NickLabel.Top := 116;
NickLabel.Caption := 'Nickname';
ActiveLabel := TLabel.Create(srl_PlayerForm);
ActiveLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
ActiveLabel.Top := 146;
ActiveLabel.Caption := 'Active';
PinLabel := TLabel.Create(srl_PlayerForm);
PinLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
PinLabel.Top := 176;
PinLabel.Caption := 'Bank Pin';
BoxRewardsLabel := TLabel.Create(srl_PlayerForm);
BoxRewardsLabel.Left := (srl_PlayerForm.Width / 2) - 75 - (srlpf_Width / 2);
BoxRewardsLabel.Top := 206;
BoxRewardsLabel.Caption := 'Box Rewards';
srlpf_ArmyPopUpMenu := TPopupMenu.Create(srlpf_ArmyPageControl);
AddArmyPopUp := TMenuItem.Create(srl_PlayerForm);
AddArmyPopUp.Caption := 'Add Army';
AddArmyPopUp.OnClick := @SRLPFMenuClick;
DelArmyPopUp := TMenuItem.Create(srl_PlayerForm);
DelArmyPopUp.Caption := 'Delete Army';
DelArmyPopUp.OnClick := @SRLPFMenuClick;
ChangeArmyNamePopUp := TMenuItem.Create(srl_PlayerForm);
ChangeArmyNamePopUp.Caption := 'Rename Army';
ChangeArmyNamePopUp.OnClick := @SRLPFMenuClick;
ClearArmyPopUp := TMenuItem.Create(srl_PlayerForm);
ClearArmyPopUp.Caption := 'Clear Army';
ClearArmyPopUp.OnClick := @SRLPFMenuClick;
srlpf_ArmyPopUpMenu.Items.Add(AddArmyPopUp);
srlpf_ArmyPopUpMenu.Items.Add(DelArmyPopUp);
srlpf_ArmyPopUpMenu.Items.Add(ChangeArmyNamePopUp);
srlpf_ArmyPopUpMenu.Items.Add(ClearArmyPopUp);
srlpf_PlayerPopUpMenu := TPopupMenu.Create(srl_PlayerForm);
AddPlayerPopUp := TMenuItem.Create(srl_PlayerForm);
AddPlayerPopUp.Caption := 'Add Player';
AddPlayerPopUp.OnClick := @SRLPFMenuClick;
DelPlayerPopUp := TMenuItem.Create(srl_PlayerForm);
DelPlayerPopUp.Caption := 'Delete Player';
DelPlayerPopUp.OnClick := @SRLPFMenuClick;
ClearPlayerPopUp := TMenuItem.Create(srl_PlayerForm);
ClearPlayerPopUp.Caption := 'Clear Player';
ClearPlayerPopUp.OnClick := @SRLPFMenuClick;
srlpf_PlayerPopUpMenu.Items.Add(AddPlayerPopUp);
srlpf_PlayerPopUpMenu.Items.Add(DelPlayerPopUp);
srlpf_PlayerPopUpMenu.Items.Add(ClearPlayerPopUp);
PreviousButton := TButton.Create(srl_PlayerForm);
PreviousButton.Parent := srl_PlayerForm;
PreviousButton.Left := (srl_PlayerForm.Width / 2) - 109;
PreviousButton.Top := 60;
PreviousButton.Width := 29;
PreviousButton.Height := 25;
PreviousButton.Caption := '<----';
PreviousButton.TabOrder := 8;
PreviousButton.OnClick := @OnSRLPFClick;
AddPlayerButton := TButton.Create(srl_PlayerForm);
AddPlayerButton.Parent := srl_PlayerForm;
AddPlayerButton.Left := (srl_PlayerForm.Width / 2) - 80;
AddPlayerButton.Top := 60;
AddPlayerButton.Width := 75;
AddPlayerButton.Height := 25;
AddPlayerButton.Caption := 'Add Player';
AddPlayerButton.TabOrder := 8;
AddPlayerButton.OnClick := @OnSRLPFClick;
DelPlayerButton := TButton.Create(srl_PlayerForm);
DelPlayerButton.Parent := srl_PlayerForm;
DelPlayerButton.Left := (srl_PlayerForm.Width / 2) - 5;
DelPlayerButton.Top := 60;
DelPlayerButton.Width := 75;
DelPlayerButton.Height := 25;
DelPlayerButton.Caption := 'Delete Player';
DelPlayerButton.TabOrder := 8;
DelPlayerButton.OnClick := @OnSRLPFClick;
NextButton := TButton.Create(srl_PlayerForm);
NextButton.Parent := srl_PlayerForm;
NextButton.Left := (srl_PlayerForm.Width / 2) + 70;
NextButton.Top := 60;
NextButton.Width := 29;
NextButton.Height := 25;
NextButton.Caption := '---->';
NextButton.TabOrder := 8;
NextButton.OnClick := @OnSRLPFClick;
StartButton := TButton.Create(srl_PlayerForm);
StartButton.Parent := srl_PlayerForm;
StartButton.Left := (srl_PlayerForm.Width / 2) - 130;
StartButton.Top := 310 + (Length(srlpf_Booleans) * 30) + //250 + 30 +30 = 310 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) +
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
StartButton.Width := 40;
StartButton.Height := 25;
StartButton.Caption := 'Start';
StartButton.TabOrder := 7;
StartButton.OnClick := @OnSRLPFClick;
ExitButton := TButton.Create(srl_PlayerForm);
ExitButton.Parent := srl_PlayerForm;
ExitButton.Left := (srl_PlayerForm.Width / 2) + 70;
ExitButton.Top := 310 + (Length(srlpf_Booleans) * 30) + //250 + 30 +30 = 310 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) +
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
ExitButton.Width := 40;
ExitButton.Height := 25;
ExitButton.Caption := 'Exit';
ExitButton.TabOrder := 7;
ExitButton.OnClick := @OnSRLPFClick;
SaveStartButton := TButton.Create(srl_PlayerForm);
SaveStartButton.Parent := srl_PlayerForm;
SaveStartButton.Left := (srl_PlayerForm.Width / 2) - 90;
SaveStartButton.Top := 310 + (Length(srlpf_Booleans) * 30) + //250 + 30 +30 = 310 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) +
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
SaveStartButton.Width := 80;
SaveStartButton.Height := 25;
SaveStartButton.Caption := 'Start and Save';
SaveStartButton.TabOrder := 7;
SaveStartButton.OnClick := @OnSRLPFClick;
SaveExitButton := TButton.Create(srl_PlayerForm);
SaveExitButton.Parent := srl_PlayerForm;
SaveExitButton.Left := (srl_PlayerForm.Width / 2) - 10;
SaveExitButton.Top := 310 + (Length(srlpf_Booleans) * 30) + //250 + 30 +30 = 310 //Pin and BoxRewards
(Length(srlpf_Integers) * 30) +
(Length(srlpf_Strings) * 30) +
(Length(srlpf_Extendeds) * 30);
SaveExitButton.Width := 80;
SaveExitButton.Height := 25;
SaveExitButton.Caption := 'Exit and Save';
SaveExitButton.TabOrder := 7;
SaveExitButton.OnClick := @OnSRLPFClick;
end;
{*******************************************************************************
procedure ShowSRLPFFormModal;
By: Sumilion
Description: Shows the form
*******************************************************************************}
procedure ShowSRLPFFormModal;
begin
srl_PlayerForm.ShowModal;
end;
{*******************************************************************************
procedure SRLPlayerForm(ShowForm: Boolean; Booleans, Integers, Strings, Extendeds: TStringArray);
By: Sumilion
Description: Main function, sets and loads values needed for player settings and the form.
*******************************************************************************}
procedure SRLPlayerForm(ShowForm: Boolean; Booleans, Integers, Strings, Extendeds: TStringArray);
var
V: TVariantArray;
begin
srlpf_SavePath := AppPath + 'Chars.INI';
srlpf_Booleans := Booleans;
srlpf_Integers := Integers;
srlpf_Strings := Strings;
srlpf_Extendeds := Extendeds;
LoadPlayers(False);
if(ShowForm)then
begin
srlpf_SaveWhenDone := True;
V := [];
ThreadSafeCall('LoadSRLPlayerForm', V);
V := [];
ThreadSafeCall('ShowSRLPFFormModal', V);
if(srlpf_SaveWhenDone)then
SavePlayers;
if(srlpf_TerminateWhenDone)then
TerminateScript;
end;
LoadPlayers(True);
end;
Try it