lol, it's too bad about the teleporting loop, I was happy I was making back some of the money spent on the pure essence from the gain in astrals/laws ='(
lol, it's too bad about the teleporting loop, I was happy I was making back some of the money spent on the pure essence from the gain in astrals/laws ='(
118/120 Dungeoneering
Agh the map colors are changing SO much now. Seems like every time we change surfaces the road color shifts, I don't remember the map changing this often, it's really aggravating...
For now, use this version: it has fixed Prayers and uses a static coordinate walking for above-ground. Until I can find a solution to this TPA map-walking, we'll just have to use this.
Simba Code:{/////////////////////////////////////////
// ~ZMI-Extreme by Flight~ //
// //
// Version: 1.71 //
/////////////////////////////////////////}
program ZMIExtreme;
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i SRL/SRL/misc/reports.simba}
{$i SRL/SRL/misc/paintsmart.simba}
Const
//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';
//General settings
HPLevel = 99; //Your (max) Constitution/Hitpoints level
Food = 'monkfish'; //Trout, Tuna, Lobster, Swordfish, Monkfish, Shark
EatAt = 70; //Eat at this health percent or less
UsePrayer = True; //Use ranged protection prayers?
RuneType = 'mind'; //Type of rune to use for bank payment (20 runes per session)
RestAt = 60; //Run energy % to rest at (after banking)
SwitchWorlds = True; //Switch worlds after a break?
//Pouch settings
SS = 7; //Which slot # has your small pouch (0 for not using)
MS = 6; //Which slot # has your medium pouch (0 for not using)
LS = 5; //Which slot # has your large pouch (0 for not using)
GS = 4; //Which slot # has your giant pouch (0 for not using)
RepairMethod = 'spell'; //Spell or Contact
//Break settings
BreakIn = 180; //How long before we take a break? (minutes)
BreakFor = 25; //How long will we break for? (minutes)
Bir = 13; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duration
Fill = 0; //Ignore
Empty = 1; //Ignore
Var
MPoint: TPoint;
Version: String;
Exp,Exp_C,ReportTime,Runs,
CommitTime,FoodC,RepairC,
XPToLvl,OldXP,AC: Integer;
PP1,PP2,OptionsSet,AddRun: Boolean;
Path_ToAltar: TPointArray;
LCols: TIntegerArray;
//Import painting
Prog: Integer;
PaintArray: TStringArray;
//Break variables
w,x,y,z,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;
Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
Level[SKILL_HITPOINTS] := HPLevel;
BoxRewards := ['XP','xp','lamp'];
LampSkill := Skill_Runecrafting;
Active := True;
end;
end;
//By Dgby714
function DownloadToFile(const URL, Filename: string): boolean;
var
FileI: LongInt;
FileC, FileH: string;
begin
Result := False;
FileI := InitializeHTTPClient(False,False);
try
FileC := GetHTTPPage(FileI, URL);
FileH := GetRawHeaders(FileI);
if ((FileC = '') or (FileH = '')) then
begin
WriteLn('Error downloading "' + URL + '".');
Exit;
end;
FileH := Copy(GetRawHeaders(FileI), 10, Pos(#13, FileH) - 10);
if (FileH <> '200 OK') then
begin
WriteLn('Couldn''t download "' + URL + '", Error Code: ' + FileH + '.');
Exit;
end;
finally
FreeHTTPClient(FileI);
end;
try
if not FileExists(Filename) then
FileI := CreateFile(Filename)
else
FileI := OpenFile(Filename, False);
CloseFile(FileI);
FileI := RewriteFile(Filename, False);
Result := WriteFileString(FileI, FileC);
finally
CloseFile(FileI);
end;
end;
Procedure LoadVars;
begin
Version := '1.71';
//http://flight.clawz.com/imgs/ZMIImg.png
DownloadToFile('http://i.imgur.com/6RN9F.png', AppPath + '/Scripts/ZMIImg.png');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
Path_ToAltar := [Point(160, 550), Point(160, 580), Point(160, 605), Point(160, 645),
Point(165, 675), Point(175, 710), Point(205, 725), Point(240, 715),
Point(275, 715), Point(305, 720), Point(330, 720)];
LCols := [789517, 921102, 1052689]; //Ladder colors
Case Lowercase(RuneType) of
'fire': MPoint := Point(340, 125);
'body': MPoint := Point(105, 170);
'mind': MPoint := Point(200, 80);
'air': MPoint := Point(300, 85);
'water': MPoint := Point(152, 128);
end;
PP1 := (not (GS = 0));
PP2 := (not (LS = 0));
AddRun := False;
end;
Procedure Report;
begin
ClearDebug;
SRLRandomsReport;
SRLProgressReport(ResultDebugBox, 'ZMI-Extreme', 'Flight', Version,
['Run time', 'Exp gained', 'Loads completed', Capitalize(Food)+' ate',
'Pouches repaired', 'Breaks'],
[MsToTime(GetTimeRunning, Time_Abbrev), Exp, Runs, FoodC, RepairC, TotalBreaks]);
MarkTime(ReportTime);
end;
Procedure Commit;
begin
stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
Stats_Commit;
Exp_C := 0;
MarkTime(CommitTime);
end;
Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Report;
Logout;
ShowMessage('[Shutdown] Reason: '+Reason);
TerminateScript;
end;
procedure OnScreen(Force: boolean);
var
XPH,TTB,Portion,I: Integer;
TP: TPoint;
V: string;
begin
if (Exp < 1) then
Exp := 1;
XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);
for I := 0 to 6 do
begin
case I of
0:
begin
V := 'V.'+Version;
TP := Point(397, 25);
end;
1:
begin
V := MsToTime(GetTimeRunning, Time_Abbrev);
TP := Point(130, 50);
end;
2:
begin
V := IntToStr(Exp);
TP := Point(130, 70);
end;
3:
begin
V := IntToStr(XPH);
TP := Point(131, 92);
end;
4:
begin
V := IntToStr(Runs);
TP := Point(342, 67);
end;
5:
begin
V := IntToStr(XPToLvl-Exp);
TP := Point(342, 88);
end;
6:
begin
V := 'TTB: '+MsToTime(TTB,Time_Bare);
TP := Point(204, 107);
end;
end;
if V = PaintArray[I] then
Continue;
Portion := GetMufasaBitmap(Prog).Copy(TP.x, TP.y, TP.x + 76, TP.y + 17).Index;
SMART_DrawBitmap(False, Portion, Point(MCX1 + TP.x, MCY1 + TP.y));
FreeBitmap(Portion);
SMART_DrawTextEx(False, MCX1 + TP.x, MCY1 + TP.y, SmallCharsNS, V, clWhite);
end;
PaintArray := ['V.'+Version, MsToTime(GetTimeRunning, Time_Abbrev), IntToStr(Exp), IntToStr(XPH),
IntToStr(Runs), IntToStr(XPToLvl-Exp), 'TTB: '+MsToTime(TTB,Time_Bare)];
end;
procedure LoadImg;
begin
Prog := LoadBitmap(AppPath + '/Scripts/ZMIImg.png');
SMART_DrawBitmap(True, Prog, Point(MCX1, MCY1));
SetLength(PaintArray, 7);
end;
Procedure DestroyImg;
begin
FreeBitmap(Prog);
end;
Procedure UpdateSPSMap;
begin
Writeln('Checking SPS map & tolerance...');
if not FileExists(AppPath + '/Includes/SPS/img/runecrafting_altars/0_1.png') then
DownloadToFile('http://i.imgur.com/ktZ1K.png', AppPath + '/Includes/SPS/img/runecrafting_altars/0_1.png');
SPS_Setup(Runecrafting_Altars, ['0_1']);
if (not (SPS_Surface.Tolerance = 0.5)) then
begin
Writeln('Adjust SPS map tolerance...');
SPS_Surface.Tolerance := 0.5
end;
SPS_Continue := True;
end;
Function IsMoving_F: Boolean;
begin
Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
end;
Function RunesMenu: Boolean;
var
X,Y: Integer;
begin
Result := FindText(x, y, 'light', UpCharsEx, 145, 275, 360, 315);
end;
Function UsingQuickPrayers: Boolean;
Var
X,Y: Integer;
begin
Result := FindColorTolerance(X, Y, 9154193, 710, 75, 730, 85, 20);
end;
//By Bandland100, modified to shift mouse speeds after every step
procedure SuperWindMouse(xs, ys, xe, ye, gravity, wind, minWait, maxWait, maxStep, targetArea: extended);
var
veloX,veloY,windX,windY,veloMag,dist,randomDist,lastDist,step: extended;
lastX,lastY,MSP,W: integer;
sqrt2,sqrt3,sqrt5: extended;
begin
MSP := MouseSpeed;
sqrt2:= sqrt(2);
sqrt3:= sqrt(3);
sqrt5:= sqrt(5);
while hypot(xs - xe, ys - ye) > 1 do
begin
dist:= hypot(xs - xe, ys - ye);
wind:= minE(wind, dist);
if dist >= targetArea then
begin
windX:= windX / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
windY:= windY / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
end else
begin
windX:= windX / sqrt2;
windY:= windY / sqrt2;
if (maxStep < 3) then
begin
maxStep:= random(3) + 3.0;
end else
begin
maxStep:= maxStep / sqrt5;
end;
end;
veloX:= veloX + windX;
veloY:= veloY + windY;
veloX:= veloX + gravity * (xe - xs) / dist;
veloY:= veloY + gravity * (ye - ys) / dist;
if hypot(veloX, veloY) > maxStep then
begin
randomDist:= maxStep / 2.0 + random(round(maxStep) div 2);
veloMag:= sqrt(veloX * veloX + veloY * veloY);
veloX:= (veloX / veloMag) * randomDist;
veloY:= (veloY / veloMag) * randomDist;
end;
lastX:= Round(xs);
lastY:= Round(ys);
xs:= xs + veloX;
ys:= ys + veloY;
case Random(50) of
1..25: W := (MSP + (Random((MSP/4))));
26..50: W := (MSP - (RandomRange((MSP/2), MSP-1)));
end;
if (W < 1) then
W := 1;
if (lastX <> Round(xs)) or (lastY <> Round(ys)) then
MoveMouse(Round(xs), Round(ys));
step:= hypot(xs - lastX, ys - lastY);
//W := round((maxWait - minWait) * (step / maxStep) + minWait);
wait(W);
lastdist:= dist;
end;
if (Round(xe) <> Round(xs)) or (Round(ye) <> Round(ys)) then
MoveMouse(Round(xe), Round(ye));
MouseSpeed := MSP;
end;
Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;
randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
SuperWindMouse(X, Y, X2, Y2, 9, 5, 10.0 / randSpeed, 15.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;
Procedure ActivateQuickPrayer;
begin
if UsingQuickPrayers then Exit;
HumanMMouse(723, 70, 10, 10);
ClickMouse2(True);
end;
Function LowPrayer: Boolean;
begin
Result := FindColorTolerance(X, Y, 255, 740, 70, 760, 80, 10)
end;
Procedure SetNorth;
begin
Mouse(542, 24, 15, 15, mouse_left);
KeyDown(38);
Wait(850 + Random(100));
KeyUp(38);
end;
Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
if ((Ident = 1) or (Ident = 2) or (Ident = 5) or (Ident = 6)) then
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMCX+10, MMY2, 10)
else
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 10);
if Length(TPA) < 1 then
begin
ColorToleranceSpeed(CTS);
Exit;
end;
ATPA := TPAtoATPAEx(TPA, 10, 10);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], 16514299, B.X1, B.Y1, B.X2, B.Y2, 5) //Altar (white)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], 1244922, B.X1, B.Y1, B.X2, B.Y2, 5) //Altar (yellow)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 2413294, B.X1, B.Y1, B.X2, B.Y2, 5) //Bank
else if (Ident = 4) then
FindColorsTolerance(ATPA2[i], 2370858, B.X1, B.Y1, B.X2, B.Y2, 5) //Hunter
else if (Ident = 5) then
FindColorsTolerance(ATPA2[i], 200951, B.X1, B.Y1, B.X2, B.Y2, 5) //RC symbol
else if (Ident = 6) then
FindColorsTolerance(ATPA2[i], 2763504, B.X1, B.Y1, B.X2, B.Y2, 5) //Dungeon
else if (Ident = 7) then
FindColorsTolerance(ATPA2[i], 254, B.X1, B.Y1, B.X2, B.Y2, 5); //Big arrow
Result := (Length(ATPA2[i]) > 0);
if Result then
begin
ColorToleranceSpeed(CTS);
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;
Function NearSymbol(Which: Integer): Boolean;
var
X,Y,D: Integer;
begin
Result := FoundSymbol(Which, X, Y, D);
end;
Function AboveGround: Boolean;
begin
Result := (PercentBlackMM < 20);
end;
Function NearLadder: Boolean;
var
X,Y,D: Integer;
begin
Result := False;
if (FoundSymbol(5, X, Y, D) or FoundSymbol(6, X, Y, D)) then
Result := (D < 20);
end;
Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
Var
h, s, t: Extended;
I,II : integer;
HSLColor : Array[1..3] of Extended;
HSL : Array[0..1] of Array[1..3] of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;
For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;
H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);
try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(t);
except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
end;
Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
end;
Procedure SetPrayers;
var
X,Y,X2,Y2,T,T2: Integer;
PPoint: TPoint;
label
MoveM;
begin
{Right-click prayer icon}
HumanMMouse(724, 70, 8, 8);
ClickMouse2(False);
WaitOption('elect', 400);
{Wait for the quick-prayer selection menu}
MarkTime(T);
repeat
if TimeFromMark(T) > 5000 then
Exit;
if FindColorTolerance(X, Y, 8499692, 610, 445, 630, 465, 10) then
break;
until(false);
{Determine the player's prayer type & choose the right protection prayer}
if (FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) or FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230)) then
begin
if FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) then
PPoint := Point(671, 274)
else if FindText(X, Y, 'rayers', StatChars, 630, 200, 690, 230) then
PPoint := Point(670, 343);
{Check if prayers are already set}
if not FindColorTolerance(X2, Y2, 461806, PPoint.X-10, PPoint.Y-10, PPoint.X+10, PPoint.Y+10, 10) then
begin
MoveM:
if not LoggedIn then Exit;
HumanMMouse(671, 274, 4, 4);
if WaitUpText('elect', 400) then
begin
ClickMouse2(True);
Wait(RandomRange(175, 350));
end else
goto MoveM;
end else
Writeln('Prayers already selected');
{Hit confirm}
HumanMMouse(645, 456, 15, 5);
ClickMouse2(True);
end;
{Wait for the prayer selection to be confirmed}
MarkTime(T2);
repeat
if TimeFromMark(T2) > 5000 then
Exit;
if (not FindText(x, y, 'urses', StatChars, 630, 200, 690, 230) and (not FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230))) then
break;
until(false);
OptionsSet := True;
Gametab(Tab_Inv);
Writeln('Quick-prayers set');
end;
Function TeleportOut: Boolean;
var
X,Y,I,DTM: Integer;
label
Start;
begin
Result := False;
Start:
if NearSymbol(4) then Exit;
if not LoggedIn then Exit;
DTM := DTMFromString('mWAAAAHicY2FgYNjGxMCwhQlCbwZiRkYGhj9AcQ4g/R9IW1tbMRjqnmS4eMiT4fXrVwz8QDFkzISGQQAAddcLnQ==');
Gametab(tab_Magic);
Wait(RandomRange(365, 410));
if FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
I := 0;
HumanMMouse(X, Y, 7, 7);
ClickMouse2(True);
Gametab(tab_Inv);
HumanMMouse(580, 115, 15, 15);
Wait(RandomRange(2000, 2250));
FindNormalRandoms;
if not WaitFunc(@AboveGround, 100, 4000) then
goto Start;
end else
begin
Inc(I);
if (I > 3) then
Shutdown('Failed to find spell DTM')
else
begin
Writeln('Failed to find spell '+IntToStr(I)+' time');
FindNormalRandoms;
Gametab(tab_Magic);
Wait(RandomRange(125, 275));
goto Start;
end;
end;
Result := AboveGround;
SetRun(True);
FreeDTM(DTM);
end;
Function FindLadder(Var X, Y: Integer): Boolean;
var
B: TBox;
Loop: Boolean;
TPA,TPA2,PBox: TPointArray;
i,CTS: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
Loop := False;
PBox := TPAFromBox(IntToBox(240, 130, 275, 185));
Start:
FindNormalRandoms;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(130, 170, TPA, 3029573, MSX1, MSY1, MSCX, MSY2, 15)
TPA := ClearTPAFromTPA(TPA, PBox);
if Length(TPA) < 1 then
begin
ColorToleranceSpeed(CTS);
Exit;
end;
ATPA := TPAtoATPAEx(TPA, 20, 20);
for i := 0 to High(ATPA) do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(130, 170, TPA2, 921102, B.X1, B.Y1, B.X2, B.Y2, 15);
TPA2 := ClearTPAFromTPA(TPA2, PBox);
if Length(TPA2) > 0 then
begin
ColorToleranceSpeed(CTS);
MiddleTPAEx(TPA2, X, Y);
HumanMMouse(X, Y, 5, 5);
Result := True;
Exit;
end;
end;
end;
ColorToleranceSpeed(CTS);
if Loop then
goto Start;
end;
Function FindChaosAltar(Var X, Y: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
Result := False;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 3685505, MSX1, MSY1, MSX2, MSY2, 20)
if Length(TPA) < 1 then
begin
ColorToleranceSpeed(CTS);
Exit;
end;
ATPA := TPAtoATPAEx(TPA, 30, 30);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(MSCX, MSCY, ATPA2[i], 11908541, B.X1, B.Y1, B.X2, B.Y2, 20)
if Length(ATPA2[i]) > 0 then
begin
ColorToleranceSpeed(CTS);
MiddleTPAEx(ATPA2[i], X, Y);
HumanMMouse(X, Y, 5, 5);
Result := True;
Exit;
end;
end;
end;
end;
Function FindRoad: boolean;
Var
i,x,y,CTS: integer;
TPA: TPointArray;
Cols: TIntegerArray;
HMods,SMods: Array of Extended;
begin
result := false;
if not LoggedIn then Exit;
FindNormalRandoms;
CTS := GetColorToleranceSpeed;
Cols := [4083800, 3623510, 4148053, 4018779, 4215390, 3886425];
HMods := [0.08, 0.08, 0.16, 0.08, 0.12, 0.09];
SMods := [0.15, 0.11, 0.20, 0.09, 0.12, 0.09];
for i := 0 to High(Cols) do
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(HMods[i], SMods[i]);
FindColorsSpiralTolerance(575, 130, TPA, Cols[i], MMX1, MMY1, MMX2, MMY2, 8);
ColorToleranceSpeed(CTS);
if (Length(TPA) > 0) then break;
end;
if (Length(TPA) > 0) then
begin
ColorToleranceSpeed(CTS);
sortTPAFrom(TPA, Point(575, 135));
for i := 0 to high(TPA) do
begin
x := TPA[i].x;
y := TPA[i].y;
if (not rs_OnMinimap(x, y)) then
continue;
mouse(x, y, 3, 3, mouse_left);
if (waitFunc(@flag, 50, 3000)) then
begin
result := true;
exit;
end;
end;
end;
ColorToleranceSpeed(CTS);
end;
Function WalkToLadder: Boolean;
var
X,Y,B,T,Dist: Integer;
SH: Boolean;
label
Start;
begin
Result := False;
SH := False;
if AddRun then
begin
B := Round(GetXPBarTotal);
Inc(Runs);
IncEx(Exp, (B-OldXP));
IncEx(Exp_C, (B-OldXP));
OnScreen(False);
AddRun := False;
AC := 0;
end;
Start:
if not LoggedIn then Exit;
if not AboveGround then Exit;
FindNormalRandoms;
MakeCompass('N');
if (NearLadder and (not LowPrayer)) then
begin
if FindLadder(X, Y) then
begin
Result := True;
Exit;
end;
end;
if (FoundSymbol(6, X, Y, Dist) or FoundSymbol(7, X, Y, Dist)) then //Dungeon
begin
HumanMMouse(X, Y, 2, 2);
ClickMouse2(True);
if not WaitFunc(@IsMoving_F, 10, 3000) then
goto Start;
HumanMMouse(127, 319, 15, 15);
While IsMoving_F do
begin
if not LowPrayer then
begin
if IsUpTextMultiCustom(['limb', 'mb L', 'adder']) then
begin
GetMousePos(X, Y);
MMouse(X, Y-(RandomRange(15, 25)), 0, 0);
ClickMouse2(True);
if DidRedClick then
SH := True;
Break;
end;
end else
Wait(1);
end;
While IsMoving_F do
Wait(1);
if SH then
begin
MarkTime(T);
repeat
FindNormalRandoms;
if NearSymbol(3) then
Exit;
until(TimeFromMark(T) > 5000)
end;
if NearLadder then
begin
Result := True;
Exit;
end else
goto Start;
end else if (FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist)) then //Altar
begin
HumanMMouse(X, Y, 2, 2);
ClickMouse2(True);
if not WaitFunc(@IsMoving_F, 10, 3000) then
goto Start;
HumanMMouse(127, 319, 15, 15);
While IsMoving_F do
begin
if not LowPrayer then
begin
if IsUpTextMultiCustom(['limb', 'mb L', 'adder']) then
begin
GetMousePos(X, Y);
MMouse(X, Y-(RandomRange(15, 25)), 0, 0);
ClickMouse2(True);
if DidRedClick then
SH := True;
Break;
end;
end else
Wait(1);
end;
While IsMoving_F do
Wait(1);
if SH then
begin
MarkTime(T);
repeat
FindNormalRandoms;
if NearSymbol(3) then
Exit;
until(TimeFromMark(T) > 5000)
end;
if NearLadder then
begin
Result := True;
Exit;
end else
goto Start;
end else if ((not NearSymbol(6)) and (not NearSymbol(1))) then
begin
Writeln('Failed to find symbols, attempting to TPA-walk');
//if FindRoad then
//begin
Mouse(567, 120, 3, 3, Mouse_Left);
HumanMMouse(127, 319, 15, 15);
While IsMoving_F do
begin
if not LowPrayer then
begin
if IsUpTextMultiCustom(['limb', 'mb L', 'adder']) then
begin
GetMousePos(X, Y);
MMouse(X, Y-(RandomRange(15, 25)), 0, 0);
ClickMouse2(True);
if DidRedClick then
SH := True;
Break;
end;
end else
Wait(1);
end;
While IsMoving_F do
Wait(1);
if SH then
begin
MarkTime(T);
repeat
FindNormalRandoms;
if NearSymbol(3) then
Exit;
until(TimeFromMark(T) > 5000)
end;
if NearLadder then
begin
Result := True;
Exit;
end else
goto Start;
//end else
//begin
//TeleportOut;
//goto Start;
//end;
end;
end;
Function HandleAltar: Boolean;
var
A,B: Boolean;
X,Y,T,I: Integer;
label
Start;
begin
Result := False;
if not LowPrayer then
begin
Result := True;
Exit;
end;
A := False;
B := False;
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
Start:
MarkTime(T);
repeat
if not LoggedIn then Exit;
FindNormalRandoms;
if FindChaosAltar(X, Y) then
begin
if WaitUpTextMulti(['ay-at', 'aos alt'], 400) then
begin
ClickMouse2(True);
if DidRedClick then
begin
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
B := True;
break;
end;
end else
begin
ClickMouse2(False);
if WaitOption('ray-at', 500) then
begin
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
B := True;
break;
end;
end;
end;
if (TimeFromMark(T) > 7000) then
begin
A := True;
break;
end;
until(false)
if A then
begin
Inc(I);
Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
FFlag(0);
While IsMoving_F do
Wait(1);
if (I > 3) then
begin
if not FindChaosAltar(X, Y) then
begin
if TeleportOut then
begin
Wait(RandomRange(2100, 2600));
I := 0;
Exit;
end;
end;
end;
Wait((RandomRange(600, 775)));
goto Start;
end;
if B then
begin
While IsMoving_F do
Wait(1);
ActivateQuickPrayer;
Result := True;
Exit;
end;
end;
Function HandleLadder: Boolean;
var
A,B,C: Boolean;
X,Y,T,T2,I: Integer;
label
Start;
begin
Result := False;
A := False;
B := False;
C := False;
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
Start:
MarkTime(T);
repeat
FindNormalRandoms;
if NearSymbol(3) then
begin
Result := True;
Exit;
end;
if FindLadder(X, Y) then
begin
if WaitUpTextMulti(['limb', 'mb L', 'adder'], 400) then
begin
ClickMouse2(True);
if DidRedClick then
begin
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
B := True;
break;
end else
begin
C := True;
break;
end;
end else
begin
ClickMouse2(False);
if WaitOptionMulti(['Clim','limb','imb','b L'], 500) then
begin
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
B := True;
break;
end else
begin
C := True;
break;
end;
end;
end;
if (TimeFromMark(T) > 7000) then
begin
A := True;
break;
end;
until(false)
if A then
begin
if NearSymbol(3) then
begin
Result := True;
Exit;
end;
Inc(I);
Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
FFlag(0);
While IsMoving_F do
Wait(1);
if (I > 3) then
begin
if not FindLadder(X, Y) then
begin
if TeleportOut then
begin
Wait(RandomRange(2100, 2600));
I := 0;
Exit;
end;
end;
end;
Wait((RandomRange(600, 775)));
goto Start;
end;
if B then
begin
MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
Exit;
if ((not AboveGround) or NearSymbol(3)) then
break;
until(false)
Result := ((not AboveGround) or NearSymbol(3));
end;
if C then
goto Start;
end;
Function SPS_WalkPath_F(Path: TPointArray): boolean;
var
I, H, T, D: integer;
P, MM: TPoint;
begin
H := High(Path);
T := GetSystemTime + 20000 + Random(5000);
while (not Result) and (GetSystemTime < T) do
begin
RunEnergy(20);
P := SPS_GetMyPos;
for I := H downto 0 do
begin
MM.X := MMCX + Path[I].X - P.X;
MM.Y := MMCY + Path[I].Y - P.Y;
D := Distance(MM.X, MM.Y, MMCX, MMCY);
if (D < 10) then
break
else begin
if (D < 70) then
begin
//Integer(I<>H)*15;
HumanMMouse(MM.X, MM.Y, 0, 0);
ClickMouse2(True);
WaitFunc(@IsMoving_F, 10, 2500);
if (I = H) then
FFlag(25)
else
FFlag(15);
T := getSystemTime + 20000 + Random(1000);
Break;
end;
end;
end;
Result := (I = H);
end;
end;
Function BankToAltar: Boolean;
begin
Result := False;
//No more walking east!
if not InvFull then Exit;
if NearSymbol(4) then Exit;
SetRun(True);
SPS_WalkPath_F(Path_ToAltar);
HumanMMouse(435, 140, 15, 15);
While IsMoving_F do
begin
if IsUpTextMultiCustom(['-rune', 'unec', 'rafting']) then
break;
end;
Result := True;
end;
Function FindBanker(Var X,Y: Integer): Boolean;
var
TPA,PBox: TPointArray;
i,a,CTS,F: Integer;
ATPA: T2DPointArray;
Cols,Tols: TIntegerArray;
HMods,SMods: Array of Extended;
begin
Result := False;
if not LoggedIn then Exit;
for F := 0 to 3 do
begin
PBox := TPAFromBox(IntToBox(240, 130, 275, 185));
CTS := GetColorToleranceSpeed;
if BankScreen then
begin
Result := True;
Exit;
end;
Cols := [5929086, 5992822, 5995648, 6585989, 6453887, 5273721];
Tols := [9, 7, 10, 7, 7, 6];
HMods := [0.15, 0.06, 0.19, 0.09, 0.10, 0.7];
SMods := [0.46, 0.11, 0.39, 0.17, 0.11, 0.11];
for i := 0 to High(Cols) do
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(HMods[i], SMods[i]);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Cols[i], MSX1, MSY1, MSX2, MSY2, Tols[i]);
ColorToleranceSpeed(CTS);
TPA := ClearTPAFromTPA(TPA, PBox);
if (Length(TPA) > 0) then break;
end;
if (Length(TPA) < 1) then Continue;
ATPA := TPAToATPAEx(TPA, 40, 40);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
for a := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[a], X, Y);
HumanMMouse(X, Y, 15, 15);
if WaitUpTextMulti(['niola'], 400) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;
end;
end;
end;
Function FindBanker2(Var X,Y: Integer): Boolean;
var
TPA,PBox: TPointArray;
HMod,SMod: Extended;
L,i,CTS,MSP,Col,
CType,Tol: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
if not LoggedIn then Exit;
PBox := TPAFromBox(IntToBox(240, 130, 275, 185));
CTS := GetColorToleranceSpeed;
Start:
if BankScreen then
begin
Result := True;
Exit;
end;
if (CType = 2) then
begin
Col := 6453887;
Tol := 7;
HMod := 0.10;
SMod := 0.11;
end else if (CType = 3) then
begin
Col := 5273721;
Tol := 6;
HMod := 0.07;
SMod := 0.11;
end;
if (CType = 0) then
begin
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 6848905, MSX1, MSY1, 510, 330, 4);
ColorToleranceSpeed(CTS);
end else if (CType = 1) then
begin
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 5800071, MSX1, MSY1, 510, 330, 4);
ColorToleranceSpeed(CTS);
end else if ((CType = 2) or (CType = 3)) then
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSX1, MSY1, MSX2, MSY2, Tol);
ColorToleranceSpeed(CTS);
end;
TPA := ClearTPAFromTPA(TPA, PBox);
if (Length(TPA) < 1) then
begin
Inc(CType);
if (CType > 3) then
Exit;
goto Start;
end;
ATPA := TPAToATPAEx(TPA, 40, 40);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
MiddleTPAEx(ATPA[i], X, Y);
MSP := MouseSpeed;
MouseSpeed := (RandomRange(26, 33));
HumanMMouse(X, Y, 15, 15);
MouseSpeed := MSP;
if WaitUpTextMulti(['niola'], 400) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;
end;
end;
Function OpenBankEniola: Boolean;
var
X,Y,T,T2,F,B: Integer;
GoOn,AC: Boolean;
label
Start;
begin
Result := False;
GoOn := False;
AC := False;
Start:
if BankScreen then
begin
Result := True;
Exit;
end;
FindNormalRandoms;
if not LoggedIn then Exit;
if (FindBanker(X, Y) or FindBanker2(X, Y)) then
begin
GoOn := True
end else
begin
if (F < 1) then
begin
MakeCompass('W');
AC := True;
end;
if (F > 4) then
TeleportOut;
if (F > 1) then
begin
if SPS_PosOnMM(Point(160, 535)) then
SPS_WalkToPos(Point(160, 535));
While IsMoving_F do
Wait(1);
end;
Inc(F);
goto Start;
end;
if GoOn then
begin
ClickMouse2(False);
if not WaitOptionMulti(['Bank','ank','nk E'], 500) then
begin
Inc(B);
if (B > 5) then
begin
Writeln('Error finding Banker text, teleporting...');
TeleportOut;
Exit;
end;
goto Start;
end;
if AC then
begin
SetNorth;
HumanMMouse(MPoint.X, MPoint.Y, 25, 25);
end;
While IsMoving_F do
Wait(1);
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Exit;
if RunesMenu then
break;
until(false);
if RunesMenu then
begin
HumanMMouse(MPoint.X, MPoint.Y, 7, 7);
ClickMouse2(True);
MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)
if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');
Wait(RandomRange(175, 350));
end;
end;
Result := BankScreen;
end;
Procedure Eat;
var
DTM,X,Y,X2,
Y2,T: Integer;
begin
if not LoggedIn then Exit;
if not BankScreen then Exit;
Case lowercase(Food) of
'trout' : DTM := DTMFromString('mlwAAAHicY2dgYCgD4kIgzgbiAiCuAOJaIG4EYhUgVgRiTSDWBWJtqJg8EGfERAJJJqxYDkjiwox4MBQAALdhBks=');
'tuna' : DTM := DTMFromString('mlwAAAHicY2dgYFAAYikgFgFiCShfHYh1gFgFiOWBWA2I9YBYFyonC8QpEWFAkgkrFoGahw0z4sFQAABkyQOa');
'lobster' : DTM := DTMFromString('mbQAAAHicY2VgYOgB4g4g7gPiyUA8FYjPA/F1IL4CxHeA+DQQrw+TAJJMKJiLARMwYsFgAACaUQgl');
'swordfish' : DTM := DTMFromString('mlwAAAHicY2dgYGhmZGDoBuKJQNwHxJ2MELFyIJZhgGAFIFYCYmUglofSzTFdQJIJK+YCknI4MCMeDAUA/+8G2A==');
'monkfish': DTM := DTMFromString('mggAAAHicY2NgYJjEyMAwEYgXQPE8IJ4GxB+Bct+A+A0DhP0diH8AsbejJcP8miogiwkFcwFJEEYHjDgwBAAAZ90L0w==');
'shark' : DTM := DTMFromString('mggAAAHicY2NgYLBjZGAwB2JHIHYHYg8g1gfiEqBcAxBXA3EzEJcCcQsQd+RHAUkmDMzFgB0w4sAQAAAltwXX');
end;
if FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
WaitOption('Withdraw-5', 300);
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (HPPercent >= 90) then
break;
if FindDTM(DTM, X2, Y2, MIX1, MIY1, MIX2, MIY2) then
begin
HumanMMouse(X2, Y2, 5, 5);
ClickMouse2(False);
if WaitOption('Eat', 300) then
begin
Wait(RandomRange(705, 815));
MarkTime(T);
Inc(FoodC);
end;
end;
until(false)
end;
if FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
WaitOption('Deposit-All', 400);
Wait(RandomRange(425, 675));
end;
FreeDTM(DTM);
end;
Function WithdrawEss: Boolean;
var
X,Y,Ess,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then
Exit;
ColorToleranceSpeed(1);
FixBank;
Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');
if BankScreen then
begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
end else
begin
if (ItemFail > 3) then
Shutdown('Out of essence');
Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
Wait(RandomRange(1750, 2205));
goto Start;
end;
end;
FreeBitmap(Ess);
end;
Function DepositEss: Boolean;
var
T,Slot: Integer;
begin
if not BankScreen then exit;
Slot := RandomRange(9, 20);
MouseItem(Slot, mouse_right);
Wait(RandomRange(50, 115));
WaitOption('Deposit-5', 300);
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Result := False;
if not InvFull then
break;
until(False)
Result := (not InvFull);
end;
Function WithdrawRunes(Method: String): Boolean;
var
ABMP,CBMP,X,Y: Integer;
begin
Result := False;
if not LoggedIn then Exit;
if InvFull then
begin
if not BankScreen then
OpenBankEniola
else if BankScreen then
DepositEss;
Wait(RandomRange(350, 625));
end;
ColorToleranceSpeed(1);
ABMP := BitmapFromString(7, 7, 'meJy7efPxzZuPCwvLiosrSkurboK5' +
'EJSfXwIRh4tk5xTk5hUhq8nIyMnKykMWAaK0tCw0EWRDIAhoDtBwN' +
'HMgggArDGec');
CBMP := BitmapFromString(7, 5, 'meJyTvXBJFoaKiytKS6sg7Ny8IiDK' +
'zy8pLCyDiGRk5GRl5WXnFEDEIYJpaVlwcbg5KSkZEHEgggsCAOmnNDQ=');
if FindBitmapToleranceIn(CBMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(350, 675));
end;
if (Lowercase(Method) = 'contact') then
begin
if FindBitmapToleranceIn(ABMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;
end;
CloseBank;
Result := True;
FreeBitmap(ABMP);
FreeBitmap(CBMP);
end;
Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;
if (Method = 1) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
end else if (Method = 2) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
end else if (Method = 3) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
end else if (Method = 4) then
begin
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
end else if (Method = 5) then
begin
//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_move);
Wait(RandomRange(20, 75));
if (Seq = Fill) then
begin
ClickMouse2(False);
WaitOptionMulti(['ill', 'Fill'], 400)
end else
ClickMouse2(True);
end;
end;
Result := True;
end;
Function FindDecayedPouch(Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;
end;
Function CheckPouches: Boolean;
var
S: Integer;
begin
Result := FindDecayedPouch(S);
end;
Function ContactScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'onest', StatChars, 30, 50, 110, 80);
end;
Function ContactRepair: Boolean;
var
T,T2,T3: Integer;
begin
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 4000) then
Exit;
if ContactScreen then
break;
until(false)
if ContactScreen then
begin
MouseBox(483, 240, 491, 290, 1);
Wait(RandomRange(275, 480));
MouseBox(410, 110, 450, 150, 1);
end;
MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 6000) then
Exit;
if ClickToContinue then
MarkTime(T2);
Wait(RandomRange(125, 275));
if FindNPCChatTextMulti(['Repa', 'epai'], ClickLeft) then
break;
until(false)
MarkTime(T3);
repeat
FindNormalRandoms;
if (TimeFromMark(T3) > 2000) then
Exit;
if ClickToContinue then
MarkTime(T3);
Wait(RandomRange(125, 275));
until(false)
Result := True;
end;
Function RepairPouches(Method: String): Boolean;
var
X,Y,Slot,Spell: Integer;
label
Start;
begin
ColorToleranceSpeed(1);
Start:
FindNormalRandoms;
if not LoggedIn then Exit;
Case Lowercase(Method) of
'spell':
Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
'DJlKvQ=');
'contact':
Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
'YAAA0ZFcCA==');
end;
if FindDecayedPouch(Slot) then
begin
Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
GameTab(tab_Magic);
Wait(Random(100));
if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
begin
MMouse(X, Y, 5, 5);
Wait(Random(100));
if (Lowercase(Method) = 'spell') then
begin
if WaitUpText('epair',RandomRange(250,350)) then
begin
ClickMouse2(True);
Wait(RandomRange(20, 75));
MouseItem(Slot, mouse_left);
Wait(RandomRange(1575, 2150));
Inc(RepairC);
Writeln('Pouch repaied');
end;
end else if (Lowercase(Method) = 'contact') then
begin
if WaitUpText('Contact',RandomRange(250,350)) then
begin
ClickMouse2(True);
if ContactRepair then
begin
Inc(RepairC);
Writeln('Pouches repaied');
end;
end;
end;
end;
end;
if not FindDecayedPouch(Slot) then
Result := True
else
goto Start;
FreeBitmap(Spell);
end;
Procedure HandleBank;
var
S: String;
T: Integer;
label
Bank_End;
begin
if BankScreen then
begin
Mouse(370, 305, 6, 6, True);
if (HPPercent <= EatAt) then
Eat;
WithdrawEss;
if (InvCount = 23) then
GoTo Bank_End;
if PP1 then
begin
if HandlePouches(5, Fill) then
WithdrawEss;
if HandlePouches(2, Fill) then
WithdrawEss;
end else
if HandlePouches(2, Fill) then
WithdrawEss;
Bank_End:
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if InvFull then
break;
until(false)
if InvFull then
begin
if CheckPouches then
if WithdrawRunes(Lowercase(RepairMethod)) then
if RepairPouches(Lowercase(RepairMethod)) then
if OpenBankEniola then
if WithdrawEss then
if CloseBank then
Exit;
if (GetMMLevels('run',S) <= RestAt) then
RestUntil(RandomRange(90, 100));
end;
end;
end;
Function FindAltar(Var X,Y: Integer): Boolean;
var
TPA,PBox: TPointArray;
i,a,CTS: Integer;
ATPA: T2DPointArray;
Cols,Tols: TIntegerArray;
HMods,SMods: Array of Extended;
begin
Result := False;
if not LoggedIn then Exit;
if IsUpTextMultiCustom(['-rune', 'unec', 'rafting']) then
begin
Result := True;
Exit;
end;
PBox := TPAFromBox(IntToBox(240, 130, 275, 185));
CTS := GetColorToleranceSpeed;
if BankScreen then
begin
Result := True;
Exit;
end;
Cols := [6514550];
Tols := [9];
HMods := [0.23];
SMods := [0.20];
for i := 0 to High(Cols) do
begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(HMods[i], SMods[i]);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Cols[i], MSX1, MSY1, MSX2, MSY2, Tols[i]);
ColorToleranceSpeed(CTS);
TPA := ClearTPAFromTPA(TPA, PBox);
if (Length(TPA) > 0) then break;
end;
if (Length(TPA) < 1) then Exit;
ATPA := TPAToATPAEx(TPA, 30, 30);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
for a := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[a], X, Y);
HumanMMouse(X, Y, 15, 15);
if WaitUpTextMulti(['-rune', 'unec', 'rafting'], 500) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;
end;
end;
Function CraftRunes: Boolean;
var
X,Y,F,Seq: Integer;
label
ClickAltar;
begin
Seq := 0;
OldXP := Round(GetXPBarTotal);
ClickAltar:
if not LoggedIn then Exit;
if (AC > 4) then
Seq := 4;
if (Seq < 4) then
begin
if FindAltar(X, Y) then
begin
ClickMouse2(True);
Inc(AC);
if not DidRedClick then
goto ClickAltar;
While IsMoving_F do
Wait(1);
if (Seq < 3) then
begin
HumanMMouse(640, 220, 15, 15);
Wait(RandomRange(875, 1125));
While IsMoving_F do
Wait(1);
Wait(RandomRange(105, 165));
end else if (Seq = 3) then
GameTab(tab_Magic);
end else
begin
if (F > 4) then
begin
TeleportOut;
Exit;
end;
Inc(F);
SetRun(True);
BankToAltar;
FindNormalRandoms;
SetRun(True);
goto ClickAltar;
end;
end;
{Handle first set of pouches}
if (Seq = 0) then
begin
if PP1 then //Giant pouch
begin
if HandlePouches(5, Empty) then
Seq := 1;
goto ClickAltar;
end;
if PP2 then //Large pouch only
begin
if HandlePouches(4, Empty) then
Seq := 2;
goto ClickAltar;
end;
if ((not PP1) and (not PP2)) then //No Giant/Large pouches
begin
if HandlePouches(3, Empty) then
Seq := 3;
goto ClickAltar;
end;
end;
{Handle second set of pouches}
if (Seq = 1) then
begin
if PP2 then //Large pouch
begin
if HandlePouches(4, Empty) then
Seq := 2
end;
if not PP2 then //No large pouch
begin
if HandlePouches(3, Empty) then
Seq := 3;
end;
goto ClickAltar;
end;
{Handle third set of pouches}
if (Seq = 2) then
begin
if HandlePouches(3, Empty) then
Seq := 3;
goto ClickAltar;
end;
{Exit pouch-handling}
if ((Seq = 3) or (Seq = 4)) then
begin
AddRun := True;
Result := True;
end;
end;
Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s: integer;
begin
if not LoggedIn then Exit;
if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if NearSymbol(3) then
begin
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
CloseBank;
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
OnScreen(False);
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
end;
Procedure SuperDuperLooper;
begin
if not LoggedIn then Exit;
FindNormalRandoms;
MouseSpeed := (RandomRange(15, 21));
if AboveGround then
begin
{At ladder}
if NearLadder then
begin
if UsePrayer then
begin
if HandleAltar then
HandleLadder;
end else
HandleLadder;
end else if (NearSymbol(4) and (not NearLadder)) then
begin
if WalkToLadder then
begin
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
if UsePrayer then
begin
if HandleAltar then
HandleLadder;
end else
HandleLadder;
end;
end;
end else
begin
{Bank}
if NearSymbol(3) then
begin
if not InvFull then
begin
if OpenBankEniola then
HandleBank
else
Exit;
end else if InvFull then
begin
if BankToAltar then
if CraftRunes then
TeleportOut
else
While IsMoving_F do
Wait(1)
else
While IsMoving_F do
Wait(1);
end;
end else
begin
CraftRunes;
TeleportOut;
end;
end;
end;
procedure FoundARandom;
begin
Writeln('Found a random!');
PlaySound(ScriptPath+'evilaugh.wav');
Wait(RandomRange(10000, 20000));
end;
begin
Smart_Server := 86;
Smart_Members := True;
Smart_Signed := True;
Smart_SuperDetail := False;
Writeln('Loading script...');
setupSRL();
DeclarePlayers;
LoginPlayer;
SetNorth;
Smart_ClearCanvas;
UpdateSPSMap;
LoadVars;
LoadImg;
//SRL_Procs[SRL_OnFindRandom] := @FoundARandom;
SetupSRLStats(157, SRLStats_Username, SRLStats_Password);
Writeln('Script loaded!');
ToggleXPBar(True);
XPToLvl := XPTillNextLevel(Skill_Runecrafting);
if UsePrayer then
begin
SetPrayers;
ActivateQuickPrayer;
end;
OnScreen(False);
AddOnTerminate('DestroyImg');
Repeat
if not LoggedIn then
begin
LoginPlayer;
ClickNorth(SRL_ANGLE_HIGH);
end;
BreakHandler(BreakIn,BreakFor,Bir,Bfr);
if (TimeFromMark(CommitTime)>=30000) then
Commit;
if (TimeFromMark(ReportTime)>=5000) then
Report;
SuperDuperLooper;
Until(AllPlayersInactive)
end.
Current projects:
[ AeroGuardians (GotR minigame), Motherlode Miner, Blast furnace ]
"I won't fall in your gravity. Open your eyes,
you're the Earth and I'm the sky..."
Has 1.71 also fixed the teleporting loop, Flight?
118/120 Dungeoneering
Current projects:
[ AeroGuardians (GotR minigame), Motherlode Miner, Blast furnace ]
"I won't fall in your gravity. Open your eyes,
you're the Earth and I'm the sky..."
Something goes wrong with 1.71, it gets stuck RIGHT at the stairs, just hovers over a couple times but never clicks in.
118/120 Dungeoneering
Current projects:
[ AeroGuardians (GotR minigame), Motherlode Miner, Blast furnace ]
"I won't fall in your gravity. Open your eyes,
you're the Earth and I'm the sky..."
93 Runecrafting.Estimated number of hours till 99?
Please flight still fails to find spell DTM!
Flawless now, thanks very much Fight.
got 99 runecrafting flight))
Thanks once again flight.
lol, it kept me logged in all night, just standing at the stairs - i think SIMBA update caused script to stop, but keep me in game (lots of reports) - 1.71 works fine so far though
118/120 Dungeoneering
Sometimes the script clicks on the nearby mining spot in 1.71, but it's a small problem tho![]()
Yea mine was standing at one place all night as well, hopefully it wasn't a problem since I was just at the banker...
And I'm not sure if anyone told you this or you noticed, but in the older versions my character would run off exploring towards observatory/castle wars and get stuck until the script was restarted. Not sure if thats still an issue.
1.71 is working fine so far for me though, thanks flight![]()
Wonderful, I'll add you to the list.
Yes, I've seen this happen once before, very rarely, but I watched it as well. I think I might know why it happens, but just a theory. Like you said, it's a small problem. Either way the script will detect it's lost, should it get lost, and teleport back to start over.
The running off-course was due to the previous static coordinate-walking (which I've unfortunately had to re-apply in V1.71). I chose a more realistic coordinate for your player to walk to get to the ladder; it should hold steady, atleast until I can work out and accurate road color-finding walking system.
Current projects:
[ AeroGuardians (GotR minigame), Motherlode Miner, Blast furnace ]
"I won't fall in your gravity. Open your eyes,
you're the Earth and I'm the sky..."
A good way to fill you bank are "team capes" there are 50 different capes and they just cost like 2k ea. Then you got 50 more things in bank. make sure you got every single rune in bank. Then if its not filled up yet buy raw and cooked food. If its not filled yet you can buy all types of arrows (g, g+ , g++)
After that your bank should definietly filled up =)
I will try to answer all Runescape related questions!
I will try to answer all Runescape related questions!
Hm, still has the problem after a while of getting to the ladder, but not going down.
It's fine for a couple runs in the beginning, but in the end, gets stuck above ground at the ladder.
118/120 Dungeoneering
yep it is getting stuck when he goes south of ladder instead of north, meaning it is impossible to use script for more than a couple runs, the v1.71
That should be really easy to fix for you flight. It seems that the reason for the bug is that if it goes south of ladder instead of north of the ledder it cant find the color anymore. If i rotate the camera for just a millisecond it works flawless for another couple of runs again untill it goes south of ladder instead of north again.
* Something like
If not finding ledder
rotate camera
First proggy of v 1.71 so far
![]()
Last edited by Imanoobbot; 03-14-2012 at 10:04 PM.
I will try to answer all Runescape related questions!
171 is almost flawless except the occasional ladder problem, but with supervision its not a big issue.
one problem i have since 165 is that the xp gain stays at 1 if the player has Lots! on the first xp counter. Nothing serious, just pointing it out. doesnt really affect the script other than not showing xp gains
cant find the image I need to get this script started. can someone give me the link?
There are currently 1 users browsing this thread. (0 members and 1 guests)