SRL Archive - General

Is scar still used?


Neg_

2011-06-27 20:42:43

I have problem downloading SRL, has scar been abadonded? Latest release cant download it..

Would appericate if anybody can zip his/her old scar and send me. 3.12 - 3.22 are all fine.

I made a script for privateserver while ago and it uses SRL, I also tried to use simba but it's missing functions such as intToPoint and movemousesmooth and problaby many more, I really dont want to rewrite it.

Thanks,
negaal

Smarter Child

2011-06-27 21:39:19

Scar isn't abandoned currently, but SRL 5 which is coming soon will not support Scar so i suggest you use that Simba. Read some tut's ask for help, there are many people more than willing to help you with anything.

Edit: For private servers, there is no need for many SRL functions as they don't really have a anti-macro banning system thingy and the scripts are fairly easy to make.

i luffs yeww

2011-06-27 23:44:56

Note that "soon" isn't really a certain amount of time. It's been "soon" for quite some time. :p

BraK

2011-06-28 02:48:49

Marktime := GetsystemTime/1000;

if Marktime > 31536000 then \\31536000 amount of seconds in a year
if (Random(2000000) = 12345) then
SRL5Release;

The chance of release. Freddy did just release a Final of Scar 3.25 though.

~BraK

E: Also please don't post questions in the "Tutorial Section."

E2: I'll be moving this into the Scar Section for organization purposes.

Neg_

2011-06-28 02:52:58

From: Smarter Child
Scar isn't abandoned currently, but SRL 5 which is coming soon will not support Scar so i suggest you use that Simba. Read some tut's ask for help, there are many people more than willing to help you with anything.

Edit: For private servers, there is no need for many SRL functions as they don't really have a anti-macro banning system thingy and the scripts are fairly easy to make.


I just need scar with SRL 4 installed. And the script depends mostly on wizzyplugin, as i now recall.

Can you tell me why are scripts fairly easy to make?
Autotalker is needed there too..

:spot:

BraK

2011-06-28 03:21:52

Auto Talker is pretty hard to Make depending. Are you talking about an Auto-Typer or Auto-Responder. Also there might be more information on the Scar divi 3.25 thread about getting SRL4 with Scar.

~BraK

Bonfield

2011-06-28 05:41:54

welcome back neG

Wizzup?

2011-06-28 12:47:11

From: Neg_
I just need scar with SRL 4 installed. And the script depends mostly on wizzyplugin, as i now recall.

Can you tell me why are scripts fairly easy to make?
Autotalker is needed there too..

:spot:


Wizzyplugin has been updated and integrated in Simba, so you won't need it for Simba.

masterBB

2011-06-28 12:52:34

From: Neg_
Can you tell me why are scripts fairly easy to make?
Autotalker is needed there too..


Autotalker is near impossible. No bot does it with a reason.

The script is easy cause the banning system of runescape nowadays is more complicated as at a private server. No one will flag you if you haven't got any breaks, no one will ban you if the script got a bug and keeps clicking a NPC it can't reach for over an hour.

Rich

2011-06-28 13:01:51

From: masterBB
Autotalker is near impossible.
I wouldn't say that. A well constructed, thought out one with many responses, reasonable triggers, and failsafes wouldn't be impossible; just time consuming.

Neg_

2011-06-29 06:51:10

From: masterBB
Autotalker is near impossible. No bot does it with a reason.

The script is easy cause the banning system of runescape nowadays is more complicated as at a private server. No one will flag you if you haven't got any breaks, no one will ban you if the script got a bug and keeps clicking a NPC it can't reach for over an hour.


Well, its essminer. You get banned if your char acts weird or doesn't respond(mine just finds name and says something random).
Character needs to have breaks, if you run it like 10h straight, someone will notice and you get banned.

Script is well constructed I think, never gets stuck, ran it 16h straight like year ago..

I wouldn't say it was fairly easy, just "easier" than normal rs.

program EssMiner;// 1.0 public

var

respondTime, t, name, teleport, storetxt, nopickaxe, nocoins,
shopMM, BankMM, BankText, ShopFloor, AuburyText, PortalMM,
GF, essmined, Responded, Ess, EssHill, trade, EssCountLast, EssCount: integer;

shopCalibrate, BankCalibrate, runes : boolean;

p : TPointArray;

const

Debug = false;

