SCAR Code:
(*
noidea's
VWM'er
Mines any ore there
Setup DeclarePlayers, and the constants
Please put all characters in the first slot on the
Left hand side of the bank (Varrock West Bank)
Please put all extra picks in first bank slot, and,
Make sure your character has the mining lvl to use
it
Note: This is not reflection, and does not require SMART
*)
program New;
{.include srl/srl.scar}
const
SRLStatsID = '';
SRLStatsPass = '';
dbug = true;
LoadsB4Switch = 5;
DropGems = False;
procedure declarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := '';
Players[0].active := True;
Players[0].Booleans[0] := True;//Pick weilded?
Players[0].Pin := '0000';//leave if not in use
Players[0].Strings[0] := 'iron';//must be lower case!!!!!!!!!!!!!!!!!!!!!!!!11!!!!!!!!!!!!!!!!!1111111111!!!!!!!!!111!!!11!
//tin, iron, clay, silver
{Players[1].Name := '';
Players[1].Pass := '';
Players[1].Nick := '';
Players[1].active := True;
Players[1].Booleans[0] := False;//Pick weilded?
Players[1].Pin := '0000';//leave if not in use
Players[1].Strings[0] := 'iron';//must be lower case!!!!!!!!!!!!!!!!!!!!!!!!11!!!!!!!!!!!!!!!!!1111111111!!!!!!!!!111!!!11!
//tin, iron, clay, silver }
end;
var
lol, Maxwait, Responds, Bank, BrokenPick, Gem, p, head, stick, Pick: Integer;
Rocks, NewPicks, Gasses, Gems, fightss, headsrepaired, relocates: Integer;
ThePick: String;
Function Bankstuff: Boolean; Forward;
Procedure ToBank; Forward;
function findMMbank:boolean; Forward;
{*****************************************************
function WalkAgainstWhiteWall(s: string; Left: Boolean): Boolean;
By: noidea
Description: Walks along any white wall, north or south,
on the left hand side or the right hand
side of the wall.
True is left, false is right
Use/Example: WalkAgainstWhiteWall('s', True);
if WalkAgainstWhiteWall('s', True) then ...
*****************************************************}
function WalkAgainstWhiteWall(s: string; Left: Boolean): Boolean;
Label rawr;
var
t, cts, x, y, h, w, m, I, f, p, pp : Integer;
TPA : TPointArray;
ATPA : Array of TPointArray;
kk : Boolean;
begin
if not loggedin then exit;
MakeCompass('360');
cts := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(7.28, 12.9);
Case LowerCase(s) Of
'n': t := -60;
's': t := 60;
end;
FindColorsSpiralTolerance(MMCX, MMCY + T, TPA, 15726570, mmcx-40, MMY1, mmcx+40, MMY2, 12);
ColorToleranceSpeed(CTS);
ATPA := TPAToATPAEx(TPA, 1, 1);
For I := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[i], x, y);
mmouse(x,y,0,0);
wait(200);
getmousepos(x,y);
p := Getcolor(x, y);
getmousepos(h,w);
for pp := 0 to 4 do
if (getcolor(x, y + pp) = 65536)then
begin
wait(1000+random(1000));
WalkAgainstWhiteWall(s, Left);
exit;
end;
for pp := 0 to 4 do
if (getcolor(x, y - pp) = 65536)then
begin
wait(1000+random(1000));
WalkAgainstWhiteWall(s, Left);
exit;
end;
wait(200);
if (getcolor(x, y) = p)then
begin
Goto Rawr
end;
if not (getcolor(x, y) = p)then
begin
for f := 0 to 4 do
begin
mmouse(h,w,0,0);
try
mmouse(x-f,y+f,0,0);
wait(200);
getmousepos(x,y);
if(getcolor(x, y) = p)then
begin
KK := True;
getmousepos(x,y);
break;
end;
except
begin
mmouse(x+f,y-f,0,0);
wait(200);
getmousepos(x,y);
if(getcolor(x, y) = p)then
begin
kk := True;
getmousepos(x,y);
break;
end;
end;
end;
end;
if (kk) then goto rawr;
rawr:
begin
getmousepos(x, y);
if (getcolor(x, y) = p)then
begin
Case Left of
True: m := -9;
False: m := 8
end;
mmouse(x + m, y, 0, 0);
getmousepos(x, y);
if not(getcolor(x, y) = p) then
begin
mff(x, y, 4, 3);
wait(randomRange(400, 500));
flag;
Result := True;
exit;
end;
end;
end;
end;
end;
end;
{*****************************************************
Function CountClay: Integer;
By: noidea
Description: Counts any ore except clay you can mine.
Use/Example: Ore := Ore + CountOre;
writeln(IntToStr(CountOre));
*****************************************************}
Function CountClay: Integer;
var
k, I: Integer;
p : TBox;
begin
if not loggedin then exit;
I := 1
While I < 29 do
begin
GetInvItemBounds(I, p);
if countcolor(65536, p.x1, p.y1, p.x1+34, p.y1+27) = 64 then
inc(k);
inc(I);
end;
Result := k;
end;
{*****************************************************
Function CountOre: Integer;
By: noidea
Description: Counts any ore except clay you can mine.
Use/Example: Ore := Ore + CountOre;
writeln(IntToStr(CountOre));
*****************************************************}
Function CountOre: Integer;
var
k, I: Integer;
p : TBox;
begin
if not loggedin then exit;
I := 1
While I < 29 do
begin
GetInvItemBounds(I, p);
if countcolor(65536, p.x1, p.y1, p.x1+34, p.y1+27) = 171 then
inc(k);
inc(I);
end;
Result := k;
end;
{*****************************************************
Function CountGems: Integer;
By: noidea
Description: Counts any ore except clay you can mine.
Use/Example: Ore := Ore + CountOre;
writeln(IntToStr(CountGems));
*****************************************************}
Function CountGems: Integer;
var
k, I: Integer;
p : TBox;
begin
if not loggedin then exit;
I := 1
While I < 29 do
begin
GetInvItemBounds(I, p);
if countcolor(65536, p.x1, p.y1, p.x1+34, p.y1+27) = 66 then
inc(k);
inc(I);
end;
Result := k;
end;
Procedure SafeFlag;
var
Mark: Integer;
begin
if not loggedin then exit;
MarkTime(Mark);
While FlagPresent do
begin
wait(70)
if (TimeFromMark(Mark) > 4000)then break;
end;
end;
Procedure KeepPlayer;
begin
Logout;
Players[CurrentPlayer].active := True;
end;
Procedure KillPlayer;
begin
Logout;
Players[CurrentPlayer].Active := False;
end;
Function FindCross(var x, y: Integer) : Boolean;
begin
result := FindColor(x, y, FindLadderColor, MMX1 + 60, MMY1 + 35, MMX2 - 30 , MMY2 - 30);
end;
Function FindLadderNearBank(var x, y: Integer): Boolean;
begin
result := FindColor(x, y, FindLadderColor, mmx1 + 35, mmy1 + 75, mmx2- 35, mmy2- 15);
end;
function SetDDTM: Integer;
var
dtmMainPoint: TDTMPointDef;
dtmSubPoints: Array [0..4] of TDTMPointDef;
TempTDTM: TDTM;
begin
if not loggedin then exit;
dtmMainPoint.x := 580;
dtmMainPoint.y := 116;
dtmMainPoint.AreaSize := 4;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := FindVarrockRoadColor;
dtmMainPoint.Tolerance := 0;
dtmSubPoints[0].x := 580;
dtmSubPoints[0].y := 116;
dtmSubPoints[0].AreaSize := 2;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := FindVarrockRoadColor;
dtmSubPoints[0].Tolerance := 0;
dtmSubPoints[1].x := 575;
dtmSubPoints[1].y := 71;
dtmSubPoints[1].AreaSize := 2;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := FindVarrockRoadColor;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 612;
dtmSubPoints[2].y := 121;
dtmSubPoints[2].AreaSize := 2;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := FindVarrockRoadColor;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 562;
dtmSubPoints[3].y := 121;
dtmSubPoints[3].AreaSize := 2;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := FindVarrockRoadColor;
dtmSubPoints[3].Tolerance := 0;
dtmSubPoints[4].x := 558;
dtmSubPoints[4].y := 98;
dtmSubPoints[4].AreaSize := 2;
dtmSubPoints[4].AreaShape := 0;
dtmSubPoints[4].Color := FindVarrockRoadColor;
dtmSubPoints[4].Tolerance := 0;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
Procedure LoadDTMs;
begin
Bank := DTMFromString('78DA63F4656260A86400036608C5505556C8F' +
'01F483302F17F20607402AA0984C83121A9E187AA0101C66CA04C' +
'210135F6409966026AAC803259F8D50000D3F50FD7');
BrokenPick := DTMFromString('78DA63DCC1C4C0D0C7C8800CF4155819FE036' +
'990E87F2060DC0E54D382AA06220B2381F45EA09A26026A8E03D5' +
'741150B31FA8A68D809A0D403573F0AB01008EF90D15');
{BrokenPick := DTMFromString('78DA634C67626078CA8002F415D818FE03694' +
'620FE0F048C494035B718D000231209A4AB816AEE135093075473' +
'8D809A12A09ABB04D42403D57CC2AF060098D10D3A');}
Gem := DTMFromString('78DA63346766604860644006B3A64E65F80FA' +
'441A2FF8180D10AA8261C550D44164602697DA09A0C026A1C806A' +
'3209A8D103AA8920A04617A82691801A47C26A003CD10B0E');
head := DTMFromString('78DA637465626078C280022CBD4318FE03694' +
'620FE0F048C164035CF19D000231209A4BD816A6E1150E349A439' +
'0F09A87125AC060093D70CE0');
Stick := DTMFromString('78DA63B465626078CA8002F415D818FE03694' +
'620FE0F048CF64035F718D000231209A46D806ADE1050630154F3' +
'89801A67A09A9B04D4B800D5DCC2AF060022960C39');
Pick := DTMFromString('78DA63B463626078C28002F415D818FE03694' +
'620FE0F048C264035B719D000231209A4FD816A1E1150630954F3' +
'89801A67A09A6BF8D500006B430B0F');
end;
Procedure FreeDTMS;
begin
FreeDTM(Bank);
FreeDTM(BrokenPick);
FreeDTM(Gem);
FreeDTM(Head);
FreeDTM(Stick);
FreeDTM(Pick);
end;
Procedure nDbug(s: String);
begin
if dbug then writeln(s);
end;
Function Relocate( p : Integer ): Boolean;
var
x, y: Integer;
Label Cook;
begin
case p of
1:
begin
ndbug('Crap, we are lost while walking');
ndbug('Attempting to relocate. (In Mine)');
If FindSymbol(x, y, 'Quest')then
begin
MFF(x, y - 10, 5 , 5);
Flag;
end;
If FindSymbol(x, y, 'mining spot')then
begin
mff(x + 6, y, 2, 2);
flag;
ToBank;
if BankStuff then
begin
result := True;
inc(Relocates);
KeepPlayer;
Writeln('Succesessfully Relocated!');
exit;
end;
Writeln('Failed at Relocating!');
Writeln('Player lost!');
end;
end;
2:
begin
Cook:
begin
if FindSymbol(x, y, 'cook')then
begin
mff(x + 62, y - 20, 4, 4);
flag;
if FindCross(x,y)then
begin
mouse(x , y - 20, 3, 3, true);
flag;
end else radialRoadWalk(FindVarrockRoadColor, 5, 10, 50, 1, -1);
flag;
if findMMbank then
begin
ndbug('Walked into bank');
if BankStuff then
begin
KeepPlayer;
inc(Relocates);
exit;
end;
end else
begin
if DTMRotated(Bank, x, y, MMX1, MMY1, MMX2, MMY2)then
begin
mouse(x, y + 5, 2, 2, true);
flag;
nDbug('Used fail safe');
end else
begin
KillPlayer;
exit;
end;
end;
end;
end;
if FindColor(x, y, FindRockColor, MMX1, MMY1, MMX2, MMY2)then
begin
mff(x, y, 4, 4);
flag;
goto Cook;
end;
If FindSymbol(x, y, 'anvil')or FindSymbol(x, y, 'guide')then
begin
mff(x, y, 4, 4);
flag;
if FindMMbank then
begin
writeln('Made way back to bank!');
if BankStuff then
begin
result := true;
inc(Relocates);
KeepPlayer;
exit;
end;
end;
Writeln('Failed at relocating!');
end;
end;
end;
Writeln('Fudge Player is lost');
end;
function findMMbank:boolean;
var
i,x2,bankers, x, y:integer;
begin
if not loggedin then exit;
bankers:=DTMFromString('78DA635CCDC4C0B096010C182114C39F3F4C7' +
'0FE7F206004A9598A5B0D9806A9D98A5F0D0073770E02');
for i:=1 to 8 do
begin
x2:=mmx1+round((mmx2-mmx1)*(i/8));
if DTMrotated(bankers,x,y,mmx1,mmy1,x2,mmy2) then
begin
if mfnf(x+7,y,2,1) then
begin
fflag(0);
result:=true;
break;
end;
end;
end;
freeDTM(bankers);
end;
Procedure ToMine;
var
TheX, TheY,x, y, k: Integer;
gh: Boolean;
begin
if not loggedin then exit;
lol := SetDDTM;
if DTMRotated(lol, x, y, MMX1, MMY1 + 60, mmx2- 60, MMY2)then
begin
mouse(x+ 6, y+ 6, 3, 3, true);
flag;
nDbug('Found DTM');
end else RadialRoadWalk(FindVarrockRoadColor, 225, 220, 50, 1, 1);
flag;
FreeDTM(LOL);
If FindLadderNearBank(x, y) then
begin
mouse(x - 15, y , 4, 4, true);
wait(200);
flag;
end else
begin
If not relocate(2) then
begin
killPlayer;
end;
end;
Flag;
For k := 0 to 1 do
WalkAgainstWhiteWall('s', True);
if FindCross( x, y ) then
begin
writeln('found');
gh := True;
mouse( x, y + 40, 2, 2, true );
wait(200);
flag;
end else
begin
writeln('didnt find ladder first time');
if not WalkAgainstWhiteWall('s', True) then
if not relocate(2) then
begin
KillPlayer;
exit;
end;
end;
K := 0;
repeat
if(FindColor(x, y, FindStoneColor, MMX1, MMY1 {+ 70}, MMX2, MMY2))then
begin
mouse(x, y - 1, 3, 3, true);
wait(200);
Flag;
gh := True;
end else
begin
WalkAgainstWhiteWall('s', True);
gh := False;
inc(K);
end;
until gh or (k > 4);
if( k > 4 )then
begin
if not relocate(2) then
begin
ndbug('Lost');
KillPlayer;
exit;
end;
end;
case LowerCase(Players[CurrentPlayer].strings[0]) of
'tin':
begin
TheX := -30;
TheY := 17;
end;
'clay':
begin
TheX := -30;
TheY := 30;
end;
'iron':
begin
TheX := -30;
They := 50;
end;
'silver':
begin
TheX := -30;
They := 50;
end;
end;
If not FindSymbol(x, y, 'mining site')then
begin
if(FindColor(x, y, FindStoneColor, MMX1, MMY1 {+ 70}, MMX2, MMY2))then
begin
mouse(x, y, 3, 3, true);
wait(200);
Flag;
end else
begin
if not relocate(2) then
KillPlayer;
end;
end;
ndbug('Found Mining symbol, continuing');
if findColor(x, y, FindStoneColor, MMCX + TheX, MMCY + TheY, MMX2, MMY2)then
begin
mouse(x,y ,3, 3, true)
flag;
end else
if not relocate(1) then
begin
KillPlayer;
exit;
end;
end;
Procedure ToBank;
var
x, y, i: Integer;
begin
if not loggedin then exit;
SetRun(False);
if FindColor(x, y, FindStoneColor, MMX1, MMY1, MMX2, MMY2)then
begin
mouse(x, y, 0, 0, true);
flag;
end else
begin
ndbug('didnt find the stone');
if not WalkAgainstWhiteWall('n', True)then
if not relocate(1) then
begin
killPlayer;
end;
end;
WalkAgainstWhiteWall('n', True);
If FindCross(x, y)then
begin
mouse(x - 25, y, 0, 0, true);
flag;
end else
begin
ndbug('Couldnt find ladder');
if not WalkAgainstWhiteWall('n', True) then
if not relocate(1) then
begin
KillPlayer;
exit;
end;
end;
WalkAgainstWhiteWall('n', True);
if FindCross(x,y)then
begin
mouse(x , y - 20, 3, 3, true);
flag;
end else radialRoadWalk(FindVarrockRoadColor, 5, 10, 50, 1, -1);
flag;
if findMMbank then
begin
ndbug('Walked into bank');
exit;
end else
begin
if DTMRotated(Bank, x, y, MMX1, MMY1, MMX2, MMY2)then
begin
mouse(x, y + 5, 2, 2, true);
flag;
nDbug('Used fail safe');
end else
begin
KillPlayer;
exit;
end;
end;
end;
Function FindVWB(var Cords: Tpoint): Boolean; Forward;
Procedure NewPick;
var
i,x, y, a: Integer;
k: Tpoint;
begin
if not loggedin then exit;
if Players[CurrentPlayer].booleans[0]then
begin
Gametab(5);
mmouse(583, 299, 10, 10);
wait(100+random(100));
if isuptext('oken')then
begin
Getmousepos(x, y);
mouse(x, y, 0, 0, true);
gametab(4);
end else ndbug('Was not pick weiled!');
end;
For i := 1 to 28 do
begin
mmouseItem(i);
wait(100+random(100));
if isuptext('oken')then
begin
Getmousepos(x, y);
holdmouse(x, y, true);
wait(100+random(100));
mmouseitem(1);
wait(100+random(100));
getmousepos(x, y);
releasemouse(x, y, true);
break;
end;
end;
flag;
wait(200);
if FindVWB(k) then
begin
nDbug('Using noidea''s openbank!');
if pinscreen then
inpin(Players[CurrentPlayer].pin);
if bankscreen then
begin
depositall;
MouseBox(39, 93, 66, 121, 3);
wait(100+random(100));
if isuptext('ickax')then
begin
getmousepos(x, y);
mouse(x, y, 0, 0 ,true);
end else
begin
ndbug('No more picks for the player, it''s false now');
closebank;
KillPlayer;
exit;
end;
closebank;
if Players[CurrentPlayer].booleans[0] then
begin
MMouseItem(1);
wait(100+random(100));
if isuptext('ickax')then
begin
getmousepos(x, y);
mouse(x, y, 0 , 0, true);
end else
begin
ndbug('Pick wasnt in first inv spot, i give up');
ndbug('Next Player');
killplayer;
exit;
end;
end;
end;
end;
end;
{-------------------------------}
{ MasterKill's Responder- Start }
{-------------------------------}
var
HowManyResponds: Integer;
TheQuestion, TheRespond: array of array of String;
Procedure SetupResponds;
begin
HowManyResponds := 2;
SetArrayLength(TheQuestion, HowManyResponds); SetArrayLength(TheRespond, HowManyResponds);
TheQuestion[0] := ['noob'];
TheRespond[0] := ['Im not a noob!', 'your the noob', 'look in the mirror', 'noob noob', 'no way noob', 'your more noob', 'whoes noob?'];
TheQuestion[1] := ['respond'];
TheRespond[1] := ['what to say?', 'i dont have anything to say', 'no im bussy'];
end;
{*******************************************************************************
function GetBlackText(ChatLine: Integer): string;
By: ZephyrsFury based on the works of Wizzup?
Description: Gets the black message text on ChatLine (1 to 8).
*******************************************************************************}
function GetBlackText(ChatLine: Integer): string;
var
TP: TPoint;
begin
TP := TextCoords(ChatLine);
Result := Trim(GetTextAtEx(TP.x - 2, TP.y - 2, 0, SmallChars, False, False, 0,
1, 0, 80, False, tr_AllChars));
end;
Function AutoRespond : Boolean; //Ty MK for the Responder
var
Text, Name, MakeRespond, LastRespond : String;
x, y, I, II, Rand, CurTime, SetTime : Integer;
Awnser : TStringArray;
TextP : TPoint;
begin
if not loggedin then exit;
CurTime := GetSystemTime;
If (CurTime - SetTime < 20000) Then Exit;
For I := 8 DownTo 4 Do
Begin
TextP := TextCoords(I);
If findcolor(x, y, 16711680, TextP.x, TextP.y, TextP.x + 200, TextP.y + 14) Then
Begin
Text := LowerCase(Trim(GetTextAtEx(x - 3, textp.y - 2, 0, SmallChars, False, False, -1, 1, 16711680, 60, False, tr_allChars)));
If (Text = LastRespond) Then
Exit;
LastRespond := Text;
Name := GetBlackText(I);
If (Pos(Players[CurrentPlayer].nick, Name) <> 0) then Exit;
Break;
End;
If (I = 4) Then Exit;
End;
If (Pos(Players[CurrentPlayer].Nick, Text) <> 0) Then
Begin
If (Pos('nice', Text) <> 0) Or (Pos('cool', Text) <> 0) Then
Begin
Awnser := ['thanks', ':)', 'tnx', 'ur cool to'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('friends', Text) <> 0) Then
Begin
Awnser := ['no', 'no way', 'sorry my list is full', 'no sorry'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('macro', Text) <> 0) Or (Pos('bot', Text) <> 0) Or (Pos('auto', Text) <> 0) Then
Begin
Awnser := ['lol im not!', 'why?', 'no way', 'not me', 'dream on', 'nah'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
Begin
Awnser := ['no, im bussy', 'go away plz', 'leave me alone', 'im bussy'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End;
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
TypeSend(MakeRespond);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + MakeRespond);
Responds := Responds + 1;
Result := True;
SetTime := GetSystemTime;
exit;
End;
If (Pos('mining', Text) <> 0) Then
Begin
If (Pos('my mining level is', Text) <> 0) Or (Pos('m mining ore', Text) <> 0) Then
Begin
Awnser := ['gratz', ':)', 'kewl', 'cool'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('what is your level in mining', Text) <> 0) Then
Begin
Awnser := [IntToStr(GetSkillLevel('mining')), 'me ' + IntToStr(GetSkillLevel('mining')), 'My Mining level is '+ IntToStr(Players[CurrentPlayer].integers[1]) + '.'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('what ore are you mining', Text) <> 0) Then
Begin
Awnser := [Players[CurrentPlayer].Strings[0]];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('s a good place for me', Text) <> 0) Then
Begin
Awnser := ['here', 'what about here', 'here i guess', 'here?'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
Begin
Awnser := [IntToStr(GetSkillLevel('mining')), 'me ' + IntToStr(GetSkillLevel('mining')), 'My Mining level is '+ IntToStr(GetSkillLevel('mining')) + '.'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End;
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
TypeSend(MakeRespond);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + MakeRespond);
Responds := Responds + 1;
Result := True;
SetTime := GetSystemTime;
exit;
End;
For I := 0 To HowManyResponds - 1 Do
begin
For II := 0 To High(TheQuestion[I]) Do
Begin
If (Pos(TheQuestion[I][II], Text) <> 0) then
begin
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
Rand := Random(High(TheRespond[I]));
TypeSend(TheRespond[I][Rand]);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + TheRespond[I][Rand]);
Result := True;
SetTime := GetSystemTime;
exit;
end;
end;
end;
end;
{--------------------------------------------------------------------}
{*******************************************************************************
function FindGas(gx, gy: Integer): Boolean;
By: Nielsie95 and Sumilion
Description: gx, gy are the coordinates of the found ore color
*******************************************************************************}
function FindGas(gx, gy: Integer): Boolean;
var
arP: TPointArray;
c: TIntegerArray;
i, l, t, m, r, g, b, x, y: Integer;
Bounds: TBox;
P: TPoint;
begin
if not loggedin then exit;
if not InRange(gx, MSX1, MSX2) or not InRange(gy, MSY1, MSY2) then
Exit;
ColorToleranceSpeed(2);
t := 0;
m := 0;
SetColorspeed2Modifiers(0.13, 0.77);
if not FindColorTolerance(x, y, 10070706, gx - 30, gy - 30, gx + 30, gy + 30, 9) then
begin
ColorToleranceSpeed(1);
SetColorspeed2Modifiers(0.2, 0.2);
Exit;
end;
FindColorsTolerance(arP, 5335923, 3, 3, 515, 336, 6);
while True do
begin
if (Length(arP) < 3) then Break;
Bounds := GetTPABounds(arP);
SetColorspeed2Modifiers(0.1, 0.4);
FindColorsTolerance(arP, 7244690, Max(Bounds.x1 - 15, 0), Max(Bounds.y1 - 15, 0), Min(Bounds.x2 + 15, 515), Min(Bounds.y2 + 35, 336), 20);
if (Length(arP) < 65) then Break;
c := GetColors(arP);
l := High(c);
for i := 0 to l do
begin
ColorToRGB(c[i], r, g, b);
m := m + r + g + b;
end;
m := (m / (l + 1)) / 3;
for i := 0 to l do
begin
ColorToRGB(c[i], r, g, b);
r := iAbs(m - (r + b + g) / 3);
if (r < 15) then
Inc(t);
end;
Result := ((t / l * 1.0) < 0.85) and (Extended(t / l * 1.0) > 0.15);
if Result then
begin
P := MiddleTPA(arP);
Result := (Distance(P.x, P.y, MSCX, MSCY) < 80);
end;
Break;
end;
ColorToleranceSpeed(1);
SetColorspeed2Modifiers(0.2, 0.2);
end;
function GasFinder(GX, GY : Integer): Boolean; //Thanks Wizzup!
Var
x1, y1, x2, y2, I, time, c: Integer;
R, G, B: Integer;
H, S, L: ExtEnded;
X, Y, Z: ExtEnded;
Gas, Gas2: TPointArray;
Colors, C2: TIntegerArray;
begin
if not loggedin then exit;
Try
x1 := gx - 35;
If x1 < 0 Then
x1 := 0;
y1 := gy - 35;
If y1 < 0 Then
y1 := 0;
x2 := gx + 35;
If x2 > 515 Then
x2 := 515;
y2 := gy + 35;
If y2 > 336 Then
y2 := 336;
Time := GetSystemTime;
Result := False;
c := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2ModIfiers(0.2, 0.2);
FindColorsTolerance(Gas, 8886170, x1, y1, x2, y2, 20);
ColorToleranceSpeed(c);
If length(Gas) < 10 Then
Exit;
Colors := GetColors(Gas);
C2 := Colors;
ClearSameIntegers(C2);
// writeln('Colors Length: ' + inttostr(length(colors)));
// writeln('C2 Length: ' + inttostr(length(C2)));
If Length(C2) < 40 Then
Exit;
For I := 0 To High(Gas) Do
Begin
ColorToRGB(Colors[I], R, G, B);
If Abs(R - G) <= 10.0 Then
Begin
ColorToHSL(Colors[I], H, S, L);
If (H > 11.5) And (H < 16.0) And (S < 12.0) Then
Begin
ColorToXYZ(Colors[I], X, Y, Z);
If (Abs(X - Y) < 5.0) And (Abs(X - Z) < 5.0) And (Abs(Y - Z) < 5.0) Then
Begin
SetLength(Gas2, Length(Gas2) + 1);
Gas2[High(Gas2)] := Gas[I];
End;
End;
End;
End;
//WriteLn('time: ' + IntToStr(GetSystemTime - Time));
//WriteLn('gas2 length: ' + IntToStr(Length(Gas2)));
Result := (Length(Gas2) > 30); // The only number you might want to tweak.
//debugtpa(Gas2, '');
if result then
begin
SaveScreenshot(ScriptPath + 'Found WIZZUP gas ' + TimeRunning + '.bmp')
Exit;
end;
//debugtpa(gas2, '');
Except WriteLn('No window selected'); end;
End;
{----------------------------}
{ Find Gas Procedure! }
{----------------------------}
Procedure DetectGas;
var
x, y: Integer;
Begin
if not loggedin then exit;
If GasFinder(x, y) or FindGas(x, y) then
begin
inc(gasses);
MouseFlag(MMCX + 5, MMCY+5, 5, 5, 0);
SleepAndMoveMouse(7000 + Random(300));
end;
end;
Function FindPick: Boolean;
var
x, y: Integer;
begin
if not loggedin then exit;
GameTab(4);
Wait(100+Random(200));
if not FindDTM(Pick, x, y, mix1, miy1, mix2, miy2) then
begin
GameTab(5);
Wait(100+random(300));
if not FindDTM(Pick, x, y, mix1, miy1, mix2, miy2) then
begin
Result:=False;
Exit;
end else
begin
Result:=True;
Exit;
end;
end else
Result:=True;
end;
Function FindRock(s: String; var Cord: TPoint): Boolean;
Var
CTS, I: Integer;
TheTPA: TPointArray;
ATPA: Array of TPointArray;
Options: TVariantArray;
begin
if not loggedin then exit;
case Lowercase(s) of
'tin': Options := ([ 0.14, 0.13, 8553100, 11 ]);
'clay': Options := ([ 0.01, 1.58, 5544639, 11 ]);
'iron': Options := ([ 0.01, 0.07, 2832734, 15 ]);
'silver': Options := ([ 0.10, 0.57, 9546935, 5 ]);
end;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Options[0], Options[1]);
FindColorsSpiralTolerance(MSCX, MSCY, TheTPA, Options[2] , MSX1, MSY1, MSX2, MSY2, Options[3]);
ColorToleranceSpeed(CTS);
ATPA := TPAToATPAEx(TheTPA, 8, 8);
For I := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[i], Cord.x, Cord.y);
if (Distance(mscx, mscy, Cord.x, Cord.y) > 229) then exit;
MMouse(Cord.x, Cord.y, 3, 3);
wait(100+random(100));
FindNormalRandoms;
DetectGas;
If(IsUpTextMultiCustom(['Mine', 'Min', 'ine', 'Rock', 'ock'])) then
begin
Result := True;
GetMousePos(Cord.x, Cord.y);
DetectGas;
Break;
end;
end;
end;
Procedure Randoms;
begin
DetectGas;
FindNormalRandoms;
if findFight then
begin
runaway('e',true,1,5000+random(5000));
inc(fightss);
exit;
end;
DetectGas;
AutoRespond;
end;
Function FindHead(var head: Tpoint): Boolean;
Var
CTS, I: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
Optionz: TVariantArray;
begin //8286806 //7826257
case Lowercase(ThePick) of
'steel': Optionz := ([ 0.25, 0.05, 5855840, 9 ]);
'bronz': Optionz := ([ 0.05, 0.01, 2110788, 9 ]);
'iron': Optionz := ([ 0.12, 0.04, 5263445, 17 ]);
'mith': Optionz := ([ 0.10, 0.02, 5979710, 11 ]);
'rune': Optionz := ([ 0.00, 0.05, 8812891, 13 ]);
'addy': Optionz := ([ 0.10, 0.03, 5136717, 9 ]);
end;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Optionz[0], Optionz[1]);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Optionz[2] , MSX1, MSY1, MSX2, MSY2, Optionz[3]);
ColorToleranceSpeed(CTS);
ATPA := TPAToATPAEx(TPA, 2, 2);
For I := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[i], head.x, head.y);
MMouse(head.x, head.y, 2, 2);
wait(100+random(100));
If(IsUpTextMultiCustom(['ake', 'ick', 'ead'])) then
begin
Result := True;
GetMousePos(head.x, head.y);
Break;
end;
end;
end;
Function LostHead: Boolean;
var
x, y, ct: Integer;
begin
ct := GetCurrentTab;
case Players[CurrentPlayer].Booleans[0] of
True: Gametab(5);
False: Gametab(4);
end;
Result := FindDTM(Stick, x, y, MIX1, MIY1, MIX2, MIY2);
If result then
if GetCurrentTab = 5 then mouse(x, y, 3, 3, true);
Gametab(ct);
end;
Procedure WhileWacking;
var
LastChat1, LastChat0: String;
l: Integer;
head1: Tpoint;
x, y: Integer;
label This;
begin
if not loggedin then exit;
LastChat1 := 'no ore';
LastChat0 := 'anag';
SafeFlag;
SleepAndMoveMouse(1000);
makeCompass('N')
MarkTime(l);
repeat
Randoms;
sleepandMoveMouse(100 * 2);
until (invFull)or FindBlackChatMessage(LastChat0)or FindBlackChatMessage(LastChat1)or(TimeFromMark(l) > MaxWait + Random(2000));
if FindNPCChatText('do not have a', ClickLeft)then
begin
if LostHead then
begin
if FindHead(head1)then
begin
mouse(head1.x, head1.y, 0, 0, false);
Chooseoption('ake');
SafeFlag;
wait(500+random(300));
if Players[CurrentPlayer].Booleans[0]=True then//If the pickaxe
begin //was weilded, then
GameTab(5); //un-equip the stick.
if FindDTM(Stick, x, y, mix1, miy1, mix2, miy2)then
Mouse(X, Y, 2, 2, True);
Wait(500+Random(200));
end;
if FindDTM(Head, x, y, mix1, miy1, mix2, miy2)then
begin
mouse(x, y, 3, 3, true);
if FindDTM(Stick, x, y, MIX1, MIY1, MIX2, MIY2)then
begin
mouse(x, y, 3, 3, true);
inc(headsrepaired);
If Players[CurrentPlayer].Booleans[0] then//Weild the pick.
if FindDTM(Pick, x,y, MIX1, MIY1,MIX2, MIY2)then
mouse(x, y, 4, 4, true);
exit;
end else
begin
FindDTM(Head, x, y, MIX1, MIY1, MIX2, MIY2)
mouse(x, y, 3, 3, true);
end;
end else
begin
ndbug('Didnt find pick head');
goto This;
end;
end else
begin
ndbug('Error: Didn''t find pick head on ground!');
Goto This;
end;
end else Goto This;
This:
if FindPick then
begin
ToBank;
BankStuff;
inc(NewPicks);
NewPick;
Logout;
Players[CurrentPlayer].Active := True;
exit;
end else ndbug('False alarm, no broken picks!');
DwarfItem;
end;
end;
Function FindVWB(var Cords: Tpoint): Boolean;
Var
CTS, I: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
begin
if not loggedin then exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.04, 1.43);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 2180433 , MSX1, MSY1, MSX2, MSY2, 7);
ColorToleranceSpeed(CTS);
ATPA := TPAToATPAEx(TPA, 15, 15);
For I := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[i], Cords.x, Cords.y);
MMouse(Cords.x, Cords.y, 2, 2);
wait(100+random(100));
If(IsUpTextMultiCustom(['Bank', 'ank', 'Boot', 'ooth' ])) then
begin
GetMousePos(Cords.x, Cords.y);
mouse(Cords.x, Cords.y, 0, 0, false);
wait(100);
if not Chooseoption('uickly')then
begin
mouse(Cords.x, Cords.y, 0, 0, false);
wait(100);
ChooseOption('ank');
end;
wait(100);
Flag;
wait(400+random(200));
Result := BankScreen or Pinscreen;
Break;
end;
end;
end;
Function FindGem(var x:Tpoint):boolean;
begin
if not loggedin then exit;
Result := finddtm(Gem,x.x,x.y,MIX1,MIY1,MIX2,MIY2);
end;
Function Bankstuff: Boolean;
var
k: TPoint;
begin
if not loggedin then exit;
flag;
wait(200);
if FindVWB(k) then
begin
nDbug('Using noidea''s openbank!');
if pinscreen then
inpin(Players[CurrentPlayer].pin);
if bankscreen then
begin
ReportVars[0] := ReportVars[0] + CountOre;
ReportVars[0] := ReportVars[0] + CountClay;
ReportVars[1] := ReportVars[1] + CountGems;
Rocks := Rocks + CountOre;
Rocks := Rocks + Countclay;
Gems := Gems + CountGems;
Players[CurrentPlayer].integers[2] := Players[CurrentPlayer].integers[2] + CountGems;
Players[CurrentPlayer].integers[0] := Players[CurrentPlayer].integers[0] + CountOre;
Players[CurrentPlayer].integers[0] := Players[CurrentPlayer].integers[0] + CountClay;
if Players[CurrentPlayer].Booleans[0] then
depositAll else deposit(2, 28, true);
closebank;
Result := True;
end;
end else
begin
if OpenBankFast('vwb')then
begin
If pinscreen then
inpin(Players[CurrentPlayer].pin);
if BankScreen then
begin
ReportVars[0] := ReportVars[0] + CountOre;
ReportVars[0] := ReportVars[0] + CountClay;
ReportVars[1] := ReportVars[1] + CountGems;
Rocks := Rocks + CountOre;
Rocks := Rocks + Countclay;
Players[CurrentPlayer].integers[0] := Players[CurrentPlayer].integers[0] + CountOre;
Players[CurrentPlayer].integers[0] := Players[CurrentPlayer].integers[0] + CountClay;
if Players[CurrentPlayer].Booleans[0] then
depositAll else deposit(2, 28, true);
CloseBank;
Result := True;
end;
end else
begin
ndbug('Couldnt Openbank');
KillPlayer;
Result := False;
exit;
end;
end;
end;
Procedure MineRocks;
var
TehCords, gem: Tpoint;
i: Integer;
begin
if not loggedin then exit;
repeat
if not loggedin then exit;
if FindRock(Lowercase(Players[CurrentPlayer].strings[0]), TehCords)then
begin
DetectGas;
FindNormalRandoms;
Case random(2)of
0: mouse(TehCords.x, TehCords.y, 0, 0, true);
1: begin
mouse(TehCords.x, TehCords.y, 0, 0, false);
chooseoption('ine');
end;
end;
WhileWacking;
if DropGems then
begin
if FindGem(Gem)then
begin
mouse(gem.x, gem.y, 4, 4, false);
Chooseoption('rop');
end;
end;
i := 0;
end else
begin
inc(i);
SleepAndMoveMouse(2000);
if ( i > 60+random(10) )then
if not relocate(1)then
begin
nDbug('Couldnt Find The Rocks, KillingPlayer!');
KillPlayer;
exit;
end;
end;
DetectGas;
FindNormalRandoms;
Until InvFull;
end;
Function CheckPick: Boolean;
var
gx, gy: Integer;
begin
if not loggedin then exit;
GameTab(4);
Case Players[CurrentPlayer].Booleans[0] of
True:
begin
GameTab(5);
wait(100);
If findDTM(Pick, gx, gy, MIX1, MIY1, MIX2, MIY2)then
begin
Ndbug('Pick was weilded');
Result := True;
exit;
end else
begin
nDbug('Pick was not weilded!!!');
nDbug('Please give your players picks!');
KillPlayer;
exit;
end;
end;
False:
begin
GameTab(4);
wait(100);
If findDTM(Pick, gx, gy, MIX1, MIY1, MIX2, MIY2)then
begin
Ndbug('Pick was in the Inventory');
Result := True;
exit;
end else
begin
nDbug('Pick was not in the Inventory!!!');
nDbug('Please give your players picks!');
KillPlayer;
exit;
end;
end;
end;
end;
Procedure Report;
var I : Integer;
begin
Writeln(' _________________________________________________');
Writeln('/ noidea''s VWM''er \');
Writeln('|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ');
writeln(Padr('| Time Running : ' + TimeRunning,50) + '|');
Writeln(padr('| Total mined : ' + Inttostr(Rocks), 50)+ '|');
Writeln(padr('| Total gasses : ' + IntToStr(Gasses), 50)+ '|');
Writeln(padr('| Total loads : ' + inttostr(p), 50)+ '|');
If Gems > 0 then
Writeln(padr('| Total gems : ' + inttostr(Gems),50)+ '|');
if Responds > 0 then
Writeln(padr('| Total Responds : ' + inttostr(Responds), 50)+ '|');
if fightss > 0 then
Writeln(padr('| Fights : ' + inttostr(fightss),50)+ '|');
if NewPicks > 0 then
Writeln(Padr('| NewPicksGotton : ' + inttostr(NewPicks), 50)+ '|');
if headsrepaired > 0 then
Writeln(padr('| Picks repaired : ' + inttostr(headsrepaired), 50) + '|');
if Relocates > 0 then
writeln(Padr('| Relocated : ' + inttostr(relocates), 50) + '|');
Writeln('|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|');
Writeln('| Player | Active | Loads | Mined | Gems |');
for I := 0 to (HowManyPlayers - 1) do
begin
Writeln(Padr(padr('| ' +inttostr(i) , 11)+ '| ' + Left(BoolToStr(Players[I].Active), 1) + ' | ' + padr((inttostr(Players[I].Integers[1])), 6) + '| ' + Padr((inttostr(Players[I].integers[0])), 6) + '| ' + padr(inttostr(Players[CurrentPlayer].integers[2]),5) + '', 50)+'|');
end;
Writeln('\_________________________________________________/');
end;
Procedure PickColours;
var
x, y: Integer;
begin
if FindColorTolerance(x, y, 4474186, 584, 216, 598, 229, 5) then
ThePick := 'iron';
if FindColorTolerance(x, y, 3951676, 584, 216, 598, 229, 5) then
ThePick := 'addy';
if FindColorTolerance(x, y, 6645357, 584, 216, 598, 229, 5) then
ThePick := 'steel';
if FindColorTolerance(x, y, 5519673, 584, 216, 598, 229, 5) then
ThePick := 'mith';
if FindColorTolerance(x, y, 6116415, 584, 216, 598, 229, 5) then
ThePick := 'rune';
if FindColorTolerance(x, y, 1913151, 584, 216, 598, 229, 5) then
ThePick := 'bronz';
ndbug('Using ' + (ThePick) + ' pick.');
end;
Procedure DoTheCheck;
var
x, y, i: Integer;
begin
if not Players[currentplayer].booleans[0] then
begin
if not FindDTM(Pick, x, y, 553, 210, 599, 249)then
For i := 1 to 28 do
begin
mmouseItem(i);
wait(100+random(100));
if isuptext('ick')then
begin
GetmousePos(x, y)
holdmouse(x, y, true);
wait(70+random(70));
mmouseItem(1);
getmousepos(x, y);
wait(100+random(50));
releasemouse(x, y, true);
writeln('Please keep unweilded, in-use picks, in first inv slot');
break;
end;
end;
end;
end;
Procedure SetupPlayer;
begin
if not loggedin then LoginPlayer;
MaxWait := 0;
case Lowercase(Players[CurrentPLayer].strings[0])of
'tin': MaxWait := 6500;
'clay': Maxwait := 7000;
'iron': MaxWait := RandomRange(4000, 5000);
'silver': MaxWait := 11000;
end;
DoTheCheck;
if CheckPick then
PickColours;
makeCompass('n');
setangle(true);
end;
var
h: Integer;
begin
setupsrl;
ScriptID := '1142';
SRLID := SRLStatsID;
SRLPassword := SRLStatsPass;
LoadDTMs;
DeclarePlayers;
ActivateClient;
MouseSpeed := 19;
SymbolAccuracy := 0.45;
repeat
h := 0;
If not Loggedin then LoginPlayer;
SetupPlayer;
repeat
SetRun(True);
ToMine;
flag;
wait(300+random(200));
MineRocks;
ToBank;
Bankstuff;
inc(h);
inc(p);
Inc(Players[CurrentPlayer].integers[1]);
ReportVars[2] := ReportVars[2] + 1;
SRLRandomsReport;
report;
Disguise('Player ' +inttostr(CurrentPlayer) + ' mined '+ inttostr(Players[CurrentPlayer].integers[0]) + ' ores');
until not loggedin or(h >= Loadsb4switch);
Logout;
if HowManyPlayers = 1 then wait(60000*2+random(60000));
NextPlayer(Players[CurrentPlayer].Active);
If not loggedin then loginplayer;
until allplayersinactive
FreeDTMs;
end.
/
/
Thanks to Masterkill for his auto responder, its great!
Thanks to NaumanAklaQ, I took the responder out of his script.
Thanks to munk for his findMMbank function.
Thanks to the SRL team.
Thanks to WT-Fakawi for his recent donation to keep SRL up!
Long live SRL.
We shall be the last generation of RS2 cheating...