SCAR Code:
{$Define SMART} //Comment out if you dont want to use SMART
program New;
{$IfDef SMART}
{.include SRL\SRL\Misc\Smart.scar}
{$EndIf}
{.include srl/srl.scar}
{.include srl/srl/misc/quickchat.scar}
const
Switch_Worlds = True; //If you want to randomly switch worlds
Signed_SMART = True; //If you want to use signed SMART
Members_World = False; //If you want to auto on a members world
SMART_World = 155; //The world SMART will load up
Print_Proggy_Debug_Canvas = True; //If you want to print the proggy on SMART
type
Tree = record
UpText: TStringArray;
Colors: TIntegerArray;
Hue: TExtendedArray;
Sat: TExtendedArray;
Tol: TIntegerArray;
end;
var
X, Y: Integer;
SmartCrash: Boolean;
Willow: Tree;
procedure DeclarePlayers;
begin
HowManyPlayers := 3; //How many plays you want to auto on
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name :=''; //Character Name
Pass :=''; //Character Pass
Nick :=''; //Nickname 3 - 4 Letter's of char name
Active := False; //To be ran in the script?
BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
end;
with Players[1] do
begin
Name :=''; //Character Name
Pass :=''; //Character Pass
Nick :=''; //Nickname 3 - 4 Letter's of char name
Active := True; //To be ran in the script?
BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
end;
with Players[2] do
begin
Name :=''; //Character Name
Pass :=''; //Character Pass
Nick :=''; //Nickname 3 - 4 Letter's of char name
Active := True; //To be ran in the script?
BoxRewards := ['mote', 'ostume', 'XP', 'Gem', 'ithril', 'oal']; //Reward to choose from a random box
end;
end;
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{
//----------------------------------------------------------------------------\\
\\-------DO NOT TOUCH ANYTHING BELOW UNLESS YOU KNOW WHAT YOU'RE DOING--------//
//----------------------------------------------------------------------------\\
}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
function PostVars: Boolean;
var
Dbase: string;
Client, I, Logs, Trees, Loads, Responds: Integer;
XP: Extended;
begin
for I := 0 to HowManyPlayers - 1 do
begin
Logs := Logs + Players[i].Integers[2];
Trees := Trees + Players[i].Integers[1];
Loads := Loads + Players[i].Integers[3];
XP := XP + (67.5 * Players[i].Integers[2]);
Responds := Responds + Players[i].Integers[5];
end;
Client := InitializeHTTPClient(False, False);
ClearPostData(Client);
Wait(10);
AddPostVariable(Client, 'Logs', IntToStr(Logs));
AddPostVariable(Client, 'Hours', FloatToStr(Round(GetTimeRunning/1000/60/60)));
AddPostVariable(Client, 'Trees', IntToStr(Trees));
AddPostVariable(Client, 'Loads', IntToStr(Loads));
AddPostVariable(Client, 'XP', FloatToStr(XP));
AddPostVariable(Client, 'Responds', IntToStr(Responds));
AddPostVariable(Client, 'Table', 'WillChop');
Dbase := PostHTTPPageEx(Client, 'http://stats.trilez.comuf.com/upload.php');
FreeHTTPClient(Client);
Result := true;
end;
procedure ScriptTerminate;
begin
SRLRandomsReport;
PostVars;
end;
function T_LoggedIn: Boolean;
var
I: Integer;
TheStatus: string;
begin
TheStatus := GetStatus;
for I:= 1 to 60 do
begin
if (GetColor(567, 135) = 9288161) then
begin
if (GetStatus <> TheStatus) then Status(TheStatus);
Result := True
SmartCrash := False;
Exit;
end else
if (GetColor(245, 455) = 2578755) or (GetColor(8, 478) = 4746611) then
begin
SmartCrash := False;
Exit;
end;
if (I = 60) then SmartCrash := True;
if SmartCrash then Exit;
Wait(500);
end;
Wait(10);
end;
procedure Intro;
var
I: Integer;
begin
ChangeReportWidth(300);
for I := 1 to 34 do
begin
Clearreport;
AddtoReport(Left(' _ _ _ _ _ _ _ _ _ _ _ _ _', I));
AddtoReport(Left('|_ _|| |_| ||_|| | | O_||__ /', I));
AddtoReport(Left(' | | | _ \ | || |_ | \_ / /_', I));
AddtoReport(Left(' |_| |_| \_\|_||_ _||_ _| /_ _ |', I));
Wait(40);
end;
for I := 1 to 34 do
begin
ClearReport;
AddtoReport(' _ _ _ _ _ _ _ _ _ _ _ _ _');
AddtoReport('|_ _|| |_| ||_|| | | O_||__ /');
AddtoReport(' | | | _ \ | || |_ | \_ / /_');
AddtoReport(' |_| |_| \_\|_||_ _||_ _| /_ _ |');
AddtoReport(Left('Will Chop by TRiLeZ', I));
Wait(RandomRange(20,200));
end;
Disguise('Will Chop by TRiLeZ');
Status('Running...');
end;
Procedure DebugTPA(TP: TPointArray; DC, Colour: integer);
var
mx, my, pic, OldDC, I: integer;
begin
SmartSetDebug(True);
GetClientDimensions(mx,my);
Pic:= BitmapFromString(mx,my,'');
OldDC := GetTargetDC;
SetTargetDC(DC);
for i := 0 to High(TP) do
FastSetPixel(Pic, TP[i].x, TP[i].y, Colour);
CopyCanvas(GetBitmapCanvas(Pic), GetClientCanvas, 0, 0, mx, my, 0, 0, mx, my);
FreeBitmap(Pic);
SetTargetDC(OldDC);
end;
procedure DebugProggy(TP: TStringArray; DC, Colour, Shadow: integer);
var
MX, MY, Pic, OldDC, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
begin
SmartSetDebug(True);
GetClientDimensions(mx,my);
Pic:= BitmapFromString(mx,my,'');
OldDC := GetTargetDC;
SetTargetDC(DC);
TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], FriendChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 10 + 1, TTP[b].y + 10 + Numb + 1, Shadow);
FastSetPixel(Pic, TTP[b].x + 10, TTP[b].y + 10 + Numb, Colour);
end;
end;
CopyCanvas(GetBitmapCanvas(Pic), GetClientCanvas, 0, 0, mx, my, 0, 0, mx, my);
FreeBitmap(Pic);
SetTargetDC(OldDC);
end;
procedure ProgressReport;
var
I: Integer;
begin
if (not T_LoggedIn) then Exit;
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
ClearDebug;
SRLRandomsReport;
if (HowManyPlayers = 1) then
begin
Writeln('****************************************************************');
Writeln('Will Chop by TRiLeZ');
Writeln('****************************************************************');
Writeln('Running Time: ' + TimeRunning);
Writeln('Willow Trees Cut: ' + IntToStr(Players[CurrentPlayer].Integers[1]));
Writeln('Loads Dropped: ' + IntToStr(Players[CurrentPlayer].Integers[3]));
Writeln('Logs Gained: ' + IntToStr(Players[CurrentPlayer].Integers[2]));
Writeln('XP Gained: ' + FloatToStr(67.5 * Players[CurrentPlayer].Integers[2]));
Writeln('XP/H: ' + FloatToStr(Round((67.5 * Players[CurrentPlayer].Integers[2]
* 60 * 60 * 1000) / Players[i].Integers[6])));
Writeln('Responded: ' + IntToStr(Players[CurrentPlayer].Integers[5]) + ' Times');
Writeln('****************************************************************');
end else
if (HowManyPlayers >= 2) then
begin
Writeln('|***********************************************************************|');
Writeln(Padr('| Will Chop by TRiLeZ ', 72) + '|');
Writeln('|***********************************************************************|');
Writeln('| Nick | Trees | Loads | Logs | XP | XP/H | Responds | Time Running |');
Writeln('|******** ******* ******* ****** ****** ****** ********** **************|');
for I := 0 to HowManyPlayers - 1 do
begin
if (Players[i].Integers[2] = 0) then
Players[i].Integers[7] := 0
else
Players[i].Integers[7] := Round((67.5 * Players[i].Integers[2] * 60 * 60 * 1000) / Players[i].Integers[6]);
Writeln('|' + Padr(Players[i].Nick, 8) + '|' + Padr(IntToStr(Players[i].Integers[1]), 7) +
'|' + Padr(IntToStr(Players[i].Integers[3]), 7) + '|' +
Padr(IntToStr(Players[i].Integers[2]), 6) + '|' +
Padr(IntToStr(Round(67.5 * Players[i].Integers[2])), 6) + '|' +
Padr(IntTostr(Players[i].Integers[7]), 6) + '|' +
Padr(IntToStr(Players[i].Integers[5]), 10) + '|' +
Padr(' ' + MsToTime(Players[i].Integers[6], Time_Bare), 14) + '|');
end;
Writeln('|***********************************************************************|');
Writeln(Padr('| Total Running Time: ' + TimeRunning, 72) + '|');
Writeln('|***********************************************************************|');
end;
{$IfDef SMART}
if Print_Proggy_Debug_Canvas then
DebugProggy([IntToStr(Players[CurrentPlayer].Integers[1]) + ' Willow Trees Cut',
IntToStr(Players[CurrentPlayer].Integers[3]) + ' Loads Dropped',
IntToStr(Players[CurrentPlayer].Integers[2]) + ' Logs Gained',
FloatToStr(Round(67.5 * Players[CurrentPlayer].Integers[2])) + ' XP Gained',
FloatToStr(Round((67.5 * Players[CurrentPlayer].Integers[2]
* 60 * 60 * 1000) / Players[CurrentPlayer].Integers[6])) + ' XP Per Hour'], SmartGetDebugDC, clWhite, 1644052);
{$EndIf}
end;
function SayTheLevel(Level: string): boolean;
var
MyLevel: Integer;
begin
if (not T_LoggedIn) then Exit;
MyLevel := GetSkillLevel(Level);
case Random(4) of
0: TypeSend(IntToStr(MyLevel));
1: TypeSend(AddMistakes('My ' + Level + 'level is ', 25) +
IntToStr(MyLevel));
2: TypeSend(AddMistakes('I have ', 25) +
IntToStr(MyLevel) + ' ' + Level);
3: QCSayLevel(Level);
end;
Result := True;
end;
procedure AutoRespond;
var
I, CX, CY: Integer;
LastLineText, Name, Chat: string;
QuickChat, RespondType1, RespondType2, RespondType3, RespondType4: TStringArray;
begin
if (not T_LoggedIn) then Exit;
if FindText(cx, cy, 'From', SmallChars, 2, 319, 35, 340) then
begin
Mouse(cx, cy, 0, 0, false);
Wait(RandomRange(300, 600));
if ChooseOption('Message') then
begin
Wait(RandomRange(600, 1000));
case Random(8) of
0: TypeSend(AddMistakes('Im busy, I cant talk right now', 25));
1: TypeSend(AddMistakes('Get lost', 25));
2: TypeSend(AddMistakes('Leave me along right now', 25));
3: TypeSend(AddMistakes('Dont talk to me', 25));
4: TypeSend(AddMistakes('Stop talking to me', 25));
5: TypeSend(AddMistakes('Could you please go away', 25));
6: TypeSend(AddMistakes('Im sorry but I cant talk right now', 25));
7: TypeSend(AddMistakes('Could I have some peace and quiet please', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
end else
if ChooseOption('rie') then
begin
Mouse(cx, cy, 0, 0, false);
Wait(RandomRange(300, 600));
if ChooseOption('Message') then
begin
Wait(RandomRange(600, 1000));
case Random(5) of
0: TypeSend(AddMistakes('Im busy, I cant talk right now', 25));
1: TypeSend(AddMistakes('Get lost', 25));
2: TypeSend(AddMistakes('Leave me along right now', 25));
3: TypeSend(AddMistakes('Dont talk to me', 25));
4: TypeSend(AddMistakes('Stop talking to me', 25));
5: TypeSend(AddMistakes('Could you please go away', 25));
6: TypeSend(AddMistakes('Im sorry but I cant talk right now', 25));
7: TypeSend(AddMistakes('Could I have some peace and quiet please', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
end
end;
end;
LastChatter(Name);
if (Lowercase(Name) = Lowercase(Players[CurrentPlayer].Name)) then Exit;
if FindChatBoxText('wishes to', 8, clTrade) then
begin
case Random(7) of
0: TypeSend(AddMistakes('Dont wanna trade', 25));
1: TypeSend(AddMistakes('No trade', 25));
2: TypeSend(AddMistakes('No ty', 25));
3: TypeSend(AddMistakes('Get lost', 25));
4: TypeSend(AddMistakes('I don''t trade', 25));
5: TypeSend(AddMistakes('Busy, go away pl0x', 25));
6: TypeSend(AddMistakes('Im busy, go off with you', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
end;
if (not GetLastChatText(Chat)) then Exit;
LastLineText := (Lowercase(GetChatBoxText(8, clBlue)) + ' ');
if (LastLineText = 'my wooductting level is') then Exit;
QuickChat:= ['what is your level in strength?', 'what is your level in attack?',
'what is your level in hitpoints?', 'what is your level in defence?',
'what is your level in magic?', 'what is your level in ranged?',
'what is your level in agility?', 'what is your level in construction?',
'what is your level in cooking?', 'what is your level in crafting?',
'what is your level in farming?', 'what is your level in firemaking?',
'what is your level in fishing?', 'what is your level in fletching?',
'what is your level in herblore?', 'what is your level in hunter?',
'what is your level in mining?', 'what is your level in prayer?',
'what is your level in runecrafting?', 'what is your level in slayer?',
'what is your level in smithing?', 'what is your level in summoning?',
'what is your level in thieving?', 'what is your level in woodcutting?'];
RespondType1:= ['hi', 'hey', 'yo ', 'hello'];
RespondType2:= ['str?', 'att?', 'def?', 'hp?', 'range?', 'ranged?', 'mage?',
'magic?', 'str lvl?', 'att lvl?', 'def lvl?', 'hp lvl?', 'range lvl?',
'ranged lvl?', 'mage lvl?', 'magic lvl?', 'strength?', 'attack?', 'defence?',
'hitpoints?', 'range?', 'ranged?', 'mage?', 'magic?', 'strength lvl?',
'attack lvl?', 'defence lvl?', 'hitpoints lvl?', 'range lvl?', 'ranged lvl?',
'mage lvl?', 'magic lvl?', 'wc?', 'woodcut?', 'woodcutting?', 'wc lvl',
'woodcut lvl', 'woodcutting level', 'wood cut'];
RespondType3:= ['noob', 'newb', 'nub', 'n00b'];
RespondType4:= ['waz up', 'was up', 'wasup', 'wassup', 'sup'];
for I := 0 to High(QuickChat) do
if (Pos(QuickChat[i], LastLineText) > 0) then
begin
case I of
0: QCSayLevel('strength');
1: QCSayLevel('attack');
2: QCSayLevel('hitpoints');
3: QCSayLevel('defence');
4: QCSayLevel('magic');
5: QCSayLevel('range');
6: QCSayLevel('agility');
7: QCSayLevel('construction');
8: QCSayLevel('cooking');
9: QCSayLevel('crafting');
10: QCSayLevel('farming');
11: QCSayLevel('firemaking');
12: QCSayLevel('fishing');
13: QCSayLevel('fletching');
14: QCSayLevel('herblore');
15: QCSayLevel('hunter');
16: QCSayLevel('mining');
17: QCSayLevel('prayer');
18: QCSayLevel('runecrafting');
19: QCSayLevel('slayer');
20: QCSayLevel('smithing');
21: QCSayLevel('summoning');
22: QCSayLevel('thieving');
23: QCSayLevel('woodcutting');
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
Exit;
end;
for I := 0 to High(RespondType1) do
if (Pos(RespondType1[i], LastLineText) > 0) then
begin
case Random(4) of
0: TypeSend(AddMistakes('Hello', 25));
1: TypeSend(AddMistakes('Hi', 25));
2: TypeSend(AddMistakes('Hey', 25));
3: TypeSend(AddMistakes('Yo', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
Exit;
end;
for I := 0 to High(RespondType2) do
if (Pos(RespondType2[i], LastLineText) > 0) then
begin
case I of
0, 8, 16, 24: SayTheLevel('strength');
1, 9, 17, 25: SayTheLevel('attack');
2, 10, 18, 26: SayTheLevel('defence');
3, 11, 19, 27: SayTheLevel('hitpoints');
4, 5, 12, 13, 20, 21, 28, 29: SayTheLevel('ranged');
6, 7, 14, 15, 22, 23, 30, 31: SayTheLevel('magic');
32..38: SayTheLevel('woodcutting');
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
Exit;
end;
for I := 0 to High(RespondType3) do
if (Pos(RespondType3[i], LastLineText) > 0) then
begin
case Random(3) of
0: TypeSend(AddMistakes('lol', 25));
1: TypeSend(AddMistakes('lmao', 25));
2: TypeSend(AddMistakes('haha', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
Exit;
end;
for I := 0 to High(RespondType4) do
if (Pos(RespondType4[i], LastLineText) > 0) then
begin
case Random(3) of
0: TypeSend(AddMistakes('nm', 25));
1: TypeSend(AddMistakes('nothing much', 25));
2: TypeSend(AddMistakes('ntm', 25));
end;
Wait(RandomRange(2000, 2500));
Inc(Players[CurrentPlayer].Integers[5]);
Exit;
end;
end;
procedure RandomWorldSwitch;
var
RandomInt: Integer;
begin
if (Signed_SMART = false) or (not T_LoggedIn) or (Switch_Worlds = False) then Exit;
if (Players[CurrentPlayer].Integers[4] = 0) then
Players[CurrentPlayer].Integers[4] := RandomRange(40, 60);
if (Players[CurrentPlayer].Integers[4] <= Players[CurrentPlayer].Integers[1]) then
begin
Status('Switching Worlds');
Logout;
Status('Switching Worlds');
RandomInt := RandomRange(30000, 180000);
Writeln('Taking a ' + IntToStr(RandomInt / 1000) + ' second break.');
Wait(RandomInt);
if OpenWorldScreen then
begin
SelectWorld(RandomWorld(Members_World, False));
Wait(RandomRange(3000, 5000));
LoginPlayer;
Wait(RandomRange(2000, 3000));
SetAngle(True);
SetRun(True);
end else
begin
LoginPlayer;
Wait(RandomRange(2000, 3000));
SetAngle(True);
SetRun(True);
end;
Players[CurrentPlayer].Integers[4] := Players[CurrentPlayer].Integers[4] +
RandomRange(40, 60);
end;
end;
procedure OpenSkill;
var
T, Close: Integer;
begin
if (not T_LoggedIn) then Exit;
HoverSkill('random', false);
Close := DTMFromString('78DA63CC666260686340010F7654317000694' +
'620FE0F048C25403575A86A96D6DAC3D580006332916AFA08A829' +
'21AC06000EE41086');
GetMousePos(x, y);
Mouse(x, y, 0, 0, true);
MarkTime(t);
while not FindDTM(Close, x, y, MSX1, MSY1, MSX2, MSY2) do
begin
if (not T_LoggedIn) then Exit;
Wait(100);
if (TimeFromMark(t) >= 10000) then Exit;
end;
Wait(RandomRange(1000, 2000));
if (GetColor(327, 312) = 2640994) then
begin
HoldMouse(327, 312, true);
Wait(RandomRange(500, 2000));
ReleaseMouse(327, 312, true);
Wait(RandomRange(500, 1500));
end;
if FindDTM(Close, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Mouse(x, y, 3, 3, false);
Wait(RandomRange(100,250));
ChooseOption('Close');
Wait(RandomRange(750,1000));
end else
begin
Mouse(498,21,8,8,false);
Wait(800+Random(250));
if ChooseOption('Close') then Wait(300+Random(200))
else
begin
Mouse(449,51,8,8,false);
ChooseOption('Close');
Wait(800+Random(200));
end;
end;
FreeDTM(Close);
end;
function HowManyNotes: integer;
var
I, X, Y: Integer;
begin
if (not T_LoggedIn) then Exit;
if (not (GetCurrentTab = tab_Notes)) then
begin
if GameTab(tab_Notes) then WaitColor(564, 214, 6795405, 1, 500);
end;
if (GetCurrentTab = tab_Notes) then
begin
for I := 0 to 30 do
begin
if FindText(x, y, IntToStr(i), SmallChars, 630, 203, 668, 236) then Result := I;
end;
end;
end;
function AddNote(Note: string): boolean;
var
T: Integer;
begin
if (not (GetCurrentTab = tab_Notes)) then
begin
if GameTab(tab_Notes) then WaitColor(564, 214, 6795405, 1, 500);
end;
if (GetCurrentTab = tab_Notes) then
begin
if (HowManyNotes >= 30) then Exit;
if (GetColor(564, 214) = 6795405) then
begin
Mouse(565, 217, 4, 4, true);
MarkTime(t);
while (GetColor(236, 485) = 6321792) do
begin
if (not T_LoggedIn) then Exit;
Wait(RandomRange(2, 5));
if (TimeFromMark(t) >= 7500) then Exit;
end;
Wait(RandomRange(1000, 1500));
TypeSend(Note);
Result := True;
end;
end;
end;
procedure AddRandomNote;
begin
case Random(20) of
0: AddNote('Keep woodcutting');
1: AddNote('Rep TRiLeZ');
2: AddNote(IntToStr(Players[CurrentPlayer].Integers[2]) + ' logs cut so far');
3: AddNote('I have been woodcutting for ' + TimeRunning);
4: AddNote(IntToStr(Players[CurrentPlayer].Integers[1]) + ' willow trees cut so far');
5: AddNote('Play RuneScape less :p');
6: AddNote('Keep on chopping');
7: AddNote('I like to woodcut');
8: AddNote('I love woodcutting');
9: AddNote('This is getting boring...');
10: AddNote('NOTE SPAM!');
11: AddNote('Yearg Im a pirate');
12: AddNote('Eat pizza tomorrow');
13: AddNote('The better woodcutting I have, the faster I cut');
14: AddNote('Do em logs up da dum');
15: AddNote('lmao');
16: AddNote('Dont call kids losers');
17: AddNote('Getjaars is the number 1 player in RS!');
18: AddNote('Enjoy using this');
19: AddNote('Have fun');
end;
end;
function AntiBan(Doing: string): Boolean;
var
TheStatus: string;
begin
if (not T_LoggedIn) then Exit;
AutoRespond;
FindNormalRandoms;
TheStatus := GetStatus();
Status('Doing AntiBan');
case Doing of
'Chopping':
case Random(1400) of
0..9: PickupMouse;
10..19: BoredHuman;
20..29: RandomRClick;
30..39: ExamineInv;
40..49: GameTab(tab_Friends);
50..59: HoverSkill('woodcutting', false);
60: AddRandomNote;
end;
'Nothing':
case Random(350) of
0..9: OpenSkill;
10..19: PickupMouse;
20..29: RandomRClick;
30..39: ExamineInv;
40..49:
begin
DoEmote(Random(20)+1);
Wait(RandomRange(1000, 1500));
end;
50..59: GameTab(tab_Friends);
60..69: HoverSkill('woodcutting', false);
70: AddRandomNote;
end;
end;
Result := True;
Status(TheStatus);
end;
function DropAllLogs: Boolean;
var
Log, CentreColour, CX, CY, T: Integer;
begin
if (not T_LoggedIn) then Exit;
Status('Dropping Logs');
Log := DTMFromString('78DA637CCEC4C010C6C8800C8C75F9E1ECFF4' +
'0C07817A8C617A206A19211CC86F119AF03D5441250731FA82681' +
'809A374035B104D47C05AA8920A0E63D508D177E3500A4B00D45');
GameTab(tab_Inv);
Wait(RandomRange(250, 500));
while FindDTM(Log, cx, cy, MIX1, MIY1, MIX2, MIY2) do
begin
if (not T_LoggedIn) then Break;
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
CentreColour := GetColor(cx, cy);
Mouse(cx, cy, 8, 5, False);
WaitOption('Drop', 2500);
MarkTime(t);
while ExistsItem(CoordsToItem(cx, cy)) do
if (TimeFromMark(t) >= 4000) then Break;
Wait(RandomRange(100, 250));
end;
Result := True;
FreeDTM(Log);
end;
procedure DropAndCount;
begin
DropAllLogs;
Inc(Players[CurrentPlayer].Integers[3]);
ProgressReport;
end;
procedure HandleChopping;
var
Area, Ti, RandomNumber, InventCount, CX, CY: Integer;
begin
if (not T_LoggedIn) then Exit;
Status('Chopping Tree');
SetColorSpeed2Modifiers(Willow.Hue[0], Willow.Sat[0]);
if (X < MSCX) and (Y < MSCY) then Area := 1
else
if (X > MSCX) and (Y < MSCY) then Area := 2
else
if (X > MSCX) and (Y > MSCY) then Area := 3
else
if (X < MSCX) and (Y > MSCY) then Area := 4;
Wait(RandomRange(500, 750));
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY-50, MSCX+100, MSCY+100, Willow.Tol[0])) then Exit;
MarkTime(Ti);
RandomNumber := RandomRange(20000, 25000);
InventCount := InvCount;
repeat
if (not T_LoggedIn) then Exit;
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
FindNormalRandoms;
LevelUp;
AutoRespond;
AntiBan('Chopping');
if (InvCount > InventCount) then
begin
MarkTime(Ti);
Players[CurrentPlayer].Integers[2] := Players[CurrentPlayer].Integers[2] +
(InvCount - InventCount);
InventCount := InvCount;
ProgressReport;
end;
if InvFull then
begin
DropAndCount;
Inc(Players[CurrentPlayer].Integers[1]);
Exit;
end;
Wait(RandomRange(250, 750));
case Area of
1: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY-60, MSCX, MSCY, Willow.Tol[0])) then
begin
Inc(Players[CurrentPlayer].Integers[1]);
ProgressReport;
Break;
end;
2: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX, MSCY-60, MSCX+50, MSCY, Willow.Tol[0])) then
begin
Inc(Players[CurrentPlayer].Integers[1]);
ProgressReport;
Break;
end;
3: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX, MSCY, MSCX+50, MSCY+50, Willow.Tol[0])) then
begin
Inc(Players[CurrentPlayer].Integers[1]);
ProgressReport;
Break;
end;
4: if (not FindColorTolerance(cx, cy, Willow.Colors[0], MSCX-50, MSCY, MSCX, MSCY+50, Willow.Tol[0])) then
begin
Inc(Players[CurrentPlayer].Integers[1]);
ProgressReport;
Break;
end;
end;
if (TimeFromMark(Ti) >= RandomNumber) then Exit;
until (not T_LoggedIn);
end;
procedure FindTree;
var
H, I, T, InventCount: Integer;
DGreen, LGreen, TPA: TPointArray;
Tree: T2DPointArray;
begin
if (not LoggedIn) then Exit;
FindNormalRandoms;
AutoRespond;
Status('Finding Trees');
SetColorSpeed2Modifiers(Willow.Hue[1], Willow.Sat[1]);
FindColorsTolerance(Lgreen, Willow.Colors[1], MSX1, MSY1, MSX2, MSY2, Willow.Tol[1]);
SetColorSpeed2Modifiers(Willow.Hue[0], Willow.Sat[0]);
FindColorsTolerance(Dgreen, Willow.Colors[0], MSX1, MSY1, MSX2, MSY2, Willow.Tol[0]);
if (Length(DGreen) > 0) and (Length(LGreen) > 0) then
begin
if (not T_LoggedIn) then Exit;
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
TPA := CombineTPA(DGreen, LGreen);
Tree := SplitTPA(TPA, 14);
SortATPAFromFirstPoint(Tree, Point(MSCX, MSCY));
H := High(Tree);
if T_LoggedIn then
if InvFull then DropAndCount;
for I := 0 to H do
begin
if (not T_LoggedIn) then Exit;
Players[CurrentPlayer].Integers[6] := TimeFromMark(Players[CurrentPlayer].Integers[8]);
if T_LoggedIn then
if InvFull then
begin
DropAndCount;
Break;
end;
MiddleTPAEx(Tree[i], x, y);
MMouse(x, y, 10, 10);
Wait(RandomRange(250, 500));
if WaitUpTextMulti(Willow.UpText, 1000) then
begin
GetMousePos(x, y);
case Random(5) of
0..3: Mouse(x, y, 0, 0, true);
4: begin
Mouse(x, y, 0, 0, false);
Wait(RandomRange(250, 400));
ChooseOption('Chop');
end;
end;
MarkTime(t);
if T_LoggedIn then InventCount := InvCount else Exit;
Status('Waiting to Cut Tree');
repeat
if (not T_LoggedIn) then Exit;
if FindBlackChatMessage('tree') then Break;
if T_LoggedIn then
if (InvCount > InventCount) then
begin
Players[CurrentPlayer].Integers[2] :=
Players[CurrentPlayer].Integers[2] + (InvCount - InventCount);
ProgressReport;
Break;
end;
if (TimeFromMark(t) >= 15000) then Exit;
until false;
HandleChopping;
if (not T_LoggedIn) then Exit;
AntiBan('Nothing');
RandomWorldSwitch;
Break;
end else
Wait(10);
end;
end else
Wait(10);
end;
procedure DeclareStuff;
begin
DeclarePlayers;
ColorToleranceSpeed(2);
with Willow do
begin
UpText := ['Willo', 'llow'];
Colors := [3169352, 6396297];
Hue := [0.10, 0.25];
Sat := [0.99, 0.15];
Tol := [20, 20];
end;
end;
procedure NewsAndUpdates;
var
News, ScriptLink, LVersion: string;
I: Integer;
LatestVersion: Extended;
begin
ClearDebug;
News := GetPage('http://trilez.comuf.com/news.html');
for I := 1 to 10 do
if Pos('<line' + IntToStr(i) + '>', News) > 0 then
Writeln(Between('<line' + IntToStr(i) + '>', '</line'+inttostr(i)+'>', News));
LVersion := GetPage('http://trilez.comuf.com/Scripts/WillChop/version.html');
LatestVersion := StrToFloat(Between('<latestversion>', '</latestversion>', LVersion));
ScriptLink := Between('<scriptlink>', '</scriptlink>', LVersion);
if not (LatestVersion = 1) then
begin
Writeln('This script is out of date.');
Writeln('The current version is: ' + FloatToStr(LatestVersion));
Writeln('A link will be opened to the current version in 10 seconds.');
Wait(10000);
OpenWebPage(ScriptLink);
TerminateScript;
end else
Wait(5000);
end;
procedure SetupScript;
begin
ActivateClient;
DeclareStuff;
end;
procedure SetupPlayer;
begin
LoginPlayer;
MarkTime(Players[CurrentPlayer].Integers[8]);
SetAngle(True);
SetRun(True);
DropAllLogs;
Wait(RandomRange(300, 800));
end;
procedure MainLoop;
begin
repeat
SetupPlayer;
repeat
FindTree;
until (not T_LoggedIn);
Alert(Players[CurrentPlayer].Name + ' is now inactive!');
Players[CurrentPlayer].Active := False;
if SmartCrash then Exit;
if (PlayersActive > 0) then NextPlayer(False)
else Break;
until AllPlayersInactive;
end;
begin
Intro;
NewsAndUpdates;
{$IfDef SMART}
Smart_Server := Smart_World;
Smart_Signed := Signed_SMART;
Smart_Members := Members_World;
{$EndIf}
SetupSRL;
ClearDebug;
SetupScript;
MainLoop;
end.