SRL Archive - Outdated / Broken

[C]Naturez full


Flight

2011-11-26 02:49:32

For the sake of not having to write all that again, just refer to this post:
http://villavu.com/forum/showthread.php?t=68265

This version also handles renewing points and the renewing of new summoning familiars. Enjoy!

kingarabian

2011-11-26 02:51:26

I WILL TEST IT OUT BECAUSE I HAVE THAT 99 RC MUAHAHAH.
Kk looks good ima test it asap…

Kave

2011-11-26 06:42:03

Looks really nice Flight pity that I don't have the summoning levels ;)

kingarabian

2011-11-26 20:29:35

Same as lite version, does not initiate the Runecrafting at all.

Flight

2011-11-26 20:49:10

From: kingarabian
Same as lite version, does not initiate the Runecrafting at all.


How do you mean? Please be more specific.

kingarabian

2011-11-26 21:07:43

Basically:
1. Loging in and everything, it does everything correct.
2. Walks all the way NEAR the alter, but the alter is not seen on the main screen.
3. It right clicks on graahk, and teleports.
4. Repeats the walking to the alter but then again right clicking on the graahk once its near the alter and teleporting.

So it just teleports, walks to the alter, and then does the teleport phase again.

kingarabian

2011-11-27 00:34:16

=-=-=-=-=-=-=-= Naturez 1.0 by Flight =-=-=-=-=-=-=
Time Running: 2 Hours, 44 Minutes and 6 Seconds
Runes crafted: 8560
Exp gained: 43380
Loads: 0
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**
** Warning in InteractFamiliar: No familiar present!**


Messed up when my Familiar expired. Was at the bank.

Would be getting a solid 4k nats an hour if I could fix pouches ;).

Flight

2011-11-27 01:28:02

From: kingarabian
Messed up when my Familiar expired. Was at the bank.

Would be getting a solid 4k nats an hour if I could fix pouches ;).


Did you already finish filling pouches and a full inventory of essence when you got those errors?

kingarabian

2011-11-27 01:58:07

From: Flight
Did you already finish filling pouches and a full inventory of essence when you got those errors?


Yep. Was all set to go, but I had no pouch in my invy I guess it didnt withdraw?

Flight

2011-11-27 02:09:26

From: kingarabian
Yep. Was all set to go, but I had no pouch in my invy I guess it didnt withdraw?


That's what I'm guessing. You apparently had a familiar when you withdrew essence but in that amount of time your familiar died(?), so by then the green flag was up to go ahead and change the stage to the "teleport to jungle stage".

I'm pretty sure I just fixed this. Within the teleport stage I made a check if we're not currently using a familiar to throw a failed teleport which will revert back to the banking stage. Also within the banking stage it'll recognize we're not using a familiar. If we already have a full inventory it'll deposit 1 essence and withdraw a pouch and just go on from there.

Edit:
And yes, if I don't hear anything from i luffs by tonight then I'll go ahead an borrow your account long enough to decay a pouch and make the NPC chat-repair function. I'd like to release 1.1 by tomorrow.

kingarabian

2011-11-27 02:35:01

From: Flight
That's what I'm guessing. You apparently had a familiar when you withdrew essence but in that amount of time your familiar died(?), so by then the green flag was up to go ahead and change the stage to the "teleport to jungle stage".

I'm pretty sure I just fixed this. Within the teleport stage I made a check if we're not currently using a familiar to throw a failed teleport which will revert back to the banking stage. Also within the banking stage it'll recognize we're not using a familiar. If we already have a full inventory it'll deposit 1 essence and withdraw a pouch and just go on from there.

Edit:
And yes, if I don't hear anything from i luffs by tonight then I'll go ahead an borrow your account long enough to decay a pouch and make the NPC chat-repair function. I'd like to release 1.1 by tomorrow.


Sure man throw me a pm!

i luffs yeww

2011-11-27 03:03:37

Sorry, I've been at my girlfriend's the past day (and still am here..), so adding NPC contact is a bit of a chore. I'll try to get it done soon, though. :)

kingarabian

2011-11-27 03:12:19

From: i luffs yeww
Sorry, I've been at my girlfriend's the past day (and still am here..), so adding NPC contact is a bit of a chore. I'll try to get it done soon, though. :)


Mhm. Ya I'm doing all my Calculus work right now got an exam on Monday as well.

Shouldn't be hard at all to do.

-Detect unusable pouch
-Withdraw needed runes
-Click spell
-Detect NPC chat screen
-Initiate chattin

Sounds a lot but should be fairly simple.

i luffs yeww

2011-11-27 03:45:06

Well Flight already has most of the work done, I'm just gonna add a bitmap and some clicking if repair pouch doesn't work.

Or something of the sort. ;) I'll test it and everything, so don't worry. :) It should work just fine.

kingarabian

2011-11-27 03:59:23

Hate to be a continuous party pooper flight, but the script keeps running despite the fact I have no pure essence left x).

i luffs yeww

2011-11-27 04:21:28

From: kingarabian
Hate to be a continuous party pooper flight, but the script keeps running despite the fact I have no pure essence left x).


Should be an easy fix. :) I may add that (since it's not much of an addition) when I add NPC Contact (which I'll be doing in the next little bit), if Flight doesn't mind.

Flight

2011-11-27 04:54:50

From: i luffs yeww
Should be an easy fix. :) I may add that (since it's not much of an addition) when I add NPC Contact (which I'll be doing in the next little bit), if Flight doesn't mind.


Yeah I had a check for this in the very beginning to check if those DTMs existed in the bank, if not it would close the bank and shut down with the cause of "Items not found". I don't know the reason but sometimes the script wouldn't detect the essence/pouches/amulets and shut me down. So I temporarily removed that bank check. I could try a few things and hope it works thoroughly this time.

i luffs yeww

2011-11-27 05:26:27

From: Flight
Yeah I had a check for this in the very beginning to check if those DTMs existed in the bank, if not it would close the bank and shut down with the cause of "Items not found". I don't know the reason but sometimes the script wouldn't detect the essence/pouches/amulets and shut me down. So I temporarily removed that bank check. I could try a few things and hope it works thoroughly this time.


Fair enough. If I run into problems with it for reasons I can't fix, I won't add it. For now you could just either have a constant for how many pure ess to use (user-defined) and run until that many ess has been used.

But I'll see what I can do over the next few hours. I'll probably focus on adding NPC Contact support for now, though (don't want to work on this too much :x it's your script, after all).

Flight

2011-11-27 05:57:14

If you decide against it I'll go ahead and try to put NPC contact together. Also that's a good idea about the user-defined # of essence to use.

Wizzup?

2011-11-27 06:56:23

I should really try this… (Have 92 rc on main I think)

kingarabian

2011-11-27 07:01:41

From: Wizzup?
I should really try this… (Have 92 rc on main I think)


Yeah a solid 4k nats an hour once they add that talk to NPC option to fix pouches.

i luffs yeww

2011-11-27 10:19:15

So far I've seen some issues which I'm not going to attempt to fix.

- It's not calculating natures crafted or loads done(example below)

=-=-=-=-=-=-=-= Naturez 1.0 by Flight =-=-=-=-=-=-=
Time Running: 21 Minutes and 51 Seconds
Runes crafted: 0
Exp gained: 4311
Loads: 0
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

- There have been a few times when it will tele to Burthorpe at the incorrect times (seen it tele from the bank, seen it tele right after teleing to graahk area)

- When the script started (with pouches and one nature rune in inv, with full summ points) it withdrew graahk pouch, withdrew ess, filled pouches, withdrew more ess, and then ran to the obelisk and renewed points and then summoned my graahk (the bug with this is I had full summ points)

That's all I've seen so far, I think. Getting a new necklace works just fine, and I'll be testing NPC Contact in just a little bit (want the pouches to degrade 'naturally' rather than just filling/emptying).

There's also been a few things I haven't much cared for, like how often the proggy is printed. It slows down the script by quite a bit every trip. There was also some slowing factors with running to the altar, but they don't seem to be happening anymore (and it wasn't anything, really. It was just running to the flag before moving on quite often, which slows things down).

Last thing I noticed is that the script will go to the altar, click on the altar to craft the runes, and then click it again without withdrawing ess from the pouches, which is a bit annoying.

Overall a great script, though! :) I'd have no problem running it as is (with NPC Contact support), which I'm glad I can say.

EDIT:

I just remembered another couple things which could add to general efficiency. One is that you close the bank before clicking on Interact via the summoning icon, and the other is that you right click and then choose interact even if interact is the left click option.

EDIT2:

:x Just encountered a bug, it seems like. I was at the graahk hunting area and the script was trying to tele to burthorpe, but my games necklace had crumbled. Not sure what could've happened, but something happened. Any plans to add Ring of Kinship support? Since it never crumbles or anything, it's one less thing that could go wrong.

Flight

2011-11-27 11:09:46

Hm, I never had teleporting issues to that extent. I've patched up a couple things, I'm positive that should take care of just about anything that has gone wrong for you. I gotta say though, you're the first to come up with errors like that. What's got me wondering, especially, is your counting being so far off in the script. That really makes no sense.

Looks like I'm just gonna borrow your account, Kingarabian, to implant NPC Contact. I'll drop you a line.

@Wizzup?:
Nooo don't run it until atleast 1.1 is out. It's so much stabler.

i luffs yeww

2011-11-27 11:11:26

I'm just about done adding NPC Contact, just wanting to make sure it's working properly. :) Also wanted to change how you're doing RepairPouches because it's quite repetitive and really doesn't need to be.

Flight

2011-11-27 11:14:40

From: i luffs yeww
I'm just about done adding NPC Contact, just wanting to make sure it's working properly. :) Also wanted to change how you're doing RepairPouches because it's quite repetitive and really doesn't need to be.


I watched it repair 3 pouches in a matter of seconds, I think it's quite fine the way it is. If it works fine the way it is and doesn't cause problems then I think it's best to leave it be.

i luffs yeww

2011-11-27 11:16:37

I'm not changing anything, but the code is a bit excessive, imo. Apart from the if..thens, the code is exactly the same for each pouch, so really it could be shortened. But it's not an issue, I just would like if it were a little different. :p

i luffs yeww

2011-11-27 11:32:49

Sorry for the double post.

FUUUUUUUUUUUUUUUUUUUUU..

So I was just about done, everything seemed bullet proof, and then Simba froze and then crashed. Sadly I had CRov disabled because it was causing Simba to freeze before and I couldn't get anything done.

So I'll have a bit more work to do, unless you want to do it yourself, Flight.

Flight

2011-11-27 11:38:47

Well I just found out you don't have to do Dream Mentor to use this spell, I never knew this. So I'll be making it myself. I've already begun work. Thank you very much for all your help and effort, i luffs, but I'll take over from here. :)




Edit:
All finished. Tested NPC Contact multiple times, it works beautifully. Also, this does not effect, in any way, the Repair Rune Pouch spell. Infact, I even shortened the procedure for repairing pouches to have all 3 pouches inherit a single block of code to handle the repairing.

I've also significantly increased the accuracy of teleporting to & from both the jungle and Burthorpe. Also… finding the ruins is, I'd say, 70% faster and will no longer double-click. ALSO there is no more chance of withdrawing 2 games necklaces. On top of that, should your familiar happen to 'die' while you're in the bank the script will recognize this and revert back to the banking stage, at which point a random essence will be deposited to the bank and you'll withdraw a new pouch and continue from there.

If that's not enough then you'll be happy to know all item are checked upon opening the bank, so if you run out of essence/necklaces/or pouches the script will tell you, close the bank, log you off, and shut down.

Phew… my fingers are sore.

kingarabian

2011-11-27 15:01:16

Okay well 1st of all great job!
- If your player is in the corner between the bank chest and tent, the familiar won't fit and you can't interact unless you move out of the corner. So I guess have it blind click or something when that happens?
- TalkToNpc works fine but you have to have the runes in your inventory at all times for it to use it.

But so far looks boss.

TomTuff

2011-11-27 15:15:57

I'll be using this some if/when NPC contact is added :)

i luffs yeww

2011-11-27 16:10:56

From: TomTuff
I'll be using this some if/when NPC contact is added :)


It was added three hours before you posted.

Anyway, King, I was meaning to mention that. Withdrawing the runes wouldn't be too difficult, really. I was hoping I could get NPC Contact added for Flight so he could have a little break after writing this whole script, so maybe I'll add withdrawing runes when needed? :)

kingarabian

2011-11-27 17:43:12

From: i luffs yeww
It was added three hours before you posted.

Anyway, King, I was meaning to mention that. Withdrawing the runes wouldn't be too difficult, really. I was hoping I could get NPC Contact added for Flight so he could have a little break after writing this whole script, so maybe I'll add withdrawing runes when needed? :)


Ya shouldn't be a problem to add. Once it's at bank, have it do a check to see if pouches are okay. If not then withdraw runes, and fix. Then, continue.

Yesterday I had it run for 5 hours. Today it won't run for more than an hour. Dunno why, was asleep but I'll watch it.

That's the area it gets messed up on.

Flight

2011-11-27 20:20:52

What do you mean "gets messed up on"? What exactly is going wrong for you?

kingarabian

2011-11-27 20:23:22

From: Flight
What do you mean "gets messed up on"? What exactly is going wrong for you?


From: kingarabian
Okay well 1st of all great job!
- If your player is in the corner between the bank chest and tent, the familiar won't fit and you can't interact unless you move out of the corner. So I guess have it blind click or something when that happens?
- TalkToNpc works fine but you have to have the runes in your inventory at all times for it to use it.

But so far looks boss.


This.

Flight

2011-11-27 20:32:36

Ahh so just getting stuck in that spot and having to keep the runes with you at all times? I'll see what I can do. The blind spot, shouldn't be hard at all to fix. The runes withdrawing, however, might take some time to make.

kingarabian

2011-11-27 20:42:41

From: Flight
Ahh so just getting stuck in that spot and having to keep the runes with you at all times? I'll see what I can do. The blind spot, shouldn't be hard at all to fix. The runes withdrawing, however, might take some time to make.


Despite the getting stuck problem happening twice when I ran the script, I can't manually recreate it.

Flight

2011-11-27 20:50:32

From: kingarabian
Despite the getting stuck problem happening twice when I ran the script, I can't manually recreate it.


Has it shut down on you for the reason of "Out of resources"? It just did that for me after 15 minutes. It shouldn't do this, because it only does this check while the bank is open. I suppose what I'll do is have it check 3 times for the items rather than just 1 check and shut down. I guess I'll be working on this and the other two issues you're having. I'll be happy when no problems are reported. :P

kingarabian

2011-11-27 21:18:27

From: Flight
Has it shut down on you for the reason of "Out of resources"? It just did that for me after 15 minutes. It shouldn't do this, because it only does this check while the bank is open. I suppose what I'll do is have it check 3 times for the items rather than just 1 check and shut down. I guess I'll be working on this and the other two issues you're having. I'll be happy when no problems are reported. :P


Right now it's going strong almost at one hour. Still watching it.

Edit: Stopped twice @ the 1 hour mark. That's 4 times in a row.

kingarabian

2011-11-28 00:40:14

Okay, I found out what the problem is. At around the 1 hour mark for some reason your graahk goes missing. No matter how much times you click interact it's not going to come to you nor will you go to it. This only happens when your character gets stuck in that corner. To make things easier on you I suggest to make this compatible with Castle Wars. No stupid corners and such. And it's not hard at all. Just make a dtm instead for a duelling ring, and update your symbol colors to work with the ones @ Cw.

But if you want to leave it in burthrope, have the script detect black chat box text and have it click away from the bank chest so you won't be stuck in that corner. Once you get out of that corner your familiar automatically comes to you and everything is fixed.

i luffs yeww

2011-11-28 00:43:52

So you're sure it's not just because your graahk dies after like 50 minutes?

kingarabian

2011-11-28 00:57:36

From: i luffs yeww
So you're sure it's not just because your graahk dies after like 50 minutes?


Yep, because once I log back in and I click away from that corner my familiar returns to his master.

Flight

2011-11-28 01:02:42

From: kingarabian
Okay, I found out what the problem is. At around the 1 hour mark for some reason your graahk goes missing. No matter how much times you click interact it's not going to come to you nor will you go to it. This only happens when your character gets stuck in that corner. To make things easier on you I suggest to make this compatible with Castle Wars. No stupid corners and such. And it's not hard at all. Just make a dtm instead for a duelling ring, and update your symbol colors to work with the ones @ Cw.

But if you want to leave it in burthrope, have the script detect black chat box text and have it click away from the bank chest so you won't be stuck in that corner. Once you get out of that corner your familiar automatically comes to you and everything is fixed.


Yep I've already fixed this. Right now I'm working on the withdrawing runes for Pouch Repair / NPC Contact.

Castle Wars is a bad idea for many reasons. I believe I've already stated these in the other thread for this script.

kingarabian

2011-11-28 01:03:31

From: Flight
Yep I've already fixed this. Right now I'm working on the withdrawing runes for Pouch Repair / NPC Contact.

Castle Wars is a bad idea for many reasons. I believe I've already stated these in the other thread for this script.


Throw at me a version to test?

Flight

2011-11-28 01:06:50

From: kingarabian
Throw at me a version to test?


I'll have to go a step back to a version with just that fix. But it would help me because I've only manually got my character stuck in the spot to test it, but it worked great for me when I did that. So I'll PM you the script with that fix while I continue this withdrawing runes ordeal.

kingarabian

2011-11-28 01:12:44

From: Flight
I'll have to go a step back to a version with just that fix. But it would help me because I've only manually got my character stuck in the spot to test it, but it worked great for me when I did that. So I'll PM you the script with that fix while I continue this withdrawing runes ordeal.


Okay great. How are you planning to withdraw the runes and everything?

Flight

2011-11-28 01:17:01

From: kingarabian
Okay great. How are you planning to withdraw the runes and everything?


Lol it's complicated. From the looks of it, alot of cloning. I'm well over 1,700 lines now.

Lemme know how that works out for ya.

i luffs yeww

2011-11-28 02:18:23

From: Flight
Lol it's complicated. From the looks of it, alot of cloning. I'm well over 1,700 lines now.

Lemme know how that works out for ya.


:x That seems excessive. I think I'll be able to shorten it for you, if you're doing it how I think you are.

kingarabian

2011-11-28 02:20:05

From: Flight
Lol it's complicated. From the looks of it, alot of cloning. I'm well over 1,700 lines now.

Lemme know how that works out for ya.


^What luffs said.

Don't forget to have the script make the compass go up once you login ;).

Update: Yep, script is now running strong @ 2 hours and counting.

Flight

2011-11-28 09:30:23

Finished up 1.15 a while ago. I was just letting it run (while I watched Burn Notice <3) to be sure everything worked in every situation.

Runes are no longer required to be in your inventory. This will increase your runes & exp/hour. I personally went from 3.1-3.2k Natures / hour to 3.5-3.7k / hour. Also you'll no longer get stuck in that one tile between the chest and tent. I thought there was something else but I think I forgot. V1.1 made it extremely stable already, so this is just the icing on the cake.

kingarabian

2011-11-28 14:00:39

From: Flight
Finished up 1.15 a while ago. I was just letting it run (while I watched Burn Notice <3) to be sure everything worked in every situation.

Runes are no longer required to be in your inventory. This will increase your runes & exp/hour. I personally went from 3.1-3.2k Natures / hour to 3.5-3.7k / hour. Also you'll no longer get stuck in that one tile between the chest and tent. I thought there was something else but I think I forgot. V1.1 made it extremely stable already, so this is just the icing on the cake.


My favorite part of the cake is it's icing. Running great :).

I'm up to 4.2k nats an hour lol.

Scaper

2011-11-30 22:05:12

From: kingarabian
My favorite part of the cake is it's icing. Running great :).

I'm up to 4.2k nats an hour lol.


that fast?

looks really good mate

smurg

2011-11-30 23:54:50

Can you post 1.25 here please? :)

Saw the lite release.

Flight

2011-12-01 00:00:04

From: smurg
Can you post 1.25 here please? :)

Saw the lite release.


Yep yep, just updated. Sorry for the laziness lol. I had actually patched up the Lite version first to make sure it worked, that was priority #1.

This should be the final version as far as fixing goes. I can see a V1.3 in the future with just extra content like Profit / hour printed on screen, stuff like that.

Cheerz everyone!

smurg

2011-12-01 00:05:18

From: Flight
Yep yep, just updated. Sorry for the laziness lol. I had actually patched up the Lite version first to make sure it worked, that was priority #1.

This should be the final version as far as fixing goes. I can see a V1.3 in the future with just extra content like Profit / hour printed on screen, stuff like that.

Cheerz everyone!


Maybe drop the bank searching functions' y-value to below the tabs. I have a magic tab and i was wondering why it would click on a tab and try to fill pouches with no ess. I had the runes first in the tab, it showed up on the preview, and it thought it was ess.

kingarabian

2011-12-01 00:16:28

Smurg, are you using Flight's custom Chooseoption?

Flight

2011-12-01 00:22:17

From: smurg
Maybe drop the bank searching functions' y-value to below the tabs. I have a magic tab and i was wondering why it would click on a tab and try to fill pouches with no ess. I had the runes first in the tab, it showed up on the preview, and it thought it was ess.


It's hard to make a DTM for essence only that will ignore all other runes. I'd simply suggest moving your magic tabs out of sight, or atleast far below the essence so it'll get recognized before your tabs. That should probably clear up your issue.

smurg

2011-12-01 00:22:25

From: kingarabian
Smurg, are you using Flight's custom Chooseoption?


UseOCR? I had it True, why?

Also, you getting the clicking 'Set North' on the compass all the time? I thought it had been fixed but maybe not.

Flight

2011-12-01 00:28:03

From: smurg
UseOCR? I had it True, why?

Also, you getting the clicking 'Set North' on the compass all the time? I thought it had been fixed but maybe not.


All the time? It should only set you to north 1 or 2 times (depending on SPS). At the beginning of the script I have a custom "north-setter" that Fakawi made because the compass seemed to be broken a few times. I also disabled the compass-checker in SPS and it's been working smooth as silk ever since.

smurg

2011-12-01 00:31:24

From: Flight
All the time? It should only set you to north 1 or 2 times (depending on SPS). At the beginning of the script I have a custom "north-setter" that Fakawi made because the compass seemed to be broken a few times. I also disabled the compass-checker in SPS and it's been working smooth as silk ever since.


Ya it was resetting the compass after every movement.

Just used the fix here: http://villavu.com/forum/showthread.php?t=68440

And everything is gravy. (It actually dropped a pouch at the altar with UseOCR set to false).

Flight

2011-12-01 00:39:45

From: smurg
Ya it was resetting the compass after every movement.

Just used the fix here: http://villavu.com/forum/showthread.php?t=68440

And everything is gravy. (It actually dropped a pouch at the altar with UseOCR set to false).


Hmmm that's not good. I don't understand it, that math hasn't failed me yet. But if both you and Kingarabian are having problems with the coordinates then I need to make them less random and more specific.

For both of you, tell me how close it comes to clicking the correct option. Is it way off or is just off by a few pixels?

smurg

2011-12-01 00:46:18

From: Flight
Hmmm that's not good. I don't understand it, that math hasn't failed me yet. But if both you and Kingarabian are having problems with the coordinates then I need to make them less random and more specific.

For both of you, tell me how close it comes to clicking the correct option. Is it way off or is just off by a few pixels?


I didn't actually see it do it.

I don't think I had any issues with ChooseOption though when I had UseOCR on, so I might go back and see if that works completely.

kingarabian

2011-12-01 01:02:47

It just picks up 'attack' bluntly.

smurg

2011-12-01 01:09:58

Just got stuck at the altar staring at the equipment tab without a games necklace.

Does it matter if I start the script off without a full one or not?

Flight

2011-12-01 01:26:51

From: smurg
Just got stuck at the altar staring at the equipment tab without a games necklace.

Does it matter if I start the script off without a full one or not?


It doesn't matter what necklace stage you start it off with, just as long as it's atleast (1).

How the necklace detection works is through black messages. Once you open the bank it'll check the last black message for "to dust" to tell us if we need a new necklace. It looks like this could be broken if you're in a busy area.

If this really can be broken by lots of chat then I have two options for getting around this. First is setting the Chat filter to Hide and Game filter set to Filter. Another option is check the amulet as soon as you're teleported to Burthorpe (and hope there's no one talking/spamming right there at the spot where you teleported).

Originally I had the script set to check your equipment every time before opening the bank, this really slowed down the script but it was fail-proof. I'd rather not revert back to this.

i luffs yeww

2011-12-01 01:34:16

From: Flight
It doesn't matter what necklace stage you start it off with, just as long as it's atleast (1).

How the necklace detection works is through black messages. Once you open the bank it'll check the last black message for "to dust" to tell us if we need a new necklace. It looks like this could be broken if you're in a busy area.

If this really can be broken by lots of chat then I have two options for getting around this. First is setting the Chat filter to Hide and Game filter set to Filter. Another option is check the amulet as soon as you're teleported to Burthorpe (and hope there's no one talking/spamming right there at the spot where you teleported).

Originally I had the script set to check your equipment every time before opening the bank, this really slowed down the script but it was fail-proof. I'd rather not revert back to this.


Well if you teleport a single time, you don't need to check ever again. Say the script starts with a (3) equipped (which you don't need to check first), then you tele and you get the message of how many charges it has (crumbled up to seven), and then you have a counter to loop through (down) every time you tele.

ya dig? :p

Flight

2011-12-01 01:44:24

From: i luffs yeww
Well if you teleport a single time, you don't need to check ever again. Say the script starts with a (3) equipped (which you don't need to check first), then you tele and you get the message of how many charges it has (crumbled up to seven), and then you have a counter to loop through (down) every time you tele.

ya dig? :p


That idea crossed my mind and I don't know why I didn't follow through on that. I think it was something to do with the instance of random events at very bad times. Either way that's a wonderful idea, i luffs. :)


Edit:
Well… I found out why you 'Interact' isn't working correctly, Kingarabian. Apparently when you change your left-click options for summoned familiars it also changes the order in which options are listed on the right-click menu. I've been testing, this whole time, with 'Attack' being my left-click option. Try switching yours to Attack and see if that makes a difference.

DaWu

2011-12-01 07:11:38

From: Flight
It's hard to make a DTM for essence only that will ignore all other runes. I'd simply suggest moving your magic tabs out of sight, or atleast far below the essence so it'll get recognized before your tabs. That should probably clear up your issue.


You could just use a bitmap for the essence.

smurg

2011-12-01 14:48:36

From: Flight
That idea crossed my mind and I don't know why I didn't follow through on that. I think it was something to do with the instance of random events at very bad times. Either way that's a wonderful idea, i luffs. :)


Edit:
Well… I found out why you 'Interact' isn't working correctly, Kingarabian. Apparently when you change your left-click options for summoned familiars it also changes the order in which options are listed on the right-click menu. I've been testing, this whole time, with 'Attack' being my left-click option. Try switching yours to Attack and see if that makes a difference.


If OCR is down also, you could just stipulate to make 'Interact' the left-click menu and there's less to go wrong when you just need to left-click then.

smurg

2011-12-01 19:12:04

Also, adding the Ring of Kinship could alleviate some of the problems: unlimited uses, both f2p and p2p, free, easy to get, etc.

It's probably only a slight longer run than the burthope chest. I guess you'd have to make it recharge summoning points on the way to the altar then though.

kingarabian

2011-12-01 19:38:07

From: smurg
Also, adding the Ring of Kinship could alleviate some of the problems: unlimited uses, both f2p and p2p, free, easy to get, etc.

It's probably only a slight longer run than the burthope chest. I guess you'd have to make it recharge summoning points on the way to the altar then though.


I used to use iBot's nature rune crafter. They had the option to use the ring of kinship, and I did. However legits that hangout there usually camp there. They love to chat. I got reported a lot over their. Don't recommend it.

smurg

2011-12-01 22:52:56

I just highlighted the 'Game' tab for chat messages only now and it's been running solid for 3.75 hours.

Flight

2011-12-01 23:05:17

From: smurg
I just highlighted the 'Game' tab for chat messages only now and it's been running solid for 3.75 hours.


Wondefull news. :)

TomTuff

2011-12-02 00:24:13

From: kingarabian
I'm up to 4.2k nats an hour lol.


Is that nature runes produced per hour or pure essence used per hour?

kingarabian

2011-12-02 00:30:07

From: TomTuff
Is that nature runes produced per hour or pure essence used per hour?


Per hour for me.

smurg

2011-12-02 00:47:21

From: kingarabian
Per hour for me.


Lol you forgot the (its nats crafted per hour, with lvl91+)

On the other hand. Minor bug: Sometimes when it enters the ruins, it will look for the altar, not find it, and it will try to empty the Giant pouch. Then it finds the altar immediately and will craft runes, only using the Large and Medium then.

And a few times, the chest has been just out of range, and it just stands there.

kingarabian

2011-12-02 01:48:14

From: smurg
Lol you forgot the (its nats crafted per hour, with lvl91+)

On the other hand. Minor bug: Sometimes when it enters the ruins, it will look for the altar, not find it, and it will try to empty the Giant pouch. Then it finds the altar immediately and will craft runes, only using the Large and Medium then.

And a few times, the chest has been just out of range, and it just stands there.


How much accounts do you have farming? lol

smurg

2011-12-02 11:29:47

From: kingarabian
How much accounts do you have farming? lol


Lol, just one for now. I'm sure after there's a stable period of SRL (when they don't target color with each update) you could get some lunar accounts on the cheap from nexus people.

Yet, I wouldn't run that many anyways. Flooding worlds with bots again, regardless of type, wouldn't be the best thing at the moment.

kingarabian

2011-12-02 12:10:32

Agreed.^

=-=-=-=-=-=-=-= Naturez 1.25 by Flight =-=-=-=-=-=-=
Time Running: 5 Hours, 16 Minutes and 51 Seconds
Runes crafted: 11464
Exp gained: 53784
Breaks: 1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
I just realized it was stuck @ the alter because it didn't withdraw a games necklace for 2 hours :S.

PatDuffy

2011-12-02 16:37:26

For some reason I cannot get it to run past the 30-40 minute mark, due to a few different situations that occur. After about that much time, 1 of my pouches degrade, and upon the next banking sequence, it fails to withdraw the proper runes(it usually tries to withdraw 2 astrals and 1 cosmisc, and no airs) then it realizes it doesn't have the correct runes, and gets stuck examining the astral runes(I assume trying to deposit them).

The other occurs randomly, I have no idea what causes it. It will withdraw a new pouch eventhough the current familiar still has 20+ minutes left on it, then somehow it always ends up at the nature altar without a new games necklace when this occurs.

Other than those 2 things, it is an absolutely stunning script.

EDIT: DERP Didn't realize that it was trying to use the repair rune pouch spell!!! I assumed it was trying to use NPC Contact to repair it. In that case, it must have been getting stuck because my law runes aren't in the first tab so it couldn't find them.

Flight

2011-12-02 19:42:00

From: kingarabian
Agreed.^

=-=-=-=-=-=-=-= Naturez 1.25 by Flight =-=-=-=-=-=-=
Time Running: 5 Hours, 16 Minutes and 51 Seconds
Runes crafted: 11464
Exp gained: 53784
Breaks: 1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
I just realized it was stuck @ the alter because it didn't withdraw a games necklace for 2 hours :S.


Yep. :/ I was talking about this earlier in this thread in fact, how the necklaces detection works. I think today I'll give i luff's idea a whirl about keeping track of how many charges are left. What I'll probably do is small necklace detector when the script is started to get the initial count and then just subtract 1 charge for every teleport we do. That way the detection isn't faltered by a busy chat box or other game messages.

kingarabian

2011-12-03 19:26:04

From: Flight
Yep. :/ I was talking about this earlier in this thread in fact, how the necklaces detection works. I think today I'll give i luff's idea a whirl about keeping track of how many charges are left. What I'll probably do is small necklace detector when the script is started to get the initial count and then just subtract 1 charge for every teleport we do. That way the detection isn't faltered by a busy chat box or other game messages.


Hows things going for you so far? Sorry, I know I am a pest pushing you around to update :garfield:.

Flight

2011-12-03 22:02:08

Yeah I got side tracked with different things. Instead I built a simple gem-miner in Seers Village and been experimenting with mouse movements. :P

We'll see if today I can get around to this.

kingarabian

2011-12-07 17:42:41

1.3 coming out for members?

DaWu

2011-12-07 20:14:15

From: Flight
Yep. :/ I was talking about this earlier in this thread in fact, how the necklaces detection works. I think today I'll give i luff's idea a whirl about keeping track of how many charges are left. What I'll probably do is small necklace detector when the script is started to get the initial count and then just subtract 1 charge for every teleport we do. That way the detection isn't faltered by a busy chat box or other game messages.



I think best way for detecting the charges would be to get the uptext or the menu text of the necklace every time you use it, and when you have it games necklace (1), you just set a boolean to true which makes you withdraw a new when banking. I believe this should be the most reliable way of doing it instead of relying on calculation or messages.
Calculations may fuck up due to lag, say, you lag when you tp, necklace using gets called twice, you only use 1 charge in the end and withdraw new one prematurely.


Just my 2cents.

Flight

2011-12-07 21:27:54

From: DaWu
I think best way for detecting the charges would be to get the uptext or the menu text of the necklace every time you use it, and when you have it games necklace (1), you just set a boolean to true which makes you withdraw a new when banking. I believe this should be the most reliable way of doing it instead of relying on calculation or messages.
Calculations may fuck up due to lag, say, you lag when you tp, necklace using gets called twice, you only use 1 charge in the end and withdraw new one prematurely.


Just my 2cents.


Already fixed in 1.3. :rolleyes:

PatDuffy

2011-12-07 21:31:21

Hmm…potential bug in 1_3?

Upon entering the Nature altar, the script does not take a step forward to see the actual altar, causing the function to find the altar(I assume that's what it is) to return the pillars as potential points, since the character is not within view of the center of the altar.

DaWu

2011-12-07 21:36:52

From: Flight
Already fixed in 1.3. :rolleyes:


Sorry, I was not aware of that as I haven't used your script.

Flight

2011-12-08 02:09:34

From: PatDuffy
Hmm…potential bug in 1_3?

Upon entering the Nature altar, the script does not take a step forward to see the actual altar, causing the function to find the altar(I assume that's what it is) to return the pillars as potential points, since the character is not within view of the center of the altar.


Fixed in V1.31. Lol sometimes it's tough to keep up with something as big as this. So many areas where things could go wrong. (I can only imagine how much Fakawi has to manage with his monster HLR)

Lemme know how it works for you all.

kingarabian

2011-12-08 04:11:50

From: Flight
Fixed in V1.31. Lol sometimes it's tough to keep up with something as big as this. So many areas where things could go wrong. (I can only imagine how much Fakawi has to manage with his monster HLR)

Lemme know how it works for you all.


You are doing a massive great job. :spongebob::norris::garfield:

kingarabian

2011-12-10 01:22:21

Well finally got around again to use it. However, for like the 3rd straight time I always find myself near the Draynor Manor…

I just wanted to let you know, that even if it may look like there are a lot of errors happening, don't feel discouraged. I mean your scripts core is well rounded. Just a few tweaks here and there, t's all.

Flight

2011-12-10 03:11:47

From: kingarabian
Well finally got around again to use it. However, for like the 3rd straight time I always find myself near the Draynor Manor…

I just wanted to let you know, that even if it may look like there are a lot of errors happening, don't feel discouraged. I mean your scripts core is well rounded. Just a few tweaks here and there, t's all.


Well thank you, Kingarabian. :) Yeah sometimes it is discouraging. It seems like everything was running fine before that last graphical update. Now color shifts an extreme amount quite often.

Although I wonder how on Earth one could end up in Draynor from Burthorpe.

kingarabian

2011-12-10 05:41:05

From: Flight
Well thank you, Kingarabian. :) Yeah sometimes it is discouraging. It seems like everything was running fine before that last graphical update. Now color shifts an extreme amount quite often.

Although I wonder how on Earth one could end up in Draynor from Burthorpe.

It did it when it had to recharge summoning points I just noticed. But its completely random…

Scaper

2012-01-12 13:46:27

When I have the option to click either "corp" or "burgh de rot" or whatever its called it wont tele back?

Brandon

2012-01-18 22:43:54

Uses Castlewars + Summoning Potions.. I'll do the obelisk later unless someone wants to do it.. I have the code for the obelisk from version 1.0 which still works.. just kinda lazy to put it in as this is what I'm currently using:


{/////////////////////////////////////////
// ~Naturez by Flight~ //
// //
// Version: 1.6 //
/////////////////////////////////////////}

program Naturez;

{$DEFINE SRL5}
{$DEFINE SMART}
{$DEFINE CRASHSMART}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i SRL/SRL/misc/paintsmart.simba}
{$i SRL/SRL/skill/summoning.simba}

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//General settings
RestAt = 60; //Energy to rest at (while at bank)
SwitchWorlds = True; //Switch worlds after break?
FlagFailsafe = True; //if FFlag isn't working.

//Pouch settings
RepairMethod = 'spell'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell
SS = 2; //Which slot # has your small pouch (0 for not using)
MS = 3; //Which slot # has your medium pouch (0 for not using)
LS = 4; //Which slot # has your large pouch (0 for not using)
GS = 5; //Which slot # has your giant pouch (0 for not using)
BankTabVal = 5; //The tab where all your stuff for the sript is located..
ChangeKey = false;

//Break settings
BreakIn = 150; //How long before we take a break? (minutes)
BreakFor = 15; //How long will we break for? (minutes)
Bir = 25; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction


Var

//General variables
Version: String;
ReportTime,PostID,
CommitTime,EssPrice,
NaturePrice,Profit: Integer;
XPMod: Extended;

//Dynamics
Stage,Walk_Fail,AmCount,RuneCount,
Exp,Exp_C,RuneCount_C,Tele_Fail: Integer;
DidCheck,OptionsSet,PP: Boolean;
Path_ToAlter,Path_ToOb: TPointArray;

//Break variables
w,x,y,z,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;

Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
WorldInfo := [27, 42, 45, 46, 48, 52, 59, 70, 72, 78, 79, 87, 104, 115, 117];
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'Slayer';
Active := True;
end;
end;

Function GenerateWorlds: Integer;
var
Worlds: TIntegerArray;
I: Integer;
begin
Worlds:= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; //List of worlds to log into..
I:= Random(High(Worlds));

Result:= Worlds[I];
end;

Procedure CheckStats;
begin
if ((SRLStats_Username = '') And (SRLStats_Password = '')) then
begin
case MessageBox('No Stats account entered, would you like to set one up?','SRL Stats',mbYesNoCancel) of
mrYes:
begin
OpenWebPage('http://stats.villavu.com/register');
TerminateScript;
end;
mrNo:
begin
SetupSRLStats(148,'Anonymous','anon1337');
Exit;
end;
mrCancel: TerminateScript;
end;
end else
SetupSRLStats(148,SRLStats_Username,SRLStats_Password);
end;

Function CashStringToInt(S: string): Integer; //Thanks TomTuff!
Var
i, ii: Integer;
Numbs: TStringArray;
Temp: string;
begin
Temp := '';
Numbs := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'k', 'm', 'b'];
for i := 1 to High(S) do
for ii := 0 to High(Numbs) do
if S[i] = Numbs[ii] then
case ii of
0..9: Temp := Temp + Numbs[ii];
10..12:
begin
Result := StrToInt(Temp);
case ii of
10: Result := Result * 100; //Since price is given to 1 decimal,
11: Result := Result * 100000; //instead of multiplying by the entire
12: Result := Result * 100000000; //factor, you must multiply by factor/10
end;
end;
end;
if (Result = 0) then
Result := StrToInt(Temp);
end;