BuyRunes = true;

Aubury = 7048893; // colorcode of aubury, no need to change
BankBooth = 7048860; //2710899;
Portal = 10866646;
BankTrees = 2312569;
Shop = 5141898;


// minimap edgepoints

MMX1 = 554;
MMY1 = 37;
MMX2 = 700;
MMY2 = 188;

// mainscreen edgepoints

MSX1 = 8;
MSY1 = 33;
MSX2 = 518;
MSY2 = 366;

// minimap centre

MMCX = 628;
MMCY = 112;

function intToPoint(x, y : integer) : TPoint;
var tp : TPoint;
begin
tp.x := x;
tp.y := y;
Result := tp;
end;

procedure load;
begin

setArrayLength(p, 7);// Remember to set array length
p := [
intToPoint(332, 113), //chaos
intToPoint(380, 113), //death
intToPoint(428, 113), //blood
intToPoint(100, 115), //air
intToPoint(145, 112), //water
intToPoint(191, 113), //earth
intToPoint(239, 113), //fire
intToPoint(144, 161), //nature
intToPoint(191, 160) //law

];

trade := DTMFromString('78DA638C636460600262342002C4305146901' +
'A56026A12812C76026A9230CD890A754255130F64311350930564' +
'FD67C06F572611EEC9C6548361570E11EEC921220C2712A166129' +
'0C542C02E901A3622CC21E4AFA9401617013553802C4EDC76FD07' +
'0200DC0E14C5');

nocoins := DTMFromString('78DA8D91310A8430104593EBBA6027082E081' +
'60A76961612040B41502C3C8EBA0ADEC358D82DFC97E217E131F3' +
'66C67E8C31AB35FFDEFB6B031F8760421F276036C1443E76C1C43' +
'E7E8249C05C5FE093029F0CCC9E833A25F02940AF12DCEB612EC1' +
'54C0B9067BAE81730B6EEA40AF06387790513E0364D44D7BC038B' +
'0C319EC6782CC0E7A1146398F805934730367AE31B4');

name := DTMFromString('78DA632C60606038C8C8800AFE83499828631' +
'E903882A94604590DC89C6304D454E2378709449703895304D494' +
'02899304D4D461F7178A9A1A207194809A5A207198809A0622D4B' +
'412A1A69D08356DF8C319ACA68B08BF83D4EC25229C0F11505386' +
'DFAEFF4000001F302BAF');

teleport := DTMFromString('78DA633CCCC0C060C3C8800EB8801826CA780' +
'448981350730C481813618E0901354731D544853A61AAB126A0E6' +
'0C90B02260D75922FC7E92483584C2E71490B020E0E6E344F8EB2' +
'590B02460D73322EC7A4184BF5E62AAC130E72D11E1FC0ED3CD18' +
'E6BC27C2CDEF8808E76B44AA2164D70D22C2F926A6DF31CCB9893' +
'F9CFF0301007F10291F');

storeTxt := DTMFromString('78DA633466606028644001FFFFFF07D38C503' +
'E23484D3E0135E640A280012B403187909A6822D4C460BA07434D' +
'1CA639E86E0600C4160DFA');

noPickaxe := DTMFromString('78DA631462606068656440075C400C12FD0F0' +
'48C2240461F6E3520C02886DF1CB01A2F20D149841A4276F90289' +
'1E026A8E1361CE2120D14D40CD4122DC7C8408357B89704F01116' +
'A8E61AAB9767A29AA9AB598EEB9771C4DCD124CBF9F3B3C0725DE' +
'016F991F0C');

shopMM := DTMFromString('78DA630C626260E86100035608C5F07C12038' +
'306906604E2FF40C0188950C3C2800022503520C0E84D580D0075' +
'880879');

BankMM := DTMFromString('78DA63CC676260C86100032E08C5F0FEBE178' +
'332906604E2FF40C0580654930D916381AA61E061601081AA0101' +
'C60CC26A00AD420925');

BankText := DTMFromString('78DA6334656060D06640011CF7AF318800694' +
'620FE0F048C9608352C58D48000A33D90D027A0C6890835EE44A8' +
'F126428D3F116EB600123AA86A04800A50D40462AAE1104055030' +
'0FFB31538');

