okokokok
06-17-2013, 10:04 AM
Update information: You need to add the following SPS map (SafetyPointVar, see it down below) to the same directory as the other SPS maps! This map is included in the zip file from now on!
Hello guys,
At first I wanted to keep this script private, but I've changed my mind.
For now the script isn't fully released. Mainly due to walking issues.
So if you have any tips on walking. Go ahead! (No DDTMs walking please, doesn't work on 07 when you log in the next day).
Features of the script (*** = updated/newly added feature:
- *** Combat vs Giants;
- Anti Random measures;
- Looting;
- *** Teleport & Banking (Banking has been improved!);
- *** SPS Walking (Should be failproof now! Inform me if it isn't!);
- *** Food Support (Supports Tuna, Salmon, Lobster and Swordfish!);
- *** Different styles for looting (Fighting and Looting (withdraws only 5 food), Fighting with Looting and Burying (Withdraws 15 food) and Fighting without Looting (Full inv Food);
- *** Progress Report (Hopefully it works, couldn't test it yet!)
Future Features of the script:
- Maybe a bigger loot support than big bones.
- Maybe teleportation via tabs
- Improving the script in general
Instructions:
START AT GIANTS.
I'd recommend you are at least 60+ combat with 40+ defence.
There are different looting styles available. Since I'm for some reason not able to create a working form I will need to make some instructions:
To adjust the script, scroll down to the bottom untill you see the following procedure: Banking. It's almost at the bottom.
The different styles to choose from are: Fighting without looting, Fighting with looting and burying and Fight with looting.
Too choose between the style pick the according const.
Const
HpToEat = 46; // enter the amount of hitpoints where you want to eat at, example: HpToEat = 35;
HpToTeleport = 30; //Enter the amount of hitpoints to teleport
FoodType = 'salmon'; //tuna, salmon, lobster, swordfish
FightVari = 'NoLoot'; //Choose between NoLoot, LootAndBank, Bury
BankVari = 'BankNoLoot'; //Choose between BankNoLoot, BankLootAndBank, BankBury
CheckVari = 'CheckNoLoot'; //Choose between CheckNoLoot, CheckLootAndBank, CheckBury
// NoLoot is fighting without Looting, pick BankNoLoot and CheckNoLoot with these!
// LootAndBank is fighting with looting a full inventory and banking it! Pick BankLootAndBank and CheckLootAndBank with this const!
// Bury is fighting, picking up the bones and burying them! Pick BankBury and CheckBury with this const!
This is the end of the instructions for the different styles.
SPS information:
Now since the script uses SPS to walk you will need to install/add a few things to Simba.
Start with adding SPS for OSR. To do this take a look at the following thread: http://villavu.com/forum/showthread.php?t=98324
After you have done this, you will need to add some custom SPS maps. You can find these in the zip file attached to this thread.
Download the zip file and upack it in the following directory: C:/SIMBA/Includes/SPS/img/runescape_surface07
This is the end of the SPS instructions.
Inventory:
Have a brass key and varrock teleport runes anywhere in your inventory.
PS: It's been a long time since I've scripted alot and this isn't too bad of a release for me at the moment. Some patience with the updates please.
************************************************** **********************************
Update History
- 19-6-2013 GiantKillerV5_2_PublicRelease
Improved the following features!
- SPSWalking (Added some failsafes and improved it in general!);
- Banking (Added some failsafes when opening the bank!);
- Removed the unneeded writeln etc.
The Script should run pretty smooth now!
- 19-6-2013 GiantKillerV5_1_PublicRelease:
Added some features and fixed some code.
- Proggy report added! (Not sure if it works. Too tired and too late to test it!)
- Food Support fixed and expanded! Now supports TUNA, SWORDFISH, LOBSTER AND SALMON!
- Fixed the fighting function with the right teleports etc.
- 18-6-2013 GiantKillerV5:
Alot of code has been rewritten.
Also added the following features:
- SPS Walking has been added.
- Food support has been added.
- Different looting styles have been added.
************************************************** **********************************
Forum version:
program GiantKillerV5_2_Public_Release;
{$DEFINE SMART8}
{$I SRL-OSR/SRL.Simba}
{$i SRL-OSR\SRL\misc\debug.simba}
{$I SPS/sps-osr.simba}
Const
HpToEat = 46; // enter the amount of hitpoints where you want to eat at, example: HpToEat = 35;
HpToTeleport = 30; //Enter the amount of hitpoints to teleport
FoodType = 'salmon'; //tuna, salmon, lobster, swordfish
FightVari = 'NoLoot'; //Choose between NoLoot, LootAndBank, Bury
BankVari = 'BankNoLoot'; //Choose between BankNoLoot, BankLootAndBank, BankBury
CheckVari = 'CheckNoLoot'; //Choose between CheckNoLoot, CheckLootAndBank, CheckBury
Var
FoodDTM,x,y,XPGainSTR,XPGainSTRPH,XPGainATT,XPGain ATTPH: Integer;
XPGainDEF,XPGainDEFPH,XPGainHP,XPGainHPPH,XPGainPR AY,XPGainPRAYPH,TimeDone: Integer;
CurrentXPHP, CurrentXPATT,CurrentXPSTR,CurrentXPDEF,CurrentXPPR AY: Integer;
OriginalXPHP, OriginalXPATT,OriginalXPSTR,OriginalXPDEF,Original XPPRAY,TimeDoneMin: Integer;
MyLoc, SafetyPoint: TPoint;
Path_ToBank, Path_ToHut1, Path_ToHut2,Path_ToGiants1, Path_ToGiants2: TPointArray;
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer:= 0;
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := '';
Players[0].Pin := '';
Players[0].Active:= True;
Players[0].LampSkill := Skill_Prayer;
end;
////////////////////////////////////////////
/////////// AntiBan Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure AntiBan;
begin
FindNormalRandoms;
Case Random (1500) of
0..15: RandomRClick;
50..65: PickUpMouse;
90..105: RandomRClick;
115..120: RandomMovement;
160..180: ExamineInv;
230..250:
begin
HoverSkill('random', false);
sleepandmovemouse(276 + Random(100));
PickUpMouse;
ChooseOption('Cancel');
SetAngle(SRL_ANGLE_HIGH);
end;
300..320: BoredHuman;
350..390: PickUpMouse;
420..450: RandomRClick;
280..299: RandomMovement;
460..480: SleepAndMoveMouse(3000 + Random(500));
end;
end;
////////////////////////////////////////////
///////// Colouring Functions /////////
///////// Made by OkOkOkOk /////////
///////// Made with AutoColorAid /////////
////////////////////////////////////////////
function GiantColor1: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.05, 0.40);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 4414586, MSX1, MSY1, MSX2, MSY2, 24);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 1.76) and (X <= 34.03) and (Y >= 1.65) and (Y <= 34.69) and (Z >= 0.92) and (Z <= 28.21) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function GiantColor2: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.02, 0.52);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 5274014, MSX1, MSY1, MSX2, MSY2, 27);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 3.92) and (X <= 53.22) and (Y >= 3.81) and (Y <= 53.76) and (Z >= 1.88) and (Z <= 39.48) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function BoneColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 0.10);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 11974591, MSX1, MSY1, MSX2, MSY2, 19);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 24.39) and (X <= 78.12) and (Y >= 24.53) and (Y <= 81.84) and (Z >= 25.26) and (Z <= 88.77) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
////////////////////////////////////////////
/////////// FoodOption Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure SetDTM(const FoodType : String);
begin
Case FoodType of
'tuna' : begin
FoodDTM := DTMFromString('m6wAAAHic42ZgYDgDxIeB+BAQnwDi80B8BY hvAPE1IL4AVQOSmwvE84B4ERAvBeIlUP5sIJ4OxNOgNIjfUZDN MKG8mGFBSz3DjNpKhkmVJUBRRobWvCyG7IgwhryocIb0kCCGso RYBn6gDLGYkQSMBABfpB2r');
end;
'salmon' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYLgAxGegGMR+AcQvgfgZED 8Bsf1lGe57SzEstxBhWGouwsAFFEPGjGgYBACw9wuA');
end;
'lobster' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYKhnYmCoBuI6IG4CYm1GBg YtIFYHYg0g3p8qzrAoTJBhS7wIw6MKKQYuoB5kzIiGQQAAqDEH ug==');
end;
'swordfish' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYFjOxMCwGIhXA/EyIFZnhGBVIFYG4gVFKxg6EycwtMf3MSS7pTNwAfUgY0Y0DAIA/vEJJg==');
end;
end;
end;
procedure FreeFoodDTM;
begin
FreeDTM(FoodDTM);
end;
////////////////////////////////////////////
/////////// Proggy Report ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure ProgressReport;
begin
ClearDebug;
TimeDone := (GetTimeRunning/1000);
TimeDoneMin := (TimeDone/60);
CurrentXPHP := GetXP('hitpoints');
CurrentXPATT := GetXP('attack');
CurrentXPSTR := GetXP('strength');
CurrentXPDEF := GetXP('defence');
CurrentXPPRAY := GetXP('prayer');
OriginalXPHP := GetXP('hitpoints');
OriginalXPATT := GetXP('attack');
OriginalXPSTR := GetXP('strength');
OriginalXPDEF := GetXP('defence');
OriginalXPPRAY := GetXP('prayer');
XPGainHP := (CurrentXPHP - OriginalXPHP);
XPGainATT := (CurrentXPATT - OriginalXPATT);
XPGainSTR := (CurrentXPSTR - OriginalXPSTR);
XPGainDEF := (CurrentXPDEF - OriginalXPDEF);
XPGainPRAY := (CurrentXPPRAY - OriginalXPPRAY);
XPGainHPPH :=(3600*(XPGainHP))/((TimeDone));
XPGainATTPH :=(3600*(XPGainATT))/((TimeDone));
XPGainSTRPH :=(3600*(XPGainSTR))/((TimeDone));
XPGainDEFPH :=(3600*(XPGainDEF))/((TimeDone));
XPGainPRAYPH :=(3600*(XPGainPRAY))/((TimeDone));
begin
Writeln('***************************************** ************************************************** ************************************************** *****');
Writeln('******************** OkOkOkOk Hill Giant Killer - Edgeville Dungeon ************************************************** ****************************');
Writeln('***************************************** ************************************************** ************************************************** *****');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('-------------------- Proggy for the player: ' + Players[0].Nick + '-------------------------------------------------------------------------------');
Writeln('-------------------- Time running: ' + IntToStr(GetTimeRunning/60000) + 'Minutes -----------------------------------------------------------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainHP) + ' Hitpoints xp / Thats ' + IntToStr(XPGainHPPH) + ' Hitpoints xp per hour ----------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainATT) + ' Attack xp / Thats ' + IntToStr(XPGainATTPH) + ' Attack xp per hour --------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainSTR) + ' Strength xp / Thats ' + IntToStr(XPGainSTRPH) + ' Strength xp per hour ----------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainDEF) + ' Defence xp / Thats ' + IntToStr(XPGainDEFPH) + ' Defence xp per hour ------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainPRAY) + ' HP xp / Thats ' + IntToStr(XPGainPRAYPH) + ' HP xp per hour --------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
end;
end;
////////////////////////////////////////////
/////////// Looting Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure Looting;
var x,y,BoneCount,t,Timeout: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
BoneCount:= InvCount + 1
MarkTime(t);
Timeout := RandomRange(2000, 3000);
repeat
begin
FindNormalRandoms;
If FindObjCustom(x,y,['ake'],[BoneColor],5) then
begin
FindNormalRandoms;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + Random(50));
FindNormalRandoms;
if ChooseOptionMulti(['bone','law']) then
begin
FindNormalRandoms;
Wait(1450 + Random(50));
end
else
Wait(1000 + random(200));
FindNormalRandoms;
Wait(1000);
FindNormalRandoms;
end;
end;
until (InvCount = BoneCount) or (TimeFromMark(t) > TimeOut)
end;
////////////////////////////////////////////
/////////// Fighting Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
Function CombatCheck: Boolean;
var
PBox: TBox;
begin
PBox := IntToBox(245, 130, 285, 195);
Result := (AveragePixelShift(PBox, 250, 500) > 250);
end;
{************************************************* ******************************
Function FindNPC
By: Nemesis3X
Description: Finds a NPC in a mnore effective way than FindObjCustom etc.
************************************************** *****************************}
Function FightingGiants: Boolean;
Var
X,Y: Integer;
TPAA: T2DPointArray; // The Variables of the Functions
TPA: TPointArray;
CTS, I, Retry,Count: Integer;
Begin
repeat
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, GiantColor1, MSX1, MSY1, MSX2, MSY2, 3); // Enter the Color and Tolerance Here at the Right place.
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 25,15); //Put the Width and Heigh here
SortATPASize(TPAA, True);
For I := 0 To High(TPAA) Do
If GetArraylength(TPAA[i]) > 2 Then // Set How Much Points you need for your function to take Action
Begin
repeat
inc(Retry);
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
if (IsUpTextMultiCustom(['ill', 'iant'])) then // Enter The name of Your NPC or Monster
Begin
Result := True;
GetMousePos(X, Y);
mouse(x,y,3,3,false);
wait(100 + random(200));
ChooseOption('ttack');
Count:=0;
wait(300 + random(300));
Break;
End;
until (Retry = 2);
Break;
end;
Break;
until (CombatCheck = True);
end;
{************************************************* ******************************
Function FindNPC
By: Nemesis3X
Description: Finds a NPC in a mnore effective way than FindObjCustom etc.
************************************************** *****************************}
Function FightingGiants2: Boolean;
Var
X,Y: Integer;
TPAA: T2DPointArray; // The Variables of the Functions
TPA: TPointArray;
CTS, I, Retry,Count: Integer;
Begin
repeat
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, GiantColor2, MSX1, MSY1, MSX2, MSY2, 3); // Enter the Color and Tolerance Here at the Right place.
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 25,15); //Put the Width and Heigh here
SortATPASize(TPAA, True);
For I := 0 To High(TPAA) Do
If GetArraylength(TPAA[i]) > 2 Then // Set How Much Points you need for your function to take Action
Begin
repeat
inc(Retry);
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
if (IsUpTextMultiCustom(['ill', 'iant'])) then // Enter The name of Your NPC or Monster
Begin
Result := True;
GetMousePos(X, Y);
mouse(x,y,3,3,false);
wait(100 + random(200));
ChooseOption('ttack');
Count:=0;
wait(300 + random(300));
Break;
End;
until (Retry = 2);
Break;
end;
Break;
until (CombatCheck = True);
end;
////////////////////////////////////////////
/////////// Teleport Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
Procedure OpenSpellBook;
var x,y,SpellBookDTM: Integer;
begin
SpellBookDTM := DTMFromString('m1gAAAHic42JgYHjNxMDwA4h/AfE3Jgj/CRA/hOLnQPwZiC8D1Z4D4ttA/BCIHwPxAyC+DsSngfgIEB8D4lmlJgxeLtYMjjamDDqaKgyGepo MznYWDKGO+gxdNZkMdYWJDME+TgzEAkYiMQIAAMj1GpA=');
If FindDTM(SpellBookDTM,x,y,0,0,765,505) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(150 + random(50));
end;
FreeDTM(SpellBookDTM);
end;
procedure TeleportToVarrockClick;
var x,y,TeleportDTM: Integer;
begin
TeleportDTM := DTMFromString('mrAAAAHic42BgYIhgYmCIheJoIA4H4kAoBv EtGRkYzIHYGojtgdgByjYGYkMgZmBgZBAR1GeoqvoJpmEYJA7B +AEjAQwDAMSfB/M=');
If FindDTM(TeleportDTM,x,y,MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(x,y,0,0);
Wait(250 + Random(50));
Mouse(x,y,0,0,true);
Wait(350 + Random(50));
Wait(2000 + random(500));
FindNormalRandoms;
end;
FreeDTM(TeleportDTM);
end;
Procedure TeleportFailCheck;
var x,y,i: Integer;
CheckDTM: Array [0..2] of Integer;
begin
CheckDTM[0] := DTMFromString('mlwAAAHicY2dgYNjFxMBwCIj3A/FmIF4FxJuAeC8QVwDlS4G4AYhbgbgeyi8C4tjoYJwYH2DEg6EA AFQ4D8k=');
CheckDTM[1] := DTMFromString('mwQAAAHic42RgYLjMxMBwDYivAvElIL4AxZ eg4jeAuA6orgGIm6EYxK5BwiB5JVcGBttgNgY3N0UwBgEQDRLX jmCAixECjERgOAAAS9IQpg==');
CheckDTM[2] := DTMFromString('m6wAAAHic42ZgYFjKxMCwHIhXIeElQLwAiO cA8WwgngcVywCqz2KA0ElAHAfEsUCcAMTJQJwGlQfhz9/eMMRGBxPEjIyMDKQARhIwEgAAy6sXww==');
For i := 0 to 2 do
If not(FindDTM(CheckDTM[i],x,y,607,81,755,193)) then
begin
OpenSpellBook;
TeleportToVarrockClick;
end
else
begin
Break;
end;
FreeDTM(CheckDTM[0]);
FreeDTM(CheckDTM[1]);
FreeDTM(CheckDTM[2]);
end;
Procedure TeleportToVarrock;
begin
OpenSpellBook;
TeleportToVarrockClick;
end;
Procedure EmergencyTeleport;
begin
If GetSkillInfo('hitpoints', true) < HpToTeleport then
begin
OpenSpellBook;
TeleportToVarrockClick;
end;
end;
////////////////////////////////////////////////////////
/////////// Health Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
procedure OutOfFoodDetect;
var x,y: Integer;
begin
SetDTM(FoodType);
Gametab(Tab_Inv);
If FindDTM(FoodDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
Writeln('Food left');
end
else
begin
EmergencyTeleport;
end;
end;
procedure HealthRestore;
var x,y: Integer;
begin
SetDTM(FoodType);
If GetSkillInfo('hitpoints', true) < HpToEat then
Gametab(Tab_Inv);
If FindDTM(FoodDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(350 + random(50));
end
else
begin
OutOfFoodDetect;
end;
end;
////////////////////////////////////////////////////////
/////////// Bury Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Procedure BuryBones;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('m1gAAAHic42JgYNjExMCwC4h3APEKIF4OxK uBeA0TRG4HVF6fkYHBDIgtgdgEiI2AWBuINYFYB4oNgHj/9m0MN69cZjBQUGCQkZRkyIiLY4gPC2M4uncvw5aVKxmmdXQwxI aGMBALGInECAAAw+kXiw==');
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Wait(100 + random(50));
Mouse(x,y,0,0,true);
Wait(300 + random(50));
Wait(1800 + random(50));
end
else
begin
Writeln('Nothing to bury');
end;
FreeDTM(BoneDTM);
end;
////////////////////////////////////////////////////////
/////////// Banking Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Function PinCheck: Boolean;
var x,y,ChestDTM, CoinsDTM: Integer;
begin
ChestDTM := DTMFromString('m1gAAAHic42JgYNjMyMAwA4hXA/FOID4AxTugYnOBeDYQ7weq3Q7EW6D4EBCfBuILQHwRiC8B8UEg zkvnY9CTF2FIcDBmcNNTYWBhYmSQE+VgmNojARZ3tGZniA3nYm AFqiUGMxKJEQAAQwgUhg==');
CoinsDTM := DTMFromString('m1gAAAHic42JgYLjJyMBwAogvAvEdIL4PxG +A+BEQXwPiI0C8DYjfAdU+A+L7QHwHyn4FxN+BmAUozwDEP4FU agQ3Q1EKD5gGYUVZfjAfRi+dJMEQ6s3LwApUSwxmJBIjAAASYR eF');
If FindDTM(ChestDTM,x,y,MSX1,MSY1,MSX2,MSY2) or
FindDTM(CoinsDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
Result := True;
end;
end;
Procedure WithdrawFoodWithLooting;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 5') then
begin
CloseBank;
end;
end;
end;
Procedure WithdrawFoodWithBury;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 10') then
begin
Wait(500 + random(50));
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 5') then
begin
Wait(300 + random(50));
CloseBank;
end;
end;
end;
end;
Procedure WithdrawFoodNoLootingNoBury;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw All') then
begin
CloseBank;
end;
end;
end;
procedure OpenBankBooth;
var x,y,r,RopeDTM: Integer;
BankDTM: Array [0..2] of Integer;
begin
If FindSymbol(x,y,'bank') then
begin
MakeCompass('E');
BankDTM[0] := DTMFromString('mggAAAHicY2NgYGBnZGD4DaT/AzEbkM3LCBGLB/ID0XAqEMcHajP0thUxdDXnM7TUZjE0VKYxRPvIM3AB5bBhRhwY AgC6owvc');
BankDTM[1] := DTMFromString('mlwAAAHicY2dgYNgHxFuAeD8QnwDiM0C8E4 gPAnE8EEcCcTgUJwJxGhBnAnF6tCVDfUUaQ0pCGEN6UjhDUog2 Q5SvFkO0jzwDF1AeF2bEg6EAABjcDzQ=');
BankDTM[2] := DTMFromString('mggAAAHicY2NgYFgPxKuBeCMQbwfi3UC8D4 iNgFgTiDWgtC4QGwNxfIAiQ7S3CENnUx5DcV4cQ2GCBkNSiDYD F1AOG2bEgSEAAPFCC6w=');
RopeDTM := DTMFromString('mWAAAAHicY2FgYFjByMCwGIjXAPF8IF4PFN sAxSC2d7Ejg3WmPhg7pVsycAHFkDEjGgYBABtiCRA=');
For r := 0 to 2 do
If FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('ank') then
Wait(5250 + random(50));
end
else
If not(FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(2000 + random(200));
If FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('ank') then
Wait(2250 + random(50));
end;
end;
FreeDTM(BankDTM[0]);
FreeDTM(BankDTM[1]);
FreeDTM(BankDTM[2]);
FreeDTM(RopeDTM);
end;
end;
Procedure OpenBankCheck;
begin
Wait(3000);
If not(BankScreen) then
begin
OpenBankBooth;
Wait(150 + random (50));
end;
end;
procedure DepositBones;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('mwQAAAHic42RgYMhlYmBIB+ISIC6F4kIgTg HiJCBOBeK1jAwMy4B4JRCvA+ItQLwdiDdC+SDx/du2MhzcsQNoIiNDbGgIw80rlxk42NgYtDU0GPZs3sRQkJbKwAq UJYQZicBwAACp7BYT');
If (PinCheck = True) then
InPin(Players[0].Pin);
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
CloseBank;
If InvFull then
begin
OpenBankBooth;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
CloseBank;
end;
end;
FreeDTM(BoneDTM);
end;
procedure DepositBonesWithFood;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('mwQAAAHic42RgYMhlYmBIB+ISIC6F4kIgTg HiJCBOBeK1jAwMy4B4JRCvA+ItQLwdiDdC+SDx/du2MhzcsQNoIiNDbGgIw80rlxk42NgYtDU0GPZs3sRQkJbKwAq UJYQZicBwAACp7BYT');
If (PinCheck = True) then
InPin(Players[0].Pin);
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
If InvFull then
begin
OpenBankBooth;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
end;
end;
FreeDTM(BoneDTM);
end;
Procedure InsideBankCheckWithFood;
begin
If InvFull then
begin
DepositBonesWithFood;
Wait(150 + random(50));
end;
end;
Procedure InsideBankCheck;
begin
If InvFull then
begin
DepositBones;
Wait(150 + random(50));
end;
end;
Procedure InsideBankCheckWithoutFood;
begin
If InvEmpty then
begin
WithdrawFoodNoLootingNoBury;
Wait(150 + random(50));
end;
end;
////////////////////////////////////////////
/////////// Random Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure GetBackToMonsters;
var x,y: Integer;
begin
begin
If FindColorSpiralTolerance(x,y,195836,MMX1,MMY1,MMX2 ,MMY2,5) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(4000 + random(100));
end;
end;
end;
///////////////////////////////////////////////////////
/////////// Combat Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
///////////////////////////////////////////////////////
procedure FightWithoutLootingOrBury;
Var Count: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
end;
ProgressReport;
until (InvCount < 7);
end;
procedure FightOnlyLooting;
Var Count: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
Count:=0;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
Looting;
end;
ProgressReport;
until (InvFull);
end;
procedure FightWithBury;
Var Count, BoneCount,x,y: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
BoneCount := InvCount + 1;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
Count:=0;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
Looting;
BuryBones;
end;
ProgressReport;
until (InvCount < 7);
end;
////////////////////////////////////////////
/////////// SPS&stuff ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
{************************************************* ******************************
Function GenerateWallDTM(WallType, WallLength: Integer): Integer;
By: Flight
Description: Creates a DTM of a perfectly straight wall.
-WallType : 1 for vertical, 2 for horizontal
-WallLength: Length of the DTM to be generated
************************************************** *****************************}
function GenerateWallDTM(WallType, WallLength: Integer): Integer;
var
i: Integer;
TempTDTM: TDTM;
mPnt: TDTMPointDef;
sPnts: array of TDTMPointDef;
begin
SetArrayLength(sPnts, (WallLength-1));
mPnt.x := 0;
mPnt.y := 0;
mPnt.AreaSize := 0;
mPnt.AreaShape := 0;
mPnt.Color := 16119287;
mPnt.Tolerance := 40;
for i:=0 to High(sPnts) do
begin
case WallType of
1:
begin
sPnts[i].x := 0;
sPnts[i].y := i+1;
end;
2:
begin
sPnts[i].x := i+1;
sPnts[i].y := 0;
end;
end;
sPnts[i].AreaSize := 0;
sPnts[i].AreaShape := 0;
sPnts[i].Color := 16119287;
sPnts[i].Tolerance := 40;
end;
TempTDTM.MainPoint := mPnt;
TempTDTM.SubPoints := sPnts;
Result := AddDTM(TempTDTM);
end;
{************************************************* ******************************
Function GetLongestWallLength(WallType: Integer): Integer;
By: Flight
Description: Determines the longest wall on your MM at any compass angle.
-WallType: 1 for vertical walls, 2 for horizontal walls
************************************************** *****************************}
function GetLongestWallLength(WallType: Integer): Integer;
var
B: TBox;
TPA: TPointArray;
ATPA: T2DPointArray;
begin
ColorToleranceSpeed(1);
FindColorsSpiralTolerance(MMCX, MMCY, TPA, 16119287, MMX1, MMY1, MMX2, MMY2, 40);
if (Length(TPA)<1) then
Exit;
RAaSTPA(TPA, 1);
if (WallType = 1) then
SplitTPAExWrap(TPA, 2, 3, ATPA)
else
SplitTPAExWrap(TPA, 3, 2, ATPA);
SortATPASize(ATPA, True);
B := GetTPABounds(ATPA[0]);
if (WallType = 1) then
Result := (B.Y2-B.Y1)
else
Result := (B.X2-B.X1);
end;
{************************************************* ******************************
Function ForceMapNorth: Boolean;
By: Flight
Description: Using auto-generated wall DTMs, this function will attempt to
rotate the compass to near-perfect north. Should it fail it will revert
back to default north.
************************************************** *****************************}
Function ForceMapNorth: Boolean;
var
Left: Boolean;
StartAngle: Extended;
X,Y,DTM_VertWall,
DTM_HorWall,T,F,L1,L2: Integer;
label
Start,FuncEnd;
begin
Result := False;
L1 := GetLongestWallLength(1);
L2 := GetLongestWallLength(2);
if (L1 > 50) then
L1 := 50;
if (L2 > 50) then
L2 := 50;
DTM_VertWall := GenerateWallDTM(1, Round(L1*0.85)); //Create a DTM 85% of the length of the longest vertical wall
DTM_HorWall := GenerateWallDTM(2, Round(L2*0.85)); //Create a DTM 85% of the length of the longest horizontal wall
if (FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2) or
FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2)) then
begin
Result := True;
GoTo FuncEnd;
end;
StartAngle := (rs_GetCompassAngleDegrees);
Left := (Round((360 - StartAngle)) mod 360 <= Round((StartAngle + 360)) mod 360);
Start:
if (F > 0) then
MakeCompass('N');
MarkTime(T);
Repeat
TypeByte((Ord(not Left) * 2) + 37); //No holding down, actually press the arrow key
if (FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2) or
FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2)) then
break;
Until(TimeFromMark(T) >= 1000)
FuncEnd:
if ((not FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2)) and
(not FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2))) then
begin
Inc(F);
StartAngle := (rs_GetCompassAngleDegrees);
Left := (Round((360 - StartAngle)) mod 360 <= Round((StartAngle + 360)) mod 360);
if (F < 2) then
GoTo Start;
end else if ((X > 1) and (Y > 1)) then
Result := True;
if not Result then
MakeCompass('N');
FreeDTM(DTM_VertWall);
FreeDTM(DTM_HorWall);
end;
procedure SPSToBank;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.1
ForceMapNorth;
SPS_Setup(runescape_surface, ['vwbankpath']);
Path_ToBank := [Point(286, 250), Point(278, 251), Point(271, 246), Point(264, 240), Point(257, 235), Point(248, 232), Point(238, 231), Point(230, 231), Point(219, 231), Point(210, 231), Point(200, 231), Point(188, 230), Point(182, 225)]
SPS_WalkPath(Path_ToBank);
SymbolAccuracy := 0.5;
If FindSymbol(x,y,'bank') then
begin
Mouse(x,y,0,0,true);
FFlag(0);
Wait(1000 + random(100));
end;
SymbolAccuracy := 0.8;
end;
procedure SPSToHut1;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
ForceMapNorth;
SymbolAccuracy := 0.5;
If FindSymbol(x,y,'anvil') then
begin
Mouse(x,y,0,0,true);
FFlag(0);
Wait(1000 + random(100));
end;
SymbolAccuracy := 0.8;
SPS_Setup(runescape_surface, ['HutPathOne']);
Path_ToHut1 := [Point(275, 234), Point(267, 222), Point(247, 221), Point(227, 224), Point(212, 225), Point(199, 224)];
SPS_WalkPath(Path_ToHut1);
end;
procedure SPSSafetyPoint;
var SafetyPoint: TPoint;
begin
SPS_Tolerance := 350.0
SPS_MatchesPercent := 0.5
ForceMapNorth;
SPS_Setup(runescape_surface, ['SafetyPointVar']);
SafetyPoint := (Point(232, 252));
SPS_WalkToPos(SafetyPoint);
end;
procedure SPSToHut2;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.5
ForceMapNorth;
SPS_Setup(runescape_surface, ['HutPathTwo']);
Path_ToHut2 := [Point(381, 255), Point(364, 258), Point(349, 267), Point(339, 285), Point(323, 296), Point(303, 305), Point(285, 299), Point(283, 282), Point(272, 269), Point(267, 252), Point(260, 236), Point(269, 223), Point(246, 209), Point(229, 203), Point(212, 200), Point(195, 195), Point(179, 190), Point(166, 186), Point(150, 174)];
SPS_WalkPath(Path_ToHut2);
end;
procedure SPSToGiants1;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
ForceMapNorth;
SPS_Setup(runescape_surface, ['PathToGiantsOne']);
Path_ToGiants1 := [Point(240, 233), Point(237, 242), Point(235, 253), Point(235, 264), Point(235, 275), Point(234, 283), Point(231, 290), Point(230, 298), Point(229, 309)]
SPS_WalkPath(Path_ToGiants1);
end;
procedure SPSToGiants2;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
SPS_Setup(runescape_surface, ['PathToGiantsTwo']);
Path_ToGiants2 := [Point(243, 234), Point(243, 243), Point(241, 254), Point(234, 265), Point(234, 272), Point(229, 284)]
SPS_WalkPath(Path_ToGiants2);
end;
////////////////////////////////////////////////////////
/////////// Walking Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Procedure OpenHutDoor;
var x,y,t: Integer;
HutDoorDTM: Array [0..1] of Integer;
begin
HutDoorDTM[0] := DTMFromString('mbQAAAHicY2VgYJjLyMAwkxFCLwLieUC8gg GC1wDxKiBeCMSTC1UZ6pMUGJpTFcDsilg5Bi6gODpmxILBAABe 1Avq');
HutDoorDTM[1] := DTMFromString('mrAAAAHic42BgYFjAyMAwG4hnAPE0IJ4PxE uAeCkQLwTiFUA184B4KRCvBeINQLwaiBdCxfOC+BhyQ6QZ+vNV GdrSlRg6M5UYmlMVGKaVqDKkenMycAHV4MOMBDAMAABPkxJt') ;
For t := 0 to 1 do
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end
else
If not(FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
SPSSafetyPoint;
Wait(3000 + Random(100));
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end
else
If not(FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
SPSSafetyPoint;
Wait(3000 + Random(100));
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end;
end;
end;
FreeDTM(HutDoorDTM[0]);
FreeDTM(HutDoorDTM[1]);
end;
Procedure GoDownLadder;
var x,y,g: Integer;
LadderDTM: Array [0..2] of Integer;
begin
LadderDTM[0] := DTMFromString('mlwAAAHicY2dgYDBnZGBwBmIXKNaAYm0grg TKFzNA6CYgLgPiOiBuA+IMX1UGUSEhrJgLKI8LM+LBUAAA/PoHag==');
LadderDTM[1] := DTMFromString('mggAAAHicY2NgYDBjZGDQhmITILYHYlcgbm GA4BogroRiED8vVI5BVEgIjHMC5eFsLqAcNsyIA0MAAGsMBy4= ');
LadderDTM[2] := DTMFromString('mlwAAAHicY2dgYDBgZGAwAWI9INaCYkMgNg PiOqB8CxC3AXEDEFcAcQkQVwKxqJAQQ46/OphGxiAxLqA8LsyIB0MBABSjB/c=');
For g := 0 to 2 do
If FindDTM(LadderDTM[g],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(150 + random(50));
Mouse(x,y,0,0,false);
Wait(250 + random(50));
If ChooseOption('mb-do') then
Wait(2200 + random(50));
end;
end;
////////////////////////////////////////////
/////////// Option Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure FightVar;
begin
Case FightVari of
'NoLoot' : begin
FightWithoutLootingOrBury;
end;
'LootAndBank' : begin
FightOnlyLooting;
end;
'Bury' : begin
FightWithBury;
end;
end;
end;
procedure WithdrawBank;
begin
Case BankVari of
'BankNoLoot' : begin
WithdrawFoodNoLootingNoBury;
end;
'BankLootAndBank' : begin
WithdrawFoodWithLooting;
end;
'BankBury' : begin
WithdrawFoodWithBury;
end;
end;
end;
procedure BankCheck;
begin
Case CheckVari of
'CheckNoLoot' : begin
InsideBankCheckWithFood;
end;
'CheckLootAndBank' : begin
InsideBankCheckWithoutFood;
end;
'CheckBury' : begin
InsideBankCheck;
end;
end;
end;
////////////////////////////////////////////
/////////// Final Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure Banking;
begin
OpenBankBooth;
OpenBankCheck;
BankCheck;
WithdrawBank;
HealthRestore;
end;
Procedure WalkingAndBanking;
begin
SPSToBank;
Banking;
SPSToHut1;
SPSToHut2;
OpenHutDoor;
GoDownLadder;
SPSToGiants1;
SPSToGiants2;
end;
procedure OneRun;
begin
repeat
AntiBan;
FindNormalRandoms;
FightVar;
TeleportToVarrock;
WalkingAndBanking;
until (not(LoggedIn));
end;
begin
DeclarePlayers;
SetupSRL;
LoginPlayer;
SPS_Setup(RUNESCAPE_SURFACE, ['6_8','5_8']);
SPS_AnyAngle := False;
MyLoc := sps_getMyPos;
writeln('SPS returns ' + inttostr(myloc.x) + ',' + inttostr(myloc.y));
SRL_CombatRandoms := False;
ClearDebug;
begin
repeat
OneRun;
until(false);
end;
end.
Enjoy OkOkOkOk
Donations for OSR are always welcome. These will be used to create more scripts
Hello guys,
At first I wanted to keep this script private, but I've changed my mind.
For now the script isn't fully released. Mainly due to walking issues.
So if you have any tips on walking. Go ahead! (No DDTMs walking please, doesn't work on 07 when you log in the next day).
Features of the script (*** = updated/newly added feature:
- *** Combat vs Giants;
- Anti Random measures;
- Looting;
- *** Teleport & Banking (Banking has been improved!);
- *** SPS Walking (Should be failproof now! Inform me if it isn't!);
- *** Food Support (Supports Tuna, Salmon, Lobster and Swordfish!);
- *** Different styles for looting (Fighting and Looting (withdraws only 5 food), Fighting with Looting and Burying (Withdraws 15 food) and Fighting without Looting (Full inv Food);
- *** Progress Report (Hopefully it works, couldn't test it yet!)
Future Features of the script:
- Maybe a bigger loot support than big bones.
- Maybe teleportation via tabs
- Improving the script in general
Instructions:
START AT GIANTS.
I'd recommend you are at least 60+ combat with 40+ defence.
There are different looting styles available. Since I'm for some reason not able to create a working form I will need to make some instructions:
To adjust the script, scroll down to the bottom untill you see the following procedure: Banking. It's almost at the bottom.
The different styles to choose from are: Fighting without looting, Fighting with looting and burying and Fight with looting.
Too choose between the style pick the according const.
Const
HpToEat = 46; // enter the amount of hitpoints where you want to eat at, example: HpToEat = 35;
HpToTeleport = 30; //Enter the amount of hitpoints to teleport
FoodType = 'salmon'; //tuna, salmon, lobster, swordfish
FightVari = 'NoLoot'; //Choose between NoLoot, LootAndBank, Bury
BankVari = 'BankNoLoot'; //Choose between BankNoLoot, BankLootAndBank, BankBury
CheckVari = 'CheckNoLoot'; //Choose between CheckNoLoot, CheckLootAndBank, CheckBury
// NoLoot is fighting without Looting, pick BankNoLoot and CheckNoLoot with these!
// LootAndBank is fighting with looting a full inventory and banking it! Pick BankLootAndBank and CheckLootAndBank with this const!
// Bury is fighting, picking up the bones and burying them! Pick BankBury and CheckBury with this const!
This is the end of the instructions for the different styles.
SPS information:
Now since the script uses SPS to walk you will need to install/add a few things to Simba.
Start with adding SPS for OSR. To do this take a look at the following thread: http://villavu.com/forum/showthread.php?t=98324
After you have done this, you will need to add some custom SPS maps. You can find these in the zip file attached to this thread.
Download the zip file and upack it in the following directory: C:/SIMBA/Includes/SPS/img/runescape_surface07
This is the end of the SPS instructions.
Inventory:
Have a brass key and varrock teleport runes anywhere in your inventory.
PS: It's been a long time since I've scripted alot and this isn't too bad of a release for me at the moment. Some patience with the updates please.
************************************************** **********************************
Update History
- 19-6-2013 GiantKillerV5_2_PublicRelease
Improved the following features!
- SPSWalking (Added some failsafes and improved it in general!);
- Banking (Added some failsafes when opening the bank!);
- Removed the unneeded writeln etc.
The Script should run pretty smooth now!
- 19-6-2013 GiantKillerV5_1_PublicRelease:
Added some features and fixed some code.
- Proggy report added! (Not sure if it works. Too tired and too late to test it!)
- Food Support fixed and expanded! Now supports TUNA, SWORDFISH, LOBSTER AND SALMON!
- Fixed the fighting function with the right teleports etc.
- 18-6-2013 GiantKillerV5:
Alot of code has been rewritten.
Also added the following features:
- SPS Walking has been added.
- Food support has been added.
- Different looting styles have been added.
************************************************** **********************************
Forum version:
program GiantKillerV5_2_Public_Release;
{$DEFINE SMART8}
{$I SRL-OSR/SRL.Simba}
{$i SRL-OSR\SRL\misc\debug.simba}
{$I SPS/sps-osr.simba}
Const
HpToEat = 46; // enter the amount of hitpoints where you want to eat at, example: HpToEat = 35;
HpToTeleport = 30; //Enter the amount of hitpoints to teleport
FoodType = 'salmon'; //tuna, salmon, lobster, swordfish
FightVari = 'NoLoot'; //Choose between NoLoot, LootAndBank, Bury
BankVari = 'BankNoLoot'; //Choose between BankNoLoot, BankLootAndBank, BankBury
CheckVari = 'CheckNoLoot'; //Choose between CheckNoLoot, CheckLootAndBank, CheckBury
Var
FoodDTM,x,y,XPGainSTR,XPGainSTRPH,XPGainATT,XPGain ATTPH: Integer;
XPGainDEF,XPGainDEFPH,XPGainHP,XPGainHPPH,XPGainPR AY,XPGainPRAYPH,TimeDone: Integer;
CurrentXPHP, CurrentXPATT,CurrentXPSTR,CurrentXPDEF,CurrentXPPR AY: Integer;
OriginalXPHP, OriginalXPATT,OriginalXPSTR,OriginalXPDEF,Original XPPRAY,TimeDoneMin: Integer;
MyLoc, SafetyPoint: TPoint;
Path_ToBank, Path_ToHut1, Path_ToHut2,Path_ToGiants1, Path_ToGiants2: TPointArray;
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer:= 0;
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := '';
Players[0].Pin := '';
Players[0].Active:= True;
Players[0].LampSkill := Skill_Prayer;
end;
////////////////////////////////////////////
/////////// AntiBan Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure AntiBan;
begin
FindNormalRandoms;
Case Random (1500) of
0..15: RandomRClick;
50..65: PickUpMouse;
90..105: RandomRClick;
115..120: RandomMovement;
160..180: ExamineInv;
230..250:
begin
HoverSkill('random', false);
sleepandmovemouse(276 + Random(100));
PickUpMouse;
ChooseOption('Cancel');
SetAngle(SRL_ANGLE_HIGH);
end;
300..320: BoredHuman;
350..390: PickUpMouse;
420..450: RandomRClick;
280..299: RandomMovement;
460..480: SleepAndMoveMouse(3000 + Random(500));
end;
end;
////////////////////////////////////////////
///////// Colouring Functions /////////
///////// Made by OkOkOkOk /////////
///////// Made with AutoColorAid /////////
////////////////////////////////////////////
function GiantColor1: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.05, 0.40);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 4414586, MSX1, MSY1, MSX2, MSY2, 24);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 1.76) and (X <= 34.03) and (Y >= 1.65) and (Y <= 34.69) and (Z >= 0.92) and (Z <= 28.21) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function GiantColor2: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.02, 0.52);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 5274014, MSX1, MSY1, MSX2, MSY2, 27);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 3.92) and (X <= 53.22) and (Y >= 3.81) and (Y <= 53.76) and (Z >= 1.88) and (Z <= 39.48) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function BoneColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 0.10);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 11974591, MSX1, MSY1, MSX2, MSY2, 19);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 24.39) and (X <= 78.12) and (Y >= 24.53) and (Y <= 81.84) and (Z >= 25.26) and (Z <= 88.77) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
////////////////////////////////////////////
/////////// FoodOption Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure SetDTM(const FoodType : String);
begin
Case FoodType of
'tuna' : begin
FoodDTM := DTMFromString('m6wAAAHic42ZgYDgDxIeB+BAQnwDi80B8BY hvAPE1IL4AVQOSmwvE84B4ERAvBeIlUP5sIJ4OxNOgNIjfUZDN MKG8mGFBSz3DjNpKhkmVJUBRRobWvCyG7IgwhryocIb0kCCGso RYBn6gDLGYkQSMBABfpB2r');
end;
'salmon' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYLgAxGegGMR+AcQvgfgZED 8Bsf1lGe57SzEstxBhWGouwsAFFEPGjGgYBACw9wuA');
end;
'lobster' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYKhnYmCoBuI6IG4CYm1GBg YtIFYHYg0g3p8qzrAoTJBhS7wIw6MKKQYuoB5kzIiGQQAAqDEH ug==');
end;
'swordfish' : begin
FoodDTM := DTMFromString('mWAAAAHicY2FgYFjOxMCwGIhXA/EyIFZnhGBVIFYG4gVFKxg6EycwtMf3MSS7pTNwAfUgY0Y0DAIA/vEJJg==');
end;
end;
end;
procedure FreeFoodDTM;
begin
FreeDTM(FoodDTM);
end;
////////////////////////////////////////////
/////////// Proggy Report ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure ProgressReport;
begin
ClearDebug;
TimeDone := (GetTimeRunning/1000);
TimeDoneMin := (TimeDone/60);
CurrentXPHP := GetXP('hitpoints');
CurrentXPATT := GetXP('attack');
CurrentXPSTR := GetXP('strength');
CurrentXPDEF := GetXP('defence');
CurrentXPPRAY := GetXP('prayer');
OriginalXPHP := GetXP('hitpoints');
OriginalXPATT := GetXP('attack');
OriginalXPSTR := GetXP('strength');
OriginalXPDEF := GetXP('defence');
OriginalXPPRAY := GetXP('prayer');
XPGainHP := (CurrentXPHP - OriginalXPHP);
XPGainATT := (CurrentXPATT - OriginalXPATT);
XPGainSTR := (CurrentXPSTR - OriginalXPSTR);
XPGainDEF := (CurrentXPDEF - OriginalXPDEF);
XPGainPRAY := (CurrentXPPRAY - OriginalXPPRAY);
XPGainHPPH :=(3600*(XPGainHP))/((TimeDone));
XPGainATTPH :=(3600*(XPGainATT))/((TimeDone));
XPGainSTRPH :=(3600*(XPGainSTR))/((TimeDone));
XPGainDEFPH :=(3600*(XPGainDEF))/((TimeDone));
XPGainPRAYPH :=(3600*(XPGainPRAY))/((TimeDone));
begin
Writeln('***************************************** ************************************************** ************************************************** *****');
Writeln('******************** OkOkOkOk Hill Giant Killer - Edgeville Dungeon ************************************************** ****************************');
Writeln('***************************************** ************************************************** ************************************************** *****');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('-------------------- Proggy for the player: ' + Players[0].Nick + '-------------------------------------------------------------------------------');
Writeln('-------------------- Time running: ' + IntToStr(GetTimeRunning/60000) + 'Minutes -----------------------------------------------------------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainHP) + ' Hitpoints xp / Thats ' + IntToStr(XPGainHPPH) + ' Hitpoints xp per hour ----------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainATT) + ' Attack xp / Thats ' + IntToStr(XPGainATTPH) + ' Attack xp per hour --------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainSTR) + ' Strength xp / Thats ' + IntToStr(XPGainSTRPH) + ' Strength xp per hour ----------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainDEF) + ' Defence xp / Thats ' + IntToStr(XPGainDEFPH) + ' Defence xp per hour ------------');
Writeln('-------------------- We have gained: ' + IntToStr(XPGainPRAY) + ' HP xp / Thats ' + IntToStr(XPGainPRAYPH) + ' HP xp per hour --------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
Writeln('--------------------------------------------------------------------------------------------------------------------------------------------------');
end;
end;
////////////////////////////////////////////
/////////// Looting Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure Looting;
var x,y,BoneCount,t,Timeout: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
BoneCount:= InvCount + 1
MarkTime(t);
Timeout := RandomRange(2000, 3000);
repeat
begin
FindNormalRandoms;
If FindObjCustom(x,y,['ake'],[BoneColor],5) then
begin
FindNormalRandoms;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + Random(50));
FindNormalRandoms;
if ChooseOptionMulti(['bone','law']) then
begin
FindNormalRandoms;
Wait(1450 + Random(50));
end
else
Wait(1000 + random(200));
FindNormalRandoms;
Wait(1000);
FindNormalRandoms;
end;
end;
until (InvCount = BoneCount) or (TimeFromMark(t) > TimeOut)
end;
////////////////////////////////////////////
/////////// Fighting Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
Function CombatCheck: Boolean;
var
PBox: TBox;
begin
PBox := IntToBox(245, 130, 285, 195);
Result := (AveragePixelShift(PBox, 250, 500) > 250);
end;
{************************************************* ******************************
Function FindNPC
By: Nemesis3X
Description: Finds a NPC in a mnore effective way than FindObjCustom etc.
************************************************** *****************************}
Function FightingGiants: Boolean;
Var
X,Y: Integer;
TPAA: T2DPointArray; // The Variables of the Functions
TPA: TPointArray;
CTS, I, Retry,Count: Integer;
Begin
repeat
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, GiantColor1, MSX1, MSY1, MSX2, MSY2, 3); // Enter the Color and Tolerance Here at the Right place.
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 25,15); //Put the Width and Heigh here
SortATPASize(TPAA, True);
For I := 0 To High(TPAA) Do
If GetArraylength(TPAA[i]) > 2 Then // Set How Much Points you need for your function to take Action
Begin
repeat
inc(Retry);
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
if (IsUpTextMultiCustom(['ill', 'iant'])) then // Enter The name of Your NPC or Monster
Begin
Result := True;
GetMousePos(X, Y);
mouse(x,y,3,3,false);
wait(100 + random(200));
ChooseOption('ttack');
Count:=0;
wait(300 + random(300));
Break;
End;
until (Retry = 2);
Break;
end;
Break;
until (CombatCheck = True);
end;
{************************************************* ******************************
Function FindNPC
By: Nemesis3X
Description: Finds a NPC in a mnore effective way than FindObjCustom etc.
************************************************** *****************************}
Function FightingGiants2: Boolean;
Var
X,Y: Integer;
TPAA: T2DPointArray; // The Variables of the Functions
TPA: TPointArray;
CTS, I, Retry,Count: Integer;
Begin
repeat
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, GiantColor2, MSX1, MSY1, MSX2, MSY2, 3); // Enter the Color and Tolerance Here at the Right place.
ColorToleranceSpeed(CTS);
TPAA := TPAToATPAEx(TPA, 25,15); //Put the Width and Heigh here
SortATPASize(TPAA, True);
For I := 0 To High(TPAA) Do
If GetArraylength(TPAA[i]) > 2 Then // Set How Much Points you need for your function to take Action
Begin
repeat
inc(Retry);
MiddleTPAEx(TPAA[i], X, Y);
MMouse(X, Y, 3, 3);
if (IsUpTextMultiCustom(['ill', 'iant'])) then // Enter The name of Your NPC or Monster
Begin
Result := True;
GetMousePos(X, Y);
mouse(x,y,3,3,false);
wait(100 + random(200));
ChooseOption('ttack');
Count:=0;
wait(300 + random(300));
Break;
End;
until (Retry = 2);
Break;
end;
Break;
until (CombatCheck = True);
end;
////////////////////////////////////////////
/////////// Teleport Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
Procedure OpenSpellBook;
var x,y,SpellBookDTM: Integer;
begin
SpellBookDTM := DTMFromString('m1gAAAHic42JgYHjNxMDwA4h/AfE3Jgj/CRA/hOLnQPwZiC8D1Z4D4ttA/BCIHwPxAyC+DsSngfgIEB8D4lmlJgxeLtYMjjamDDqaKgyGepo MznYWDKGO+gxdNZkMdYWJDME+TgzEAkYiMQIAAMj1GpA=');
If FindDTM(SpellBookDTM,x,y,0,0,765,505) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(150 + random(50));
end;
FreeDTM(SpellBookDTM);
end;
procedure TeleportToVarrockClick;
var x,y,TeleportDTM: Integer;
begin
TeleportDTM := DTMFromString('mrAAAAHic42BgYIhgYmCIheJoIA4H4kAoBv EtGRkYzIHYGojtgdgByjYGYkMgZmBgZBAR1GeoqvoJpmEYJA7B +AEjAQwDAMSfB/M=');
If FindDTM(TeleportDTM,x,y,MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(x,y,0,0);
Wait(250 + Random(50));
Mouse(x,y,0,0,true);
Wait(350 + Random(50));
Wait(2000 + random(500));
FindNormalRandoms;
end;
FreeDTM(TeleportDTM);
end;
Procedure TeleportFailCheck;
var x,y,i: Integer;
CheckDTM: Array [0..2] of Integer;
begin
CheckDTM[0] := DTMFromString('mlwAAAHicY2dgYNjFxMBwCIj3A/FmIF4FxJuAeC8QVwDlS4G4AYhbgbgeyi8C4tjoYJwYH2DEg6EA AFQ4D8k=');
CheckDTM[1] := DTMFromString('mwQAAAHic42RgYLjMxMBwDYivAvElIL4AxZ eg4jeAuA6orgGIm6EYxK5BwiB5JVcGBttgNgY3N0UwBgEQDRLX jmCAixECjERgOAAAS9IQpg==');
CheckDTM[2] := DTMFromString('m6wAAAHic42ZgYFjKxMCwHIhXIeElQLwAiO cA8WwgngcVywCqz2KA0ElAHAfEsUCcAMTJQJwGlQfhz9/eMMRGBxPEjIyMDKQARhIwEgAAy6sXww==');
For i := 0 to 2 do
If not(FindDTM(CheckDTM[i],x,y,607,81,755,193)) then
begin
OpenSpellBook;
TeleportToVarrockClick;
end
else
begin
Break;
end;
FreeDTM(CheckDTM[0]);
FreeDTM(CheckDTM[1]);
FreeDTM(CheckDTM[2]);
end;
Procedure TeleportToVarrock;
begin
OpenSpellBook;
TeleportToVarrockClick;
end;
Procedure EmergencyTeleport;
begin
If GetSkillInfo('hitpoints', true) < HpToTeleport then
begin
OpenSpellBook;
TeleportToVarrockClick;
end;
end;
////////////////////////////////////////////////////////
/////////// Health Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
procedure OutOfFoodDetect;
var x,y: Integer;
begin
SetDTM(FoodType);
Gametab(Tab_Inv);
If FindDTM(FoodDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
Writeln('Food left');
end
else
begin
EmergencyTeleport;
end;
end;
procedure HealthRestore;
var x,y: Integer;
begin
SetDTM(FoodType);
If GetSkillInfo('hitpoints', true) < HpToEat then
Gametab(Tab_Inv);
If FindDTM(FoodDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(350 + random(50));
end
else
begin
OutOfFoodDetect;
end;
end;
////////////////////////////////////////////////////////
/////////// Bury Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Procedure BuryBones;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('m1gAAAHic42JgYNjExMCwC4h3APEKIF4OxK uBeA0TRG4HVF6fkYHBDIgtgdgEiI2AWBuINYFYB4oNgHj/9m0MN69cZjBQUGCQkZRkyIiLY4gPC2M4uncvw5aVKxmmdXQwxI aGMBALGInECAAAw+kXiw==');
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Wait(100 + random(50));
Mouse(x,y,0,0,true);
Wait(300 + random(50));
Wait(1800 + random(50));
end
else
begin
Writeln('Nothing to bury');
end;
FreeDTM(BoneDTM);
end;
////////////////////////////////////////////////////////
/////////// Banking Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Function PinCheck: Boolean;
var x,y,ChestDTM, CoinsDTM: Integer;
begin
ChestDTM := DTMFromString('m1gAAAHic42JgYNjMyMAwA4hXA/FOID4AxTugYnOBeDYQ7weq3Q7EW6D4EBCfBuILQHwRiC8B8UEg zkvnY9CTF2FIcDBmcNNTYWBhYmSQE+VgmNojARZ3tGZniA3nYm AFqiUGMxKJEQAAQwgUhg==');
CoinsDTM := DTMFromString('m1gAAAHic42JgYLjJyMBwAogvAvEdIL4PxG +A+BEQXwPiI0C8DYjfAdU+A+L7QHwHyn4FxN+BmAUozwDEP4FU agQ3Q1EKD5gGYUVZfjAfRi+dJMEQ6s3LwApUSwxmJBIjAAASYR eF');
If FindDTM(ChestDTM,x,y,MSX1,MSY1,MSX2,MSY2) or
FindDTM(CoinsDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
Result := True;
end;
end;
Procedure WithdrawFoodWithLooting;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 5') then
begin
CloseBank;
end;
end;
end;
Procedure WithdrawFoodWithBury;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 10') then
begin
Wait(500 + random(50));
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw 5') then
begin
Wait(300 + random(50));
CloseBank;
end;
end;
end;
end;
Procedure WithdrawFoodNoLootingNoBury;
var x,y: Integer;
begin
SetDTM(FoodType);
If FindDTM(FoodDTM,x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('raw All') then
begin
CloseBank;
end;
end;
end;
procedure OpenBankBooth;
var x,y,r,RopeDTM: Integer;
BankDTM: Array [0..2] of Integer;
begin
If FindSymbol(x,y,'bank') then
begin
MakeCompass('E');
BankDTM[0] := DTMFromString('mggAAAHicY2NgYGBnZGD4DaT/AzEbkM3LCBGLB/ID0XAqEMcHajP0thUxdDXnM7TUZjE0VKYxRPvIM3AB5bBhRhwY AgC6owvc');
BankDTM[1] := DTMFromString('mlwAAAHicY2dgYNgHxFuAeD8QnwDiM0C8E4 gPAnE8EEcCcTgUJwJxGhBnAnF6tCVDfUUaQ0pCGEN6UjhDUog2 Q5SvFkO0jzwDF1AeF2bEg6EAABjcDzQ=');
BankDTM[2] := DTMFromString('mggAAAHicY2NgYFgPxKuBeCMQbwfi3UC8D4 iNgFgTiDWgtC4QGwNxfIAiQ7S3CENnUx5DcV4cQ2GCBkNSiDYD F1AOG2bEgSEAAPFCC6w=');
RopeDTM := DTMFromString('mWAAAAHicY2FgYFjByMCwGIjXAPF8IF4PFN sAxSC2d7Ejg3WmPhg7pVsycAHFkDEjGgYBABtiCRA=');
For r := 0 to 2 do
If FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('ank') then
Wait(5250 + random(50));
end
else
If not(FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(2000 + random(200));
If FindDTM(BankDTM[r],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('ank') then
Wait(2250 + random(50));
end;
end;
FreeDTM(BankDTM[0]);
FreeDTM(BankDTM[1]);
FreeDTM(BankDTM[2]);
FreeDTM(RopeDTM);
end;
end;
Procedure OpenBankCheck;
begin
Wait(3000);
If not(BankScreen) then
begin
OpenBankBooth;
Wait(150 + random (50));
end;
end;
procedure DepositBones;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('mwQAAAHic42RgYMhlYmBIB+ISIC6F4kIgTg HiJCBOBeK1jAwMy4B4JRCvA+ItQLwdiDdC+SDx/du2MhzcsQNoIiNDbGgIw80rlxk42NgYtDU0GPZs3sRQkJbKwAq UJYQZicBwAACp7BYT');
If (PinCheck = True) then
InPin(Players[0].Pin);
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
CloseBank;
If InvFull then
begin
OpenBankBooth;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
CloseBank;
end;
end;
FreeDTM(BoneDTM);
end;
procedure DepositBonesWithFood;
var x,y,BoneDTM: Integer;
begin
BoneDTM := DTMFromString('mwQAAAHic42RgYMhlYmBIB+ISIC6F4kIgTg HiJCBOBeK1jAwMy4B4JRCvA+ItQLwdiDdC+SDx/du2MhzcsQNoIiNDbGgIw80rlxk42NgYtDU0GPZs3sRQkJbKwAq UJYQZicBwAACp7BYT');
If (PinCheck = True) then
InPin(Players[0].Pin);
If FindDTM(BoneDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
If InvFull then
begin
OpenBankBooth;
MMouse(x,y,0,0);
Mouse(x,y,0,0,false);
Wait(450 + random(50));
If ChooseOption('re All') then
Wait(150 + random (50));
end;
end;
FreeDTM(BoneDTM);
end;
Procedure InsideBankCheckWithFood;
begin
If InvFull then
begin
DepositBonesWithFood;
Wait(150 + random(50));
end;
end;
Procedure InsideBankCheck;
begin
If InvFull then
begin
DepositBones;
Wait(150 + random(50));
end;
end;
Procedure InsideBankCheckWithoutFood;
begin
If InvEmpty then
begin
WithdrawFoodNoLootingNoBury;
Wait(150 + random(50));
end;
end;
////////////////////////////////////////////
/////////// Random Procedure ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure GetBackToMonsters;
var x,y: Integer;
begin
begin
If FindColorSpiralTolerance(x,y,195836,MMX1,MMY1,MMX2 ,MMY2,5) then
begin
MMouse(x,y,0,0);
Mouse(x,y,0,0,true);
Wait(4000 + random(100));
end;
end;
end;
///////////////////////////////////////////////////////
/////////// Combat Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
///////////////////////////////////////////////////////
procedure FightWithoutLootingOrBury;
Var Count: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
end;
ProgressReport;
until (InvCount < 7);
end;
procedure FightOnlyLooting;
Var Count: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
Count:=0;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
Looting;
end;
ProgressReport;
until (InvFull);
end;
procedure FightWithBury;
Var Count, BoneCount,x,y: Integer;
begin
FindNormalRandoms;
SetAngle(SRL_ANGLE_HIGH);
AntiBan;
FindNormalRandoms;
BoneCount := InvCount + 1;
repeat
begin
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
FindNormalRandoms;
repeat
Inc(Count);
If (FightingGiants) or
(FightingGiants2) then
FindNormalRandoms;
If (CombatCheck = True) then
begin
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
If GetSkillInfo('hitpoints', true) < HpToEat then
HealthRestore;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Wait(300 + Random(400));
FindNormalRandoms;
Break;
Count:=0;
end;
If (Count > 3) then
begin
FindNormalRandoms;
GetBackToMonsters;
Count:=0;
Wait(2000 + random(100));
end;
FindNormalRandoms;
until (CombatCheck = False);
Looting;
BuryBones;
end;
ProgressReport;
until (InvCount < 7);
end;
////////////////////////////////////////////
/////////// SPS&stuff ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
{************************************************* ******************************
Function GenerateWallDTM(WallType, WallLength: Integer): Integer;
By: Flight
Description: Creates a DTM of a perfectly straight wall.
-WallType : 1 for vertical, 2 for horizontal
-WallLength: Length of the DTM to be generated
************************************************** *****************************}
function GenerateWallDTM(WallType, WallLength: Integer): Integer;
var
i: Integer;
TempTDTM: TDTM;
mPnt: TDTMPointDef;
sPnts: array of TDTMPointDef;
begin
SetArrayLength(sPnts, (WallLength-1));
mPnt.x := 0;
mPnt.y := 0;
mPnt.AreaSize := 0;
mPnt.AreaShape := 0;
mPnt.Color := 16119287;
mPnt.Tolerance := 40;
for i:=0 to High(sPnts) do
begin
case WallType of
1:
begin
sPnts[i].x := 0;
sPnts[i].y := i+1;
end;
2:
begin
sPnts[i].x := i+1;
sPnts[i].y := 0;
end;
end;
sPnts[i].AreaSize := 0;
sPnts[i].AreaShape := 0;
sPnts[i].Color := 16119287;
sPnts[i].Tolerance := 40;
end;
TempTDTM.MainPoint := mPnt;
TempTDTM.SubPoints := sPnts;
Result := AddDTM(TempTDTM);
end;
{************************************************* ******************************
Function GetLongestWallLength(WallType: Integer): Integer;
By: Flight
Description: Determines the longest wall on your MM at any compass angle.
-WallType: 1 for vertical walls, 2 for horizontal walls
************************************************** *****************************}
function GetLongestWallLength(WallType: Integer): Integer;
var
B: TBox;
TPA: TPointArray;
ATPA: T2DPointArray;
begin
ColorToleranceSpeed(1);
FindColorsSpiralTolerance(MMCX, MMCY, TPA, 16119287, MMX1, MMY1, MMX2, MMY2, 40);
if (Length(TPA)<1) then
Exit;
RAaSTPA(TPA, 1);
if (WallType = 1) then
SplitTPAExWrap(TPA, 2, 3, ATPA)
else
SplitTPAExWrap(TPA, 3, 2, ATPA);
SortATPASize(ATPA, True);
B := GetTPABounds(ATPA[0]);
if (WallType = 1) then
Result := (B.Y2-B.Y1)
else
Result := (B.X2-B.X1);
end;
{************************************************* ******************************
Function ForceMapNorth: Boolean;
By: Flight
Description: Using auto-generated wall DTMs, this function will attempt to
rotate the compass to near-perfect north. Should it fail it will revert
back to default north.
************************************************** *****************************}
Function ForceMapNorth: Boolean;
var
Left: Boolean;
StartAngle: Extended;
X,Y,DTM_VertWall,
DTM_HorWall,T,F,L1,L2: Integer;
label
Start,FuncEnd;
begin
Result := False;
L1 := GetLongestWallLength(1);
L2 := GetLongestWallLength(2);
if (L1 > 50) then
L1 := 50;
if (L2 > 50) then
L2 := 50;
DTM_VertWall := GenerateWallDTM(1, Round(L1*0.85)); //Create a DTM 85% of the length of the longest vertical wall
DTM_HorWall := GenerateWallDTM(2, Round(L2*0.85)); //Create a DTM 85% of the length of the longest horizontal wall
if (FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2) or
FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2)) then
begin
Result := True;
GoTo FuncEnd;
end;
StartAngle := (rs_GetCompassAngleDegrees);
Left := (Round((360 - StartAngle)) mod 360 <= Round((StartAngle + 360)) mod 360);
Start:
if (F > 0) then
MakeCompass('N');
MarkTime(T);
Repeat
TypeByte((Ord(not Left) * 2) + 37); //No holding down, actually press the arrow key
if (FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2) or
FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2)) then
break;
Until(TimeFromMark(T) >= 1000)
FuncEnd:
if ((not FindDTM(DTM_VertWall, X, Y, MMx1, MMy1, MMx2, MMy2)) and
(not FindDTM(DTM_HorWall, X, Y, MMx1, MMy1, MMx2, MMy2))) then
begin
Inc(F);
StartAngle := (rs_GetCompassAngleDegrees);
Left := (Round((360 - StartAngle)) mod 360 <= Round((StartAngle + 360)) mod 360);
if (F < 2) then
GoTo Start;
end else if ((X > 1) and (Y > 1)) then
Result := True;
if not Result then
MakeCompass('N');
FreeDTM(DTM_VertWall);
FreeDTM(DTM_HorWall);
end;
procedure SPSToBank;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.1
ForceMapNorth;
SPS_Setup(runescape_surface, ['vwbankpath']);
Path_ToBank := [Point(286, 250), Point(278, 251), Point(271, 246), Point(264, 240), Point(257, 235), Point(248, 232), Point(238, 231), Point(230, 231), Point(219, 231), Point(210, 231), Point(200, 231), Point(188, 230), Point(182, 225)]
SPS_WalkPath(Path_ToBank);
SymbolAccuracy := 0.5;
If FindSymbol(x,y,'bank') then
begin
Mouse(x,y,0,0,true);
FFlag(0);
Wait(1000 + random(100));
end;
SymbolAccuracy := 0.8;
end;
procedure SPSToHut1;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
ForceMapNorth;
SymbolAccuracy := 0.5;
If FindSymbol(x,y,'anvil') then
begin
Mouse(x,y,0,0,true);
FFlag(0);
Wait(1000 + random(100));
end;
SymbolAccuracy := 0.8;
SPS_Setup(runescape_surface, ['HutPathOne']);
Path_ToHut1 := [Point(275, 234), Point(267, 222), Point(247, 221), Point(227, 224), Point(212, 225), Point(199, 224)];
SPS_WalkPath(Path_ToHut1);
end;
procedure SPSSafetyPoint;
var SafetyPoint: TPoint;
begin
SPS_Tolerance := 350.0
SPS_MatchesPercent := 0.5
ForceMapNorth;
SPS_Setup(runescape_surface, ['SafetyPointVar']);
SafetyPoint := (Point(232, 252));
SPS_WalkToPos(SafetyPoint);
end;
procedure SPSToHut2;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.5
ForceMapNorth;
SPS_Setup(runescape_surface, ['HutPathTwo']);
Path_ToHut2 := [Point(381, 255), Point(364, 258), Point(349, 267), Point(339, 285), Point(323, 296), Point(303, 305), Point(285, 299), Point(283, 282), Point(272, 269), Point(267, 252), Point(260, 236), Point(269, 223), Point(246, 209), Point(229, 203), Point(212, 200), Point(195, 195), Point(179, 190), Point(166, 186), Point(150, 174)];
SPS_WalkPath(Path_ToHut2);
end;
procedure SPSToGiants1;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
ForceMapNorth;
SPS_Setup(runescape_surface, ['PathToGiantsOne']);
Path_ToGiants1 := [Point(240, 233), Point(237, 242), Point(235, 253), Point(235, 264), Point(235, 275), Point(234, 283), Point(231, 290), Point(230, 298), Point(229, 309)]
SPS_WalkPath(Path_ToGiants1);
end;
procedure SPSToGiants2;
begin
SPS_Tolerance := 450.0
SPS_MatchesPercent := 0.3
SPS_Setup(runescape_surface, ['PathToGiantsTwo']);
Path_ToGiants2 := [Point(243, 234), Point(243, 243), Point(241, 254), Point(234, 265), Point(234, 272), Point(229, 284)]
SPS_WalkPath(Path_ToGiants2);
end;
////////////////////////////////////////////////////////
/////////// Walking Procedures & Functions ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////////////////
Procedure OpenHutDoor;
var x,y,t: Integer;
HutDoorDTM: Array [0..1] of Integer;
begin
HutDoorDTM[0] := DTMFromString('mbQAAAHicY2VgYJjLyMAwkxFCLwLieUC8gg GC1wDxKiBeCMSTC1UZ6pMUGJpTFcDsilg5Bi6gODpmxILBAABe 1Avq');
HutDoorDTM[1] := DTMFromString('mrAAAAHic42BgYFjAyMAwG4hnAPE0IJ4PxE uAeCkQLwTiFUA184B4KRCvBeINQLwaiBdCxfOC+BhyQ6QZ+vNV GdrSlRg6M5UYmlMVGKaVqDKkenMycAHV4MOMBDAMAABPkxJt') ;
For t := 0 to 1 do
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end
else
If not(FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
SPSSafetyPoint;
Wait(3000 + Random(100));
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end
else
If not(FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2)) then
begin
SPSSafetyPoint;
Wait(3000 + Random(100));
If FindDTM(HutDoorDTM[t],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(200 + random(50));
Mouse(x,y,0,0,false);
Wait(150 + random(50));
If ChooseOption('Open') then
Wait(2200 + random(50));
end;
end;
end;
FreeDTM(HutDoorDTM[0]);
FreeDTM(HutDoorDTM[1]);
end;
Procedure GoDownLadder;
var x,y,g: Integer;
LadderDTM: Array [0..2] of Integer;
begin
LadderDTM[0] := DTMFromString('mlwAAAHicY2dgYDBnZGBwBmIXKNaAYm0grg TKFzNA6CYgLgPiOiBuA+IMX1UGUSEhrJgLKI8LM+LBUAAA/PoHag==');
LadderDTM[1] := DTMFromString('mggAAAHicY2NgYDBjZGDQhmITILYHYlcgbm GA4BogroRiED8vVI5BVEgIjHMC5eFsLqAcNsyIA0MAAGsMBy4= ');
LadderDTM[2] := DTMFromString('mlwAAAHicY2dgYDBgZGAwAWI9INaCYkMgNg PiOqB8CxC3AXEDEFcAcQkQVwKxqJAQQ46/OphGxiAxLqA8LsyIB0MBABSjB/c=');
For g := 0 to 2 do
If FindDTM(LadderDTM[g],x,y,MSX1,MSY1,MSX2,MSY2) then
begin
MMouse(x,y,0,0);
Wait(150 + random(50));
Mouse(x,y,0,0,false);
Wait(250 + random(50));
If ChooseOption('mb-do') then
Wait(2200 + random(50));
end;
end;
////////////////////////////////////////////
/////////// Option Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure FightVar;
begin
Case FightVari of
'NoLoot' : begin
FightWithoutLootingOrBury;
end;
'LootAndBank' : begin
FightOnlyLooting;
end;
'Bury' : begin
FightWithBury;
end;
end;
end;
procedure WithdrawBank;
begin
Case BankVari of
'BankNoLoot' : begin
WithdrawFoodNoLootingNoBury;
end;
'BankLootAndBank' : begin
WithdrawFoodWithLooting;
end;
'BankBury' : begin
WithdrawFoodWithBury;
end;
end;
end;
procedure BankCheck;
begin
Case CheckVari of
'CheckNoLoot' : begin
InsideBankCheckWithFood;
end;
'CheckLootAndBank' : begin
InsideBankCheckWithoutFood;
end;
'CheckBury' : begin
InsideBankCheck;
end;
end;
end;
////////////////////////////////////////////
/////////// Final Procedures ///////////
/////////// Made by OkOkOkOk ///////////
////////////////////////////////////////////
procedure Banking;
begin
OpenBankBooth;
OpenBankCheck;
BankCheck;
WithdrawBank;
HealthRestore;
end;
Procedure WalkingAndBanking;
begin
SPSToBank;
Banking;
SPSToHut1;
SPSToHut2;
OpenHutDoor;
GoDownLadder;
SPSToGiants1;
SPSToGiants2;
end;
procedure OneRun;
begin
repeat
AntiBan;
FindNormalRandoms;
FightVar;
TeleportToVarrock;
WalkingAndBanking;
until (not(LoggedIn));
end;
begin
DeclarePlayers;
SetupSRL;
LoginPlayer;
SPS_Setup(RUNESCAPE_SURFACE, ['6_8','5_8']);
SPS_AnyAngle := False;
MyLoc := sps_getMyPos;
writeln('SPS returns ' + inttostr(myloc.x) + ',' + inttostr(myloc.y));
SRL_CombatRandoms := False;
ClearDebug;
begin
repeat
OneRun;
until(false);
end;
end.
Enjoy OkOkOkOk
Donations for OSR are always welcome. These will be used to create more scripts