Function GetPrice(ItemID: Integer): Integer;
begin
Result := CashStringToInt(Between('<td>', '</td>', GetPage('http://services.runescape.com/m=itemdb_rs/viewitem.ws?obj=' + IntToStr(ItemID))));
end;

Procedure Loadvars;
begin
Version := '1.6';
PostID := 849594;
MarkTime(ReportTime);
MarkTime(CommitTime);
EssPrice := GetPrice(7936);
NaturePrice := GetPrice(561);
MouseSpeed := RandomRange(18,22);
DidCheck := False;
OptionsSet := False;
XPMod := 9.0;
PP := (not(GS = 0));

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);

Path_ToAlter := [Point(3020, 4640), Point(3070, 4635), Point(3120, 4630),
Point(3165, 4605), Point(3195, 4565), Point(3245, 4560), Point(3285, 4575), Point(3305, 4590)];

Path_ToOb := [Point(670, 115), Point(670, 125), Point(680, 110)];

end;

Procedure CheckVersion;
var
Page,NewVer: String;
begin
Page := GetPage('http://villavu.com/forum/showthread.php?p='+IntToStr(PostID)+'');
NewVer := Between('Current version: ', '<br />', Page);

if Version <> NewVer then
ShowMessage('Your script is out of date!')
else
Exit;
end;

Procedure Report;
begin
ClearDebug;
WriteLn('=-=-=-=-=-=-=-= Naturez '+Version+' by Flight =-=-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Runes crafted: '+IntToStr(RuneCount));
WriteLn('Exp gained: '+IntToStr(Exp));
WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');

MarkTime(ReportTime);
end;

Procedure Commit;
begin
stats_IncVariable('Nature Runes (Crafted)', RuneCount_C);
stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
Stats_Commit;
RuneCount_C := 0;
Exp_C := 0;
MarkTime(CommitTime);
end;

Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Report;
Logout;
TerminateScript;
end;

Procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colour: integer);
var
mx, my, Pic, Pic2, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
Canvas: TCanvas;
begin
SmartSetDebug(True);
GetClientDimensions(mx, my);
Pic := BitmapFromString(mx, my, '');
Pic2 := BitmapFromString(307, 70, 'meJztXQl3E0fWVVdXL1psybvlT' +
'bZsS/K+g1mMMSaEEAghKyFkJ4SQhGwz+TKT2X76d+97JXlnwGolE1' +
'AdHR+wJXV3Vd337lsrlWqP9miP9miP9miP9miP9ni5h5dKmfrL+6N' +
'vpj3a40UZXlpeUSoVPDe48Cm/y7MDXlA0eOEf+K/JyrfZNk7boz1O' +
'NfyU7feiaRPP+FHVj6ZMMCbgKniEaijg8glY/vvYL+j18MF4zo/n5' +
'TXH7wnLJhg2ttczec9kTvxse7RHexw7gJpw3KQX/fSyn17y0yt8xQ' +
's+cTptwjETjph4wqSnjB0kVI8O/F4/y08tyJes+vjCeNaPKn44IQj' +
'tP/6z7dEe7XHsgGaMKoZ4XBZlVyOa0vN+ZsXPrNnshu04Z/MXbcdZ' +
'G9f8YMQcxRdABzBm8f5F0bmiPR08l0SHii4OS8bL/BFP2B7t8SccA' +
'FowagBGKDjia932vhIMvB4M3wmH3gz7rgc9u0H3TpA9Y4Fc4Mv2eT' +
'RC9w1YlEAf/po7Y/FxwnPaOHiqIl6lFsZv/G6vbXK2R3s84/CClMm' +
'lYFoCO9CSePVcDcofR/NP4vnv45mv4+LtEGjF7wmursPQMh20MYHB' +
'LDTsGX68a9v2XLb5Tdt51hYuWkAbmM2t+TBdaa6+8MNyTmiktxlCe' +
'zQ9sIuATei7zLrtvhJMfxEt/5Le+E9m6ed44n5U2CanjavGZI98ME' +
'6BplLnzvhdl23urO3YtFC1tUcxNC8+hd/gO4FcW/ToSnqxhwcG4tE' +
'iqPrBkIHQa4/2aGr4KVDNWJQmVB6AufYPAnPuSVy8FQJcRNwZGwyb' +
'oy5WgBoUF3/q3Q2gW2GZAtrDb4UAJj6Vv2AzS+S3pMEvvMa0qbBsM' +
'IcQRDTJ28BsjyaHEUfQNB1B0H2ld0KgEtic/SYeuhOC3ELrgZdmps' +
'2xWo98OEtoZ2bJacFdwWA7L5DZZuZ9P++B3R0yTl/MYejlJjBhkk8' +
'YE//R99Mef/bhibUIYK4ymllY8AFMUtm/xOVPou6dQClu90X7FNMJ' +
'ytQOkshR7cpHurYsTcuXAZL1AQYL4ZZZ9WFod6288BShPVo+oPIAS' +
'QATZCxbNoDk4s/xwg/xxEeRakxy1J0gLj+NoQG2MDmxLcFpwWO7L9' +
'iXCpUYMKXBY+lD2w0Gdl94o7o9Wj689D5gVk3pg7B0N6w+iqsPYxi' +
'MvdfoXM1v2dySb07OFqAvaJLAhMbEmzsXXi6VAc6A2YvnCczCJdsD' +
'udSOELVHcwN6MJwQKlvxM0t+XiId4LFzT+LKl1H/a3SxwmwsnLN+7' +
'sQvoQdpxs+u+uqbjYsv176EXFLhll2nH7uw7reB2R7NDsuICZMBKs' +
'wKoEP1oh19L5z9Nq59zdgHUInN1nc1MJ3HfwH0RTBq0kt+TmKaY++' +
'F9mQIv5CjwTq6JXKUA2F4yZh8eyQ/TCoYJqyYMLDqa2LA4M2g+igC' +
'Noduh8ApNht+H08db2bSr1uVLKB1EjnoWf/3TJH1/uC6M9PpgccyT' +
'wOzd5XpUvG0aQPzxR+t33J2wGMu+izBBQCCj+Fn8VZQexxDdRKqZ6' +
'k0O5b8Y4Imli5ZJscuMGKCN899F/tRy+9ZB5Q1823ynsl5f0gxi2Z' +
'PMRFReKzOVThuklw1n8V0rKd7uQz3/92BnQZl5Pe4aqzWCWHb67kC' +
'rgXamMAgxH7Xtp36PKo8ZEATbDa/ZXsvHePT0BQgJq7P0vXRey2Ac' +
'Wp+B4wYQpIFoSOsWdNys98zHQ5IgW3uagFWmSTcfTnouhx0nrfhaG' +
'LAZChKsjjwgiH/J6uk08pBkSrkWi+KYAEkse4w/VgvOWp8bLy4JQo' +
'UwI9nXNEWgx07ZLMdZ+3ER2SzI++EgGrXZTtwPTiam8cKsok9YILL' +
'QWOa1qe+YJdqTiAT4Wp71aDEZus3AKtZhb278pxpA/oKoQRUQoIFw' +
'4nl7fNCNc4t6+mqPh7w6BL8MUMtCF9eJ6gMMBlKzmFKTlYCjhpXSv' +
'8nH1gUreAgZObonIF28LsEnolqT5eRvsIdnlmn1mO2z4pffCOAwQg' +
'2qzoUPC09eiSbPbsHTFDZ7itB7euWA5NqWsITLDTTktJFanzCc8y0' +
'NJOcAkFLWcWPjdvAMmFROmYNrQCN+ZaMqglWizd3J1hx1uks12tm5' +
'ymlIbGbTz/W2zvth6V/RT9xx1cvU7wc2fbqmLXMH45rvGctOKIUrZ' +
'g/phLQk3tLKLwMgaN234Ey5GlKHjcVsXQFsXXB5Z/SDQJDSV2yjJi' +
'ssQSs65LFf8Fmx94Px+8x0wBbjr9fPayNjKQW0ESdp5FVuGQnP4ta' +
'mixKUQBozPFWqaEuWvUbQ6RkMEuzfjjJKWrF6gMRXBGpY9WF0Kvgl' +
'rov2sIWxRdLchZYKo6b5M+xY6pZn33QL7eiW5pikzXpq9wGKn/CHq' +
'+j7HXPm06g9VnyAD1uGCw3MIXbC05LuWHRUzDO1FV5TejKECUGtiW' +
'+3+QprGjjrMjunfc1LQovfKpFq3PkLsU8D/m8uDHcnvKN5jcnRJBL' +
'lhMyo1LawVOYm86tvth2YEz+PSRNQnqkv0eHvDBL3U9rJgBwuQtVx' +
'LW464CJnT94M6g8jGBmgtxCk/ZfCw6ZORAOeF61T3PrxMj4hy0EJi' +
'27knEF3WdsYZtwgDSADAHZZo6uwJOrf1x9d5ODfRuWfK2p0W4qtog' +
'ZThWW/P7rAcQXeCxFxJrv1ByIRI05w01dcdGpS9Jmlp+bzLJkMmxj' +
'dUI1NxZ+iJf+kp6+Hxyw7j0KbSyQ6eR+wK1i6iC1uJ3m+G2ndlIxW' +
'6zqSm4JtzWQJR93Rak4QZ3InzDAJQe7Y4PCE4Idy+QWSGuOWmFxeC' +
'nVVqyw6CcYxd4xFCALrotOAipbAxmL8p2VfWXIMiHK3/ha2psfvrS' +
'HwJwsohhfca1e7HzSdY4As2fHOv//LqnpxP1IVRLzDaYP0GhgkF5Z' +
'kRtMMDhnYZO2yI7A10LyZJZcASmAqeVmkAZaCAMiDemBPYAX1Fbi2' +
'GTfhsb8i4mRnjK9m3bkdth1mbWrmmAA8zy77Hdu8jby520zwKSfoe' +
'aWEuIIDKF4Kyx9EBbfCCGLMAN4/K5tPvXwW/x9ZorlPHiBTmdqJq7' +
'Kntxfvb7saD8eAbL9dOhg3Fa2Ciacu2WXEgk3gxfukBV/q9x18Zxb' +
'KS0D1BoH7CK+oZa00jT1BnHD9AcSj7X6U6/se/zVZBpr+L3ilhHrL' +
'48VF2lDYrBAAZXboNiEUdMjhVeQ2Hhhjbqh8ra5XbExnINi3sdXnf' +
'hMSmWl4QCgjS8ZuhWQhyz70EdDt0NYmjSghKdN3g/9/Q/lS7RFOyH' +
'gljYtdkgrnIdksCXTWGu84oo4Y3H1adN5hoVmGtZxKb5nOFfJsiao' +
'HhWP+AncAYDDb4bVhxEeWUk19Cbmv0vqWCkcYHTvWJbYnHawYFYoE' +
'BQQlgZKB9eCqJz/PoaiBDkZeD3AJfRyEAuqpnF79BII1ccO4fa4Fk' +
'C9As6dZ1mOp8YRvvOUwIyYUEFFeYbiGhMOia2NL5TDaLWgLhP2DHg' +
'Xdi/DSVcCDfVCXlFTJOIiMxQU4ISkBGWDG3NW7QphklvzsTG04qlL' +
'VDYbbiw0i01X+iHIKlwgmcTq44UFwovmlQooadRD+XnODr0Zzn4XV' +
'x+xPAQiFLDCO7GFMmXHW7wjjiNepSZ6dobAxExO3AuZzLPg42sxkz' +
'PfMm+We343KL4RDGzbPbJqJNpSI/yx4rgZvDP5ymjrCLPWjWIzkKy' +
'KnUX2kqZjOT3r/tonrJKUaY1LAKqZ1GD6YonSGEjBJTAh4BIACDYe' +
'HhxKE/Y4Jr/yIBp7jzM/cCMYeStocjbUjxQUDegiVnzoDa7vyv+l8' +
'cI/Sh9EuAr2RnrBdSwUsm10Y2i5Ot6Ad84/icsfOwGL78Eqj70fLn' +
'wfzX39/FVqNgW7iRCYoWMhIwHckbcpMaY+j4q3Q92Tmjk8eCOIJwU' +
'szIzi0uCvuL243GxQiVWHeQ+ErcGco1pdMy46AZ6Th4Vmx05mG5wN' +
'zgmV+xL3z6k1CC24MbpWcCHgXb2jfK4Lzu8Bsy49R+YMaOg9AIwQp' +
'6u/ped/iCc/pTAnlrdYBD33ddS3doyIxNM1wiVZ4auVhyGAQPq0Sq' +
'UJmE9/GeVFEmJiJz4M87U9eIM/cEKkMZdqzISB6Ul2zQRZPZ6a3hX' +
'ZDJADJKsi9yB+NX5BjX8l6Hs1wJbISZMTsM0E74dCIE+DvfcKZe/w' +
'W0H5Xth/g+vOHOOPI5h77q0myRa7vsaaF/zCpp17Eq/9I734Yzz1B' +
'ZOZMScZ4ajU5jP0fWkmElhQh4hryGo1Qkv3IvWVQc8Cqos/x+v/Zl' +
'38aeYhQ6IFGZVbE3l4mTAn/L+P2TZKacNZCzGeB7eZJViwPYo3Sbl' +
'VpxRWm8soNuIhLxul+ooRJatgBVmpioJEKt0N+3dsFipmnj4QxQix' +
'uWGjydPHniATwGTUN9v7ilVRA4TiKhAU2I1ss5zjtsRdMaP11QAii' +
'/nnD+Pi7WDwVghZoVnooD2T74W50WMCLYxjinWsnlWsWu1xjG/WnB' +
'ZcEd85802ssg6ziq+aeCts5N1R4QoThhQiMO8ECedC+GLGCqVnOPX' +
'1QLGZE7KqVqTXaMi56HfTK+IkM4RJYcMmnPAg24kFmKukypmSB4qI' +
'/Y+pBjB7N1oSRqW/RVgNlh7rC0ABAlDQuCj50or4abs9F82P6ixiX' +
'lbk7XDhRwJz7C5pDywdUKClH2PoypnPo+EmitRwCZr8667wYfGneO' +
'XXdOVhpB0tsARj74Rp8SRDdxSv2ZmvI9wDayK27dCN4PTAlC1BFVn' +
'ZwyMmh3rkkuPwkA9T913adqNkmFb/Fq9OK29OlObpHJW27lpZ8fVh' +
'IYjCg/FrCHDcYYabNlAfHUxCLBneTx2nLogLuM+gd823sNS6j8QiR' +
'WMSmHO8cwUmGCDNtzm6dAaFCw3fCfFEeGQIvSqszmW3A+k7khTu3C' +
'q3Qe920sWYRu5k3mUMYvO7ejRlRFLJQm9tWTj/rJ8/YytfUZUAuZo' +
'X4Z+Qft/MAIGnY3PCFF+hvwsPzvm/H9nkmPOBEcgDYvvN+HPfCTCf' +
'MGFS9xiAyYZp+xfWk+DODHlUQ2MSmJukHGwds2XDJrxSOiCT0yLMY' +
'T6AVoFd40LgtFgaLNDEx2H/qwGN2UkT9KRWfnX6FHPVvROU3g+904' +
'oE1k2MOHqsxJXukQWQJeIOwCevfnDg+ynZykadw40OkND4p2RT4lp' +
'RkqYkNjPve/tsAqrUUXJdCK7eq0H1YYw5h0bDtsTMKPXFWoDR5erK' +
'xRS8QxNC54/amLO8CtQuhJ5fcMBMi4Ox9ojFJpDPmFUgd+ZxVP001' +
'EQCTU5TCkG7ZjHp2gqvnjS44BdvBdiQM4/ZxA9AYKT1dgDdrY3lGY' +
'Kf9XML/vSDSN2z2Jbdl21mKvmsctIMest9SELIQ+wHcKTWeaRT9WA' +
'NNgAWAlQWmxyXY4AG63vhiIvJI9PTjJHBmyEmbfkXAhMTAhCN3Uom' +
'oIWdo2ZmUSxfWE/g9tg/0Fn0dXwbd8GUWOH+BzCnP4qG3+ZflV3Az' +
'sqOnEoyWInDaoaJiGJtVN63bQekShG4g5TomDiw5Ko+qNouk3F1nn' +
'MNmk4dtQGa6JQbNZFGq/cZBKzPHXNZKLi9kTucCtiSo++6zHONJgC' +
'V4NiN/q6ZmumeP3A3jXJCbWWJz059FoV9dcNtiajHb8hmJbkFe548' +
'4ZMw6pHPB3Iby/QEkiFUT/+wJw0KfwfMECICG6AoZS+Y5OqDqGeNn' +
'n/1NDIzsOpjXfAGx2ZBnNZtKunQKvekxKRAC6tficg6Q5HVupQ5ow' +
'knCz5Io+omaEyNnPa9EpgjpXZ4f1RhJyIgEeIaH8H7sUD0zU4lI6c' +
'YN5E9ozCcFu89/qu+DkA1v2k1pgD10XdVMCtOOe6xL6LSG6dZFSqC' +
'ceMajMuXM4IwZQav0iuu+3Pu2+gQT4bgyi5ThjCmdjXIrpEfsgFOM' +
'6zBq7/2XyiX0uwLzQyJpw34/Ox3EaQ31eUrku8qDdVzy77d13U5PC' +
'qmxMmmXll6F7c5qzZPIaNmJjO0t6A0xXZYd01oQdtyJfkq3xWOFbb' +
'EX1pJvk2cAhOXgDCc/IyeTwreDSr3OSiOO4GyGk1cjCfNzLcR1Ap2' +
'i+5b9ixKOtkA0kzzzXg/38aqJvAz6En4QntXDEV+rvhg8rDmln6mj' +
'QliBj4Puo71OjS4QyYZ1NCSHwUmFgjTYpsmsW4EEjdZ9RWYwBoF1F' +
'k7cDOoPIjmnkTUmOqYqvkd6zSsGELaZewGtGf5l9O0LaM+2nfAB74' +
'ZXCI7aUZuOWXNrJhP99wKTD7MpoKS173ttq5GWvHBow2Tmx3eHs/E' +
'T/qmhr3S2ww4jr0fqtTS2EFh0x5qIHlM+MawZU2jukQNZ02kZGsCQ' +
'QRmderTkK3z5MsxtxP3w+5Fs/dxrUzZpE19+iTMEwbj7KK7YT5A4A' +
'/eYjNq3CdIO7QVJKTkV1jdAFi16U8JXogO9ZP37MDMTHoJrGRlLPq' +
'4B+xJqPKsRPQKyy3LoffE4wTpdMWqBoS5rVY/KFzQd+TtadnAK5Rm' +
'GmGB5aXaLTFiL+0BAb2+a4FqTAUm1ggKffEvcfFmoI5BzYdh08Vtw' +
'hZic+XX9MrfTgvMUj3xZpq5TMGgVwCRuO9alAOYUx8KMH1JgOlj/m' +
'HnWdeZ3KFjwQ/Gkj9bx3SkNHxAVI4b4CIz7k1/EoHkQF12y6UZVr4' +
'a2KN5BUcXpe4owMamXbxB9quUjHSozmbL90KKxB3HFobvhAOXrX6h' +
'SglWh11kQC1xQaSNqek03iD2NbcHd4KdBixo+NidbYQ5qZryh+RR0' +
'1/WXUDb9imJT6ccxm17GHpaUa7Tgut6LYOmykmsRe1xvPbPNJYDZB' +
'6UgLHC4cMP6CrylunKnmsAc50oTjB+xC5kS0yrxiTA2FFoKHle/Xu' +
'69GbAbv8V8cuJ6MafYG0BlRv/ySz+GJ9CRGg0WYEJFNCUHvRGXguq' +
'X0WqMftvBJP3GLNjIuKABxadXfFdNnU9OyWaNMl7A3xxSc1JucEcS' +
'4H8Qqr/IoMaTDhXgSBh5fzcs24ROWbIdTBwXr6CeDsz9UDqPO278s' +
'd161V6+4y9HWopAQthZuiSZfvK5ael/51yGFcAxe61ErzG1fGA+On' +
'iyGeZQ6gpH9lFX+P+wAjwogFfCNWEb0kzzKVfpQKTW+I1bkjH8Fsw' +
'YCjFksoOk3/9X2m643bEHXcjSB+xUDSvmMDctg0qS+/Hlk1wT9IJJ' +
'jE1KAXMA8Q1cyN36dgH9CbfDf1OOShnmjkAxVsMHECZrv87jVfts+' +
'houst/HQTmuNG8U00y6d/0a5/TeMH8a7XFxAehxr41ttt5bg+SuXU' +
'eLuAfOY6n+bGnLiUvlyk6o97kh1SXWCAnsl4NitefI06EFQclUOkK' +
'2UKt1+M+TCktoSjswOkHEYgQ+01dIiOqfRUxPU+8ZNgwWhoGVhkUk' +
'y/qVidYPGU6JekORgqEgBq8jJucscyykChz92VblrARXgwoiBUGEp' +
'h4KSvuh97yJV+pLO4EP+e/j8deb1USP/3nSulX/dW/MfNHg2igRtF' +
'RjRk5na7AXP6FwNRkuWayBA9fRfw/uAc1M8muLzFmgd1IjXmTMQuI' +
'd1+OTB25Hiz8GK/9ltb2xUM7p5oo6XuvHnjmgw15Mw8ZQtUWVZqCR' +
'W4/ykQLBizqkGTWwQrZL625xHdoXXcoNwBC47IZuUk/KmSRLhPuAT' +
'cWnpwce8y35pxBrWEgOqz69oDp2gFt25lvSQ5VIzN8/H6IacGE08b' +
'UIusrBEsrgKnPrlUD2XlJEV93CdKFLVzRlUlCLEA6Dd8M9oApmavN' +
'OMZPGpgZZc64ELYEZn74LdpWC9+3qhW7q5yFKT1ulv5CxyzMbY1uk' +
'xIcCpjEezam2qSleyxGgMrwj8SyTz98cipNJ1A2q96V0XdDiILhK8' +
'F+nZgbNbMPY3cMx+PT9oaydGpp1RVkY/GKXf6FYgeXxmzQ4blFM4d' +
'uQGGVtH00cXeF85agUDowGrlAkjMPNTGwy6pJoBLimtUfUm7QdeH5' +
'8p3otpLkWLUT9wNTKy5ZnnmejbaG7oTa4gBKGYwxgyfN0akLGimND' +
'rgoyVNZdyvSY0d4kRODqySuWB3yFqFtNLheD6IhTzcJrCoCc9OePp' +
'T8lNvp8LQ6u3w3LApAWgtMTUueocbE42gyj8uyO8/zZQ49IJ0/E3S' +
'Z9lwRYP6axnqxAmvVTyyBXAa+LSe1XVCXkjkcavAUd9i3bg+lPQCb' +
'/bD6n9nIOu569ZqLaROPGUz46m/x8l9J7Bu94/LnrTrqXXKsWGcQU' +
'607SdnkXX6gSozOdb90N4R1iVtqJODRpHrOzq56Yma8D5gNKovJVM' +
'HbsWGnxL/USJot3g46xdVDaqHa9jzjhsl7oRvx3JLL96C3R9zRzFH' +
'3SNuyc673ZucaqdqshBc1hx/rgncmbuxDZGl0u3+bqQVKZVsHTAJt' +
'zJVOYEXmxbsC40I9z9x1Bx9QQ+pa3wEqizdPfkqeSSfAYJIWFmgqC' +
'4vOMt8G0w41oTU+kAYd48ddpsndocBcYkJR94a/+CP9YJBRuBxWAc' +
'aUugczq65yn6iUnECvlWfKUH+VXVIBHTI3A0ZywdnelcxhqQqE+Dr' +
'GGfvUocCExtTAHzbbXhWhcdlukDnVRyTMjb55UJpd6z6uxYkSj25O' +
'SsOOBrubGjxgReRGzW88uOsh0OMFea9r1h+7RQ8txALWAuDFDWhYD' +
'cKKS7NOCzTx0D8TM6TqsGeTZSaahwa7b/K95Mve6PYfcMUClEglAn' +
'P9X2JmXuOiY5ce2njaVlQdZXgbdi9QDMMcU0f1mhyxx8TGNZORLGt' +
'M++QnEYwL0LaZx3GYeJQqJcCsuqT9getB9WGER4PGVILUIzWP2Iqa' +
'NMtEcfClsZYxWB0eE+qY9rAgSXprPjYeZhtgwcbQHLyMlJvt6btn/' +
'OK0a3aHhwK48Mh729i6RAsAs8iGBuLqlG4ewGD3pnXAlINLNIoUJU' +
'hlJbWMprTaC2fk9DGp7Jv+LILBsvQj9yf01NCtICPhkgYwoSDA7fN' +
'SmUhgJr1JCMwqLf2+SxbaOc/dyM4qfetJm9hWsrAqLh7Ei06Y+e8d' +
'MGFTO2Dulwfii0hLgEnLvvBmNQA1Ry5BYi/A9NUpTaLyiHlQEJKlF' +
'giolMgoVQRqPrM5+Tfx4k+xpnNrtwSWq29KDctZG/wO51uJlUH3o+' +
'zSrkucc6AS2IR1A1bPu4J2qJjnDfE7R8Gyr9UK4cEoD6gpS7NX/UG' +
'ZeS0l04zH7kv0JGhGn6anDr0Zds0lNBGeRIcnjbqFIYj6XuEZ9Kxi' +
'exBpydL6P9MzoHNL7IOkCoWHcnZ76iGErKCwkpNZEtbjdYckkDImj' +
'evp9NgUTptsuESzXiWZQRNdghGTmfBA3sBOGTpUjVk6oAS5oGMsbc' +
'D+xMbA7QGYIHsMrEhWeYLE3uQ8akyo5mvO56aJZ/1XW+OdljimOiR' +
'hN8F80IoqALPBmnKg1jD/R435XZryyWEELltb72roDhtKYHVA7Nnd' +
'bks2YempOdvHzRbXccI0algOSVTu+SpbW1A6fReV6tFS6XVJ60ZTV' +
'bsk5an4RphUjrQ7emDFJcEWztH7pNUBWAWgcuWX9F6RS4enb6b3fp' +
'qeUq2KUhODlZtJy+9GgblaE2Av2mPwaOSimcGa3FGjzUBiaaoDOdl' +
'ZNUDl0s8sTNZkG3swUMsiWXGRsRvJG7y91d8ATAbUtGFdgm4Q7Rqn' +
'dUkKTCrxdZvftC1qJdqoNMxJWqYWVVFjvsXyGSgRsIWnXdpQ7Sbpc' +
'/DFJTvjcpzY90OCR+P32WRSlR3+xNDAyVsjOi6BmTEvcUHTfbQpLr' +
'597/Iyjjz0X+PRCVXpAq2pCBCMmAcqtTnyTC1emD2SQny64fKOpBl' +
'RVDblu2H5E7JoXHpWvBmF6t5dakcgLfcu8h5cEDMnHXjY9jPa11Ew' +
'iaFN8zLLDpja5xPSKRpJ0uepRxxq+FILDfCY3Rv+8i+u8kubWhzoL' +
'FR33WsPAd0krJ1/EvVfD9Q6S5A/gNVkpBy4eDtUYEIUMAtlLfkUZR' +
'3sMzPpomPYDKxDfKTXpaam6/Ip8SBhIGyaN5Jc2xlTb7Aj/UyYRfB' +
'GWHkYaZ2Xtokjjz1kTJkDHTWP9U0x/1CBuUPrICodLpnRYu38eXJI' +
'gEIJrfZvkYuynQVmiW0cBDWJtJZt9Eagn6cvVX4XstEBs/Y4rj7Yz' +
'7brDqI5IkVF6JD0uKAeX3BNHtidrCL9XprfMEY2/wKFtl5u7G6o/Q' +
'HiRHsmpDTKPOEcC2wvPGb6LzGmrDmHjCFesfuPsWa6iMbWV5kxMvz' +
'2PmC+mjQwYW4MeVlZevXKcubfJKXEQmj+WOKDQnjE6N7I1hubNKLJ' +
'6Vn/Kf4E9t6cNNpqMim3gydtz939LPtE5Zf0/MCu2VOXo/uUnZ4j0' +
'MuMwcZWPLaS1wFTWgRw5188sLEaAOk8yxYlBOZ3jBI2sMlwngATt5' +
'GXViRJAlM0pl8AMMPJTxmJg/TAhuzZZliETZUjQeUQu9Cwk0O9h7z' +
'mQtAEm3fOTC3fY1+yphfElWZTlFnIxoaCpkk7k7BnnlW3xXpDG+Hq' +
'A69aFQUaOB68GfiNZZW+hS7DeYUrMvquK5bk+6UxKWMHSekyn96Jr' +
'GSns7uIABOigD63JaGUrRmaLKrN+rBjIYSxM9X9mHlqGYX23tRwW1' +
'JyQzuQOwNzkw5AoAMWnzbpUqfNfkmoBZXSjJQeciXV0bEhzvopmcq' +
'Lxj8M95dueRm3CTPM4Y/mBJgNvUlNvSrAXPb1mICpz6JE6KLJ14+h' +
'lz66059RR2ADaLCGbvBx10qXHUQnHXmDZNBcWU1BwS2lF1xLT0rXb' +
'TtwMYGbcwbmsj94yxlWGt1mcfqin3xoRpOWZxwwB2+w/K14K9TWnT' +
'QrxEKhuJC3qbssI04D9ULUvnYZ5mnpQ5VYgaqfiitSgLyDC0V7wLz' +
'AC7HgsUXD1H1iy742XGL5xo70tdiwJ80/e4wMs0xV0wCSAiZD+ZLR' +
'mp5nv4LKV1RekIfqIsa2PJByY135s5atiVuSf/WPFSaBq9/Rps3lT' +
'yJX0tX4qmnnV+m9Yme+jtUJxgqOB5FmktNhvuRreBe4TsTI0m2mlX' +
'f4fohErV/Ibbp0DtaKzrq2q9qbPbNObwDEhRaeaNsf7bWL+8dEQed' +
'WPk7ADeRqt+f9kbdcjbA75Pe8zZ+1iYdmUsLBNCyFBylcZPEUKJM+' +
'Iw8zWmfcioGtedcAR2MruCvIyQORo3KSLT39bKpjlQ1M9gPTUdkl/' +
'3nj6c81tNGTNkBmq4qdQNN+wAoOdafUJkj4SSe/qrYVutHwm/RgKm' +
'oyQVHLHuXEt44NW/6I/KT8MTuLMgFyzR6STtqVVws2cecd60/dLXV' +
'gZqTmEcCcvhfuZTnWgcmYxSrPNFFs4sXMYXHBZeRPCszhU1WmHzO8' +
'vUpMaD2opJnHXHQoQY0RaINrLcbUoh72191lcFlb7GpHwZw0XIX66' +
'L8ezD6JSkk4jRtnF+JhZ75hHFnzLnC57kstASZdOiPG9ZnZYKwKIg' +
'gvbafMJDQRFOrB1i55mUU6IjBjgLCT3jNJFuXBYMmWTI9wmK7toEF' +
'lB2+G6nMzSVVkn3QDGWEI0kFF24Zo4w7AQQtPQCDBM/EPR6tK7sxE' +
'0stxugKm70WHGno872CsRNRHdo0tFIAIBpdfd1nrca0euzRyPoVYo' +
'9qCOye+097d4Cm7pdG3h8CUEp71f6VtwwzxHZ/X9tGQSMTI1/HCjy' +
'Ie77gC1ZxU3NA//1piASyVinHNtciDNQ3hr3FbQI+V4IyeUFpiUZT' +
'JaDdR/F7xy6ZkFxjb6jzHyrjVv6W7ZpumsvWaZWhqbEuocphvWqnK' +
'DOoWAVMJ7YjTEfVwlXtqTULTEl1KDOl5qMS+e9dlnhCVSagwz6ZWf' +
'k0v/BBN3Q1L74YUDpt7NiaEp5IoAFOjVC09y8YTbKbrncD15GVMSF' +
'rLqMdYrYyXdsHVIwMy0lET+wrqfvZR1HfkRJ7nGMZ15aKfbZs9Ktf' +
'+mW5k8neepXygQBiTnqKVeqfNZRI8bEhwv57LTyv2oUVcqVPZOjD3' +
'97pUp707oVUeH9isfcXUaCyEnjqUkdO+2OP3apJOSbk36js1JRi6v' +
'RuCKuAmJz4iQvuk/7nW8quPTpMD8d/uXadbtfKl8jCe+ypulrqk9o' +
'7hZtr8OqvMFJgZSc7s2moVMFP7dETHpmvpDInEVmBbzFLO6AHES06' +
'EMo6pJy7pVpx47syTY0dn2az+lq5+Sa8jVAML1RvOn++YoqzR8Owa' +
'N7+e8dTS3BvdnFnpkLB3KMMZkVQLzsei2zu9Uu90UeExbVGft/RTn' +
'Blq4gyLLk/dnriiZlit/j0NeDJOJ434lGe6YxqkESWNrxrLo7A/2Y' +
'32wokWcWrfce0gyUplAcz8/mNKvHpvLslW1cbL4G/sYSstmApbVMr' +
'UX7tBMVFgasU66z3XXWddhq4Az3tMdWAry1ekvfOm1TAi5qdHqs9U' +
'cqqywHvwkcrnUd/Z5voM6/BpVrgW08s+zHxtY6LALJyzCbZ/PzqY2' +
'Dxs4iqjV41KQ2dhnXFFN/SQb/OpIbX6dgPYlcFIYufegsGGvV7Hmq' +
'+d3rXhM2zY8fuRngKgXZ31ZjBFiajppw9lVllW4wZaUSLy2clqrRC' +
'U06aM9oaCIrP51MirdrGZigOPeY96AIG0SWeoghUlbzJKwtJm3Mka' +
'wwSaIqjKq7FkzMHYsrmlk12FvlQ6i6TtkFbVWiAPwbj/XVC4zjFY9' +
'4PB2J//Pp55xLzl6qOo/DHzLrATyu8nnGRDCjdqMtKJXdXE/qMiOP' +
'lnrMY3R98LIbH7rgZxxcDQ0COH8PiYt9rjaPx2YBPyeyiD0iMJcDk' +
'QbM1DYz/hzdYCU68OWR1PGSw9j//bcKcs8bCSS9II7hXW/mCfjL8X' +
'sjLXJnyeb8MpnZYO5z1X6HMDiWJf8U8kfrfjjH3sz8GdxM/MOGawO' +
'Xwna3ULF9zBPVICKRndVwhSJ7UAh3O257wFD1/7jRWjp7+kuH3Y0n' +
'mbxj6PDRLG6I6S2XD5urgHPd6leCukW/Id/sS/8f6+a0F6+kRfHMO' +
'1w678X60zGE0b/8lkDgZWWOAg7VvdGSI7FhJy6WfqbhAbvEDnMtJi' +
'tPpF8hmKLMce8NJVkz/nUKkvPS0Cz85dcT+qPYwqH4X5OR5ZAj3bu' +
'c7WjtCVE/fD6mdRbizBYifx/8y48C6u7ryyF2zh/BFgenQRJHy+lS' +
'/CYdjLzJJOgxrB9u+9ysNlWJ97PyrfD0d2rU06Q5ijblhpB8W9Q3y' +
'W3Ql0GVZYWCXSg7fC/FTLNWZjeDB8hr3cPOck0zhbdkXPwqPI6r8e' +
'jN9jm0EYg9VPo2c6V/SkIV2dM1L1qd4nRSKEEkDH3NT3QpBPaIq57' +
'+Lag3Bwy3YtmM6Kh1dhwRQW/ewU45snMRnXTk04cE5cW5WHBGbcdz' +
'iDiIeljkm4cLV+8tQj1yli+Ze09r1hc8WfW9OQyhNN0e2FQ140aqK' +
'SF0/wsLn8GrPrx24HYzeCkauWprFcXQ8LSA976SHPdqRO3ff7+GHE' +
'YywZm9IGnx65gtTmQGLTFZ/Ze6cefNMKU8uTsyCDooeXOzKjwzNp8' +
'be0tM4pQ1HJV1aOdO/j4XfOwTJXPwVyyuDBW3H0238ZkgrLG+vlQf' +
'PidTF6+G844XVUTHHbr3wUjewGQXPERrNAeWzQCl8deC37nct+94b' +
'fv2Vh0A1dtYMXbXYsdbpeDQRm2XU30u5zbHf/azo6UjvGzh6DLn9V' +
'jzuEbgXp1Y5nbEl3lo5TALMpQfSs9+1ODXZHaaeO6b7b2usLm1VGl' +
'113TmC1uZgVpq42by/IxbB+i26vkQP8Oz7+4SGswB2S2y9HJ2db0F' +
'rn+e+Kp/dGDJowHStpfaGHK/GVdWfmJngJB0xJV2sAc+FJHB6XF+G' +
'807MulAaNqY2VYGzqyXSlD8Llv6ablEV/llFPDDNKIeh3uiru+nWX' +
'Ve7isHLERqbq+/8Le/V3GH+gfHiBhgPmCmMr6t+DUVb+IAyOPYsnc' +
'Adiqqtz5jFtTABz9rtYHYPaHu0lAaZmI2u+jUZqNMEmv2WjCZoPTL' +
'6SsEVe0oznv4l4PEF737bHM4xGCm5mwdcQAw+Vfi04tsiUvnopPdN' +
'u82PvsxkagDn1hUsvn/mWOvRlAaYYGvSJ1YP+9AFq611pm9A4Arv3' +
'agCGv/RTnB1+GVRmeyQwXD0yzEY5+0BLpfov22MdOBq50DNt9dhN6' +
'Me139Lj9yIWrb8WLPxAYEYt6Mf1PztcyaREWrPS9Sh3xgW43cHKW7' +
'Z0N1z5Wzz2WrMOh/Z4KYYvGrDkNRo1aOMg5nGdt7SXjzvohL7ZSda' +
'SaGBl/d9pdcnC6hy7GyqzfamAmaonyynlUOs7J0E0d9z5rWDxp7hy' +
'P+KRlC/XxLTHcw/tO8o+b7OuRKjnigMm87hWJZ+qdLidmotmVqXGY' +
'YtF61CRc09iLT2rfuV8QS+hXtBOg5lFusU0SSm74Q6km/s+rn4S5a' +
'dM6441aY8XZEg2kdYOs9GWNJ8cvBU2qhWya/wTbM9DXkSaVEWnYUH' +
'V+q/ziGeoS2iHrss8VVaB+XuES/73hsPmPJPlAMne3WD0nXDmQQQG' +
'mx1po7I9/vtw5SQre92qGxkLMDML2zSLaB/NmqNxeRcjEGxqfYeex' +
'TlwI1BHEF4v7SbUmHsw7GXKJls26aIXdKZM2I4gtMczDfXhAF85qX' +
'Nk9feVQJtSZiT9m3zsjIXA71k+4kU0mlTv6tr0cG18SbUe08Trj3i' +
'm9miPF2JInoyJUpDq2XHTOWvyMDMvsYFM3/Wg/wb7ANS+ijunT0wz' +
'oNKcZwr3xEfsN7L8V6cua5//Lt0826M9Xp4BmzKdivq9jmnTMWU6p' +
'zz/BJAxPa+PyVfFV+zCjy7NYO2fPCAg04LDKNujPdrjWYckqQaFVN' +
'TlvZzenvZoj6TG/wMRm2gA');

TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], SmallChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 1, TTP[b].y + Numb + 1,8388736);
FastSetPixel(Pic, TTP[b].x, TTP[b].y + Numb, Colour);
end;
end;
Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, Placement.x, Placement.y);
DrawBitmap(Pic2, Canvas, 135,5);
FreeBitmap(Pic);
FreeBitmap(Pic2);
end;

Procedure OnScreen;
Var
XPH,RPH,TTB: Integer;
begin
XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
RPH := Round((RuneCount * 3600) / (GetTimeRunning / 1000));
TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

PrintOnSmart(['Version: '+Version+' (by Flight)',
'',
''+MsToTime(GetTimeRunning, Time_Abbrev),
'',
'Crafted: '+IntToStr(RuneCount)+' Natures ('+IntToStr(RPH)+' / hour)',
'',
'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
'',
'Gained: '+IntToStr(Profit)+' profit'],Point(15,200),16777215);

PrintOnSmart(['Time till break: '+MsToTime(TTB,Time_Bare)],Point(573,432),65280);
end;

Function IsMoving_F: Boolean;
begin
Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
end;

Function ContinueChat: Boolean;
var
X,Y,BMP: Integer;
begin
Result := False;

BMP := BitmapFromString(10, 12, 'meJxjYCAAlFVUzp07v3v3HgFBQU' +
'zZt+/e/f33D4iAagwNjfAoADICAgIxFQA1QhQAUX5BAZMMii1AS+f' +
'MmQtXMGfuXDTt1TU1q1ev2bx5y8WLl7p7epClgFygLNDMyVOmRERE' +
'MIlxw6WAWlrb2oCyQMPt7R3gUsxMjECfAmWBWoBIWVkF08FLly4DS' +
'vHy8WEPLz5GEMIAAML5W78=');

if FindBitmapToleranceIn(BMP, X, Y, MCX1, MCY1, MCX2, MCY2, 15) then
begin
TypeByte(vk_Space);
Result := True;
end else
Result := False;

FreeBitmap(BMP);
end;

Procedure CrashSmart;
begin
{$IFDEF CRASHSMART}
Writeln('You are using CRASHSMART, we are going to reload your client after update!');
SmartgetFieldObject(1488,'crash'); // will crash SMART (and Simba).
Wait(5000);
WriteLn('CRASHSMART Failed: Make sure you are using the proper plugin!');
TerminateScript;
Exit;
{$ENDIF}
Writeln('You have no CRASHSMART enabled, so you can not reload RS. Sorry, bye!');
TerminateScript;
end;

Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 10);
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, 8, 8);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], 2802162, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], 318953, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 10)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 860731, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 4) then
FindColorsTolerance(ATPA2[i], 263362, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 5) then
FindColorsTolerance(ATPA2[i], 2369228, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 10);

Result := (Length(ATPA2[i]) > 0);
if Result then
begin
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;

Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;

randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;

Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
if Length(ATPA2[i]) > 0 then
begin
MiddleTPAEx(ATPA2[i], X, Y);
HumanMMouse(X, Y, 5, 5);
if WaitUpTextMulti(UpText, 800) then
begin
Result := True;
if DeBug then
SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));
GetMousePos(X, Y);
Exit;
end;
end;
end;
end;
end;

Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
Var
h, s, t: Extended;
I,II : integer;
HSLColor : Array[1..3] of Extended;
HSL : Array[0..1] of Array[1..3] of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;

For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;

H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);

try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(t);
except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
end;

Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
end;

Function FindObjSimple_F(Colors: TIntegerArray; TheUpText: TStringArray; midx, midy: integer): Boolean;
Var
T,i,X,Y: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
Begin
MarkTime(T);
Repeat
SetArrayLength(ATPA, Length(Colors));
for i := 0 to High(Colors) do
FindColorsSpiralTolerance(midx, midy, ATPA[i], Colors[i], MSX1, MSY1, MSX2, MSY2, 15);
TPA := MergeATPA(ATPA);
ATPA := TPAtoATPAEx(TPA, 15, 15);
SortATPAFrom(ATPA, Point(MSCX, MSCY));
if (Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], x, y);

if (TimeFromMark(T) > 5000) then
Exit;

HumanMMouse(x, y, 10, 10);
Wait(randomrange(75,125));
If(IsUpTextMultiCustom(TheUpText)) then
begin
ClickMouse2(True);
if DidRedClick then
begin
Result := True;
Break;
end;
end;
Until(Result)
end;

Function CalculateEss: Integer;
var
Total,EDTM: Integer;
begin
Result := 0;

EDTM := DTMFromString('mrAAAAHic42BgYHBigmB7IHYBYjcgDgBiWyA2AWI2RgYGXiDmAWIuIGaHssWAmA+I87IyGRJiYhhiIiIYMlJSGIpyc4GmMsExK5BEx8iAkQCGAQC0RgiX');
Total := CountItems('dtm', EDTM, []);

if (not (SS = 0)) then
IncEx(Total, 3);
if (not (MS = 0)) then
IncEx(Total, 6);
if (not (LS = 0)) then
IncEx(Total, 9);
if (not (GS = 0)) then
IncEx(Total, 12);

Result := Total;

FreeDTM(EDTM);
end;

Function NearBank: Boolean;
var
X,Y,Dist: Integer;
begin
if FoundSymbol(1, X, Y, Dist) then
Result := (Dist < 15)
else
Result := False;
end;

Function InCW: Boolean;
var
X,Y,Dist: Integer;
begin
Result := (FoundSymbol(2, X, Y, Dist) or FoundSymbol(5, X, Y, Dist));
end;

Procedure SetLCOptions;
var
X,Y,T,T2: Integer;
begin
HumanMMouse(710, 144, 8, 8);
ClickMouse2(False);
WaitOption('left', 400);
MarkTime(T);
repeat
if TimeFromMark(T) > 5000 then
Exit;
if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
begin
MMouse(570, 410, 4, 4);
ClickMouse2(True);
Wait(RandomRange(175, 350));
MMouse(640, 450, 4, 4);
ClickMouse2(True);
end;

MarkTime(T2);
repeat
if TimeFromMark(T2) > 5000 then
Exit;
if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
OptionsSet := True;

Writeln('Left-click options set');

end;

Function FindObjFX(Colors: TIntegerArray; Uptext, Options: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer): Boolean;
var
X, Y, I: integer;
TPA: TPointArray;
ATPA: T2DPointArray;

begin
SetLength(TPA, Length(Colors));

For I:= 0 To High(Colors) do
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..

ATPA:= TPAToATPAEx(TPA, Width, Height); //Group TPA into cirles by Distance..
SortATPAFrom(ATPA, Point(MSCX, MSCY)); //Sort the colours from the closest to the center..
if(Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], X, Y); //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
MMouse(x, y, 5, 5); //Move the mouse to the colours found..

Wait(randomrange(200, 500)); //Wait for the uptext to show..
If(IsUpTextMultiCustom(UpText)) then
begin
ClickMouse2(False); //If it finds it, click the object/item..
if ChooseOptionMulti(Options) then
begin
Result := True; //If it clicks the object, return true..
Exit;
end;
end else
Result := False; //Cannot find the uptext then its the wrong object, return false..
end;

function OpenBankLunar: Boolean;
var
bx, by, Speed, t: Integer;
begin
Result := (LoggedIn) and (BankScreen or PinScreen);
if (Result) then exit;

Speed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);

if (FindObjFX([2508118, 4552059, 3636582, 7370101, 8552064], ['Bank', 'Booth', 'ank', 'ooth'], ['uickly', 'uick', 'ickly', 'ckl', 'se-q'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5)) then
begin
Mouse(bx, by, 0, 0, False);

t := (GetSystemTime + 5000);
repeat
if (BankScreen) or (PinScreen) then
begin
Result := true;
Break;
end;
Wait(50);
until(GetSystemTime > t);

if (Length(Players) > 0) then
if ((PinScreen) and (Players[CurrentPlayer].Pin <> '')) then
InPin(Players[CurrentPlayer].Pin);

Result := (BankScreen) or (PinScreen);
end;

ColorToleranceSpeed(Speed);
end;


function OpenBankNPCEx :Boolean;
var
NPCBox :TBox;
Colors, NPCArray :TPointArray;
ATPA: T2DPointArray;
MSNPC, NPCPoint :TPoint;
TempCTS, C, HiNPC, II, I :Integer;
begin
Result := False;
Result := (BankScreen) or (PinScreen);
If Result then Exit;

NPCArray := GetMinimapDots('NPC');
HiNPC := High(NPCArray);

If Length(NPCArray) = 0 then Exit;
SortTPAFrom(NPCArray, Point(MMCX, MMCY));
for I := 0 to HiNPC do
begin
NPCPoint := MMToMS(NPCArray[I])
If NPCPoint = Point(-1, -1) then Continue;
NPCBox := IntToBox(NPCPoint.X - 40, NPCPoint.Y - 40, NPCPoint.X + 40, NPCPoint.Y + 40)
If PixelShift(NPCBox, 200) > 500 then Continue;

TempCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 1.52);
FindColorsTolerance(Colors, 6067652, NPCBox.X1, NPCBox.Y1, NPCBox.X2, NPCBox.Y2, 13);
ATPA := TPAToATPAEx(Colors, 15, 20);
SortATPASize(ATPA, True);

for II := 0 to High(ATPA) do
begin
MSNPC := MiddleTPA(ATPA[II]);
MMouse(MSNPC.X, MSNPC.Y, 3, 3);
If WaitUpTextMulti(['ooth', 'anker'], 200) then
begin
Mouse(MSNPC.X, MSNPC.Y, 1, 1, False);
If WaitOptionMulti(['ank B', 'quick', 'ank Sir', 'ank ''Bird''s-Eye'''], 300) then
MarkTime(c);
Repeat
Wait(RandomRange(50, 100));
Until (BankScreen) or (PinScreen) or (TimeFromMark(C) > 4500);
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
If Result then
begin
ColorToleranceSpeed(TempCTS);
Exit;
end
else
ColorToleranceSpeed(TempCTS);
end;
end;
end;
end;

Function GetRingCount: Integer;
var
S,S2: String;
begin
GameTab(tab_equip);
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 8);
end
end else
Result := 0;
end;

Function FindChest(Var X,Y: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([11448246, 12171713, 13422038, 13553367], Hmod, Smod, Col, Tol);

CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSCX, MSY1, MSX2, MSY2, Tol);
ColorToleranceSpeed(CTS);

if (Length(TPA) < 1) then
Exit;

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
if (GetArrayLength(ATPA[i]) > 5) then
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
HumanMMouse(X, Y, 5, 5);

if WaitUpTextMulti(['Use', 'Bank', 'chest'], 555) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end else
Result := False;

end;
end;
end;

Function OpenChest: Boolean;
var
X,Y,T: Integer;
begin
Result := BankScreen;

if FindChest(X, Y) then
begin
ClickMouse2(True);
if not DidRedClick then
Exit;
FFlag(0);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end;

Result := BankScreen;
end;

{

Function OpenChest: Boolean;
var
X,Y,T,F: Integer;
label
Start;
begin
Result := False;

While IsMoving_F do
Wait(1);

Start:
if FindChest(X, Y) then
begin

ClickMouse2(True);
if not DidRedClick then
goto Start;

if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end else
begin
While IsMoving_F do
Wait(1);
Inc(F);
if (F > 5) then
Exit;
goto Start;
end;

Result := BankScreen;
end;
}

Function DepositEss(Amount: Integer): Boolean;
var
T,Slot: Integer;
begin
if not BankScreen then exit;
Slot := RandomRange(9, 20);
if (Amount = 1) then
MouseItem(Slot, mouse_left)
else if (Amount = 5) then
begin
MouseItem(Slot, mouse_right);
Wait(RandomRange(50, 115));
WaitOption('Deposit-5', 500);
end;

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Result := False;
if not InvFull then
break;
until(False)

Result := (not InvFull);
end;

Function TeleportTo(Where: String): Boolean; Forward;

Function SummoningRenew: Boolean;
var
Graahk, X, Y, tries, Summoning: Integer;
Label Start;
begin
Graahk := DTMFromString('mWAAAAHicY2FgYBBggAAeIJYBYlYg5kQSP1RoCySZ4FgESDLiwSAAAGfpAew=');
Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA==');
if(not Bankscreen) then
OpenChest;
tries:= 0;

if(FindDTM(Graahk, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
if(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
MoveMouse(x, y);
wait(500);
ClickMouse2(true);
wait(2000);
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) = True);

tries := 0;
Start:
GameTab(Tab_Inv);
if(GetSummonPoints < 20) then
begin
writeln('Need to Refill Summoning Points.');
if(FindDTM(Summoning, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
MMouse(x, y, 0, 0);
wait(500);
ClickMouse2(true);
wait(2000);
if(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) = True);

if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
if (BankScreen) then
CloseBank;
MMouse(X, Y + 5, 0, 0);
if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
begin
ClickMouse2(False);
ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning']);
wait(2000);
end;
end;
end;

if (GetSummonPoints < 20) then
goto Start;

tries := 0;
if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
Repeat
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
CloseBank;
MMouse(x, y, 5, 5);
wait(500);
ClickMouse2(false);
wait(500);
ChooseOption('Summon');
if(FindBlackChatMessage('follower')) then
break;
tries:= tries + 1;
if(tries > 10) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(UsingFamiliar = true);
if (Not Bankscreen) Then
Repeat
OpenChest;
if(Bankscreen or Pinscreen) then
break;
Until(False);

if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints > 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
wait(1500);

if(FindDtm(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;

Result:= UsingFamiliar;

FreeDTM(Graahk);
FreeDTM(Summoning);
end;

Function WithdrawEss: Boolean;
var
X,Y,Ess,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then
Exit;

FixBank;

Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');

if BankScreen then
begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
end else
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
Wait(RandomRange(1750, 2205));
goto Start;
end;
end;

FreeBitmap(Ess);
end;

Function TakeRing: Boolean;
var
X,Y,ADTM,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;
ADTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');

if BankScreen then
begin
BankTab(BankTabVal);
if FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;

if(FindDTM(ADTM, X, Y, MIX1, MIY1, MIX2, MIY2)) then
ClickMouse(X, Y, 1);

FreeDTM(ADTM);
end;

Function WithdrawRunes(Method: String): Boolean;
var
X,Y: Integer;
begin
Result := False;
if not LoggedIn then Exit;

if InvFull then
begin
if not BankScreen then
OpenChest
else if BankScreen then
DepositEss(5);
Wait(RandomRange(350, 625));
end;

if FindObjEx_F(1954517, 6579305, 15, 8, MSCX, MSCY, ['osm','smic','ic rune'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(350, 675));
end;

if (Lowercase(Method) = 'contact') then
begin

if FindObjEx_F(14277091, 7698043, 15, 15, MSCX, MSCY, ['Air','ir ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindObjEx_F(13020358, 6250339, 15, 15, MSCX, MSCY, ['Astral','stral','ral ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end else if (Lowercase(Method) = 'spell') then
begin

if FindObjEx_F(14230559, 7369078, 15, 15, MSCX, MSCY, ['Law','aw ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindObjEx_F(13020358, 6250339, 15, 15, MSCX, MSCY, ['Astral','stral','ral ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end;

CloseBank;

Result := True;

end;

Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;

if (Method = 1) then
begin

//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end else if (Method = 2) then
begin

//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end;

Result := True;
end;

Function FindDecayedPouch(Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function CheckPouches: Boolean;
var
S: Integer;
begin
Result := FindDecayedPouch(S);
end;

Function WearRing: boolean;
var
AmDTM,X,Y: Integer;
begin
AmDTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');
if FindDTM(AmDTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 5, 5);
if not BankScreen then
begin
ClickMouse2(True);
Result := True;
end else if BankScreen then
begin
ClickMouse2(False);
if WaitOption('Wear', 1500) then
Result := True;
end;
if Result then
AmCount := 8;
end else
Result := False;
FreeDTM(AmDTM);
end;

Function FindNPCChatText_F(Option: String; Action: fnct_ActionOptions): Boolean;
var
X,Y: Integer;
begin
Result := False;

if Option = '' then
begin
srl_Warn('FindNPCChatText', 'txt is empty', warn_AllVersions);
Exit;
end;

if FindText(X, Y, Option, UpChars, 5, 345, 510, 475) then
begin
Result := True;
case Action of
Move: MMouse(X, Y + 2, Random(Length(Option) * 5), 4);
ClickLeft: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, True);
ClickRight: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, False);
end;
end;
end;

Function ContactScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'Choose a character', UpCharsEx, 190, 30, 325, 55);
end;

Function ContactRepair: Boolean;
var
T,T2,T3: Integer;
begin

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 4000) then
Exit;
if ContactScreen then
break;
until(false)

if ContactScreen then
begin
MouseBox(455, 230, 465, 290, 1);
Wait(RandomRange(275, 480));
MouseBox(380, 80, 435, 160, 1);
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 6000) then
Exit;
if ClickToContinue then
MarkTime(T2);
Wait(RandomRange(125, 275));
if FindNPCChatText_F('epai', ClickLeft) then
break;
until(false)

MarkTime(T3);
repeat
FindNormalRandoms;
if (TimeFromMark(T3) > 2000) then
Exit;
if ClickToContinue then
MarkTime(T3);
Wait(RandomRange(125, 275));
until(false)

Result := True;

end;

Function RepairPouches(Method: String): Boolean;
var
X,Y,Slot,Spell: Integer;
label
Start;
begin
Start:
Case Lowercase(Method) of
'spell':
Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
'DJlKvQ=');

'contact':
Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
'YAAA0ZFcCA==');
end;

if FindDecayedPouch(Slot) then
begin
Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
GameTab(tab_Magic);
Wait(Random(100));
if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
begin
MMouse(X, Y, 5, 5);
Wait(Random(100));
if (Lowercase(Method) = 'spell') then
begin
if WaitUpText('epair',RandomRange(250,350)) then
begin
ClickMouse2(True);
Wait(RandomRange(20, 75));
MouseItem(Slot, mouse_left);
Wait(RandomRange(1575, 2150));
Writeln('Pouch repaied');
end;
end else if (Lowercase(Method) = 'contact') then
begin
if WaitUpText('Contact',RandomRange(250,350)) then
begin
ClickMouse2(True);
if ContactRepair then
Writeln('Pouches repaied');
end;
end;
end;
end;

if not FindDecayedPouch(Slot) then
Result := True
else
goto Start;

FreeBitmap(Spell);
end;

Function FindInvItem(Cols: TIntegerArray; Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues(Cols, Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function NewRingCount: Integer;
var
S,S2: String;
X, Y, Dist, Home: Integer;
label start;

begin
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 2);
end
end else
Result := 0;

if((Result = 0) and (FoundSymbol(1, X, Y, Dist) = False)) then
begin
if(GameTab(Tab_Magic)) then
begin
Home:= DTMFromString('mbQAAAHicY2VgYLBmYmBwBGJ7IDYGYnMgfgoUvw/Eb4H4JRDfBeJ9Rz4xtM25gYJZgeLomBELBgMAGDAQJg==');
if(FindDTM(Home, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
MMouse(X, Y, 5, 5);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(True);
end;
While(FoundSymbol(1, X, Y, Dist) = False) do
wait(1);
end;
end;
Start:
If (Result = 0) then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
FoundSymbol(1, X, Y, Dist);
if(Dist < 15) then
begin
if(OpenBankLunar = False) then
OpenBankNPCEx;
wait(1000);
if (Not Bankscreen) then
Goto Start;
if InvFull then
DepositEss(1);
TakeRing;
wait(750);
if(WearRing) then
Result:= 8;
if(Bankscreen) then
CloseBank;
end;
end;
end;

Function FromBankDTM(Which: Integer): Boolean;
var
X,Y,ADTM,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;

ADTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');

if BankScreen then
begin
if (Which = 1) then
begin
if FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if (ItemFail > 5) then
Shutdown('Out of rings');

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;
end;

FreeDTM(ADTM);
end;

Function CheckFamiliar(Seq: Integer): Boolean;
begin
if not DidCheck then
begin
if (Seq = 1) then
begin
if (FindBlackChatMessage('it can fit') or
FindBlackChatMessage('try again')) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
DidCheck := True;
Result := True;
end;
end;
if (Seq = 2) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
DidCheck := True;
Result := True;
end;
end else
Result := True;
end;

Function WalkToAlter: Boolean;
var
Tries,T: Integer;
label
Start;
begin
Tries := 0;

Start:
SPS_WalkPath(Path_ToAlter);
HumanMMouse(350, 200, 20, 20);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

if FindObjSimple_F([4912288,5045653,6414239], ['nter','Myst','erious','ruins'], MSCX, MSCY) then
begin
HumanMMouse(260, 16, 10, 5);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
MarkTime(T);
repeat
FindNormalRandoms;
if TimeFromMark(T) > 5000 then
Exit;
if not SPS_PosOnMM(Point(3305, 4590)) then
break;
until(False)

Result := not SPS_PosOnMM(Point(3305, 4590));
end else
begin
Inc(Tries);

While IsMoving_F do
Wait(1);

if (Tries > 3) then
begin
Result := False;
Exit;
end;

goto Start;
end;
end;

Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
HumanMMouse(X, Y - 5, 2, 2); //Click Exactly infront of the bank..
ClickMouse2(True);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
Result := NearBank;
end else
begin
//MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
goto Start;
end;
end;
end;

Function TeleportTo(Where: String): Boolean;
var
T,T2: Integer;
begin
Case LowerCase(Where) of

'cw':
begin
if GameTab(tab_Equip) then
begin
AmCount:= NewRingCount;
if WearingItem(11) then
MouseEquippedItem('ring', mouse_right);
WaitOption('Castle Wars', 500)
Wait(RandomRange(50,150));
GameTab(tab_Inv);
AmCount := (AmCount-1);
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 8000) then
Exit;
if InCW then
Break;
Wait(1);
until (False)
Result := InCW;
end;
end;

'jungle':
begin
if not UsingFamiliar then
Result := False;

if OptionsSet then
InteractFamiliar('')
else
SetLCOptions;

MarkTime(T);
repeat
FindNormalRandoms;
CheckFamiliar(1);
if (TimeFromMark(T) > 5000) then
CheckFamiliar(2);
if (TimeFromMark(T) > 10000) then
Exit;
if FindNPCChatText_F('lepo', ClickLeft) then
break;
until(False)
Wait(RandomRange(975, 1250));
DidCheck := False;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
Inc(Tele_Fail);
exit;
end;

if SPS_PosOnMM(Point(2970, 4630)) then
Break;
Wait(1);
until (False)

if SPS_PosOnMM(Point(2970, 4630)) then
begin
Tele_Fail := 0;
Result := True;
end;

end;

end;
end;

function selectWorldA: Boolean;
var
x, y, xx, yy, i, z, World: Integer;
begin
z:= Random(High(Players[CurrentPlayer].WorldInfo));
World:= Players[CurrentPlayer].WorldInfo[z];

if not LobbyTab(L_WorldSelect) then Exit;
while(not FindText(xx, yy, IntToStr(world), StatChars, 117, 142, 135, 435)) do
begin
Wait(1000);
if i = 0 then
begin
MMouse(685, 423, 10, 10);
GetMousePos(X, Y);
HoldMouse(X, Y, MOUSE_LEFT);
end;
i := i+1;
if (i > 25) then
begin
ReleaseMouse(X, Y, MOUSE_LEFT);
Exit;
end;
end;
ReleaseMouse(X, Y, MOUSE_LEFT);
Wait(1500+Random(1000));
if not FindText(xx, yy, IntToStr(world), StatChars, 117, 142, 135, 435) then Exit;
Mouse(xx, yy, 50, 5, true);
Result := True;
end;

function Login: Boolean;
begin
if LoggedIn then
begin
Result := True;
Exit;
end;
LoginPlayerToLob;
Wait(1000+Random(500));
if not LobbyScreen then Exit;
Wait(1000+Random(500));
if not selectWorldA then Exit;
Wait(1000+Random(500));
if not LogInPlayer then Exit;
Wait(1000+Random(500));
end;

Function HandleBank: Boolean;
var
S: String;
T,T2: Integer;
NeedAm,GoOn: Boolean;
begin
Result := False;
GoOn := False;
NeedAm := (AmCount < 1);

if BankScreen then
begin

if NeedAm then
begin
MarkTime(T);
repeat

FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;

FromBankDTM(1);
Wait(RandomRange(1275, 1455));
if WearRing then
GoOn := True;

if GoOn then
break;

until(false)
end;

WithdrawEss;

if PP then
begin
if HandlePouches(1, 1) then
WithdrawEss;
if HandlePouches(2, 1) then
WithdrawEss;
end else
begin
if HandlePouches(2, 1) then
WithdrawEss;
end;
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
CloseBank;
Stage := 0;
Exit;
end;
if InvFull then
break;
until(false)

if InvFull then
begin
Wait(RandomRange(375, 550));

if CheckPouches then
if WithdrawRunes(Lowercase(RepairMethod)) then
RepairPouches(Lowercase(RepairMethod));

if (GetMMLevels('run',S) <= RestAt) then
RestUntil(RandomRange(90,100));

if not UsingFamiliar then
SummoningRenew
else
Result := True;

end;

end;

Function CraftRunes: Boolean;
var
RNew,ROld,Seq,
T,T2,A,B: Integer;
label
Start;
begin
Seq := 0;
IncEx(Exp, Round((CalculateEss*XPMod)));
IncEx(Exp_C, Round((CalculateEss*XPMod)));
A := Round((CalculateEss*EssPrice));
ROld := getAmountBox(invBox(1));

MarkTime(T)
repeat
FindNormalRandoms;
HumanMMouse(260, 16, 10, 5);
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
Wait(RandomRange(300, 555));
until(TimeFromMark(T) > 5000)

if FlagPresent then
FFlag(0)
else
While IsMoving_F do
Wait(1);
Wait(RandomRange(1550, 1725));

Start:

if (Seq > 0) then
begin

MarkTime(T2)
repeat
FindNormalRandoms;
HumanMMouse(260, 115, 35, 35);
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
until(TimeFromMark(T2) > 5000)

if (Seq < 2) then
begin
HumanMMouse(640, 220, 15, 15);
Wait(RandomRange(1050, 1275));
While IsMoving_F do
Wait(1);
Wait(RandomRange(202, 365));
end else
begin
HumanMMouse(687, 185, 15, 15);
Wait(RandomRange(1300, 1575));
end;

end;

if (Seq = 0) then
begin
if PP then
begin
if HandlePouches(1, 2) then
Seq := 1;
end else
if HandlePouches(2, 2) then
Seq := 2;

goto Start;
end;

if (Seq = 1) then
begin
if HandlePouches(2, 2) then
Seq := 2;
goto Start;
end;

if (Seq = 2) then
Result := True;

if Result then
begin
RNew := getAmountBox(invBox(1));
IncEx(RuneCount_C, (RNew-ROld));
IncEx(RuneCount, (RNew-ROld));
B := ((RNew-ROld)*NaturePrice);
IncEx(Profit, (B-A));
OnScreen;
end;
end;

Procedure MasterLoop;
begin
if not LoggedIn then Exit;
Case Stage of
0:
begin
if ((not InCW) and (not NearBank)) then
TeleportTo('Cw');

if NearBank then
begin
if not InvFull then
begin
if OpenChest then
if HandleBank then
Stage := 1
else
Writeln('Failed while banking')
else
Writeln('Failed to open bank');
end else if InvFull then
begin
if not UsingFamiliar then
begin
if OpenChest then
HandleBank;
end else
Stage := 1;
end;
end else
WalkToBank;
end;

1:
if TeleportTo('Jungle') then
Stage := 2
else
Stage := 0;

2:
if WalkToAlter then
begin
Walk_Fail := 0;
Stage := 3;
end else
begin
FindNormalRandoms;
Inc(Walk_Fail);
Stage := 1;
end;

3:
if CraftRunes then
Stage := 4;

4:
if TeleportTo('CW') then
Stage := 0;

end;

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s: integer;
begin
if not LoggedIn then Exit;

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if NearBank then
begin
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Closebank;
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
end;

begin
Smart_Server := 72;
Smart_Members := True;
Smart_Signed := True;
Smart_SuperDetail := False;

setupSRL();
DeclarePlayers;

CheckStats;
Loadvars;
CheckVersion;

LogIn;
ClickNorth(SRL_ANGLE_HIGH);

Smart_ClearCanvas;
OnScreen;

SetLCOptions;
AmCount := GetRingCount;

SPS_Setup(RUNESCAPE_SURFACE, ['7_11','8_11']);
SPS_Continue := True;

Repeat
if not LoggedIn then
begin
Login;
ClickNorth(SRL_ANGLE_HIGH);
end;

if (TimeFromMark(CommitTime)>=30000) then
Commit;

if (TimeFromMark(ReportTime)>=5000) then
Report;

BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if (Walk_Fail > 2) then
Shutdown('SPS walking failure');

if (Tele_Fail > 2) then
Shutdown('SPS out of date');

MasterLoop;
Until(AllPlayersInactive)

end.

Scaper

2012-01-19 14:13:01

nice i like it gg, I think you should push and update were it banks duel(1) to save cash

Yanhua

2012-01-19 20:26:12

From: ggzz
Uses Castlewars + Summoning Potions.. I'll do the obelisk later unless someone wants to do it.. I have the code for the obelisk from version 1.0 which still works.. just kinda lazy to put it in as this is what I'm currently using:



Great, thanks ggzz. I've coded my own function for summoning pots as well, seems to working a lot smoother than obelisk. :)

Flight

2012-01-20 05:35:32

Full version of 1.7 released. No potions required… Need some tester besides myself running this as well. At the moment I'm a little over 5100 runes / hour. Maybe with a few tweaks I can break 5200 or 5300.

Yanhua

2012-01-20 06:09:24

From: Flight
Full version of 1.7 released. No potions required… Need some tester besides myself running this as well. At the moment I'm a little over 5100 runes / hour. Maybe with a few tweaks I can break 5200 or 5300.


Going to test this new version out for you now!

Will post here with the proggy! :D

Scaper

2012-01-20 08:53:12

going to test right now :)

'Toxin

2012-01-20 09:05:28

From: Scaper
going to test right now :)


Same. Pretty stoked on using this. :)

Scaper

2012-01-20 09:57:42

From: XxX Toxin XxX
Same. Pretty stoked on using this. :)


Grats on members btw :)

