SCAR Code:
{
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// \\
|| Scarf4ce's Power Willow Chopper ||
||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||
||1) Declare your players. ||
||2) Drag the cross hairs onto the RS screen ||
||3) Start Logged in ||
||4) Fill out the form ||
||5) Keep your axe in the first inv slot ||
||6) Hit the play button and watch your lvl ||
|| climb :P. ||
||7) Post your progress report =]. ||
|| ||
||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||
|| Thanks to ||
||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||
|| - Yohojo for letting me use his Ent ||
|| finding procedure ||
|| - JAD for helping me with failsafes ||
|| and for his tutorials that helped me ||
|| with my anti-ban and anti randoms ||
|| - SRL community with helping me fix ||
|| errors ||
|| - Mad Cow and Starblaster100 for their ||
\\ awesome form making tutorials //
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
program Scarf4cePWC;
{.include SRL\SRL.SCAR}
{.include SRL\SRL\Skill\Woodcutting.SCAR}
{.include SRL/SRL/extended/xAntiBan.scar}
var
Loads, LogsCut: Integer;
Log, BrokenAxe, AxeHandle, RegularAxe: Integer;
procedure DeclarePlayers;
begin
Status('Loading Players')
HowManyPlayers := 6; // How many players are you using?
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := ''; // Runescape username
Players[0].Pass := ''; // Runescape password
Players[0].Nick := ''; // 2-4 letters of your Runescape username (No capitals or spaces)
Players[0].Active := True; //Are you using this player?
Players[1].Name := '';
Players[1].Pass := '';
Players[1].Nick := '';
Players[1].Active := False;
Players[2].Name := '';
Players[2].Pass := '';
Players[2].Nick := '';
Players[2].Active := False;
Players[3].Name := '';
Players[3].Pass := '';
Players[3].Nick := '';
Players[3].Active := False;
Players[4].Name := '';
Players[4].Pass := '';
Players[4].Nick := '';
Players[4].Active := False;
Players[5].Name := '';
Players[5].Pass := '';
Players[5].Nick := '';
Players[5].Active := False;
NickNameBMP := CreateBitmapMaskFromText(Players[CurrentPlayer].Nick, UpChars);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
==============================
// \\
|| DTM'S ||
\\ //
===============================
}
procedure LoadDTMs;
begin
Log := DTMFromString('78DA632C666260E0646440067921460CFF813' +
'448F43F103066314179C880118904D2354035FF19F0AB2905AA11' +
'22604E23500D0F0135C94035DCF8D50000507909F5');
BrokenAxe := DTMFromString('78DA633CCAC4C090C1C8800C9A127919FE036' +
'990E87F2060BC0C54938CAA06220B2381F445A09A04026A8E01D5' +
'C41050B31FA8A698809AB384CD0100CBBD0D20');
AxeHandle := DTMFromString('78DA637CCFC4C0E0C6C8800CCA227819FE036' +
'990E87F2060FC06546389AA06220B2381F473A09A00026ADE00D5' +
'F81350F316A8C685809A97403541F8D50000D0090D3C');
RegularAxe := DTMFromString('78DA637461626060676440060DF1BC0CFF813' +
'448F43F10300601D5FC6740038C482490F604AAF94D408D13500D' +
'2B237E35F640358204D4F813618E1F50CD1F02EE0906AA61C26F0' +
'E0099720B7E');
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ =============================
// \\
|| Form ||
\\ //
============================= }
var
frmDesign : TForm;
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
Edit2 : TEdit;
Edit4 : TEdit;
ComboBox1 : TComboBox;
Button1 : TButton;
ComboBox2 : TComboBox;
Treename : String;
Treecolor: Integer;
AmountofLoads : Integer;
RunDirec : String;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
procedure ButtonClick(sender: TObject);
begin
frmDesign.Caption:= frmDesign.Caption + '.';
frmDesign.ModalResult:= mrOk;
end;
procedure ChangeColor(Sender: TObject);//Change these colors to the ones you want
begin
LoadSetting('Scarf4ce Power Chopper v1.3', 'Tree Color');
case ComboBox1.Text of
'Tree': Edit2.Text:=IntToStr(133);
'Willow': Edit2.Text:=IntToStr(6565);
'Oak': Edit2.Text:=IntToStr(32983);
'Yew': Edit2.Text:=IntToStr(59084);
end;
end;
procedure InitForm;
begin
frmDesign := CreateForm;
frmDesign.Left := 250;
frmDesign.Top := 114;
frmDesign.Width := 339;
frmDesign.Height := 267;
frmDesign.Caption := 'Scarf4ce Power Chopper v1.3';
frmDesign.Color := clInactiveCaption;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
Label1 := TLabel.Create(frmDesign);
Label1.Parent := frmDesign;
Label1.Left := 17;
Label1.Top := 29;
Label1.Width := 90;
Label1.Height := 17;
Label1.Caption := 'Tree Name';
Label1.Font.Color := clWindowText;
Label1.Font.Height := -16;
Label1.Font.Name := 'Copperplate Gothic Light';
Label1.Font.Style := [];
Label1.ParentFont := False;
Label2 := TLabel.Create(frmDesign);
Label2.Parent := frmDesign;
Label2.Left := 17;
Label2.Top := 67;
Label2.Width := 102;
Label2.Height := 17;
Label2.Caption := 'Tree Color';
Label2.Font.Color := clWindowText;
Label2.Font.Height := -16;
Label2.Font.Name := 'Copperplate Gothic Light';
Label2.Font.Style := [];
Label2.ParentFont := False;
Label3 := TLabel.Create(frmDesign);
Label3.Parent := frmDesign;
Label3.Left := 17;
Label3.Top := 138;
Label3.Width := 54;
Label3.Height := 17;
Label3.Caption := 'Loads';
Label3.Font.Color := clWindowText;
Label3.Font.Height := -16;
Label3.Font.Name := 'Copperplate Gothic Light';
Label3.Font.Style := [];
Label3.ParentFont := False;
Label4 := TLabel.Create(frmDesign);
Label4.Parent := frmDesign;
Label4.Left := 17;
Label4.Top := 102;
Label4.Width := 121;
Label4.Height := 17;
Label4.Caption := 'Run Direction';
Label4.Font.Color := clWindowText;
Label4.Font.Height := -16;
Label4.Font.Name := 'Copperplate Gothic Light';
Label4.Font.Style := [];
Label4.ParentFont := False;
Edit2 := TEdit.Create(frmDesign);
Edit2.Parent := frmDesign;
Edit2.Left := 157;
Edit2.Top := 65;
Edit2.Width := 121;
Edit2.Height := 21;
Edit2.Hint := 'Use the color picker to choose the color for your tree';
Edit2.ParentShowHint := False;
Edit2.ShowHint := True;
Edit2.TabOrder := 8;
Edit2.Text := LoadSetting('Scarf4ce Power Chopper v1.3', 'Tree Color');;
Edit4 := TEdit.Create(frmDesign);
Edit4.Parent := frmDesign;
Edit4.Left := 156;
Edit4.Top := 136;
Edit4.Width := 25;
Edit4.Height := 21;
Edit4.Hint := 'How many loads do you want to do per player';
Edit4.ParentShowHint := False;
Edit4.ShowHint := True;
Edit4.TabOrder := 9;
Edit4.Text := LoadSetting('Scarf4ce Power Chopper v1.3', 'Loads');
ComboBox1 := TComboBox.Create(frmDesign);
ComboBox1.Parent := frmDesign;
ComboBox1.Left := 156;
ComboBox1.Top := 27;
ComboBox1.Width := 145;
ComboBox1.Height := 21;
ComboBox1.Hint := 'Select the type of tree you are cutting';
ComboBox1.ItemHeight := 13;
ComboBox1.ParentShowHint := False;
ComboBox1.ShowHint := True;
ComboBox1.TabOrder := 10;
ComboBox1.Text := LoadSetting('Scarf4ce Power Chopper v1.3', 'Tree Name');
ComboBox1.Items.Add('Tree');
ComboBox1.Items.Add('Oak');
ComboBox1.Items.Add('Willow');
ComboBox1.Items.Add('Yew');
ComboBox1.Onclick:=@ChangeColor;
Button1 := TButton.Create(frmDesign);
Button1.Parent := frmDesign;
Button1.OnClick := @ButtonClick;
Button1.Left := 126;
Button1.Top := 182;
Button1.Width := 75;
Button1.Height := 25;
Button1.Hint := 'Click to start the script';
Button1.Caption := 'Start';
Button1.ParentShowHint := False;
Button1.ShowHint := True;
Button1.TabOrder := 11;
ComboBox2 := TComboBox.Create(frmDesign);
ComboBox2.Parent := frmDesign;
ComboBox2.Left := 156;
ComboBox2.Top := 100;
ComboBox2.Width := 40;
ComboBox2.Height := 21;
ComboBox2.Hint := 'Run away direction from fights, ents, etc';
ComboBox2.ItemHeight := 13;
ComboBox2.ParentShowHint := False;
ComboBox2.ShowHint := True;
ComboBox2.TabOrder := 12;
ComboBox2.Text := LoadSetting('Scarf4ce Power Chopper v1.3', 'Run Direction');
ComboBox2.Items.Add('N');
ComboBox2.Items.Add('E');
ComboBox2.Items.Add('S');
ComboBox2.Items.Add('W');
end;
procedure FormSetup;
begin
Treename := ComboBox1.Text
Treecolor := StrToInt(Edit2.Text)
AmountofLoads := StrToInt(Edit4.Text)
RunDirec := ComboBox2.Text
SaveSetting('Scarf4ce Power Chopper v1.3', 'Tree Name', ComboBox1.Text);
SaveSetting('Scarf4ce Power Chopper v1.3', 'Tree Color', Edit2.Text);
SaveSetting('Scarf4ce Power Chopper v1.3', 'Run Direction', ComboBox2.Text);
SaveSetting('Scarf4ce Power Chopper v1.3', 'Loads', Edit4.Text);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ =============================
// \\
|| Anti Ban ||
\\ //
============================= }
procedure MyAntiBan;
var
Dban : Integer;
begin
LeaveScreenEvery(1+Random(4));
RotateEvery(10 + Random(10));
RandomRClickEvery(2+Random(5))
if (not (LoggedIn)) then
Exit;
Dban := 0 + Random(120)
case Dban of
0: AntiBan;
1: HoverSkill('Woodcutting', false);
2: HoverSkill('Attack', false);
3: begin
GameTab(5)
Wait(889 + random(852));
GameTab(4)
end;
4: PickUpMouse;
//5: RandomChatEvery(5 + Random(4));
6: begin
case random(5) of
0: begin
TypeSend('Woodcutting lvls ppl?')
Wait(2458 + random(1438));
TypeSend('48');
end;
1: TypeSend('Great.. only 200k more exp to go... -.-');
2: TypeSend('Omg Woodcutting is so lame and boring..');
3: TypeSend('Boredd..');
4: TypeSend('Well only 20 more levels to go.. >=[]');
5: begin
TypeSend('Cant wait till im lvl 70 wc');
Wait(2438 + random(1589));
TypeSend('Cutting yews is so much faster =]');
end;
6: TypeSend('These guys are autoers.. Or are they? X[)');
7: begin
TypeSend('Well you ppl are lame..');
Wait(1135 + random(895));
TypeSend('Jk =P');
end;
8: TypeSend('Hmm.. am i bored, or am i bored? =[]');
9: begin
TypeSend('Anyone see family guy last night?')
Wait(1184 + random(854));
TypeSend('Well i didnt X[) lol');
end;
end;
end;
7: HoverSkill('Mining', false);
8: begin
GameTab(1);
Wait(300 + random(232))
GameTab(2);
Wait(324 + random(182))
GameTab(3);
Wait(287 + random(134))
GameTab(4);
Wait(270 + random(54))
GameTab(5);
Wait(234 + random(130))
GameTab(6);
Wait(324 + random(23))
GameTab(4);
end;
9: MMouse(Random(MSX2), Random(MSY2), 0, 0);
10: HoverSkill('random', false);
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ ==================================
// \\
|| Ent ||
|| ||
|| Thanks to Yohojo for this Procedure ||
\\ //
================================== }
procedure EntFinder;
var
EX, EY: integer;
FX, FY: integer;
SafeEntWait: LongInt;
begin
Status('Checking For Ent')
if (FindObjMultiText(EX, EY, Treename, Treename, Treename, Treecolor, 2)) then
begin
MMouse(EX, EY, 0, 0)
if FindColorTolerance(FX, FY, 55769, 85, 15, 115, 15, 20) then
begin
Status('Ent Found');
MouseFindFlag(645, 83, 2, 2);
MarkTime(SafeEntWait)
repeat
FTWait(5)
FindNormalRandoms;
if not (LoggedIn) then
NextPlayer(False);
until TimeFromMark(SafeEntWait) > 29000 + Random(10000)
EntsAvoided := EntsAvoided + 1
end;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
==============================
// \\
|| Anti-Randoms ||
\\ //
==============================
}
function FindFastRandoms: Boolean; //Function by WT-Fakawi
var
i: Integer;
begin
for i := 1 to 9 do
begin
case I of
1: if FindDead then
Result := True;
2: if FindMod then
Result := True;
3: if FindMime then
Result := True;
4: if FindMaze then
Result := True;
5: if FindQuiz then
Result := True;
6: if FindDemon then
Result := True;
7: begin
if NoGameTab then
begin
Result := True;
Players[CurrentPlayer].loc := 'No GameTab';
Logout;
Exit;
end;
end;
8: begin
if InBlack then
begin
Result := True;
Players[CurrentPlayer].loc := 'InBlack';
Logout;
Exit;
end;
end;
9: RC;
end;
wait(1);
end;
end;
procedure FindRandoms;
begin
FindFastRandoms;
FindNormalRandoms;
Wait(20)
FindTalk;
Wait(20)
EntFinder;
if (FindFight) then
begin
RunAwayDirection(RunDirec);
Wait(8000 + Random(2000));
RunBack;
end;
Wait(20)
FindTalk;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ =============================
// \\
|| Axe Stuff ||
\\ //
============================= }
procedure AxeHeadColors;
begin
Wait(300)
HighestAngle;
MakeCompass('N');
GameTab(4)
FindAxeHeadColor;
end;
procedure IsAxeBroken;
var
FX, FY, TX, TY: Integer;
begin
GameTab(4)
Wait(450 + random(130))
if (FindDTM(RegularAxe, FX, FY, MIX1, MIY1, MIX2, MIY2)) and
(not(FindDTM(BrokenAxe, TX, TY, MIX1, MIY1, MIX2, MIY2))) then
begin
Exit;
end;
begin
if (FindDTM(BrokenAxe, TX, TY, MIX1, MIY1, MIX2, MIY2)) and
(not(FindDTM(RegularAxe, FX, FY, MIX1, MIY1, MIX2, MIY2))) then
begin
Writeln('Axe Broken, Switiching Players.')
NextPlayer(False)
end;
end;
end;
procedure FindAxeHead;
begin
Status('Attempting to find the Axe Head')
Findhead;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ =============================
// \\
|| Tree Chopping ||
\\ //
============================= }
function FindObjMultiText2(var cx, cy: Integer; Ut1, UT2, UT3: string; color,
tolerance: Integer): Boolean;
var
x, y, a, c, i, x1, y1, x2, y2: Integer;
begin
Color := Color;
if (FindColorTolerance(x, y, color, msx1, msy1, msx2, msy2, tolerance)) then
begin
x1 := 245;
y1 := 165;
x2 := 277;
y2 := 185;
repeat
if (not (Loggedin)) then
Break;
a := a + 1;
if (a = 1) or (a = 3) then
c := c + 1;
for i := 1 to c do
begin
if (a = 1) then
begin
x1 := x1 + 30;
x2 := x2 + 30;
end
else if (a = 2) then
begin
y1 := y1 - 20;
y2 := y2 - 20;
end
else if (a = 3) then
begin
x1 := x1 - 30;
x2 := x2 - 30;
end
else if (a = 4) then
begin
y1 := y1 + 20;
y2 := y2 + 20;
end;
if (x1 = 485) and (x2 = 517) then
x2 := x2 - 2;
if (y1 = 325) and (y2 = 345) then
y2 := y2 - 7;
if (x2 > 515) then
Break;
if (FindColorTolerance(x, y, Color, x1, y1, x2, y2, tolerance)) then
begin
MMouse(x, y, 0, 0)
cx := x;
cy := y;
if (IsUpTextMulti(UT1, UT2, UT3)) then
begin
Result := True;
Break;
end;
end;
end;
if (a = 4) then
a := 0;
until (x2 > 515) or (Result = True);
end;
end;
procedure ChopTree;
var
TimeMarker: Integer;
TriesToFindTree: Integer;
TreeFound: Boolean;
Result1 : Boolean;
begin
If InvFull then
Exit;
If not LoggedIn then
Exit;
AxeHeadColors;
Repeat
Result1 := False;
Wait(53+Random(47));
IsAxeBroken;
Wait(89+Random(24));
EntFinder;
Wait(48+Random(23));
if FindObjMultiText2(x, y, Treename, Treename, Treename, TreeColor, 12) then
begin
Wait(20 + Random(29))
Mouse(x, y, 2, 2, True);
Wait(21+Random(23))
FindRandoms;
Wait(224+Random(284))
FindAxeHead;
Wait(540+Random(22))
MyAntiBan;
Wait(22+Random(27))
TreeFound := True;
end Else
begin
Writeln('Could not find tree color')
Logout;
Nextplayer(true)
end;
Wait(123+random(109));
if treefound then
begin
TriesToFindTree := 0;
MarkTime (TimeMarker);
Repeat
Wait(232+random(100))
FindRandoms;
EntFinder;
Until (InvFull) or (TimeFromMark (TimeMarker) > 5000) // Add here time to wait till clicking tree again
end Else
begin
Wait(100+random(100)); //waits for tree to come back
TriesToFindTree := TriesToFindTree + 1;
end;
until (InvFull) or (TriesToFindTree > 10);
if(TriesToFindTree > 10)then
begin
Writeln('Took too long to find tree! logging out');
Logout;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ ==============================
// \\
|| Log Dropping ||
\\ //
============================== }
procedure DroppingLogs;
var
bx, by: Integer;
begin
if (InvFull) then
GameTab(4);
repeat
if (FindDTM(Log, bx, by, MIX1, MIY1, MIX2, MIY2)) then
begin
Mouse(bx, by, 4, 4, false)
ChooseOption(bx, by, 'Drop')
Wait(450+Random(120))
LogsCut := LogsCut + 1;
end;
until (not (FindDTM(Log, bx, by, MIX1, MIY1, MIX2, MIY2)))
Loads := Loads + 1;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ ==============================
// \\
|| Progress Report ||
\\ //
============================== }
procedure ProgressReport;
begin
ClearDebug;
Writeln('<<_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_>>')
Writeln('<< Scarf4ce Place/Tree Power Cutter ')
Writeln('<< Worked For: ' + TimeRunning)
Writeln('<< Chopped: ' + IntToStr(LogsCut) + ' Logs ')
Writeln('<< Thanks for using my script ')
Writeln('<<_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_>>')
SRLRandomsReport;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ ==============================
// \\
|| Main Setup ||
\\ //
============================== }
procedure Setup;
begin
SetupSRL;
DeclarePlayers;
LoadDTMs;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin
Wait(2000)
Setup;
SafeInitForm;
SafeShowFormModal;
FormSetup;
ActivateClient;
begin
if (not (LoggedIn)) then Loginplayer;
HighestAngle;
MakeCompass('N')
repeat
Wait(2000 + Random(1000))
DisguiseScar('[' + IntToStr(Loads) + '/' +IntToStr(AmountofLoads) + '] ' +(Players[CurrentPlayer].name) + '')
ChopTree;
DroppingLogs;
ProgressReport;
if (Loads = AmountofLoads) then
begin
HighestAngle;
MakeCompass('N');
LogOut;
NextPlayer(True);
Loads := 0
end;
until (false)
end;
end.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~