bolshak25
2011-08-02 10:10:59
iamadam said he was no longer updating his script, and he said we can repost it and whatnot, so i want to convert it to ref2.
i get it to compile, but walking doesnt work and i was wondering if anyone could help me fix it.
i get it to compile, but walking doesnt work and i was wondering if anyone could help me fix it.
{$DEFINE SMART}
{$i SRL\SRL.scar}
{$i Reflection2\Reflection.simba}
{$i SRL\SRL\misc\paintsmart.scar}
{$i SRL\SRL\Misc\Stats.simba}
{********************************************************
Version 1.4.
Instructions:
1. High combat level reccomended (60+) for Zombies
1a. Now kills goblins on floor 1 as well (set this below)
2. Have food in your bank (near the top preferably)
3. Start anywhere near edgeville or barbarian outpost (or at goblins or zombies in SHOS)
4. STRONGHOLD OF SECURITY MUST HAVE BEEN COMPLETED!
5. Don't forget to fill in your player details, and have screen on fixed size
etc.
NEW: (1.1)
Crosshair painted (for kicks)
Antiban now included
Picks up steel arrows and uncuts. (Change this at line 88)
Drops junk from randoms & accidental pickups
Breaks are taken.
1.2
Added Goblin killing
Fixed random detection (hopefully)
Fixed ogging out issue
Added levels gained to progress report
Cleaned up script
Reflection randoms now default
Added SRL stats
1.3
Potion support
Fixed some food withdrawing issues
1.4
Withdraw Amount
Item Pickup Optional
Proggy Changed to show current levels not levels gained
That is all. Enjoy!
*********************************************************}
const
//Setup is here --------------------------------------------------------
RunTime = 9000;//Run time (in minutes).
ReflectionRandoms = true; // use reflection antirandoms??
BreakEvery = 300; //How often to break? (minutes)
BreakTime = 45; //How long to break for (on average, in minutes)
PaintCrosshair = False; //Paint on the screen??
FightLocation = 0; //0 = zombies, 1 = goblins
SRLStats_Username = ''; // Your SRL Stats Username
SRLStats_Password = ''; // Your SRL Stats Password
//Food...
HowManyToWithdraw = 28; //How many you want to withdraw
//Potions...
PotionName = ''; //Name of the potion you want to use.
PotionsPerRun = 5; //How many to bring on each run?
EffectivePotionTime = 300; //How long before sipping some more potion? !!!!!!!IN SECONDS!!!!!!
//Item Pickup
Items = False; //True or False
//Scroll down for player set up
//Leave these.
DO_BANKING = 0;
WALK_TO_STRONGHOLD = 1;
FIGHT = 2;
WALK_TO_BANK = 3;
LOCATION_ZOMBIES = 0;
LOCATION_GOBLINS = 1;
var
//Areas
LevelOne, LevelTwo, TrainingArea, TreasureRoom2, DoorSet1,
MiddleRoom, DoorSet2, Corridor, GoblinTrainingArea, GoblinDoorSet1, TreasureRoom1, stuckDoorSet: TBox;
//Graphics
zombieScreenPoint : TPoint;
crosshairHandle, zombieHandle: Integer;
crosshair, zombiePic : TMufasaBitmap;
//Timers
sessionStartTime, sessionLength : Integer;
breakTimeMS, breakEveryMS : Integer;
startTime, lastFightTime : Integer;
potionTimer, timeTillPotion: Integer;
//Counters & Progress
targetName : String;
currentStatus, lastStatus : String;
randomEvents : Integer;
//Misc
foods : TVariantArray;
lastInteractedTile : TTile;
itemsToPickUp : TIntegerArray;
pickup : TStringArray; storageString : String;
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
CurrentPlayer := 0;
NumberOfPlayers(HowManyPlayers);
with Players[0] do
begin
Name := '';
Pass := '';
Nick := '';
Pin := ''; // Bank Pin
Member := False;
Active := True;
end;
lastStatus := '';
currentStatus := 'Setting up...';
end;
procedure setupAreas; forward;
procedure onRandom; forward;
procedure setup;
var tempCrosshair, tempZombiePic : TMufasaBitmap;
begin
if(FightLocation = LOCATION_ZOMBIES) then
targetName := 'Zombie'
else
targetName := 'Goblin';
if(Items = True) then
begin
pickup := ['Uncut diamond', 'Uncut ruby', 'Uncut emerald', 'Uncut sapphire', 'Steel arrow', 'Uncut dragonstone']; //Names in same order as IDs
itemsToPickUp := [1617, 1619, 1621, 1623, 886, 1631]; //IDs in same order as Names
//Steel arrow = 886, diamond = 1617, ruby = 1619, emerald = 1621, sapphire = 1623).
end else
pickup := [];
itemsToPickUp := [];
foods := ['Lobster', 'Tuna', 'Trout', 'Salmon', 'Swordfish', 'Shark', 'Cake', 'Pizza', 'Monkfish'];
SMART_SERVER := 1;
SMART_SIGNED := true;
SMART_MEMBERS := false;
setupSRL;
R_UpdateHooks;
declarePlayers;
//STATS
if (SRLStats_Username = '') then
SetupSRLStats(100, 'Anonymous', 'anon1337')
else
SetupSRLStats(100, SRLStats_Username, SRLStats_Password);
startTime := getSystemTime;
setupAreas;
breakTimeMS := BreakTime * 1000 * 60;
breakEveryMS := BreakEvery * 1000 * 60;
SRL_Procs[srl_OnFindRandom] := @OnRandom;
crosshairHandle := BitmapFromString(34, 34, 'meJy1l81LlFEUhx9nnILRMitNDV' +
'tkmG1VMDWKWmSUgpoLI1y1iiCCjCjITZtwUSsxaFV/Qos2uWwdReB' +
'HH5uIWpQYBWFJ2OV5eWXSxt4ZncuP4Z73fpxzz/mdc+9A8paCKhiE' +
'AdiuWIqWhp1wQexSLEUrh1oYhat2ykumpQFui4YSaCnTP5XQDJOiW' +
'THt0KbsnzHWjdBq6B+LQcVGhzIb05XS4CY4of2zsAjLYlFx0qEmpx' +
'VHueCNamiDCVhy53mYhi9iWnHZoTCh3cmFsi7lqk545lafYBz6YRi' +
'ei2HFcYeWndYpz5OfqEwPtMUqpqBPt9RBB7wQoVMPBxyaihW1uzBh' +
'jEI09+uHSMURs2MrVKh6TrRbB8LHGidEiiZcmEl2kCpjuqQ3+uIED' +
'N+zHuG96IjNjlK1z8lLLqxKcJy0/JzUtnEdtSVeFc7SDZ9Fl2KZ2O' +
'K0cZdMunwtDVJ+TGtVRgtbZem8VbHe3bL+Bpt74Js4qa+ioawh63f' +
'JrMsr3SodI8qIQKfdzgxmtMCQ6TADI/r8sL/HoReuwS9xRY3duq7d' +
'Oeekd1h4Fg7CXtjjtjtgm1aFCZfgFtyFR3Eov8JreAcfYQF+wO84J' +
'ZdV9N3E+QBv4BW8jDPoCTyAO3ADLsr5nhwtY8VqeZtHy81Yy6k1Hj' +
'u0rseux1pGE3isLsdjq6JflT/6wc9n4Kc4LRmSR39VC7r25WfysZh' +
'jRxVJzOSCsrIrJ1+yG8hK1q0wublf4cfaoioM+atlvUeYk3tdik1/' +
'V8u2QqoleSp/IMN5uTdjZ2BN5a8u/C775y02Y+4s2Mm9xdqKusVWT' +
'rRyI9/XV5t+I0etLE6i6HUxZBSe2tms10WuruilFGrpQ9GyqS+l3J' +
'bR+FDr7tlJyNhCW7mVZEzUlewFm/bmuixqSvYaj7g9Iorm7X9bSkb' +
'1itL9f4kKZqfIFsSuP1ot5Cg=');
zombieHandle := BitmapFromString(97, 105, 'meJzt3HuwVtV5BvD/+lennXQm7' +
'SR2EkcoqSmYxBzUeslFRIQg0SJYARUlcqtBUy4GdDAo5qCCScWEIG' +
'IVFIymeL8EtYkhKtHExBijg9KYysSJZgwRL+kBh/72fmDPzvedQ+A' +
'o5zvOsGfNnnX2t2/rWc/7vO+71tpn+/Z9Wyu3t99++43XX3/11d9t' +
'evHXG5595okfP7b+kXU/+N6Da++96/Y1tyi3rL4hRf2eO9f4yTkv/' +
'GrjH/6wudXv3kPbKy//9sxxo45qO1A5pH/f/gfs99H9P/AP+71f2f' +
'/9f9VcHHeOM4cdfcSUCWO/vnDBg/ff/dJvNoG61U3ZW9ubb755yon' +
'D/u4v/yKwpAQl++ZSnVPHDbxnT/4CpsGq1Q3aK9u8C2ZpJm50r8Ct' +
'jlX7RXMws9Vtepc3EGFRtyGqY4VdbuWGrW7TO92ILbsgv+qEmqo0s' +
'KhuUBGf3S9uddLwwVu2vNbqVnZ/47lGDBmsr7XlS1+crDTgE1gI8k' +
'kjDp06cfCYUYdHhXYTolz7i58/2eqGdnODz+eHHBWzqjSkgTz05Ev' +
'Thn3titOuumr8smvOuvI/TtPk3edSbku6W93W7mzcDRMIPp/4yIea' +
'e1/rzho/aOXK6WtuPf/GG2csXTLlikXjliw5E526gqj5PopHzJkxt' +
'dXN3eONl4FPOJOOrrc61jF/3qnAWX3TjBUr/h1Q9oiknDHuUwGwmT' +
'AoN/SzAxsAdHNcfW/J0ebNvz919Ak6V6cHJXClnghHS69aPOk735k' +
'dZFIQycGZ04crRxx8QDNErnV8znkj3ar+axB7D8kRfMTPsS8vrzk3' +
'rbps4/Nrr7t2Ns3BgaFHD1h29dnwqcBJARcKLWg/Zf5FJw86/OPNt' +
'hYZv/CC0cyz4VePW7VyeaubvlvbH//4R/69wkeL4PPSSz/80fpVq1' +
'fPAguqgEK9GR8lzccTri08aeCSezLDZknHzPeEHG3bti1hYZU7LFs' +
'6Gz4/e2INzfnPa8+JNSkN+OQ4fCBz+aWn4JI9mwoJG2yKkZJ0ZzZA' +
'JNzq/amuHDP4VN36q/954Jlf3o1CwaerEneGPOjB+9vz/vxaVIthV' +
'mgEeQa78PKxdfRywhM/fqzVGOxqE5lEjb25PTFBng3P3mt/39r266' +
'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');
tempCrosshair := GetMufasaBitmap(crosshairHandle);
tempCrosshair.SetTransparentColor(0);
crosshair := TMufasaBitmap.create;
crosshair.SetSize(tempCrossHair.Width, tempCrossHair.Height);
tempCrosshair.FastDrawTransparent(0, 0, crosshair);
tempZombiePic := GetMufasaBitmap(zombieHandle);
tempZombiePic.SetTransparentColor(16777215);
zombiePic := TMufasaBitmap.create;
zombiePic.SetSize(tempZombiePic.Width, tempZombiePic.Height);
tempZombiePic.FastDrawTransparent(0, 0, zombiePic);
tempZombiePic.free;
tempCrosshair.free;
AddOnTerminate('onTerminate');
end;
//Text--------------------------------------------------------------------------
function strContains(str, substr : String) : boolean;
begin
result := ExecRegExpr('.*' + lowercase(str) + '.*', lowercase(substr));
end;
//------------------------------------------------------------------------------
function getCombatXp: Integer;
begin
result := R_GetSkillExp(Skill_Attack) + R_GetSkillExp(Skill_Strength)
+ R_GetSkillExp(Skill_Defence) + R_GetSkillExp(Skill_HP)
+ R_GetSkillExp(Skill_Range);
end;
var committedXpGain, statsTimer : Integer;
procedure progressReport;
var totalRuntime, xpGain, extraXp, atkGain, strGain, defGain, hpGain, rngGain : Integer;
killedString : String;
begin
if(currentStatus = lastStatus) then exit;
totalRuntime := getSystemTime - startTime;
xpGain := getCombatXP - Players[currentPlayer].Integers[1];
extraXp := xpGain - committedXpGain;
committedXpGain := xpGain;
if(FightLocation = LOCATION_ZOMBIES) then
begin
killedString := ' (' + toStr(xpGain div 218) + ' zombies killed)';
end
else
begin
killedString := ' (' + toStr(xpGain div 52) + ' goblins killed)';
end;
atkGain := R_GetSkillLevel(SKILL_ATTACK);
strGain := R_GetSkillLevel(SKILL_STRENGTH);
defGain := R_GetSkillLevel(SKILL_DEFENCE);
hpGain := R_GetSkillLevel(SKILL_HITPOINTS);
rngGain := R_GetSkillLevel(SKILL_RANGE);
lastStatus := currentStatus;
clearDebug;
writeln('-----Iamadam''s Strong-Holder------');
;
writeln('Running for ' + toStr((totalRuntime / 1000 / 60)) + ' minutes (' + currentStatus + ')');
writeln('Exp gained: ' + toStr(xpGain) + killedString);
writeln('Times eaten: ' + toStr(Players[currentPlayer].Integers[0]));
writeln('Times banked: ' + toStr(Players[currentPlayer].Integers[2]));
writeln('Xp/h: ' + toStr((3600 * xpGain) div (totalRuntime div 1000 + 1)));
writeln('Randoms found: ' + toStr(randomEvents));
writeln('Levels - Atk: ' + toStr(atkGain) + ' Str: ' + toStr(strGain) + ' Def: '
+ toStr(defGain) + ' HP: ' + toStr(hpGain) + ' Rng: ' + toStr(rngGain));
stats_IncVariable('Total EXP Gained', extraXp);
if(TimeFromMark(statsTimer) > 1000 * 60 * 5) then
begin
Stats_Commit;
MarkTime(StatsTimer);
writeln('Stats committed');
end;
end;
procedure setupAreas;
begin
LevelOne.X1 := 1856;
LevelOne.X2 := 1915;
LevelOne.Y1 := 5185;
LevelOne.Y2 := 5246;
LevelTwo.X2 := 2050;
LevelTwo.Y2 := 5250;
LevelTwo.X1 := 1984;
LevelTwo.Y1 := 5185;
TrainingArea.X1 := 1984;
TrainingArea.Y1 := 5186;
TrainingArea.X2 := 2000;
TrainingArea.Y2 := 5193;
Corridor.X1 := 2000;
Corridor.Y1 := 5185;
Corridor.X2 := 2005;
Corridor.Y2 := 5191;
TreasureRoom2.X1 := 2009;
TreasureRoom2.Y1 := 5203;
TreasureRoom2.X2 := 2033;
TreasureRoom2.Y2 := 5227;
DoorSet1.X1 := 2006;
DoorSet1.Y1 := 5215;
DoorSet1.X2 := 2008;
DoorSet1.Y2 := 5216;
MiddleRoom.x1 := 2001;
MiddleRoom.y1 := 5195;
MiddleRoom.x2 := 2009;
MiddleRoom.y2 := 5219;
DoorSet2.X1 := 2004;
DoorSet2.Y1 := 5192;
DoorSet2.X2 := 2005;
DoorSet2.Y2 := 5194;
//Unstuck...
StuckDoorSet.X1 := 1994;
StuckDoorSet.Y1 := 5194;
StuckDoorSet.X2 := 1995;
StuckDoorSet.Y2 := 5195;
//Goblins
GoblinTrainingArea.X1 := 1903;
GoblinTrainingArea.Y1 := 5234;
GoblinTrainingArea.X2 := 1914;
GoblinTrainingArea.Y2 := 5245;
GoblinDoorSet1.X1 := 1904;
GoblinDoorSet1.Y1 := 5231;
GoblinDoorSet1.X2 := 1905;
GoblinDoorSet1.Y2 := 5233;
TreasureRoom1.x1 := 1901;
TreasureRoom1.y1 := 5210;
TreasureRoom1.x2 := 1915;
TreasureRoom1.y2 := 5230;
end;
procedure onTerminate;
begin
writeln('Freeing images');
zombiePic.Free;
crosshair.Free;
freeBitmap(crosshairHandle);
freeBitmap(zombieHandle);
end;
procedure onRandom;
begin
currentStatus := 'Solving random';
randomEvents := randomEvents + 1;
progressreport;
end;
function runAntirandoms() : boolean;
begin
if(LoggedIn and (not R_BankScreen)) then
begin
if(ReflectionRandoms) then
R_FindRandoms
else
FindNormalRandoms;
end;
end;
procedure drawCrosshair;
var Canvas : TCanvas;
begin
if(not PaintCrosshair) then exit;
if((currentStatus = 'In fight with Zombie') or (currentStatus = 'Finding target')) then
begin
try
SmartSetDebug(True);
Canvas := TCanvas.Create;
Canvas.Handle := SmartGetDebugDC;
ClearRSCanvas(Canvas);
crosshair.DrawToCanvas(zombieScreenPoint.x - 20, zombieScreenPoint.y - 20, Canvas);
zombiePic.DrawToCanvas(400, 355, Canvas);
except
writeln('error...');
end;
end else if((currentStatus = 'In fight with Goblin')) then
begin
try
SmartSetDebug(True);
Canvas := TCanvas.Create;
Canvas.Handle := SmartGetDebugDC;
ClearRSCanvas(Canvas);
crosshair.DrawToCanvas(zombieScreenPoint.x - 20, zombieScreenPoint.y - 20, Canvas);
except
writeln('error...');
end;
end;
end;
procedure humanWait(time : Integer);
begin
wait(time + random(time) + random(random(time)));
end;
procedure antibanCycle;
begin
if(random(60) = 1) then
begin
writeln('Entering antiban');
case random(50) of
0..5:
begin
PickupMouse;
end;
5..15:
begin
case random(4) of
0: HoverSkill('attack', false);
1: HoverSkill('strength', false);
2: HoverSkill('defence', false);
3: HoverSkill('hitpoints', false);
end;
end;
15..21:
begin
RandomMovement;
end;
21..30:
begin
BoredHuman;
end;
30..37:
begin
RandomAngle(true);
end;
37..45:
begin
gameTab(random(13) + 21);
end;
45..50:
begin
ExamineInv;
end;
end;
end;
end;
function atTile(location: TTile; name, action : String; height, randomness : Integer) : boolean;
var tilePoint : TPoint;
begin
result := false;
tilePoint := R_tileToMs(location, height);
MMouse(tilePoint.x, tilePoint.y, randomness, randomness);
wait(100);
if(isUpText(name) and isUpText(action)) then
begin
clickMouse2(true);
if r_WaitCrossHairColor(CROSSHAIR_RED, 500 + Random(100)) then
result := true
else
result := false;
end
else if(isUpText('options')) then //try right clicking??
begin
clickMouse2(false);
wait(300 + random(200));
{if(IsMenuOpen) then }
begin
R_ChooseOption(action);
result := true; //assumes R_ChooseOption works...
end;
end;
end;
function r_WebWalk1(T: TTile): Boolean; //Just R_Webwalk with antirandoms incorporated...
var
I: Integer;
M, P: TPoint;
CTRLPoints: TPointArray;
numTries : Integer;
begin
repeat
if(runAntirandoms) then exit;
M := R_GetMyPos;
numTries := numTries + 1;
CtrlPoints := r_WindPath(M.x, M.y, P.X, P.Y, 5.0, 2.5, 0.0, 0.0, 4.5, 2.5);
for I:= High(CtrlPoints) downto 0 do
if R_WalkToTile(Point(CtrlPoints[i].x, CtrlPoints[i].y),0, 10) then
begin
Result := I = High(CtrlPoints);
Break;
end;
until( Result or (numTries > 10)); //will get called again anyway.
end;
//returns true if inside a given area... (specified by a rectangle)
function inAreaEx(tileToCheck : TTile; area : TBox) : boolean;
begin
result := false;
if((tileToCheck.x >= area.X1) and (tileToCheck.x <= area.X2) and (tileToCheck.y >= area.Y1)
and (tileToCheck.y <= area.Y2)) then
result := true;
end;
function inArea(area : TBox) : boolean;
var myLoc : TTile;
begin
result := inAreaEx(R_getMyPos, area);
end;
function getStrongholdFloor : Integer;
begin
if(inArea(LevelTwo)) then
result := -2
else if(inArea(LevelOne)) then
result := -1
else
result := 0;
end;
function getTrainingArea : TBox;
begin
if(FightLocation = LOCATION_ZOMBIES) then
result := TrainingArea
else
result := GoblinTrainingArea;
end;
function atTrainingSpot : boolean;
begin
result := inArea(getTrainingArea);
end;
function hasFood : boolean;
begin
result := (R_CountItemEx(foods) > 0);
end;
function atBank : boolean;
begin
result := r_distanceFromTile(point(3093, 3492)) < 5;
end;
//return the step we are up to.
function getStep : Integer;
begin
if(not atTrainingSpot) then
begin
if(hasFood) then
result := WALK_TO_STRONGHOLD
else
begin
if(atBank) then
result := DO_BANKING
else
result := WALK_TO_BANK;
end;
end
else if(hasFood) then
result := FIGHT
else
result := WALK_TO_BANK
end;
procedure safeLogout;
begin
if((getStep = FIGHT) and (FightLocation = LOCATION_ZOMBIES)) then
R_webwalk1(point(2005, 5192)); //get outta danger zone
humanWait(800);
repeat
runAntirandoms;
until logout;
end;
///Moving & banking-------------------------------------------------------------
//////////////////////// COPYPASTA /////////////////////////////////////////
//Bank functions from ref library, but fixed to work better... (actually only one line changed to fix major issues)
{*******************************************************************************
function R_ItemsExistInBankEx(TheVarArr: TVariantArray; var ItemArray: TBankItemArray): Boolean;
By: mormonman (edited slightly by Iamadam)
Description: Returns true if one of the items exists in bank.
It also returns the array of Items.
*******************************************************************************}
function R_ItemsExistInBankExFix(TheVarArr: TVariantArray; var ItemArray: TBankItemArray): Boolean;
var
i, Hi, h, vType, resCounter, Hig: Integer;
B: Boolean;
BItems: TBankItemArray;
begin
if not R_BankScreen then
begin
R_Debug('Bank not open', 'R_ItemsExistInBankEx');
Exit;
end;
BItems := R_GetAllBankItems;
Hig := High(BItems);
resCounter := 0;
SetLength(ItemArray, Hig + 1);
for i := 0 to Hig do
begin
Hi := High(TheVarArr);
for h := 0 to Hi do
begin
vType := VarType(TheVarArr[h]);
if (vType = varString) then
TheVarArr[h] := LowerCase(Trim(TheVarArr[h]));
case vType of
varInteger: B := (BItems[i].ID = TheVarArr[h]);
varString: B := (TheVarArr[h] = LowerCase(Trim(BItems[i].Name))); //changed so only returns true if WHOLE item name matches -.-
else Exit;
end;
if not B then
Continue;
inc(resCounter);
end;
end;
SetLength(ItemArray, resCounter);
Result := (Length(ItemArray) > 0);
end;
///////////////// END OF COPYPASTA /////////////////////////////////////////
function doBanking : boolean;
var towithdraw : TBankItem;
i: Integer;
begin
currentStatus := 'Banking...';
if(R_BankScreen) then
begin
R_DepositAll(true);
//Potions
if((not(PotionName = '')) and (R_ItemExistsInBankEx([PotionName], towithdraw))) then
begin
if (R_Withdrawx(PotionName, PotionsPerRun)) then
begin
//It worked. no code here yet.
end
else
begin
writeln('Issues withdrawing pots...meh');
end;
end;
for i := 0 to high(foods) do
begin
if(R_ItemExistsInBankEx([foods[i]], towithdraw)) then
begin
if(R_Withdrawx(foods[i], HowManyToWithdraw)) then
begin
inc(Players[currentPlayer].Integers[2]);
result := true;
break;
end
else
begin
writeln('Issues withdrawing food');
terminateScript;
end;
end;
end;
if(not result) then
begin
writeln('Couldn''t find food to get from bank. Sorry...');
closeBank;
Logout;
terminateScript;
end;
closeBank;
end
else
result := R_OpenBankBooth;
end;
function handleWarning : boolean;
begin
if(getColor(206, 57) = 1052839) then
begin
result := true;
mouseBox(200, 165, 328, 184, 1);
end;
end;
//Goblins----------------------------------------------------------------------
function gotoGoblinsFloor1 : boolean;
begin
if(r_distanceFromtile(point(1863, 5239)) < 10) then //Just entered the strongohld...
begin
if(r_tileOnMS(point(1865, 5237), 0)) then
begin
result := atTile(point(1863, 5238), 'Portal', 'Enter', 0, 4);
humanWait(700);
exit;
end
else
result := r_walkToTile(point(1863, 5239), 2, 2);
exit;
end;
if(inArea(TreasureRoom1)) then //In reward room, need to go through door.
begin
if(r_tileOnMS(point(1904, 5231), 0)) then
begin
result := atTile(point(1904, 5231), 'Gate of War', 'Open', 0, 4);
humanWait(700);
exit;
end
else
begin
result := r_WebWalk1(point(1904, 5231));
exit;
end;
end;
if(inArea(GoblinDoorSet1)) then
begin
makeCompass('n');
result := atTile(point(1904, 5233), 'Gate of War', 'Open', 400, 4);
humanWait(700);
exit;
end;
end;
function leaveGoblins : boolean;
begin
if(inArea(GoblinTrainingArea)) then //Get to first door and enter it.
begin
if(r_tileOnMs(point(1904, 5233), 0)) then
begin
r_makeCompass('n');
result := atTile(point(1904, 5233), 'Gate of War', 'Open', 400, 4);
humanWait(400);
exit;
end
else
begin
result := R_webwalk1(point(1904, 5234));
exit;
end
end;
if(inArea(GoblinDoorSet1)) then //in the doors
begin
result := atTile(point(1904, 5231), 'Gate of War', 'Open', 30, 4);
humanWait(400);
exit;
end;
if(inArea(TreasureRoom1)) then
begin
if(r_tileOnMS(point(1913, 5226), 400)) then
begin
r_makeCompass('n');
result := atTile(point(1913, 5226), 'Climb-up', 'Ladder', 400, 5);
humanWait(400);
exit;
end
else
begin
R_webwalk1(r_randomizeTile(point(1913, 5226), 3, 3));
exit;
end;
end;
end;
function gotoZombiesFloor1 : boolean;
begin
if(r_distanceFromtile(point(1863, 5239)) < 10) then //Just entered the strongohld...
begin
if(r_tileOnMS(point(1865, 5237), 0)) then
begin
result := atTile(point(1863, 5238), 'Portal', 'Enter', 0, 4);
humanWait(700);
exit;
end
else
result := r_walkToTile(point(1863, 5239), 2, 2);
exit;
end;
if(r_distanceFromtile(point(1914, 5222)) < 15) then //In reward room, need to go downstairs.
begin
if(r_tileOnMS(point(1902, 5222), 0)) then
begin
if(not handleWarning) then //warning screen isn't up
begin
result := atTile(point(1902, 5222), 'Ladder', 'Climb-down', 0, 3);
humanWait(700);
exit;
end;
end
else
begin
r_walkToTile(point(1902, 5222), 3, 2);
humanWait(700);
exit;
end;
end;
//None worked, lets try to leave goblin area
leaveGoblins;
end;
function gotoZombiesFloor2 : boolean;
begin
if(R_distanceFromtile(point(2042, 5244)) < 10) then //Just entered the 2nd floor...
begin
if(r_tileOnMS(point(2039, 5240), 0)) then //portal on ms...
begin
result := atTile(point(2039, 5240), 'Portal', 'Enter', 0, 4);
humanWait(700);
exit;
end
else
result := r_walkToTile(point(2039, 5240), 2, 2);
exit;
end;
if(inArea(TreasureRoom2)) then //walk to double doors and enter them
begin
if(r_tileOnMs(point(2008, 5215), 0)) then
begin
r_makeCompass('w');
result := atTile(point(2008, 5216), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end
else
begin
r_makeCompass('w');
result := r_walkToTile(point(2008, 5215), 4, 2);
exit;
end;
end;
if(inArea(DoorSet1)) then
begin
result := atTile(point(2005, 5216), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end;
if(inArea(MiddleRoom)) then
begin
if(r_tileOnMS(point(2005, 5194), 0)) then
begin
r_makeCompass('n');
result := atTile(point(2005, 5195), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end
else
begin
R_webwalk1(point(2005, 5194));
exit;
end;
end;
if(inArea(DoorSet2)) then
begin
result := atTile(point(2005, 5192), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end;
if(inArea(StuckDoorSet)) then
begin
writeln('Stuck... fixing');
result := atTile(point(1994, 5194), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end;
if(r_tileOnMM(point(1993, 5190))) then
result := r_walkToTile(point(1993, 5190), 2, 2); //Should be there now :)
end;
function leaveSecondFloor : boolean;
begin
writeln('leaveSecondFloor')
if(inArea(TrainingArea) or inArea(Corridor)) then //Get to first door and enter it.
begin
if(r_tileOnMs(point(2005, 5192), 0)) then
begin
r_makeCompass('n');
result := atTile(point(2005, 5192), 'Rickety door', 'Open', 30, 4);
humanWait(400);
exit;
end
else
begin
result := R_webwalk1(point(2005, 5192));
exit;
end
end;
if(inArea(DoorSet2)) then
begin
result := atTile(point(2005, 5195), 'Rickety door', 'Open', 30, 4);
humanWait(400);
exit;
end;
if(inArea(MiddleRoom) and not inArea(DoorSet1) and not inArea(TreasureRoom2)) then
begin
if(r_tileOnMS(point(2005, 5216), 0)) then
begin
r_makeCompass('w');
result := atTile(point(2005, 5216), 'Rickety door', 'Open', 0, 10);
humanWait(400);
exit;
end
else
begin
R_webwalk1(point(2005, 5216));
exit;
end;
end;
if(inArea(DoorSet1)) then
begin
result := atTile(point(2008, 5216), 'Rickety door', 'Open', 30, 4);
humanWait(400);
exit;
end;
if(inArea(TreasureRoom2)) then
begin
if(r_tileOnMS(point(2017, 5210), 0)) then
begin
r_makeCompass('e');
result := atTile(point(2017, 5210), 'Rope', 'Climb', 400, 6);
humanWait(400);
end
else
result := r_walkToTile(point(2017, 5210), 2, 2);
humanWait(400);
exit;
end;
if(r_distanceFromtile(point(2042, 5245)) < 10) then //at the ladder
begin
r_makeCompass('n');
result := atTile(point(2042, 5246), 'Ladder', 'Climb', 200, 5);
humanWait(400);
exit;
end;
if(inArea(StuckDoorSet)) then //may be stuck...
begin
writeln('Stuck... fixing');
result := atTile(point(1994, 5194), 'Rickety door', 'Open', 30, 4);
humanWait(700);
exit;
end;
end;
function toStronghold : boolean;
begin
case getStrongholdFloor of
0: //get to the entrance...
begin
if(r_tileOnMs(point(3081, 3420), 0)) then
begin
currentStatus := 'Climbing into stronghold';
result := atTile(point(3081, 3420), 'Entrance', 'Climb-down', 0, 3);
humanWait(700);
exit;
end;
currentStatus := 'Walking to stronghold';
result := R_webwalk1(point(3081, 3420));
exit;
end;
-1:
begin
currentStatus := 'Navigating floor -1';
if(FightLocation = LOCATION_ZOMBIES) then
result := gotoZombiesFloor1
else
result := gotoGoblinsFloor1;
end;
-2:
begin
currentStatus := 'Navigating floor -2';
if(FightLocation = LOCATION_ZOMBIES) then
result := gotoZombiesFloor2
else
result := leaveSecondFloor;
end;
end;
wait(random(1000));
end;
function toBank : boolean;
begin
//determine which floor we are on...
case getStrongholdFloor of
0: //not in stronghold
begin
//maybe a random??
runAntiRandoms;
currentStatus := 'Walking to bank';
result:= R_webwalk1(point(3093, 3492));
end;
-1:
begin
if(FightLocation = LOCATION_GOBLINS) then
begin
leaveGoblins;
end
else
begin
r_makeCompass('e');
result := atTile(point(1859, 5244), 'Ladder', 'Climb', 200, 5);
humanWait(400);
end;
end;
-2:
begin
currentStatus := 'navigating floor -2, on way to bank';
result := leaveSecondFloor;
end;
end;
end;
//Item related -----------------------------------------------------------------
procedure dropJunk;
var inv : TInvItemArray;
invIndex : Integer;
dropTheItem : Boolean;
arrIndex : Integer;
begin
inv := r_getInventoryItems;
for invIndex := 0 to high(inv) do
begin
dropTheItem := true;
//Check items to keep
for arrIndex := 0 to high(pickup) do
if(strContains(pickup[arrIndex], inv[invIndex].Name)) then
dropTheItem := false;
//Check food items
for arrIndex := 0 to high(foods) do
if(strContains(foods[arrIndex], inv[invIndex].Name)) then
dropTheItem := false;
//Check potions
if((not (PotionName = '')) and (strContains(PotionName, inv[invIndex].Name))) then
dropTheItem := false;
if(dropTheItem) then
R_dropItem(inv[invIndex].slot);
end;
end;
procedure findItems;
var groundItems : TGroundItemArray;
itemIndex, listIndex : Integer;
itemPoint : TPoint;
begin
if(high(itemsToPickUp) = 0) then exit;
if(InvFull) then exit;
groundItems := r_getallgrounditems(5);
for itemIndex := 0 to high(groundItems) do
begin
for listIndex:= 0 to high(itemsToPickUp) do
begin
if(groundItems[itemIndex].ID = itemsToPickUp[listIndex]) then
begin
//pick it up!
if(r_tileOnMs(groundItems[itemIndex].Tile, 0)) then
begin
itemPoint := r_tileToMs(groundItems[itemIndex].Tile, 0);
Mouse(itemPoint.x, itemPoint.y, 2, 2, false);
if WaitOptionMulti(['ickup', pickup[listIndex]], 500) then
begin
R_Flag;
exit;
end;
end;
end;
end;
end;
end;
//Fighting----------------------------------------------------------------------
function eatIfNeeded : boolean;
var foundFood : TInvItemArray;
begin
result := false;
getMMLevels('hp', storageString);
case storageString of
'Green':
begin //we're fine
result := true;
exit;
end;
end;
if(R_ItemExistsEx(foods, foundFood)) then
begin
if(R_ClickItem(foundFood[0].slot, 'eat')) then
begin
inc(Players[currentPlayer].Integers[0]);
humanwait(500);
result := true;
end;
end;
end;
function potionIfNeeded : boolean;
var foundPotions : TInvItemArray;
begin
result := false;
if(PotionName = '') then
begin
result := true;
exit;
end;
if(TimeFromMark(PotionTimer) < timeTillPotion) then
begin
result := true; //We're fine
exit;
end;
if(R_ItemExistsEx([PotionName], foundPotions)) then
begin
if(R_ClickItem(foundPotions[0].slot, 'drink')) then
begin
inc(Players[currentPlayer].Integers[4]);
MarkTime(PotionTimer);
timeTillPotion := randomRange(((EffectivePotionTime - (EffectivePotionTime div 3)) * 1000),
((EffectivePotionTime + (EffectivePotionTime div 3)) * 1000));
humanwait(500);
result := true;
exit;
end;
end;
end;
procedure doFighting;
var inFightWith : TNPC;
npcs : TNPCArray;
index : Integer;
begin
if(not eatIfNeeded) then
begin
writeln('Couldn''t eat...killing you sorry');
safeLogout;
terminateScript();
Smart_server := 2//forces a crash of smart
R_UpdateHooks;
end;
potionIfNeeded;
//Now we wait till not in combat...
if(r_incombat and (getSystemTime - lastFightTime < 1000 * 60)) then
begin
currentStatus := 'In fight with ' + targetname;
lastInteractedTile := inFightWith.tile;
zombieScreenPoint := r_TileToMS(lastInteractedTile, 1000);
drawCrosshair;
humanWait(1000);
antibanCycle;
exit;
end;
findItems; // not in combat, so lets find some items :)
//Find something to kill
currentStatus := 'Finding target';
npcs := r_SortNPCs(R_GetNPCs(targetName, false));
if(GetArrayLength(npcs) = 0) then
begin
writeln('no ' + targetName + '...');
humanwait(500); //this will probably never be called.
exit; //nothing found. lets just exit
end;
//now we attack...
for index := 0 to high(npcs) do
begin
if((inAreaEx(npcs[index].Tile, getTrainingArea())) and (npcs[index].Interacting = -1) and not((npcs[index].Tile.x = lastInteractedTile.x) and (npcs[index].Tile.y = lastInteractedTile.y))) then
begin
lastInteractedTile := npcs[index].tile;
if(not R_tileOnMS(npcs[index].Tile, 0)) then
exit;
zombieScreenPoint := R_TileToMS(lastInteractedTile, 500);
drawCrosshair;
if(atTile(npcs[index].Tile, targetName, 'Attack', 300, 5)) then //try to clicky him. if we miss, doesn't matter, will loop around again.
begin
lastFightTime := GetSystemTime;
humanWait(3000);
end;
break;
end;
end;
end;
procedure runSession;
begin
sessionStartTime := getSystemTime;
sessionLength := RandomRange((breakEveryMS - (breakEveryMS div 2)), breakEveryMS + (breakEveryMS div 2))
if(not loggedIn) then
if(not loginPlayer) then //try again
loginPlayer;
MakeCompass('North');
SetAngle(True);
//Setup exp
if(Players[currentPlayer].Integers[1] = 0) then
begin
Players[currentPlayer].Integers[1] := getCombatXp;
Players[currentPlayer].Integers[3] := R_GetSkillLevel(SKILL_ATTACK);
Players[currentPlayer].Integers[4] := R_GetSkillLevel(SKILL_STRENGTH);
Players[currentPlayer].Integers[5] := R_GetSkillLevel(SKILL_DEFENCE);
Players[currentPlayer].Integers[6] := R_GetSkillLevel(SKILL_HITPOINTS);
end;
repeat
wait(100); //to prevent any possible lag from uniterupted running of this.
drawCrosshair; //Seriously... give me a thread to do this in!
runAntirandoms;
dropJunk;
getMMLevels('run', storageString);
case storageString of
'Orange','Yellow','Green': SetRun(True);
end;
if(not LoggedIn) then
LoginPlayer;
case getStep of
DO_BANKING:
doBanking; //make use of return value?
WALK_TO_STRONGHOLD:
toStronghold;
FIGHT:
doFighting;
WALK_TO_BANK:
toBank;
end;
progressReport;
until (((getSystemTime - sessionStartTime) > (sessionLength)) or ((getSystemTime - startTime) > (runTime * 1000 * 60)));
safeLogout;
end;
procedure takeBreak;
var breakFor, timeOnBreak : Integer;
begin
breakFor := RandomRange((breakTimeMS - (breakTimeMS div 2)), breakTimeMS + (breakTimeMS div 2));
repeat
currentStatus := 'Taking a break: ' + toStr(timeOnBreak div 1000) + ' sec / ' + toStr(breakFor div 1000) + 'sec';
wait(5000);
timeOnBreak := timeOnBreak + 5000;
progressReport;
until ((timeOnBreak >= breakFor) or ((getSystemTime - startTime) > (runTime * 1000 * 60)));
end;
begin
setup;
repeat
runSession;
takeBreak;
until ((getSystemTime - startTime) > (runTime * 1000 * 60));
writeln('Ran for complete time of ' + toStr(runTime) + ' minutes');
end.