and running pretty smoothly atm will post a proggy at 1 hour

'Toxin

2012-01-20 09:58:47

From: Scaper
Grats on members btw :)

and running pretty smoothly atm will post a proggy at 1 hour


Thanks, heh. I also am running it very smoothly. No problems at all whatsoever. :) Never knew that DTM's would be so useful, the script is essentially flawless.

Scaper

2012-01-20 10:01:19

you using dtm walking?

Scaper

2012-01-20 10:39:04

Hmm just watched it there tele lunar isle and use oblisk there???
why does it do that? wouldnt it be easier to use oblisk outside cwars or even on way to nature alatr?

Flight

2012-01-20 10:46:23

From: Scaper
Hmm just watched it there tele lunar isle and use oblisk there???
why does it do that? wouldnt it be easier to use oblisk outside cwars or even on way to nature alatr?


I didn't want to deal with doors. I've seen alot of people trap dragon bots there and mass report them. I really didn't want that happening to my fellow users lol. I was also one those who traps and reports dragon-killing bots. :norris:

Scaper

2012-01-20 11:07:25

Ok but havnt you noticed the oblsik on way to nat altar? if you coul;d get it to click that then that would speed thing up heaps

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 1 Hours, 14 Minutes and 8 Seconds
Runes crafted: 3802
Exp gained: 23265
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

E:

Also im tryna find were in earlier version it banks necklacwe(1) I cant seem to get it to bank ring(1)??

'Toxin

2012-01-20 11:26:22

My bot is struggling with the fixing of the pouches. It will not withdraw airs yet they're on the top row/same row/right beside my astrals and cosmics. Wonder why this is?

Scaper

2012-01-20 12:13:06

From: XxX Toxin XxX
My bot is struggling with the fixing of the pouches. It will not withdraw airs yet they're on the top row/same row/right beside my astrals and cosmics. Wonder why this is?


mine fine change repair from spell to contact

 RepairMethod  = 'contact'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 2 Hours, 17 Minutes and 16 Seconds
Runes crafted: 7004
Exp gained: 43020
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Scaper

2012-01-20 13:31:06

still going strong :)

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 3 Hours, 36 Minutes and 46 Seconds
Runes crafted: 10000
Exp gained: 62397
Breaks: 1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

'Toxin

2012-01-20 13:34:17

From: Scaper
mine fine change repair from spell to contact

 RepairMethod  = 'contact'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 2 Hours, 17 Minutes and 16 Seconds
Runes crafted: 7004
Exp gained: 43020
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


It is changed, that's why I'm wondering what's goin on :S Turns out I closed Simba, re-ran… and now it's working fine. Very peculiar.

Scaper

2012-01-20 13:36:05

i just noticed there it wont withdraw the airt runes no more i came back and had 40 of cosmics and astrals in my invent and repating the process of getting the runes all tho it was working up till now :/

Brandon

2012-01-20 13:40:45

I've reported this already.. Air runes are messed.. they are now the same colour as astrals in the colour picker but yet they are white vs purple to the human eye :S

What I do is that IF I use contact, I make the bot logout when airs aren't found then log back in.. the colours immediately change back to white.. then it withdraws.. kinda like refreshing the page.

But I use Rune repair so meh..

'Toxin

2012-01-20 14:48:57

From: ggzz
I've reported this already.. Air runes are messed.. they are now the same colour as astrals in the colour picker but yet they are white vs purple to the human eye :S

What I do is that IF I use contact, I make the bot logout when airs aren't found then log back in.. the colours immediately change back to white.. then it withdraws.. kinda like refreshing the page.

But I use Rune repair so meh..


I need to get my hands on that, you think it's worth it? I heard livid farm is boring as poo, lol.

Flight

2012-01-20 19:42:18

From: ggzz
I've reported this already.. Air runes are messed.. they are now the same colour as astrals in the colour picker but yet they are white vs purple to the human eye :S

What I do is that IF I use contact, I make the bot logout when airs aren't found then log back in.. the colours immediately change back to white.. then it withdraws.. kinda like refreshing the page.

But I use Rune repair so meh..


That's weird. :/ I even used very small bitmaps distinct to each rune but with a 20 tolerance, which should be more than enough… Even for good measures I set the CTS to 1 at the beginning of the WithdrawRunes function. Hard to explain, isn't it? :/

From: XxX Toxin XxX
I need to get my hands on that, you think it's worth it? I heard livid farm is boring as poo, lol.


That's why we have Livid Farmer! :)

Scaper

2012-01-20 21:00:58

wow im getting 22k xp p/h with objectDTM walking?

Flight

2012-01-20 21:04:22

From: Scaper
wow im getting 22k xp p/h with objectDTM walking?


Oh wow, really? I remember it being a little… iffy for myself personally. But hey, that's great, if it works fast then stick with it. :)

Brandon

2012-01-20 21:06:13

The script is running perfect atm.. But for anyone who wanted to see the thing against the purple air runes then: http://villavu.com/forum/showthread.php?t=72623

Really messed up but you got it working.. just hope it doesn't break by tomorrow or something lol.

Scaper

2012-01-20 21:09:16

tyea im getting 21376 xp p/h and like 3.8k nats p/h maybe more :)

'Toxin

2012-01-21 10:34:54

From: Flight
That's weird. :/ I even used very small bitmaps distinct to each rune but with a 20 tolerance, which should be more than enough… Even for good measures I set the CTS to 1 at the beginning of the WithdrawRunes function. Hard to explain, isn't it? :/



That's why we have Livid Farmer! :)


… I feel like an idiot. Livid farm here I come. Doesn't the fix pouch spell instead of contact spell also give more usage per pouch if used?

Brandon

2012-01-21 10:45:33

From: XxX Toxin XxX
… I feel like an idiot. Livid farm here I come. Doesn't the fix pouch spell instead of contact spell also give more usage per pouch if used?


Lasts an hr instead of 12 mins. I used it.. Actually spent 87m and got myself 99 farm.. took a couple weeks but it was good! Has a couple bugs here and there but it doesn't stop the script. Random events will make or break u.

Heavenzeyez1

2012-01-21 10:48:05

From: XxX Toxin XxX
… I feel like an idiot. Livid farm here I come. Doesn't the fix pouch spell instead of contact spell also give more usage per pouch if used?


Yes, you are correct.
The Repair Rune Pouch Spell not only repairs a designated pouch but also increases the durability of the pouch by 500%, allowing the use of a Giant pouch 60 times, instead of the usual 12 times before having it degrade.

It will last 5x more than repairing with "npc contact".
~Eerik.

'Toxin

2012-01-21 16:00:57

From: Heavenzeyez1
Yes, you are correct.

It will last 5x more than repairing with "npc contact".
~Eerik.


Sweet, looks like it's worth it then. I'm running it.

Also, guys I just thought of something that could work good with the 'contact' option if it's struggling with air runes, just wear an air staff while runecrafting and as long as the script takes astrals and cosmics, then the spell will be activated in the spellbook, and voila :)

E: Here's a proggy. For some reason it logged me out, and then it said my client token was expired and had to reload the page. This was after this time :

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 3 Hours, 4 Minutes and 18 Seconds
Runes crafted: 5199
Exp gained: 38790
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Weird huh.

nickrules

2012-01-21 23:08:49

Pouch renewal and point renewal doesn't seem to be working (these are both handled in the RenewPouch procedure, right?). I'm just using CW Teleport + Ghraak, I turned all the pouch settings to 0. Perhaps try renewing points based on summoning level? or maybe summoning potion support?

Scaper

2012-01-21 23:47:08

From: nickrules
Pouch renewal and point renewal doesn't seem to be working (these are both handled in the RenewPouch procedure, right?). I'm just using CW Teleport + Ghraak, I turned all the pouch settings to 0. Perhaps try renewing points based on summoning level? or maybe summoning potion support?


working for me? goes to lunar isle?

'Toxin

2012-01-22 09:43:25

From: Scaper
working for me? goes to lunar isle?


I find myself standing on lunar isle to the bottom right tile of the bank (on the outside of the bank) just hovering on the walls trying to find the summoning obelisk. This has happened a few times, just a thing you should note, Flight.

Flight

2012-01-22 10:51:50

From: XxX Toxin XxX
I find myself standing on lunar isle to the bottom right tile of the bank (on the outside of the bank) just hovering on the walls trying to find the summoning obelisk. This has happened a few times, just a thing you should note, Flight.


Sounds like SPS error to me. I haven't had the renewing give me any problems yet personally. Should it become consistent you're more than welcome to whip up a walker to walk from the Lunar Home area to the nearby obelisk.

'Toxin

2012-01-23 00:33:16

From: Flight
Sounds like SPS error to me. I haven't had the renewing give me any problems yet personally. Should it become consistent you're more than welcome to whip up a walker to walk from the Lunar Home area to the nearby obelisk.


Will do, however I believe it would be more efficient to use summoning potions for renewal. Easily accessible by the bank, and no walking needed. You have done an outstanding job with getting the character to the altar and banking, that's all that there is needed for this. The obelisk is essentially only a profit margin add-on, which in my opinion isn't needed for the current nature rune prices(provided that they stay consistent).

Scaper

2012-01-23 13:52:22

From: XxX Toxin XxX
Will do, however I believe it would be more efficient to use summoning potions for renewal. Easily accessible by the bank, and no walking needed. You have done an outstanding job with getting the character to the altar and banking, that's all that there is needed for this. The obelisk is essentially only a profit margin add-on, which in my opinion isn't needed for the current nature rune prices(provided that they stay consistent).



there is aversion with summon pots about somewere illol see if i can find it

Flight

2012-01-23 20:39:55

From: Scaper
there is aversion with summon pots about somewere illol see if i can find it


That should be fairly easy to make if you really wanted it, you don't have to look for someone else's code, you're a Member after all… Withdraw X amount of Summoning potions (DTMs I would assume), right-click it in the inventory while your bank is still open, drink X amount of doses, deposit the remaining, withdraw a pouch, close bank, right-click 'Summon', continue.

Scaper

2012-01-24 05:51:02

From: Flight
That should be fairly easy to make if you really wanted it, you don't have to look for someone else's code, you're a Member after all… Withdraw X amount of Summoning potions (DTMs I would assume), right-click it in the inventory while your bank is still open, drink X amount of doses, deposit the remaining, withdraw a pouch, close bank, right-click 'Summon', continue.


I ment ggzz posted one in this thread already :)
and of corz i cudda made i prefer keeping the method im using at the oblisk on way to alatar

'Toxin

2012-01-24 09:34:50

Yeah, to be honest the summoning potions are a better solution for now. I tried running it a few times and for some odd reason it is still persistent with leaving me outside the bank on lunar isle after attempting to make it to the obelisk.

I'm going to edit it such that it'll use the potions for now, until they either get too expensive to use, or the altar performs a little bit better on my end. It's so peculiar though, nobody else is having this issue but me…?

cause

2012-01-25 17:01:40

Efficiency wise, are summoning pots or restoring at the obelisk better? (btw Flight you continue to amaze)

Flight

2012-01-25 20:31:56

I've watched it go and go and go home teleporting and running to the obelisk and it's run smooth as silk for me. I like this because I don't have to worry about running out of potions or not being able to find them in the bank, whatever, it just goes and goes…

I have made some some simple modifications here and there to speed things up some. Now I'm doing a very steady 5,050-5,150 runes per hour, including pouch repairing & familiar renewing.

Brandon

2012-01-25 21:07:11

Doesn't go to the obelisk at lunar for me also.. but I use the summoning points version anyway so yea..

Flight

2012-01-25 21:18:14

From: ggzz
Doesn't go to the obelisk at lunar for me also.. but I use the summoning points version anyway so yea..


Oh hmm… I believe someone else posted the same problem. I'm quite sure that path is correct, it is for me anyways. But that's fine, use what works for ya. :p

Scaper

2012-01-25 21:26:03

walks way past it outside te fence so the oblisk isnt in sigght well it did before i reverted back to sum pots

'Toxin

2012-01-26 02:32:29

From: Scaper
walks way past it outside te fence so the oblisk isnt in sigght well it did before i reverted back to sum pots


Summoning potion version is working flawlessly. No problems at all whatsoever. Flight once again I can't really thank you enough for this thing, it's simply unreal. Going for 91 rc with it, hopefully it's achievable and result is a success not ban.

Sin

2012-01-26 07:17:49

I will definently use this after 99 Fletching :)
99 Runecrafting + 200M doesn't sound bad ;o

Edit*
I looked through the thread and apparently renewing summoning points is buggy? I don't see why that is, since the obelisk is on the way to the altar o.O

'Toxin

2012-01-27 09:42:35

From: S1N
I will definently use this after 99 Fletching :)
99 Runecrafting + 200M doesn't sound bad ;o

Edit*
I looked through the thread and apparently renewing summoning points is buggy? I don't see why that is, since the obelisk is on the way to the altar o.O


The script does not use the obelisk on it's way to the altar. It teleports to lunar isle using the home teleport if you're on lunars (which you should be) and then it walks eastward towards the bank and there's a obelisk outside the gate to the east of the bank. For some reason I always ended up finding my character sitting in front of the bank and just hovering the door searching for the obelisk. I'd recommend using summoning potions for getting back points for renewing your Graahk.

smurg

2012-01-27 23:18:36

Only one problem, else it's running wonderfully.

Sometimes it will drag the pouches to different inventory slots somehow. I haven't seen it happening in the moment, so I don't know if it's on filling or emptying.

Flight

2012-01-28 00:12:44

From: smurg
Only one problem, else it's running wonderfully.

Sometimes it will drag the pouches to different inventory slots somehow. I haven't seen it happening in the moment, so I don't know if it's on filling or emptying.


Yeah I've heard of the same problem from people running ZMI-Extreme. Actually it's not the script doing this, if you'll notice when you repair a rune pouch it'll automatically be placed in the first available inventory slot.

I could, however, make a small procedure to check your current pouches' location after every pouch-repair session and if they're not in the original slot then simply drag them back.

Sin

2012-01-28 08:03:37

I just end on a bit east of the Lunar Bank :L
Any chance of a summoning potion verwion ?

Flight

2012-01-28 11:28:03

From: S1N
I just end on a bit east of the Lunar Bank :L
Any chance of a summoning potion verwion ?


Yes I believe a version has already been made to support Summoning potions already, but you're an SRL Member now, it should be no problem for you to make this small modification.

Sin

2012-01-28 13:56:04

Haha yeah, I, of course am a lazy human being ;)

'Toxin

2012-01-28 14:10:25

From: S1N
Haha yeah, I, of course am a lazy human being ;)


This version uses summoning potions + cw banking :

{/////////////////////////////////////////
// ~Naturez by Flight~ //
// //
// Version: 1.6 //
/////////////////////////////////////////}

program Naturez;

{$DEFINE SRL5}
{$DEFINE SMART}
{$DEFINE CRASHSMART}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i SRL/SRL/misc/paintsmart.simba}
{$i SRL/SRL/skill/summoning.simba}

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//General settings
RestAt = 60; //Energy to rest at (while at bank)
SwitchWorlds = True; //Switch worlds after break?
FlagFailsafe = True; //if FFlag isn't working.

//Pouch settings
RepairMethod = 'spell'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell
SS = 2; //Which slot # has your small pouch (0 for not using)
MS = 3; //Which slot # has your medium pouch (0 for not using)
LS = 4; //Which slot # has your large pouch (0 for not using)
GS = 5; //Which slot # has your giant pouch (0 for not using)
BankTabVal = 5; //The tab where all your stuff for the sript is located..
ChangeKey = false;

//Break settings
BreakIn = 150; //How long before we take a break? (minutes)
BreakFor = 15; //How long will we break for? (minutes)
Bir = 25; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction


Var

//General variables
Version: String;
ReportTime,PostID,
CommitTime,EssPrice,
NaturePrice,Profit: Integer;
XPMod: Extended;

//Dynamics
Stage,Walk_Fail,AmCount,RuneCount,
Exp,Exp_C,RuneCount_C,Tele_Fail: Integer;
DidCheck,OptionsSet,PP: Boolean;
Path_ToAlter,Path_ToOb: TPointArray;

//Break variables
w,x,y,z,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;

Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
WorldInfo := [27, 42, 45, 46, 48, 52, 59, 70, 72, 78, 79, 87, 104, 115, 117];
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'Slayer';
Active := True;
end;
end;

Function GenerateWorlds: Integer;
var
Worlds: TIntegerArray;
I: Integer;
begin
Worlds:= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; //List of worlds to log into..
I:= Random(High(Worlds));

Result:= Worlds[I];
end;

Procedure CheckStats;
begin
if ((SRLStats_Username = '') And (SRLStats_Password = '')) then
begin
case MessageBox('No Stats account entered, would you like to set one up?','SRL Stats',mbYesNoCancel) of
mrYes:
begin
OpenWebPage('http://stats.villavu.com/register');
TerminateScript;
end;
mrNo:
begin
SetupSRLStats(148,'Anonymous','anon1337');
Exit;
end;
mrCancel: TerminateScript;
end;
end else
SetupSRLStats(148,SRLStats_Username,SRLStats_Password);
end;

Function CashStringToInt(S: string): Integer; //Thanks TomTuff!
Var
i, ii: Integer;
Numbs: TStringArray;
Temp: string;
begin
Temp := '';
Numbs := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'k', 'm', 'b'];
for i := 1 to High(S) do
for ii := 0 to High(Numbs) do
if S[i] = Numbs[ii] then
case ii of
0..9: Temp := Temp + Numbs[ii];
10..12:
begin
Result := StrToInt(Temp);
case ii of
10: Result := Result * 100; //Since price is given to 1 decimal,
11: Result := Result * 100000; //instead of multiplying by the entire
12: Result := Result * 100000000; //factor, you must multiply by factor/10
end;
end;
end;
if (Result = 0) then
Result := StrToInt(Temp);
end;

Function GetPrice(ItemID: Integer): Integer;
begin
Result := CashStringToInt(Between('<td>', '</td>', GetPage('http://services.runescape.com/m=itemdb_rs/viewitem.ws?obj=' + IntToStr(ItemID))));
end;

Procedure Loadvars;
begin
Version := '1.6';
PostID := 849594;
MarkTime(ReportTime);
MarkTime(CommitTime);
EssPrice := GetPrice(7936);
NaturePrice := GetPrice(561);
MouseSpeed := RandomRange(18,22);
DidCheck := False;
OptionsSet := False;
XPMod := 9.0;
PP := (not(GS = 0));

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);

Path_ToAlter := [Point(3020, 4640), Point(3070, 4635), Point(3120, 4630),
Point(3165, 4605), Point(3195, 4565), Point(3245, 4560), Point(3285, 4575), Point(3305, 4590)];

Path_ToOb := [Point(670, 115), Point(670, 125), Point(680, 110)];

end;

Procedure CheckVersion;
var
Page,NewVer: String;
begin
Page := GetPage('http://villavu.com/forum/showthread.php?p='+IntToStr(PostID)+'');
NewVer := Between('Current version: ', '<br />', Page);

if Version <> NewVer then
ShowMessage('Your script is out of date!')
else
Exit;
end;

Procedure Report;
begin
ClearDebug;
WriteLn('=-=-=-=-=-=-=-= Naturez '+Version+' by Flight =-=-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Runes crafted: '+IntToStr(RuneCount));
WriteLn('Exp gained: '+IntToStr(Exp));
WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');

MarkTime(ReportTime);
end;

Procedure Commit;
begin
stats_IncVariable('Nature Runes (Crafted)', RuneCount_C);
stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
Stats_Commit;
RuneCount_C := 0;
Exp_C := 0;
MarkTime(CommitTime);
end;

Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Report;
Logout;
TerminateScript;
end;

Procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colour: integer);
var
mx, my, Pic, Pic2, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
Canvas: TCanvas;
begin
SmartSetDebug(True);
GetClientDimensions(mx, my);
Pic := BitmapFromString(mx, my, '');
Pic2 := BitmapFromString(307, 70, 'meJztXQl3E0fWVVdXL1psybvlT' +
'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' +
'TlvZzenvZoj6TG/wMRm2gA');

TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], SmallChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 1, TTP[b].y + Numb + 1,8388736);
FastSetPixel(Pic, TTP[b].x, TTP[b].y + Numb, Colour);
end;
end;
Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, Placement.x, Placement.y);
DrawBitmap(Pic2, Canvas, 135,5);
FreeBitmap(Pic);
FreeBitmap(Pic2);
end;

Procedure OnScreen;
Var
XPH,RPH,TTB: Integer;
begin
XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
RPH := Round((RuneCount * 3600) / (GetTimeRunning / 1000));
TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

PrintOnSmart(['Version: '+Version+' (by Flight)',
'',
''+MsToTime(GetTimeRunning, Time_Abbrev),
'',
'Crafted: '+IntToStr(RuneCount)+' Natures ('+IntToStr(RPH)+' / hour)',
'',
'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
'',
'Gained: '+IntToStr(Profit)+' profit'],Point(15,200),16777215);

PrintOnSmart(['Time till break: '+MsToTime(TTB,Time_Bare)],Point(573,432),65280);
end;

Function IsMoving_F: Boolean;
begin
Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
end;

Function ContinueChat: Boolean;
var
X,Y,BMP: Integer;
begin
Result := False;

BMP := BitmapFromString(10, 12, 'meJxjYCAAlFVUzp07v3v3HgFBQU' +
'zZt+/e/f33D4iAagwNjfAoADICAgIxFQA1QhQAUX5BAZMMii1AS+f' +
'MmQtXMGfuXDTt1TU1q1ev2bx5y8WLl7p7epClgFygLNDMyVOmRERE' +
'MIlxw6WAWlrb2oCyQMPt7R3gUsxMjECfAmWBWoBIWVkF08FLly4DS' +
'vHy8WEPLz5GEMIAAML5W78=');

if FindBitmapToleranceIn(BMP, X, Y, MCX1, MCY1, MCX2, MCY2, 15) then
begin
TypeByte(vk_Space);
Result := True;
end else
Result := False;

FreeBitmap(BMP);
end;

Procedure CrashSmart;
begin
{$IFDEF CRASHSMART}
Writeln('You are using CRASHSMART, we are going to reload your client after update!');
SmartgetFieldObject(1488,'crash'); // will crash SMART (and Simba).
Wait(5000);
WriteLn('CRASHSMART Failed: Make sure you are using the proper plugin!');
TerminateScript;
Exit;
{$ENDIF}
Writeln('You have no CRASHSMART enabled, so you can not reload RS. Sorry, bye!');
TerminateScript;
end;

Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 10);
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, 8, 8);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], 2802162, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], 318953, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 10)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 860731, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 4) then
FindColorsTolerance(ATPA2[i], 263362, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 5) then
FindColorsTolerance(ATPA2[i], 2369228, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 10);

Result := (Length(ATPA2[i]) > 0);
if Result then
begin
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;

Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;

randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;

Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
if Length(ATPA2[i]) > 0 then
begin
MiddleTPAEx(ATPA2[i], X, Y);
HumanMMouse(X, Y, 5, 5);
if WaitUpTextMulti(UpText, 800) then
begin
Result := True;
if DeBug then
SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));
GetMousePos(X, Y);
Exit;
end;
end;
end;
end;
end;

Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
Var
h, s, t: Extended;
I,II : integer;
HSLColor : Array[1..3] of Extended;
HSL : Array[0..1] of Array[1..3] of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;

For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;

H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);

try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(t);
except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
end;

Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
end;

Function FindObjSimple_F(Colors: TIntegerArray; TheUpText: TStringArray; midx, midy: integer): Boolean;
Var
T,i,X,Y: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
Begin
MarkTime(T);
Repeat
SetArrayLength(ATPA, Length(Colors));
for i := 0 to High(Colors) do
FindColorsSpiralTolerance(midx, midy, ATPA[i], Colors[i], MSX1, MSY1, MSX2, MSY2, 15);
TPA := MergeATPA(ATPA);
ATPA := TPAtoATPAEx(TPA, 15, 15);
SortATPAFrom(ATPA, Point(MSCX, MSCY));
if (Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], x, y);

if (TimeFromMark(T) > 5000) then
Exit;

HumanMMouse(x, y, 10, 10);
Wait(randomrange(75,125));
If(IsUpTextMultiCustom(TheUpText)) then
begin
ClickMouse2(True);
if DidRedClick then
begin
Result := True;
Break;
end;
end;
Until(Result)
end;

Function CalculateEss: Integer;
var
Total,EDTM: Integer;
begin
Result := 0;

EDTM := DTMFromString('mrAAAAHic42BgYHBigmB7IHYBYjcgDgBiWyA2AWI2RgYGXiDmAWIuIGaHssWAmA+I87IyGRJiYhhiIiIYMlJSGIpyc4GmMsExK5BEx8iAkQCGAQC0RgiX');
Total := CountItems('dtm', EDTM, []);

if (not (SS = 0)) then
IncEx(Total, 3);
if (not (MS = 0)) then
IncEx(Total, 6);
if (not (LS = 0)) then
IncEx(Total, 9);
if (not (GS = 0)) then
IncEx(Total, 12);

Result := Total;

FreeDTM(EDTM);
end;

Function NearBank: Boolean;
var
X,Y,Dist: Integer;
begin
if FoundSymbol(1, X, Y, Dist) then
Result := (Dist < 15)
else
Result := False;
end;

Function InCW: Boolean;
var
X,Y,Dist: Integer;
begin
Result := (FoundSymbol(2, X, Y, Dist) or FoundSymbol(5, X, Y, Dist));
end;

Procedure SetLCOptions;
var
X,Y,T,T2: Integer;
begin
HumanMMouse(710, 144, 8, 8);
ClickMouse2(False);
WaitOption('left', 400);
MarkTime(T);
repeat
if TimeFromMark(T) > 5000 then
Exit;
if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
begin
MMouse(570, 410, 4, 4);
ClickMouse2(True);
Wait(RandomRange(175, 350));
MMouse(640, 450, 4, 4);
ClickMouse2(True);
end;

MarkTime(T2);
repeat
if TimeFromMark(T2) > 5000 then
Exit;
if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
OptionsSet := True;

Writeln('Left-click options set');

end;

Function FindObjFX(Colors: TIntegerArray; Uptext, Options: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer): Boolean;
var
X, Y, I: integer;
TPA: TPointArray;
ATPA: T2DPointArray;

begin
SetLength(TPA, Length(Colors));

For I:= 0 To High(Colors) do
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..

ATPA:= TPAToATPAEx(TPA, Width, Height); //Group TPA into cirles by Distance..
SortATPAFrom(ATPA, Point(MSCX, MSCY)); //Sort the colours from the closest to the center..
if(Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], X, Y); //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
MMouse(x, y, 5, 5); //Move the mouse to the colours found..

Wait(randomrange(200, 500)); //Wait for the uptext to show..
If(IsUpTextMultiCustom(UpText)) then
begin
ClickMouse2(False); //If it finds it, click the object/item..
if ChooseOptionMulti(Options) then
begin
Result := True; //If it clicks the object, return true..
Exit;
end;
end else
Result := False; //Cannot find the uptext then its the wrong object, return false..
end;

function OpenBankLunar: Boolean;
var
bx, by, Speed, t: Integer;
begin
Result := (LoggedIn) and (BankScreen or PinScreen);
if (Result) then exit;

Speed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);

if (FindObjFX([2508118, 4552059, 3636582, 7370101, 8552064], ['Bank', 'Booth', 'ank', 'ooth'], ['uickly', 'uick', 'ickly', 'ckl', 'se-q'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5)) then
begin
Mouse(bx, by, 0, 0, False);

t := (GetSystemTime + 5000);
repeat
if (BankScreen) or (PinScreen) then
begin
Result := true;
Break;
end;
Wait(50);
until(GetSystemTime > t);

if (Length(Players) > 0) then
if ((PinScreen) and (Players[CurrentPlayer].Pin <> '')) then
InPin(Players[CurrentPlayer].Pin);

Result := (BankScreen) or (PinScreen);
end;

ColorToleranceSpeed(Speed);
end;


function OpenBankNPCEx :Boolean;
var
NPCBox :TBox;
Colors, NPCArray :TPointArray;
ATPA: T2DPointArray;
MSNPC, NPCPoint :TPoint;
TempCTS, C, HiNPC, II, I :Integer;
begin
Result := False;
Result := (BankScreen) or (PinScreen);
If Result then Exit;

NPCArray := GetMinimapDots('NPC');
HiNPC := High(NPCArray);

If Length(NPCArray) = 0 then Exit;
SortTPAFrom(NPCArray, Point(MMCX, MMCY));
for I := 0 to HiNPC do
begin
NPCPoint := MMToMS(NPCArray[I])
If NPCPoint = Point(-1, -1) then Continue;
NPCBox := IntToBox(NPCPoint.X - 40, NPCPoint.Y - 40, NPCPoint.X + 40, NPCPoint.Y + 40)
If PixelShift(NPCBox, 200) > 500 then Continue;

TempCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 1.52);
FindColorsTolerance(Colors, 6067652, NPCBox.X1, NPCBox.Y1, NPCBox.X2, NPCBox.Y2, 13);
ATPA := TPAToATPAEx(Colors, 15, 20);
SortATPASize(ATPA, True);

for II := 0 to High(ATPA) do
begin
MSNPC := MiddleTPA(ATPA[II]);
MMouse(MSNPC.X, MSNPC.Y, 3, 3);
If WaitUpTextMulti(['ooth', 'anker'], 200) then
begin
Mouse(MSNPC.X, MSNPC.Y, 1, 1, False);
If WaitOptionMulti(['ank B', 'quick', 'ank Sir', 'ank ''Bird''s-Eye'''], 300) then
MarkTime(c);
Repeat
Wait(RandomRange(50, 100));
Until (BankScreen) or (PinScreen) or (TimeFromMark(C) > 4500);
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
If Result then
begin
ColorToleranceSpeed(TempCTS);
Exit;
end
else
ColorToleranceSpeed(TempCTS);
end;
end;
end;
end;

Function GetRingCount: Integer;
var
S,S2: String;
begin
GameTab(tab_equip);
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 8);
end
end else
Result := 0;
end;

Function FindChest(Var X,Y: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([11448246, 12171713, 13422038, 13553367], Hmod, Smod, Col, Tol);

CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSCX, MSY1, MSX2, MSY2, Tol);
ColorToleranceSpeed(CTS);

if (Length(TPA) < 1) then
Exit;

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
if (GetArrayLength(ATPA[i]) > 5) then
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
HumanMMouse(X, Y, 5, 5);

if WaitUpTextMulti(['Use', 'Bank', 'chest'], 555) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end else
Result := False;

end;
end;
end;

Function OpenChest: Boolean;
var
X,Y,T: Integer;
begin
Result := BankScreen;

if FindChest(X, Y) then
begin
ClickMouse2(True);
if not DidRedClick then
Exit;
FFlag(0);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end;

Result := BankScreen;
end;

{

Function OpenChest: Boolean;
var
X,Y,T,F: Integer;
label
Start;
begin
Result := False;

While IsMoving_F do
Wait(1);

Start:
if FindChest(X, Y) then
begin

ClickMouse2(True);
if not DidRedClick then
goto Start;

if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end else
begin
While IsMoving_F do
Wait(1);
Inc(F);
if (F > 5) then
Exit;
goto Start;
end;

Result := BankScreen;
end;
}

Function DepositEss(Amount: Integer): Boolean;
var
T,Slot: Integer;
begin
if not BankScreen then exit;
Slot := RandomRange(9, 20);
if (Amount = 1) then
MouseItem(Slot, mouse_left)
else if (Amount = 5) then
begin
MouseItem(Slot, mouse_right);
Wait(RandomRange(50, 115));
WaitOption('Deposit-5', 500);
end;

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Result := False;
if not InvFull then
break;
until(False)

Result := (not InvFull);
end;

Function TeleportTo(Where: String): Boolean; Forward;

Function SummoningRenew: Boolean;
var
Graahk, X, Y, tries, Summoning: Integer;
Label Start;
begin
Graahk := DTMFromString('mWAAAAHicY2FgYBBggAAeIJYBYlYg5kQSP1RoCySZ4FgESDLiwSAAAGfpAew=');
Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA==');
if(not Bankscreen) then
OpenChest;
tries:= 0;

