SRL Archive - Archive

lovebotter - SRL Member Application


Thomas

2015-04-10 05:19:34

How Long have You Played Runescape?
10 Year(s)


Are you affilated in anyway with Jagex LTD?
No

Were you Referred to SRL?
No, not via a referring system. An IRL friend told me about it around the clusterflutter era IIRC.


What is your general programming knowledge?
Basic java and html, not much else besides that. Starting out with OGL scripts currently.


Are you a member of any other communities?
Member on powerbot forum (mainly using that for goldselling currently)
On RuneScape I'm member of the DGS clan.


Tell us about yourself…
From: lovebotter
I am a 23 year old, Belgian medicine student, 2nd year of my masters education.
Interests are my fraternity, F1 and some geek stuff, mainly computer hardware (sucker for ITX systems, mechanical keyboards and Lian Li computer cases), games I play are CS:S, RuneScape (only staking lately if my accounts aren't botting) and CS:GO.

I used to be somewhat of a known DG'er when EoC got released.

That's about all I can think of currently.



Please show us one (or multiple) of your scripts.
[simba]program Vials;
{$DEFINE SMART}
{$I SRL-6/SRL.Simba}
{$i srl-6/lib/misc/srlplayerform.simba}

var
vialCount, vialsPH, wellCount: integer;
timer: TTimeMarker;
portATPA: T2DPointArray;

const
timeOut = 33500;

procedure declareplayers();
var
i: integer;
begin
players.setup(playerForm.playerNames, playerForm.playerFile);
currentPlayer := 0;
for i := 0 to high(players) do
with players[i] do
begin
World := strToInt(playerForm.players[i].settings[0]);
ismember := true;
booleans[0] := strToBool(playerForm.players[i].settings[1]);
end;
end;

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Vials';
editBoxLabels := ['World'];
editBoxDefaults := ['124'];
checkBoxLabels := ['Placewell'];
checkBoxDefaults := ['True'];
end;
end;

procedure findNormalrandoms;
begin
exitSquealOfFortune;
ClaimSpinTicket;
closePollWindow();
end;

procedure afk(duration: integer);
begin
if duration = 1 then
wait(gaussRangeInt(50, 160))
else
wait(gaussRangeInt(1100, 2200));
end;

procedure antiban;
var
i: integer;
begin
i := random(1100);
case i of
1..3:
begin
hoverRandomSkill();
sleep(1);
end;
4..40: mouseMovingObject;
41..60: sleepAndMoveMouse(randomRange(100, 1100));
61..120:
begin
mouseOffClient(4);
afk(2);
end;
121..140: afk(1);
141..200: randomMouseSpeed(2, 30, 40);
end;
end;

procedure progressReport;
begin
vialsPH := round((vialCount * (3600.0 / (getTimeRunning / 1000.0))));
writeln(padR('Running For: ' + timeRunning, 60));
writeln(padR('Vials: ' + groupDigits(vialCount, ','), 37) + padR('Vials/H: ' + groupDigits(vialsPH, ','), 23));
writeln(padR('Wells placed: ' + groupDigits(wellCount, ','), 37));
end;

procedure setCamera;
begin
minimap.clickCompass;
afk(2);
mainScreen.setAngle(MS_ANGLE_HIGH);
afk(2);
mainscreen.setZoom(true);
end;

function banking(preset: integer): boolean;
var
button: integer;
backpackResult: boolean;
begin
if not isLoggedIn then
exit;
timer.start;
if preset = 1 then
button := BANK_BUTTON_PRESET_1
else
button := BANK_BUTTON_PRESET_2;
begin
repeat
if bankscreen.open(14) then
break
else
setCamera;
if (timer.getTime > timeOut) or (not isLoggedIn) then
exit;
until (bankScreen.isOpen or pinscreen.isOpen);
pinScreen.Enter(players[currentPlayer].bankPin);
repeat
if bankScreen.clickButton(button) then
break;
if (timer.getTime > timeOut) or (not isLoggedIn) then
exit;
until (not bankScreen.isOpen);
end;
result := true;
end;

function findPortable: boolean;
var
i, x, y: integer;
portTPA: TPointArray;
begin
if not isLoggedIn() then
exit;
findColorsSpiralTolerance(x, y, portTPA, 3031949, mainScreen.getBounds(), 10, colorSetting(2, 0.3, 1.7));
if length(portTPA) < 1 then
begin
result := false;
writeln('No portTPA found');
exit;
end;
portATPA := portTPA.toATPA(35, 35);
portATPA.filterBetween(0, 20);
portATPA.sortFromSize(25, true);
smartImage.debugATPA(portATPA);
for i := 0 to high(portATPA) do
begin
middleTPAEx(portATPA[i], x, y);
mouse(x, y, 10, 11, MOUSE_MOVE);
if isMouseOverText(['well', 'ortab'], 2500) then
begin
result := true;
exit;
end
else
result := false;
end;
portATPA := [];
end;

function renewPortable: boolean;
var
x, y: integer;
begin
if not isLoggedIn() then
exit;
writeln('Renewing Portable');
afk(2);
sendKeys('w', 200, 40);
if conversationBox.isOpen(5500) then
begin
conversationBox.selectOption(1);
wellCount := wellCount + 1;
afk(2);
portATPA := [];
end;
if findPortable then
result := true;
end;

function getVials: boolean;
var
time, x, y, amount: integer;
begin
if not isLoggedIn then
exit;
tabBackpack.Open;
timer.start;
amount := gaussRangeInt(28, 49);
if not tabBackpack.isEmpty then
exit
else
begin
if isMouseOverText(['well', 'ortab'], 3300) then
fastClick(MOUSE_RIGHT);
if (chooseOption.isOpen(2500)) then
chooseOption.select(['ake vials', 'vials', 'vial'], 2200);
repeat
afk(1);
if (not isLoggedIn) or (timer.getTime > timeOut) then
exit;
until bankScreen._enterAmount(amount, 5500);
repeat
afk(1);
if (not isLoggedIn) or (timer.getTime > timeOut) then
exit;
until tabBackpack.isFull;
vialCount := vialCount + 28;
result := true;
end;
end;

procedure setup;
begin
disableSRLLog := true;
initPlayerForm();
runPlayerForm();
if (not playerForm.isScriptReady) then
terminatescript;
declareplayers();
smartShowConsole := false;
disableSRLDebug := true;
smartEnableDrawing := true;
setupSRL;
if not isLoggedIn then
begin
if not players[currentPlayer].login then
terminateScript;
writeln('Just loggedin, waiting a bit');
afk(2);
end;
mouseSpeed := 35;
setCamera;
findNormalrandoms;
timer.start;
tabBackpack.Open;
end;

procedure mainloop;
var
i: integer;
nowell: integer;
begin
if not isLoggedIn then
begin
afk(2);
writeln('Attempting to log back in');
repeat
try
players[currentPlayer].login;
inc(i);
except
end;
if (i = 7) then
begin
i := 0;
players.next(false);
end;
until isLoggedIn;
setCamera;
timer.start;
end;
while findPortable do
begin
findNormalrandoms;
if getVials then
begin
findNormalrandoms;
if banking(1) and tabBackpack.isEmpty then
begin
findNormalrandoms;
progressReport;
antiban;
end;
end;
end;
while (not findPortable) do
begin
findNormalrandoms;
if players[currentPlayer].booleans[0] then
begin
if banking(2) and tabBackpack.isEmpty then
inc(nowell);
if (nowell = 3) then
begin
writeln('Failed withdrawing, shutting down');
players[currentPlayer].logout;
terminateScript;
end;
if tabBackpack.isItemInSlot(1) then
begin
findNormalrandoms;
antiban;
if renewPortable then
writeLn('renewed portable');
end
end
else
antiban;
end;
if timer.getTime > 187600 then
begin
writeln('nothing has happened for too long, shutting down');
players[currentPlayer].logout;
terminateScript;
end;
end;

begin
setup;
while (players.getActive() > 0) do
mainloop;
end.
Start a barb outpost bankchest. Portable well on action bar assignen to w key. Empty invent bank preset 1 and portable well preset 2.
Script is able to obtain about 23k vials/hr, so almost 1m/hr if you use 1 account to place them while others only use them without placing. Works 2hr+ for me (before running out of wells). Little requirements.

I might have copied some from ashaman, but probably I've rewritten most of it by now.

Currently working on a herblore script with portable well support. But would like to release it either in JR/Members section.

Thomas

2015-04-10 05:25:18

If anyone has any further questions just ask them and I'll reply asap.
Regards,
Thomas

Thomas

2015-04-10 05:37:32

Just occured to me I could change my afk procedure a little. So instead of having duration 1 or 'else' as options I could make it work with any duration and make a gaussian random around that.

Somewhat like:

if duration = i then
wait gaussint 0,8*i to 1,2*i;

3Garrett3

2015-04-10 10:05:46

Please edit the OP instead of triple posting. It's key to look professional, especially on your application ;).

As for the script, I'll look through it now and let you know what I think.

Edit:

I've put some mostly negative criticism below. It is entirely meant as constructive criticism though, so don't take it that I'm an awful person or anything.

I see you have "FindNormalRandoms" and you use outdated SRL methods that do nothing anymore. I think the "catch-all" SRL method is closeAd(); or something like that now, it closes any popups. So you don't really need FindNormalRandoms.

I also see your "afk" procedure, it waits either 50-160ms or 1-2s. The first wait is literally the blink of an eye, and will not be noticed in the running of your script. I see that you use it as a method in your antiban. I don't think it will help you at all in that matter, because being 50ms longer to do something is not going to make you appear more human. On this same topic, I see you use "weird" numbers for your random waits. I see this a lot in new scripts, the whole point of randomizing a number is that it's random. If you random 1000 or random 1100 it's not making any difference in the script (100ms in Runescape is literally nothing). It's not going to hurt your script, but I think new scripters get the idea "If I make my random(1243) then it's way more random than random(1000)". They're the same for Runescape.

In your banking procedure, you have: if bankscreen.open(14) then. I'm assuming that instead of using the SRL constant you've found the value and it's 14 right now? That's poor practice because if for some reason SRL updates bankscreens you could get screwed. It's much better to use the constants by name so that if BANK_WHATEVER gets changed from 14 to 15, you'll still be calling BANK_WHATEVER and your script will run properly.

I think, based on your banking procedure, that you understand that the result of a function is false by default. It's sloppy to have result := false in your script when it's already false. You do this in your findPortable function if the length of TPA is 0, but it isn't needed. If you really want to make sure that it's returning false, you can do it in one line with Exit(False);.

Following this, there's a lot of weird logic that I can't really follow. I'm lost at why you have the ATPA a global variable because you never actually do anything with it. You hover the mouse over it in one function and then just check that the text is there before moving the mouse away. I also see you have a gauss range from 28-49, is it common to type 39 in the box? Gauss gives you a normal distribution over the range, so 39 will come up more than 28 or 49. I don't really see the point in that, it doesn't seem to emulate human activity to me, which means it's more bannable than it needs to be. There's also a "bankscreen._enteramount" but I don't think you're opening the bank by clicking a well, I'm not sure though so maybe.

I'm out of time to keep looking, but I'd say that you should really revisit the logic of your script. When you write some code, make sure you understand the point of what you're writing. Each line should have a purpose, and right now I don't think you've thought about that when writing. That's perfectly fine, I still find myself making messy code and rewriting more than I should because I was lazy. But it's something I'd like to see a little more of in your script. I'll just hold off my vote in case this comes across as really negative, and I'll look again later. There are some positives, like you use TPAs, which is really nice.

I wish you the best of luck.

Thomas

2015-04-10 10:24:33

From: 3Garrett3
Please edit the OP instead of triple posting. It's key to look professional, especially on your application ;).

As for the script, I'll look through it now and let you know what I think.


Posted it on iPhone, wouldn't let me for some reason. The Posts probably have some weird autocorrects aswell.
Please keep in mind it's my first script for simba.

Turpinator

2015-04-10 10:57:48

Soo. Yeah, its a no from me.

Its not that the script is bad (which i havent looked at), its that i dont know who you are. Community involvement is key for me.

Thomas

2015-04-10 11:05:38

From: Turpinator
Soo. Yeah, its a no from me.

Its not that the script is bad (which i havent looked at), its that i dont know who you are. Community involvement is key for me.


Allright :) feel free to look at the script and give me some feedback whenever you have some spare time. Suppose I could get involved in the community more, just dont have much time for that.

