ok, this is a good script for your first.. i do have a few tips for you though
(also i cant test it because im not a member)
1. your login procedure, just use the SRL login
{*******************************************************************************
procedure LoginPlayer;
By: WT-Fakawi and modified by Ron
Description: Logs Player[CurrentPlayer] in. Is usually preceeded by NextPlayer.
*******************************************************************************}
// * Still to implement, but have never encountered any of these:
// * Login limit exceeded.
// * Too many connections from your address."
// * Bad session id.
// * Could not complete login.
// * Please try using a different world.
// * Invalid login server requested
// * Malformed login packet.
// * Unexpected server response
procedure LoginPlayer;
var
ClickHereToPlay, tx, ty, CHx, CHy, c, tmpMask, LastPlayer: Integer;
begin
ClickHereToPlay := BitmapFromString(33, 1, 'z78DA758E510E80300843' +
'AF54C0E2F6E94CB8FF9134123392693FFA41FA4A23A6F0888443D' +
'26DC000A7DCE7F458F23EE444E721444B6A0F53D58FE44F4365B7' +
'067D37AC3D95AADF2F50962C79');
if (not (LoggedIn)) then
begin
// Beginning player not active...
if (not (Players[CurrentPlayer].Active)) then
begin
WriteLn('Current player is not Active...');
LastPlayer := CurrentPlayer;
repeat
CurrentPlayer := Random(HowManyPlayers);
Wait(100);
until (Players[CurrentPlayer].Active);
LoginPlayer;
FreeBitmap(ClickHereToPlay);
Exit;
end;
x := 150;
y := 173;
if (FindClient) then
FindWindowBySize(766, 504);
ActivateClient;
Wait(1000);
ClickOption('Cancel', 1);
ClickOption('Exist', 1);
tmpMask := CreateBitmapMaskFromText('Username', upchars);
if (FindBitmapMaskTolerance(tmpMask, x, y, 0, 0, 520, 340, 10, 50)) then
begin
Wait(25 + Random(50));
Mouse(x + 24, y + 3, 3, 0, True);
Wait(25 + Random(50));
//SendKeysSilent(Players[CurrentPlayer].Name + chr(13) + Players[CurrentPlayer].Pass)
WriteLn(Players[CurrentPlayer].Name);
TypeSend(Players[CurrentPlayer].Name);
Wait(100 + Random(100));
Mouse(327, 272, 0, 0, True);
TypeSend(Players[CurrentPlayer].Pass);
Wait(100 + Random(100));
end;
ClickOption('Login', 1);
// Waiting for Connecting to Server...
MarkTime(Mark);
while FindText(tx, ty, '...', upchars, 240, 180, 530, 240) do
begin
Wait(100);
if TimeFromMark(Mark) > 20000 then Break;
end;
MarkTime(Mark);
repeat
Wait(1000);
// Enter your username and password. If all failed...
if FindText(tx, ty, 'nter you', upchars, 240, 180, 530, 240) then
begin
WriteLn('Enter your username and Password');
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Your account is already logged in.
if FindText(tx, ty, 'lready', upchars, 240, 180, 530, 240) then
begin
WriteLn('Your account is already logged in');
LastPlayer := CurrentPlayer;
repeat
CurrentPlayer := Random(HowManyPlayers);
Wait(100);
until (Players[CurrentPlayer].Active) and (CurrentPlayer <> LastPlayer);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Invalid Username. 3 attempts. If fails, you haven't set your username/pass correct
if FindText(tx, ty, 'nvalid', upchars, 240, 180, 530, 240) then
begin
WriteLn('Invalid Username.');
SRL_Attempts := SRL_Attempts + 1;
if SRL_Attempts > 3 then
begin
Players[CurrentPlayer].loc := 'L/P ERROR';
NextPlayer(False);
end;
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Login attempts exceeded. Please wait 1 minute and try again.
if FindText(tx, ty, 'excee', upchars, 240, 180, 530, 240) then
begin
WriteLn('Login attempts exceeded. Please wait 1 minute and try again.');
Wait(60000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// World is full.
if FindText(tx, ty, 'full', upchars, 240, 180, 530, 240) then
begin
WriteLn('World is full.');
Wait(3000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Unable to connect. Login Server offline.
if FindText(tx, ty, 'offl', upchars, 240, 180, 530, 240) then
begin
WriteLn('Unable to connect Login Server offline.');
Wait((6000) + Random(6000));
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Error Connecting.
if FindText(tx, ty, 'rror', upchars, 240, 180, 530, 240) then
begin
WriteLn('Error Connecting.');
Wait(10000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Error loading your profile. Will attempt to re-login 5 more times.)
if FindText(tx, ty, 'ontact', upchars, 240, 180, 530, 240) then
begin
WriteLn('Error loading your profile.');
Wait(2000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Login server rejected session.
if FindText(tx, ty, 'reject', upchars, 240, 180, 530, 240) then
begin
WriteLn('Login server rejected session.');
Wait(1000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Runescape has been updated.
if FindText(tx, ty, 'reload', upchars, 240, 180, 530, 240) then
begin
WriteLn('ERROR. RuneScape has been updated. Script Terminated.');
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
TerminateScript;
end;
// The Server is being updated. Please wait 1 minute.
if FindText(tx, ty, 'updat', upchars, 240, 180, 530, 240) then
begin
WriteLn('The Server is being updated.');
Wait(60000);
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Your account has been disabled.
if FindText(tx, ty, 'disabled', upchars, 420, 180, 500, 220) then
begin
WriteLn('Your account has been disabled');
Players[CurrentPlayer].loc := 'DISABLED';
NextPlayer(False);
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end else
// Waiting for Profile to be Transferred
if FindText(tx, ty, 'trans', upchars, 240, 180, 530, 240) then
begin
WriteLn('Waiting for your Profile to be Transferred');
Wait(2500);
end else
// You need a Members account...
if FindText(tx, ty, 'member', upchars, 240, 180, 530, 240) then
begin
WriteLn('You need a Members account...');
Players[CurrentPlayer].loc := 'Non-Member';
NextPlayer(False);
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
end else
// Welcome to RuneScape. If all failed...
if FindText(tx, ty, 'elcom', upchars, 240, 180, 530, 240) then
begin
WriteLn('Welcome.');
LoginPlayer;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
Exit;
end;
if TimeFromMark(Mark) > 180000 then
begin
WriteLn('three minutes have passed');
WriteFileString(TheFile, Chr(13) + 'THREE MINUTES HAVE PASSED!!!' +
Chr(13));
if (FindClient) then
FindWindowBySize(766, 504);
ActivateClient;
ClickOption('Cancel', 1);
ClickOption('Exist', 1);
end;
until (FindBitmapToleranceIn(ClickHereToPlay, CHx, CHy, 250, 270, 530, 390,
5)) or FindColor(CHx, CHy, 723587, 555, 10, 575, 30);
Wait(1000 + Random(500));
if (FindBitmapToleranceIn(ClickHereToPlay, CHx, CHy, 250, 270, 530, 390, 5)) then
Mouse(CHx, CHy, 50, 20, True) else Writeln('Found Compass'); // Clicks randomly on the button
repeat
Wait(1000);
c := c + 1;
until (LoggedIn) or (c >= 600);
end;
FreeBitmap(tmpMask);
FreeBitmap(ClickHereToPlay);
if LoggedIn then
begin
PlayerStartTime := (GetSystemTime div 1000); // PlayerStartTime
if NickNameBMP <> 0 then
FreeBitmap(NickNameBMP);
NickNameBMP := CreateBitmapMaskFromText(Players[CurrentPlayer].Nick,
upchars); // Screenname
WriteFileString(TheFile, Chr(13) + UpperCase(Players[CurrentPlayer].Name) +
Chr(13)); //* Save NAME to file
end;
end;
it will probably work better in the long run
2. always explain what your constants mean… use somthing like this
Const
user=''; //your username
pass=''; //your password
TimesToSteal=5; //how many times you want to steal from the chest
AntiBanAmount=30; //the lower the number the more times it will do an antiban procedure
3. your antiiban.. for how your script is set up now, it works great. but, once you get into leting in run for long periods of time.. (1 hour plus) you need to add some things
after this i think you want to add a gametab(4);
0: begin
HoverSkill('Random', false);
wait(500+Random(75));
end;
your talking will need some more things to say.. because if it runs for a long time it will eventually say the same thing twise.. which will do the opposit of what it is supposed to. of coarse you could do somthing like this:
4: begin
case random(10) of
0: if (ty0 = 0) then
begin
TypeSend('This is boring');
ty0 := ty0+1
end;
1: if (ty1 = 0) then
begin
TypeSend('I wish people came here');
ty1 := ty1+1
end;
2: if (ty2 = 0) then
begin
TypeSend('lalalalala');
ty2 := ty2+1
end;
3: if (ty3 = 0) then
begin
TypeSend('burp');
ty3 := ty3+1
end;
4: if (ty4 = 0) then
begin
TypeSend('i gotta pee');
ty4 := ty4+1
end;
5: if (ty5 = 0) then
begin
TypeSend('wonder why no one ever comes here');
ty5 := ty5+1
end;
6: if (ty6 = 0) then
begin
TypeSend('Doh re me fa sol la ti doh!');
ty6 := ty6+1
end;
7: if (ty7 = 0) then
begin
TypeSend('Doh ti la sol fa me re doh!');
ty7 := ty7+1
end;
8: if (ty8 = 0) then
begin
TypeSend('soooooo bored!');
ty8 := ty8+1
end;
9: if (ty9 = 0) then
begin
TypeSend('why would anyone waste their time theiving!');
ty9 := ty9+1
end;
end;
end;
it will make sure that if it uses that particular sentence, it wont again. but you should still add more.. oh and make sure you have this somewhere
var
ty0,ty1,ty2,ty3,ty4,ty5,ty6,ty7,ty8,ty9: integer;
if you are going to use the changing compass in your antiban, you need to have one for each direction… or even better a procedure that holds one of the arrows down for a random amount of time, then re-alines(sp?) it to north
4. in your FindTheChest; procedure.. in stead of using istextup use istextupmulti because it is more reliable.
{*******************************************************************************
function IsUpTextMulti(UT1, UT2, UT3: String): Boolean;
By: WT-Fakawi
Description: Returns any of three UpText that might be to the right
Usefull when text is partially masked.
Use: IsUpTextMulti('Attack','tta','ack')
*******************************************************************************}
function IsUpTextMulti(UT1, UT2, UT3: string): Boolean;
var
tempx, tempy, I: Integer;
var
TheText: string;
begin
for I := 1 to 3 do
begin
case I of
1: TheText := UT1;
2: TheText := UT2;
3: TheText := UT3;
end;
if IsTextInAreaEx(7, 7, 334, 20, tempx, tempy, TheText, 100, upchars, True,
True, 0, 2, -1) then
Result := True;
end;
end;
your script was good though, these are just some things to change to improve it. also, you could later convert it to use multiple players