AuburyText := DTMFromString('78DA8D91CD0AC230108437C543110F7927D1F' +
'A8BBEB3500F422F5541A1050F5AF1152AEAFA73C9CECA269710E6' +
'6366B3E37609519F3E27F95E546C88BA7CBBDFDBBD9941C8A41D8' +
'5190926154CC9CAC4C8DAB232337C8EAC4C43C6F7047360250B99' +
'7C25982A82A99181796AFC173027DC4FBE5698A1B19FB3E22367B' +
'E2003FBB946F8DC58191BBD37117D35D85721FFDE6216ECE7AEF4' +
'EE7DC83C589987CCBEF4E8B388C85A1A592DF6A56665FF7D9E7C5' +
'E41B23900');

PortalMM := DTMFromString('78DA63F4636260C8674001E74239187481342' +
'394CFE809549343849A22DC6AFE03010071550A3E');


EssHill := DTMFromString('78DA63DCCBC0C03083010C982014434B6D358' +
'308906684F21977008949A86AAA0BB351D56C0512B351D52C9D36' +
'0555CD6E20B11055CD94AE1E54358780C40274BB8A51D51C03123' +
'351D5448506A1AA390A2426A3AA31343044557310484CC06DCE7F' +
'2000006E7F19B1');
Ess := DTMFromString('78DA635CC0C4C0C0C0C8800CA222A318F8914' +
'4191702D5FC4251C2505D588CAA66361673028350D5CC00AAE144' +
'5563696189AA6609500D07AA9A205F2F5435AB806AFEA3BAA7383' +
'31B55CD72A09A1FA86A7A9A5A50D54C07AAF9CB80DFEFB331FD8E' +
'61D73CA01A6E54373BD95862BA8705554D32BA5D73806A9808F87' +
'D11A61A0C3783D4FC437573766232A65D5F193000869BF918F1AB' +
'990454C34A40CD1AA09A3FB8EDFA0F04002D4427C7');
end;

function loggedIn() : boolean;
begin
Result := similarColors(getColor(536, 103), 3951443, 10);
status('Logged in - '+booltostr(Result));
end;

procedure Click(x , y : Integer; Left : Boolean);
var mx, my : integer;
begin
GetMousepos(mx, my);
if ((x <> mx) or (y <> my)) then
begin
repeat
MoveMouseSmooth(x, y);
wait(1);
GetMousepos(mx, my);
until((x = mx) and (y = my));
end;
wait(10);
HoldMouse(x, y, Left);
wait(random(50)+50);
ReleaseMouse(x, y, Left);
end;

procedure mMove(x , y : Integer);
var mx, my : integer;
begin
repeat
MoveMouseSmooth(x, y);
wait(1);
GetMousepos(mx, my);
until((x = mx) and (y = my));
end;

procedure mFlag();
var x, y, f : integer;
begin
Wait(500);
F := GetSystemTime();
repeat
wait(10);
Status('Waiting for Flag');
until (not findcolor(x, y, 255, 555, 33, 701, 185)) or (getSystemTime - F > 30000);
Status('Flag ended');
end;

function isSpecCol(col: integer): boolean;
begin
case col of
1310462: result := true; //NPCs
982782: result := true;
195836: result := true;
62965: result := true;
56797: result := true;
60909: result := true;
52428: result := true; //End of NPCs
16711422: result := true; //Players
15527148: result := true;
13816530: result := true;
14869218: result := true;
12961221: result := true; //End of Players
3553023: result := true; //Drops
789758: result := true;
2105598: result := true;
395004: result := true;
233: result := true;
241: result := true;
206: result := true;
217: result := true;
188: result := true; //End of Drops
16777215: result := true; //Your player
65536: result := true; //Bottom of drop dots
255: result := true; //Flag
284358: result := true;
1127261: result := true; //End of flag
end;
end;
//dan cardin or danrox 2006
function isMoving: boolean;
var
NumOfPoints: integer;
numDone: integer;
Points: array of record
x, y, color: integer;
end;
x, y: integer;
color: integer;
i: integer;
begin
NumOfPoints := 20;
numDone := 0;
setLength(points, NumOfPoints);
repeat
wait(1);
x := random(MMX2 - MMX1) + MMX1;
y := random(MMY2 - MMY1) + MMY1;
if distance(x, y, MMCX, MMCY) > 72 then
continue;
color := getColor(x, y);
if(isSpecCol(color)) then
continue;
points[numDone].x := x;
points[numDone].y := y;
points[numDone].color := color;
numDone := numDone + 1;
if(numDone = NumOfPoints) then
break;
until(false)
wait(100);
for i := 0 to NumOfPoints - 1 do
begin
wait(1);
color := getColor(points[i].x, points[i].y);
if(color <> points[i].color) then
begin
if(not isSpecCol(color)) then
begin
result := true;
exit;
end;
end;
end;
end;

