WT-Fawaki i made it compile so the l33chers shut up its okay to post? if not delete it, with your dev powers ;)
Updated(compiling) COWS!{=========================================================================]
[ SRL Cow Killer / Hide & Meat Collector / Banker / Bone Burier ]
[ ]
[ NAME : SRL Cow Killer/Collector 0.43 ]
[ WRITER : WT-Fakawi (Fawki) ]
[ CATEGORY : Fighter/Collector ]
[ DESCRIPTION : See below. ]
[ USAGE : Fights Cows below Falador. Collects and banks. ]
[ AUTOCOLOR : No. Pick RoadColor outside Falador. Line 48. ]
[ NOTES : ]
[ CONTACT : [email]WTFakawi@hotmail.com[/email] ]
[ SRL REV. : 4 SCAR 3.11 ]
[=========================================================================]
[ This Script kills Cows @ the cowfield below Falador and collects ]
[ hides and bones, cook meat at the fireplace, buries bones and ]
[ banks hides ]
[ ]
[=========================================================================]
[ Instructions. ]
[=========================================================================]
[ ]
[ USE SCSS CLIENT ]
[ ]
[ COLORPICK THE TREECOLOR IN LINE 56. See guard mager thread for details ]
[ [url]http://www.villavu.com/forum/showthread.php?t=5936?t=6840[/url] ]
[ ]
[ ]
[ 1. USE Runescape with Low Detail, Very Bright. ]
[ 2. Set your Screen to 32 bit TRUE color. ]
[ 3. Set Playernames and Passwords in DeclarePlayers. ]
[ 4. Set NumberOfPlayers. ]
[ 5. Position your chars at Falador east bank LEFTMOST bankslot. ]
[ 6. Make sure your Players have three pieces of armour. ]
[ 7. If script cant find colors manually align MM North BEFORE RUNNING. ]
[=========================================================================}
program CowKiller;
{.include SRL/srl.scar}
{.include SRL/srl/misc/Bitmaps/Crafting.scar}
var
Mark, FB1, FB2, FB3, MMGate, Bone, BoneCount, NewBones, OldBones, ColdCount, CewCount,
BoneHide1, BoneHide2, BoneHide3, BoneHide4,
Meat, Hides, Cal, Cow1, Cow2, Cow3, Cow4, Cows,
Gate3, Gate6, Gate9, CowHideText, BonesText, RawBeefText, MainMark,
FirePlace, Fireplace2, FPD1, FPD2, FPD3, CookedMeatCount,
BurnedMeatCount, FaladorEastBank: integer;
var
SST1, SST2, FindNorMalRandomsTime, FindFastRandomsTime: LongInt;
var CowHide: array[1..8] of Integer;
//----------------------REQUIRED COLOR --------------------------------------//
const
TreeColor = 533016; // <- COLORPICK THE RIGHT TREECOLOR!!
//---------------------OPTIONAL FIELDS----------------------------------------//
const
Loads = 2; //<- Number of loads before switching Player.
MySRLID = ''; //<- Your SRLID. Leave blank if you dont have one.
MySRLPassword = ''; //<- Your SRL Password here if you want to have yout stats logged
RemoteMaster = ''; //<- fill in the Nickname of the RC master
CollectMeat = True; //<- Enables Meat collection
CookMeat = False; //<- Enables Meat Cooking! (Experimental)
FawkiDebug = False; // For extensive reports set to True.
FightingTime = 14; // fighting TimeOut in second. 14 is ok for level - 30+
//--------------------DO NOT CHANGE THESE VALUES------------------------------//
GateColor = 4350580; // AUTOCOLORS
MeatColor = 1122975;
CalfColor = 5797788;
VersionNumber = '0.43';
procedure HandleGate(ToFrom:String); Forward;
Function PickUp:Boolean; Forward;
Procedure WalkToFalador(How:string); Forward;
Procedure CleanUpInventory; Forward;
Procedure DeclarePlayers;
begin
NumberOfPlayers(8);
CurrentPlayer := 0;
Players[0].Name :='';
Players[0].Pass :='';
Players[0].Nick :='';
Players[0].Skill :='auto' // Valid: 'attack', 'strength', 'defence', 'auto'
Players[0].Loc := 'Falador';
Players[0].Active :=True;
Players[1].Name :='';
Players[1].Pass :='';
Players[1].Nick :='';
Players[1].Skill :='auto'
Players[1].Loc := 'Falador';
Players[1].Active :=True;
Players[2].Name :='';
Players[2].Pass :='';
Players[2].Nick :='';
Players[2].Skill :='auto'
Players[2].Loc := 'Falador';
Players[2].Active :=True;
Players[3].Name :='';
Players[3].Pass :='';
Players[3].Nick :='';
Players[3].Skill :='auto'
Players[3].Loc := 'Falador';
Players[3].Active :=True;
Players[4].Name :='';
Players[4].Pass :='';
Players[4].Nick :='';
Players[4].Skill :='auto'
Players[4].Loc := 'Falador';
Players[4].Active :=True;
Players[5].Name :='';
Players[5].Pass :='';
Players[5].Nick :='';
Players[5].Skill :='auto'
Players[5].Loc := 'Falador';
Players[5].Active :=True;
Players[6].Name :='';
Players[6].Pass :='';
Players[6].Nick :='';
Players[6].Skill :='auto'
Players[6].Loc := 'Falador';
Players[6].Active :=True;
Players[7].Name :='';
Players[7].Pass :='';
Players[7].Nick :='';
Players[7].Skill :='auto'
Players[7].Loc := 'Falador';
Players[7].Active :=True;
end;
//----------------------------------------------------------------------------//
procedure PlayerStats;
var
Active: string;
var
i: Integer;
begin
for i := 0 to HowManyPlayers-1 do
begin
if Players[i].Active=True then Active:='T' else Active:='F';
writeln( (inttostr(i))+' : '+Players[i].name + ' = '+Active
+'. '
+'AT '+inttostr(Players[i].level[1])+'. '
+'ST '+inttostr(Players[i].level[2])+'. '
+'DF '+inttostr(Players[i].level[3])+'. '
+'PR '+inttostr(Players[i].level[5])+'. '
+'HP '+inttostr(Players[i].level[8])+'. '
+'MG '+inttostr(Players[i].level[6])+'. '
+'CO '+inttostr(Players[i].level[18])+'. '
+'. - B :' + inttostr(Players[i].Banked)+' Times.'+
+'W : '+IntToStr(Players[i].Worked)+' min. '
+'L: '+Players[i].loc);
end
writeln('**********************************************');
end;
//----------------------------------------------------------------------------//
procedure ProgressReport;
begin
begin
WriteLn(' ');
WriteLn('<============== -'+VersionNumber+'- Progress Report ===============>');
writeln('Worked for '+ TimeRunning);
WriteLn('Banked '+IntToStr(banks)+' loads[s].');
WriteLn('Attacked '+IntToStr(Cows)+' cows.');
WriteLn('Collected '+IntToStr(Hides)+' hides.');
WriteLn('Buried '+IntToStr(BoneCount)+' bones.');
WriteLn('Collected '+IntToStr(Meat)+' meat.');
WriteLn('Cooked '+IntToStr(CookedMeatCount)+' meat.');
WriteLn('Dropped '+IntToStr(BurnedMeatCount)+' burned meat.');
end;
PlayerStats;
CewCount := Cows; // some fuzzy stats logic :)
NewBones:= BoneCount;
Reportvars[1] := CewCount - ColdCount;
Reportvars[3] := NewBones - OldBones;
SRLRandomsReport;
ColdCount := Cows;
OldBones:= BoneCount;
end;
//----------------------------------------------------------------------------//
Procedure FillMem;
begin
FB1 := DTMFromString('78DA636C66626008634001972E5E66F80FA41' +
'981F83F1030B601D5C4A0AAF9F38789810BAA0604189B8850D345' +
'580D00CA7B110D'); // three yellow bankerdots. Works in combi with DM3Flag
FB2 := DTMFromString('78DA63EC61626008614001478F1E65F80FA41' +
'981F83F1030F602D544A1AAF9F38789810BAA0604182712A1662A' +
'504D247E3500C2961107');
FB3 := DTMFromString('78DA636C646260086140038C0CFFC12403C37' +
'F206004A9894255F1E70F130317540D58472B504D3401359D4035' +
'31F8D50000978B0E8E');
MMGate := BitmapFromString(4, 1, 'F70000F70000F70000F70000'); // MM red stripe
Gate3 := BitmapFromString(3, 1, 'E80000E80000E80000');
Gate6 := BitmapFromString(3, 2, '778421778421778421E8000' +
'0E80000E80000');
Gate9 := BitmapFromString(3, 3, 'z78DA3337B7303132344722' +
'5D2D0C80009934C750030034130B26');
FPD1 := BitmapFromString(2, 5, 'z78DAB3B030373671' +
'B1C020DD8C0C8000429A5B9AB9996121018D1F0D01');
FPD2 := BitmapFromString(3, 3, '88734D88734D88734' +
'DF20000F20000F20000796F60796F60796F60');
FPD3 := BitmapFromString(1, 3, '88734DF20000796F6' +
'0');
Bone := BitmapFromString2(False, 'aE351F78DA5D8D5B0EC520' +
'0844B7449541FAC9A3EE7F498536B9B9A91FE389830722A26B559' +
'01D15425C0995661DCD88E6637CDAA1FC6BB19FF91EA1C557B3A3' +
'F931BF9E85FD6929DB70CCFE5BF77FA6E6C8E1E9D3674420382D9' +
'1703236F6696A1AA83EC38363D6222C28AD3EBA48B6D1891322D8' +
'CFDE72BE364981E07DB901A00');
BoneHide1 := BitmapFromString(9, 1, 'C2B9B8C2B9B8C2B9B8D5D0' +
'CFD4CECE978D8CB7ACABBAAFAFB8ADAD'); // long stretched
BoneHide2 := BitmapFromString(3, 3, 'B1A5A55A7B1D5A7B1DB1' +
'A5A55A7B1D5A7B1DAB9F9FB3A8A75A7B1D');// upperright corner
BoneHide3 := BitmapFromString(4, 4, 'z78DA3375B330323230C' +
'5209D0C1C4D1C4D9049FCE28ECE8E068E064E868EA68EA6101222' +
'0E000011153E'); // upperrightcorner
BoneHide4 := BitmapFromString(3, 4, 'C2B9B9C2B9B95A7B1DBF' +
'B6B6BFB6B65A7B1DCBC4C4CBC4C45A7B1D57771D57771D57771D'); // lowerright corne
Cow1 := BitmapFromString(6, 1, 'C1BDB7C1BDB7C1BDB75A523C' +
'574F3A574F3A');
Cow2 := BitmapFromString(1, 6, '604B40604B40604B40685952' +
'685952665751');
Cow3 := BitmapFromString(6, 1, 'C1BDB7C1BDB7C1BDB7918072' +
'8F7E718F7E71');
Cow4 := BitmapFromString(1, 6, 'C0BBB6C0BBB6BEBAB48F7560' +
'8D735E8D735E');
CowHideText := BitmapFromString(25, 1, 'z78DA7373B334303170' +
'03931060EA626A6262EE4684387E9254D390C5019A022059');
BonesText := BitmapFromString(24, 1, 'z78DA7373B33430317003' +
'931060EA626A6262EE4603714C121940D40300C5511EC7');
RawBeefText := BitmapFromString(29, 1, 'z78DA7373B334303170' +
'0393C8C00D43DCD4C5D4C4C41C591C3F89AC0B17498C2DC8E200C' +
'CC02560');
Fireplace := BitmapFromString(18, 1, '8B65318D63248962217B5' +
'F348E7538957C3F8B6F237F6A38796D3E776015755D2180663B85' +
'5C20805D337A5C4160504174583E695442'); // (...,1) works fine with deformed
FirePlace2 := BitmapFromString(30, 1, '7450197855326D4D25' +
'5F39126E512B7E64248565148566158566154B3905765C134B421' +
'E6E52237A561B72511A72511A644F3C7E5C3D835B1A885E168A5F' +
'1072501275520D8969137D621E5A4D1C524513805913684D1C755' +
'21A');
FaladorEastBank := DTMFromString('78DA63EC60626008614001FFFFFF67F80FA41' +
'921ECFF8CED4035D1A86AFEFC6102D38C503E6337116AFA895033' +
'99B01A00BF4D1471');
CowHide[1]:= 7504017; // Bright cow
CowHide[2]:= 5330790; // Dark cow
CowHide[3]:= 15658736; // bright bone
CowHide[4]:= 13355986; // bright hide
CowHide[5]:= 12698313; // bright hide
CowHide[6]:= 5139082; // light bown cow
CowHide[7]:= 12172995; // White Spot on cow
CowHide[8]:= 1849666; // Darkest Cow
end;
//----------------------------------------------------------------------------//
// -- based off PPLSUQBAWLZ's InventoryCount -- //
// -- but returns number of inventitems processed -- //
//----------------------------------------------------------------------------//
Function CowsClickAllItemsBmpTolWait(optionx: string; bmp, tol, waitnum: Integer):integer;
var
i, e, x, y, ObjectCount: Integer;
begin
GameTab(4);
while (i < 6) do
begin
if (i = 5) and (e < 8) then
begin
i := 0;
e := e + 1;
end;
if (FindBitmapSpiralTolerance(bmp, x, y, (570 + 39 * i), (214 + 35 * e), (609
+ 39 * i), (249 + 35 * e), tol)) then
begin
MMouse(x, y, 0, 0)
if (not (optionx = '')) then
begin
MouseItem(e * 4 + i + 1, False);
ChooseOption(optionx);
ObjectCount := ObjectCount + 1;
FindTalk;
end
else
MouseItem(e * 4 + i + 1, True);
Wait(waitnum);
end;
if (i = 4) and (e = 7) then
begin
Result:=ObjectCount;
break;
end;
i := i + 1;
end;
end;
{*******************************************************************************
function ChooseOption(txt: String): Boolean;
By: Stupid3ooo, modded by Sumilion
Description: Finds Popup menu, then clicks on it.
*******************************************************************************}
function CowsChooseOption(txt: string): Boolean;
var
x, y, x1, y1, x2, y2, LeftCorner, RightCorner: Integer;
begin
LeftCorner := BitmapFromString(4, 4, 'z78DA33753135313137C5' +
'411A600064715CEA914500CACE13F0');
RightCorner := BitmapFromString(4, 4, 'z78DA33753135313137' +
'C5200D30002E35F8C501C9C013F0');
if (FindBitmap(LeftCorner, x1, y1)) and (FindBitmap(RightCorner, x2, y2)) then
begin
if (FindText(x, y, txt, upchars, x1, y1, x2, 502)) then
begin
Result := True;
// RunControl(True);
MouseBox(x1 + 5, y + 4, x2, y + 10, True);
end
else if (FindText(x, y, 'Cancel', upchars, x1, y1, x2, 502)) then
MouseBox(x1 + 5, y + 4, x2, y + 10, True);
end;
FreeBitmap(LeftCorner);
FreeBitmap(RightCorner);
end;
//----------------------------------------------------------------------------//
Function ClickDTMRotated(TheDTM:Integer):Boolean;
var WhichAngle: Extended;
var FBx, FBy: Integer;
begin
if FindDtmRotated(TheDTM, FBx, FBy, MMX1, MMY1, MMX2, MMY2,
-pi/4, pi/4, 0.05,
WhichAngle) then
begin
Mouse(FBx, FBy, 0, 0, True);
FFlag(0);
FTWait(4);
Result := True;
end;
end;
//----------------------------------------------------------------------------//
Procedure SetUp;
var I:Integer;
begin
SetupSRL;
Fillmem;
DeclareCraftingBitmaps;
if MySRLID <> '' then
begin
SRLID := MySRLID;
SRLPassword := MySRLPassword;
end;
RCMaster :=RemoteMaster;
RCLoc :='Falador';
for I := 0 to 19 do
ReportVars[I] := 0;
ScriptID := '77';
MouseSpeed := 20;
DeclarePlayers;
LampSkill := 'mining';
SetupSRLAutoResponder;
LoginPlayer;
SetScreenName(Players[CurrentPlayer].Nick);
MarkTime(SST1);
MarkTime(SST2);
ClearDebug;
ClearReport;
end;
//----------------------------------------------------------------------------//
// -- Color Finding routine -- //
//----------------------------------------------------------------------------//
function FindCowWaterColor: Integer;
var
c, TX, TY, FaladorWater: Integer;
begin
FaladorWater := BitmapFromString(6, 6, 'z78DA33733677B' +
'174351B7624000B723409');
while (c < 65) do
begin
c := c + 5;
if FindBitmapToleranceIn(FaladorWater, TX, TY, MMCX - 75, MMCY + 20, MMCX -
20, MMCY + 30, c) then
begin
WaterColor := GetColor(TX, TY);
Result := WaterColor;
break;
end
end
FreeBitmap(FaladorWater);
if Result = 0 then WriteLn('ERROR: Watercolor NOT Found');
end;
//----------------------------------------------------------------------------//
function FindTreeColor: Integer;
var
c, TX, TY, Tree: Integer;
begin
if TreeColor = 0 then
begin
Tree := BitmapFromString(4, 2, '111D00422C00422C005B721C111' +
'D00422C00422C005B721C');
while (c < 65) do
begin
c := c + 5;
if FindBitmapToleranceIn(Tree, TX, TY, 595,55,610,75, c) then
begin
// TreeColor := GetColor(TX, TY);
Result := TreeColor;
Writeln('TreeColor:= '+ IntToStr(TreeColor)+';');
break;
end
end
FreeBitmap(Tree);
if Result = 0 then WriteLn('ERROR: Watercolor NOT Found');
end;
end;
//----------------------------------------------------------------------------//
// -- Random Handling and Script Flow -- //
//----------------------------------------------------------------------------//
Function FindFastRandoms: Boolean;
var
i: Integer;
begin
for i:=0 to 8 do
begin
case I of
0: if SolveChatRandom then
Result := True;
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: 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;
end;
//----------------------------------------------------------------------------//
//--- Finds and handles randoms. ---//
//----------------------------------------------------------------------------//
procedure FindRandoms;
begin
FindFastRandoms;
FindNormalRandoms;
end;
//----------------------------------------------------------------------------//
// -- Performs Wait and FindTalk. + calls FindNormalRandoms every 10 secs -- //
// -- and FindFastRandoms every 3 secs. -- //
//----------------------------------------------------------------------------//
Procedure FTWaitAll(Time:Integer);
var t: integer;
begin
For T:=1 to Time do
begin
Wait(200+Random(50));
if FawkiDebug then Status('FindTalk.');
FindTalk;
RC;
end;
Respond;
FindFastRandoms;
MarkTime(FindFastRandomsTime);
if FindFastRandomsTime-SST2 >(1500+Random(1500)) then
begin
if FawkiDebug then Status('FindFastRandoms.');
FindFastRandoms;
FindTalk;
RC;
Respond;
MarkTime(SST2);
if FawkiDebug then Status('FindFastRandoms took:'+IntToStr(SST2-FindFastRandomsTime)+' msec');
end;
MarkTime(FindNorMalRandomsTime);
if FindNorMalRandomsTime-SST1 >(10000+Random(5000)) then
begin
if FawkiDebug then begin Status('FindNorMalRandoms.'); end;
FindNorMalRandoms;
FindTalk;
RC;
Respond;
MarkTime(SST1);
end;
end;
//----------------------------------------------------------------------------//
// -- Handles ClickToContinue but without NPCChars, so little bandwidth
//----------------------------------------------------------------------------//
Function ClickToContinueFast: Boolean;
var x,y,CTCTime:integer;
Begin
MarkTime(CTCTime);
while (FindColor(x,y,16711680,220,437,220,437)
and FindColor(x,y,16711680,332,436,332,436)) do
begin
Mouse (250,440,100,2,True);
Result:=True;
FTWaitAll(1);
IdleTime(250,1,0.5);
if (TimeFromMark(CTCTime) >6000) then Exit;
end;
end;
//----------------------------------------------------------------------------//
// -- Performs FlagWait and FindTalk....
//----------------------------------------------------------------------------//
function FlagFTWait:Boolean;
var FlagMark: Integer;
begin
MarkTime(FlagMark);
if not FlagPresent then
begin
Result:=False;
Exit;
end
else
begin
repeat
FTWaitAll(1);
if not(Loggedin) then break;
until ( (not FlagPresent) or (TimeFromMark(FlagMark) > 9000) ); // waits until flag is gone or 9 seconds.
Result:=True;
end;
end;
//----------------------------------------------------------------------------//
//--- Sets Fightmode as defined by Players.skill. ---//
//----------------------------------------------------------------------------//
Procedure SetLowest;
var Ci, HL1, HL2, HL:Integer;
Begin
if ( not ( LoggedIn )) then Exit;
GetAllLevels;
HL := 100;
for Ci := 1 to 2 do
begin
HL1 := Players[CurrentPlayer].level[Ci];
HL2 := Players[CurrentPlayer].level[Ci+1];
if HL2 > HL1 then
begin
if HL > HL1 then HL := HL1;
end
else
begin
if HL > HL2 then HL := HL2;
end;
end;
for CI := 1 to 3 do
begin
if Players[CurrentPlayer].level[Ci] = HL then
begin
if CI = 3 then CI := CI + 1;
SetFightMode(CI);
Case CI of
1 : LampSkill := 'attack';
2 : LampSkill := 'strength';
4 : LampSkill := 'defence';
end;
Exit;
end;
End;
End;
//----------------------------------------------------------------------------//
//-- Checks and sets Auto Retaliate. True = On, False = Off --//
//----------------------------------------------------------------------------//
procedure Retaliate(AutoRet:Boolean);
var
x, y:Integer;
begin
GameTab(1);
if AutoRet then
begin
If not FindColor(x, y, 1777020, 624, 385, 719, 396) then
begin
Mouse(666, 381, 8, 8, True);
end;
end;
if not AutoRet then
begin
If FindColor(x, y, 1777020, 624, 385, 719, 396) then
begin
Mouse(666, 381, 8, 8, True);
end;
end;
end;
//----------------------------------------------------------------------------//
procedure SetPlayerParams;
begin
if ( not ( LoggedIn )) then Exit;
GameTab(1);
if Players[CurrentPlayer].Skill = 'attack' then SetFightMode(1);
if Players[CurrentPlayer].Skill = 'strength'then SetFightMode(2);
if Players[CurrentPlayer].Skill = 'defence' then SetFightMode(4);
if Players[CurrentPlayer].Skill = 'auto' then SetLowest;
if Players[CurrentPlayer].Booleans[0] = False then
begin
Retaliate(True); // Set Retaliate off only the first time. :)
Players[CurrentPlayer].Booleans[0]:=True;
end;
SetChat('On', 1);
SetChat('Friends', 2);
SetChat('Off', 3);
SetChat('On', 1);
FindTalk;
end;
//----------------------------------------------------------------------------//
//--- Some Tilt functions. ---//
//----------------------------------------------------------------------------//
Procedure Down;
begin
SendArrowSilentWait(2, 1000 + Random(500));
end;
//----------------------------------------------------------------------------//
Procedure Up;
begin
SendArrowSilentWait(0, 1000 + Random(500));
end;
//----------------------------------------------------------------------------//
Procedure UpTime(Time:Integer);
begin
SendArrowSilentWait(0, Time + Random((2*Time)/10));
end;
//----------------------------------------------------------------------------//
//--- Returns True if RawBeef is in inventory ---//
//----------------------------------------------------------------------------//
Function WeHaveRawMeat(var WhereX,WhereY:integer):boolean;
var Tx,Ty:integer;
begin
GameTab(4);
if FindBitmapToleranceIn(RawBeef,Tx,Ty,MIX1,MIY1,MIX2,MIY2,50) then
Begin
WhereX:=Tx;
WhereY:=Ty;
Result:=True;
end;
end;
//----------------------------------------------------------------------------//
// -- Yet another custom Flag -- //
//----------------------------------------------------------------------------//
procedure FFFlag;
var
XK, YK, XL, YL: Integer;
var
T1, T2: Extended;
begin
If Not LoggedIn Then Exit;
T1 := GetTickCount;
repeat
T2 := GetTickCount;
Wait(100);
if T2 - T1 > 10000 then
begin
if FindColor(XL, YL, 255, MMX1, MMY1, MMX2, MMY2) then
MouseFindFlag(XL, YL, 1, 1)
else Mouse(MMCX - 3, MMCY - 3, 6, 6, True);
break;
end;
if Random(20) = 1 then IdleTime(500, 1000, 0.01); // move mouse for a bit.
until (not FindColor(XK, YK, 255, MMX1, MMY1, MMX2, MMY2));
Respond;
end;
//----------------------------------------------------------------------------//
// -- Color Clicker by Wizzup? -- //
//----------------------------------------------------------------------------//
Function ClickColorSpiral(CenterX, CenterY, Color, Xoff, Yoff, Pause:Integer):Boolean;
begin
if FindColorSpiral(CenterX, CenterY, Color, MMX1, MMY1, MMX2, MMY2) Then
begin
MouseFindFlag(CenterX + Xoff, CenterY + Yoff, 1, -1);
Wait(Pause);
FFFlag;
FindNormalRandoms;
Result:=True;
end;
end;
//----------------------------------------------------------------------------//
// -- if below 75% run away -- //
//----------------------------------------------------------------------------//
procedure CheckHealth;
begin
if FindNormalRandoms then Exit;
if HPPercent < 75 then
begin
HandleGate('ToBank');
Players[CurrentPlayer].loc:='HealthDrop';
WalkToFalador('Emergency');
// EatFood;
// Players[CurrentPlayer].loc:='Falador'; // now that would be nice :)
// NextPlayer(True);
LogOut;
Exit;
end;
end;
//----------------------------------------------------------------------------//
procedure Callibrate;
var Gx, Gy:integer;
begin
MakeCompass('N');
if FindSymbol(Gx, Gy, 'farming spot') then
begin
Status('Farming Spot Found');
MouseFindFlag(612, 90, -1, -1);
FFFlag;
Exit;
end;
if FindSymbol(Gx, Gy, 'churn') then
begin
Status('Farming Shop Found');
MouseFindFlag(675, 75, -1, 1);
FFFlag;
Exit;
end;
if FindSymbol(Gx, Gy, 'water') then
begin
Status('WaterSymbol Found');
MouseFindFlag(675, 75, -1, 1);
FFFlag;
Exit;
end;
if FindBitMapToleranceIn(MMGate, Gx, Gy, MMCX, MMY1, MMX2, MMCY - 10, 20) then
begin
Mouse(Gx,Gy + 25, 10, 10, True);
if FawkiDebug then Status('Callibrated Centre');
end
end;
{*******************************************************************************
function FindObjSmall(var cx, cy: Integer; Text: String; color, tolerance: Integer): Boolean;
By: Stupid3ooo modded by WT-Fakawi.
Description: Finds Object within smaller range centre out.
Used for finding Large Object by Color and UpText
*******************************************************************************}
function FindObjSmall(var cx, cy: Integer; Text: string; color, tolerance: Integer):
Boolean;
var
x, y, a, c, i, x1, y1, x2, y2: Integer;
begin
if ( FindColorTolerance(x, y, color, MSX1, MSY1, MSX2, MSY2, tolerance)) then
begin
x1 := 245;
y1 := 165;
x2 := 277;
y2 := 185;
repeat
if (not (LoggedIn)) then
break;
a := a + 1;
if (a = 1) then
c := c + 1;
if (a = 3) then
c := c + 1;
for i := 1 to c do
begin
if (a = 1) then
begin
x1 := x1 + 20;
x2 := x2 + 20;
end;
if (a = 2) then
begin
y1 := y1 - 10;
y2 := y2 - 10;
end;
if (a = 3) then
begin
x1 := x1 - 20;
x2 := x2 - 20;
end;
if (a = 4) then
begin
y1 := y1 + 10;
y2 := y2 + 10;
end;
if (x1 = 485) and (x2 = 517) then
x2 := x2 - 2;
if (y1 = 325) and (y2 = 345) then
y2 := y2 - 7;
if (x2 > 400) then
Break;
if (FindColorTolerance(x, y, color, x1, y1, x2, y2, tolerance)) then
begin
MMouse(x, y, 0, 0)
cx := x;
cy := y;
if (IsUpText(Text)) then
begin
Result := True;
Break;
end;
end;
end;
if (a = 4) then
a := 0;
until (x2 > 400) or (Result = True);
end;
end;
//----------------------------------------------------------------------------//
//-- Checks for Status of the Gate using FindObjSmall --//
//----------------------------------------------------------------------------//
Procedure CheckMSGate(ObjText:string; Color:integer);
var GX, GY: Integer;
begin
if FindObjSmall(GX, GY, ObjText, Color, 50) then
begin
if IsUpText('los') then
exit;
if IsUpText('pen') then
begin
Wait(100 + Random(10));
Mouse(GX, GY, 0, 0, True);
FlagFTWait;
end;
end
end;
//----------------------------------------------------------------------------//
//-- Quickly scans over the Fence in an attempt to find the Gate Status --//
//-- Stores Results in Array. If enough pixels are found, the gate is open --//
//----------------------------------------------------------------------------//
Function SimpleGate:boolean;
var Gx, Gy, Dx, Dy,tol,sum:integer;
var res: array[0..80] of integer;
begin
repeat
tol := tol + 1;
if FindColorSpiralTolerance(Gx, Gy, 5006192, tol*4+50, MSY1+50, tol*4+120, MSY2-20,4) then // Fence Color
begin
MoveMouse(Gx,Gy);
res[tol]:=1;
Wait(10);
if FawkiDebug then Status(inttostr(tol)+' '+ inttostr(Gx)+' '+inttostr(Gy));
if FindColorTolerance(Dx, Dy, 13027844, 42, 8, 120, 21, 50) then // Blue Color indicating Uptext!
begin
if IsUpTextMulti('lo','los','ose') then // Check the Text
begin
Result := True;
exit;
end;
if IsUpTextMulti('Op','pe','pen') then
begin
if FawkiDebug then Status('SimpleGate found');
Wait(50);
GetMousePos(Gx,Gy);
if IsUpTextMulti('Op','pe','pen') then
begin
Mouse(Gx, Gy, 0, 0, True);
Result := True;
Exit;
end;
end;
end;
end;
until(tol = 80);
for tol:=1 to 80 do
begin
if res[tol]=1 then sum:=sum+1;
end
if sum > 65 then Result:=True;
end;
//----------------------------------------------------------------------------//
//--- Finds Bitmap inside box (x1,x2,y1,y2) on MiniMap. ---//
//--- Clicks on it with offset (Xoff,Yoff) ---//
//--- Performs Tilt Down, followed by a small TiltUp, to get the white ---//
//--- Wall away from MainScreen. ---//
//--- WHITE WALLS OF FALADOR HEAVILY INTERFERE WITH ISUPTEXT. ---//
//----------------------------------------------------------------------------//
Function ClickMMBitMapOffset(GateBitMap, GateColor, Xoff, Yoff, x1, y1, x2, y2:integer):Boolean;
var Gx, Gy:Integer;
begin
if FindBitMapToleranceIn(GateBitMap, Gx, Gy, x1, y1, x2, y2, 20) then
begin
if FawkiDebug then Status('bitmap found');
MouseFindFlag(Gx + Xoff ,(Gy + Yoff) - 2, 0,-1);
Flag;
Down;
FTWaitAll(4);
UpTime(150);
Result := True;
end;
end;
//----------------------------------------------------------------------------//
//-- Checks for the existence of one of Three possible Minimap Gate Bitmaps --//
//----------------------------------------------------------------------------//
Function ToGate(BM1, BM2, BM3, Xoff, Yoff, x1, y1, x2, y2, Tolerance:Integer):Boolean;
var Gx, Gy, i, j, Gate, Tol:integer;
begin
Tol:=10;
for j :=1 to 50 do
begin
for I := 1 to 3 do
begin
case I of
1: Gate := BM3;
2: Gate := BM2;
3: Gate := BM1;
end;
repeat
Wait(1);
if not LoggedIn then Exit;
if FindBitMapToleranceIn(Gate, Gx, Gy, x1, y1, x2, y2, tol) then
begin
If FawkiDebug then Status('Found Gate'+IntToStr(I));
MouseFindFlag(Gx + Xoff ,(Gy + Yoff) - 2, 0,-1);
FFFlag;
Result:=True;
Exit;
end;
Status('Tol = '+IntToStr(Tol));
Tol:=Tol + 4;
until Tol > 80;
Tol:=10;
end;
if j mod 20 = 0 then
begin
SendArrowSilentWait( ((Random(2) * 2) + 1), 5 + Random(5) );
Wait(10);
end;
end;
end;
//----------------------------------------------------------------------------//
//-- Handles the Gate in two directions --//
//----------------------------------------------------------------------------//
procedure HandleGate(ToFrom:String);
begin
Down;
UpTime(150);
// RunControl(True);
SetRun(True);
if ToFrom = 'ToBank' then
begin
if not ToGate(Gate9, Gate6, Gate3, 2, 8, MMX1 + 40, MMY1, MMX2, MMCY + 5, 50) then
begin
Status('Lost in finding ToBank ToGate');
Logout;
Exit;
end;
if not SimpleGate then CheckMSGate('Gate', GateColor);
FlagFTWait;
MouseFindFlag(590, 52, 1, 0);
// RunControl(False);
FFFlag;
Up;
end;
if ToFrom = 'ToCows' then
begin
// RunControl(True);
if not ToGate(Gate9, Gate6, Gate3, 2, -3, MMCX - 5, MMY1, MMX2, MMY2, 50) then
begin
Status('Lost in finding ToCows ToGate');
Logout;
Exit;
end;
if not SimpleGate then CheckMSGate('Gate',GateColor);
FFFlag;
MouseFindFlag(650, 120, 0, 1); // one 'blind' click.
// RunControl(False);
FFFlag;
Players[CurrentPlayer].Loc := 'Cowfield';
end
Up;
end;
//----------------------------------------------------------------------------//
//-- Checks for Green or Red above our head --//
//----------------------------------------------------------------------------//
function WaitFight(Time:Integer): Boolean;
var
x, y:Integer;
begin
FlagFTWait;
MarkTime(Mark);
While (FindColor(x, y, 65280, 230, 130, 280, 180) or FindColor(x, y, 255,
230, 130, 280, 180)) do
Begin
FTWaitAll(1);
If TimeFromMark(Mark) mod 1000 < 250 then Pickup;
If TimeFromMark(Mark)> (Time * 1000) then
begin
Break;
Result:=True;
end;
end;
end;
{*****************************************************************************
function InFight: Boolean;
By: WT-Fakawi
Description: Returns True if YOU are in fight.
*****************************************************************************}
function InFight: Boolean;
var
x, y:Integer;
begin
Result := (FindColor(x, y, 65280, 230, 130, 280, 180) or FindColor(x, y, 255,
230, 130, 280, 180))
end;
//----------------------------------------------------------------------------//
//-- Checks for Green or Red above MousePosition. --//
//----------------------------------------------------------------------------//
Function InFightAt(x, y: Integer):Boolean;
var
dx, dy, Scale: Integer;
begin
Scale := 30; // Cows are huge
Result:= FindColor(dx, dy, 65280, x - 2 * Scale, y - 1 * Scale, x + 2 * Scale, y + 1 * Scale) or
FindColor(dx, dy, 225, x - 2 * Scale, y - 1 * Scale, x + 2 * Scale, y + 1 * Scale);
end;
{*******************************************************************************
function ChooseOption3: Boolean;
By: Stupid3ooo modded by WT-Fakawi
Description: Finds Popup menu, then clicks on Hides, Bones, Meat in that order.
*******************************************************************************}
Function ChooseOption3:Boolean;
var
x1, y1, x2, y2, LeftCorner, RightCorner, Fx, Fy, BitMap, I: Integer;
begin
LeftCorner := BitmapFromString(4, 4, 'z78DA33753135313137C5' +
'411A600064715CEA914500CACE13F0');
RightCorner := BitmapFromString(4, 4, 'z78DA33753135313137' +
'C5200D30002E35F8C501C9C013F0');
if (FindBitmap(LeftCorner, x1, y1)) and (FindBitmap(RightCorner, x2, y2)) then
begin
for I := 1 to 3 do // ALWAYS COWHIDE FIRST!!! :)
begin
if CollectMeat then
begin
case I of
1: BitMap := CowHideText; // Sliced Bitmaps of MenuItemText
2: BitMap := RawBeefText; // Works like a charm
3: BitMap := BonesText;
end;
end
else
begin
case I of
1: BitMap := CowHideText; // Sliced Bitmaps of MenuItemText
2: BitMap := BonesText; // Works like a charm
3: BitMap := RawBeefText;
end;
end
If FindBitMap(BitMap, Fx, Fy) then
begin
Mouse(Fx, Fy, 20, 4, True);
Result := True;
FlagFTWait;
Exit;
end;
end;
if (FindText(Fx, Fy, 'Cancel', upchars, x1, y1, x2, 502)) then
Mouse(Fx + 9, Fy + 3, 2, 2, True);
end;
FreeBitmap(LeftCorner);
FreeBitmap(RightCorner);
end;
//----------------------------------------------------------------------------//
//--- Attacks a Cow once using FindColoredAreaTolerance. ---//
//--- Wont attack if there is green or red within 50 pixels range. ---//
//----------------------------------------------------------------------------//
Function AttackOnce(Color,tol,Area:integer):Boolean;
var Afx, Afy: integer;
begin
If FawkiDebug then Writeln('AttackOnce');
if InFight then Exit;
if FindColoredAreaTolerance(Afx, Afy, Color, MSX1, MSY1 + 40, MSX2, MSY2, Area, tol) then //3*3 brown color
begin
if FawkiDebug then Status('Found Cow');
MMouse(Afx, Afy, 0, 0);
GetMousePos(Afx, Afy);
Wait(100);
if IsUpText('A') then
if not InFightAt(Afx, Afy) then
begin
if FawkiDebug then Status('Attack Once');
Mouse(Afx, Afy, 0, 0, False);
if CowsChooseOption('tt') then
begin
FlagFTWait;
FTWait(16);
WaitFight(FightingTime);
Cows := Cows + 1;
Result := True;
Exit;
end else Result:= False;
end else Result:= False;
if IsUpText('ke') then
begin
Mouse(Afx, Afy, 0, 0, False);
if FawkiDebug then Status('Pick up AttackOnce');
ChooseOption3;
FlagFTWait;
end else Result:= False;
end;
end;
//----------------------------------------------------------------------------//
//-- An attempt for quick click-attack --//
//----------------------------------------------------------------------------//
Function AttackFast(tol,Area:integer):Boolean;
var Dmx, Dmy, Ax, Ay, xa: integer;
begin
If FawkiDebug then Writeln('AttackFast');
if InFight then Exit;
for xa:=1 to 8 do
begin
if FindColoredAreaTolerance(Ax, Ay, CowHide[xa], MSX1, MSY1 + 40, MSX2, MSY2, Area, tol) then
begin
MMouse(Ax, Ay, 0, 0);
GetMousePos(Ax, Ay);
Wait(100);
if FawkiDebug then Writeln('Color='+ IntToStr(GetColor(Ax, Ay)));
if FindColorTolerance(Dmx, Dmy, 318168, 42, 8, 120, 21, 50) then // Yellow
begin
if FawkiDebug then Status('Found Yellow UpText');
if IsUpText('A') then
if not InFightAt(Ax, Ay) then
begin
if FawkiDebug then Status('Attack Once');
Mouse(Ax, Ay, 0, 0, False);
if CowsChooseOption('tt') then
begin
FlagFTWait;
FTWait(16);
if InChatMulti('ome','one','els') then Exit;
WaitFight(FightingTime);
Cows := Cows + 1;
Result := True;
Exit;
end else
begin
Result := False
Exit;
end;
end
end else
if FindColorTolerance(Dmx, Dmy, 3770342, 42, 8, 120, 21, 50) then // Orange
begin
if IsUpText('ke') then
begin
Mouse(Ax, Ay, 0, 0, False);
if FawkiDebug then Status('Pick up AttackOnce');
ChooseOption3;
FlagFTWait;
end;
end;
end;
end;
end;
//----------------------------------------------------------------------------//
//--- Attacks a Cow once using Find Sliced Bitmaps. ---//
//----------------------------------------------------------------------------//
Function FindCow:Boolean;
var Dx, Dy, i, TheCow:integer;
begin
If FawkiDebug then Writeln('FindCow');
if InFight then Exit;
for I := 1 to 4 do
begin
case I of
1: TheCow := Cow1;
2: TheCow := Cow2;
3: TheCow := Cow3;
4: TheCow := Cow4;
end;
if InvFull then Exit;
if FindBitmapToleranceIn(TheCow, Dx, Dy, MSX1, MSY1+40, MSX2, MSY2, 20) then
begin
if FawkiDebug then Status('Found Cow');
MMouse(Dx, Dy, 0, 0);
GetMousePos(Dx, Dy);
Wait(100);
if IsUpText('A') then
if not InFightAt(Dx, Dy) then
begin
if FawkiDebug then Status('Click Cow');
Mouse(Dx, Dy, 0, 0, False);
if CowsChooseOption('tt') then
begin
FlagFTWait;
FTWait(16);
if InChatMulti('ome','one','els') then
begin
Result := False;
Exit;
end;
WaitFight(FightingTime);
Cows := Cows + 1;
Result := True;
Exit;
end else
begin
Result := False
Exit;
end;
end
if IsUpText('ke') then
begin
Mouse(Dx, Dy, 0, 0, False);
if FawkiDebug then Status('Pick up FindCow');
ChooseOption3;
FlagFTWait;
end;
end;
FTWaitAll(1);
Result := True;
end;
end;
//----------------------------------------------------------------------------//
Function PickUpMeat: Boolean;
var RX,RY:integer;
begin
if (not Loggedin) then Exit;
if FindColorSpiralTolerance(RX,RY,1122975,MSX1+40,MSY1+40,MSX2-40,MSY2-40,10) then
begin
MMouse(Rx,Ry,0,0);
GetMousePos(Rx, Ry);
FTWaitAll(1);
if IsUpText('ake') then
begin
Mouse(Rx,Ry,0,0,True);
if InChatMulti('spac','pace','ful') then begin Status('FULL DETECTED'); Exit; end;
if FawkiDebug then Status('Pick up Meat');
FTWaitAll(1);
Result:=True;
end;
end;
FTWaitAll(1);
FlagFTWait;
end;
//----------------------------------------------------------------------------//
Function PickUpHide: Boolean;
var RX,RY, Dmx, Dmy:integer;
begin
If FawkiDebug then Writeln('PickUpHide');
if (not Loggedin) then Exit;
if FindColoredAreaTolerance(Rx, Ry, 12895692, MSX1, MSY1 + 40, MSX2, MSY2, 9, 10) then //3*3 brown color
begin
MMouse(Rx,Ry,0,0);
GetMousePos(Rx, Ry);
Wait(100);
if FindColorTolerance(Dmx, Dmy, 318168, 42, 8, 120, 21, 50) then // Yellow
begin
if FawkiDebug then Status('Found Yellow UpText');
if IsUpText('A') then
if not InFightAt(Rx, Ry) then
begin
if FawkiDebug then Status('Attack Once');
Mouse(Rx, Ry, 0, 0, True);
FlagFTWait;
FTWait(16);
if InChatMulti('ome','one','els') then Exit;
WaitFight(FightingTime);
Cows := Cows + 1;
Result := True;
Exit;
end
end else
if IsUpTextMulti('owh','one','ak') then
begin
Mouse(Rx,Ry,0,0,False);
ChooseOption3;
if InChatMulti('spac','pace','ful') then begin Status('FULL DETECTED'); Exit; end;
if FawkiDebug then Status('Pick up Hide');
FTWaitAll(1);
Result:=True;
end;
end;
FTWaitAll(1);
FlagFTWait;
end;
//----------------------------------------------------------------------------//
//- Performs FindDeformedBitmapToleranceIn 4 times, with cowhide edgepoints -//
//----------------------------------------------------------------------------//
Function FindBoneHideDeformed:Boolean;
var Dx, Dy, i, BoneHide:integer;
var acc:Extended;
begin
If FawkiDebug then Writeln('FindBoneHideDeformed');
for I := 1 to 4 do
begin
case I of
1: BoneHide := BoneHide1;
2: BoneHide := BoneHide2;
3: BoneHide := BoneHide3;
4: BoneHide := BoneHide4;
end;
if InvFull then Exit;
FindDeformedBitmapToleranceIn(BoneHide, Dx, Dy, MSX1, MSY1+40, MSX2, MSY2, 5, 1, True, acc);
if FawkiDebug then Status('acc = ' + FloatToStr(acc));
begin
if (acc >= 0.4) then
begin
if FawkiDebug then Status('Found Deformed');
MMouse(Dx, Dy, 0, 0);
GetMousePos(Dx, Dy);
if IsUpText('A') then
begin
if not InFightAt(Dx, Dy) then
begin
if FawkiDebug then Status('Click Cow');
Mouse(Dx, Dy, 0, 0, True);
FTWaitAll(16);
WaitFight(FightingTime);
Cows := Cows + 1;
Result := True;
Exit;
end
end;
if IsUpText('ke') then
begin
Mouse(Dx, Dy, 0, 0, False);
if FawkiDebug then Status('Pick up Deformed');
ChooseOption3;
FlagFTWait;
end;
end;
end;
FTWaitAll(1);
Result := True;
Break;
end;
end;
//----------------------------------------------------------------------------//
//--- Picks up objects using above methods. ---//
//--- Avoids the mouse from going wild over FindObj. ---//
//----------------------------------------------------------------------------//
Function PickUp: Boolean;
begin
if InvFull then
begin
CleanUpInventory;
if InvFull then Exit;
end;
if CollectMeat then if PickUpMeat then Result := True;
if FindBoneHideDeformed then Result := True;
if PickUpHide then Result := True;
end;
//----------------------------------------------------------------------------//
//--- Like ClickNpcChatText, only this one RightClicks. (For Cooking) ---//
//----------------------------------------------------------------------------//
function ClickNpcChatTextRight(txt : String) : Boolean;
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;
//----------------------------------------------------------------------------//
//--- Nifty Little Stupid3ooo Procs. Cleans up inventory. ---//
//----------------------------------------------------------------------------//
Procedure CleanUpInventory;
begin
BoneCount := BoneCount + CowsClickAllItemsBmpTolWait('ury', Bone, 50, 1000); // bury bones
// FTWait(8);
// CheckHealth;
end;
//----------------------------------------------------------------------------//
//--- Cooking ---//
//----------------------------------------------------------------------------//
Function ClickFirePlace:Boolean;
var c, Fx, Fy, Mirror:Integer;
begin
Mirror := BitmapFromString(8, 3, 'z78DA73767276753174A6196' +
'9616AEA686C403C090015E62251');
Fx := 90;
Fy := 150;
while (c < 65) do
begin
c := c + 5;
if FindBitmapToleranceIn(Mirror, Fx, Fy, 40, 24, 310, 210, c) then
begin
MMouse(Fx, Fy, 10, 10);
If IsUpText('F') then
begin
GetMousePos(Fx, Fy);
Mouse(Fx, Fy, 0, 0, True);
Result := True;
FreeBitmap(Mirror);
Exit;
end else Result:= False;
end;
end;
FreeBitmap(Mirror);
end;
//----------------------------------------------------------------------------//
procedure CookAll;
var
x, y, Mx, My, c:integer;
begin
If WeHaveRawMeat(Mx,My) then
begin
repeat
MMouse(Mx, My, 4, 4);
if IsUpText('aw') then
begin
GetMousePos(Mx, My);
Mouse(Mx, My, 0, 0, True);
Wait(1000);
end
Wait(1000);
c := c + 1; if c > 5 then break;
until findcolor(x, y, 16777215, MIX1, MIY1, MIX2, MIY2) // try to select 5 times
end
else Exit;
Wait(1000);
ClickFirePlace;
MarkTime(Mark);
repeat
Wait(3000);
if(TimeFromMark(Mark)>10000) then begin Exit; end;
Until ClickNpcChatTextRight('aw');
ChooseOption('All');
MarkTime(Mark);
repeat
FTWaitAll(8);
if TimeFromMark(Mark) > 35000 then Exit;
if ClickToContinueFast then CookAll;
until not WeHaveRawMeat(Mx,My);
end;
//----------------------------------------------------------------------------//
Function OpenFirePlaceDoor:Boolean;
var Dx, Dy:Integer;
begin
if FindObjSmall(Dx, Dy, 'pe', 6653078, 20) then
begin
GetMousePos(Dx,Dy);
Mouse(Dx,Dy,0,0,True);
FFFlag;
MouseFindFlag(170, 230, 0,10);
FFFlag;
Result:=True;
end
end;
//----------------------------------------------------------------------------//
procedure CookingCycle;
begin
Callibrate;
FFFlag;
MouseFindFlag(MMCx, MMCy, 0,10);
FFFlag;
FTWait(4);
if not ToGate(FPD1, FPD2, FPD3, 0 , 0, 625, 90, MMX2, MMY2, 2) then
begin
writeln('CLICKSPIRAL');
if not ClickColorSpiral(655, 133, TreeColor, 0, 10, 3000) then Exit;
end
FTWait(8);
OpenFirePlaceDoor;
CookAll;
if not ToGate(FPD1, FPD2, FPD3, 0 , 6, 641, 73, 667, 93, 5) then
begin
writeln('CLICKSPIRAL');
if not ClickColorSpiral(655, 133, TreeColor, 0, 10, 3000) then Exit;
end
OpenFirePlaceDoor;
MouseFindFlag(605, 42, 10,10); // Blind Click!
FFFlag;
Callibrate;
ReportVars[5] := CowsClickAllItemsBmpTolWait('rop', BurnedMeat, 5, 250);;
BurnedMeatCount:=BurnedMeatCount + ReportVars[5]; // drops burnt meat by color
end;
//----------------------------------------------------------------------------//
//--- Walking ---//
//----------------------------------------------------------------------------//
procedure WalkToFaladorSouthGate;
begin
ClickColorSpiral(628, 140, WaterColor, 10, 10, 9000)
ClickColorSpiral(660, 120, TreeColor, 0, 10, 100)
ClickColorSpiral(677, 107, TreeColor, 0, 15, 2000)
ClickColorSpiral(690, 76, TreeColor, 0, 15, 2000)
end;
//----------------------------------------------------------------------------//
Procedure WalkToCowField;
begin
If not LoggedIn then Exit;
MakeCompass('N');
Players[CurrentPlayer].Loc := 'FalToCow';
WalkToFaladorSouthGate;
FFFlag;
HandleGate('ToCows');
end;
//----------------------------------------------------------------------------//
Procedure WalkToFalador(How:string);
var Wx, Wy:Integer;
begin
if How ='Normal' then HandleGate('ToBank');
ClickColorSpiral(630, 68, TreeColor, 0, 15, 150);
ClickColorSpiral(627, 44, TreeColor, 0, 15, 2000);
if not FindColor(Wx, Wy, Watercolor, MMX1, MMY1, MMX2, MMY2) then
begin
MouseFindFlag(580, 71, 1, 1);
FlagFTWait;
if not FindColor(Wx, Wy, Watercolor, MMX1, MMY1, MMX2, MMY2) then
begin
Logout;
Exit;
end;
end;
ClickColorSpiral(MMCX, MMY1 + 20, WaterColor, 15, 5, 4000)
ClickColorSpiral(MMCX, MMY1 + 20, WaterColor, 15, 5, 4000)
MakeCompass('N');
MarkTime(Mark);
Repeat
if not LoggedIn then exit;
if(TimeFromMark(Mark)>60000) then begin Logout; Exit; end;
WaterWalk(410, 270, 45, 10, 0, 25, 1, 1);
Until ClickDTMRotated(FaladorEastBank)
// DTM3Flag(FB1, FB2, FB3, True);
End;
//----------------------------------------------------------------------------//
Procedure Bank;
begin
if not BankScreen then
begin
MarkTime(Mark);
repeat
if (not(Loggedin)) then break;
If not OpenBankQuiet('feb') then OpenBankFast('feb');
until(BankScreen or (TimeFromMark(Mark) > 120000));
end;
if(BankScreen)then
begin
Wait(1000 + Random(1000));
FixBank;
Meat := Meat + CountItemBmpTol(RawBeef, 50);
Hides := Hides + CountItemBmpTol(Hide, 50);
CookedMeatCount := CookedMeatCount + CountItemBmpTol(CookedMeat, 50);
Wait(1000 + Random(100));
ReportVars[0] := CountItemBmpTol(Hide, 50);
ReportVars[2] := CountItemBmpTol(RawBeef, 50);
ReportVars[4] := CountItemBmpTol(CookedMeat, 50);
Wait(1000 + Random(100));
Deposit(1,28,2);
Wait(2000 + Random(100));
CloseBank;
Banks := Banks + 1;
Players[CurrentPlayer].Banked := Players[CurrentPlayer].Banked+1;
Players[CurrentPlayer].Loc := 'Falador';
end;
end;
//----------------------------------------------------------------------------//
// Main EventLoop
//----------------------------------------------------------------------------//
begin
Setup;
if (Players[CurrentPlayer].Loc='Falador') then
begin
if TreeColor = 0 then FindTreeColor;
if WaterColor = 0 then FindCowWaterColor;
end;
repeat
FixChat;
SetPlayerParams;
if Players[CurrentPlayer].loc = 'Falador' then
begin
Gametab(4);
PerfectNorth;
WalkToCowField;
end;
if Players[CurrentPlayer].Loc='Cowfield' then
begin
MarkTime(MainMark);
MarkTime(Cal);
repeat
if not InFight then AttackFast(10, 9) else Pickup;
if not InFight then AttackOnce(CalfColor, 10, 10) else PickUp;
if not InFight then FindCow else PickUp;
PickUp;
if (not(Loggedin)) then Break;
FindRandoms;
if TimeFromMark(cal) > (25000 + Random(3000)) then
begin
MarkTime(Cal);
CheckHealth;
Callibrate;
end;
if (InvFull) then
begin
CleanUpInventory;
if InvFull then
Break;
end;
until(TimeFromMark(MainMark) > 1200000); // 20 mins max...
if CollectMeat and CookMeat then CookingCycle;
WalkToFalador('Normal');
Bank;
ProgressReport;
MakeCompass('N');
FindRandoms;
end;
if ((LoggedIn) and (Players[CurrentPlayer].Banked mod Loads = 0) ) then
begin
MarkTime(Mark);
repeat
Wait(250+Random(250));
If TimeFromMark(Mark) > 30000 then break;
until CloseBank;
NextPlayer(True);
FTWaitAll(10);
end
if (not(Loggedin)) then
begin
NextPlayer(False);
end;
until(False);
end.