if(FindDTM(Graahk, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
if(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
MoveMouse(x, y);
wait(500);
ClickMouse2(true);
wait(2000);
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) = True);

tries := 0;
Start:
GameTab(Tab_Inv);
if(GetSummonPoints < 20) then
begin
writeln('Need to Refill Summoning Points.');
if(FindDTM(Summoning, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
MMouse(x, y, 0, 0);
wait(500);
ClickMouse2(true);
wait(2000);
if(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) = True);

if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
if (BankScreen) then
CloseBank;
MMouse(X, Y + 5, 0, 0);
if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
begin
ClickMouse2(False);
ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning']);
wait(2000);
end;
end;
end;

if (GetSummonPoints < 20) then
goto Start;

tries := 0;
if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
Repeat
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
CloseBank;
MMouse(x, y, 5, 5);
wait(500);
ClickMouse2(false);
wait(500);
ChooseOption('Summon');
if(FindBlackChatMessage('follower')) then
break;
tries:= tries + 1;
if(tries > 10) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(UsingFamiliar = true);
if (Not Bankscreen) Then
Repeat
OpenChest;
if(Bankscreen or Pinscreen) then
break;
Until(False);

if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints > 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
wait(1500);

if(FindDtm(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;

Result:= UsingFamiliar;

FreeDTM(Graahk);
FreeDTM(Summoning);
end;

Function WithdrawEss: Boolean;
var
X,Y,Ess,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then
Exit;

FixBank;

Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');

if BankScreen then
begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
end else
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
Wait(RandomRange(1750, 2205));
goto Start;
end;
end;

FreeBitmap(Ess);
end;

Function TakeRing: Boolean;
var
X,Y,ADTM,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;
ADTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');

if BankScreen then
begin
BankTab(BankTabVal);
if FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;

if(FindDTM(ADTM, X, Y, MIX1, MIY1, MIX2, MIY2)) then
ClickMouse(X, Y, 1);

FreeDTM(ADTM);
end;

Function WithdrawRunes(Method: String): Boolean;
var
X,Y: Integer;
begin
Result := False;
if not LoggedIn then Exit;

if InvFull then
begin
if not BankScreen then
OpenChest
else if BankScreen then
DepositEss(5);
Wait(RandomRange(350, 625));
end;

if FindObjEx_F(1954517, 6579305, 15, 8, MSCX, MSCY, ['osm','smic','ic rune'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(350, 675));
end;

if (Lowercase(Method) = 'contact') then
begin

if FindObjEx_F(14277091, 7698043, 15, 15, MSCX, MSCY, ['Air','ir ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindObjEx_F(13020358, 6250339, 15, 15, MSCX, MSCY, ['Astral','stral','ral ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end else if (Lowercase(Method) = 'spell') then
begin

if FindObjEx_F(14230559, 7369078, 15, 15, MSCX, MSCY, ['Law','aw ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindObjEx_F(13020358, 6250339, 15, 15, MSCX, MSCY, ['Astral','stral','ral ru'], X, Y, False) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end;

CloseBank;

Result := True;

end;

Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;

if (Method = 1) then
begin

//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end else if (Method = 2) then
begin

//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end;

Result := True;
end;

Function FindDecayedPouch(Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function CheckPouches: Boolean;
var
S: Integer;
begin
Result := FindDecayedPouch(S);
end;

Function WearRing: boolean;
var
AmDTM,X,Y: Integer;
begin
AmDTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');
if FindDTM(AmDTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 5, 5);
if not BankScreen then
begin
ClickMouse2(True);
Result := True;
end else if BankScreen then
begin
ClickMouse2(False);
if WaitOption('Wear', 1500) then
Result := True;
end;
if Result then
AmCount := 8;
end else
Result := False;
FreeDTM(AmDTM);
end;

Function FindNPCChatText_F(Option: String; Action: fnct_ActionOptions): Boolean;
var
X,Y: Integer;
begin
Result := False;

if Option = '' then
begin
srl_Warn('FindNPCChatText', 'txt is empty', warn_AllVersions);
Exit;
end;

if FindText(X, Y, Option, UpChars, 5, 345, 510, 475) then
begin
Result := True;
case Action of
Move: MMouse(X, Y + 2, Random(Length(Option) * 5), 4);
ClickLeft: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, True);
ClickRight: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, False);
end;
end;
end;

Function ContactScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'Choose a character', UpCharsEx, 190, 30, 325, 55);
end;

Function ContactRepair: Boolean;
var
T,T2,T3: Integer;
begin

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 4000) then
Exit;
if ContactScreen then
break;
until(false)

if ContactScreen then
begin
MouseBox(455, 230, 465, 290, 1);
Wait(RandomRange(275, 480));
MouseBox(380, 80, 435, 160, 1);
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 6000) then
Exit;
if ClickToContinue then
MarkTime(T2);
Wait(RandomRange(125, 275));
if FindNPCChatText_F('epai', ClickLeft) then
break;
until(false)

MarkTime(T3);
repeat
FindNormalRandoms;
if (TimeFromMark(T3) > 2000) then
Exit;
if ClickToContinue then
MarkTime(T3);
Wait(RandomRange(125, 275));
until(false)

Result := True;

end;

Function RepairPouches(Method: String): Boolean;
var
X,Y,Slot,Spell: Integer;
label
Start;
begin
Start:
Case Lowercase(Method) of
'spell':
Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
'DJlKvQ=');

'contact':
Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
'YAAA0ZFcCA==');
end;

if FindDecayedPouch(Slot) then
begin
Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
GameTab(tab_Magic);
Wait(Random(100));
if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
begin
MMouse(X, Y, 5, 5);
Wait(Random(100));
if (Lowercase(Method) = 'spell') then
begin
if WaitUpText('epair',RandomRange(250,350)) then
begin
ClickMouse2(True);
Wait(RandomRange(20, 75));
MouseItem(Slot, mouse_left);
Wait(RandomRange(1575, 2150));
Writeln('Pouch repaied');
end;
end else if (Lowercase(Method) = 'contact') then
begin
if WaitUpText('Contact',RandomRange(250,350)) then
begin
ClickMouse2(True);
if ContactRepair then
Writeln('Pouches repaied');
end;
end;
end;
end;

if not FindDecayedPouch(Slot) then
Result := True
else
goto Start;

FreeBitmap(Spell);
end;

Function FindInvItem(Cols: TIntegerArray; Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues(Cols, Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function NewRingCount: Integer;
var
S,S2: String;
X, Y, Dist, Home: Integer;
label start;

begin
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 2);
end
end else
Result := 0;

if((Result = 0) and (FoundSymbol(1, X, Y, Dist) = False)) then
begin
if(GameTab(Tab_Magic)) then
begin
Home:= DTMFromString('mbQAAAHicY2VgYLBmYmBwBGJ7IDYGYnMgfgoUvw/Eb4H4JRDfBeJ9Rz4xtM25gYJZgeLomBELBgMAGDAQJg==');
if(FindDTM(Home, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
MMouse(X, Y, 5, 5);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(True);
end;
While(FoundSymbol(1, X, Y, Dist) = False) do
wait(1);
end;
end;
Start:
If (Result = 0) then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
FoundSymbol(1, X, Y, Dist);
if(Dist < 15) then
begin
if(OpenBankLunar = False) then
OpenBankNPCEx;
wait(1000);
if (Not Bankscreen) then
Goto Start;
if InvFull then
DepositEss(1);
TakeRing;
wait(750);
if(WearRing) then
Result:= 8;
if(Bankscreen) then
CloseBank;
end;
end;
end;

Function FromBankDTM(Which: Integer): Boolean;
var
X,Y,ADTM,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;

ADTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');

if BankScreen then
begin
if (Which = 1) then
begin
if FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(ADTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if (ItemFail > 5) then
Shutdown('Out of rings');

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding items '+IntToStr(ItemFail)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;
end;

FreeDTM(ADTM);
end;

Function CheckFamiliar(Seq: Integer): Boolean;
begin
if not DidCheck then
begin
if (Seq = 1) then
begin
if (FindBlackChatMessage('it can fit') or
FindBlackChatMessage('try again')) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
DidCheck := True;
Result := True;
end;
end;
if (Seq = 2) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
DidCheck := True;
Result := True;
end;
end else
Result := True;
end;

Function WalkToAlter: Boolean;
var
Tries,T: Integer;
label
Start;
begin
Tries := 0;

Start:
SPS_WalkPath(Path_ToAlter);
HumanMMouse(350, 200, 20, 20);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

if FindObjSimple_F([4912288,5045653,6414239], ['nter','Myst','erious','ruins'], MSCX, MSCY) then
begin
HumanMMouse(260, 16, 10, 5);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
MarkTime(T);
repeat
FindNormalRandoms;
if TimeFromMark(T) > 5000 then
Exit;
if not SPS_PosOnMM(Point(3305, 4590)) then
break;
until(False)

Result := not SPS_PosOnMM(Point(3305, 4590));
end else
begin
Inc(Tries);

While IsMoving_F do
Wait(1);

if (Tries > 3) then
begin
Result := False;
Exit;
end;

goto Start;
end;
end;

Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
HumanMMouse(X, Y - 5, 2, 2); //Click Exactly infront of the bank..
ClickMouse2(True);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
Result := NearBank;
end else
begin
//MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
goto Start;
end;
end;
end;

Function TeleportTo(Where: String): Boolean;
var
T,T2: Integer;
begin
Case LowerCase(Where) of

'cw':
begin
if GameTab(tab_Equip) then
begin
AmCount:= NewRingCount;
if WearingItem(11) then
MouseEquippedItem('ring', mouse_right);
WaitOption('Castle Wars', 500)
Wait(RandomRange(50,150));
GameTab(tab_Inv);
AmCount := (AmCount-1);
MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 8000) then
Exit;
if InCW then
Break;
Wait(1);
until (False)
Result := InCW;
end;
end;

'jungle':
begin
if not UsingFamiliar then
Result := False;

if OptionsSet then
InteractFamiliar('')
else
SetLCOptions;

MarkTime(T);
repeat
FindNormalRandoms;
CheckFamiliar(1);
if (TimeFromMark(T) > 5000) then
CheckFamiliar(2);
if (TimeFromMark(T) > 10000) then
Exit;
if FindNPCChatText_F('lepo', ClickLeft) then
break;
until(False)
Wait(RandomRange(975, 1250));
DidCheck := False;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
Inc(Tele_Fail);
exit;
end;

if SPS_PosOnMM(Point(2970, 4630)) then
Break;
Wait(1);
until (False)

if SPS_PosOnMM(Point(2970, 4630)) then
begin
Tele_Fail := 0;
Result := True;
end;

end;

end;
end;

function selectWorldA: Boolean;
var
x, y, xx, yy, i, z, World: Integer;
begin
z:= Random(High(Players[CurrentPlayer].WorldInfo));
World:= Players[CurrentPlayer].WorldInfo[z];

if not LobbyTab(L_WorldSelect) then Exit;
while(not FindText(xx, yy, IntToStr(world), StatChars, 117, 142, 135, 435)) do
begin
Wait(1000);
if i = 0 then
begin
MMouse(685, 423, 10, 10);
GetMousePos(X, Y);
HoldMouse(X, Y, MOUSE_LEFT);
end;
i := i+1;
if (i > 25) then
begin
ReleaseMouse(X, Y, MOUSE_LEFT);
Exit;
end;
end;
ReleaseMouse(X, Y, MOUSE_LEFT);
Wait(1500+Random(1000));
if not FindText(xx, yy, IntToStr(world), StatChars, 117, 142, 135, 435) then Exit;
Mouse(xx, yy, 50, 5, true);
Result := True;
end;

function Login: Boolean;
begin
if LoggedIn then
begin
Result := True;
Exit;
end;
LoginPlayerToLob;
Wait(1000+Random(500));
if not LobbyScreen then Exit;
Wait(1000+Random(500));
if not selectWorldA then Exit;
Wait(1000+Random(500));
if not LogInPlayer then Exit;
Wait(1000+Random(500));
end;

Function HandleBank: Boolean;
var
S: String;
T,T2: Integer;
NeedAm,GoOn: Boolean;
begin
Result := False;
GoOn := False;
NeedAm := (AmCount < 1);

if BankScreen then
begin

if NeedAm then
begin
MarkTime(T);
repeat

FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;

FromBankDTM(1);
Wait(RandomRange(1275, 1455));
if WearRing then
GoOn := True;

if GoOn then
break;

until(false)
end;

WithdrawEss;

if PP then
begin
if HandlePouches(1, 1) then
WithdrawEss;
if HandlePouches(2, 1) then
WithdrawEss;
end else
begin
if HandlePouches(2, 1) then
WithdrawEss;
end;
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
CloseBank;
Stage := 0;
Exit;
end;
if InvFull then
break;
until(false)

if InvFull then
begin
Wait(RandomRange(375, 550));

if CheckPouches then
if WithdrawRunes(Lowercase(RepairMethod)) then
RepairPouches(Lowercase(RepairMethod));

if (GetMMLevels('run',S) <= RestAt) then
RestUntil(RandomRange(90,100));

if not UsingFamiliar then
SummoningRenew
else
Result := True;

end;

end;

Function CraftRunes: Boolean;
var
RNew,ROld,Seq,
T,T2,A,B: Integer;
label
Start;
begin
Seq := 0;
IncEx(Exp, Round((CalculateEss*XPMod)));
IncEx(Exp_C, Round((CalculateEss*XPMod)));
A := Round((CalculateEss*EssPrice));
ROld := getAmountBox(invBox(1));

MarkTime(T)
repeat
FindNormalRandoms;
HumanMMouse(260, 16, 10, 5);
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
Wait(RandomRange(300, 555));
until(TimeFromMark(T) > 5000)

if FlagPresent then
FFlag(0)
else
While IsMoving_F do
Wait(1);
Wait(RandomRange(1550, 1725));

Start:

if (Seq > 0) then
begin

MarkTime(T2)
repeat
FindNormalRandoms;
HumanMMouse(260, 115, 35, 35);
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
until(TimeFromMark(T2) > 5000)

if (Seq < 2) then
begin
HumanMMouse(640, 220, 15, 15);
Wait(RandomRange(1050, 1275));
While IsMoving_F do
Wait(1);
Wait(RandomRange(202, 365));
end else
begin
HumanMMouse(687, 185, 15, 15);
Wait(RandomRange(1300, 1575));
end;

end;

if (Seq = 0) then
begin
if PP then
begin
if HandlePouches(1, 2) then
Seq := 1;
end else
if HandlePouches(2, 2) then
Seq := 2;

goto Start;
end;

if (Seq = 1) then
begin
if HandlePouches(2, 2) then
Seq := 2;
goto Start;
end;

if (Seq = 2) then
Result := True;

if Result then
begin
RNew := getAmountBox(invBox(1));
IncEx(RuneCount_C, (RNew-ROld));
IncEx(RuneCount, (RNew-ROld));
B := ((RNew-ROld)*NaturePrice);
IncEx(Profit, (B-A));
OnScreen;
end;
end;

Procedure MasterLoop;
begin
if not LoggedIn then Exit;
Case Stage of
0:
begin
if ((not InCW) and (not NearBank)) then
TeleportTo('Cw');

if NearBank then
begin
if not InvFull then
begin
if OpenChest then
if HandleBank then
Stage := 1
else
Writeln('Failed while banking')
else
Writeln('Failed to open bank');
end else if InvFull then
begin
if not UsingFamiliar then
begin
if OpenChest then
HandleBank;
end else
Stage := 1;
end;
end else
WalkToBank;
end;

1:
if TeleportTo('Jungle') then
Stage := 2
else
Stage := 0;

2:
if WalkToAlter then
begin
Walk_Fail := 0;
Stage := 3;
end else
begin
FindNormalRandoms;
Inc(Walk_Fail);
Stage := 1;
end;

3:
if CraftRunes then
Stage := 4;

4:
if TeleportTo('CW') then
Stage := 0;

end;

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s: integer;
begin
if not LoggedIn then Exit;

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if NearBank then
begin
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Closebank;
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
end;

begin
Smart_Server := 72;
Smart_Members := True;
Smart_Signed := True;
Smart_SuperDetail := False;

setupSRL();
DeclarePlayers;

CheckStats;
Loadvars;
CheckVersion;

LogIn;
ClickNorth(SRL_ANGLE_HIGH);

Smart_ClearCanvas;
OnScreen;

SetLCOptions;
AmCount := GetRingCount;

SPS_Setup(RUNESCAPE_SURFACE, ['7_11','8_11']);
SPS_Continue := True;

Repeat
if not LoggedIn then
begin
Login;
ClickNorth(SRL_ANGLE_HIGH);
end;

if (TimeFromMark(CommitTime)>=30000) then
Commit;

if (TimeFromMark(ReportTime)>=5000) then
Report;

BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if (Walk_Fail > 2) then
Shutdown('SPS walking failure');

if (Tele_Fail > 2) then
Shutdown('SPS out of date');

MasterLoop;
Until(AllPlayersInactive)

end.

Sin

2012-01-28 14:14:41

:p thanks
Jw if it needs 4 Doses or anything below.

'Toxin

2012-01-28 14:24:53

From: S1N
:p thanks
Jw if it needs 4 Doses or anything below.


Well… I mean it's not hard to find out lol, you really are lazy as shit eh. It's waiting for uptext of any ['ummoning', 'potion'] therefore, dose doesn't matter.

Brandon

2012-01-28 14:30:01

Ahh I actually made those dtm's.. it drinks the highest potion it can find.. if u have a 4 and a 2, it will drink the 4 first.. then it becomes a 3 and a 2.. it'll drink the 3 first.. then it becomes a 2 and a 2.. it'll drink the first one found.. then a 1 and a 2, it'll drink the 2.. I guess that's how dtm's work unless you use finddtms instead of finddtm.. if u use finddtms then sort the tpa and it'll drink lowest first then highest last.

1 and 1, it'll drink the first found.. finally it'll drink the last 1..

What happens is that if ur bank is full of 4's, it'll keep drinking fours and depositing back the 3's.. u run out of 4's, it'll drink the 3's.. if u want u can just use bob at ge to decant them all to 4's.. waste of time though.

drinks them pretty damn good. Those DTM's are like 4+ weeks old.. still working flawlessly XD

'Toxin

2012-01-28 15:37:12

From: ggzz
Ahh I actually made those dtm's.. it drinks the highest potion it can find.. if u have a 4 and a 2, it will drink the 4 first.. then it becomes a 3 and a 2.. it'll drink the 3 first.. then it becomes a 2 and a 2.. it'll drink the first one found.. then a 1 and a 2, it'll drink the 2.. I guess that's how dtm's work unless you use finddtms instead of finddtm.. if u use finddtms then sort the tpa and it'll drink lowest first then highest last.

1 and 1, it'll drink the first found.. finally it'll drink the last 1..

What happens is that if ur bank is full of 4's, it'll keep drinking fours and depositing back the 3's.. u run out of 4's, it'll drink the 3's.. if u want u can just use bob at ge to decant them all to 4's.. waste of time though.

drinks them pretty damn good. Those DTM's are like 4+ weeks old.. still working flawlessly XD


Yeah, I kinda realized that after I quickly went to go look back at how you actually implemented it. Pretty sweet. I'm pretty stoked on going for 91+ rc though still. Profit should be decent by then .

Sin

2012-01-28 15:37:59

From: XxX Toxin XxX
Well… I mean it's not hard to find out lol, you really are lazy as shit eh. It's waiting for uptext of any ['ummoning', 'potion'] therefore, dose doesn't matter.

Stfu D:
From: ggzz
Ahh I actually made those dtm's.. it drinks the highest potion it can find.. if u have a 4 and a 2, it will drink the 4 first.. then it becomes a 3 and a 2.. it'll drink the 3 first.. then it becomes a 2 and a 2.. it'll drink the first one found.. then a 1 and a 2, it'll drink the 2.. I guess that's how dtm's work unless you use finddtms instead of finddtm.. if u use finddtms then sort the tpa and it'll drink lowest first then highest last.

1 and 1, it'll drink the first found.. finally it'll drink the last 1..

What happens is that if ur bank is full of 4's, it'll keep drinking fours and depositing back the 3's.. u run out of 4's, it'll drink the 3's.. if u want u can just use bob at ge to decant them all to 4's.. waste of time though.

drinks them pretty damn good. Those DTM's are like 4+ weeks old.. still working flawlessly XD


Lol thanks <3

Scaper

2012-01-28 16:34:17

From: S1N
Haha yeah, I, of course am a lazy human being ;)


Typical just like most who gain the SRL member rank ;)

smurg

2012-01-29 13:22:26

Ya, if you could do a ess pouch check and make sure they're in the correct slots on each run, it would be much appreciated, thanks.

kingarabian

2012-01-29 19:06:50

=-=-=-=-=-=-=-= Naturez 1.6 by Flight =-=-=-=-=-=-=
Time Running: 4 Hours, 47 Minutes and 51 Seconds
Runes crafted: 13020
Exp gained: 60363
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Few hickups.


=-=-=-=-=-=-=-= Naturez 1.6 by Flight =-=-=-=-=-=-=
Time Running: 4 Hours, 56 Minutes and 51 Seconds
Runes crafted: -11851
Exp gained: 92313
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Going at it strong.

kingarabian

2012-01-30 12:01:43

Well today I ran it and the following issues occured:

It starts up and does everything correctly, it summongs a familiar withdraws ess fills pouches etc.. However after that it keeps hovering over the summoning symbol over and over again and not clicking the summoning symbol to interact with the familiar. This is now happenning quiet frequently. The only way around this is for me to go and make the left click settings to 'interact' (even though it's already set to that) and thenn it works.

Flight

2012-01-30 20:51:09

From: kingarabian
Well today I ran it and the following issues occured:

It starts up and does everything correctly, it summongs a familiar withdraws ess fills pouches etc.. However after that it keeps hovering over the summoning symbol over and over again and not clicking the summoning symbol to interact with the familiar. This is now happenning quiet frequently. The only way around this is for me to go and make the left click settings to 'interact' (even though it's already set to that) and thenn it works.


Are you using the newest version? The script should set your left-click options to 'Interact' in the beginning, and from there on out simply left-click the Summoning orb and wait for the correct NPC chat to teleport.

kingarabian

2012-01-30 21:44:44

From: Flight
Are you using the newest version? The script should set your left-click options to 'Interact' in the beginning, and from there on out simply left-click the Summoning orb and wait for the correct NPC chat to teleport.


Yeah I see it corrects its self. Nice.
However im trying to optimize this script as its taking about 500k memory :redface:

Flight

2012-01-30 21:53:47

From: kingarabian
Yeah I see it corrects its self. Nice.
However im trying to optimize this script as its taking about 500k memory :redface:


Oh yikes, but I wouldn't doubt that. If I could give some suggestions I would but I'm not sure where in the script would really draw so much CPU/Memory.

kingarabian

2012-01-30 23:47:49

From: Flight
Oh yikes, but I wouldn't doubt that. If I could give some suggestions I would but I'm not sure where in the script would really draw so much CPU/Memory.


Well so far I took out your paint to see how it runs without it. Grats was telling me that the slower the script the less memory/resources it needs. So I think in some areas of the script that require a lot of rich functions/procedures to do the actions, they should be looked at.

'Toxin

2012-01-31 12:26:51

There definately was an update today in-game to throw off the bots once again, or this one specifically. Won't bank properly anymore, just clicks on a tile south of the bank (on the minimap), walks there, then clicks ring to re-located back to cw, moves towards the chest again, then runs back south outside the cw lobby and repeats teleporting with duel ring to re-locate. :S Very weird.

smurg

2012-01-31 18:44:42

From: XxX Toxin XxX
There definately was an update today in-game to throw off the bots once again, or this one specifically. Won't bank properly anymore, just clicks on a tile south of the bank (on the minimap), walks there, then clicks ring to re-located back to cw, moves towards the chest again, then runs back south outside the cw lobby and repeats teleporting with duel ring to re-locate. :S Very weird.


Yup, they changed some things.

http://villavu.com/forum/showthread.php?t=73786

Flight

2012-01-31 20:59:21

From: XxX Toxin XxX
There definately was an update today in-game to throw off the bots once again, or this one specifically. Won't bank properly anymore, just clicks on a tile south of the bank (on the minimap), walks there, then clicks ring to re-located back to cw, moves towards the chest again, then runs back south outside the cw lobby and repeats teleporting with duel ring to re-locate. :S Very weird.


Acts like it can't find the chest. Should be a simple fix for sure. I personally just need the DidClick/DidRedClick updated via SRL.

kingarabian

2012-01-31 22:20:31

From: Flight
Acts like it can't find the chest. Should be a simple fix for sure. I personally just need the DidClick/DidRedClick updated via SRL.


From: Narcle
Code below or wait for SRL update, should be in ~30 mins - hour.


function DidClick(Red: Boolean; Time: integer): boolean;
var
TimeOut, x, y, w, h: integer;
TPA1, TPA2: TPointArray;
B: TBox;
begin
GetMousePos(x, y);
GetClientDimensions(w, h);
B := IntToBox(x - 15, y - 15, x + 15, y + 15);
if B.x1 < 0 then B.x1 := 0;
if B.y1 < 0 then B.y1 := 0;
if B.x2 > w then B.x2 := w;
if B.y2 > h then B.y2 := h;
TimeOut := GetSystemTime + Time;
while (GetSystemTime < TimeOut) do
begin
With B do
begin
FindColors(TPA1, 333711, x1, y1, x2, y2);//Red
FindColors(TPA2, 168682, x1, y1, x2, y2);//Orange/Yellow

if (Length(TPA1) > 0) and (Length(TPA2) > 0) then
begin
if (Length(TPA1) > Length(TPA2)) then
begin
if Red then
Result := True
else
Result := False;
Exit;
end;
if (Length(TPA1) < Length(TPA2)) then
begin
if Red then
Result := False
else
Result := True;
Exit;
end;
end;
end;
wait(2);
end;
end;


If you have a working version please send it my way to test.

Oh yeah didn't you have a custom 'uptext'?

Flight

2012-01-31 22:40:56

From: kingarabian
If you have a working version please send it my way to test.

Oh yeah didn't you have a custom 'uptext'?


Will do. Custom uptext? I don't believe so. I'm fixing up ZMI quick, when I get done with this I'm gonna quickly update Heavy-Rodder then I'll take a look at Naturez.

Sin

2012-02-01 17:47:51

Yup, still broken, it does the summoning stuff, attempts to check for the ring charges and just waits there ;l

Brandon

2012-02-01 18:08:27

:S Wasn't that hard to fix -_-.. Only thing that actually broke it was the BankSymbol colours and the Castlewars colours which changed in the FoundSymbol Function.. everything else works.. got 70k natures with it. Must have the latest SRL Update.. Even if it means forcing an update.

Again this is the potion drinking version because I CBA to write a new obelisk finder.. Also it uses the lower natures path.. of course u can copy your own from another version..

Edited: Removed my username/pass and pin. Also you guys are going to have to uncomment the updater which was annoying me.. same with the stats commit which doesn't work for me on windows 8.. so just uncomment those and feel free to do whatever else.
[LEFT]

{/////////////////////////////////////////
// ~Naturez by Flight~ //
// //
// Version: 1.7 //
/////////////////////////////////////////}

program Naturez;

{$DEFINE SRL5}
{$DEFINE CRASHSMART}
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i ObjectDTM/ObjDTMInclude.simba}
{$i SRL/SRL/skill/summoning.simba}

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//General settings
WalkMethod = 1; //1 for SPS walking, 2 for ObjDTM walking (experimental)
RestAt = 0; //Energy to rest at (while at bank)
SwitchWorlds = True; //Switch worlds after break?
FlagFailsafe = True; //if FFlag isn't working.

//Pouch settings
RepairMethod = 'spell'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell
SS = 2; //Which slot # has your small pouch (0 for not using)
MS = 3; //Which slot # has your medium pouch (0 for not using)
LS = 4; //Which slot # has your large pouch (0 for not using)
GS = 5; //Which slot # has your giant pouch (0 for not using)
BankTabVal = 5; //The tab where all your stuff for the sript is located..

//Break settings
BreakIn = 900; //How long before we take a break? (minutes)
BreakFor = 15; //How long will we break for? (minutes)
Bir = 25; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction


Var

//General variables
XPMod: Extended;
Version: String;
ReportTime,PostID,
CommitTime,EssPrice,
NaturePrice,Profit: Integer;
ObCols: TIntegerArray;
Path_ToAltar,Path_ToOb: TPointArray;
ObjPath_ToAltar: TStringArray;

//Dynamics
Stage,Walk_Fail,AmCount,RuneCount,
Exp,Exp_C,RuneCount_C,Tele_Fail: Integer;
DidCheck,OptionsSet,PP: Boolean;

//Break variables
w,x,y,z,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;


Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := Skill_RuneCrafting;
Active := True;
end;
end;

Function CashStringToInt(S: string): Integer; //Thanks TomTuff!
Var
i, ii: Integer;
Numbs: TStringArray;
Temp: string;
begin
Temp := '';
Numbs := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'k', 'm', 'b'];
for i := 1 to High(S) do
for ii := 0 to High(Numbs) do
if S[i] = Numbs[ii] then
case ii of
0..9: Temp := Temp + Numbs[ii];
10..12:
begin
Result := StrToInt(Temp);
case ii of
10: Result := Result * 100; //Since price is given to 1 decimal,
11: Result := Result * 100000; //instead of multiplying by the entire
12: Result := Result * 100000000; //factor, you must multiply by factor/10
end;
end;
end;
if (Result = 0) then
Result := StrToInt(Temp);
end;

Function GetPrice(ItemID: Integer): Integer;
begin
Result := CashStringToInt(Between('<td>', '</td>', GetPage('http://services.runescape.com/m=itemdb_rs/viewitem.ws?obj=' + IntToStr(ItemID))));
end;

Procedure Loadvars;
begin
Version := '1.7';
PostID := 849594;
MarkTime(ReportTime);
MarkTime(CommitTime);
EssPrice := GetPrice(7936);
NaturePrice := GetPrice(561);
MouseSpeed := RandomRange(18,22);
DidCheck := False;
OptionsSet := False;
XPMod := 9.0;
PP := (not(GS = 0));

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);

ObCols := [10263168, 12500648, 13816517];

Path_ToAltar := [Point(3003, 4641), Point(3012, 4640), Point(3020, 4640), Point(3027, 4640),
Point(3034, 4640), Point(3040, 4641), Point(3047, 4641), Point(3053, 4641),
Point(3060, 4641), Point(3066, 4641), Point(3073, 4641), Point(3080, 4641),
Point(3088, 4640), Point(3095, 4640), Point(3102, 4640), Point(3108, 4640),
Point(3113, 4640), Point(3121, 4639), Point(3127, 4639), Point(3133, 4639),
Point(3140, 4637), Point(3147, 4638), Point(3153, 4638), Point(3158, 4638),
Point(3164, 4638), Point(3172, 4639), Point(3179, 4638), Point(3185, 4637),
Point(3193, 4636), Point(3201, 4636), Point(3207, 4637), Point(3215, 4637),
Point(3222, 4637), Point(3229, 4637), Point(3236, 4637), Point(3243, 4637),
Point(3254, 4636), Point(3260, 4632), Point(3268, 4627), Point(3273, 4622),
Point(3278, 4618), Point(3283, 4613), Point(3291, 4608), Point(3295, 4608),
Point(3296, 4605)];
(*
Path_ToAltar := [Point(3004, 4648), Point(3017, 4641), Point(3025, 4639), Point(3035, 4639),
Point(3045, 4640), Point(3056, 4638), Point(3066, 4636), Point(3076, 4634),
Point(3087, 4633), Point(3097, 4631), Point(3109, 4631), Point(3120, 4629),
Point(3133, 4625), Point(3147, 4618), Point(3157, 4611), Point(3168, 4604),
Point(3175, 4597), Point(3185, 4587), Point(3194, 4578), Point(3204, 4571),
Point(3214, 4565), Point(3225, 4565), Point(3234, 4561), Point(3242, 4561),
Point(3253, 4560), Point(3271, 4568), Point(3281, 4574), Point(3290, 4580),
Point(3303, 4584)];
*)
Path_ToOb := [Point(260, 970), Point(290, 965)];

ObjPath_ToAltar := ['123:57:4:1:7:55:63:3:7:107:45:6:7:45:31:6:7:38:38',
'134:85:8:1:7:136:59:1:7:133:74:1:7:132:90:1:7:132:103:1:7:66:97:1:7:93:125:1:7:113:121:1:7:74:125',
'141:70:11:1:7:86:23:1:7:86:39:1:7:86:54:1:7:82:70:1:7:82:86:1:7:82:99:1:7:42:121:1:7:62:117:1:7:70:129:1:7:86:121:1:7:78:117',
'126:39:8:1:7:121:102:1:7:133:102:1:7:74:62:1:7:82:54:1:7:90:46:1:7:66:38:1:7:54:54:1:7:54:62',
'137:67:8:1:7:106:70:1:7:90:82:1:7:94:90:1:7:114:78:1:7:106:114:1:7:46:90:1:7:38:98:1:7:70:50',
'121:94:8:1:7:114:110:1:7:106:102:1:7:74:130:1:7:86:118:1:7:102:126:1:7:86:138:1:7:42:106:1:7:54:86',
'117:93:9:1:7:94:26:1:7:110:38:1:7:66:90:1:7:74:98:1:7:46:106:1:7:54:94:1:7:58:106:1:7:62:114:1:7:66:130',
'80:80:5:1:7:74:30:1:7:38:90:1:7:126:94:1:7:82:142:1:7:94:142:5:90:94:72:94:72:72:91:71:90:95'];

ObjDTM_Setup;

end;

Procedure CheckVersion;
var
Page,NewVer: String;
begin
Page := GetPage('http://villavu.com/forum/showthread.php?p='+IntToStr(PostID)+'');
NewVer := Between('Current version: ', '<br />', Page);

if Version <> NewVer then
ShowMessage('Your script is out of date!')
else
Exit;
end;

Procedure Report;
begin
ClearDebug;
WriteLn('=-=-=-=-=-=-=-= Naturez '+Version+' by Flight =-=-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Runes crafted: '+IntToStr(RuneCount));
WriteLn('Exp gained: '+IntToStr(Exp));
WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');

MarkTime(ReportTime);
end;

Procedure Commit;
begin
stats_IncVariable('Nature Runes (Crafted)', RuneCount_C);
stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
Stats_Commit;
RuneCount_C := 0;
Exp_C := 0;
MarkTime(CommitTime);
end;

Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Report;
Logout;
TerminateScript;
end;

Procedure DrawImage;
var
Pic: Integer;
Canvas: TCanvas;
begin
SmartSetDebug(True);

Pic := BitmapFromString(256, 77, 'meJztvWdYlNm2LkrlnHNRiaKKK' +
'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' +
'roWBWRPWEKQkbEcT8R9KkMLnw/xsAtr92BkJTKw2GXPhZ6JF9eqLq' +
'dmNScCNwRCmB8yrjD4fNBnqSwsKwg7Zjn33ZPNXxWoayiKErK1nfZ' +
'n5Kjh0B4lQE0xbNFhlZ6XrlzcNde45rFO00C1qua7ejuzeax/5MUU' +
'QNnKrERNTU3nH5zoe7YJEFRyahIYEYuSGxjFQNgkZyXGn3Ts+2ITM' +
'GzPfFuegvn+UkFoHk1hsLYwN/98xIO/3gT2ZpRHcnC1I5CXXOEOND' +
'/UAleDV6fydh/uvTE53n6+prq1QukjZInpUND0/RfBqOSqqTEVgVd' +
'uXuq8UZPbtEZuKyFxcUDAgFHQ1tHqvk+qO8ByPs32uc9PfKytm0u5' +
'+9W1vS83Jzy0in6s3v62+v/6v/994F/r/Wf4smwS+ArVHCWKJqg3U' +
'v02WEfGRUDLfH76rlBolMCQH5rp13C2BPBD4Jg8qMLF2Nxo+ckyFF' +
'JfzAtI8so8Evzs25k19+zBc3BfOgMGpaC5TIcwq6gBxxffzFV/GQe' +
'CJo4bJjw2RKYwxBEWqdf6CWDvSg4QOBheiBDHELccaXn07H7LrZLI' +
'ze66IAuWgPGDoAXGTyARjFSylOwkn73Kc68Onv/bAdeLHP0AXHh0G' +
'E/IXcrLLHKbaCSDS1O4iDdu2tB2fv3cV9Ndz8rsD7Ocao1cfBy5gs' +
'/c0+bTgAQqm6byNyjbmzX7+kn2hI9VM1vnZr2UgwYek6PPTk5O8jl' +
'sNPJmNxDbtmVSiUb/hymA+bQ/0cLBNK7F78CTnv63jeo6iluxOSR+' +
'MIuLH2hekoRlmBCVSaydh3tuPADGv35TS53SU8QU0CDJBPvxSAqTJ' +
'PKmduxpvvV0PO2Eb17+WmitFhYqXAGkR5QhHWIsw0q9lEVk4COYdm' +
'i+P9ZuD3vbSPvu09vO3Bw59LwnYFbfpIrMckIrisjmVWwQaUalhru' +
'HOSmdDNhyGpr8YfIc2InCVlrVXnLlyfmeuRpwOwnJCUvKg/cARKDS' +
'UlZaXzh4d9uRr3qhlHKpg7GpYqmBM18rIiouL+war738zXHXMY4ol' +
'hCTGG0ol2LxmBWyMQIJJ7HxLCdMb9/2x9OP9j7qDNqp9Y1350vZ7z' +
'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' +
'1++3DfdnTburtvHsOnmZtescYm34TkRiVIkigL/RKHpsoD2PRQjgc' +
's+fHi4preEqcNAKcE/lxP474tf4ct+w2tAU+HQfrJKJkvAINIIWCI' +
'aBbQoBkhu2MJU4LsPCgpboElAKpzARzONoXZ8rom2RRtz/XeYF56L' +
'PvPo8K2Xlxsf5AdcUJi10FzajfIrcqwijNk6PAgQoC2Mf+ZAgKpT2' +
'FjgTda2rxk+t39TRy1bR1jJnmurWMXPABwybCifufIAFv7Ov2B5cL' +
'oZVu7PzV+XG9PhGXrQquPW+tkvno4825N/J9hxhK2uo3q3mBeU5lm' +
'GKnm2FKA/0Qz4u40DlvaPQPagMSgKB9pEw7JYeO7C2S0nm2IKQtgK' +
'6rKrkFaxir8f5iMjwO1EQyTPkeyRaJdXn+HVp8w+F3joUd+LN88G5' +
'tpTb7nqBpnGFRSvJtOckgyXKFu5iz5HQyWJMdDW9uT5vduw328ojE' +
'XiCFgqg8yXc/TdyD5luiNnD565fayoL83Ij09mL76B6SpW8ZkxH1h' +
'huQi6OVbpr1+wLj+i3dVtSFx2NeHss+Fnb5/2P2tJveVsN8hUFJI0' +
'9dTQ9W5ZuZkekY5mHkqFTio1E0mMhQYKkVxlqLExsfRR+WY4b+/tG' +
'b68b/zJ2PqTOWDgCNRs9HJ7Tq1iFZ8T77kDfUeqa7xtVs0ah26hy7' +
'B+0bXIo892f/vttydeDVTcj/cbk1puocuySYoisnU9P6DKIbokKHV' +
'dQkZl0prG8PS+sOrT2RNPb1x6dmr9pfSUxggTVymFSfw9ahhWsYrf' +
'HnC9hcWkdDVW5smPz4yO3uBr1kzTbmeEXzSrf5B9+osDb7/9avzLM' +
'9ufbiy/E5d21SPhgmPKefeyK0n99zumXz+89uW5jidlkWe0no1mjo' +
'E2bCHrD9FcdBWr+BHz7gBJhLZk4piTTbwkSekJEVXeCzPIpg1U+2F' +
'W4FV5+h2Xkqmoxic5m2eKG6dz1z0Ij7lhZX+YZVxO9im3cfK144u5' +
'v0nd8ipW8XmwoIvIYCAgOWqKkaPIMcQmJSPJv8TRspqnKCCJYwnCc' +
'LwgCCeKJhhmEqGsUZEuOjZao1WxuAxoN41V41/FnwDwdzPpaAa0BI' +
'OrpBtaClUORlp3MzsfrZOfztFbZ+duba7TGJpImDz6kkUmq1jFHxq' +
'wd5MIC3Nq0Dw1GYkho7BkNIaIgorBMPCf27BuFatYxSpWsYpVrOJP' +
'j/8fMUQd/g==');

Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, 135, 10);
FreeBitmap(Pic);
end;

Procedure OnScreen;
Var
XPH,RPH,TTB: Integer;
begin
XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
RPH := Round((RuneCount * 3600) / (GetTimeRunning / 1000));
TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

SMART_DrawTextMulti(True, True, ['Version: '+Version+' (by Flight)',
'',
''+MsToTime(GetTimeRunning, Time_Abbrev),
'',
'Crafted: '+IntToStr(RuneCount)+' Natures ('+IntToStr(RPH)+' / hour)',
'',
'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
'',
'Gained: '+IntToStr(Profit)+' profit'],
Point(15, 200), SmallCharsNS, 16777215);

SMART_DrawTextMulti(False, True, ['Time till break: '+MsToTime(TTB,Time_Bare)], Point(565, 445), SmallCharsNS, 65280);

DrawImage;

end;

Function IsMoving_F: Boolean;
begin
Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
end;

Function WalkPath_F(Path: TStringArray): Boolean;
var
I: Integer;
begin
Result := False;

for I := 0 to (High(Path)-1) do
ObjDTM_Walk(Path[I], 3, 100, 50, True);

if ObjDTM_InArea(Path[High(Path)], True) then
Result := True;

end;

Function ContinueChat: Boolean;
var
X,Y,BMP: Integer;
begin
Result := False;

BMP := BitmapFromString(10, 12, 'meJxjYCAAlFVUzp07v3v3HgFBQU' +
'zZt+/e/f33D4iAagwNjfAoADICAgIxFQA1QhQAUX5BAZMMii1AS+f' +
'MmQtXMGfuXDTt1TU1q1ev2bx5y8WLl7p7epClgFygLNDMyVOmRERE' +
'MIlxw6WAWlrb2oCyQMPt7R3gUsxMjECfAmWBWoBIWVkF08FLly4DS' +
'vHy8WEPLz5GEMIAAML5W78=');

if FindBitmapToleranceIn(BMP, X, Y, MCX1, MCY1, MCX2, MCY2, 15) then
begin
TypeByte(vk_Space);
Result := True;
end else
Result := False;

FreeBitmap(BMP);
end;

Procedure CrashSmart;
begin
{$IFDEF CRASHSMART}
Writeln('You are using CRASHSMART, we are going to reload your client after update!');
SmartgetFieldObject(1488,'crash'); // will crash SMART (and Simba).
Wait(5000);
WriteLn('CRASHSMART Failed: Make sure you are using the proper plugin!');
TerminateScript;
Exit;
{$ENDIF}
Writeln('You have no CRASHSMART enabled, so you can not reload RS. Sorry, bye!');
TerminateScript;
end;

Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 5);
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, 10, 10);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], {2802162}2413294, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], {318953}2369228, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 860731, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 4) then
FindColorsTolerance(ATPA2[i], 263362, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 5) then
FindColorsTolerance(ATPA2[i], {2369228 2802162}2413294, B.X1, B.Y1, B.X2, B.Y2, 5) //bank
else if (Ident = 6) then
FindColorsTolerance(ATPA2[i], 2305320, B.X1, B.Y1, B.X2, B.Y2, 5);

