SRL Archive - Archive

crezzur - SRL Member Application


crezzur

2012-10-27 13:11:23

Updates:
Made a tutorial : http://villavu.com/forum/showthread.php?p=1121338

End of Updates.

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


Are you affilated in anyway with Jagex LTD?
No

Were you Referred to SRL?



What is your general programming knowledge?
Java (Private Clients + Servers) 9.5/10
Pascal (Simba) 3/10
HTML/PHP 7.5/10
MYSQL 5/10
RealmCrafter Codding 8/10


Are you a member of any other communities?
Moparscape
Rune-Server
Realm Crafter
Many others but probably not important


Tell us about yourself…
From: crezzur
Hey,

My name is jaimy, I live in Belgium
The most of the time i am on the computer is am writing programs.

i work as bicycle repairer



Please show us one (or multiple) of your scripts.
program CrezzurEnchanting;

{$DEFINE SMART}
{$i SRL\SRL.simba}
{$i ObjectDTM\ObjDTMInclude.simba}
{$i SRL/SRL/misc/reports.simba}
{$i SRL/SRL/misc/debug.simba}

{_______________________________________________________________________________
How to Setup?
1: Stand near Soul Wars bank
2: Chose your Enchanting spell below
3: Fill in how many rings u will enchant
4: Fill in DeclarePlayers
5: Have enchanting itemes in first bank slot
6: Have cosmic runes in first slot of your inventory
7: Wield the required staff
_______________________________________________________________________________}

Const
HowManyEnchants = 200; // How Many Enchants to cast?
Enchant = 2; // What To Enchant ?
// 1 = Sapphire
// 2 = Emerald
// 3 = Ruby
// 4 = Diamond

Var
EnchantItems, numEnchant, TotalEnchant: Integer;
t, x, y, EmeraldEnchant, SapphireEnchant, RubyEnchant, DiamondEnchant: Integer;
Bracelet, Amulet, Ring, Necklace: Integer;
Clock: TIntegerArray;
EnchantH: LongInt;
ourPhoto : Integer;

// Script start


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

with Players[0] do
begin
Name :=''; // Username
Pass :=''; // Password
Pin :=''; // Bank PIN
Member := true;
Active := true;
end;
end;

Procedure SetLeDTM();
Begin
case Enchant of
1: SapphireEnchant := DTMFromString('mwQAAAHic42RgYOCAYn4g5gNiXiBmB2ImBgTgQKKZoWr4oTRIjAVEu35kkOJlxov5GQgDRiIwHAAAcp8DOw==');
2: EmeraldEnchant := DTMFromString('mwQAAAHic42RgYOCAYn4g5gZiNiBmYkAAXqg8A5I6fqg4F5J615/SDFK8zHgxP5J+XJiRCAwHAJ0/A88=');
3: RubyEnchant := DTMFromString('m1gAAAHic42JgYOAAYk4g5odibiBmA2ImBgRggaqDsbmAmA+qnheqnxUq/5CFkUGKlxmODy3gR+HDMD+SnfgwI5EYAQBAwgTm');
4: DiamondEnchant := DTMFromString('mwQAAAHic42RgYOAEYnYg5gdiDgYI4AViJiDmAWJGqDwDVC1MHRNUHR8QMwPxuSu3GKR4mfFifqh+fJiRCAwHAB/6BPA=');
end;
end;

Procedure ItemCheckBank(); // Not used curently
Begin
Necklace := DTMFromString('mKgEAAHicncxBCoAwDETRVFFQtLpQbLv18t5Sf3A2Lu3AIxAmiWbWYcGODTNG7YO98dmix4GkrqdB1H1GEe+tmPRr0LzOpKt/bqtLqPTNA4XPA3g=');
Ring := DTMFromString('m1gAAAHic42JgYOADYg4gZmKAAF4gFgBiQSAWgrJBapiBWBQqBlIjAlUDYrNCzQCBMIEiqGn48X8G4gAjkRgBAHcDAuo=');
Amulet := DTMFromString('m1gAAAHic42JgYGAFYm4gFgRiPiDmYkAF/EDMAcSSQMwIxGxQtVJQLATVwwzEskC8dN48IMlEEP9nIA4wEokRAAD50QP4');
Bracelet := DTMFromString('m6wAAAHic42ZgYOAEYkEgZgNiZiDmAWJ+IBYCYmEg5maAAA4gZoWKgeS5gJgJKgYygw8qxwZVL7FUBqqCMP7PQDxgJAEjAQCXCQLh');
end;

