Simba Code:
program EnslavedAIOFletcher;
{$DEFINE SMART}
{$i srl/srl.simba}
var
Fletched, Counter: integer;
//Break variables
wb,xb,yb,zb,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;
const
{****************************************************************************************}
{========================================List of DTMs====================================}
{****************************************************************************************}
//DTMs-logs
Normal = 'mggAAAHicY2NgYDADYgcgdgRiTSg2BeJXQPwIiN8B8QcgfgrEH4E4wVMbSDJhwdgBIw4MAQDRHQep';
Oak = 'mggAAAHicY2NgYDADYgcgdgRiTSg2BeJXQPwIiN8B8QcgfgrEH4G4PAoky4QFYweMODAEAADgNAfb';
Maple = 'mggAAAHicY2NgYOAFYh4GBJAAYnEg5gBifiBmBmI+JDV+xtxAkgkLxg4YcWAIAABj1QEf';
Yew = 'mlwAAAHicY2dgYNgFxIeB+AQQ7wfizUC8GojXAvELIH4MxC+B+D0Qf4bST4HYXo8TSDLhwLgBIx4MBQCNXQwK';
Magic = 'mlwAAAHicY2dgYNgFxIeB+AQQ7wfizUC8GojXAvELIH4MxC+B+D0Qf4bST4E4JsQESDLhwLgBIx4MBQCz+wx4';
//DTM-LONGBOWS (U)
NormalLongU = 'mggAAAHicY2NgYBBlZGCQAWJpIBYCYj4o+zlQ7iMQvwTiB1D8hgEEmDBwoZcAAy7AiANDAABn2gbc';
OakLongU = 'mggAAAHicY2NgYBBlZGCQAWJpIBYCYj4o+zlQ7iMQvwTiB1D8hgEEmDBwoAMPAy7AiANDAABdgAau';
MapleLongU = 'mggAAAHicY2NgYBBlZGCQAWJpIBYCYj4o+zlQ7iMQvwTiB1D8hgEEmDBwQ3E+Ay7AiANDAACJKQdz';
YewLongU = 'mggAAAHicY2NgYBBlZGCQAWJpIBYCYj4o+zlQ7iMQvwTiB1D8hgEEmDBwbpwAAy7AiANDAABrZgbs';
MagicLongU = 'mggAAAHicY2NgYBBlZGCQAWJpIBYCYj4o+zlQ7iMQvwTiB1D8hgEEmDCwXEIEAy7AiANDAABpsgbn';
//DTM-ShortBOWS (U)
NormalShortU = 'mlwAAAHicY2dgYJjOyMAwG4jnAfFUIO4G4glAPBeInwHlHwDxEyB+DcTvgPgVED9mAAEmrNhdn4sBH2DEg6EAAPzzCw8=';
OakShortU = 'mlwAAAHicY2dgYJjOyMAwG4jnAfFUIO4E4glAPBeInwHlHwDxEyB+DcRvgPgVED9mAAEmrDgtiJ8BH2DEg6EAAA2WC1I=';
MapleShortU = 'mlwAAAHicY2dgYJjOyMAwG4jnAfFUIO4E4glAPBeInwHlHwDxEyB+DcRvgPgVED9mAAEmrDgmOIABH2DEg6EAABu7C4o=';
YewShortU = 'mlwAAAHicY2dgYJjOyMAwG4jnAfFUIO4E4glAPBeInwHlHwDxEyB+DcRvgPgVED9mAAEmrDghmI8BH2DEg6EAAAwFC0w=';
MagicShortU = 'mlwAAAHicY2dgYJjOyMAwG4jnAfFUIO4E4glAPBeInwHlHwDxEyB+DcRvgPgVED9mAAEmrFjM3ZEBH2DEg6EAAAKCCyk=';
//DTM-LONGBOWS
NormalLong = 'mlwAAAHicY2dgYLBjZGCwBmJnIHYDYk8gtoGynwDlHwDxSyB+DsTvofQrBhBgwooT7PkY8AFGPBgKANDvCPA=';
OakLong = 'mlwAAAHicY2dgYLBjZGCwBmJnIHYDYk8gtoGynwDlHwDxSyB+DsTvofQrBhBgwoqbMoQZ8AFGPBgKAOWsCUA=';
MapleLong = 'mlwAAAHicY2dgYLBjZGCwBmJnIHYDYk8gtoGynwDlHwDxSyB+DsTvofQrBhBgwop9XJwY8AFGPBgKANoxCRU=';
YewLong = 'mlwAAAHicY2dgYLBjZGCwBmJnIHYDYk8gtoGynwDlHwDxSyB+DsTvofQrBhBgwoprsoUY8AFGPBgKAOSfCTw=';
MagicLong = 'mlwAAAHicY2dgYLBjZGCwBmJnIHYDYk8gtoGynwDlHwDxSyB+DsTvofQrBhBgwopl48IY8AFGPBgKANmsCRQ';
//DTM-ShortBOWS
NormalShort = 'mlwAAAHicY2dgYMhiZGAoAuIMII4H4iRGiFghED8Hyj8B4jdA/A6InwHxAyhmYGDCioPNeRjwAUY8GAoAWe8J4w==';
OakShort = 'mlwAAAHicY2dgYMhiZGAoAuIMII4H4iRGiFghED8Hyj8B4jdA/A6InwHxAyhmYGDCilMC+BnwAUY8GAoAZZcKEA==';
MapleShort = 'mlwAAAHicY2dgYMhiZGAoAuIMII4H4iRGiFghED8Hyj8B4jdA/A6InwHxAyhmYGDCilOiwhnwAUY8GAoAenMKYg==';
YewShort = 'mlwAAAHicY2dgYMhiZGAoAuIMII4H4iRGiFghED8Hyj8B4jdA/A6InwHxAyhmYGDCijOj+BnwAUY8GAoAaXoKHw==';
MagicShort = 'mlwAAAHicY2dgYMhiZGAoAuIMII4H4iRGiFghED8Hyj8B4jdA/A6InwHxAyhmYGDCikXsrRjwAUY8GAoAVzAJ2g==';
//DTM-OTHER
BowString = 'mwQAAAHic42RgYNjPyMCwGYiPA/E5IN4HxIeB+CQQ74Sy9wLVbQfiPUB8CIiPA/ERKBskDpJnYGDCi2OC7RiIAYxEYDgAAJD1Dpk=';
Knife = 'mbQAAAHicY2VgYPgHxEyMDAycQMwMxN+B/BtA+hwQHwfiE0D8FIjd9LgYEmNjQaqRMCZgxILBAABnvAfP';
//MIS
MIX3 = 600;
MIY3 = 300;
//Debug
Debug = True;
// Start Defining settings here
WatBankTab = 9;
Action = 'Fletch'; //Choose between String / Fletch
LogType = maple; //Copy the dtm from DTMs-logs
BowTypeU = MapleLongU; //Copy the dtm from DTM-LONGBOWS (U) or DTM-ShortBOWS (U)
OutputType = MapleLong; //Copy the DTM of the ENd Product
ItemXP = 58;
{================================Break settings============================================}
Breaking = False ; //Are we going to take Breaks ( True / False )
SwitchWorlds = True; //Are we going to Hop worlds after breaks? ( True / False )
BreakIn = 140; //How long before we take a break? (minutes)
BreakFor = 30; //How long will we break for? (minutes)
Bir = 15; //Random minutes to add/subtract from how long until we break
Bfr = 15; //Random minutes to add/subjtract from break duraction
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := ''';
Players[0].Pass := '';
Players[0].Pin := ''';
Players[0].Active := True;
end;
procedure AntiBan();
begin
if(not(LoggedIn))then Exit;
FindNormalRandoms;
//If Debug then Writeln('AntiBan');
case (Random(1000)) of
0 : MMouse(RandomRange(MSX1,MSX2),RandomRange(MSY1,MSY2),4,4);
1 : HoverSkill('random', False);
2..3 : ExamineInv;
4 : begin HoverSkill('Fletching', False); Wait(RandomRange(2000, 4000)); end;
5 : begin PickUpMouse; SleepAndMoveMouse(1500 + Random(500)); end;
6 : begin GameTab(tab_Stats); Wait(1500 + Random(500)); GameTab(tab_Inv); end;
7 .. 50 : begin BoredHuman; SetAngle(SRL_ANGLE_HIGH); end;
51 : Wait(RandomRange(750, 2000));
end;
end;
procedure WaitFinnish;
var
x, y,StringDTM, LogDTM: integer;
begin
If (Action='Fletch')then
Begin
LogDTM := DTMFromString(Logtype);
wait(randomrange(1000, 2000));
Marktime(Counter);
while Existsitemdtm(LogDTM, x, y) do
begin
case random(100) of
1..9: Sleepandmovemouse(Randomrange(500, 1000));
10..15: Antiban;
end;
if timefrommark(Counter) > 60000 then
begin
FreeDTM(logDTM);
Exit;
end;
end;
FreeDTM(LogDTM);
end else
begin
StringDTM := DTMFromString(BowString);
wait(randomrange(1000, 2000));
Marktime(Counter);
while Existsitemdtm(StringDTM, x, y) do
begin
case random(100) of
1..9: Sleepandmovemouse(Randomrange(500, 1000));
10..15: Antiban;
end;
if timefrommark(Counter) > 30000 then
begin
FreeDTM(StringDTM);
Exit;
end;
end;
FreeDTM(StringDTM);
end;
end;
function WaitFindDTMBank(DTM: integer; var x, y: integer; MaxTime: integer): boolean;
var
t: integer;
begin
MarkTime(t)
while (t < MaxTime) do
begin
if (findDTM(DTM, x, y, MBX1, MBY1,MBX2,MBY2)) then
begin
result := true;
exit;
end;
end;
end;
function WaitDTMOptions(DTM: integer; var x, y: integer; MaxTime: integer): boolean;
var
t: integer;
begin
MarkTime(t)
while (t < MaxTime) do
begin
if (findDTM(DTM, x, y, MCX1, MCY1,MCX2,MCY2)) then
begin
IF Debug then WriteLn('Option Found');
result := true;
exit;
end;
end;
end;
Function ChooseOptionDTM(DTM:Integer) : boolean;
var
x,y:integer ;
begin
if WaitDTMOptions(DTM,x,y,300) then
begin
MMouse(x,y,7,7);
ClickMouse2(true);
IF Debug then WriteLn('Option Chosen');
result := true;
end;
end;
function WithdrawXYEx(Xa, Ya, Amount: Integer; Uptexts: TStringArray): Boolean;
var
BBox: TBox;
X, Y: Integer;
begin
Result := False;
FixBank;
BBox := IntToBox(Xa-3,Ya-3,Xa+3,Ya+3);
GetMousePos(X, Y);
if (not PointInBox(Point(X, Y), BBox)) then
MouseBox(BBox.X1 + 5, BBox.Y1 + 5, BBox.X2 - 5, BBox.Y2 - 5, mouse_move);
if (Length(Uptexts) > 0) then
if (not WaitUptextMulti(Uptexts, 500)) then
Exit;
if (Amount = 1) then
ClickMouse2(mouse_left)
else
ClickMouse2(mouse_right);
if (Amount = 1) then
begin
Result := True;
Wait(RandomRange(250, 550));
Exit;
end;
if (Amount = -1) then
begin
if (WaitOptionMultiEx(['Withdraw-All but', 'l b'], 'All', Nothing, 300)) then
Result := ChooseOptionMulti(['Withdraw-All but', 'l b']);
end else
if (Amount = 0) then
begin
if (WaitOptionMultiEx(['Withdraw-All', 'w-A'], 'All', Nothing, 300)) then
Result := ChooseOptionMulti(['Withdraw-All', 'w-A']);
end else
if (WaitOptionMultiEx(['Withdraw-' + IntToStr(Amount), 'w-' + IntToStr(Amount)], 'All', Nothing, 300)) then
Result := ChooseOptionMulti(['Withdraw-' + IntToStr(Amount), 'w-' + IntToStr(Amount)]);
if (not (Result)) and (Amount > 0) then
begin
if (not OptionsExist(['Withdraw', 'ithdraw', 'draw'], nothing)) then
MouseBox(BBox.X1 + 5, BBox.Y1 + 5, BBox.X2 - 5, BBox.Y2 - 5, mouse_right);
if WaitOptionMulti(['Withdraw-X', 'w-X'], 500) then
begin
X := GetSystemTime + 10000;
while (X >= GetSystemTime) and (not (InRange(CountColor(0, 250, 396, 307, 410), 155, 165))) do
Wait(50);
Wait(RandomRange(75, 400));
TypeSend(IntToStr(Amount));
Result := True;
end;
end;
end;
function WithdrawXY(X, Y, Amount: Integer): Boolean;
begin
Result := WithdrawEx(X, Y, Amount,[]);
IF Debug then WriteLn('Withdrew ' + inttostr(amount)+'at: x'+ inttostr(x)+'; y:'+inttostr(y));
end;
{*******************************************************************************
Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
His Breaking system
By: Flight
*******************************************************************************}
Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s,timeleft: integer;
begin
if not LoggedIn then Exit;
if (HowManyPlayers = 1) then
begin
timeleft:=(wb) + (yb) - GetTimeRunning ;
ConvertTIME(Timeleft,H,M,S);
Writeln('Time Until Break: '+IntToStr(h)+' Hours, '+Inttostr(m)+' Minutes and '+ IntToStr(s)+' Seconds');
if (GetTimeRunning < ((wb) + (yb) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((wb) + (yb) + BreakRounds)) then
begin
RealBTime := ((xb+zb)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((xb+zb)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(xb+zb));
Writeln('Logging in.');
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (wb) + (xb));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
wb := (BreakIn * 60000);
xb := (BreakFor * 60000);
yb := RandomRange(-Bir * 60000, Bir * 60000);
zb := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
procedure Fletch;
Var
KnifeDTM,BowDTM:Integer;
begin
wait(randomrange(200, 300));
Invmouse(1, 3);
IF Debug then WriteLn('mouse moved to 1stinv slot');
if Isuptext('Craft') then
begin
wait(randomrange(900, 1100));
KnifeDTM := DTMFromString(Knife);
ChooseOptionDTM(KnifeDTM);
FreeDTM(KnifeDTM);
BowDTM := DTMFromString(OutputType);
ChooseOptionDTM(BowDTM);
FreeDTM(BowDTM);
end;
end;
Procedure StringBows;
var
x,y,BowDTM,StringDTM,DoneDTM:integer;
Begin
wait(randomrange(200, 300));
BowDTM := DTMFromString(BowTypeU);
If ExistsItemDTM(BowDTM,x,y) then
Begin
FreeDTM(BowDTM);
MMouse(x,y,7,7);
wait(200);
if Isuptext('Use') then
ClickMouse2(True);
StringDTM := DTMFromString(BowString);
If ExistsItemDTM(StringDTM,x,y) then
Begin
FreeDTM(StringDTM);
MMouse(x,y,7,7);
wait(200);
ClickMouse2(True);
end;
End else
begin
FreeDTM(BowDTM);
end;
DoneDTM := DtmFromString(OutputType);
ChooseOptionDTM(DoneDTM);
FreeDTM(DoneDTM);
End;
procedure Bank;
var
x,y,chestDTM,failcount:Integer;
aFound: Extended;
begin
ChestDTM := DTMFromString('mQwAAAHicY2ZgYOBkZmDgBWJhIFZmZGBQAmI5IM6MDWDITw5luHHuHAMHUB0MMyJhIAAAu7wFaA==');
while not (bankscreen) and not (pinscreen) do
begin
Writeln('Time To Bank');
if(finddtmrotated(ChestDTM,x,y,MSX1,MSY1,MSX2,MSY2,-Pi, Pi, Pi/30, aFound))then
begin
//WriteLn('x:'+inttostr(x));
//WriteLn('y:'+inttostr(y));
mmouse(x,y,10,10);
if(WaitUpText('hest',1000))then
Clickmouse2(True);
end else
begin
ClickNorth(SRL_ANGLE_HIGH);
Case (random(4)) of
1:MakeCompass('E');
2:MakeCompass('N');
3:MakeCompass('S');
4:MakeCompass('W');
End;
inc(failcount);
end;
if failcount>3 then
terminatescript;
end;
freeDTM(ChestDtm);
repeat
if (PinScreen) then
(InPin(Players[0].Pin));
until (BankScreen);
wait(randomrange(400, 800));
Quickdeposit(SRL_DEPOSIT_ALL);
IF (CurrentBankTab<>Watbanktab)then
Banktab(Watbanktab);
end;
Procedure WithdrawFletch;
var
x,y,LogDTM:Integer;
Begin
LogDtm := DTMFromString(LogType);
IF Debug then WriteLn('Withdraw log DTM Loaded');
IF Debug then WriteLn(logtype);
If WaitFindDTMBank(LogDTM,x,y,3000) then
begin
IF Debug then WriteLn('Log DTM found');
FreeDTM(LogDTM);
WithdrawXY(x,y,0);
Closebank;
wait(randomrange(400, 600));
end;
FreeDTM(LogDTM);
Fletched := Fletched +28 ;
end;
Procedure Withdrawstring;
var
x,y,BowDTM,StringDTM:Integer;
Begin
BowDtm := DTMFromString(BowTypeU);
IF Debug then WriteLn('Bank DTM Load');
If WaitFindDTMBank(BowDtm,x,y,3000) then
begin
IF Debug then WriteLn('BowDTM Found');
FreeDTM(BowDtm);
WithdrawXY(x,y,14);
StringDTM := DTMFromString(BowString);
If WaitFindDTMBank(StringDTM,x,y,3000) then
begin
IF Debug then WriteLn('String DTM Found');
FreeDTM(StringDTM);
WithdrawXY(x,y,14);
end;
wait(randomrange(400, 600));
end;
Closebank;
IF Debug then WriteLn('Freeing DTMs');
FreeDTM(StringDTM);
FreeDTM(BowDTM);
Fletched := Fletched +14;
end;
Function SkillStarted:boolean;
var
x,y,ItemDTM,t : Integer;
begin
Marktime(t);
IF Debug then WriteLn('Checking Started');
IF Debug then WriteLn(OutputType);
ItemDTM := DTMFromString(OutputType);
While (timefrommark(t)<5000) do
begin
if (FindDTM(ItemDTM,x,y,MIX1,MIY1,MIX3,MIY3)) then
begin
IF Debug then WriteLn('Started');
freeDTM(ItemDTM);
Result := True;
Exit;
end;
freeDTM(ItemDTM);
Result := False;
end;
End;
Procedure InvCheck;
var
Failcount:integer;
begin
IF Debug then WriteLn('checking Inv');
while (Invcount < 28) and (Failcount < 3) Do
begin
Bank;
Case Action of
'String': WithdrawString;
'Fletch': WithdrawFletch;
end
inc(failcount);
end;
If (Failcount >= 3) then
terminatescript;
End;
procedure Proggy;
var
xp: integer;
begin
XP := Round(Fletched * ItemXP);
Writeln('********************************');
Writeln('AIO Fletcher by EnSlaved ');
Writeln('Time running = ' + (timerunning));
Writeln('Items Done = ' + IntToStr(fletched));
Writeln('EXP Earned = ' + IntToStr(XP));
Writeln('Post Feedback and Proggies On Forum Thread Please!');
Writeln('********************************');
end;
Procedure DoString;
var
failed:integer;
Begin
repeat
Bank;
WithdrawString;
StringBows;
if SkillStarted then
begin
Failed:= 0;
WaitFinnish;
Proggy;
if breaking then BreakHandler(BreakIn,BreakFor,Bir,Bfr);
end else
begin
inc(Failed)
if (failed>3) then
TerminateScript;
end;
until (AllPlayersInactive);
End;
Procedure DoFletch;
var
failed:integer;
Begin
repeat
Bank;
WithdrawFletch;
Fletch;
if SkillStarted then
begin
Failed:= 0;
WaitFinnish;
Proggy;
if breaking then BreakHandler(BreakIn,BreakFor,Bir,Bfr);
end else
begin
inc(Failed)
if (failed>3) then
TerminateScript;
end;
until (AllPlayersInactive);
End;
begin
{$IFDef Smart}
SRL_SixHourFix:= True;
Smart_FixSpeed:= True;
{$ENDIF}
SetupSRL;
Declareplayers;
Loginplayer;
MakeCompass('E');
SetAngle(0);
ExitSquealOfFortune;
Case Action of
'String': DoString;
'Fletch': DoFletch;
end;
end.