Result := (Length(ATPA2[i]) > 0);
if Result then
begin
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;

Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;

randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;

Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
if Length(ATPA2[i]) > 0 then
begin
MiddleTPAEx(ATPA2[i], X, Y);
HumanMMouse(X, Y, 5, 5);
if WaitUpTextMulti(UpText, 800) then
begin
Result := True;
if DeBug then
SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));
GetMousePos(X, Y);
Exit;
end;
end;
end;
end;
end;

Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
Var
h, s, t: Extended;
I,II : integer;
HSLColor : Array[1..3] of Extended;
HSL : Array[0..1] of Array[1..3] of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;

For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;

H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);

try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(t);
except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
end;

Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
end;

Function FindObjSimple_F(Colors: TIntegerArray; TheUpText: TStringArray; midx, midy: integer): Boolean;
Var
T,i,X,Y: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
Begin
MarkTime(T);
Repeat
SetArrayLength(ATPA, Length(Colors));
for i := 0 to High(Colors) do
FindColorsSpiralTolerance(midx, midy, ATPA[i], Colors[i], MSX1, MSY1, MSX2, MSY2, 15);
TPA := MergeATPA(ATPA);
ATPA := TPAtoATPAEx(TPA, 15, 15);
SortATPAFrom(ATPA, Point(MSCX, MSCY));
if (Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], x, y);

if (TimeFromMark(T) > 5000) then
Exit;

HumanMMouse(x, y, 10, 10);
Wait(randomrange(75,125));
If(IsUpTextMultiCustom(TheUpText)) then
begin
ClickMouse2(True);
if DidRedClick then
begin
Result := True;
Break;
end;
end;
Until(Result)
end;

Function CalculateEss: Integer;
var
Total,EDTM: Integer;
begin
Result := 0;

EDTM := DTMFromString('mrAAAAHic42BgYHBigmB7IHYBYjcgDgBiWyA2AWI2RgYGXiDmAWIuIGaHssWAmA+I87IyGRJiYhhiIiIYMlJSGIpyc4GmMsExK5BEx8iAkQCGAQC0RgiX');
Total := CountItems('dtm', EDTM, []);

if (not (SS = 0)) then
IncEx(Total, 3);
if (not (MS = 0)) then
IncEx(Total, 6);
if (not (LS = 0)) then
IncEx(Total, 9);
if (not (GS = 0)) then
IncEx(Total, 12);

Result := Total;

FreeDTM(EDTM);
end;

Function NearBank: Boolean;
var
X,Y,Dist: Integer;
begin
if FoundSymbol(1, X, Y, Dist) then
Result := (Dist < 15)
else
Result := False;
end;

Function InJungle: Boolean;
var
X,Y,Dist: Integer;
begin
Result := FoundSymbol(6, X, Y, Dist);
end;

Function InCW: Boolean;
var
X,Y,Dist: Integer;
begin
Result := (FoundSymbol(2, X, Y, Dist) or FoundSymbol(5, X, Y, Dist));
end;

Procedure SetLCOptions;
var
X,Y,T,T2: Integer;
label
Start;
begin
Start:
HumanMMouse(710, 144, 8, 8);
ClickMouse2(False);

if WaitOption('lect', 500) then
begin

MarkTime(T);
repeat
if TimeFromMark(T) > 5000 then
Exit;
if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
begin
MMouse(570, 410, 4, 4);
ClickMouse2(True);
Wait(RandomRange(175, 350));
MMouse(640, 450, 4, 4);
ClickMouse2(True);
end;

MarkTime(T2);
repeat
if TimeFromMark(T2) > 5000 then
Exit;
if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
OptionsSet := True;

end else
goto Start;

Writeln('Left-click options set');

end;

Function FindObjFX(Colors: TIntegerArray; Uptext, Options: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer): Boolean;
var
X, Y, I: integer;
TPA: TPointArray;
ATPA: T2DPointArray;

begin
SetLength(TPA, Length(Colors));

For I:= 0 To High(Colors) do
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..

ATPA:= TPAToATPAEx(TPA, Width, Height); //Group TPA into cirles by Distance..
SortATPAFrom(ATPA, Point(MSCX, MSCY)); //Sort the colours from the closest to the center..
if(Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], X, Y); //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
MMouse(x, y, 5, 5); //Move the mouse to the colours found..

Wait(randomrange(200, 500)); //Wait for the uptext to show..
If(IsUpTextMultiCustom(UpText)) then
begin
ClickMouse2(False); //If it finds it, click the object/item..
if ChooseOptionMulti(Options) then
begin
Result := True; //If it clicks the object, return true..
Exit;
end;
end else
Result := False; //Cannot find the uptext then its the wrong object, return false..
end;

function OpenBankLunar: Boolean;
var
bx, by, Speed, t: Integer;
begin
Result := (LoggedIn) and (BankScreen or PinScreen);
if (Result) then exit;

Speed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);

if (FindObjFX([2508118, 4552059, 3636582, 7370101, 8552064], ['Bank', 'Booth', 'ank', 'ooth'], ['uickly', 'uick', 'ickly', 'ckl', 'se-q'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5)) then
begin
Mouse(bx, by, 0, 0, False);

t := (GetSystemTime + 5000);
repeat
if (BankScreen) or (PinScreen) then
begin
Result := true;
Break;
end;
Wait(50);
until(GetSystemTime > t);

if (Length(Players) > 0) then
if ((PinScreen) and (Players[CurrentPlayer].Pin <> '')) then
InPin(Players[CurrentPlayer].Pin);

Result := (BankScreen) or (PinScreen);
end;

ColorToleranceSpeed(Speed);
end;


function OpenBankNPCEx :Boolean;
var
NPCBox :TBox;
Colors, NPCArray :TPointArray;
ATPA: T2DPointArray;
MSNPC, NPCPoint :TPoint;
TempCTS, C, HiNPC, II, I :Integer;
begin
Result := False;
Result := (BankScreen) or (PinScreen);
If Result then Exit;

NPCArray := GetMinimapDots('NPC');
HiNPC := High(NPCArray);

If Length(NPCArray) = 0 then Exit;
SortTPAFrom(NPCArray, Point(MMCX, MMCY));
for I := 0 to HiNPC do
begin
NPCPoint := MMToMS(NPCArray[I])
If NPCPoint = Point(-1, -1) then Continue;
NPCBox := IntToBox(NPCPoint.X - 40, NPCPoint.Y - 40, NPCPoint.X + 40, NPCPoint.Y + 40)
If PixelShift(NPCBox, 200) > 500 then Continue;

TempCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 1.52);
FindColorsTolerance(Colors, 6067652, NPCBox.X1, NPCBox.Y1, NPCBox.X2, NPCBox.Y2, 13);
ATPA := TPAToATPAEx(Colors, 15, 20);
SortATPASize(ATPA, True);

for II := 0 to High(ATPA) do
begin
MSNPC := MiddleTPA(ATPA[II]);
MMouse(MSNPC.X, MSNPC.Y, 3, 3);
If WaitUpTextMulti(['ooth', 'anker'], 200) then
begin
Mouse(MSNPC.X, MSNPC.Y, 1, 1, False);
If WaitOptionMulti(['ank B', 'quick', 'ank Sir', 'ank ''Bird''s-Eye'''], 300) then
MarkTime(c);
Repeat
Wait(RandomRange(50, 100));
Until (BankScreen) or (PinScreen) or (TimeFromMark(C) > 4500);
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
If Result then
begin
ColorToleranceSpeed(TempCTS);
Exit;
end
else
ColorToleranceSpeed(TempCTS);
end;
end;
end;
end;

Function DepositEss(Amount: Integer): Boolean;
var
T,Slot: Integer;
begin
if not BankScreen then exit;
Slot := RandomRange(9, 20);
if (Amount = 1) then
MouseItem(Slot, mouse_left)
else if (Amount = 5) then
begin
MouseItem(Slot, mouse_right);
Wait(RandomRange(50, 115));
WaitOption('Deposit-5', 500);
end;

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Result := False;
if not InvFull then
break;
until(False)

Result := (not InvFull);
end;

Function FromBankDTM(Which: Integer): Boolean;
var
X,Y,F,DTM: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;

if (Which = 1) then
DTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc')
else if (Which = 2) then
DTM := DTMFromString('mggAAAHicY2NgYDCHYmsgdgJiFyh/NhBPA+KZQDwZiOcD8VIgPpxvw1CXFQLGDAxMcMwFJGEYGTDiwBAAABjaCR4=');

if BankScreen then
begin
if FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if (F > 5) then
Shutdown('Out of rings/pouches');

Inc(F);
if (F = 0) then
Writeln('Failed finding items '+IntToStr(F)+' time')
else if (F > 0) then
Writeln('Failed finding items '+IntToStr(F)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;

FreeDTM(DTM);
end;

Function WearRing: boolean;
var
AmDTM,X,Y: Integer;
begin
AmDTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');
if FindDTM(AmDTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 5, 5);
if not BankScreen then
begin
ClickMouse2(True);
Result := True;
end else if BankScreen then
begin
ClickMouse2(False);
if WaitOption('Wear', 1500) then
Result := True;
end;
if Result then
AmCount := 8;
end else
Result := False;
FreeDTM(AmDTM);
end;

Function GetRingCount: Integer;
var
S,S2: String;
Dist, Home, T: Integer;
label Start;
begin
GameTab(tab_equip);
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 8);
end
end else
Result := 0;

if((Result = 0) and (FoundSymbol(1, X, Y, Dist) = False)) then
begin
writeln(FoundSymbol(1, X, Y, Dist));
if(GameTab(Tab_Magic)) then
begin
FindNormalRandoms;
Home:= DTMFromString('mbQAAAHicY2VgYLBmYmBwBGJ7IDYGYnMgfgoUvw/Eb4H4JRDfBeJ9Rz4xtM25gYJZgeLomBELBgMAGDAQJg==');
if(FindDTM(Home, X, Y, 547, 206, 739, 434)) then
begin
MMouse(X, Y, 5, 5);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(MOUSE_LEFT);
end else
begin
GameTab(Tab_Magic);
wait(500);
MMouse(571, 229, 0, 0);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(MOUSE_LEFT);
end;
T:= 0;
MarkTime(T);
While((FoundSymbol(1, X, Y, Dist) = False) and (TimeFromMark(T) < 15000)) do
begin
wait(1);
end;
end;

Start:
If (Result = 0) then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
FindNormalRandoms;
FoundSymbol(1, X, Y, Dist);
if(Dist < 15) then
begin
if(OpenBankLunar = False) then
OpenBankNPCEx;
wait(1000);
if (Not Bankscreen) then
Goto Start;
if InvFull then
DepositEss(1);
FromBankDTM(1);
wait(750);
if(WearRing) then
AmCount:= 8;
if(Bankscreen) then
CloseBank;
FindNormalRandoms;
end;
wait(1000);
end else
Shutdown('Failed To Find Lunar Bank Symbol');
end;
end;

Function FindChest(Var X,Y: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([11448246, 12171713, 13422038, 13553367], Hmod, Smod, Col, Tol);

CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSCX, MSY1, MSX2, MSY2, Tol);
ColorToleranceSpeed(CTS);

if (Length(TPA) < 1) then
Exit;

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
if (GetArrayLength(ATPA[i]) > 5) then
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
HumanMMouse(X, Y, 5, 5);

if WaitUpTextMulti(['Use', 'Bank', 'chest'], 555) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end else
Result := False;

end;
end;

end;

Function OpenChest: Boolean;
var
X,Y,T,F: Integer;
label
Start;
begin
Result := False;

While IsMoving_F do
Wait(1);

Start:
if FindChest(X, Y) then
begin

ClickMouse2(True);
if not DidRedClick then
goto Start;

if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end else
begin
While IsMoving_F do
Wait(1);
Inc(F);
if (F > 5) then
Exit;
goto Start;
end;

Result := BankScreen;
end;

Function WithdrawEss: Boolean;
var
X,Y,Ess,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then
Exit;

FixBank;

Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');

if BankScreen then
begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
end else
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
Wait(RandomRange(1750, 2205));
goto Start;
end;
end;

FreeBitmap(Ess);
end;

Function WithdrawRunes(Method: String): Boolean;
var
AsBmp,AiBmp,CoBmp,
LaBmp,X,Y: Integer;
begin
Result := False;
if not LoggedIn then Exit;

if InvFull then
begin
if not BankScreen then
OpenChest
else if BankScreen then
DepositEss(5);
Wait(RandomRange(350, 625));
end;

ColorToleranceSpeed(1);

AiBmp := BitmapFromString(7, 7, 'meJy7efPxzZuPCwvLiosrSkurboK5' +
'EJSfXwIRh4tk5xTk5hUhq8nIyMnKykMWAaK0tCw0EWRDIAhoDtBwN' +
'HMgggArDGec');
AsBmp := BitmapFromString(8, 6, 'meJw7sfbkCTCqq2upb2htbGoHoubm' +
'TohgVVVDTU0TEMFlIeJl5TUVlXUQWaAUXLy0tApZCqjlBMx8uBSaO' +
'FwKqAUoDgC0GVL7');
LaBmp := BitmapFromString(7, 6, 'meJy7rSJfXFxRWlpVVl5zW0UejgoL' +
'yyDiyIL5+SUExeHm5OYWYVWPLA4ABok0rw==');
CoBmp := BitmapFromString(7, 5, 'meJyTvXBJFoaKiytKS6sg7Ny8IiDK' +
'zy8pLCyDiGRk5GRl5WXnFEDEIYJpaVlwcbg5KSkZEHEgggsCAOmnNDQ=');

if FindBitmapToleranceIn(CoBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(350, 675));
end;

if (Lowercase(Method) = 'contact') then
begin

if FindBitmapToleranceIn(AiBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindBitmapToleranceIn(AsBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end else if (Lowercase(Method) = 'spell') then
begin

if FindBitmapToleranceIn(LaBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindBitmapToleranceIn(AsBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end;

CloseBank;

Result := True;
FreeBitmap(AiBmp);
FreeBitmap(AsBmp);
FreeBitmap(CoBmp);
FreeBitmap(LaBmp);

end;

Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;

if (Method = 1) then
begin

//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end else if (Method = 2) then
begin

//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end;

Result := True;
end;

Function FindDecayedPouch(Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function CheckPouches: Boolean;
var
S: Integer;
begin
Result := FindDecayedPouch(S);
end;

Function FindNPCChatText_F(Option: String; Action: fnct_ActionOptions): Boolean;
var
X,Y: Integer;
begin
Result := False;

if Option = '' then
begin
srl_Warn('FindNPCChatText', 'txt is empty', warn_AllVersions);
Exit;
end;

if FindText(X, Y, Option, UpChars, 5, 345, 510, 475) then
begin
Result := True;
case Action of
Move: MMouse(X, Y + 2, Random(Length(Option) * 5), 4);
ClickLeft: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, True);
ClickRight: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, False);
end;
end;
end;

Function ContactScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'Choose a character', UpCharsEx, 190, 30, 325, 55);
end;

Function ContactRepair: Boolean;
var
T,T2,T3: Integer;
begin

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 4000) then
Exit;
if ContactScreen then
break;
until(false)

if ContactScreen then
begin
MouseBox(455, 230, 465, 290, 1);
Wait(RandomRange(275, 480));
MouseBox(380, 80, 435, 160, 1);
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 6000) then
Exit;
if ClickToContinue then
MarkTime(T2);
Wait(RandomRange(125, 275));
if FindNPCChatText_F('epai', ClickLeft) then
break;
until(false)

MarkTime(T3);
repeat
FindNormalRandoms;
if (TimeFromMark(T3) > 2000) then
Exit;
if ClickToContinue then
MarkTime(T3);
Wait(RandomRange(125, 275));
until(false)

Result := True;

end;

Function RepairPouches(Method: String): Boolean;
var
X,Y,Slot,Spell: Integer;
label
Start;
begin
Start:
Case Lowercase(Method) of
'spell':
Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
'DJlKvQ=');

'contact':
Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
'YAAA0ZFcCA==');
end;

if FindDecayedPouch(Slot) then
begin
Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
GameTab(tab_Magic);
Wait(Random(100));
if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
begin
MMouse(X, Y, 5, 5);
Wait(Random(100));
if (Lowercase(Method) = 'spell') then
begin
if WaitUpText('epair',RandomRange(250,350)) then
begin
ClickMouse2(True);
Wait(RandomRange(20, 75));
MouseItem(Slot, mouse_left);
Wait(RandomRange(1575, 2150));
Writeln('Pouch repaied');
end;
end else if (Lowercase(Method) = 'contact') then
begin
if WaitUpText('Contact',RandomRange(250,350)) then
begin
ClickMouse2(True);
if ContactRepair then
Writeln('Pouches repaied');
end;
end;
end;
end;

if not FindDecayedPouch(Slot) then
Result := True
else
goto Start;

FreeBitmap(Spell);
end;