function mIsUpText(text : string) : boolean;
var x, y : integer;
begin
wait(100);
Result := (findcolortolerance(x, y, 56286, 0, 0, 300, 60, 35) or
findcolortolerance(x, y, 13555472, 0, 0, 300, 60, 35)) and
(not findcolortolerance(x, y, 53000, 0, 0, 300, 60, 30));
// writeln(booltostr(Result));
end;

procedure Terminate;
begin
PlaySound(ScriptPath+'/4.wav');
TerminateScript;
end;

procedure autorespond;
var x, y : integer;
var t : string;
begin
if not LoggedIn then Exit;
if ((getSystemTime - RespondTime) < 15000) and(RespondTime > 0) then
begin
status('Skipping autorespond');
exit;
end;
status('Looking for name mask to autorespond');
//exit;// doesnt work since every name needs its own maskcode
//writeln(booltostr(findDtm(name, x, y, 13, 375, 497, 487))+' - '+booltostr(rt = 0));
if findDtm(name, x, y, 13, 375, 497, 487) then
begin
case random(10) of
0 : t := '?';
1 : t := '???';
2 : t := 'poland?';
3 : t := 'jes dobre?';
4 : t := 'pl';
5 : t := 'nop';
6 : t := 'hello';
7 : t := 'pl?';
8 : t := ':D';
9 : t := 'nah';
end;
writeln('Name mask came up, lets say: '+t);
sendKeysWait(t+chr(13), 10, 100);
inc(responded);
RespondTime := getSystemTime;
end;
end;

function BankOpen : boolean; forward;

procedure Inv();
begin
if similarColors(getColor(634, 206), 7638426, 10) and not BankOpen then
begin
Click(648, 214, true);
wait(500);
end;
end;

function InvCount : integer;
var i, j, x, y, isx1, isy1, isx2, isy2, c : integer;
begin
Inv();
for i := 0 to 3 do
for j := 0 to 6 do
begin
isx1 := 570 + (i * 41);
isy1 := 240 + (j * 36);
isx2 := 570 + ((i + 1) * 41);
isy2 := 240 + ((j + 1) * 36);
//mMove((isx1 + isx2) / 2, (isy1 + isy2) / 2);
//wait(500);
if FindColor(x, y, 0, isx1, isy1, isx2, isy2) then inc(C);
end;
//writeln(inttostr(c));
result := C;
end;

function mInvFull() : boolean;
begin
Result := InvCount = 28;
end;

function MFindObj(var x, y : integer; Color, textDTM, Tol, Fails : integer) : boolean;
var tx, ty, F : integer;
begin
repeat
x := random(516);
y := random(365);
if FindColorSpiralTolerance(x, y, Color, msx1, msy1, msx2, msy2, Tol) then
begin
mMove(x, y);
if(textDTM > 0) then
begin
Result := FindDTM(textDTM, tx, ty, 6, 34, 515, 364);
end else Result:= mIsUpText('...');
end;
wait(100);
inc(F);
until (F = Fails) Or (Result);
end;

function atEssMine : boolean;
var C : integer;
begin
C := CountColorTolerance(0, mmx1, mmy1, mmx2, mmy2, 2);
Result := C > 10000;
if Debug then writeln('At mine - '+booltostr(Result)+' ('+inttostr(C)+')');
end;

Function DebugTPA(Points: TPointArray; BmpName: String): Boolean;//wizzup

Var
Width, Height, ClientBMP, I : Integer;
xs, ys, xe, ye: Integer;

Begin
Try
Begin
xe := xs xor xs;
ye := ys xor ys;
xs := 1 shl 20;
ys := 1 shl 20;

For I := 0 To High(Points) Do
Begin
xs := Min(xs, Points[i].X);
ys := Min(ys, Points[i].Y);

xe := Max(xe, Points[i].X);
ye := Max(ye, Points[i].Y);
End;

