scar Code:
program PowerChopper;
{.Include SRL\SRL\Misc\SMART.SCAR}
{.include SRL\SRL.scar}
{.include SRL\SRL\Misc\Debug.scar}
const
ScriptVersion = 'V.0.9';
SMARTWorld = 152;
Members = False;
SignedClient = True;
var
LevelUp, Loads, NumOfLogs, TotalProggies, c : Integer;
TreeColor : TIntegerArray;
XpGain : TExtendedArray;
TP : TPoint;
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := 'z95';
Players[0].Active := True;//Use this player?
Players[0].Strings[0] := 'willow';//Which tree to cut?
Players[0].Integers[0] := 2500;//How many logs to cut?
Players[0].Booleans[0] := true;//Is hatchet equiped?
Players[0].BoxRewards := ['Xp', 'mote', 'ostume'];
{Players[1].Name := '';
Players[1].Pass := '';
Players[1].Nick := '';
Players[1].Active := True;
Players[1].Strings[0] := '';//Which tree to cut?
Players[1].Integers[0] := 000;//How many logs to cut?
Players[1].Booleans[0] := True;//Is hatchet equiped?
Players[1].BoxRewards := ['Xp', 'mote', 'ostume'];}
end;
procedure S_Signature;
begin
ClearDebug;
Writeln(' ___ ');
Wait(250);
Writeln(' ____ /\__\ ');
Wait(250);
Writeln(' /\___\ ____ \/ _/ ');
Wait(250);
Writeln(' _____ \/_ / /\___\ \/ _____ ');
Wait(250);
Writeln(' /\____\ _______/ / /___ _\/___ \_____ /\____\ ');
Wait(250);
Writeln(' / / ___\/\______\/ /____\\____/ /_____\/ / ____\ ');
Wait(250);
Writeln(' / / /__ / / ___ / ____ //___ / ____ \/ /___\ ');
Wait(250);
Writeln(' / / /___\ / /__/ / / / / /____/ / / / / /____ / ');
Wait(250);
Writeln(' \/_______//______/_/ /_/_/______/_/__/_/_/____/ / ');
Wait(250);
Writeln(' \/___________________/ ');
Wait(250);
Writeln(PadR(' Anywhere Powerchopper ' + ScriptVersion +'!', 57));
end;
procedure S_FindRandoms;
begin
LampSkill := 'woodcutting';
FindNormalRandoms;
end;
function S_LevelUp: Boolean;
begin
if FindNPCChatText('ongrat', Nothing)then
begin
ClickContinue(True, True);
Wait(80 + Random(100));
HoverSkill('woodcutting', True);
CloseWindow;
Writeln('Congratulations, you have gained a Woodcutting level!');
Result := True;
end;
end;
procedure S_MyAntiBan;
begin
case Random(80) of
0: RandomMovement;
1: BoredHuman;
2: HoverSkill('random', false);
3: RandomRClick;
4: begin
case Random(2) of
0: begin
MakeCompass(20 + Random(40));
MakeCompass(320 - Random(40));
end;
1: begin
MakeCompass(50 + Random(30));
MakeCompass(300 - Random(30));
end;
end;
end;
5: begin
MakeCompass(80 + Random(20));
MakeCompass(280 - Random(80));
end;
6: HoverSkill('woodcutting', false);
7: PickUpMouse;
end;
end;
function Lv_GetLevel: Integer;
begin
Result := GetSkillLevel('woodcutting');
Writeln('Woodcutting level is ' + IntToStr(Result) + '.');
end;
function Lv_LevelUp: Boolean;
var
Level : Integer;
begin
if FindNPCChatText('ongrat', Nothing)then
begin
ClickContinue(True, True);
Wait(80 + Random(100));
Level := GetSkillLevel('woodcutting');
if(Level = Lv_GetLevel + 1)then
begin
Writeln('Congratulations, you have gained a Woodcutting level!');
HoverSkill('woodcutting', True);
Result := True;
Inc(LevelUp);
end;
end;
end;
procedure Brk_TakeBreak;
var
BrkTime : Integer;
begin
BrkTime := 13000 + Random(4000);
if Players[CurrentPlayer].Booleans[1] then
begin
Writeln('Taking a 15 minute break.');
Logout;
Wait(BrkTime);
Writeln('Break over, logging back in.');
LoginPlayer;
end;
end;
procedure Cut_FindHatchet;
var
x, y, i : Integer;
HatchetDTM : Array of Integer;//[0] := All, but Dragon, [1] := Dragon.
begin
SetArrayLength(HatchetDTM, 2);
HatchetDTM[0] := DTMFromString('78DA63CC6664605805C448A0354590811F488' +
'344FF0301631690B509550D44164602E934206B23013520739611' +
'50930F642D24A0A61CC85A44404D2990B51ABF1A00963F0CC9');
HatchetDTM[1] := DTMFromString('78DA63F4676460B800C448205C989B810B488' +
'344FF0301A30790751A550D44164602696720EB2201355E40D655' +
'026A6C81AC2704D404035937F1AB01006E8F0B4B');//Thanks to Da 0wner for DTM.
if Players[CurrentPlayer].Booleans[0] then
GameTab(tab_Equip)
else
GameTab(tab_Inv);
if FindDTM(HatchetDTM[i], x, y, MIX1, MIY1, MIX2, MIY2) then
Writeln('Found hatchet.')
else
begin
Writeln('Didn''t find hatchet, logging out.');
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
FreeDTM(HatchetDTM[i]);
end;
function Cut_TreeColors : Integer;//Credit to Da 0wner for procedure. :)
var
TreeColor : TIntegerArray;
begin
TreeColor := [2450006, 3764069, 4481105, 4162165];
InStrArrEx(Lowercase(Players[CurrentPlayer].Strings[0]), ['tree', 'oak', 'willow', 'yew'], Result);
Result := TreeColor[result];
Result := Result * (Integer((Lowercase(Players[CurrentPlayer].Strings[0]) = 'tree') xor (Result > 2450007)));
if result <> 0 then
exit;
Writeln('No tree specified, logging out.');
Wait(80 + Random(100));
Logout;
Players[CurrentPlayer].Active := False;
end;
procedure Cut_ColorSpeeds;
begin
case Lowercase(Players[CurrentPlayer].Strings[0]) of
'tree' : SetColorSpeed2Modifiers(0.05, 1.37);
'oak' : SetColorSpeed2Modifiers(0.10, 1.63);
'willow' : SetColorSpeed2Modifiers(0.18, 0.28);
'yew' : SetColorSpeed2Modifiers(0.01, 0.76);
end;
end;
function Cut_ColorTolerance: Integer;
begin
case Lowercase(Players[CurrentPlayer].Strings[0]) of
'tree' : Result := 6;
'oak' : Result := 5;
'willow' : Result := 14;
'yew' : Result := 14;
end;
end;
function Cut_TreeCutDown: Boolean;
var
TPA : TPointArray;
begin
if not LoggedIn then Exit;
ColorToleranceSpeed(2);
Cut_ColorSpeeds;
FindColorsTolerance(TPA, Cut_TreeColors, TP.x - 20, TP.y - 20, TP.x + 20, TP.y + 20, Cut_ColorTolerance);
if(Length(TPA) < 10)then
begin
//Writeln('Length inside box: ' + IntToStr(Length(TPA)));
Result := True;
end;
SetColorSpeed2Modifiers(0.2, 0.2);
ColorToleranceSpeed(1);
end;
procedure Cut_WhileChopping;
var
ClickTree, NCTime, LastCount : Integer;
begin
MarkTime(ClickTree);
NCTime := 15000 + Random(10000);
LastCount := InvCount;
while(InvCount < 28)and LoggedIn do
begin
if Cut_TreeCutDown then Break;
if TimeFromMark(ClickTree) > NCTime then
if InvCount = LastCount then Break;
S_MyAntiBan;
Wait(80 + Random(5000));
S_LevelUp;
S_FindRandoms;
end;
end;
procedure Cut_ChopTrees;
var
fx, fy, i, x, y: Integer;
s, t : String;
TPA : TPointArray;
ATPA : T2DPointArray;
begin
if not LoggedIn then Exit;
RunEnergy(60);
ColorToleranceSpeed(2);
Cut_ColorSpeeds;
repeat
FindColorsSpiralTolerance(fx, fy, TPA, Cut_TreeColors, MSX1, MSY1, MSX2, MSY2, Cut_ColorTolerance);
//Writeln('Tolerance is: ' + IntToStr(Cut_ColorTolerance) + '.');
ATPA := SplitTPAEx(TPA, 5, 5);
//DebugATPA(ATPA, '');
if Length(ATPA) = 0 then Exit;
SortATPAFromFirstPoint(ATPA, Point(MSCX, MSCY));
for i := 0 to High(ATPA) do
begin
//Writeln('Length:' + IntToStr(Length(ATPA[i])));
if(Length(ATPA[i]) < 30)then Continue;
MiddleTPAEx(ATPA[i], fx, fy);
Wait(30 + Random(20));
MMouse(fx, fy, 4, 4);
s := RS_GetUpText;
t := Players[0].Strings[0];
if((Pos('hop', s) > 0) and (Pos((Copy(t, 2, Length(t))), s) > 0))then
begin
GetMousePos(x, y);
Wait(80 + Random(100));
Mouse(x, y, 0, 0, True);
TP := IntToPoint(x, y);
Cut_WhileChopping;
end;
end;
until(InvFull or not LoggedIn);
SetColorSpeed2Modifiers(0.2, 0.2);
ColorToleranceSpeed(1);
end;
procedure Bankit;
var time, i : Integer;
begin
if (not(Loggedin)) then exit;
for i:=1 to 3 do
begin
OpenBank('db', True, True);
if ((bankscreen) or (pinscreen)) then break;
if i=3 then
begin
logout;
Writeln('couldnt find teh bank!');
TerminateScript;
end;
wait(Randomrange(200, 500));
end; if PinScreen then InPin(Players[CurrentPlayer].Pin);
FixBank;
DepositAll
CloseBank;
end;
{*******************************************************************************
function Prg_PlayerActivity(i: integer): string;
By: Drags111
Description: Determines whether the player is active or not.
*******************************************************************************}
function Prg_PlayerActive(i : Integer): String;
begin
if Players[i].Active then Result := 'T' else Result := 'F';
end;
procedure Prg_ExpGained;
var
g : Integer;
begin
SetArrayLength(XpGain, 4)
XpGain := [25, 37.5, 67.5, 175];
case Lowercase(Players[CurrentPlayer].Strings[0])of
'tree' : g := 0;
'oak' : g := 1;
'willow' : g := 2;
'yew' : g := 3;
end;
end;
procedure Prg_Multiplayer;
var
i : Integer;
begin
Players[i].Integers[9] := Loads;
Players[i].Integers[10] := NumOfLogs;
Players[i].Integers[11] := LevelUp;
end;
procedure Prg_ProgReport;
var
i, g : Integer;
begin
Inc(TotalProggies);
Prg_ExpGained;
if(HowManyPlayers <= 1)then
begin
Writeln('[===============================================]');
Writeln(PadR('[ Coh3n''s Anywhere PowerChopper', 48) + ']');
Writeln('[==================== ' + ScriptVersion + ' ====================]');
Writeln('[ ]');
Writeln(PadR('[ Ran For: ' + TimeRunning, 48) + ']');
Writeln(PadR('[ Loads Done: ' + IntToStr(Loads), 48) + ']');
Writeln(PadR('[ Logs Chopped: ' + IntToStr(NumOfLogs), 48) + ']');
Writeln(PadR('[ Exp Gained: ' + FloatToStr(NumOfLogs * XpGain[g]), 48) + ']');
Writeln(PadR('[ Levels Gained: ' + IntToStr(LevelUp), 48) + ']');
Writeln('[ ]');
Writeln('[===============================================]');
end else
begin
Writeln('[===============================================]');
Writeln(PadR('[ Coh3n''s Anywhere PowerChopper', 48) + ']');
Writeln('[==================== ' + ScriptVersion + ' ====================]');
Writeln(PadR('[ Ran For: ' + TimeRunning, 48) + ']');
Writeln('[ ]');
Writeln('[ Nick T/F Loads Logs Lvls ]');
Writeln('[ ¯¯¯¯ ¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯ ]');
for i := 0 to High(Players)do
Writeln('[ ' + PadR(Players[i].Nick, 9) + PadR(Prg_PlayerActive(i), 9)
+ PadR(IntToStr(Players[i].Integers[9]), 9)
+ PadR(IntToStr(Players[i].Integers[10]), 9)
+ PadR(IntToStr(Players[i].Integers[11]), 8) + ']');
Writeln('[===============================================]');
end;
end;
procedure F_PlayerSetup;
begin
LoginPlayer;
SetAngle(True);
Cut_FindHatchet;
Lv_GetLevel;
end;
procedure F_ScriptSetup;
begin
ClearDebug;
Disguise('Anywhere PowerChopper');
S_Signature;
Smart_Server := SMARTWorld;
Smart_Members := Members;
Smart_Signed := SignedClient;
Smart_SuperDetail := False;
Writeln('Loading, please wait...');
SetupSRL;
DeclarePlayers;
end;
procedure F_MainLoop;
var
Start : Integer;
begin
F_ScriptSetup;
repeat
F_PlayerSetup;
MarkTime(Start);
repeat
Cut_TreeColors;
repeat
Cut_ChopTrees;
until(InvFull);
Prg_ProgReport;
if(TimeFromMark(Start) > 60000)then
if(HowManyPlayers = 1)then
Brk_TakeBreak
else
NextPlayer(True);
until((NumOfLogs >= Players[CurrentPlayer].Integers[0])or not LoggedIn);
NextPlayer(False);
until AllPlayersInactive;
end;
procedure ScriptTerminate;
begin
Prg_ProgReport;
end;
begin
F_MainLoop;
end.