Results 1 to 19 of 19

Thread: Spam-Clicking Willow Tree

  1. #1
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Question Spam-Clicking Willow Tree

    Okay so my problem is that the script spam-clicks the Willow tree instead of waiting until it's chopped down. Here it is:

    SCAR Code:
    program FirstScript;
     {.include SRL\SRL.scar}
     
    var
     HatchetDTM: Array of Integer;
     i, x, y: integer;

    procedure DeclarePlayers;
    begin
      HowManyPlayers := 1;
      NumberOfPlayers(HowManyPlayers);
      CurrentPlayer := 0;

      Players[0].Name := '';
      Players[0].Pass := '';
      Players[0].Nick := '';
      Players[0].Active := True;
      Players[0].Pin := '';
    end;

    procedure HatDTMs;
    begin
     SetArrayLength(HatchetDTM, 7);//[ 0]:= Bronze, [6]:= Rune
       HatchetDTM[0]:= DTMFromString('78DA630C646260D8C4C8800C7CAC9519F8813' +
           '44C94D113A86617AA1A982C5C8D1B50CD36026ABC816AD6125013' +
           '0C54B38E809A504C3763A80921EC1E00949107EF');
       HatchetDTM[1]:= DTMFromString('78DA630C626260D8C4C8800C02BDBD19F8813' +
           '448F43F1030BA03D5EC47550391859140DA0DA8662B01355E4035' +
           '6B09A80906AA5947404D2850CD06026A42806AB6E157030033F30' +
           'C28');
       HatchetDTM[2]:= DTMFromString('78DA630C626260D8C8C8800CCAF3F318F8813' +
           '448F43F10307A02D5EC40550391859140DA0DA8660B01355E4035' +
           '6B09A80904AA5947404D28A69BB1AAD98A5F0D0090050C8D');
       HatchetDTM[3]:= DTMFromString('78DA63F4676260D8C0C8800C44454418F8813' +
           '448F43F1030BA03D5EC43550391859140DA05A8661701351E4035' +
           'EB09A80900AA5947404D28A69BB1AAD98A5F0D0095870B78');
       HatchetDTM[4]:= DTMFromString('78DA630C646260D8C8C8800C1C1CE319F8813' +
           '44C94D10DA8E600AA1A982C5C8D2B50CD0E026A3C806A36105013' +
           '0054B38E809A504C3763A80901AAD9865F0D00C5940824');
       HatchetDTM[5]:= DTMFromString('78DA63EC64626038C0C8800C9C829D18F8813' +
           '44C94B101A8E614AA1A982C8A9A7D04D4F402D5EC2742CD21026A' +
           '6A816AAEE05703006FA208C7');
       HatchetDTM[6]:= DTMFromString('78DA630C606260D8C8C8800C5CA25319F8813' +
           '44C94D11DA8662FAA1A982C5C8D1B50CD56026ABC806AD6125013' +
           '0C54B38E809A504C3763A80901AAD9865F0D00E2D50845');
    end;

    procedure FindHatchet;
    var
      b: Boolean;
    begin
      for i:= 0 to 6 do
        if(FindDTM(HatchetDTM[i], x, y, MIX1, MIY1, MIX2, MIY2))then
          begin
            b:= True;// assign b:= True, now you know it's found.
            Break;// break the loop - once found, no need to keep going through.
          end;
          begin
            if(b = True)then// since it's only a check, = is needed, rather than :=
              Writeln('Found hatchet, walking to trees.')
            else
              Writeln('Didn''t find hatchet, logging out.');
          end;
    end;

    function ChopTrees: Boolean;
    var
     TPA: TPointArray;
     t: Boolean;
     fx, fy, TheColor: Integer;
     
    begin
     Result:= False
      if not LoggedIn then Exit;
     
     SetArrayLength(TPA, 1);
      TPA[0]:= Point(x, y);
     begin
      repeat
       begin
        x:= MSCX;
        y:= MSCY;
        if(FindColorSpiralTolerance(x, y, 8497045, MSX1, MSY1, MSX2, MSY2, 5))then
          begin
          MMouse(x,y,4,4);
            Wait(100 + Random(50));
          if((Pos('illow', RS_GetUpText) <> 0) and (Pos('hop', RS_GetUpText) <> 0))then
            begin
              TheColor:= GetColor(x, y);
              Mouse(x, y, 3, 3, True);
              repeat
                Wait(50);
              until(not FindColor(fx, fy, TheColor, x - 10, y - 10, x + 10, y - 10));
            end;
            t:= True
          end;
       end;
      until(InvFull or not LoggedIn);
       begin
        if(t = True)then
         Writeln('Found trees, starting to chop.')
        else
         Writeln('Didn''t find trees, logging out.');
       end;
     end;
    end;

    begin
     SetupSRL;
     ActivateClient;
     DeclarePlayers;
     LoginPlayer;
     SetAngle(True);
     HatDTMs;
     FindHatchet;
     ChopTrees;
    end.

    If anyone has any suggestions, that would be great. Thanks.

  2. #2
    Join Date
    Nov 2008
    Location
    Melbourne, Australia
    Posts
    2,240
    Mentioned
    3 Post(s)
    Quoted
    11 Post(s)

    Default

    All you have told it to do is to find a color then check the uptext and if it is 'illow' it will click. The colors wont be exact so your getcolor method wont work as you want it to, and it will just keep clicking the tree.

    Try something like:

    SCAR Code:
    //Tree finding and clicking here
    Repeat
     //Things to do while its cutting
    Until(not(IsUpText('illow')));
    Click here to find out how to get full screen without members! | Click here to check out my Ultimate Bitmap Tutorial! Edited to work with Simba! |

  3. #3
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    Quote Originally Posted by cycrosism View Post
    All you have told it to do is to find a color then check the uptext and if it is 'illow' it will click. The colors wont be exact so your getcolor method wont work as you want it to, and it will just keep clicking the tree.

    Try something like:

    SCAR Code:
    //Tree finding and clicking here
    Repeat
     //Things to do while its cutting
    Until(not(IsUpText('illow')));
    Oo I like that, I'll try it, thanks.

    EDIT: That works well, but it still does some random clicking, but it's not too bad, thanks.
    Last edited by Coh3n; 05-23-2009 at 08:39 AM.

  4. #4
    Join Date
    Jan 2008
    Location
    California, US
    Posts
    2,765
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    If you want to use reflection you can use my function.
    SCAR Code:
    function IsChopping : boolean;
    var
      i : integer;
    begin
      i := GetAnimation;
      result := InIntArray([867, 869, 871, 873, 875, 877, 879, 2846], i);
    end;

  5. #5
    Join Date
    May 2008
    Posts
    1,345
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Someone made a function that checks if an area is changing. You could use that on the stomach/arms of your guy, and have it check if it's not moving to much, and use that result to see if it's moving. I believe that was one of his examples xD.

    ~Sandstorm

  6. #6
    Join Date
    Dec 2006
    Location
    Canada, BC
    Posts
    728
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    what i did in my yew cutter is save the color at the point where you click, as well as a TPoint of wehre you click, and then make a function that surches for the color with a box of 20 or so around the point where you clicked. then use the TPA and do High(TPA) if that equals over 0 then you know the tree is still there :] that way you can free up the mouse.

    Ill post you my code just to give you an example of what im talking about:

    SCAR Code:
    function TreeCutDown : Boolean; // Surches for the same Color, with alittle tolerance, within a 20x20 pixle box. The shifting of the screen should not have moved the point so far that it would not be found
    var
      TPA : TPointArray;
    begin
      FindColorsTolerance(TPA, TreeColor, TreePoint.x - 20, TreePoint.y - 20, TreePoint.x + 20, TreePoint.y + 20, 3);
      Writeln('Tree Found, High(TPA) = ' + IntToStr(High(TPA)));
      if High(TPA) >= 0 then
      begin
        Result := False;
      end;
      if High(TPA) <= 0 then
      begin
        Writeln('Tree Has Been Cut Down.');
        Result := True;
      end;
    end;

    function CutTree : Boolean;
    begin
      //bla bla bla
      Mouse(x, y, 2, 2, true);
      TreePoint := IntToPoint(x, y);
      TreeColor := GetColor(x, y);
      /bla bla bla
    end;

    begin.
      CutTree;
      repeat
        Wait(3000);
      until(TreeCutDown);
    end;

    this probably will be confuseing if you dont understand how to use TPA's yet, but maby after a few tutorials you will figure it out ;D if youd like i could show you a few TPA tutorials that helped me understand it

    Edit: sorry i didnt read through your script, just read your question. its ovious you know how to use TPA's lol you should understand this fine
    Last edited by Lance; 05-23-2009 at 09:41 AM.
    Lance. Da. Pants.

  7. #7
    Join Date
    Jan 2008
    Location
    California, US
    Posts
    2,765
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    AbstractMovement by nadeem.

  8. #8
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    Thanks everyone for your replies, they've been a big help + rep

    Quote Originally Posted by Da 0wner View Post
    AbstractMovement by nadeem.
    No idea what that is, but I'll look into it. Thanks.

    Quote Originally Posted by Sandstorm View Post
    Someone made a function that checks if an area is changing. You could use that on the stomach/arms of your guy, and have it check if it's not moving to much, and use that result to see if it's moving. I believe that was one of his examples xD.
    I personally haven't heard of this, but I'm new to scar. I'll definitely look into it.

    Quote Originally Posted by Da 0wner View Post
    If you want to use reflection you can use my function.
    Not looking into reflection quite yet, but thanks. This is definitely something I'll consider using in the future.

    Quote Originally Posted by lancerawks View Post
    what i did in my yew cutter is save the color at the point where you click, as well as a TPoint of wehre you click, and then make a function that surches for the color with a box of 20 or so around the point where you clicked. then use the TPA and do High(TPA) if that equals over 0 then you know the tree is still there :] that way you can free up the mouse.
    Believe it or not, this was originally what I was attempting to do, or something along those lines, suggested by Nava2, . Now that I have a good example, I think I'm going to try and rework a bit to get it working, thanks.

  9. #9
    Join Date
    Dec 2006
    Location
    Canada, BC
    Posts
    728
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    no problem glad i could help. i actualy just wrote it myself to so its still alittle buggy in my script. but on its own it works good xP

    what you actualy should also do that i did is write a reset variables function like this:
    SCAR Code:
    procedure ResetTreeVariables; // Reseting the Tpoint to a place where the color will never be found.
    begin
      TreePoint := IntToPoint(0, 0); //Position(0, 0); Outside of the RS window, where the page is Black.
      TreeColor := 16777215; // White
    end;

    i would sudgest putting that at the end of the wood cutting part of your script. it will just cause problems if a tree is cut down, so you walk to a new tree via the map or something, and then the point is over another tree. it will think the tree was not cut down and will just sit there. so yeah you might just need to experement with it like im doing ;D
    Lance. Da. Pants.

  10. #10
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    Quote Originally Posted by lancerawks View Post
    i would sudgest putting that at the end of the wood cutting part of your script. it will just cause problems if a tree is cut down, so you walk to a new tree via the map or something, and then the point is over another tree. it will think the tree was not cut down and will just sit there. so yeah you might just need to experement with it like im doing ;D
    Good suggestion, thanks a lot.

  11. #11
    Join Date
    Oct 2007
    Location
    Denmark
    Posts
    409
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    I've made this for a Varrock cutter I'm working on:

    SCAR Code:
    function FollowTree(W: TPoint): TPoint;
    var
      T, T2: TPoint;
      TPA: array of TPoint;
      nx, ny, M, Col: Integer;
      Run: Boolean;
    begin
      Col := ReturnCol;
      T := W;
      Wait(400);
      MarkTime(M);
      repeat
        FindColorsTolerance(TPA, 5753055, 715, 105, 731, 110, 15);
        if (Length(TPA) > 10) then
          Run := True
        else
          Run := False;
        FindColorTolerance(T.x, T.y, Col, T2.x - 15, T2.y - 15, T2.x + 15, T2.y + 15, 5);
        if Run then
          Wait(140)
        else
          Wait(400);
        FindColorTolerance(T2.x, T2.y, Col, T.x - 15, T.y - 15, T.x + 15, T.y + 15, 5);
        nx := T.x - T2.x;
        ny := T.y - T2.y;
        if (nx < 0) then
          nx := nx * -1;
        if (ny < 0) then
          ny := ny * -1;
        if InRange(nx, 0, 3) and InRange(ny, 0, 3) then
        begin
          Result := T;
          Break;
        end;
      until(TimeFromMark(M) > 7000);
    end;

    As you can see there's a lot of ways of doing this. Use your imagination

  12. #12
    Join Date
    Apr 2007
    Location
    The Netherlands
    Posts
    5,553
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by lancerawks View Post
    what i did in my yew cutter is save the color at the point where you click, as well as a TPoint of wehre you click, and then make a function that surches for the color with a box of 20 or so around the point where you clicked. then use the TPA and do High(TPA) if that equals over 0 then you know the tree is still there :] that way you can free up the mouse.

    Ill post you my code just to give you an example of what im talking about:

    SCAR Code:
    function TreeCutDown : Boolean; // Surches for the same Color, with alittle tolerance, within a 20x20 pixle box. The shifting of the screen should not have moved the point so far that it would not be found
    var
      TPA : TPointArray;
    begin
      FindColorsTolerance(TPA, TreeColor, TreePoint.x - 20, TreePoint.y - 20, TreePoint.x + 20, TreePoint.y + 20, 3);
      Writeln('Tree Found, High(TPA) = ' + IntToStr(High(TPA)));
      if High(TPA) >= 0 then
      begin
        Result := False;
      end;
      if High(TPA) <= 0 then
      begin
        Writeln('Tree Has Been Cut Down.');
        Result := True;
      end;
    end;

    function CutTree : Boolean;
    begin
      //bla bla bla
      Mouse(x, y, 2, 2, true);
      TreePoint := IntToPoint(x, y);
      TreeColor := GetColor(x, y);
      /bla bla bla
    end;

    begin.
      CutTree;
      repeat
        Wait(3000);
      until(TreeCutDown);
    end;

    this probably will be confuseing if you dont understand how to use TPA's yet, but maby after a few tutorials you will figure it out ;D if youd like i could show you a few TPA tutorials that helped me understand it

    Edit: sorry i didnt read through your script, just read your question. its ovious you know how to use TPA's lol you should understand this fine
    LOL, I got the exact same idea. =/
    ~Hermen

  13. #13
    Join Date
    Dec 2007
    Posts
    2,766
    Mentioned
    2 Post(s)
    Quoted
    37 Post(s)

    Default

    Quote Originally Posted by cycrosism View Post
    All you have told it to do is to find a color then check the uptext and if it is 'illow' it will click. The colors wont be exact so your getcolor method wont work as you want it to, and it will just keep clicking the tree.

    Try something like:

    SCAR Code:
    //Tree finding and clicking here
    Repeat
     //Things to do while its cutting
    Until(not(IsUpText('illow')));
    Wouldn't work if you have mouse moving antiban (which is one of the most effective ones).

    What I'd do is count the number of willow logs before it starts then repeat antiban until inv is full.

    Or I would take the color of the axe while chopping, not equip the axe so it sees that if the color is gone, I'm not WC'ing anymore.

    Or the contrary as if many people use the axe it'll mess up, equip a weapon of some specific color and when it finds the color, i've stopped WC'ing.
    Last edited by Dervish; 05-23-2009 at 08:43 PM.

  14. #14
    Join Date
    Feb 2009
    Location
    AZ, USA
    Posts
    460
    Mentioned
    1 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by Coh3n View Post
    Okay so my problem is that the script spam-clicks the Willow tree instead of waiting until it's chopped down. Here it is:

    SCAR Code:
    program FirstScript;
     {.include SRL\SRL.scar}
     
    var
     HatchetDTM: Array of Integer;
     i, x, y: integer;

    procedure DeclarePlayers;
    begin
      HowManyPlayers := 1;
      NumberOfPlayers(HowManyPlayers);
      CurrentPlayer := 0;

      Players[0].Name := '';
      Players[0].Pass := '';
      Players[0].Nick := '';
      Players[0].Active := True;
      Players[0].Pin := '';
    end;

    procedure HatDTMs;
    begin
     SetArrayLength(HatchetDTM, 7);//[ 0]:= Bronze, [6]:= Rune
       HatchetDTM[0]:= DTMFromString('78DA630C646260D8C4C8800C7CAC9519F8813' +
           '44C94D113A86617AA1A982C5C8D1B50CD36026ABC816AD6125013' +
           '0C54B38E809A504C3763A80921EC1E00949107EF');
       HatchetDTM[1]:= DTMFromString('78DA630C626260D8C4C8800C02BDBD19F8813' +
           '448F43F1030BA03D5EC47550391859140DA0DA8662B01355E4035' +
           '6B09A80906AA5947404D2850CD06026A42806AB6E157030033F30' +
           'C28');
       HatchetDTM[2]:= DTMFromString('78DA630C626260D8C8C8800CCAF3F318F8813' +
           '448F43F10307A02D5EC40550391859140DA0DA8660B01355E4035' +
           '6B09A80904AA5947404D28A69BB1AAD98A5F0D0090050C8D');
       HatchetDTM[3]:= DTMFromString('78DA63F4676260D8C0C8800C44454418F8813' +
           '448F43F1030BA03D5EC43550391859140DA05A8661701351E4035' +
           'EB09A80900AA5947404D28A69BB1AAD98A5F0D0095870B78');
       HatchetDTM[4]:= DTMFromString('78DA630C646260D8C8C8800C1C1CE319F8813' +
           '44C94D10DA8E600AA1A982C5C8D2B50CD0E026A3C806A36105013' +
           '0054B38E809A504C3763A80901AAD9865F0D00C5940824');
       HatchetDTM[5]:= DTMFromString('78DA63EC64626038C0C8800C9C829D18F8813' +
           '44C94B101A8E614AA1A982C8A9A7D04D4F402D5EC2742CD21026A' +
           '6A816AAEE05703006FA208C7');
       HatchetDTM[6]:= DTMFromString('78DA630C606260D8C8C8800C5CA25319F8813' +
           '44C94D11DA8662FAA1A982C5C8D1B50CD56026ABC806AD6125013' +
           '0C54B38E809A504C3763A80901AAD9865F0D00E2D50845');
    end;

    procedure FindHatchet;
    var
      b: Boolean;
    begin
      for i:= 0 to 6 do
        if(FindDTM(HatchetDTM[i], x, y, MIX1, MIY1, MIX2, MIY2))then
          begin
            b:= True;// assign b:= True, now you know it's found.
            Break;// break the loop - once found, no need to keep going through.
          end;
          begin
            if(b = True)then// since it's only a check, = is needed, rather than :=
              Writeln('Found hatchet, walking to trees.')
            else
              Writeln('Didn''t find hatchet, logging out.');
          end;
    end;

    function ChopTrees: Boolean;
    var
     TPA: TPointArray;
     t: Boolean;
     fx, fy, TheColor: Integer;
     
    begin
     Result:= False
      if not LoggedIn then Exit;
     
     SetArrayLength(TPA, 1);
      TPA[0]:= Point(x, y);
     begin
      repeat
       begin
        x:= MSCX;
        y:= MSCY;
        if(FindColorSpiralTolerance(x, y, 8497045, MSX1, MSY1, MSX2, MSY2, 5))then
          begin
          MMouse(x,y,4,4);
            Wait(100 + Random(50));
          if((Pos('illow', RS_GetUpText) <> 0) and (Pos('hop', RS_GetUpText) <> 0))then
            begin
              TheColor:= GetColor(x, y);
              Mouse(x, y, 3, 3, True);
              repeat
                Wait(50);
              until(not FindColor(fx, fy, TheColor, x - 10, y - 10, x + 10, y - 10));
            end;
            t:= True
          end;
       end;
      until(InvFull or not LoggedIn);
       begin
        if(t = True)then
         Writeln('Found trees, starting to chop.')
        else
         Writeln('Didn''t find trees, logging out.');
       end;
     end;
    end;

    begin
     SetupSRL;
     ActivateClient;
     DeclarePlayers;
     LoginPlayer;
     SetAngle(True);
     HatDTMs;
     FindHatchet;
     ChopTrees;
    end.

    If anyone has any suggestions, that would be great. Thanks.
    What you need to need to do if you want it to wait until it's chopped is make another function/procedure and call it WaitTilChopped; or something and call it after you click when the uptext says 'illow'. Making the WaitTilChopped function might be a little hard.
    Last edited by Ogre; 05-24-2009 at 02:56 AM.
    Is your account in an old-school random? Help SRL-OSR solve randoms!

  15. #15
    Join Date
    Dec 2006
    Location
    Canada, BC
    Posts
    728
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by Hermen View Post
    LOL, I got the exact same idea. =/
    Great minds think alike :]

    Edit: and no offence to anyone but i would not go with keeping your mouse over and waiting for the IsUpText('ew') to change. if you use my method then you can preform antiban, move your mouse around, even move the screen around and stuff as long as the antiban puts your screen back into the same position it was before =o
    Lance. Da. Pants.

  16. #16
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    Thanks everyone for the replies and suggestions.

    Quote Originally Posted by Frt View Post
    As you can see there's a lot of ways of doing this. Use your imagination
    Lol apparently.

    Quote Originally Posted by Ogre View Post
    What you need to need to do if you want it to wait until it's chopped is make another function/procedure and call it WaitTilChopped; or something and call it after you click when the uptext says 'illow'. Making the WaitTilChopped function might be a little hard.
    Good idea, thanks.

    Quote Originally Posted by lancerawks View Post
    Edit: and no offence to anyone but i would not go with keeping your mouse over and waiting for the IsUpText('ew') to change. if you use my method then you can preform antiban, move your mouse around, even move the screen around and stuff as long as the antiban puts your screen back into the same position it was before =o
    I eventually decided to do it this way, as it is simple and I understand it. Since this is my first script, I don't want to get ahead of myself. I'm just gonna go slow and simple until I start understanding all the code better. Thanks.

  17. #17
    Join Date
    Jan 2008
    Location
    California, US
    Posts
    2,765
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    If you use my method, it's sex . You can also detect which axe you are hitting it with without looking in inventory or anything .

  18. #18
    Join Date
    Dec 2006
    Location
    Canada, BC
    Posts
    728
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    lol your way is good Da Owner, but its reflection. i dont know how to use reflection =[ so im all lost haha. i havent even downloaded the reflection include ever o.O
    Lance. Da. Pants.

  19. #19
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    Quote Originally Posted by Da 0wner View Post
    If you use my method, it's sex . You can also detect which axe you are hitting it with without looking in inventory or anything .
    Lol I know. Like lancerawks said, it's reflection, and I don't know it yet. Also I want to learn the non-reflection stuff because Nava2 said it's too simple, and probably wouldn't get me into SRL-Members. But once I am a member, reflection is one of the first things I'll be looking at.

    Quote Originally Posted by lancerawks View Post
    lol your way is good Da Owner, but its reflection. i dont know how to use reflection =[ so im all lost haha. i havent even downloaded the reflection include ever o.O
    I'm in the same boat as you, my friend.

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
  •