Thomas

2015-04-10 14:42:28

From: 3Garrett3
Please edit the OP instead of triple posting. It's key to look professional, especially on your application ;).

As for the script, I'll look through it now and let you know what I think.

Edit:

I've put some mostly negative criticism below. It is entirely meant as constructive criticism though, so don't take it that I'm an awful person or anything.

I see you have "FindNormalRandoms" and you use outdated SRL methods that do nothing anymore. I think the "catch-all" SRL method is closeAd(); or something like that now, it closes any popups. So you don't really need FindNormalRandoms.

Didn't know about the new catch all existed! Had not seen it before. I have to say I just learned those methods from other scripts (ashamans mainly).

I also see your "afk" procedure, it waits either 50-160ms or 1-2s. The first wait is literally the blink of an eye, and will not be noticed in the running of your script. I see that you use it as a method in your antiban. I don't think it will help you at all in that matter, because being 50ms longer to do something is not going to make you appear more human. On this same topic, I see you use "weird" numbers for your random waits. I see this a lot in new scripts, the whole point of randomizing a number is that it's random. If you random 1000 or random 1100 it's not making any difference in the script (100ms in Runescape is literally nothing). It's not going to hurt your script, but I think new scripters get the idea "If I make my random(1243) then it's way more random than random(1000)". They're the same for Runescape.

