Simba Code:
program VineVanquisher;
{------------------------------------------------------------------------------}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{------------------------------------------------------------------------------}
{Setup: }
{ 1. Have Simba set up with the latest SRL and Reflection }
{ 2. Download the script }
{ 3. Put your player near of one of the vine locations }
{ 4. Press play }
{ 5. Fill in the form }
{------------------------------------------------------------------------------}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{------------------------------------------------------------------------------}
{$DEFINE SMART}
{$DEFINE SRL5}
{$loadlib sps}
{$loadlib SSecurity}
{$IFDEF SRL5}
{$i srl/srl.simba}
{$i srl/srl/skill/woodcutting.simba}
{$ELSE}
{$i srl/srl.scar}
{$i srl/srl/misc\stats.simba}
{$i srl/srl/skill/woodcutting.scar}
{$ENDIF}
{$i VVForm.simba}
{$i sps/sps.simba}
//const
{---Start Setup---}
{World = 71;
Members = True;
Signed = True;
DisableSmartProggy = True; // Set to true if the smart painting slows your computer down
DropRingNests = False; // Set to true if you do not want ring nests
BreakMins = 12; // How long the break should last for
UseAntiban = True; // Do you want to use AntiBan
AntibanChance = 5; // Percentage chance of a anitban being performed
SwitchWorld = False; //Do you want the script to switch worlds
MaxPlayers = 50; // Switch world if this many players or more are at the vines
HowManyLoads = 500; // Switch world after how many clicks on the vines (this can go up fast so you might want to put a high number
SwitchTime = 20; // Switch world after how many mins
SRLStats_Username = ''; // Your SRL Stats ID (If you dont have one then just leave it as it is)
SRLStats_Password = ''; // Your SRL Stats Password (If you dont have one then just leave it as it is)
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := 'user';
Pass := 'pass';
Nick := 'nick';
Strings[0] := 've'; // Player location (letters must be lowercase)
Integers[0]:= 15; // Break after how many mins
Active := True;
end;
end;}
const
UseAutochecker = True;
ScriptVersion = '4.2'; // DO NOT CHANGE
Debug = True;
{----End Setup----}
var
i, x, y, p: Integer;
Hatchets: TIntegerArray;
HatchetNames, Requiredsymbols: TStringArray;
//Tiles, TileBox: TTileArray;
Tries, TimeSinceLastBreak, TimeSinceLastSwitch, LastSwitch, ScriptStarted: Integer;
CenterTile: TPoint;
FaceDirection: string;
{function Tile(x, y: Integer): TTile;
begin
Result.x:= x;
Result.y:= y;
end;}
function CheckLocation: Boolean; forward;
procedure Proggy(MainLoop: Boolean); forward;
procedure setupvars; forward;
procedure ChangePlayer(Active: Boolean);
begin
Proggy(False);
NextPlayer(Active);
SetupVars;
end;
procedure SetupVars;
begin
case Players[CurrentPlayer].Strings[0] of
'vn':begin
{SetArrayLength(Tiles, 4)
Tiles:= [Tile(3216, 3498), Tile(3217, 3498),
Tile(3218, 3498), Tile(3219, 3498)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(3208, 3502), Tile(3225, 3498)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(4685, 2640);
FaceDirection:= 'S';
SPS_Setup(RUNESCAPE_SURFACE, ['11_6']);
end;
've':begin
{
SetArrayLength(Tiles, 5)
Tiles:= [Tile(3233, 3456), Tile(3233, 3457),
Tile(3233, 3459), Tile(3233, 3460),
Tile(3233, 3461)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(3230, 3463), Tile(3233, 3454)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(4750, 2795);
FaceDirection:= 'E';
SPS_Setup(RUNESCAPE_SURFACE, ['11_6']);
end;
'fn':begin
{
SetArrayLength(Tiles, 7)
Tiles:= [Tile(3018, 3392), Tile(3017, 3392),
Tile(3016, 3392), Tile(3015, 3392),
Tile(3014, 3392), Tile(3012, 3392),
Tile(3011, 3392)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(3006, 3403), Tile(3024, 3320)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(3875, 3070);
FaceDirection:= 'S';
SPS_Setup(RUNESCAPE_SURFACE, ['9_7']);
end;
'fs':begin
{
SetArrayLength(Tiles, 7)
Tiles:= [Tile(3044, 3328), Tile(3045, 3328),
Tile(3046, 3328), Tile(3047, 3328),
Tile(3048, 3328), Tile(3049, 3328),
Tile(3050, 3328)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(3037, 3328), Tile(3055, 3320)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(3650, 3350);
FaceDirection:= 'N';
SPS_Setup(RUNESCAPE_SURFACE, ['9_8']);
end;
't':begin
{
SetArrayLength(Tiles, 5)
Tiles:= [Tile(2943, 3420), Tile(2943, 3419),
Tile(2943, 3418), Tile(2943, 3417),
Tile(2943, 3416)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(2936, 3427), Tile(2943, 3415)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(3590, 2970);
FaceDirection:= 'E';
SPS_Setup(RUNESCAPE_SURFACE, ['8_7']);
end;
'a':begin
{
SetArrayLength(Tiles, 5)
Tiles:= [Tile(2622, 3304), Tile(2622, 3305),
Tile(2622, 3307), Tile(2622, 3308),
Tile(2622, 3310)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(2622, 3312), Tile(2629, 3302)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(2230, 3590);
FaceDirection:= 'W';
SPS_Setup(RUNESCAPE_SURFACE, ['5_8']);
end;
'y':begin
{
SetArrayLength(Tiles, 6)
Tiles:= [Tile(2597, 3111), Tile(2596, 3111),
Tile(2595, 3111), Tile(2593, 3111),
Tile(2592, 3111), Tile(2591, 3111)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(2585, 3120), Tile(2602, 3111)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(2185, 4190);
FaceDirection:= 'S';
RequiredSymbols:= ['farming spot', 'transportation'];
SPS_Setup(RUNESCAPE_SURFACE, ['5_10']);
end;
'cw':begin
{
SetArrayLength(Tiles, 7)
Tiles:= [Tile(2423, 3068), Tile(2424, 3068),
Tile(2425, 3068), Tile(2426, 3068),
Tile(2428, 3068), Tile(2429, 3068),
Tile(2430, 3068)];
SetArrayLength(TileBox, 2)
TileBox:= [Tile(2415, 3068), Tile(2434, 3059)];
Box:= PointToBox(TileBox[0], TileBox[1]);
}
CenterTile:= Point(1250, 4115);
FaceDirection:= 'N';
SPS_Setup(RUNESCAPE_SURFACE, ['3_10']);
end;
end;
Wait(1000+Random(1000));
MarkTime(TimeSinceLastBreak);
MarkTime(TimeSinceLastSwitch);
if Players[CurrentPlayer].Integers[2]=0 then
begin
Players[CurrentPlayer].Integers[2]:= GetSkillLevel(Skill_WoodCutting);
Players[CurrentPlayer].Integers[5]:= Players[CurrentPlayer].Integers[2];
Players[CurrentPlayer].Integers[10]:= Players[CurrentPlayer].Integers[2];
end;
if Debug then
Writeln(Players[CurrentPlayer].Integers[2]);
if Players[CurrentPlayer].Integers[1]=0 then
begin
Players[CurrentPlayer].Integers[4]:= Players[CurrentPlayer].Integers[1];
end;
if Debug then
Writeln(Players[CurrentPlayer].Integers[1]);
//if CheckLocation then
//begin
{$IFDEF SRL5}
SetAngle(SRL_ANGLE_HIGH);
{$ELSE}
SetAngle(True);
{$ENDIF}
Wait(500 + Random(100));
MakeCompass(FaceDirection);
//end else
// ChangePlayer(False);
end;
function LoadDDTM(Which: Integer): Integer;
var
dtmMainPoint: TDTMPointDef;
dtmSubPoints: Array [0..7] of TDTMPointDef;
TempTDTM: TDTM;
begin
case Which of
0..6: begin
case Which of
0: begin
dtmMainPoint.Color := 1649722;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 1649722;
dtmSubPoints[0].Tolerance := 10;
end;
1: begin
dtmMainPoint.Color := 3815997;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 3815997;
dtmSubPoints[0].Tolerance := 10;
end;
2: begin
dtmMainPoint.Color := 6119010;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 6119010;
dtmSubPoints[0].Tolerance := 10;
end;
3: begin
dtmMainPoint.Color := 789517;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 789517;
dtmSubPoints[0].Tolerance := 10;
end;
4: begin
dtmMainPoint.Color := 4796721;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 4796721;
dtmSubPoints[0].Tolerance := 10;
end;
5: begin
dtmMainPoint.Color := 3489077;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 3489077;
dtmSubPoints[0].Tolerance := 10;
end;
6: begin
dtmMainPoint.Color := 5130300;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].Color := 5130300;
dtmSubPoints[0].Tolerance := 10;
end;
end;
dtmMainPoint.x := 484;
dtmMainPoint.y := 200;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmSubPoints[0].x := 484;
dtmSubPoints[0].y := 200;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[1].x := 474;
dtmSubPoints[1].y := 201;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := 131072;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 470;
dtmSubPoints[2].y := 215;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := 131072;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 470;
dtmSubPoints[3].y := 223;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := 131072;
dtmSubPoints[3].Tolerance := 0;
dtmSubPoints[4].x := 477;
dtmSubPoints[4].y := 205;
dtmSubPoints[4].AreaSize := 0;
dtmSubPoints[4].AreaShape := 0;
dtmSubPoints[4].Color := 131072;
dtmSubPoints[4].Tolerance := 0;
dtmSubPoints[5].x := 487;
dtmSubPoints[5].y := 204;
dtmSubPoints[5].AreaSize := 0;
dtmSubPoints[5].AreaShape := 0;
dtmSubPoints[5].Color := 131072;
dtmSubPoints[5].Tolerance := 0;
dtmSubPoints[6].x := 489;
dtmSubPoints[6].y := 198;
dtmSubPoints[6].AreaSize := 0;
dtmSubPoints[6].AreaShape := 0;
dtmSubPoints[6].Color := 131072;
dtmSubPoints[6].Tolerance := 0;
dtmSubPoints[7].x := 477;
dtmSubPoints[7].y := 196;
dtmSubPoints[7].AreaSize := 0;
dtmSubPoints[7].AreaShape := 0;
dtmSubPoints[7].Color := 131072;
dtmSubPoints[7].Tolerance := 0;
end;
7: begin
dtmMainPoint.x := 703;
dtmMainPoint.y := 289;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := 725072;
dtmMainPoint.Tolerance := 10;
dtmSubPoints[0].x := 703;
dtmSubPoints[0].y := 289;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := 725072;
dtmSubPoints[0].Tolerance := 10;
dtmSubPoints[1].x := 696;
dtmSubPoints[1].y := 286;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := 131072;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 701;
dtmSubPoints[2].y := 293;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := 131072;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 703;
dtmSubPoints[3].y := 299;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := 131072;
dtmSubPoints[3].Tolerance := 0;
dtmSubPoints[4].x := 690;
dtmSubPoints[4].y := 304;
dtmSubPoints[4].AreaSize := 0;
dtmSubPoints[4].AreaShape := 0;
dtmSubPoints[4].Color := 131072;
dtmSubPoints[4].Tolerance := 0;
dtmSubPoints[5].x := 686;
dtmSubPoints[5].y := 310;
dtmSubPoints[5].AreaSize := 0;
dtmSubPoints[5].AreaShape := 0;
dtmSubPoints[5].Color := 131072;
dtmSubPoints[5].Tolerance := 0;
dtmSubPoints[6].x := 709;
dtmSubPoints[6].y := 300;
dtmSubPoints[6].AreaSize := 0;
dtmSubPoints[6].AreaShape := 0;
dtmSubPoints[6].Color := 131072;
dtmSubPoints[6].Tolerance := 0;
dtmSubPoints[7].x := 709;
dtmSubPoints[7].y := 286;
dtmSubPoints[7].AreaSize := 0;
dtmSubPoints[7].AreaShape := 0;
dtmSubPoints[7].Color := 131072;
dtmSubPoints[7].Tolerance := 0;
end;
8: begin
dtmMainPoint.x := 873;
dtmMainPoint.y := 360;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := 1910060;
dtmMainPoint.Tolerance := 20;
dtmSubPoints[0].x := 873;
dtmSubPoints[0].y := 360;
dtmSubPoints[0].AreaSize := 0;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := 1910060;
dtmSubPoints[0].Tolerance := 20;
dtmSubPoints[1].x := 869;
dtmSubPoints[1].y := 354;
dtmSubPoints[1].AreaSize := 0;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := 131072;
dtmSubPoints[1].Tolerance := 0;
dtmSubPoints[2].x := 868;
dtmSubPoints[2].y := 359;
dtmSubPoints[2].AreaSize := 0;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := 131072;
dtmSubPoints[2].Tolerance := 0;
dtmSubPoints[3].x := 865;
dtmSubPoints[3].y := 366;
dtmSubPoints[3].AreaSize := 0;
dtmSubPoints[3].AreaShape := 0;
dtmSubPoints[3].Color := 131072;
dtmSubPoints[3].Tolerance := 0;
dtmSubPoints[4].x := 858;
dtmSubPoints[4].y := 373;
dtmSubPoints[4].AreaSize := 0;
dtmSubPoints[4].AreaShape := 0;
dtmSubPoints[4].Color := 131072;
dtmSubPoints[4].Tolerance := 0;
dtmSubPoints[5].x := 864;
dtmSubPoints[5].y := 375;
dtmSubPoints[5].AreaSize := 0;
dtmSubPoints[5].AreaShape := 0;
dtmSubPoints[5].Color := 131072;
dtmSubPoints[5].Tolerance := 0;
dtmSubPoints[6].x := 877;
dtmSubPoints[6].y := 359;
dtmSubPoints[6].AreaSize := 0;
dtmSubPoints[6].AreaShape := 0;
dtmSubPoints[6].Color := 131072;
dtmSubPoints[6].Tolerance := 0;
dtmSubPoints[7].x := 882;
dtmSubPoints[7].y := 364;
dtmSubPoints[7].AreaSize := 0;
dtmSubPoints[7].AreaShape := 0;
dtmSubPoints[7].Color := 131072;
dtmSubPoints[7].Tolerance := 0;
end;
end;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
procedure Setup;
begin
MainInitForm;
if (SRLStats_Username = '') then
SetupSRLStats(13, 'Anonymous', 'anon1337')
else
SetupSRLStats(13, SRLStats_Username, SRLStats_Password);
Smart_Members := MEMBERS;
Smart_Server := WORLD;
Smart_Signed := SIGNED;
SetupSRL;
//SRLPlayerForm(True, [], [{'Break after how many mins?'}], [{'Location'}], []);
//DeclarePlayers;
SetArrayLength(Hatchets, 9);
//Hatchets:= [1351, 1349, 1353, 1361, 1355, 1357, 1359, 6739, 13661];
for i:=0 to 8 do
Hatchets[i]:= LoadDDTM(i);
SetArrayLength(HatchetNames, 9);
HatchetNames:= ['Bronze Hatchet', 'Iron Hatchet', 'Steel Hatchet', 'Black Hatchet',
'Mithril Hatchet', 'Adamant Hatchet', 'Rune Hatchet', 'Dragon Hatchet',
'Inferno Adze'];
LoginPlayer;
{
SetArrayLength(ColorBox, 9);
ColorBox:= [IntToBox(MIX1, MIY1, MIX2, MIY2), IntToBox(617, MIY1+25, MIX2, MIY1+45),
IntToBox(651, MIY1+45, MIX2, MIY1+65), IntToBox(609, MIY1+65, MIX2, MIY1+85),
IntToBox(626, MIY1+85, MIX2, MIY1+105), IntToBox(664, MIY1+105, MIX2, MIY1+125),
IntToBox(639, MIY1+125, MIX2, MIY1+145), IntToBox(659, MIY1+145, MIX2, MIY1+165),
IntToBox(637, MIY1+165, MIX2, MIY1+185)];
SetArrayLength(Points, ((ColorBox[0].X2-ColorBox[0].X1)*(ColorBox[0].Y2-ColorBox[0].Y1)));
for x:=ColorBox[0].X1 to ColorBox[0].X2-1 do
for y:=ColorBox[0].Y1 to ColorBox[0].Y2-1 do
begin
Points[i]:= Point(x, y);
Inc(i);
end;
SMART_DrawDotsEx(True,Points, 3160642);
SMART_DrawText(MIX1+5, MIY1+5, 'UpChars', 'Shuttleu''s Vine Vanquisher', ClWhite);
}
MarkTime(ScriptStarted);
SetupVars;
end;
function IsChopping: Boolean;
begin
if (averagePixelShift(IntToBox(234, 100, 289, 185), 50, 250) > 200) then
Result:= True else
begin
Wait(1000);
if (averagePixelShift(IntToBox(234, 100, 289, 185), 50, 250) > 200) then
Result:= True else Result:= False;
end;
end;
function CheckLocation: boolean;
var
MyPos: TPoint;
begin
MyPos:= SPS_GetMyPos;
result:= (Distance(CenterTile.x, CenterTile.y, MyPos.x, MyPos.y)<10);
if not Result then
begin
if SPS_WalkToPos(CenterTile) then
Result:= True;
MakeCompass(FaceDirection);
Flag;
end;
writeln(result);
end;
function CheckHatchet: Boolean;
{var
Item: TInvItem;
Equiped: TEquipmentItem;}
begin
GameTab(Tab_Inv);
for i:= 8 downto 0 do
if FindDTM(Hatchets[i], x, y, 547, 202, 737, 466) then
begin
Writeln('Found '+HatchetNames[i]+' in backpack');
Result:= True;
Exit;
end;
GameTab(Tab_Equip);
for i:= 8 downto 0 do
if FindDTM(Hatchets[i], x, y, 547, 202, 737, 466) then
begin
Writeln('Found '+HatchetNames[i]+' in hand');
Result:= True;
Exit;
end else
Writeln('Could not find '+HatchetNames[i]+' in hand');
Writeln('You do not have a hatchet either in your backpack or weilded');
writeln('a');
Logout;
writeln('b');
ChangePlayer(False);
end;
function VineColor(location: string): Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
R, G, B: Integer;
X, Y, Z: Extended;
SpeedModifiers, XYZ: Array of Extended;
Colors, RGB: TIntegerArray;
begin
SetLength(SpeedModifiers, 2);
SetLength(XYZ, 6);
SetLength(Colors, 2);
SetLength(RGB, 6);
case location of
'vn': begin
SpeedModifiers:= [0.14, 0.16];
Colors:= [2705721, 5];
RGB:= [49, 69, 58, 89, 32, 50];
XYZ:= [2.95, 6.45, 3.80, 8.45, 2.00, 4.21];
end;
've': begin
SpeedModifiers:= [0.04, 0.06];
Colors:= [4091733, 9];
RGB:= [63, 108, 82, 140, 45, 78];
XYZ:= [5.68, 16.66, 7.45, 22.15, 3.71, 10.43];
end;
'fn': begin
SpeedModifiers:= [0.09, 0.15];
Colors:= [2639927, 6];
RGB:= [40, 71, 52, 92, 28, 51];
XYZ:= [2.39, 6.86, 3.09, 9.03, 1.61, 4.42];
end;
'fs': begin
SpeedModifiers:= [0.03, 0.06];
Colors:= [4554080, 10];
RGB:= [72, 120, 94, 155, 52, 87];
XYZ:= [7.46, 20.86, 9.84, 27.72, 4.86, 13.07];
end;
't': begin
SpeedModifiers:= [0.03, 0.05];
Colors:= [4751972, 10];
RGB:= [76, 124, 98, 161, 54, 90];
XYZ:= [8.19, 22.56, 10.76, 30.09, 5.248, 14.09];
end;
'a': begin
SpeedModifiers:= [0.10, 0.15];
Colors:= [2309936, 6];
RGB:= [33, 64, 43, 83, 23, 46];
XYZ:= [1.71, 5.56, 2.19, 7.30, 1.18, 3.62];
end;
'y': begin
SpeedModifiers:= [0.05, 0.16];
Colors:= [2508085, 7];
RGB:= [35, 71, 46, 92, 25, 51];
XYZ:= [1.91, 6.86, 2.46, 9.03, 1.33, 4.42];
end;
'cw': begin
SpeedModifiers:= [0.05, 0.06];
Colors:= [4818021, 7];
RGB:= [84, 119, 109, 154, 60, 86];
XYZ:= [10.14, 20.52, 13.40, 27.31, 6.45, 12.80];
end;
end;
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(SpeedModifiers[0], SpeedModifiers[1]);
FindColorsSpiralTolerance(259, 170, arP, Colors[0], 4, 4, 515, 337, Colors[1]);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToRGB(arC[i], R, G, B);
if (R >= RGB[0]) and (R <= RGB[1]) and (G >= RGB[2]) and (G <= RGB[3]) and (B >= RGB[4]) and (B <= RGB[5]) then
begin
ColorToXYZ(arC[i], X, Y, Z);
{$IFDEF SIMBA980}
x:= x*100;
y:= y*100;
z:= z*100;
{$ENDIF}
if (X >= XYZ[0]) and (X <= XYZ[1]) and (Y >= XYZ[2]) and (Y <= XYZ[3]) and (Z >= XYZ[4]) and (Z <= XYZ[5]) then
begin
Result := arC[i];
Break;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if Debug then
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function FindVines: Boolean;
var
VinePoints: TPointArray;
TheVineColor, i: Integer;
begin
if Debug then
Writeln('finding vines');
TheVineColor:= VineColor(Players[CurrentPlayer].Strings[0]);
if Debug then
Writeln(TheVineColor);
FindColorsSpiralTolerance(249, 130, VinePoints, TheVineColor, 4, 4, 515, 337, 1);
if Debug then
Writeln(Length(VinePoints));
if (Length(VinePoints)>0) then
begin
for i:= 5 to High(VinePoints) do
begin
if VinePoints[i].x<(229) then DecEx(VinePoints[i].x, 10);
if VinePoints[i].x>(289) then IncEx(VinePoints[i].x, 10);
MMouse(VinePoints[i].x, VinePoints[i].y, 0, 0);
Wait(500+Random(500));
if IsUpTextMultiCustom(['hop', 'Ivy']) then
begin
Mouse(VinePoints[i].x, VinePoints[i].y, 0, 0, True);
Result:= True;
Tries:= 0;
if Debug then
Writeln('FoundVines');
Break;
end else
begin
Mouse(VinePoints[i].x, VinePoints[i].y, 0, 0, False);
Wait(500+Random(500));
if OptionsExist(['Ivy'], False) then
begin
ChooseOptionMulti(['hop', 'vy']);
Result:= True;
Tries:= 0;
if Debug then
Writeln('FoundVines');
Break;
end else
ChooseOption('ancel');
end;
end;
end;
if Debug then
Writeln('finished finding vines');
end;
procedure ChopVines;
begin
if Debug then
Writeln('chopping vines');
if (not(FindVines)) then
Inc(Tries);
if (Tries > 20) then
begin
Writeln('Unable to find any vines :(');
Logout;
changePlayer(False);
end;
if Debug then
Writeln('finished chopping vines');
end;
procedure SRL_Stats;
var
TempLvl: Integer;
begin
TempLvl:= GetSkillLevel(Skill_WoodCutting);
Players[CurrentPlayer].Integers[7]:= TempLvl;
stats_IncVariable('Bird Nest', (Players[CurrentPlayer].Integers[3]-Players[CurrentPlayer].Integers[8])); {Bird Nests Found}
stats_Commit;
Players[CurrentPlayer].Integers[4]:= Players[CurrentPlayer].Integers[6];
Players[CurrentPlayer].Integers[5]:= Players[CurrentPlayer].Integers[7];
Players[CurrentPlayer].Integers[8]:= Players[CurrentPlayer].Integers[3];
end;
{
procedure SmartProggy;
var
x, y, z, i, h, m, s, TempLvl: Integer;
begin
if DisableSmartProggy then Exit;
for z:=1 to 8 do
begin
setarraylength(points, ((ColorBox[z].X2-ColorBox[z].X1)*(ColorBox[z].Y2-ColorBox[z].Y1)));
i:=0;
for x:=ColorBox[z].X1 to ColorBox[z].X2-1 do
for y:=ColorBox[z].Y1 to ColorBox[z].Y2-1 do
begin
points[i]:= Point(x, y);
inc(i);
end;
SMART_DrawDotsEx(False, points, 3160642);
end;
TempLvl:= R_GetSkillLevel(Skill_WoodCutting);
if Debug then
if Debug then
Writeln(TempLvl);
Players[CurrentPlayer].Integers[10]:= TempLvl;
ConvertTime(TimeFromMark(ScriptStarted), h, m, s);
SMART_DrawText(MIX1+15, MIY1+25, 'UpChars', 'Version: '+ScriptVersion, ClLime);
SMART_DrawText(MIX1+15, MIY1+45, 'UpChars', 'Running time: '+PadZ(IntToStr(h), 2)+':'+PadZ(IntToStr(m), 2)+':'+PadZ(IntToStr(s), 2), ClLime);
SMART_DrawText(MIX1+15, MIY1+65, 'UpChars', 'Player: '+Players[CurrentPlayer].nick, ClLime);
SMART_DrawText(MIX1+15, MIY1+85, 'UpChars', 'WC Level: '+IntToStr(Players[CurrentPlayer].Integers[2]), ClLime);
SMART_DrawText(MIX1+15, MIY1+105, 'UpChars', 'Vines Chopped: '+IntToStr((Players[CurrentPlayer].Integers[9]-Players[CurrentPlayer].Integers[1])/332), ClLime);
// SMART_DrawText(MIX1+15, MIY1+125, 'UpChars', 'Exp Gained: '+IntToStr(Players[CurrentPlayer].Integers[9]-Players[CurrentPlayer].Integers[1]), ClLime);
SMART_DrawText(MIX1+15, MIY1+145, 'UpChars', 'Levels Gained: '+IntToStr(Players[CurrentPlayer].Integers[10]-Players[CurrentPlayer].Integers[2]), ClLime);
SMART_DrawText(MIX1+15, MIY1+165, 'UpChars', 'Bird Nests: '+IntToStr(Players[CurrentPlayer].Integers[3]), ClLime);
end; }
Procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colour: integer);
var
mx, my, Pic, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
Canvas: TCanvas;
begin
SmartSetDebug(True);
GetClientDimensions(mx, my);
Pic := BitmapFromString(mx, my, '');
TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], UpChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 1, TTP[b].y + Numb + 1,131072);
FastSetPixel(Pic, TTP[b].x, TTP[b].y + Numb, Colour);
end;
end;
Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, Placement.x, Placement.y);
FreeBitmap(Pic);
end;
Procedure OnScreen;
Var
h, m, s, TempExp: Integer;
SmartLines: TStringArray;
begin
// TempExp:= GetXPBarTotal;
if Debug then
Writeln(TempExp);
ConvertTime(TimeFromMark(ScriptStarted), h, m, s);
SetArrayLength(SmartLines, 7);
SmartLines[0]:= 'Running time: '+PadZ(IntToStr(h), 2)+':'+PadZ(IntToStr(m), 2)+':'+PadZ(IntToStr(s), 2);
SmartLines[1]:= 'Woodcutting Level: '+IntToStr(Players[CurrentPlayer].Integers[10]);
SmartLines[2]:= 'Vines Chopped: '+IntToStr((Players[CurrentPlayer].Integers[9]-Players[CurrentPlayer].Integers[1])/332);
SmartLines[3]:= 'Levels Gained: '+IntToStr(Players[CurrentPlayer].Integers[10]-Players[CurrentPlayer].Integers[2]);
// SmartLines[4]:= 'Experience Gained: '+IntToStr(Players[CurrentPlayer].Integers[9]-Players[CurrentPlayer].Integers[1]);
// SmartLines[5]:= 'Experience/hr: '+IntToStr(round((Players[CurrentPlayer].Integers[9]-Players[CurrentPlayer].Integers[1])/ (h * 1.0 + m / 60.0 + s / 3600.0)));
SmartLines[6]:= 'Birds Nests: '+IntToStr(Players[CurrentPlayer].Integers[3]);
PrintOnSmart(['~Vine Vanquisher '+ScriptVersion+' (by Shuttleu)~'],Point(15,20),65280);
PrintOnSmart(SmartLines,Point(10,50),clWhite);
end;
procedure Proggy(MainLoop: Boolean);
var
TempExp, TempLvl, Player: Integer;
begin
if (p=100)or(not(MainLoop)) then
begin
TempLvl:= GetSkillLevel(Skill_WoodCutting);
// TempExp:= GetXPBarTotal;
//ClearDebug;
if Debug then
Writeln(TempExp);
if Debug then
Writeln(TempLvl);
if (TempExp > Players[CurrentPlayer].Integers[9]) then
Players[CurrentPlayer].Integers[9]:= TempExp;
if (TempLvl > Players[CurrentPlayer].Integers[10]) then
Players[CurrentPlayer].Integers[10]:= TempLvl;
Writeln('*********************************************');
Writeln('Shuttleu''s Vine Vanquisher Progress Report');
Writeln('*********************************************');
Writeln('Version: '+ScriptVersion);
Writeln('*********************************************');
Writeln('Ran for: '+ TimeRunning);
Writeln('*********************************************');
for Player:=0 to High(Players) do
begin
Writeln('Player: '+Players[Player].Nick);
Writeln('Woodcutting Level: '+IntToStr(Players[Player].Integers[10]));
// Writeln('Experience Gained: '+IntToStr(Players[Player].Integers[9]-Players[Player].Integers[1]));
Writeln('Levels Gained: '+IntToStr(Players[Player].Integers[10]-Players[Player].Integers[2]));
Writeln('Bird Nests Found: '+IntToStr(Players[Player].Integers[3]));
Writeln('Vines chopped: '+IntToStr((Players[Player].Integers[9]-Players[Player].Integers[1])/332));
Writeln('*********************************************');
Writeln('Location: '+ Players[Player].Strings[0]);
Writeln('*********************************************');
end;
p:=0;
SRL_Stats;
OnScreen;
end else
p:= p + 1;
end;
procedure TheAntiban;
var
Chance: Integer;
begin
Chance:= Random(101);
if Chance<=AntibanChance then
case Random(101) of
1..20: begin
HoverSkill('Woodcutting', false);
Wait(1000+Random(500));
GameTab(tab_Inv);
end;
21..40: PickUpMouse;
41..60: RandomMovement;
61..80: BoredHuman;
81..100: ExamineInv;
end;
ChooseOption('ancel');
MakeCompass(FaceDirection);
end;
procedure DoRandomCheck(MainLoop: Boolean);
begin
if Debug then
Writeln('Starting random check');
if MainLoop then
begin
if (y=25) then
begin
if FindNormalRandoms then
Wait(5000+Random(3000));
y:=0;
end else
y:= y + 1;
end else
if FindNormalRandoms then
Wait(5000+Random(3000));
if Debug then
Writeln('Finished random check');
end;
{
function AddGroundItemArrays(Array1, Array2: TGroundItemArray): TGroundItemArray;
var
x, y, z: Integer;
begin
x:= Length(Array1);
y:= Length(Array2);
SetArrayLength(Result, x+y);
for z:= 0 to High(Array1) do
Result[z]:= Array1[z];
for z:= 0 to y-1 do
Result[(x+y)-(y-z)]:= Array2[z];
end;
function GetItemsInBox(Box: TBox): TGroundItemArray;
var
x, y: Integer;
Temp: TGroundItemArray;
begin
for x:= Box.X1 to Box.X2 do
for y:= Box.Y1 to Box.Y2 do
begin
Temp:= R_GetGroundItemsAt(Tile(x, y));
Result:= AddGroundItemArrays(Result, Temp);
end;
end;
function MyFindBirdsNestColor: Boolean;
var
ChatLines: TStringArray;
i, x, y: Integer;
FoundNest: Boolean;
TheBox: TBox;
TilePosition: TPoint;
ThePlayer: TPlayer;
begin
if DropRingNests then R_DropAllItemsBy(5074);
ChatLines:= ChatBoxTextArray(255);
for i:=1 to 8 do
if (Pos('nest falls out of', ChatLines[i]) <> 0) then
begin
FoundNest:= True;
Break;
end;
for i:=i to 8 do
if (Pos('swing your hatchet', ChatLines[i]) <> 0) then
begin
FoundNest:= False;
Break;
end;
if FoundNest then
begin
ThePlayer:= R_GetMe;
case FaceDirection of
'N': TheBox:= IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y-1, ThePlayer.Tile.x+1, ThePlayer.Tile.y);
'E': TheBox:= IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y-1, ThePlayer.Tile.x, ThePlayer.Tile.y+1);
'S': TheBox:= IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y, ThePlayer.Tile.x+1, ThePlayer.Tile.y+1);
'W': TheBox:= IntToBox(ThePlayer.Tile.x, ThePlayer.Tile.y-1, ThePlayer.Tile.x+1, ThePlayer.Tile.y+1);
end;
for x:=TheBox.X1 to TheBox.X2 do
for y:=TheBox.Y1 to TheBox.Y2 do
begin
TilePosition:= R_TileToMS(Tile(x, y), 0);
Mouse(TilePosition.x, TilePosition.y, 0, 0, False);
if R_OptionExists('ird') then
begin
ChooseOptionMulti(['ake', 'ird']);
Result:= True;
Exit;
end else
ChooseOption('Cancel');
end;
end;
end;
function MyFindBirdsNest: Boolean;
var
GroundItems: TGroundItemArray;
i: Integer;
BirdNestLoc: TTile;
ThePlayer: TPlayer;
begin
if Debug then
Writeln('Searching for birds nest');
ThePlayer:= R_GetMe;
case FaceDirection of
'N': GroundItems:= GetItemsInBox(IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y-1, ThePlayer.Tile.x+1, ThePlayer.Tile.y));
'E': GroundItems:= GetItemsInBox(IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y-1, ThePlayer.Tile.x, ThePlayer.Tile.y+1));
'S': GroundItems:= GetItemsInBox(IntToBox(ThePlayer.Tile.x-1, ThePlayer.Tile.y, ThePlayer.Tile.x+1, ThePlayer.Tile.y+1));
'W': GroundItems:= GetItemsInBox(IntToBox(ThePlayer.Tile.x, ThePlayer.Tile.y-1, ThePlayer.Tile.x+1, ThePlayer.Tile.y+1));
end;
for i:=0 to High(GroundItems) do
if (GroundItems[i].ID > 5069) and (GroundItems[i].ID < 5076) then
begin
writeln('found birds nest');
writeln('picking up birds nest');
BirdNestLoc:= R_TileToMS(GroundItems[i].Tile, 0);
Mouse(BirdNestLoc.x, BirdNestLoc.y, 0, 0, False);
Wait(250+Random(500));
if ChooseOptionMulti(['ake', 'ird', 'est']) then
begin
Result:= True;
writeln('picked up birds nest :)');
Break;
end;
end;
if Debug then
Writeln('Finished searching for birds nest');
end;
{*******************************************************************************
procedure AutoUpdateMe;
By: Harry & Shuttleu
Description: Checks for the latest version of the script and if a newer version
is found it will update the script.
*******************************************************************************}
procedure AutoUpdateMe;
var ClientUp, Neifile:integer;
OnlineVersion, NewScript, NeiFeilNennen:string;
begin
if UseAutoChecker then
begin
writeln('Checking for script updates...');
ClientUp := InitializeHTTPClient(False, False);
SetHTTPUserAgent(ClientUp,'Simba ' + ScriptVersion);
OnlineVersion := GetHTTPPage(ClientUp,'http://shuttleu-simba-scripts.googlecode.com/git/vinevanquisher/vinevanquisher-version.txt');
writeln(onlineversion);
writeln(ScriptVersion)
FreeHTTPClient(ClientUp);
if (Length(trim(OnlineVersion)) = 3) and (trim(OnlineVersion) > ScriptVersion) then
begin
writeLn('Newer script version online!');
writeLn('Autoupdating to newer version.');
ClientUp := InitializeHTTPClient(False,False);
SetHTTPUserAgent(ClientUp,'Simba');
NewScript := GetHTTPPage(ClientUp,'http://shuttleu-simba-scripts.googlecode.com/git/vinevanquisher/vinevanquisher-current.simba');
FreeHTTPClient(ClientUp);
NeiFeilNennen := ScriptPath + 'VineVanquisher v'+trim(OnlineVersion)+' by Shuttleu.simba';
Neifile := Rewritefile(NeiFeilNennen, true);
try
WriteFileString(Neifile, NewScript);
except
begin
writeLn('Fatal error writing to '+NeiFeilNennen+'!!');
terminatescript;
end;
end;
CloseFile(Neifile);
writeLn('New script downloaded and saved at '+NeiFeilNennen+' !! Please use this!');
TerminateScript;
end else
begin
if (Length(trim(OnlineVersion)) <> 3) then
WriteLn('Version checking failed (debug: length was not equal), you might be outdated.')
else writeLn('You have the latest version of the script!');
end;
writeln('Checking for script updates...');
ClientUp := InitializeHTTPClient(False, False);
SetHTTPUserAgent(ClientUp,'Simba ' + ScriptVersion);
OnlineVersion := GetHTTPPage(ClientUp,'http://shuttleu-simba-scripts.googlecode.com/git/vinevanquisher/VVForm-version.txt');
writeln(onlineversion);
writeln(FormVersion)
FreeHTTPClient(ClientUp);
if (Length(trim(OnlineVersion)) = 3) and (trim(OnlineVersion) > FormVersion) then
begin
writeLn('Newer script version online!');
writeLn('Autoupdating to newer version.');
ClientUp := InitializeHTTPClient(False,False);
SetHTTPUserAgent(ClientUp,'Simba');
NewScript := GetHTTPPage(ClientUp,'http://shuttleu-simba-scripts.googlecode.com/git/vinevanquisher/VVForm.simba');
FreeHTTPClient(ClientUp);
NeiFeilNennen := IncludePath + 'VVForm.simba';
Neifile := Rewritefile(NeiFeilNennen, true);
try
WriteFileString(Neifile, NewScript);
except
begin
writeLn('Fatal error writing to '+NeiFeilNennen+'!!');
terminatescript;
end;
end;
CloseFile(Neifile);
writeLn('New form downloaded!! Please restart the script!');
TerminateScript;
end else
begin
if (Length(trim(OnlineVersion)) <> 3) then
WriteLn('Version checking failed (debug: length was not equal), you might be outdated.')
else writeLn('You have the latest version of the script!');
exit;
end;
end else
WriteLn('!!!!! Not checking for latest version, you may be outdated!');
end;
{
procedure SwitchTheWorld;
var
ThePlayers: array of TPlayer;
a, b, i: Integer;
begin
if SwitchWorld then
begin
ThePlayers:= R_GetAllPlayers;
for a:=0 to High(ThePlayers) do
for b:=0 to High(Tiles) do
if (ThePlayers[a].Tile = Tiles[b]) then
Inc(i);
if ((i >= MaxPlayers) or ((LastSwitch div HowManyLoads)=1) or (TimeFromMark(TimeSinceLastSwitch) > (SwitchTime*60*1000))) then
if ExitToLobby then
begin
SelectWorld(RandomWorld(True, False));
LoginPlayer;
LastSwitch:= 0;
MarkTime(TimeSinceLastSwitch);
SetupVars;
end;
end;
end;
{By Brak}
Procedure TurnAidOff;
begin
if Players[CurrentPlayer].Booleans[0] then Exit;
if TabExists(tab_Options) then
if GameTab(tab_Options) then
begin
if 142 = CountColorTolerance(1711226, 639, 456, 690, 502, 5) then
exit
else
begin
MouseBox(650,472,675,495,3);
if WaitUpTextMulti(['ccep', 'cept', ' Aid'], 500) then
ClickMouse2(True);
end;
end;
Gametab(tab_Inv);
Players[CurrentPlayer].Booleans[0]:= True;
end;
procedure DoBreak;
var
BreakTime, T, h, m, s: Integer;
begin
if (TimeFromMark(TimeSinceLastBreak) > ((Players[CurrentPlayer].Integers[0]*60*1000)+Random(5*60*100))) then
if (PlayersActive > 1) then
begin
Proggy(False);
if Debug then
Writeln('Starting Break');
if Debug then
Writeln(PlayersActive);
ChangePlayer(True);
if Debug then
Writeln('Finished Break');
MarkTime(TimeSinceLastBreak);
end else
begin
Proggy(False);
if Debug then
Writeln('Starting Break');
BreakTime:= ((BreakMins*60*1000)+Random(5*60*1000));
Logout;
MarkTime(T);
repeat
Wait(1000);
ConvertTime(BreakTime-TimeFromMark(T), h, m, s);
Status('Breaktime left: '+PadZ(IntToStr(h), 0)+':'+PadZ(IntToStr(m), 0)+':'+PadZ(IntToStr(s), 0));
until(TimeFromMark(T)>BreakTime);
if Debug then
Writeln('Finished Break');
LoginPlayer;
SetupVars;
MarkTime(TimeSinceLastBreak);
end;
end;
procedure ScriptTeminate;
begin
for i:=0 to 8 do
FreeDTM(Hatchets[i]);
end;
function MyFindBirdsNest: Boolean;
var
x, y: Integer;
ChatBoxStuff: string;
begin
if Debug then Writeln('Looking for a birds nest');
x:= 260;
y:= 211;
ChatBoxStuff:= GetChatBoxText(8, 255);
if Debug then Writeln(ChatBoxStuff);
if (Pos('A bird', ChatBoxStuff)<>0) then
begin
if Debug then Writeln('Found the red text');
if FindObjCustom(x, y, ['ake B', 'Bird', 'nest'], [2767422, 2961972, 3818051, 2833729, 2306100, 3949638], 5) then
begin
if Debug then Writeln('Found a birds nest!');
Mouse(x, y, 0, 0, True);
Result:= True;
end;
end;
if Debug then Writeln('Finished looking for a birds nest');
end;
begin
AutoUpdateMe;
Setup;
CheckHatchet;
repeat
OnScreen;
if (not(IsChopping)) then
begin
OnScreen;
TurnAidOff;
DoBreak;
DoRandomCheck(False);
ChopVines;
//SRL_Stats;
//SwitchTheWorld;
Inc(LastSwitch);
end;
Wait(1000+Random(2000));
if MyFindBirdsNest then
begin
Inc(Players[CurrentPlayer].Integers[3]);
FindVines;
end;
DoRandomCheck(True);
if UseAntiban then
TheAntiban;
Proggy(True);
until(False);
end.
{------------------------------------------------------------------------------}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{******************************************************************************}
{------------------------------------------------------------------------------}
{-------------------------------Change log-------------------------------------
V4.2 - Fixed bird nest bug (wouldnt chop ivy again if there was someone already chopping)
V4.1 - Fixed birds nest finding
Fixed another vine searching bug
Small Antiban fix
V4.0 - Memory leak fix
Added encryption to the ini file
V3.9 - Hopefull finally fixed Inferno Adze
V3.8 - Added a simba bug fix
V3.7 - Attempt to fix a out of range error
V3.6 - Added Inferno Adze support
V3.5 - Removed SPS until SPS 2.0 is out
V3.4 - Memory Fixes
V3.2 - Hopefully fixed the vine searching bug
V3.2 - Fixed a bug with taverly
V3.1 - Fixed a bug with ve and vn
Fixed the XP counter
V3.0 - Completely converted to colour to survive the "bot-nuke"
V2.6 - Fixed updater and SMART Painting
V2.5 - Redone SMART Painting
V2.4 - Updated to R2
Switched to git
V2.3 - Slight change to breaking
Changed back to full reflection nest finding
V2.2 - Fixed a small problem with the stats decleration
V2.1 - Added Harrys auto updater/version checker
V2.03 - Renamed a couple of functions to make it fully working again
V2.02 - Updated for a change in Reflection
V2.01 - Updated for the new SRL Stats
V2 - Added SMART Proggy
Improved bird nest finding
Added form
All features I wanted are now added
V1.99 - Added Color/Reflection birdsnest finding (still needs testing)
Added switching world after x mins/loads or if players is more than set amount
Fixed breaking bug
Can now select percentage of antiban
Can set it to ignore outdated hooks
Added check to make sure Accept Aid is turned off
Added custom vars for SRL Stats
Im sure there were a couple more but i cant remember :p
V1.91 - Forgot to incorperate breaking correctly
V1.9 - Added Breaks and Antiban
V1.81 - Removed reflection bird nest finderf due to memory leaks in SMART
V1.8 - Added Varrock Castle East and renamed Varrock to Varrock Castle North
Edited the way the player is set up
Made and now using my own bird nest finder that acctually works
V1.72 - Replaced level and experience finding with reflection
Added birdnest support
V1.71 - Couple of small tiny edits
V1.7 - Added extra info to proggy and made fully multiplayer
V1.6 - Improved vine finding and fixed a little Animation bug
V1.53 - Had to remove the stats info and made it open the script thread when it is outdated
V1.52 - Changed the height it uses and fixed the walking error
V1.51 - Added location to progress report
V1.5 - Changed MakeCompass from Reflection to SRL
V1.4 - Added SRL Stats
Added version checker
V1.3 - Added all vine locations
V1.2 - Dont have to stand against the wall to start
V1.1 - Added AntiRandoms
V1.0 - First public beta release
}