Procedure FreeDtmNow();
begin
FreeDTM(EmeraldEnchant);
FreeDTM(SapphireEnchant);
FreeDTM(RubyEnchant);
FreeDTM(DiamondEnchant);
FreeDTM(Necklace);
FreeDTM(Ring);
FreeDTM(Amulet);
FreeDTM(Bracelet);
end;

Procedure BankChest;
begin
OpenBankChest(SRL_BANK_SW);
if(PinScreen)then InPin(Players[CurrentPlayer].Pin);
if (BankScreen) then
begin
Exit;
end else
BankChest;
end;

procedure OpenChest;
begin
ExitSquealOfFortune();
Wait(100);
BankChest;
if not (BankScreen) then
begin repeat
BankChest;
until(BankScreen);
end;
end;

procedure GetItem;
var
i : Integer;
begin
ItemCheckBank;
BankChest;
if (BankScreen) then
begin
//Deposit
Deposit(2, 27, true);
numEnchant := numEnchant + 27;
Wait(100);
//Withdraw
Writeln('Found item.');
Withdraw(0, 0, 27);
CloseBank;
Wait(300+Random(300));
Exit;
end else
if not (BankScreen) then
begin
repeat
BankChest;
until(BankScreen);
GetItem;
end;
end;


Procedure Antiban;
Begin
Case Random(100) Of
1: HoverSkill('magic', False);
2: HoverSkill('random', False);
3: Boredhuman;
4: Wait(2500 + random(4500));
5: HoverSkill('smithing', False);
6: PickUpMouse;
7: RandomMovement;
8: RandomRClick;
end;
end;

