SCAR Code:
{
Forefeathers [SRL4][#16)
by munk
}
program forefeathers;
{.Include SRL\SRL\Misc\SMART.SCAR}
{.include srl/srl.scar}
const
dbug=false;
directionToRun='E';
yourSRLID='';
yourSRLPW='';
SMARTWORLD=109;
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].integers[3] := ; // attack
Players[0].integers[4] := ; // strength
Players[0].integers[5] := ; // defence
Players[0].Active := True;
Players[1].Name := ''; //username
Players[1].Pass := ''; //password
Players[1].Nick := ''; //3-4 letters from your username
Players[1].integers[3] := 0; // attack
Players[1].integers[4] := 99; // strength
Players[1].integers[5] := 0; // defence
Players[1].Active := True;
Players[2].Name := ''; //username
Players[2].Pass := ''; //password
Players[2].Nick := ''; //3-4 letters from your username
Players[2].integers[3] := 0; // attack
Players[2].integers[4] := 99; // strength
Players[2].integers[5] := 0; // defence
Players[2].Active := True;
Players[3].Name := ''; //username
Players[3].Pass := ''; //password
Players[3].Nick := ''; //3-4 letters from your username
Players[3].integers[3] := 0; // attack
Players[3].integers[4] := 99; // strength
Players[3].integers[5] := 0; // defence
Players[3].Active := True;
Players[4].Name := ''; //username
Players[4].Pass := ''; //password
Players[4].Nick := ''; //3-4 letters from your username
Players[4].integers[3] := 0; // attack
Players[4].integers[4] := 99; // strength
Players[4].integers[5] := 0; // defence
Players[4].Active := True;
end;
var
x,y,k,s,a,h,ck,cf,pu,rvF:integer;
function countfeathers:integer;
var
i,feathers:integer;
cols:TintegerArray;
count:string;
begin
if not(loggedIn) then exit;
gametab(4);
wait(250+random(250));
result:=0;
feathers:=DTMFromString('78DA639464606010614001DBD7AC61E002D28' +
'C40FC1F081845810C5E0634C08844026921202148400D485E8C08' +
'73A409A8E107124A04D480FC2443408D3CA6DF31D448000949FC6' +
'A00153F07BB');
if finddtm(feathers,x,y,mix1,miy1,mix2,miy2) then
begin
cols:=[65535,16777215,8453888];
for i:=0 to 2 do
begin
count:=trim(GetTextAtEx(x-16, y-17, 0, statchars, False, False, 0, 1, cols[i], 5, true, tr_AlphaNumericChars));
if count<>'' then
begin
case uppercase(getLetters(count)) of
'K': result:=strToInt(trimLetters(count))*1000;
'M': result:=strToInt(trimLetters(count))*1000000;
else result:=strToInt(count);
end;
if dbug then writeln(count+' feathers');
break;
end;
end;
end;
freedtm(feathers);
end;
procedure setRetaliate(ret:boolean);
var
i:integer;
begin
if not(loggedIn) then exit;
gametab(1);
for i:=1 to 5 do
begin
case getColor(600,390) of
4540745: if ret=true then mouse(600+random(100),370+random(20),0,0,true) else exit;
1711220: if ret=false then mouse(600+random(100),370+random(20),0,0,true) else exit;
end;
wait(200);
end;
end;
function AttackMode:boolean;
var
i,mode,att,str,def:integer;
begin
if not(loggedIn) then exit;
result:=true;
if (timefrommark(a)>60000)or(not players[CurrentPlayer].booleans[2]) then
begin
gametab(2);
wait(250+random(250));
att:=getskillinfo('attack',false);
str:=getskillinfo('strength',false);
def:=getskillinfo('defence',false);
if dbug then writeln(inttostr(att)+'/'+inttostr(players[CurrentPlayer].integers[3])+' attack');
if dbug then writeln(inttostr(str)+'/'+inttostr(players[CurrentPlayer].integers[4])+' strength');
if dbug then writeln(inttostr(def)+'/'+inttostr(players[CurrentPlayer].integers[5])+' defence');
if players[CurrentPlayer].integers[5]>def then
if (players[CurrentPlayer].integers[3]<=att)or(def <= att) then
if (players[CurrentPlayer].integers[4]<=str)or(def <= str) then
mode:=4;
if players[CurrentPlayer].integers[3]>att then
if (players[CurrentPlayer].integers[4]<=str)or(att <= str) then
if (players[CurrentPlayer].integers[5]<=def)or(att <= def) then
mode:=1;
if players[CurrentPlayer].integers[4]>str then
if (players[CurrentPlayer].integers[3]<=att)or(str <= att) then
if (players[CurrentPlayer].integers[5]<=def)or(str <= def) then
mode:=2;
gametab(1);
wait(250+random(250));
if dbug then writeln('setting mode: '+inttostr(mode));
if mode>0 then
setfightmode(mode)
else
result:=false;
marktime(a);
players[CurrentPlayer].booleans[2]:=true;
end;
end;
function UTWait(maxtime:integer;txt:TstringArray):boolean;
var
t:integer;
begin
if (not(loggedIn)) then exit;
marktime(t);
while(timefrommark(t)<maxtime)do
begin
if IsUpTextMultiCustom(txt) then
begin
result:=true;
exit;
end;
wait(100+random(100));
end;
end;
procedure tilt;
begin
if not(loggedIn) then exit;
keydown(VK_DOWN);
wait(150+random(150)+random(150));
keyup(VK_DOWN);
wait(random(250));
end;
procedure login;
begin
if (not(loggedin)) then loginplayer;
wait(200);
findnormalrandoms;
marktime(s);
ck:=0;
makecompass('n');
setangle(true);
tilt;
gameTab(1);
setRetaliate(true);
if not(attackmode) then logout;
end;
procedure report;
var
i,f,chickens:integer;
begin
cleardebug;
for i:=0 to howmanyplayers-1 do
begin
writeln(inttostr(i)+': '+players[i].nick+' | '+left(booltostr(players[i].active),1)+' | '+inttostr(players[i].integers[0])+' feathers | '+inttostr(players[i].integers[1])+' chickens | '+players[i].rand);
f:=f+players[i].integers[0];
chickens:=chickens+players[i].integers[1];
end;
writeln('/////////////////////////////////////////////');
writeln('forefeathers');
writeln('ran for '+TimeRunning);
writeln('killed '+inttostr(chickens)+' chickens');
writeln('Picked up '+inttostr(f)+' feathers');
writeln('/////////////////////////////////////////////');
reportVars[1]:=f-rvF;
rvF:=f;
SRLrandomsReport;
end;
procedure run;
begin
if (not(loggedin)) then exit;
if timefrommark(players[currentplayer].integers[6])>300000 then
begin
setrun(true);
marktime(players[currentplayer].integers[6]);
end;
end;
procedure quickFlag;
var
t:integer;
begin
marktime(t);
while (flagPresent) do
begin
if timefrommark(t)>4000 then exit;
wait(250);
end;
end;
function underAttack(rx,ry:integer):boolean;
begin
if not(loggedIn) then exit;
if (findcolorspiral(x,y,65280,rx-5,ry-40,rx+5,ry+20))
or (findcolorspiral(x,y,255,rx-5,ry-40,rx+5,ry+20)) then
result:=true;
end;
function attackChicken:boolean;
var
i,c,mx,my,len:integer;
p:TpointArray;
pp:T2DpointArray;
ct:TintegerArray;
begin
if not loggedIn then exit;
mousespeed:=26+random(5);
try
for c:=0 to 1 do
begin
case c of
0: ct:=[4698308,34,2,13];
1: ct:=[3299957,10,20,120];
end;
setarraylength(p,0);
setarraylength(pp,0);
FindColorsSpiralTolerance(mscx,mscy,p,ct[0],msx1,msy1,msx2,msy2,ct[1]);
pp:=splitTPA(p,10);
len:=length(pp)-1;
for i:=0 to len do
begin
if dbug then writeln('['+inttostr(c)+'] '+inttostr(length(pp[i])));
if inRange(length(pp[i]),ct[2],ct[3]) then
if middleTPAex(pp[i],mx,my) then
if not(underAttack(mx,my)) then
begin
mmouse(mx,my,4,4);
if UTwait(400+random(100),['Chic','icke','cken']) then
if not(underAttack(mx,my)) then
begin
getMousePos(mx,my);
mouse(mx,my,0,0,false);
wait(30+random(20));
if chooseoption('tack') then
begin
if dbug then writeln('Attacked');
findnormalrandoms;
inc(players[currentplayer].integers[1]);
inc(ReportVars[0]);
ck:=0;
quickflag;
Ismoving(256+random(5));
result:=true;
exit;
end;
end;
break;
end;
end;
end;
inc(ck);
if dbug then writeln('ck = '+inttostr(ck));
wait(250);
finally
mousespeed:=20+random(5);
end;
end;
procedure nolog;
var
gt:integer;
begin
if (not(loggedin)) then exit;
if timefrommark(k)>15000 then
begin
case random(3) of
0: idleTime(750+random(750),100+random(200),0.1);
1: begin
gt:=1+random(13);
if gt=4 then gt:=gt+1+random(10);
gametab(gt);
wait(100+random(500));
gametab(4);
end;
2: begin
mouse(msx1+random(msx2),msy1+random(msy2),0,0,false);
chooseOption('xami');
end;
end;
marktime(k);
end;
end;
procedure runAwayHP;
begin
if (not(loggedin)) then exit;
runaway(directiontorun,true,2,random(5000));
players[currentplayer].integers[0]:=countfeathers-players[currentplayer].integers[2];
logout;
nextplayer(false);
marktime(s);
login;
end;
procedure calibrate;
var
mx,my:integer;
p,yellowDots,redDots:Array of Tpoint;
pp:T2DPointArray;
begin
if not(loggedIn) then exit;
FindColorsSpiralTolerance(mmcx,mmcy,redDots,395004,mmx1,mmy1,mmx2,mmy2,14);
FindColorsSpiralTolerance(mmcx,mmcy,yellowDots,60909,mmx1,mmy1,mmx2,mmy2,8);
p:=combineTPA(redDots,yellowDots);
pp:=TPAtoATPA(p,25);
SortATPASize(pp,true);
if length(pp)>0 then
if middleTPAex(pp[0],mx,my) then
if mfnf(mx,my,2,2) then
fflag(0);
end;
function pickupFeathers:boolean;
var
i:integer;
feather:Array[0..1] of integer;
begin
if (not(loggedin)) then exit;
feather[1]:= DTMFromString('78DA63E46562605067644001EA0C0C5C400A2' +
'4FA1F0818416AD450D56C5BBD0AAE0604C06A3450D59C3C781045' +
'0D00F3EE0943');
feather[0]:= DTMFromString('78DA63DCC7C8C0A001C44860EBAA550C5C401' +
'A24FA1F08180F01599AA86A18D418E06A408011648E16AA9A433B' +
'77A0A80100CAC20B42');
for i:=0 to 1 do
begin
if Finddtm(feather[i],x,y,msx1,msy1,msx2,msy2) then
begin
if dbug then writeln('feather['+inttostr(i)+'] DTM found');
mouse(x,y,2,2,false);
wait(50+random(50));
if chooseoption('eather') then
begin
quickFlag;
result:=true;
Ismoving(253);
break;
end;
end;
end;
freedtm(feather[0]);
freedtm(feather[1]);
end;
procedure fighting;
var
t,hp:integer;
begin
if not(loggedIn) then exit;
marktime(t);
while(findColorSpiral(x,y,65280,240,100,280,160))do
begin
findnormalrandoms;
if timefrommark(h)>20000 then
begin
if dbug then writeln('checking hp...');
hp:=hppercent;
if ((hp<50) and (hp>0)) then runawayHP;
marktime(h);
end;
Ismoving(252);
// pickupfeathers;
nolog;
Ismoving(252);
run;
if timefrommark(t)>40000 then exit;
end;
end;
procedure setupScript;
begin
cleardebug;
writeln(' = ');
writeln(' =|= FFFFFf ');
writeln(' ==|== Ff ');
writeln(' ==|== FFFf ');
writeln(' ==|== Ff orefeathers ');
writeln(' ==|== Ff ');
writeln(' =|= by munk');
writeln(' |');
setupsrl;
SMARTSetupEx(SMARTWORLD, False, True, False);
Wait(5000);
SetTargetDC(SmartGetDC);
repeat
wait(100);
until(SmartGetColor(253, 233)<>1118604);
ScriptID:='362';
if (yourSRLID <> '') then SRLID := yourSRLID;
if (yourSRLPW <> '') then SRLPassword := yourSRLPW;
mousespeed:=20+random(5);
declareplayers;
activateclient;
wait(500);
end;
begin
setupScript;
setBar(4,1,1,1);
login;
repeat
if (not(loggedin)) then login;
if not(players[currentplayer].booleans[0]) then
begin
if loggedIn then
begin
players[currentplayer].integers[2]:=countfeathers;
players[currentplayer].booleans[0]:=true;
end;
end;
for pu:=0 to 4 do if not(pickupfeathers) then break;
if attackchicken then fighting;
if ck<>0 then
begin
nolog;
if ((ck mod 25)=0) then calibrate;
end;
if (ck>200) or (not(attackmode)) then
begin
if loggedIn then
begin
cf:=countFeathers;
if cf>0 then
players[currentplayer].integers[0]:=countfeathers-players[currentplayer].integers[2];
logout;
if ck>200 then
players[currentplayer].loc:='No Chickens'
else
players[currentplayer].loc:='Levels Reached';
end;
end;
if not(loggedIn) then
begin
report;
logout;
nextplayer(false);
login;
end;
if timefrommark(s)>900000 then
begin
cf:=countFeathers;
if cf>0 then
players[currentplayer].integers[0]:=countfeathers-players[currentplayer].integers[2];
report;
logout;
if howManyPlayers=1 then wait(random(60000));
nextplayer(true);
login;
end;
until(false);
end.
{ many pixel animals were harmed in the making of this script. }