Fizzi
2007-07-20 00:29:44
<!– BEGIN TEMPLATE: formanswers –>
Fizzi - SRL Member Application Form
Fizzi
What is the meaning to life?
Where you Referred to SRL? If yes, by whom?
no
Programming Knowledge
Java, VB
Other Communitys
None
How Long have You Played Runescape
Put it this way… a red mask was 45k
Are you affilated in anyway with Jagex LTD?
No
—————————————————–
Please write down a paragraph about Yourself.
I'm 17 years old and I just graduated high school. I'm gonna be a freshman at McGill University in Montreal starting this coming August and I'll be majoring in computer engineering. I started programming when I was a freshman in high school. I took a computer sciences course because I've always loved computers and technology in general. I learned VB that year, liked it, and took Java the year after. I received a 4 on my computer sciences AP exam. I was actually really looking to get back into programming when I found out about this community, and I'm really glad I did. I'm programming again and it's a lot of fun :).
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
——————————————————
<!– END TEMPLATE: formanswers –>
Fizzi - SRL Member Application Form
Fizzi
What is the meaning to life?
Where you Referred to SRL? If yes, by whom?
no
Programming Knowledge
Java, VB
Other Communitys
None
How Long have You Played Runescape
Put it this way… a red mask was 45k
Are you affilated in anyway with Jagex LTD?
No
—————————————————–
Please write down a paragraph about Yourself.
I'm 17 years old and I just graduated high school. I'm gonna be a freshman at McGill University in Montreal starting this coming August and I'll be majoring in computer engineering. I started programming when I was a freshman in high school. I took a computer sciences course because I've always loved computers and technology in general. I learned VB that year, liked it, and took Java the year after. I received a 4 on my computer sciences AP exam. I was actually really looking to get back into programming when I found out about this community, and I'm really glad I did. I'm programming again and it's a lot of fun :).
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
{-------------------WHAT SOFT CLAY FARMER DOES-----------------------
Soft clay farmer runs from Falador east bank to rimmington mining site,
then mines a full inventory of clay, then runs to the well in falador,
fills your buckets and turns the clay into soft clay, banks the clay in
Falador east bank, and repeats. }
{--------------HOW TO SET UP SOFT CLAY FARMER------------------------
1) Setting up your script options
-Set the number of buckets you want to use (I use two, using more
than one is nice because the well fills buckets at the same time).
-Set the number of loads to do before switching characters.
-Set up all of your players in the DeclarePlayers procedure.
2) Setting up your players
-Place your buckets in your first inventory slots.
Example:
You are using two buckets, place them in inventory slots 1 and 2.
Your Inventory looks like this:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27 28
-Place your pick in the inventory slot after the buckets (If you are not
wielding it).
-Put all of your players in the western-most bank stall in falador east
bank.
3) Starting the script
-Stabilize your colors first! You do this by logging on any player and
then logging out. (If you do not stabilize your colors, your first
player will NOT find the fork south of fally).
-After stabilizing your colors, start the script when logged out.
4) Posting a progress report :)
-After you run the script. Copy the progress report in the debug screen
and post it on my thread. Please!
}
// START OF NO TOUCH ZONE! (Don't touch!)
program SoftClayFarmer;
{.include SRL/SRL.scar}
{.include SRL/SRL/skill/Mining.scar}
{.include SRL/SRL/extended/xInventory.scar}
var
LoadsCount, TotalLoads, ClayCount : Integer;
DidRandomHappen: Boolean;
MMFallyRoadCol, MMRoadCol : Integer;
EmptyBucketDTM, FullBucketDTM, ClayDTM, SoftClayDTM : Integer; //DTM's
ForkNofMineDDTM, ForkSofFallyDDTM, ForkFallyDDTM : Integer; //DDTM's
const
MMMineColTemp = 871551;
MSWellCol = 4351604;
MSClayCol1 = 8435411;
MSClayCol2 = 7581647;
MSClayCol3 = 5273999;
// END OF NO TOUCH ZONE!
// START OF TOUCH ZONE!
const
NumLoads = 3; //Number of loads before switching players
NumBuckets = 2; //Number of buckets to use (Same on ALL characters)
procedure DeclarePlayers;
begin
HowManyPlayers := 7; //Number of PLAYERS. active or not.
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0; //Player to start on.
Players[0].Name := 'Name';
Players[0].Pass := 'password';
Players[0].Nick := '3-4 letters of name'; //Pick lowercase letters
Players[0].Boolean1 := True; //Pickaxe equipped?
Players[0].Active := True;
Players[1].Name := 'Name';
Players[1].Pass := 'password';
Players[1].Nick := '3-4 letters of name'; //Pick lowercase letters
Players[1].Boolean1 := False; //Pickaxe equipped?
Players[1].Active := True;
Players[2].Name := 'Name';
Players[2].Pass := 'password';
Players[2].Nick := '3-4 letters of name'; //Pick lowercase letters
Players[2].Boolean1 := False; //Pickaxe equipped?
Players[2].Active := True;
Players[3].Name := 'Name';
Players[3].Pass := 'password';
Players[3].Nick := '3-4 letters of name';
Players[3].Boolean1 := True; //Pickaxe equipped?
Players[3].Active := True;
Players[4].Name := 'Name';
Players[4].Pass := 'password';
Players[4].Nick := '3-4 letters of name'; //Pick lowercase letters
Players[4].Boolean1 := True; //Pickaxe equipped?
Players[4].Active := True;
Players[5].Name := 'Name';
Players[5].Pass := 'password';
Players[5].Nick := '3-4 letters of name';
Players[5].Boolean1 := True; //Pickaxe equipped?
Players[5].Active := True;
Players[6].Name := 'Name';
Players[6].Pass := 'password';
Players[6].Nick := '3-4 letters of name';
Players[6].Boolean1 := True; //Pickaxe equipped?
Players[6].Active := True;
NickNameBMP := CreateBitmapMaskFromText(Players[CurrentPlayer].Nick, UpChars);
end;
// END OF TOUCH ZONE
// DO NOT TOUCH ANYTHING BELOW (Unless you know what you are doing)
procedure Proggy; //Progress report
var
i : Integer;
begin
ClearDebug;
Writeln('OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO');
Writeln('O Soft Clay Farmer 1.01 ');
Writeln('O by Fizzi ');
Writeln('O==========================================');
Writeln('O Worked For : ' + ScriptTime2(2));
Writeln('O Loads : ' + IntToStr(TotalLoads));
Writeln('O Banked ' + IntToStr(ClayCount) + ' Soft Clay')
Writeln('OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO');
Writeln('O Error Report ');
Writeln('O==========================================');
for i := 0 to (HowManyPlayers-1) do
begin
if(Players[i].String1 = '') then Players[i].String1 := 'Still Running!';
Writeln('O '+Players[i].Name+' : '+Players[i].String1);
end;
Writeln('OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO');
SRLRandomsReport;
end;
procedure DeactivatePlayer(reason: string); //Called a lot in script, Sets the player
//inactive, does a count, and calls the progress report.
begin
Players[CurrentPlayer].Active := False;
Players[CurrentPlayer].String1 := reason; //Used for report so I know what happened to your character
Proggy;
Writeln(reason);
LogOut;
end;
//Random Finding, all credit goes to WT-Fakawi
function FindFastRandoms: Boolean; //By WT-Fakawi.
var
i: Integer;
begin
for i := 1 to 8 do
begin
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';
Logout;
Exit;
end;
end;
7: begin
if InBlack then
begin
Result := True;
Players[CurrentPlayer].loc := 'InBlack';
Logout;
Exit;
end;
end;
8: RC;
end;
wait(1);
end;
if (Result = true) then
DidRandomHappen := true;
end;
//Random finding
procedure FindRandoms;
begin
if(not(LoggedIn)) then Exit;
if(FindFight) then
begin
RunAwayDirection('N');
Wait(20000+random(5000));
RunBack;
if(HPPercent < 40) then //Checks to make sure you didn't get beat too bad
begin
DeactivatePlayer('HP low');
Exit;
end;
end;
FindFastRandoms;
FindNormalRandoms;
end;
//MakeDDTM by mastaraymond
Procedure MakeDDTM(var TheDTM:integer;TheDDTM: TIntegerArray);
var
TempLength,i:integer;
DDTM:TDTM;
begin;
TempLength:= (Length(TheDDTM) div 6);
If (TempLength < 2) then exit;
DDTM.MainPoint.x:= TheDDTM[0];
DDTM.MainPoint.y:= TheDDTM[1];
DDTM.MainPoint.AreaSize:= TheDDTM[2];
DDTM.MainPoint.AreaShape:= TheDDTM[3];
DDTM.MainPoint.Color:= TheDDTM[4];
DDTM.MainPoint.Tolerance:= TheDDTM[5];
SetArrayLength(DDTM.SubPoints, 0);
for i := 0 to TempLength -2 do
begin
SetArrayLength(DDTM.SubPoints, Length(DDTM.SubPoints) +1);
DDTM.SubPoints[Length(DDTM.SubPoints) -1].x:= TheDDTM[(I+1)*6 + 0];
DDTM.SubPoints[Length(DDTM.SubPoints) -1].y:= TheDDTM[(I+1)*6 + 1];
DDTM.SubPoints[Length(DDTM.SubPoints) -1].AreaSize:= TheDDTM[(I+1)*6 + 2];
DDTM.SubPoints[Length(DDTM.SubPoints) -1].AreaShape:= TheDDTM[(I+1)*6 + 3];
DDTM.SubPoints[Length(DDTM.SubPoints) -1].Color:= TheDDTM[(I+1)*6 + 4];
DDTM.SubPoints[Length(DDTM.SubPoints) -1].Tolerance:= TheDDTM[(I+1)*6 + 5];
end;
TheDTM := AddDTM(DDTM);
end;
function ClickNpcChatTextRight(txt : String) : Boolean; //Like ClickNpcChatText
//by Kernel Klink or Stupid3000, font by Masquerader, only this one Right-Clicks as per FT-Fakawi's modification.
var
tx,ty,s:integer;
begin
s := CreateBitmapMaskFromText(txt, npcchars);
if FindBitmapMaskTolerance(s, tx, ty, 9, 348, 523, 471, 50, 10) then
begin
Mouse(tx, ty, 0, 0, False);
Result:=True;
end;
FreeBitmap(s);
end;
procedure RandomActivity; //Antiban
{RandomActivity is called very often, I want it to very rarely do
one of the activities. The player is usually very busy moving the mouse
anyway, meaning a real player would have less time to do something
"random", therefore the script does not need to do something random
too often. Random(100) makes it do the activities rarely.}
begin
if(not(LoggedIn))then Exit;
case Random(100) of
0: PickUpMouse;
1: begin
HoverSkill('Mining', false);
wait(2000+random(1000));
GameTab(4);
end;
2: SleepAndMoveMouse(1000+random(250));
end;
end;
procedure SetupScript; //Only called once, to set up the script
begin
SetupSRL;
SetupSRLMining;
DeclarePlayers;
ActivateClient;
Wait(1000+random(100));
end;
procedure Prepare; //Prepares each character for their runs
begin
MouseSpeed := 1;
LampSkill := 'mining';
LoginPlayer;
MakeCompass('N');
HighestAngle;
SetChat('on',1);
SetChat('off',2);
SetChat('off',3);
LoadsCount := 0;
FindPickHeadColor;
EquipPick := Players[CurrentPlayer].Boolean1;
Wait(3000+random(1000));
end;
//RadialRoadWalk by WT-Fakawi & Wizzup? and modified by Ron.
//Added XDist and Ydist integers that get added to the coordinates
//of the clicking procedure. This use in my script so I can
//walk south-east of a road to find the mining symbol in rimmington mine.
//Can be used to walk off a road in any direction.
function RadialOffRoadWalk(TheColor: Integer; StartRadial, EndRadial: Integer;
Radius: Integer; XDist, YDist: Integer; Xmod, Ymod: Integer): Boolean; // By Wizzup? and WT-Fakawi.
var
i, X1, Y1: Integer;
begin
if (RoadColorChecker) then
if (DebugRadialRoad) then
WriteLn(' THROUGH RADIALROADWALK= ---> ' + IntToStr(RoadColor));
if (StartRadial = EndRadial) then
begin
WriteLn('Using LinearRoadWalk, equal values.')
if LinearRoadWalk(TheColor, StartRadial, Radius, Xmod, Ymod) then
Result := True;
end
else if (StartRadial < EndRadial) then
begin
repeat
for i := StartRadial to EndRadial do
begin
x1 := Round(Radius * Sine(i)) + 646;
y1 := Round(-Radius * Cose(i)) + 84;
if Not LoggedIn then Exit;
if (FindColor(x, y, TheColor, X1, Y1, X1 + 1, Y1 + 1)) then
begin
MouseFindNoFlag(X+XDist,Y+YDist,Xmod,Ymod);
Result := True;
CountFlag(10);
Exit;
end;
end;
Radius := Radius - 4;
until (Radius <= 1);
end else
if (StartRadial > EndRadial) then
begin
repeat
for i := StartRadial downto EndRadial do
begin
x1 := Round(Radius * Sine(i)) + 646;
y1 := Round(-Radius * Cose(i)) + 84;
if Not LoggedIn then Exit;
if (FindColor(x, y, TheColor, X1, Y1, X1 + 1, Y1 + 1)) then
begin
MouseFindNoFlag(X+XDist,Y+YDist,Xmod,Ymod);
Result := True;
CountFlag(10);
Exit;
end;
end;
Radius := Radius - 4;
until (Radius <= 1);
end
end;
//Checks if the road color has changed due to loading, and if it has, it changes it.
function FixRoadCol(RoadCol: Integer; Location: String) : Integer;
begin
if(not(FindMMColor(x, y, RoadCol))) then
begin
if(Location = 'fally') then RoadCol := FindFallyRoadColor;
if(Location = 'road') then RoadCol := FindRoadColor;
end;
Result := RoadCol;
end;
//Banks all items beyond your buckets and pick
procedure BankLoad;
begin
if(not(LoggedIn)) then Exit;
SoftClayDTM := DTMFromString('78DA635CCCC4C020C9C8800CF282F818B8803' +
'448F43F10302E01AAE1475503918591407A1D508D0801356B806A' +
'6408A8590454A34C40CD54A01A59026A661336070021050A2C'); //DTM used to count soft clay
ClayCount := ClayCount + CountItemDTM(SoftClayDTM);
FreeDTM(SoftClayDTM);
Status('Banking');
if (Players[CurrentPlayer].Boolean1 = True) then //If pick equipped,
begin
Deposit(NumBuckets + 1, 28, 2);
end else Deposit(NumBuckets + 2, 28, 2); //pick in inventory
LoadsCount := LoadsCount + 1;
TotalLoads := TotalLoads + 1;
Proggy;
Wait(2000+random(1000));
CloseBank;
Wait(2500+random(1000));
if(HPPercent < 40) then
begin
DeactivatePlayer('HP low');
Exit;
end;
FindRandoms;
Wait(2500+random(1000));
end;
//----------Start of walking procedures.-------------\\
//Goes to south gate.
procedure LeaveFally;
var
TLeaveFally, TryFind : Integer;
begin
if(not(LoggedIn)) then Exit;
if(InvFull) then //Make sure you aren't full before leaving
begin
OpenBankQuiet('feb');
Wait(1000+random(500));
BankLoad;
end;
SetRun(True);
Status('Leaving Fally');
TryFind := 0;
repeat //Added this because for some reason the script was failing to find the color sometimes
MMFallyRoadCol := FindFallyRoadColor;
Wait(500+random(100));
TryFind := TryFind + 1;
until(MMFallyRoadCol <> 0) or (TryFind > 15);
if(MMFallyRoadCol = 0) then
begin
DeactivatePlayer('Could not find Fally road color');
Exit;
end;
MMFallyRoadCol := FixRoadCol(MMFallyRoadCol, 'fally');
RadialRoadWalk(MMFallyRoadCol, 240, 160, 40, 2, 2);
FFlag(0);
MarkTime(TLeaveFally);
repeat
MMFallyRoadCol := FixRoadCol(MMFallyRoadCol, 'fally');
RadialRoadWalk(MMFallyRoadCol, 160, 220, 45, 2, 2);
FFlag(0);
if(TimeFromMark(TLeaveFally) > 60000) then
begin
DeactivatePlayer('Failed to leave Fally');
Exit;
end;
until(FindRoadColor <> 0);
MMFallyRoadCol := FixRoadCol(MMFallyRoadCol, 'fally');
RadialRoadWalk(MMFallyRoadCol, 160, 220, 35, 2, 2); //Used to make sure you are close
//enough to click on road color
end;
//Walks from south gate to south of fally fork to mine fork
procedure SouthGateToFork;
var
TFindSoFFork, TFindNoMFork : Integer;
begin
if(not(LoggedIn)) then Exit;
MMRoadCol := FindRoadColor;
MakeDDTM(ForkSofFallyDDTM,[641,102,0,0,MMRoadCol,10,
624,71,2,0,MMRoadCol,10,
611,104,2,0,MMRoadCol,10,
672,116,2,0,MMRoadCol,10]); //DDTM For South of Fally Fork
Status('Left Fally, looking for south of Fally fork');
MarkTime(TFindSoFFork);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialRoadWalk(MMRoadCol, 140, 220, 40, 2, 2);
RandomActivity;
FFlag(0);
Wait(500+random(250));
if(TimeFromMark(TFindSoFFork) > 90000) then
begin
DeactivatePlayer('Failed to find south of fally fork.');
Exit;
end;
until(DTMRotated(ForkSofFallyDDTM, x, y, MMX1, MMCY-30, MMX2, MMY2)); //The MMCY-30 is
//used because sometimes the script was confusing the mine fork with this
//or vice versa. I use selective areas to look for fork DDTM's nearly every time for this reason
Status('Found south of Fally fork');
Mouse(x, y, 2, 2, true); //Clicks on the fork
FFlag(0);
FreeDTM(ForkSofFallyDDTM);
MakeDDTM(ForkNofMineDDTM,[616,67,0,0,MMRoadCol,10,
594,48,2,0,MMRoadCol,10,
645,66,2,0,MMRoadCol,10,
598,88,2,0,MMRoadCol,10]);
Status('Looking for mine fork');
MarkTime(TFindNoMFork);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialRoadWalk(MMRoadCol, 230, 310, 40, 2, 2);
RandomActivity;
FFlag(0);
Wait(500+random(250));
if(TimeFromMark(TFindNoMFork) > 90000) then
begin
DeactivatePlayer('Could not find north of mine fork.');
Exit;
end;
until(DTMRotated(ForkNofMineDDTM, x, y, MMX1, MMY1, MMCX+30, MMY2));
Status('Found mine fork');
Mouse(x, y, 2, 2, true);
FFlag(0);
FreeDTM(ForkNofMineDDTM);
end;
//Walks from mine fork to mining site symbol
procedure ForkToMine;
var
TFindMine, XInc, YInc : Integer;
begin
if(not(LoggedIn)) then Exit;
Status('Looking for mine');
MarkTime(TFindMine);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialOffRoadWalk(MMRoadCol, 180, 270, 55, 20+XInc, 15+YInc, 2, 2);
//OffRoadWalk is used to walk next to the road to find the mine.
FFlag(0);
Wait(500+random(250));
if (XInc < 13) then XInc := XInc + 12;
if (YInc < 3) then YInc := YInc + 2;
if(TimeFromMark(TFindMine) > 90000) then
begin
DeactivatePlayer('Failed to find mine');
Exit;
end;
until(FindSymbol(x, y, 'mining site'));
Status('Found mine');
Mouse(x, y, 2, 2, true); //Click symbol
FFlag(0);
end;
//Finds the clay rocks
procedure ToClayRocks;
var
TLeaveRoad : Integer;
begin
if(not(LoggedIn)) then Exit;
SetRun(False);
MarkTime(TLeaveRoad);
repeat
RadialWalk(FindStoneColor, 160, 20, 70, 2, 2); //Walks to the east side of mine
FFlag(0);
Wait(1000+random(500));
if(TimeFromMark(TLeaveRoad) > 50000) then
begin
DeactivatePlayer('Could not find clay rocks.');
Exit;
end;
until((FindMSColorTol(x, y, MSClayCol1, 4)) or (FindMSColorTol(x, y, MSClayCol2, 4)) or
(FindMSColorTol(x, y, MSClayCol3, 4))); //Until find clay rocks
if (FindMSColorTol(x, y, MSClayCol1, 4)) or (FindMSColorTol(x, y, MSClayCol2, 4)) or
(FindMSColorTol(x, y, MSClayCol3, 4)) then
begin
Status('Found clay rocks!');
MMouse(x, y, 2, 2);
Wait(500+random(250));
if (IsUpText('ocks')) then Mouse(x, y, 2, 2, true);
FFlag(0);
Wait(2000+random(500));
end else
begin
DeactivatePlayer('Could not find clay.');
Exit;
end;
end;
//Walking procedures from bank to mine.
procedure WalkToMine;
begin
LeaveFally;
SouthGateToFork;
ForkToMine;
ToClayRocks;
end;
//Gets a full inventory of clay.
procedure MineClay;
var
Tries, FailFind, TSwing : Integer;
begin
if(not(LoggedIn)) then Exit;
SetRun(True);
Status('Mining...');
repeat
if (FindMSColorTol(x, y, MSClayCol1, 4)) or (FindMSColorTol(x, y, MSClayCol2, 4))
or (FindMSColorTol(x, y, MSClayCol3, 4)) then
begin
FailFind := 0; //FailFind is used incase something goes wrong and it no longer finds clay rocks
MMouse(x, y, 2, 2);
FindGas(x,y)
Wait(250+random(250));
if(IsUpText('ocks')) then Mouse(x, y, 2, 2, true);
Wait(1000+random(250));
TSwing := 0;
MarkTime(TSwing);
while(FindBlackChatMessage('swing your')) do //Makes script more human-like
begin
Wait(500+random(250));
if(TimeFromMark(TSwing) > 60000) then Break;
end;
if(ClickToContinue) then
begin
Wait(1000+random(500));
if(not(FindBlackChatMessage('dvanced'))) then FindPick;
end;
if(not(FindBlackChatMessage('manage to'))) then Tries := Tries + 1;
if(FindBlackChatMessage('manage to')) then Tries := 0;
if(Tries > 9) then
begin
DeactivatePlayer('Attempted to mine clay 10 times and failed.');
Exit;
end;
end else
begin
FailFind := FailFind + 1;
if(FailFind > 20) then
begin
DeactivatePlayer('No longer finding clay rocks');
Exit;
end;
end;
FindRandoms;
RandomActivity;
until(InvFull); //Failsafes are inside loop.
Status('Full! Going to well.');
end;
//Walks from mine to mine fork
procedure MineToFork;
var
TLeaveClay, TFindNoMFork : Integer;
begin
if(not(LoggedIn)) then Exit;
SetRun(False);
Status('Looking for road');
MarkTime(TLeaveClay);
repeat
RadialWalk(FindStoneColor, 340, 260, 70, 2, 2); //Walks to west side of mine
FFlag(0);
Wait(1000+random(500));
if(TimeFromMark(TLeaveClay) > 50000) then
begin
DeactivatePlayer('Failed to find road from mine.');
Exit;
end;
until(FindRoadColor <> 0);
Status('Found road, running north looking for mine fork');
MMRoadCol := FindRoadColor;
MakeDDTM(ForkNofMineDDTM,[616,67,0,0,MMRoadCol,10,
594,48,2,0,MMRoadCol,10,
645,66,2,0,MMRoadCol,10,
598,88,2,0,MMRoadCol,10]);
MarkTime(TFindNoMFork);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialRoadWalk(MMRoadCol, 420, 300, 50, 2, 2);
if(not(FlagPresent)) then RadialRoadWalk(MMRoadCol, 420, 300, 70, 2, 2);
//Used when road is too far from position in mine
RandomActivity;
FFlag(0);
Wait(500+random(250));
if(TimeFromMark(TFindNoMFork) > 90000) then
begin
DeactivatePlayer('Failed to find north of mine fork.');
Exit;
end;
until(DTMRotated(ForkNofMineDDTM, x, y, MMX1, MMY1, MMX2, MMY2));
Status('Found mine fork');
Mouse(x, y, 2, 2, true);
FFlag(0);
FreeDTM(ForkNofMineDDTM);
end;
//From mine fork to south of fally fork
procedure ForkToNorthRoad;
var
TFindSoFFork : Integer;
begin
if(not(LoggedIn)) then Exit;
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
MakeDDTM(ForkSofFallyDDTM,[641,102,0,0,MMRoadCol,10,
624,71,2,0,MMRoadCol,10,
611,104,2,0,MMRoadCol,10,
672,116,2,0,MMRoadCol,10]);
Status('Looking for south of Fally fork.');
MarkTime(TFindSoFFork);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialRoadWalk(MMRoadCol, 120, 60, 40, 2, 2);
RandomActivity;
FFlag(0);
Wait(500+random(250));
if(TimeFromMark(TFindSoFFork) > 90000) then
begin
DeactivatePlayer('Failed to find south of fally fork.');
Exit;
end;
until(DTMRotated(ForkSofFallyDDTM, x, y, MMCX-30, MMY1, MMX2, MMY2));
Status('Found south of Fally fork.');
Mouse(x, y, 2, 2, true);
FFlag(0);
FreeDTM(ForkSofFallyDDTM);
end;
//From south of fally fork to well
procedure NorthRoadToWell;
var
TFindFFally, TFindWell : Integer;
begin
if(not(LoggedIn)) then Exit;
Status('Looking for Fally.');
MakeDDTM(ForkFallyDDTM, [638,86,0,0,MMFallyRoadCol,10,
607,105,2,0,MMFallyRoadCol,10,
648,97,2,0,MMFallyRoadCol,10,
645,64,2,0,MMFallyRoadCol,10]);
MarkTime(TFindFFally);
repeat
MMRoadCol := FixRoadCol(MMRoadCol, 'road');
RadialRoadWalk(MMRoadCol, 320, 400, 40, 2, 2);
RandomActivity;
FFlag(0);
Wait(500+random(250));
if(TimeFromMark(TFindFFally) > 90000) then
begin
DeactivatePlayer('Failed to find fally.');
Exit;
end;
until(DTMRotated(ForkFallyDDTM, x, y, MMX1, MMY1, MMX2, MMCY+30));
Status('Found Fally fork');
Mouse(x, y, 2, 2, true);
FFlag(0);
FreeDTM(ForkFallyDDTM);
Status('Looking for well');
Wait(1000+random(500));
MMFallyRoadCol := FindFallyRoadColor;
MarkTime(TFindWell);
repeat
MMFallyRoadCol := FixRoadCol(MMFallyRoadCol, 'fally');
RadialRoadWalk(MMFallyRoadCol, 300, 200, 40, 2, 2);
FFlag(0);
if(TimeFromMark(TFindWell) > 40000) then
begin
DeactivatePlayer('Failed to find well.');
Exit;
end;
until(FindSymbol(x, y, 'water'));
Mouse(x, y, 0, 0, true);
Status('Found well');
FFlag(0);
end;
//Walking procedures from mine to well
procedure WalkToWell;
begin
MineToFork;
ForkToNorthRoad;
NorthRoadToWell;
end;
//Turns all of the clay to soft clay at the well
procedure WetClay;
var
xa, ya, xb, yb, TWetClay : Integer;
begin
if(not(LoggedIn)) then Exit;
EmptyBucketDTM := DTMFromString('78DA63F467626090656440066DB5350C5C401' +
'A24FA1F08187D816A8451D524FB88C3D5800023C81C6E54353059' +
'B89A084C7330D48400D5A81050E30154A34A408D1B508D347E350' +
'00D8D0955');
FullBucketDTM := DTMFromString('78DA63AC60626090656440060DE5E50C5C401' +
'A24FA1F0818416A8451D5D4D4CC86AB0101C64AA01A6E54353059' +
'B89A26A01A21026A1A816AE408A82905AA5123A0261FA84682809' +
'A42A01A25FC6A00E4620BCC');
ClayDTM := DTMFromString('78DA63AC6062604866644006339BC219B8803' +
'448F43F10305602D544A3AA81C8C24820DD0C54134F404D35504D' +
'2A0135F940352904D49403D56410505345D83D0021140B9E');
GameTab(4);
Status('Using well to soften clay.')
if(FindMSColorTol(x, y, MSWellCol, 4)) then
begin
MarkTime(TWetClay);
while(FindDTM(ClayDTM, x, y, MIX1, MIY1, MIX2, MIY2)) do
begin
if (FindDTM(EmptyBucketDTM, xa, ya, MIX1, MIY1, MIX2, MIY2)) and
(FindMSColorTol(xb, yb, MSWellCol, 4)) then
begin
Mouse(xa, ya, 2, 2, true);
Wait(750+random(250));
Mouse(xb+20, yb+10, 3, 3, true); //Color finding always finds color in top left corner.
Wait((NumBuckets*1000)+random(500));
end;
while (FindDTM(FullBucketDTM, xa, ya, MIX1, MIY1, MIX2, MIY2)) and
(FindDTM(ClayDTM, xb, yb, MIX1, MIY1, MIX2, MIY2)) do
begin
Mouse(xa, ya, 2, 2, true);
Wait(500+random(250));
Mouse(xb, yb, 2, 2, true);
Wait(750+random(250));
if ClickNpcChatTextRight('oft') then
begin
Wait(250+random(100));
ChooseOption(x, y, 'll');
Wait((NumBuckets*1250)+random(250));
end;
end;
FindRandoms;
if(TimeFromMark(TWetClay) > 210000) then
begin
DeactivatePlayer('Took over 3 mins to wet clay');
Exit;
end;
end;
end else
begin
DeactivatePlayer('Could not find well');
Exit;
end;
Status('Completed softening clay.');
FreeDTM(EmptyBucketDTM);
FreeDTM(FullBucketDTM);
FreeDTM(ClayDTM);
end;
//Walks from well to bank
procedure WalkToBank;
var
BankDTM, TFindBank, TFindScreen : Integer;
begin
if(not(LoggedIn)) then Exit;
BankDTM := DTMFromString('78DA635CC2C4C0E0CC8002FEFC61621001D28' +
'C40FC1F0818D762AAF9F78F0FAE06041867E03707AC660E116A56' +
'10560300B5A512E3'); //DTM of bankers
MarkTime(TFindBank);
Status('Looking for bank.');
repeat
MMFallyRoadCol := FixRoadCol(MMFallyRoadCol, 'fally');
RadialRoadWalk(MMFallyRoadCol, 330, 530, 40, 2, 2);
FFlag(5);
if(TimeFromMark(TFindBank) > 40000) then
begin
DeactivatePlayer('Failed to find bank.');
Exit;
end;
until(DTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2));
Status('Found bank!');
MarkTime(TFindScreen);
repeat //Wasn't always opening bank screen, added this to make sure it did
FindBank('feb');
Wait(2000+random(200));
until(BankScreen) or (TimeFromMark(TFindScreen) > 90000);
if (TimeFromMark(TFindScreen) > 90000) then
begin
DeactivatePlayer('Failed to find bank screen');
Exit;
end;
Wait(1000+random(250));
FreeDTM(BankDTM);
end;
//Main Loop
begin
SetupScript;
repeat
Prepare;
repeat
WalkToMine;
MineClay;
WalkToWell;
WetClay;
WalkToBank;
BankLoad;
until(LoadsCount = NumLoads) or not(LoggedIn);
NextPlayer(Players[CurrentPlayer].Active);
until(False);
end.——————————————————
<!– END TEMPLATE: formanswers –>