Width := xe - xs;
Height := ye - ys;

DisplayDebugImgWindow(0, 0);
DisplayDebugImgWindow(Width, Height);
ClientBMP := BitmapFromString(Width, Height, '');

CopyClientToBitmap(ClientBMP, xs, ys, xe, ye);
For I := 0 To High(Points) Do
FastSetPixel(ClientBMP, Points[i].X - xs, Points[i].Y - ys, 255);
If BmpName <> '' Then
SaveBitmap(ClientBMP, ScriptPath + BmpName + '.bmp');
SafeDrawBitmap(ClientBMP, GetDebugCanvas, 0, 0);
DisplayDebugImgWindow(Width, Height);

FreeBitmap(ClientBMP);
End
Except
FreeBitmap(ClientBMP);
End;
Result := True;
End;

function FindBank(var x, y : integer) : boolean;
var TPA : TPointArray;
ATPA : T2DPointArray;
MinLength : integer;
p : string;
B : TBox;
begin
MinLength := 5
FindColorsTolerance(TPA, BankTrees, MmX1, MmY1, MmX2, MmY2, 0);
TPA := RemoveDistTPointArray( MMCX, MMCY, 73, TPA, true);
if(Length(TPA) >= MinLength) then
begin
ATPA := SplitTPAEx(TPA, 65, 40);
SortATPASize(ATPA, True);
TPA := ATPA[0];
if(Length(TPA) >= MinLength) then
begin
if Debug then
begin
DebugTPA(TPA, 'banktrees');
wait(500);
end;
B := GetTPABounds(TPA);
FindColorsTolerance(TPA, 7565691, B.X1 - 5, B.Y1 - 10, B.X2 + 5, B.Y2 + 5, 60);
TPA := RemoveDistTPointArray( MMCX, MMCY, 73, TPA, true);
if(Length(TPA) > 500) then
begin
if Debug then DebugTPA(TPA, 'bank');
MiddleTPAEx(TPA, x, y);
y := y - 7;
//mmove(x, y -7)
Result := True;
end;
end;
end;
if Length(TPA) > 0 then p := ' ('+inttostr(Length(TPA))+')';
if Debug then writeln('FindBank - '+booltostr(result) + p);
end;

function AutoColorShopFloor : integer;
var x, y, i, Temp, F, T, ax, ay : integer;
begin
F := GetSystemTime();
writeln('Trying to autocolor shopfloor');
repeat
wait(100);
if (FindDTM(ShopMM, x, y, MMX1, MMY1, MMX2, MMY2)) then
begin
if(Distance(x, y, MMCX, MMCY)) > 65 then exit;
repeat
ax := x;
ay := y;
i := 0;
Inc(T);
status('Shop icon found! Starting autocoloring..');
repeat
Inc(i);
case T of
1: ay := ay + 1;
2: ax := ax - 1;
3: ax := ax + 1;
4: ay := ay - 1;
end;
if (Distance(MMCX, MMCY, ax, ay) > 74) then Break;
wait(5);
Temp := getColor(ax, ay);
mmove(ax, ay);
if SimilarColors(Temp, 3756387, 50) then
begin
Result := Temp;
writeln('Shop floor color = '+inttostr(Result));
status('Autocoloring successful!');
Exit;
end;
until (i = 20);
until (getSystemTime() - F > 15000)
end else status('Can''t find shopicon');
until (getSystemTime() - F > 15000);
end;

function FindShop(var x, y : integer) : boolean;
var TPA : TPointArray;
ATPA : T2DPointArray;
MinLength : integer;
p : string;
begin
//if(ShopFloor = 0) then ShopFloor := AutoColorShopFloor;
//if(ShopFloor = 0) then Exit;
ShopFloor := Shop;
MinLength := 90
FindColorsTolerance(TPA, ShopFloor, MMX1, 90, MMX2, MMY2, 10);
TPA := RemoveDistTPointArray( MMCX, MMCY, 73, TPA, true);
if(Length(TPA) >= MinLength) then
begin
ATPA := SplitTPAEx(TPA, 20, 10);
SortATPASize(ATPA, True);
TPA := ATPA[0];
if(Length(TPA) >= MinLength) then
begin
if Debug then DebugTPA(TPA, 'shop');
MiddleTPAEx(TPA, x, y);
Result := True;
end;
end;
if Length(TPA) > 0 then p := ' ('+inttostr(Length(TPA))+')';
if Debug then writeln('FindShop - '+booltostr(result) + p);
end;