Those afk1's are only used in repeats. I lowered the wait amounts untill they worked fine for my connection. I do plan on working on a proper 'afk' procedure for future scripts; so I can type something like this afk(1000); and it would wait gaussrandomint(0.5*1000,1,5*1000)
One reason I pick random numbers is because for me it's less difficult to read 11500 then it is to read 10000.



In your banking procedure, you have: if bankscreen.open(14) then. I'm assuming that instead of using the SRL constant you've found the value and it's 14 right now? That's poor practice because if for some reason SRL updates bankscreens you could get screwed. It's much better to use the constants by name so that if BANK_WHATEVER gets changed from 14 to 15, you'll still be calling BANK_WHATEVER and your script will run properly.

I found the bank constant in the includes yes, I could add a userform 'select bank' rather quickly. But this script will run best at BA bank or perhaps shanty

I think, based on your banking procedure, that you understand that the result of a function is false by default. It's sloppy to have result := false in your script when it's already false. You do this in your findPortable function if the length of TPA is 0, but it isn't needed. If you really want to make sure that it's returning false, you can do it in one line with Exit(False);.

Didn't know the Exit(False); could have been used, but yes I just wanted to make sure it returned false. Didn't know it was so by default.

Following this, there's a lot of weird logic that I can't really follow. I'm lost at why you have the ATPA a global variable because you never actually do anything with it. You hover the mouse over it in one function and then just check that the text is there before moving the mouse away. I also see you have a gauss range from 28-49, is it common to type 39 in the box? Gauss gives you a normal distribution over the range, so 39 will come up more than 28 or 49. I don't really see the point in that, it doesn't seem to emulate human activity to me, which means it's more bannable than it needs to be. There's also a "bankscreen._enteramount" but I don't think you're opening the bank by clicking a well, I'm not sure though so maybe.

