Took a look at this, as you wished.
Found some stuff you should really work on
- Standards
- A bit logic, but that comes the more you script
- Use Wait. Otherwise Rs won't follow along ;)
- Learn where For to do loops are usefull
Other then that and what I've been writing in this script it's good :)
{==============================================================================]
[ [SRL]4 ]
[ ]
[ ]
[ NAME : Destiful Woodcutter ]
[ WRITER : The Man ]
[ CATEGORY : Woodcutting ]
[ DESCRIPTION : ]
[ ]
[==============================================================================]
[ Instructions: Be at Draynor bank. Fill out form, then run. ]
[==============================================================================}
{=========================Records & Vars DONT TOUCH!===========================}
program DestifulCutter;
{$DEFINE SMART} //Comment out to remove SMART
{$IFDEF SMART}
{.include srl/srl/misc/smart.scar}
{$ENDIF}
{.include SRL/SRL.scar}
{.include srl/srl/misc/debug.scar}
{.include SRL/SRL/Misc/Users.scar}
{
Try to avoid global vars.
DTMs can easily be stored inside procedure vars.
Instead of having xp, xp2, xp3, xp4 have an array.
XP: Array [0..3] of Integer;
Tip: For a easier way to store vars for each player
use a "Type"
Example,
Type
TPlayer = Record
XPGain, LvlGain: Integer;
end;
Just don't forget to declare its length in your
Global vars/DeclarePlayers procedure.
Var
ProgressPlayer: Array of TProgress;
And in DeclarePlayers you do,
SetArrayLength(ProgressPlayer, HowManyPlayers);
Simple.
To use this later on you simply do
ProgressPlayer[CurrentPlayer].XPGain := Logs*50; ect..
Moving on...
}
var
x, y, RockDTM, DBDTM, LevelUps, InventoryWillows, xp, xp2, xp3, xp4, Lot2, Loads: integer;
// Don't use to much spaces..
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := ''; //Username.
Players[0].Pass := ''; //Password.
Players[0].Nick := ''; //3-4 Letters From Your Username.
Players[0].Strings[0] := ''; //Bank Pin.
Players[0].Integers[0] := 100; //Loads To Do Each Player.
Players[0].Active := True;
{
Two lines that you can add... Not much, but makes it look better.
Writeln(IntToStr(HowManyPlayers) + ' Players');
SetPlayerNameTPAs; <- Sets the players Nicks. So if they forget to
set it they will have an error at start, and not at
FindNormalRandoms.
}
end;
{
Smart idea, But not very good if theres only one line.
If it was .Loc := S; and something else under it, then it would be a
space saver, not it's just a shorten version which afterall proofs that
you're lazy ^^ (Still up to you if you want to keep it, Won't hurt anything).
}
procedure SetLoc(s: String);
begin
Players[CurrentPlayer].Loc := s;
end;
{
Same as above.
}
function PlayerLoc: String;
begin
Result := Players[CurrentPlayer].Loc;
end;
function AutoColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
H, S, L: Extended;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(1);
FindColorsSpiralTolerance(MMCX, MMCY, arP, 5789018, MMX1, MMY1, MMX2, MMY2, 40);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToHSL(arC[i], H, S, L);
if (H >= 0.00) and (H <= 93.77) and (S >= 0.72) and (S <= 10.16) and (L >= 26.45) and (L <= 41.39) then
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 5.35) and (X <= 14.18) and (Y >= 5.60) and (Y <= 13.46) and (Z >= 5.37) and (Z <= 17.49) then
begin
Result := arC[i];
Writeln('AutoColor = ' + IntToStr(arC[i]));
Break;
end;
end;
end;
ColorToleranceSpeed(tmpCTS);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
function CountNPCs(var NPA: T2DPointArray): Integer;
var
NPC: array of TPoint;
begin
FindColorsSpiralTolerance(MMCX, MMY2, NPC, 62965, MMX1, MMY1, MMX2, MMY2, 5);
NPA := TPAtoATPA(NPC, 2);
Result := Length(NPA);
end;
function LevelUp : Boolean; //Thanks Wizzup?
var
Lev : Integer;
begin
Result := FindNPCChatText('gratu', Nothing) or
FindNPCChatText('atio', Nothing);
if Result then
begin
while ClickContinue(True, True) do
Wait(500 + Random(250)); // 2 Spaces after a While / do loop, otherwise it looks weird..
WriteLn(Players[CurrentPlayer].Name + ' leveled up');
Lev := GetSkillInfo('woodcutting', False);
WriteLn(Players[CurrentPlayer].Name + '''s woodcutting level is now ' + IntToStr(Lev));
LevelUps:= LevelUps + 1;
end;
end;
{
In this procedure, if everything screws up, you loop something MAX 6 times.
If you know how many times your going to be looping at max then you're better
off with a For T:=0 to 5 loop and a break statement.
Other thing I found is that you don't free your DTM correctly.
You break out before it if it's found, and if it's not you free it and look
after a empty Integer.
My version of this function:
procedure GRockDTM;
var
MaxTol, T, C: Integer;
begin
MaxTol := 55;
C := AutoColor;
RockDTM := DTMFromString('78DA636467606060614001DE41DE609A11CA6' +
'7E40212ACA86A748D7550D5F00009765435663616986A38099803' +
'92E726A086950873406AD8F0AB0100821404CC');
For T:= 0 to 4 do
begin
if DTMRotated(RockDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
Writeln('Found');
Break;
end;
end;
FreeDTM(RockDTM);
end;
}
procedure GRockDTM;
var
MaxTol, T, C: Integer;
begin
MaxTol := 55;
C := AutoColor;
RockDTM := DTMFromString('78DA636467606060614001DE41DE609A11CA6' + // Don't forget 2 spaces.
'7E40212ACA86A748D7550D5F00009765435663616986A38099803' +
'92E726A086950873406AD8F0AB0100821404CC');
repeat
IncEx(T, 10);
Writeln(IntToStr(T));
if DTMRotated(RockDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
Writeln('Found');
Break;
end;
FreeDTM(RockDTM);
until(T >= MaxTol);
end;
//Major Standard wrongs, so I fix it up before looking.
{
Not much to mention, Your logic is special, but it's sure logical ;P
Shorten the function tho, look at the old one and this..
See and learn the diffrence.
}
function DepositWillows: Boolean;
var
AxeDTM, x, y, i: Integer;
T: TBox;
begin
AxeDTM := DTMFromString('78DA63AC616160F8C480023AD38518FE03694' +
'620FE0F048C9D40356F19D000231209A46B816A5E1050530A54F3' +
'9F809A2AA09ADF04D43402D5BCC4AF06008D550EC3');
if InvCount > 0 then OpenBank('db', True, True)else Exit;
if PinScreen then InPin(Players[CurrentPlayer].Strings[0]);
if BankScreen then
for i := 1 to 28 do
begin
T := InvBox(i);
if not FindDTM(AxeDTM, x, y, T.x1, T.y1, T.x2, T.y2) and ExistsItem(i) then
begin
MouseItem(i, False);
Wait(RandomRange(500, 1000));
case Random(5) of
0..3: ChooseOption('eposit-All');
4:
begin
ChooseOption('eposit-X');
Wait(RandomRange(500, 1000));
TypeSend(IntToStr(RandomRange(30, 100)));
end;
end;
Wait(2000+random(2000));
Result := not(InvFull);
if Result then
SetLoc('WalkToWillows');
end;
end;
Result := True;
SetLoc('WalkToWillows');
CloseBank;
FreeDTM(AxeDTM);
end;
{
A bit standards off, same as before.
Fixed it up, read and learn the diffrence.
}
function WalkWillowRadial(XOffSet, YOffSet: Integer): TPoint;
var
TPA: TPointArray;
i, CTS: Integer;
ATPA: T2DPointArray;
TB: TBox;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(1);
RadialWalkEx(TPA, MMCX, MMCY + 20, 1455939, 50, 200, 250, 50);
if Length(TPA) = 0 then
Exit;
ATPA := SplitTPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MMCX, MMCY));
TB := GetATPABounds(ATPA);
for i := 0 to High(TPA) do
if (PointInBox(TPA[i], TB)) then
begin
Result.x := ((TB.x1 + TB.x2) / 2) - XOffSet;
Result.y := ((TB.y1 + TB.y2) / 2) - YOffSet;
Break;
end;
ColorToleranceSpeed(CTS);
end;
{
You're setting Compass north twice?
No need, As it got a failsafe if it's already 10% north.
So it WON'T help getting it better ;)
The way you use SetRun is good, but theres another function
in SRL that does the same thing,
{*******************************************************************************
function RunEnergy(Min: Integer): Boolean;
By: lordsaturn
Description: Toggles run if energy is greater or equal to MinEnergy. Results
true if energy is greater or equal to minimum.
*******************************************************************************}
procedure SetupScript;
var
s: String;
// No need for space here..
begin
MakeCompass('n');
SetAngle(True);
SetRun(GetMMLevels('run', s) > 0);
DepositWillows;
MakeCompass('n');
SetLoc('WalkToWillows');
end;
{
Same thing as i mention before, If you only use one function in one
procedure then it's a waste of space. If it doens't result anything and so on
which this doesn't.
}
procedure AntiRandom;
begin
FindNormalRandoms;
end;
{
Remember to ALWAYS follow standards.
Fixed it up for you.
You also want a Wait between GameTab(4) and the DTM Search,
If it lags, you're screwed.
}
Procedure CountTheLogs;
var
WillowsDTM, LogsInTheInv: Integer;
begin
if not LoggedIn then Exit;
GameTab(4);
// Wait(235+Random(200));
WillowsDTM := DTMFromString('78DA6314626060E0634001BEAE320C3A8C0C0' +
'C40C4F01F081885810C090634C0884402696E20214D400D0B9010' +
'27420D2F1176B1115003F2172B0135203F31135003F213070135B' +
'240420CBF1A003539062B');
LogsInTheInv := ItemAmount('inv', 'dtm', WillowsDTM, []);
InventoryWillows := InventoryWillows+LogsInTheInv;
FreeDTM(WillowsDTM);
end;
{
Read a Tutorial about Advnaced proggies, think i made one..
So you get a Proggie for each player and so on..
}
procedure Proggy;
begin
writeln('~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#');
writeln('#Destiful Woodcutter by The Man ');
writeln('~Ran For: '+TimeRunning+'! ');
Writeln('#Chopped down: '+IntToStr(InventoryWillows)+' logs ');
WriteLn('~WoodCutting Exp Gained: '+ IntToStr(xp3) +'. ');
WriteLn('#Exp Until Next Lvl: '+ IntToStr(xp4) +'. ');
WriteLn('~ Loads Done: '+ IntToStr(Loads) +'. ');
Writeln('#Thank you for using Destiful Woodcutter ');
Writeln('~Please post this at [url]http://www.villavu.com/forum/showthread.php?t=45713');[/url]
Writeln('#~Also please post feedback :) ');
Writeln('#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~');
end;
{
This is acceptable as it results true or false.
Not like the other 2.
}
function PointSet(P: TPoint): Boolean;
begin
if (P.x <> 0) or (P.y <> 0) then Result := True;
end;
{
Not recommended doing Proggy in ScriptTerminate..
Can't remember why tho, if it works then stick with it.
}
procedure ScriptTerminate;
begin
Proggy;
end;
{
Logical, No need for me to look to much in this one.
Fixed a bit standards tho.
}
function ToWillows: boolean;
var
u,x,y,m: Integer;
P: TPoint;
// No need for space here...
begin
if (not(loggedin)) then exit;
U := findwatercolor;
P := WalkWillowRadial(3, 3);
if (PointSet(P)) then
begin
Result := True;
Mouse(P.x, P.y, 3, 3, True);
AntiRandom;
Flag;
SetLoc('Chopping');
Exit;
end;
if (DTMRotated(RockDTM, x, y, MMX1, MMY1, MMX2, MMY2)) then // Found DDTM
begin
Result := True;
Mouse(x, y, 5, 5, True);
AntiRandom;
Flag;
SetLoc('Chopping');
Wait(RandomRange(100, 500));
Exit;
end;
if RadialWalk(AutoColor, 160, 200, 60, -10, -10) then Result := True else
Result := RadialWalk(FindWaterColor, 260, 280, 40, 70, 5);
if Result then
begin
SetLoc('Chopping');
AntiRandom;
Exit;
end;
if Findsymbol(x,y,'fish') then
begin
M := GetColor(x - 20, y);
if M = U Then
begin
Mouse(x,y,5,5, true);
wait(250+random(250));
FFlag(10);
If Distance(mmcx,mmcy,x,y) < 7 then
begin
result := true;
SetLoc('Chopping');
AntiRandom;
Exit;
end;
end;
end;
end;
{
Looks good, remember to space after a If statement or do
a 2 space after/Statement, Look down.
}
function Reposition: Boolean;
var
i, CTS: Integer;
TPA: TPointArray;
ATPA: T2DPointArray;
TB: TBox;
P: TPoint;
// NO NEED FOR SPACE HERE!
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(1);
FindColorsSpiralTolerance(MMCX, MMCY, TPA, 1455939, MMX1, MMY1, MMX2, MMY2, 50);
if Length(TPA) = 0 then Exit;
{
If Length(TPA) = 0 then
Exit;
}
FilterPointsPie(TPA, 0.0, 360.0, 0, 30, MMCX, MMCY);
ATPA := SplitTPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MMCX,MMCY));
TB := GetATPABounds(ATPA);
for i := 0 to High(TPA) do
if (PointInBox(TPA[i], TB)) then
begin
P.x := ((TB.x1 + TB.x2) / 2) - 2;
P.y := ((TB.y1 + TB.y2) / 2) - 2;
Mouse(P.x, P.y, 3, 3, True);
Flag;
Break;
end;
ColorToleranceSpeed(CTS);
end;
{
Logical, Fixed the STANDARDS tho.
Noticed that you DONT Free your DTM in this one..
Simply delete your exit, Look down.
Also, You use the same stuff as you do in Proggy?
Try sticking to one Type out procedure.
}
function Bank: Boolean;
var
x, y, i, Failsaves: Integer;
TPA: TPointArray;
ATPA: T2DPointArray;
//For real, Stop this xD
begin
Failsaves := 1;
Loads := Loads + 1;
for i := 0 to Failsaves do
case i of
0:
begin
FindSymbol(X, Y, 'bank');
Mouse(X, Y, 5, 5, True);
DBDTM := DTMFromString('78DA636C67626008644001FFFFFD63F80FA41' +
'9416C2060AC01AAF182C8B140D5FCF9C304A619A17CB09A204C35' +
'22E86AC2F09B0300F8811153');
if DTMRotated(DBDTM, x, y, MMX1, MMY1, MMX2, MMY2) then
begin
Result := True;
Mouse(x, y, 3, 3, True);
Flag;
AntiRandom;
SetLoc('Bank');
// Exit;
end;
FreeDTM(DBDTM);
end;
1:
begin
RadialWalkEx(TPA, MMCX, MMCY, 195836, 3, 360, 30, 30);
if Length(TPA) = 0 then
Exit;
SortTPAFrom(TPA, Point(MMCX, MMCY));
ATPA := SplitTPAEx(TPA, 10, 10);
SortATPASize(ATPA, True);
MiddleTPAEx(ATPA[0], x, y);
Mouse(x, y, 3, 3, True);
Result := True;
AntiRandom;
Flag;
AntiRandom;
SetLoc('Bank');
Exit;
end;
end;
xp2 := GetXp('woodcutting');
xp3 := xp2 - xp;
xp4 := XpTillNextLevel('woodcutting');
writeln('~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#');
writeln('#Destiful Woodcutter by The Man ');
writeln('~Ran For: '+TimeRunning+'! ');
Writeln('#Chopped down: '+IntToStr(InventoryWillows)+' logs ');
WriteLn('~WoodCutting Exp Gained: '+ IntToStr(xp3) +'. ');
WriteLn('#Exp Until Next Lvl: '+ IntToStr(xp4) +'. ');
WriteLn('~Loads Done: '+ IntToStr(Loads) +'. ');
Writeln('#Thank you for using Destiful Woodcutter ');
Writeln('~Please post this at [url]http://www.villavu.com/forum/showthread.php?t=45713');[/url]
Writeln('#Also please post feedback :) ');
Writeln('~But We are still running ;) ');
Writeln('#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~');
Lot2 := Lot2 + 1;
if (Lot2=(Players[CurrentPlayer].Integers[0])) then
begin
WriteLn('Done All Loads For That Player.');
Status('Next Player');
Lot2 := 0;
end;
MakeCompass('N');
SetRun(True);
SRLRandomsReport;
end;
Procedure SetVar;
Begin
Players[CurrentPlayer].Strings[0] := Lowercase(Players[CurrentPlayer].Strings[0]);
End;
function FindWillow(var x, y: Integer): Boolean;
var
A, M, curCTS, MX, MY: Integer;
TPA: TPointArray;
ATPA: T2DPointArray;
// Removeeeee
begin
Result := False;
if (not(LoggedIn)) then exit;
curCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 3233608, MSX1, MSY1, MSX2, MSY2, 2);
ColorToleranceSpeed(1);
if Length(TPA) = 0 then
exit;
ATPA := TPAtoATPAEx(TPA, 10, 10);
M := High(ATPA);
for A := 0 to M do
if MiddleTPAEx(ATPA[A], MX, MY) then
begin
MMouse(MX, MY, 6, 6);
Wait(100 + Random(50));
if IsUpText('illow') then
begin
Result := True;
GetMousePos(X, Y);
ColorToleranceSpeed(curCTS);
Exit;
end;
end;
ColorToleranceSpeed(curCTS);
end;
procedure AntiBanage;
begin
case Random(100) of
0: HoverSkill('woodcutting', false);
1: MakeCompass('random');
2: Wait(1000 + Random(200));
3: RandomMovement;
4: RandomRClick;
5: HoverSkill('random', false);
6: GameTab(RandomRange(1, 12));
else SleepAndMoveMouse(250+random(100));
end;
end;
// Fixed standards.
function ChoppingLoop: Boolean;
var
T, x, y, i: Integer;
Colour: Integer;
begin
repeat
AntiRandom;
MarkTime(T);
if FindWillow(x, y) then
if Random(11) = 10 then
begin
Mouse(x, y, 3, 3, false);
Wait(RandomRange(123, 223));
if ChooseOptionEx('hop', 'action') then
Colour := GetColor(x, y);
Wait(1000 + random(2000));
end else Mouse(x, y, 3, 3, true);
Wait (1000+random(1000));
while (SimilarColors(Colour, GetColor(x, y), 4) and not(InvFull)) do
begin
MakeCompass('N');
Result := True;
i := random(30);
if i = 1 then
begin
AntiBanage;
Wait(randomrange(100,250));
end;
Wait(100);
AntiRandom;
SleepAndMoveMouse(2500+random(100));
if TimeFromMark(T) >= 20000 then
Break;
end;
until(InvFull);
CountTheLogs;
Result := true;
end;
procedure Responder; // Cheers R1ch great guy :D
var
HiChats, NoobChats, AutoChats, HiChatR, NoobChatR, AutoChatR, UpChats,
UpChatR, LevelChats, YesChats : TStringArray;
I, RL, R : Integer;
// ZzzzZZzz
begin
if (not(LoggedIn)) then
begin
Players[CurrentPlayer].Active:= False;
Exit;
end;
HiChats:= ['hi', 'yo', 'sup', 'ello', 'wassup', 'll right', 'hey', 'hai'];
HiChatR:= ['hi', 'hello there', 'sup', 'yo', 'hello', 'hey', 'howdy', 'hai'];
NoobChats:= ['noob', 'froob', 'neeb', 'choob', 'loser', 'you are a'];
NoobChatR:= ['u are', 'you r', 'u r', 'i aint', 'how am i??', 'looked in the mirror lately?'];
AutoChats:= ['autoer', 'bot', 'auto', 'cheater', 'autoing', 'cheat'];
AutoChatR:= ['no im not', 'im not a bot', 'i dont cheat!', 'me?!', 'r u serious?!', 'bots can talk??'];
UpChats:= ['gratz', 'well done', 'congratulations', 'grats', 'congratz'];
UpChatR:= ['thanks', 'ty', 'thank you', 'thx', 'thanx'];
LevelChats:= ['wc lv', 'wcing lv', 'woodcutting lev', 'wc lev'];
YesChats:= ['Yes', 'Ye', 'Yeah', 'Yea', 'Yup', 'Uh huh', 'Yep'];
for I:= 0 to High(HiChats) do
begin
if InChat(HiChats[i]) then
TypeSend(HiChatR[i]);
R:= R + 1;
end;
for I:= 0 to High(NoobChats) do
begin
if InChat(NoobChats[i]) then
TypeSend(NoobChatR[i]);
R:= R + 1;
end;
for I:= 0 to High(AutoChats) do
begin
if InChat(AutoChats[i]) then
TypeSend(AutoChatR[i]);
R:= R + 1;
end;
if LevelUp then
begin
for I:= 0 to High(UpChats) do
begin
if InChat(UpChats[i]) then
TypeSend(UpChatR[i]);
R:= R + 1;
end;
end;
for I:= 0 to High(LevelChats) do
begin
if InChat(LevelChats[i]) then
begin
R:= R + 1;
RL:= GetSkillInfo('fishing', False);
case Random(10) of
0: TypeSend(IntToStr(RL));
1: TypeSend('lvl '+IntToStr(RL));
2: TypeSend(IntToStr(RL) + ' over here');
3: TypeSend('level '+IntToStr(RL));
4: TypeSend('I''m ' + IntToStr(RL) + 'fishing');
5: TypeSend('only ' + IntToStr(RL));
6: TypeSend('meh, only ' + IntToStr(RL));
7: begin
case Random(5) of
0: TypeSend('onky ' + IntToStr(RL));
1: TypeSend('omly ' + IntToStr(RL));
2: TypeSend('inly ' + IntToStr(RL));
3: TypeSend('onlu ' + IntToStr(RL));
4: TypeSend('om;y ' + IntToStr(RL));
end;
case Random(5) of
0: TypeSend('only*');
1: TypeSend('*only');
2: TypeSend('Sorry, *only');
3: TypeSend('I meant "only"');
4: TypeSend('*only ' + IntToStr(RL));
end;
end;
8: case Random(3) of
0: TypeSend('My wcing is ' + IntToStr(RL));
1: TypeSend('My woodcutting is ' + IntToStr(RL) + '...8-)');
2: TypeSend('It''s ' + IntToStr(RL));
end;
9: begin
TypeSend('Me?');
Wait(2500 + Random(1500));
for I:= 0 to High(YesChats) do
if InChat(YesChats[i]) then
TypeSend(IntToStr(RL));
end;
end;
end;
end;
end;
{
No need for all the Writelns.
And if you really need to do them just use
Var
I: Integer;
For I:=0 to 7 do
Writeln('');
}
procedure SetupMain;
begin
cleardebug;
writeln('');
writeln('');
writeln('');
writeln('');
writeln('');
writeln('');
writeln('');
writeln('');
setupsrl;
ScriptID := '1058';
mousespeed := 13; // to fast. 13 is better
declareplayers;
activateclient;
wait(500);
end;
{Fixed standards.}
begin
SetupMain;
{$IFDEF SMART}
smartsetupex(57, false, true, false);
settargetdc(smartgetdc);
repeat
Wait(100);
until (SmartGetColor(253, 233) <> 1118604);
{$ENDIF}
if (not (LoggedIn)) then
begin
Loginplayer;
setangle(true);
Wait(500 + random(30))
SetChat('on', 1);
SetChat('friends', 2);
SetChat('off', 3);
xp := GetXp('woodcutting');
end;
SetupScript;
repeat
if not (loggedIn) then
begin
nextplayer(false);
TerminateScript;
end;
Players[CurrentPlayer].Loc:= PlayerLoc;
if Players[CurrentPlayer].Loc = 'WalkToWillows' then
if ToWillows then Players[CurrentPlayer].Loc:= 'Chopping';
if Players[CurrentPlayer].Loc = 'Chopping' then
if ChoppingLoop then Players[CurrentPlayer].Loc:= 'LoadDone';
if Players[CurrentPlayer].Loc = 'LoadDone' then
if Bank then Players[CurrentPlayer].Loc:= 'Bank';
if Players[CurrentPlayer].Loc = 'Bank' then
if DepositWillows then Players[CurrentPlayer].Loc:= 'WalkToWillows';
Until(AllPlayersInactive = True);
end.
You got potential, keep doing it :)