function atShop : boolean;
var x, y : integer;
begin
Result := FindShop(x, y) and (Distance(x, y, MMCX, MMCY) < 15)
if Debug then writeln('At shop - '+booltostr(result));
end;


function atBank : boolean;
var x, y : integer;
begin
Result := FindBank(x, y) and (Distance(x, y, MMCX, MMCY) < 20)
if Debug then writeln('At bank - '+booltostr(result));
end;

procedure SetRun; forward;

Function toShop() : boolean;
var x, y, dx, dy, F, TSF, dd : integer;
begin
if not LoggedIn then Exit;

if not shopCalibrate then
if AtShop then Exit;

ShopCalibrate := false;

Writeln('Going to Shop');

repeat
if AtBank and FindBank(x, y) then
begin
Writeln('Click to shop based on bankhouse location');
Click(x + 20, y + 42, true); //from bank
Status('On move..');
SetRun;
TSF := getSystemTime();
repeat
wait(10);
if findBank(dx, dy) then
begin
dd := distance(MMCX, MMCY, dx+20, dy+42);
status('Distance to destination - '+inttostr(dd));
if dd <= 15 then Break;
end;
until (GetSystemTime()-TSF > 20000) (*or (not IsMoving) and (not findcolor(x, y, 255, 555, 33, 701, 185))*);
mFlag;
Status('Stopped');
end;

if FindShop(x, y) then
begin
Writeln('Shop found *click*');
click(x, y, true);
mFlag;
//Wait(500);
Result := AtShop;
if Result then Break;
end;
inc(F);
Wait(1000);
until (F = 30);
if not Result then begin
writeln('Could not find way to shop') ;
Terminate;
end else writeln('Arrived at shop');
end;

Function toBank() : boolean;
var x, y, F : integer;
begin
if not LoggedIn then Exit;

if not BankCalibrate then if AtBank then Exit;
BankCalibrate := false;

Writeln('Going to bank');

repeat
if AtShop and FindShop(x, y) then
begin
Writeln('Click to bank based on shop location');
MMove(x + 23, y - 42);
wait(50+random(50));
Click(x + 23, y - 42, true); //from shop
mFlag;
wait(500);
end;
if FindBank(x, y) then
begin
Writeln('Bankhouse found *click*');
click(x, y, true);
wait(2000);
mFlag;
Wait(500);
Result := AtBank;
if Result then Break;
end;
inc(F);
wait(1000);
until (F = 60);
if not Result then begin
writeln('Could not find way to bank') ;
Terminate;
end else writeln('Arrived at Bank');
end;

procedure Store();
var x, y, c, rx, ry, dx, dy : integer;
b : boolean;
begin
if not LoggedIn then Exit;
C := InvCount();
if runes then C := C - (length(p) + 1);
incEx(essmined, C);
while ((FindColor(rx, ry, 0, 569, 239, 729, 490) and (Runes = False)) or FindDTM(Ess, dx, dy, 569, 239, 729, 493)) do
begin
//writeln(inttostr(dx)+', '+inttostr(dy)+' : '+inttostr(rx)+', '+inttostr(ry));
if (rx + ry > 0) and (Runes = False) then
begin x := rx; y := ry; end
else if( dx + dy > 0) then
begin x := dx; y := dy; end;

Click(x, y, false);
wait(100);

rx := 0; ry := 0 dx := 0; dy := 0;

if FindDtm(StoreTxt, x, y, 550, 279, 735, 491) then
begin
Click(x, y, true);
wait(1000);
b := true;
end else mMove(random(600), random(400));
end;
if b then
begin
writeln('Stored some stuff at bank');
end;
end;

function BankOpen : boolean;
begin
Result := similarColors(getColor(189, 65), 2070783, 10);
end;

procedure Bank;
var x, y, F, BF : integer;
begin
if not LoggedIn then Exit;
repeat
Writeln('Looking for banker')
if mFindObj(x, y, BankBooth, BankText, 10, 10) then
begin
Writeln('BankBooth found!');
wait(300);
Click(x, y, true);
mFlag;
BF := 0;
repeat
if BankOpen then //bank booth open
begin
Writeln('Bank opened');
wait(100);
Store();
Exit;
end;
wait(100);
Inc(BF)
until (BF = 20)
end;
wait(1000);
inc(F);
Writeln('Bank booth hard to find, calibrating..');
BankCalibrate := true;
toBank();
until (F = 10);
end;