That atpa was global because I cleaned out my array whenever I placed a new well (different procedure then the findportable), because I assumed i had a memory leak of some sort where my array just kept growing and growing, so I called the array := [] in the renew procedure. It's a duplicate and unneeded because I clean it once it find a correct well with mouseover.
I used a gaussian because whenever I did it myself I almost never type 28 but 30-39 or something similar with numpad. Most often I just type 33 or 333. I should have used 30-36 range then or something similar.
The enter amount is actually a bankscreen function, same as when you enter an amount to withdraw from bank, but where you enter how many vials you want to withdraw (28+). Srl didn't have a conversationbox procedure for it. And I'm pretty sure I used the only correct method for that.
If the mouseover text is correct, the findport procedure returns true, and it continues with rightclicking, no mouse movement there. I wasn't sure how the make it better as I wanted to confirm the ATPA it generated was indeed the well with mouseover function.


I'm out of time to keep looking, but I'd say that you should really revisit the logic of your script. When you write some code, make sure you understand the point of what you're writing. Each line should have a purpose, and right now I don't think you've thought about that when writing. That's perfectly fine, I still find myself making messy code and rewriting more than I should because I was lazy. But it's something I'd like to see a little more of in your script. I'll just hold off my vote in case this comes across as really negative, and I'll look again later. There are some positives, like you use TPAs, which is really nice.

I know pretty much the purpose of every line that has to do with banking/making vials/portable well. That being said, I know there is quite some unneeded and duplicate code.

I wish you the best of luck.


I'm not looking for excuses, and appreciate your feedback! Think I covered all.

Ian

2015-04-10 15:35:04

From: lovebotter
I know pretty much the purpose of every line that has to do with banking/making vials/portable well. That being said, I know there is quite some unneeded and duplicate code.

It's good that you know what the code does, but ideally code should be easy to follow for anyone who reads it too. One of the great advantages of the open source nature of the scripts released to the community is that anyone can open a script, read through it, and learn from it. If a script's logic is needlessly complicated then it makes it less useful for people to learn from (or find bugs in, which they might decide are serious enough to not trust their accounts to the script)

Hopefully this feedback was helpful, let me know if I should clarify anything. Once I have some more free time I'll read through the whole script and see if I have additional suggestions to the ones already given. :)

cosmasjdz

2015-04-10 16:01:15

Overall weak, basic script(4 functions not counting standard ones like declare players. And in one of them main function is bankscreen.open so baicly 3 then). I agree to everything garrett said in his post. Also havent seen you being very active on forums too, althrough name is familiar.

In my eyes you need much more practice to feel scripting. To develop your own logic flow and scripting style, antiban methods, write few custom functions, develop failsafes by extended testing. Basicly need advanced stuff. First impression is script glued from some basic functions most of users use, no real testing done.

function findPortable: boolean;
var
i, x, y: integer;
portTPA: TPointArray;
begin
if not isLoggedIn() then
exit;
findColorsSpiralTolerance(x, y, portTPA, 3031949, mainScreen.getBounds(), 10, colorSetting(2, 0.3, 1.7));
if length(portTPA) < 1 then
begin
result := false;
writeln('No portTPA found');
exit;
end;
portATPA := portTPA.toATPA(35, 35);
portATPA.filterBetween(0, 20);
portATPA.sortFromSize(25, true);
smartImage.debugATPA(portATPA); // Bam crash here, no failsafe if atpa length<1
for i := 0 to high(portATPA) do
begin
middleTPAEx(portATPA[i], x, y);
mouse(x, y, 10, 11, MOUSE_MOVE);
if isMouseOverText(['well', 'ortab'], 2500) then
begin
result := true;
exit;
end
else
result := false;
end;
portATPA := [];
end;

And as you said its your first script it isnt perfect.

I suggest to get yourself a challenge. Think of script you always dreamed about and atleast try to make it. Dont pick eazy one, pick hard and complex one and youll learn so much trying to solve problems youll encounter during process, and believe me at first it might look ridiculously hard to make, but at the end youll think how dumb you was 2-3weeks ago having problems with such simple problems/tasks:) Its 100 times more beneficial than making bankstanding script. Challenges makes you better.

bonsai

2015-04-10 16:57:09