Function FindInvItem(Cols: TIntegerArray; Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues(Cols, Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;
end;

Procedure SomeoneTalked;
var
I: Integer;
begin
FixChat;
OldLine := TheLine;

if(LastChatter(TheName))then
begin
GetLastChatText(TheLine);
if OldLine <> TheLine then
try
For I:= 0 To 5 do
begin
PlaySound('C:\Users\Brandon\Downloads\MSN_Sound.wav');
wait(150);
end;
writeln(TheLine);
except end;
end else
begin
GetLastChatText(TheLine);
if OldLine <> TheLine then
try
For I:= 0 To 5 do
begin
PlaySound('C:\Users\Brandon\Downloads\MSN_Sound.wav');
wait(150);
end;
writeln(TheLine);
except end;
end;
end;

Function CheckFamiliar(Seq: Integer): Boolean;
begin
if not DidCheck then
begin
if (Seq = 1) then
begin
if (FindBlackChatMessage('it can fit') or
FindBlackChatMessage('try again')) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
SomeoneTalked;
DidCheck := True;
Result := True;
end;
end;
if (Seq = 2) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
SomeoneTalked;
DidCheck := True;
Result := True;
end;
end else
Result := True;
end;

Function WalkToAltar: Boolean;
var
Tries,T: Integer;
label
Start;
begin
Tries := 0;

Start:
if (WalkMethod = 1) then
SPS_WalkPath(Path_ToAltar)
else if (WalkMethod = 2) then
WalkPath_F(ObjPath_ToAltar);

SomeoneTalked;

HumanMMouse(350, 200, 20, 20);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

SomeoneTalked;

if FindObjSimple_F([4912288,5045653,6414239], ['nter','Myst','erious','ruins'], MSCX, MSCY) then
begin
HumanMMouse(260, 16, 10, 5);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
MarkTime(T);
repeat
FindNormalRandoms;
if TimeFromMark(T) > 5000 then
Exit;
if not SPS_PosOnMM(Point(3305, 4590)) then
break;
SomeoneTalked;
until(False)

Result := not SPS_PosOnMM(Point(3305, 4590));
end else
begin
Inc(Tries);

While IsMoving_F do
Wait(1);
SomeoneTalked;
if (Tries > 3) then
begin
Result := False;
Exit;
SomeoneTalked;
end;

goto Start;
end;
end;

(*
Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
HumanMMouse(X, Y - 5, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
SomeoneTalked;
if FlagPresent then
FFlag(1)
else
While IsMoving do
begin
Wait(100);
end;
Result := NearBank;
end else
begin
MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving do
Wait(1000);
SomeoneTalked;
wait(1500);
goto Start;
end;
end;
end;
*)

Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y - 5, 2, 2); //Click Exactly infront of the bank..
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
Result := NearBank;
end else
begin
MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
goto Start;
end;
end;
end;

Function TeleportTo(Where: String): Boolean;
var
T,T2: Integer;
begin
Case LowerCase(Where) of

'cw':
begin
if GameTab(tab_Equip) then
begin
AmCount:= GetRingCount;
SomeoneTalked;
if WearingItem(11) then
begin
MouseEquippedItem('ring', mouse_right);

if WaitOptionMulti(['Castl','astl','e Wa','rs R'], 1000) then
begin
Wait(RandomRange(50,150));
GameTab(tab_Inv);
AmCount := (AmCount - 1);
MarkTime(T);
SomeoneTalked;
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 8000) then
Exit;
SomeoneTalked;
if InCW then
Break;
Wait(1);
until (False)

Result := InCW;
end;
end;
end;
end;

'jungle':
begin
if not UsingFamiliar then
Result := False;

if OptionsSet then
InteractFamiliar('')
else
SetLCOptions;
SomeoneTalked;

MarkTime(T);
repeat
FindNormalRandoms;
CheckFamiliar(1);
if (TimeFromMark(T) > 5000) then
CheckFamiliar(2);
if (TimeFromMark(T) > 10000) then
Exit;
if FindNPCChatText_F('lepo', ClickLeft) then
break;
SomeoneTalked;
until(False)
Wait(RandomRange(975, 1250));
DidCheck := False;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
SomeoneTalked;
Inc(Tele_Fail);
exit;
end;
SomeoneTalked;

if InJungle then
Break;
Wait(1);
until (False)

if InJungle then
begin
Tele_Fail := 0;
Result := True;
end;

end;

end;
end;

Function FindObelisk(Var X,Y: Integer): Boolean;
var
B: TBox;
Loop: Boolean;
TPA: TPointArray;
L,i,CTS,MSP: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
Loop := False;
CTS := GetColorToleranceSpeed;

Start:
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(140, 200, TPA, 2641242, MSX1, MSY1, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
MSP := MouseSpeed;
MouseSpeed := (RandomRange(26, 33));
HumanMMouse(X, Y, 15, 15);
MouseSpeed := MSP;
if WaitUpTextMulti(['enew','points','Small','obelisk'], 600) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;

end;

end;

Function RenewPouch: boolean;
var
Graahk, X, Y, tries, Summoning: Integer;
Label Start;
begin
Graahk := DTMFromString('mWAAAAHicY2FgYBBggAAeIJYBYlYg5kQSP1RoCySZ4FgESDLiwSAAAGfpAew=');
Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA==');
if(not Bankscreen) then
OpenChest;
tries:= 0;

if(FindDTM(Graahk, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
if(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
MoveMouse(x, y);
wait(500);
SomeoneTalked;
ClickMouse2(true);
wait(2000);
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) = True);
SomeoneTalked;
tries := 0;
Start:
GameTab(Tab_Inv);
if(GetSummonPoints < 20) then
begin
writeln('Need to Refill Summoning Points.');
if(FindDTM(Summoning, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
MMouse(x, y, 0, 0);
wait(500);
ClickMouse2(true);
wait(2000);
if(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
SomeoneTalked;
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) = True);
SomeoneTalked;

if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
if (BankScreen) then
CloseBank;
MMouse(X, Y + 5, 0, 0);
if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
begin
SomeoneTalked;
ClickMouse2(False);
ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning', 'ink']);
wait(2000);
end;
end;
end;

if (GetSummonPoints < 20) then
goto Start;

tries := 0;
if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
Repeat
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
CloseBank;
MMouse(x, y, 5, 5);
wait(500);
ClickMouse2(false);
wait(500);
ChooseOption('Summon');
if(FindBlackChatMessage('follower')) then
break;
SomeoneTalked;
tries:= tries + 1;
if(tries > 10) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(UsingFamiliar = true);
SomeoneTalked;
if (Not Bankscreen) Then
Repeat
OpenChest;
if(Bankscreen or Pinscreen) then
break;
Until(False);
SomeoneTalked;

if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints > 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
wait(1500);

if(FindDtm(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
SomeoneTalked;
Result:= UsingFamiliar;

FreeDTM(Graahk);
FreeDTM(Summoning);
end;

Function HandleBank: Boolean;
var
S: String;
T,T2: Integer;
NeedAm,GoOn: Boolean;
begin
Result := False;
GoOn := False;
NeedAm := (AmCount < 1);

if BankScreen then
begin
SomeoneTalked;
if NeedAm then
begin
MarkTime(T);
repeat
SomeoneTalked;
FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;
SomeoneTalked;
FromBankDTM(1);
Wait(RandomRange(1275, 1455));
if WearRing then
GoOn := True;

if GoOn then
break;

until(false)
end;

SomeoneTalked;
if not UsingFamiliar then
begin
MarkTime(T);
repeat

FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;

if FromBankDTM(2) then
break;
SomeoneTalked;
until(false)
end;


WithdrawEss;

if PP then
begin
if HandlePouches(1, 1) then
WithdrawEss;
if HandlePouches(2, 1) then
WithdrawEss;
end else
begin
if HandlePouches(2, 1) then
WithdrawEss;
end;
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
CloseBank;
Stage := 0;
Exit;
end;
if InvFull then
break;
SomeoneTalked;
until(false)

if InvFull then
begin
Wait(RandomRange(375, 550));

if CheckPouches then
if WithdrawRunes(Lowercase(RepairMethod)) then
RepairPouches(Lowercase(RepairMethod));
SomeoneTalked;
if (GetMMLevels('run', S) <= RestAt) then
RestUntil(RandomRange(90,100));

if not UsingFamiliar then
RenewPouch;

Result := True;
end;
end;

Function FindAltar(Var X,Y: Integer): Boolean;
var
B: TBox;
Loop: Boolean;
TPA: TPointArray;
L,i,CTS,MSP: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
Loop := False;
CTS := GetColorToleranceSpeed;

Start:
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(260, 110, TPA, 6643811, MSX1, MSY1, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
MSP := MouseSpeed;
MouseSpeed := (RandomRange(26, 33));
HumanMMouse(X, Y, 15, 15);
MouseSpeed := MSP;
if WaitUpTextMulti(['-rune', 'unec', 'rafting'], 600) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;
end;
end;

Function CraftRunes: Boolean;
var
RNew,ROld,Seq,
T,T2,A,B,X,Y: Integer;
label
Start;
begin
Seq := 0;
IncEx(Exp, Round((CalculateEss*XPMod)));
IncEx(Exp_C, Round((CalculateEss*XPMod)));
A := Round((CalculateEss*EssPrice));
ROld := getAmountBox(invBox(1));

MarkTime(T)
repeat
FindNormalRandoms;
HumanMMouse(260, 16, 10, 5);
SomeoneTalked;
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
SomeoneTalked;
if DidRedClick then
break;
end;
Wait(RandomRange(300, 555));
until(TimeFromMark(T) > 5000)

SomeoneTalked;
if FlagPresent then
FFlag(0)
else
While IsMoving_F do
Wait(1);
Wait(RandomRange(1550, 1725));

Start:

if (Seq > 0) then
begin
MarkTime(T2)
repeat
FindNormalRandoms;
if FindAltar(X, Y) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
until(TimeFromMark(T2) > 5000)
SomeoneTalked;

if (Seq < 2) then
begin
HumanMMouse(640, 220, 15, 15);
Wait(RandomRange(1050, 1275));
While IsMoving_F do
Wait(1);
Wait(RandomRange(202, 365));
end else
begin
HumanMMouse(687, 185, 15, 15);
Wait(RandomRange(1300, 1575));
end;
SomeoneTalked;
end;

if (Seq = 0) then
begin
if PP then
begin
if HandlePouches(1, 2) then
Seq := 1;
end else
if HandlePouches(2, 2) then
Seq := 2;
SomeoneTalked;
goto Start;
end;

if (Seq = 1) then
begin
if HandlePouches(2, 2) then
Seq := 2;
goto Start;
end;

if (Seq = 2) then
Result := True;

if Result then
begin
SomeoneTalked;
RNew := getAmountBox(invBox(1));
IncEx(RuneCount_C, (RNew-ROld));
IncEx(RuneCount, (RNew-ROld));
B := ((RNew-ROld)*NaturePrice);
IncEx(Profit, (B-A));
OnScreen;
end;
end;

Procedure MasterLoop;
begin
if not LoggedIn then Exit;
Case Stage of
0:
begin
if ((not InCW)) then
TeleportTo('CW') else
WalkToBank;

if NearBank then
begin
if not InvFull then
begin
if OpenChest then
if HandleBank then
Stage := 1
else
Writeln('Failed while banking')
else
Writeln('Failed to open bank');
end else if InvFull then
begin
if not UsingFamiliar then
begin
if OpenChest then
HandleBank;
end else
Stage := 1;
end;
end else
WalkToBank;
end;

1:
if TeleportTo('Jungle') then
Stage := 2
else
Stage := 0;

2:
if WalkToAltar then
begin
Walk_Fail := 0;
Stage := 3;
end else
begin
FindNormalRandoms;
Inc(Walk_Fail);
Stage := 1;
end;

3:
if CraftRunes then
Stage := 4;

4:
if TeleportTo('CW') then
Stage := 0;

end;

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s: integer;
begin
if not LoggedIn then Exit;

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if NearBank then
begin
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Closebank;
Logout;
SomeoneTalked;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
SomeoneTalked;
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
end;

begin
Smart_Server := 72;
Smart_Members := True;
Smart_Signed := True;
Smart_SuperDetail := False;

setupSRL();
SRL_Procs[srl_OnRSUpdate] := @CrashSMART;
DeclarePlayers;

SetupSRLStats(148, SRLStats_Username, SRLStats_Password);
Loadvars;
//CheckVersion;

LogInPlayer;
ClickNorth(SRL_ANGLE_HIGH);

Smart_ClearCanvas;
OnScreen;

SetLCOptions;
AmCount := GetRingCount;

SPS_Setup(RUNESCAPE_SURFACE, ['0_2','7_11','8_11']);
SPS_Continue := True;

Repeat
if not LoggedIn then
begin
LoginPlayer;
ClickNorth(SRL_ANGLE_HIGH);
SomeoneTalked;
end;

if (TimeFromMark(CommitTime)>=30000) then
Commit;

if (TimeFromMark(ReportTime)>=5000) then
Report;
SomeoneTalked;

BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if (Walk_Fail > 2) then
Shutdown('SPS walking failure');

if (Tele_Fail > 2) then
Shutdown('SPS out of date');

MasterLoop;
Until(AllPlayersInactive)

end.


[/LEFT]

Sin

2012-02-01 18:10:37

DUDE YOU LEFT YOUR LOGIn/PASS IN THERE.

E*
There we go lol, I was about to change it and pm :p

kingarabian

2012-02-02 05:06:29

Ggzz, it does run however after a short period of time it can't detect pure ess, and nor can it do anything when it withdraws a summoning potion to renew points etc.

I tried using a DTM instead of a bitmap for the pure ess but I fail at Dtm's.

'Toxin

2012-02-02 16:42:15

From: kingarabian
Ggzz, it does run however after a short period of time it can't detect pure ess, and nor can it do anything when it withdraws a summoning potion to renew points etc.

I tried using a DTM instead of a bitmap for the pure ess but I fail at Dtm's.


I'm running it now , how long did it take for the pure essence to not be detected?

Edit : Just realized that natures are going back up again. Keep em' at mid or 2-3gp above mid guys. Also, why is pure essence still going up? Should it not be decreasing in price due to the new influx of essence bots? :s

kingarabian

2012-02-02 16:44:11

From: XxX Toxin XxX
I'm running it now , how long did it take for the pure essence to not be detected?


30 mins to one hour. Right now its instant.

'Toxin

2012-02-02 16:52:19

From: kingarabian
30 mins to one hour. Right now its instant.


That's odd. I'm running for over an hour now, and no issues (with ggzz's posted version above).

Sin

2012-02-02 16:54:01

I was running ggzz's version and it withdraws the Summoning Potion but doesn't click on it, I changed the code a bit, maybe that'll work ^.^

kingarabian

2012-02-02 16:54:33

From: XxX Toxin XxX
That's odd. I'm running for over an hour now, and no issues (with ggzz's posted version above).


Yeah I had some actually reach more than 1 hour and 15 mins but then either fail at detecting summoning potions, or fail at finding the pure ess.

From: Sin
I was running ggzz's version and it withdraws the Summoning Potion but doesn't click on it, I changed the code a bit, maybe that'll work ^.^


Yeah I fixed the summoning potions bit works well. Just the damn pure ess. If someone is good @ DTM's/Bitmaps, I would appreciate it.

I am using Mat's Astral crafter and he is using the same Pure ess bitmap and it's working fine. SIGH.

Brandon

2012-02-02 17:02:06

From: kingarabian
Yeah I had some actually reach more than 1 hour and 15 mins but then either fail at detecting summoning potions, or fail at finding the pure ess.



Yeah I fixed the summoning potions bit works well. Just the damn pure ess. If someone is good @ DTM's/Bitmaps, I would appreciate it.

I am using Mat's Astral crafter and he is using the same Pure ess bitmap and it's working fine. SIGH.


Hmm awkward.. I ran it for 27 hrs :S works fine.. Don't remember if I made changes or not since the last post.

'Toxin

2012-02-02 17:04:26

From: kingarabian
Yeah I had some actually reach more than 1 hour and 15 mins but then either fail at detecting summoning potions, or fail at finding the pure ess.



Yeah I fixed the summoning potions bit works well. Just the damn pure ess. If someone is good @ DTM's/Bitmaps, I would appreciate it.

I am using Mat's Astral crafter and he is using the same Pure ess bitmap and it's working fine. SIGH.


I hate to say this but… sometimes we all mess up our screen in-game settings, have you taken a quick peek at those? Maybe they're off. If Mat's crafter is using the same DTM's then it's gotta be something on your end. Computer too fast? Lol.

E: Woo 420 posts. heh.

kingarabian

2012-02-02 17:07:51

From: ggzz
Hmm awkward.. I ran it for 27 hrs :S works fine.. Don't remember if I made changes or not since the last post.


Well i'm running it right now, lets see how far it goes. Are you using the same exact version you posted?

@Toxin everything is set accordingly.

Brandon

2012-02-02 17:12:34

From: kingarabian
Well i'm running it right now, lets see how far it goes. Are you using the same exact version you posted?

@Toxin everything is set accordingly.


That's the thing.. I absolutely don't remember if I made changes.. I'm using this:


{/////////////////////////////////////////
// ~Naturez by Flight~ //
// //
// Version: 1.7 //
/////////////////////////////////////////}

program Naturez;

{$DEFINE SRL5}
{$DEFINE CRASHSMART}
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i ObjectDTM/ObjDTMInclude.simba}
{$i SRL/SRL/skill/summoning.simba}

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//General settings
WalkMethod = 1; //1 for SPS walking, 2 for ObjDTM walking (experimental)
RestAt = 0; //Energy to rest at (while at bank)
SwitchWorlds = True; //Switch worlds after break?
FlagFailsafe = True; //if FFlag isn't working.

//Pouch settings
RepairMethod = 'spell'; //'spell' for Repair Rune Pouch spell, 'contact' for using the NPC Contact spell
SS = 2; //Which slot # has your small pouch (0 for not using)
MS = 3; //Which slot # has your medium pouch (0 for not using)
LS = 4; //Which slot # has your large pouch (0 for not using)
GS = 5; //Which slot # has your giant pouch (0 for not using)
BankTabVal = 5; //The tab where all your stuff for the sript is located..

//Break settings
BreakIn = 900; //How long before we take a break? (minutes)
BreakFor = 15; //How long will we break for? (minutes)
Bir = 25; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction


Var

//General variables
XPMod: Extended;
Version: String;
ReportTime,PostID,
CommitTime,EssPrice,
NaturePrice,Profit: Integer;
ObCols: TIntegerArray;
Path_ToAltar,Path_ToOb: TPointArray;
ObjPath_ToAltar: TStringArray;

//Dynamics
Stage,Walk_Fail,AmCount,RuneCount,
Exp,Exp_C,RuneCount_C,Tele_Fail: Integer;
DidCheck,OptionsSet,PP: Boolean;

//Break variables
w,x,y,z,RealBTime,CurrentBTime,
BreakRounds,TotalBreaks: Integer;


Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := Skill_RuneCrafting;
Active := True;
end;
end;

Function CashStringToInt(S: string): Integer; //Thanks TomTuff!
Var
i, ii: Integer;
Numbs: TStringArray;
Temp: string;
begin
Temp := '';
Numbs := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'k', 'm', 'b'];
for i := 1 to High(S) do
for ii := 0 to High(Numbs) do
if S[i] = Numbs[ii] then
case ii of
0..9: Temp := Temp + Numbs[ii];
10..12:
begin
Result := StrToInt(Temp);
case ii of
10: Result := Result * 100; //Since price is given to 1 decimal,
11: Result := Result * 100000; //instead of multiplying by the entire
12: Result := Result * 100000000; //factor, you must multiply by factor/10
end;
end;
end;
if (Result = 0) then
Result := StrToInt(Temp);
end;

Function GetPrice(ItemID: Integer): Integer;
begin
Result := CashStringToInt(Between('<td>', '</td>', GetPage('http://services.runescape.com/m=itemdb_rs/viewitem.ws?obj=' + IntToStr(ItemID))));
end;

Procedure Loadvars;
begin
Version := '1.7';
PostID := 849594;
MarkTime(ReportTime);
MarkTime(CommitTime);
EssPrice := GetPrice(7936);
NaturePrice := GetPrice(561);
MouseSpeed := RandomRange(18,22);
DidCheck := False;
OptionsSet := False;
XPMod := 9.0;
PP := (not(GS = 0));

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);

ObCols := [10263168, 12500648, 13816517];

Path_ToAltar := [Point(3003, 4641), Point(3012, 4640), Point(3020, 4640), Point(3027, 4640),
Point(3034, 4640), Point(3040, 4641), Point(3047, 4641), Point(3053, 4641),
Point(3060, 4641), Point(3066, 4641), Point(3073, 4641), Point(3080, 4641),
Point(3088, 4640), Point(3095, 4640), Point(3102, 4640), Point(3108, 4640),
Point(3113, 4640), Point(3121, 4639), Point(3127, 4639), Point(3133, 4639),
Point(3140, 4637), Point(3147, 4638), Point(3153, 4638), Point(3158, 4638),
Point(3164, 4638), Point(3172, 4639), Point(3179, 4638), Point(3185, 4637),
Point(3193, 4636), Point(3201, 4636), Point(3207, 4637), Point(3215, 4637),
Point(3222, 4637), Point(3229, 4637), Point(3236, 4637), Point(3243, 4637),
Point(3254, 4636), Point(3260, 4632), Point(3268, 4627), Point(3273, 4622),
Point(3278, 4618), Point(3283, 4613), Point(3291, 4608), Point(3295, 4608),
Point(3296, 4605)];
(*
Path_ToAltar := [Point(3004, 4648), Point(3017, 4641), Point(3025, 4639), Point(3035, 4639),
Point(3045, 4640), Point(3056, 4638), Point(3066, 4636), Point(3076, 4634),
Point(3087, 4633), Point(3097, 4631), Point(3109, 4631), Point(3120, 4629),
Point(3133, 4625), Point(3147, 4618), Point(3157, 4611), Point(3168, 4604),
Point(3175, 4597), Point(3185, 4587), Point(3194, 4578), Point(3204, 4571),
Point(3214, 4565), Point(3225, 4565), Point(3234, 4561), Point(3242, 4561),
Point(3253, 4560), Point(3271, 4568), Point(3281, 4574), Point(3290, 4580),
Point(3303, 4584)];
*)
Path_ToOb := [Point(260, 970), Point(290, 965)];

ObjPath_ToAltar := ['123:57:4:1:7:55:63:3:7:107:45:6:7:45:31:6:7:38:38',
'134:85:8:1:7:136:59:1:7:133:74:1:7:132:90:1:7:132:103:1:7:66:97:1:7:93:125:1:7:113:121:1:7:74:125',
'141:70:11:1:7:86:23:1:7:86:39:1:7:86:54:1:7:82:70:1:7:82:86:1:7:82:99:1:7:42:121:1:7:62:117:1:7:70:129:1:7:86:121:1:7:78:117',
'126:39:8:1:7:121:102:1:7:133:102:1:7:74:62:1:7:82:54:1:7:90:46:1:7:66:38:1:7:54:54:1:7:54:62',
'137:67:8:1:7:106:70:1:7:90:82:1:7:94:90:1:7:114:78:1:7:106:114:1:7:46:90:1:7:38:98:1:7:70:50',
'121:94:8:1:7:114:110:1:7:106:102:1:7:74:130:1:7:86:118:1:7:102:126:1:7:86:138:1:7:42:106:1:7:54:86',
'117:93:9:1:7:94:26:1:7:110:38:1:7:66:90:1:7:74:98:1:7:46:106:1:7:54:94:1:7:58:106:1:7:62:114:1:7:66:130',
'80:80:5:1:7:74:30:1:7:38:90:1:7:126:94:1:7:82:142:1:7:94:142:5:90:94:72:94:72:72:91:71:90:95'];

ObjDTM_Setup;

end;

Procedure CheckVersion;
var
Page,NewVer: String;
begin
Page := GetPage('http://villavu.com/forum/showthread.php?p='+IntToStr(PostID)+'');
NewVer := Between('Current version: ', '<br />', Page);

if Version <> NewVer then
ShowMessage('Your script is out of date!')
else
Exit;
end;

Procedure Report;
begin
ClearDebug;
WriteLn('=-=-=-=-=-=-=-= Naturez '+Version+' by Flight =-=-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Runes crafted: '+IntToStr(RuneCount));
WriteLn('Exp gained: '+IntToStr(Exp));
WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');

MarkTime(ReportTime);
end;

Procedure Commit;
begin
stats_IncVariable('Nature Runes (Crafted)', RuneCount_C);
stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
Stats_Commit;
RuneCount_C := 0;
Exp_C := 0;
MarkTime(CommitTime);
end;

Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Report;
Logout;
TerminateScript;
end;

Procedure DrawImage;
var
Pic: Integer;
Canvas: TCanvas;
begin
SmartSetDebug(True);

Pic := BitmapFromString(256, 77, 'meJztvWdYlNm2LkrlnHNRiaKKK' +
'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' +
'roWBWRPWEKQkbEcT8R9KkMLnw/xsAtr92BkJTKw2GXPhZ6JF9eqLq' +
'dmNScCNwRCmB8yrjD4fNBnqSwsKwg7Zjn33ZPNXxWoayiKErK1nfZ' +
'n5Kjh0B4lQE0xbNFhlZ6XrlzcNde45rFO00C1qua7ejuzeax/5MUU' +
'QNnKrERNTU3nH5zoe7YJEFRyahIYEYuSGxjFQNgkZyXGn3Ts+2ITM' +
'GzPfFuegvn+UkFoHk1hsLYwN/98xIO/3gT2ZpRHcnC1I5CXXOEOND' +
'/UAleDV6fydh/uvTE53n6+prq1QukjZInpUND0/RfBqOSqqTEVgVd' +
'uXuq8UZPbtEZuKyFxcUDAgFHQ1tHqvk+qO8ByPs32uc9PfKytm0u5' +
'+9W1vS83Jzy0in6s3v62+v/6v/994F/r/Wf4smwS+ArVHCWKJqg3U' +
'v02WEfGRUDLfH76rlBolMCQH5rp13C2BPBD4Jg8qMLF2Nxo+ckyFF' +
'JfzAtI8so8Evzs25k19+zBc3BfOgMGpaC5TIcwq6gBxxffzFV/GQe' +
'CJo4bJjw2RKYwxBEWqdf6CWDvSg4QOBheiBDHELccaXn07H7LrZLI' +
'ze66IAuWgPGDoAXGTyARjFSylOwkn73Kc68Onv/bAdeLHP0AXHh0G' +
'E/IXcrLLHKbaCSDS1O4iDdu2tB2fv3cV9Ndz8rsD7Ocao1cfBy5gs' +
'/c0+bTgAQqm6byNyjbmzX7+kn2hI9VM1vnZr2UgwYek6PPTk5O8jl' +
'sNPJmNxDbtmVSiUb/hymA+bQ/0cLBNK7F78CTnv63jeo6iluxOSR+' +
'MIuLH2hekoRlmBCVSaydh3tuPADGv35TS53SU8QU0CDJBPvxSAqTJ' +
'PKmduxpvvV0PO2Eb17+WmitFhYqXAGkR5QhHWIsw0q9lEVk4COYdm' +
'i+P9ZuD3vbSPvu09vO3Bw59LwnYFbfpIrMckIrisjmVWwQaUalhru' +
'HOSmdDNhyGpr8YfIc2InCVlrVXnLlyfmeuRpwOwnJCUvKg/cARKDS' +
'UlZaXzh4d9uRr3qhlHKpg7GpYqmBM18rIiouL+war738zXHXMY4ol' +
'hCTGG0ol2LxmBWyMQIJJ7HxLCdMb9/2x9OP9j7qDNqp9Y1350vZ7z' +
'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' +
'1++3DfdnTburtvHsOnmZtescYm34TkRiVIkigL/RKHpsoD2PRQjgc' +
's+fHi4preEqcNAKcE/lxP474tf4ct+w2tAU+HQfrJKJkvAINIIWCI' +
'aBbQoBkhu2MJU4LsPCgpboElAKpzARzONoXZ8rom2RRtz/XeYF56L' +
'PvPo8K2Xlxsf5AdcUJi10FzajfIrcqwijNk6PAgQoC2Mf+ZAgKpT2' +
'FjgTda2rxk+t39TRy1bR1jJnmurWMXPABwybCifufIAFv7Ov2B5cL' +
'oZVu7PzV+XG9PhGXrQquPW+tkvno4825N/J9hxhK2uo3q3mBeU5lm' +
'GKnm2FKA/0Qz4u40DlvaPQPagMSgKB9pEw7JYeO7C2S0nm2IKQtgK' +
'6rKrkFaxir8f5iMjwO1EQyTPkeyRaJdXn+HVp8w+F3joUd+LN88G5' +
'tpTb7nqBpnGFRSvJtOckgyXKFu5iz5HQyWJMdDW9uT5vduw328ojE' +
'XiCFgqg8yXc/TdyD5luiNnD565fayoL83Ij09mL76B6SpW8ZkxH1h' +
'huQi6OVbpr1+wLj+i3dVtSFx2NeHss+Fnb5/2P2tJveVsN8hUFJI0' +
'9dTQ9W5ZuZkekY5mHkqFTio1E0mMhQYKkVxlqLExsfRR+WY4b+/tG' +
'b68b/zJ2PqTOWDgCNRs9HJ7Tq1iFZ8T77kDfUeqa7xtVs0ah26hy7' +
'B+0bXIo892f/vttydeDVTcj/cbk1puocuySYoisnU9P6DKIbokKHV' +
'dQkZl0prG8PS+sOrT2RNPb1x6dmr9pfSUxggTVymFSfw9ahhWsYrf' +
'HnC9hcWkdDVW5smPz4yO3uBr1kzTbmeEXzSrf5B9+osDb7/9avzLM' +
'9ufbiy/E5d21SPhgmPKefeyK0n99zumXz+89uW5jidlkWe0no1mjo' +
'E2bCHrD9FcdBWr+BHz7gBJhLZk4piTTbwkSekJEVXeCzPIpg1U+2F' +
'W4FV5+h2Xkqmoxic5m2eKG6dz1z0Ij7lhZX+YZVxO9im3cfK144u5' +
'v0nd8ipW8XmwoIvIYCAgOWqKkaPIMcQmJSPJv8TRspqnKCCJYwnCc' +
'LwgCCeKJhhmEqGsUZEuOjZao1WxuAxoN41V41/FnwDwdzPpaAa0BI' +
'OrpBtaClUORlp3MzsfrZOfztFbZ+duba7TGJpImDz6kkUmq1jFHxq' +
'wd5MIC3Nq0Dw1GYkho7BkNIaIgorBMPCf27BuFatYxSpWsYpVrOJP' +
'j/8fMUQd/g==');

Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, 135, 10);
FreeBitmap(Pic);
end;

Procedure OnScreen;
Var
XPH,RPH,TTB: Integer;
begin
XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
RPH := Round((RuneCount * 3600) / (GetTimeRunning / 1000));
TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

SMART_DrawTextMulti(True, True, ['Version: '+Version+' (by Flight)',
'',
''+MsToTime(GetTimeRunning, Time_Abbrev),
'',
'Crafted: '+IntToStr(RuneCount)+' Natures ('+IntToStr(RPH)+' / hour)',
'',
'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
'',
'Gained: '+IntToStr(Profit)+' profit'],
Point(15, 200), SmallCharsNS, 16777215);

SMART_DrawTextMulti(False, True, ['Time till break: '+MsToTime(TTB,Time_Bare)], Point(565, 445), SmallCharsNS, 65280);

DrawImage;

end;

Function IsMoving_F: Boolean;
begin
Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
end;

Function WalkPath_F(Path: TStringArray): Boolean;
var
I: Integer;
begin
Result := False;

for I := 0 to (High(Path)-1) do
ObjDTM_Walk(Path[I], 3, 100, 50, True);

if ObjDTM_InArea(Path[High(Path)], True) then
Result := True;

end;

Function ContinueChat: Boolean;
var
X,Y,BMP: Integer;
begin
Result := False;

BMP := BitmapFromString(10, 12, 'meJxjYCAAlFVUzp07v3v3HgFBQU' +
'zZt+/e/f33D4iAagwNjfAoADICAgIxFQA1QhQAUX5BAZMMii1AS+f' +
'MmQtXMGfuXDTt1TU1q1ev2bx5y8WLl7p7epClgFygLNDMyVOmRERE' +
'MIlxw6WAWlrb2oCyQMPt7R3gUsxMjECfAmWBWoBIWVkF08FLly4DS' +
'vHy8WEPLz5GEMIAAML5W78=');

if FindBitmapToleranceIn(BMP, X, Y, MCX1, MCY1, MCX2, MCY2, 15) then
begin
TypeByte(vk_Space);
Result := True;
end else
Result := False;

FreeBitmap(BMP);
end;

Procedure CrashSmart;
begin
{$IFDEF CRASHSMART}
Writeln('You are using CRASHSMART, we are going to reload your client after update!');
SmartgetFieldObject(1488,'crash'); // will crash SMART (and Simba).
Wait(5000);
WriteLn('CRASHSMART Failed: Make sure you are using the proper plugin!');
TerminateScript;
Exit;
{$ENDIF}
Writeln('You have no CRASHSMART enabled, so you can not reload RS. Sorry, bye!');
TerminateScript;
end;

Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 5);
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, 10, 10);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], {2802162}2413294, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], {318953}2369228, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 860731, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 4) then
FindColorsTolerance(ATPA2[i], 263362, B.X1, B.Y1, B.X2, B.Y2, 5)
else if (Ident = 5) then
FindColorsTolerance(ATPA2[i], {2369228 2802162}2413294, B.X1, B.Y1, B.X2, B.Y2, 5) //bank
else if (Ident = 6) then
FindColorsTolerance(ATPA2[i], 2305320, B.X1, B.Y1, B.X2, B.Y2, 5);

Result := (Length(ATPA2[i]) > 0);
if Result then
begin
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;

Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;

randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;

Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
if Length(ATPA2[i]) > 0 then
begin
MiddleTPAEx(ATPA2[i], X, Y);
HumanMMouse(X, Y, 5, 5);
if WaitUpTextMulti(UpText, 800) then
begin
Result := True;
if DeBug then
SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));
GetMousePos(X, Y);
Exit;
end;
end;
end;
end;
end;

Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
Var
h, s, t: Extended;
I,II : integer;
HSLColor : Array[1..3] of Extended;
HSL : Array[0..1] of Array[1..3] of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;

For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;

H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);

try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(t);
except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
end;

Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
end;

Function FindObjSimple_F(Colors: TIntegerArray; TheUpText: TStringArray; midx, midy: integer): Boolean;
Var
T,i,X,Y: Integer;
TPA: TPointArray;
ATPA: Array of TPointArray;
Begin
MarkTime(T);
Repeat
SetArrayLength(ATPA, Length(Colors));
for i := 0 to High(Colors) do
FindColorsSpiralTolerance(midx, midy, ATPA[i], Colors[i], MSX1, MSY1, MSX2, MSY2, 15);
TPA := MergeATPA(ATPA);
ATPA := TPAtoATPAEx(TPA, 15, 15);
SortATPAFrom(ATPA, Point(MSCX, MSCY));
if (Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], x, y);

if (TimeFromMark(T) > 5000) then
Exit;

HumanMMouse(x, y, 10, 10);
Wait(randomrange(75,125));
If(IsUpTextMultiCustom(TheUpText)) then
begin
ClickMouse2(True);
if DidRedClick then
begin
Result := True;
Break;
end;
end;
Until(Result)
end;

Function CalculateEss: Integer;
var
Total,EDTM: Integer;
begin
Result := 0;

EDTM := DTMFromString('mrAAAAHic42BgYHBigmB7IHYBYjcgDgBiWyA2AWI2RgYGXiDmAWIuIGaHssWAmA+I87IyGRJiYhhiIiIYMlJSGIpyc4GmMsExK5BEx8iAkQCGAQC0RgiX');
Total := CountItems('dtm', EDTM, []);

if (not (SS = 0)) then
IncEx(Total, 3);
if (not (MS = 0)) then
IncEx(Total, 6);
if (not (LS = 0)) then
IncEx(Total, 9);
if (not (GS = 0)) then
IncEx(Total, 12);

Result := Total;

FreeDTM(EDTM);
end;

Function NearBank: Boolean;
var
X,Y,Dist: Integer;
begin
if FoundSymbol(1, X, Y, Dist) then
Result := (Dist < 15)
else
Result := False;
end;

Function InJungle: Boolean;
var
X,Y,Dist: Integer;
begin
Result := FoundSymbol(6, X, Y, Dist);
end;

Function InCW: Boolean;
var
X,Y,Dist: Integer;
begin
Result := (FoundSymbol(2, X, Y, Dist) or FoundSymbol(5, X, Y, Dist));
end;

Procedure SetLCOptions;
var
X,Y,T,T2: Integer;
label
Start;
begin
Start:
HumanMMouse(710, 144, 8, 8);
ClickMouse2(False);

if WaitOption('lect', 500) then
begin

MarkTime(T);
repeat
if TimeFromMark(T) > 5000 then
Exit;
if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
begin
MMouse(570, 410, 4, 4);
ClickMouse2(True);
Wait(RandomRange(175, 350));
MMouse(640, 450, 4, 4);
ClickMouse2(True);
end;

MarkTime(T2);
repeat
if TimeFromMark(T2) > 5000 then
Exit;
if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
break;
until(false);

if not FindText(X, Y, 'click option', UpCharsEx, 560, 210, 720, 240) then
OptionsSet := True;

end else
goto Start;

Writeln('Left-click options set');

end;

Function FindObjFX(Colors: TIntegerArray; Uptext, Options: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer): Boolean;
var
X, Y, I: integer;
TPA: TPointArray;
ATPA: T2DPointArray;

begin
SetLength(TPA, Length(Colors));

For I:= 0 To High(Colors) do
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..

ATPA:= TPAToATPAEx(TPA, Width, Height); //Group TPA into cirles by Distance..
SortATPAFrom(ATPA, Point(MSCX, MSCY)); //Sort the colours from the closest to the center..
if(Length(ATPA) = 0) then
Exit;

MiddleTPAEx(ATPA[0], X, Y); //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
MMouse(x, y, 5, 5); //Move the mouse to the colours found..

Wait(randomrange(200, 500)); //Wait for the uptext to show..
If(IsUpTextMultiCustom(UpText)) then
begin
ClickMouse2(False); //If it finds it, click the object/item..
if ChooseOptionMulti(Options) then
begin
Result := True; //If it clicks the object, return true..
Exit;
end;
end else
Result := False; //Cannot find the uptext then its the wrong object, return false..
end;

function OpenBankLunar: Boolean;
var
bx, by, Speed, t: Integer;
begin
Result := (LoggedIn) and (BankScreen or PinScreen);
if (Result) then exit;

Speed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);

if (FindObjFX([2508118, 4552059, 3636582, 7370101, 8552064], ['Bank', 'Booth', 'ank', 'ooth'], ['uickly', 'uick', 'ickly', 'ckl', 'se-q'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5)) then
begin
Mouse(bx, by, 0, 0, False);

t := (GetSystemTime + 5000);
repeat
if (BankScreen) or (PinScreen) then
begin
Result := true;
Break;
end;
Wait(50);
until(GetSystemTime > t);

if (Length(Players) > 0) then
if ((PinScreen) and (Players[CurrentPlayer].Pin <> '')) then
InPin(Players[CurrentPlayer].Pin);

Result := (BankScreen) or (PinScreen);
end;

ColorToleranceSpeed(Speed);
end;


function OpenBankNPCEx :Boolean;
var
NPCBox :TBox;
Colors, NPCArray :TPointArray;
ATPA: T2DPointArray;
MSNPC, NPCPoint :TPoint;
TempCTS, C, HiNPC, II, I :Integer;
begin
Result := False;
Result := (BankScreen) or (PinScreen);
If Result then Exit;

NPCArray := GetMinimapDots('NPC');
HiNPC := High(NPCArray);

If Length(NPCArray) = 0 then Exit;
SortTPAFrom(NPCArray, Point(MMCX, MMCY));
for I := 0 to HiNPC do
begin
NPCPoint := MMToMS(NPCArray[I])
If NPCPoint = Point(-1, -1) then Continue;
NPCBox := IntToBox(NPCPoint.X - 40, NPCPoint.Y - 40, NPCPoint.X + 40, NPCPoint.Y + 40)
If PixelShift(NPCBox, 200) > 500 then Continue;

TempCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.13, 1.52);
FindColorsTolerance(Colors, 6067652, NPCBox.X1, NPCBox.Y1, NPCBox.X2, NPCBox.Y2, 13);
ATPA := TPAToATPAEx(Colors, 15, 20);
SortATPASize(ATPA, True);

for II := 0 to High(ATPA) do
begin
MSNPC := MiddleTPA(ATPA[II]);
MMouse(MSNPC.X, MSNPC.Y, 3, 3);
If WaitUpTextMulti(['ooth', 'anker'], 200) then
begin
Mouse(MSNPC.X, MSNPC.Y, 1, 1, False);
If WaitOptionMulti(['ank B', 'quick', 'ank Sir', 'ank ''Bird''s-Eye'''], 300) then
MarkTime(c);
Repeat
Wait(RandomRange(50, 100));
Until (BankScreen) or (PinScreen) or (TimeFromMark(C) > 4500);
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin);
Result := (BankScreen) or (PinScreen);
If Result then
begin
ColorToleranceSpeed(TempCTS);
Exit;
end
else
ColorToleranceSpeed(TempCTS);
end;
end;
end;
end;

Function DepositEss(Amount: Integer): Boolean;
var
T,Slot: Integer;
begin
if not BankScreen then exit;
Slot := RandomRange(9, 20);
if (Amount = 1) then
MouseItem(Slot, mouse_left)
else if (Amount = 5) then
begin
MouseItem(Slot, mouse_right);
Wait(RandomRange(50, 115));
WaitOption('Deposit-5', 500);
end;

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 3000) then
Result := False;
if not InvFull then
break;
until(False)

Result := (not InvFull);
end;

Function FromBankDTM(Which: Integer): Boolean;
var
X,Y,F,DTM: Integer;
label
Start;
begin
Start:
if not BankScreen then exit;
FixBank;

if (Which = 1) then
DTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc')
else if (Which = 2) then
DTM := DTMFromString('mggAAAHicY2NgYDCHYmsgdgJiFyh/NhBPA+KZQDwZiOcD8VIgPpxvw1CXFQLGDAxMcMwFJGEYGTDiwBAAABjaCR4=');

if BankScreen then
begin
if FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(True);
Result := True;
end else if not FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
begin
if (F > 5) then
Shutdown('Out of rings/pouches');

Inc(F);
if (F = 0) then
Writeln('Failed finding items '+IntToStr(F)+' time')
else if (F > 0) then
Writeln('Failed finding items '+IntToStr(F)+' times');
Wait(RandomRange(700, 1125));
goto Start;
end;
end;

FreeDTM(DTM);
end;

Function WearRing: boolean;
var
AmDTM,X,Y: Integer;
begin
AmDTM := DTMFromString('mWAAAAHicY2FgYGAFYk4GCOACYg4omweKXVwcGESnSzKsmCDBUJ0lyGAEFEPGjGgYBADTGwTc');
if FindDTM(AmDTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 5, 5);
if not BankScreen then
begin
ClickMouse2(True);
Result := True;
end else if BankScreen then
begin
ClickMouse2(False);
if WaitOption('Wear', 1500) then
Result := True;
end;
if Result then
AmCount := 8;
end else
Result := False;
FreeDTM(AmDTM);
end;

Function GetRingCount: Integer;
var
S,S2: String;
Dist, Home, T: Integer;
label Start;
begin
GameTab(tab_equip);
if WearingItem(11) then
begin
MouseEquippedItem('ring', 3);
Wait(RandomRange(175, 350));
S := GetUpText;
Wait(RandomRange(175, 350));
S2 := Between('(', ')', S);
if not (S2 = '') then
begin
Writeln('We have '+S2+' ring charges left');
Result := StrToIntDef(S2, 8);
end
end else
Result := 0;

if((Result = 0) and (FoundSymbol(1, X, Y, Dist) = False)) then
begin
writeln(FoundSymbol(1, X, Y, Dist));
if(GameTab(Tab_Magic)) then
begin
FindNormalRandoms;
Home:= DTMFromString('mbQAAAHicY2VgYLBmYmBwBGJ7IDYGYnMgfgoUvw/Eb4H4JRDfBeJ9Rz4xtM25gYJZgeLomBELBgMAGDAQJg==');
if(FindDTM(Home, X, Y, 547, 206, 739, 434)) then
begin
MMouse(X, Y, 5, 5);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(MOUSE_LEFT);
end else
begin
GameTab(Tab_Magic);
wait(500);
MMouse(571, 229, 0, 0);
if(WaitUptextMulti(['Home', 'Teleport'], 2000)) then
ClickMouse2(MOUSE_LEFT);
end;
T:= 0;
MarkTime(T);
While((FoundSymbol(1, X, Y, Dist) = False) and (TimeFromMark(T) < 15000)) do
begin
wait(1);
end;
end;

Start:
If (Result = 0) then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
FindNormalRandoms;
FoundSymbol(1, X, Y, Dist);
if(Dist < 15) then
begin
if(OpenBankLunar = False) then
OpenBankNPCEx;
wait(1000);
if (Not Bankscreen) then
Goto Start;
if InvFull then
DepositEss(1);
FromBankDTM(1);
wait(750);
if(WearRing) then
AmCount:= 8;
if(Bankscreen) then
CloseBank;
FindNormalRandoms;
end;
wait(1000);
end else
Shutdown('Failed To Find Lunar Bank Symbol');
end;
end;

Function FindChest(Var X,Y: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([11448246, 12171713, 13422038, 13553367], Hmod, Smod, Col, Tol);

CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSCX, MSY1, MSX2, MSY2, Tol);
ColorToleranceSpeed(CTS);

if (Length(TPA) < 1) then
Exit;

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
if (GetArrayLength(ATPA[i]) > 5) then
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
HumanMMouse(X, Y, 5, 5);

if WaitUpTextMulti(['Use', 'Bank', 'chest'], 555) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end else
Result := False;

end;
end;

end;

Function OpenChest: Boolean;
var
X,Y,T,F: Integer;
label
Start;
begin
Result := False;

While IsMoving_F do
Wait(1);

Start:
if FindChest(X, Y) then
begin

ClickMouse2(True);
if not DidRedClick then
goto Start;

if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 5000) then
Exit;
if (BankScreen) or (PinScreen) then
break;
Wait(100);
until(false)

if PinScreen then
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
Shutdown('No PIN # given');

Wait(RandomRange(175, 350));

end else
begin
While IsMoving_F do
Wait(1);
Inc(F);
if (F > 5) then
Exit;
goto Start;
end;

Result := BankScreen;
end;

Function WithdrawEss: Boolean;
var
X,Y,Ess,ItemFail: Integer;
label
Start;
begin
Start:
if not BankScreen then
Exit;

FixBank;

Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');

if BankScreen then
begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
HumanMMouse(X, Y, 5, 5);
ClickMouse2(False);
Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
end else
begin
if ((ItemFail > 3)) then
begin
CloseBank;
Logout;
wait(2500);
LoginPlayer;
wait(2000);
OpenChest;
if(ItemFail > 7) then
Shutdown('Item Fail.');
end;