function moneyError : boolean; forward;

procedure Buy(x, y : integer);
var F : integer;
begin
repeat
inc(F);
//wait(100);
click(x, y, false);
//wait(100);
click(x, y + 85, true);
// writeln(inttostr(CountColorTolerance(65535, x-20, y-20, x, y, 5)));
until (F=100) or (MoneyError) or (CountColorTolerance(65535, x-20, y-20, x, y, 5) <= 20);
end;

function shopopen : boolean;
begin
Result := similarcolors(getColor(231, 62), 1612543, 2);
//writeln(booltostr(result));
end;

function closeShop: boolean;
var F : integer;
begin
if not ShopOpen then Exit;
Click(452, 68, true);
repeat
Inc(F);
Wait(100);
until(not ShopOpen) or (F = 100);
if F = 100 then CloseShop;
Result := not ShopOpen;
end;

function OpenShop() : boolean;
var x, y, F, SF : integer;
begin
if ShopOpen then
begin
Result := true;
exit;
end;
repeat
x := random(516);
y := random(365);
if FindColorSpiralTolerance(x, y, Aubury, 9, 34, 516, 365, 5) then
mMove(x, y);
if mIsUpText('Aubury') then
begin
Click(x, y, false);
wait(300);
if FindDTM(trade, x, y, 6, 34, 515, 364) then
begin
Click(x, y, true);
wait(1000);
SF := 0;
repeat
wait(100);
inc(SF);
if ShopOpen then
begin
wait(100);
Result := True;
Exit;
end;
until SF = 50;
end else mMove(random(600), random(400));
end;
wait(100);
inc(F);
until (F = 300);
end;

function TeleToMine() : boolean;
var x, y, F, TF, WF : integer;
begin
if not LoggedIn then Exit;
writeln('Trying to find Aubury..')
repeat
x := random(516);
y := random(365);
if MFindObj(x, y, Aubury, 0{AuburyText}, 10, 10) then
begin
writeln('Aubury found');
Click(x, y, false);
wait(300);
if FindDTM(teleport, x, y, 6, 34, 515, 364) then
begin
wait(100);
Click(x + 30, y - 5, true);
WF := 0;
repeat
wait(100);
if(getColor(206, 392) = 8650752) then
begin
mMove(251, 425);
Click(251, 425, true);
writeln('Teleporting to Mine');
wait(2000);
TF := 0;
repeat
wait(100);
inc(TF);
Result := AtEssMine;
until (Result) or (TF = 50)
end;
Inc(WF);
until (Result) or (WF = 30)

end else mMove(random(600), random(400));
end;
if not Result then Result := AtEssMine;
if (F >= 5) and (F mod 5 = 0) and (not Result) then
begin
Writeln('Aubury hard to find, calibrating..');
ShopCalibrate := true;
toShop();
end;
inc(F);
wait(200);
until (F = 30) or (Result);
if not Result then
begin
writeln('Could not find Aubury');
Terminate;
end;
end;

Function TeleToShop() : boolean;
var x, y, F, TF : integer;
begin
if not LoggedIn then Exit;
if not AtEssMine then Exit;
Writeln('Looking for portal');
repeat
if FindDtm(PortalMM, x, y, mmx1, mmy1, mmx2, mmy2) and (distance(MMCX, MMCY, x, y) > 15) then
begin
writeln('PortalMM found *click*');
click(x, y, true);
mFlag;
Wait(500);
end else writeln('PortalMM not found');
//if FindDtm(PortalMM, x, y, mmx1, mmy1, mmx2, mmy2) and (Distance(x, y, MMCX, MMCY) < 15) then
if MFindObj(x, y, Portal, 0, 10, 10) then
begin
click(x, y, true);
writeln('Teleporting to shop');
mFlag();
Wait(1000);
TF := 0;
repeat
wait(100);
inc(TF);
Result := FindShop(x, y);
until(Result) or (TF = 50)
end;

