SCAR Code:
program PowerMiner;
{.include SRL/SRL.scar}
{.include srl/srl/misc/Users.scar}
{.Include SRL/SRL/Skill/Mining.Scar}
type
RRecord = Record
rocks: Integer;
end;
const
YourSRLID = '';
YourSRLPass = '';
procedure CheckStats;
begin
ScriptID := '1093';
if (not (yourSRLID = '')) then
SRLID := YourSRLID
else
if (not (yourSRLPass = '')) then
SRLPassword := YourSRLPass
else
SRLID := '4472';
SRLPassword := 'markiseggo';
end;
function Report(RR: String): boolean;
begin
WriteLn('Error:( ' + RR + ' )');
result := True;
end;
var
R: array [0..2] of RRecord;
LD, MN, Gas: Integer;
MaxWait, FalsePlayers: Integer;
Q: String;
const Version = '1.2.[beta]';
procedure PlayerReport;
var
I: Integer;
Active: String;
begin
For I := 0 to (HowManyPlayers - 1) do
begin
if (Players[i].Active) then Active := 'T' else Active := 'F';
WriteLn( (IntToStr(I))+' : '+Players[I].nick+ ' = '+
Active + '| Mined: '+IntToStr(Players[I].Integers[5]) + ' Ores| M lvl:' + IntToStr(Players[I].Integers[2]));
end;
case lowercase(Q) of
'iron':
begin
ReportVars[1] := ReportVars[1]
+28;
end;
'copper':
begin
ReportVars[0] := ReportVars[0]
+28;
end;
'tin':
begin
ReportVars[2] := ReportVars[2]
+28;
end;
end;
end;
procedure FullReport;
begin
ClearDebug;
WriteLn('Blumblebee''s PowerMiner Version ' + version);
WriteLn('_____________________________________________________');
WriteLn('Mined A Total Of ' + IntToStr(MN) + ' Ores');
WriteLn('Avoided ' + IntToStr(Gas) + ' Gas');
WriteLn('Completed ' + IntToStr(LD) +' Loads');
WriteLn('Ran For ' + TimeRunning);
WriteLn('_____________________________________________________');
PlayerReport;
SRLRandomsReport;
end;
function CountOre: integer; forward;
function FindRandoms: Boolean;
begin
if FindFight then
RunAway('n', false, 1, 2500);
Result := FindNormalRandoms;
end;
procedure DeclarePlayers;
begin
SRLPlayerForm(True, ['Weild Pick'], ['Loads'], ['Rock Type'], []);
end;
Function w_WizzupGas(cx,cy: integer): Boolean; //Credits To Wizzup? For This Procedure
Var
CTS, I, Le, T, Time: Integer;
P, P2: TPointArray;
C, C2: TIntegerArray;
R, G, B: Integer;
H, S, L: Extended;
X, Y, Z: Extended;
GP: TPoint;
Begin
Result := False;
Time := GetSystemTime;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.16, 0.46);
GP.X := cx;
GP.Y := cy;
GP.Y := GP.Y - 20;
FindColorsTolerance(P, 9083807, GP.x - 25, GP.y - 25, GP.X + 25, GP.Y + 25, 15);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If Length(P) < 60 Then
Exit;
C := GetColors(P);
C2 := C;
ClearSameIntegers(C);
If Length(C) < 40 Then
Begin
Exit;
End;
WriteLn('Passed Color Diversity: ' + IntToStr(Length(C)));
Writeln('Total colors found: ' + IntToStr(Length(P)));
SetLength(C, 0);
SetLength(C, Length(C2));
SetLength(P2, Length(P));
Le := High(C2);
For I := 0 To Le Do
Begin
ColorToRGB(C2[i], R, G, B);
//If ((R - G) <= 6) And (G - B > 7) Then
If ((R - G) <= 10) And (G - B > 7) Then
Begin
ColorToHSL(C2[i], H, S, L);
If (H > 11.5) And (H < 16.0) And (S < 16.0) And (S > 2.0) And (L > 42.0) And (L < 71.0) Then
Begin
ColorToXYZ(C2[i], X, Y, Z);
If (X >= 18.0) And (X <= 45.0) And (Y >= 20.0)
And (Y <= 48.0) And (Z >= 15.0)
And (Z <= 47.0) And (Abs(X - Y) < 3.0)
And (Abs(X - Z) < 5.0) And (Abs(Y - Z) < 6.5)
Then
Begin
C[T] := C2[i];
P2[T] := P[i];
T := T + 1;
End;
End;
End;
End;
SetLength(C, T);
ClearSameIntegers(C);
If Length(C) < 25 Then
Begin
Exit;
End;
WriteLn('Passed Color Diversity after filtering the colors: ' + IntToStr(Length(C)));
Writeln('Total colors found, after filtering: ' + IntToStr(Length(P2)));
Result := True;
WriteLn('Gas Gave TRUE');
writeln('Time taken: ' + IntToStr(GetSystemTime - Time));
End;
function PickCheck: string;
var
PickaxeDTM, X, Y: Integer;
begin
PickAxeDTM := DTMFromString('78DA63F466666078CBC8800C34A459191E026' +
'99828A32F50CD4B543520594964351140355F09A8B105AA7947408D2' +
'3500D2B135E35003DB606DD');
if (Players[CurrentPlayer].booleans[0]) then
begin
GameTab(5);
wait(200+random(200));
if FindDTM(PickaxeDTM, x, y, MIx1,MIy1,MIx2,MIY2) then
begin
MMouse(x, y, 2, 2);
wait(150+random(150));
if IsUptext('une') then
result := ('Rune Pickaxe')
end;
if IsUptext('dam') then
result := ('Addy Pickaxe')
end;
if (Result = '') then
begin
WriteLn('Found Pick, Continuing');
end else
WriteLn('Currently Using A ' + Result);
Exit;
begin
if not (Players[CurrentPlayer].booleans[0]) then
begin
gametab(4);
if FindDTM(PickaxeDTM, x, y, MIx1,MIy1,MIx2,MIY2) then
begin
MMouse(x, y, 2, 2);
if IsUptext('une') then
result := ('Rune Pickaxe')
end;
if IsUptext('dam') then
result := ('Addy Pickaxe')
end;
If (Result = '') then
begin
WriteLn('Found Pick, Continuing');
end else
WriteLn('Currently Using A ' + Result);
Exit;
end;
end;
procedure FBP;
var
pick: integer;
begin
if not (LoggedIn) then
Exit;
if TimeFromMark(pick) < 1500 then
Exit;
FindNormalRandoms;
MarkTime(pick);
if (FindBlackChatMessage('ou do not')) then
begin
Report('Your Pick Has been broken');
LogOut;
Players[CurrentPlayer].Active := False;
inc(FalsePlayers);
NextPlayer(Players[CurrentPlayer].Active);
end;
end;
procedure AntiBan;
begin
if (not (LoggedIn)) then
Exit;
case Random(100) of
0:begin
BoredHuman;
wait(250 + random(500));
end;
2:begin
RandomRClick;
wait(200 + random(500));
end;
3:begin
GameTab(1 + Random(12));
Wait(300 + Random(500));
GameTab(4);
end;
4:begin
PickUpMouse;
Wait(200 + Random(200));
end;
5:begin
RandomMovement;
SetAngle(true);
end;
end;
end;
procedure LoadRockRec;
var
A: String;
begin
try
LoadRockRecords;
begin
A := (Players[CurrentPlayer].strings[0]);
case LowerCase(A) of
'iron':
begin
R[0].Rocks := rimmington_Iron;
R[1].Rocks := rimmington_Iron;
R[2].Rocks := rimmington_Iron;
MaxWait := 6000;
Q := 'iron';
end;
'copper':
begin
R[0].Rocks := lumbridge_copper;
R[1].Rocks := rimmington_Copper;
R[2].Rocks := varrock_Copper;
MaxWait := 12000;
Q := 'copper';
end;
'tin':
begin
R[0].Rocks := lumbridge_tin;
R[1].Rocks := rimmington_Tin;
R[2].Rocks := rimmington_Tin;
MaxWait := 12000;
Q := 'tin';
end;
end;
end;
except end;
end;
procedure WhileMining;
var
C: Integer;
begin
if not (LoggedIn) then
Exit;
MarkTime(C);
begin
While (TimeFromMark(c) < MaxWait) do
begin
FindRandoms;
Wait(100+random(50));
AntiBan;
FBP;
FindPick;
Wait(500+random(500));
if FindBlackChatMessage('anage') then
Exit;
end;
end;
end;
procedure MineRock;
var
B: Boolean;
H, X, Y, CX, CY: Integer;
begin
if not (LoggedIn) then
Exit;
FBP;
FindRandoms;
try
For H:= 0 To 2 Do
begin
B := FindObjRock(X, Y, R[H].Rocks);
if B then Break;
end;
except end;
FBP;
if B then
begin
if w_wizzupgas(CX ,CY - 5)then
begin
MFF(MMCX + 2,MMCY , 5, 4);
Inc(Gas);
ReportVars[3] := ReportVars[3] + 1;
SendSRLReport;
SRLRandomsReport;
MMouse(random(MSX2),random(MSY2),5,5);
Status('Found Gas! Using wizzups gas checker');
FTWait(8+random(2));
exit;
end else
Case Random(2) of
0:
begin
Mouse(X, Y, 0, 0, False);
Wait(150+Random(100));
if (ChooseOption('ine')) then
end;
1: Mouse(X, Y, 0, 0, True);
end;
Wait(10+random(50));
Flag;
WhileMining;
end;
end;
procedure DropAllExcept(W : Array of Integer);
// Credits to SandStorm
var
i: Integer;
begin
if not (LoggedIn) then
Exit;
For I:=1 To 28 Do
if not(InIntArray(w, i)) then
DropItem(i);
end;
procedure DropOre;
begin
if not LoggedIn then Exit;
Status('Dropping Ore');
CountOre;
try
begin
if (Players[CurrentPlayer].booleans[0]) then
DropAll;
end;
if not (Players[CurrentPlayer].booleans[0]) then
begin
DropAllExcept([1]);
end;
Finally
Inc(LD);
Players[CurrentPlayer].Integers[6] := Players[CurrentPlayer].Integers[6]
+ 1;
FullReport;
except
end;
end;
function CountDTMs(DTM :integer) :integer;
var
n, r, m, g: integer;
slot: tbox;
begin
for n := 1 to 28 do
begin
if existsitem(n) then
begin
slot:= invbox(n);
if FindDTM(DTM,m,g,slot.x1,slot.y1,slot.x2,slot.y2) then inc(r);
end;
end;
Result := r;
end;
function CountOre: integer;
var
tempcount, tempcount2, OreDTM: integer;
X, Y: Integer;
begin
OreDTM := DTMFromString('78DA63CC636260D065644006F7EACC19FE036' +
'990E87F20602C01AA5142550391859140BA02A8C698809A78A01A' +
'53026AE2806AB408A8C904AAB1C2AF06009ACB0A4D');
Result := Result xor Result;
GameTab(4);
wait(100 + random(200));
if finddtm(OreDTM,x,y,MIx1,MIy1,MIx2,MIY2) then
begin
TempCount := CountDTMs(OreDTM);
Result := TempCount;
MN := MN + TempCount;
TempCount2 := CountDTMs(OreDTM);
Result := TempCount2;
Players[CurrentPlayer].Integers[5] := Players[CurrentPlayer].Integers[5]
+ TempCount2;
end;
freedtm(OreDTM);
end;
procedure SetScript;
begin
SetupSRL;
CheckStats;
Disguise('Powerminer rev' + Version);
MouseSpeed := 20;
DeclarePlayers;
end;
procedure PlayerStart;
begin
ActivateClient;
if not (LoggedIn) then
LogInPlayer;
if LoggedIn then
begin
SetAngle(True);
SetRun(True);
SetChat('Off', 1);
SetChat('Off', 2);
Wait(500 + Random(500));
PickCheck;
Wait(400 + Random(655));
Players[CurrentPlayer].integers[2] := GetSkillInfo('Mining', False);
WriteLn('Players Mining level is ' +
IntToStr(Players[CurrentPlayer].integers[2]));
gametab(4);
LoadRockRec;
FindPickHeadColor;
end;
end;
procedure MainLoop;
begin
SetScript;
wait(500 + random (200));
PlayerStart;
repeat
repeat
repeat
Status('Mining ' + Players[CurrentPlayer].strings[0] + ' ore''s');
MineRock;
until InvFull;
If InvFull then
begin
DropOre;
end;
If Not (LoggedIn) Or Not (Players[CurrentPlayer].Active) Then
Players[CurrentPlayer].Active := False;
If Not LoggedIn Then
Begin
Players[CurrentPlayer].Active := False;
inc(FalsePlayers);
PlayerStart;
end;
until(Players[CurrentPlayer].Integers[6] >= Players[CurrentPlayer].Integers[0]) or
(Players[HowManyPlayers - 1].Active = False);
begin
NextPlayer(True);
Players[CurrentPlayer].Integers[6] := 0;
PlayerStart;
end;
If AllPlayersInactive then Break;
until(AllPlayersInactive);
Report('All Players Inactive');
end;
procedure scriptterminate;
begin
disguise('Terminated.');
FullReport;
end;
begin
MainLoop;
end.
Blumblebees (CTI) PowerMiner
Type: PowerMiner
Date Released: December, 5, 2008
SCAR REV: 3.15b
SRL Rev: #28
Author: Blumblebee
{Version History}
1.0.[beta]:
'Initial Release, A Bit sketch, none the less works well. Iron is'
'only rock tested so far. Further testing Required.'
1.1.[beta]:
'Minor Tweaks Before Release. Bug Fixed, Progress Report Format Changed'
'Slightly. Overall, just made it more appealing.
1.2.[beta]:
'Released! Let the Leeching Begin!'
{Bug Report}
1.0.[beta]:
'Pick Axe head reattachment hasnt been added, thus this kills the'
'script. The FindGas procedure is not working as well as hoped.'
'(50-75% accurate)'
1.1.[beta]:
'Minor Tweaking/Bug Fixes before Release. Found a Bug with Tin Mining.'
'Script Will Mine Silver Ore, when powermining tin. Minor setback, but'
'problem none the less.'
{Other Notes}
1.0.[beta]:
'So Far, Script works well. Script will be released soon.'
1.1.[beta]:
'Found A Counting Error for the proggie reports that have been fixed.'
'Hopefully will be released now.'