marpis
2009-06-08 23:29:03
The old FindBank() used OpenBankSilent() which never worked, so i fixed it to use my new function OpenBankBooth() which is pretty accurate in most banks.
I also modified FindBank a bit, and made FindBankEx(WhichBank: string; var x, y: integer; Open:boolean), so now you can find bank in MM without trying to open it.
Here is the whole new Bank.scar. Hope you like it!
edit: oh, i just realized that FindBankEx should have an option just to find the bank so that it wouldn't click MM…
edit: Now its done: FindBankEx(WhichBank:string; var x, y:integer; Action:string):boolean
and valid actions are 'nothing', 'move', 'open'. Not case-sensitive.
I also modified FindBank a bit, and made FindBankEx(WhichBank: string; var x, y: integer; Open:boolean), so now you can find bank in MM without trying to open it.
Here is the whole new Bank.scar. Hope you like it!
edit: oh, i just realized that FindBankEx should have an option just to find the bank so that it wouldn't click MM…
edit: Now its done: FindBankEx(WhichBank:string; var x, y:integer; Action:string):boolean
and valid actions are 'nothing', 'move', 'open'. Not case-sensitive.
//-----------------------------------------------------------------//
//-- Scar Standard Resource Library --//
//-- ยป Bank Routines --//
//-----------------------------------------------------------------//
// * function BankScreen: Boolean; // * by SRL Dev Team
// * function DepositScreen: Boolean; // * by Shuttleu
// * function PinScreen: Boolean; // * by Starblaster100
// * function InPin(Pin: string): Boolean; // * by ZephyrsFury
// * function BankIndexToBankPoint(Ind: Integer): TPoint; // * by Wizzup
// * function BankPointToIndex(P: TPoint): Integer; // * by Wizzup
// * function BankIndexToMSBox(Ind: Integer): TBox; // * by Wizzup
// * function MSTPointToBankIndex(P: TPoint): Integer; // * by Wizzup
// * function DepositItemBox: TBox; // * by ZephyrsFury
// * Procedure Fixbank // * by lordsaturn & Nava2
// * Function FixBankTab: Boolean; // * by Wizzup?
// * Function CurrentBankTab: Integer; // * by Narcle
// * Function ExistsBankTab(T: Integer): Boolean; // * by Narcle
// * Function BankTab(T: Integer): Boolean; // * by Narcle
// * procedure SearchBank(Item: string); // * by ZephyrsFury
// * Procedure Deposit(SlotFrom, SlotTo: Integer; vType: Variant); // * by PPLSUQBAWLZ / Stupid3ooo
// * procedure Withdraw(Col,Row,Amount:integer); // * by Odie3355/Stupid3ooo/Starblaster100 fixed by Town
// * procedure DepositAll; // * by ZephyrsFury
// * procedure Notes(SwitchOn: Boolean); // * by lordsaturn, idea by R1ch
// * Function OpenBankQuiet(WhichBank:string):Boolean; // * by WT-Fakawi
// * Function FindBank(TheBank:string): Boolean; // * by WT-Fakawi
// * Procedure CloseBank; // * by Starblaster100
// * Function OpenBankGlass(WhichBank:String; ChangeCompass:Boolean): Boolean; // * By Wizzup?
// * function OpenBankFast(Location: String): Boolean; // * by Wizzup? and Nielsie95
// * function OpenBankBooth(WhichBank:String): boolean; // * by marpis
// * function OpenBank(WhichBank:String; ChangeCompass:Boolean): Boolean; // * by SRL
// * function OpenDepositBox: Boolean; // * by Shuttleu
{*******************************************************************************
function BankScreen: Boolean;
by: SRL Dev Team
Description: Finds Bankscreen. Returns true if Found.
*******************************************************************************}
function BankScreen: Boolean;
begin
Result := FindTextTPA(4106994, 20, 20, 22, 400, 45, 'Bank', upchars, Nothing);
end;
{*******************************************************************************
function DepositScreen: Boolean;
by: Shuttleu
Description: Returns true if deposit screen is Found.
*******************************************************************************}
function DepositScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'Deposit Box', upchars, 92, 29, 396, 54);
end;
{*******************************************************************************
function PinScreen: Boolean;
by: Starblaster100
Description: Finds Pin Screen. Returns true if Found.
*******************************************************************************}
function PinScreen: Boolean;
Var
x, y: Integer;
begin
Result := FindText(x, y, 'First', upchars, 175, 80, 212, 100);
end;
{*******************************************************************************
function InPin(Pin: String): Boolean;
by: ZephyrsFury
Description: Enters bank pin. Will try 3 times, returns true if bank is opened.
*******************************************************************************}
function InPin(Pin: string): Boolean;
var
TMouseSpeed, iNumber, Tx, Ty, Counter: Integer;
begin
if (CountColor(0, MSX1, MSY1, MSX2, MSY2) > 113000) and (Length(Pin) = 4) then
begin
MouseBox(26, 138, 489, 157, 1);
Counter := GetTimeRunning + 45000;
while (not BankScreen) and (GetTimeRunning < Counter) do
Wait(50);
Wait(RandomRange(100, 150));
end;
if (not(PinScreen)) then Exit;
if (GetNumbers(Pin) <> Pin) then
begin
srl_Warn('InPin', '''' + Pin + ''' is not a valid Pin', warn_AllVersions);
Exit;
end;
if (Length(Pin) <> 4) then
begin
srl_Warn('InPin', 'Pin must be 4 digits long', warn_AllVersions);
Exit;
end;
TMouseSpeed := MouseSpeed;
MouseSpeed := 25;
Wait(1000 + Random(1000));
repeat
if (PinScreen) then
begin
for iNumber := 1 to Length(Pin) do
begin
if (Random(4) = 0) then
begin
repeat
Tx := Random(765);
Ty := Random(504);
until (not(IntInBox(Tx, Ty, IntToBox(30, 100, 383, 319))));
MMouse(Tx, Ty, 0, 0);
Wait(500 + Random(500));
end;
if (not(FindText(Tx, Ty, Pin[iNumber], UpChars, 30, 100, 383, 319))) then
GetMousePos(Tx, Ty);
Mouse(Tx, Ty, 10, 10, True);
Wait(1000 + Random(500));
end;
end;
Wait(1000 + Random(500));
if (BankScreen) then
begin
Result := True;
MouseSpeed := TMouseSpeed;
Exit;
end;
ClickContinue(True, True);
while (not(FindColor(Tx, Ty, 0, 7, 460, 69, 474))) do
begin
if (not(LoggedIn)) then
begin
MouseSpeed := TMouseSpeed;
Exit;
end;
Wait(1000 + Random(500));
end;
Inc(Counter);
until(Counter > 2);
end;
{*******************************************************************************
Function MSTPointToBankPoint(P: TPoint): TPoint;
by: Wizzup
Description: Converts a point on the Mainscreen to the point in the Bank.
First Row and Col are (0,0).
*******************************************************************************}
Function MSTPointToBankPoint(MSP: TPoint): TPoint;
Begin
Result.X := (MSP.X - 38) / 44;
Result.Y := (MSP.Y - 90) / 45;
End;
{*******************************************************************************
function BankPointToBankIndex(P: TPoint): Integer;
by: Wizzup?
Description: Converts a Bank Point (Row,Col) to Bank Index (spot in bank).
(0, 0) = 1
*******************************************************************************}
Function BankPointToBankIndex(P: TPoint): Integer;
Begin
Result := P.Y * 10 + P.X + 1;
End;
{*******************************************************************************
function BankIndexToBankPoint(ind: Integer): TPoint;
by: Wizzup
Description: Converts the Bank Index (spot in bank) to a Bank Point (Row,Col).
1 = (0, 0)
*******************************************************************************}
Function BankIndexToBankPoint(Index: Integer): TPoint;
Begin
Index := Index - 1;
Result := Point((Index Mod 10), Floor(Index Div 10));
End;
{*******************************************************************************
Function BankIndexToMSPoint(Index: Integer): TPoint;
by: Wizzup?
Description: Converts the Bank Index (spot in bank) to a Mainscreen TPoint of
the Index. (Top Left)
*******************************************************************************}
Function BankIndexToMSPoint(Index: Integer): TPoint;
Begin
Index := Index - 1;
Result := Point(38 + (Index Mod 10) * 44, 90 + Floor(Index Div 10) * 45);
End;
{*******************************************************************************
function BankIndexToMSBox(ind:Integer): TBox;
by: Wizzup
Description: Converts the Bank Index (spot in bank) to a Mainscreen TBox of
the Index.
*******************************************************************************}
Function BankIndexToMSBox(Index: Integer): TBox;
Var
P: TPoint;
Begin
P := BankIndexToMSPoint(Index);
Result.X1 := P.X;
Result.Y1 := P.Y;
Result.X2 := Result.X1 + 31;
Result.Y2 := Result.Y1 + 32;
End;
{*******************************************************************************
function DepositItemBox(Item: Integer): TBox;
by: ZephyrsFury
Description: Returns a TBox surround Item (1 to 28) in the Deposit Box screen.
*******************************************************************************}
function DepositItemBox(Item: Integer): TBox;
begin
Result.X1 := 97 + (Item - 1) mod 7 * 48;
Result.Y1 := 60 + (Item - 1) div 7 * 50;
Result.X2 := Result.X1 + 48;
Result.Y2 := Result.Y1 + 50;
end;
{*******************************************************************************
procedure FixBank;
by: lordsaturn and Nava2
Description: Scrolls the bank screen up.
*******************************************************************************}
procedure FixBank;
begin
if GetColor(489, 101) = 2830904 then exit;
if BankScreen then
if GetColor(489, 101) <> 1316634 then
begin
Mouse(485, 102, 7, 10, True);
while GetColor(489, 101) <> 1316634 do
Wait(20);
Wait(100 + Random(200));
end;
end;
{*******************************************************************************
Function FixBankTab: Boolean;
by: Wizzup?
Description: Fixes the BankTab to 'View All'
*******************************************************************************}
Function FixBankTab: Boolean;
Var
activeTPA, notactiveTPA: TPointArray;
T: Integer;
Begin
Result := False;
FindColorsTolerance(activeTPA, 2896954, 25, 45, 70, 80, 5);
FindColorsTolerance(notactiveTPA, 2437688, 25, 45, 70, 80, 5);
If Length(activeTPA) > Length(notactiveTPA) Then
Begin
Result := True;
Exit;
End;
Mouse(40, 60, 10, 10, True);
T := GetSystemTime;
While Length(activeTPA) <= Length(notactiveTPA) Do
Begin
FindColorsTolerance(activeTPA, 2896954, 25, 45, 70, 80, 5);
FindColorsTolerance(notactiveTPA, 2437688, 25, 45, 70, 80, 5);
Wait(500);
If ((GetSystemTime - T) / 1500) Mod 2 = 0 Then
Mouse(40, 60, 10, 10, True);
If GetSystemTime - T > 10000 Then
Exit;
End;
End;
{*******************************************************************************
Function CurrentBankTab: Integer;
by: Narcle
Description: Returns Current Bank Tab selected
*******************************************************************************}
function CurrentBankTab: Integer;
begin
if not BankScreen then
Exit;
for Result := 1 to 9 do
if GetColor(40 + 48 * (Result - 1), 83) = 2896954 then
Exit;
Result := 0;
end;
{*******************************************************************************
Function ExistsBankTab(T: Integer): Boolean;
by: Narcle
Description: Returns true if Bank Tab Exists
*******************************************************************************}
Function ExistsBankTab(T: Integer): Boolean;
var
x, y: integer;
begin
if not BankScreen then
Exit;
if (not(InRange(T, 1, 9))) then
begin
srl_Warn('ExistsBankTab', 'Bank Tab : ' + IntToStr(T) + ' is not possible (1..9) only.', warn_AllVersions);
Exit;
end;
if T = 1 then
Result := true;
if FindColor(x, y, 65536, 27+(T-1)*48, 51, 70+(T-1)*48, 81) then
Result := true;
end;
{*******************************************************************************
Function BankTab(T: Integer): Boolean;
by: Narcle
Description: If Bank Tab is there will switch to it.
*******************************************************************************}
Function BankTab(T: Integer): Boolean;
begin
if not BankScreen then
Exit;
if T = CurrentBankTab then
Begin
Result := true;
Exit;
end;
if not ExistsBankTab(T) then
srl_Warn('BankTab', 'Bank Tab '+inttostr(T) +' does not Exist.', warn_AllVersions)
else
Mouse(48 * T, 57, 10, 10, true);
Result := T = CurrentBankTab;
end;
{*******************************************************************************
procedure SearchBank(Item: string);
by: ZephyrsFury
Description: Searches for Item in your bank.
*******************************************************************************}
procedure SearchBank(Item: string);
var
T, II: Integer;
begin
if (not(BankScreen)) then Exit;
for II := 0 to 2 do
begin
FixBankTab;
Mouse(75, 300, 20, 10, True);
T := GetSystemTime;
while (BankScreen) and (GetSystemTime - T < 5000) do
begin
Wait(500 + Random(500));
if (FindTextTpa(0, 0, 350, 392, 399, 410, 'search', UpChars, Nothing)) then
begin
TypeSend(Item);
Exit;
end;
end;
Wait(500 + Random(500));
end;
end;
{*******************************************************************************
Procedure Deposit(SlotFrom, SlotTo: Integer; vType: Variant);
by: WT-Fakawi/PPLSUQBAWLZ/Stupid3ooo/Town
Description: Deposits from Slot to ToSlot.
vType True = Deposit All. vType False = Deposit one by one.
Any integer is deposit with Deposit X. (except for 5 and 10)
*******************************************************************************}
Procedure Deposit(SlotFrom, SlotTo: Integer; vType: Variant);
Var
DepositX, BScreen, DScreen: Boolean;
All: Variant;
I, T, x, y: Integer;
B: TBox;
Begin
BScreen := BankScreen;
if (not(BScreen)) then
DScreen := DepositScreen;
If Not (BScreen or DScreen) Then
Exit;
If vType = 2 Then
srl_Warn('Deposit', '2 now means store per 2, not ''All''', 15);
DepositX := False;
Case VarType(vType) Of
3: Begin
DepositX := Not InIntArray([1, 5, 10], vType);
If vType = 1 Then
All := False
Else
All := True;
End;
11: All := vType;
End;
For I := SlotFrom To SlotTo Do
Begin
if (BScreen) then
begin
If Not ExistsItem(I) Then
Continue;
MouseItem(I, Not All);
end else
begin
B := DepositItemBox(I);
if (not(FindColor(X, Y, 65536, B.X1, B.Y1, B.X2, B.Y2))) then
Continue;
Mouse((B.X1 + B.X2) shr 1, (B.Y1 + B.Y2) shr 1, 0, 0, not All);
end;
If DepositX Then
Begin
ChooseOption('Deposit-X');
T := GetSystemTime;
While (Not FindColor(x, y, 8388608, MCX1, MCY1, MCX2, MCY2)) And (GetSystemTime - T < 3000) Do
Wait(100);
TypeSend(vType);
End Else If VarType(vType) = 3 Then
ChooseOption('Deposit-' + vType)
Else
ChooseOption('Deposit-All');
T := GetSystemTime;
Wait(RandomRange(200, 300));
repeat
if (BScreen) then
if (not(ExistsItem(I))) then Break;
if (DScreen) then
if (not(FindColor(X, Y, 65536, B.X1, B.Y1, B.X2, B.Y2))) then Break;
Wait(50);
until(GetSystemTime - T > 2000);
End;
End;
{*******************************************************************************
procedure Withdraw(Col, Row, Amount: Integer);
by: Starblaster100, Town, Wizzup? and Narcle
Description: Withdraws Amount at Column/Row.
*******************************************************************************}
procedure Withdraw(col, row, Amount: Integer);
var
BBox: TBox;
begin
FixBank;
FixBankTab;
BBox := BankIndexToMSBox(BankPointToBankIndex(Point(Max(Col - 1, 0), Max(Row - 1, 0))));
If Amount = 1 Then
Begin
MouseBox(BBox.X1 + 5, BBox.Y1 + 5, BBox.X2 - 5, BBox.Y2 - 5, 1);
Wait(RandomRange(50, 150));
End
Else
Begin
MouseBox(BBox.X1 + 5, BBox.Y1 + 5, BBox.X2 - 5, BBox.Y2 - 5, 2);
if (Amount = 5) or (Amount = 10) then
ChooseOption('Withdraw-' +IntToStr(Amount))
else if Amount = 0 then
ChooseOption('Withdraw-All')
else
if not ChooseOption('Withdraw-'+IntToStr(Amount)+' ') then
begin
MouseBox(BBox.X1 + 5, BBox.Y1 + 5, BBox.X2 - 5, BBox.Y2 - 5, 2);
if (ChooseOption('Withdraw-X')) then
begin
Wait(1000 + Random(100));
TypeSend(IntToStr(Amount));
end;
end;
end;
end;
{*******************************************************************************
function WithdrawItemEx(Ident: integer; IdentType: string; var Index: integer; Amount: integer; UpText: String; Tol: TIntegerArray): boolean;
By: Nava2
Description: Withdraws an item from the bank by using "Ident" with tol[0]
as color tolerance, tol[1] as contour tolerance in case of bmp
masks, or the count of colors for TPA item finding.
Valid IdentTypes are all in FindItem.
Index: The Bank Index where the item is found, must be a variable.
Speeds up future withdraws.
Amount: Amount to withdraw from bank.
UpText: The UpText which the function checks for.
*******************************************************************************}
function WithdrawItemEx(Ident: integer; IdentType: string; var Index: integer; Amount: integer; UpText: String; Tol: TIntegerArray): Boolean;
var
x, y: integer;
BPoint: TPoint;
BankBox: TBox;
Found: Boolean;
t: TPointArray;
label
Start;
begin
Result := False;
if not BankScreen then Exit;
FixBank;
if (Index = 0) then
begin
Start:
for Index := 1 to 50 do
begin
if FindItemEx(x, y, IdentType, Ident, BankIndexToMSBox(Index), Tol) then
begin
MMouse(x, y, 4, 4);
Wait(120 + Random(50));
if IsUpText(UpText) then
begin
Writeln('Found Item at Bank Slot ' + IntToStr(Index) + '.');
Found := True;
Break;
end else
Writeln('Found Incorrect Item, Moving to new Bank Spot.');
end;
end;
end else
begin
BankBox := BankIndexToMSBox(Index);
FindColors(t, 65536, BankBox.x1, BankBox.y1, BankBox.x2, BankBox.y2);
BankBox := GetTPABounds(t);
MouseBox(BankBox.x1, BankBox.y1, BankBox.x2, BankBox.y2, 3);
Wait(120 + Random(50));
if IsUpText(UpText) then
Found := true
else
begin
Writeln('Item Moved from Bank Slot ' + IntToStr(Index) + ', checking bank again.');
GoTo Start;
end;
end;
Wait(RandomRange(200, 350));
if Found then
begin
BPoint := BankIndexToBankPoint(Index);
//Writeln(IntToStr(BPoint.x) + ', ' + IntToStr(BPoint.y));
Withdraw(BPoint.x, BPoint.y, Amount);
Result := True;
end else
begin
Index := 0;
SRL_Warn('WithdrawItem', 'Could not Find ' + IdentType + ' in Bank. [Uptext: ' + UpText + ']', Warn_AllVersions);
end;
end;
{*******************************************************************************
function WithdrawItem(Ident: integer; IdentType: string; Amount: integer; UpText: TStringArray; Tol: TIntegerArray): boolean;
by: Nava2
Description: Withdraws an item using WithdrawItemEx, but removes the Index check.
*******************************************************************************}
function WithdrawItem(Ident: integer; IdentType: string; Amount: integer; UpText: String; Tol: TIntegerArray): boolean;
var
I : Integer;
begin
Result := WithdrawItemEx(Ident, IdentType, I, Amount, UpText, Tol);
end;
{*******************************************************************************
function DepositAll: Boolean;
by: ZephyrsFury & Quickmarch
Description: Deposits all items in your inventory
*******************************************************************************}
function DepositAll: Boolean;
var
T, X, Y: Integer;
BScreen, DScreen: Boolean;
begin
BScreen := BankScreen;
if (not(BScreen)) then
DScreen := DepositScreen;
if (BScreen) or (DScreen) then
if (InvCount > 0) or (FindColor(X, Y, 65536, 98, 68, 436, 257) and (DSCreen)) then
begin
Mouse(390 - 50 * Integer(DScreen), 305 - 30 * Integer(DScreen), 15, 10, True);
Wait(200 + Random(300));
T := GetSystemTime;
while (InvCount > 0) or (FindColor(X, Y, 65536, 98, 68, 436, 257) and (DSCreen)) and (GetSystemTime - T < 2000) do
Wait(100);
Result := (InvEmpty) or (not(FindColor(X, Y, 65536, 98, 68, 436, 257)) and (DScreen));
end;
end;
{*******************************************************************************
procedure Notes(SwitchOn: Boolean);
By: lordsaturn, idea by R1ch
Description: Toggles note withdrawal on or off.
*******************************************************************************}
procedure Notes(SwitchOn: Boolean);
begin
if BankScreen then
if (GetColor(254, 306) = 5863290) xor SwitchOn then
Mouse(250, 300, 10, 10, True);
end;
{*******************************************************************************
function OpenBankQuiet(WhichBank: string): Boolean;
By: WT-Fakawi and modified by Ron
Description: Opens any given bank in the free world using
FindDeformedBitmapToleranceIn. Avoids strange mouse movements. Will cause
significant lag (approx. 1 second), but finds the bank with one click.
Valid arguments are:
'feb' (Falador East Bank)
'fwb' (Falador West Bank)
'veb' (Varrock East Bank)
'vwb' (Varrock West Bank)
'db' (Draynor Bank)
'eb' (Edgeville Bank)
'akb' (Al-Kharid Bank)
*******************************************************************************}
function OpenBankQuiet(WhichBank: string): Boolean;
var
TheCounter, dx, dy, tol, Mark2, Mark3: Integer;
acc, accthres: Extended;
begin
case WhichBank of
'feb', 'fwb': TheCounter := BitmapFromString(1, 10, '6C583296897A948779948779736' +
'C63A59E968C7F6F9686749B8A7685663E');
// varrock west
'vwb': TheCounter:= BitmapFromString(10, 1, 'A0997F504A49504A49504A495E4' +
'F215E4F215E4F215E4F212C250EA0997F');
// varrock east
'veb': TheCounter := BitmapFromString(1, 10, '5E4D1589826D88806D88806D867' +
'F6C9996907C7664847D648C836891876B');
// draynor and this works too for alkharid
'akb', 'db', 'eb': TheCounter:= BitmapFromString(12, 1, '584209735C29735C29735C29605' +
'85558504D60504D58504D58504D58504D58504D605855');
else
begin
srl_Warn('OpenBankQuiet', 'Unknown bank: ' + WhichBank, warn_AllVersions);
Exit;
end;
end;
MarkTime(Mark3);
tol := 1;
accthres := 0.6;
repeat
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
if BankScreen or PinScreen then
begin
Result := True;
FreeBitmap(TheCounter);
Exit;
end;
if IsUpTextMultiCustom(['ank', 'Bo', 'ot']) then
begin
GetMousePos(dx, dy);
Mouse(dx, dy, 0, 0, False);
if ChooseOption('uickly') then
begin
MarkTime(Mark2);
repeat
Wait(10);
if TimeFromMark(Mark2) > 20000 then
begin
WriteLn('Couldn''t find the bank. Exiting');
FreeBitmap(TheCounter);
Exit;
end;
until BankScreen or PinScreen;
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := True;
FreeBitmap(TheCounter);
Exit;
end;
end;
FindDeformedBitmapToleranceIn(TheCounter, dx, dy, MSX1 + 50, MSY1 + 50, MSX2
- 50, MSY2 - 50, tol, 4, True, acc);
if (acc >= accthres) then
begin
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
if BankScreen or PinScreen then
begin
Result := True;
FreeBitmap(TheCounter);
Exit;
end;
MMouse(dx, dy, 0, 0);
if IsUpTextMultiCustom(['ank', 'Bo', 'ot']) then
begin
GetMousePos(dx, dy);
Mouse(dx, dy, 0, 0, False);
if ChooseOption('uickly') then
begin
MarkTime(Mark2);
repeat
Wait(10);
if TimeFromMark(Mark2) > 20000 then
begin
WriteLn('Couldn''t find the bank. Exiting');
FreeBitmap(TheCounter);
Exit;
end;
until BankScreen or PinScreen;
end;
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := True;
FreeBitmap(TheCounter);
Exit;
end;
end;
Wait(100);
tol := tol + 4;
if tol >= 20 then
begin
tol := 1;
accthres := accthres - 0.1;
if accthres < 0.2 then
begin
WriteLn('Couldn''t find the bank. Exiting');
FreeBitmap(TheCounter);
Exit;
end;
end;
until TimeFromMark(Mark3) > 60000;
FreeBitmap(TheCounter);
end;
{*******************************************************************************
function CloseBank: Boolean;
By: Starblaster100
Description: Closes the bank window - Tries twice before exiting
*******************************************************************************}
function CloseBank: Boolean;
var
i, Timer: Integer;
begin
Result := False;
if BankScreen then
begin
Timer := GetTimeRunning + 8000;
repeat
Mouse(483, 28, 10, 12, True);
for i := 0 to 30 do
begin
if not BankScreen then
begin
Result:= True;
Break;
end;
Wait(100);
end;
Wait(Random(100));
until (GetTimeRunning > Timer) or Result;
end;
end;
{*******************************************************************************
function OpenBankGlass(WhichBank: String; ChangeCompass, ChangeAngle: Boolean): Boolean;
By: Wizzup? and modified by Ron
Description: Opens the bank.
Valid arguments are:
'feb' (Falador East Bank)
'fwb' (Falador West Bank)
'veb' (Varrock East Bank)
'vwb' (Varrock West Bank)
'db' (Draynor Bank)
'akb' (Al-Kharid Bank)
*******************************************************************************}
function OpenBankGlass(WhichBank: string; ChangeCompass, ChangeAngle: Boolean): Boolean;
var
OBC: TPoint;
c, Speed: Integer;
begin
Speed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
if ChangeAngle then SetAngle(True);
if ChangeCompass then
begin
c := Random(2);
case WhichBank of
'feb', 'fwb', 'veb': if c = 0 then MakeCompass('N') else MakeCompass('S');
'akb', 'db', 'eb', 'vwb': if c = 0 then MakeCompass('E') else MakeCompass('W');
end;
end;
if FindColorTolerance(OBC.x, OBC.y, 10070458, MSX1, MSY1, MSX2, MSY2, 10) then
begin
MMouse(OBC.x, OBC.y, 4, 4);
Wait(RandomRange(80, 110));
if IsUpTextMultiCustom(['nk', 'bo', 'ot']) then
begin
Mouse(OBC.x, OBC.y, 0, 0, False);
Wait(RandomRange(80, 110));
ChooseOption('uickly');
FFlag(0);
Wait(2000 + Random(500));
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
end;
end else
if FindObj(OBC.x, OBC.y, 'ank', 10070458, 20) then
begin
Mouse(OBC.x, OBC.y, 0, 0, False);
Wait(RandomRange(80, 110));
ChooseOption('uickly');
FFlag(0);
Wait(2000 + Random(500));
if (Length(Players) > 0) then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
end;
ColorToleranceSpeed(Speed);
end;
{*******************************************************************************
function OpenBankFast(Location: String): Boolean;
By: Wizzup? and Nielsie95
Description: Opens the bank.
Valid arguments are:
'akb', 'al kharid', 'lb', 'lumbridge', 'veb', 'varrock east', 'vwb',
'varrock west', 'feb', 'falador east', 'fwb', 'falador west', 'db', 'draynor',
'eb', 'edgeville bank'
*******************************************************************************}
function OpenBankFast(Location: String): Boolean;
var
x, y, i, l, c, z: Integer;
Info: TIntegerArray;
Booths, t: TPointArray;
begin
Wait(400);
case LowerCase(Location) of
'akb', 'al kharid': Info := [MSCX, MSCY, 7969203, 25, 1];
'lb', 'lumbridge': Info := [MSCX, MSCY, 4807788, 10, 1];
'veb', 'varrock east': Info := [MSCX, MSCY, 2971236, 10, 1];
'vwb', 'varrock west': Info := [270, 270, 5689318, 25, 1];
'feb', 'falador east': Info := [MSCX, MSCY + 50, 4612728, 14, 1];
'fwb', 'falador west': Info := [MSCY, MSCY, 4612728, 14, 1];
'db', 'draynor': Info := [MSCX, MSCY, 605006, 4, 1];
'eb', 'edgeville bank': Info := [MSCX + 50, MSCY, 3230295, 9, 2];
else
begin
srl_Warn('OpenBankFast', 'Unknown bank: '+Location, warn_AllVersions);
Exit;
end;
end;
MakeCompass('n');
z := GetColorToleranceSpeed;
ColorToleranceSpeed(Info[4]);
FindColorsSpiralTolerance(Info[0], Info[1], Booths, Info[2], MSX1, MSY1, MSX2, MSY2, Info[3]);
ColorToleranceSpeed(z);
SetArrayLength(t, 0);
t := Booths;
SetArrayLength(Booths, 0);
Booths := ReArrangeAndShortenArray(t, 14);
l := GetArrayLength(Booths) -1;
for i := 0 to l do
begin
if (not LoggedIn) or BankScreen or PinScreen then
Break;
if (LowerCase(Location) = 'vwb') or (LowerCase(Location) = 'varrock west') then
begin
Booths[i].X := Booths[i].X + 5;
Booths[i].Y := Booths[i].Y - 20;
end;
MMouse(Booths[i].X, Booths[i].Y, 3, 3);
Wait(75 + Random(75));
if IsUpText('ooth') Then
begin
GetMousePos(x, y);
Mouse(x, y, 0, 0, False);
Wait(75 + Random(75));
if ChooseOption('uickly') then
begin
FFLag(0);
MarkTime(c);
repeat
Wait(100);
until (BankScreen) or (PinScreen) or (TimeFromMark(c) > 3000);
Wait(Random(300));
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
end;
end;
end;
Result := (BankScreen) or (PinScreen);
end;
{*******************************************************************************
function OpenBankBooth(WhichBank: String): Boolean;
by: marpis
Description: Opens the bank if possible.
Valid arguments are:
'feb' (Falador East Bank)
'fwb' (Falador West Bank)
'veb' (Varrock East Bank)
'vwb' (Varrock West Bank)
'db' (Draynor Bank)
'akb' (Al-Kharid Bank)
'lb' (Lumbridge Bank)
*******************************************************************************}
function OpenBankBooth(WhichBank: string): boolean;
var
bankbooth, i, tol: integer;
TPA: TPointArray;
P: TPoint;
begin
tol := 15;
case WhichBank of
'fwb', 'falador west':begin
MakeCompass('S');
bankbooth := BitmapFromString(6, 7, 'beNqLc0rwM0dDKYGWaCg9x' +
'BoNZYXZoqHcSHs0VBDtgIaK45xQEAD0Ail3');
end;
'feb', 'falador east':begin
MakeCompass('S');
bankbooth := BitmapFromString(6, 5, 'beNqLsEvwM0dDyQGWaCgt2' +
'AoNZYbZoKGcCDsUBAD0ZxyH');
end;
'vwb', 'varrock west':begin
MakeCompass('E');
bankbooth := BitmapFromString(8, 7, 'beNrz10qL0MeKkkJ1SULxQ' +
'dokoWh/LRIQAGC8MKk=');
end;
'veb', 'varrock east':begin
MakeCompass('S');
bankbooth := BitmapFromString(7, 8, 'beNrz1vB2VCYS+buqEImCP' +
'dSIROHeGkQhADjvKT0=');
end;
'db', 'draynor':begin
MakeCompass('W');
bankbooth := BitmapFromString(4, 7, 'beNodx0EOgCAMBMAfGVNwY' +
'WnR2NiA+v//mDi3yWI7U1rVKhsUUpGMoGL40Urm33PXEd5ZOqTXHJ' +
'ezwhTvPbRsM5yyPDMiXJH4ASWBE2c=');
tol := 30;
end;
'akb', 'alkharid', 'al kharid':begin
MakeCompass('W');
bankbooth := BitmapFromString(3, 7, 'beNpb2OhkY4oLbZldDUHb5' +
'tQC0a4F9Tvm1QFJINqzsBGEAN+pHEE=');
end;
'lb', 'lumby', 'lumbridge':begin
MakeCompass('N');
bankbooth := BitmapFromString(5, 7, 'beNqL9ihI8CEepUe6E4+yo' +
'j0QCADWgSVP');
end;
end;
wait(1000+random(100));
SetAngle(true);
if not FindBitmapsTolerance(bankbooth, TPA, MSX1+10, MSY1+10, MSX2-10, MSY2-10, tol) then exit;
RAASTPA(TPA, 40);
SortTPAFrom(TPA, Point(MSCX, MSCY-30));
for i := 0 to high(TPA) do
begin
MMouse(TPA[i].x, TPA[i].y, 2, 2);
wait(250+random(100));
if IsUptext('ooth') then
break;
if i = high(TPA) then
exit;
end;
GetMousePos(P.x, P.y);
Mouse(P.x, P.y, 0, 0, false);
wait(250+random(100));
result := ChooseOption('se-q');
if result then wait(3000);
end;
{*******************************************************************************
function OpenDepositBox : Boolean;
by: Shuttleu
Description: Opens the deposit box.
*******************************************************************************}
function OpenDepositBox : Boolean;
var
X, Y, T:integer;
begin
If(not(LoggedIn)) then exit;
begin
if FindObjTPA(x, y, 739167, 10, -1, 30, 30, 200, ['deposit']) then
begin
GetMousePos(X, Y);
Mouse(x, y, 0, 0, True);
Result := True;
T :=0
repeat
Inc(T);
Wait(500+random(500));
until (DepositScreen) or (T>=30);
end else
Writeln('Could not find the deposit box');
end;
end;
{*******************************************************************************
function FindBankEx(TheBank: String): Boolean;
By: WT-Fakawi and modified by Ron and marpis
Description: Finds and/or opens any given bank in the free world.
If the MM DTM is found it will find and open the bank.
Valid Actions are:
'Nothing'
'Move'
'Open'
Valid arguments are:
'feb' (Falador East Bank)
'fwb' (Falador West Bank)
'veb' (Varrock East Bank)
'vwb' (Varrock West Bank)
'db' (Draynor Bank)
'akb' (Al-Kharid Bank)
*******************************************************************************}
function FindBankEx(TheBank: String; var x, y:integer; Action: string): boolean;
var
TheDTM: Integer;
WhichAngle: Extended;
begin
TheBank := LowerCase(TheBank);
case TheBank of
'feb': TheDTM := DTMFromString('78DA63AC67626088634001FFFFFD63F80FA41' +
'9416C2060AC01AA4987C83141D5FCF9C3C4C0055503028CAD44A8' +
'E924AC0600131E11B5');
'fwb': TheDTM := DTMFromString('78DA636C676260086540038C0CFFC12403C37' +
'F206004A98986C8304155FCF9C3C4C0055503D6D14C849A6EC26A' +
'009F5A0EA1');
'db': TheDTM := DTMFromString('78DA636C67626008644001FFFFFD63F80FA41' +
'9416C2060AC01AAF182C8B140D5FCF9C304A619A17CB09A204C35' +
'22E86AC2F09B0300F8811153');
'veb': TheDTM := DTMFromString('78DA63EC61626008624001FFFFFD63F80FA41' +
'9416C2060EC00AA8982C83141D5FCF9C3C4C0055503028C138850' +
'D343580D00122211A9');
'vwb': TheDTM := DTMFromString('78DA63EC606260B066C000FF819811440301E' +
'354A01A3B88381354FECF1F260611A81A1000AB3125428D2E7E35' +
'0087F80E5E');
'akb': TheDTM := DTMFromString('78DA636C606260F06140019D9D710CFF81342' +
'310FF0702C652A01A37881C1354CD9F3F4C0C5C5035200056E345' +
'841A3FFC6A002A3B0F97');
else
begin
srl_Warn('FindBank', 'Invalid bank name', warn_Warning);
Exit;
end;
end;
if FindDtmRotated(TheDTM, x, y, MMX1, MMY1, MMX2, MMY2, Radians(-30), Radians(30), 0.05,
WhichAngle) then
begin
result := true;
if (lowercase(Action) = 'nothing') then exit;
if (lowercase(Action) = 'move') or (lowercase(Action) = 'open') then
Mouse(x, y, 0, 0, True);
FFlag(0);
if (lowercase(Action) = 'open') then
begin
if OpenBankBooth(TheBank) then
begin
FixBank;
Result := True;
FreeDTM(TheDTM);
Exit;
end else Result := False;
end;
end else Result := False;
FreeDTM(TheDTM);
end;
{*******************************************************************************
function FindBank(TheBank: String): Boolean;
By: WT-Fakawi and modified by Ron and marpis
Description: Finds and opens any given bank in the free world.
If the MM DTM is found it will find and open the bank.
Valid arguments are:
'feb' (Falador East Bank)
'fwb' (Falador West Bank)
'veb' (Varrock East Bank)
'vwb' (Varrock West Bank)
'db' (Draynor Bank)
'akb' (Al-Kharid Bank)
*******************************************************************************}
function FindBank(TheBank: string): Boolean;
var
tmp: integer;
begin
result := FindBankEx(TheBank, tmp, tmp, 'Open');
end;
// OpenBank by SRL
function OpenBank(WhichBank: String; ChangeCompass, ChangeAngle: Boolean): Boolean;
begin
if not BankScreen then
begin
Result := True;
if LowerCase(WhichBank) <> 'eb' then
if OpenBankFast(WhichBank) then Exit;
if LowerCase(WhichBank) <> 'lb' then
begin
if (Random(11) > 5) then
begin
if not OpenBankGlass(WhichBank, ChangeCompass, ChangeAngle) then
if not OpenBankQuiet(WhichBank) then
Result := False;
end else
begin
if not OpenBankQuiet(WhichBank) then
if not OpenBankGlass(WhichBank, ChangeCompass, ChangeAngle) then
Result := False;
end;
if not Result then
if FindBank(WhichBank) then
Result := True;
end;
end else
Result := True;
end;