{=========================================================================]
[ [SRL]PowerChopper Free Version by Pwnaz0r ]
[ Complaint with SRL Rev. 5 and SCAR 3.12c ]
[ ]
[ NAME : [SRL]Powerchopper ]
[ WRITER : Pwnaz0r ]
[ CATEGORY : Woodcutting ]
[ DESCRIPTION : Powerchops logs and drops them. ]
[ (cont.) : Handles Randoms. Be sure to set Nicknames. ]
[ USAGE : See Main thread ]
[ AUTOCOLOR : Yes, except for user tolerance control. ]
[ NOTES : Report Bugs & Proggies On MY Thread Please. ]
[ CONTACT : pwnaz0r@hotmail.com ]
[ SRL REV. : SRL Rev # 5 ]
[ SCAR VER. : SCAR 3.12c ]
[ FEATURES : Check Main thread for full list ]
[ ]
[ ]
[=========================================================================]
[ Description. ]
[=========================================================================]
[ ]
[ This Script will powerchop the following logs in Runescape: ]
[ - Tree ]
[ - Oak ]
[ - Willow ]
[ ]
[ Please make sure to auto with combat above level 20 ONLY. ]
[ ]
[=========================================================================]
[ Instructions. ]
[=========================================================================]
[ ]
[ 1. USE Runescape with Low Detail, Very Bright, UnSigned Client ]
[ 2. Set your Screen to 32 bit TRUE color. ]
[ 3. Position your characters at the woodcutting spot. ]
[ 4. Setup Players at Line 79(SRLId and Pass information at top). ]
[ 5. Click Run! ]
[ ** Note - If Script cannot find trees, please raise the tolerance ** ]
[=========================================================================}
{Note to ALL Users: if your player is logged in more than player
time (in minutes), your player will NOT be counted un active.
This script uses the best of my knowledge, but I DO NOT accept
responsibility for any lost accounts (however slim that chance may be)}
program PowerChopper;
{.include SRL/SRL.scar}
{.include SRL/SRL/Skill/Woodcutting.scar}
const
StartPlayer = 0; //Starting players number.
MSpeed = 10; // Set higher than 5 please.
YourSRLId = ''; // For SRL Stats, not your forum name.
YourSRLPassword = ''; // For SRL Stats, not your Forums pass.
TreeMMColor = 864078; //Experemental Mapwalking.
UseMapWalk = True; //Try Expermental Map Walk.
TimeToTryTree = 2; //Times to try before player goes false;
TreeTol = 6; // Make higher if its not finding tree.
MaxTreeWait = 10; //Max time to wait on a tree in seconds.
MaxLoadTime = 15; //In minutes.
MaxPlayerTime = 30; //In minutes. DOES NOT STOP PLAYERS AUTO-ING! ONLY SWITCHES
RunDir = 'N'; //Direction to run: 'N','S','E','W'
RunFar = False; // Set true to run far
AutoTalk = True; // Set true to talk randomly.
TalkEvery = 25; // Talk Every in minutes. Random 10 added.
// <-------------------------------------------->
// No Need To Touch Below Here
// <-------------------------------------------->
TreeUpText = 'ree';
OakUpText = 'ak';
WillowUpText = 'illo';
// <-------------------------------------------->
// Fill in the Player array right here
// <-------------------------------------------->
procedure DeclarePlayers;
var
I: integer;
begin
HowManyPlayers:= 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer:= StartPlayer;
Players[0].Name:= '';
Players[0].Pass:= '';
Players[0].Nick:= '';
Players[0].Strings[0]:= 'oak'; // tree, oak, willow
Players[0].Active:= True;//Refer to instructions
{Players[1].Name:= '';
Players[1].Pass:= '';
Players[1].Nick:= '';
Players[1].Strings[0]:= 'tree'; // tree, oak, willow
Players[1].Active:= True;//Refer to instructions
Players[2].Name:= '';
Players[2].Pass:= '';
Players[2].Nick:= '';
Players[2].Strings[0]:= 'tree'; // tree, oak, willow
Players[2].Active:= True;//Refer to instructions
Players[3].Name:= '';
Players[3].Pass:= '';
Players[3].Nick:= '';
Players[3].Strings[0]:= 'tree'; // tree, oak, willow
Players[3].Active:= True;//Refer to instructions
Players[4].Name:= '';
Players[4].Pass:= '';
Players[4].Nick:= '';
Players[4].Strings[0]:= 'tree'; // tree, oak, willow
Players[4].Active:= True;//Refer to instructions}
//DONT MESS BELOW THIS LINE!
for i:= 0 to HowManyPlayers - 1 do
Players[i].Rand:= '';
end;
// <-------------------------------------------->
// Only Advanced Scripters Past Here
// <-------------------------------------------->
var
UT, cp: string;
Rotations, LogMask, TreesChopped, Axemask, talkcount, TimeMark, ARCount, CKCount, RandomCount, WalkCount: integer;
procedure Loc(where: string);
begin
Players[CurrentPlayer].Loc:= where;
end;
procedure StatsHandle;
begin
ScriptId:= '296';
SRLid:= YourSRLId;
SRLpassword:= YourSRLPassword;
if SRLId = '' then
begin
SRLId:= '2776';
SRLPassword:= 'pwnscripts';
end;
SendSRLReport;
end;
procedure ClickRed;
var
x, y, m, F: integer;
begin
m:= 0;
GetMousePos(x, y);
Mouse(x, y, 0, 0, true);
repeat
if not FindColor(x, y, 255, x - 10, y - 10, x + 10, y + 10) then Inc(F);
Inc(M);
Wait(2);
until((M > 100) or (F > 9));
if (M > 99) then
begin
Writeln('X not found!');
end;
end;
function FindAxe2: boolean;
var
ax, ay, i: integer;
begin
if not Loggedin then exit;
for i:= 4 to 5 do
begin
Gametab(i);
Sleep(600);
if FindBitmapMaskTolerance(AxeMask, ax, ay, 546, 203, 737, 466, 5, 5)then
begin
result:= true;
Gametab(4);
exit;
end;
end;
result:= false;
Writeln('Could not find axe!');
end;
function TimeOver(TimeBase, TimeCheck, TimeModifier: integer): boolean;
begin
result:= TimeFromMark(TimeBase) >= TimeCheck * TimeModifier;
end;
// Here starts Danrox2004's Mistake responder. THANKS DAN.
procedure getPlaceOfLetter(letter: char; var x, y: integer; var shift: boolean);
var
keyboard: array of string;
begin
keyboard := ['`1234567890-=', 'qwertyuiop[]\', 'asdfghjkl;''', 'zxcvbnm,./', ' '];
for x := 0 to length(keyboard) - 1 do
for y := 1 to length(keyboard[x]) do
if(getKeyCode(keyboard[x][y]) = getKeyCode(letter)) then
begin
//writeln(letter + ', ' + keyboard[x][y]);
if(keyboard[x][y] <> letter) then
shift := true
else
shift := false;
exit;
end;
end;
function mistake(letter: char; chance: integer; var shift: boolean): char;
var
x, y: integer;
keyboard: array of string;
begin
keyboard := ['`1234567890-=', 'qwertyuiop[]\', 'asdfghjkl;''', 'zxcvbnm,./', ' '];
if(random(chance) <> 0) then
begin
getPlaceOfLetter(letter, x, y, shift);
result := letter;
exit;
end;
getPlaceOfLetter(letter, x, y, shift);
if(random(2) = 0) then
begin
if(x = 0) then
y := y - 1;
if(random(2) = 1) then
x := x + random(2)
else
x := x - random(2)
end else
if(random(2) = 1) then
y := y + random(2)
else
y := y - random(2)
if(x < 0) then
x := 0;
if(x > length(keyboard) - 1) then
x := length(keyboard) - 1;
if(y > length(keyboard[x])) then
y := length(keyboard[x]);
if(y < 1) then
y := 1;
result := keyboard[x][y];
end;
procedure typeMistake(s: string; chance: integer);
var
i: integer;
shift: boolean;
begin
cp:= s;
for i := 1 to length(s) do
begin
s[i] := mistake(s[i], chance, shift);
if (Shift) then
begin
KeyDown(VK_Shift);
Wait(5 + Random(20));
end;
TypeByte(GetKeyCode(s[i]));
if (Shift) then
begin
KeyUp(VK_Shift);
Wait(5 + Random(20));
end;
Wait(50 + Random(120));
end;
Wait(200 + Random(500));
TypeByte(13);
end;
// Here ends Danrox2004's Mistake responder.
procedure MyAutoTalk;
var
i, ms: integer;
begin
begin
ms:= randomrange(7, 10);
Inc(TalkCount); Inc(ReportVars[4]);
case i of
0: typeMistake('Hey', ms);
1: typeMistake('Be nice to noobs', ms);
2: typeMistake('tree chopping is fun!', ms);
3: typeMistake('i hate this skill', ms);
4: typeMistake('im not a noob', ms);
5: typeMistake('get lost noob', ms);
6: typeMistake('everyone, ramba!', ms);
7: typeMistake('dont be dumb', ms);
8: typeMistake('your a nub', ms);
9: typeMistake('wc levels?', ms);
10: typeMistake('woodcut lvls?', ms);
11: typeMistake('this is good money', ms);
12: typeMistake('dumb autoers...', ms);
13: typeMistake('noobs be gone', ms);
14: typeMistake('a random will be coming soon...', ms);
15: typeMistake('i love this game', ms);
16: typeMistake('i love noobs!', ms);
17: typeMistake('all add me', ms);
18: typeMistake('everyone dance!', ms);
19: typeMistake('stop!', ms);
end;
Writeln('Talk Count '+IntToStr(TalkCount)+' = "'+cp+'"');
end;
MarkTime(TimeMark);
end;
function SetTreeDDTM(var TheDTM: integer; Tol, Dist: integer): boolean;
var
SubPoints: array [0..1] of TDTMPointDef;
MainPoint: TDTMPointDef;
ADTM: TDTM; SetDTM: boolean;
begin
if not LoggedIn then exit;
TheDTM:= 0;
result:= true;
SetDTM:= false;
case LowerCase(Players[CurrentPlayer].Strings[0]) of
'tree': begin
SetDTM:= true;
MainPoint.x:=286;
MainPoint.y:=283;
MainPoint.areasize:=1;
MainPoint.areashape:=0;
MainPoint.color:=2317132;
MainPoint.tolerance:=Tol;
SubPoints[0].x:=288;
SubPoints[0].y:=274;
SubPoints[0].areasize:=Dist;
SubPoints[0].areashape:=0;
SubPoints[0].color:=2128747;
SubPoints[0].tolerance:=Tol;
SubPoints[1].x:=283;
SubPoints[1].y:=272;
SubPoints[1].areasize:=Dist;
SubPoints[1].areashape:=0;
SubPoints[1].color:=3890007;
SubPoints[1].tolerance:=Tol;
UT:= TreeUpText;
end;
'oak' : begin
SetDTM:= true;
MainPoint.x:=460;
MainPoint.y:=214;
MainPoint.areasize:=1;
MainPoint.areashape:=0;
MainPoint.color:=1925721;
MainPoint.tolerance:=Tol;
SubPoints[0].x:=486;
SubPoints[0].y:=243;
SubPoints[0].areasize:=Dist;
SubPoints[0].areashape:=0;
SubPoints[0].color:=2910047;
SubPoints[0].tolerance:=Tol;
SubPoints[1].x:=465;
SubPoints[1].y:=251;
SubPoints[1].areasize:=Dist;
SubPoints[1].areashape:=0;
SubPoints[1].color:=2839628;
SubPoints[1].tolerance:=Tol;
UT:=OakUpText;
end;
'willow':begin
SetDTM:= true;
MainPoint.x:=293;
MainPoint.y:=143;
MainPoint.areasize:=1;
MainPoint.areashape:=0;
MainPoint.color:=5486242;
MainPoint.tolerance:=Tol;
SubPoints[0].x:=298;
SubPoints[0].y:=140;
SubPoints[0].areasize:=Dist;
SubPoints[0].areashape:=0;
SubPoints[0].color:=4561288;
SubPoints[0].tolerance:=Tol;
SubPoints[1].x:=298;
SubPoints[1].y:=140;
SubPoints[1].areasize:=Dist;
SubPoints[1].areashape:=0;
SubPoints[1].color:=4561288;
SubPoints[1].tolerance:=Tol;
UT:=WillowUpText;
end;
end;
if not SetDTM then
begin
Writeln('Invalid Tree Name, Could not set DDTM!');
Logout;
Players[CurrentPlayer].Loc:= 'Invalid Tree';
exit;
end;
ADTM.MainPoint:= MainPoint;
ADTM.SubPoints:= SubPoints;
TheDTM:= AddDTM(ADTM);
end;
function EXPMapWalk: boolean; forward;
function FindFastRandoms: boolean;
var
I, mk, lx, ly: integer;
begin
result:= false;
GetMousePos(lx, ly);
Inc(ARCount);
MarkTime(MK);
for i:= 0 to 8 do
begin
case I of
0: if not FindAxe2 then result:= true;
1: if (Floor(TimeFromMark(CKCount) div 60000) >= 10)then
GetAllLevels;
3, 4: if FindFight then
begin
RunTo(RunDir, RunFar);
FTWait(15000);
RunBack;
if RunFar then RunBack;
if UseMapWalk then EXPMapwalk;
end;
5: if FindInventoryRandoms then result:= true;
7: if TimeOver(TimeMark, TalkEvery, 60000)then
MyAutoTalk;
8: if InvFull then result:= true;
9: if FindEnt(lx, ly, true)then result:= true;
end;
if result then
begin
Inc(RandomCount);
break;
end;
end;
Writeln('FindFastRandoms took '+IntToStr(TimeFromMark(MK))+' msec.');
end;
function ChopTree(Tol, Dist: integer): boolean;
var
dir: string;
i, tx, ty, TreeDDTM, followcol, m, mw: integer;
begin
if not Loggedin then exit;
if not SetTreeDDTM(TreeDDTM, Tol, Dist) then
begin
if LoggedIn then Logout;
exit;
end;
if (MSpeed > 4) then
MouseSpeed:= MSpeed + random(8);
ColorToleranceSpeed(0);
case random(3) of
0: dir:= 'nswe';
1: dir:= 'swen';
2: dir:= 'wsne';
3: dir:= 'ensw';
end;
for i:= 1 to 4 do
begin
if DTMRotated(TreeDDTM, tx, ty, 10, 10, MSX2, MSY2) then
begin
followcol:= GetColor(tx - 2, ty - 2);
MMouse(Tx, Ty, 2, 2);
result:= IsUpText(UT);
if result then
begin
ClickRed; m:= 0;
repeat
Inc(M);
FindColorSpiral(tx, ty, followcol, tx - 20, ty - 20, tx + 20, ty + 20);
wait(2);
until((M > 500) or not (FlagPresent));
if not (M > 499) then
begin
Writeln('Tree Followed at: ('+IntToStr(tx)+','+IntToStr(Ty)+');');
MarkTime(mw);
m:= 0;
repeat
if not Loggedin then exit;
if (LowerCase(Players[CurrentPlayer].Strings[0]) = 'tree') then
begin
if (TimeFromMark(mw) >= (MaxTreeWait * 1000)) then
begin
Writeln('Breakout...');
break;
end;
end else
if (TimeFromMark(mw) >= (30000)) then
begin
Writeln('Breakout...');
break;
end
if FindFastRandoms then break;
if not FindColorSpiral(tx, ty, followcol, tx - 20, ty - 20, tx + 20, ty + 20)then Inc(M);
if not IsUpText(UT) then
begin
Writeln('Could not find UpText');
break;
end;
until(m >= 8);
Writeln('Tree Chop Time was '+IntTostr(Ceil(TimeFromMark(mw) div 1000)) + ' seconds.');
break;
end else
begin
Writeln('Tree lost');
Inc(ReportVars[2]);
Mouse(256, 168, 5, 5, true);
FFlag(0);
wait(500);
end;
end;
end;
MakeCompass(StrGet(dir, i));
Inc(Rotations); Inc(ReportVars[1]);
end;
if not result then
begin
Writeln('No Tree Found');
end;
ColorToleranceSpeed(1);
end;
function EXPMapWalk: boolean;
var
Cols: TIntegerArray;
x, y, i: integer;
begin
x:= MMCX; y:= MMCY;
if FindColorSpiral(x, y, TreeMMColor, MMX1, MMY1, MMX2, MMY2) then
if rs_OnMiniMap(x, y) then
begin
Mouse(x, y , 0, 0, true);
FFlag(0);
result:= true;
Inc(ReportVars[3]);
Inc(WalkCount);
exit;
end;
Cols:= rs_FindMMColors(TreeMMColor);
for i:= 0 to length(Cols) - 1 do
if FindColorSpiral(x, y, Cols[i], MMX1, MMY1, MMX2, MMY2) then
if rs_OnMiniMap(x, y) then
begin
MFNF(x, y, 0, 0);
FFlag(0);
result:= true;
Inc(ReportVars[3]);
Inc(WalkCount);
break;
end;
end;
procedure ChopLoop;
var
i, l: integer;
begin
if not LoggedIn then exit;
if FlagPresent then exit;
l:= 0;
for i:= 1 to TimeToTryTree do
begin
if not ChopTree(TreeTol, 10) then
begin
if (I mod 2 = 0)then
if UseMapWalk then EXPMapWalk;
end else
break;
end;
if (i = TimeToTryTree)then
begin
Players[CurrentPlayer].Loc:= 'Could not find tree';
Logout;
end;
end;
procedure DropAndReportStatus;
begin
if not (InvFull) then exit; Gametab(4);
IncEx(Players[CurrentPlayer].Integers[1], CountItemBmpMaskTol(LogMask, 5, 5));
IncEx(TreesChopped, CountItemBmpMaskTol(LogMask, 5, 5));
ReportVars[0]:= CountItemBmpMaskTol(LogMask, 5, 5); SendSRLReport;
ClickAllItemsBmpMaskTolWait(LogMask, 'rop', 5, 5, 850);
end;
procedure LoadInfo;
begin
LogMask := BitmapFromString(19, 16, 'beNpjYCAe/AcDBnIB2XqHvUY6' +
'WPcfFRCvmCTDSXUMwyhAAwAK8ke5');
AxeMask := BitmapFromString(9, 8, 'beNpjYMAK/v//z8CAT+o/GODShV' +
'U7LllcXFyG4HEbAgAAvvom2g==');
end;
procedure FreeInfo;
begin
FreeBitmap(LogMask);
FreeBitmap(AxeMask);
end;
procedure GoToNextPlayer(IsPlayerActive: boolean);
var
i: integer;
begin
NextPlayerOrder(IsPlayerActive);
Loc('Chopping');
if not loggedin then LoginPlayer;
SetBar('brightness', 4);
SetRun(False);
if not FindAxe2 then
begin
Loc('Player has no axe');
GoToNextPlayer(false);
end;
GetAllLevels;
for i:= 0 to 2 do
ArrangeInv;
end;
procedure StartUpScript;
var
I: integer;
begin
SetupSRL;
ClearDebug;
Writeln('|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-|');
Writeln('| This Script was made by: ______ |');
Writeln('| .-----.--.--.--.-----.---.-.-----.| |.----. |');
Writeln('| | _ | | | | | _ |-- __|| -- || _| |');
Writeln('| | __|________|__|__|___._|_____||______||__| |');
Writeln('| |__| Pwnaz0r@hotmail.com |');
Writeln('|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-|');
Writeln('');
SetupSRL; LoadInfo; StatsHandle; SendSRLReport; DeclarePlayers;
if not FindRS then
begin
writeln('Could not find Runescape');
TerminateScript;
end else
begin
ActivateClient;
wait(1000);
end;
MarkTime(TimeMark); MarkTime(CKCount);
if not LoggedIn then LoginPlayer;
Loc('Chopping');
if not loggedin then LoginPlayer;
SetBar('brightness', 4);
SetRun(False);
if not FindAxe2 then
begin
Loc('Player has no axe');
GoToNextPlayer(false);
end;
findfastrandoms;
GetAllLevels;
for i:= 0 to 2 do
ArrangeInv;
end;
Const
V = '0.1';
procedure ProgressReport;
var
I: integer;
begin
SRLRandomsReport;
ClearDebug;
Writeln(' /=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\');
Writeln(' | [SRL]Powerchopper Version '+V+' |');
Writeln(' | By : Pwnaz0r |');
Writeln(' \-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=/');
Writeln(' Worked For ' + TimeRunning);
Writeln(' Chopped '+IntToStr(TreesChopped)+' trees');
Writeln(' Checked for randoms '+IntToStr(ARCount)+ ' times ('+IntToStr(randomcount)+' found);');
Writeln(' Made '+IntToStr(Rotations)+' rotations');
Writeln(' Did '+IntToStr(WalkCount)+' walk counts');
Writeln(' Random Talked '+IntToStr(TalkCount)+' timees');
Writeln('');
Writeln(' # | Nick | WC Lvl | Trees Chopped | Last Random | Loc');
Writeln('');
For I := 0 to HowManyPlayers - 1 do
Writeln(' '+IntToStr(I)+' | '+Players[i].Nick+' | '+IntToStr(Players[i].Level[20])+' | Chopped '+IntToStr(Players[i].Integers[0])+' logs | Rand: '+Players[I].rand+' | Loc: '+Players[i].Loc);
end;
function AllPlayersInactive: boolean;
var
p: integer;
begin
for p:= 0 to HowManyPlayers - 1 do
if Players[p].Active then exit;
result:= true;
end;
procedure PlayerLoop;
var
LoadTime, PlayerTime: integer;
begin
repeat
if not loggedin then loginplayer;
MarkTime(PlayerTime);
repeat
if not loggedin then break;
MarkTime(LoadTime);
repeat
if not Loggedin then break;
ChopLoop;
FindFastRandoms;
if TimeOver(LoadTime, MaxLoadTime, 60000) then break;
if TimeOver(PlayerTime, MaxPlayerTime, 60000) then break;
until(InvFull);
if not loggedin then break;
DropAndReportStatus;
ProgressReport;
FindFastRandoms;
until(TimeOver(PlayerTime, MaxPlayerTime, 60000));
if LoggedIn then GoToNextPlayer(true)
else
begin
Players[CurrentPlayer].Active:=False;
if (AllPlayersInActive) then break;
GoToNextPlayer(False);
end;
until(AllPlayersInActive);
Writeln('All Players are Inactive! Exitting.');
SendSRLReport;
end;
begin
StartupScript;
PlayerLoop;
FreeInfo;
ProgressReport;
end.