Simba Code:
program JOEbotsWillowWhacker;
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i sps/sps.simba}
{$i ObjectDTM\ObjDTMInclude.simba}
//
// This script is 100% JOEbot, This is my first time using ObjDTM and TPAs
// Feel free to take anything from this script- Giving credit where needed!
// What this script does is Chops Willows and Banks them in Draynor Village (Optional Firemaking)(Optional Dropping)
//
{================================ ! FILL THIS OUT ! ==========================================}
{=============================================================================================}
const
Option = 1; // Option 1 is Banking. Option 2 is Firemaking (Lighting Logs). Option 3 is Dropping (Powerchopping)
{=============================================================================================}
{=============================================================================================}
procedure DeclarePlayers; // Login information. You want to play, dont you? Fancy Shmancy
begin
HowManyPlayers := 2; // You can add more if you want, Just copy and paste a Player Section and write a different number in the [0], [1], [2] box
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0; // Starts at Players[0]
with Players[0] do
begin
Name := ''; // Enter your username in the blue things
Pass := ''; // Enter your password in the blue things
Nick := ''; // use four characters from your username
Pin := ''; //Enter bank PIN here, leave empty if you don't have one
Active := True;
BoxRewards := ['Xp', 'ostume', 'aphire'];
end;
with Players[1] do
begin
Name := ''; // Enter your username in the blue things
Pass := ''; // Enter your password in the blue things
Nick := ''; // use four characters from your username
Pin := ''; //Enter bank PIN here, leave empty if you don't have one
Active := True;
BoxRewards := ['Xp', 'ostume', 'aphire'];
end;
end;
procedure iNotBanned; // You won't get banned while this is around
begin
if(not(LoggedIn)) then Exit;
case Random(250) of
10:
begin
Hoverskill('Woodcutting', False); // Hovers over the Woodcutting Skill
wait(1551+Random(2111));
end;
20:
begin
Hoverskill ('Mining', False); // Hovers over the Mining Skill
wait(1661+Random(2221));
end;
30:
begin
Hoverskill ('Fishing', False); // Hovers over the Fishing Skill
wait(1771+Random(2331));
end;
40: RandomRClick; // Randomly Right Clicks (Anywhere)
50: PickUpMouse; // Simulates a human Picking Up a Mouse
end;
end;
procedure AntiRandoms; // Senses and completes random events. Failure isn't my fault.
begin
FindNormalRandoms;
LampSkill := 'woodcutting'; // Puts the Random Event Rewards towards Woodcutting Exprience
LevelUp;
end;
function iDrop: Boolean; // This Drops your Logs. Also known as Powerchopping
var
I: Integer;
begin
if (not Loggedin) then exit;
if (Option = 3) then // You chose Option 3 (Dropping/Powerchopping) in the Const Box at the Top Of The Script
begin
if (invFull) then
for i:= 0 to 28 do
begin
DropPattern(Random(2) + 1);
if InvCount = 0 then
break;
end;
end;
end;
function iChop: Boolean; // TPAs with DTM Failsafe! This Chops Willow Trees in Edgeville
var
TPAA: T2DPointArray;
TPA: TPointArray;
x, y, CTS, I, Retry: Integer;
GetIt: Extended;
Tree: Integer;
begin
if (not Loggedin) then exit;
AntiRandoms;
iNotBanned;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 1581089, MSX1, MSY1, MSX2, MSY2, 9);
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 13, 12);
SortATPASize(TPAA, True);
for I := 0 to High(TPAA) do
if GetArraylength(TPAA[i]) > 3 then
begin
repeat
inc(Retry);
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
if (IsUpTextMultiCustom(['chop', 'illow'])) then // Finds the uptext of a Willow Tree
begin
Result := True;
GetMousePos(X, Y);
Mouse(x, y, 3, 3,false);
Wait(100 + random(200));
ChooseOption('hop');
Wait(5000 + random(1000));
Break;
end;
until (Retry = 2);
Break;
end else // If the TPA fails to find a Tree, the DTM will be initiated as a Failsafe
begin
Tree := DTMFromString('mWAAAAHicY2FgYLgOxPeB+DYQXwZiW0YGhkAgTgPiNiBWVJCAYwERDgZOoBpkzIiGQQAAoUsGRg==');
if FindDTMRotated(Tree, x, y, MSX1, MSY1, MSX2, MSY2, -Pi/4, Pi/4, Pi/60, GetIt) then
repeat
WriteLn('Found a Willow Tree');
Mouse(x, y, 3, 3,false);
Wait(100 + random(200));
ChooseOption('hop');
Wait(5000 + random(1000));
until not (IsUpText('illow')or(InvFull))
end;
FreeDTM(Tree);
end;
function iInvIncrease: Boolean; // Makes sure your inventory is increasing
var
willow, Cur: Integer;
begin
willow := DTMFromString('mbQAAAHicY2VgYNjLxMBwDIi3AvFmID4ExMGMDAyRQBwDxAFA7AfEliYCDE4WAgxRgZZgDGIzA/WjY0YsGAwAqMoI1Q==');
Cur := CountItems('dtm', willow, []); // Counts the Willow Logs in Inventory
while (InvCount <= Cur) do // Waits for the Amount of Willows to Increase
Wait(30);
end;
function iIsChopping: Boolean; // Makes sure you are in fact Woodcutting
begin
repeat
iChop; // You are Chopping Trees
WaitFunc(@iInvIncrease, 500, 150000);
until InvFull;
Result := (InvCount = 28); // Should result in a Full Inventory
end;
procedure iBankWalk; // ObjDTM with SPS failsafe! Walks from the Trees to the Bank
var
cx, cy: Integer;
myPath:TPointArray;
begin
if (not Loggedin) then exit;
AntiRandoms;
iNotBanned;
if ObjDTM_Find ('87:118:4:1:7:84:73:1:7:96:71:1:7:111:73:10:7:115:109:5:67:62:134:65:135:129:81:156:27:107', cx, cy, True) then
begin
WriteLn('We will now walk to the Bank!');
ObjDTM_Walk ('87:118:4:1:7:84:73:1:7:96:71:1:7:111:73:10:7:115:109:5:67:62:134:65:135:129:81:156:27:107', 2, 102, 8, True);
end else // If ODTM failed for some reason, it initiates SPS
begin
WriteLn('ObjDTM walk failed- GoGoGadget SPS!');
SetupSRL;
SPS_Setup(RUNESCAPE_SURFACE, [ '10_9' ]);
myPath := [Point(4181, 3724), Point(4179, 3697), Point(4179, 3669), Point(4194, 3664), Point(4206, 3681)];
SPS_WalkPath(myPath);
end;
end;
function iBank: Boolean; // Banks your Logs in the Edgeville Bank
begin
if (Option = 1) then // You chose Option 1 (Banking) in the Const Box at the Top Of The Script
begin
if (not Loggedin) then exit;
AntiRandoms;
iNotBanned;
if not OpenBankFast('db') then // If it cannot find the Counter
OpenBankNPC // Then if it cannot find the Banker(s)
else
iBank; // Then it uses my own function. TRIPLE FAILSAFE!
if BankScreen then
DepositAll;
if PinScreen then
InPin(Players[CurrentPlayer].Pin);
Result := True;
end;
end;
procedure iTreeWalk; // ObjDTM with SPS failsafe! Walks from the Bank to the Trees
var
cx, cy: Integer;
myPath:TPointArray;
begin
if (not Loggedin) then exit;
AntiRandoms;
iNotBanned;
if ObjDTM_Find('67:78:6:1:7:58:71:1:7:70:74:1:7:66:87:10:7:78:43:10:7:78:31:10:7:62:26:5:19:33:60:12:117:15:139:123:48:147', cx, cy, True) then
begin
WriteLn('We will now walk to the Trees!');
ObjDTM_Walk('67:78:6:1:7:58:71:1:7:70:74:1:7:66:87:10:7:78:43:10:7:78:31:10:7:62:26:5:19:33:60:12:117:15:139:123:48:147', 2, 102, 8, True);
end else // If ODTM failed for some reason, it initiates SPS
begin
WriteLn('ObjDTM walk failed- GoGoGadget SPS!');
SPS_Setup(RUNESCAPE_SURFACE, [ '10_9' ]);
myPath := [Point(4209, 3686), Point(4203, 3665), Point(4184, 3664), Point(4179, 3685), Point(4182, 3708), Point(4183, 3722)];
SPS_WalkPath(myPath);
end;
end;
function iLite: Boolean; // If you want to Light the Logs instead of Bank them, Choose this on Declare Players
var
cx, cy: Integer;
TPAA: T2DPointArray;
TPA: TPointArray;
x, y, CTS, I, Retry: Integer;
myPath:TPointArray;
begin // Yeah, some ObjDTM... No big deal or anything. This walks to the Firemaking Spot to start Lighting the Logs
if (option = 2) then
begin
if ObjDTM_Find('114:42:6:1:7:36:93:1:7:62:109:1:7:58:122:10:7:69:74:10:7:52:57:10:7:69:61:5:58:147:4:72:15:37:135:30:146:117', cx, cy, True)then
begin
WriteLn('We will now walk to the Firemaking Spot!!');
ObjDTM_Walk('114:42:6:1:7:36:93:1:7:62:109:1:7:58:122:10:7:69:74:10:7:52:57:10:7:69:61:5:58:147:4:72:15:37:135:30:146:117', 2, 102, 8, True);
end else // If ODTM failed for some reason, it initiates SPS
begin
WriteLn('ObjDTM walk failed- GoGoGadget SPS!');
SPS_Setup(RUNESCAPE_SURFACE, [ '10_9' ]);
myPath := [Point(4182, 3726), Point(4176, 3705), Point(4178, 3689), Point(4180, 3672), Point(4196, 3665), Point(4215, 3664), Point(4230, 3659)];
SPS_WalkPath(myPath);
end;
begin
AntiRandoms;
iNotBanned;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MICX, MICY, TPA, 1062978, MIX1, MIY1, MIX2, MIY2, 9);
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 3, 9);
SortATPASize(TPAA, True);
for I := 0 to High(TPAA) do
if GetArraylength(TPAA[i]) > 3 then
begin
repeat
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
begin
Result := True;
GetMousePos(X, Y);
Mouse(x, y, 3, 3,false);
Wait(100 + random(200));
ChooseOption('ight');
Wait(5000 + random(1000));
Break;
end;
until (invempty)
Break;
end;
end;
end;
end;
procedure iInventory; // Checks to see if youve completed an inventory
begin
AntiRandoms;
if(InvFull) then // If your inventroy is full then you will start this Loop
begin
WriteLn('Logs *GASP* SO HEAVY!');
iBankWalk; // Walks to the Edgeville Bank
Wait(1000 + Random(1500));
iBank; // Banks your Logs
iTreeWalk; // Walks back to the Trees
end;
end;
begin // MainLoop.
Smart_server := 11;
Smart_Signed := TRUE;
Smart_Members := FALSE;
Smart_SuperDetail := FALSE;
SetupSRL;
ObjDTM_Setup;
DeclarePlayers;
LoginPlayer;
Wait(2000);
GameTab(tab_Inv);
if (not(LoggedIn)) then
if Players[CurrentPlayer].Active then
LoginPlayer;
repeat
repeat
iIsChopping; // Tree Cutting
iInvIncrease // Inventory Monitoring
iInventory // Loop when your Inventory is Full
iBankWalk; // Bank Walking Path
iBank; // Banking Procedure
iLite; // Firemaking/Lighting Procedure
iDrop; // Dropping/Powercutting Procedure
iTreeWalk; // Tree Walking Path
until (not Loggedin) // Multiplayer Initiator
NextPlayer(Players[CurrentPlayer].Active = False); // MultiPlayer!
until AllPlayersInactive;
end.
// LOLgoose.