I know lovebotter. He's been very active in the bonsaiFighter thread for a few months now. That might be why some people don't recognize the name (if you don't read that thread).

He's one of few who invested the time to learn the code and modify it to suit their needs. And he posted/supported his mods for others to enjoy. I'm looking to merge some if it into the public release.

All in all, I think he's member material, just maybe a little too early. I agree, the scripting is a little basic at this point.

Thomas

2015-04-10 17:20:23

I'll have to be honest and say I really dont have the time to make allot of scripts, let alone making Challenging ones that keep me thinking about scripting at night. As i've said in the app: I am a medicine student, and besides helping out some other users and editing scripts or making basic scripts myself I wont be of much use for the community. I did not Think every srl member was required to have extensive scripting/coding knowlegde, if I knew I would not have bothered making an app.
I can and will however help users on the forums if I have the time to do so.

@cosmasdjz thanks for the feedback about the atpa, actually that line isn't needed at all for the script, and could be removed. But then again I could fix it with a if … Atpa > 0 then …

bonsai

2015-04-10 17:51:14

From: lovebotter
I'll have to be honest and say I really dont have the time to make allot of scripts, let alone making Challenging ones that keep me thinking about scripting at night. As i've said in the app: I am a medicine student, and besides helping out some other users and editing scripts or making basic scripts myself I wont be of much use for the community. I did not Think every srl member was required to have extensive scripting/coding knowlegde, if I knew I would not have bothered making an app.
I can and will however help users on the forums if I have the time to do so.

cosmasdjz: thanks for the feedback about the atpa, actually that line isn't needed at all for the script, and could be removed. But then again I could fix it with a if … Atpa > 0 then …


Of course, and I think most people appreciate that. I don't think it's the complexity of the script either as much as making it as bullet proof as you can and nice for presentation.

When you applied for med school, did you spend a lot of time on the apps? I'm guessing you went crazy making sure they were perfect.

I don't know about others but I try to look at a combination of community and technical skills. Things like:

* Has this person been around a while?
* Are they rude or condescending?
* Do they post more questions or answers?
* Are those questions challenging or basic?
* Are the answers right/wrong/clear?
* Do they have a public script that they support?

Then I may give bonus points if they show a lot of technical skills or bring something special to the community.

The Mayor

2015-04-11 21:50:12

I'd also like to add in that lovebotter has make a bunch of SRL-6 bug reports and suggestions for new features over the past month. I didn't think the script was that bad; it's actually pretty darn good for a first script.

However, I do have this weird feeling that you will be one of the people that gets the SRL member rank and then disappears ;)

Lipcot

2015-04-11 23:41:37

I voted NO. I just think this was too early. dont loose faith! if you dont get into members just learn a bit more and you can re-apply, with your current activity if you get a little better at scripting you'll get through, the script is just too simple

Thomas

2015-04-12 03:37:18

From: The Mayor
I'd also like to add in that lovebotter has make a bunch of SRL-6 bug reports and suggestions for new features over the past month. I didn't think the script was that bad; it's actually pretty darn good for a first script.

However, I do have this weird feeling that you will be one of the people that gets the SRL member rank and then disappears ;)


I wont be leaving or disappear, but like I have posted a few Posts up I wont have much time for scripting. But I will help out others whenever I have the chance to do so!

About the script being easy/basic:
It's a script that works well and can make close to 1m/hr on newly made accounts and you only need 3M for it to run 500 minutes and it hasnt failed for me yet (the latest versions).

I could release my Herblore script later but also that is a rather basic script and mostly just a tweaked version of ashamans script.

The Mayor

2015-04-12 04:38:00

From: lovebotter
I wont be leaving or disappear, but like I have posted a few Posts up I wont have much time for scripting. But I will help out others whenever I have the chance to do so!

About the script being easy/basic:
It's a script that works well and can make close to 1m/hr on newly made accounts and you only need 3M for it to run 500 minutes and it hasnt failed for me yet (the latest versions).

I could release my Herblore script later but also that is a rather basic script and mostly just a tweaked version of ashamans script.


I wouldn't say it's that 'basic' TBH. You've got some decent logic in there; demonstration of while/for/repeat and the conditionals. It's just the activity aspect (for me).

Thomas

2015-04-12 04:58:01

From: The Mayor
I wouldn't say it's that 'basic' TBH. You've got some decent logic in there; demonstration of while/for/repeat and the conditionals. It's just the activity aspect (for me).



Well others seem to think it is rather basic it seems. I understand ur worries about activity, but I can only assure you I wont be leaving overnight. I doubt I will be releasing a script a month or something, but I will be keeping active by helping others.

Clarity

2015-04-12 22:19:02

Cool, I was in DGS as well for awhile. Maybe we've crossed paths before.
Others have already covered what I'd point out. I'm glad that you aren't giving up and I'm definitely looking forward to your future contributions :)

See you around!

Thomas

2015-04-13 01:09:49

From: Clarity
Cool, I was in DGS as well for awhile. Maybe we've crossed paths before.
Others have already covered what I'd point out. I'm glad that you aren't giving up and I'm definitely looking forward to your future contributions :)

See you around!


If you look at my profile pic you'll probably figure out who I am, if you know the character from the tv show entourage.

The Mayor

2015-04-13 02:09:42

I ended up voting yes. Good luck :D

Thomas

2015-04-13 02:35:11

From: The Mayor
I ended up voting yes. Good luck :D


Thanks!
Quick question;
If this application does get rejected, I assume I would require to write a new script?

The Mayor

2015-04-13 03:04:58

From: lovebotter
Thanks!
Quick question;
If this application does get rejected, I assume I would require to write a new script?


No, but you have to wait a minimum of 2 weeks.

Thomas

2015-04-13 13:30:08

Currently working on a new herblore script. Will post it in juniors once I've done a test run. (Haven't run it yet)
And once I've gathered enough feedback there I'll most likely make it public.
program Herblore;
{$DEFINE SMART}
{$I srl-6/srl.simba}
{$i srl-6/lib/misc/srlplayerform.simba}

var
potionCount: integer;
FailTimer: TTimeMarker;

const
VERSION = 0.9;
TIMEOUT = 20000;
SPF_BREAK = 0;
SPF_BREAK_DURATION = 1;

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Herblore';
editBoxLabels := ['Break after', 'Break for', 'World'];
editBoxDefaults := ['120', '5', ''];
checkBoxLabels := ['Manage supplies'];
checkBoxDefaults := ['False'];
end;
end;

