Results 1 to 3 of 3

Thread: login.simba error/ help please

  1. #1
    Join Date
    Mar 2013
    Posts
    15
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default login.simba error/ help please

    Hi
    I have replaced the login.simba and globals.simba scripts as was suggested in other posts. Updating simba fixed an error with the globals script. changing some lines of code in the smart script fixed the smart script. Now I have errors with the login script.
    Code:
    [Error] C:\Simba\Includes\SRL/SRL/core/login.simba(167:30): Unknown identifier 'SRL_OPTIONS_BITMAP' at line 166
    This is the login scrpit:
    Code:
    (*
    Login
    =====
    
    The Login include contains all the functions to succesfully log you in and out
    of the game and/or the lobby.
    
    .. contents::
    
    *)
    
    
    const
      SM_Color = 8115338;
    
    { var SRL_Logs: Integer;
      var RandomPlayer, GraphicsSet: Boolean;
      Description: Variables needed for some login functions. }
    var
      SRL_Logs: Integer;
      RandomPlayer, GraphicsSet, AllowPVP: Boolean;
    
    procedure NextPlayer(Active: Boolean); forward;
    procedure RandomNextPlayer(Active: Boolean); forward;
    
    const
      UBx1 = 279; // Username tBox - in use now
      UBy1 = 180;
      UBx2 = 486;
      UBy2 = 190;
    
      PBx1 = 279; // Password tBox - in use now
      PBy1 = 225;
      PBx2 = 486;
      PBy2 = 240;
    
      GBx1 = 230; // greeting box in final screen
      GBy1 = 330;
      GBx2 = 660;
      GBy2 = 400;
    
      WDx1 = 88;  // window box (to enter game) "click here to play"
      WDy1 = 450;
      WDx2 = 545;
      WDy2 = 473;
    
      WHITE_TEXT    = 16777215; // white text color
      MESSAGE_BOX   = 11452366; // The "helpful message" box color
      INFO_BOX      = 7428416; // Blue information box color
      LOGIN_COLOR   = 6865381; // Login button color
      ERROR_BOX     = 2044518; // Error box (comes up on incorrect pw/un or banned acc
    
    const                       //GetScreen
      LOGIN_TA_X1 = 210;        //Text check area
      LOGIN_TA_Y1 = 54;
      LOGIN_TA_X2 = 556;
      LOGIN_TA_Y2 = 228;
    
      LOGIN_TEXTCOLOUR = 12378347; //Colour of text
    
    
    
    (*
    LobbyScreen
    ~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function LobbyScreen: Boolean;
    
    Returns true if we are at the Lobby Screen
    
    .. note::
    
        by IceFire908 & Bionicle1800
    
    Example:
    
    .. code-block:: pascal
    
        // wait for the Lobby Screen to appear!
        while (not LobbyScreen) do
          Wait(100 + Random(400));
    
    *)
    function LobbyScreen: Boolean;
    begin
      Result := InRange(GetLobbyTab, L_PlayerInfo, L_Options);
    end;
    
    (*
    TakeIPScreen
    ~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure TakeIPScreen();
    
    Saves a screenshot of the last logged in IP address to the SRL logs folder.
    
    .. note::
    
        by Harry & Coh3n
    
    Example:
    
    .. code-block:: pascal
    
        TakeIPScreen();
    *)
    procedure TakeIPScreen();
    var
      tmpPath: string;
    begin
      if ((not lobbyScreen()) or (SRL_DisableIPLog)) then
        exit;
    
      tmpPath := SRL_SavePath;
      SRL_SavePath := tmpPath + 'IPLogs/'; // so TakeScreen saves to the right directory
    
      takeScreen('IP Log');
    
      SRL_SavePath := tmpPath; // reset
    end;
    
    (*
    RSReady
    ~~~~~~~
    
    .. code-block:: pascal
    
        function RSReady: Boolean;
    
    Returns true if we are ready to auto (on loginscreen or logged in).
    Useful for waiting until RS has fully loaded.
    
    .. note::
    
        by ZephyrsFury - Edited by [J]ustin
    
    Example:
    
    .. code-block:: pascal
    
        while (not RSReady) do
          SleepAndMoveMouse(100 + Random(500));
    
    *)
    function RSReady: Boolean;
    var
      x, y: Integer;
    begin
      Result := True;
      if (not Result) then
      begin
        ImageResetClientArea;
        Result := (GetColor(745, 17) = 16645629) or FoundBar; // X button in top right && Navigation Bar.
        SRL_ResetNavBar;
      end;
      if (GetColor(755, 43) = 16645629) then  // X button on resizeable client
      begin
        WriteLn('You are using the "Resizeable" screen option in RS.');
        WriteLn('Changing to "Fixed" screen option.');
        Mouse(735, 44, 2, 2, mouse_Left);
        Wait(600 + Random(800));
        if FindBitMapToleranceIn(SRL_OPTIONS_BITMAP, x, y, 130, 40, 640, 265, 5) then
        begin
          Mouse(200, 270, 5, 5, mouse_Left);  //Fixed button
          Wait(1200 + Random(1200));  //Wait while the screen changes
          Mouse(621, 71, 3, 3, mouse_Left); //Close the Options interface
          Wait(600 + Random(240));
        end
        else
        begin
          WriteLn('Unable to find Options Screen.');
          WriteLn('Please manually change to "Fixed" screeb size');
          TerminateScript;
        end;
      end;
      if (FindBitMapToleranceIn(SRL_OPTIONS_BITMAP, x, y, 130, 40, 640, 265, 5)) then
      begin
        Writeln('Failed to close Options Interface. Please report on Villavu Forum');
        TerminateScript;  //Failsafe if we fail to close the Interface for some reason
      end;
    end;
    
    (*
    Login_SetAudio
    ~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure Login_SetAudio(Volume, SFX, Area: Integer; SMSetting: TSMSetting);
    
    Sets audio options through the login screen.
    Use: Enter the desired Setting for the desired Option. Make option 0 for no change.
    
    .. note::
    
        by ZephyrsFury, fixed by Markus
    
    Example:
    
    .. code-block:: pascal
    
        Login_SetAudio(1, 5, 2, NoChange);
    
    *)
    procedure Login_SetAudio(Volume, SFX, Area: Integer; SMSetting: TSMSetting);
    var
      II, Tx, Ty, T, AudioMask,x,y: Integer;
      Pts: TIntegerArray;
    begin
      if (LoggedIn) then Exit;
      AudioMask := BitmapFromString(28, 3, 'beNrLyMAKGBgYJ85Y' +       //gfx slice but too lazy
           'dOfmw4VrdgPZaFJAdOniSSDacug8miwuAFSWWVAJVL9kzWqgsUA2X' +   // to fuck this entire function around
           'CPENKBUZXs3BBFjJsRAoPPguoAOhhsLJCEGerjZQRxsbaaFbgQAUH' +
           'JlGA==');
      TypeByte(vk_Escape);
      T := GetSystemTime;
      while (not(FindBitmapToleranceIn(AudioMask, X, Y, 717, 458, 760, 498, 10))) and (GetSystemTime - T < 5000) do
        Wait(100);
      if (FindBitmapToleranceIn(AudioMask, X, Y, 717, 458, 760, 498, 10)) then
        Mouse(X, Y, 20, 20, mouse_left)
      else
      begin
        FreeBitmap(AudioMask);
        Exit;
      end;
      Wait(100);
      Pts := [Volume, SFX, Area];
      for II := 0 to 2 do
      begin
        if (Pts[II] = 0) then Continue;
        if (not(InRange(Pts[II], 0, 5))) then
        begin
          srl_Warn('Login_SetAudio', 'Points must be between 0 and 5', warn_AllVersions);
          Continue;
        end;
        if Pts[II] = 1 then Tx:=32 else
        //Tx := 337 + Round((425 - 337) * (Pts[II] - 1) / 4);
        Tx := 319 * (PTS[II] - 1) * 32; //why do hard if we can do easy -.-
        Ty := round(II * 22.5) + 397; { I THINK this is the formula, but I don't care. }
        { Ty := //Round(3.5 * II * II + 46.5 * II + 245);}
        if (GetColor(Tx, Ty) = 1315860) then
          Mouse(Tx - 10, Ty - 0, 10, 5, mouse_left);    {bit of randomness never hurts }
        Wait(50);
      end;
      if (GetColor(527, 433) = 4473924) and (SMSetting = Mono) then   //if set at stereomode
        Mouse(527, 433, 10, 10, mouse_left)
      else
      if (GetColor(527, 411) = 499676) and (SMSetting = Stereo) then
        Mouse(527, 411, 10, 10, mouse_left);
      Wait(100);
      TypeByte(vk_Escape);
      FreeBitmap(AudioMask);
    end;
    
    (*
    Login_SetGraphics
    ~~~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure Login_SetGraphics(Brightness: Integer);
    
    Sets graphic options in the login screen.
    
    .. note::
    
        by ZephyrsFury, fixed by Markus
    
    Example:
    
    .. code-block:: pascal
    
        Login_SetGraphics(4);
    
    *)
    procedure Login_SetGraphics(Brightness: Integer);
    var
      T, x, y, tx, ty, graphicsslice, i: Integer;
      P: TPoint;
    begin
      if (LoggedIn) then Exit;
      graphicsslice := BitmapFromString(28, 3, 'beNrLyMAKGBgYJ85Y' +
           'dOfmw4VrdgPZaFJAdOniSSDacug8miwuAFSWWVAJVL9kzWqgsUA2X' +
           'CPENKBUZXs3BBFjJsRAoPPguoAOhhsLJCEGerjZQRxsbaaFbgQAUH' +
           'JlGA==');
      TypeByte(vk_Escape);
      T := GetSystemTime;
      while (not(FindBitmapToleranceIn(graphicsslice, X, Y, 717, 458, 760, 498,10))) and (GetSystemTime - T < 5000) do
        Wait(100);
      if (FindBitmapToleranceIn(graphicsslice, X, Y, 717, 458, 760, 498, 10)) then
        Mouse(X, Y, 20, 20, mouse_left)
      else
      begin
        FreeBitmap(graphicsslice);
        Exit;
      end;
      Wait(100);
      if not (GetColor(340, 115) = SM_Color) then
      for i := 0 to 2 do
      begin
        //Checks for the green arrow, clicks middle of box
        Mouse(260, 162, 5, 5, mouse_left);
        if WaitColor(340, 115, SM_Color, 0, 2000) then
          Break;
        if i = 2 then
        begin
          srl_Warn('SetGraphics', 'Failed to select Safe Mode', warn_Warning);
          Exit;
        end;
      end;
      if (Brightness > 4) then
        srl_Warn('Login_SetGraphics', 'Brightness must be between 0 and 4', warn_AllVersions)
      else
      if (Brightness <> 0) then
      begin
        x := 0;
        repeat
          P := Point(328 + (Brightness-1) * 32, 222);//coords of some thing
          if (GetColor(P.x, P.y) = 1315860) then
          begin
            Mouse(P.x, P.y, 3, 3, mouse_left);
            if WaitColor(P.x, P.Y, 3976149, 1, 1000) then
              break;
            Inc(x);
          end else
            break;
        until(x >= 5)
      end;
      repeat
        if FindColor(x, y, 14790912, 361,234, 673,373) then  //wtf is this
        begin
          Mouse(x + 10, y + 3, 10, 7, mouse_left);
          getmousepos(tx, ty);
          Mouse(tx, ty + 10, 4, 4, mouse_left);
          wait(300);
        end;
      until(not(FindColor(x, y, 14790912, 361,234, 673,373)));
      Wait(100);
      TypeByte(vk_Escape);
      FreeBitmap(graphicsslice);
    end;
    
    (*
    SetAudioOff
    ~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure SetAudioOff;
    
    Sets the Audio to off (1 for each bar). Works logged in and out.
    
    .. note::
    
        by ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        // sounds are annoying, let's turn them off
        setAudioOff();
    *)
    procedure SetAudioOff;
    begin
      if (LoggedIn) then
        SetAudio(1, 1, 1, NoChange)
      else
        Login_SetAudio(1, 1, 1, NoChange);
    end;
    
    (*
    SetAutoingDefaults
    ~~~~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure SetAutoingDefaults;
    
    Sets the graphic options for best SRL compatibility. Works both logged in and out.
    
    .. note::
    
        by ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        procedure SetupScript();
        begin
          SetAutoingDefaults(); // set the graphics options appropriately
        end;
    
    *)
    procedure SetAutoingDefaults;
    begin
      if (LoggedIn) then
        FixGraphics
      else
        Login_SetGraphics(4);
    end;
    
    (*
    ValidEmail
    ~~~~~~~~~~
    
    .. code-block:: pascal
    
        function ValidEmail: Boolean;
    
    Recognizes and handles the "Validate Email" screen in RS.
    
    .. note::
    
        by NCDS
    
    Example:
    
    .. code-block:: pascal
    
        if not ValidEmial then
          writeLn('Failed to get past verification screen');
    
    *)
    function ValidEmail: Boolean;
    begin
      while (getColor(473, 418) = 1001495) do
      begin
        //writeln('found email screen');
        MouseBox(502, 424, 548, 435, mouse_left);
        waitFunc(@lobbyScreen, 75, 3000);
      end;
      result := lobbyScreen;
    end;
    
    (*
    ExitToLobby
    ~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function ExitToLobby: Boolean;
    
    Exits to the Lobby (for breaks?)
    
    .. note::
    
        by Starblaster100, Raymond, IceFire908, & Tarajunky
    
    Example:
    
    .. code-block:: pascal
    
        // world switch!
        if (ExitToLobby()) then
          SelectWorld(20); // parameters here may be inaccurate
    
    *)
    function ExitToLobby: Boolean;
    var
      x, y, c, i: Integer;
    begin
      Result := LobbyScreen;
      if Result = True then
        Exit;
      if SRL_HasProc(srl_OnExitToLobby) then
        SRL_Procs[srl_OnExitToLobby]();
      if (not (GameTab(tab_LogOut))) then
        Exit;
      Wait(200 + Random(100));
      while (LoggedIn) and (c < 10) do
      begin
        Inc(c);
        if(FindText(x, y, 'obb', UpCharsEx, MIX1, MIY1, MIX2, MIY2))then
        begin
          MouseBox(566, 346, 715, 373, mouse_left);
          for i := 0 to 10 do
          begin
            Wait(1000);
            if (not LobbyScreen) then
              if validEmail then
              begin
                Result := True;
                Exit;
              end;
          end;
        end else
        if(FindText(x, y, 'lick', UpCharsEx, MIX1, MIY1, MIX2, MIY2))then
        begin
          MouseBox(579, 367, 699, 386, mouse_left);
          for i := 0 to 10 do
          begin
            Wait(1000);
            if not(LoggedIn) then
            begin
              Result := True;
              SRL_ResetNavBar;
              Exit;
            end;
          end;
        end
      end;
    end;
    
    (*
    LeaveLobby
    ~~~~~~~~~~
    
    .. code-block:: pascal
    
        function LeaveLobby: Boolean;
    
    Logs you out from lobby screen.
    
    .. note::
    
        by IceFire908
    
    Example:
    
    .. code-block:: pascal
    
        if (LobbyScreen()) then
          if (not LeaveLobby()) then
            WriteLn('Oh no, we didn''t make it out of the Lobby Screen.');
    
    *)
    function LeaveLobby: Boolean;
    var
      T: LongInt;
    begin
      T := GetSystemTime;
      while ((not (Result)) and ((GetSystemTime - T) < 30000)) do
      begin
        MouseBox(678, 24, 699, 43, mouse_left);
        Wait(RandomRange(1000, 2000));
        Result := (not (LobbyScreen));
        SRL_ResetNavBar;
      end;
    end;
    
    (*
    Logout
    ~~~~~~
    
    .. code-block:: pascal
    
        function Logout: Boolean;
    
    Logs you all the way out from ingame.
    
    .. note::
    
        by Starblaster100, Raymond, IceFire908, Tarajunky & NCDS
    
    Example:
    
    .. code-block:: pascal
    
        if (not FindTree()) then
          Logout();
    
    *)
    function Logout: Boolean;
    var
      x, y, c, i: Integer;
    begin
      SRL_ExitedSquealOfFortune := false;
    
      Result := (not (LoggedIn));
      if (Result) then
        Exit;
      if SRL_HasProc(srl_OnLogOut) then
        SRL_Procs[srl_OnLogOut]();
      if (not (GameTab(tab_LogOut))) then
      begin
        CloseWindow();
        if (not (GameTab(tab_LogOut))) then
          Exit;
      end;
      Wait(200 + Random(100));
      while (LoggedIn) and (c < 10) do
      begin
        Inc(c);
        if(FindText(x, y, 'ogin', UpCharsEx, MIX1, MIY1, MIX2, MIY2))then
          MouseBox(569, 393, 713, 418, mouse_left)
        else
          if(FindText(x, y, 'lick', UpCharsEx, MIX1, MIY1, MIX2, MIY2))then
            MouseBox(569, 349, 713, 375, mouse_left);
    
        for i := 0 to 10 do
        begin
          Wait(1000);
          if not(LoggedIn) then
          begin
            Result := True;
            SRL_ResetNavBar;
            Exit;
          end;
        end;
      end;
    end;
    
    (*
    LoginPlayerToLob
    ~~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function LoginPlayerToLob: Boolean;
    
    Like LoginPlayer but only to the lobbyscreen.
    
    .. note::
    
        by SRL Dev Team
    
    Example:
    
    .. code-block:: pascal
    
        LoginPlayerToLob();
        if (not LobbyScreen()) then
          LoginPlayerToLob(); // try again!
    
    *)
    function LoginPlayerToLob: Boolean;
    var
      RetryLogin: Boolean;
      typtmp, t, w: integer;
      Actions: TVariantArray;
      Attempts: LongInt;
      p: TPoint;
      //ATPA: T2dPointArray;
      TPA: TPointArray;
      Boxes : TIntegerArray;
      //B: TBox;
    label
      ProcStart;
    begin
      ActivateClient;
      Wait(100);
      TypeByte(vk_Escape);
      Wait(500);
    
             {Check for lobby screen already open/ already logged in}
    
      Result := ((LobbyScreen) or (LoggedIn));
      if (Result) then
        Exit;
    
                           {Check for active player.}
    
      if (not (Players[CurrentPlayer].Active)) then
      begin
        WriteLn('Player is not Active...');
        if (AllPlayersInActive) then
        begin
          WriteLn('All players not active!');
          Exit;
        end;
        NextPlayer(False);
        Exit;
      end;
    
                   {Wait for the client to finish loading.}
    
      T := GetSystemTime;
      repeat
        if (RSReady) then
          Break;
        if ((GetSystemTime - T) > 180000) then
        begin
          WriteLn('It has been 3 minutes and Runescape is not yet ready... Terminating.');
          TerminateScript;
        end;
        Wait(RandomRange(1000, 2000));
      until (False);
      WriteLn('Welcome to Runescape.');
    
    
                       {New graphics have changed box}
      Case CountColor(LOGIN_TEXTCOLOUR, 198, 192, 567, 259) of
        1079: MouseBox(347, 295, 414, 303, mouse_left);
        1745: MouseBox(347, 305, 414, 312, mouse_left); { "Available graphics options have been changed..." }
        1801: MouseBox(347, 305, 414, 312, mouse_left); { "There was a problem with your current graphics settings..." }
      end;
    
                       {Click less info if needed.}
      {
      if (not (SimilarColors(GetColor(382, 11), 14285562, 20))) then //Runescae sword green bead
      begin
        MouseBox(212, 479, 550, 495, 1); //Less info button
        Wait(RandomRange(1000, 2000));
      end;
      }
                          {Click Members/free.}
    
      {Members := Players[CurrentPlayer].Member;
      if (Length(Players[CurrentPlayer].WorldInfo) > 0) then
        Members := Players[CurrentPlayer].WorldInfo[0];  }
    
      ProcStart:
    
      {if (Members) then
        I := 1;
    
      if (GetColor(248, 359) <> 1381653) then //Black outline on forgotten pwd button.
      begin
        FindColors(TPA, 9291999, 10, 370, 675, 475);
        ATPA := SplitTPA(TPA, 4);
        if (Length(ATPA) > 2) then
        begin
          if (I = 1) then
            I := 0
          else
            I := 1;
          B := GetTPABounds(ATPA[1 + I]); //If demo mode is still up
        end
        else
          if (Length(ATPA) = 2) then
            B := GetTPABounds(ATPA[0 + I]) //When there's no demo mode
          else
            B := IntToBox(210, 424, 367, 446);
    
        with B do
          MouseBox(X1 + 20, Y1 + 10, X2 - 20, Y2 + 8, 1);
    
        T := GetSystemTime;                  //Black outline on forgotten pwd button.
        while ((GetSystemTime - T < 3000) and (GetColor(248, 359) <> 1381653)) do
          Wait(RandomRange(100, 200));
    
      end;    }
    
                           {Type in username and pass}
    
      if (loggedIn) then
        exit;
    
      for W:= 0 to 1 do
      begin
        if W = 0 then
          Boxes:= [UBX1, UBY1, UBX2, UBY2]
        else
          Boxes:= [PBX1, PBY1, PBX2, PBY2];
    
        t := (getSystemTime + (60000 * 2));
        FindColors(TPA, LOGIN_TEXTCOLOUR, Boxes[0], Boxes[1], Boxes[2], Boxes[3]);
        repeat
          if (Length(TPA) > 0) then
          begin
            SortTPAFrom(TPA, Point(Boxes[2], Boxes[1] + (Boxes[3] - Boxes[2]) div 2));
            p := point(TPA[0].X + 20, TPA[0].Y);
            if (not pointInBox(p, intToBox(Boxes[0], Boxes[1], Boxes[2], Boxes[3]))) then
              p := point(UBX2 - (10 + random(10)), p.y);
            Mouse(p.x, p.y, 5, 5, mouse_left);
          end else
            MouseBox(Boxes[0], Boxes[1], Boxes[2], Boxes[3], mouse_left);
    
          typtmp := 0;
          while (CountColor(LOGIN_TEXTCOLOUR, Boxes[0], Boxes[1], Boxes[2], Boxes[3]) > 0) do
          begin
            Inc(typtmp);
            TypeByte(VK_BACK);
            Wait(50+Random(50));
            if (typtmp >= RandomRange(20, 24)) then
              Break;
          end;
        until(not FindColors(TPA, LOGIN_TEXTCOLOUR, Boxes[0], Boxes[1], Boxes[2], Boxes[3]) or (getSystemTime > t));
    
        Wait(100 + Random(200));
        if W = 0 then
        begin
          WriteLn(Capitalize(Players[CurrentPlayer].Name));
          TypeSend(Players[CurrentPlayer].Name);
        end else
          TypeSend(Players[CurrentPlayer].Pass);
        Wait(800 + Random(50));	//Should fix the Login -> Spam Recoveries bug
      end;
    
                            {Check responses}
    
      T := GetSystemTime;
      repeat
        // so the lobby appears (gets rid of black screen)
        if (countColorTolerance(clBlack, 0, 0, 500, 500, 20) > 245000) then
        begin
          wait(2000 + random(1500));
          mouseBox(0, 0, 750, 490, mouse_Move);
        end;
        SRL_ResetNavBar;
        result := validEmail;  // To handle "Validate Email" screen
        if result then
          break;
    
        SetLength(Actions, 0);
    
        if ((GetSystemTime - T) > 60000) then
          Actions :=       ['One minute has passed... Debug: ' + ToStr(CountColor(LOGIN_TEXTCOLOUR, 260, 140, 510, 400)),              0,    5,    'PlayerFalse',   'Login Failed']
        else
        case (CountColor(LOGIN_TEXTCOLOUR, 260, 140, 510, 400)) of //text colour points
                            // WriteLn Error                  Wait for   Retrys     Action      Player[CurrentPlayer].Loc
          763, 2348, 2299:
                Actions := ['Invalid Username / Password',           0,    2,    'PlayerFalse',   'Wrong User/Pass'];
          1088: Actions := ['Your account has been disabled',        0,    0,    'PlayerFalse',   'Acc Disabled'];
           951: Actions := ['Your account is already logged in',  5000,    5,    'PlayerTrue',    'Already logged in'];
          1239: Actions := ['Not a Members Account',                 0,    1,    'PlayerTrue',    ''];
           364: Actions := ['Error Connecting.',                 20000,    9,    'Terminate',     'Error Connecting'];
          1057: Actions := ['Too many incorrect logins.',    5 * 60000,    2,    'PlayerFalse',   'Too many logins'];
           732: Actions := ['Runescape has been updated.',           0,    0,    'RSUpdate',      'RS Updated'];
           591: Actions := ['Client token changed.',                 0,    0,    'RSUpdate',      'Client Token Changed'];
          1606: Actions := ['Game session expired.',                 0,    0,    'RSUpdate',      'Session Expired'];
           777: Actions := ['Login limit exceeded.',             20000,   10,    '',              'Waiting for login.'];
        end;
                                 {Respond}
    
        if (Length(Actions) > 0) then
        begin
          WriteLn(Actions[0]);
          if (Actions[0] <> 'Not a Members Account') then
          begin
            Wait(1000 + Random(500));
            TypeByte(vk_Escape);
          end;
          Wait(Actions[1] + Random(100));
          if (Actions[2] <> 0) then
            if (Attempts < Actions[2]) or (Actions[2] = -1) then
            begin
              if (Actions[0] = 'Not a Members Account') then
              begin
                Players[CurrentPlayer].Member := False;
                if (Length(Players[CurrentPlayer].WorldInfo) > 0) then
                  Players[CurrentPlayer].WorldInfo[0] := False;
                MouseBox(267, 321, 496, 350, mouse_left); //Play free game instead button
                Wait(3000 + Random(2000));
                Result := True;
                Exit;
              end;
              RetryLogin := True;
              Wait(2000 + Random(1000));
              Break;
            end;
          if (Actions[4] <> '') then
            Players[CurrentPlayer].Loc := Actions[4];
          case Actions[3] of
            'PlayerFalse': NextPlayer(False);
    
            'PlayerTrue':
              begin
                LeaveLobby();
                NextPlayer(True);
              end;
    
            'Terminate': TerminateScript;
    
            'RSUpdate':
              begin
                if SRL_HasProc(srl_OnRSUpdate) then
                begin
                  case actions[0] of
                    'Runescape has been updated.':
                      begin
                        Writeln('Runescape has been updated! Waiting 5 minutes to restart SMART!');
                        Wait(300000);
                      end;
                  end;
                  SRL_Procs[srl_OnRSUpdate]();
                  Exit;
                end;
                Writeln('Runescape has been updated! Please restart Simba.');
                TerminateScript;
              end;
          end;
          Exit;
        end;
        Wait(100);
        Result := (LobbyScreen) or (LoggedIn);
      until (Result);
    
      TakeIPScreen();
    
                         {Back to main screen if needed}
    
      if (RetryLogin) then
      begin
        RetryLogin := False;
        Inc(Attempts);
        goto ProcStart;
      end;
    
    end;
    
    (*
    LoginPlayer
    ~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function LoginPlayer: Boolean;
    
    Logs in the Player[CurrentPlayer]. Detects most Client Login Errors
    
    .. note::
    
        by SRL Dev Team
    
    Example:
    
    .. code-block:: pascal
    
        if (not LoggedIn()) then
        begin
          WriteLn('Error: Not Logged In! Fixing');
          LoginPlayer();
        end;
    
    *)
    function LoginPlayer: Boolean;
    var
      RetryLogin: Boolean;
      Actions: TVariantArray;
      T, Attempts: LongInt;
    label
      ProcStart;
    begin
      ProcStart:
    
      if (not (Result)) then    {Check if Logged in}
        Result := LoggedIn;
    
      if (Result) then
      begin
        Result := True;
        AddToSRLLog('Current player: ' + Capitalize(Players[CurrentPlayer].Name));
        SRL_ExitedSquealOfFortune := false;
        PlayerStartTime := GetSystemTime; // PlayerStartTime
        if SRL_HasProc(srl_OnLogIn) then
          SRL_Procs[srl_OnLogIn]();
    
        Exit;
      end;
    
      if (not (LoginPlayerToLob)) then    {Get to lobby screen}
        Exit;
    
      Wait(500 + Random(500));
                               {World switching}
    
      if Length(Players[CurrentPlayer].WorldInfo) > 0 then
        if VariantIsBoolean(Players[CurrentPlayer].WorldInfo[0]) then
          Players[CurrentPlayer].Member:= Players[CurrentPlayer].WorldInfo[0];
    
      case Length(Players[CurrentPlayer].WorldInfo) of
        1:
          if VariantIsInteger(Players[CurrentPlayer].WorldInfo[0]) then
            SelectWorld(Players[CurrentPlayer].WorldInfo[0]);
    
        2:
          SelectWorld(Players[CurrentPlayer].WorldInfo[1]);
    
        3:
          if (Players[CurrentPlayer].WorldInfo[1] = 0) then
            SelectWorld(RandomWorld(Players[CurrentPlayer].WorldInfo[0], Players[CurrentPlayer].WorldInfo[2]))
          else
            SelectWorld(Players[CurrentPlayer].WorldInfo[1]);
      end;
                              {Click Here to Play}
    
      if (LobbyScreen) then
        MouseBox(270, 450, 490, 470, mouse_left);
    
                                {Check responses}
    
      T := GetSystemTime;
      repeat
    
        SetLength(Actions, 0);
        if ((GetSystemTime - T) > 60000) then
          Actions :=       ['One minute has passed...  Debug: ' + ToStr(CountColor(LOGIN_TEXTCOLOUR, 260, 140, 510, 400)),                    0,     0,  'NextPlayer',   'Login Failed']
        else
        case (CountColor(LOGIN_TEXTCOLOUR, 260, 140, 510, 400)) of //text colour points
                            // WriteLn Error                          Wait for   Retrys  Action     Player[CurrentPlayer].Loc
           364: Actions := ['Error Connecting.',                       20000,     9,  'Terminate',    'Error Connecting'];
           850: Actions := ['You need skill total of 1000.',               0,     9,  'PlayerTrue',   '1000 skill club'];
          1028: Actions := ['You are standing in a members-only area.',    0,     1,  'PlayerFalse',  'In Mems-Only Area'];
          1239: Actions := ['Not a Members Account',                       0,     1,  'PlayerFalse',  'Non-member'];
    	     777: Actions := ['Login limit exceeded.',                       0,     10, '',             'Waiting for login.'];
           951: Actions := ['Your account is already logged in',        5000,     5,  'PlayerTrue',   'Already logged in'];
           591: Actions := ['Client token changed.',                       0,     0,    'RSUpdate',   'Client Token Changed'];
          1606: Actions := ['Game session expired.',                       0,     0,    'RSUpdate',   'Session Expired'];
            -1: Actions := ['You need skill total of 1500.',               0,     9,  'PlayerTrue',   '1500 skill club'];
            -1: Actions := ['You need 20 combat for PvP',                  0,     1,  'PlayerFalse',  'PvP warning'];
        end;
    
        if (CountColor(clWhite, 415, 336, 476, 356) = 82) then // HRW login button white colour points
        begin
          Wait(RandomRange(500, 1000));
          if (Length(Players[CurrentPlayer].WorldInfo) > 2) then
          begin
            if (Players[CurrentPlayer].WorldInfo[2]) then
              MouseBox(391, 361, 498, 383, mouse_left)
            else begin
              MouseBox(263, 362, 372, 383, mouse_left);
              Players[CurrentPlayer].WorldInfo := [False, 0, AllowPVP];
              RetryLogin := True;
              Break;
            end;
          end
          else
            if (AllowPVP) then
              MouseBox(391, 361, 498, 383, mouse_left)
            else
              MouseBox(263, 362, 372, 383, mouse_left);
          Wait(3000 + Random(2000));
          RetryLogin := true;
        end;
    
                                 {Respond}
    
        if (Length(Actions) > 0) then
        begin
          WriteLn(Actions[0]);
          Wait(Actions[1] + Random(100));
          if (Actions[2] <> 0) then
            if (Attempts < Actions[2]) or (Actions[2] = -1) then
            begin
              case Actions[0] of
                'You are standing in a members-only area.': begin
                                                              Players[CurrentPlayer].Member := True;
                                                              Players[CurrentPlayer].WorldInfo := [True, 0, AllowPVP];
                                                            end;
                'You need 20 combat for PvP': Players[CurrentPlayer].WorldInfo := [Players[CurrentPlayer].Member, 0, False];
                'Not a Members Account': begin
                                           Players[CurrentPlayer].Member := False;
                                           Players[CurrentPlayer].WorldInfo := [False, 0, AllowPVP];
                                         end;
    		       	'Login limit exceeded.': begin
    											                 Writeln('Runescape is lagging or we''re logged in too many times.  Keep trying!');
                                           Players[CurrentPlayer].WorldInfo := [players[currentPlayer].member, 0, AllowPVP];
                                           Wait(5000+Random(10000));
    											               end;
                'You need skill total of 1000.': players[currentPlayer].worldInfo := [players[currentPlayer].member, 0, allowPVP];
              end;
              RetryLogin := True;
              Wait(2000 + Random(1000));
              Break;
            end;
          if (Actions[4] <> '') then
            Players[CurrentPlayer].Loc := Actions[4];
          case Actions[3] of
            'PlayerFalse': NextPlayer(False);
            'PlayerTrue':
              begin
                LeaveLobby();
                NextPlayer(True);
              end;
            'Terminate': TerminateScript;
            'RSUpdate':
              begin
                wait(randomRange(1000, 1500));
                typeByte(VK_ESCAPE);
                leaveLobby();
    
                if SRL_HasProc(srl_OnRSUpdate) then
                begin
                  SRL_Procs[srl_OnRSUpdate]();
                  Exit;
                end;
                Writeln('Runescape has been updated! Please restart Simba.');
                TerminateScript;
              end;
          end;
          Exit;
        end;
        Wait(100);
        Result := (LoggedIn);
      until (Result);
    
                         {Back to lobby screen if needed}
    
      if (RetryLogin) then
      begin
        RetryLogin := False;
        Inc(Attempts);
        goto ProcStart;
      end;
    
                          {Set player start time ect...}
    
      if (Result) then
        goto ProcStart;
    
    end;
    
    (*
    NextPlayerIndex
    ~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function NextPlayerIndex: Integer;
    
    Returns the player number of the next active player.
    
    .. note::
    
        by Dankness, Ron, Raymond & ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        if (NextPlayerIndex() != -1) then
          WriteLn('We still have active players!');
    
    *)
    function NextPlayerIndex: Integer;
    begin
      if (AllPlayersInactive) then
      begin
        Result := -1;
        Exit;
      end;
      Result := (CurrentPlayer + 1) mod Length(Players);
      while (Players[Result].Active = False) do
        Result := (Result + 1) mod Length(Players);
    end;
    
    (*
    RandomPlayerIndex
    ~~~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function RandomPlayerIndex: Integer;
    
    Returns the player number of a random active player.
    
    .. note::
    
        by Dankness, Ron, Raymond & ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        procedure NextPlayerRandom(Active: Boolean);
        begin
          Players[CurrentPlayer].Active := Active;
          CurrentPlayer := RandomPlayerIndex();
          if (CurrentPlayer = -1) then
          begin
            WriteLn('All players inactive..');
            TerminateScript();
          end;
        end;
    
    *)
    function RandomPlayerIndex: Integer;
    var
      N: Integer;
    begin
      if (AllPlayersInactive) then
      begin
        Result := -1;
        Exit;
      end;
      N := Random(Length(Players));
      while (Players[N].Active = False) or (N = CurrentPlayer) do
      begin
        if (PlayersActive = 1) and (N = CurrentPlayer) then Break;
        N := Random(Length(Players));
      end;
      Result := N;
    end;
    
    (*
    SwitchToPlayer
    ~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        function SwitchToPlayer(PlayerNo: Integer; Active: Boolean): Boolean;
    
    Switches to a specific player, setting the current player's activity to True or False.
    
    .. note::
    
        by Dankness, Ron, Raymond & ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        SwitchToPlayer(1, True);
    
    *)
    function SwitchToPlayer(PlayerNo: Integer; Active: Boolean): Boolean;
    begin
      WriteLn('SwitchToPlayer(PlayerNo: ' + IntToStr(PlayerNo) + ', Active: ' + BoolToStr(Active)+ ');');
      Players[CurrentPlayer].Active := Active;
      Logout;
      if SRL_HasProc(srl_OnNextPlayer) then
        SRL_Procs[srl_OnNextPlayer]();
      PlayerCurTime := GetSystemTime;
      Players[CurrentPlayer].Worked := Players[CurrentPlayer].Worked + (PlayerCurTime - PlayerStartTime);
      CurrentPlayer := PlayerNo;
      SRL_Logs := SRL_Logs + 1;
      LoginPlayer;
      Result := LoggedIn;
    end;
    
    (*
    NextPlayer
    ~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure NextPlayer(Active: Boolean);
    
    Logs in the next player that isn't inactive.
    Boolean: True - Current player is ok. False - Current player is false.
    
    .. note::
    
        by ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        NextPlayer(True);
    
    *)
    procedure NextPlayer(Active: Boolean);
    var
      srl_PlayerIndexFunc: function: Integer;
      cP: Integer;
    begin
      if (RandomPlayer) then
        srl_PlayerIndexFunc := @RandomPlayerIndex
      else
        srl_PlayerIndexFunc := @NextPlayerIndex;
    
      WriteLn('NextPlayer(' + BoolToStr(Active) + ')');
      LogOut;
      cP := srl_PlayerIndexFunc();
      while (cP = -1) do
      begin
        cP := srl_PlayerIndexFunc();
        if SRL_HasProc(srl_InNextPlayerLoop) then
          SRL_Procs[srl_InNextPlayerLoop]();
        Wait(5000); //Endless loop
      end;
    
      SwitchToPlayer(cP, Active);
    end;
    
    (*
    RandomNextPlayer
    ~~~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure RandomNextPlayer(Active: Boolean);
    
    Logs in a random player that isn't inactive.
    Boolean: True - Current player is ok. False - Current player is false.
    
    .. note::
    
        by ZephyrsFury
    
    Example:
    
    .. code-block:: pascal
    
        RandomNextPlayer(True);
    
    *)
    procedure RandomNextPlayer(Active: Boolean);
    var
      tmpBool: Boolean;
    begin
      tmpBool := RandomPlayer;
      RandomPlayer := True;
      NextPlayer(Active);
      RandomPlayer := tmpBool;
    end;
    
    (*
    CheckUserNicks
    ~~~~~~~~~~~~~~
    
    .. code-block:: pascal
    
        procedure CheckUserNicks;
    
    Checks if all nicks are set correct.
    
    .. note::
    
        by Sumilion, Raymond, and Nava2
    
    Example:
    
    .. code-block:: pascal
    
        // make sure the user setup their nicks right..
        CheckUserNicks();
    
    *)
    
    // TODO: Remove? Not used?
    procedure CheckUserNicks;
    var
      I, II: Integer;
      Wrong, FWrong: Boolean;
      WarnStrings: TStringArray;
    begin
      WarnStrings := ['Please fill in your nickname.',
                      'Your nickname isn'' found in the players name'];
    
      for i := 0 to HowManyPlayers - 1 do
        for II := 0 to 1 do
        begin
          case II of
            0: Wrong := (Players[i].Nick = '');
    		    1: Wrong := (Pos(Players[i].nick, Capitalize(Players[i].name))<1);
          end;
    
          if Wrong then
          begin;
            Writeln('--');
            Writeln('WARNING: ' + WarnStrings[II] + ' with player: ' + Players[i].Name);
            FWrong := True;
          end;
        end;
    
      if FWrong then
      begin
        Writeln('');
        Writeln('For more information, visit http://www.villavu.com/forum/showthread.php?t=5410');
      end;
    end;
    Last edited by leia; 03-04-2013 at 02:00 AM.

  2. #2
    Join Date
    Mar 2013
    Posts
    15
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    I have highlighted the perpetrating code line in red

  3. #3
    Join Date
    Mar 2013
    Posts
    15
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by leia View Post
    I have highlighted the perpetrating code line in red
    bump ?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •