Simba Code:
program KylesEsswraithExtractor;
{$DEFINE SMART}
{$i srl/srl.simba}
{$I SRL/SRL/Misc/Debug.Simba}
{$Define Smart}
const
{* Don't touch *}
Version = '1.8';
{* SRL Stats *}
SRLStats_Username = '';
SRLStats_Password = '';
{* Object Constants *}
objUndeadSoul = 0;
objLivingSoul = 1;
objSoulWraith = 2;
objBloodySkulls = 3;
objBloodPool = 4;
objBloodWraith = 5;
objSkulls = 6;
objDeathWraith = 7;
objJumper = 8;
objShifter = 9;
objNebula = 10;
objWaterEssling = 11;
objVine = 12;
objLawHound = 13;
objCosmicHound = 14;
objChaosHound = 15;
objAstralHound = 16;
objNatureHound = 17;
objBodyHound = 18;
objCCloud = 19;
objAirEss = 20;
objWaterPool = 21;
objFleshyGrowth = 22;
objFireStorm = 23;
objEarthEss = 24;
objRockFrag = 25;
objFireball = 26;
objMindEssling = 27;
objCyclone = 28;
objMindStorm = 29;
(* Break settings *)
SwitchWorlds = True; // Switch worlds after a break?
TakeBreaks = False; // Take Breaks during runtime?
BreakIn = 180; // How long before we take a break? (minutes)
BreakFor = 20; // How long will we break for? (minutes)
Bir = 13; // Random minutes to add/subtract from how long until we break
Bfr = 5; // Random minutes to add/subjtract from break duraction
{* Script Constants *}
ClickAnywhere = False; // Turns off the island detection, will click any object, no matter what island it's on
// True turns this option off, False makes it click only on your island.
Debug = False; // If things aren't working, set this to true and tell us what it says
// Or if you want to narrow down colors to make script even better :)
Misclick = False; // Use the misclick failsafe (Clicks under your character)
AutoUpdate = True; // Auto Update object data from database
type
{* TObj Type *}
TObj = record
Hue, Sat : Extended;
Name: string;
UpText : TStringArray;
ObjID, Color, Tol, LvlReq, Max, Min, IXP: Integer;
end;
type
{* TObjectArray Type *}
TObjectArray = array of TObj;
var
{* Script Variables *}
StartXP, XPH, XP, TP, RCt, RCLvl, TW, CurrentXP, EssenceDTM, EX, EY, IslandColor, IslandTol : Integer;
TI, Floors: Integer;
Objects : TObjectArray;
IslandHue, IslandSat : Extended;
Higher, SafeNub, FirstIsland : Boolean;
TB : Tbox;
(* Break variables *)
w, x, y, z, RealBTime, CurrentBTime, BreakRounds : Integer;
procedure DeclarePlayers();
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := ''; // Your RuneScape Account Name
Pass := ''; // Your RuneScape Account Password
Active := True; // Use in the Script. True / False.
Booleans[0] := True; // Set to False if you want to search for all Objects
Booleans[1] := False; // Logout if a random is found
// This is for searching for specific Objects, add / remove as needed. Order doesn't matter
Integers := [objUndeadSoul, objLivingSoul, objSoulWraith, objBloodySkulls
, objBloodPool, objSkulls, objJumper, objShifter, objNebula];
end;
end;
procedure SetDTM;
begin
EssenceDTM := DTMFromString('mrAAAAHic42BgYHBkYmDwAGIXILYBYksodgdiXyB+DlTzCIgfQvEzIP4AxG+A+CkQW5ibMRjo64ExiG1tZcHg6uLE4O7mwmBsZMjABVSDDzMSwDAAAJ3CDvU=');
end;
procedure Fr33DTM;
begin
FreeDTM(EssenceDTM);
end;
procedure DebugThis(s : string);
begin
if(Debug)then
WriteLn(s);
end;
procedure SetupObjects();
begin
DebugThis('-[DEBUG]- Setup Objects');
SetLength(Objects, 30);
with Objects[objBloodWraith] do
begin
ObjID := objBloodWraith;
Name := 'Blood esswraith';
UpText := ['lood ess', 'ood essw', 'Siphon Blood esswraith'];
Color := 6263962;
Tol := 15;
Hue := 0.12;
Sat := 0.72;
LvlReq := 77;
Max := 250;
Min := 50;
IXP := 77;
end;
with Objects[objDeathWraith] do
begin
ObjID := objDeathWraith;
Name := 'Death esswraith';
UpText := ['eath ess', 'iphon De', 'ath essw', 'Siphon Death esswraith'];
Color := 5278586;
Tol := 26;
Hue := 0.04;
Sat := 0.58;
LvlReq := 65;
Min := 0;
Max := 1000;
IXP := 60;
end;
with Objects[objSoulWraith] do
begin
ObjID := objSoulWraith;
Name := 'Soul esswraith';
UpText := ['oul ess', 'iphon So', 'oul essw', 'Siphon Soul esswraith'];
Color := 6251056;
Tol := 24;
Hue := 0.25;
Sat := 1.01;
LvlReq := 90;
Min := 0;
Max := 1000;
IXP := 108;
end;
with Objects[objLivingSoul] do
begin
ObjID := objLivingSoul;
Name := 'Living Soul';
UpText := ['Siphon Living', 'on Liv', 'iving', 'oul'];
Color := 12867973;
Tol := 9;
Hue := 0.51;
Sat := 0.99;
LvlReq := 90;
Min := 0;
Max := 1000;
IXP := 213;
end;
with Objects[objJumper] do
begin
ObjID := objJumper;
Name := 'Jumper';
UpText := ['Siphon Jumper', 'on Jum', 'Jumper', 'mper'];
Color := 16624975;
Tol := 7;
Hue := 0.02;
Sat := 1.70;
LvlReq := 54;
Min := 10;
Max := 50;
IXP := 107;
end;
with Objects[objBloodPool] do
begin
ObjID := objBloodPool;
Name := 'Blood Pool';
UpText := ['Siphon Blood Pool', 'on blo', 'blood', 'od poo'];
Color := 1252488;
Tol := 10;
Hue := 0.02;
Sat := 1.70;
LvlReq := 77;
Min := 80;
Max := 250;
IXP := 146;
end;
with Objects[objNebula] do
begin
ObjID := objNebula;
Name := 'Nebula';
UpText := ['Siphon Nebula', 'on Neb', 'Nebula', 'bula'];
Color := 8988293;
Tol := 6;
Hue := 1.15;
Sat := 3.71;
LvlReq := 40;
Min := 55;
Max := 1000;
IXP := 85;
end;
with Objects[objSkulls] do
begin
ObjID := objSkulls;
Name := 'Skulls';
UpText := ['Siphon Skulls', 'on Sku', 'Skulls', 'ulls'];
Color := 9748431;
Tol := 7;
Hue := 0.02;
Sat := 1.70;
LvlReq := 65;
Min := 3;
Max := 1000;
IXP := 120;
end;
with Objects[objUndeadSoul] do
begin
ObjID := objUndeadSoul;
Name := 'Undead Soul';
UpText := ['ndead', 'oul', 'ndead So', 'd Soul'];
Color := 10979231;
Tol := 4;
Hue := 0.48;
Sat := 0.61;
LvlReq := 95;
Min := 0;
Max := 1000;
IXP := 255;
end;
with Objects[objBloodySkulls] do
begin
ObjID := objBloodySkulls;
Name := 'Bloody Skulls';
UpText := ['Bloody', 'skulls', 'oody', 'kulls'];
Color := 396358;
Tol := 2;
Hue := 0.15;
Sat := 1.52;
LvlReq := 83;
Min := 5;
Max := 1000;
IXP := 176;
end;
with Objects[objShifter] do
begin
ObjID := objShifter;
Name := 'Shifter';
UpText := ['Siphon Shifter', 'on Shi', 'Shifter', 'ifter'];
Color := 1830421;
Tol := 7;
Hue := 0.02;
Sat := 1.70;
LvlReq := 54;
Max := 900;
Min := 400;
IXP := 87;
end;
with Objects[objWaterEssling] do
begin
ObjID := objWaterEssling;
Name := 'Water Essling';
UpText := ['Water Essling', 'ater', 'er essl', 'ssling'];
Color := 12085388;
Tol := 17;
Hue := 1.29;
Sat := 0.99; //messed up for now
LvlReq := 5;
Max := 0;
Min := 0;
IXP := 13;
end;
with Objects[objVine] do
begin
ObjID := objVine;
Name := 'Vine';
UpText := ['Siphon Vine', 'phon V', 'hon v'];
Color := 534306;
Tol := 8;
Hue := 0.62;
Sat := 3.69;
LvlReq := 17;
Max := 900;
Min := 150;
IXP := 36;
end;
with Objects[objCCloud] do
begin
ObjID := objCCloud;
Name := 'Chaotic Cloud';
UpText := ['Siphon Chaotic', 'on Chaotic', 'Chaotic', 'haotic Cloud'];
Color := 2167590;
Tol := 4;
Hue := 2.03;
Sat := 2.57;
LvlReq := 35;
Min := 20;
Max := 1000;
IXP := 62;
end;
with Objects[objCosmicHound] do
begin
ObjID := objCosmicHound;
Name := 'Cosmic Esshound';
UpText := ['osmic', 'osmic essh', 'Cosmic', 'Siphon Cosmic', 'ic esshound', 'Siphon Cosmic esshound'];
Color := 14448236;
Tol := 24;
Hue := 0.06;
Sat := 1.43;
LvlReq := 27;
Min := 250;
Max := 700;
IXP := 27;
end;
with Objects[objChaosHound] do
begin
ObjID := objChaosHound;
Name := 'Chaos Esshound';
UpText := ['haos', 'haos essh', 'Chaos', 'Siphon Chaos', 'os esshound', 'Siphon Chaos esshound'];
Color := 14448236;
Tol := 24;
Hue := 0.06;
Sat := 1.43;
LvlReq := 35;
Min := 250;
Max := 700;
IXP := 31;
end;
with Objects[objAstralHound] do
begin
ObjID := objAstralHound;
Name := 'Astral Esshound';
UpText := ['stral', 'stral ess', 'Astral', 'Siphon Astral', 'ral esshound', 'Siphon Astral esshound'];
Color := 14448236;
Tol := 24;
Hue := 0.06;
Sat := 1.43;
LvlReq := 40;
Min := 250;
Max := 700;
IXP := 36;
end;
with Objects[objNatureHound] do
begin
ObjID := objNatureHound;
Name := 'Nature Esshound';
UpText := ['ature', 'ature ess', 'Nature', 'Siphon Nature', 'ture esshound', 'Siphon Nature esshound'];
Color := 14448236;
Tol := 24;
Hue := 0.06;
Sat := 1.43;
LvlReq := 44;
Min := 250;
Max := 700;
IXP := 44;
end;
with Objects[objLawHound] do
begin
ObjID := objLawHound;
Name := 'Law esshound';
UpText := ['Siphon Law', 'on Law', 'Law', 'aw ess', 'aw esshound', 'Siphon Law esshound'];
Color := 14448236;
Tol := 24;
Hue := 0.06;
Sat := 1.43;
LvlReq := 54;
Min := 250;
Max := 700;
IXP := 54;
end;
with Objects[objBodyHound] do
begin
ObjID := objBodyHound;
Name := 'Body esshound';
UpText := ['Siphon Body', 'on Bod', 'Body', 'ody ess', 'ody esshound', 'Siphon Body esshound'];
Color := 14584962;
Tol := 19;
Hue := 0.10;
Sat := 2.02;
LvlReq := 20;
Min := 250;
Max := 700;
IXP := 24;
end;
with Objects[objAirEss] do
begin
ObjID := objAirEss;
Name := 'Air essling';
UpText := ['ir ess', 'iphon Air', 'Siphon Air essling'];
Color := 13934680;
Tol := 21;
Hue := 0.07;
Sat := 1.98;
LvlReq := 1;
Max := 600;
Min := 50;
IXP := 10;
end;
with Objects[objWaterPool] do
begin
ObjID := objWaterPool;
Name := 'Water Pool';
UpText := ['ter poo', 'iphon Wat', 'Siphon Water pool', 'ater pool'];
Color := 15187588;
Tol := 20;
Hue := 0.05;
Sat := 2.04;
LvlReq := 5;
Max := 900;
Min := 50;
IXP := 25;
end;
with Objects[objFleshyGrowth] do
begin
ObjID := objFleshyGrowth;
Name := 'Fleshy Growth';
UpText := ['eshy', 'on Fle', 'rowth', 'shy gro'];
Color := 4082573;
Tol := 11;
Hue := 0.07;
Sat := 0.49;
LvlReq := 20;
Max := 5000;
Min := 900;
IXP := 47;
end;
with Objects[objFireStorm] do
begin
ObjID := objFireStorm;
Name := 'Fire Storm';
UpText := ['ire sto', 'iphon Fir', 'Siphon Fire storm', 'sto'];
Color := 1780091;
Tol := 18;
Hue := 0.09;
Sat := 1.29;
LvlReq := 27;
Max := 700;
Min := 200;
IXP := 42;
end;
with Objects[objEarthEss] do
begin
ObjID := objEarthEss;
Name := 'Earth essling';
UpText := ['rth ess', 'iphon Ear', 'Siphon Earth essling', 'arth essl'];
Color := 4744582;
Tol := 15;
Hue := 0.04;
Sat := 0.32;
LvlReq := 1;
Max := 250;
Min := 50;
IXP := 15;
end;
with Objects[objRockFrag] do
begin
ObjID := objRockFrag;
Name := 'Rock Fragment';
UpText := ['Siphon Rock', 'on Roc', 'Rock', 'Fragment'];
Color := 3434345;
Tol := 13;
Hue := 0.41;
Sat := 0.46;
LvlReq := 9;
Min := 150;
Max := 900;
IXP := 29;
end;
with Objects[objFireball] do
begin
ObjID := objFireball;
Name := 'Fireball';
UpText := ['Siphon Fireball', 'on Fire', 'reball', 'fireball'];
Color := 2055350;
Tol := 14;
Hue := 0.41;
Sat := 1.20;
LvlReq := 14;
Min := 120;
Max := 900;
IXP := 35;
end;
with Objects[objMindEssling] do
begin
ObjID := objMindEssling;
Name := 'Mind Essling';
UpText := ['Mind Essling', 'ind', 'nd essl', 'ssling'];
Color := 7905200;
Tol := 17;
Hue := 0.21;
Sat := 0.40;
LvlReq := 1;
Max := 150;
Min := 2;
IXP := 12;
end;
with Objects[objCyclone] do
begin
ObjID := objCyclone;
Name := 'Cyclone';
UpText := ['Siphon Cyclone', 'clone', 'yclone', 'cyclone'];
Color := 2698292;
Tol := 6;
Hue := 0.51;
Sat := 1.10;
LvlReq := 1;
Min := 80;
Max := 900;
IXP := 19;
end;
with Objects[objMindStorm] do
begin
ObjID := objMindStorm;
Name := 'Mind Storm';
UpText := ['nd sor', 'iphon Min', 'Mind', 'Siphon Mind Storm'];
Color := 1645086;
Tol := 6;
Hue := 0.56;
Sat := 0.84;
LvlReq := 1;
Min := 100;
Max := 800;
IXP := 20;
end;
DebugThis('-[DEBUG]- Objects are setup');
end;
function GetObject(vObj : Integer) : TObj;
begin
Result := Objects[vObj];
end;
function GetObjectByXP(xp : Integer) : TObj;
var
i : Integer;
begin
for i := 0 to High(Objects) do
if(Objects[i].IXP = xp)then
Result := Objects[i];
end;
function GetObjectData(ID : Integer) : TObj;
var
webClient, i : Integer;
postData, objDataStr : string;
objDataStrArray : TStringArray;
tmpObj : TObj;
begin
try
webClient := InitializeHTTPClient(False, False);
postData := 'http://srl.kyleundefined.com/Scripts/KEE/?ObjID=' + IntToStr(ID);
objDataStr := GetHTTPPage(webClient, postData);
DebugThis('-[DEBUG]- Object Data String = ' + objDataStr);
objDataStrArray := Explode('|', objDataStr);
if(objDataStr = '0')then
begin
DebugThis('-[DEBUG]- Failed to grab Object data!');
Exit;
end;
if(Debug)then
for i := 0 to High(objDataStrArray) do
WriteLn('-[DEBUG]- ObjDataStrArray[' + IntToStr(i) + '] = ' + objDataStrArray[i]);
with tmpObj do
begin
ObjID := ID;
Name := objDataStrArray[0];
UpText := [objDataStrArray[1]];
Color := StrToIntDef(objDataStrArray[2], Objects[ID].Color);
Tol := StrToIntDef(objDataStrArray[3], Objects[ID].Tol);
Hue := StrToFloatDef(objDataStrArray[4], Objects[ID].Hue);
Sat := StrToFloatDef(objDataStrArray[5], Objects[ID].Sat);
LvlReq := StrToIntDef(objDataStrArray[6], Objects[ID].LvlReq);
Max := StrToIntDef(objDataStrArray[7], Objects[ID].Max);
Min := StrToIntDef(objDataStrArray[8], Objects[ID].Min);
IXP := StrToIntDef(objDataStrArray[9], Objects[ID].IXP);
end;
Result := tmpObj;
except
DebugThis('-[ERROR]- Failed to grab Object Data! : ' + exceptionToString(exceptionType, exceptionParam));
finally
FreeHTTPClient(webClient);
end;
end;
procedure AddObject(var objArr : TObjectArray; ObjID : Integer);
begin
SetLength(objArr, Length(objArr) + 1);
objArr[High(objArr)] := GetObject(ObjID);
end;
procedure FilterObjects();
var
tmpObjects : TObjectArray;
i : Integer;
begin
if(not(Players[CurrentPlayer].Booleans[0]))then
Exit;
DebugThis('-[DEBUG]- Filtering Objects');
for i := 0 to High(Objects) do
if(InIntArray(Players[CurrentPlayer].Integers, Objects[i].ObjID))then
AddObject(tmpObjects, Objects[i].ObjID);
SetLength(Objects, High(tmpObjects));
Objects := tmpObjects;
DebugThis('-[DEBUG]- Objects are filtered');
end;
procedure SortObjects();
var
tmpObjects : TObjectArray;
TIA : TIntegerArray;
i : Integer;
begin
DebugThis('-[DEBUG]- Sorting Objects');
SetLength(TIA, Length(Objects));
for i := 0 to High(Objects) do
TIA[i] := Objects[i].IXP;
Quicksort(TIA);
InvertTIA(TIA);
SetLength(tmpObjects, Length(Objects));
for i := 0 to High(TIA) do
tmpObjects[i] := GetObjectByXP(TIA[i]);
Objects := tmpObjects;
DebugThis('-[DEBUG]- Objects are sorted');
end;
procedure UpdateObjects();
var
tmpObjects : TObjectArray;
i : Integer;
begin
if(not(AutoUpdate))then Exit;
DebugThis('-[DEBUG]- Updating Objects');
SetLength(tmpObjects, Length(Objects));
for i := 0 to High(Objects) do
tmpObjects[i] := GetObjectData(Objects[i].ObjID);
DebugThis('-[DEBUG]- Objects are updated');
end;
procedure SetFalse(reason : string; logOutPlayer : Boolean);
begin
WriteLn('** SetFalse ** Reason := ' + reason);
Players[CurrentPlayer].Active := False;
if(logOutPlayer)then
Logout;
if(HowManyPlayers = 1)then
TerminateScript();
end;
function CheckForRandoms() : Boolean;
var
i : Integer;
begin
DebugThis('-[DEBUG]- Checking for randoms');
if(Players[CurrentPlayer].Booleans[1])then
begin
for i := 0 to High(SRL_Randoms) do
begin
if (SRL_Randoms[i].detect <> nil) and (SRL_Randoms[i].detect()) then
begin
Result := True;
Break;
end;
end;
if(Result)then
SetFalse('Random Detected', True);
end else
FindNormalRandoms();
end;
function K_FindObj(var x, y, vObj : Integer) : Boolean;
var
fObj : TObj;
a, h : Integer;
TPA : TPointArray;
ATPA : T2DPointArray;
tmpCTS : Integer;
begin
if(not(LoggedIn))then Exit;
CheckForRandoms();
DebugThis('-[DEBUG]- Starting Object search');
fObj := GetObject(vObj);
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
with fObj do
begin
DebugThis('-[DEBUG]- Searching for Object - ' + Name);
SetColorSpeed2Modifiers(Hue, Sat);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Color, TB.X1, TB.Y1, TB.X2, TB.Y2, Tol);
ATPA := TPAtoATPAEx(TPA, 20, 20);
SortATPASize(ATPA,True);
H := High(ATPA);
for a := 0 to H do
begin
MiddleTPAEx(atpa[a], X, Y);
DebugThis('-[DEBUG]- Length(ATPA[a]) = ' + ToStr(Length(ATPA[a])));
if((Length(atpa[a]) < Min) or (Length(atpa[a]) > Max))then
Continue;
MMouse(X, Y, 5, 5);
DebugThis('-[DEBUG]- GetUpText = ' + GetUpText);
if(WaitUpTextMulti(UpText, RandomRange(350, 450)))then
begin
ClickMouse2(True);
if(DidRedClick)then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if(Misclick)then
begin
Wait(RandomRange(600, 700));
If IsMoving Then
Begin
Mouse(249, 177, 2, 2, True);
Wait(RandomRange(300, 400));
Repeat
Wait(100);
Until (Not(Ismoving));
FirstIsland := True;
Exit;
End;
end;
Result := True;
Exit;
end else
begin
Higher := True;
if(Misclick)then
begin
Mouse(249, 177, 2, 2, True);
Wait(RandomRange(300, 400));
Repeat
Wait(100);
Until (Not(Ismoving));
FirstIsland := True;
Exit;
end;
end;
end else
if(IsUptextMultiCustom(['esswraith', 'wraith', 'raith', 'Floating ess', 'Float', 'ing ess', 'Floating essence', 'lan vex', 'ead Clan', 'an vexillum', 'Read Clan vexillum']))then
begin
Clickmouse2(False);
if(WaitOptionMulti(UpText, 800))then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Result := True;
Exit;
end;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
end;
Function FindObjectPlatform : Boolean;
var
CTS, I, L : Integer;
TPA : TPointArray;
ATPA : T2DPointArray;
begin
Result := False;
If (TimeFromMark(TI) < 60000) And (Not FirstIsland) Then
Begin
Result:=True;
Exit;
End;
DebugThis('-[DEBUG]- Searching for Object platform');
If SafeNub Then
Begin
TB := IntToBox(MSX1, MSY1, MSX2, MSY2);
Result := True;
Exit;
End;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(IslandHue, IslandSat);
FindColorsTolerance(TPA, IslandColor, MSX1, MSY1, MSX2, MSY2, IslandTol);
ATPA := FloodFillTPA(TPA);
SortATPASize(ATPA, True);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If Debug Then
DebugATPABounds(ATPA);
DebugThis('-[DEBUG]- ATPA = ' + ToStr(ATPA));
If Length(TPA) < 1 then
Exit;
L := High(ATPA);
For I := 0 To L do
Begin
TB:= GetTPABounds(ATPA[I]);
If Not (PointInBox(Point(MSCX, MSCY), TB)) then
begin
if I = L then
begin
DebugThis('-[DEBUG]- at high, point is not inside');
exit;
end else
continue;
end else break;
end;
DebugThis('-[DEBUG]- TB = ' + ToStr(TB));
Result := True;
MarkTime(TI);
FirstIsland:=False;
end;
function FindWizard: Boolean;
var
a, h : Integer;
TPA : TPointArray;
ATPA : T2DPointArray;
tmpCTS : Integer;
begin
if(not(LoggedIn))then Exit;
CheckForRandoms();
DebugThis('-[DEBUG]- Searching for Wizard');
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.05, 1.65);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 5357278, MSX1, MSY1, MSX2, MSY2, 18);
ATPA := TPAtoATPAEx(TPA, 20, 20);
SortATPASize(ATPA,True);
H := High(ATPA);
DebugThis('Wizard');
for a := 0 to H do
begin
MiddleTPAEx(atpa[a], X, Y);
DebugThis(tostr(Length(atpa[a])));
if((Length(atpa[a]) < 100) Or (Length(atpa[a]) > 2000))then
Continue;
MMouse(X, Y, 5, 5);
if(WaitUpTextMulti(['Wizard', 'zard', 'izard'], 750))then
begin
repeat
InvMouse(RandomRange(2, 8), 3);
until(WaitUpTextMulti(['rune', 'une'], RandomRange(1800, 2000)));
ClickMouse2(False);
if(not(WaitOptionMulti(['Use', 'Use ', 'se '],RandomRange(800, 900))))then
Exit;
MMouse(X, Y, 5, 5);
if(WaitUpTextMulti(['Wizard', 'zard', 'izard'], 750))then
begin
ClickMouse2(True);
if(DidRedClick)then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Result := True;
MarkTime(TW);
Exit;
end;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
end;
function FindMayScreen() : Boolean;
var
TPA : TPointArray;
tmpCTS : Integer;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.44, 1.62);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 1013212, MSX1, MSY1, MSX2, MSY2, 8);
Result := (Length(TPA) > 1500);
if(Result)then
MouseBox(494, 16, 503, 24, mouse_Left);
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
end;
procedure AntiBan();
begin
if(not(LoggedIn))then Exit;
CheckForRandoms();
DebugThis('-[DEBUG]- Performing Antiban');
case (Random(1000)) of
0 : RandomRClick;
1 : HoverSkill('random', False);
2 : ExamineInv;
3 : MouseSpeed := (RandomRange(10, 12));
4 : begin HoverSkill('Runecrafting', False); Wait(RandomRange(2000, 4000)); end;
5 : begin PickUpMouse; SleepAndMoveMouse(1500 + Random(500)); end;
6 : begin GameTab(tab_Stats); Wait(1500 + Random(500)); GameTab(tab_Inv); end;
7 .. 100 : Wait(RandomRange(750, 2000));
101: begin BoredHuman; SetAngle(SRL_ANGLE_HIGH); end;
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
RealBTime := ((x + z) / 60000);
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x + z) - TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
until(TimeFromMark(CurrentBTime) > (x + z));
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (w) + (x));
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
procedure Proggy;
begin
if(not(Debug))then
ClearDebug();
Stats_Commit;
XP := (GetXPBarTotal - StartXP);
XPH:= Round(((XP) / (GetTimeRunning / 1000)) * 3600);
Writeln('======== Kyle''s Esswraith Extractor =========');
WriteLn('Version ' + Version);
Writeln('Time Running: ' + TimeRunning);
Writeln('Experience Earned: ' + IntToStr(XP));
Writeln('Experience/Hour: ' + IntToStr(XPH));
WriteLn('Runecrafting Level: ' + IntToStr(RCLvl));
WriteLn('Floor: ' + IntToStr(Floors));
Writeln('=============================================');
MarkTime(TP);
end;
Procedure GetMoreEssence;
var
a, h, t: Integer;
TPA : TPointArray;
ATPA : T2DPointArray;
tmpCTS : Integer;
begin
if(not(LoggedIn))then Exit;
CheckForRandoms();
DebugThis('-[DEBUG]- Getting more essence');
MarkTime(T);
repeat
if(not(LoggedIn))then Exit;
if(TimeFromMark(t) > 30000)then
SetFalse('Failed to get more essence.', True);
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.60, 0.10);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 4408645, MSX1, MSY1, MSX2, MSY2, 14);
ATPA := TPAtoATPAEx(TPA, 20, 20);
SortATPASize(ATPA,True);
H := High(ATPA);
DebugThis('Rocks');
for a := 0 to H do
begin
MiddleTPAEx(atpa[a], X, Y);
DebugThis('-[DEBUG]- Length(ATPA[a]) = ' + ToStr(Length(ATPA[a])));
if((Length(atpa[a]) < 50) Or (Length(atpa[a]) > 2000))then
Continue;
MMouse(X, Y, 5, 5);
if(WaitUpTextMulti(['Collect', 'llect', 'Float'], 750))then
begin
ClickMouse2(True);
if(DidRedClick)then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
end else
if(not(IsUptextMultiCustom(['Walk', 'lk here', 'here'])))then
begin
Clickmouse2(False);
if(WaitOptionMulti(['Collect', 'llect', 'Float'], 800))then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
until FindDTM(EssenceDTM, X, Y, MIX1, MIY1, MIX2, MIY2);
end;
procedure ScriptSetup();
var
Floor1, Floor2, Floor3, X, Y: Integer;
begin
SetupObjects();
UpdateObjects();
Filterobjects;
SortObjects();
if(FindMayScreen())then
Wait(RandomRange(500, 750));
SetAngle(SRL_ANGLE_HIGH);
StartXP := GetXPBarTotal;
RCLvl := GetSkillLevel(SKILL_RUNECRAFTING);
Gametab(tab_Inv);
Higher := False;
SafeNub:= False;
FirstIsland := True;
Floor1 := DTMFromString('mbQAAAHicY2VgYLBjZGBwBWIjILYEYi8g/ggUfw7Er4D4LxD/AOKepcwMZemKDJOrnRkMpLkZ/B11GESA4uiYEQsGAwD8Rgr4');
Floor2 := DTMFromString('mbQAAAHicY2VgYMhlZGAoBeIsIE4G4nIgFgSK8wExFxBLQvHWhUcYdrWdYbjQ/pTBwy+AQZRPkEEEKI6OGbFgMAAAtVQKcQ==');
Floor3 := DTMFromString('mbQAAAHicY2VgYFACYlkg1gZiSShdBMTNQFwFxMVAXALEpz58ZehasASMt508w3Dx7n0GEaA4OmbEgsEAAHWJDpY=');
If FindDTM(Floor1, X, Y, 9, 99, 52, 146) Then
Floors := 1
Else If FindDTM(Floor2, X, Y, 9, 99, 52, 146) Then
Floors := 2
Else If FindDTM(Floor3, X, Y, 9, 99, 52, 146) Then
Floors := 3
Else
Floors := 0;
If ClickAnywhere Then
Floors := 0;
FreeDTM(Floor1);
FreeDTM(Floor2);
FreeDTM(Floor3);
Case Floors Of
0 : SafeNub := True;
1 : Begin IslandHue := 0.19; IslandSat := 0.71; IslandColor := 3112315; IslandTol := 12; End;
2 : Begin IslandHue := 3.58; IslandSat := 0.43; IslandColor := 8224087; IslandTol := 14; End;
3 : Begin IslandHue := 0.12; IslandSat := 0.73; IslandColor := 9145506; IslandTol := 12; End;
End;
end;
procedure MainLoop();
var
fObj : TObj;
x, y, i, InitialXP, UpdateXP, t: Integer;
Label
Waiting;
begin
repeat
DebugThis('-[DEBUG]- In first repeat loop.');
repeat
DebugThis('-[DEBUG]- In second repeat loop.');
if not loggedin then loginplayer;
CheckForRandoms();
if(TakeBreaks)then BreakHandler(BreakIn, BreakFor, Bir, Bfr);
if(TimeFromMark(TW) > 600000)then
FindWizard;
if not WaitFindDTMEX(EssenceDTM, EX, EY, MIX1, MIY1, MIX2, MIY2, 100, 2000) then
GetMoreEssence;
if(TimeFromMark(RCt) > (3600000 + RandomRange(-1800000, 1800000)))then
begin
RCLvl := GetSkillLevel(SKILL_RUNECRAFTING);
MarkTime(RCt);
end;
for i := 0 to High(Objects) do
begin
fObj := GetObject(i);
DebugThis('-[DEBUG]- fObj.Name = ' + fObj.Name + '.');
DebugThis('-[DEBUG]- RCLvl = ' + IntToStr(RCLvl) + '.');
DebugThis('-[DEBUG]- fObj.LvlReq = ' + IntToStr(fObj.LvlReq) + '.');
if(RCLvl >= fObj.LvlReq)then
begin
DebugThis('-[DEBUG]- RCLvl > fObj.LvlReq');
if(FindObjectPlatform)then
if(K_FindObj(x, y, i))then
begin
DebugThis('-[DEBUG]- Found platform and Object');
Waiting:
if(TimeFromMark(TP) > 60000)then
Proggy;
Wait(RandomRange(500, 750));
InitialXP := GetXPBarTotal;
CurrentXP := fObj.IXP;
DebugThis('-[DEBUG]- InitialXP = ' + IntToStr(InitialXP));
DebugThis('-[DEBUG]- CurrentXP = ' + IntToStr(CurrentXP));
MarkTime(T);
repeat
DebugThis('-[DEBUG]- In third repeat loop');
Wait(1000);
CheckForRandoms();
if(TimeFromMark(T) > RandomRange(7000, 7200))then
Break;
AntiBan;
DebugThis('-[DEBUG]- Searching for better XP Objects');
for i := 0 to High(Objects) do
begin
fObj := GetObject(i);
CheckForRandoms();
DebugThis('-[DEBUG]- fObj.Name = ' + fObj.Name + '.');
DebugThis('-[DEBUG]- fObj.LvlReq = ' + IntToStr(fObj.LvlReq) + '.');
DebugThis('-[DEBUG]- fObj.IXP = ' + IntToStr(fObj.IXP) + '.');
if(RCLvl >= fObj.LvlReq) And (CurrentXP < fObj.IXP)then
begin
if(FindObjectPlatform)then
if(K_FindObj(x, y, i))then
begin
DebugThis('-[DEBUG]- (RCLvl >= fObj.LvlReq) AND (CurrentXP < fObj.IXP)');
DebugThis('-[DEBUG]- Found higher XP Object, breaking for loop');
Higher := True;
Break;
end;
end;
end;
if(Higher)then
Break;
UpdateXP := GetXPBarTotal;
CheckForRandoms();
DebugThis('-[DEBUG]- UpdateXP = ' + IntToStr(UpdateXP));
if(UpdateXP > InitialXP)then
begin
DebugThis('-[DEBUG]- UpdateXP > InitialXP');
InitialXP := GetXPBarTotal;
T := 0;
MarkTime(T);
CheckForRandoms();
end;
until(False);
if(Higher)then
begin
DebugThis('-[DEBUG]- Higher = True');
Higher := False;
Goto Waiting;
end;
end;
end;
end;
CheckForRandoms();
until(not(LoggedIn));
if(Players[CurrentPlayer].Active)then
SetFalse('Not Logged in', False);
NextPlayer(Players[CurrentPlayer].Active);
ScriptSetup();
MainLoop();
until(AllPlayersInactive);
end;
begin
{$IFDEF SMART}
SRL_SixHourFix := True;
Smart_FixSpeed := True;
{$ENDIF}
SetupSRL;
SetupSRLStats(1036, SRLStats_Username, SRLStats_Password);
ClearDebug();
{* Initial Break Settings *}
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
ActivateClient();
DeclarePlayers();
LoginPlayer();
while(not(RSReady()))do
Wait(9000);
AddOnTerminate('Fr33DTM');
SetDtm;
MarkTime(TP);
MarkTime(RCt);
_SetRandoms();
ScriptSetup();
if(not(WaitFindDTMEX(EssenceDTM, EX, EY, MIX1, MIY1, MIX2, MIY2, 100, 2000)))then
GetMoreEssence;
MainLoop;
end.