Simba Code:
program EssenceHarvester;
{$DEFINE SMART8}
{$i srl/srl.simba}
{$I P07Include.Simba}
{$I SRL/srl/misc/SmartGraphics.simba}
//***********************************************************\\
// 2007 EssenceHarvester \\
// Released by wthomas 3/3/13 \\
// Coming Soon: \\
// AntiBan \\
// more AntiRandoms(golem next) \\
// \\
// version 1.06 \\
// fixedBug ismoving \\
// Bixed other small bugs \\
// \\
// \\
// Version 1.05 \\
// Bug fixes \\
// Abiss dection and solving \\
// Paint Proggy \\
// \\
// Version 1.04 \\
// Using findSymbol, colors and DTMs \\
// Fixed Banking issues \\
// Updated Essence finding- less bot like \\
// \\
// Version 1.03 \\
// updated DTM's and demoved old unused color \\
// \\
// Version 1.02Qfx \\
// using DTM's and bruting paths \\
// \\
// Version 1.02 \\
// Added in a Proggy \\
// \\
// Version 1.01 \\
// Fixed a few minor issues with getstate() \\
// Added nice debug notices. \\
// \\
//***********************************************************\\
const
DEBUG = true;
PicInInvent =1;
CostPerEssence = 25;
WALKBANK = 1;
BANK = 2;
WALKESS = 3;
MINEESS = 4;
AUBURY = 5;
PORTAL = 6;
Version = 1.05;
type
tStatus = record
ID: Integer;
Name: string;
end;
tPointerSet = record
proc:
procedure; name: string;
end;
var
RuneShopDTM, BankDTM, TreeDTM, PortalDTM: integer;
BankSymbolColor, BankTreesColor, RuneShopSymbolColor, PortalColor, BankSymbolTolerance, BankTreeTolerance, RuneShopTolerance, PortalTolerance, banked, StartTime, LastProg: integer;
Pointers: tPointerSet;
logTime:integer;
procedure SetupDTMs;
begin
P07_PlayerName := '';
P07_PlayerPass := '';
BankSymbolColor := 4965868; BankSymbolTolerance := 5;
BankTreesColor := 1586544; BankTreeTolerance := 10;
RuneShopSymbolColor := 2265855; RuneShopTolerance := 50;
PortalColor := 1792734; PortalTolerance := 100;
RuneShopDTM := DTMFromString('mWAAAAHicY2FgYChkQuA8IG4AilUDcTMDhP1/khLDDxkVhkOMLGBaAyiGjBnRMAgAAP+kCVo=');
BankDTM := DTMFromString('mWAAAAHicY2FgYFjAxsCwFIhns0HYMowQLAvESkD85qg3w6HN+8AYxJYD6kHGjGgYBABx2gvy');
TreeDTM := DTMFromString('mggAAAHicY2NgYJjExMDQCcRNQNwIxB1A3AoSA8rVQnElFNcBsX+KE4M3FBeYSoDx91evGESActgwIw4MAQBqog3L');
PortalDTM := DTMFromString('mQwAAAHicY2ZgYChhYmDIBeJyIDZlgGBLILb29WK4FyUNxm5APgwzImEgAAD34wZS');
SetupSRLStats(1324, 'Anonymous', 'anon1337');
SRL_SixHourFix := True;
SMART_FixSpeed := True;
AddonTerminate('freeMyDTMs');
MarkTime(LastProg);
MarkTime(StartTime);
MarkTime(logTime);
banked := 0;
SetUpSRL;
SetupP07Include;
end;
function P07_IsMoving: boolean;
begin
Result := Animating(IntToBox(P07_MMCX - 30, P07_MMCY - 30, P07_MMCX + 30, P07_MMCY + 30), 50, 100);
end;
function P07_NotMoving: boolean;
begin
Result := not P07_IsMoving;
end;
function P07_PercentColorMMEx(Color, Tol, StartRadial, EndRadial, StartRadius, EndRadius: Integer): integer;
var
TPA: TPointArray;
begin
FindColorsTolerance(TPA, Color, P07_MMX1, P07_MMY1, P07_MMX2, P07_MMY2, Tol);
FilterPointsPie(TPA, StartRadial, EndRadial, StartRadius, EndRadius, P07_MMCX, P07_MMCY);
Result := ceil((Length(TPA) * 100) / ((Pi * (EndRadius * EndRadius)) * ((EndRadial - StartRadial) / 360.0) - ((Pi * (StartRadius * StartRadius)) * ((EndRadial - StartRadial) / 360.0))));
end;
function P07_PercentColorMM(Color, Tol: Integer): Integer;
begin
Result := P07_PercentColorMMEx(Color, Tol, 0, 360, 0, 76);
end;
function P07_PercentBlackMM: Integer;
begin
Result := P07_PercentColorMM(0, 5);
end;
procedure P07_SetRun(Run: Boolean);
begin
if not P07_TabInventoryTab(12) then
Writeln('cannot set run');
if CountColorTolerance(1711220, 626, 414, 656, 445, 5) < 10 then
MouseBox(626, 414, 656, 445, MOUSE_LEFT);
P07_TabInventoryTab(4)
end;
procedure DebugStr(Str: string);
begin
if Debug then
Writeln(MSToTime(TimeFromMark(StartTime), Time_Bare) + Str);
end;
function InEssMine: boolean;
begin
Result := (P07_PercentBlackMM > 25);
end;
function seeMMSymbol(var x: integer; var y: integer; DTM, color, tolerance: integer; name: string): boolean;
begin
SymbolAccuracy := 0.7;
if findsymbol(x, y, name) then
begin
SMART_DrawBoxEx(false,false,inttobox(x-5,y-5,x+5,y+5),clGreen);
debugstr(' [INFO] symbol found: ' + name);
result := true;
exit;
end;
if findDTM(DTM, x, y, P07_MMX1, P07_MMY1, P07_MMX2, P07_MMY2) then
begin
result := true;
SMART_DrawBoxEx(false,false,inttobox(x-5,y-5,x+5,y+5),clGreen);
debugstr(' [INFO] DTM found: ' + name);
exit;
end
else
begin
if FindColorTolerance(x, y, color, P07_MMX1, P07_MMY1, P07_MMX2, P07_MMY2, tolerance) then
begin
result := true;
SMART_DrawBoxEx(false,false,inttobox(x-5,y-5,x+5,y+5),clGreen);
debugstr(' [INFO] Color found: ' + name);
end
else
begin
result := false;
end;
end;
end;
function FindColorMinimap(color: integer; tolerance: integer): TpointArray;
var
TPA: TpointArray;
begin
if FindColorsTolerance(TPA, Color, P07_MMX1, P07_MMY1, P07_MMX2, P07_MMY2, Tolerance) then
Result := TPA;
end;
function InRuneShop: Boolean;
var
j: TPoint;
x, y: integer;
begin
if not seeMMSymbol(x, y, RuneShopDTM, RuneShopSymbolColor, RuneShopTolerance, 'magic shop') then
result := false;
j := IntToPoint(P07_MMCX, P07_MMCY);
Result := (Abs(x - j.x) < 20) and (Abs(y - j.y) < 10);
end;
function InBank: Boolean;
var
j: TPoint;
x, y: integer;
begin
if not seeMMSymbol(x, y, BankDTM, BankSymbolColor, BankSymboltolerance, 'bank') then
result := false;
j := IntToPoint(P07_MMCX, P07_MMCY);
Result := (Abs(x - j.x) < 20) and (Abs(y - j.y) < 20);
end;
function AtPortal: boolean;
var
j: TPoint;
x, y: integer;
begin
if not seeMMSymbol(x, y, PortalDTM, PortalColor, PortalTolerance, 'underground') then
result := false;
j := IntToPoint(P07_MMCX, P07_MMCY);
Result := (Abs(x - j.x) < 20) and (Abs(y - j.y) < 20);
end;
procedure WalktoAubury;
var
x, y: integer;
angle: extended;
begin
P07_makeCompassNorth;
if seeMMSymbol(x, y, RuneshopDTM, RuneShopSymbolColor, RuneShopTolerance, 'magic shop') then
begin
debugstr(' [INFO] Found shop ');
Mouse(x, y, 2, 2, mouse_left);
wait(5000);
P07_setRun(TRUE);
P07_FFlag;
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
DebugStr(' [INFO] Should be in the shop now');
end
else
begin
if FindDTMRotatedSE(TreeDTM, x, y, MMX1, MMY1, MMX2, MMY2, - pi()/4, pi()/4, pi()/16, angle) then
begin
debugstr(' [INFO] Found tree DTM');
Mouse(x, y, 2, 2, mouse_left);
P07_FFlag;
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
debugstr(' [INFO] Should be south of the bank');
end
else
begin
writeln('***[WARINING]*** bad things, cant see shop or trees forcing path');
Mouse(MMCX, MMCY + 30, 2, 2, mouse_left);
P07_FFlag;
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
debugstr(' [INFO] Should be south of the bank');
end;
end;
end;
procedure BankEssence;
var
CTS, I, x, y: Integer;
TPA: TPointArray;
ATPA: array of TPointArray;
begin
if P07_BankScreen then
begin
P07_Deposit(2, 28, TRUE);
exit;
end;
P07_MakeCompassNorth;
P07_MakeCameraAngleHigh;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.06, 0.85);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 4663862, MSX1, MSY1, MSX2, MSY2, 8);
ColorToleranceSpeed(CTS);
wait(100);
SMART_DrawDotsEx(false,TPA,clred);
ATPA := SplitTPA(TPA, 5);
if length(ATPA) < 5 then
begin
Mouse(P07_MMCX, P07_MMCY + 15, 0, 0, mouse_left);
exit;
end;
for I := 0 to High(ATPA) do
begin
if Length(ATPA[i]) < 20 then
Continue;
wait(100);
MiddleTPAEx(ATPA[i], x, y);
MMouse(x, y, 2, 2);
wait(50);
if (P07_IsUpTextMultiCustom(['alk-to', 'anker'])) then
begin
clickMouse2(MOUSE_RIGHT);
wait(300);
if P07_ChooseOptionMulti(['Bank Banker']) then
begin
SMART_DrawBoxEx(false,false,getTPABounds(ATPA[i]),clGreen);
writeln('bank is open');
wait(300);
P07_Deposit(2, 28, TRUE);
banked := banked + 28 - PicInInvent;
Stats_IncVariable('Pure Essence (Mined)', 28-PicInInvent);
//writeln(banked);
debugstr(' [INFO] updated banked ess log');
end;
Break;
end;
wait(100);
end;
end;
end;
procedure WalktoBank;
var
x, y: integer;
angle: extended;
begin
P07_makeCompassdegree(randomrange( - 20, 20));
if seeMMSymbol(x, y, BankDTM, BankSymbolColor, BankSymboltolerance, 'bank') then
begin
debugstr(' [INFO] Found bank');
Mouse(x, y, 2, 2, mouse_left);
P07_setRun(TRUE);
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
end
else
begin
if FindDTMRotatedSE(TreeDTM, x, y, MMX1, MMY1, MMX2, MMY2, - pi()/4, pi()/4, 0.1, angle) then
begin
debugstr(' [INFO] Found tree colors');
Mouse(x, y, 2, 2, mouse_left);
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
debugstr(' [INFO] Should be south of the bank');
end
else
begin
writeln('***[WARINING]*** bad things, cant see bank or trees forcing path');
writeln('UPDATE your bank and tree DTM''s and colors');
Mouse(MMCX + 30, MMCY - 30, 2, 2, mouse_left);
waitfunc(@ P07_NotMoving, 100, 20000);
P07_FFlag;
debugstr(' [INFO] Should be south of the bank');
end;
end;
end;
procedure teleportAubury;
var
CTS, I, x, y: Integer;
TPA: TPointArray;
ATPA: array of TPointArray;
begin
P07_MakeCompassNorth;
P07_MakeCameraAngleHigh;
begin
if CountColorTolerance(5923683, MSX1, MSY1, MSX2, MSY2, 20) > 20000 then
begin
debugstr(' [INFO] Outside ess shop trying to re-enter');
if seeMMSymbol(x, y, RuneshopDTM, RuneShopSymbolColor, RuneShopTolerance, 'magic shop') then
Mouse(x, y + 15, 5, 10, mouse_left);
P07_FFlag;
end;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.19, 0.92);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 1226735, MSX1, MSY1, MSX2, MSY2, 10);
ColorToleranceSpeed(CTS);
SMART_DrawDotsEx(false,TPA,clred);
ATPA := SplitTPA(TPA, 5);
for I := 0 to High(ATPA) do
begin
if length(ATPA[i]) < 5 then
continue;
MiddleTPAEx(ATPA[i], x, y);
MMouse(x, y, 2, 2);
wait(50);
SMART_DrawBoxEx(false,false,getTPABounds(ATPA[i]),clGreen);
if (P07_IsUpTextMultiCustom(['alk-to', 'bury'])) then
begin
clickMouse2(mouse_right);
wait(300);
if P07_ChooseOptionMulti(['Teleport']) then
debugstr(' [INFO] Chose Option Teleport');
P07_FFlag;
Break;
end;
wait(100);
end;
end;
end;
procedure startMining;
var
i, c, x, y: integer;
begin
//writeln(GetBlackChatMessage);
if P07_Containstext(GetBlackChatMessage, ['rock', 'ine', 'axe', 'pic']) and not P07_InvFull then
exit;
P07_makeCompassdegree(60);
c := 0;
if seeMMSymbol(x, y, PortalDTM, PortalColor, PortalTolerance, 'underground') then
begin
debugstr(' [INFO] Found portal on MM');
Mouse(round((x + P07_MMCX) / 2), round((y + P07_MMCY) / 2), 2, 2, MOUSE_LEFT);
P07_FFlag;
debugstr(' [INFO] Correcting position');
MiddleTPAEx(FindColorMinimap(11513529, 200), x, y);
Mouse(x, y, 2, 2, MOUSE_LEFT);
P07_FFlag;
P07_MakeCameraAngleLow;
MMouse(MSCX + randomrange( - 100, 100), MSCY + randomrange( - 150, 0), 0, 0);
repeat
inc(c);
P07_makeCompassdegree(P07_getcompassangle + 30);
wait(50);
if P07_Containstext(P07_getUptext, ['Mine', 'Rune', 'Essence']) then
begin
clickmouse2(mouse_left);
debugstr(' [INFO] Mining Essence');
wait(500);
break;
end;
until (C > 12);
end
else
begin
debugstr(' [INFO] We are not at an ess node, trying to find one');
c := 45 + 90 * randomrange(0, 3);
for i := 0 to 2 do
begin
Mouse(MMCX + round(50 * cos(c)), MMCY - round(50 * sin(c)), 5, 5, mouse_left);
P07_FFlag;
if seeMMSymbol(x, y, PortalDTM, PortalColor, PortalTolerance, 'underground') then
begin
debugstr(' [INFO] We are almost at an ess node');
exit;
end;
end;
end;
end;
procedure findPortal;
var
MTPA: TpointArray;
CTS, I, x, y: Integer;
TPA: TPointArray;
begin
if seeMMSymbol(x, y, PortalDTM, PortalColor, PortalTolerance, 'underground') then
begin
debugstr(' [INFO] Found portal color on MM');
if not atportal then
Mouse(x, y, 5, 5, mouse_left);
P07_FFlag;
debugstr(' [INFO] Standing by portal');
P07_makeCameraAngleHigh;
P07_makeCompassDegree(P07_getCompassAngle + randomrange( - 40, 40));
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.20, 3.19);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 10868705, MSX1, MSY1, MSX2, MSY2, 11);
ColorToleranceSpeed(CTS);
SMART_DrawDotsEx(false,TPA,clBlue);
wait(100);
x := MiddleTPA(TPA).x;
y := MiddleTPA(TPA).y;
MMouse(x, y, 2, 2);
if (P07_IsUpTextMultiCustom(['use', 'ortal'])) then
begin
SMART_DrawBoxEx(false,false,getTPABounds(TPA),clGreen);
wait(100);
clickMouse2(MOUSE_LEFT);
wait(200);
if not InessMine then
debugstr(' [INFO] Teleported to Varrock');
exit;
end;
wait(100);
end
else
begin
end;
end;
procedure Random_Abiss;
var c,d:integer;
begin
c:=0; d:=0;
if P07_PercentBlackMM<75 then exit;
writeln('[WARNING] Random Found: Abiss Attempting to Solve');
P07_makeCompassNorth;
P07_MakeCameraAngleLow;
MMouse(250,106,5,5);
P07_makeCompassdegree(P07_getcompassangle + 10);
wait(50);
if P07_Containstext(P07_getUptext, ['Operate', 'Appendage']) then
begin
repeat
inc(d);
if P07_Containstext(P07_getUptext, ['Operate', 'Appendage']) then
clickmouse2(mouse_left);
wait(700);
until (P07_PercentBlackMM<75) or (d>15);
end;
end;
function getState(): Integer;
var
angle: extended;
x, y: integer;
begin
P07_TabInventoryTab(4);
Random_abiss; //check for abiss random
if not InEssMine then
if not (seeMMSymbol(x, y, BankDTM, BankSymbolColor, BankSymboltolerance, 'bank') or seeMMSymbol(x, y, RuneShopDTM, RuneShopSymbolColor, RuneShopTolerance, 'magic shop')) then
if not FindDTMRotatedSE(TreeDTM, x, y, MMX1, MMY1, MMX2, MMY2, - 180, 180, 1, angle) then
begin
writeln('[FATAL] terminal error, cant see bank or rune shop ending script now');
terminatescript;
end;
if P07_invFull then
begin
if InEssMine then
begin
result := PORTAL;
exit;
end
else if not inbank then
begin
result := WALKBANK;
exit;
end
else
begin
result := BANK;
exit;
end;
end;
if not InEssMine then
begin
if not inruneshop then
begin
result := WALKESS;
exit;
end
else
begin
result := AUBURY;
exit;
end;
end
else
begin
result := MINEESS;
exit;
end;
end;
procedure Loop();
begin
with Pointers do
begin
case getState() of
WALKBANK:
begin
name := 'Walk:Bank';
Proc := @ WalktoBank;
end;
BANK:
begin
name := 'Bank Essence';
Proc := @ BankEssence;
end;
WALKESS:
begin
name := 'Walk:Aubury';
Proc := @ walktoAubury;
end;
MINEESS:
begin
name := 'Mine essence';
Proc := @ startMining;
end;
AUBURY:
begin
name := 'Teleport:Essence';
Proc := @ teleportAubury;
end;
PORTAL:
begin
name := 'Teleport:Varrock';
Proc := @ findPortal;
end;
end;
end;
end;
procedure proggy;
var
t: integer;
timestr:string;
begin
// markTime(lastProg);
wait(10);
//moneyG := round(t * CostPerEssence * 3600000 / TimeFromMark(StartTime));
t := banked + P07_invCount - PicInInvent;
//writeln('Time Running: ' + MSToTime(TimeFromMark(StartTime), Time_Bare));
//writeln('Essence Mined: ' + inttostr(t) + ' (' + inttostr(round(t * 3600000 / TimeFromMark(StartTime))) + ')');
//writeln('Experience: ' + inttostr(t * 5) + ' (' + inttostr(round(5 * t * 3600000 / TimeFromMark(StartTime))) + ')');
//writeln('Money Gained : ' + inttostr(t * CostPerEssence) + ' (' + floattostr(moneyG) + ')');
SMART_ClearCanvas;
SMART_DrawText(360,360,'smallchars','Essence Mined: ' + inttostr(t),clBlack);
SMART_DrawTextEx(false,360,380,'smallchars','Exp earned: ' + inttostr(t * 5),clBlack);
SMART_DrawTextEx(false,360,400,'smallchars','Money Gained : ' + inttostr(t * CostPerEssence),clBlack)
SMART_DrawTextEx(false,360,420,'smallchars','Time Running : '+Copy(MSToTime(TimeFromMark(StartTime),Time_Bare),0,5),clBlack)
if TimeFromMark(LogTime) > (5*60000) then begin
marktime(LogTime);
Stats_Commit;
end;
end;
procedure freeMyDTMs;
begin
freeDTM(RuneShopDTM);
freeDTM(BankDTM);
freeDTM(TreeDTM);
freeDTM(PortalDTM);
//MMouse(240,105,10,10);
end;
begin
SetupDTMs;
writeln('script Version '+floattostr(Version)+ ' Starting');
P07_loginPlayer;
wait(1000);
while P07_LoggedIN do
begin
//if TimeFromMark(lastProg) > 60000 then
proggy;
Loop();
with Pointers do
begin
// writeLn(MSToTime(TimeFromMark(StartTime), Time_Bare) + ' Entering ' + name + ' cycle.');
Proc() wait(1000);
end;
end;
if TimefromMark(lastprog)<20000 then begin
writeln('Do not post about this Error in the thread');
writeln('You have not read the thread and updated globals.simba');
end;
end.