Been at this for like 3-4 hours and so far, I've got:
Simba Code:
program new;
//{$DEFINE SMART8}
{$I SRL/SRL.simba}
{$I P07Include.simba}
Procedure P07_DeclarePlayer;
begin
P07_PlayerName:='';
P07_PlayerPass:='';
end;
Var
flax, bowstring, BowstringInInv, FlaxInInv, BankStairsDTM, BankStairsColor, X, Y: Integer;
Procedure DefineAll;
Begin
BankColor := 607067;
BankStairsColor := 603985;
BankStairsDTM := DTMFromString('mbQAAAHicY2VgYKhnYmCoAuJqIG4H4kYg7gCJA3EXEDcDcRMQB8sxMLx8+4EBBEA0iM/PgIkZsWAwAAAyRQvg');
bowstring := BitmapFromString(15, 16, 'meJxtkUsKwkAQRJMjBDxATiCCuP' +
'ETjCBMCC7ceQLX7tx7cktqrFR6ArWYz+ua6p66quol7br003mQ9pf' +
'x8f4sKvNz2N3G5wtyXiUgobbdUDhvmhX5sgRkP9yB6SHyXqIq8p6K' +
'vJeQxBqH2dZSMRjzexJGJSZYnYqc2RZY2SBtt8drwMK0Zbs+JcDh0' +
'fJrlBatBZ8gpWVf4SposrXB+lUQAyAwFuFK09agCKNBze2Qbvl3uj' +
'Rt/yewJfwF1pSd5Q==');
flax := BitmapFromString(18, 14, 'meJxtkr9KA0EQxtdyiinyBnkCEc' +
'I1Ro5jweRCKv9wCoI2FilSWFj4JD5GUPEPIQh2Fj6Fhe/ht/vtzW1' +
'O4WNZZuc38+3sinfinV6IXomM3Y4LkiOhsB8O97Du+zlVlPXo4FCb' +
'kAwKR66IyFyowY0O7hSRr89LgkU1I0uKXUBBHQLd6vPDycfm/Of7H' +
'glGBSctpdcCyVR0qdDr0+n6pdm8Ne/rM4B0SypYGqd7hatNI7UIIH' +
'oRhB5Xxz0KJjvKp4GY4NAQCCahgEQqXco7t+sshwPsIaQY/0tZTo5' +
'w+JwDaxK0yniXlFbNuC+qSVjLmtPgc9iT/YOUtb0yxC7mwcBUHDmt' +
'T8Mtnt8id7jVpU3IP0keZBGjeplxP8lPO8VfuhVpKcR/AadsjoU=');
End;
Procedure bitmapTest;
Begin
If (FindBitmapToleranceIn(bowstring, X, Y, 560, 210, 725, 460, 15)) Then //This will search the screen for the bitmap
Writeln('Found the bowstring bitmap') //Tells us we found it
Else
Writeln('Could not find bowstring'); //Tells us we didn't find it
FreeBitmap(bowstring);
If (FindBitmapToleranceIn(flax, X, Y, 560, 210, 725, 460, 15)) Then //This will search the screen for the bitmap
Writeln('Found the flax bitmap') //Tells us we found it
Else
Writeln('Could not find flax'); //Tells us we didn't find it
FreeBitmap(flax);
End;
Procedure WaitHumanClick;
begin
case random(600) of
1..450: Wait(RandomRange(0, 100));
451..570: Wait(RandomRange(0, 200));
571..590: Wait(RandomRange(0, 600));
591..600: Wait(RandomRange(400, 1100));
end;
end;
Procedure CloseBankBooth;
begin
Repeat
if (P07_BankScreen) then
Mouse(485, 40, 8, 8, Mouse_Left);
until(Not P07_BankScreen);
end;
Procedure DefineFlaxInInv;
begin
If (FindBitmapToleranceIn(flax, X, Y, 560, 210, 725, 460, 15)) Then
FlaxInInv := 1 //True
else
FlaxInInv := 0; //False
end;
Procedure DefineBowstringInInv;
begin
If (FindBitmapToleranceIn(bowstring, X, Y, 560, 210, 725, 460, 15)) Then
BowstringInInv := 1 //True
else
BowstringInInv := 0; //False
end;
procedure OpenBankBooth;
begin
Repeat
If P07_FindObj(x, y, 'ank booth', BankColor, 0) Then
begin
WaitHumanClick;
Mouse(RandomRange(X - 5, x + 5), RandomRange(Y - 5, Y + 5), random(3), random(3), false);
WaitHumanClick;
P07_ChooseOptionMulti(['se-q']);
Wait(2000 + random(1000));
end
else
begin
P07_MakeCameraAngleHigh;
P07_MakeCompassNorth;
//GoToBank;
end;
P07_FFlag;
until(P07_BankScreen)
end;
Procedure BankAndTake;
begin
P07_Deposit(1, 1, True);
WaitHumanClick;
FindBitmapToleranceIn(flax, X, Y, 75, 55, 465, 285, 15);
Writeln('Found the flax bitmap in the bank');
Mouse(X, Y, 0, 0, Mouse_Right);
P07_ChooseOptionMulti(['All Flax']);
end;
Procedure GoToTopStairs;
begin
P07_MakeCompassNorth;
RandomAngle(1);
ClickDTMRotatedIn(BankStairsDTM, MMX1,MMY1, MMX2,MMY2, Pi, 2*Pi, Pi/30, [], mouse_Left);
Wait(2500);
while (IsMoving) do
wait(100);
end;
Procedure ClimbDownTopStairs;
begin
If P07_FindObj(x, y, 'taircase', BankStairsColor, 0) Then
begin
WaitHumanClick;
Mouse(x, y, 5, 5, Mouse_Left);
end;
end;
begin
ClearDebug;
//SetupSRL;
SetupP07Include;
DefineAll;
ActivateClient;
P07_DeclarePlayer;
P07_LoginPlayer;
//repeat
if (not P07_LoggedIn) then
begin
P07_LogInPlayer;
P07_MakeCameraAngleHigh;
P07_MakeCompassNorth;
end;
if (P07_LoggedIn) then
begin
//DefineLocation
// if location = SecondFloor, then GoToFirstFloor, etc
//GoToBank
//(*
if Not P07_BankScreen then
OpenBankBooth
else
Writeln('Bank is open');
BankAndTake;
Writeln('Deposited all and withdrew flax');
WaitHumanClick;
CloseBankBooth;
Writeln('Closed bank');
WaitHumanClick; //*)
GoToTopStairs;
Writeln('Walked to bank stairs');
WaitHumanClick;
ClimbDownTopStairs;
WaitHumanClick;
end;
//until(isKeyDown(113)); //F2 Key
FreeBitmap(flax);
FreeBitmap(bowstring);
FreeDTM(BankStairsDTM);
end.
Some things are notes for me and some things were/are for testing that I've yet to take out.
Any suggestions? Any way I can improve and implement better walking/object/item detection methods?
Update:
Simba Code:
program SmellyFlaxSpinner;
//{$DEFINE SMART8}
{$I SRL/SRL.simba}
{$I P07Include.simba}
Procedure P07_DeclarePlayer;
begin
P07_PlayerName:='';
P07_PlayerPass:='';
end;
Var
Flax, Bowstring, CraftingLevelUp, BankStairsDTM, BankStairsColor, SpinnerColor, MiddleStairsDTM, MiddleStairsColor, a, x, y: Integer;
FlaxInInv: String;
Procedure DefineAll;
Begin P07_ClickToContinue;
BankColor := 607067;
SpinnerColor := 874368;
BankStairsColor := 603985;
MiddleStairsColor := 606303;
BankStairsDTM := DTMFromString('mbQAAAHicY2VgYKhnYmCoAuJqIG4H4kYg7gCJA3EXEDcDcRMQB8sxMLx8+4EBBEA0iM/PgIkZsWAwAAAyRQvg');
MiddleStairsDTM := DTMFromString('mggAAAHicY2NgYGhgYmCoAeJqIO4A4kYoPxgoFwHEgUDsA2WHAHGwHAS/e/eO4Q0Sn58BO2bEgSEAAJvBCt0=');
CraftingLevelUp := BitmapFromString(64, 60, 'meJylWmFrXEUU3a/9C34plBJCKS' +
'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');
Flax := BitmapFromString(18, 14, 'meJxtkr9KA0EQxtdyiinyBnkCEc' +
'I1Ro5jweRCKv9wCoI2FilSWFj4JD5GUPEPIQh2Fj6Fhe/ht/vtzW1' +
'O4WNZZuc38+3sinfinV6IXomM3Y4LkiOhsB8O97Du+zlVlPXo4FCb' +
'kAwKR66IyFyowY0O7hSRr89LgkU1I0uKXUBBHQLd6vPDycfm/Of7H' +
'glGBSctpdcCyVR0qdDr0+n6pdm8Ne/rM4B0SypYGqd7hatNI7UIIH' +
'oRhB5Xxz0KJjvKp4GY4NAQCCahgEQqXco7t+sshwPsIaQY/0tZTo5' +
'w+JwDaxK0yniXlFbNuC+qSVjLmtPgc9iT/YOUtb0yxC7mwcBUHDmt' +
'T8Mtnt8id7jVpU3IP0keZBGjeplxP8lPO8VfuhVpKcR/AadsjoU=');
Bowstring := BitmapFromString(15, 16, 'meJxtkUsKwkAQRJMjBDxATiCCuP' +
'ETjCBMCC7ceQLX7tx7cktqrFR6ArWYz+ua6p66quol7br003mQ9pf' +
'x8f4sKvNz2N3G5wtyXiUgobbdUDhvmhX5sgRkP9yB6SHyXqIq8p6K' +
'vJeQxBqH2dZSMRjzexJGJSZYnYqc2RZY2SBtt8drwMK0Zbs+JcDh0' +
'fJrlBatBZ8gpWVf4SposrXB+lUQAyAwFuFK09agCKNBze2Qbvl3uj' +
'Rt/yewJfwF1pSd5Q==');
End;
Procedure WaitHumanClick;
begin
case random(600) of
1..450: Wait(RandomRange(0, 100));
451..570: Wait(RandomRange(0, 200));
571..590: Wait(RandomRange(0, 600));
591..600: Wait(RandomRange(400, 1100));
end;
end;
Procedure DefineFlaxInInv;
begin
If (FindBitmapToleranceIn(Flax, x, y, 560, 210, 725, 460, 20)) Then
FlaxInInv := 'Flax found in inventory'
else
FlaxInInv := 'Flax not found in inventory';
end;
procedure OpenBankBooth;
begin
Repeat
If P07_FindObj(x, y, 'ank booth', BankColor, 0) Then
begin
WaitHumanClick;
Mouse(RandomRange(x - 5, x + 5), RandomRange(y - 5, Y + 5), random(3), random(3), false);
WaitHumanClick;
P07_ChooseOptionMulti(['se-q']);
Wait(2000 + random(1000));
end;
until(P07_BankScreen)
end;
Procedure BankAndTake;
begin
P07_Deposit(1, 1, True);
WaitHumanClick;
Repeat
Wait(1000 + random(500));
FindBitmapToleranceIn(Flax, X, Y, 75, 55, 465, 285, 15);
Writeln('Found the flax in the bank');
Mouse(X, Y, 0, 0, Mouse_Right);
WaitHumanClick;
P07_ChooseOptionMulti(['All Flax']);
DefineFlaxInInv;
WaitHumanClick;
WaitHumanClick;
Until(FlaxInInv = 'Flax found in inventory');
end;
Procedure WalkToBankStairs;
begin
P07_MakeCompassNorth;
P07_MakeCameraAngleHigh;
ClickDTMRotatedIn(BankStairsDTM, MMX1,MMY1, MMX2,MMY2, Pi, 2*Pi, Pi/30, [], Mouse_Left);
Wait(2000 + random(500));
While (IsMoving) do
wait(100);
end;
Procedure ClimbDownBankStairs;
begin
If P07_FindObj(x, y, 'taircase', BankStairsColor, 2) Then
begin
WaitHumanClick;
Mouse(x, y, random(5), random(5), Mouse_Left);
WaitHumanClick;
WaitHumanClick;
WaitHumanClick;
end;
end;
Procedure WalkNearSpinner;
begin
WaitHumanClick;
Mouse(250 + random(5), 30 + random(5), random(20), random(13), Mouse_Right);
WaitHumanClick;
P07_ChooseOptionMulti(['alk here']);
WaitHumanClick;
end;
Procedure SpinFlax;
begin
Wait(2000 + random(1000));
If P07_FindObj(x, y, 'inning wheel', SpinnerColor, 2) Then
Wait(500 + random(250));
Mouse(x, y, 0, 0, Mouse_Right);
Wait(1000 + random(500));
P07_ChooseOptionMulti(['pin Spin']);
Wait(1000 + random(500));
Mouse(260, 115, random(15), random(15), Mouse_Right);
Wait(7500 + random(250));
P07_ChooseOptionMulti(['ake X']);
Wait(1000 + random(1000));
a := random(5000) + 30;
TypeSend(IntToStr(a));
Writeln('Starting to spin flax into bowstring');
Repeat
If FindBitmapToleranceIn(CraftingLevelUp, X, Y, 50, 350, 200, 425, 15) Then
P07_ClickToContinue;
DefineFlaxInInv;
Wait(2000 + random(500));
Writeln('Still spinning');
Until(FlaxInInv = 'Flax not found in inventory');
Writeln('Done spinning flax into bowstring');
end;
Procedure GoToMiddleStairs;
begin
Wait(2000 + random(500));
ClickDTMRotatedIn(MiddleStairsDTM, MMX1,MMY1, MMX2,MMY2, Pi, 2*Pi, Pi/30, [], Mouse_Left);
Wait(4000 + random(500));
While (IsMoving) do
wait(100);
end;
Procedure ClimbUpMiddleStairs;
begin
Wait(1000 + random(500));
If P07_FindObj(x, y, 'taircase', MiddleStairsColor, 2) Then
begin
WaitHumanClick;
WaitHumanClick;
Mouse(x, y, random(5), random(5), Mouse_Right);
WaitHumanClick;
P07_ChooseOptionMulti(['imb-up ']);
end;
end;
Procedure WalkToBank;
begin
Wait(1500 + random(1000));
Mouse(260, 10, random(5), random(5), Mouse_Left);
Wait(1000 + random(1000));
Mouse(335, 90, random(5), random(5), Mouse_Left);
WaitHumanClick;
end;
begin
ClearDebug;
//SetupSRL;
SetupP07Include;
P07_DeclarePlayer;
DefineAll;
ActivateClient;
P07_LoginPlayer;
AddOnTerminate('FreeDTMss');
Repeat
if (not P07_LoggedIn) then
begin
P07_LogInPlayer;
P07_MakeCameraAngleHigh;
P07_MakeCompassNorth;
end;
if (P07_LoggedIn) then
begin
P07_MakeCameraAngleHigh;
P07_MakeCompassNorth;
if Not P07_BankScreen then
OpenBankBooth
else
Writeln('Bank is open');
BankAndTake;
Writeln('Deposited all and withdrew flax');
WaitHumanClick;
WalkToBankStairs;
Writeln('Walked to bank stairs');
WaitHumanClick;
ClimbDownBankStairs;
Writeln('Climbed down bank stairs');
Wait(1500 + random(1000));
WalkNearSpinner;
Writeln('Walked near the spinner');
WaitHumanClick;
SpinFlax;
WaitHumanClick;
GoToMiddleStairs;
Writeln('Walked to middle stairs');
WaitHumanClick;
ClimbUpMiddleStairs;
Writeln('Climbed up middle stairs');
WaitHumanClick;
WalkToBank;
Writeln('Arrived at bank');
WaitHumanClick;
end;
Until(Not P07_LoggedIn);
FreeBitmap(Flax);
FreeBitmap(Bowstring);
TerminateScript;
end.
Credits to ineedbot for WaitHumanClick and OpenBankBooth (slightly changed).