Simba Code:
program CosmasJdzRedEggs;
{$DEFINE SMART}
{$i srl-6/srl.simba}
{$i srl-6/lib/misc/srlplayerform.simba}
{$I SPS/lib/SPS-RS3.Simba}
// Farms red spider eggs at bank of goodwill //
{ Since cant attach stuff here so setup goes there:
Download map and place in runescape_other: http://i.imgur.com/UhRQzL1.png?1
Graphics mode opengl preffered.
Bank: http://i.imgur.com/8IPXAhh.png?1
Setup: http://i.imgur.com/QGGjwok.png?1
Save inventory in setup as Preset1
Progress reports: http://i.imgur.com/Vhd55uZ.png?1
}
const
PosDtm := DTMFromString ('mbQAAAHicY2VgYBBigAANIJaC8mWAWA6IpaFyBkDs4a7LsOz/f4bPnznA+PLV8wz/geKSaJgRiFmBmBkJgwEAof0MFg==');
Background := BitmapFromString (550, 130, 'meJztwjENAAAMAyD/biqqfy1M' +
'xT4I6aKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq' +
'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq' +
'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq' +
'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq' +
'qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq' +
'qqqqqqqqqqqqqqqqqr+P8MkrPg=');
PossibleWorldsArray = [4, 5, 6, 9, 10, 12, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 35, 36, 37, 39, 40, 44, 45, 46, 49, 50, 51, 53, 54, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 82, 83, 84, 85, 87, 88, 89, 91, 92, 98, 99, 100, 103, 104, 105, 106, 116, 117, 119, 123, 124, 134, 138];
Centerx := 290;
Centery := 199;
LootingBox := inttobox (194, 105, 412, 272);
var
{ Patternloot variables }
shiftx := 0;
shifty := 0;
StaticPoints := [[ - 32, 32], [0, 32], [32, 32], [ - 32, 0], [32, 0], [ - 32, - 32], [0, - 32], [32, - 32]];
StaticRotatedPoints, DynamicPoints: array [0..7] of array [0..1] of extended;
StandartEggsLocationsArray: array [0..7] of boolean;
LootingPattern: array [0..7] of integer;
{ Other variables }
Miscli := 0;
CheckedToPile := 0;
Whopped := false;
LootAntibanned := false;
Fail := 0;
Flag := 0;
TripsDone := 0;
RedNoob := 0;
EggsBanked, EggsOnFloor, MiniBreakTimer, BreakingTime, RestartTime: integer;
CurrentTripTime, TotalScriptTime, PlayersTimer, SixhourFixTime: ttimemarker;
BreakEvery := 2150000;
BreakFor := 432000;
procedure InitPlayerForm();
begin
with playerForm do
begin
name := 'CosmasJDZ Eggs form';
editBoxLabels := ['Run time before switch(mins)', 'Fails allowed'];
editBoxDefaults := ['360', '10'];
comboBoxLabels := ['World', 'Alternative looting?'];
comboBoxDefaults := ['63', 'False'];
setLength(comboBoxItems, length(comboBoxLabels));
comboBoxItems[0] := ['4', '5', '6', '9', '10', '12', '14', ' 15', '16', '21', '22', '23', '24', '25', '26', '27', '28', '31', '32', '35', '36', '37', '39', '40', '44', '45', '46', '49', '50', '51', '53', '54', '56', '58', '59', '60', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '76', '77', '78', '79', ' 82', '83', '84', '85', '87', '88', ' 89', '91', '92', '98', '99', '100', '103', '104', '105', '106', '116', '117', '119', '123', '124', '134', '138'];
comboBoxItems[1] := ['False', 'True'];
end;
end;
procedure DeclarePlayers();
var
i: Integer;
begin
players.setup(playerForm.players);
currentPlayer := 0;
for i := 0 to high(players) do
with players[i] do
begin
integers[0] := strToInt(playerForm.players[i].settings[0]);
integers[1] := strToInt(playerForm.players[i].settings[1]);
integers[2] := strtoint(playerform.players[i].settings[2]);
booleans[0] := strtobool(playerform.players[i].settings[3]);
end;
end;
procedure Statusas(debugMessage: string);
var
h, m, s, ht, mt, st: Integer;
begin
Smartimage.clearArea(inttobox(1, 450, 551, 580));
convertTime((TotalScriptTime.gettime()), h, m, s);
convertTime((CurrentTripTime.gettime()), ht, mt, st);
smartImage.drawBitmap(Background, point(1, 450));
smartImage.drawText(' Cosmas JDZ Red eggs v.3.0 ' + ' Fails: ' + tostr(fail) + ' Flags ' + tostr(flag), point(10, 460), SmallChars, false, 1054574);
smartImage.drawText(' This trip time: ' + (tostr(mt) + 'm ' + toStr(s) + 's') + ' Trips done: ' + tostring(TripsDone) + ' Worldhops: ' + tostr(RedNoob), point(10, 475), SmallChars, false, 1054574);
smartImage.drawText(' Time running: ' + toStr(h) + 'h ' + toStr(m) + 'm ' + toStr(s) + 's' + ' Eggs collected: ' + tostring(trunc(EggsBanked)) + ' Eggs/Hour: ' + tostring(trunc(((EggsBanked + 0.00000001) / (TotalScriptTime.getTime() + 0.00000001)) * 3600000)), point(10, 490), SmallChars, false, 1054574);
smartimage.drawText(' Now: ' + debugMessage, point(10, 505), SmallChars, false, 1054574);
end;
procedure breakTimes();
begin
MiniBreakTimer := getSystemTime() + 2 * (breakevery + random( - 280800, 280800));
BreakingTime := breakfor + random(60000, 600000) + random( - 21600, 21600);
Statusas('Generating break times');
end;
procedure TakeBreak();
begin
if getSystemTime() >= MiniBreakTimer then
begin
Statusas('Taking a break');
RestartTime := (getSystemTime() + BreakingTime);
wait(random(2000, 4000));
players[currentplayer].exitToLobby();
if getsystemtime() >= RestartTime then
wait(random(478000, 900000));
repeat
wait(15000 + random( - 7500, 7500));
Statusas('Miliseconds left: ' + tostr(RestartTime - getsystemtime()));
until getSystemTime() >= RestartTime;
players[currentplayer].exittolobby();
players[currentplayer].switchtoworld(PossibleWorldsArray[random(0, 78)]);
wait(gaussrangeint(5500, 7500));
exitTreasure();
breaktimes();
mainscreen.setAngle(ms_angle_high);
end;
end;
procedure Logintow();
begin
players[currentplayer].logintolobby();
players[currentplayer].switchtoworld(players[currentplayer].integers[2]);
wait(gaussrangeint(4200, 6750));
minimap.clickcompass();
mainscreen.setzoom(true);
mainscreen.setangle(ms_angle_high);
exitTreasure();
end;
procedure MiniAntiban();
begin
if not isloggedin() then
exit;
case random(18457) of
0..341: Minimap.setAngle(trunc(minimap.getangledegrees()) + random( - 145, 145));
342..451: Minimap.setAngle(trunc(minimap.getangledegrees()) + gaussrangeint(115, 135));
452..515: Minimap.setAngle(trunc(minimap.getangledegrees()) + gaussrangeint( - 115, - 135));
516..525: hoverskill(random(1, 28));
526..614: hoverskill(skill_summoning);
614..619: boredhuman();
1016..1018:
begin
if tabbackpack.count() >= 4 then
mouse(MiddleBox(tabbackpack.getslotbox(random(4, tabbackpack.count()))), mouse_right);
chooseoption.select(['examine']);
end;
end;
end;
procedure CloseBank();
var
afterbanktimer: ttimemarker;
begin
BankScreen.clickButton(BANK_BUTTON_PRESET_1);
afterbanktimer.start();
repeat
wait(gaussrangeint(178, 283));
until ((bankscreen.isOpen() = false) or (Afterbanktimer.gettime() >= 5000));
if bankscreen.isOpen() then
begin
bankscreen.close();
wait(gaussrangeint(1745, 3654));
end;
Mainscreen.setAngle(ms_angle_high);
inc(TripsDone);
end;
procedure InBank();
begin
if not isloggedin() then
exit;
if (((101 >= getitemamount(bankscreen.getbankslotbox(1))) or (2 >= getitemamount(bankscreen.getbankslotbox(2)))) or (2 >= getitemamount(bankscreen.getbankslotbox(4)))) then
begin
Statusas('Not enough scrolls found int the bank');
players[currentplayer].isactive := false;
closeBank();
exit;
end;
wait(gaussrangeint(512, 874));
case random(118) of
0..9:
begin
wait(gaussrangeint(250, 475));
mousebox(BankScreen.getPackSlotBox(gaussrangeint(4, 25)), mouse_right);
wait(gaussrangeint(250, 475));
if chooseoption.isOpen() then
chooseoption.select(['All', 'Deposti-All']);
wait(gaussrangeint(315, 785));
end;
10..12:
begin
wait(gaussrangeint(411, 785));
mousebox(BankScreen.getBankSlotBox(3), mouse_right);
wait(gaussrangeint(250, 475));
if chooseoption.isOpen() then
chooseoption.select(['Examine']);
wait(gaussrangeint(411, 785));
end;
end;
closeBank();
end;
procedure BankFailsafe();
var
x, y, i: integer;
TPA: TPointArray;
ATPA: T2DPointArray;
btm: ttimemarker;
begin
if not Isloggedin() then
exit;
Statusas('Bank failsafe');
if not bankscreen.isOpen() then
begin
mousecircle(599, 35, 10, mouse_left);
mousebox(mainscreen.getbounds(), mouse_move);
minimap.setAngle(135 + random( - 15, 17));
wait(random(1250, 2354));
FindColorsSpiralTolerance(x, y, TPA, 10673123, mainScreen.getBounds(), 2, colorSetting(2, 0.26, 2.06));
ATPA := TPA.toATPA(20, 20);
ATPA.filterBetween(0, 3);
ATPA.sortFromMidPoint(mainscreen.playerPoint);
smartImage.debugATPA(ATPA);
Statusas('Banking trying to catch bank from roof top');
for i := 0 to 3 do
begin
if length(atpa) > 0 then
mouse(middleTPA(ATPA[0]).x, middleTPA(ATPA[0]).y + (30 * i) + random( - 5, 5), MOUSE_MOVE);
if isMouseOverText(['Donate', 'odwill', 'ell'], 500) then
begin
btm.start();
fastclick(MOUSE_right);
wait(547 + random(200));
ChooseOption.select(['Bank', 'Open Bank']);
repeat
wait(random(1050, 1415));
until ((bankscreen.isopen() = true) or (btm.gettime() > 8000));
if bankscreen.isOpen() then
break;
end;
end;
end;
if not bankscreen.isopen() then
begin
statusas('Havent banked');
inc(fail);
if fail > players[currentplayer].integers[1] then
terminatescript;
end
else
InBank();
end;
function Bank(): boolean;
var
x, xb, xp, y, yp, yb, i: integer;
TPA, TPAB, TPAP: TPointArray;
ATPA, ATPAB, ATPAP: T2DPointArray;
begin
if not Isloggedin() then
exit;
result := false;
Statusas('Searching for bank by shinny gold >:-)');
FindColorsSpiralTolerance(x, y, TPA, 10673123, mainScreen.getBounds(), 2, colorSetting(2, 0.26, 2.06));
ATPA := clustertpa(TPA, 4);
ATPA.filterBetween(0, 20);
smartimage.debugtpa(tpa);
smartImage.debugATPA(ATPA);
for i := 0 to high(ATPA) do
begin
Mouse(middleTPA(ATPA[i]), Mouse_move);
if isMouseOverText(['Donate', 'odwill', 'ell'], 500) then
begin
Fastclick(Mouse_right);
Chooseoption.isOpen(1000);
wait(gaussrangeint(166, 289));
ChooseOption.select(['Bank', 'Open Bank']);
if bankscreen.isOpen(5000) then
begin
Inbank();
result := true;
exit;
end;
end;
end;
Statusas('Trying to bank searching bank booth blue and pink colors');
if FindColorsSpiralTolerance(xb, yb, TPAB, 10326079, mainScreen.getBounds(), 6, colorSetting(2, 0.07, 0.22)) then
begin
ATPAB := clustertpa(TPAB, 4);
ATPAB.filterBetween(0, 20);
smartimage.debugtpa(tpaB);
smartImage.debugATPA(ATPAB);
FindColorsSpiralTolerance(xp, yp, TPAP, 10133924, mainScreen.getBounds(), 7, colorSetting(2, 0.24, 0.33));
ATPAP := clustertpa(TPAP, 2);
ATPAP.filterBetween(0, 30);
smartimage.debugtpa(tpaP);
smartImage.debugATPA(ATPAP);
writeln(length(ATPAP));
writeln(length(ATPAB));
if (((length(ATPAP)) > 0) and ((length(ATPAB)) > 0)) then
begin
for i := 0 to high(ATPAP) do
begin
if (distance(MiddleTPA(ATPAB[0]), MiddleTPA(ATPAP[i])) < 50) then
begin
smartimage.drawCross(medianTPA(ATPAP[i]), 20, 1158749);
Mouse(medianTPA(ATPAP[i]), Mouse_move);
if isMouseOverText(['Donate', 'odwill', 'ell'], 500) then
begin
Fastclick(Mouse_right);
Chooseoption.isOpen(1000);
wait(gaussrangeint(126, 589));
ChooseOption.select(['Bank', 'Open Bank']);
if bankscreen.isOpen(5000) then
begin
Inbank();
result := true;
exit;
end;
end;
end;
end;
end
else
begin
if length(ATPAB) > 0 then
begin
Mouse(middleTPA(ATPAB[0]), Mouse_move);
if isMouseOverText(['Donate', 'odwill', 'ell'], 500) then
begin
Fastclick(Mouse_right);
Chooseoption.isOpen(1000);
wait(gaussrangeint(66, 289));
ChooseOption.select(['Bank', 'Open Bank']);
if bankscreen.isOpen(5000) then
begin
Inbank();
result := true;
exit;
end;
end;
end;
end;
end;
end;
procedure RotateToBank();
var
x, y, xv, yv, ml: integer;
TPA: tpointarray;
ATPA: T2dpointarray;
begin
if not isloggedin() then
exit;
FindColorsSpiralTolerance(x, y, TPA, 14213766, minimap.getbounds(), 13, colorSetting(2, 0.18, 2.98));
if length(TPA) < 1 then
exit;
atpa := clustertpa(tpa, 4);
atpa.filterBetween(0, 6);
smartImage.debugTPA(TPA, true);
SmartImage.debugATPA(atpa);
if Length(atpa) < 1 then
exit;
ml := gaussrangeint(40, 90);
xv := TPA[0].x - minimap.getCenterPoint().x;
yv := minimap.getCenterPoint().y - TPA[0].y;
minimap.setangle(trunc(degrees(ArcTan2(yv, xv)) + minimap.getangledegrees() - 90 + ml));
end;
function StartPosition(): boolean;
var
fx, fy, xb, yb, x, y: integer;
TPAB: tpointarray;
res: tpoint;
begin
if not isloggedin() then
exit;
result := false;
if minimap.finddtm(PosDtm, fx, fy) then
begin
smartimage.drawcross(point(fx, fy), 2, 255);
smartimage.drawcross(minimap.pointtomainscreen(point(fx, fy)), 10, 255);
writeln(distance(minimap.getcenterpoint(), point(fx, fy)));
if (distance(minimap.getcenterpoint(), point(fx, fy))) >= 12 then
begin
if (pointinbox(minimap.pointtomainscreen(point(fx, fy)), inttobox(200, 1, 575, 385)) or ((pointinbox(minimap.pointtomainscreen(point(fx, fy)), inttobox(3, 196, 211, 387))))) then
begin
mouse(minimap.pointtomainscreen(point(fx, fy)), mouse_left);
wait(gaussrangeint(1200, 1750));
result := true;
end
else
begin
minimap.setAngle(gaussrangeint(30, 60));
end;
end
else
result := true;
end
else
begin
if (PointInBox(sps.getplayerpos(), inttobox(126, 114, 138, 134))) = false then
begin
Mainscreen.setAngle(ms_angle_high);
Sps_PosToMM(point(130, 126), sps.getplayerpos(), res);
if 0 >= (res.x) then
exit;
if PointInBox(minimap.pointstomainscreen([res])[0], inttobox(185, 1, 575, 388)) then
begin
mouse(minimap.pointstomainscreen([res])[0], mouse_left);
result := true;
end
else
begin
Sps.walkPath([sps.getplayerpos(), point(130 + random( - 4, 4), 126 + random( - 4, 4))]);
end;
wait(random(785, 1486));
Minimap.waitPlayerMoving(random(1457, 2758));
result := true;
end
else
begin
Mainscreen.setAngle(ms_angle_high);
end;
end;
case random(143) of
0..7:
if findcolortolerance(x, y, 13929833, inttobox(107, 583, 157, 590), 15) then
typeSend('', true);
end;
end;
procedure BankMain();
begin
if not isloggedin() then
exit;
EggsBanked := EggsBanked + tabbackpack.count() - 3;
if not Bank() then
begin
RotateToBank();
wait(gaussrangeint(547, 1250));
if not bank() then
begin
if not StartPosition() then
StartPosition();
wait(gaussrangeint(1780, 3456));
if not Bank() then
begin
sps.blindWalk(point(122, 119));
wait(gaussrangeint(1500, 2785));
RotateToBank();
wait(gaussrangeint(547, 1250));
if not Bank() then
Bankfailsafe();
end;
end;
end;
end;
function SpecBar(): integer;
var
x, y, i: integer;
begin
if not Isloggedin() then
exit;
result := - 1;
for i := 0 to 27 do
begin
//writeln('SPecbar');
if FindColorTolerance(x, y, 7822103, inttobox(168 - (5 * i), 145, 169 - (5 * i), 160), 15, colorSetting(2, 0.02, 2.0)) then
begin
result := 28 - i;
// writeln(result);
exit;
end;
end;
end;
function _filter(Spalva: integer; Box: Tbox; Tol: integer; ColSettings: TColorSettings): tbox;
var
x, y: integer;
TPA: TPointArray;
ATPA: T2DPointArray;
begin
FindColorsSpiralTolerance(x, y, TPA, Spalva, Box, Tol, ColSettings);
ATPA := TPA.toATPA(20, 20);
result := GetATPABounds(atpa);
end;
procedure lootingAntiban();
begin
if not isloggedin() then
exit;
case random(3500) of
0..145: smallrandommouse();
146..174: mouseoffclient(4);
175..183:
begin
wait(gaussrangeint(1450, 2145));
pickupmouse();
end;
184..242: Minimap.setAngle(trunc(minimap.getangledegrees()) + (random( - 45, 45)));
243..247: sleepAndMoveMouse(random(1, 4500) + gaussrangeint(1235, 2475));
283..285: hoverRandomSkill();
286: boredhuman();
287..415: randomCompass(30, 145, false);
416..453: mousemovingobject();
end;
LootAntibanned := true;
end;
function PartiallyInBox(mmpb, box: tbox): boolean;
begin
result := false;
if not isloggedin() then
exit;
if (((((mmpb.x1 < box.x2) and (mmpb.x1 > box.x1)) and ((mmpb.y2 > box.y1) and (mmpb.y2 < box.y2))) or (((mmpb.x1 < box.x2) and (mmpb.x1 > box.x1)) and ((mmpb.y1 > box.y1) and (mmpb.y1 < box.y2)))) or ((((mmpb.x2 < box.x2) and (mmpb.x2 > box.x1)) and ((mmpb.y1 > box.y1) and (mmpb.y1 < box.y2))) or (((mmpb.x2 < box.x2) and (mmpb.x2 > box.x1)) and ((mmpb.y2 > box.y1) and (mmpb.y2 < box.y2))))) then
begin
result := true;
exit;
end;
end;
function FindEggs(box: tbox = LootingBox): tbox;
var
x, y, eggsbefore, i: integer;
TPA, TPAmm: TPointArray;
ATPA: T2DPointArray;
lootingtimer: ttimemarker;
mmpb: tbox;
begin
if not isloggedin() then
exit;
result := (inttobox(0, 0, 0, 0));
EggsOnFloor := 0;
tpamm := minimap.pointsToMainscreen(minimap.getdots(MM_DOT_ITEM, minimap.getbounds()), true);
if chooseoption.isopen() then
begin
if chooseoption.optionsexist(['eggs', 'ggs']) then
chooseoption.select(['eggs', 'ggs'])
else
chooseoption.close;
wait(gaussrangeint(166, 283));
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2000));
Wait(gaussrangeint(495, 603));
end;
for i := 0 to high(tpamm) do
begin
mmpb := [tpamm[i].x - 32, tpamm[i].y - 32, tpamm[i].x + 32, tpamm[i].y + 32];
FindColorsSpiralTolerance(x, y, TPA, 9342998, mmpb, 10, colorSetting(2, 4.99, 1.08));
tpa := clearTPAFromTPA(tpa, TPAFromBox(_filter(2930118, inttobox(212, 119, 360, 260), 20, colorSetting(2, 0.23, 1.83))));
tpa := clearTPAFromTPA(tpa, TPAFromBox(_filter(10260030, inttobox(212, 119, 360, 260), 5, colorSetting(2, 0.08, 0.15))));
if length(tpa) < 1 then
continue;
atpa := clustertpa(tpa, 4);
atpa.filterBetween(0, 8);
ATPA.sortFromMidPoint(mainscreen.playerPoint);
SmartImage.debugATPA(atpa);
if Length(atpa) < 1 then
continue;
if partiallyinbox(mmpb, box) then
begin
result := GetTPABounds(atpa[0]);
EggsOnFloor := length(atpa);
exit;
end;
end;
end;
function FindEggsOld(box: tbox = LootingBox): tbox;
var
x, y, i: integer;
TPA: TPointArray;
ATPA: T2DPointArray;
begin
result := (inttobox(0, 0, 0, 0));
if not isloggedin() then
exit;
EggsOnFloor := 0;
FindColorsSpiralTolerance(x, y, TPA, 9342998, box, 10, colorSetting(2, 4.99, 1.08));
tpa := clearTPAFromTPA(tpa, TPAFromBox(_filter(2930118, inttobox(212, 119, 360, 260), 20, colorSetting(2, 0.23, 1.83))));
tpa := clearTPAFromTPA(tpa, TPAFromBox(_filter(10260030, inttobox(212, 119, 360, 260), 5, colorSetting(2, 0.08, 0.15))));
if length(TPA) < 1 then
exit;
atpa := clustertpa(tpa, 4);
atpa.filterBetween(0, 7);
atpa.sortFromMidPoint(mainscreen.playerPoint);
SmartImage.debugATPA(atpa);
if Length(atpa) < 1 then
Exit;
if GetTPABounds(atpa[0]).x1 < 1 then
Exit;
result := GetTPABounds(atpa[0]);
EggsOnFloor := length(atpa);
end;
procedure Minibreak();
begin
if not isloggedin() then
exit;
case random(914) of
0..11: mouseOffClient(OFF_CLIENT_TOP);
12..35: mouseOffClient(OFF_CLIENT_RIGHT);
36..57: mouseOffClient(OFF_CLIENT_RANDOM);
58..74:
begin
wait(random(1, 7000) + gaussrangeint(3500, 8500 + random(122, 4150)));
pickupmouse();
case random(7) of
0..1: smallrandommouse();
2..4: mouseMovingObject();
end;
end;
75..83: mouseMovingObject();
84..91: smallrandommouse(200);
92..142:
begin
case random(21) of
0..8: mouseOffClient(OFF_CLIENT_RIGHT);
9: mouseOffClient(OFF_CLIENT_TOP);
10..20: mouseOffClient(OFF_CLIENT_RANDOM);
end;
case random(35) of
0..11: wait(gaussrangeint(4423, 7425));
12..33: wait(gaussrangeint(11111 - random(3452, 10574), 17450 + random(4521, 7521)));
34: wait(random(35000, 55000) + gaussrangeint(1235, 4520 + random(250, 47000)));
end;
end;
end;
end;
procedure PickUpEgg(box: tbox = LootingBox);
var
x, y, eggsBefore, eggsAfter: integer;
boxas: tbox;
lootingtimer: ttimemarker;
missclickPoint: tpoint;
begin
Lootantibanned := false;
Whopped := false;
if (Isloggedin() = false) then
exit;
if (tabbackpack.isFull()) then
exit;
if Ismouseovertext(['Red', 'Take Red']) then
begin
flag := 0;
getmousepos(x, y);
case random(47) of
0..11:
begin
case random(874) of
0..414: missmouse(point(x, y), true);
415..873: fastclick(mouse_left);
end;
wait(gaussrangeint(153, 274));
end;
25..46:
begin
case random(874) of
0..174:
begin
missmouse(point(x, y), true);
multiclick(point(x, y), 75, 3);
end;
175..873: multiclick(point(x, y), 75, 3);
end;
end;
end;
end;
if ((chooseoption.isopen()) and (chooseoption.optionsexist(['eggs', 'ggs']))) then
begin
chooseoption.select(['eggs', 'ggs']);
flag := 0;
end;
if ((tabbackpack.isFull()) or (findEggs(box).x1 <= 0)) then
exit;
boxas := findEggs(box);
case random(3874) of
0..1274:
begin
Mousecircle(boxas.getMiddle.x, boxas.getMiddle.y, 9, mouse_move);
if ((ismouseovertext(['Donate', 'onate', 'Bank'])) or (Ismouseovertext(['Spirit', 'Interact', 'pirit', 'pirit spider']))) then
begin
minimap.setAngle(Trunc(minimap.getangledegrees()) + Random(30, 90));
exit;
end;
if Ismouseovertext(['Red', 'Take Red']) then
begin
flag := 0;
case random(415) of
0..118: missmouse(boxas.getmiddle(), true);
119..414: Fastclick(mouse_left);
end;
case random(112) of
0..43:
begin
wait(gaussrangeint(220, 315));
mousebox(boxas, mouse_right);
ChooseOption.optionsExist(['eggs', 'ggs']);
Chooseoption.select(['eggs', 'ggs']);
end;
end;
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2000));
Wait(gaussrangeint(595, 703));
end
else
Mousecircle(boxas.getMiddle.x, boxas.getMiddle.y, 9, mouse_left);
end;
1275..3874:
begin
Mousecircle(boxas.getMiddle.x, boxas.getMiddle.y, 9, mouse_right);
ChooseOption.isOpen(gaussrangeint(475, 987));
if ((ismouseovertext(['Donate', 'onate', 'Bank'])) or (Ismouseovertext(['Spirit', 'Interact', 'pirit', 'pirit spider']))) then
begin
minimap.setAngle(Trunc(minimap.getangledegrees()) + Random(30, 90));
exit;
end;
if chooseoption.optionsexist(['Trade', 'with', 'rade']) then
begin
Statusas('Switching world because someone is messing up');
inc(RedNoob);
players[currentplayer].exittolobby();
players[currentplayer].switchtoworld(PossibleWorldsArray[random(0, 78)]);
wait(gaussrangeint(5500, 8780));
Whopped := true;
mainscreen.setzoom(true);
mainscreen.setangle(ms_angle_high);
exitTreasure();
exit;
end;
if ChooseOption.optionsExist(['eggs', 'ggs']) then
begin
if (length(chooseoption.getOptions()) >= 5) then
begin
Chooseoption.select(['eggs', 'ggs']);
flag := 0;
case random(47) of
10..12: smallrandommouse(24);
28..29: smallrandommouse(153);
17..23:
begin
wait(gaussrangeint(495, 615));
mousecircle(290, 199, 11, mouse_move);
end;
24..47:
begin
gaussrangeint(175, 275);
mousebox(boxas, mouse_right);
if ChooseOption.optionsExist(['eggs', 'ggs']) then
begin
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2000));
wait(gaussrangeint(78, 186));
Chooseoption.select(['eggs', 'ggs']);
flag := 0;
Wait(gaussrangeint(595, 715));
exit;
end;
end;
end;
end
else
Chooseoption.select(['eggs', 'ggs']);
Flag := 0;
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2000));
Wait(gaussrangeint(795, 715));
end
else
begin
ChooseOption.close();
inc(Flag);
if Flag >= 6 then
begin
if not StartPosition() then
StartPosition();
minimap.setangle(random(0, 45));
inc(Fail);
end;
end;
end;
end;
smartimage.clearArea(inttobox(1, 1, 799, 450));
end;
procedure SpamRoutine();
var
x, y: integer;
i: integer;
begin
if not Isloggedin() then
exit;
if not findcolortolerance(x, y, 10066448, inttobox(45, 45, 135, 80), 11, colorSetting(2, 4.44, 0.44)) then
exit;
//writeln('Spamroutina');
if 2 >= SpecBar() then
Exit;
case random(4500) of
0..1274:
begin
Wait(gaussrangeint(150, 450));
Mousebox(inttobox(17, 110, 33, 126), mouse_left);
Wait(gaussrangeint(150, 450));
end;
1275..3499:
begin
Mousebox(inttobox(17, 110, 33, 126), mouse_left);
for i := 0 to gaussrangeint(0, 5) do
begin
Fastclick(Mouse_left);
case random(27) of
0..7: Wait(Gaussrangeint(500, 700));
8..11: Wait(Random(150, 174));
end;
end;
end;
3500..4499:
begin
Wait(gaussrangeint(1500, 2450));
Mousebox(inttobox(17, 110, 33, 126), mouse_left);
Wait(gaussrangeint(850, 1450));
end;
end;
end;
procedure Summ();
var
x, y: integer;
begin
if not Isloggedin() then
exit;
if not FindColorTolerance(x, y, 660871, inttobox(16, 51, 173, 116), 40) then
begin
Statusas('No Spider');
if (ActionBar.getSummoningPercent() < 35) then
begin
if findcolortolerance(x, y, 14538272, tabbackpack.getslotbox(2), 35) then
begin
mousebox(tabbackpack.getslotbox(2), mouse_left);
wait(gaussrangeint(845, 1452));
end
else
begin
BankMain();
exit;
end;
end;
if FindColorTolerance(x, y, 11058626, tabbackpack.getslotbox(3), 35) then
begin
Statusas('Summoning spider');
Wait(random(356, 742));
Mousebox(tabbackpack.getslotbox(3), mouse_left);
wait(random(587, 2145));
end
else
bankMain();
end;
end;
procedure Spec();
var
x, y, p, a: integer;
begin
if not isloggedin() then
exit;
Summ();
if ((3 >= SpecBar()) and (FindColorTolerance(x, y, 12828188, inttobox(421, 445, 432, 450), 10))) then
begin
mouseBox(TabBackpack.getSlotBox(2), MOUSE_LEFT);
wait(gaussrangeint(845, 1452));
end;
smartimage.drawBox(inttobox(17, 110, 33, 126),false,255);
repeat
p := SpecBar();
//writeln('Pradzia');
SpamRoutine();
a := SpecBar();
// writeln('Pabaiga');
if 2 >= SpecBar() then
Exit;
until (a <> p);
end;
procedure AngleTransform();
var
i, iz, ix: integer;
angle, c, s: extended;
begin
angle := Minimap.getAngleDegrees();
s := sin(radians(angle));
c := cos(radians(angle));
for i := 0 to 7 do
begin
StaticRotatedPoints[i][0] := c * StaticPoints[i][0] + s * StaticPoints[i][1];
StaticRotatedPoints[i][1] := ( - 1) * s * StaticPoints[i][0] + c * StaticPoints[i][1];
end;
for iz := 0 to 7 do
begin
DynamicPoints[iz][0] := StaticRotatedPoints[iz][0] + Centerx;
DynamicPoints[iz][1] := Centery - StaticRotatedPoints[iz][1];
end;
for ix := 0 to 7 do
begin
smartimage.drawtext(tostring(ix), point(trunc(DynamicPoints[ix][0]), trunc(DynamicPoints[ix][1])), 11839306);
Smartimage.drawCross(point(trunc(DynamicPoints[ix][0]), trunc(DynamicPoints[ix][1])), 3, 16777215);
end;
end;
procedure AlternativePickingPile(kar: integer);
var
eggsBefore: integer;
lootingTimer: ttimemarker;
x, y, miss: integer;
begin
if not isloggedin() then
exit;
miss := 0;
mousebox(inttobox(Centerx - 6, Centery - 6, Centerx + 6, Centery + 6), mouse_move);
wait(gaussrangeint(120, 315));
getmousepos(x, y);
if Ismouseovertext(['Red', 'Take Red']) then
begin
case random(152) of
0..74: mousebox(inttobox(Centerx - 12, Centery - 12, Centerx + 12, Centery + 12), mouse_left);
end;
multiclick(point(x, y), 100, gaussrangeint(1, 3));
dec(kar);
end
else
begin
if ismouseovertext(['spider', 'Spirit']) then
begin
mouse(point(x, y), mouse_right);
chooseoption.isopen(gaussrangeint(350, 678));
if chooseoption.optionsexist(['eggs', 'ggs']) then
begin
wait(gaussrangeint(168, 365));
chooseoption.select(['eggs', 'ggs']);
dec(kar);
end
else
begin
chooseoption.close();
inc(miss);
end;
end;
end;
while ((kar > 0) and (miss < 2)) do
begin
if not isloggedin() then
exit;
case random(419) of
0..274:
begin
mousebox(inttobox(Centerx - 5, Centery - 5, Centerx + 4, Centery + 3), mouse_right);
if chooseoption.isopen(gaussrangeint(235, 456)) then
begin
wait(gaussrangeint(167, 314));
if chooseoption.optionsexist(['eggs', 'ggs']) then
begin
chooseoption.select(['eggs', 'ggs']);
dec(kar);
wait(gaussrangeint(144, 235));
end
else
begin
chooseoption.close();
inc(miss);
end;
end;
end;
275..365:
begin
mousebox(inttobox(Centerx - 4, Centery - 5, Centerx + 4, Centery + 4), mouse_move);
if ismouseovertext(['eggs', 'ggs']) then
begin
getmousepos(x, y);
wait(gaussrangeint(166, 258));
case random(123) of
0..21: missMouse(point(x, y), true);
22..122: fastclick(mouse_left);
end;
dec(kar);
end
else
begin
inc(miss);
end;
end;
366..418:
begin
mousebox(inttobox(Centerx - 4, Centery - 5, Centerx + 3, Centery + 6), mouse_move);
if ismouseovertext(['eggs', 'ggs']) then
begin
getmousepos(x, y);
wait(gaussrangeint(187, 285));
case random(143) of
0..87: multiClick(point(x, y), 100, 3);
88..127: multiClick(point(x, y), 100, 2);
128..142:
begin
missmouse(point(x, y), true);
multiClick(point(x, y), 100, 2);
end;
end;
dec(kar);
end
else
begin
inc(miss);
end;
end;
end;
end;
end;
function AlternativePicking(out Transpoint: integer): boolean;
var
i, x, y, mx, my, z, r, eggsbefore: integer;
pai, eggsCount: integer;
optionsai: TOptionArray;
lootingtimer: ttimemarker;
centr: tpoint;
boxas: tbox;
begin
transpoint := - 1;
result := false;
for i := checkedToPile to high(DynamicPoints) do
begin
if not isloggedin() then
exit;
pai := LootingPattern[i];
if ((findEggsOld(inttobox(trunc(DynamicPoints[pai][0] - 12), trunc(DynamicPoints[pai][1] - 12), trunc(DynamicPoints[pai][0] + 12), trunc(DynamicPoints[pai][1] + 12))).x1 = 0) and (StandartEggsLocationsArray[pai] = false)) then
continue;
smartimage.drawbox(inttobox(trunc(DynamicPoints[pai][0] - 12), trunc(DynamicPoints[pai][1] - 12), trunc(DynamicPoints[pai][0] + 12), trunc(DynamicPoints[pai][1] + 12)), 16777215);
if (EggsOnFloor > 0) or (StandartEggsLocationsArray[pai] = true) then
begin
if ((StandartEggsLocationsArray[pai] = true) and (EggsOnFloor > 0)) then
begin
for r := 0 to 2 do
begin
if not isloggedin() then
exit;
case random(415) of
0..91:
begin
Boxas := findEggsOld(inttobox(trunc(DynamicPoints[pai][0] - 10), trunc(DynamicPoints[pai][1] - 10), trunc(DynamicPoints[pai][0] + 10), trunc(DynamicPoints[pai][1] + 10)));
if (boxas.x1 > 100) then
mousebox(boxas, mouse_left);
wait(gaussrangeint(166, 283));
if (boxas.x1 > 100) then
Mousebox(boxas, mouse_right);
end;
92..414:
begin
centr := findEggsOld(inttobox(trunc(DynamicPoints[pai][0] - 10), trunc(DynamicPoints[pai][1] - 10), trunc(DynamicPoints[pai][0] + 10), trunc(DynamicPoints[pai][1] + 10))).getmiddle();
if (r >= 1) then
begin
if (centr.x >= 200) then
Mousecircle(centr.x, centr.y, 5, mouse_right);
end
else
begin
if (centr.x < 200) then
continue;
case random(215) of
0..5: Mousecircle(centr.x, centr.y, 14, mouse_right);
5..11: Mousecircle(centr.x, centr.y, 11, mouse_right);
12..214: Mousecircle(centr.x, centr.y, 10, mouse_right);
end;
end;
end;
end;
if ChooseOption.isOpen(gaussrangeint(200, 387)) then
begin
Optionsai := ChooseOption.getOptions();
if chooseoption.optionsexist(['eggs', 'ggs']) then
begin
eggsCount := 0;
for z := 0 to high(optionsai) do
begin
if optionsai[z].str = 'Take Red spiders' ' eggs' then
inc(eggsCount);
end;
chooseoption.select(['eggs', 'ggs']);
StandartEggsLocationsArray[pai] := false;
miscli := 0;
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2500));
if (eggsCount > 1) then
begin
case random(315) of
0..214: mousebox(inttobox(Centerx - 12, Centery - 11, Centerx + 12, Centery + 13), mouse_move);
end;
end;
Wait(gaussrangeint(595, 815));
result := true;
transpoint := pai;
if ((eggsbefore < tabbackpack.count()) and (eggsCount > 1)) then
begin
alternativePickingPile((eggsCount - 1));
end;
checkedToPile := i;
exit;
end
else
begin
inc(miscli);
if (miscli >= 2) then
begin
miscli := 0;
inc(checkedToPile);
end;
chooseoption.close();
end;
end;
end;
end
else
mousebox(inttobox(trunc(DynamicPoints[pai][0] - 3), trunc(DynamicPoints[pai][1] - 3), trunc(DynamicPoints[pai][0] + 3), trunc(DynamicPoints[pai][1] + 3)), mouse_right);
if ChooseOption.isOpen(gaussrangeint(575, 887)) then
begin
Optionsai := ChooseOption.getOptions();
if chooseoption.optionsexist(['eggs', 'ggs']) then
begin
eggsCount := 0;
for z := 0 to high(optionsai) do
begin
if optionsai[z].str = 'Take Red spiders' ' eggs' then
inc(eggsCount);
end;
chooseoption.select(['eggs', 'ggs']);
StandartEggsLocationsArray[pai] := false;
miscli := 0;
eggsbefore := tabbackpack.count();
lootingtimer.start();
repeat
wait(gaussrangeint(173, 238));
if not lootantibanned then
LootingAntiban();
until ((eggsbefore < tabbackpack.count()) or (lootingtimer.gettime() >= 2500));
if (eggsCount > 1) then
begin
case random(315) of
0..214: mousebox(inttobox(Centerx - 12, Centery - 11, Centerx + 12, Centery + 13), mouse_move);
end;
end;
Wait(gaussrangeint(595, 815));
result := true;
transpoint := pai;
if ((eggsbefore < tabbackpack.count()) and (eggsCount > 1)) then
begin
alternativePickingPile((eggsCount - 1));
end;
checkedToPile := i;
exit;
end
else
begin
inc(miscli);
if miscli >= 1 then
begin
miscli := 0;
inc(checkedToPile);
end;
chooseoption.close();
end;
end;
end;
end;
end;
procedure TransitionShift();
var
Transpoint: integer;
i: integer;
begin
if not isloggedin() then
exit;
angleTransform();
if alternativePicking(Transpoint) then
begin
shiftx := ( - StaticPoints[Transpoint][0]);
shifty := ( - StaticPoints[Transpoint][1]);
for i := 0 to 7 do
begin
StaticPoints[i][0] := StaticPoints[i][0] + shiftx;
StaticPoints[i][1] := StaticPoints[i][1] + shifty;
end;
end;
for i := 0 to 7 do
begin
smartimage.drawcross(point(StaticPoints[i][0], StaticPoints[i][1]), 5, 16777215);
end;
smartimage.clear();
end;
procedure ResetCoordinates();
begin
checkedToPile := 0;
miscli := 0;
StandartEggsLocationsArray := [false, false, false, false, false, false, false, false];
shiftx := 0;
shifty := 0;
StaticPoints := [[ - 32, 32], [0, 32], [32, 32], [ - 32, 0], [32, 0], [ - 32, - 32], [0, - 32], [32, - 32]];
end;
procedure CheckSpots();
var
i: integer;
begin
if not isloggedin() then
exit;
angleTransform();
for i := 0 to high(DynamicPoints) do
begin
if findEggsOld(inttobox(trunc(DynamicPoints[i][0] - 12), trunc(DynamicPoints[i][1] - 12), trunc(DynamicPoints[i][0] + 12), trunc(DynamicPoints[i][1] + 12))).x1 = 0 then
begin
StandartEggsLocationsArray[i] := false;
smartimage.drawbox(inttobox(trunc(DynamicPoints[i][0] - 12), trunc(DynamicPoints[i][1] - 12), trunc(DynamicPoints[i][0] + 12), trunc(DynamicPoints[i][1] + 12)), 255);
end
else
begin
StandartEggsLocationsArray[i] := true;
smartimage.drawbox(inttobox(trunc(DynamicPoints[i][0] - 12), trunc(DynamicPoints[i][1] - 12), trunc(DynamicPoints[i][0] + 12), trunc(DynamicPoints[i][1] + 12)), 14538272);
end;
end;
end;
procedure PatternLoot();
var
i: integer;
begin
if not isloggedin() then
exit;
statusas('ALternative patterned picking');
ResetCoordinates();
CheckSpots();
case random(91) of
0..11: LootingPattern := [0, 1, 2, 4, 7, 6, 5, 3];
12..27: LootingPattern := [1, 2, 4, 7, 6, 5, 3, 0];
28..37: LootingPattern := [4, 7, 6, 5, 3, 0, 1, 2];
38..43: LootingPattern := [4, 2, 1, 0, 3, 5, 6, 7];
44..58: LootingPattern := [6, 5, 3, 0, 1, 2, 4, 7];
59..71: LootingPattern := [3, 0, 1, 2, 4, 7, 6, 5];
72..79: LootingPattern := [5, 3, 0, 1, 2, 4, 7, 6];
80..83: LootingPattern := [7, 6, 5, 3, 0, 1, 2, 4];
84..91: LootingPattern := [2, 4, 7, 6, 5, 3, 0, 1];
end;
statusas(tostring(LootingPattern));
for i := 0 to 7 do
begin
if not isloggedin() then
exit;
transitionShift();
MiniAntiban();
if ((length(minimap.getdots(mm_dot_item, inttobox(660, 80, 715, 125))) < 1) or (tabbackpack.isfull())) then
exit;
end;
end;
procedure NormalLoot();
var
invCountBefore: integer;
lootsTimer: ttimemarker;
x, y: integer;
begin
if not isloggedin() then
exit;
if length(minimap.getdots(mm_dot_item, inttobox(660, 80, 715, 125))) < 1 then
begin
Minibreak();
exit;
end;
if players[currentplayer].booleans[0] then
PatternLoot();
statusas('Normal loot');
lootsTimer.start();
invCountBefore := TabBackpack.count();
repeat
if (length(minimap.getdots(mm_dot_item, minimap.getbounds())) >= 1) then
pickUpEgg()
else
break;
if ((Whopped) or (not isloggedin())) then
exit;
MiniAntiban();
if lootsTimer.getTime() > 75000 then
begin
if TabBackpack.count() <= invCountBefore then
begin
Statusas('75 seconds havent looted single egg');
inc(fail);
if fail > players[currentplayer].integers[1] then
terminatescript;
end
else
Break;
end;
until ((TabBackpack.isfull()) or (EggsOnFloor = 0));
end;
procedure SpawnAndLoot();
var
SpecClickingTimer: ttimemarker;
clickingTime: integer;
begin
if not Isloggedin() then
exit;
NormalLoot();
if not StartPosition() then
StartPosition();
if TabBackpack.isfull() then
exit;
if TabBackpack.count() >= 23 then
clickingTime := gaussrangeint(5500, 11000)
else
clickingTime := gaussrangeint(15000, 23000);
SpecClickingTimer.start();
Statusas('Spamclicking spec');
repeat
Spec();
until SpecClickingTimer.gettime() > clickingTime;
Statusas('looting eggs');
NormalLoot();
if tabbackpack.isFull() then
exit;
end;
procedure Distloot();
begin
if not isloggedin() then
exit;
if findEggs(inttobox(200, 6, 573, 384)).x1 > 0 then
begin
pickUpEgg(inttobox(200, 6, 573, 384));
wait(gaussrangeint(1500, 2510));
exit;
end;
if findEggs(inttobox(2, 195, 199, 384)).x1 > 0 then
begin
pickUpEgg(inttobox(2, 195, 199, 384));
wait(gaussrangeint(1500, 2510));
exit;
end;
end;
procedure SwitchPlayer();
begin
players[currentplayer].logout();
players.next(false);
wait(gaussrangeint(4200, 6750));
minimap.clickcompass();
mainscreen.setzoom(true);
mainscreen.setangle(ms_angle_high);
exitTreasure();
end;
procedure Mainloop();
var
x, y: integer;
begin
CurrentTripTime.start();
mousespeed := (gaussrangeint(30, 40));
repeat
if not isloggedin() then
exit;
if not findcolortolerance(x, y, 4179190, inttobox(182, 27, 193, 31), 50) then
begin
mouseScroll(inttobox(10, 25, 163, 140).getrandompoint(), 10 + random(5), false);
inc(fail);
if fail > players[currentplayer].integers[1] then
terminatescript;
end;
Summ();
SpawnAndLoot();
until tabbackpack.count() >= 25;
BankMain();
DistLoot();
if CurrentTripTime.getTime() > 480000 then
begin
Statusas('Failed to do trip in 8 mins');
inc(fail);
if fail > players[currentplayer].integers[1] then
terminatescript;
end;
takeBreak();
end;
begin
SmartEnableDrawing := true;
smartShowConsole := false;
SetupSRL();
initPlayerForm();
runPlayerForm();
DeclarePlayers();
SPS.setup('ge', Runescape_other);
breaktimes();
if not isloggedin() then
logintow();
TotalScriptTime.start();
SixhourFixTime.start();
while players.getactive() > 0 do
begin
PlayersTimer.start();
repeat
Mainloop();
if (SixhourFixTime.getTime() >= (gaussrangeint(19600000, 22000000))) then
begin
sixhourfix();
SixhourFixTime.Start();
wait(gaussrangeint(6000, 9500));
mainscreen.setzoom(true);
Mainscreen.setAngle(ms_angle_high);
end;
until (((PlayersTimer.gettime() >= (players[currentplayer].integers[0]) * 60000) or (not isloggedin())) or (players[currentplayer].isactive = false));
switchPlayer();
end;
end.