SCAR Code:
program StupidChopperBanker;
{.include SSI2.txt}
{.include BoxBreaker.txt}
const
//=//===============Colors(Leave as 0 to let script find)==============\=\\
MMBankColor= 3460064;//Color of the trees in the minimap.(SS:3060683)
MMTreeColor= 96769;//Color of the trees in the minimap.(SS:15891)
MSTreeColor= 606264;//Color of the trees in the mainscreen. (SS:1849400)
//=\\=================================================================//=\\
//=\\ Under the varibles you may disable the forms and setup options. //=\\
//=\\=================================================================//=\\
var
TreeMapColor,TreeColor,Report,Report2,Banks,MaxWait,TinderBox,LogBmp,
BankColor,Location,Mark:integer;
UseForm,NoAxe,EquipAxe,StartScript:boolean;
frmDesign,frmMore:TForm;
labPassword,labUsername,labMaxWait,labMaxWait2,labLocation:TLabel;
edtUsername,edtPassword,edtMaxWait:TEdit;
bMoreOptions,bStart,bSave,bDonate:TButton;
cbLogsOut,cbChats,cbEquipAxe,cbRotates,cbScarScape:TCheckBox;
cboxLocation:TComboBox;
procedure Setup;
begin
//=\\============================Setup================================//=\\
UseForm:= true;//If you wish to use the form.
Username:= username;//Username.
Password:= password;//Password.
ScarScape:= false;//Set to true if you are using ScarScape.
LogsOut:= true;//If you want to log out every so often for antiban.
Chats:= true;//If you want to randomly chat for anti-ban.
Rotates:= true;//If you want to randomly rotate the screen for anti-ban.
MaxWait:= 300;//Maximum time in seconds to wait while chopping a tree.
Location:= 2;//1= Draynor(Willow), 2= Edgeville(Yew)
EquipAxe:= false;//If you can/want to equip your axe.
//=\\=================================================================//=\\
end;
//DO NO TOUCH BELOW
//==============================Misc Procedures===============================\\
procedure ProgressReport;
var
RHours,Minutes,Seconds,RMinutes,RSeconds,avtime:LongInt;
Time:String;
begin
if(GetSystemTime-report2 > report*60000)then
begin
Seconds:=(GetSystemTime-ST) div 1000;
Minutes:=Seconds div 60;
RHours:=Minutes div 60;
Time:=inttostr(Seconds)+' Seconds';
if(banks>0)then
avtime:=Seconds/banks;
if Minutes<>0 then
begin
RSeconds:=Seconds Mod (Minutes*60);
Time:=inttostr(Minutes)+' Minutes and '+inttostr(RSeconds)+' Seconds';
end;
if RHours<>0 then
begin
RMinutes:=Minutes Mod (RHours*60);
RSeconds:=Seconds Mod (Minutes*60);
Time:=inttostr(RHours)+' Hours, '+inttostr(RMinutes)+' Minutes and '
+inttostr(RSeconds)+' Seconds';
end;
begin
writeln(' ');
writeln('<=================Progress Report================>');
WriteLn('Worked for '+Time);
WriteLn('Banked '+IntToStr(banks)+' loads[s].');
WriteLn('Banked '+IntToStr(banks*27)+' logs[s].');
if(Location=1)then
WriteLn('Gained '+floattostr(30*(banks*27))+'xp.');
if(Location=2)then
WriteLn('Gained '+floattostr(60*(banks*27))+'xp.');
if(Location=1)then
WriteLn('Currently Averaging about '+IntToStr(3600/avtime*27)+
' logs and '+floattostr(3600/avtime*30*27)+' xp an hour.');
if(Location=2)then
WriteLn('Currently Averaging about '+IntToStr(3600/avtime*27)+
' logs and '+floattostr(3600/avtime*60*27)+' xp an hour.');
WriteLn('Random Event Report:');
if(fights>0)then WriteLn(' Fought '+IntToStr(fights)+' time[s].');
if(talks>0)then WriteLn(' Talked to '+IntToStr(talks)+' Random event[s].');
if(lamps>0)then WriteLn(' Used lamps '+IntToStr(lamps)+' time[s].');
if(boxes>0)then WriteLn(' Solved '+IntToStr(boxes)+' box[es].');
if(logs>0)then WriteLn(' Logged in '+IntToStr(logs)+' time[s].');
if(foresters>0)then WriteLn(' Solved '+IntToStr(foresters)+' forester[s].');
if(frogs>0)then WriteLn(' Solved '+IntToStr(foresters)+' frog[s].');
if(doctors>0)then WriteLn(' Solved '+IntToStr(doctors)+' doctor[s].');
if(certers>0)then Writeln(' Solved '+IntToStr(certers)+' certer[s].');
writeln('<================================================>');
Report2:=GetSystemTime;
end;
end;
end;
procedure FindRandoms;
begin
FindBox;
FindNormalRandoms;
AntiBan;
FindDoctor;
if(not(FindAxe))then
NoAxe:=true;
if(FindFight)then
begin
if(Location=1)then
RunAwayDirection('S');
if(Location=2)then
RunAwayDirection('N');
Wait(5000+random(1000));
RunBack;
end;
end;
procedure SetColors;
begin
TreeMapColor:=MMTreeColor;
TreeColor:=MSTreeColor;
BankColor:=MMBankColor;
end;
//=========================Color Finding Procedures===========================\\
procedure FindTreeColor;
var
c:integer;
begin
repeat
c:=c+1;
if(FindObj('Chop',1849400,10))then
begin
if(FindColorTolerance(x,y,1849400,x-30,y-30,x+30,y+30,10))then
begin
TreeColor:=GetColor(x,y);
break;
end;
end;
until(c>10)or(TreeColor>0)
if(TreeColor>0)then
begin
writeln('TreeColor: '+inttostr(TreeColor));
end else
begin
WriteLn('Could not find tree color, please stand next to a tree and '+
'make sure the tree spot symbol is visible in the minimap, then'+
' run the script again');
TerminateScript;
end;
end;
procedure FindMapTreeColor;
var
MMTreeBmp,c:integer;
acc,angle:Extended;
begin
if(Location=1)then
begin
MMTreeBmp := BitmapFromString(8, 8, 'z78DAA5CF310AC0300C43D12BC591B1' +
'BD266DEE7FA586AA83C150285DDEA2BF28D41D2D92DD0CB2AA310' +
'3E86C64E99441B922ECE8C8B2CF25AD65F67FAF4D4D90AD7DB88F' +
'FDE516032A4EF7BB8593D6F2BD7FFCD85F763D5379');
FindDeformedBitmapToleranceRotationIn(MMTreeBmp,x,y,582,37,700,117,70,0,acc,PI/10,0,2*PI,angle);
repeat
c:=c+5;
if(FindColorTolerance(x,y,2321464,x-10,y-10,x+10,y+10,c))then
TreeMapColor:=GetColor(x,y);
until(TreeMapColor>0)or(c>70);
end;
if(Location=2)then
FindSymbolColorIfNeeded('rare trees',true,TreeMapColor);
if(TreeMapColor>0)then
begin
WriteLn('TreeMapColor: '+inttostr(TreeMapColor));
end else
begin
WriteLn('Could not find tree color, please stand next to a tree and '+
'make sure the tree spot symbol is visible in the minimap, then'+
' run the script again');
TerminateScript;
end;
end;
//========================Map Walking procedures==============================\\
procedure ToTrees;
begin
RoadWalk(TreeMapColor,'S');
FlagAtColor(TreeMapColor);
end;
procedure ToBank;
begin
if(not(FindMMColor(BankColor)))then
begin
RoadWalk(TreeMapColor,'N');
Flag;
end;
if(Location=1)then
ToBankers(BankColor,5,0);
if(Location=2)then
ToBankers(BankColor,-5,0);
FlagAtColor(BankColor);
end;
//========================Main Screen Procedures==============================\\
procedure Bank;
begin
if(FindColor(x,y,BankColor,608,43,688,123))then
begin
FindBox;
if(NoAxe=true)and(EquipAxe=true)then
begin
GameTab(5);
Mouse(593,303,r,r,true);
Wait(1000+random(100));
GameTab(4);
end;
OpenBank;
if(BankScreen)then
begin
if(NoAxe=true)then
begin
ClickAllItemsColorWait('All',65536,1000+Random(100));
Withdraw(1,1,1);
end else
begin
if(EquipAxe=false)then
Deposit(2,28,2);
if(EquipAxe=true)then
ClickAllItemsColorWait('All',65536,1000+Random(100));
end;
if(NoAxe=true)and(EquipAxe=true)then
begin
FindAxeHeadColor;
ClickItemColor(AxeHeadColor,true);
end;
Banks:=Banks+1;
NoAxe:=false;
ProgressReport;
end;
CloseWindow;
end;
end;
procedure ChopTree;
var SysTime:integer;
begin
if(FindObj('Chop',TreeColor,0))then
begin
Mouse(x,y,r,r,false);
if(not(FindColor(x,y,65535,x,y,x+100,y+50)))then
begin
ChooseOption('Chop');
Flag;
Wait(1000+random(100));
MarkTime(SysTime);
FindEnt(TreeColor);
repeat
FindRandoms;
if(not(Option('Chop')))then
Break;
FindEnt(TreeColor);
Wait(1000+random(100));
until(TimeFromMark(SysTime)>MaxWait*1000)or(InventoryFull)
end else
begin
ChooseOption('Cancel');
FindEnt(TreeColor);
end;
end;
end;
procedure LoadBmps;
begin
TinderBox := BitmapFromString(30, 8, 'z78DABD946B8E83300C84' +
'AF94871D7B7E1A02F73FD2BA71B44AB5546DD5DD65A41102E47C3' +
'8E33091D58DC31B752AE976659C20D770CB6868775E21900B6700' +
'3ABD6183CDFBF1B615AA09AF3858CDD595B46A93DDD58584828D1' +
'7E67872B1EEEA8A8E7D3A70A03FF1F1E51BB4A2BB6E7A2ABB540E' +
'E99A455DD2CE764CE6A5B77395CD12CEE9BB65D707FE06ADEAA11' +
'DF906E8D445F3ECF026554A4B6C6CC119BE2523A3BFF0D7930043' +
'D21345E11ACC9187C67C70F79BEADF2ECCFFD3C987B43BB22B321' +
'CA98026392315DC595882B3A6922214DFA978E09F503DA1ED28AE' +
'48457438E6AE8A89458757DA704F33559DE43159317DE37C98356' +
'3D746E55FA38D9A713AADCC63EEDADEA8D14FDA98BEBB193CACB8' +
'62DF97A9BFF88BD8CD37FF62A59DD5A2CE382BE6F48D545CD02EE' +
'7DB171D6738D8');
LogBmp := BitmapFromString(23, 6, 'z78DA9D914B0EC3200C44AFE43F781' +
'928B9FF918A7017AE12AAA82C6681C6330F03300F1A89A1DB9081' +
'BD9022F6AA56785432E15E4E236EA51B4CADFA622FAA8DCB97C67' +
'D78B2E6D99460A71A8B142624580CA1D6A4616FECA27A9C0E4A37' +
'24579E6B7B762EBD4958E44162AEC8904982A1A1A3F217C96E339' +
'7DEF06C35E7C4ECE289760602821DC974329EB59A0BE49C6DCB13' +
'5D6941123BF993E467FE739EFC47F95F76241F1ED732790EEB829' +
'FC6ACCFB7914962272A83061B19F87C74477B03BE82B29E');
end;
//===========================================Form=============================\\
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure ShowMoreModal;
begin
frmMore.ShowModal;
end;
procedure SafeShowForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
procedure SafeMore;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitMore', v);
end;
procedure Start(sender: TObject);
begin
frmDesign.Caption:= frmDesign.Caption + '.';
frmDesign.ModalResult:= mrOk;
StartScript:=true;
end;
procedure More(sender: TObject);
var
v: TVariantArray;
begin
SafeMore;
setarraylength(V, 0);
ThreadSafeCall('ShowMoreModal', v);
end;
procedure SaveOptions;
begin
LogsOut:=cbLogsOut.State;
Chats:=cbChats.State;
ScarScape:=cbScarScape.State;
Username:= edtUsername.Text;
Password:= edtPassword.Text;
if(Username='')or(Password='')then
begin
Username:='No Username';
Password:='No Password';
end;
case cboxLocation.Text of
'Draynor (Willow)': Location:=1;
'Edgeville (Yew)': Location:=2;
end;
end;
procedure Save(sender: TObject);
begin
frmMore.Caption:= frmMore.Caption + '.';
frmMore.ModalResult:= mrOk;
SaveOptions;
end;
procedure Donate(sender: TObject);
begin
OpenWebPage('http://www.stupidscripts.com');
end;
procedure InitForm;
begin
frmDesign := CreateForm;
frmDesign.Left := 359;
frmDesign.Top := 225;
frmDesign.Width := 258;
frmDesign.Height := 204;
frmDesign.Caption := 'StupidChopperBanker';
frmDesign.Color := clWhite;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
labPassword := TLabel.Create(frmDesign);
labPassword.Parent := frmDesign;
labPassword.Left := 96;
labPassword.Top := 44;
labPassword.Width := 46;
labPassword.Height := 13;
labPassword.Caption := 'Password';
labUsername := TLabel.Create(frmDesign);
labUsername.Parent := frmDesign;
labUsername.Left := 96;
labUsername.Top := 6;
labUsername.Width := 48;
labUsername.Height := 13;
labUsername.Caption := 'Username';
labLocation := TLabel.Create(frmDesign);
labLocation.Parent := frmDesign;
labLocation.Left := 96;
labLocation.Top := 80;
labLocation.Width := 44;
labLocation.Height := 13;
labLocation.Caption := 'Location';
cbScarScape := TCheckBox.Create(frmMore);
cbScarScape.Parent := frmDesign;
cbScarScape.Left := 88;
cbScarScape.Top := 151;
cbScarScape.Width := 80;
cbScarScape.Height := 17;
cbScarScape.Hint :=
'Check if you are using ScarScape.';
cbScarScape.ShowHint := True;
cbScarScape.Caption := 'ScarScape?';
if(ScarScape)then
begin
cbScarScape.Checked := True;
cbScarScape.State := cbChecked;
end;
edtUsername := TEdit.Create(frmDesign);
edtUsername.Parent := frmDesign;
edtUsername.Left := 64;
edtUsername.Top := 20;
edtUsername.Width := 121;
edtUsername.Height := 21;
edtUsername.TabOrder := 1;
edtUsername.Text := Username;
edtPassword := TEdit.Create(frmDesign);
edtPassword.Parent := frmDesign;
edtPassword.Left := 64;
edtPassword.Top := 58;
edtPassword.Width := 121;
edtPassword.Height := 21;
edtPassword.PasswordChar := '*';
edtPassword.Text := Password;
bMoreOptions := TButton.Create(frmDesign);
bMoreOptions.Parent := frmDesign;
bMoreOptions.Left := 178;
bMoreOptions.Top := 151;
bMoreOptions.Width := 70;
bMoreOptions.Height := 17;
bMoreOptions.Caption := 'More Options';
bMoreOptions.OnClick:= @More;
cboxLocation := TComboBox.Create(frmDesign);
cboxLocation.Parent := frmDesign;
cboxLocation.Left := 64;
cboxLocation.Top := 94;
cboxLocation.Width := 121;
cboxLocation.Height := 21;
cboxLocation.ItemHeight := 13;
cboxLocation.Text := 'Draynor (Willow)';
cboxLocation.Items.Add('Draynor (Willow)');
cboxLocation.Items.Add('Edgeville (Yew)');
bStart := TButton.Create(frmDesign);
bStart.Parent := frmDesign;
bStart.Left := 87;
bStart.Top := 121;
bStart.Width := 75;
bStart.Height := 25;
bStart.Caption := 'Start';
bStart.TabOrder := 5;
bStart.OnClick:= @Start;
bDonate := TButton.Create(frmDesign);
bDonate.Parent := frmDesign;
bDonate.Left := 1;
bDonate.Top := 144;
bDonate.Width := 75;
bDonate.Height := 25;
bDonate.Caption := 'Donate Plz';
bDonate.TabOrder := 13;
bDonate.OnClick:= @Donate;
end;
procedure InitMore;
begin
frmMore := CreateForm;
frmMore.Left := 288;
frmMore.Top := 161;
frmMore.Width := 294;
frmMore.Height := 108;
frmMore.Caption := 'More Options';
frmMore.Color := clWhite;
frmMore.Font.Color := clWindowText;
frmMore.Font.Height := -11;
frmMore.Font.Name := 'MS Sans Serif';
frmMore.Font.Style := [];
frmMore.Visible := False;
frmMore.PixelsPerInch := 96;
labMaxWait := TLabel.Create(frmMore);
labMaxWait.Parent := frmMore;
labMaxWait.Left := 5;
labMaxWait.Top := 7;
labMaxWait.Width := 196;
labMaxWait.Height := 13;
labMaxWait.Caption := 'Maximum time to wait while cuting a tree:';
labMaxWait2 := TLabel.Create(frmMore);
labMaxWait2.Parent := frmMore;
labMaxWait2.Left := 243;
labMaxWait2.Top := 10;
labMaxWait2.Width := 40;
labMaxWait2.Height := 13;
labMaxWait2.Caption := 'seconds';
edtMaxWait := TEdit.Create(frmMore);
edtMaxWait.Parent := frmMore;
edtMaxWait.Left := 204;
edtMaxWait.Top := 5;
edtMaxWait.Width := 38;
edtMaxWait.Height := 21;
edtMaxWait.MaxLength := 3;
edtMaxWait.TabOrder := 9;
edtMaxWait.Text := inttostr(MaxWait);
cbLogsOut := TCheckBox.Create(frmMore);
cbLogsOut.Parent := frmMore;
cbLogsOut.Left := 5;
cbLogsOut.Top := 22;
cbLogsOut.Width := 66;
cbLogsOut.Height := 17;
cbLogsOut.Hint := 'If you want to log out about every 3 hours for anti-ban.';
cbLogsOut.Caption := 'Logs out?';
cbLogsOut.ParentShowHint := False;
cbLogsOut.ShowHint := True;
cbLogsOut.TabOrder := 10;
if(LogsOut)then
begin
cbLogsOut.Checked := True;
cbLogsOut.State := cbChecked;
end;
cbChats := TCheckBox.Create(frmMore);
cbChats.Parent := frmMore;
cbChats.Left := 5;
cbChats.Top := 38;
cbChats.Width := 54;
cbChats.Height := 17;
cbChats.Hint :=
'If you want to chat random prashes every so often for anti-ban.';
cbChats.Caption := 'Chats?';
cbChats.ParentShowHint := False;
cbChats.ShowHint := True;
cbChats.TabOrder := 11;
if(Chats)then
begin
cbChats.Checked := True;
cbChats.State := cbChecked;
end;
cbRotates := TCheckBox.Create(frmMore);
cbRotates.Parent := frmMore;
cbRotates.Left := 78;
cbRotates.Top := 22;
cbRotates.Width := 97;
cbRotates.Height := 17;
cbRotates.Hint :=
'If you want to randomly rotate the camera every so often for ant' +
'i-ban.';
cbRotates.ShowHint := True;
cbRotates.Caption := 'Rotates?';
cbRotates.TabOrder := 15;
if(Rotates)then
begin
cbRotates.Checked := True;
cbRotates.State := cbChecked;
end;
cbEquipAxe := TCheckBox.Create(frmMore);
cbEquipAxe.Parent := frmMore;
cbEquipAxe.Left := 5;
cbEquipAxe.Top := 54;
cbEquipAxe.Width := 97;
cbEquipAxe.Height := 17;
cbEquipAxe.Caption := 'Equip axe?';
cbEquipAxe.Hint :='Check if you are able and want to equip your pick.';
cbEquipAxe.ShowHint := True;
cbEquipAxe.TabOrder := 14;
if(EquipAxe)then
begin
cbEquipAxe.Checked := True;
cbEquipAxe.State := cbChecked;
end;
bSave := TButton.Create(frmMore);
bSave.Parent := frmMore;
bSave.Left := 227;
bSave.Top := 57;
bSave.Width := 57;
bSave.Height := 15;
bSave.Caption := 'Save';
bSave.TabOrder := 12;
bSave.OnClick:= @Save;
end;
procedure StartForm;
begin
if(UseForm)then
begin
SafeMore;
SafeShowForm;
if(StartScript=false)then
TerminateScript;
SaveOptions;
ActivateClient;
Wait(1000+random(500));
end;
end;
//======================================Main Line=============================\\
begin
SetupSSI;
Setup;
StartForm;
SetColors;
LoadBmps;
FindSymbolColorIfNeeded('Bank',true,BankColor);
if(FindAxeHeadColor)then
begin
FindMapTreeColor;
RoadWalk(TreeMapColor,'S');
FindTreeColor;
repeat
SetRun(true);
MarkTime(Mark);
repeat
FindRandoms;
ChopTree;
until(InventoryFull)or(NoAxe=true)or(TimeFromMark(Mark)>1800000)
SetRun(false);
ToBank;
Bank;
ToTrees;
until(false)
end;
end.
end.