if not Result then Result := FindShop(x, y);
inc(F);
wait(100);
until (F = 60) or (Result) or (not LoggedIn);
if not Result then begin
writeln('Could not find way out from mine') ;
Terminate;
end;
end;

function Mine() : boolean;
var F, x, y : integer;
begin
if not AtEssMine or not LoggedIn then Exit;
EssCount := InvCount();
if (EssCount > EssCountLast) and
(similarColors(getColor(508, 480), 1582121, 10)){no new level message, blocks reading chat} then
begin
GF := 0;
EssCountLast := EssCount;
wait(400);
Status(inttostr(28 - EssCount) + ' more to go');
wait(600);
Exit;
end;
repeat
if FindDTM(EssHill, x, y, msx1, msy1, msx2, msy2) then
begin
mMove(x, y);
wait(100);
if mIsUpText('...') then
begin
GF := 0;
Result := true;
EssCountLast := InvCount();
Click(x, y, True);
Status('Mining...');
wait(2000);
end;
end;
Inc(F);
wait(500);
until (F = 10) or (Result);
if (not Result) then inc(GF);
end;


function PickaxeError : boolean;
var x, y : integer;
begin
result := findDtm(nopickaxe, x, y, 13, 375, 497, 487);
if Result then writeln('We dont have pickaxe :(') ;
end;

function moneyError : boolean;
var x, y : integer;
begin
Result := FindDtm(nocoins, x, y, 13, 375, 497, 487);
end;

procedure SetRun;
begin
if SimilarColors(getColor(719, 139), 10860221, 10) then
begin
Click(712, 512, true);
wait(300);
if(not similarColors(getColor(628, 287), 2698372, 30)) then
begin
wait(300);
Click(628, 296, true);
end;
Inv();
end;
end;

function isNorth : boolean;
begin
Result := (getColor(533, 50) = 527516) and
(getColor(547, 63) = 527516) and
(getColor(561, 49) = 527516);
end;

procedure SetNorth;
var TPA : TPointArray;
x, y : integer;
k : byte;
F : LongInt;
begin
if not LoggedIn or isNorth then Exit;
SendArrowWait(0, 1000);
repeat
FindColorsTolerance(TPA, 11866120, 536, 42, 559, 61, 40);
MiddleTPAEx(TPA, x, y);
if(x >= 547) then k := VK_Right else k := VK_Left;
KeyDown(k);
F := getSystemTime;
repeat
if isNorth then break;
wait(10);
until (GetSystemTime - F > 10000);
KeyUp(k);
wait(500);
until (isNorth) or (not LoggedIn);
end;

procedure Proggy;
var H, M, S: Integer;
begin
ClearReport;
ClearDebug;
ConvertTime(GetTimeRunning(), H, M, S);
AddToReport('------ '+IntToStr(H)+' H '+IntToStr(M)+' min '+IntToStr(S)+' s ------');
AddToReport('------ Banked ~'+inttostr(essmined)+' ess ------');
AddToReport('------ Responded: ~'+inttostr(responded)+' ------');
end;

var i, j : integer;

begin
load();
ActivateClient;
Wait(1000);
t := getSystemTime();
runes := BuyRunes;
SetNorth;
repeat
if AtBank and mInvFull then
begin
Bank;
end;

Proggy;
Autorespond();
if not atEssMine then
begin
ToShop;
Autorespond();
if (Runes = true) and (not mInvFull) then
if OpenShop then
begin
for j := 1 to 1 do
for i := 0 to high(p) do
begin
wait(200);
Buy(p[i].x, p[i].y);
if(MoneyError) then
begin
runes := false;
writeln('We''re out of money :(')
break;
end;
end;
CloseShop;
Autorespond();
end;
TeleToMine;
end;

writeln('Going to fill bag with rune essence')
EssCount := 0;
EssCountLast := 0;
repeat

Mine();
Autorespond();

if PickAxeError then Terminate;

if (mInvFull) then
begin
writeln('Inventory full, back to bank');
break;
end;

if (GF = 3) then
begin
writeln('Didn''t find any rune ess to mine :(');
break;
end;

Wait(100);

until (not LoggedIn);

TeleToShop;
Autorespond();
if mInvFull then ToBank;
Autorespond();

until (not loggedIn);
Terminate;
end.

lol. Thats my script.

Anybody helpful, please don't waste your time making in compatible with simba. It's old version, I have newer version somewhere..

Still need scar..