procedure declarePlayers();
var
i: Integer;
begin
players.setup(playerForm.players);
currentPlayer := 0;
for i := 0 to high(players) do
with players[i] do
begin
players[i].integers[SPF_BREAK] := strToInt(playerForm.players[i].settings[0]) * 60000;
players[i].integers[SPF_BREAK_DURATION] := strToInt(playerForm.players[i].settings[1]) * 60000;
world := strToInt(playerForm.players[i].settings[2]);
players[i].booleans[0] := strToBool(playerForm.players[i].settings[3]);
end;
end;

procedure debugSPFSettings();
var
i: integer;
begin
writeln('');
writeln('Player file: ', playerForm.playerFile);
for i := 0 to high(players) do
begin
writeln('Break After: ', players[i].integers[SPF_BREAK]);
writeln('Break For: ', players[i].integers[1]);
writeln('Manage supplies: ', players[i].booleans[0]);
writeln('');
end;
end;

procedure findNormalrandoms();
begin
claimTicket;
if (not bankScreen.isOpen()) then
closepopup();
tabBackpack.Open;
end;

function loginCheck(): boolean;
begin
if isLoggedIn() then
exit(true);
if not players[currentPlayer].login() then
exit(false);
findNormalrandoms();
mouseSpeed := 35;
wait(gaussRangeInt(1000, 2000));
minimap.clickCompass();
exit(true);
end;

procedure antiban();
begin
case random(2000) of
1..3:
begin
hoverRandomSkill();
end;
4..40: mouseMovingObject;
41..60: sleepAndMoveMouse(randomRange(100, 2000));
61..120:
begin
mouseOffClient(4);
wait(gaussRangeInt(1000, 2000));
end;
121..140: wait(gaussRangeInt(1000, 2000));
141..200: randomMouseSpeed(2, 30, 40);
end;
end;

procedure takeBreak();
begin
if (players[currentPlayer].worked.getTime() > players[currentPlayer].integers[SPF_BREAK]) then
begin
writeLn('Taking a ~' + toStr(players[currentPlayer].integers[SPF_BREAK] / 60000) + ' minute break');
players[currentPlayer].exitToLobby();
mouseOffClient(OFF_CLIENT_RANDOM);
wait(players[currentPlayer].integers[SPF_BREAK_DURATION] + random( - 60000, 180000));
loginCheck;
players[currentPlayer].worked.start();
FailTimer.start();
end;
end;

function banking(preset: integer): Boolean;
begin
if not isLoggedIn then
exit(False);
FailTimer.start();
begin
repeat
if bankscreen.open(BANK_GE) then
break();
minimap.clickCompass();
if (FailTimer.getTime > TIMEOUT) or (not isLoggedIn()) then
exit(False);
until bankScreen.isOpen(2000) or pinscreen.isOpen();
if pinScreen.isOpen() then
pinScreen.enter(players[currentPlayer].bankPin);
repeat
if bankScreen.clickButton(preset) then
exit(True);
until (FailTimer.getTime > TIMEOUT) or (not isLoggedIn());
end;
end;

function makePotions(): boolean;
var
slot: integer;
begin
if not isLoggedIn then
exit;
FailTimer.start();
tabBackpack.Open();
repeat
case random(10) of
0..7: slot := 11;
8..9: slot := 12;
end;
if tabBackpack.mouseSlot(slot, MOUSE_MOVE) and isMouseOverText(['Use Clean']) then
begin
tabBackpack.mouseSlot(slot, MOUSE_LEFT);
wait(gaussRangeInt(100, 200));
case random(10) of
0..7: slot := 16;
8..9: slot := 17;
end;
if tabBackpack.mouseSlot(slot, MOUSE_MOVE) and isMouseOverText(['of water']) then
tabBackpack.mouseSlot(slot, MOUSE_LEFT);
end;
wait(gaussRangeInt(100, 200));
if (not isLoggedIn) or (FailTimer.getTime > TIMEOUT) then
exit;
until productionScreen.IsOpen(2000);
wait(gaussRangeInt(100, 200));
productionScreen.clickStart;
if tabBackpack.waitForShift(randomRange(5000, 7000)) then
exit(True);
end;

procedure progressReport();
var
potsPerHour: Integer;
begin
clearDebug();
potsPerHour := round((potionCount * 60) / (getTimeRunning() / 60000));
writeLn('|=========================================|');
writeLn(PadR('| Love Herblore v' + toStr(VERSION), 42) + '|');
writeLn(PadR('| Time: ' + timeRunning(TIME_ABBREV), 42) + '|');
writeLn(PadR('| Potions Made: ' + toStr(potionCount) + ' (' + toStr(potsPerHour) + ' PH)', 42) + '|');
writeLn(PadR('| Break in: ' + msToTime(players[currentPlayer].integers[SPF_BREAK] - players[currentPlayer].worked.getTime(), TIME_ABBREV), 42) + '|');
writeLn('|=========================================|');
end;

