My Version.. Just replaced some reflection stuff with colour
{$Define Reflection} //comment this line out to use color, not completed yet.
program EdgevilleFisher;
{.include SRL/SRL/Misc/SMART.scar}
{.include SRL/SRL.scar}
{.include SRL/SRL/Misc/Debug.scar}
{$ifDef Reflection}
{.include Reflection/Reflection.simba}
{$EndIf}
Const
INI_Loc = '';
Type
TFormPlayers = Record
Name, Pass, Nick, Pin : String;
End;
var
x, y, BreakAfter, BreakFor, TimeSinceBreak: integer;
UseBreaks: boolean;
Loads, SalmonB, TroutB: TIntegerArray;
FishingSpot: TPointArray;
frmDesign, frmDesign2 : TForm;
Buttons : Array [0..2] of TButton;
Labels: Array [0..7] of TLabel;
LabelNames: Array of String;
LabelPosX, EditPosX, EditPosY, LabelPosY: TIntegerArray;
EditBoxes: Array [0..5] of TEdit;
EditBox1: TEdit;
Button1: TButton;
Label1: TLabel;
List1: TListBox;
ComboBox1: TComboBox;
FormPlayers : Array of TFormPlayers;
RCBox1: TCheckBox;
Memo1: TMemo;
Procedure DeclarePlayers;
var
i: integer;
begin
NumberOfPlayers(Length(FormPlayers));
for i := 0 to High(FormPlayers) do
begin
Players[i].Name := FormPlayers[i].Name;
Players[i].Pass := FormPlayers[i].Pass;
Players[i].Nick := FormPlayers[i].Nick;
Players[i].Strings[0] := FormPlayers[i].Pin;
Players[i].Active := True;
end;
end;
Function PlayersInINI(var NPlayers: integer): boolean;
begin
NPlayers := StrToInt(ReadINI('NumCharacters', 'Num', INI_Loc));
Result := (NPlayers > 0);
end;
Function LoadCharsINIList: TStringArray;
var
i, NPlayers: integer;
begin
Writeln('Loading players');
PlayersInINI(NPlayers);
SetLength(Result, NPlayers);
for i := 0 to NPlayers - 1 do
begin
Result[i] := ReadINI('Character' + IntToStr(i), 'Name', INI_Loc);
end;
end;
Procedure SaveItem;
var
OldNum, i: integer;
NewNum: string;
begin
OldNum := StrToInt(ReadINI('NumCharacters', 'Num', INI_Loc));
NewNum := IntToStr((OldNum + 1));
WriteINI('NumCharacters', 'Num', NewNum, INI_Loc)
NewNum := IntToStr(OldNum);;
WriteINI('Character' + (NewNum), 'Name', EditBoxes[2].Text, INI_Loc);
WriteINI('Character' + (NewNum), 'Pass', EditBoxes[3].Text, INI_Loc);
WriteINI('Character' + (NewNum), 'Nick', EditBoxes[4].Text, INI_Loc);
WriteINI('Character' + (NewNum), 'Pin', EditBoxes[5].Text, INI_Loc);
for i := 2 to 5 do
EditBoxes[i].Clear;
end;
Procedure ReorganizeINI(DelNum, OldNumofChars: integer);
var
i: integer;
CharInfo: TFormPlayers;
begin
for i := (DelNum + 1) to OldNumofChars do
begin
CharInfo.Name := (ReadINI('Character' + IntToStr(i), 'Name', INI_Loc));
CharInfo.Pass := (ReadINI('Character' + IntToStr(i), 'Pass', INI_Loc));
CharInfo.Nick := (ReadINI('Character' + IntToStr(i), 'Nick', INI_Loc));
CharInfo.Pin := (ReadINI('Character' + IntToStr(i), 'Pin', INI_Loc));
WriteINI('Character' + IntToStr(i - 1), 'Name', CharInfo.Name, INI_Loc);
WriteINI('Character' + IntToStr(i - 1), 'Pass', CharInfo.Pass, INI_Loc);
WriteINI('Character' + IntToStr(i - 1), 'Nick', CharInfo.Nick, INI_Loc);
WriteINI('Character' + IntToStr(i - 1), 'Pin', CharInfo.Pin, INI_Loc);
end;
end;
Procedure DeleteItem;
var
OldNum, CharNum: integer;
NewNum, ININame: string;
ListNames: TStrings;
begin
CharNum := List1.ITEMINDEX;
ININame := ReadINI('Character' + IntToStr(CharNum), 'Name', INI_Loc);
ListNames := List1.ITEMS;
if(not(ListNames[CharNum] = ININame))then
begin
Writeln('Problem with character record');
Writeln('Please delete your BbriConfigFile.ini');
Writeln('If this problem persists, please contact me on Villavu.com');
frmDesign.ModalResult := mrOK;
TerminateScript;
end;
OldNum := StrToInt(ReadINI('NumCharacters', 'Num', INI_Loc));
if(OldNum = 0)then
begin
Writeln('No characters currently in the list to delete');
Exit;
end;
NewNum := IntToStr((OldNum - 1));
WriteINI('NumCharacters', 'Num', NewNum, INI_Loc)
DeleteINI('Character' + IntToStr(CharNum), '', INI_Loc);
List1.Items.Delete(CharNum);
ReorganizeINI(CharNum, OldNum);
end;
Procedure FormEnd;
var
i: integer;
begin
if(Length(FormPlayers) = 0)then
begin
Writeln('No players selected to use');
Writeln('Script is terminating');
frmDesign.ModalResult := mrOk;
TerminateScript;
end;
Writeln('Starting script using the following players');
for i := 0 to High(FormPlayers) do
Writeln(FormPlayers[i].Name);
if(RCBox1.Checked)then
begin
UseBreaks := True;
Writeln('Using breaks');
BreakAfter := (StrToInt(EditBoxes[0].Text) * 60000) + Random(600000);
BreakFor := (StrToInt(EditBoxes[1].Text) * 60000) + Random(600000);
MarkTime(TimeSinceBreak);
Writeln('Player will break after ' + IntToStr(BreakAfter / 60000) + ' minutes.');
Writeln('Player will break for ' + IntToStr(BreakFor / 60000) + ' minutes.');
end;
frmDesign.ModalResult := mrOk;
end;
Procedure ButtonClick(Sender:TObject);
begin
Case Sender of
Buttons[0] : begin
if(Length(EditBoxes[2].Text) > 0)
and (Length(EditBoxes[3].Text) > 0)
and (length(EditBoxes[4].Text) > 0)
and (Length(EditBoxes[5].Text) > 0)then
begin
List1.Items.Add(EditBoxes[2].Text)
SaveItem;
end else
Writeln('Please fill out the character info boxes.');
end;
Buttons[1] : FormEnd;
Buttons[2] : DeleteItem;
Button1 : begin
frmDesign2.MODALRESULT := mrOk;
end;
end;
end;
Procedure ListClick(Sender: TObject);
begin
comboBox1.CLEAR;
ComboBox1.Items.Add('Active');
end;
Procedure SetupPlayer(PlayerIndex: integer);
begin
SetLength(FormPlayers, (High(FormPlayers) + 2));
FormPlayers[High(FormPlayers)].Name := ReadINI('Character' + IntToStr(PlayerIndex), 'Name', INI_Loc);
FormPlayers[High(FormPlayers)].Pass := ReadINI('Character' + IntToStr(PlayerIndex), 'Pass', INI_Loc);
FormPlayers[High(FormPlayers)].Nick := ReadINI('Character' + IntToStr(PlayerIndex), 'Nick', INI_Loc);
FormPlayers[High(FormPlayers)].Pin := ReadINI('Character' + IntToStr(PlayerIndex), 'Pin', INI_Loc);
end;
Procedure ActiveSet(Sender: TObject);
begin
if(ComboBox1.ItemIndex = 0)then
SetupPlayer(List1.ItemIndex);
end;
procedure InitForm;
var
i, BoxWidth, NPlayers: integer;
PlayersINI: TStringArray;
begin
frmDesign := CreateForm;
frmDesign.Left := 100;
frmDesign.Top := 100;
frmDesign.Width := 600;
frmDesign.Height := 400;
frmDesign.Caption := 'Bbri06s Edgeville Fly Fisher';
frmDesign.Color := 13882311;
frmDesign.Font.Name := 'Calibri';
frmDesign.Font.Color := CLBlack;
for i := 0 to 2 do
begin
Buttons[i] := Tbutton.Create(frmDesign);
Buttons[i].Parent := frmDesign;
Buttons[i].left := 140 + (i * 110);
Buttons[i].Top := 340;
Buttons[i].Width := 100;
Buttons[i].Height := 30;
Buttons[i].OnClick := @ButtonClick;
end;
Buttons[0].Caption := 'Add Player';
Buttons[1].Caption := 'Start Script';
Buttons[2].Caption := 'Del Player';
LabelPosX := [60, 220, 220, 332, 332, 332, 332, 110];
LabelPosY := [80, 82, 127, 100, 140, 180, 220, 285];
LabelNames := ['Players list', 'Break after', 'Break for', 'Username', 'Password', 'Nickname', 'Pin', 'Active?'];
for i := 0 to 7 do
begin
Labels[i] := TLabel.Create(frmDesign);
Labels[i].Parent := frmDesign;
Labels[i].Left := LabelPosX[i];
Labels[i].Top := LabelPosY[i];
Labels[i].Caption := LabelNames[i];
end;
EditPosX := [210, 210, 415, 415, 415, 415];
EditPosY := [100, 145, 100, 140, 180, 220];
for i := 0 to 5 do
begin
if(i > 1)then
BoxWidth := 175
else
BoxWidth := 100;
EditBoxes[i] := TEdit.Create(frmDesign);
EditBoxes[i].Parent := frmDesign;
EditBoxes[i].Top := EditPosY[i];
EditBoxes[i].Left := EditPosX[i];
EditBoxes[i].Width := BoxWidth;
EditBoxes[i].Height := 20;
end;
EditBoxes[0].Text := 'In mins';
EditBoxes[1].Text := 'In mins';
EditBoxes[5].Text := 'Set to "0000" for no pin';
EditBoxes[3].PasswordChar := '*';
List1 := TListBox.Create(frmDesign);
List1.Parent := frmDesign;
List1.Top := 100;
List1.Left := 10;
List1.Width := 175;
List1.Height := 175;
List1.OnClick := @ListClick;
if(PlayersInINI(NPlayers))then
begin
PlayersINI := LoadCharsINIList;
for i := 0 to High(PlayersINI) do
begin
Writeln('Loaded Player ' + PlayersINI[i]);
List1.Items.Add(PlayersINI[i]);
end;
end;
ComboBox1 := TComboBox.Create(frmDesign);
ComboBox1.Parent := FrmDesign;
ComboBox1.Top := 280;
ComboBox1.Left := 20;
ComboBox1.Width := 80;
ComboBox1.Height := 20;
ComboBox1.OnChange := @ActiveSet;
RCBox1 := TCheckBox.Create(frmDesign);
RCBox1.Parent := frmDesign;
RCBox1.Top := 175;
RCBox1.Left := 210;
RCBox1.Width := 0;
RCBox1.Height := 0;
RCBox1.Caption := 'Use breaking?';
Memo1 := TMemo.Create(frmDesign);
Memo1.Parent := frmDesign;
Memo1.Top := 250;
Memo1.Left := 190;
Memo1.Width := 400;
Memo1.Height := 85;
Memo1.READONLY;
Memo1.Font.color := 4926486;
Memo1.FONT.Size := 9;
Memo1.Text := 'Welcome to Bbri06s Edgeville Fly Fisher and Banker. To setup, enter any new players info that is not on the player list into the appropriate boxes then click add player. Before starting the script, select which players should be used by clicking their names in the player list and then selecting active in the box below.';
end;
procedure InitForm2;
begin
frmDesign2 := CreateForm;
frmDesign2.Left := 500;
frmDesign2.Top := 300;
frmDesign2.Width := 500;
frmDesign2.Height := 100;
frmDesign2.Caption := 'File location';
frmDesign2.Color := 14979415;
frmDesign2.Font.Name := 'Calibri';
frmDesign2.Font.Color := CLBlack;
EditBox1 := TEdit.Create(frmDesign2);
EditBox1.Parent := frmDesign2;
EditBox1.Left := 62;
EditBox1.Top := 10;
EditBox1.Width := 375;
EditBox1.Height := 30;
Label1 := TLabel.Create(frmDesign2);
Label1.Parent := frmDesign2;
Label1.left := 175;
Label1.Top := 40;
Label1.Caption := 'Location to save config file';
Label1.FONT.Size := 9;
Button1 := TButton.Create(frmDesign2);
Button1.Parent := frmDesign2;
Button1.Left := 215;
Button1.Top := 60;
Button1.Width := 70;
Button1.Caption := 'Ok';
Button1.OnClick := @ButtonClick;
end;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
procedure SafeInitForm2;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm2', v);
end;
procedure ShowFormModal2;
begin
frmDesign2.ShowModal;
end;
procedure SafeShowFormModal2;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal2', v);
end;
Procedure SetupFormConfig;
begin
SafeInitForm2;
SafeShowFormModal2;
writeln('Setting up player info file');
CreateFile(EditBox1.Text + '\BbriConfigFile.ini');
Writeln('Waiting for file creation');
Wait(2000);
Writeln('File should be made; script must be restarted now');
Writeln('Before restarting please fill in INI_Loc with the path you entered');
Writeln('The path was ' + EditBox1.Text + '\BbriConfigFile.ini');
TerminateScript;
end;
function R_OpenBankBootha(Bank : String) : Boolean;
var
Tiles: TPointArray;
P: TPoint;
Tries: Integer;
begin
Result := R_BankScreen or R_PinScreen;
if Result then Exit;
case LowerCase(Bank) of
'veb', 'varrock east':
Tiles := [Point(3251,3419), Point(3252,3419), Point(3253,3419),
Point(3254,3419), Point(3255,3419), Point(3256,3419)];
'vwb', 'varrock west':
Tiles := [Point(3190,3435), Point(3190,3437), Point(3190,3439),
Point(3190,3441), Point(3190,3443), Point(3181,3444),
Point(3181,3442), Point(3181,3440), Point(3181,3438),
Point(3181,3436)];
'falador west', 'fwb':
Tiles := [Point(2945,3367), Point(2946,3367), Point(2947,3367),
Point(2948,3367)];
'falador east', 'feb':
Tiles := [Point(3010,3354), Point(3011,3354), Point(3012,3354),
Point(3013,3354), Point(3014,3354), Point(3015,3354)];
'lumbridge', 'lb':
Tiles := [Point(3208,3221)];
'draynor', 'db':
Tiles := [Point(3091,3419), Point(3091,3245), Point(3091,3244),
Point(3091,3243), Point(3091,3242)];
'al kharid', 'akb':
Tiles := [Point(3268,3168), Point(3268,3167), Point(3268,3166),
Point(3268,3165), Point(3268,3164)];
'seb', 'seers':
Tiles := [Point(2729,3494), Point(2728,3494), Point(2727,3494),
Point(2724,3494), Point(2722,3494)];
'eb', 'edgeville':
Tiles := [Point(3095,3489), Point(3095,3491), Point(3095,3493),
Point(3097,3495)];
'cb', 'catherby':
Tiles := [Point(2807, 3442), Point(2809, 3442), Point(2810, 3442), Point(2811, 3442)];
'fgb', 'fishing guild':
Tiles := [Point(2585, 3422), Point(2585, 3421), Point(2585, 3419), Point(2585, 3418)];
'mc', 'moonclan':
Tiles := [Point(2098, 3920), Point(2097, 3920), Point(2098, 3920)];
'yb', 'yanille':
Tiles := [Point(2614, 3094), Point(2614, 3092), Point(2614, 3091)];
'da', 'duel arena': Tiles := [Point(3381, 3269), Point(3382, 3270)];
'asb', 'ardougne south': Tiles := [Point(2656, 3286), Point(2656, 3283)];
'pc', 'pest control':
Tiles := [Point(2667, 2652), Point(2666, 2652), Point(2665, 2652),
Point(2668, 2652)];
else
begin
SRL_Warn('R_OpenBankBooth', 'Unsupported bank name.', -1);
Exit;
end;
end;
SortTPAFrom(Tiles, GetMyPos);
if (DistanceFrom(Tiles[0]) > 3) or not TileOnMS(Tiles[0], 10) then
begin
if not(TileOnMM(Tiles[0])) then
begin
SRL_Warn('R_OpenBankBooth', 'Could not find Bank Booth.', Warn_AllVersions);
Exit;
end;
WalkToTile(Tiles[0], 0, 0);
Wait(50);
R_Flag;
Wait(RandomRange(100, 200));
end;
if not(TileOnMS(Tiles[0], 10)) then
begin
SetAngle(True);
MakeCompass('n');
Wait(RandomRange(200, 400));
if not(TileOnMS(Tiles[0], 10)) then
begin
SRL_Warn('R_OpenBankBooth', 'Could get MS Point.', Warn_AllVersions);
Exit;
end;
end;
P := TileToMS(Tiles[0], 10);
MMouse(p.x - 5, p.y - 5, 11, 11);
Wait(RandomRange(200, 300));
if IsUpTextMultiCustom(['ank', 'ooth']) then
begin
GetMousePos(P.x, P.y);
Mouse(P.x, P.y, 0, 0, false);
Wait(RandomRange(80, 110));
P.x := 0;
if WaitOption('uickl', 2200) then
repeat
R_Flag;
Wait(RandomRange(50, 90));
Inc(Tries);
if (Length(Players) > 0) then
if Players[CurrentPlayer].Pin <> '' then
Result := InPin(Players[CurrentPlayer].Pin);
Result := R_BankScreen or R_PinScreen;
until Result or (Tries > 40);
end;
end;
function WaterAC: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
R, G, B: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.68, 0.54);
FindColorsSpiralTolerance(MMCX, MMCY, arP, 9865086, MMX1, MMY1, MMX2, MMY2, 8);
if (Length(arP) = 0) then
begin
// Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= 111) and (R <= 146) and (G >= 115) and (G <= 153) and (B >= 128) and (B <= 169) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 16.87) and (X <= 29.74) and (Y >= 17.50) and (Y <= 30.96) and (Z >= 23.23) and (Z <= 41.36) then
begin
Result := arC[i];
// Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
// Writeln('AutoColor failed in finding the color.');
end;
function BankFloorAC: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
R, G, B: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.29, 1.72);
FindColorsSpiralTolerance(MMCX, MMCY, arP, 856906, MMX1, MMY1, MMX2, MMY2, 5);
if (Length(arP) = 0) then
begin
// Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= 57) and (R <= 92) and (G >= 13) and (G <= 23) and (B >= 7) and (B <= 20) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 1.94) and (X <= 4.72) and (Y >= 1.24) and (Y <= 2.86) and (Z >= 0.35) and (Z <= 0.93) then
begin
Result := arC[i];
// Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
// Writeln('AutoColor failed in finding the color.');
end;
function BubblesAC: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
R, G, B: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.25, 0.28);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 11116956, MSX1, MSY1, MSX2, MSY2, 8);
if (Length(arP) = 0) then
begin
// Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= 134) and (R <= 177) and (G >= 141) and (G <= 180) and (B >= 152) and (B <= 185) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 25.48) and (X <= 42.69) and (Y >= 26.81) and (Y <= 44.95) and (Z >= 34.13) and (Z <= 51.78) then
begin
Result := arC[i];
// Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
// Writeln('AutoColor failed in finding the color.');
end;
Procedure TakeABreak;
var
PreWaitTime: integer;
begin
R_Flag;
Wait(750 + Random(500));
if(PlayersActive > 1)then
begin
LogOut;
NextPlayer(Players[CurrentPlayer].Active);
if(BreakFor >= 360000)then
BreakFor := RandomRange((BreakFor - 180000), BreakFor + 180000);
if(BreakAfter >= 600000)then
BreakAfter := RandomRange((BreakAfter - 500000), (BreakAfter + 500000));
Writeln('Done breaking, logging back in');
Writeln('Next break will be ' + IntToStr(BreakFor / 60000) + ' minutes.');
Writeln('Next break will occur after ' + IntToStr(BreakAfter / 60000) + ' minutes.');
Exit;
end;
MarkTime(PreWaitTime);
Writeln('Breaking for ' + IntToStr(BreakFor / 60000) + ' minutes.');
LogOut;
repeat
Wait(RandomRange(5000, 25000))
until(TimeFromMark(PreWaitTime) >= BreakFor)
MarkTime(TimeSinceBreak);
if(BreakFor >= 360000)then
BreakFor := RandomRange((BreakFor - 180000), BreakFor + 180000);
if(BreakAfter >= 600000)then
BreakAfter := RandomRange((BreakAfter - 500000), (BreakAfter + 500000));
Writeln('Done breaking, logging back in');
Writeln('Next break will be ' + IntToStr(BreakFor / 60000) + ' minutes.');
Writeln('Next break will occur after' + IntToStr(BreakAfter / 60000) + ' minutes.');
NextPlayer(Players[CurrentPlayer].Active);
end;
Procedure Randoms;
var
BookDTM: integer;
begin
BookDTM := DTMFromString('78DA637460616098CCC80002109281A1B4A08' +
'0410E89CFE80454D381AA868181898115598D3F504D0F116A2610501' +
'300543389801A2FA09A3904D480DCBC84801A2322CCB102AA5948408' +
'D2D504D3B01351644F89D88B80000162F0D9A');
if(FindDTM(BookDTM, x, y, mix1, miy1, mix2, miy2))then
begin
Writeln('Found experience reward book');
Writeln('Choosing fishing skill');
Mouse(x, y, 3, 3, true);
Wait(750 + random(250));
Mouse(325, 164, 12, 12, True);
Wait(350 + random(150));
MouseBox(384, 275, 449, 285, 1);
Wait(500 + random(300));
end;
FreeDTM(BookDTM);
LevelUp;
// R_FindRandoms;
FindNormalRandoms;
end;
{$IfDef Reflection}
Procedure Ref_MainLoop; Forward;
{$EndIf}
Function LoggedInBB: boolean;
var
i: integer;
Bool: boolean;
begin
for i:= 0 to 6 do
begin
{$IfDef Reflection}
Bool := R_LoggedIn
{$Else}
Bool := LoggedIn;
{$EndIf}
if(not(Bool))then
Wait(175 + random(50))
else begin
Result := True;
Exit;
end;
end;
Result := False;
end;
Function OffMapFlag: boolean;
var
i: integer;
begin
For i := 0 to 30 do
begin
if(Not(FindColor(x, y, 3026478, mmx1, mmy1, mmx2, mmy2)))then
Wait(100)
else begin
Writeln('Flag is back on map');
Result := true;
Exit;
end;
end;
if(i = 30)then
Result := false;
end;
{Credits to the creaters/updaters of FlagEx
(Wizzup? / WT-Fakawi / ZephyrsFury modified by N1ke!)
Used some of FlagEx}
Procedure BBFlag(Dist: integer);
var
TimeFS1, TimeFS2, Distance1, a, b: integer;
begin
Wait(500 + random(250));
MarkTime(TimeFS1);
While IsMoving do
begin
if(not(LoggedIn))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].Active := False;
LogOut;
end;
if(FindColor(a, b, 3026478, mmx1, mmy1, mmx2, mmy2))then
begin
Wait(50);
Distance1 := Distance(a, b + 14, MMCX, MMCY);
if(Distance1 <= Dist)then
Exit;
end else
if(not(IsMoving))then
Exit
else
if(not(OffMapFlag))then
Exit;
Wait(200);
MarkTime(TimeFS2);
if((TimeFS2 - TimeFS1) > 6000)then
if(Distance1 = Distance(a, b + 14, MMCX, MMCY))then
Exit;
if (Random(20) = 0)then
IdleTime(500, 1000, 0.01);
end;
end;
{Function GetTile: boolean;
var
TheTile: TPoint;
begin
TheTile := GetMyPos;
Writeln('At tile (' + IntToStr(TheTile.x) + ',' + IntToStr(TheTile.y) + ')');
Wait(2000);
end; }
{function LoadPath: TPointArray;
begin
SetLength(Result, 9);
Result[0] := Point(3107, 3433);
Result[1] := Point(3097, 3438);
Result[2] := Point(3090, 3446);
Result[3] := Point(3092, 3455);
Result[4] := Point(3093, 3464);
Result[5] := Point(3099, 3470);
Result[6] := Point(3099, 3482);
Result[7] := Point(3091, 3485);
Result[8] := Point(3093,3491);
end; }
function LoadPath: TPointArray;
begin
SetLength(Result, 24);
Result[0] := Point(3107, 3434);
Result[1] := Point(3104, 3434);
Result[2] := Point(3102, 3435);
Result[3] := Point(3098, 3436);
Result[4] := Point(3096, 3439);
Result[5] := Point(3094, 3440);
Result[6] := Point(3093, 3443);
Result[7] := Point(3092, 3444);
Result[8] := Point(3091, 3446);
Result[9] := Point(3091, 3449);
Result[10] := Point(3093, 3450);
Result[11] := Point(3093, 3454);
Result[12] := Point(3092, 3456);
Result[13] := Point(3091, 3459);
Result[14] := Point(3088, 3460);
Result[15] := Point(3087, 3465);
Result[16] := Point(3092, 3465);
Result[17] := Point(3097, 3465);
Result[18] := Point(3099, 3471);
Result[19] := Point(3100, 3477);
Result[20] := Point(3099, 3482);
Result[21] := Point(3095, 3484);
Result[22] := Point(3091, 3485);
Result[23] := Point(3092, 3489);
end;
function BankPoints: TPointArray;
begin
SetLength(Result, 5);
Result[0] := Point(3093, 3491);
Result[1] := Point(3093, 3489);
Result[2] := Point(3093, 3493);
Result[3] := Point(3092, 3495);
Result[4] := Point(3096, 3496);
end;
Procedure SmallCompAdj;
var
i: integer;
begin
i := Random(10);
if(i < 2)then
MakeCompass(RS_GetCompassAngleDegrees + Random(80))
else
if(i < 4)and(i > 1)then
MakeCompass(RS_GetCompassAngleDegrees - Random(80));
end;
Procedure RandomCompass;
var
i, z, q: integer;
begin
MakeCompass(Random(360));
z := Random(4);
for q := 0 to z do
begin
Wait(Random(500));
i := Random(10);
if(i < 4)then
SmallCompAdj;
end;
end;
Procedure AntiBan;
var
i: integer;
Bool: boolean;
begin
LevelUp;
{$IfDef Reflection}
Bool := R_LoggedIn
{$Else}
Bool := LoggedIn;
{$EndIf}
if(not(Bool))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].Active := False;
Exit;
end;
Randoms;
i := Random(225);
Case i of
0..7: RandomRClick;
8..9: HoverSkill('Fishing', False);
10..17: PickupMouse;
18..20: BoredHuman;
21..22: ExamineInv;
{$IfDef Reflection}
23..26: RandomCompass;
{$EndIf}
27..225: Wait(250 + random(250));
end;
end;
Procedure WaitForFullStop;
var
i: integer;
begin
for i := 0 to 15 do
if(IsMoving)then
Wait(100)
else
Break;
end;
Procedure Color_CountInv;
var
Trout, i: integer;
begin
for i := 0 to 5 do
if(not(GetCurrentTab = 25))then
if(not(GameTab(25)))then
begin
Randoms;
end;
if(i = 5)and(GetCurrentTab <> 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
Trout := DTMFromString('78DA6364E46060706764000108C9C0B07CC10' +
'20611243EE37F7606064754350C0C4C287C4616A0395604D47001D5D' +
'81250C30E54E346400D13508D0F0135FC40356604D47C07FACB17BF1' +
'A00C53B0699');
TroutB[CurrentPlayer] := TroutB[CurrentPlayer] + CountItems('dtm', trout, []);
SalmonB[CurrentPlayer] := SalmonB[CurrentPlayer] + CountItems('color', 6187690, [15]);
FreeDTM(Trout);
end;
Procedure ProgressReport;
begin
writeln('/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/');
writeln('Bbri06s Edgeville Fly Fisher');
writeln('Time running: ' + TimeRunning);
Writeln('Players active : ' + IntToStr(PlayersActive));
Writeln('');
Writeln('- Current Character Report -');
writeln('Banked ' + IntToStr(Loads[CurrentPlayer]) + ' loads.');
Writeln('Banked ' + IntToStr(TroutB[CurrentPlayer]) + ' trout.');
Writeln('Banked ' + IntToStr(SalmonB[CurrentPlayer]) + ' salmon.');
Writeln('Current character has gained ' + IntToStr((TroutB[CurrentPlayer] * 50) + (SalmonB[CurrentPlayer] * 70)) + ' experience.');
Writeln('');
Writeln('- Combined Report -');
Writeln('Banked ' + IntToStr(SumIntegerArray(Loads)) + ' loads.');
Writeln('Banked ' + IntToStr((SumIntegerArray(TroutB))) + ' trout.');
Writeln('Banked ' + IntToStr((SumIntegerArray(SalmonB))) + ' salmon.');
Writeln(IntToStr((SumIntegerArray(TroutB) * 50) + (SumIntegerArray(SalmonB) * 70)) + ' total experience has been gained.');
writeln('/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/');
SRLRandomsReport;
end;
Function TrackTPA(TPA: TPointArray): TPointArray;
var
Box: Tbox;
Color: integer;
TPA2: TPointArray;
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.29, 0.44);
repeat
Color := BubblesAC;
Box := GetTPABounds(TPA);
FindColorsTolerance(TPA2, Color, Box.x1 - 15, Box.y1 - 15, Box.x2 + 15, Box.y2 + 15, 10);
if(Length(TPA2) < 60)then
begin
TPA := TPA2;
end;
Wait(15);
until(not(IsMoving))
Result := TPA;
DebugTPA(Result, '');
end;
Function Color_SwitchSpots: boolean;
var
i: integer;
Symbols: TPointArray;
begin
writeln('Switching spots using color');
SymbolAccuracy := 0.5;
for i := 0 to 3 do
begin
FindSymbols(Symbols, 'fishing spot');
if(Length(Symbols) > 0)then
begin
Result := True;
SortTPAFrom(Symbols, IntToPoint(mmcx, mmcy));
InvertTPA(Symbols);
Mouse(Symbols[0].x, Symbols[0].y, 4, 4, true);
Exit;
end else
Wait(500 + random(500));
end;
Result := False;
end;
Function Color_AreWeFishing: boolean;
var
TPA: TPointArray;
FSBox: TBox;
i: integer;
begin
FSBox := GetTPABounds(FishingSpot);
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.25, 0.28);
for i := 0 to 3 do
begin
FindColorsTolerance(TPA, BubblesAC, FSBox.x1, FSBox.y1, FSBox.x2, FSBox.y2, 10);
DebugTPA(TPA, '');
Writeln(Length(TPA));
Result := (Length(TPA) < 60)and(Length(TPA) >= 3);
if(Result)then
Break;
Wait(100 + random(50));
end;
end;
Function Color_FindBubbles: Boolean;
var
Bubbles: TPointArray;
Sorter: Array of TPointArray;
ThePoint: TPoint;
i: integer;
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.29, 0.44);
FindColorsSpiralTolerance(mscx, mscy, Bubbles, BubblesAC, msx1, msy1, msx2, msy2, 7);
Sorter := SplitTPA(Bubbles, 15);
SortATPAFrom(Sorter, IntToPoint(mmcx, mmcy));
if(GetArrayLength(Sorter) > 0)then
begin
For i := 0 to High(Sorter) do
begin
ThePoint := MiddleTPA(Sorter[i]);
MMouse(ThePoint.x, ThePoint.y, 4, 4);
wait(200 + random(50));
if(IsUpText('ure'))then
begin
GetMousePos(x, y);
Mouse(x, y, 0, 0, false);
wait(200 + random(50));
Result := (ChooseOption('ure'));
FishingSpot := TrackTPA(Sorter[i]);
Exit;
end else
Result := false;
end;
end;
end;
Function Color_CheckForFeathers: boolean;
var
Feathers: integer;
begin
Feathers := DTMFromString('78DA637CC5CEC0B098910104202403C3FA152' +
'B182491F88C3F30D530303031B022AB790F54B386809AA740356B09A' +
'8790854B399809A274035AB08A8790E54B390809A7F4035D330D520F' +
'301569F0F30');
Result := (FindDTM(Feathers, x, y, mix1, miy1, mix2, miy2));
FreeDTM(Feathers);
end;
Procedure Color_FishingLoop;
var
FishingFS1, FishingFS2, FailCount, ClickFS, SwitchCount: integer;
begin
repeat
Flag;
if(GetCurrentTab <> 25)then
if(not(GameTab(25)))then
Break;
Randoms;
MarkTime(FishingFS1);
if(not(Color_CheckForFeathers))then
begin
Writeln('Player ' + IntToStr(CurrentPlayer) + ' has ran out of feathers. Setting player to inactive.');
Players[CurrentPlayer].Active := False;
if(LoggedIn)then
LogOut;
Exit;
end;
if(Color_FindBubbles)then
begin
ClickFS := ClickFS + 1;
FishingFS2 := InvCount;
Flag;
repeat
if(not(Color_AreWeFishing))then
Break;
AntiBan;
if(GetCurrentTab <> 25)then
begin
if(not(GameTab(25)))then
Break;
end;
if(TimeFromMark(FishingFS1) > 24000)then
begin
MarkTime(FishingFS1);
if(InvCount = FishingFS2)then
Break;
FishingFS2 := InvCount;
end;
if(ClickFS > 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
until(InvFull)
end else
if(not(Color_SwitchSpots))then
FailCount := FailCount + 1
else
SwitchCount := SwitchCount + 1;
if(FailCount > 5) or (ClickFS > 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
until(InvFull)
end;
Procedure Color_WalkRiver(GuideTPA: TPointArray; Direction: string);
var
i: integer;
begin
if(Direction = 'north')then
SortTPAFrom(GuideTPA, IntToPoint(mmcx - 76, mmy1));
if(Direction = 'south')then
SortTPAFrom(GuideTPA, IntToPoint(mmcx - 76, mmy2));
For i := 0 to High(GuideTPA) do
begin
if(RS_OnMiniMap(GuideTPA[i].x, GuideTPA[i].y))then
begin
if(Direction = 'north')then
if(GuideTPA[i].y < 85)then
begin
Mouse(GuideTPA[i].x - 10, GuideTPA[i].y + 10, 5, 8, true);
break;
end;
if(Direction = 'south')then
if(GuideTPA[i].y > 85)then
begin
Mouse(GuideTPA[i].x - 10, GuideTPA[i].y - 10, 5, 8, true);
break;
end;
end;
end;
end;
Function Color_GoToBank: boolean;
var
i: integer;
TPA, FTPA: TPointArray;
P: TPoint;
begin
MakeCompass('N');
SetAngle(True);
SetRun(True);
SymbolAccuracy := 0.6;
for i := 0 to 30 do
begin
if(not(LoggedIn))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].Active := False;
LogOut;
end;
Randoms;
if(FindSymbol(x, y, 'bank'))then
begin
writeln('Found bank symbol');
Mouse(x, y, 4, 4, true);
BBFlag(15);
WaitForFullStop;
Result := True;
Exit;
end;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.29, 1.72);
FindColorsTolerance(FTPA, BankFloorAC, mmx1, mmy1, mmx2, mmcy, 7);
if(Length(FTPA) > 5)then
begin
P := MiddleTPA(FTPA);
if(RS_OnMiniMap(P.x, P.y))then
begin
writeln('Found red floor');
Mouse(x, y, 4, 4, true);
BBFlag(10);
WaitForFullStop;
Result := True;
Exit;
end;
end;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.68, 0.54);
FindColorsTolerance(TPA, WaterAC, mmx1, mmy1, mmx2, mmy2, 8);
Color_WalkRiver(TPA, 'north');
BBFlag(20);
end;
end;
Function Color_GoToFish: boolean;
var
i: integer;
TPA: TPointArray;
begin
MakeCompass('N');
SetAngle(True);
SymbolAccuracy := 0.7;
for i := 0 to 15 do
begin
if(not(LoggedIn))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].Active := False;
LogOut;
end;
Randoms;
if(FindSymbol(x, y, 'fishing spot'))then
begin
Mouse(x, y, 4, 4, true);
BBFlag(10);
WaitForFullStop;
Result := True;
Exit;
end;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.68, 0.54);
FindColorsTolerance(TPA, WaterAC, mmx1, mmy1, mmx2, mmy2, 8);
Color_WalkRiver(TPA, 'south');
BBFlag(20);
end;
end;
{Function CalculateAnimating(TimePeriod, Samples: integer): integer;
var
PixelShiftValues: Array of Integer;
i: integer;
Sum: integer;
begin
SetArrayLength(PixelShiftValues, Samples);
for i:= 0 to High(PixelShiftValues)do
begin
PixelShiftValues[i] := PixelShift(IntToBox(MSCx + 5, MSCy - 4, MSCx + 48, MSCy + 27), TimePeriod);
if(i > 0)then
Sum := Sum + PixelShiftValues[i];
if(i = 0)then
Sum := PixelShiftValues[i];
end;
result := Sum / Samples;
end; }
Function Color_InBank: boolean;
var
TPA: TPointArray;
BankBox: TBox;
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.29, 1.72);
FindColorsTolerance(TPA, BankFloorAC, mmx1, mmy1, mmx2, mmy2, 7);
BankBox := GetTPABounds(TPA);
BankBox.x2 := BankBox.x2 + 17;
Result := (PointInBox(IntToPoint(mmcx, mmcy), BankBox));
if(not(Result))then
Writeln('Not in Bank');
end;
Function DepositInBank: boolean;
var
i: integer;
begin
for i := 0 to 20 do
begin
if(BankScreen)or(PinScreen)then
Break;
Wait(100 + random(50));
end;
if(PinScreen)then
InPin(Players[CurrentPlayer].strings[0]);
Wait(150 + random(50));
if(BankScreen)then
begin
Color_CountInv;
Loads[CurrentPlayer] := Loads[CurrentPlayer] + 1;
Deposit(3, 28, true);
Wait(250 + random(100));
CloseBank;
Wait(250 + random(100));
Result := (InvCount = 2);
if(Result)then
ProgressReport;
end;
end;
Procedure Color_Bank;
var
TPA: TPointArray;
P: TPoint;
ATPA: T2DPointArray;
i: integer;
begin
Writeln('Attempting to bank');
Randoms;
if(GetCurrentTab <> 25)then
if(not(GameTab(25)))then
Exit;
FindColorsTolerance(TPA, 4663092, msx1, msy1, msx2, msy2, 10);
ATPA := SplitTPA(TPA, 10);
for i := 0 to High(ATPA) do
begin
P := MiddleTPA(ATPA[i]);
MMouse(P.x, P.y, 3, 3);
Wait(150 + random(100));
if(IsUpText('Bank'))then
begin
GetMousePos(x, y);
Mouse(x, y, 0, 0, False);
Wait(150 + random(100));
if(ChooseOption('k Bank')) or (ChooseOption('uickly'))then
if(DepositInBank)then
Exit;
end;
end;
end;
Procedure Color_MainLoop;
begin
repeat
repeat
if(RunEnergy(40 + random(40)))then
SetRun(True);
if(not(InvFull)) and (not(Color_InBank))then
Color_FishingLoop;
Randoms;
if(InvFull) and (LoggedIn)then
if(Color_GoToBank)then
Color_Bank
else begin
Players[CurrentPlayer].Active := False;
if(LoggedIn)then
LogOut;
Break;
end;
Randoms;
if(Color_InBank) and (not(InvFull))then
if(not(Color_GoToFish))then
begin
Players[CurrentPlayer].Active := False;
if(LoggedIn)then
LogOut;
Break;
end;
if(UseBreaks)and(TimeFromMark(TimeSinceBreak) > BreakAfter)then
if(PlayersActive > 1)then
begin
LogOut;
NextPlayer(Players[CurrentPlayer].Active);
end else
TakeABreak;
if(not(LoggedIn))then
if(not(LoggedInBB))then
Break;
until(false)
if(PlayersActive > 0)then
NextPlayer(Players[CurrentPlayer].Active);
until(PlayersActive = 0)
Writeln('We have run out of players, script is terminating');
end;
{$IfDef Reflection}
Procedure Ref_CountInv;
var
i: integer;
begin
for i := 0 to 5 do
if(not(GetCurrentTab = 25))then
if(not(GameTab(25)))then
begin
Randoms;
end;
if(i = 5)and(GetCurrentTab <> 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
TroutB[CurrentPlayer] := TroutB[CurrentPlayer] + R_CountItemName('Trout');
SalmonB[CurrentPlayer] := SalmonB[CurrentPlayer] + R_CountItemName('Salmon');
end;
Procedure Ref_MoveToBooth;
var
TPA: TPointArray;
z: integer;
begin
TPA := BankPoints;
z := Random(7);
WalkToTile(TPA[z], 1, 0);
end;
Function Ref_InBank: boolean;
var
i: integer;
Points: TPointArray;
P: TPoint;
begin
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
begin
Result := False;
Exit;
end;
Points := BankPoints;
for i := 0 to High(Points) do
begin
if(TileOnMM(PointToTile(Points[i])))then
begin
P := TileToMM(Points[i]);
if(Distance(mmcx, mmcy, P.x, P.y) < 11)then
begin
Result := True;
Exit;
end else
Result := False;
end;
end;
end;
Function Ref_WalkPath(Path: TPointArray): boolean;
var
i, FP, z, FailCount: integer;
ThePoint: TPoint;
begin
repeat
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].active := false;
Exit;
end;
FP := 0;
z := 0;
for i := 0 to High(Path) do
begin
ThePoint := TileToMM(PointToTile(Path[i]));
if(RS_OnMiniMap(ThePoint.x, ThePoint.y))then
begin
FP := i;
z := z + 1;
end;
end;
if(z = 0)then
begin
FailCount := FailCount + 1;
Wait(450 + random(200));
end else
begin
if(not(TileOnMM(PointToTile(Path[FP]))))then
begin
Writeln('Tile wasnt on minimap');
FailCount := FailCount + 1;
end else
begin
ThePoint := TileToMM(PointToTile(Path[FP]));
Mouse(ThePoint.x, ThePoint.y, 3, 3, true);
Wait(150 + random(50));
R_FFlag(10);
end;
end;
if(FailCount > 25)then
begin
Writeln('Path walking failed');
Result := (FP = High(Path));
Exit;
end;
until(FP = High(Path))
Result := (FP = High(Path));
Writeln('Path walking successful');
end;
Function Ref_GoToBank: boolean;
begin
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
Exit;
Randoms;
Writeln('Walking to bank');
SetRun(False);
if(not(Ref_WalkPath(LoadPath)))then
Color_GoToBank
else begin
Result := True;
Exit;
end;
Result := Ref_InBank;
end;
Procedure Ref_GoToFish;
var
Path: TPointArray;
begin
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
Exit;
Randoms;
Writeln('Walking to fish');
SetRun(True);
Path := LoadPath;
InvertTPA(Path);
if(not(Ref_WalkPath(path)))then
Color_GoToFish;
end;
Function Ref_Bank: boolean;
var
z, i: integer;
begin
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
begin
Players[CurrentPlayer].Active := false;
Exit;
end;
for z := 0 to 5 do
begin
R_Flag;
Randoms;
if(GetCurrentTab <> 25)then
if(not(GameTab(25)))then
Break;
if(R_OpenBankBootha('edgeville'))then
begin
for i := 0 to 20 do
begin
if(BankScreen)or(PinScreen)then
Break;
Wait(100 + random(50));
end;
if(PinScreen)then
InPin(Players[CurrentPlayer].strings[0]);
Wait(150 + random(50));
if(BankScreen)then
begin
{$ifDef Reflection}
Ref_CountInv
{$Else}
Color_CountInv;
{$EndIf}
Loads[CurrentPlayer] := Loads[CurrentPlayer] + 1;
Deposit(3, 28, true);
Wait(250 + random(100));
CloseBank;
Wait(250 + random(100));
Result := (InvCount = 2);
if(Result)then
ProgressReport;
Exit;
end;
end;
end;
Result := False;
end;
Function Ref_AreWeFishing: boolean;
begin
Result :=(GetAnimation = 623) or (GetAnimation = 622);
if(not(Result))then
begin
Wait(500 + random(250));
Result := (GetAnimation = 623) or (GetAnimation = 622);
end;
end;
Function Ref_FindBubbles: boolean;
var
NPCS: TNPCArray;
i, z: integer;
P: TPoint;
begin
NPCS := GetNPCS;
if(length(NPCS) > 0)then
for i := 0 to High(NPCS) do
if(NPCS[i].Name = 'Fishing spot') and (TileOnMS(NPCS[i].Tile, NPCS[i].Height))then
begin
P := TileToMS(NPCS[i].Tile, NPCS[i].Height);
MMouse(P.x, P.y, 4, 4);
Wait(150 + random(50));
GetMousePos(x, y);
if(IsUpText('Lure'))then
begin
Writeln('Clicking fishing spot');
Z := Random(10);
if(Z < 6)then
begin
Mouse(x, y, 0, 0, False);
Wait(150 + random(50));
Result := (ChooseOption('Lure'))
Exit;
end else
begin
Mouse(x, y, 0, 0, true);
Result := True;
Exit;
end;
end;
end;
// Writeln('Bad index was ' + IntToStr(NPCS[i].Index));
Result := False;
end;
Function WalkToTileBB(T: TTile): boolean;
var
ThePoint: TPoint;
begin
Result := (TileOnMM(T));
if(Not(Result))then
begin
Writeln('Tile wasnt on map');
Exit;
end else
begin
ThePoint := TileToMM(T);
Mouse(ThePoint.x, ThePoint.y, 4, 4, true);
R_FFlag(0);
end;
end;
Function Ref_SwitchSpots: boolean;
var
SSpot: TTile;
NSpot: TTile;
begin
Writeln('Switching spots using reflection');
SSpot := Tile(3101, 3425);
NSpot := Tile(3107, 3434);
if(DistanceFrom(SSpot) > DistanceFrom(NSpot))then
Result := (WalkToTileBB(SSpot))
else
Result := (WalkToTileBB(NSpot));
end;
Function MoveSpots: boolean;
begin
Result := Ref_SwitchSpots;
if(not(Result))then
begin
writeln('reflection switch failed');
Result := Color_SwitchSpots;
end;
R_Flag;
end;
Procedure Ref_FishingLoop;
var
FailCount, ClickFS, SwitchCount, FishingFS1, FishingFS2: integer;
begin
repeat
R_Flag;
if(GetCurrentTab <> 25)then
if(not(GameTab(25)))then
Break;
Randoms;
MarkTime(FishingFS1);
if(Ref_FindBubbles)then
begin
WriteLn('Ref_FindBubbles');
ClickFS := ClickFS + 1;
FishingFS2 := InvCount;
R_Flag;
repeat
if(not(Ref_AreWeFishing))then
Break;
AntiBan;
if(GetCurrentTab <> 25)then
begin
if(not(GameTab(25)))then
Break;
end;
if(TimeFromMark(FishingFS1) > 24000)then
begin
MarkTime(FishingFS1);
if(InvCount = FishingFS2)then
Break;
FishingFS2 := InvCount;
end;
if(ClickFS > 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
until(InvFull)
end else
if(not(MoveSpots))then
FailCount := FailCount + 1
else
SwitchCount := SwitchCount + 1;
if(FailCount > 5) or (ClickFS > 25)then
begin
Players[CurrentPlayer].Active := False;
LogOut;
Exit;
end;
until(InvFull)
end;
Procedure Ref_MainLoop;
begin
repeat
repeat
if(not(InvFull)) and (not(Ref_InBank))then
Ref_FishingLoop;
Randoms;
if(InvFull) and (R_LoggedIn)then
if(Ref_GoToBank)then
Ref_Bank;
Randoms;
if(Ref_InBank) and (not(InvFull))then
Ref_GoToFish;
if(not(R_LoggedIn))then
if(not(LoggedInBB))then
Break;
if(UseBreaks)and(TimeFromMark(TimeSinceBreak) > BreakAfter)then
TakeABreak;
until(false)
if(PlayersActive > 0)then
NextPlayer(Players[CurrentPlayer].Active);
until(PlayersActive = 0)
Writeln('We have run out of players, script is terminating');
end;
{$EndIf}
Procedure Splash;
begin
writeln(' ____ __ _ ____ _____');
writeln(' / __ )/ /_ _____(_) __ \/ ___/');
writeln(' / __ / __ \/ ___/ / / / / __ \ ');
writeln(' / /_/ / /_/ / / / / /_/ / /_/ / ');
writeln(' /_____/_.___/_/ /_/\____/\____/ ');
writeln(' ______ __ _ ____ _______ __');
writeln(' / ____/____/ /____ ____ _ __(_) / /___ / ____(_)_____/ /_ ___ _____');
writeln(' / __/ / __ // __ `/ _ \ | / / / / // _ \ / /_ / // ___/ __ \/ _ \/ ___/');
writeln(' / /___ / /_/ // /_/ / __/ |/ / / / // __/ / __/ / /(__ ) / / / __/ /');
writeln('/_____/ \__,_/ \__, /\___/|___/_/_/_/ \___/ /_/ /_//____/_/ /_/\___/_/');
writeln(' /____/');
end;
Procedure GetIDS;
var
NPCS: TNPCarray;
i: integer;
begin
NPCS := GetNPCS;
for i := 0 to High(NPCS) do
begin
Writeln('NPC ' + IntToStr(i));
Writeln(NPCS[i].Index);
Writeln(NPCS[i].Name);
Writeln(NPCS[i].Actions);
end;
end;
Procedure SetupProc;
begin
if(not(FileExists(INI_Loc)))then
SetupFormConfig;
if(ReadINI('NumCharacters', 'Num', INI_Loc) = '')then
WriteINI('NumCharacters', 'Num', '0', INI_Loc);
SetLength(FormPlayers, 0);
SafeInitForm;
SafeShowFormModal;
Smart_Server := 38;
Smart_Members := False;
Smart_Signed := True;
Smart_SuperDetail := False;
SetupSRL;
{$IfDef Reflection}
SetupReflectionEx(True);
{$EndIf}
Splash;
DeclarePlayers;
ActivateClient;
LoginPlayer;
SetLength(Loads, PlayersActive);
SetLength(SalmonB, PlayersActive);
SetLength(TroutB, PlayersActive);
LampSkill := 'Fishing';
// Wait(2000 + random(500));
SetAngle(true);
end;
begin
SetupProc;
{$ifDef Reflection}
Ref_MainLoop
{$Else}
Color_MainLoop;
{$EndIf}
end.