Inc(ItemFail);
if (ItemFail = 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
else if (ItemFail > 0) then
Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
Wait(RandomRange(1750, 2205));
goto Start;
end;
end;

FreeBitmap(Ess);
end;

Function WithdrawRunes(Method: String): Boolean;
var
AsBmp,AiBmp,CoBmp,
LaBmp,X,Y: Integer;
begin
Result := False;
if not LoggedIn then Exit;

if InvFull then
begin
if not BankScreen then
OpenChest
else if BankScreen then
DepositEss(5);
Wait(RandomRange(350, 625));
end;

ColorToleranceSpeed(1);

AiBmp := BitmapFromString(7, 7, 'meJy7efPxzZuPCwvLiosrSkurboK5' +
'EJSfXwIRh4tk5xTk5hUhq8nIyMnKykMWAaK0tCw0EWRDIAhoDtBwN' +
'HMgggArDGec');
AsBmp := BitmapFromString(8, 6, 'meJw7sfbkCTCqq2upb2htbGoHoubm' +
'TohgVVVDTU0TEMFlIeJl5TUVlXUQWaAUXLy0tApZCqjlBMx8uBSaO' +
'FwKqAUoDgC0GVL7');
LaBmp := BitmapFromString(7, 6, 'meJy7rSJfXFxRWlpVVl5zW0UejgoL' +
'yyDiyIL5+SUExeHm5OYWYVWPLA4ABok0rw==');
CoBmp := BitmapFromString(7, 5, 'meJyTvXBJFoaKiytKS6sg7Ny8IiDK' +
'zy8pLCyDiGRk5GRl5WXnFEDEIYJpaVlwcbg5KSkZEHEgggsCAOmnNDQ=');

if FindBitmapToleranceIn(CoBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(350, 675));
end;

if (Lowercase(Method) = 'contact') then
begin

if FindBitmapToleranceIn(AiBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindBitmapToleranceIn(AsBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end else if (Lowercase(Method) = 'spell') then
begin

if FindBitmapToleranceIn(LaBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

if FindBitmapToleranceIn(AsBmp, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
begin
HumanMMouse(X, Y, 5, 5);
Wait(RandomRange(25, 75));
ClickMouse2(True);
Wait(RandomRange(275, 475));
ClickMouse2(True);
Wait(RandomRange(275, 475));
end;

end;

CloseBank;

Result := True;
FreeBitmap(AiBmp);
FreeBitmap(AsBmp);
FreeBitmap(CoBmp);
FreeBitmap(LaBmp);

end;

Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;

if (Method = 1) then
begin

//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end else if (Method = 2) then
begin

//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;

end;

Result := True;
end;

Function FindDecayedPouch(Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;

end;

Function CheckPouches: Boolean;
var
S: Integer;
begin
Result := FindDecayedPouch(S);
end;

Function FindNPCChatText_F(Option: String; Action: fnct_ActionOptions): Boolean;
var
X,Y: Integer;
begin
Result := False;

if Option = '' then
begin
srl_Warn('FindNPCChatText', 'txt is empty', warn_AllVersions);
Exit;
end;

if FindText(X, Y, Option, UpChars, 5, 345, 510, 475) then
begin
Result := True;
case Action of
Move: MMouse(X, Y + 2, Random(Length(Option) * 5), 4);
ClickLeft: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, True);
ClickRight: Mouse(X, Y + 2, Random(Length(Option) * 5), 4, False);
end;
end;
end;

Function ContactScreen: Boolean;
var
X, Y: Integer;
begin
Result := FindText(x, y, 'Choose a character', UpCharsEx, 190, 30, 325, 55);
end;

Function ContactRepair: Boolean;
var
T,T2,T3: Integer;
begin

MarkTime(T);
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 4000) then
Exit;
if ContactScreen then
break;
until(false)

if ContactScreen then
begin
MouseBox(455, 230, 465, 290, 1);
Wait(RandomRange(275, 480));
MouseBox(380, 80, 435, 160, 1);
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 6000) then
Exit;
if ClickToContinue then
MarkTime(T2);
Wait(RandomRange(125, 275));
if FindNPCChatText_F('epai', ClickLeft) then
break;
until(false)

MarkTime(T3);
repeat
FindNormalRandoms;
if (TimeFromMark(T3) > 2000) then
Exit;
if ClickToContinue then
MarkTime(T3);
Wait(RandomRange(125, 275));
until(false)

Result := True;

end;

Function RepairPouches(Method: String): Boolean;
var
X,Y,Slot,Spell: Integer;
label
Start;
begin
Start:
Case Lowercase(Method) of
'spell':
Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
'DJlKvQ=');

'contact':
Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
'YAAA0ZFcCA==');
end;

if FindDecayedPouch(Slot) then
begin
Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
GameTab(tab_Magic);
Wait(Random(100));
if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
begin
MMouse(X, Y, 5, 5);
Wait(Random(100));
if (Lowercase(Method) = 'spell') then
begin
if WaitUpText('epair',RandomRange(250,350)) then
begin
ClickMouse2(True);
Wait(RandomRange(20, 75));
MouseItem(Slot, mouse_left);
Wait(RandomRange(1575, 2150));
Writeln('Pouch repaied');
end;
end else if (Lowercase(Method) = 'contact') then
begin
if WaitUpText('Contact',RandomRange(250,350)) then
begin
ClickMouse2(True);
if ContactRepair then
Writeln('Pouches repaied');
end;
end;
end;
end;

if not FindDecayedPouch(Slot) then
Result := True
else
goto Start;

FreeBitmap(Spell);
end;

Function FindInvItem(Cols: TIntegerArray; Var Slot: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
Hmod,Smod: Extended;
L,i,Tol,CTS,Col,X,Y: Integer;
ATPA: T2DPointArray;
begin
Result := False;

ReturnValues(Cols, Hmod, Smod, Col, Tol);
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(Hmod, SMod);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
ColorToleranceSpeed(CTS);
if (Length(TPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TPA, 18, 18);
SortATPAFrom(ATPA, Point(650, 330));
L := High(ATPA);
SetArrayLength(ATPA, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
if (GetArrayLength(ATPA[i])>10) then
begin
MiddleTPAEx(ATPA[i], X, Y);
Slot := CoordsToItem(X, Y);
Result := True;
end;
end;
end;

Procedure SomeoneTalked;
var
I: Integer;
begin
FixChat;
OldLine := TheLine;

if(LastChatter(TheName))then
begin
GetLastChatText(TheLine);
if OldLine <> TheLine then
try
For I:= 0 To 5 do
begin
PlaySound('C:\Users\Brandon\Downloads\MSN_Sound.wav');
wait(150);
end;
writeln(TheLine);
except end;
end else
begin
GetLastChatText(TheLine);
if OldLine <> TheLine then
try
For I:= 0 To 5 do
begin
PlaySound('C:\Users\Brandon\Downloads\MSN_Sound.wav');
wait(150);
end;
writeln(TheLine);
except end;
end;
end;

Function CheckFamiliar(Seq: Integer): Boolean;
begin
if not DidCheck then
begin
if (Seq = 1) then
begin
if (FindBlackChatMessage('it can fit') or
FindBlackChatMessage('try again')) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
SomeoneTalked;
DidCheck := True;
Result := True;
end;
end;
if (Seq = 2) then
begin
MouseMM(615, 75, 6, 6);
Wait(RandomRange(350, 575));
FFlag(0);
SomeoneTalked;
DidCheck := True;
Result := True;
end;
end else
Result := True;
end;

Function WalkToAltar: Boolean;
var
Tries,T: Integer;
label
Start;
begin
Tries := 0;

Start:
if (WalkMethod = 1) then
SPS_WalkPath(Path_ToAltar)
else if (WalkMethod = 2) then
WalkPath_F(ObjPath_ToAltar);

SomeoneTalked;

HumanMMouse(350, 200, 20, 20);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);

SomeoneTalked;

if FindObjSimple_F([4912288,5045653,6414239], ['nter','Myst','erious','ruins'], MSCX, MSCY) then
begin
HumanMMouse(260, 16, 10, 5);
if FlagPresent then
FFlag(1)
else
While IsMoving_F do
Wait(1);
MarkTime(T);
repeat
FindNormalRandoms;
if TimeFromMark(T) > 5000 then
Exit;
if not SPS_PosOnMM(Point(3305, 4590)) then
break;
SomeoneTalked;
until(False)

Result := not SPS_PosOnMM(Point(3305, 4590));
end else
begin
Inc(Tries);

While IsMoving_F do
Wait(1);
SomeoneTalked;
if (Tries > 3) then
begin
Result := False;
Exit;
SomeoneTalked;
end;

goto Start;
end;
end;

(*
Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
HumanMMouse(X, Y - 5, 2, 2);
ClickMouse2(True);
Wait(RandomRange(350, 575));
SomeoneTalked;
if FlagPresent then
FFlag(1)
else
While IsMoving do
begin
Wait(100);
end;
Result := NearBank;
end else
begin
MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
if FlagPresent then
FFlag(1)
else
While IsMoving do
Wait(1000);
SomeoneTalked;
wait(1500);
goto Start;
end;
end;
end;
*)

Function WalkToBank: Boolean;
var
X,Y,Dist: Integer;
label
Start;
begin
Start:

if NearBank then
Result := True
else
begin
if InCW then
if FoundSymbol(1, X, Y, Dist) then
begin
MMouse(X, Y - 5, 2, 2); //Click Exactly infront of the bank..
ClickMouse2(True);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
Result := NearBank;
end else
begin
MouseMM(640, 130, 4, 4);
Wait(RandomRange(350, 575));
FFlag(0);
if FlagFailsafe then
While IsMoving do
wait(1);
goto Start;
end;
end;
end;

Function TeleportTo(Where: String): Boolean;
var
T,T2: Integer;
begin
Case LowerCase(Where) of

'cw':
begin
if GameTab(tab_Equip) then
begin
AmCount:= GetRingCount;
SomeoneTalked;
if WearingItem(11) then
begin
MouseEquippedItem('ring', mouse_right);

if WaitOptionMulti(['Castl','astl','e Wa','rs R'], 1000) then
begin
Wait(RandomRange(50,150));
GameTab(tab_Inv);
AmCount := (AmCount - 1);
MarkTime(T);
SomeoneTalked;
repeat
FindNormalRandoms;
if (TimeFromMark(T) > 8000) then
Exit;
SomeoneTalked;
if InCW then
Break;
Wait(1);
until (False)

Result := InCW;
end;
end;
end;
end;

'jungle':
begin
if not UsingFamiliar then
Result := False;

if OptionsSet then
InteractFamiliar('')
else
SetLCOptions;
SomeoneTalked;

MarkTime(T);
repeat
FindNormalRandoms;
CheckFamiliar(1);
if (TimeFromMark(T) > 5000) then
CheckFamiliar(2);
if (TimeFromMark(T) > 10000) then
Exit;
if FindNPCChatText_F('lepo', ClickLeft) then
break;
SomeoneTalked;
until(False)
Wait(RandomRange(975, 1250));
DidCheck := False;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
SomeoneTalked;
Inc(Tele_Fail);
exit;
end;
SomeoneTalked;

if InJungle then
Break;
Wait(1);
until (False)

if InJungle then
begin
Tele_Fail := 0;
Result := True;
end;

end;

end;
end;

Function FindObelisk(Var X,Y: Integer): Boolean;
var
B: TBox;
Loop: Boolean;
TPA: TPointArray;
L,i,CTS,MSP: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
Loop := False;
CTS := GetColorToleranceSpeed;

Start:
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(140, 200, TPA, 2641242, MSX1, MSY1, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
MSP := MouseSpeed;
MouseSpeed := (RandomRange(26, 33));
HumanMMouse(X, Y, 15, 15);
MouseSpeed := MSP;
if WaitUpTextMulti(['enew','points','Small','obelisk'], 600) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;

end;

end;

Function RenewPouch: boolean;
var
Graahk, X, Y, tries, Summoning: Integer;
Label Start;
begin
Graahk := DTMFromString('mWAAAAHicY2FgYBBggAAeIJYBYlYg5kQSP1RoCySZ4FgESDLiwSAAAGfpAew=');
Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA==');
if(not Bankscreen) then
OpenChest;
tries:= 0;

if(FindDTM(Graahk, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
if(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
MoveMouse(x, y);
wait(500);
SomeoneTalked;
ClickMouse2(true);
wait(2000);
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) = True);
SomeoneTalked;
tries := 0;
Start:
GameTab(Tab_Inv);
if(GetSummonPoints < 20) then
begin
writeln('Need to Refill Summoning Points.');
if(FindDTM(Summoning, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
MMouse(x, y, 0, 0);
wait(500);
ClickMouse2(true);
wait(2000);
if(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
SomeoneTalked;
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) = True);
SomeoneTalked;

if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
if (BankScreen) then
CloseBank;
MMouse(X, Y + 5, 0, 0);
if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
begin
SomeoneTalked;
ClickMouse2(False);
ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning', 'ink']);
wait(2000);
end;
end;
end;

if (GetSummonPoints < 20) then
goto Start;

tries := 0;
if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
Repeat
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
CloseBank;
MMouse(x, y, 5, 5);
wait(500);
ClickMouse2(false);
wait(500);
ChooseOption('Summon');
if(FindBlackChatMessage('follower')) then
break;
SomeoneTalked;
tries:= tries + 1;
if(tries > 10) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(UsingFamiliar = true);
SomeoneTalked;
if (Not Bankscreen) Then
Repeat
OpenChest;
if(Bankscreen or Pinscreen) then
break;
Until(False);
SomeoneTalked;

if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints > 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
wait(1500);

if(FindDtm(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
SomeoneTalked;
Result:= UsingFamiliar;

FreeDTM(Graahk);
FreeDTM(Summoning);
end;

Function HandleBank: Boolean;
var
S: String;
T,T2: Integer;
NeedAm,GoOn: Boolean;
begin
Result := False;
GoOn := False;
NeedAm := (AmCount < 1);

if BankScreen then
begin
SomeoneTalked;
if NeedAm then
begin
MarkTime(T);
repeat
SomeoneTalked;
FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;
SomeoneTalked;
FromBankDTM(1);
Wait(RandomRange(1275, 1455));
if WearRing then
GoOn := True;

if GoOn then
break;

until(false)
end;

SomeoneTalked;
if not UsingFamiliar then
begin
MarkTime(T);
repeat

FindNormalRandoms;
if (TimeFromMark(T) > 10000) then
Exit;

if FromBankDTM(2) then
break;
SomeoneTalked;
until(false)
end;


WithdrawEss;

if PP then
begin
if HandlePouches(1, 1) then
WithdrawEss;
if HandlePouches(2, 1) then
WithdrawEss;
end else
begin
if HandlePouches(2, 1) then
WithdrawEss;
end;
end;

MarkTime(T2);
repeat
FindNormalRandoms;
if (TimeFromMark(T2) > 5000) then
begin
CloseBank;
Stage := 0;
Exit;
end;
if InvFull then
break;
SomeoneTalked;
until(false)

if InvFull then
begin
Wait(RandomRange(375, 550));

if CheckPouches then
if WithdrawRunes(Lowercase(RepairMethod)) then
RepairPouches(Lowercase(RepairMethod));
SomeoneTalked;
if (GetMMLevels('run', S) <= RestAt) then
RestUntil(RandomRange(90,100));

if not UsingFamiliar then
RenewPouch;

Result := True;
end;
end;

Function FindAltar(Var X,Y: Integer): Boolean;
var
B: TBox;
Loop: Boolean;
TPA: TPointArray;
L,i,CTS,MSP: Integer;
ATPA: T2DPointArray;
label
Start;
begin
Result := False;
Loop := False;
CTS := GetColorToleranceSpeed;

Start:
ColorToleranceSpeed(3);
FindColorsSpiralTolerance(260, 110, TPA, 6643811, MSX1, MSY1, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);

ATPA := TPAToATPAEx(TPA, 20, 20);
SortATPAFrom(ATPA, Point(MSCX,MSCY));
L := High(ATPA);
SetArrayLength(ATPA, L+1);

for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);

MiddleTPAEx(ATPA[i], X, Y);
MSP := MouseSpeed;
MouseSpeed := (RandomRange(26, 33));
HumanMMouse(X, Y, 15, 15);
MouseSpeed := MSP;
if WaitUpTextMulti(['-rune', 'unec', 'rafting'], 600) then
begin
Result := True;
GetMousePos(X, Y);
Exit;
end;
end;
end;

Function CraftRunes: Boolean;
var
RNew,ROld,Seq,
T,T2,A,B,X,Y: Integer;
label
Start;
begin
Seq := 0;
IncEx(Exp, Round((CalculateEss*XPMod)));
IncEx(Exp_C, Round((CalculateEss*XPMod)));
A := Round((CalculateEss*EssPrice));
ROld := getAmountBox(invBox(1));

MarkTime(T)
repeat
FindNormalRandoms;
HumanMMouse(260, 16, 10, 5);
SomeoneTalked;
if WaitUpTextMulti(['Craft','rune','Altar'], 300) then
begin
ClickMouse2(True);
SomeoneTalked;
if DidRedClick then
break;
end;
Wait(RandomRange(300, 555));
until(TimeFromMark(T) > 5000)

SomeoneTalked;
if FlagPresent then
FFlag(0)
else
While IsMoving_F do
Wait(1);
Wait(RandomRange(1550, 1725));

Start:

if (Seq > 0) then
begin
MarkTime(T2)
repeat
FindNormalRandoms;
if FindAltar(X, Y) then
begin
ClickMouse2(True);
if DidRedClick then
break;
end;
until(TimeFromMark(T2) > 5000)
SomeoneTalked;

if (Seq < 2) then
begin
HumanMMouse(640, 220, 15, 15);
Wait(RandomRange(1050, 1275));
While IsMoving_F do
Wait(1);
Wait(RandomRange(202, 365));
end else
begin
HumanMMouse(687, 185, 15, 15);
Wait(RandomRange(1300, 1575));
end;
SomeoneTalked;
end;

if (Seq = 0) then
begin
if PP then
begin
if HandlePouches(1, 2) then
Seq := 1;
end else
if HandlePouches(2, 2) then
Seq := 2;
SomeoneTalked;
goto Start;
end;

if (Seq = 1) then
begin
if HandlePouches(2, 2) then
Seq := 2;
goto Start;
end;

if (Seq = 2) then
Result := True;

if Result then
begin
SomeoneTalked;
RNew := getAmountBox(invBox(1));
IncEx(RuneCount_C, (RNew-ROld));
IncEx(RuneCount, (RNew-ROld));
B := ((RNew-ROld)*NaturePrice);
IncEx(Profit, (B-A));
OnScreen;
end;
end;

Procedure MasterLoop;
begin
if not LoggedIn then Exit;
Case Stage of
0:
begin
if ((not InCW)) then
TeleportTo('CW') else
WalkToBank;

if NearBank then
begin
if not InvFull then
begin
if OpenChest then
if HandleBank then
Stage := 1
else
Writeln('Failed while banking')
else
Writeln('Failed to open bank');
end else if InvFull then
begin
if not UsingFamiliar then
begin
if OpenChest then
HandleBank;
end else
Stage := 1;
end;
end else
WalkToBank;
end;

1:
if TeleportTo('Jungle') then
Stage := 2
else
Stage := 0;

2:
if WalkToAltar then
begin
Walk_Fail := 0;
Stage := 3;
end else
begin
FindNormalRandoms;
Inc(Walk_Fail);
Stage := 1;
end;

3:
if CraftRunes then
Stage := 4;

4:
if TeleportTo('CW') then
Stage := 0;

end;

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
h,m,s: integer;
begin
if not LoggedIn then Exit;

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if NearBank then
begin
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Closebank;
Logout;
SomeoneTalked;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
SomeoneTalked;
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if SwitchWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(True, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-Bir * 60000, Bir * 60000);
z := RandomRange(-Bfr * 60000, Bfr * 60000);
end;
end;
end;
end;

begin
Smart_Server := 72;
Smart_Members := True;
Smart_Signed := True;
Smart_SuperDetail := False;

setupSRL();
SRL_Procs[srl_OnRSUpdate] := @CrashSMART;
DeclarePlayers;

SetupSRLStats(148, SRLStats_Username, SRLStats_Password);
Loadvars;
//CheckVersion;

LogInPlayer;
ClickNorth(SRL_ANGLE_HIGH);

Smart_ClearCanvas;
OnScreen;

SetLCOptions;
AmCount := GetRingCount;

SPS_Setup(RUNESCAPE_SURFACE, ['0_2','7_11','8_11']);
SPS_Continue := True;

Repeat
if not LoggedIn then
begin
LoginPlayer;
ClickNorth(SRL_ANGLE_HIGH);
SomeoneTalked;
end;

if (TimeFromMark(CommitTime)>=30000) then
Commit;

if (TimeFromMark(ReportTime)>=5000) then
Report;
SomeoneTalked;

BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if (Walk_Fail > 2) then
Shutdown('SPS walking failure');

if (Tele_Fail > 2) then
Shutdown('SPS out of date');

MasterLoop;
Until(AllPlayersInactive)

end.

Looks the same I guess.. Latest SRL n everything, it runs flawlessly and it drinks.

kingarabian

2012-02-02 17:13:58

From: ggzz
That's the thing.. I absolutely don't remember if I made changes.. I'm using this:


Looks the same I guess.. Latest SRL n everything, it runs flawlessly and it drinks.


Yeah on all 5 of my accounts it ran for 8 minutes and now it cant find Ess. I have everything up to date.

'Toxin

2012-02-02 17:43:05

Sometimes it messes up with the summoning potion. I edited the method a little bit, works no problem again for me.

 Function RenewPouch: Boolean;
var
Graahk, X, Y, tries, Summoning: Integer;
Label Start;
begin
Graahk := DTMFromString('mWAAAAHicY2FgYBBggAAeIJYBYlYg5kQSP1RoCySZ4FgESDLiwSAAAGfpAew=');
Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA==');
if(not Bankscreen) then
OpenChest;
tries:= 0;

if(FindDTM(Graahk, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
if(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
MoveMouse(x, y);
wait(500);
ClickMouse2(true);
wait(2000);
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) = True);

tries := 0;
Start:
GameTab(Tab_Inv);
if(GetSummonPoints < 20) then
begin
writeln('Need to Refill Summoning Points.');
if(FindDTM(Summoning, x, y, MSX1, MSY1, MSX2, MSY2)) then
Repeat
DepositEss(1);
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
MMouse(x, y, 0, 0);
wait(500);
ClickMouse2(true);
wait(2000);
if(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
break;
tries := tries + 1;
if (tries > 7) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) = True);

if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
begin
if (BankScreen) then
CloseBank;
MMouse(X, Y + 5, 0, 0);
if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
begin
Mouse(X, Y + 10, 0, 0, True);
//ClickMouse2(False);
//ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning']);
wait(2000);
end;
end;
end;

if (GetSummonPoints < 20) then
goto Start;

tries := 0;
if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
Repeat
if(not Loggedin) then
LoginPlayer;
FindNormalRandoms;
CloseBank;
MMouse(x, y, 5, 5);
wait(500);
ClickMouse2(false);
wait(500);
ChooseOption('Summon');
if(FindBlackChatMessage('follower')) then
break;
tries:= tries + 1;
if(tries > 10) then
begin
FreeDTM(Graahk);
FreeDTM(Summoning);
CrashSmart;
end;
Until(UsingFamiliar = true);
if (Not Bankscreen) Then
Repeat
OpenChest;
if(Bankscreen or Pinscreen) then
break;
Until(False);

if(FindDtm(Graahk, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints > 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;
wait(1500);

if(FindDtm(Summoning, x, y, MIX1, MIY1, MIX2, MIY2) and (GetSummonPoints >= 20)) then
begin
MMouse(X, Y, 5, 5);
wait(500);
ClickMouse2(true);
end;

Result:= UsingFamiliar;

FreeDTM(Graahk);
FreeDTM(Summoning);
end;

kingarabian

2012-02-02 21:03:34

Yeah ran it for 2 hours, was @ 1.8k runes crafted and 900 nats/hour, script stuck at the bank trying to find ess. -_________- Why me?

Brandon

2012-02-02 21:19:21

From: kingarabian
Yeah ran it for 2 hours, was @ 1.8k runes crafted and 900 nats/hour, script stuck at the bank trying to find ess. -_________- Why me?



Select the client, have your bank open with the essence on screen, run this.. if it finds and moves the mouse to the essence, replace the ESS bitmap at 1456 in the WithdrawEss:boolean; Function with the one in the script below.

program new;
{$I SRL/SRL.Simba}

Function FindEssence: Boolean;
var
BMP, X, Y: Integer;
begin
Bmp := BitmapFromString(21, 19, 'meJzNkVtLAlEUhcNfJUKIJWZ2MT' +
'MZBhEZzCZT00xkGBsG07ymxWRIPfRbW7BiczhOPbdZr9931t7Hthu' +
'23ajVbuv1NtJsdpBWq9u+6yGdewfpdt1er+95w8FgslgEm81XZOdn' +
'qtUbhAZVAgMlNBD3/afZ/HW9/hS8UrlGaAiVsAYKgMXr0+kqCD4Et' +
'6wrRCTSRFuE+ONwNhrNVy/vgpdKVrl8qUm0axDH08SXyzfBi8UyDC' +
'LROlCCAsTBjsfPuJ7gplmCgZJtA0Icp2N54Lie4IZRpEHrIFsI3n8' +
'Y0CAsplAwQw2UcAWsD9xxPBpUPJ83VINsQQkKEOfXu66vsoKLQa2h' +
'4uhPg4bncheqQV1EzigGjcVks+c0aDXUvxBDKK5F+sAjNQBus5j95' +
'IGadPookzkVCQ2hICcajTGx2G48vpdIJFOpQ0iOT84g+e1Rmcif+e' +
'fzDfz5NmQ=');

if FindBitmapToleranceIn(BMP, X, Y, 35, 85, 480, 295, 20) then
MMouse(X, Y, 0, 0);
FreeBitmap(BMP);
Result:= WaitUptextMulti(['essence', 'sence', 'ure ess'], 1200);
end;

begin
SetupSRL;
writeln(FindEssence);
end.

Sin

2012-02-02 21:50:18

Im still having problems with summoning :S

Brandon

2012-02-02 21:52:27

From: Sin
Im still having problems with summoning :S


is it finding them or just hovering over it? I'd need to know what it's doing. When it moves over it, try putting a writeln(GetUptext) in the procedure so it prints what it finds.

kingarabian

2012-02-02 22:38:14

From: ggzz
is it finding them or just hovering over it? I'd need to know what it's doing. When it moves over it, try putting a writeln(GetUptext) in the procedure so it prints what it finds.


Ill try your bitmap fix now.

Oh and to fix the Summoning Potions, use the same functions from the previous revision of this script.


Edit:

Found a temp fix for the pure ess/summoning potion that should work if implemented. If someone could make it re-open the bank if it hasn't withdrawn/found ess/pots after a series of attempts. Seems like if you restart the banking phase, some color values reset and everything becomes normal again.

Also as for renewing pots, a better and more reliable way of doing things is to have the script click the obelisk on it's way to the alter. No need any of that "if summoning points less than bla bla, then recharge points @ Obelisk".
Just have it do this every run and you won't have to worry about recharging points, save money on summoning potions, and removes weight off a very loaded Master loop.

Brandon

2012-02-03 11:13:55

This is what I was speaking of:


I ran it with crash smart, woke up n saw this proggy, watched it crash, restart, and continue.. I'm just not having problems with it :S

kingarabian

2012-02-03 15:13:28

Sorry guys, ggzz and the rest. Since i'm running 6 accounts at once, my fail of a computer starts lagging, thus making the scripts lag. Thats why it's been really buggy.

Sin

2012-02-03 21:33:43

Ggzz, I still can't get THIS script to run with crashsmart, can I have your bat file?

Sin

2012-02-04 12:26:42

Fixed the essence withdrawing error!
I just used a DTM instead of a Bitmap :D

Edit*,
Yikes that didn't work after a bit.
Changed it to -
Withdraw(X,y,28);

'Toxin

2012-02-05 00:46:01

Quick question, does anyone find that they end up with like half an inventory of summoning pouches that weren't deposited for some reason?

Yanhua

2012-02-06 02:08:08

From: XxX Toxin XxX
Quick question, does anyone find that they end up with like half an inventory of summoning pouches that weren't deposited for some reason?


Yes this happens to me all the time since the recent update, any clue why this is happening and what is causing it?

Flight

2012-02-06 02:26:15

How about this: make a small inventory checker when you first open the bank to withdraw essence that checks your inventory for a Graahk pouch and if it exists then right-click deposit all.

'Toxin

2012-02-12 09:50:09

From: Flight
How about this: make a small inventory checker when you first open the bank to withdraw essence that checks your inventory for a Graahk pouch and if it exists then right-click deposit all.


All that really needs to be done is checking to see if there's anything other than pouches used + natures in inventory, if there is, deposit, then continue. Sometimes you end up with potions which weren't deposited as well. Clicks too fast on the potion/pouch when it is depositing in bank.

Anyway, another idea… Has anyone been able to implement a way for re-summoning the monster when it is actually needed? Instead of watching the character go take a swig of the summoning potion every time the summoning levels go down, he should be able to still continue runecrafting until the graahk is actually gone. Curious as to how we could do this however…

kingarabian

2012-02-15 13:31:58

Im just baffled. Why does the script all of a sudden just stop detecting the pure ess? I've tried debugging the hell out of it and I just don't understand why, at random times, does the script just can't find the essence anymore. It can happen 10 minutes during run time or 3 hours into run time or 2 and a half hours etc.

Flight

2012-02-15 20:18:03

From: kingarabian
Im just baffled. Why does the script all of a sudden just stop detecting the pure ess? I've tried debugging the hell out of it and I just don't understand why, at random times, does the script just can't find the essence anymore. It can happen 10 minutes during run time or 3 hours into run time or 2 and a half hours etc.


I'm really not sure why that would be, unless after that amount of time there's a huge shift in the colors of pure essence and/or other bank items. The only thing I can think of is wait until this problem happens again and when it does make a small secondary bitmap of the pure essence (preferably bottom right-hand corner) and extend the WithdrawEssence function to search for either of the two bitmaps while looking for essence. If the first fails, search for the second. Maybe something like that.

Sin

2012-02-15 20:31:02

I had to switch to Astrals since this script wouldn't work.
I don't know Flight's style of coding so I can't even attempt to fix it :l
For me, it detects the essence partially, but doesn't renew the summoning points.

Brandon

2012-02-15 20:39:09

Working fine for me.. I actually spent last night fixing it.. woke up this morning with 37k natures..

Thing is, jagex fixed the ClientToken problem because when I checked my script logs, CrashSmart was never activated, not even once.. When I looked at the proggy, it was running for 15 hrs straight (luckily did not get SPS_Walking failure), no breaks and it was still going, but I had to stop it so that I can take my laptop to school. It's up to him if he wants me to post it.. Not going to just post it like usual due to natures dropping and people leaking.

All that had to be fixed was the essence and the bank function.. Had to put detection for if the bank is already open or else it's an infinite loop now and the mouse would move all over the place hovering over various items.. Not sure why but that fixed it for sure.

Sin

2012-02-15 20:57:18

From: ggzz
Working fine for me.. I actually spent last night fixing it.. woke up this morning with 37k natures..

Thing is, jagex fixed the ClientToken problem because when I checked my script logs, CrashSmart was never activated, not even once.. When I looked at the proggy, it was running for 15 hrs straight (luckily did not get SPS_Walking failure), no breaks and it was still going, but I had to stop it so that I can take my laptop to school. It's up to him if he wants me to post it.. Not going to just post it like usual due to natures dropping and people leaking.

All that had to be fixed was the essence and the bank function.. Had to put detection for if the bank is already open or else it's an infinite loop now and the mouse would move all over the place hovering over various items.. Not sure why but that fixed it for sure.

Pm plox, i'm 77k away from 90 Rc T_T

kingarabian

2012-02-15 21:32:23

From: ggzz
Working fine for me.. I actually spent last night fixing it.. woke up this morning with 37k natures..

Thing is, jagex fixed the ClientToken problem because when I checked my script logs, CrashSmart was never activated, not even once.. When I looked at the proggy, it was running for 15 hrs straight (luckily did not get SPS_Walking failure), no breaks and it was still going, but I had to stop it so that I can take my laptop to school. It's up to him if he wants me to post it.. Not going to just post it like usual due to natures dropping and people leaking.

All that had to be fixed was the essence and the bank function.. Had to put detection for if the bank is already open or else it's an infinite loop now and the mouse would move all over the place hovering over various items.. Not sure why but that fixed it for sure.


Thats it! It's an infinite loop! If you could pm me your version I would appreciate it, or if you want to, point out the exact locations in the script.

Whatever you do, do not post it. It's just going to get leaked. And before giving out your script to anyone who Pm's you and you don't deem them trust worthy, check their stats and see if they are actually using this script.

Yanhua

2012-02-15 21:42:26

The bug was because of DidRedClick being bugged in the previous SRL version.

All should work fine now, well at least for me.

Sin

2012-02-16 17:12:03

Fixed it, I feel pro.

'Toxin

2012-02-20 09:44:09

Just sayin' my edited version is running strong… Even without crashSMART, check this out :

=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 8 Hours, 24 Minutes and 3 Seconds
Runes crafted: 37532
Exp gained: 170091
Breaks: 5
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Pretty killer, huh?

Sin

2012-02-20 09:50:23

Toxin, pm me your version?
Mine doesn't renew the summoning potion anymore :l

Mjordan

2012-05-25 13:15:09

Anybody still use this, or is it broken? I'm about to run it for a week or so to get enough for 99 farming.

'Toxin

2012-05-25 14:45:12

From: Mjordan
Anybody still use this, or is it broken? I'm about to run it for a week or so to get enough for 99 farming.


I'm sure you mean either 99 runecrafting, or you're meaning to post in the livid farm thread?

Ashaman88

2012-05-25 14:53:53

[QUOTE='Toxin;1030328]I'm sure you mean either 99 runecrafting, or you're meaning to post in the livid farm thread?

I think he is trying to get enough nats to use at livid farm

'Toxin

2012-05-25 16:50:43

From: ashaman88
I think he is trying to get enough nats to use at livid farm


Ah, I see. Well good luck! Let me know if I could be of any help if you want updating perhaps. :)

Mjordan

2012-05-25 18:58:15

From: ashaman88
I think he is trying to get enough nats to use at livid farm


Correct.


@'Toxin, thanks mate will do once I get around to running it. I have about a week left until 99 fishing.

Harry

2012-05-25 19:52:46

It doesn't really work right at the moment. Flight's private version works good, just don't know when he plans to release that.

Flight

2012-05-28 00:33:52

From: Harry
It doesn't really work right at the moment. Flight's private version works good, just don't know when he plans to release that.


Indeed it does. Last night and this morning I put in quite a few modifications, at the moment it's running on SPS 2 along with support for Massive Runepouches. I'll release it after Optimus has swept through.


Nothing under 6,100 Runes/hour, a big jump from it's original 5,000-5,200 per hour.

footballjds

2012-05-28 01:52:00

let me know when you release (:

Mjordan

2012-05-28 10:40:25

From: Flight
Indeed it does. Last night and this morning I put in quite a few modifications, at the moment it's running on SPS 2 along with support for Massive Runepouches. I'll release it after Optimus has swept through.

Nothing under 6,100 Runes/hour, a big jump from it's original 5,000-5,200 per hour.


Very nice! But how do you know when or if 'Optimus' will come? IMO, it's just a bunch of bull that will be once again targeted towards everyone except us and RiD. Wasn't it supposed to happen like a month ago anyway but didn't?

How about your astral crafter? I'm guessing it's the same situation with that also?

Flight

2012-05-28 10:57:59

From: Mjordan
Very nice! But how do you know when or if 'Optimus' will come? IMO, it's just a bunch of bull that will be once again targeted towards everyone except us and RiD. Wasn't it supposed to happen like a month ago anyway but didn't?

How about your astral crafter? I'm guessing it's the same situation with that also?


You're sure right about that. I heard it was supposed to be released late last month or early this month; now it's almost June. :/

I'm holding off releasing this because it's risky to run a Nature-Crafter right now. Unless you've been living under a stone the past 5 months, every member world is flooded with nature-crafting bots, many of which are paying the price as many on my "bot list" I've seen banned recently. Although it's not my right to decide what's safe and what's not safe for everyone here to 'bot' in Runescape, I really don't want people taking that risk now.

Yeah Astralz… I would like to have a bigger stock of Astral runes, I've dropped to below 50,000 now personally. I suppose this weekend I could spend a bit of time and re-do that script in a manner that reflects Naturez RA.

Er1k

2012-05-28 12:04:15

Flight, are you feeling positive that Optimus is really coming around the corner? ;) They've been talking about this for months and honestly nothing has been done yet, not even against the injection rampage at all.

Btw, Natures are almost reaching the low points at pre-nuke levels, will that be good investment? ;)

Mjordan

2012-05-29 12:47:18

From: Flight
You're sure right about that. I heard it was supposed to be released late last month or early this month; now it's almost June. :/

I'm holding off releasing this because it's risky to run a Nature-Crafter right now. Unless you've been living under a stone the past 5 months, every member world is flooded with nature-crafting bots, many of which are paying the price as many on my "bot list" I've seen banned recently. Although it's not my right to decide what's safe and what's not safe for everyone here to 'bot' in Runescape, I really don't want people taking that risk now.

Yeah Astralz… I would like to have a bigger stock of Astral runes, I've dropped to below 50,000 now personally. I suppose this weekend I could spend a bit of time and re-do that script in a manner that reflects Naturez RA.


Ahh I see now. Well I haven't been under a rock, but I haven't played a single minute legit in like the last three months lol. And furthermore, I've hardly ever done RC legit so I had no idea that natures were swamped. I already have 99 RC so I might just go ahead and buy them instead of craft them.

Now astrals on the other hand… I would be forever appreciative if you did fix that baby up!

John

2013-01-22 05:02:25

Any chance of you re-releasing this?
+ plus the updated version of YEMP :D

Mjordan

2013-01-22 20:19:14

From: John
Any chance of you re-releasing this**
+ plus the updated version of YEMP :D

I second this. I would be forever appreciative!

Benny

2013-02-09 08:23:15

From: Mjordan
I second this. I would be forever appreciative!


It would be good to see these scripts re vitalized and brought to life again.

Any update on this? @Flight

Flight

2013-02-09 10:15:07

After having completed my herb-farming (add-on) script I've felt discouraged from working on anything under that in complexity. I do plan to re-do Naturez as it'll take a lot of Plank-makes to hit my Magic XP goal so do know that it's in my agenda. :p

The original plans are to merge this with a private pure essence mining script I finished a while back. The idea is to have Naturez check if we've run low on essence and if so then give the green light for the essence-miner. The problem is the way my essence-miner works is only on Moonclan Island and via an Abyssal Titan; I imagine only a small number of people would prefer this method.

Gucci

2013-02-09 11:11:30

Well hopefully the update is soon would be awesome to this up and running again. And those are quite the requirements for the essence miner ;)

Benny

2013-02-10 17:26:01

From: Flight
After having completed my herb-farming (add-on) script I've felt discouraged from working on anything under that in complexity. I do plan to re-do Naturez as it'll take a lot of Plank-makes to hit my Magic XP goal so do know that it's in my agenda. :p

The original plans are to merge this with a private pure essence mining script I finished a while back. The idea is to have Naturez check if we've run low on essence and if so then give the green light for the essence-miner. The problem is the way my essence-miner works is only on Moonclan Island and via an Abyssal Titan; I imagine only a small number of people would prefer this method.

I think any update would be great and would you consider incorporating astralz into as well?
Good luck if you under take this again - maybe leave it for a rainy day?

Flight

2013-02-10 20:57:10

From: -Benny
I think any update would be great and would you consider incorporating astralz into as well?
Good luck if you under take this again - maybe leave it for a rainy day?


I thought about re-doing Astralz because I also need bucketloads of Astral Runes, but I ran Google's Astral-crafting script and it seems to run just fine. Of course I made tweaks here and there to make it safer but I'd settle for just using that instead.