Flight
2011-11-26 02:49:32
http://villavu.com/forum/showthread.php?t=68265
This version also handles renewing points and the renewing of new summoning familiars. Enjoy!
2011-11-26 02:49:32
2011-11-26 02:51:26
2011-11-26 06:42:03
2011-11-26 20:29:35
2011-11-26 20:49:10
From: kingarabian
Same as lite version, does not initiate the Runecrafting at all.
2011-11-26 21:07:43
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!**
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 ;).
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?
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?
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.
2011-11-27 03:03:37
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. :)
2011-11-27 03:45:06
2011-11-27 03:59:23
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).
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.
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.
2011-11-27 05:57:14
2011-11-27 06:56:23
2011-11-27 07:01:41
From: Wizzup?
I should really try this… (Have 92 rc on main I think)
2011-11-27 10:19:15
=-=-=-=-=-=-=-= Naturez 1.0 by Flight =-=-=-=-=-=-=
Time Running: 21 Minutes and 51 Seconds
Runes crafted: 0
Exp gained: 4311
Loads: 0
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2011-11-27 11:09:46
2011-11-27 11:11:26
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.
2011-11-27 11:16:37
2011-11-27 11:32:49
2011-11-27 11:38:47
2011-11-27 15:01:16
2011-11-27 15:15:57
2011-11-27 16:10:56
From: TomTuff
I'll be using this some if/when NPC contact is added :)
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? :)
That's the area it gets messed up on.
2011-11-27 20:20:52
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.
2011-11-27 20:32:36
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.
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.
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
2011-11-28 00:40:14
2011-11-28 00:43:52
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?
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.
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.
2011-11-28 01:06:50
From: kingarabian
Throw at me a version to test?
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.
2011-11-28 01:17:01
From: kingarabian
Okay great. How are you planning to withdraw the runes and everything?
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.
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.
2011-11-28 09:30:23
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.
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.
2011-11-30 23:54:50
2011-12-01 00:00:04
From: smurg
Can you post 1.25 here please? :)
Saw the lite release.
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!
2011-12-01 00:16:28
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.
2011-12-01 00:22:25
From: kingarabian
Smurg, are you using Flight's custom Chooseoption?
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.
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.
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).
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?
2011-12-01 01:02:47
2011-12-01 01:09:58
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?
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.
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
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.
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.
2011-12-01 19:12:04
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.
2011-12-01 22:52:56
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.
2011-12-02 00:24:13
From: kingarabian
I'm up to 4.2k nats an hour lol.
2011-12-02 00:30:07
From: TomTuff
Is that nature runes produced per hour or pure essence used per hour?
2011-12-02 00:47:21
From: kingarabian
Per hour for me.

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.
2011-12-02 11:29:47
From: kingarabian
How much accounts do you have farming? lol
2011-12-02 12:10:32
2011-12-02 16:37:26
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.
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.
2011-12-03 22:02:08
2011-12-07 17:42:41
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.
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.
2011-12-07 21:31:21
2011-12-07 21:36:52
From: Flight
Already fixed in 1.3. :rolleyes:
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.
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.
2011-12-10 01:22:21
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.
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.
2012-01-12 13:46:27
2012-01-18 22:43:54
{/////////////////////////////////////////
// ~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.
2012-01-19 14:13:01
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:
2012-01-20 05:35:32
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.
2012-01-20 08:53:12
2012-01-20 09:05:28
From: Scaper
going to test right now :)
2012-01-20 09:57:42
From: XxX Toxin XxX
Same. Pretty stoked on using this. :)
2012-01-20 09:58:47
From: Scaper
Grats on members btw :)
and running pretty smoothly atm will post a proggy at 1 hour
2012-01-20 10:01:19
2012-01-20 10:39:04
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?
2012-01-20 11:07:25
=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 1 Hours, 14 Minutes and 8 Seconds
Runes crafted: 3802
Exp gained: 23265
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2012-01-20 11:26:22
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?
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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2012-01-20 13:31:06
=-=-=-=-=-=-=-= Naturez 1.7 by Flight =-=-=-=-=-=-=
Time Running: 3 Hours, 36 Minutes and 46 Seconds
Runes crafted: 10000
Exp gained: 62397
Breaks: 1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2012-01-20 13:34:17
From: Scaper
mine fine change repair from spell to contactRepairMethod = '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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2012-01-20 13:36:05
2012-01-20 13:40:45
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..
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..
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.
2012-01-20 21:00:58
2012-01-20 21:04:22
From: Scaper
wow im getting 22k xp p/h with objectDTM walking?
2012-01-20 21:06:13
2012-01-20 21:09:16
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! :)
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?
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?
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.
2012-01-21 16:00:57
From: Heavenzeyez1
Yes, you are correct.
It will last 5x more than repairing with "npc contact".
~Eerik.
2012-01-21 23:08:49
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?
2012-01-22 09:43:25
From: Scaper
working for me? goes to lunar isle?
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.
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.
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).
2012-01-23 20:39:55
From: Scaper
there is aversion with summon pots about somewere illol see if i can find it
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.
2012-01-24 09:34:50
2012-01-25 17:01:40
2012-01-25 20:31:56
2012-01-25 21:07:11
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..
2012-01-25 21:26:03
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
2012-01-26 07:17:49
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
2012-01-27 23:18:36
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.
2012-01-28 08:03:37
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 ?
2012-01-28 13:56:04
2012-01-28 14:10:25
From: S1N
Haha yeah, I, of course am a lazy human being ;)
{/////////////////////////////////////////
// ~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.
2012-01-28 14:14:41
2012-01-28 14:24:53
From: S1N
:p thanks
Jw if it needs 4 Doses or anything below.
2012-01-28 14:30:01
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
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.
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
2012-01-28 16:34:17
From: S1N
Haha yeah, I, of course am a lazy human being ;)
2012-01-29 13:22:26
2012-01-29 19:06:50
=-=-=-=-=-=-=-= Naturez 1.6 by Flight =-=-=-=-=-=-=
Time Running: 4 Hours, 56 Minutes and 51 Seconds
Runes crafted: -11851
Exp gained: 92313
Breaks: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2012-01-30 12:01:43
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.
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.
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:
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.
2012-01-31 12:26:51
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.
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.
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;
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'?
2012-02-01 17:47:51
2012-02-01 18:08:27
{/////////////////////////////////////////
// ~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.
2012-02-01 18:10:37
2012-02-02 05:06:29
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.
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?
2012-02-02 16:52:19
From: kingarabian
30 mins to one hour. Right now its instant.
2012-02-02 16:54:01
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).
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 ^.^
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.
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.
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.
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.
{/////////////////////////////////////////
// ~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' +
'qgqYgFFzjnnjOQgUbIElQwSVERURMGAAXMAE0ZUFAMCprZte3X32m' +
'vvs8+zz9n7nn2fu+9z/9z5gd1tKwidlqt78z71Q3m+qi+N+Y53jDn' +
'mmHp6q1jFKv6MgOnBEHoINAyBhT7g36tYxX8HwOAwJBqBJaHJbALT' +
'kMIyJVFMUGg6XA/+ua9sFav4PQEsH4VBEmg4hpTMt6EaBrD8s1wLa' +
'nPaupqbexpa21q8411WHcEq/nyAwfQQKASBimMYklhOGJsU5abWug' +
'17Snce33r2/JmB0zs2HShL64hKSk1A01YdwSr+rgCUC0Pq/X5WB2g' +
'fg0dT9YkMG4xpkqhz6+bdI9svX7k8cG7H+qG89dtK6hvqE/OibUNN' +
'2WZkDB2xav+r+DsAcDIShcARsRQOiWiI/J2IF4Gcp30jIs8bt7Y+D' +
'bL86xf7zndV7FqbX5NtHi0zdOWJLbgcOZ3CJWJIaBgS9ttfxCpW8R' +
'6A5aPQSBKFJBQLtTqroCj/8vLy+vaNRdX5eCFwBr/ZiZAoJIlBYJo' +
'TlEmsnv4tV69fPnp9qHJobVFtniKILzRj0/UpeCoWhUMi0PMpoFXb' +
'X8XviXnOhyxfYiB2dHIMTvKXphGppijTJuqWe3WHRwc9C2xQVPhvY' +
'ofgRBQWiW1D8My32Xl0283JG32XNlf1FOkSVWItl8ajYAgoiO1XbX' +
'4Vvz+gCBSJIJIIApG+zsE2ONlXEkfAsOFUM5QkkeA3zf/i32Yq7yc' +
'md4QwbNFw9K89HTgXlUXm21Giyv33num78ehq++j62vYqkwAxX87G' +
'k7Fw5G8zylaximUBh8NweCyHzzbVquMSY00qKVgenChHSlMJLqOc5' +
'L+YH/m3LTf+12mHETbPD2cbbAZl438FEAg4mUHSt6UnVIQPnO+99X' +
'S8YbS4qrXUxNuALWKgcSjYaoS7ir8LYDAYGoOiM2lylaF7qFP8+mB' +
'lGVm+liROwJs20ta+cXv6fyb+8//7j3/5z792vilWb6SCQRGdFU4W' +
'435xLAyHwwlkvL4ZMyDfZfvpzZPPbjeNr8tqjzf3VbIEDCT6t4wvV' +
'rGKTwASPGSiyFBg5a4pWlfosdU47oJ9xpSbz0O+1y1u1aOEV18/b3' +
'2bu/W70qOvd95/es96J4OsQmrLhAJTFgz1C0+KxWG4cqY20ahluGb' +
'6+eOu29Wx3V72IZZcMRsy/s8HGFIPjloNsf9bYJ720UwOw1grD0r2' +
'TWwPyjoVdPhp392vx0++HGy4md90ssJrj6Lzcq3TcVb8rPnmG5WOO' +
'/UzRwJ5vlhhBN7ERYYk/BJDATEvg0+T+jFad9Y/fDq171FXyG4b3w' +
'R3kVwfjUV9RttDIOFoBvRhOmDwotU55j8z4Ag4nojXN+BZeBuX15Q' +
'mDXntf7D97TdfnXt5aPDutpETxzxrzUHkS7dCJR5xs95JD7tj3Hu4' +
'm2qK6t/Tr6mjshwxnhGuGNbPjk+B8iHTSGIdu7Kx9MytkXNzh6OO2' +
'K5bt05uJsWRcJ/R+KEHQsOSlSj7tcY9PT35JXkI/Gre6c8JoHnIVJ' +
'KBSugco83qjG0cK376+tHpVweKb0YE7DOtaCghGSGh45B6FkUCv1M' +
'KzwluwpiDf409mgHzrLQKOq6W5RKTcuIokp8dAgDlo6/geGXadZ9u' +
'nHx1q/hybNKmUHNnNYVOgiE+m7UBV4gjYplqgmWmZP/xfQcv7M2ry' +
'cLpI2DIz3VFq/i9AGUdGWSppTA4yzuvP/7Y/X2Pv3rQPlXiOiwMa3' +
'J2jtcSZUg9EICi9BB4vaptRS0PCrMeu4cOaRl2GPBHpg6z8VSh7R5' +
'GaIU7T8X4WSEAEolgcGlyH17tztKZZ9O9jzZ6b1e5RzhwBCwE6nOm' +
'e0D4z5LQDCPpPQe6bjwYrzqco01QkETYVfv/kwEYP4VBlmh5MYUhl' +
'cPZd+dujr48lnM10GYbO6co09RVSRJhAO3DEHpA24gi8QfP7Tvxek' +
'/8LducjkSCAZSWoWpQJ86MxFy0sa83kOlECNxKTw04FigusRkvuyr' +
'10PUBcN6QEbPcdVlytRSD/9VzCb8CCAScxqZK3Jhd2zruTt3un+go' +
'7EiXOQrwVOxqldGfCeBFk2gEgRUzsiigcaT8+ctnB2d6Qkcswxvcf' +
'aM85RopgT7/xmF6SAKca0Ftbm4++3Bk7+s23SAjtzgHy4EDtqeZo9' +
'sObKq5nW5cRjb3NEaRVypaQNjL1meahknrhopnXj2tu5Ph2aq29bK' +
'kMSmfV/mAUSkx008pi9t7efvV52cTj7oBaadvyP28mahV/LZYkLgc' +
'FdUp06zjWP3c89ldD1r89qqzy9Os3c25Qg5EwvNmCMifwiKZByhS+' +
'gO//svbkulQxTqyNsgESYLB0HosJ0zdzrL+yQ55Lskn0gPHWlHGBp' +
'ydQCIYWgsbmupP3z1y/MWA00F+dk6WRC5EYj6nmaFQSJ6Io400rhz' +
'KffnFi6Z7BQHttpbuahKduDoB92cCCoOiS0iSCHLnUPPjpw97Juoj' +
'+1ySsuNUWgWdRX1ffoMjxUbC3MLsDWN51/5y1m2M41hnJLMWwdF6c' +
'Iye0Ia5vrPk7P0RdR01MSuOKiLorcB+AfkDkW8bra44lDXz5ePi21' +
'HezRbWrpYkKuEzmhmUjKKSlfbSmtaKU/eHT74acj8szs7PFH/uUbm' +
'K3xZwBJzIwDFsMa1bmu7fn9w90ZHSG+ST6GqoMiBSCVCZzfcARE0k' +
'ETQOypz2pPPTx7Z+UWlSTonNjmAb0IE0gmNhEnP90oai25O3tDsZA' +
'SVOPGPmsiEwRP5EvFwrbmpqPDV5+MjLPtt9zIzcNLHsM5sZGoMWyQ' +
'TB6T5lI6lzb58U3w23beXbeVlDyajfdVTCVqfY/q5AYVFUBcY6S3Z' +
'i9Nixu4MZu8M9Eu0lxkIcCffBiwYxApvHcgq3SRzyfP3Nq5QHDtJ0' +
'gpu/C4EBBbpwDExiIiipWjd664zLebZjrdzASgCcwqeBRCLY+izrC' +
'NW6/anP3swW3gnVtYh07loy7XNqDED+NAbVzF2Z25V46enZg6+32u' +
'xhJOXFShUSFPZ3zPvAkTAkAVrOvzoE/j6AwWF4GgbErVt2dI3dOVt' +
'8JDkqL8hAIwThwMfmByjR0FhSVlbWerX83NcHdftZjpUKtZUJCgcR' +
'NRwNE8r4+YV5ey5ti7xmrqqhmDjKl50FxuFxMnNJ3Yba/bf7Trwes' +
'DvETC74LcwMrrcQrf8yYLAYqVKckZ9aeSZ95pup9Luumk1UJ2+7FZ' +
'H/Lz0pcMQ4GoYgQRrHcVNyk6BZ5k//FOynnx/+jIAB14nCI1BEOHj' +
'+v7BmA/bj7yABFWFgf8p8F9D2RBFaEkc4dupI78W2TS0bFA5iEuDe' +
'j7IuQKiQyERTR+OczoTxudGWF3kgyI1Ni+SLeTAUdDDgLhApR6dGN' +
'J0tLZgMkqYTrb3N0ORPPTXgUJgchlWgSU5/zJuvvqx6mKCqo7gGOE' +
'Npn19cPoeAgfGIpsLRNDjkfX7+qwfkT2fSLL1UKVtDr86d73/dbNl' +
'FiykIMVQaLDsq4SgYAg/7BbVPCykIuglelcodOLB7655OVaQAgVvy' +
'6qFydCwMRYahqHAMC44CDwwJQyDhWDyGwaEbGIk1NiaWrhqlh4hhg' +
'0Yz4CtvCwAt8UAjCWQ88MsyE6m5vVrjasRzIYLx+OvL2t8B/q6YCn' +
'w+76olYCokGdK/zOHk2EjRvjU20SYsIQOBXMT4FsSPc6RNyn6/ub9' +
'Mx9y1kOcSnb0dwWBZYAZgsUwu3TfGo+BoTMvjfFE0wSfCA8f4VAoI' +
'0KyBiTi/dG33lQ2X3x53P88PrHAxMVeicb/kQQPLR+ORBBaWokBT1' +
'CieL86jUJtdkAnN2f2cJwxdlUIMvlh6Jnnmu6mkezpFMRnIPCqD/O' +
'lRCZwploLCCxEea+wC1nguq/3eBwqNYolp0nB6z/6u8buXqvbl8QN' +
'wUBn5EleOwqAoIoLYm+6YrXGL0+kbs8GLYHIZSjMjz2DXiLwA01qm' +
'KArP88GqN1I3tteyXZefsPh+cRNRYMA3tTcJjwv1KLKWJBLYLhiDF' +
'EJyV7BzgQaO/aXeBESISDggEBwJS2GSWAKGvpzDUdIIBkjgXz7XEA' +
'D+ETjc0vb8XWe2tLQ3Gdrpg8tb9GKA+JEaS0rK13WN1578ao9tP8O' +
'z3NLETPkjJcL0KAyyY7B19JDDvrlOw3RiQmo8hU9Y6rEDmqXSKWYe' +
'ytyexAcvJlrn8pWllJj4aLY+++eu4YX6omDnLV+JZjthfHId6rvqe' +
'vdv3TnYm1eXwXbCrdwU56+KauGmWtMVMjZ7cs+bJovN9OAidyOVHI' +
'1bhtZRGCRFipPH03fu7WvoriMZIVfoCKCTMsgGzpzO7s03748P3Ok' +
'qa88X69gY0uIjF5qVY1E17ka6OolBMkEcT1B7yiQW+pZ+JhkVydZb' +
'2V4npKHjKrcxDnhNHje4PXc29R/bYZtl9AlLg5Z4ELAcActYJwtLC' +
'YprDLDewbDooIP3KE4gWPcxNkylX7h2tqmtEcv5SYcBqAsZdj5swU' +
'ORC3jUUDIQDUNgwAeOwiExBDSBggcXrC/mm2iU9k66oJBAvyR3r1x' +
'dQllYYfVaXYFcEIb/LKMAXCpwoLWdFdX7CsOzA7gyBhK9iL0uiB+N' +
'o6KgK+3Wsyv1c5mGGcT4pDiO4D1bhemRqERbX4vg3dpzLw4r15GD1' +
'3qxpLSlPC9gPKGhfnRmWMWptPt/uRl2Q2W9SWDtaIlfYgAuinlnjc' +
'DTsBQ5hq5Fe+bZ5G9JiR5wKj64Zu/QQN6mdEkIhWiIXPlMNBqNEhk' +
'K4zKjco+Hv/jrzJr79rIMol+ID4NN+/RMHJTIouKZdpjajsqx8QsV' +
'O/Po1mjona4AWBxWbKwflR+05XzT7ZdXUk54ZeVn8GUcYD+LHo/H4' +
'0xMjf0KHBk6tDACn7sjDjgLTQ63rDe3fHTNmWeHvvnrXx6+uTsz9x' +
'QMpd132x+8vJN5y9O2lyMLYyEWi8igqX86WazStw5TlzTmpx8K7Lv' +
'Tev750b6ZxsQb9gGXZZUP4v76z98Vz4Ta9DMyilJ+WN8EfC64a3Dx' +
'JnZyEwe5XCsxMBWA/4oU+hKFEMgnjaXK2t7K2dMxJDwoOMXHuthAP' +
'wiPYcOBmhKE4l3P8wbv9py9faJ+qDI+O/IzVBXOdxEsLy+PqvJTeo' +
'lJTMKi5goIh8Vj2kdYZh4Iffr1VMSERllGsXfXESn49y8YiEYbD4u' +
'QHt2dF9c0mygupWqBiruoaFxIpartFPmt6aceHez/osmsmRaTEyqW' +
'CRGLDcBFAQJGLBFNFuJoFmhVCre3t7fpaFXacEBwj010rR9Dh+EH4' +
'vg6Kp6LXiEPv4tx7EwyW+IOP9o1/HartpfhXWqrMjdZtgwDKAemmK' +
'aM4+w+sf3Q7f6yrrUiOyaIQJc9KQKBAEGQmZ+8qC/tyfOHWx5VO26' +
'R6PwsgUhYVG6B47k8bmh4CFmJZNqjbXbTo47YRex22Ha++dbs1cm3' +
'13tnN4SPmen6OZu21DqUKeS55H3Hd9sMMIEiDal0h8oX32fvhfVNH' +
'JrUlh+S452/K2noVu+r1y9Hnu5tGy/fObIteXOwZS3Pe6eq72Gjw1' +
'EWeKSA2ZjW78qfwMuly4jKSC5Qm4pCMvBHfpV2AeucggrcIwr9/dY' +
'52FZKTSop0jQixw1Dt0FTzVAgHhFG4oFDqfgq/N/+z7/u+K468bG1' +
'82F+SmEikI6fpX0ZUYoUOdMpUiwKv3h8B8SPgbGosCy/91rLyJud1' +
'jsZ/uscjVQy4PHfPwxPwmmdLcI7neZezFhtp5tW02VWYkgxfgTwEj' +
'l8tkukLmnI6803r7OmPOR5JA9/12U19g9AohAEOpaqwnA9sQVNmft' +
'G+s9fPrv1SHtdSzXLCbhePYYtOjMrwz/KB0R/K2QVJBLB1ed4RbuE' +
'79N99d3rspkIEMVHxkSwecxPSzKI/Ml4oTWrqqX07v07DZcLS2qKx' +
'Go+Arv8zeDwOEO1ZF1F0barDde/uhB2QRNbGawwky0ltwD5m1uYmx' +
'fy8WIEII29X7fceDnmcY0b8ECcN+0bOW5m2kwNq/b0j/GW2kHHIAh' +
'6HA+s7R4G3w8riiKIHX5cmgQuG4NFswR0qRunpK6w4UT5w9n7p2cO' +
'Fo1Fh++wL1ify7CFyhrhOD3wI82XSu2HmXRbNBhBajf5Oz8C1wNkH' +
'pjh4dojCz9plTDqEHHO0ue0ofMJruNRltMJtucl/bBbJslTuphpU6' +
'8JnuNxtttlbu5Xrvf+4+KF/xj0f8ZX11GE4XgwNh0DdSTOL182+Ks' +
'A0wNWComExc4OsSKFaOIkK9uSd//5RN1MqiyLFBUbyQRW8dPRiiVg' +
'LOzMIlvcJ2cnHI+z5LkkIJkgp/YRgMeXq6VlVSWd12rOfz1sP8zyq' +
'LBQWZisJPKFKAuLIvPxdEu0Nttw5+COS1cuDV3o79u1g+mAhSQHQg' +
'9NhVumGG7YVpVfm7UQYSFw0Afw1SdadYGrUmoUaypjci4FfPc/vkm' +
'+4ei3ydpUZ4IlLiPJwMBh6TNU4cLmw9Xjs2PRh+1j0yLZIsaygcwC' +
'+Vv5m2TtjJr+4mHbTJF6AzUkOpDFX3zEgePZbFZwSBDVFGWYSWz+a' +
'+aZf+u33cc0SCGarKeYVFBsGoSJa+LNbDRsfSYIH+ALpg7T69jVot' +
'lE5bhhFR4i2HxG9J3xi+hSb3bb5ra9l7c/fv5g+936sH02hbVrzYP' +
'kFDUa4i6kHlA7PC/c2RsnIp4Z6QfhiHKkzkOLJr1798AG0DS4Joez' +
'tb+r/HhazeWMrsmqfdPdI8/3nH99aPTN0StvT898+3Dum8dHnvfte' +
'FI/Mjfw/JuZ6rcxIL5gu2AxHDiaAQtK9zZUGiwbYX0WAPHD0WfZRZ' +
'kVDyc9+OpW6HUT6036WodFhDoQCaZaVcxGv7MPj3jf4YFxbe1pjiJ' +
'9aG0LMaalhzp5a+CdV9cbn2fLs4nxKbFcIXdZgwFhGpaIoUrxLEdM' +
'xqaEQ6eHzt841Xi4Mm9jBs0SDce/y04giLCyzryGE2X5balMewywF' +
'hBOKp0lBjoeS0UiilHAKSzMNM0Ha3pAdAEfx2Kz3P1clcXk8LvG97' +
'+7XnkuPSDblWVEQRKWyR/iCTiJuX7JhsILd0/uftzqtFVi42tOoi8' +
'Z+/8AMOJkaoOKyvK2y5W3vh4LvCJ3q1NZ2JrilhhxWCzG2MTYda0l' +
'1web/NL6zf8z53KeDVQQQYqgWaACy5ydvOyFBgI8GQ//oTPM/NR8Q' +
'LVD6FFLwEh8ZxL0dziUQWIKaVIfVktX08iNg7efj9eN58Ru8QhJ9Z' +
'NpxQQgGhEL5Y4wlgVh3ab8C1Mna79MhJSMO9ba0QpN+InrBywH4p2' +
'YzPDIal/LRqaimCRNJRqmEY0ryHb93LyhuP3Dg+W7c6N6XCIGbU9P' +
'HgXygGmLWeiZZpentNCaE8mfs9zlE4DygSpRcVXB0K0dB15tseyiR' +
'eeGSuSij4U6oGVjM2Xc+uD+iY6EKS3TAeMe4oSlf6ipUCikQKIfkx' +
'aReTx49tuHYXeUiiKSg4c9iUb4NM1C67AoWJoSrx+I29rbPXZ19Mj' +
'4YEX/2oC1rixbHKRz5ukISYIBkXnw1NDW0abQaneCBBmRHmSQRBCG' +
'EYDn8qrQpuekOoRoVc4yqYVQZMITGPFA3CFXyhwc7ROKIlkOGIcR1' +
'sDrlkNnBpmOGLIxCsdDfCI0A/zA4NDVgQaV+/KevnqUdy0kps7f2M' +
'oIg1+GzRYmGqx81Mm9AfdfTXQ8KwEEnpSWoC/hwxdb8gDNStNprl7' +
'Osiyi22XOP/3n1zF/UfD8sEgKDCeAB2d7W9la0Nm0j1sEAJenTGRn' +
'd8VHVPjgxVBOCY6GUXkkoQe1s7Pj1M0j489GS8cSk1tD7EMt9OVcD' +
'Pld3gkcxhRSHSIto/c4P3l7v/x1uDiGoCliKzTyD6tTYNCSELwAwV' +
'ZT5HZCUzdjax8zS1+VzIdD16IxrHfTZzgePKHXx/4gU5ZJpFuhUVQ' +
'YePX2jvZUBhX++Qp9PwHgJSk0sombtHz72uev5iofxitLyJ6BbtTF' +
'pqhAOCA3NkwqjWoeX1f0NIjjiU1IjCdyPqQyPAGvtjbOrk/un9w8/' +
'HabZTfdu8RGoZZ/enZp3vhxdDXOMIGya1/fzds3+i9trekp08YqeB' +
'o6hoZcmAYFUodkhEpvir1959bAqR3CCDyWAwdq3OEQ26yFZtZKM2u' +
'igVsAPAb+4VerCyx1Dsx3881x8sl1iK0OsOqhgzeS+IXFzF8fHLi6' +
'O7zF1StPZ54i5vvjUJTFhwDgB4mJMLs0bc/41lOvhsDLTc9K5Uu4c' +
'NQyLxR4HImRKDM/reZ81v1vboTcVGo2Uu3cbD/IKvz4eFFIsVS8Jj' +
'PJvJ12+pu92/+lYqERDcEQEbLGT22mIlFJ8MXmbqDvUmCm4VKWM0Z' +
'vvlkrhoHg2BOqGyuPXTsAjL/4QmxKU6S1nylHzETiEN8/cBiVSbZw' +
'0SQ2BNfdzHryL3f9pgSAEELiAzkC1uKeGja/NgoHvQXAQtBUIHJeX' +
'WP0UGToL1ZVguzTQZ63uOAWgHmAF+Hq4cxkMz7vEqdPADlfA+yWaF' +
't3Mv/Gm1HfMalPlbXacvF8CGAeiVyclB9bNBrd9DxLEIIPy/Sni8n' +
'viwdAYkw20zHINnCn1czbR2VzEeI4QnxiHFt/iUe68C0EnEDF0U1x' +
'JimcXYd6b9y9tm2suaaj3DhIwJUxMMR3s2zA6ZN4OGCrfUe2nr5/J' +
'HNXhDSAQTVDAdXatqd+750t99/eevW32cnvrh3/sr/9cUnGDS+nU2' +
'xlCYkfgON6YY3yyB7XuVu/Kf2v//qvui8TdIMMVTXFupcRP+hesDU' +
'lOSPx48qc+dQ9VeUhLenNmnk5veFhhmk91dHXlkwnfVr8QMRCJZs6' +
'Q/PpF2dO7fiiFujzyNxAAyPxooV/84WCBFOdKq4+oO5OxtT/vA5iX' +
'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.
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.
2012-02-02 17:43:05
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;
2012-02-02 21:03:34
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?
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.
2012-02-02 21:50:18
2012-02-02 21:52:27
From: Sin
Im still having problems with summoning :S
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.
2012-02-03 11:13:55

2012-02-03 15:13:28
2012-02-03 21:33:43
2012-02-04 12:26:42
2012-02-05 00:46:01
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?
2012-02-06 02:26:15
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.
2012-02-15 13:31:58
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.
2012-02-15 20:31:02
2012-02-15 20:39:09
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.
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.
2012-02-15 21:42:26
2012-02-16 17:12:03
2012-02-20 09:44:09
2012-02-20 09:50:23
2012-05-25 13:15:09
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.
2012-05-25 14:53:53
2012-05-25 16:50:43
From: ashaman88
I think he is trying to get enough nats to use at livid farm
2012-05-25 18:58:15
From: ashaman88
I think he is trying to get enough nats to use at livid farm
2012-05-25 19:52:46
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.

2012-05-28 01:52:00
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.
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?
2012-05-28 12:04:15
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.
2013-01-22 05:02:25
2013-01-22 20:19:14
From: John
Any chance of you re-releasing this**
+ plus the updated version of YEMP :D
2013-02-09 08:23:15
From: Mjordan
I second this. I would be forever appreciative!
2013-02-09 10:15:07
2013-02-09 11:11:30
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.
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?