Cstrike
2010-08-26 15:04:53
How Long have You Played Runescape?
10 Year(s)
Are you affilated in anyway with Jagex LTD?
No
Were you Referred to SRL?
N/A
What is your general programming knowledge?
1) Turing
2) Java
3) Minor C++
4) SCAR/Simba
Are you a member of any other communities?
In terms of communities, I wouldn't consider myself part of any tight knit community [excluding SRL for the time being]. I used to be part of a game called Cybernations in one of the top tier clans (and held a high command there). I ended up resigning since university came around and I could no longer hold a position of such high demand, and then further left the game forever upon being destroyed in the wild after the clan ended up spiraling into oblivion.
Other than that, I am a frequent visitor of a place called ultimate-guitar.com, as it's one of my favorite hobbies [music/guitar].
I don't have other communities I attend. SRL seems to be my first acutal "community" by the definition I'm insinuating from the given definition.
Tell us about yourself…
Please show us one (or multiple) of your scripts.
10 Year(s)
Are you affilated in anyway with Jagex LTD?
No
Were you Referred to SRL?
N/A
What is your general programming knowledge?
1) Turing
2) Java
3) Minor C++
4) SCAR/Simba
Are you a member of any other communities?
In terms of communities, I wouldn't consider myself part of any tight knit community [excluding SRL for the time being]. I used to be part of a game called Cybernations in one of the top tier clans (and held a high command there). I ended up resigning since university came around and I could no longer hold a position of such high demand, and then further left the game forever upon being destroyed in the wild after the clan ended up spiraling into oblivion.
Other than that, I am a frequent visitor of a place called ultimate-guitar.com, as it's one of my favorite hobbies [music/guitar].
I don't have other communities I attend. SRL seems to be my first acutal "community" by the definition I'm insinuating from the given definition.
Tell us about yourself…
From: cstrike
I'll keep this short to save you time:
- Soon to complete univ. degree in science. My interest is biology and chemistry, I particularly am very interested in studying/beating cancer. No one should ever have to suffer such a horrible disease.
- Love music (all forms), play multiple instruments… have been for a long time. I enjoy classical, ambient, and metal, but do not think that doesn’t mean I dislike other genres… for I play things like jazz for example as well.
- Enjoy creating, thus coding allowed a new outlet of this desire.
- Enjoy runescape, but I can't play without using scripts now… levels are too tedious and clicking the same stuff over and over again isn't fun. If I ever get banned on my main, I don't care anymore. I only wish to make scripts, and I function mainly on making armies now.
Please show us one (or multiple) of your scripts.
{
IMPORTANT:
Apparently I cannot use "Manage extensions" to upload scripts. It keeps saying I do not have permission.
Therefore, check my submissions here:
[url]http://villavu.com/forum/showthread.php?p=721842#post721842[/url]
This is if you wish to test them!
===========================
Sorry, this will be long to read, I want to give you my best currently despite my health condition of having mono. I would like to let you know if I fail to become an srl member, I shall return with stronger scripts than ever.
You WILL need reflection for my main script. My woodcutter was color, but I integrated reflection into it. You do not need it for my last two scripts, but my last two scripts are not supposed to be what gets me into SRL members, my Rune Miner and my Woodcutter are the ones you should view. If you do not use reflection, I assure you I’ve tested them and they work pretty good for me. Rune miner so far has been flawless, and the woodcutter has lots of failsafes to prevent the occasional fail since it is more color based than reflection.
To update the hooks yourself without hooks.scar: [url]http://villavu.com/forum/showthread.php?p=732599[/url]
- Rune miner AND WorldSwithcer(Old).scar
PLEASE READ BEFORE RUNNING THE SCRIPT:
With sadness I say this script actually doesn't run anymore :_(!!
Ever since the update [like 2 days ago], SMART does not load properly (it just crashes). I've attached it just so you can see the immense amount of work put into it. For those who don't believe that it works, I cannot sway you any further, for I have no proof. This I shall tell:
This was the first crowning endeavor I successfully completed. It mines rune at Keldagrim, hops worlds, and banks. This is/was truly my pride and joy as a newb SRL scripter. I worked so hard on it and made so many failsafes. This program will ONLY fail if there is a lag error, or one of those errors connecting to worlds (or RS updates). This script has never been lost, and I’ve run it for weeks between me and another person I highly trust. Alone in 5 days I made over 20 million. This only works at Keldagrim, sorry for you hero guild people. In the future I hope to make it function at any rune mine.
Basically, this script hops worlds, records them when found, and has many failsafes to remove worlds properly from all the arrays (since you need more arrays to mark time and player count!) so that no duplicates or screw-ups appear. In addition, it uses reflection to walk to the bank and ensure it’s at the right mining spot at all times.
Also, I feel there is code that can be fixed, there are some things like the mining procedure that can be cut in half. I plan on doing this in the future.
Sadly as I edit this, it doesn't work. Please feel free to look at it and see how much time I put into it.
If ANY of you can fix it, I would be at your call for eternity. It's probably something stupidly simple too, but I just can't seem to debug it. This only failed after SRL and reflection both updated (thus I cannot tell which broke it first), but I believe it to be the hooks. Since it is so reflection based I'm screwed regardless.
- Woodcutter (My primary working script):
This script takes an army of players, and chops one full load each, returns them to varrock east bank, deposits, and logs out. It also has a noob mode that is a failsafe for those accounts that get a warning message when attempting to leave varrock (“Outside area is dangerous…etc”), and this will find those if you set it in the DeclarePlayers and bypass it flawlessly.
I designed this in mind as a quick script to prove that I can do multiplayer. I ended up getting stuck with autocoloring, and then my greatest moment happened. I created a script called FindColorMode, which finds the ‘mode’ of all the colors of a given TPA, then it finds the most common occurring point (or returns the first one if all the colors are different, or returns -1 if no TPA is found or theres an error), and then returns the color number of the most common color. I was so thrilled with this because I spend days and days trying to make an autocolor work… yet kept failing. I do not know what lies beyond in SRL members, and probably you guys have scripts to dwarf mine as expected, but this is the best innovative way I could come up with. Hopefully this script shows you that I am innovative.
Also in addition, this script was designed with reflection (because I love it and its accuracy), though when reflection failed the other day due to an update, I redesigned it to function without reflection. So far it had been moderately successful, only with the occasional screw up due to all the failsafes not working [resulting in nextplayer(false)]. Since reflection is updated properly, I ended up just re-integrating reflection into the script. Sorry if you cannot remove the reflection, but if you comment out all the code and all the failsafes properly… it WILL function with color as I originally intended it to.
To be objective: This script has screwed up when banking occasionally (it will weirdly overshoot the bank occasionally and not invoke the spiralmouse failsafe). This is to be fixed, though I never intended to really release this script… it was more a proof of concept so you could see that hopefully I am a competent member worthy of joining the SRL member community.
Also, please note that if you want this to work fluently with some level 1 woodcutter, you will need to change the ChooseOption(‘hop’) to ChooseOption(‘ree’) if you canont cut oaks. I ended up going from level 1 to 15 with this script, though it will still detect the oak tree and slow you down slightly. Nonetheless, I’ve never had the script failsafes of getting stuck on oaks terminate just because of this. Lastly, it has never gone astray. It probably can, and maybe will for some of you—but for me it’s been faithful. Nonetheless, it probably will screw up for some of you. I never really intended this script to approach 800 (!!!) lines. My pride and joy rune miner is almost that long.
- UltraAlcher:
I attached this just so you could see that I attempt to be innovative by designing a script which utilizes minimal movement possible.
This script functions with IsUpText a lot, and it sort of sucks (the script), but I love the concept. I did manage to get 99 magic with this, so it functions well. Occasionally it will log out because someone will make IsUpText fail. My future updates should I fail getting into SRL members… is to include better failsafes instead of just logging out.
Remember, this is not my most amazing script, but hopefully shows you what I originally started out with and how much I’ve progressed
- Fun guitar program:
Lastly I included this once again to show you that SRL and SCAR has no bounds. I use this program when I change tunings on guitar, along with using it to memorize notes. You input the tuning and it will output the fretboard. This can probably be used with any stringed instrument as well that functions in semitone intervals.
The intent is to develop this for my own pleasure (and others who want it) to output various scales to help one with soloing on the guitar and staying in key.
So there you have it. I’ve spent countless hours and hours reading guides, learning arrays (which I feel I’m extremely comfortable with) and how to use them. I love reflection, and I’d like to share with you some of my desires should I get accepted:
1) I would like to work mainly on autocoloring for any location (I will be checking out MSI)
2) I would really enjoy to create the “Find me anywhere in runescape and take me to a bank” script. This would be with reflection. I’m going to eventually attempt to develop a script to input the tile, and then find a path to the bank
3) I want to eventually get a failsafe added to reflection called “FindClosestPath”, which will assess the distance from a TTileArray, determine if a path can be made, and attempt that path. This will mean that if you’re stuck in some place accidentally and want to return to point X or point X[n] on path Y, you will be able to attempt this failsafe.
That is what I want to bring to the SRL community, and maybe more as time progresses.
In conclusion, everything seems to be going wrong for me at the last minute. I am welcome to any input and will do whatever else you recommend to me. I'm here to learn. Please criticize, I have a tough outer skin. Any input you give will be taken to heart :), if I do not get in due to the unforeseen circumstances I will do my best to learn what I need to re-apply in the future.
Thank you for viewing my application.
Cstrike.
}
{MY OUTDATED RUNITE MINER KELDAGRIM}
{------------------------------------------------------------------------------]
$
One miner to rule them all: $$$
The runite miner $$$$
By: Cstrike $$$$$
V: 1.0 $$$$777
$$$$777
77777777
777777777
7777777III
7777IIIIIIII
ZZ IIIIIIIIIIIII
ZZZ IIIIIIIIIIIII
$$$$$$Z IIIIIII???????
Z$$$$$$$$$$ 7IIII?????????III
$$$$ $$$$$$$$$$$$ ????????????????Z
$$77777 $$$$7777$$$$ZZ ?????????????????ZZ
$$ $$$777777$$$$77777$$$$$$$ZZ7?????????????????$$$
$$$$$$77777777777777777777$$$ZZZ?????????????????$$$
ZZ$$$$7777III 777IIIIIII7777$$$$$$$Z??????????????$$$$
ZZZ$$$$ZZIIII 777IIIIIIIIIII777$$$$$$$$???????????7777
ZZZ7777ZZZIII 777IIIIIIIIIIII777$$$$$$$$Z??????????7777
$ZZZ77777$$$$Z IIIIIII????IIIIIII7777$$$$$$?????????7777D
$$ZZZZ77777$$$$ IIIIIII??????IIIIIII777777$$$$ ???????7777
$$ZZZZ777777$$$$ III??????????IIIIIIIIII$$$$$$ ???????IIII
$$$ZZZZ$$$7777$$$$$III????????????????IIII777777ZZZ ??IIIIII
$$$$ZZZZ$$$IIIII7777 ???????????++++???IIII77777$$$
ZZZZ$$$IIIII7777I???????++++++++???IIII7777$$$$
ZZZZ$$$$IIIII77777???????++++++++???IIIIII$$$$ZZZ
$$$$IIIIII7777Z???+++++++++++++IIIIII7777ZZZ
777IIIII777 $???+++++++++++++IIIII7777$
IIII 7???++++????????????77
????????????????
?????????????
[------------------------------------------------------------------------------]
Instructions
=============
1) Load your account between the two rocks. Account must be in the middle.
2) This obviously means at Keldagrim for now, Heroes Guild will come later
3) Do not start at bank, the script will take you to a bank and do it for you
4) You must wield your rune pick for now, or else it will get banked
5) Everything else is banked as well (gems, strange rock, other?)
6) Don't wear a dragonstone amulet since you will clog yourself with gems
7) Remove worlds from the members list which you cannot go to
Ex: Skill world 1500 if youre less
Ex: Laggy worlds on the opposite side of earth [if they lag terminate you]
8) You need to enter your pin. If you think this will scam you, don't use it...
[------------------------------------------------------------------------------]
***************
** Important **
***************
- Do not click smart while its active! This tends to fuck up the mining process
- If you want to know the process, turn debug on
- Connection errors will nerf [terminate] the script,there are failsafes though
- Remove worlds from the members list which you cannot
- To find 'debugOn' variable, use the search function for *debugOn :=*
[------------------------------------------------------------------------------}
program RuneMinerElite;
{$DEFINE SMART}
{$i srl\srl.scar}
{$i reflection\reflection.simba}
const
{--- Setup Constants---}
WORLD = 157;
MEMBERS = true;
SIGNED = true;
RockCol = 10985325; // Rune rock color and tolerance
RockTol = 6;
sqX1 = MSCX - 65; // This is a 65 radius box around the player
sqY1 = MSCY - 65; // and this code is used for detecting if there
sqX2 = MSCX + 65; // is a runite rock color match, meaning that
sqY2 = MSCY + 65; // it will keep mining.
boxL1X = 210; // These boxes are designed to look 'L'eft, 'R'ight, and 'U'p
boxL1Y = 123; // above the player. These detect rune rocks in these ranges
boxL2X = 249; // so that the script can see if there is still rune being
boxL2Y = 196; // mined or not.
boxR1X = 278; // X1/Y1 is top left of box, X2/Y2 is bottom left
boxR1Y = 140;
boxR2X = 342;
boxR2Y = 222;
boxU1X = 212;
boxU1Y = 132;
boxU2X = 277;
boxU2Y = 258;
boxX1 = 249;
boxY1 = 136;
boxX2 = 317;
boxY2 = 224;
{----------------------}
var
PlayerNumberArray, WorldNumArray, MarkedTimeArray, MembersWorldArray : TIntegerArray; // World table array
debugOn : Boolean; // Debug
x, y, CurrentWorldActive, timesBanked, scriptRunning : Integer; // Mouse cursor
procedure DeclarePlayers;
begin
NumberOfPlayers(1); // How many players? 1 account = "1', 5 accounts = "5"...
CurrentPlayer := 0; // Start at player "zero" (aka player 1)
Players[0].Name := '';//Your RuneScape UserName
Players[0].Pass := '';//Your RuneScape PassWord
Players[0].Nick := ''; //3-4 letters from name
Players[0].Active:= True;
Players[0].BoxRewards := ['Xp', 'mote', 'ostume', 'oins', 'aphire', 'ssence'];
Players[0].Pin := '';
debugOn := false; // Set to "False" if you do not want debug on
end;
// Debug procedure | I think this idea was originally taken from Xcan, so assume that
procedure Debug (s : String);
begin
if debugOn then
begin
Writeln ('DEBUG: ' + s);
end;
end;
procedure AwkwardText;
begin
if not LoggedIn then Exit;
case Random(13) of
0: writeln ('Pillage mining since "79.');
1: writeln ('YOU NOW HAVE HEAVY SANDVICH YAUH?!');
2: writeln ('Even God couldnt code something this epic.');
3: writeln ('Holmes on homes, tonight at 11.');
4: writeln ('This program is better than getting laid.');
5: writeln ('Did you know: Without me, dragon claws would still be 32 million?');
6: writeln ('Im the reason party hat prices are dropping.');
7: writeln ('I make third age armor look like mithril.');
8: writeln ('Who needs 99 prayer? You do.');
9: writeln ('If you ever thought of getting that herblore cape...');
10: writeln ('Duke Nukems muscle fibers are made out of my essence.');
11: writeln ('You could buy a car in real life with what Im making you...');
12: writeln ('If others are jealous of you, they have reason to be because of me.');
13: writeln ('I define sexy. Sexy = benefits me, benefits me = money, I = money.');
end;
end;
// Delete a value of the array and shrink its size [Good for deleting worlds] | Originally created by IceFire908, 'for to do 'line modified by me
procedure DeleteIntegerFromArray(var Arr: TIntegerArray; Index: Integer);
var
TempArr: TIntegerArray;
I, L: Integer;
begin
SetLength(TempArr, Length(Arr) - 1);
for I := 0 to High(Arr) do // <-- Modded here
if (I <> Index) then
begin
TempArr[L] := Arr[I];
Inc(L);
end;
Arr := TempArr;
end;
// This cleans up the world array when you want to add a new array
procedure WorldArrayCleanerSpecific (worldnum : Integer);
var i : Integer;
begin
debug ('SPECIFIC CLEANUP REQUESTED [World '+ IntToStr(worldnum)+']');
for i := 0 to High(WorldNumArray) do
begin
if WorldNumArray[i] = worldnum then
begin
DeleteIntegerFromArray (WorldNumArray, i);
Debug ('Deleted WorldNum array #' + IntToStr(worldnum));
DeleteIntegerFromArray (PlayerNumberArray, i);
Debug ('Deleted PlayerNum array #' + IntToStr(worldnum));
DeleteIntegerFromArray (MarkedTimeArray, i);
Debug ('Deleted MarkedTime array #' + IntToStr(worldnum));
end;
end;
end;
// Removes irritating adjacent worlds that crop up due to world lag errors
procedure AdjacentWorldRemover;
var tempi, i : Integer;
begin
Debug ('Checking for double worlds since WorldNumArray > 0');
if (high(WorldNumArray) > 0) then
begin
tempi := 0; // failsafe
for i:=1 to High(WorldNumArray) do
begin
Debug (IntToStr(i)+ ' = ' + IntToStr(WorldNumArray[i]));
if WorldNumArray[i] = WorldNumArray[(i-1)] then
begin
Debug ('match found @ ' + IntToStr(WorldNumArray[i]));
tempi := i;
end;
end;
if tempi > 0 then
begin
Debug ('Removing i = '+IntToStr(tempi));
//DeleteIntegerFromArray (WorldNumArray, tempi);
WorldArrayCleanerSpecific (WorldNumArray[tempi]);
end;
wait (100+random(50));
{
Debug ('---');
Debug ('new array:');
for i:=0 to High(WorldNumArray) do
begin
Debug (IntToStr(i)+ ' = ' + IntToStr(WorldNumArray[i]));
end;
}
end;
end;
// This cleans up generic fuck ups like "Players = 0, -1"...etc | Also, this will purge worlds that have been sitting around too long (great for resetting after a bank!)
procedure WorldArrayCleanerGeneral;
var i : Integer;
arrayCounter, originalBounds, failsafeabort : Integer;
begin
Debug ('Now cleaning');
Debug ('High playernumarray: ' +IntToStr(High(PlayerNumberArray)));
wait (500);
AdjacentWorldRemover; // Clean adjacent screw ups
originalBounds := High(PlayerNumberArray);
arrayCounter := 0;
failsafeabort := 0;
repeat
for i := 0 to High(PlayerNumberArray) do
begin
if (PlayerNumberArray[i] < 1) or (WorldNumArray[i] < 1) or (TimeFromMark(MarkedTimeArray[i]) > 1800000) then
begin
Debug (inttostr(i) + '/'+ inttostr(High(PlayerNumberArray)));
Debug ('Generic cleanup: Deleted WorldNum array #' + IntToStr(WorldNumArray[i]));
DeleteIntegerFromArray (WorldNumArray, i);
Debug ('Generic cleanup: Deleted PlayerNum array #' + IntToStr(PlayerNumberArray[i]));
DeleteIntegerFromArray (PlayerNumberArray, i);
Debug ('Generic cleanup: Deleted MarkedTime array #' + IntToStr(MarkedTimeArray[i]));
DeleteIntegerFromArray (MarkedTimeArray, i);
Inc(arrayCounter); // If error found, restart loop (or else it only finds up to world[i-(# of errors)]
end;
end;
wait (10);
Inc(failsafeabort);
until (arrayCounter > originalBounds) or (failsafeabort > 50)
Debug ('Done cleaning.');
end;
// Antiban (though not really that useful)
procedure AntiBan;
begin
if not LoggedIn then Exit;
case Random(25) of
0: begin
BoredHuman;
Debug ('ANTIBAN: Did bored human');
end;
end;
end;
// This procedure sets up the worlds that we should only go to | Therefore, we don't end up on any pvp or f2p worlds
procedure SetupWorlds;
begin
MembersWorldArray := [9, 12, 15, 22, 23, 24, 27, 28, 31, 36,
39, 42, 44, 45, 46, 48, 51, 52, 53, 54,
56, 58, 60, 64, 66, 67, 68, 69, 70, 71,
76, 77, 78, 79, 82, 83, 84, 88, 89, 91,
92, 97, 98, 99, 100, 103, 104, 110, 111, 112,
115, 116, 117, 121, 129, 130, 131, 132, 138, 142,
143, 144, 145, 148, 151, 156, 157, 158, 159, 160,
164, 166];
// 10 worlds per horizontal row for easy counting
// Add or remove worlds to suit your needs
end;
// Add world to the 'WorldNumArray' | Thanks to Shuttleu for this code
procedure AddWorldToList (WorldNum, CountOfPlayersKnown: Integer);
begin
SetArrayLength (WorldNumArray, Length(WorldNumArray)+1); // Add world number
WorldNumArray[High(WorldNumArray)]:= WorldNum;
Debug ('Added world "'+ IntToStr(WorldNum) +'" to World Roster array'); // Add player number
SetArrayLength (PlayerNumberArray, Length(PlayerNumberArray)+1);
PlayerNumberArray[High(PlayerNumberArray)]:= CountOfPlayersKnown;
Debug ('Added players: "'+ IntToStr(CountOfPlayersKnown) +'" to World Roster array');
SetArrayLength (MarkedTimeArray, Length(MarkedTimeArray)+1); // Add time mark
MarkTime (MarkedTimeArray[High(MarkedTimeArray)]);
Debug ('Added time "'+ IntToStr(MarkedTimeArray[High(MarkedTimeArray)]) +'" to World Roster array');
end;
// Checks tiles to see if we're farther away from rune rocks than we think, returns true if we need to move closer
function AreWeTooFarFromRuneRocks : Boolean;
var currentTile : TTile;
miningTileArray : TTileArray;
i : Integer;
begin
currentTile := GetMyPos;
miningTileArray := [Tile(2870, 10260), Tile(2871, 10260), Tile(2871, 10261)];
result := true;
for i:=0 to High(miningTileArray) do
begin
if (currentTile = miningTileArray[i]) then
begin
result := false;
Debug ('We are in the correct mining spot');
end;
end;
end;
// Find rune rock procedure | Taken from AutoColorAid (ACA 2.0) | Find rune rock right
function FindRuneRockRight (var fx, fy: Integer): Boolean;
var
arP, arAP: TPointArray;
arC, arUC: TIntegerArray;
ararP: T2DPointArray;
tmpCTS, i, j, arL, arL2: Integer;
P: TPoint;
R, G, B: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.05, 0.83);
if not(FindColorsTolerance(arP, RockCol, 278, 142, 346, 220, RockTol)) then
begin
Debug ('No rune rock color found (on this world)');
wait (10+random(10));
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
arUC := arC;
ClearSameIntegers(arUC);
arL := High(arUC);
arL2 := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= 98) and (R <= 123) and (G >= 141) and (G <= 176) and (B >= 147) and (B <= 184) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 20.14) and (X <= 31.92) and (Y >= 24.12) and (Y <= 38.23) and (Z >= 31.59) and (Z <= 50.50) then
begin
for j := 0 to arL2 do
begin
if (arUC[i] = arC[j]) then
begin
SetLength(arAP, Length(arAP) + 1);
arAP[High(arAP)] := arP[j];
end;
end;
end;
end;
end;
SortTPAFrom(arAP, Point(MSCX, MSCY));
ararP := SplitTPAEx(arAP, 10, 10);
arL := High(ararP);
for i := 0 to arL do
begin
if (Length(ararP[i]) < 10) then Continue;
P := MiddleTPA(ararP[i]);
MMouse(P.x, P.y, 5, 5);
Wait(100 + Random(100));
if (IsUpText('ine')) then
begin;
Result := True;
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
begin
Debug ('FindObject could not find object.');
Exit;
end;
GetMousePos(fx, fy);
end;
// Find rune rock procedure TOP
function FindRuneRockTop (var fx, fy: Integer): Boolean;
var
arP, arAP: TPointArray;
arC, arUC: TIntegerArray;
ararP: T2DPointArray;
tmpCTS, i, j, arL, arL2: Integer;
P: TPoint;
R, G, B: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.05, 0.83);
if not(FindColorsTolerance(arP, RockCol, 202, 127, 270, 183, RockTol)) then
begin
Debug ('No rune rock color found (on this world)');
wait (10+random(10));
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
arUC := arC;
ClearSameIntegers(arUC);
arL := High(arUC);
arL2 := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= 98) and (R <= 123) and (G >= 141) and (G <= 176) and (B >= 147) and (B <= 184) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 20.14) and (X <= 31.92) and (Y >= 24.12) and (Y <= 38.23) and (Z >= 31.59) and (Z <= 50.50) then
begin
for j := 0 to arL2 do
begin
if (arUC[i] = arC[j]) then
begin
SetLength(arAP, Length(arAP) + 1);
arAP[High(arAP)] := arP[j];
end;
end;
end;
end;
end;
SortTPAFrom(arAP, Point(MSCX, MSCY));
ararP := SplitTPAEx(arAP, 10, 10);
arL := High(ararP);
for i := 0 to arL do
begin
if (Length(ararP[i]) < 10) then Continue;
P := MiddleTPA(ararP[i]);
MMouse(P.x, P.y, 5, 5);
Wait(100 + Random(100));
if (IsUpText('ine')) then
begin;
Result := True;
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
begin
Debug ('FindObject could not find object.');
Exit;
end;
GetMousePos(fx, fy);
end;
function MiningLoop : Boolean;
var arP : TPointArray;
abortCount : Integer;
rightRockTimeAbort, topRockTimeAbort : Integer;
miningTileFailsafe : TTile;
begin
If not LoggedIn then Exit;
result := false;
if AreWeTooFarFromRuneRocks then // Get us closer to the rune rocks if were somewhat far away
begin
debug ('walking to tile closer to rune rocks');
miningTileFailsafe := Tile(2871, 10261);
WalkToTile (miningTileFailsafe, 0, 0);
wait (1500+random(1000));
end;
Debug ('looking for RIGHT rock');
if FindRuneRockRight (x, y) then
begin
result := true;
debug ('Found R, clicking');
Mouse (x, y, 3, 3, false);
ChooseOption ('ine');
wait (2000+random(1000));
MarkTime (rightRockTimeAbort);
repeat
wait (150+random(225));
debug ('waiting...');
if abortCount > 0 then
begin
Debug ('Resetting abortCount to 0');
abortCount := 0; // We found the rock, default it
end;
until (not (FindColorsTolerance(arP, RockCol, 278, 142, 346, 220, RockTol))) or ((TimeFromMark (rightRockTimeAbort)) > 120000)
debug ('No more R rock!');
end;
wait (1000+random(700));
debug ('looking for TOP rock');
if FindRuneRockTop (x, y) then // Rune rock top
begin
result := true;
Debug ('Found T, clicking');
Mouse (x, y, 3, 3, false);
ChooseOption ('ine');
wait (2000+random(1000));
MarkTime (topRockTimeAbort);
abortCount := 0;
repeat // Failsafe since it sometimes thinks the rock is mined when its not
wait (200+random(125));
if ((FindColorsTolerance(arP, RockCol, 202, 127, 270, 183, RockTol))) then
begin
repeat // While script detects rune rock top color
Debug ('mining... ['+IntToStr(abortCount)+'/5]');
wait (450+random(350));
abortCount := 0;
until (not (FindColorsTolerance(arP, RockCol, 202, 127, 270, 183, RockTol))) or ((TimeFromMark (topRockTimeAbort)) > 120000) // Bail @ 2 mins
end;
Debug ('Top rock NOT detected anymore');
if abortCount < 5 then
begin
Debug ('Lost rune rock top, but we dont believe it [Abortcount = '+IntToStr(abortCount)+']');
end;
Inc (abortCount);
wait (50+random(100));
if ((TimeFromMark (topRockTimeAbort)) > 120000) then
begin
Debug ('We dun goofed, the consequences will never be the same [We hit a fail safe for the top rock w/ time]');
end;
until (abortCount > 4) or ((TimeFromMark (topRockTimeAbort)) > 120000)
end;
Debug ('* Done mining *');
end;
// This outputs the current world list roster (w/ all data) for debugging | NOTE: Only works with debug on (aka: debugOn = true)
procedure OutputChart;
var i : Integer;
scriptRunningTime : String;
begin
if not debugOn then ClearDebug;
scriptRunningTime := MsToTime ((TimeFromMark(scriptRunning)), 4);
writeln ('');
writeln ('[-----[#]-----[#]-----( ARRAY CHART )-----[#]-----[#]-----]');
for i := 0 to High(WorldNumArray) do
begin
Writeln ('W: '+ IntToStr(WorldNumArray[i]) +' Players: '+ IntToStr(PlayerNumberArray[i]) +' Time: '+ IntToStr(TimeFromMark(MarkedTimeArray[i])) +' ['+IntToStr(round((25-((PlayerNumberArray[i])/160))*60000))+' is respawn]'); //+ IntToStr());
end;
writeln ('[-----[#]-----[#]-----(-------------)-----[#]-----[#]-----]');
writeln ('InvCount: '+IntToStr(InvCount) + ' Times banked: '+IntToStr(timesBanked) + ' Time running: '+scriptRunningTime); //Added this most recently
writeln ('Inspirational text of the minute:');
AwkwardText;
writeln ('');
end;
// Change to a random world to look for rune, assuming no time matchups found with rune rock table tracker
procedure ChangeRandomWorld;
var
RandomWorldSelected, worldCountFailsafe, i : Integer;
var
worldCompare : Boolean;
begin
worldCountFailsafe := 0;
repeat // This repeat means that the program will pick a random world that is *not* currently in our World Array Queue
worldCompare := true;
RandomWorldSelected := MembersWorldArray[Random((High(MembersWorldArray)+1))];
for i:=0 to (High(WorldNumArray)) do
begin
if (WorldNumArray[i] = RandomWorldSelected) then
begin
Debug ('Accidentally hit the same world ['+inttostr(WorldNumArray[i])+']... finding new one');
worldCompare := false;
Inc(worldCountFailsafe);
end;
end;
until (worldCompare) or (worldCountFailSafe > (High (MembersWorldArray)))
if (worldCountFailSafe > (High (MembersWorldArray))) then //The script below is if it aborted due to a fail safe... this should never occur
begin
writeln ('Major fuckup occured! All worlds are logged, aborting script!');
PlaySound ('C:/beepcalm.wav');
wait (100);
TerminateScript;
end;
Debug ('Random world chosen: '+ IntToStr(RandomWorldSelected));
ChangeWorld (RandomWorldSelected); // Pick random world from the array, picks between 0 and high from the array
CurrentWorldActive := RandomWorldSelected; // This will end up in world tracker array if it has rune
end;
// This is designed to return "0" if nothings ready, (number) if that world is ready to be mined at
function CheckWorldTimes : Integer;
var i : Integer;
begin
result := 0; // If no worlds are ready to be mined (true) then it will stay return false
Debug ('Checking world times');
for i := 0 to High(WorldNumArray) do
begin
if TimeFromMark(MarkedTimeArray[i]) > (round(((25-((PlayerNumberArray[i])/160))*60000)-30000)) then // Stupid minute conversion stuff :(
begin
Debug ('World '+ IntToStr(WorldNumArray[i]) +' is ready!');
result := WorldNumArray[i];
Break;
end
end;
end;
function CheckPlayerNumber(world : Integer) : Integer;
var i : Integer;
begin
result := -1;
Debug ('Checking for player # at world '+IntToStr(world));
for i := 0 to High(WorldNumArray) do
begin
Debug ('i='+IntToStr(i) + '= world'+IntToStr(WorldNumArray[i]));
if (world = WorldNumArray[i]) then
begin
Debug ('World '+ IntToStr(WorldNumArray[i]) +' found to have player # '+ IntToStr(PlayerNumberArray[i]));
result := PlayerNumberArray[i];
Break;
end
end;
end;
// This checks the possible time difference due to player fluctuation | Returns the time difference so the robot can judge if its worth it
function RespawnTimeDif (prevPlayerCount : Integer) : Integer;
var prevTimeInt, currentTimeInt : Integer;
var prevTime, currentTime : Extended;
begin
prevTime := 160/prevPlayerCount; // These just ensure the # isnt rounded
prevTime := 25-prevTime;
prevTime := prevTime*60000
prevTimeInt := round (prevTime);
Debug ('prevTimeInt = '+IntToStr (prevTimeInt));
currentTime := 160/WorldPlayerCountNumber; // These just ensure the # isnt rounded
currentTime := 25-prevTime;
currentTime := prevTime*60000
currentTimeInt := round (prevTime);
Debug (' currentTimeInt = ' +IntToStr(currentTimeInt));
result := currentTimeInt-prevTimeInt; // This returns a value saying that 'our current player # is (changed up or down) since last login
Debug ('Difference in time: '+IntToStr(currentTimeInt-prevTimeInt)+' ms');
end;
// This is the bank colors picked that works with the bank booths
function FindKeldagrimBank(var fx, fy: Integer): Boolean;
var
arP, arAP: TPointArray;
arC, arUC: TIntegerArray;
ararP: T2DPointArray;
tmpCTS, i, j, arL, arL2: Integer;
P: TPoint;
H, S, L: Extended;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(1);
if not(FindColorsTolerance(arP, 7045776, MSX1, MSY1, MSX2, MSY2, 6)) then
begin
Debug ('Failed to find the color, no object found.');
ColorToleranceSpeed(tmpCTS);
Exit;
end;
arC := GetColors(arP);
arUC := arC;
ClearSameIntegers(arUC);
arL := High(arUC);
arL2 := High(arC);
for i := 0 to arL do
begin
ColorToHSL(arC[i], H, S, L);
if (H >= 10.24) and (H <= 10.50) and (S >= 14.27) and (S <= 15.44) and (L >= 48.02) and (L <= 50.41) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 20.93) and (X <= 23.38) and (Y >= 21.75) and (Y <= 24.20) and (Z >= 16.44) and (Z <= 17.92) then
begin
for j := 0 to arL2 do
begin
if (arUC[i] = arC[j]) then
begin
SetLength(arAP, Length(arAP) + 1);
arAP[High(arAP)] := arP[j];
end;
end;
end;
end;
end;
SortTPAFrom(arAP, Point(MSCX, MSCY));
ararP := SplitTPAEx(arAP, 10, 10);
arL := High(ararP);
for i := 0 to arL do
begin
if (Length(ararP[i]) < 10) then Continue;
P := MiddleTPA(ararP[i]);
MMouse(P.x, P.y, 5, 5);
Wait(100 + Random(100));
if (IsUpText('oot')) then
begin;
Result := True;
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
if (i = arL + 1) then
begin
Debug ('FindObject could not find object.');
Exit;
end;
GetMousePos(fx, fy);
end;
function LoadPathToBankTile : TTileArray;
begin
SetLength (Result, 6);
Result := [
Tile(2874, 10251), Tile(2872, 10236), Tile(2864, 10230),
Tile(2849, 10229), Tile(2845, 10220), Tile(2838, 10207)];
end;
function LoadPathToMineTile : TTileArray;
begin
SetLength (Result, 6);
Result := [
Tile(2845, 10220), Tile(2849, 10229), Tile(2864, 10230),
Tile(2872, 10236), Tile(2874, 10251), Tile(2872, 10261)];
end;
procedure WalkToBankWalkPath;
var TTilePath1 : TTileArray;
begin
If not LoggedIn then Exit;
writeln ('Walking to bank');
TTilePath1 := LoadPathToBankTile;
WalkPath (TTilePath1);
end;
function WalkToMineWalkPath : Boolean;
var TTilePath2 : TTileArray;
begin
result := false;
If not LoggedIn then Exit;
writeln ('Walking to mine');
TTilePath2 := LoadPathToMineTile;
if WalkPath (TTilePath2) then result := true;
end;
procedure BankStuff;
begin
If not LoggedIn then Exit;
wait (1000+random(534));
if PinScreen then
begin
Debug ('found pin screen, entering pin...');
InPin(Players[0].Pin)
end else
begin
Debug ('No pin screen found');
end;
if BankScreen then
begin
Debug ('Bank screen found, depositing stuff!');
wait (250+random(500));
if DepositAll then
begin
Debug ('All ore deposited!!');
wait (250+random(500));
if CloseBank then
begin
Debug ('closed bank successfully!');
wait (250+random(500));
Inc (timesBanked);
Debug ('Banked times increased to: '+IntToStr(timesBanked));
end;
end;
end;
end;
procedure IdentifyBank;
begin
if FindKeldagrimBank(x, y) then
begin
Mouse (x, y, 1, 1, false);
ChooseOption ('qu');
wait (3000+random(1500));
end else
begin
writeln ('Did not find bank Object, using Spiral mouse');
if SpiralMouse (x, y, MSX1, MSY1, MSX2, MSY2, 'ank', 15, 12) then
begin
Mouse (x, y, 1, 1, false);
wait (500);
ChooseOption ('uic');
end else writeln ('Warning, didnt find bank');
end;
end;
// Checks tiles to see if we're lost, true = really lost
function CheckIfReallyLost : Boolean;
var currentTile : TTile;
begin
currentTile := GetMyPos;
if (currentTile.x > 2873) or (currentTile.x < 2834) then
begin
writeln ('Uh Oh! We are outside of the X axis area!');
result := true;
end;
if (currentTile.y > 10261) or (currentTile.y < 10207) then
begin
writeln ('Uh Oh! We are outside of the Y axis area!');
result := true;
end;
end;
// Return true if there is an error
function WorldScreenError : Boolean;
begin
result := false;
if (FindColorTolerance (x, y, 2044518, MSX1, MSY1, MSX2, MSY2, 1)) then
begin
result := true;
Debug ('Found WorldScreenError! Oh no! Trying to fix...');
Mouse (380, 315, 3, 3, true);
wait (5000+random(2500));
if (FindColorTolerance (x, y, 2044518, MSX1, MSY1, MSX2, MSY2, 1)) then
begin
result := true;
Debug ('Error screen still open... WorldScreenError = true, running Exit;');
Exit;
end else
begin
Debug ('Attemping to click "click here to play"');
Mouse (380, 315, 3, 3, true);
wait (5000);
// Gotta figure something out here
end;
end;
end;
procedure CheckForConnectionErrors;
begin
If not LoggedIn then
begin
Mouse (319, 464, 3, 3, true); // Try clicking 'click here to play
if WorldScreenError then // See if we have a stupid connection error fuck up.
begin
Writeln ('WorldScreenError function returned true... fuck!');
end else
begin
writeln ('WorldScreenError function returned FALSE!');
end;
wait (50+random(250));
writeln ('Dangerous lag occured, waiting 20 (+ random 5) more seconds before abortion');
wait (20000+random(5000));
if not LoggedIn then
begin
writeln ('WARNING: Serious error occured, not logged in when supposed to be, TERMINATING');
PlaySound ('C:/beepcalm.wav');
wait (100);
TerminateScript;
end else
begin
writeln ('Problem seems to have resolved hopefully...');
end;
end;
end;
procedure Bank;
begin
WalkToBankWalkPath;
wait (700+random(1000));
IdentifyBank;
BankStuff;
wait (700+random(1000));
WalkToMineWalkPath;
end;
procedure CheckWorldsOrFindRandomWorld;
var worldToBeActive, RespawnTimeDifMarkTime : Integer;
begin
if CheckWorldTimes > 0 then // If true, means that a world is ready
begin
worldToBeActive := CheckWorldTimes;
ChangeWorld (worldToBeActive);
wait (1000+random(250));
WorldArrayCleanerSpecific (worldToBeActive);
Debug (IntToStr((RespawnTimeDif (CheckPlayerNumber(worldToBeActive))))); // Give us the number!
if ((RespawnTimeDif (CheckPlayerNumber(worldToBeActive))) < 30000) then
begin
MarkTime (RespawnTimeDifMarkTime);
Debug ('Respawn time is less than 30,000... waiting to see if ore is found');
repeat
wait (100+random(150));
until (TimeFromMark(RespawnTimeDifMarkTime) > (21000+random(5000))) or (FindRuneRockRight (x,y)) or (FindRuneRockTop (x,y)) // Until 30 seconds are up OR it finds rune rocks available
end;
Debug ('Waited longer than 30 seconds OR found rune');
worldToBeActive := 0; // Reset value for safety
end else
begin
Debug ('No worlds ready, lets change world');
ChangeRandomWorld;
end;
end;
// Main loop of the script :)
procedure MainLoop;
begin
WorldArrayCleanerGeneral; // Clean up crap worlds with bad/repeating data
wait (400+random(400)); // This allows for the lag at the beginning log in, which shows rune ore when there isnt...
CheckForConnectionErrors;
FindNonInventoryRandoms;
if CheckIfReallyLost then
begin
if WalkToMineWalkPath then
begin
writeln ('Was able to recover from being lost');
end else
begin
writeln ('Okay were REALLY lost for now, script aborting');
PlaySound ('C:/beepcalm.wav');
wait (100);
TerminateScript;
end;
end;
if InvCount > 26 then Bank;
AntiBan;
wait (50);
if MiningLoop then // Mine the rock, returns true if it found any rune rocks
begin
Debug ('Rock mined, adding world to roster!');
Debug ('Current world: '+ IntToStr(CurrentWorldActive)+ ' - Player count: '+ IntToStr (WorldPlayerCountNumber));
AddWorldToList (CurrentWorldActive, WorldPlayerCountNumber);
end else
begin
Debug ('No rune rock was found on this world');
end;
FindNormalRandoms;
OutputChart;
CheckWorldsOrFindRandomWorld;
end;
procedure DefineVariables;
begin
Smart_Members := MEMBERS;
Smart_Server := WORLD;
Smart_Signed := SIGNED;
Smart_SuperDetail := False;
timesBanked := 0;
scriptRunning := 0;
end;
begin
DefineVariables;
SetupSRL;
SetupReflectionEx(true);
SetupWorlds;
DeclarePlayers;
LogInPlayer;
MakeCompass ('n');
SetAngle (true);
SetRun (true);
ChangeRandomWorld;
Debug ('MAIN LOOP STARTING...');
MarkTime (scriptRunning);
repeat
MainLoop;
until (false) // Fix later
writeln ('Script terminated');
end.
{ INSTRUCTIONS:
1) Start yourself in varrock east bank
2) Be north of the 3rd bank booth from the left
3) If you are not, one of the failsafes might not work, if youre outside the bank, this will false active your player
4) Equip your axe.
5) This chops oaks and regular trees outside of varrock east
6) If you get a message saying its unsafe outside of varrock when you try and leave, turn noobmode to true, or else the script will probably screw up
Note: I have not tested it with being true and not having to worry about it
}
program MyWoodCutter;
{$i SRL/SRL/Misc/SMART.scar}
{$i SRL/SRL.scar}
{$i reflection/reflection.simba}
{$i srl/srl/misc/debug.scar}
// Global variables
var varrockRoadColor, ladderColor : Integer;
NoobMode : TBooleanArray;
/////////////////////////////
///////////////////////////// SETUP
/////////////////////////////
const
HowManyPlayersUsed = 2; // Fill this out!!
procedure DeclarePlayers;
begin
NumberOfPlayers(HowManyPlayersUsed); // How many players? 1 account = "1', 5 accounts = "5"...
CurrentPlayer := 0; // Start at player "zero" (aka player 1)
SetArrayLength (NoobMode, HowManyPlayersUsed);
Players[0].Name := '';//Your RuneScape UserName
Players[0].Pass := '';//Your RuneScape PassWord
Players[0].Nick := ''; //3-4 letters from name
Players[0].Active:= True;
Players[0].BoxRewards := ['Xp', 'mote', 'ostume', 'oins', 'aphire', 'ssence'];
Players[0].Pin := '';
NoobMode[0] := true; // Do you get a message when trying to leave varrock?
Players[1].Name := '';//Your RuneScape UserName
Players[1].Pass := '';//Your RuneScape PassWord
Players[1].Nick := ''; //3-4 letters from name
Players[1].Active:= True;
Players[1].BoxRewards := ['Xp', 'mote', 'ostume', 'oins', 'aphire', 'ssence'];
Players[1].Pin := '';
NoobMode[1] := true; // Do you get a message when trying to leave varrock?
{
Players[2].Name := '';//Your RuneScape UserName
Players[2].Pass := '';//Your RuneScape PassWord
Players[2].Nick := ''; //3-4 letters from name
Players[2].Active:= True;
Players[2].BoxRewards := ['Xp', 'mote', 'ostume', 'oins', 'aphire', 'ssence'];
Players[2].Pin := '';
NoobMode[2] := false; // Do you get a message when trying to leave varrock?
}
end;
/////////////////////////////
///////////////////////////// End setup
/////////////////////////////
procedure AntiBan;
begin
if not LoggedIn then Exit;
case Random(75) of
0: begin
BoredHuman;
writeln ('ANTIBAN: Did bored human');
end;
1: begin
RandomRClick;
writeln ('ANTIBAN: Did random right click');
end;
end;
end;
procedure SetUpSmartStuff;
begin
Smart_Server := 9;
Smart_Members:= False;
Smart_Signed := True;
Smart_SuperDetail := False;
end;
procedure ChopTrees;
var i, x, y : Integer;
TPA : TPointArray;
ATPA : T2DPointArray;
begin
if not LoggedIn then exit;
FindColorsTolerance(TPA, 2447948, MSX1, MSY1, MSX2, MSY2, 5); // Make TPA from trees
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPAEx(TPA, 40, 40); // Create 50x50 box ATPA's
for i:=0 to high(ATPA) do
begin
if MiddleTPAEx(ATPA[i], x, y) then // If find middle of the ATPA for clicking, then...
begin
MMouse(x, y, 0, 0);
If IsUpText('hop') Then
begin
Mouse (x, y, 2, 2, false);
wait (500);
ChooseOption ('hop');
Break;
end else
wait (525+random(325));
end;
end;
end;
function FindAndChopTrees : Boolean;
var tempInv, timeCounter, terminateMe : Integer;
begin
if not LoggedIn then exit;
FFlag (0);
result := true;
terminateMe := 0; // Just in case it wants to be cheap and not work...
repeat
terminateMe := 0;
tempInv := invcount;
FindNormalRandoms;
ChopTrees;
MarkTime (timeCounter);
repeat
wait (1800+random(533));
Antiban;
FindNormalRandoms;
if (TimeFromMark(timeCounter)> 15000) then
begin
Inc (terminateMe);
wait (2000+random(533));
writeln ('Warning: Termination count = '+inttostr(terminateMe)+'/8');
end;
if terminateMe > 7 then
begin
writeln ('Managed to get lost while chopping, nextplayer loading');
NextPlayer (false);
result := false;
Exit;
end;
until ((invcount > tempInv) or ((TimeFromMark(timeCounter)> 25000)))
FindNormalRandoms;
until (InvCount > 27)
end;
function SetDDTM (position : integer) : Integer;
var
dtmMainPoint: TDTMPointDef;
dtmSubPoints: Array [0..3] of TDTMPointDef;
TempTDTM: TDTM;
begin
if not LoggedIn then Exit;
case position of
0: begin
dtmMainPoint.x := 675;
dtmMainPoint.y := 58;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := varrockRoadColor;
dtmMainPoint.Tolerance := 0;
dtmSubPoints[0].x := 675;
dtmSubPoints[0].y := 58;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := varrockRoadColor;
dtmSubPoints[0].Tolerance := 0;
dtmSubPoints[1].x := 598;
dtmSubPoints[1].y := 31;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := varrockRoadColor;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 587;
dtmSubPoints[2].y := 51;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := varrockRoadColor;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 663;
dtmSubPoints[3].y := 54;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := varrockRoadColor;
dtmSubPoints[3].Tolerance := 0;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
1: begin
dtmMainPoint.x := 667;
dtmMainPoint.y := 84;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := varrockRoadColor;
dtmMainPoint.Tolerance := 0;
dtmSubPoints[0].x := 667;
dtmSubPoints[0].y := 84;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := varrockRoadColor;
dtmSubPoints[0].Tolerance := 0;
dtmSubPoints[1].x := 690;
dtmSubPoints[1].y := 87;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := varrockRoadColor;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 699;
dtmSubPoints[2].y := 64;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := varrockRoadColor;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 658;
dtmSubPoints[3].y := 85;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := varrockRoadColor;
dtmSubPoints[3].Tolerance := 0;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
2: begin
dtmMainPoint.x := 593;
dtmMainPoint.y := 84;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := 8685450;
dtmMainPoint.Tolerance := 0;
dtmSubPoints[0].x := 593;
dtmSubPoints[0].y := 84;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := 8685450;
dtmSubPoints[0].Tolerance := 0;
dtmSubPoints[1].x := 580;
dtmSubPoints[1].y := 78;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := 8685450;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 603;
dtmSubPoints[2].y := 79;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := 8685450;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 595;
dtmSubPoints[3].y := 77;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := 8685450;
dtmSubPoints[3].Tolerance := 0;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
end;
end;
{ My pride and joy, the 'mode' finder of colors:
This function in a nutshell takes a TPA, finds the colors on screen
and finds the mode (or most common) color. This is my way of autocoloring,
depending on how it goes... maybe I can even make it the autocolor standard?
I don't have a clue what SRL members has, and the code isn't really that
advanced... but a SRL junior can dream :), hopefully this code here shows you
that I'm an innovative scripter who when faced with challenges, can overcome
them. }
function TPAColorMode (TPA : TPointArray) : Integer;
var colArray, countArray : array of Integer;
i, j, commonCol : Integer;
maxFound : Boolean;
begin
if not LoggedIn then exit;
SetArrayLength (colArray, (High(TPA)+1)); //writeln ('Length colarray = ' +inttostr(High(colArray)));
SetArrayLength (countArray, (high(TPA)+1));
for i:=0 to High(colArray) do // Get colors from Tpoints
begin
colArray[i] := GetColor (TPA[i].x, TPA[i].y); //writeln (inttostr(colArray[i]));
end;
for i:=0 to High(colArray) do // Find mode
begin
for j:=0 to High(colArray) do
begin
if colArray[i] = colArray[j] then
begin
Inc (countArray[i]);
end;
end;
end; //writeln ('Outputting counts:'); for i:=0 to high(countArray) do begin writeln (inttostr(countArray[i])); end;
commonCol := 0;
maxFound := false;
for i:=0 to high(countArray)do // This finds the mode and returns it's value
begin //writeln ('ATTEMPTING i = '+inttostr(i));
for j:=0 to high(countArray) do
begin //writeln ('j = '+inttostr(j));
if countArray[j] > countArray[i] then
begin //writeln ('Found bigger number, '+inttostr(countArray[j])+' > '+ inttostr(countArray[i]));
Break;
end;
if (j = high(countArray)) and not maxFound then
begin
maxFound := true;
commonCol := colArray[i];
writeln ('Mode color: ' + inttostr(colArray[i]));
end;
end;
if maxFound then break;
end;
if maxFound then
begin
result := commonCol;
end else
begin
writeln ('No max color was found!');
result := -1;
end;
end;
procedure AutoColorVarrockRoad;
var vebTPA : TPointArray;
begin
if not LoggedIn then exit;
vebTPA := [Point(600, 33), Point(658,53), Point(568,47), Point(676, 51),
Point(618, 49)];
varrockRoadColor := TPAColorMode (vebTPA);
if varrockRoadColor < 0 then varrockRoadColor := 0;
end;
function AutoColorLadder (x1, y1, x2, y2 : integer) : Boolean;
var ladderTBox : TBox;
ladderTPA : TPointArray;
begin
ladderTBox := IntToBox (x1, y1, x2, y2);
ladderTPA := TPAFromBox (ladderTBox);
ladderColor := TPAColorMode (ladderTPA);
result := true;
if ladderColor < 0 then
begin
ladderColor := 0;
result := false;
end;
end;
// Finds the bank
function FindBankBoothObject(var fx, fy: Integer): Boolean;
var
arP, arAP: TPointArray;
arC, arUC: TIntegerArray;
ararP: T2DPointArray;
tmpCTS, i, j, arL, arL2: Integer;
P: TPoint;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 0.39);
if not(FindColorsTolerance(arP, 2839651, MSX1, MSY1, MSX2, MSY2, 2)) then
begin
Writeln('Failed to find the color, no object found.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
arUC := arC;
ClearSameIntegers(arUC);
arL := High(arUC);
arL2 := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 7.69) and (X <= 9.71) and (Y >= 8.06) and (Y <= 10.14) and (Z >= 3.23) and (Z <= 4.05) then
begin
for j := 0 to arL2 do
begin
if (arUC[i] = arC[j]) then
begin
SetLength(arAP, Length(arAP) + 1);
arAP[High(arAP)] := arP[j];
end;
end;
end;
end;
SortTPAFrom(arAP, Point(MSCX, MSCY));
ararP := SplitTPAEx(arAP, 85, 85);
arL := High(ararP);
for i := 0 to arL do
begin
if (Length(ararP[i]) < 10) then Continue;
P := MiddleTPA(ararP[i]);
MMouse(P.x, P.y, 5, 5);
Wait(100 + Random(100));
if (IsUpText('ank')) then
begin;
Result := True;
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
begin
Writeln('FindObject could not find object.');
Exit;
end;
GetMousePos(fx, fy);
end;
function InVEB : Boolean;
var mt : TTile;
begin
if not LoggedIn then exit;
result := true;
mt := GetMyPos;
writeln ('My tile; ('+inttostr(mt.x)+','+inttostr(mt.y)+')');
if (mt.x > 3258) or (mt.x < 3249) or (mt.y > 3424) or (mt.y < 3418) then
begin
writeln ('Reflection: We are not inside the bank!');
result := false;
end;
end;
function WalkOutOfBankDDTM : Boolean;
var myDTM, x, y : Integer;
begin
if not LoggedIn then exit;
result := false;
wait (122+random(195));
myDTM := SetDDTM (0);
if FindDTM (myDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
writeln ('Walking out of bank');
Mouse (x, y, 1, 1, true);
result := true;
end;
FreeDTM (myDTM);
end;
function WalkOutOfBankRadial : Boolean;
begin
if not LoggedIn then exit;
result := false;
if RadialWalk (varrockRoadColor, 42, 65, 70, 2, 2) then result := true;
end;
function WalkOutOfBankReflection : Boolean;
var walkTile : TTile;
begin
if not LoggedIn then exit;
result := false;
walkTile := Tile(3262,3428);
if WalkToTile (walkTile, 1, 0) then result := true;
end;
procedure WalkOutOfBank;
begin
if not LoggedIn then exit;
if not InVEB then
begin
writeln ('Were outside the bank, thats bad.');
NextPlayer (false);
end;
Antiban;
if not WalkOutOfBankDDTM then
begin
if not WalkOutOfBankRadial then
begin
if not WalkOutOfBankReflection then
begin
writeln ('Walking out of bank failed utterly somehow...');
NextPlayer (false);
end else writeln ('Reflection did the dirty work for us');
end else writeln ('Radial walk out of bank worked');
end else writeln ('DDTM walk out of bank worked');
FindNormalRandoms;
FFlag (0);
end;
procedure NoobModeAvert;
var x, y, b, c, time : Integer;
begin
if not LoggedIn then exit;
MarkTime(time);
b := BitmapFromString(13, 4, 'meJxNjMEJwDAMA7P/Cs2nziLBkAn' +
'0yTat8EEIGCFLZ0cqUn1qrP21xjxTb8rK2svE2g5p7eEhyRlXUdUx' +
'AJCcEB5jHfX8xqw/Pa1dIw==');
repeat
if (TimeFromMark (time) > 30000) then
begin
writeln ('Warning, could not find BMP, abort finding.');
Exit;
end;
if (FindBitmapToleranceIn (b, x, y, MCX1, MCY1, MCX2, MCY2, 5)) then
begin
writeln ('found');
Mouse (x, y, 2, 1, true);
Break;
end;
writeln ('not found');
wait (100);
until (false)
FreeBitmap (b);
wait (935+random(1393));
c := BitmapFromString(30, 5, 'meJx1kMEJwDAMA73/Gv14k9IRSpd' +
'pqOA4HBr0kBx0Ce7r6U9V1Zsfw+O8iUsrIm6JO82QGIpR6n/kzE3z' +
'7TDGmmw4KKIn8XDiMxxkw93l3VEcWDbD8RLMH9+IfwFCYgiR');
repeat
if (TimeFromMark (time) > 30000) then
begin
writeln ('Warning, could not find BMP, abort finding.');
Exit;
end;
if (FindBitmapToleranceIn (c, x, y, MCX1, MCY1, MCX2, MCY2, 5)) then
begin
writeln ('found');
Mouse (x, y, 2, 1, true);
Break;
end;
writeln ('not found');
wait (100);
until (false)
FreeBitmap (c);
end;
function WalkOutOfVarrockDDTM : Boolean;
var myDTM, x, y : Integer;
begin
result := false;
wait (150+random(100));
myDTM := SetDDTM (1);
if FindDTM (myDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
writeln ('Walking to varrock varrock outside');
Mouse (x, y, 1, 1, true);
result := true;
end;
FreeDTM (myDTM);
end;
function WalkOutOfVarrockRadial : Boolean;
begin
result := false;
if RadialWalk (varrockRoadColor, 70, 110, 60, 2, 2) then result := true;
end;
function WalkOutOfVarrockReflection : Boolean;
var walkTile : TTile;
begin
result := false;
walkTile := Tile(3278,3428);
if WalkToTile (walkTile, 1, 0) then result := true;
end;
procedure WalkOutOfVarrock;
begin
if not LoggedIn then exit;
if InVEB then
begin
writeln ('We got stuck in varrock east bank somehow...');
NextPlayer (false);
end;
Antiban;
wait (1500+random(500)); // Sometimes this DDTM fucks up...
if NoobMode[CurrentPlayer] then
begin
Mouse (691, 88, 3, 3, true); // This is needed for now...
wait (6151+random(1532));
NoobModeAvert;
end;
if not WalkOutOfVarrockDDTM and (not NoobMode[CurrentPlayer]) then
begin
if not WalkOutOfVarrockRadial and (not NoobMode[CurrentPlayer]) then
begin
if not WalkOutOfVarrockReflection and not NoobMode[CurrentPlayer] then
begin
writeln ('Walking out of Varrock failed utterly somehow...');
NextPlayer (false);
end else writeln ('Reflection did the dirty work for us [out of varrock]');
end else writeln ('Radial walk out of varrock worked');
end else writeln ('DDTM walk out of varrock worked');
FindNormalRandoms;
FFlag (0);
end;
function FindRoadSouth : Boolean;
var x, y : Integer;
begin
result := false;
MakeCompass ('n'); // Make sure it's north or were SOL...
if FindColor (x, y, varrockRoadColor, MMCX-3, MMCY, MMCX+3, MMCY+55) then
begin
writeln ('Road color is found south of us');
Mouse (x, y, 3, 3, true);
end;
end;
function WalkBackIntoVarrockRadial : Boolean;
begin
result := false;
if RadialWalk (varrockRoadColor, 250, 270, 60, 2, 2) then
begin
writeln ('Radial walk back into varrock found');
result := true;
end;
end;
function WalkToBankDDTM : Boolean;
var myDTM, x, y : Integer;
begin
result := false;
wait (150+random(100));
myDTM := SetDDTM (2);
if FindDTM (myDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
writeln ('Walking to front of bank');
Mouse (x, y, 1, 1, true);
result := true;
end;
FreeDTM (myDTM);
end;
procedure RealignToEnterVarrock;
begin
if WalkOutOfVarrockDDTM then // Attempt to get on middle path
begin
writeln ('DDTM worked, preparing to head back to the bank');
end else // If we don't find the path then...
begin
if not FindRoadSouth then // Attempt to see if the road is below us
begin
writeln ('Road south not found, error occured. Falsing player.');
NextPlayer (false);
end;
end;
FFlag (0);
wait (350+random(300));
end;
procedure EnterVarrock;
begin
if not WalkBackIntoVarrockRadial then
begin
writeln ('WalkToVarrockRadial failed, attempting reflection');
if not WalkOutOfBankReflection then
begin
writeln ('Walking error occured, terminating...');
NextPlayer (false);
end;
end;
FFlag (0);
wait (932+random(343));
end;
procedure GetIntoBank;
var walkTile : TTile;
begin
if not WalkToBankDDTM then
begin
writeln ('WalkToBankDDTM not found, attempting to find radial ladder');
if not RadialRoadWalk(ladderColor, 180, 270, 65, 2, 2) then
begin
writeln ('Could not find ladder color, attempting reflection');
walkTile := Tile(3253,3426);
if not WalkToTile (walkTile, 1, 0) then
begin
writeln ('Reflection couldnt get near bank, log out possible error.');
NextPlayer(false);
end;
end;
FFlag (0);
end else
// Reflection
writeln ('Using reflection to get near bank booth');
walkTile := Tile(3253,3420);
if not WalkToTile (walkTile, 1, 0) then
begin
writeln ('Reflection was not able to get inside the bank, error possibly.');
NextPlayer(false);
end;
end;
procedure BankStuff;
begin
If not LoggedIn then Exit;
wait (1000+random(534));
if PinScreen then
begin
InPin(Players[0].Pin)
end else
begin
writeln ('No pin screen found');
end;
if BankScreen then
begin
writeln ('Bank screen found, depositing stuff!');
wait (250+random(500));
if DepositAll then
begin
writeln ('All inventory deposited!!');
wait (250+random(500));
if CloseBank then
begin
writeln ('closed bank successfully!');
wait (250+random(500));
end;
end;
end;
end;
procedure OpenTheBank;
var x, y : Integer;
begin
if not LoggedIn then exit;
if FindBankBoothObject(x, y) then
begin
Mouse (x, y, 0, 0, false);
wait (500);
ChooseOption ('uic');
wait (934+random(314));
end else
begin
if SpiralMouse (x, y, MSX1, MSY1, MSX2, MSY2, 'ank', 15, 12) then
begin
Mouse (x, y, 1, 1, false);
wait (500);
ChooseOption ('uic');
wait (445+random(101));
end else writeln ('Warning, didnt find bank, leave player active in case hes in bank, then script can potentially fix itself.');
end;
end;
procedure PrepareScript;
begin
SetUpSmartStuff;
SetupSRL;
SetupReflectionEx(true);
DeclarePlayers;
LogInPlayer;
ActivateClient;
MakeCompass ('n');
SetAngle (true);
SetRun (true);
end;
// Main loop
var myCurrentTile : TTile;
begin
PrepareScript;
FindNormalRandoms; // In case we log into one
repeat
AutoColorVarrockRoad;
myCurrentTile := GetMyPos;
if (myCurrentTile = Tile(3253,3420)) then
begin
writeln ('We are on the proper spot, autocoloring ladder');
AutoColorLadder (633, 76, 638, 82)
end else
begin
writeln ('We are NOT in the right spot for ladder autocoloring... col = 0');
ladderColor := 0;
end;
WalkOutOfBank;
WalkOutOfVarrock;
wait (1324+random(354));
if FindAndChopTrees then
begin
RealignToEnterVarrock;
EnterVarrock;
GetIntoBank;
wait (1000);
OpenTheBank;
BankStuff;
wait (500+random(100));
NextPlayer (true);
end else // If FindChopTree returns false then:
begin
writeln ('Termination count exceeded, preparing next player...');
// In future if need be, design a super fail safe w/ reflection here
end;
if AllPlayersInactive then Exit;
until (false)
end.
{ MY MUSIC PROGRAM }
program GuitarGenerator;
{$i srl/srl.scar}
////////////////////////////////
// Edit your preferences here //
////////////////////////////////
const NumberOfStrings = 6;
var StringTuning : array [0..NumberOfStrings-1] of string; // Sorry, don't touch this
procedure PrepareYourGuitar;
begin
StringTuning[0] := 'D#'; // Highest string
StringTuning[1] := 'A#';
StringTuning[2] := 'F#';
StringTuning[3] := 'C#';
StringTuning[4] := 'G#';
StringTuning[5] := 'D#'; // Thickest lowest string
//StringTuning[6] := 'A#'; // 7th string
end;
//////////////////////////////
// Touch nothing below here //
//////////////////////////////
var NoteSpace, Note : TStringArray;
procedure PrepareEverything;
begin
PrepareYourGuitar;
Note := ['A','A#','B','C','C#','D','D#','E','F','F#','G','G#'];
NoteSpace := ['A ','A#','B ','C ','C#','D ','D#','E ','F ','F#','G ','G#'];
end;
function DetermineStartNote (note : String) : Integer;
begin
end;
procedure OutputFretboard;
var i, j, n, position : integer;
FretArray : Array [0..11] of string;
begin
for i:=0 to high(StringTuning) do // For every string do...
begin
//Determine position of the notes on the A-G scale, return n as that position (A = 0, G# = 11)
for j:=0 to 11 do
begin
if StringTuning[i] = Note[j] then // E = 7
begin
n := j;
//writeln ('StringTuning['+inttostr(i)+'] = '+ StringTuning[i]);
//writeln ('Note['+inttostr(j)+'] = '+ Note[j]);
end;
end;
// Now with our position in tact, prepare array
for j:=0 to 11 do
begin
FretArray[j] := NoteSpace[n]
Inc(n);
if n > 11 then n:=0;
end;
// Now write the array
writeln ('| '+FretArray[0]+' || '+FretArray[1]+' | '+FretArray[2]+' | '+FretArray[3]+' | '+FretArray[4]+' | '+FretArray[5]+' | '+FretArray[6]+' | '+FretArray[7]+' | '+FretArray[8]+' | '+FretArray[9]+' | '+FretArray[10]+' | '+FretArray[11]+' | '+FretArray[0]+' }');
end;
writeln ('-------------------------------------------------------------------');
writeln ('| 0 || 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |');
end;
begin
ClearDebug;
PrepareEverything;
OutputFretboard;
end.
{
Ultra Alcher
Set up the following:
1) Click your magic tab, now see at the bottom where it has highlighted white buttons
that say "Hide combat tab" for example (they may not be in white if you have them off)
2) Doing the above:
- HIDE combat spells
- HIDE skill spells
- LEAVE teleport spells enabled (white outline)
- LEAVE misc. spells enabled (white outline)
3) Load yourself up with the item in position 7
Inventory ex:
1 2 3 4
5 6 7 8
9 10...
4) have natures and fire staff equipped
5) stand in busy place like grand exchange to prevent bannage
6) run script
}
program UltrAlcher;
{.Include SRL/SRL/misc/Smart.SCAR}
{.Include SRL/SRL.SCAR}
var natures, xc, yc, n, abCount : Integer;
{---------------------------------------]
Setup
[---------------------------------------}
procedure DeclarePlayers;
begin
NumberOfPlayers(1); // How many players? 1 account = "1', 5 accounts = "5"...
CurrentPlayer := 0; // Start at player "zero" (aka player 1)
Players[0].Name := '';//Your RuneScape UserName
Players[0].Pass := '';//Your RuneScape PassWord
Players[0].Nick := ''; //3-4 letters from name
Players[0].Active:= True;
Players[0].BoxRewards := ['Xp', 'mote', 'ostume', 'oins', 'aphire', 'ssence'];
natures := 25000; // How many nature runes will you use?
end;
{---------------------------------------]
End Setup
[---------------------------------------}
procedure AlignClickingSpot;
begin
xc := 660 + random (9);
yc := 254 + random (4);
end;
procedure AntiBan;
begin
if not LoggedIn then Exit;
case Random(85) of
0: begin
wait(673+random(3000));
writeln ('Antiban performed');
Inc (abCount);
end;
1: begin
RandomMovement;
SetAngle(true);
writeln ('Antiban performed');
Inc (abCount);
AlignClickingSpot;
end;
2: begin
PickUpMouse;
writeln ('Antiban performed');
Inc (abCount);
AlignClickingSpot;
end;
4: begin
RandomRClick;
writeln ('Antiban performed');
Inc (abCount);
AlignClickingSpot;
end;
5: begin
ExamineInv;
writeln ('Antiban performed');
Inc (abCount);
AlignClickingSpot;
end;
6: begin
BoredHuman;
writeln ('Antiban performed');
Inc (abCount);
AlignClickingSpot;
end;
7: begin
wait(3000+random(3000));
writeln ('Antiban performed');
Inc (abCount);
end;
end;
end;
procedure PrimeVariables;
begin
n := 0;
abCount := 0;
end;
procedure NextPlayerSetup;
begin
if (HowManyPlayers > 1) then
NextPlayer(False);
end;
procedure SetUpSmartStuff;
begin
Smart_Server := 9;
Smart_Members:= False;
Smart_Signed := True;
Smart_SuperDetail := False;
end;
procedure AlchItemAndCaseChange;
begin
if not LoggedIn then Exit;
case Random(50) of
1: begin
xc := 660 + random (9);
yc := 254 + random (4);
writeln ('New xc/yc: ' + IntToStr (xc) + ' ' + IntToStr (yc) + '.');
end;
end;
Mouse (xc, yc, 0, 0, true);
wait (53+random(505));
Mouse (xc, yc, 0, 0, true);
wait (2866+random(652));
if not Gametab(tab_Magic) then
begin
Gametab(tab_Magic);
end;
end;
procedure ScriptReport;
begin
ClearDebug;
writeln ('[-----------------------]');
writeln ('[ Report ]');
writeln ('[-----------------------]');
writeln (' Antibans used = ' + IntToStr (abCount));
writeln (' Natured used = ' + IntToStr (n));
writeln (' Experience = ' + IntToStr ((n*65)));
end;
begin
SetUpSmartStuff;
SetupSRL;
DeclarePlayers;
LogInPlayer;
Gametab(tab_Magic);
PrimeVariables;
Disguise('Mozilla Firefox');
SetAngle (true);
MakeCompass ('n');
repeat
if not LoggedIn then Exit;
//writeln ('antiban');
AntiBan;
//writeln ('alch');
AlchItemAndCaseChange;
//writeln ('randoms');
FindNonInventoryRandoms;
//writeln ('n = ' + inttostr(n));
Inc(n);
wait (25+random(25));
until (n >= natures)
ScriptReport;
LogOut;
end.