procedure mainloop();
var
FailCount: Integer;
begin
findNormalRandoms();
if banking(BANK_BUTTON_PRESET_1) and (not tabBackpack.isFull()) then
inc(FailCount);
if (FailCount = 4) then
begin
writeln('Failed withdrawing, shutting down');
players[currentPlayer].logout();
terminateScript();
end;
if tabBackpack.isFull() and makePotions() then
repeat
findNormalRandoms();
wait(gaussRangeInt(400, 1000));
antiBan;
if (not isLoggedIn) or (FailTimer.getTime > TIMEOUT) then
exit;
until not (tabBackpack.IsItemInSlot(27));
wait(gaussRangeInt(200, 500));
potionCount := potionCount + 14;
progressReport;
takeBreak;
end;

procedure setup();
begin
clearDebug();
initPlayerForm();
runPlayerForm();
if (not playerForm.isScriptReady) then
terminatescript;
declareplayers();
{$IFDEF SMART}
smartEnableDrawing := True;
smartShowConsole := False;
{$ENDIF}
setupSRL;
disableSRLDebug := true;
FailTimer.start();
players[currentPlayer].worked.start();
end;

begin
setup();
while loginCheck() do
mainLoop();
end.

Janilabo

2015-04-13 14:48:06

From: lovebotter
Currently working on a new herblore script. Will post it in juniors once I've done a test run. (Haven't run it yet)
And once I've gathered enough feedback there I'll most likely make it public.
program Herblore;
{$DEFINE SMART}
{$I srl-6/srl.simba}
{$i srl-6/lib/misc/srlplayerform.simba}

var
potionCount: integer;
FailTimer: TTimeMarker;

const
VERSION = 0.9;
TIMEOUT = 20000;
SPF_BREAK = 0;
SPF_BREAK_DURATION = 1;

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Herblore';
editBoxLabels := ['Break after', 'Break for', 'World'];
editBoxDefaults := ['120', '5', ''];
checkBoxLabels := ['Manage supplies'];
checkBoxDefaults := ['False'];
end;
end;

procedure declarePlayers();
var
i: Integer;
begin
players.setup(playerForm.players);
currentPlayer := 0;
for i := 0 to high(players) do
with players[i] do
begin
players[i].integers[SPF_BREAK] := strToInt(playerForm.players[i].settings[0]) * 60000;
players[i].integers[SPF_BREAK_DURATION] := strToInt(playerForm.players[i].settings[1]) * 60000;
world := strToInt(playerForm.players[i].settings[2]);
players[i].booleans[0] := strToBool(playerForm.players[i].settings[3]);
end;
end;

procedure debugSPFSettings();
var
i: integer;
begin
writeln('');
writeln('Player file: ', playerForm.playerFile);
for i := 0 to high(players) do
begin
writeln('Break After: ', players[i].integers[SPF_BREAK]);
writeln('Break For: ', players[i].integers[1]);
writeln('Manage supplies: ', players[i].booleans[0]);
writeln('');
end;
end;

procedure findNormalrandoms();
begin
claimTicket;
if (not bankScreen.isOpen()) then
closepopup();
tabBackpack.Open;
end;

function loginCheck(): boolean;
begin
if isLoggedIn() then
exit(true);
if not players[currentPlayer].login() then
exit(false);
findNormalrandoms();
mouseSpeed := 35;
wait(gaussRangeInt(1000, 2000));
minimap.clickCompass();
exit(true);
end;

procedure antiban();
begin
case random(2000) of
1..3:
begin
hoverRandomSkill();
end;
4..40: mouseMovingObject;
41..60: sleepAndMoveMouse(randomRange(100, 2000));
61..120:
begin
mouseOffClient(4);
wait(gaussRangeInt(1000, 2000));
end;
121..140: wait(gaussRangeInt(1000, 2000));
141..200: randomMouseSpeed(2, 30, 40);
end;
end;

procedure takeBreak();
begin
if (players[currentPlayer].worked.getTime() > players[currentPlayer].integers[SPF_BREAK]) then
begin
writeLn('Taking a ~' + toStr(players[currentPlayer].integers[SPF_BREAK] / 60000) + ' minute break');
players[currentPlayer].exitToLobby();
mouseOffClient(OFF_CLIENT_RANDOM);
wait(players[currentPlayer].integers[SPF_BREAK_DURATION] + random( - 60000, 180000));
loginCheck;
players[currentPlayer].worked.start();
FailTimer.start();
end;
end;

function banking(preset: integer): Boolean;
begin
if not isLoggedIn then
exit(False);
FailTimer.start();
begin
repeat
if bankscreen.open(BANK_GE) then
break();
minimap.clickCompass();
if (FailTimer.getTime > TIMEOUT) or (not isLoggedIn()) then
exit(False);
until bankScreen.isOpen(2000) or pinscreen.isOpen();
if pinScreen.isOpen() then
pinScreen.enter(players[currentPlayer].bankPin);
repeat
if bankScreen.clickButton(preset) then
exit(True);
until (FailTimer.getTime > TIMEOUT) or (not isLoggedIn());
end;
end;

