I got the new player interface implemented, but, findaxe procedures are very old. Plz update!!!
This is what i got:
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| Nielsie95's Yew Retriever Draynor |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| Will cut and bank from the 2 yews south from draynor |
| |
| Has Antiban - AntiRandoms - AutoColor |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| Start at 1 of the 2 yews or in bank. |
| Have axe wielded or in inv. Also have more in bank. |
| Please set HumanDirtColor for safety =] |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| VERSION 1.1 |
| |
| Again tried to fix that stupid DirtColorFinder |
| |
| VERSION 1.0 |
| |
| A big update was done, better DirtFinding, |
| faster tree finding, better ent finding, new walking |
| procedures and a change to the Progress Report and |
| added some Status writing =] |
| |
| VERSION 0.75 |
| |
| Small update to DirtFinding, small banking bug |
| removed, little update to chopping =] |
| |
| VERSION 0.50 |
| |
| My very first version of my very first script! |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
program NielsYewRetrieverDraynor;
{.Include SRL/SRL.SCAR}
{.Include SRL/SRL/Skill/Woodcutting.Scar}
//----------------------------------------------------------------------------//
// --> SCRIPT SETUP <-- //
//----------------------------------------------------------------------------//
const Version = '1.1'; //No need to change
MaxLoggedInTime = 25; //Max time the player can be logged in
HumanDirtColor = 2183262; //Set this if DirtColorFinder doesn't work
//----------------------------------------------------------------------------//
// --> VARIABLES <-- //
//----------------------------------------------------------------------------//
var tx, ty, TreeX, TreeY, TempColor, DirtColor, DirtRoadColor, Slot, LoadsToDo, AxesBroke,
BankDot1, BankDot2, BankDot3, TreeSymbol, Tree, TotalLogs, LogMask, AxeMask, Loads,
ChangedYews, StartLvl, GainedLvl, AxeHeadTxt, BrokenAxeHeadMask, HeadDTM: integer;
ColorArray: array of integer; NoAxe: Boolean;
ChopMark, LogPresent, LogCheck, SST1, SST2, FindNorMalRandomsTime, FindFastRandomsTime,
Report, LoggedInTime: LongInt;
//----------------------------------------------------------------------------//
// --> PLAYER SETUP <-- //
//----------------------------------------------------------------------------//
procedure DeclarePlayers;
begin
HowManyPlayers:=4;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name :='timefault'; //Name
Players[0].Pass :='lolnoob!'; //Password
Players[0].Nick :=''; //3-4 letter nickname
Players[0].Loc :='Bank'; //Where is your Player? CHOOSE FROM: Bank, Yew 1 or Yew 2
Players[0].Integers[1] := 2 ; //Loads to do
Players[0].Active := True; //Is the Player used?
end;
//----------------------------------------------------------------------------//
// --> OVERALL PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure LoadVar;
begin
BankDot1 := DTMFromString('78DA636C67626008664001FFFFFF67F80FA41' + //By WT-Fakawi --> From Charm
'921ECFF8CB54035DEA86AFEFC61621081AA0101C63A4C73B0AA09' +
'C7AF06000153117B');
BankDot2 := DTMFromString('78DA63EC60626008624001FFFFFF67F80FA41' +
'921ECFF8C3540353EA86AFEFC61621081AA0101C63AA09A1022D4' +
'44E057030001B5117D');
BankDot3 := DTMFromString('78DA63EC60626008624001FFFFFF67F80FA41' +
'921ECFF8CF540359EA86AFEFC61621081AA0101C63AA09A40026A' +
'6A816A42F1AB010000781176');
Tree := BitmapFromString(9, 1, '788843283020606837809046607' +
'01D001000506022506022485032');
LogMask := BitmapFromString(13, 10, 'z78DA33301805E40037BC8' + //Charm
'0BAB6D0C2E5F451494998D02E5471010034299979');
AxeHeadTxt := BitmapFromString(30, 10, 'z78DA7373B334303170' +
'0393A62EA62626E6839374437227320901A36E1E75333124A9265' +
'04B3DA9EE84005C2663AAA4AE7A5CBAF0BB16530D729A21559C98' +
'10C36F0E316E26DE6DF87D4DBC1B28B197BCF0C404F8639972715' +
'AC435A9B98954F3013DD58547');
HeadDTM := DTMFromString('78DA63CC62626078C180021C2312191E02694' +
'620FE0F048C694035CF18D000231209A473816A9E12A1E6150135' +
'A94035AF09A801B9F9090135994498930C54F392809A3CCCF0415' +
'70300FB8311DF');
BrokenAxeHeadMask := BitmapFromString(9, 10, 'z78DA7373230D1890' +
'05C8D34BAA2EE2D5E3F21131FEC56FCBE091A53C34007F307225');
AxeMask := BitmapFromString(10, 10, 'z78DA7373230D18500028316' +
'130E825353470A921DE3DE499409EDB480D25FCE10000B72C7CE1' +
'');
end;
procedure PlayerStats; //Based on Fakawi's Progress Report
var Active: string;
i, PlayerTemp: Integer;
begin
if Players[CurrentPlayer].Loc <> 'Bank' then
begin
GameTab(4);
PlayerTemp := Players[CurrentPlayer].Integers[2];
Players[CurrentPlayer].Integers[2] := CountItemBmpMaskTol(LogMask, 20, 10) + PlayerTemp;
end
Writeln(' ');
WriteLn ('<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>');
for I := 0 to HowManyPlayers - 1 do
begin
if Players[i].Active=True then Active:='True' else Active:='False';
WriteLn ( '< ' + Inttostr ( I ) + ' : ' + Players[i].Name + ' = ' + Active
+' . Loc = ' + Players[i].Loc +
+' . Chopped ' + IntToStr(Players[i].Integers[2]) +' Logs.'
+' . Lvl = ' + IntToStr(Players[i].level[20]));
end
WriteLn ('<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>');
Players[CurrentPlayer].Integers[2] := PlayerTemp;
end;
procedure ProgressReport; //Based on Fakawi's Progress Report
var LogTemp: Integer;
begin
if Players[CurrentPlayer].Loc = 'Bank' then LogTemp := TotalLogs else
begin
GameTab(4);
LogTemp := CountItemBmpMaskTol(LogMask, 20, 10);
LogTemp := LogTemp + TotalLogs;
end;
//Cleardebug;
SRLRandomsReport;
Writeln(' ');
Writeln('/~~~~~~~~~~~~~~~~~~ Niels ~~~~~~~~~~~~~~~~~~~\');
Writeln('||~~~~~~~~~~~~~~~~ Draynor ~~~~~~~~~~~~~~~~~||');
Writeln('||~~~~~~~~~~~ Yew Cutter/Banker ~~~~~~~~~~~~||');
Writeln('||~~~~~~~~~~~~ Progress Report ~~~~~~~~~~~~~||');
Writeln('||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||');
Writeln('|| Worked for '+ TimeRunning);
Writeln('|| Chopped '+ IntToStr(LogTemp)+(' Logs.'));
Writeln('|| Banked '+ IntToStr(Banks)+' time[s].');
if ChangedYews > 0 then
WriteLn('|| Changed from yew '+ IntToStr(ChangedYews)+' time[s].');
if AxesBroke > 0 then
WriteLn('|| Broken '+ IntToStr(AxesBroke) +' Axe[s].');
if GainedLvl > 0 then
WriteLn('|| Gained '+ IntToStr(GainedLvl) +' Lvl[s].');
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| Current Colors:');
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| Dirt: '+IntToStr(DirtRoadColor));
WriteLn('|| Road: '+ IntToStr(RoadColor));
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| Current Player: ' + Players[CurrentPlayer].Name);
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| Current Version: ' + Version);
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
Writeln('\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/');
PlayerStats;
MarkTime(Report);
end;
function FindFastRandoms: Boolean; //Almost Directly from Fakawi's Goblin Sheduler
var i: Integer;
begin
for i:=1 to 10 do
begin
if(not(LoggedIn))then Exit;
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';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
end;
8: begin
if InBlack then
begin
Result := True;
Players[CurrentPlayer].loc := 'InBlack';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
end;
9 : if FindFight then
begin
Result := True;
RunTo('N', True);
end;
10: if FindTalk then
Result := True;
end;
wait(1);
end;
end;
procedure FtWaitE ( Time : Integer ); //FTWaitD without the status writing
var T, I : integer;
begin
try
T := (Time div 1000)+1;
for I := 1 to T do
begin
Wait ( 250 );
FindTalk;
end
except
begin
if(not(LoggedIn))then Exit;
Wait ( Time );
FindTalk;
end;
end;
if(not(LoggedIn))then Exit;
MarkTime(FindNorMalRandomsTime);
if FindNorMalRandomsTime-SST1 >(10000+Random(5000)) then
begin
FindNorMalRandoms;
MarkTime(SST1);
end;
MarkTime(FindFastRandomsTime);
if FindFastRandomsTime-SST2 >(1500+Random(1500)) then
begin
FindFastRandoms;
MarkTime(SST2);
end;
end;
//----------------------------------------------------------------------------//
// --> OVERAL CHOP PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure GainLvl; //Idea based on SL 'PS Willow Cutter' CheckLeveled function
Var temp: Integer;
begin
if(not(LoggedIn))then Exit;
if (Clicktocontinue) then WriteLn('We probably gained a lvl!');
Temp := (Players[CurrentPlayer].level[20] - StartLvl);
if (Temp > 0) then
begin
StartLvl := Players[CurrentPlayer].level[20]
Gainedlvl := GainedLvl + Temp;
end
end;
procedure CountLogs; // CharmZ
var LogTemp: integer;
begin
if(not(LoggedIn))then Exit;
GameTab(4);
LogTemp := CountItemBmpMaskTol(LogMask, 20, 10);
TotalLogs := LogTemp + TotalLogs;
Players[CurrentPlayer].Integers[2] := Players[CurrentPlayer].Integers[2] + LogTemp;
end;
procedure FirstEmptySlot;
begin
if(not(LoggedIn))then Exit;
if (InvFull) then exit;
slot := 0;
repeat
slot := slot + 1
until(not ExistsItem(slot));
marktime(LogCheck);
end;
function CheckForLogs: Boolean; //Idea from SL 'PS willow cutter'
begin
if(not(LoggedIn))then Exit;
if (InvFull) then exit;
if (TimeFromMark(LogCheck) >= (15000 + random (1000))) then
begin
GameTab(4);
if (not ExistsItem(slot)) then
begin
WriteLn('No logs found since last check');
Result := True;
FirstEmptySlot;
end else
begin
FirstEmptySlot;
MarkTime(LogPresent);
Result := False;
end
end
if (TimeFromMark(LogPresent) > 240000) then
begin
WriteLn('4 mins no logs were found, Player is set to false');
Players[CurrentPlayer].Loc := '4 mins no logs';
Players[CurrentPlayer].Active := False;
Logout;
end
end;
//----------------------------------------------------------------------------//
// --> AXE PROCEDURES <-- //
//----------------------------------------------------------------------------//
function CharmFindAxeHeadColors: Boolean; //Charm !!!BUGGED FROM HERE ON!!!
var AX, AY: Integer;
begin
if(not(LoggedIn))then Exit;
GameTab(4);
if(FindBitmapMaskTolerance(AxeMask, AX, AY, MIX1, MIY1, MIX2, MIY2, 10, 5))then
begin
Head := GetColor(AX + 5, AY + 3);
Head2 := GetColor(AX + 7, AY + 2);
Head3 := GetColor(AX, AY + 3);
EquipAxe:= False;
Result:= True;
if ((Ax > 605) or (AY > 245) or (Ax < 565) or (AY < 210)) then
begin
MMouse(AX, AY, 1, 1);
HoldMouse(AX, AY, True);
Wait(150 + Random(50));
MMouseItem(1);
GetMousePos(x, y);
ReleaseMouse(x, y, True);
Wait(100 + Random(100));
MMouse(x, y, 2, 2)
end
end else
begin
GameTab(5);
Wait(1000+Random(750));
if(FindBitmapMaskTolerance(AxeMask, AX, AY, MIX1, MIY1, MIX2, MIY2, 10, 5))then
begin
Head := GetColor(AX + 5, AY + 3);
Head2 := GetColor(AX + 7, AY + 2);
Head3 := GetColor(AX, AY + 3);
EquipAxe:= True;
Result:= True;
end
GameTab(4);
end
if(Result= True)then
begin
NoAxe:= False;
WriteLn('Axe head colors - '+IntToStr(Head)+', '+IntToStr(Head2)+ ', and '+IntToStr(Head3));
if EquipAxe then WriteLn('The axe is Equiped') else WriteLn('The axe not is Equiped');
end else
begin
WriteLn('No Axe')
Players[CurrentPlayer].loc := 'No Axes';
Players[CurrentPlayer].Active := False;
Logout;
end
end;
function MyFindAxeHead: Boolean; //Mix from SRL Findhead and Charmz findaxehead procedures + walkback from RedDot
var xh, yh, ex, ey, xb, yb, Tries: Integer;
Start: Boolean;
begin
if(not(LoggedIn))then Exit;
if(InChatMulti('ou do not have', 'You do no', 'o not have a')or
(FindBitmapMaskTolerance(AxeHeadTxt, x, y, MCX1, MCY1, MCX2, MCY2, 10, 85))) then
begin
if not EquipAxe then
begin
GameTab(4);
Wait(50+Random(50));
if(not(FindBitmapMaskTolerance(AxeMask, x, y, MIX1, MIY1, MIX2, MIY2, 20, 10)))then Start:= True;
end else
if EquipAxe then
begin
GameTab(5);
Wait(50+Random(50));
if(not(FindBitmapMaskTolerance(AxeMask, x, y, MIX1, MIY1, MIX2, MIY2, 20, 10)))then Start:= True;
end
end;
if Start then
begin
Status('Finding the axe')
WriteLn('Lost Axe Head, Finding..');
HighestAngle;
if(FindBitmapMaskTolerance(BrokenAxeHeadMask, XH, YH, MIX1, MIY1, MIX2, MIY2, 20, 25))then
begin
AxesBroke:= AxesBroke + 1;
WriteLn('Found a Broken Axe!');
NoAxe:= True;
Mouse(XH,YH,0,0,false);
if not ChooseOption(Ex, Ey, 'emove') then
ChooseOption(ex, ey, 'Cancel');
Result:= False;
Exit;
end
GameTab(4);
FtWaitE(2000+Random(100));
if(InvFull)then
begin
if(FindBitmapMaskTolerance(LogMask, XH, YH, MIX1, MIY1, MIX2, MIY2, 20, 25))then
begin
Mouse(XH, YH, 0, 0, False);
ChooseOption(x, y, 'rop');
end
end
repeat
if not LoggedIn then Exit;
if (FindDTM(HeadDTM, XH, YH, MIX1, MIY1, MIX2, MIY2)) then Break;
if not (FindObjMulti('Take', Head, Head2, Head3, 5)) then
begin
SetRun(True);
Tries := Tries + 1;
WriteLn('Axe head not found. Taken ' + IntToStr(tries) + ' tries');
Status('Axe Head not found - Rotating Screen');
KeyDown(VK_LEFT);
Wait(500 + Random(800));
KeyUp(VK_LEFT);
Wait(400 + Random(300));
if not FindObjMulti('Take', Head, Head2, Head3, 5) then
begin
Status('Axe Head not found - Moving to Red Dot');
x := 648;
y := 83;
FindColorSpiral(x, y, 241, 615, 55, 675, 115)
XB := X
YB := Y
Mouse(x + 3, y + 3, 2, 2, True);
Flag;
Wait(100 + Random(300));
Tries := Tries + 1;
end;
if FindObjMulti('Take', Head, Head2, Head3, 5) then
begin
Status('Found Axe Head');
WriteLn('Axe head was found. Picking it up');
Wait(300 + Random(400));
GetMousePos(x, y);
Mouse(x, y, 0, 0, True);
Flag;
Wait(500 + Random(300));
XB := 648 - XB + 648
YB := 83 - YB + 83
Mouse(XB,YB,1,1,True);
Flag;
Wait(500 + Random(300));
Tries := Tries + 1;
end else
begin
if (not(FindSymbol(x, y, 'Tree'))) then
begin
Status('Walking back from Red Dot');
FtWaitE(500 + Random(300));
XB := 648 - XB + 648
YB := 83 - YB + 83
Mouse(XB,YB,1,1,True);
Flag;
FtWaitE(500 + Random(300));
Tries := Tries + 1;
end;
end;
end;
until (tries > 9) or (FindDTM(HeadDTM, XH, YH, MIX1, MIY1, MIX2, MIY2));
if (tries > 9) then NoAxe := True else
if (AttachHead) then
begin
Result := True;
NoAxe := False;
GameTab(4);
end
Setrun(False);
MakeCompass('N');
Flag;
Wait(500);
if FindSymbol(x, y, 'tree') then
begin
MouseFindFlag(x, y -9, 1, 1);
FFlag(0);
end
end;
end;
procedure GetBestAxe;
var RuneAxeMask, AddyAxeMask, MithAxeMask, SteelAxeMask, IronAxeMask, BronzeAxeMask, x ,y: integer;
begin
Status('Getting the best axe from the bank');
Wait(5000);
RuneAxeMask := BitmapFromString(5, 10, 'z78DA958C410E80400803BF040' +
'B6DC2D58DFEFF49EAE281E86A620F3DCC14448EA8DCFB8A37045B' +
'EDBA71C742266728247ED8FCA920B6891DFCDBD24F5E3B37B6C2D' +
'09F3C6FAD4330E125FAC2650704733B67');
AddyAxeMask := BitmapFromString(5, 10, 'z78DA7D8BB10DC0200C0457B2F' +
'11B899208F65F8944503C58E48A2FEE6C91179573175057282FDF' +
'203990A6CF455DCA56E9EB56ADA3598F75FAFF9AF179DE5BDD7E2' +
'B1EABD113D12C06E4823B85');
MithAxeMask := BitmapFromString(5, 10, 'z78DA8D90410AC0200C04BF94B' +
'08992A394FAFF27D5AAA5DB16A11BD8C34C02A2488BCADD8F6047' +
'F58D9B374D4DBD0E9E425D82EDBC6AE341567ED9CE51503CAD6CB' +
'293734F3BAEDEFC7A5546767C3965F91B0716F53C9C');;
SteelAxeMask := BitmapFromString(5, 10, 'z78DA758E490E80300C03BFE4' +
'40EB28D7B2FCFF49A48B5028604B3E8CDB24804B30E79066EEDC6' +
'2C6375A74712B4F1E34C9B047DB78FFF5D1F6992B8BFBDD36AEA0' +
'55DF2D62CB5479CC3EC16F51F7CC87FC96543D6F0C921F8E0BF2C' +
'73C7F');
IronAxeMask := BitmapFromString(5, 10, 'z78DA958C310E80300C03BFE40' +
'863292355E9FF9F44A1194251073C78B8930DF418E68EEC1B2B6B' +
'EE97151BDBE02A26787E8895B1F0F86D1FCE934E5F59E9E6B9878' +
'DD5CC63DB5F457D798A2D382EE20F3C76');
BronzeAxeMask := BitmapFromString(5, 10, 'z78DA33300002430374120A4' +
'C9C8D1D8D8C90496435C8E2669686A6069658642D8CCD8D0CB0C8' +
'82C5299135330189239310352626C626862E98E250BD48B298FEC' +
'5150E1000001FB63B4E');
if ((Players[CurrentPlayer].level[20]) >= 41) and (FindBitmapToleranceIn(RuneAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20)) then
begin
WriteLn('Rune Axe is found')
Wait(1000);
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(RuneAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end else
if ((Players[CurrentPlayer].level[20]) >= 31) and (FindBitmapToleranceIn(AddyAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20)) then
begin
WriteLn('Addy Axe is found')
Wait(1000);
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(AddyAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end else
if ((Players[CurrentPlayer].level[20]) >= 41) and (FindBitmapToleranceIn(MithAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20)) then
begin
WriteLn('Mithril Axe is found')
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(MithAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end else
if ((Players[CurrentPlayer].level[20]) >= 6) and (FindBitmapToleranceIn(SteelAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20)) then
begin
WriteLn('Steel Axe is found')
Wait(1000);
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(SteelAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end else
if FindBitmapToleranceIn(IronAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20) then
begin
WriteLn('Iron Axe is found');
Wait(1000);
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(IronAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end else
if FindBitmapToleranceIn(BronzeAxeMask, x, y, MSX1,MSY1,MSX2,MSY2,20) then
begin
WriteLn('Bronze Axe is found')
Wait(1000);
repeat
Mouse(x, y, 1, 1, True);
Wait(3000);
until (FindBitmapToleranceIn(BronzeAxeMask, x, y, MIX1,MIY1,MIX2,MIY2,20))
end
FreeBitmap(RuneAxeMask);
FreeBitMap(AddyAxeMask);
FreeBitmap(MithAxeMask);
FreeBitmap(SteelAxeMask);
FreeBitmap(IronAxeMask);
FreeBitMap(BronzeAxeMask);
end;
//----------------------------------------------------------------------------//
// --> BANKING PROCEDURES <-- //
//----------------------------------------------------------------------------//
function MyOpenBank: Boolean;
var bx, by, tol: Integer; OpenBankTime: LongInt;
begin
Status('Opening Bank');
WriteLn('Opening Bank');
if(not(LoggedIn))then Exit;
MakeCompass('W');
LowestAngle;
Tol := 0
MMouse(240, 135, 1, 1);
if IsUpTextMulti('e Bank', 'Booth', 'ooth') then
begin
GetMousePos(bx, by);
Mouse(bx, by, 0, 0, False);
if ChooseOption(x, y, 'uickly') then
begin
MarkTime(OpenBankTime);
repeat
if(not(LoggedIn))then Exit;
Wait(10);
if TimeFromMark(OpenBankTime) > 20000 then Exit;
if BankScreen then Break;
until BankScreen;
Result := True;
exit;
end
end else
repeat
Wait(200);
if (FindObjectMulti(bx, by, 'se Bank', 'Bank Booth', 'nk Booth', 8026748, 1984346, 3026483, Tol, 10, True, True)) then
begin
if(not(LoggedIn))then Exit;
Mouse(bx, by, 0, 0, False);
if ChooseOption(x, y, 'uickly') then
begin
MarkTime(OpenBankTime);
repeat
if(not(LoggedIn))then Exit;
Wait(10);
if BankScreen then Break;
if TimeFromMark(OpenBankTime) > 20000 then Exit;
until BankScreen;
Result := True;
exit;
end
Wait(200);
end else Tol := Tol + 10;
until ((BankScreen) or (Tol >= 50))
if (Tol >= 50) then result := False;
end;
procedure Bank;
begin
Status('Banking')
if(not(LoggedIn))then Exit;
if (FlagPresent) then Flag;
GetAllLevels;
GainLvl;
CountLogs;
if (not(MyOpenBank)) then
begin
if(not(LoggedIn))then Exit;
MakeCompass('N');
HighestAngle;
Openbank3;
end
if (EquipAxe) then Deposit(1,28,2) else
Deposit (2,28,2)
if (NoAxe) then
begin
fixbank;
wait(1000);
DepositAll;
Wait(1000)
GetBestAxe;
Wait(1000);
Closebank;
Wait(1000);
if FindBitmapMaskTolerance(AxeMask, x, y, MIX1, MIY1, MIX2, MIY2, 20, 10) then Mouse(x, y, 1, 1, True);
Wait(5000);
CharmFindAxeHeadColors;
Loads := loads +1
Banks := Banks +1
end else
begin
Closebank;
Banks := Banks +1
Loads := Loads +1
end
PerfectNorth;
HighestAngle;
end;
//----------------------------------------------------------------------------//
// --> WALKING PROCEDURES <-- //
//----------------------------------------------------------------------------//
Function CountArray(Color: integer):integer; //Tarajunky
var n:integer;
begin
For n:= 0 to GetArrayLength(ColorArray)-1 do
begin
if ColorArray[n]= Color then result:=result+1;
end;
end;
Function FindDirtColor: integer;
var h,i,j,n,tol,Color:integer; ColorPoints: TPointArray;
begin
if(not(LoggedIn))then Exit;
repeat
if Tol > 60 then Color := DirtColor else Color := 1652808
if Tol = 10 then Color := DirtColor;
FindColorsSpiralTolerance(MMCX, MMCY, ColorPoints, Color, MMX1, MMY1, MMX2 -20, MMY2, tol)
For h := 0 to GetArrayLength(ColorPoints)-1 do
begin
TestColor := GetColor(ColorPoints[h].x, ColorPoints[h].y);
SetArrayLength(ColorArray, 0);
n:=0;
red := (TestColor mod 256) //
green := ((TestColor / 256) mod 256); //
blue := ((TestColor / 256) / 256); //
// this part is Tarajunky's
if Tol < 60 then if FindColor(x, y, TestColor, 680, 15, MMX2, MMY2) then //
if Red - Green >= 3 then if Red - Green <= 32 then //
if Red - Blue >= 30 then if Red - Blue <= 62 then //
if Green - Blue >= 15 then if Green - Blue <= 50 then //
if GetColor(ColorPoints[h].x +5, ColorPoints[h].y) = TestColor then
if GetColor(ColorPoints[h].x -9, ColorPoints[h].y) = TestColor then
if GetColor(ColorPoints[h].x +3, ColorPoints[h].y +3) = TestColor then
if GetColor(ColorPoints[h].x -3, ColorPoints[h].y -3) = TestColor then
for i:= 0 to 15 do
begin
for j:= 0 to 6 do
begin
SetArrayLength(ColorArray, GetArrayLength(ColorArray)+1);
ColorArray[n]:=GetColor(ColorPoints[h].x -9 + i, ColorPoints[h].y -3 + j);
n:=n+1;
end;
end;
if (CountArray(TestColor) > 80) then
begin
WriteLn('Color = '+ inttostr(testColor)+' Red: '+inttostr(Red)+' Blue: '+inttostr(Blue)+' Green: '+inttostr(Green));
WriteLn('DirtColor = ' + Inttostr(TestColor) + ' found at a Tol of ' + IntToStr(Tol));
DirtRoadColor := TestColor;
Result := DirtRoadColor;
DirtColor := DirtRoadColor;
exit;
end
end;
Tol := Tol + 10;
if Tol > 20 then IdleTime(Tol * 30, 75, 1) else Wait(Tol * 30) //Makes sure it wont logout.
until Tol > 100;
WriteLn('DirtRoadColor NOT found!');
WriteLn('Terminating script..');
TerminateScript;
end;
procedure WalkToYews;
begin
if(not(LoggedIn))then Exit;
Status('Walking to Yews');
FindRoadColor;
RadialRoadWalk(RoadColor, 95, 58, 54, -1, 0);
if not FindMMColor(x, y, RoadColor) then FindRoadColor;
RadialRoadWalk(RoadColor, 140, 195, 55, -1, -1);
if not FindMMColor(x, y, RoadColor) then FindRoadColor;
RadialRoadWalk(RoadColor, 140, 195, 55, -1, -1);
if not FindMMColor(x, y, RoadColor) then FindRoadColor;
RadialRoadWalk(RoadColor, 120, 160, 55, -1, -1);
Flag;
FindDirtColor;
RadialWalk(DirtRoadColor, 135, 75, 55, -1, 0);
if not FindMMColor(x, y, DirtRoadColor) then
begin
Flag;
FindDirtColor;
end
RadialWalk(DirtRoadColor, 30, 117, 55, -1, 0);
if not FindMMColor(x, y, DirtRoadColor) then
begin
Flag;
FindDirtColor;
end
RadialWalk(DirtRoadColor , 88, 48, 50, -1, 0);
SymbolAccuracy := 0.5;
if FindSymbol(tx, ty, 'tree') then Mouse(tx, ty +5, 1, 1, True) else
begin
if not FindMMColor(x, y, DirtRoadColor) then
begin
Flag;
FindDirtColor;
end
RadialWalk(DirtRoadColor , 88, 48, 50, -1, 0);
if not FindSymbol(tx, ty, 'tree') then
begin
if TreeSymbol <> 0 then
if FindColorTolerance(tx, ty, Treesymbol, MMX1, MMY1, 785, 90, 1) then Mouse(tx, ty +9, 1, 1, True) else
begin
WriteLn('YewSymbol not found, maybe its an Ent, so we are waiting..');
FtWaitE(15000);
MouseBack(Random(1100) - Random(600), Random(700) - Random (400), 8, 8, 50, 60, 0);
FtWaitE(10000);
if FindSymbol(tx, ty, 'tree') then Mouse(tx, ty +9, 1, 1, True);
end else
begin
WriteLn('Tree not found');
Players[CurrentPlayer].Loc := 'Lost while walking to Yews';
Players[CurrentPlayer].Active := False;
LogOut;
SymbolAccuracy := 0.9;
exit;
end
end
end;
Flag;
Players[CurrentPlayer].Loc := 'Yew 1';
SymbolAccuracy := 0.9;
end;
procedure WalkToBank;
begin
if(not(LoggedIn))then Exit;
Status('Walking to Bank');
FindDirtColor;
RadialWalk(DirtRoadColor , 290, 245, 58, 1, 0);
if not FindMMColor(x, y, DirtRoadColor) then
begin
Flag;
FindDirtColor;
end
RadialWalk(DirtRoadColor , 276, 230, 58, 1, 0);
if not FindMMColor(x, y, DirtRoadColor) then
begin
Flag;
FindDirtColor;
end
RadialWalk(DirtRoadColor , 185, 265, 55, 1, 0);
Flag;
FindRoadColor;
RadialRoadWalk(RoadColor, 270, 320, 65, 1, 1);
if not FindMMColor(x, y, RoadColor) then FindRoadColor;
RadialRoadWalk(RoadColor, 320, 365, 58, 1, 1);
Flag;
SymbolAccuracy := 0.3;
if (DTM3Flag(BankDot1, BankDot2, BankDot3, True)) then Flag else
if FindSymbol(tx, ty, 'bank') then Mouse(tx, ty, 1, 1, True) else
begin
if not FindMMColor(x, y, RoadColor) then FindRoadColor;
RadialRoadWalk(RoadColor, 335, 390, 45, 1, 1);
Flag;
if (DTM3Flag(BankDot1, BankDot2, BankDot3, True)) then Flag else
if FindSymbol(tx, ty, 'bank') then Mouse(tx, ty, 1, 1, True) else
begin
WriteLn('Bank not found');
Players[CurrentPlayer].Loc := 'Lost while walking to bank';
Players[CurrentPlayer].Active := False;
LogOut;
SymbolAccuracy := 0.9;
exit;
end
end
Players[CurrentPlayer].Loc := 'Bank';
SymbolAccuracy := 0.9;
end;
procedure Yew1to2;
begin
if(not(LoggedIn))then Exit;
if ((TreeSymbol = 0) or (not(FindMMcolor(x, y, TreeSymbol)))) then TreeSymbol := (GetSymbolColor(x, y, 'tree'))
MouseFindFlag(675, 115, 1, 1);
fflag(3);
if (FindColorTolerance(x, y, Treesymbol, 650, 70, 720, 155, 1)) then mouse(x, y, 1, 1, true);
Flag;
Players[CurrentPlayer].Loc := 'Yew 2';
Wait(500);
end;
procedure Yew2to1;
begin
if(not(LoggedIn))then Exit;
if ((TreeSymbol = 0) or (not(FindMMcolor(x, y, TreeSymbol)))) then TreeSymbol := (GetSymbolColor(x, y, 'tree'))
MouseFindFlag(616, 60, -1, 0)
fflag(3);
if (FindColorTolerance(x, y, Treesymbol, 570, 10, 650, 100, 1)) then mouse(x, y +9, 1, 1, true);
Flag;
Players[CurrentPlayer].Loc := 'Yew 1';
Wait(500);
end;
procedure ChangeYews;
begin
if(not(LoggedIn))then Exit;
Status('Changing Yews');
if LowerCase(Players[CurrentPlayer].Loc) = 'yew 1' then
begin
WriteLn('Walking from the first Yew to the second.');
Yew1to2;
end else
if LowerCase(Players[CurrentPlayer].Loc) = 'yew 2' then
begin
WriteLn('Walking from the second Yew to the first.');
Yew2to1;
end
ChangedYews := ChangedYews +1;
end;
//----------------------------------------------------------------------------//
// --> CHOPPING PROCEDURES <-- //
//----------------------------------------------------------------------------//
function EntCheck(tx, ty: integer; Move: Boolean): Boolean;
begin
if(not(LoggedIn))then Exit;
if Move then MMouse(tx, ty, 1, 1);
Wait(150 +Random(150));
if IsUpText('Yew') then
if FindColorTolerance(x, y, 55769, 85, 15, 115, 15, 20) then Result := True;
end;
function HandleEnt(Move: Boolean): Boolean;
var Ent: LongInt;
begin
if(not(LoggedIn))then Exit;
if (FindColorCircleTolerance(x,y, 195836, 15, 648, 83, 20)) then
if EntCheck(TreeX, TreeY, Move) then
begin
WriteLn('Handling Ent!');
Result := True;
Mouse(MMCX, MMCY, 0, 0, True);
MarkTime(Ent);
repeat
FTWaitE(1500);
until ((not EntCheck(TreeX, TreeY, True)) or (TimeFromMark(Ent) > 120000))
EntsAvoided := EntsAvoided +1;
end else
Result := False;
end;
Function FindDeformedYew(Var ObjX, ObjY: Integer): Boolean; //Charmz <-- Not used for now, as it causes to much lack.
Var
Acc, Ref: Extended;
TX, TY, Times, Tol: Integer;
Begin
if(not(LoggedIn))then Exit;
WriteLn('Performing FindDeformedYew');
Ref:= 0.9;
Tol:= 0;
For Times := 1 to 10 do
Begin
FindTalk;
Wait(50+Random(100));
Try
FindDeformedBitmapToleranceIn(Tree, TX, TY, MSX1 + 50, MSY1 + 30, MSX2 - 50, MSY2 - 50, Tol, 2, True, Acc);
except
Result:= False;
End
If(Acc >= Ref)then
Begin
tx := tx +10
TempColor := GetColor(tx, ty);
MMouse(TX, TY, 3, 3);
If(IsUpTextMulti('hop down Ye', 'down Yew', 'own Y')) or (IsUpTextMulti('Yew', 'ew', 'Ye'))then
Begin
ObjX:= TX;
ObjY:= TY;
TreeX := ObjX;
TreeY := ObjY;
Result:= True;
Exit;
End
End
Ref:= Ref - 0.05; // Ref - 0.1
Tol:= Tol + 5; // Tol + 10
Wait(Random(50));
Wait(1);
End
Wait(1);
End;
function FindYew(var x, y: integer): Boolean;
var
Points: TPointArray;
I, Ci, Tol: Integer;
begin
repeat
if FindMSColorTol(x, y, 598048, Tol) then Break else Tol := Tol +2
until Tol > 15
if Tol > 15 then
begin
Result := False;
exit;
Tol := 0
end else
begin
FindColorsSpiralTolerance(MSCX, MSCY, Points, 598048, MSX1 + 50, MSY1 + 30, MSX2 - 50, MSY2 - 50, tol)
ci := 0;
for I := 1 to GetArrayLength(Points) - 1 do
begin
if (Distance(Points[ci].x, 0, Points[i].x, 0) >= 2) and
(Distance(0, Points[ci].y, 0, Points[i].y) >= 2) then
ci := I
else
begin
Points[i].x := 0;
Points[i].y := 0;
end;
end;
for i := 0 to GetArrayLength(Points) - 1 do
begin
if (Points[i].x <> 0) then
if FindColorTolerance(x, y, 2373688, Points[i].x -5, Points[i].y -5, Points[i].x +5, Points[i].y +5, 5 +Tol) then
if FindColorTolerance(x, y, 4159600, Points[i].x -5, Points[i].y -5, Points[i].x +5, Points[i].y +5, 5 +Tol) then
if FindColorTolerance(x, y, 2900024, Points[i].x -5, Points[i].y -5, Points[i].x +5, Points[i].y +5, 5 +Tol) then
begin
TempColor := GetColor(Points[i].x, Points[i].y);
MMouse(Points[i].x, Points[i].y, 0, 0)
Wait(50);
if (IsUpText('Yew')) then
begin
Status('Yew found at a Tol of ' +IntToStr(Tol));
Result := True;
Break;
end;
end;
end;
if (Result) then
begin
x := Points[i].x;
y := Points[i].y;
TreeX := x;
TreeY := y;
end;
end;
Tol := 0;
end;
function TreeGone(Sx, Sy: integer): Boolean;
begin
if(not(LoggedIn))then Exit;
if ((not FindColor(x, y, TempColor, Sx -4, Sy -4, Sx +4, Sy +4)) or (TimeFromMark(ChopMark) > 120000)) then
begin
MMouse(TreeX, TreeY, 1, 1);
Wait(100);
if not IsUpText('Yew') then
begin
Status('Yew Gone');
Result := True;
end else
begin
if FindObjEx(tx, ty, 'Yew', TreeX -20, TreeY -20, TreeX +20, TreeY +20, 598048, 20, 2, 2, 50, True) then
begin
TempColor := GetColor(tx, ty);
MarkTime(ChopMark);
end
end
end
end;
function ClickTree: Boolean;
var Ent: LongInt;
begin
if(not(LoggedIn))then Exit;
if FindYew(tx, ty) then
begin
GainLvl;
if not EntCheck(TreeX, TreeY, False) then
begin
if(Random(20) < 15)then
begin
Mouse(tx, ty, 1, 1, True);
end else
begin
Mouse(tx, ty, 0, 0, False);
if not ChooseOption(x, y, 'hop down')then
Mouse(tx, ty, 1, 1, True);
end
end else
begin
MarkTime(Ent);
repeat
FTWaitE(1500);
until ((not EntCheck(TreeX, TreeY, True)) or (TimeFromMark(Ent) > 120000));
Mouse(tx, ty, 1, 1, True);
end
Result := True;
FtWaitE(100);
if FindFastRandoms then Mouse(tx, ty, 1, 1, True);
GainLvl;
MyFindAxeHead;
end else
{ if FindDeformedYew(tx, ty) then
begin
Wait(50 +Random(150));
if not HandleEnt(False) then Mouse(tx, ty, 1, 1, True);
Result := True;
end else} Result := False;
end;
procedure WaitTillTree;
var TillTreeMark: LongInt;
begin
if(not(LoggedIn))then Exit;
if InvFull then Exit;
Status('Yew not found, waiting..');
MarkTime(TillTreeMark);
GetAllLevels;
repeat
case Random(20) of
0 : SleepAndMoveMouse(2000 +Random(1000));
1 : MouseBack(Random(1100) - Random(600), Random(700) - Random (400), 8, 8, 50, 60, 0);
2 : IdleTime(2000 +Random(1000), 14, 2);
3 : begin RandomRClick; Wait(200); ChooseOption(x, y, 'Cancel'); end
4 : FtWaitE(1500);
5 : PickUpMouse;
6 : FtWait(50);//AlmostLogOut;
7 : GameTab(Random(13) +1);
8 : SleepAndMoveMouse(2000 +Random(1000));
9 : WWait(3000);
10: PickUpMouse;
11: FtWait(8);
12: IdleTime(3000 +Random(1000), 14, 2);
13: WWait(2500);
14: IdleTime(2700, 11, 1);
15: GameTab(Random(13) +1);
16: WWait(2000);
17: FtWaitE(1500);
18: PickUpMouse;
19: begin RandomRClick; FtWaitE(200); ChooseOption(x, y, 'Cancel'); end
end
FindFastRandoms;
if ClickTree then Break;
FindFastRandoms;
Wait(1000);
if (TimeFromMark(Report) > 180000) then ProgressReport;
FtWaitE(1500 +Random(2000));
if (TimeFromMark(TillTreeMark) > 450000) then
begin
WriteLn('No tree for 7,5 minutes');
Players[CurrentPlayer].Loc := 'No tree in 7,5 mins';
Players[CurrentPlayer].Active := False;
LogOut;
end
until(ClickTree);
end;
procedure Chop;
var TreeWait: LongInt;
begin
if(not(LoggedIn))then Exit;
HighestAngle;
repeat
Status('Chopping');
FirstEmptySlot;
if NoAxe then break;
if not ClickTree then WaitTillTree;
MarkTime(ChopMark);
MarkTime(LogPresent);
MarkTime(LogCheck);
repeat
Status('Chopping');
if(not(LoggedIn))then Exit;
if InvFull then Break;
FtWait(2);
MyFindAxeHead;
if NoAxe then break;
if HandleEnt(True) then ClickTree;
if not TreeGone(TreeX, TreeY) then
case Random(20) of
0 : SleepAndMoveMouse(500 +Random(500));
1 : MouseBack(Random(1100) - Random(600), Random(700) - Random (400), 8, 8, 50, 60, 0);
2 : IdleTime(1000 +Random(1000), 14, 2);
3 : begin RandomRClick; Wait(200); ChooseOption(x, y, 'Cancel'); end
4 : FtWait(2);
5 : PickUpMouse;
6 : SleepAndMoveMouse(500 +Random(500));//AlmostLogOut;
7 : GameTab(Random(13) +1);
8 : SleepAndMoveMouse(500 +Random(1000));
9 : WWait(1000);
10: PickUpMouse;
11: FtWait(6);
12: IdleTime(500 +Random(1000), 14, 2);
13: WWait(500);
14: IdleTime(700, 11, 1);
15: GameTab(Random(13) +1);
16: HandleEnt(False);
17: MouseBack(Random(1100) - Random(600), Random(700) - Random (400), 8, 8, 50, 60, 0);
18: PickUpMouse;
19: begin RandomRClick; Wait(200); ChooseOption(x, y, 'Cancel'); end
end
if not TreeGone(TreeX, TreeY) then
begin
MarkTime(TreeWait);
if HandleEnt(True) then ClickTree;
repeat
FtWaitE(500 +Random(1000));
Wait(100);
if HandleEnt(False) then ClickTree;
Wait(100);
if NoAxe then break;
if CheckForLogs then ClickTree;
if TreeGone(TreeX, TreeY) then break;
if InvFull then Break;
if (TimeFromMark(Report) > 180000) then ProgressReport;
until(TimeFromMark(TreeWait) > 30000);
end
until ((TreeGone(TreeX, TreeY)) or (TimeFromMark(ChopMark) > 90000));
MyFindAxeHead;
if NoAxe then break;
if not InvFull then ChangeYews;
until ((InvFull) or (not(LoggedIn)));
if LowerCase(Players[CurrentPlayer].Loc) = 'yew 2' then Yew2to1;
end;
//----------------------------------------------------------------------------//
// --> MAIN THING <-- //
//----------------------------------------------------------------------------//
begin
ClearDebug;
WriteLn('Nielsie95 Draynor Yew Cutter / Banker version '+ Version);
Status('Nielsie95 Draynor Yew Cutter / Banker version '+ Version);
Wait(2500);
setupsrl;
activateclient;
BenMouse := False;
MouseSpeed := 20 + random(5);
DeclarePlayers;
NickNameBMP:=CreateBitmapMaskFromText(Players[CurrentPlayer].Nick,UpChars);
LoadVar;
DirtColor := HumanDirtColor;
LoadsToDo := Players[CurrentPlayer].Integers[1];
LoginPlayer;
CharmFindAxeHeadColors;
GetAllLevels;
MarkTime(LoggedInTime);
repeat
repeat
if LowerCase(Players[CurrentPlayer].loc) = 'bank' then
begin
if InvCount > 10 then Bank;
if (TimeFromMark(LoggedInTime) > MaxLoggedInTime*60*1000) then Break;
if (Loads >= LoadsToDo) then Break;
WalkToYews;
end
if ((LowerCase(Players[CurrentPlayer].loc) = 'yew 1') or (LowerCase(Players[CurrentPlayer].loc) = 'yew 2')) then
begin
Chop;
Wait(100);
if (TimeFromMark(LoggedInTime) > MaxLoggedInTime*60*1000) then Break;
WalkToBank;
end
ProgressReport;
if not LoggedIn then Break;
until((Loads >= LoadsToDo) or (TimeFromMark(LoggedInTime) > MaxLoggedInTime*60*1000) or (not(LoggedIn)));
if (TimeFromMark(LoggedInTime) > MaxLoggedInTime*60*1000) then
begin
if not (Players[CurrentPlayer].Active) then wait(100) else
Players[CurrentPlayer].loc := 'Times up';
LogOut;
WriteLn('Time is up, Logging in next player');
end
if Loads >= LoadsToDo then
begin
if not (Players[CurrentPlayer].Active) then wait(100) else
Players[CurrentPlayer].loc := 'Loads Done';
LogOut;
WriteLn('Loads are done, Logging in next player');
end
if LoggedIn then LogOut;
Loads := 0;
LoadsToDo := Players[CurrentPlayer].Integers[1];
NextPlayer(Players[CurrentPlayer].Active);
MarkTime(LoggedInTime);
CharmFindAxeHeadColors;
GetAllLevels;
ProgressReport;
until(False);
end.
Error:
Line 363: [Error] (12815:1): Unknown identifier 'Head' in script C:\Program Files\SCAR 3.11\Scripts\yewchoptest.scar