Procedure ClickSpell;
var
i : Integer;
begin
SetLeDTM;
Writeln('Setting Up for Enchanting');
Gametab(Tab_Magic);
Wait(randomrange(300,400));
If not FindDTM(EmeraldEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(SapphireEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(RubyEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(DiamondEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
begin
Writeln('Cannot Find Spell');
Logout;
terminatescript();
end else
Wait(randomrange(200,300));
Writeln('Enchanting...');
for i := 2 to 28 do
begin
SetLeDTM;
Mouse(x,y, 0, 0, true);
wait(randomrange(400,600));
InvMouse(i, 1);
Gametab(Tab_Magic);
end;
end;

Procedure ProgressEnchant;
begin
Clock := [0,0,0];
EnchantH := ((numEnchant * 3600) / (GetTimeRunning / 1000));
TotalEnchant := ((numEnchant * 27));
ConvertTime(GetTimeRunning,Clock[0],Clock[1],Clock[2])
Writeln('* * * * Crezzurs Enchanting * * * *')
Writeln('* Time Running ' +tostr(Clock[0])+':'+tostr(Clock[1])+':'+tostr(Clock[2]))
Writeln('* We have made ' + IntToStr(t * 27) + ' Enchants this Session')
WriteLn('* Enchants Per Hour : ' + ToStr(EnchantH))
Writeln('* * * * * * * *')
end;

procedure SmartProggy;
var
Prog1,Prog2,Prog3,Prog4,Prog5,Prog6,Prog7:String;
Paint: Integer;
begin
Clock := [0,0,0];
EnchantH := ((numEnchant * 3600) / (GetTimeRunning / 1000));
TotalEnchant := ((numEnchant * 27));
ConvertTime(GetTimeRunning,Clock[0],Clock[1],Clock[2])

Prog1 := ' Crezzurs Enchanting';
Prog2 := ' Time Running '+tostr(Clock[0])+':'+tostr(Clock[1])+':'+tostr(Clock[2]);
Prog3 := ' We have made : '+IntToStr(t * 27)+' Enchants this session.';
Prog4 := ' Enchants Per Hour : '+ToStr(EnchantH);
Prog5 := '';
Prog6 := '';
Prog7 := '';

ourPhoto := BitmapFromString(492, 114, 'meJzt3VlvFXUcx+FX5RIRaRsB' +
'V6CllLbSQt3AlgsJCdLTajmnVlEBZTExLpEuSFfUC9xuTQybhsUYL' +
'0z0pTg6ZnJyOtMchMnxJ0/ypCnN8GXS/vMJOZm2m3cOdg7te/Cxre' +
'u7+nM93Nm3WtuOgVzrtvXmWr2Wfjx3fEP3rky23N4zeFfG6/dLHa/' +
'fL3W86OZLHc/2Sx1v2C91/B45jWUfdafxdseLdnK1be3d2D2wuWd3' +
'+nbTjsH7N255tPuZ4Up1ZKw2dDsGD0/kKrr+2fHJVPrHPZVqKvfig' +
'VdeS6Wbu0ePpO7KeLZf6njDfqnjRfuljmf7pY437Jc67jQ6jS05jb' +
'dleLT20uHqSGXyYO2dQ1Mn9h6a6Ojs37C1p3/4wNsfTr85u9i8t84' +
't5yq6/ujcUvb+GzMLqanp+TWuT2XLb3+2crfGs/1Sx+v3Sx0vuvlS' +
'x+v3Sx2v3y91/B45jWUf9XvkNP6L8eyDDdbYWe3U9OLxj8+d+OSzM' +
'7PLxz6aS5K+7ontm3oGDlSPnp5dvHD15p37/NqttSXXLFz+De5cdq' +
'iWL19PrFy5kbqt05jI/mLuNXd9vOWfN/4fPjj/RdLwDVt2tnf2Dle' +
'qScNbfksANOnYzMq+sVrb9l4NBwhHwwHi0nCAuDQcIC4NB4hLwwHi' +
'yhre0dW3f3zy5PR8y28JgCZpOEBcGg4Ql4YDxKXhAHFpOEBcGg4QV' +
'/3z4SNjtffOnm/5LQHQJA0HiEvDAeLScIC4NBwgLg0HiEvDAeKqb7' +
'jnwwFi0XCAuDQcIC4NB4hLwwHi0nCAuDQcIK6G58P9XnuAQDQcIC4' +
'NB4hLwwHi0nCAuDQcIC4NB4ir4fnwUzMLLb8lAJqk4QBxaThAXBoO' +
'EJeGA8Sl4QBxaThAXH6vPUBcGg4Ql4YDxKXhAHFpOEBcGg4Ql4YDx' +
'KXhAHE1fI/Pyen5lt8SAE3ScIC4NBwgLg0HiEvDAeLyXApAXBoOEJ' +
'eGA8Sl4QBxaThAXBoOEJeGA8Tl+XCAuDQcIC4NB4hLwwHi0nCAuDQ' +
'cIC4NB4ir4fnw07OLLb8lAJqk4QBxaThAXBoOEJeGA8Sl4QBxaThA' +
'XA3Ph5+aWWj5LQHQJA0HiEvDAeLScIC4NBwgLg0HiEvDAeLye+0B4' +
'tJwgLiyhrdt2zlcqXotBSAQDQeIS8MB4qp/PTxpuJ95BRCIn1sIEF' +
'fW8I6uvqThZ+aWWn5LADSpvuH7xyc1HCAQz4cDRHTh2u/LP/yi4QA' +
'RaThAXBoOEJeGA8Sl4QBxaThAXBoOEJeGA8Sl4QBxaThAXBoOEJeG' +
'A8Sl4QAx/TH3/a8NDX9g85YD1aPvn1u+8NPPub6+cjPx1eUbqYuXr' +
'ie+uXor19LVG7lWfryVq2jH+J3vlzpetB93/D/1NY077jQW+fbaz7' +
'mKwpvENm1v/ch3l28mvr10I3n7/tzK8wfHH3q8676NT+07PPHh4pd' +
'TMwu53p1ZTJ2YXkgdPzufvd/gzbmlXK9Pz+c69un51UodL9qPO160' +
'X+p40X7ccafRaSx1vMja4X1vdilxcm75H2cXTs8sfbJ88dhHc4nh0' +
'dqmHYNP7XpuZKz23MHK0Fgt18hrbwy/OpV4afz1zN5KLdez45O59l' +
'SquYp2jN/5fqnjRftxx/9TX9O4405jkRdHq7mKwvvC4SOp5JpsZOj' +
'l0QNH3hqpTCb/A997aOLQ1ImHn+xu7/zrJfH1T3ev7+rP1bFjoL17' +
'V6pt+zNrW7etN9ca46uVOl60H3e8aL/U8aL9uONOo9NY6viGrv5cR' +
'Z+Z9cm/+7dHOvuyix95uqd9W1/S7batvcn7657Y3tHZ/ydUz/RL');

SMART_DrawBitmap(true, ourPhoto,Point(6,344));
SMART_DrawText(12,365,LoginChars,Prog1,clTeal);
SMART_DrawText(9,390,LoginChars,Prog2,clTeal);
SMART_DrawText(9,410,LoginChars,Prog3,clTeal);
SMART_DrawText(9,430,LoginChars,Prog4,clTeal);
SMART_DrawText(9,450,LoginChars,Prog5,clTeal);
SMART_DrawText(9,470,LoginChars,Prog6,clTeal);
SMART_DrawText(9,490,LoginChars,Prog7,clTeal);
FreeBitmap(ourPhoto);
end;

begin
{$IFDEF CREZZUR}
Smart_Server := 0;
Smart_Members := False;
Smart_Signed := True;
Smart_SuperDetail := False;
{$endif}
ObjDTM_Setup;
SetupSRL;
DeclarePlayers;
LogInPlayer;
t:= 0
ActivateClient;
SetLeDTM;
Addonterminate('FreeDtmNow');
Repeat
If Not LoggedIn Then
Begin;
FreeDtmNow;
WriteLn('Bye, come again!');
terminatescript();
End;
ClearDebug;
ProgressEnchant;
SmartProggy;
inc(t)
OpenChest;
GetItem;
ClickSpell;
Until (EnchantItems = HowManyEnchants);
If (EnchantItems = HowManyEnchants) Then
begin
WriteLn('Bye, come again!');
LogOut;
terminatescript();
End;
FreeDTM(EmeraldEnchant);
FreeDTM(SapphireEnchant);
FreeDTM(RubyEnchant);
FreeDTM(DiamondEnchant);
end.

Footy

2012-10-27 13:16:28

Post the code in simba tags rather then linking to your script. I'll read over everything now.

E: From Daniels guide:
Script:
I will divide this up in to three sections, definite, not required and instant-no. The definite is what we definitely look for, and will vote no if those items are not present. The not required section is what we would like to see, but are not required to pass:

Definite:
Intrinsic documentation (is your script formatted properly [i.e. standards]? do you use suitable variable/method names?)
Use of TPAs (TPointArrays)
Custom object finding (that means using NO FindObj* or ACA, make up your own!)
Use of auto-colouring (NO ACA generated functions)
Walking (try not to use SPS, but instead try TPA walking/use RadialWalk)
Appropriate use of variable scope (i.e. local/global variables)
Loops (repeat..Until, while..do and for..to..do)
Arrays
Case statements
Randomisation (i.e. use Wait(200 + Random(300)) instead of just Wait(200))
Backups/fail safes (in case something goes wrong, do what?)
A most common fail-safe is to add if(not(LoggedIn)) then Exit;
Anti-randoms
A script greater than 300 lines

Not required (but nice to show):
Memory management (i.e. don't load and free a DTM in a procedure, then continuously call that procedure. Load it once, then free it at the end of the script)
DTM finding (e.g. for inventory/bank objects, equipped items, etc)
DDTMs
Banking
Multiplayer (try to always include multiplayer unless your script is superb)
Anti-ban
Combining methods (i.e. not having one-liner procedures/functions or a separate method for every single little task)


That's what the ideal script should have to pass as a good application. Lets look over the differences between the above, and your script.

Standards
Good in some places, very poor in others. This:

procedure OpenChest;
begin
ExitSquealOfFortune();
Wait(100);
BankChest;
if not (BankScreen) then
begin repeat
BankChest;
until(BankScreen);
end;
end;

Should be written like this:

procedure OpenChest;
begin
ExitSquealOfFortune();
Wait(100);
BankChest;
if not (BankScreen) then
repeat
BankChest;
until(BankScreen);
end;

Use of TPA's

None.

Custom Object Finding

You use Openbankchest, which isn't custom object finding.

Use of Auto-coloring
Walking

None and None.

Appropriate use of variable scopes

Almost every single variable is declared as public. The majority of them could be used as local variables. Use local variables whenever you can, they save memory, and make the script look better.


Use of Loops

You use Repeat..until, and for..to..do, not while..do. Not a big deal.

Case statements

You seem to have a good grasp on case statements.

Randomization

Good.

Failsafes

Not very many. The failsafe you use in openchest is no good. What you are saying is if we cant open the bank, try again. What happens if we missclicked and are far away from the bank? It becomes an infinite loop.

Antirandoms

No longer relevant

Script longer then 300 lines

Length isn't a biggie, you can have a short script with all the requirements.

Now onto the not needed, but nice to show stuff.

Management of memory

You free your DTM's which is good, but I don't understand why you constantly call your DTM's in Clickspell. You only need to load the DTM's once in the script. Not every single invspot…

DTM Finding

Good.

Use of DDTM's

Nope.

Banking

Very basic banking using SRL functions, try to use your own functions for this.

Multiplayer

Nope

Antiban

Short and simple antiban, could be improved, but nothing wrong with it.

Combining methods

Some things could be merged, but its fine for me.


In the end, I have to vote No. Your script is good, but its not SRL member good. If you don't get in, and plan on applying again, it would be worth your time to learn about TPA's. Also, Improving your activity would be beneficial, as SRL members is more then a group of good scripters, its a group of people committed to the good of the community.

Good luck,
Footy

crezzur

2012-10-27 13:23:49

From: Footy
Post the code in simba tags rather then linking to your script. I'll read over everything now.


Changed thank you for the tip :)

cause

2012-10-27 13:28:12

You're getting there! We are looking for a little more of an advanced script. Some walking would be nice. Nice job using DTMs though :)
It's a no from me for now, but with some more practice you'll make it. (also keep up the activity)

crezzur

2012-10-27 13:36:46

From: cause
You're getting there! We are looking for a little more of an advanced script. Some walking would be nice. Nice job using DTMs though :)
It's a no from me for now, but with some more practice you'll make it. (also keep up the activity)


Thank you for the feedback, will certain look after something useful where walking is needed and read some tutorials :p

Footy

2012-10-27 13:48:53

Updated my post.

Brandon

2012-10-27 14:02:36

I won't vote but I'd like to say this:


If not FindDTM(EmeraldEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(SapphireEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(RubyEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then
If not FindDTM(DiamondEnchant, x, y, MIX1, MIY1, MIX2, MIY2) then

Could be:


If ((Not FindDTM(.....)) And (Not FindDTM(.....)) And (Not FindDTM(......)) And (Not FindDTM(.....))) Then

Le Jingle

2012-10-27 14:15:47

Your script shows decent knowledge, however I don't think the entirety of this application is sufficient for SRL Members. I do think that you are heading in the right direction and do indeed hope to see you around for longer (if you do not succeed in the application, perhaps taking suggestions and applying them to your possible next application would prove beneficial).

Here's my mark-up of your script;

Please do note that the Con's are often greater due to the fact I assume you are well familiar with your Pro's (which I sometimes miss on complimenting more Pro's than I do) + I want to provide detailed feedback to places where I think that you may improve. :)

Pro's
  • DTM's are always handy. They don't necessarily add for the greater good of a script, but they do indeed come in handy for those more statics areas.
  • Bank handling. It appears that you are grasping the beginning of the ways to go about banking for a wider range of people (in this case utilizing bank pin functionality)
  • AddOnTerminate is a nice call especially when being DTM-intensive.

Con's
  • Not necessarily a huge ordeal, however keeping your code commented for parts that aren't used is better (in my opinion) than leaving a comment by it saying it's not used yet. It's understandable, however, for scripts that are in progress / a scripter always wanting to make a better script.
  • infinite loops are quite in the red in my book as they can be those hiding muggers that get you when you least expect it. For example, when you do repeat .. bankchest .. until bankscreen, could potentially get stuck in an infinite "scary sneaky mugger" loop. (yes I just made that term up to describe infinite loops). I'd suggest adding a timer to failsafe this repeat, at the very minimum. (this happens at least 2 times in your script)
  • You don't need to FreeDTM(saph,em,etc.. at the very very end of your script, right before the final 'end.' - this is already handled when you call add on terminate (as far as I know, may be corrected on this if somebody reads and corrects me if I'm mistaken)
  • Your standards are very hard to read :/ I'd suggest you 'enable' the parser extension within Simba and hit 'format' with your script open. This makes it much easier for others to see/read your code and interpret what is going on (in a more clear, standardized fashion).

Suggestions to your script in general;
  • Add more functionality, meaning, finding an item as opposed to static slot coords (minimal suggestion)
  • Add functionality in the way that, instead of searching for multiple if - thens for finding a spell, have this be determined and loaded at the start of the script (ex. case statements). This would be better than multi if-then's, at least in my opinion.
  • TPA's would be great to see in your script, along with potentially walking (this could even be a relocation, ex = moving to a new bank half way through the script? - creativeness starts here and doesn't end)

Some tools;
  • http://villavu.com/forum/showthread.php?t=78375 = Copy his script and press play. A form will pop up and you input (copy + paste) Your script and fill out the other stuff + hit Generate Mark. Gives quick feedback/suggestions.
  • All TPA tutorials in the tutorial section (these can be quick learning for some or slow learning for others like me :p )
  • The community in general

Hence, for the moment, I will have to say no. On the up-side, I suggest not letting my no affect your view on Villavu in the long run and hope to see you stick around! :)

Hope this helps,
Cheers,
Lj.
:)

P.S. Don't be afraid of talking to the community here when you've the time!
(We don't bite! .. usually!)

EtherFreak

2012-10-27 15:03:34

Before I vote, I would like to know more about why you want members status. Also, I would like to know a little more about your background. I am holding my vote until then…

punkd

2012-10-27 15:16:41

Crezzur, I read over your application and it clearly shows you have the capability of scripting but unfortunately it is not advanced enough for Member status. Your use for DTM's show you understand how they work but we'd like to see an alternative method for or a lets call it a "backup" method. Although I'm sure you script works fine, show us what you can really do. Use TPA's for banking, A method of walking SOMETHING to show us that you understand your understanding of the SRL library. Most of your scripting abilities are beginer level, Take a look at some intermediate and advanced guides to help you understand the library better. Also, your activity could improve, oh and you CAN still change the OP, add scripts, and some more details about who you are and why you want to become a Member.

Best of luck!

Edit: I will hold my vote until the end of the week to see any changes.

crezzur

2012-10-28 13:55:46

Thanks for all the feed back, i will look after all suggestions end try to implement as many as i can. this will not be at the end of the week so i will re-send my application after a while

[XoL]

2012-10-29 00:25:55

I won't bother posting a long post!
But, you are getting there; next time if you take and use all of these suggestions (as given above)

crezzur

2012-10-29 12:53:01

Yay 1 vote for yes, srl membership here i come! :D

P1ng

2012-10-29 16:16:22

Looks quite good, I am loving the use of DTMs, you certainly seem to have a good grasp of them and they can be a very powerful tool.

You free your DTMs appropriately with AddOnTerminate, too.

Woud like to see some more activity in and around the forums, a bit of walking and TPA usage in your script and I'm sure you could make it on your next application :)

crezzur

2012-10-29 18:44:21

Thx for all feed back this application may be closed

I will re-apply when i have modify my script

Crezzur Soon SRL Super Member :p

Footy

2012-10-29 19:01:42

You have to wait 4 weeks I believe, unless an exception is made. A mod will clarify when he closes the thread.

crezzur

2012-10-30 18:07:56

3 - 9 nice :D

crezzur

2012-11-02 07:16:29

Update:

Made a tutorial : http://villavu.com/forum/showthread.php?p=1121338

BraK

2012-11-06 03:34:43

I'll Go ahead and close this for you. I hope to see you apply again in 3 weeks. Normally I'd say a month but as you requested thread closer on the 29 I'll take a week off that time ;)