function makePotions(): boolean;
var
slot: integer;
begin
if not isLoggedIn then
exit;
FailTimer.start();
tabBackpack.Open();
repeat
case random(10) of
0..7: slot := 11;
8..9: slot := 12;
end;
if tabBackpack.mouseSlot(slot, MOUSE_MOVE) and isMouseOverText(['Use Clean']) then
begin
tabBackpack.mouseSlot(slot, MOUSE_LEFT);
wait(gaussRangeInt(100, 200));
case random(10) of
0..7: slot := 16;
8..9: slot := 17;
end;
if tabBackpack.mouseSlot(slot, MOUSE_MOVE) and isMouseOverText(['of water']) then
tabBackpack.mouseSlot(slot, MOUSE_LEFT);
end;
wait(gaussRangeInt(100, 200));
if (not isLoggedIn) or (FailTimer.getTime > TIMEOUT) then
exit;
until productionScreen.IsOpen(2000);
wait(gaussRangeInt(100, 200));
productionScreen.clickStart;
if tabBackpack.waitForShift(randomRange(5000, 7000)) then
exit(True);
end;

procedure progressReport();
var
potsPerHour: Integer;
begin
clearDebug();
potsPerHour := round((potionCount * 60) / (getTimeRunning() / 60000));
writeLn('|=========================================|');
writeLn(PadR('| Love Herblore v' + toStr(VERSION), 42) + '|');
writeLn(PadR('| Time: ' + timeRunning(TIME_ABBREV), 42) + '|');
writeLn(PadR('| Potions Made: ' + toStr(potionCount) + ' (' + toStr(potsPerHour) + ' PH)', 42) + '|');
writeLn(PadR('| Break in: ' + msToTime(players[currentPlayer].integers[SPF_BREAK] - players[currentPlayer].worked.getTime(), TIME_ABBREV), 42) + '|');
writeLn('|=========================================|');
end;

procedure mainloop();
var
FailCount: Integer;
begin
findNormalRandoms();
if banking(BANK_BUTTON_PRESET_1) and (not tabBackpack.isFull()) then
inc(FailCount);
if (FailCount = 4) then
begin
writeln('Failed withdrawing, shutting down');
players[currentPlayer].logout();
terminateScript();
end;
if tabBackpack.isFull() and makePotions() then
repeat
findNormalRandoms();
wait(gaussRangeInt(400, 1000));
antiBan;
if (not isLoggedIn) or (FailTimer.getTime > TIMEOUT) then
exit;
until not (tabBackpack.IsItemInSlot(27));
wait(gaussRangeInt(200, 500));
potionCount := potionCount + 14;
progressReport;
takeBreak;
end;

procedure setup();
begin
clearDebug();
initPlayerForm();
runPlayerForm();
if (not playerForm.isScriptReady) then
terminatescript;
declareplayers();
{$IFDEF SMART}
smartEnableDrawing := True;
smartShowConsole := False;
{$ENDIF}
setupSRL;
disableSRLDebug := true;
FailTimer.start();
players[currentPlayer].worked.start();
end;

begin
setup();
while loginCheck() do
mainLoop();
end.
Glad to see you are still going to stay around, because that's the right attitude for the success!
There has been way too many people giving up in the past (disappearing after getting rejected by the application process).

Even though I voted no in this application (mostly due to your activity in topics/post count), I am pretty confident that you'll get in with your next application, if you just keep working for your scripts and also do some posting every now and then - meaning whenever you got some spare time in your hands and (if) you see some topics where you can take a part. ;)

So you don't need to be superactive person at all, because quite often quality > quantity!

Thomas

2015-04-16 18:33:06

I have been a bit busy on the forum:
BasicCombine script
https://villavu.com/forum/showthread.php?t=112765

Public version of the app script; Barbarian Assault Portable Wells
https://villavu.com/forum/showthread.php?t=112694

My first guide: Using knownledge of the SRL includes to remove duplicate code and improve logic
https://villavu.com/forum/showthread.php?t=112779

SRL backpack function updates (waitTime: integer = 0)
https://villavu.com/forum/showthread.php?t=112744

Open grandexchange function
https://villavu.com/forum/showthread.php?t=112735

Janilabo

2015-04-16 18:48:52

From: lovebotter
I have been a bit busy on the forum:
BasicCombine script
https://villavu.com/forum/showthread.php?t=112765

Public version of the app script; Barbarian Assault Portable Wells
https://villavu.com/forum/showthread.php?t=112694

My first guide: Using knownledge of the SRL includes to remove duplicate code and improve logic
https://villavu.com/forum/showthread.php?t=112779

SRL backpack function updates (waitTime: integer = 0)
https://villavu.com/forum/showthread.php?t=112744

Open grandexchange function
https://villavu.com/forum/showthread.php?t=112735
lb, that definitely is some positive activity around the forums!
Good work, nice contributions.

Clarity

2015-04-16 19:26:05

From: lovebotter
I have been a bit busy on the forum:
BasicCombine script
https://villavu.com/forum/showthread.php?t=112765

Public version of the app script; Barbarian Assault Portable Wells
https://villavu.com/forum/showthread.php?t=112694

My first guide: Using knownledge of the SRL includes to remove duplicate code and improve logic
https://villavu.com/forum/showthread.php?t=112779

SRL backpack function updates (waitTime: integer = 0)
https://villavu.com/forum/showthread.php?t=112744

Open grandexchange function
https://villavu.com/forum/showthread.php?t=112735


While it seems like this application won't pass, your activity lately has been awesome and your next application in two weeks is looking good!

Justin

2015-04-25 04:04:40

Hey @lovebotter;

It looks like you won't be getting in this time

Heed the advice that fellow SRL members have given you, and you may apply again in two weeks or any later date whenever you think you're ready.

Thanks,

Justin.