SCAR Code:
Program AirCrafter;
{.Include SRL/SRL/Misc/SMART.SCAR}
{.Include SRL/SRL.SCAR}
{.Include SRL/SRL/Reflection/Reflection.SCAR}
Var
I, DTM, Ax, Ay, Bx, By, Switch, Tries, MS, Cx, Cy : Integer;
Path : TPointArray;
ObjectRecord : TAutoColorInfo;
Const
SMARTW = 106; // Smart World To Auto In
DeBug = True; // Write Info
SwitchEvery = 5; // Swich Players After Loads
Version = '1.6'; // Version Number LEAVE ALONE!
YourSRLID = ''; // srl stats id
YourSRLPassword = ''; // srl stats id
Procedure DeclarePlayers;
Begin
CurrentPlayer := 0; // First Player
HowManyPlayers := 2; // How many Players
NumberOfPlayers( HowManyPlayers );
Players[0].Name := 'Strata Gee'; // RuneScape UserName
Players[0].Pass := 'blahblahbla'; // RuneScape PassWord
Players[0].Nick := 'trat'; // 3 To 4 Letters Of UserName Not The First
Players[0].Pin := '0000'; // RuneScape Bank Pin Leave As 0000 If Got None
Players[0].Integers[0] := 10; // loads
Players[0].Active := True; // Use This Player
Players[1].Name := 'Strata Gee'; // RuneScape UserName
Players[1].Pass := 'blahblahbla'; // RuneScape PassWord
Players[1].Nick := 'trat'; // 3 To 4 Letters Of UserName Not The First
Players[1].Pin := '0000'; // RuneScape Bank Pin Leave As 0000 If Got None
Players[1].Integers[0] := 4; // loads
Players[1].Active := True; // Use This Player
End;
Procedure WritelnD(TxT : String);
Begin
If DeBug Then Writeln(' '+TxT);
End;
Procedure RandMS;
Begin
If (RandomRange(0, 2) = 0) Then
Begin
MS := RandomRange(10, 16);
MouseSpeed := MS;
End;
End;
Function ObjRecStuff(Stuff : String; Check : Boolean) : Boolean;
Begin
RandMS;
Case LowerCase(Stuff) Of
'enter' : Begin
With ObjectRecord Do
Begin
UpText := 'nter';
MaxDist := 50;
Color := 9008218;
HueMod := 0.05;
SatMod := 0.77;
LumTol := 10;
MinR := 67; MaxR := 106;
MinG := 90; MaxG := 141;
MinB := 110; MaxB := 171;
MinX := 8.97; MaxX := 22.48;
MinY := 9.84; MaxY := 24.68;
MinZ := 16.44; MaxZ := 41.62;
End;
If Not Check Then
Begin
If FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True) Then
Begin
Mouse(Bx, By, 7, 7, True);
Wait(1000 + Random(500));
FFlag(0);
Result := True;
End;
End;
If Check Then Result := FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True);
End;
'craft' : Begin
With ObjectRecord Do
Begin
UpText := 'raft';
MaxDist := 50;
Color := 5854039;
HueMod := 0.80;
SatMod := 0.38;
LumTol := 2;
MinR := 82; MaxR := 92;
MinG := 78; MaxG := 87;
MinB := 85; MaxB := 94;
MinX := 8.02; MaxX := 9.64;
MinY := 8.08; MaxY := 9.69;
MinZ := 9.92; MaxZ := 11.73;
End;
If Not Check Then
Begin
If FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True) Then
Begin
Mouse(Bx, By, 7, 7, True);
FFlag(0);
Wait(1000 + Random(500));
Result := True;
End;
End;
If Check Then Result := FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True);
End;
'leave' : Begin
With ObjectRecord Do
Begin
UpText := 'se';
MaxDist := 50;
Color := 8697790;
HueMod := 0.11;
SatMod := 0.85;
LumTol := 11;
MinR := 161; MaxR := 215;
MinG := 151; MaxG := 210;
MinB := 108; MaxB := 160;
MinX := 28.87; MaxX := 56.81;
MinY := 31.22; MaxY := 62.42;
MinZ := 18.95; MaxZ := 41.86;
End;
If Not Check Then
Begin
If FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True) Then
Begin
Mouse(Bx, By, 7, 7, True);
FFlag(0);
Wait(1000 + Random(500));
Result := True;
End;
End;
If Check Then Result := FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True);
End;
'bank' : Begin
With ObjectRecord Do
Begin
UpText := 'ank';
MaxDist := 50;
Color := 4351360;
HueMod := 0.09;
SatMod := 1.61;
LumTol := 3;
MinR := 114; MaxR := 135;
MinG := 91; MaxG := 109;
MinB := 60; MaxB := 76;
MinX := 11.80; MaxX := 16.48;
MinY := 11.65; MaxY := 16.32;
MinZ := 6.44; MaxZ := 8.95;
End;
If Not Check Then
Begin
If FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True) Then
Begin
Mouse(Bx, By, 7, 7, False);
Wait(500 + Random(500));
ChooseOption('e-q');
FFlag(0);
Wait(1000 + Random(500));
Result := True;
End;
End;
If Check Then Result := FindObjRecordEx(Bx, By, ObjectRecord, MSX1, MSY1, MSX2, MSY2, True, True);
End;
End;
End;
Procedure CheckRun;
Var
Run : String;
Begin
If (GetMMLevels('run', Run) > 75) Then SetRun(True);
End;
Procedure WalkToAlter;
Begin
Path := [Point(3011, 3356), Point(3008, 3344), Point(3006, 3330),
Point(3002, 3319), Point(2996, 3308), Point(2991, 3300),
Point(2986, 3291)];
CheckRun;
RandMS;
For I := 0 To High(Path) Do
Begin
WalkToTile(Path[I], 1, 0);
FFlag(0);
End;
End;
Procedure WalkToBank;
Begin
Path := [Point(2983, 3288), Point(2991, 3299), Point(2997, 3308),
Point(3003, 3318), Point(3007, 3330), Point(3007, 3342),
Point(3011, 3356)];
CheckRun;
RandMS;
For I := 0 To High(Path) Do
Begin
WalkToTile(Path[I], 1, 0);
FFlag(0);
End;
End;
Function ReturnAirs : Integer;
Begin
Case Players[CurrentPlayer].Integers[4] Of
1..10 : Result := 28;
11..21 : Result := 56;
22..32 : Result := 84;
33..43 : Result := 112;
44..54 : Result := 140;
55..65 : Result := 168;
66..76 : Result := 196;
77..87 : Result := 224;
88..98 : Result := 252;
99 : Result := 280;
End;
End;
Function FindTiara : Boolean;
Begin
If IsItemEquippedAt(0, 5527) Or IsItemEquippedAt(0, 5528) Then
Result := True;
If Result Then WriteLnD('Found Tiara');
End;
Function FindInvOfEss : Boolean;
Begin
If (R_CountItems(1436) = 28) Or (R_CountItems(1437) =28) Then
Result := True;
If Result Then WriteLnD('Found Ess');
End;
Function FindAirs : Boolean;
Begin
DTM := DTMFromString('78DA637464626078CA80029E3C7CC02002A41' +
'981F83F10300600D53C6140038C482490F603AAB94F408D0950CD' +
'23026ACC806ADE1050E30054F38908F7BC26A0C69DB03900A2581' +
'040');
GameTab(4);
Result := FindDTM(DTM, Ax, Ay, MIX1, MIY1, MIX2, MIY2);
FreeDTM(DTM);
If Result Then WriteLnD('Found Airs');
End;
Function WithDrawEss : Boolean;
Begin
If Not R_Loggedin Then Exit;
RandMS;
Repeat
If PinScreen Then InPin(+Players[CurrentPlayer].Pin);
Until(BankScreen);
DepositAll;
Wait(500 + Random(500));
DTM := DTMFromString('78DA63CC60646058C18002C20303194480345' +
'086E13F10309603594B18D000231209A4CB80ACD504D41401591B' +
'09A8C904B2B61050130B64AD27A0269A0837A701598B515524464' +
'5C1FD0E56930B642D4255939B9A8AAA2605C85A87AAC6D1C60655' +
'4D1C6638BB3B39A1AA29C4B4AB2C3717554D12A69AF8880814350' +
'01E1819BC');
If FindDTM(DTM, Ax, Ay, MSX1, MSY1, MSX2, MSY2) Then
Begin
Mouse(Ax, Ay, 5, 5, False);
Wait(500 + Random(250));
ChooseOption('ll');
Wait(1000 + Random(500));
If FindInvOfEss Then
Begin
Repeat
CloseBank;
Until(Not(BankScreen));
Result := True;
Exit;
End;
End;
SearchBank('Rune Essence');
Wait(1000 + Random(500));
Mouse(53, 108, 7, 7, False);
Wait(500 + Random(250));
ChooseOption('ll');
Wait(1000 + Random(500));
If FindInvOfEss Then
Begin
Repeat
CloseBank;
Until(Not(BankScreen));
Result := True;
Exit;
End;
End;
Procedure Randoms;
Begin
FindNormalRandoms;
R_FindRandoms;
End;
Procedure ChangeLoc(What : String);
Begin
Players[CurrentPlayer].Loc := What;
WriteLnD(+What);
End;
Procedure SwitchPlayer(Why : String); Forward;
Function SetupPlayer : Boolean;
Begin
RandMS;
If FindTiara Then Result := True;
R_MakeCompass('0');
SetAngle(True);
End;
Procedure SwitchPlayer(Why : String);
Begin
ChangeLoc(+Why);
Case LowerCase(Why) Of
'done' : Begin
Switch := 0;
NextPlayer(False);
SetAudioOff;
End;
'switch' : Begin
Switch := 0;
NextPlayer(True);
SetAudioOff;
End;
'lost' : Begin
Switch := 0;
NextPlayer(False);
SetAudioOff;
End;
'no tiara' : Begin
WriteLnD('No Tiara');
Switch := 0;
NextPlayer(False);
SetAudioOff;
End;
End;
End;
Procedure AddProgress(What : String);
Begin
Case LowerCase(What) Of
'airs' : Begin
Players[CurrentPlayer].Integers[1] := Players[CurrentPlayer].Integers[1] + ReturnAirs;
ReportVars[0] := ReportVars[0] + ReturnAirs;
End;
'loads' : Begin
Players[CurrentPlayer].Integers[2] := Players[CurrentPlayer].Integers[2] + 1;
ReportVars[2] := ReportVars[2] + 1;
End;
'ess' : Begin
Players[CurrentPlayer].Integers[3] := Players[CurrentPlayer].Integers[3] + 28;
ReportVars[1] := ReportVars[1] + 28;
End;
End;
End;
Function GetPaintBitmap(Color, sX, sY: Integer; Text: TStringArray; Dist: Integer): Integer; // by Jukka
Var
TPA: TPointArray;
H, Q, B: Integer;
Begin
Result := BitmapFromString(sX, sY, '');
For B := 0 To High(Text) Do
Begin
TPA := LoadTextTPA(Text[b], UpChars, H);
Color := Random(16777215);
For Q := 0 To High(TPA) Do
FastSetPixel(Result, TPA[q].x, TPA[q].y + B * Dist, Color);
End;
End;
Procedure ProgressReport;
Var
SCanvas, Canvas, SMARTCanvas : TCanvas;
BMP, Sec, TA, TL, TotalL, TE : Integer;
Text : TStringArray;
Begin
If FindAirs Then
Begin
AddProgress('Airs');
AddProgress('Loads');
AddProgress('Ess');
End;
Inc(Switch);
For I := 0 To HowManyPlayers - 1 Do
Begin
TotalL := TotalL + Players[I].Integers[0];
TA := TA + Players[I].Integers[1];
TL := TL + Players[I].Integers[2];
TE := TE + Players[I].Integers[3];
End;
SRLRandomsReport;
WriteLn('[-------------------------------------------------------------------------------------------------------------]');
WriteLn(Padr('[ AirCrafter By Pur3B100d Version '+Version, 110) + ']');
WriteLn('[-------------------------------------------------------------------------------------------------------------]');
WriteLn(Padr('[ Got '+IntToStr(PlayersActive)+'/'+IntToStr(HowManyPlayers)+' Active Players', 110) + ']');
WriteLn(Padr('[ Ran For '+TimeRunning, 110) + ']');
WriteLn(Padr('[ Done '+IntToStr(TL)+'/'+IntToStr(TotalL)+' Loads', 110) + ']');
WriteLn(Padr('[ Made '+IntToStr(TA)+' Airs', 110) + ']');
WriteLn(Padr('[ Crafted '+IntToStr(TE)+' Ess', 110) + ']');
WriteLn(Padr('[ Gained '+IntToStr(TE * 5)+' Exp', 110) + ']');
WriteLn('[-------------------------------------------------------------------------------------------------------------]');
For I := 0 To HowManyPlayers - 1 Do
Begin
WriteLn(Padr('[ Player : '+IntToStr(I)+'; Active : '+BoolToStr(Players[I].Active)+'; Airs : '+IntToStr(Players[I].Integers[1])+'; Loads : '+IntToStr(Players[I].Integers[2])+'; Ess : '+IntToStr(Players[I].Integers[3])+'; Exp : '+IntToStr(Players[I].Integers[3] * 5)+' Rc LvL : '+IntToStr(Players[I].Integers[4])+'; Loc : '+Players[I].Loc+';', 110) + ']');
End;
WriteLn('[-------------------------------------------------------------------------------------------------------------]');
Sec := GetTimeRunning div 1000+1; // by Jukka Edited By Me
BMP := BitmapFromString(765, 503, '')
SMARTCanvas := GetBitmapCanvas(BMP);
Canvas := GetBitmapCanvas(BMP);
SMARTCanvas.handle := SmartGetDebugDC;
CopyCanvas(Canvas, SMARTCanvas, 0, 0, 765, 503, -1000, -1000, 1000, 1000);
SCanvas := GetBitmapCanvas(BMP);
SCanvas.handle := SmartGetDebugDC;
Text := ['Worked : '+TimeRunning+'.',
'Got : '+IntToStr(PlayersActive)+'/'+IntToStr(HowManyPlayers)+' Active Players.',
'Done : '+IntToStr(TL)+'/'+IntToStr(TotalL)+' Loads.',
'Made : '+IntToStr(TA)+' Air Runes.',
'Crafted : '+IntToStr(TE)+' Essence.',
'Loads Per Hour : '+IntToStr(Round(3600 * TL / Sec))+'.'];
Canvas := GetBitmapCanvas(GetPaintBitmap(255, 765, 503, Text, 25));
CopyCanvas(Canvas, SCanvas, 0, 0, 765, 503, 20, 20, 20 + 765, 20 + 503);
FreeBitmap(BMP); //By Jukka Edited By Me
If Players[CurrentPlayer].Integers[2] >= Players[CurrentPlayer].Integers[0] Then
Begin
SwitchPlayer('Done');
Exit;
End;
If Switch >= SwitchEvery Then
Begin
SwitchPlayer('Switch');
Exit;
End;
End;
Function PortalMessUp : Boolean;
Begin
RandMS;
WriteLnD('Cant Find Portal Trying To Get Back On Track');
For I := 0 To 36 Do
Begin
MakeCompass(+IntToStr(I*10));
If ObjRecStuff('Leave', True) Then
Begin
Result := True;
ObjRecStuff('Leave', False);
MakeCompass('0');
Exit;
End;
End;
If Not Result Then SwitchPlayer('Lost');
End;
Procedure MainLoop;
Var
GotEss : Boolean;
Begin
If Not LoggedIn Then Exit;
Players[CurrentPlayer].Integers[4] := GetSkillInfo('runecrafting', False);
WriteLnD('Rc Lvl : '+IntToStr(Players[CurrentPlayer].Integers[4])+';');
SetupPlayer;
If FindInvOfEss Then GotEss := True;
Repeat
If GotEss Then Break;
ChangeLoc('Banking');
Randoms;
ObjRecStuff('Bank', False);
Inc(Tries);
Until((BankScreen) Or (PinScreen) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
Repeat
If GotEss Then Break;
ChangeLoc('Bank');
Randoms;
WithDrawEss;
Inc(Tries);
Until((InvFull) Or (Tries >= 5));
GotEss := False;
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
Repeat
ChangeLoc('Walking To Alter');
Randoms;
WalkToAlter;
Inc(Tries);
Wait(500 + Random(500));
Until((ObjRecStuff('Enter', True)) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
Repeat
ChangeLoc('Entering Alter');
Randoms;
ObjRecStuff('Enter', False);
Inc(Tries);
Wait(500 + Random(500));
Until((ObjRecStuff('Craft', True)) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
Repeat
ChangeLoc('Crafting Runes');
Randoms;
ObjRecStuff('Craft', False);
Inc(Tries);
Wait(500 + Random(500));
Until((FindAirs) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
Repeat
ChangeLoc('Leaving Alter');
Randoms;
ObjRecStuff('Leave', False);
Inc(Tries);
Wait(1000 + Random(500));
Until(ObjRecStuff('Enter', True) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then PortalMessUp;
DecEx(Tries, Tries);
Repeat
ChangeLoc('Walking To Bank');
Randoms;
WalkToBank;
Inc(Tries);
Wait(500 + Random(500));
Until(ObjRecStuff('Bank', True) Or (Tries >= 5));
WriteLnD(+IntToStr(Tries));
If Tries >= 5 Then SwitchPlayer('Lost');
DecEx(Tries, Tries);
ChangeLoc('Bank');
ProgressReport;
End;
Begin
SetupSRL;
If (YourSRLID = '') Or (YourSRLPassword = '') Then
WriteLnD('You Have No SRL Stats');
SRLID := YourSRLID;
SRLPassword := YourSRLPassword;
ScriptID := '1007';
ClearDebug;
SmartSetupEX(SMARTW, False, False, False);
SetTargetDC(SmartGetDC);
SRLRandomsReport;
DeclarePlayers;
WriteLnD( IntToStr ( HowManyPlayers ) + ' Player[s]' );
While Not RsReady Do Wait(5000);
LoginScreenMusic(True);
Login_SetAudio(1, 1, 1, NoChange);
LoginPlayer;
Wait(2000+Random(1000));
While FindColor(Cx, Cy, 0, MIX1, MIY1, MIX2, MIY2) Do Wait(2500 + Random(500));
SetAudioOff;
Repeat
If AllPlayersInActive Then
Begin
ClearDebug;
ProgressReport;
TerminateScript;
End;
MainLoop;
Until(AllPlayersInactive);
ClearDebug;
ProgressReport;
TerminateScript;
End.