SRL Archive - Research & Development Lounge

ShowCurrentScreen (SMART Viewer)


Nava2

2008-11-16 16:42:28

Here is a function that munk wrote, and I modified.

I added the mouse position, and munk did the actual grabbing of the client.

If you add this into your script, you can see whats happening in the smart window without opening it! :)

For writers: This WILL show the mouse position with a Red Dot.

{*******************************************************************************
procedure CopyClient;
By: Nava2 and munk
Description: Copies the client and puts the image of it onto the debug window
Usage: Press F12 to start copying, and press F11 to stop (you can start back
again by just pressing F12)
*******************************************************************************}
procedure CopyClient;
var
X, Y, Bmp, MDot: Integer;
begin
try
if IsFKeyDown(12) then
begin
DisplayDebugImgWindow(766, 504);
bmp := bitmapFromString(766, 504, '');
CopyClientToBitmap(bmp, 0, 0, 766, 504);
MDot := BitmapFromString(9, 9, 'beNpjYPjPAEJo4D8qwhTH' +
'w8ZvAkIWCAbEXgAgCS7S');
SetTransparentColor(MDot, 0);
GetMousePos(x, y);
FastDrawTransparent(x - 5, y - 5, MDot, Bmp);
GetDebugCanvas.Brush.Color := clBlack;
GetDebugCanvas.Rectangle(0, 0, 766, 504);
SafeCopyCanvas(GetBitmapCanvas(bmp), GetDebugCanvas, 0, 0, 766, 504, 0, 0, 766, 504);
end;
except
Writeln('Unable to copy canvas');
finally
FreeBitMap(bmp);
FreeBitmap(MDot);
end;
end;

Tests:
[ 1 ] : CopyClient took: 31 ms.
[ 2 ] : CopyClient took: 16 ms.
[ 3 ] : CopyClient took: 15 ms.
[ 4 ] : CopyClient took: 0 ms.
[ 5 ] : CopyClient took: 0 ms.
[ 6 ] : CopyClient took: 0 ms.
[ 7 ] : CopyClient took: 0 ms.
[ 8 ] : CopyClient took: 16 ms.
[ 9 ] : CopyClient took: 0 ms.
[ 10 ] : CopyClient took: 0 ms.
10 Copy Clients took 1625 ms.
First one took longer, because it needed to Display the debug window. The others, I THINK were longer because Echo fighter was trying to display it as well.

You must put this into the script where ever you want to see a screen shot. I have found that the timeouts cause crashes.

Enjoy.

jakeyboy29

2008-11-16 16:53:15

nava, do us a favor, add it into a simple script. just to show us how to lay it out.

Method

2008-11-16 16:56:07

From: jakeyboy29
nava, do us a favor, add it into a simple script. just to show us how to lay it out.


He just did show you how to "lay it out". Either call the procedure whenever you want to screen to show (using the F12 key or whatever other one you want), or set a timeout on the procedure itself.

procedure ShowCurrentScreen; //munk and Nava2
var
x, y, w, h, BMP, MDot :integer;
begin
try
GetClientDimensions(w, h);
DisplayDebugImgWindow(766,504);
BMP := BitmapFromString(w, h, '');
CopyClientToBitmap(BMP, 0, 0, w, h);
MDot := BitmapFromString(5, 5, 'beNpjYICA/wwI8B+GkNmYIs' +
'jqQQAA33kM9A==');
SetTransparentColor(MDot, 0);
GetMousePos(x, y);
FastDrawTransparent(x - 2, y - 2, MDot, BMP);
SafeCopyCanvas(GetBitmapCanvas(BMP), GetDebugCanvas, 0, 0, w, h, 0, 0, w, h);
except
Writeln('Could not Copy Canvas');
end;
FreeBitmap(BMP);
SetTimeOut(Seconds, 'ShowCurrentScreen');
end;

munk

2008-11-16 21:52:27

just put it in vital places like during bankscreen or in an important loop.

@nava2 - you should make it draw an actual cursor :D

Nava2

2008-11-17 08:23:43

From: munk
just put it in vital places like during bankscreen or in an important loop.

@nava2 - you should make it draw an actual cursor :D


I could but isn't the red dot, just that much prettier? :)

It doesn't really matter what you draw, haha, once I figured it out it was easy.

Tootoot222

2008-11-17 09:07:25

this one is better (i made this one first, for my magesmither), just declare ShowingDebug as a global var:



var
ShowingDebug: Boolean; //move if you like

{*******************************************************************************
procedure CopyClient;
By: Tootoot222
Description: Copies the client and puts the image of it onto the debug window
Usage: Press F12 to start copying, and press F11 to stop (you can start back
again by just pressing F12)
*******************************************************************************}
procedure CopyClient;
var
W, H, X, Y, T: Integer;
A, B: Boolean;
begin
try
T:= 200;
A:= IsFKeyDown(12);
B:= IsFKeyDown(11);
if((A) and (not(ShowingDebug))) then
begin
DisplayDebugImgWindow(766, 504);
ShowingDebug:= True;
Writeln('Showing Debug;');
end;
if((B) and (ShowingDebug)) then
begin
ShowingDebug:= False;
Writeln('Not showing Debug;');
end;
if(ShowingDebug) then
begin
GetClientDimensions(W, H);
SafeCopyCanvas(GetClientCanvas, GetDebugCanvas, 0, 0, W, H, 0, 0, W, H);
GetDebugCanvas.Pen.Color:= 255;
GetDebugCanvas.Brush.Color:= 255;
GetMousePos(X, Y);
GetDebugCanvas.Ellipse(X, Y, X + 4, Y + 4);
end;
except
Writeln('Unable to copy canvas');
ShowingDebug:= False;
finally
ClearTimeouts;
if(not(GetSCARVersion = 320)) then
if(not(Round(T / 1000) < 1)) then
SetTimeout(Round(T / 1000), 'CopyClient')
else
SetTimeout(Round(T / 1000) + 1, 'CopyClient')
else
SetTimeout(T, 'CopyClient');
end;
end;

just call it once near the beginning of the script, and it will call itself over and over again;
press F12 to start drawing, F11 to stop

Nava2

2008-11-17 14:51:52

Updated new version. Using both Toots and Mine. :)

Naum

2008-11-17 17:03:06

Good good, I was looking for one, and I tried combining both to use in my script.

You read my mind Nava2.

Tootoot222

2008-11-18 10:22:27

Nava, remove


GetClientDimensions(w, h);
DisplayDebugImgWindow(766,504); //this line
bmp := bitmapFromString(w, h, '');

because if you don't want to watch the debug, you don't really need the thing popping up every second or so

Nava2

2008-11-18 21:58:00

Fixed.

Pierre14

2008-11-19 20:29:21

Hi guys i get this error when using this in the script called forefeather. Cannot open graphic options screen. But if i use the script without copieclient it doesn't give me that error.

All help is appreciated.

Mjordan

2008-11-19 20:34:03

Wow I love you :)

Nava2

2008-11-19 21:55:16

From: Mjordan
Wow I love you :)


Do me? :)


Kidding, but you like it?

Pierre14

2008-11-20 01:20:59

From: Pierre14
Hi guys i get this error when using this in the script called forefeather. Cannot open graphic options screen. But if i use the script without copieclient it doesn't give me that error.

All help is appreciated.


Bump That my problem still no answer!

Kyle Undefined

2008-11-20 12:27:26

You don't have to use CopyClient, it's just there if you want to see what's going on with smart. Also, if you want to use it make sure you call it correctly ;)

~Camo

Nava2

2008-11-20 16:06:17

Copy client will have NOTHING todo with that error :)

Pierre14

2008-11-20 17:38:42

Ok can someone tell me where i add copy client on masterkills varrock minning script?

Kyle Undefined

2008-11-20 18:32:17

From: Pierre14
Ok can someone tell me where i add copy client on masterkills varrock minning script?


Yes, give me a little bit and I will. Kind of busy with other stuff right now.

~Camo

Mjordan

2008-11-20 19:16:17

From: Nava2
Do me? :)


Kidding, but you like it?


Phone sex pl0x?! Haha yeah man its very useful. I don't like running a script if I can't see it, even if I've used it numerous times and know it's flawless, I still like to watch it a little. So I've been forced to autoing without smart. Not now though :D

Kyle Undefined

2008-11-20 19:25:51

Pierre, here you go. Sorry for taking so long.
Program NewIronMinerByMasterKill;

{.include SRL/SRL/Misc/Smart.scar}
{.include srl/srl.scar}
{.include srl/srl/skill/mining.scar}

var
World, HowManyResponds: Integer;
TheQuestion, TheRespond: array of array of String;
ShowingDebug: Boolean; //move if you like

{/----------------------------------------------------------------------------//

Welcome to the varrock east mine and banker!

This script is created by MasterKill from SRL-Forums

SCAR : 3.15b
SRL REV : 19
SCRIPT VERSION : 15.2

DO NOT COPY THIS SCRIPT AND CLAIM IT AS YOUR OWN.
If you want to use some procedures, it's ok, but CREDIT MASTERKILL.

//----------------------------------------------------------------------------//

Start your players in the varrock east bank. Some stuff this script is including:

* Fast Auto Responder
* Perfect Bank And Mine Finding
* Anti Randoms, Anti Ban
* Awesome Reports
* Very Fast
* TPoint Array Object Finding (for bank, iron and mine).
* Pick Related:
- Get New Pick From Bank When No Pick
- Bank Pickaxe If Broken
- Attamps to find the pickhead if it flies of

//----------------------------------------------------------------------------//

Start your players in the Varrock east bank with a pickaxe in first slot OR
wielded. Make sure the mining level is > 14. Be smart and add some responds
in the responds setup. plz setup the script:

//----------------------------------------------------------------------------//

Credits:
n3ss3s: Download Function
Wizzup?: helping me making l33t stuff
Raymond: Some help with the form

//----------------------------------------------------------------------------/}
{Script Setup!}
//----------------------------------------------------------------------------//

Procedure SetupPlayers;
begin
MouseSpeed := 12; // Mouse speed
end;

// PLAYER SETUP IS WHEN YOU RUN THE SCRIPT!

Procedure SetupResponds; // ADD RESPONDS FOR BETTER ANTI BAN !
begin
HowManyResponds := 2; {<-- SETUP CORRECT !!

NOTE: respond to your nickname and your mining level are allready in the script!}
SetArrayLength(TheQuestion, HowManyResponds); SetArrayLength(TheRespond, HowManyResponds);
TheQuestion[0] := ['noob'];
TheRespond[0] := ['Im not a noob!', 'your the noob', 'look in the mirror', 'noob noob', 'no way noob', 'your more noob', 'whoes noob?'];

TheQuestion[1] := ['respond'];
TheRespond[1] := ['what to say?', 'i dont have anything to say', 'no im bussy'];
end;

//----------------------------------------------------------------------------//
{End Script Setup!}
//----------------------------------------------------------------------------//















//----------------------------------------------------------------------------//
{Script Code! don't touch all below}
//----------------------------------------------------------------------------//
var
x, y, I, Load, RockWaitTime, Responds, bankers, IronMined, IronOre: Integer;
PickaxeStick, BrokenPickaxe, PickaxeD, Banked, ScriptRunTime, warn: Integer;
Bankers2, MKLOGO, SetTime: Integer;
Wielded: Boolean;
SafeReportFileName, LastRespond: String;
PickaxeDTM: Array [1..6] Of Integer;
RespondsList: TStringList;

Procedure SetupDTM;
begin
MKLOGO := BitmapFromString(60, 55, 'beNrNmslTG0cUxr' +
'mlckoOqXLFxA4GzL4JJAQIJARC62i070JoMYjFLAELAw5GxkvFVbE' +
'PsXNxpSqXHJIckpRTleTIJbf8T8lPTEIpLKMZwEhdr7revH79+qPp' +
'6fe9gaDx75pv7S03piOuZNBmM3aHXcPLWRFjXV1dsVgn344iyLsdx' +
'VEe8KywUoSzMFeEXTH+sVUuHrA8VG9XUyxgCwomr21QMPduLkXKJ5' +
'66yqm/L/lVVAWsGKqrvQHMYdEccA57pwZ2VhPyq8gcM3nACgMq+dk' +
'7Wm8mQo6odzLoGvFY+rdX4vJL8Hgq4JNu58CsBDCtp7MxFRViPovP' +
'rneauu8thCr+Nk/CPtVHLWaFgGmantuZhId9Fqe09rHOjfmgkhNYD' +
'vssB1WYlUeg9fe2ZJNe9tlj1fEOVjwbx2DLjCrHrAowTatpAzP7zL' +
'3BeS4WMgoxKxlSglktYNrgQEdu2hfxTLDP3BuPNrNql7hczBUB01q' +
'aroOZuy7mNbHPr58XqohZCWApD95J+aX72TXeo+psXC5mhYBptxs/' +
'ls6z3zEUdOgr3nVnZepz5xS1gGlNDddmYm4wcz8nfaYjvqHqarpIH' +
'lQLmNZ2+xNySsg9Lkz2R92GfNKuNgVcMHefAzaYyd1wJO6NiDCyng' +
'+oSrUX5xvngN3aXA9m9hm+wXneu5e+Yo50DthwUe666ZA9JBishvY' +
'Ha8kqYlYIG74h5W7prnu6M1ddzEpgwze4NzgbYCanvNhfuXr+rBZ2' +
'X3cztRWYORvk7ucPF6vC+VXB7u64JXF+cje8bnc9Va06RTlsCXPcP' +
'5Xwm+H8hcVwFWsrhbB5B5NhJ/sMZvZ5azlW+/WgTtPGeZZ4nWDRPN' +
'yYqf26u6+rKR0X52Y8jvFen2Pw6e587X/f0HQ0ctelIjbbeA+Ydwv' +
'p2v+ONNDVPDsT4B10W7VR79jO+kztf69jn/PpMLVVSDQmAxNba9O1' +
'j3mgr5XcDeawe5Scsn8/V/uYyYNSbRURx8jdxzjS1TclvK6j9eZcO' +
'kjujnqM7POx+/nqmxJeB+dfyEX8zjHpe939u9Gq73NF2Ozzcj7hsY' +
'1Qp5z8XlcVzBVhy3P+8nZwcFD8rx28m3YYu8IH2Iqc/3LRFv/fJMv' +
'R0DHMMvssz/kvd2/LcZaBLJYjl0+X8pz/XZyE8lBK9hn9mEiwT+X8' +
'7/rcKjnPMh+QZTh/sTqt8j7Lc/6TL85VYj7rPMtw/iohr3xvnMX5q' +
'4dcwf18Guev8TxYa5xfCd+oNc6vhNcV1hZFp1l0msKeqUzCs5iN1D' +
'5/3i7cdU4aUhG332W+Vf/Be2q+t1errS6lvQ7TmL7ToGsPeyfmUr6' +
'WpuuDAx1Sr9W0QUi4w3s6G2GtXe0N8MD2lhuMYsEO/SYrDem6cG5q' +
'uIYzCnwAQcens+1TJjIFTwQdiySEwk2v7RzR9+j626nyCNVw4yOML' +
'IRza3M9E/+d3lw/Mtj94ft1SCxgI6fYJ7Tz2eDmWlq0D0FNjwTKh3' +
'BmUlGBdIkzwn1Ozw05nw1T4/AK4xDyTAbcZskhHrRjXJqN4UDhhk6' +
'Q0u0UFRCm4xD1W7EQRIqPTs8jq6BISyD4AyOfCVGYHPq4/YJxOR8z' +
'6Fo/35xDAqLBL4yWakNK2sO+xEN8lqMeY1AwJYM2hgIuI5WCaB1G4' +
'drBuJAJzk4f0lqXkR5jiS66jPggXrsBnYnSEEIoYiK4YZeMiHNCR2' +
'QssPqZiBMLZZRg0U+HrYmgxWMfQp7sLofE0XFDWzxkns95S3/ctOq' +
'kvvQHZatOnNL67HqKr9L/eNgGbcZuLNTpcd84QvGLTs8o5BA3dJgA' +
'itPcR6rCiAVB8TuGpIAI/qyCEV0yuiY0bsuA5CY9CpP9rIgFT1YRb' +
'dpUZCqXdGTi9r/+fPvHr99ORy0h7ygsGlJ61ENC7GOd0CfJwmPYNR' +
'wRRgL2QZ9VG3ToUfw2Xcg5xCMOFA440zPLPdGX9Jlsox0ouElT8EE' +
'hAg48MoQiTmqk+NgxElAKi/BYmmXX+Z36TMzy4tnGm9cPX325/XRv' +
'4YvHy/u7+XxWeP288GgzK/XFQmZ7Jb4xH6RORNlZTWwuRZaz4krOg' +
'0AC9+/nnmzPUpFR/N7NuKFYzx7kXz5ehYdjWb3jxV/yZC6ja7M+3L' +
'ATE09KjMdbd/BBsDDKLJzRP5vz87ieD2DZu5emgHqwkSpu5X787uX' +
'PP7z67Zc3P33/1e9vv3nz9V7sH72cp4U=');
Bankers2 := DTMFromString('78DA639CC5C4C07098010514667A30FC07D28' +
'C40FC1F08182700D59C81C83143D5BC7DCBC020025503028C5388' +
'5033830835738950B39008354B09AB01007BF81BA4');
Bankers := DTMFromString('78DA633CC3CCC070890105FCFFFF9FE13F906' +
'684B0FF331E02AAB905916383AAF9F38789810BAA060418AF01D5' +
'DC26A0E614617300197B14BA');
IronOre := DTMFromString('78DA6314616060106640038C482490660712A' +
'204D408000945026AE481840C0135AA40828F801A2920C141400D' +
'C85FECF8D50000ACCF0135');
PickaxeStick := DTMFromString('78DA6314666060906140038C4824901601124' +
'204D44801095E026A40F2CA04D408000929026A048184220135E2' +
'404214BF1A00B23A014A');
BrokenPickaxe := DTMFromString('78DA6334676660A8656440058C4824907603A' +
'A2926A0C61BA8A688801A3BA09A4C026A8C806A728950D34A408D' +
'13504D3E7E3500C8FC050A');
PickaxeDTM[1] := DTMFromString('78DA639CC0CCC0708B91011530229140BA13A' + //rune//
'8E60301350B816AEE1350330DA8E60A01350B30CD71894A611041' +
'52030015D70885');
PickaxeDTM[2] := DTMFromString('78DA63DCC5CCC0708B91011530C2C9FF40C0B' + //addy//
'819A8E6036E3560FA3450CD7D026A0E00D55C21A0E614A6394E41' +
'4E0CBC486A00B2A90D20');
PickaxeDTM[3] := DTMFromString('78DA637CC2CCC0708B91011530229140FA2E5' + //mith//
'0CD07026ABE02D5DC27A0E61550CD15026ABE609AE3E010C72082' +
'A40600C3490A05');
PickaxeDTM[4] := DTMFromString('78DA63E4636160B8C5C8800A18914820CD0E5' + //steel//
'4F381801A79A09AFB04D48800D55C21A0460ED39C8A8202061124' +
'35000D5E0656');
PickaxeDTM[5] := DTMFromString('78DA639CC0CCC0F08F91011530229140BA13A' + //iron//
'8468409BF9A854035CC04D44C03AAF941C0AE0598E604F9FA3288' +
'20A901004D1D0626');
PickaxeDTM[6] := DTMFromString('78DA63DCC5CCC0F08F910115302291407A335' + //bronz//
'08D08137E35A7816A9809A8390054F383805DA730CDF1B5516110' +
'41520300A15606B9');
PickaxeD := DTMFromString('78DA6314606060E06540038C4824909605125' +
'C04D470020976026A40662810502302245808A801B9590CBF1A00' +
'612000CF');
end;

// srl function, edited the WriteLn out
function FindVarrockRoadColor2: Integer;
var
GC, a, l, TestColor, Red, Green, Blue : integer;
var
P:array of Tpoint;
begin
GC := 7304312;
Flag;
FindColorsSpiralTolerance(x, y, P, GC, MMX1, MMY1, MMX2, MMY2, 60);
l:=GetArrayLength(P);
for a:= 0 to l-1 do
begin
TestColor := GetColor(P[a].x, P[a].y);
red := (TestColor mod 256);
green := ((TestColor / 256) mod 256);
blue := ((TestColor / 256) / 256);
if Red - Blue <= 12 then if Red - Blue >= 8 then
if Red - Green <= 6 then if Red - Green >= -1 then
if Green - Blue <= 10 then if Green - Blue >= 4 then
if GetColor(P[a].x + 5, P[a].y + 5) = TestColor then
if GetColor(P[a].x + 3, P[a].y + 3) = TestColor then
if GetColor(P[a].x, P[a].y + 5) = TestColor then
if GetColor(P[a].x + 5, P[a].y) = TestColor then
if GetColor(P[a].x, P[a].y + 3) = TestColor then
if GetColor(P[a].x + 3, P[a].y) = TestColor then
if GetColor(P[a].x + 5, P[a].y + 3) = TestColor then
if GetColor(P[a].x + 3, P[a].y + 5) = TestColor then
begin
Result := TestColor;
Exit;
end;
end;
WriteLn('Could not find Varrock Road Color!');
Result := 0;
end;

function FindStoneColor2: Integer;
var
GC, a, l, TestColor: integer;
var
P:array of Tpoint;
begin
GC := 3561615;
Flag;
FindColorsSpiralTolerance(MMCX, MMCY, P, GC, MMX1,MMY1,MMX2,MMY2, 60);
l:=GetArrayLength(P);
for a:= 0 to l-1 do
begin
TestColor := GetColor(P[a].x,P[a].y);
if (GetColor(P[a].x-1,P[a].y)=TestColor-527120) then
begin
Result := TestColor;
Status('#Stone Color = ' + IntToStr(TestColor) + '.');
Exit;
end;
end;
Status('#Not found stone color.');
Result := 0;
end;

Function TheResponder: boolean;
var
I, II, Rand, CurTime: Integer;
Text, Name, MakeRespond: String;
TextP: TPoint;
Awnser: TStringArray;
begin
CurTime := GetSystemTime;
If (CurTime - SetTime < 20000) Then Exit;
For I := 8 DownTo 4 Do
Begin
TextP := TextCoords(I);
If findcolor(x, y, 16711680, TextP.x, TextP.y, TextP.x + 200, TextP.y + 14) Then
Begin
Text := LowerCase(Trim(GetTextAtEx(x - 3, textp.y - 2, 0, SmallChars, False, False, -1, 1, 16711680, 60, False, tr_allChars)));
If (Text = LastRespond) Then
Exit;
LastRespond := Text;
Name := GetBlackText(I);
If (Pos(Players[CurrentPlayer].nick, Name) <> 0) then Exit;
Break;
End;
If (I = 4) Then Exit;
End;
If (Pos(Players[CurrentPlayer].Nick, Text) <> 0) Then
Begin
If (Pos('nice', Text) <> 0) Or (Pos('cool', Text) <> 0) Then
Begin
Awnser := ['thanks', ':)', 'tnx', 'ur cool to'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('friends', Text) <> 0) Then
Begin
Awnser := ['no', 'no way', 'sorry my list is full', 'no sorry'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('macro', Text) <> 0) Or (Pos('bot', Text) <> 0) Or (Pos('auto', Text) <> 0) Then
Begin
Awnser := ['lol im not!', 'why?', 'no way', 'not me', 'dream on', 'nah'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
Begin
Awnser := ['no, im bussy', 'go away plz', 'leave me alone', 'im bussy'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End;
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
TypeSend(MakeRespond);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + MakeRespond);
Responds := Responds + 1;
ReportVars[2] := ReportVars[2] + 1;
Result := True;
SetTime := GetSystemTime;
exit;
End;
If (Pos('mining', Text) <> 0) Then
Begin
If (Pos('my mining level is', Text) <> 0) Or (Pos('m mining ore', Text) <> 0) Then
Begin
Awnser := ['gratz', ':)', 'kewl', 'cool'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('what is your level in mining', Text) <> 0) Then
Begin
Awnser := [IntToStr(Players[CurrentPlayer].integers[1]), 'me ' + IntToStr(Players[CurrentPlayer].integers[1]), 'My Mining level is '+ IntToStr(Players[CurrentPlayer].integers[1]) + '.'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('what ore are you mining', Text) <> 0) Then
Begin
Awnser := ['iron', 'iron ore'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
If (Pos('s a good place for me', Text) <> 0) Then
Begin
Awnser := ['here', 'what about here', 'here i guess', 'here?'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End Else
Begin
Awnser := [IntToStr(Players[CurrentPlayer].integers[1]), 'me ' + IntToStr(Players[CurrentPlayer].integers[1]), 'My Mining level is '+ IntToStr(Players[CurrentPlayer].integers[1]) + '.'];
I := random(High(Awnser));
MakeRespond := Awnser[I];
End;
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
TypeSend(MakeRespond);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + MakeRespond);
Responds := Responds + 1;
ReportVars[2] := ReportVars[2] + 1;
Result := True;
SetTime := GetSystemTime;
exit;
End;
For I := 0 To HowManyResponds - 1 Do
begin
For II := 0 To High(TheQuestion[I]) Do
begin
If (Pos(TheQuestion[I][II], Text) <> 0) then
begin
WriteLn('Respond:');
WriteLn('/ ' + Name + ' ' + Text);
Rand := Random(High(TheRespond[I]));
TypeSend(TheRespond[I][Rand]);
WriteLn('/ ' + Players[CurrentPlayer].Name + ': ' + TheRespond[I][Rand]);
Responds := Responds + 1;
ReportVars[2] := ReportVars[2] + 1;
Result := True;
SetTime := GetSystemTime;
exit;
end;
end;
end;
end;

Procedure Randoms;
begin
FindNormalRandoms;
if FindFight then
begin
MakeCompass('n');
mouse(630, 154, 5, 5, True);
fflag(0);
SleepAndMoveMouse(15000+random(5000));
Mouse(630, 15, 5, 5, True);
SleepAndMoveMouse(2000 + random(2000));
fflag(0);
end;
end;

Function NumberOfActive(WriteLin: boolean): Integer;
var
R: Integer;
begin
Result := 0;
for R := 0 To HowManyPlayers - 1 do
if (Players[R].active = True) then
Result := Result + 1;
If WriteLin Then
If (Result = 0) Then WriteLn('No More Players Active.')
Else WriteLn('Still ' + IntToStr(Result) + ' players of the ' + IntToStr(howManyPlayers) + ' players are active.');
end;

Procedure WieldPickaxe;
var
rx, ry: Integer;
begin
Wielded := False;
Status('$Pickaxe wield check.');
If (Players[CurrentPlayer].Integers[4] < 1) Then
Players[CurrentPlayer].Integers[4] := GetSkillInfo('attack', False);
Gametab(4);
Wait(500 + random(500));
if FindDTM(PickaxeD, rx, ry, 525, 182, 745, 473) then
begin
case Players[CurrentPlayer].strings[0] of
'Rune': begin
If (Players[CurrentPlayer].Integers[4] > 39) then
begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
end;
'Addy': begin
If (Players[CurrentPlayer].Integers[4] > 29) then
begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
end;
'Mith': begin
If (Players[CurrentPlayer].Integers[4] > 19) then
begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
end;
'Steel': begin
If (Players[CurrentPlayer].Integers[4] > 4) then
begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
end;
'Iron': begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
'Bronz': begin
Mouse(rx, ry, 0, 0, True);
Wielded := True;
end;
end;
If Wielded Then
Begin
WriteLn('Your strong enough to wield your pickaxe... Wielded.');
Status('#Pickaxe wieled');
End;
end;
end;

Function MasterRoadWalk(TheColor, StartRadial, EndRadial, Radius, Xmod, Ymod: Integer; FailWait: Boolean): Boolean; // BETA
Var
ResultTPA: TPointArray;
Begin
If RadialWalkEx(ResultTPA, MMCX, MMCY, TheColor, 0, StartRadial, EndRadial, Radius) Then
Begin
Mouse(ResultTPA[0].x, ResultTPA[0].y, Xmod, Ymod, True);
If FailWait Then
Begin
Wait(4000);
FFlag(20);
End Else
Begin
SleepAndMoveMouse(Random(2000));
Wait(2000 + Random(2000));
End;
Result := True;
End;
End;

Function GetPickAxe: Integer;
Var
MK: Integer;
Begin
Result := 0;
For MK := 1 To 6 Do
Begin
If FindDTM(PickaxeDTM[MK], x, y, 532, 183, 751, 485) Then
Begin
Result := MK;
Exit;
End;
End;
End;

Function SetupPick(PickaxeNumber: Integer): Boolean;
Begin
Case PickaxeNumber Of
0: Exit;
1: Begin
RockWaitTime := 4000;
Players[CurrentPlayer].Strings[0] := 'Rune';
End;
2: Begin
RockWaitTime := 5000;
Players[CurrentPlayer].Strings[0] := 'Addy';
End;
3: Begin
RockWaitTime := 6000;
Players[CurrentPlayer].Strings[0] := 'Mith';
End;
4: Begin
RockWaitTime := 7000;
Players[CurrentPlayer].Strings[0] := 'Steel';
End;
5: Begin
RockWaitTime := 8000;
Players[CurrentPlayer].Strings[0] := 'Iron';
End;
6: Begin
RockWaitTime := 8000;
Players[CurrentPlayer].Strings[0] := 'Bronz';
End;
End;
Result := True;
WriteLn(Players[CurrentPlayer].Strings[0] + ' pickaxe found.');
End;

Procedure WhatPickaxeDoWeHave;
Begin
If Not LoggedIn Then Exit;
WriteLn('Checking your Pickaxe...');
Status('$Getting pickaxe status');
GameTab(4);
If Not SetupPick(GetPickaxe) Then
Begin
GameTab(5);
If Not SetupPick(GetPickaxe) Then
Begin
WriteLn('You do not have a pickaxe! Plz get a pickaxe to mine iron.');
Players[CurrentPlayer].Loc := 'No Pickaxe!';
LogOut;
End Else Wielded := True;
End Else WieldPickaxe;
End;

Function GetInMine: boolean;
Var
RockCoords: Array Of TPoint;
CheckCol: Integer;
Begin
WriteLn('prolly found the mine, try entering now...');
Status('$Entering VE mine');
FFlag(0);
CheckCol := FindStoneColor2;
If (CheckCol = 0) Then
Begin
If FindSymbol(x, y, 'mining spot') Then
Begin
Mouse(x, y, 2, 2, True);
Wait(2000);
FFlag(0);
CheckCol := FindStoneColor2;
If (CheckCol = 0) Then
Begin
WriteLn('Enterd the mine by using the symbol :(');
Exit;
End;
End;
End;
Begin
FindColorsSpiralTolerance(x, y, RockCoords, FindStoneColor2, MMX1, MMY1, MMX2, MMY2, 1);
If (High(RockCoords) > 0) Then
Begin
MiddleTPAEx(RockCoords, X, Y);
Mouse(x, y, 0, 0, True);
FFlag(0);
Status('#Walking in the mine');
WriteLn('succesfully enterd the mine.');
Result := True;
End Else
WriteLN('wieeeerd we lost it again.');
End;
End;

Procedure ToThaMine;
Var
RicksRoadWalk, TCol: Integer;
begin
Status('$Walking to the mine');
MakeCompass('N');
If Not LoggedIn Then Exit;
Players[CurrentPlayer].Loc := 'Moving To The Mine';
WriteLn('');
WriteLn('[To The Mine]');
WriteLn('');
WriteLn('Walking to the mine...');
If Not MasterRoadWalk(FindVarrockRoadColor2, 133, 20, 65, 3, 3, True) Then
Begin
WriteLn('Walking failsave!');
Mouse(670, 53, 5, 5, True); // this will never hapen.
SleepAndMoveMouse(3000 + Random(2000));
FFlag(10);
End;
RadialRoadWalk(FindVarrockRoadColor2, 133, 60, 65, 3, 3);
Repeat
RicksRoadWalk := RicksRoadWalk + 1;
If Not LoggedIn Then
Begin
WriteLn('player logged out while walking to the bank...');
Players[CurrentPlayer].Loc := 'Logged Out To Mine';
exit;
End;
If Not RadialRoadWalk(FindVarrockRoadColor2, 127, 228, 55, 1, 1) Then Break;
If (RicksRoadWalk > 2) Then
Begin
TCol := FindStoneColor2;
If (TCol > 0) Then
Begin
If FindColorTolerance (x, y, TCol, MMX1, MMY1, MMX2, MMY2, 1)
Or FindSymbol(x, y, 'mining spot') Then
If GetInMine Then Exit;
End Else
If FindSymbol(x, y, 'mining spot') Then
If GetInMine Then Exit;
End;
Until(RicksRoadWalk > 15)
WriteLn('We did not found the mine, logging out player.');
Status('#Player fucked up walking');
Players[CurrentPlayer].Loc := 'Not Found Mine';
LogOut;
end;

Function FindTheBank: Boolean;
Begin
If Not LoggedIn Then Exit;
FFlag(0);
//If FindDTM(bankers, x, y, MMX1, MMY1, MMX2, MMY2) Then
if DTMRotated(Bankers2, x, y, MMX1, MMY1, MMX2, MMY2) then
Begin
WriteLn('We have found the bankers DTM, entering bank...');
Status('$Moving inside the bank');
Mouse(x, y, 2, 2, True);
Result := True;
Wait(3000);
FFlag(0);
WriteLn('Welcome in the Varrock east bank.');
End;
End;

Procedure ToThaBank;
var
RRoadWalk: Integer;
begin
If Not LoggedIn Then Exit;
Players[CurrentPlayer].Loc := 'Moving To The Bank';
Status('$Walking back to bank');
WriteLn('');
WriteLn('[To The Bank]');
WriteLn('');
RadialRoadWalk(FindVarrockRoadColor2, 5, 50, 70, 1, 1);
Randoms;
Mouse(626, 21, 10, 10, True); // if you don't like this then eat shit.
FFlag(10);
RadialRoadWalk(FindVarrockRoadColor2, 337, 385, 65, 1, 1);
Randoms;
repeat
If Not LoggedIn then
begin
WriteLn('Player logged out while walking to the bank.');
Players[CurrentPlayer].Loc := 'Logged Out To Bank';
Exit;
end;
RadialRoadWalk(FindVarrockRoadColor2, 240, 380, 65, 1, 1);
Randoms;
RRoadWalk := RRoadWalk + 1;
If (RRoadWalk > 1) Then
if DTMRotated(Bankers2, x, y, MMX1, MMY1, MMX2, MMY2) then
If FindTheBank Then Exit;
until (RRoadWalk > 20)
WriteLn('Omg, can not find the bank! logging out...');
Status('#Player fucked up walking to bank');
Players[CurrentPlayer].Loc := 'Not Found The Bank';
LogOut;
end;

Function FindIron(var xr, yr: Integer): Boolean;
Var
RealIron, IronRock: Array Of TPoint;
CurPoint: TPoint;
TolSpeed, MK, xx, yy: Integer;
Begin
TolSpeed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(x, y, RealIron, 2832989, MSX1, MSY1, MSX2, MSY2, 6);
For MK := 0 To High(RealIron) Do
Begin
CurPoint := RealIron[MK];
FindColorsTolerance(IronRock, 1659234, CurPoint.X - 15, CurPoint.Y - 15, CurPoint.X + 15, CurPoint.Y + 15, 20);
If (High(IronRock) > 15) Then
Begin
MiddleTPAEx(IronRock, xx, yy);
MMouse(xx, yy, 0, 0);
If FindColorTolerance(x, y, 2832989, xx - 15, yy - 15, xx + 15, yy + 15, 6) Then
Begin
Wait(100 + Random(100));
If (Pos('ine', rs_getuptext) <> 0) Then
Begin
xr := xx; yr := yy;
Result := True;
Exit;
End;
End;
End;
End;
ColorToleranceSpeed(TolSpeed);
End;

Function CheckPickaxe: Boolean;
begin
If Wielded Then
GameTab(5) Else GameTab(4);
If FindDTM(PickaxeStick, x, y, 532, 183, 751, 485) Then
Begin
WriteLn('Noes! your pickhead flyd off!');
Status('[error] no pickaxe head');
Wielding := Wielded;
If Not FindPick Then
Begin
Result := True;
WriteLn('We lost your pickaxe head... moving back to bank...');
Status('[error] pickaxe head lost');
GameTab(5);
Mouse(584, 302, 10, 10, True);
Wielded := False;
Exit;
End;
End;
If FindDTM(BrokenPickaxe, x, y, 532, 183, 751, 485) Then
Begin
Result := True;
WriteLn('Sorry, but ' + Players[CurrentPlayer].Nick + ' broke your pickaxe, not MasterKills foult ;)');
WriteLn('Moving back to the bank...');
Status('[error] broken pickaxe');
GameTab(5);
Mouse(584, 302, 10, 10, True);
Wielded := False;
Exit;
End;
If Not FindDTM(PickaxeD, x, y, 532, 183, 751, 485) Then
Begin
Result := True;
WriteLn('We cant find your pickaxe at all! Back to bank...');
Status('[error] no pickaxe');
Wielded := False;
End;
End;

Procedure MineThaLoad;
Var
NotF, errF, RWTime: Integer;
BlackText: String;
begin
If Not LoggedIn Then Exit;
Players[CurrentPlayer].Loc := 'Mining Full Load';
LastRespond := '';
WriteLn('');
WriteLn('[MineThaLoad]');
WriteLn('');
FindPickHeadColor;
Status('$Mining full load');
SetRun(true);
WriteLn('Run activated.');
WriteLn('Starting mining...');
Repeat
If Not LoggedIn Then Exit;
If FindIron(x, y) Then
begin
Status('#Found Iron $Mining rock');
Mouse(x, y, 0, 0, True);
MarkTime(RWTime);
NotF := 0;
TheResponder;
SleepAndMoveMouse(1500);
If FlagPresent Then Wait(1000);
Repeat
BlackText := GetBlackChatMessage;
if (getcolor(471, 383) = 0) then
if FindNpcChatText('ickaxe', Nothing) then
If CheckPickaxe Then Exit;
If FindGas(x, y) then
begin
Mouse(633, 83, 8, 8, True);
SleepAndMoveMouse(25000);
end;
Randoms;
If (Pos('anage', BlackText) <> 0) or (Pos('vailable', BlackText) <> 0) then break;
SleepAndMoveMouse(200 + random(1000));
Until(TimeFromMark(RWTime) > RockWaitTime)
end else
begin
Wait(300);
Randoms;
NotF := NotF + 1;
Status('#Not Found Iron ' + IntToStr(NotF) + '/15');
If (NotF > 14) Then
Begin
errF := errF + 1;
If (errF > 4) Then
Begin
WriteLn('huh the script can not find any iron, while were in the mine...');
Exit;
End;
WriteLn('Not found any iron, try to find the mine again...');
If Not GetInMine Then
Begin
WriteLn('O dear, we got lost while mining... How wierd is that?');
Players[CurrentPlayer].Loc := 'Lost While Mining';
LogOut;
Exit;
End;
Status('#Mine found $Starting mining');
WriteLn('Resume mining...');
NotF := 0;
End;
End;
Until InvFull
WriteLn('... until where full.');
End;

Function CurrentStatus: String;
var
MK, PlayerCount: Integer;
begin
for MK := 0 To HowManyPlayers - 1 do
if (Players[MK].active = True) then
PlayerCount := PlayerCount + 1;
IF (PlayerCount = 0) then
Result := 'Script succesfully ended. All players False.' else
Result := 'there still where ' + IntToStr(PlayerCount) + ' of the ' + IntToStr(HowManyPlayers) + ' players active.';
end;

Procedure SafeReport;
var
SaveFileCreate: TStringList;
MK: Integer;
begin
SaveFileCreate := TStringList.Create;
SaveFileCreate.Add('Varrock east mine and banker version 14.0');
SaveFileCreate.Add(' created by MasterKill');
SaveFileCreate.Add('');
SaveFileCreate.Add('Last status found in script:');
SaveFileCreate.Add(' ' + CurrentStatus);
SaveFileCreate.Add('');
SaveFileCreate.Add('Script Report:');
SaveFileCreate.Add(' Time Running : ' + TimeRunning);
SaveFileCreate.Add(' Iron Mined : ' + IntToStr(IronMined));
SaveFileCreate.Add(' Times Banked : ' + IntToStr(Banked));
SaveFileCreate.Add(' Responds Made : ' + IntToStr(Responds));
SaveFileCreate.Add('');
SaveFileCreate.Add('Player Report:');
For MK := 0 To HowManyPlayers - 1 Do
begin
SaveFileCreate.Add(' ' + Players[MK].Name);
SaveFileCreate.Add(' Iron Mined : ' + IntToStr(Players[MK].integers[2]));
SaveFileCreate.Add(' Location : ' + Players[MK].Loc);
SaveFileCreate.Add(' Mining level : ' + IntToStr(Players[MK].integers[1]));
SaveFileCreate.Add('');
end;
SaveFileCreate.Add('Respond That Are Made:');
SaveFileCreate.Add('');
Try
For MK := 0 To getarraylength(RespondsList) - 1 Do
SaveFileCreate.Add(RespondsList[MK]);
Except
WriteLn('Could not save the responds...');
End;
If Not SaveToFile(SaveFileCreate, SafeReportFileName) Then
WriteLn('Could not save your report.');
end;


Procedure WhileReport;
Var
MK: Integer;
begin
WriteLn('');
WriteLn('[Time Running: ' + TimeRunning + ']');
WriteLn('[Iron Mined: ' + IntToStr(IronMined) + ']');
WriteLn('[Times Banked: ' + IntToStr(Banks) + ']');
WriteLn('[Respond[s] made: ' + IntToStr(Responds) + ']');
WriteLn('[Mining ' + FloatToStr(IronMined div TimeFromMark(ScriptRunTime) * 3600000.0) + ' Iron a hour]');
For MK := 0 To HowManyPlayers - 1 Do
WriteLn(Players[MK].Name + ' = [' + IntToSTr(players[MK].integers[2]) + ' Iron Mined] [active? ' + BoolToStr(Players[MK].Active) + '] [Location: ' + Players[MK].Loc + ']');
SrlRandomsReport;
SafeReport;
WriteLn('Progress report saved to: ' + SafeReportFileName);
end;

Function FindThaBankTPA: boolean;
Var
BankCoords, BoothCoords: Array Of TPoint;
MK, mx, my, TolSpeed, NumberOfLenght: Integer;
DaPoint: TPoint;
begin
TolSpeed := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(mx, my, BankCoords, 1593183, MSX1, MSY1, MSX2, MSY2, 6);
NumberOfLenght := High(BankCoords);
For MK := 1 To NumberOfLenght Do
begin
DaPoint := BankCoords[MK];
FindColorsTolerance(BoothCoords, 1593183, DaPoint.X - 15, DaPoint.Y - 15, DaPoint.X + 15, DaPoint.Y + 15, 11);
If(GetArrayLength(BoothCoords)-1 > 30)Then
Begin
MiddleTPAEx(BoothCoords, x, y);
Mouse(x, y, 0, 0, False);
Wait(100 + Random(50));
If ChooseOption('uick') Then
Begin
Result := True;
Break;
End Else WriteLn('No bank booth here.');
End;
End;
ColorToleranceSpeed(TolSpeed);
End;

Function PickaxeFound: Boolean;
Begin
If Wielded Then Result := True Else
Result := FindDTM(PickaxeD, x, y, MIX1, MIY1, MIX2, MIY2);
End;

Function GetNewPickFromBank: Boolean;
Begin
If (Players[CurrentPlayer].Integers[1] > 40) then
begin
if FindDTM(PickaxeDTM[1], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
end;
If (Players[CurrentPlayer].Integers[1] > 30) then
begin
if FindDTM(PickaxeDTM[2], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
end;
If (Players[CurrentPlayer].Integers[1] > 20) then
begin
if FindDTM(PickaxeDTM[3], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
end;
If (Players[CurrentPlayer].Integers[1] > 5) then
begin
if FindDTM(PickaxeDTM[4], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
end;
if FindDTM(PickaxeDTM[5], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
if FindDTM(PickaxeDTM[6], x, y, msx1, msy1, msx2, msy2) then
begin
Result := True;
Mouse(x, y, 0, 0, True);
Exit;
end;
End;

Procedure SetupPlayer;
begin
If Not LoggedIn Then Exit;
WriteLn('');
WriteLn('[' + Players[CurrentPlayer].name + ' setup]');
WriteLn('');
SetAngle(True);
MakeCompass('N');
GameTab(2);
Players[CurrentPlayer].integers[1] := GetSkillInfo('mining', False);
WriteLn('Players mining level is ' + IntToStr(Players[CurrentPlayer].integers[1]));
If (Players[CurrentPlayer].Integers[3] < 1) Then
Players[CurrentPlayer].integers[3] := GetCombatLevel;
WriteLn('Players combat level is ' + IntToStr(Players[CurrentPlayer].Integers[3]));
WhatPickaxeDoWeHave;
SetupResponds;
end;

Procedure BankThaLoad;
Var
IronLoad, NotF: integer;
noobarray: TPointArray;
begin
If Not LoggedIn Then Exit;
WriteLn('');
WriteLn('[Bank The Load]');
WriteLn('');
Players[CurrentPlayer].Loc := 'In The Bank';
noobarray := ItemCoordinates('inv', 'dtm', IronOre, [0]);
IronLoad := getarraylength(noobarray);
Repeat
If Not LoggedIn Then
begin
WriteLn('Player logged out while banking?!');
Players[CurrentPlayer].Loc := 'Logged Out While Banking';
Exit;
end;
If FindThaBankTPA Then
begin
WriteLn('Opening the bank...');
FFlag(0);
players[CurrentPlayer].integers[2] := players[CurrentPlayer].integers[2] + IronLoad;
IronMined := IronMined + IronLoad;
WriteLn('Mined ' + IntToStr(IronLoad) + ' Iron, wich makes the grand total ' + IntToStr(IronMined) + '.');
ReportVars[0] := ReportVars[0] + 1;
ReportVars[1] := ReportVars[1] + IronLoad;
Wait(1000 + Random(1000));
If FindDTM(BrokenPickaxe, x, y, MIX1, MIY1, MIX2, MIY2)
Or FindDTM(pickaxestick, x, y, MIX1, MIY1, MIX2, MIY2)
Or Not PickaxeFound then
Begin
WriteLn('Your pickaxe is dead, looking for a new one...');
Deposit(1, 28, True);
If GetNewPickFromBank Then
Begin
WriteLn('We got a new pickaxe from your bank, lukky bastard.');
Mouse(RandomRange(483, 495), RandomRange(29, 41), 0, 0, True);
WhatPickaxeDoWeHave;
End Else
Begin
WriteLn('This player has runned out of pickaxes... WHEHE!');
Players[CurrentPlayer].Loc := 'Out Of PickAxes';
Mouse(RandomRange(483, 495), RandomRange(29, 41), 0, 0, True);
LogOut;
Exit;
End;
End Else
Begin
WriteLn('Banking all stuff except for your pickaxe.');
If Wielded Then Deposit(1, 28, True) else Deposit(2, 28, True);
Mouse(RandomRange(483, 495), RandomRange(29, 41), 0, 0, True);
End;
SetAngle(true);
Banked := Banked + 1;
WriteLn('banking succesfully completed.');
Banks := Banks + 1;
Wait(100 + Random(50));
MakeCompass('N');
Exit;
end else
begin
FFlag(0);
If FindDTM(bankers, x, y, 547, 6, 703, 163) Then
Begin
Mouse(x, y, 0, 0, True);
SleepAndMoveMouse(500 + Random(1000));
FFlag(0);
End Else
Begin
NotF := NotF + 1;
SleepAndMoveMouse(2000 + Random(1000));
If (NotF > 1) Then
Begin
WriteLn('We can not find the bank anymore. Player logout...');
Players[CurrentPlayer].Loc := 'Lost Around Bank';
LogOut;
Exit;
End;
End;
end;
Until False
end;

Function GetSafeReportFilePath: String;
Var
Hour, Mins, Sec, MSec, Year, Month, Day: Word;
M: String;
Begin
DecodeDate(Date, Year, Month, Day);
DecodeTime(Now, Hour, Mins, Sec, MSec);
case Month of
1: M := 'Jan-';
2: M := 'Feb-';
3: M := 'Mar-';
4: M := 'Apr-';
5: M := 'May-';
6: M := 'Jun-';
7: M := 'Jul-';
8: M := 'Aug-';
9: M := 'Sep-';
10: M := 'Oct-';
11: M := 'Nov-';
12: M := 'Dec-';
end;
Result := AppPath + 'MasterKill_Progress_Reports\IronMiner__' + IntToStr(Day) + '-' + M + IntToStr(Year) + '__' + Padz(IntToStr(Hour), 2) + '-' + Padz(IntToStr(Mins), 2) + '-' + Padz(IntToStr(Sec), 2) + '.txt';
End;

procedure StartUp;
begin
ClearDeBug;
WriteLn('MasterKill prezents: ');
WriteLn(' ___ __ ');
WriteLn('| |_______ ____ ____ _____ |__| ____ _____ _______ ©');
WriteLn('| |\_ __ \ / \ / \ / \ | | / \ / __ \\_ __ \ ');
WriteLn('| | | | \/( () )| | \ | \| || | \\ ___/ | | \/ ');
WriteLn('|___| |__| \____/ |___| / |__|_| /|__||___| / \___ \ |__| ');
WriteLn(' \/ \/ \/ \/ ');
WriteLn(' and banker! V15');
Status('MasterKill productions! ©');
disguise('MasterKill ©');
Wait(3000);
SafeReportFileName := GetSafeReportFilePath;
RespondsList := TStringList.Create;
SetTime := GetSystemTime;
for I := 0 to getarraylength(players)-1 do
begin
If (Players[I].Active = True) then
Players[I].Loc := 'In The Bank' else
Players[I].Loc := 'Not In Use';
//SetArrayLength(Players[I].integers, 5);
//SetArrayLength(Players[I].Strings, 1);
end;
end;

procedure HyperMainLoop;
begin
Repeat
ToThaMine;
MineThaLoad;
ToThaBank;
BankThaLoad;
WhileReport;
Load := Load + 1;
disguise('P: ' + IntToStr(NumberOfActive(False)) + '/' + IntToStr(getarraylength(players)) + ' Iron: ' + IntToStr(IronMined));
Until (Not LoggedIn) Or (Load - 1 > Players[CurrentPlayer].Integers[0])
end;

Procedure LogInFalseTrue;
begin
If Not LoggedIn then Players[CurrentPlayer].active := False;
If (NumberOfActive(False) = 0) then exit;
WriteLn('');
WriteLn('[Player Done]');
WriteLn('');
NextPlayer(LoggedIn);
Load := 0;
SetupPlayer;
end;

// Function Download is created by n3ss3s
Function Download(URL, WhereTo: String; Shared: Boolean): Boolean;
Var
theFile: Integer;
fileData: String;
Begin
theFile := ReWriteFile(WhereTo, Shared);
If theFile > -1 Then
Begin
fileData := GetPage(URL);
If fileData <> '' Then
If WriteFileString(theFile, fileData) Then
Result := True;
End;
End;

var
frmDesign : TForm;
Txt: Array [0..1] Of TLabel;
SRLStatz: Array [0..2] Of TLabel;
Labelz: Array [0..4] Of TLabel;
CurPlayerLabel, NumbPlayers, BProg: TLabel;
LBar: TProgressBar;
Stage, img: Integer;
MKBanner: TImage;
Start, DelPlayer, Next, Prev, VSite, SAExit, EResponds: TButton;
MusicLoop: TTimer;
EditBox: Array [0..2] Of TEdit;
SRLStats: Array [0..2]Of TEdit;
EditCombo: Array [0..1] Of TComboBox;
CurPlayer: Integer;
ReadyForStart, SaveIt: Boolean;
PlayerList, BestProggy: TListBox;

Procedure UpdateList;
Var
MK: Integer;
Begin
PlayerList.Clear;
For MK := 0 To getarraylength(players)-1 Do
PlayerList.Items.Add(IntToStr(MK) + ': ' + Players[MK].Name);
End;

Procedure GetPlayer(Sender: TObject);
Begin
Try
Players[CurPlayer].Name := EditBox[0].Text;
Players[CurPlayer].Nick := EditBox[1].Text;
Players[CurPlayer].Pass := EditBox[2].Text;
Players[CurPlayer].Integers[0] := StrToInt(EditCombo[0].Text);
Players[CurPlayer].Active := StrToBool(EditCombo[1].Text);
Except
ShowMessage('Plz finnish this player first, or delete it.');
Exit;
End;
CurPlayer := PlayerList.ItemIndex;
If (CurPlayer = 0) Then Prev.Enabled := False Else Prev.Enabled := True;
If (CurPlayer + 1 = HowManyPlayers) Then Next.Caption := 'Add Player' Else Next.Caption := '-->';
EditBox[0].Text := Players[CurPlayer].Name;
EditBox[1].Text := Players[CurPlayer].Nick;
EditBox[2].Text := Players[CurPlayer].Pass;
EditCombo[0].Text := IntToStr(Players[CurPlayer].Integers[0]);
EditCombo[1].Text := BoolToStr(Players[CurPlayer].Active);
CurPlayerLabel.Caption := 'Setup Player ' + IntToStr(CurPlayer) + ':';
UpdateList;
End;

Procedure StartClick(Sender: TObject);
Var
ActiveCount, MK: Integer;
Begin
Try
Players[CurPlayer].Name := EditBox[0].Text;
Players[CurPlayer].Nick := EditBox[1].Text;
Players[CurPlayer].Pass := EditBox[2].Text;
Players[CurPlayer].Integers[0] := StrToInt(EditCombo[0].Text);
Players[CurPlayer].Active := StrToBool(EditCombo[1].Text);
World := StrToInt(SRLStats[2].text);
Except
ShowMessage('Plz finnish this player first, or delete it.');
Exit;
End;
Case World Of
1, 3, 4, 5, 7, 8, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21, 25, 29, 30, 32, 33,
34, 35, 37, 38, 40, 41, 43, 47, 50, 51, 52, 55, 57, 61, 62, 63, 67, 68, 72,
73, 74, 75, 80, 81, 85, 86, 87, 90, 93, 94, 95, 96, 101, 102, 105, 106, 107,
108, 109, 113, 117, 118, 119, 123, 125, 126, 127, 128, 133, 134, 136, 141,
142, 149, 152, 153, 154, 155: WriteLn('Correct non-member world');
Else
Begin
ShowMessage('Wrong world, make sure it is non members');
Exit;
End;
End;
SRLid := SRLStats[0].text;
SRLPassword := SRLStats[1].text;
If (SRLid = '') Then
Begin
ShowMessage('You need a SRL ID and Password to run this script...');
ShowMessage('Go to "http://www.stats.srl-forums.com" and hit register.');
Exit;
End;
If (SRLPassword = '') Then
Begin
ShowMessage('You forgot your SRL Password!');
Exit;
End;
For MK := 0 To getarraylength(players)-1 Do
If Players[MK].Active Then
ActiveCount := ActiveCount + 1;
If (ActiveCount > 0) Then
Begin
frmDesign.ModalResult:= mrOk;
ReadyForStart := True;
End Else
ShowMessage('You need at least 1 active player to run the script');
UpdateList;
SaveIt := True;
End;

Procedure SetZero;
Begin
EditBox[0].Text := '';
EditBox[1].Text := '';
EditBox[2].Text := '';
EditCombo[0].Text := '';
EditCombo[1].Text := '';
End;

Procedure OpenForum(Sender: TObject);
Begin
OpenWebPage('http://www.villavu.com/forum/showthread.php?t=32786');
End;

Procedure LoadPlayers;
Var
MKload: TStringList;
MK, I: integer;
Begin
If FileExists(AppPath + 'MasterKill_Script_Includes\FormSaveFiles\IronMinerForm.txt') Then
Begin
MKload := TStringList.create;
Try
If LoadFromFile(MKload, AppPath + 'MasterKill_Script_Includes\FormSaveFiles\IronMinerForm.txt') then
Begin
HowManyPlayers := StrToInt(MKload.Strings[0]);
NumbPlayers.Caption := 'You Currently Have ' + IntToStr(HowManyPlayers) + ' Player[s].';
NumberOfPlayers(HowManyPlayers);
If (HowManyPlayers > 1) Then
Begin
Next.Caption := '-->';
DelPlayer.Enabled := True;
End;
For MK := 0 To getarraylength(players)-1 Do
Begin
SetArrayLength(Players[MK].integers, 5);
SetArrayLength(Players[MK].Strings, 1);
End;
SRLStats[0].Text := MKload.Strings[1];
SRLStats[1].Text := MKload.Strings[2];
SRLStats[2].Text := MKload.Strings[3];
For MK := 0 To HowManyPlayers -1 Do
Begin
I := 5 * MK;
Players[MK].Name := MKload.Strings[I + 4];
Players[MK].Nick := MKload.Strings[I + 5];
Players[MK].Pass := MKload.Strings[I + 6];
Players[MK].Integers[0] := StrToInt(MKload.Strings[I + 7]);
Players[MK].Active := StrToBool(MKload.Strings[I + 8]);
End;
EditBox[0].Text := Players[CurPlayer].Name;
EditBox[1].Text := Players[CurPlayer].Nick;
EditBox[2].Text := Players[CurPlayer].Pass;
EditCombo[0].Text := IntToStr(Players[CurPlayer].Integers[0]);
EditCombo[1].Text := BoolToStr(Players[CurPlayer].Active);
UpdateList;
End;
Finally
MKload.Free;
End;
End;
End;

Procedure SavePlayers;
Var
SaveFileCreate: TStringList;
MK: Integer;
Begin
SaveFileCreate := TStringList.Create;
SaveFileCreate.Add(IntToStr(HowManyPlayers));
SaveFileCreate.Add(SRLid);
SaveFileCreate.Add(SRLPassword);
SaveFileCreate.Add(IntToStr(World))
For MK := 0 To HowManyPlayers -1 Do
Begin
SaveFileCreate.Add(Players[MK].Name);
SaveFileCreate.Add(Players[MK].Nick);
SaveFileCreate.Add(Players[MK].Pass);
SaveFileCreate.Add(IntToStr(Players[MK].Integers[0]));
SaveFileCreate.Add(BoolToStr(Players[MK].Active));
End;
SaveToFile(SaveFileCreate, AppPath + 'MasterKill_Script_Includes\FormSaveFiles\IronMinerForm.txt');
End;

Procedure SaveAndExit(Sender: TObject);
Begin
Try
Players[CurPlayer].Name := EditBox[0].Text;
Players[CurPlayer].Nick := EditBox[1].Text;
Players[CurPlayer].Pass := EditBox[2].Text;
Players[CurPlayer].Integers[0] := StrToInt(EditCombo[0].Text);
Players[CurPlayer].Active := StrToBool(EditCombo[1].Text);
World := StrToInt(SRLStats[2].Text);
SRLid := SRLStats[0].text;
SRLPassword := SRLStats[1].text;
Except
ShowMessage('Plz finnish this player first, or delete it.');
Exit;
End;
SaveIt := True;
frmDesign.ModalResult:= mrOk;
End;

Procedure EditRespondsForm(Sender: TObject);
Begin
End;

Procedure DeletePlayer(Sender: TObject);
var
MK: Integer;
Begin
If ((CurPlayer + 1) = HowManyPlayers) Then
Begin
CurPlayer := CurPlayer - 1;
If (CurPlayer = 0) Then
Prev.Enabled := False;
HowManyPlayers := HowManyPlayers - 1;
NumberOfPlayers(HowManyPlayers);
If (HowManyPlayers < 2) Then
DelPlayer.Enabled := False;
CurPlayerLabel.Caption := 'Setup Player ' + IntToStr(CurPlayer) + ':';
End Else
Begin
If (CurPlayer + 2 = HowManyPlayers) Then
Begin
Players[CurPlayer].Name := Players[CurPlayer + 1].Name;
Players[CurPlayer].Nick := Players[CurPlayer + 1].Nick;
Players[CurPlayer].Pass := Players[CurPlayer + 1].Pass;
Players[CurPlayer].Integers[0] := Players[CurPlayer + 1].Integers[0];
Players[CurPlayer].Active := Players[CurPlayer + 1].Active;
End Else
Begin
For MK := CurPlayer To HowManyPlayers - 2 Do
Begin
Players[MK].Name := Players[MK + 1].Name;
Players[MK].Nick := Players[MK + 1].Nick;
Players[MK].Pass := Players[MK + 1].Pass;
Players[MK].Integers[0] := Players[MK + 1].Integers[0];
Players[MK].Active := Players[MK + 1].Active;
End;
End;
HowManyPlayers := HowManyPlayers - 1;
NumberOfPlayers(HowManyPlayers);
If (HowManyPlayers < 2) Then
DelPlayer.Enabled := False;
End;
NumbPlayers.Caption := 'You Currently Have ' + IntToStr(HowManyPlayers) + ' Player[s].';
EditBox[0].Text := Players[CurPlayer].Name;
EditBox[1].Text := Players[CurPlayer].Nick;
EditBox[2].Text := Players[CurPlayer].Pass;
EditCombo[0].Text := IntToStr(Players[CurPlayer].Integers[0]);
EditCombo[1].Text := BoolToStr(Players[CurPlayer].Active);
UpdateList;
End;

Procedure PrevPlayer(Sender: TObject);
Begin
Try
Players[CurPlayer].Name := EditBox[0].Text;
Players[CurPlayer].Nick := EditBox[1].Text;
Players[CurPlayer].Pass := EditBox[2].Text;
Players[CurPlayer].Integers[0] := StrToInt(EditCombo[0].Text);
Players[CurPlayer].Active := StrToBool(EditCombo[1].Text);
Except
ShowMessage('Plz finnish this player first, or delete it.');
Exit;
End;
Next.Caption := '-->';
CurPlayer := CurPlayer - 1;
CurPlayerLabel.Caption := 'Setup Player ' + IntToStr(CurPlayer) + ':';
EditBox[0].Text := Players[CurPlayer].Name;
EditBox[1].Text := Players[CurPlayer].Nick;
EditBox[2].Text := Players[CurPlayer].Pass;
EditCombo[0].Text := IntToStr(Players[CurPlayer].Integers[0]);
EditCombo[1].Text := BoolToStr(Players[CurPlayer].Active);
If (CurPlayer = 0) Then
Prev.Enabled := False;
UpdateList;
End;

// fucntion explode my by: A G E N T 83
function Explode(Delimiter : string; Str : string) : array of string;
var
DelimPos, i : integer;
Arr1 : array of string;
begin
SetArrayLength(Arr1, 100000);
i := 0;
repeat
if (pos(Delimiter, Str) = 0) then Break;
DelimPos := pos(Delimiter, Str);
Arr1[i] := Replace((copy(Str,0,DelimPos)),Delimiter,'');
Delete(Str,1,DelimPos);
i := i + 1;
until(pos(Delimiter, Str) = 0);
Arr1[i] := Str;
SetArrayLength(Arr1, i+1);
Result := Arr1;
end;

Procedure NextFormPlayer(Sender: TObject);
Var
MK: Integer;
Begin
Try
Players[CurPlayer].Name := EditBox[0].Text;
Players[CurPlayer].Nick := EditBox[1].Text;
Players[CurPlayer].Pass := EditBox[2].Text;
Players[CurPlayer].Integers[0] := StrToInt(EditCombo[0].Text);
Players[CurPlayer].Active := StrToBool(EditCombo[1].Text);
Except
ShowMessage('Plz finnish this player first, or delete it.');
Exit;
End;
Prev.Enabled := True;
If ((CurPlayer + 1) = HowManyPlayers) Then
Begin
HowManyPlayers := HowManyPlayers + 1;
NumberOfPlayers(HowManyPlayers);
CurPlayer := CurPlayer + 1;
CurPlayerLabel.Caption := 'Setup Player ' + IntToStr(CurPlayer) + ':';
NumbPlayers.Caption := 'You Currently Have ' + IntToStr(HowManyPlayers) + ' Player[s].';
For MK := 0 To getarraylength(players)-1 Do
Begin
SetArrayLength(Players[MK].integers, 5);
SetArrayLength(Players[MK].Strings, 1);
End;
SetZero;
End Else
Begin
CurPlayer := CurPlayer + 1;
CurPlayerLabel.Caption := 'Setup Player ' + IntToStr(CurPlayer) + ':';
EditBox[0].Text := Players[CurPlayer].Name;
EditBox[1].Text := Players[CurPlayer].Nick;
EditBox[2].Text := Players[CurPlayer].Pass;
EditCombo[0].Text := IntToStr(Players[CurPlayer].Integers[0]);
EditCombo[1].Text := BoolToStr(Players[CurPlayer].Active);
If ((CurPlayer + 1) = HowManyPlayers) Then
Next.Caption := 'Add Player';
End;
DelPlayer.Enabled := True;
UpdateList;
End;

Procedure PlayMusic(Sender: TObject);
Begin
PlaySound(AppPath + 'MasterKill_Script_Includes\MasterKillLoopSound.wav');
End;

procedure InitForm;
Var
MK, b, w, h: Integer;
BestProgString: String;
Proggy: TStringArray;
begin
Case Stage Of
1: Begin
frmDesign := CreateForm;
frmDesign.Left := 259;
frmDesign.Top := 132;
frmDesign.Width := 400;
frmDesign.Height := 100;
frmDesign.Caption := 'MasterKills Includes Download';
frmDesign.Color := clBtnFace;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
For MK := 0 To 1 Do
Begin
Txt[MK] := TLabel.Create(FrmDesign);
Txt[MK].Parent := FrmDesign;
Txt[MK].Left := 5;
Txt[MK].Top := 5 + 20 * MK;
End;
LBar := TProgressBar.Create(FrmDesign);
LBar.Parent := FrmDesign;
LBar.Left := 2;
LBar.Top := 46;
LBar.Width := 388;
LBar.Height := 20;
LBar.Min := 0;
LBar.Max := 100;
end;
2: Begin
frmDesign := CreateForm;
frmDesign.Left := 259;
frmDesign.Top := 132;
frmDesign.Width := 530;
frmDesign.Height := 556;
frmDesign.Caption := 'MasterKills Player Setup';
frmDesign.Color := clBtnFace;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
frmDesign.VertScrollBar.Visible := False;
frmDesign.HorzScrollBar.Visible := False;
MKBanner := TImage.Create(FrmDesign);
MKBanner.Parent := FrmDesign;
MKBanner.Top := 0;
MKBanner.Left := 0;
MKBanner.Width := 522;
MKBanner.Height := 524;
b := loadbitmap(AppPath + 'MasterKill_Script_Includes\MKBackGround.bmp');
getbitmapsize(b, w, h);
copycanvas(getbitmapcanvas(b), MKBanner.canvas, 0, 0, w, h, 0, 0, w, h);
Start := TButton.Create(FrmDesign);
Start.Parent := FrmDesign;
Start.Left := 8;
Start.Top := 487;
Start.Width := 100;
Start.Height := 30;
Start.OnClick := @StartClick;
Start.Caption := 'Start Script';
Start.Enabled := True;
Start.TabOrder := 12;
For MK := 0 To 2 Do
Begin
EditBox[MK] := TEdit.Create(FrmDesign);
EditBox[MK].Parent := FrmDesign;
EditBox[MK].Left := 150;
EditBox[MK].Top := 150 + 30 * MK;
EditBox[MK].Height := 20;
EditBox[MK].Width := 100;
EditBox[MK].TabOrder := 1 + MK;
End;
EditBox[2].passwordchar := '*';
EditBox[1].MaxLength := 4;
For MK := 0 To 1 Do
Begin
EditCombo[MK] := TComboBox.Create(FrmDesign);
EditCombo[MK].Parent := FrmDesign;
EditCombo[MK].Left := 150;
EditCombo[MK].Top := 240 + 30 * MK;
EditCombo[MK].Width := 100;
EditCombo[MK].TabOrder := 4 + MK;
End;
For MK := 0 To 2 Do
Begin
SRLStatz[MK] := TLabel.Create(FrmDesign);
SRLStatz[MK].Parent := FrmDesign;
SRLStatz[MK].Left := 395;
SRLStatz[MK].Top := 135 + 60 * MK;
SRLStats[MK] := TEdit.Create(FrmDesign);
SRLStats[MK].Parent := FrmDesign;
SRLStats[MK].Left := 395;
SRLStats[MK].Top := 150 + 60 * MK;
SRLStats[MK].Width := 100;
SRLStats[MK].Height := 20;
SRLStats[MK].TabOrder := 9 + MK;
End;
SRLStatz[2].Caption := 'What world to macro in?';
SRLStats[1].PasswordChar := '*';
SRLStatz[0].Caption := 'Your SRL ID';
SRLStatz[1].Caption := 'Your SRL password';
EditCombo[0].Items.Add('2');
EditCombo[0].Items.Add('3');
EditCombo[0].Items.Add('4');
EditCombo[0].Items.Add('5');
EditCombo[0].Items.Add('6');
EditCombo[1].Items.Add('True');
EditCombo[1].Items.Add('False');
EditCombo[0].MaxLength := 2;
For MK := 0 To 4 Do
Begin
Labelz[MK] := TLabel.Create(FrmDesign);
Labelz[MK].Parent := FrmDesign;
Labelz[MK].Top := 155 + 30 * MK;
Labelz[MK].Left := 20;
End;
Labelz[0].Caption := 'Full Player Name';
Labelz[1].Caption := '3/4 Chars Of Name';
Labelz[2].Caption := 'Player Password';
Labelz[3].Caption := 'Loads To Do Each Login';
Labelz[4].Caption := 'Use This Account?';
DelPlayer := TButton.Create(FrmDesign);
DelPlayer.Parent := FrmDesign;
DelPlayer.Caption := 'Delete this player';
DelPlayer.Top := 300;
DelPlayer.Left := 150;
DelPlayer.Width := 100;
DelPlayer.Height := 20;
DelPlayer.OnClick := @DeletePlayer;
DelPlayer.Enabled := False;
DelPlayer.TabOrder := 7;
Next := TButton.Create(FrmDesign);
Next.Parent := FrmDesign;
Next.Caption := 'Add Player';
Next.Top := 300;
Next.Left := 260;
Next.Width := 100;
Next.Height := 20;
Next.OnClick := @NextFormPlayer;
Next.Hint := 'Edit setting for next player OR add a player';
Next.Showhint := True;
Next.TabOrder := 6;
Prev := TButton.Create(FrmDesign);
Prev.Parent := FrmDesign;
Prev.Caption := '<--';
Prev.Top := 300;
Prev.Left := 40;
Prev.Width := 100;
Prev.Height := 20;
Prev.OnClick := @PrevPlayer;
Prev.Hint := 'Edit settings for previous player';
Prev.ShowHint := True;
Prev.Enabled := False;
Prev.TabOrder := 8;
SAExit := TButton.Create(FrmDesign);
SAExit.Parent := FrmDesign;
SAExit.Left := 413;
SAExit.Top := 487;
SAExit.Width := 100;
SAExit.Height := 30;
SAExit.Caption := 'Save and Exit';
SAExit.OnClick := @SaveAndExit;
SAExit.TabOrder := 15;
EResponds := TButton.Create(FrmDesign);
EResponds.Parent := FrmDesign;
EResponds.Left := 303;
EResponds.Top := 487;
EResponds.Width := 100;
EResponds.Height := 30;
EResponds.Caption := 'Edit Responds';
EResponds.OnClick := @EditRespondsForm;
EResponds.TabOrder := 14;
CurPlayerLabel := TLabel.Create(FrmDesign);
CurPlayerLabel.Parent := FrmDesign;
CurPlayerLabel.Top := 130;
CurPlayerLabel.Left := 150;
CurPlayerLabel.Caption := 'Setup Player 0:';
HowManyPlayers := 1;
CurPlayer := 0;
NumberOfPlayers(HowManyPlayers);
For MK := 0 To getarraylength(players)-1 Do
Begin
SetArrayLength(Players[MK].integers, 5);
SetArrayLength(Players[MK].Strings, 1);
End;
NumbPlayers := TLabel.Create(FrmDesign);
NumbPlayers.Parent := FrmDesign;
NumbPlayers.Left := 20;
NumbPlayers.Top := 100;
NumbPlayers.Caption := 'You Currently Have 1 Player.';
VSite := TButton.Create(FrmDesign);
VSite.Parent := FrmDesign;
VSite.Top := 487;
VSite.Left := 118;
VSite.Height := 30;
VSite.Width := 100;
VSite.Caption := 'View Site !';
VSite.OnClick := @OpenForum;
VSite.TabOrder := 13;
PlayerList := TListBox.Create(FrmDesign);
PlayerList.Parent := FrmDesign;
PlayerList.Left := 260;
PlayerList.Top := 150;
PlayerList.Width := 100;
PlayerList.Height := 140;
PlayerList.OnClick := @GetPlayer;
BestProggy := TListBox.Create(FrmDesign);
BestProggy.Parent := FrmDesign;
BestProggy.Left := 20;
BestProggy.Top := 355;
BestProggy.Width := 480;
BestProggy.Height := 120;
BestProggy.Font.Name := 'Courier New';
BestProggy.Font.Size := 10;
BestProgString := GetPage('http://www.freewebs.com/srlfiles/BestProggy.txt');
Proggy := Explode('$', BestProgString);
For MK := 0 To High(Proggy) Do
BestProggy.Items.Add(Proggy[MK]);
BProg := TLabel.Create(FrmDesign);
BProg.Parent := FrmDesign;
BProg.Left := 20;
BProg.Top := 340;
BProg.Caption := 'Best Progress report made with MasterKills Iron Mine And Banker:';
LoadPlayers;
MusicLoop := TTimer.Create(FrmDesign);
MusicLoop.INTERVAL := 13700;
MusicLoop.ENABLED := True;
MusicLoop.ONTIMER := @PlayMusic;
PlaySound(AppPath + 'MasterKill_Script_Includes\MasterKillStartSound.wav');
End;
end;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;

procedure ShowFormModal;
begin
If (Stage = 1) Then FrmDesign.Show Else frmDesign.ShowModal;
end;

procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;

Var
DownloadFiles_URL: Array [0..2] Of Array [0..2] Of String;

Procedure DownloadIncludes;
Var
MK: Integer;
ToWhere: String;
Downloaded: Boolean;
begin
Stage := 1;
Downloaded := False;
ClearDeBug;
SafeInitForm;
SafeShowFormModal;
ToWhere := AppPath + 'MasterKill_Script_Includes\';
DownLoadFiles_URL[0][0] := 'http://www.freewebs.com/srlfiles/MasterKillStartSound.wav';
DownloadFiles_URL[0][1] := ToWhere + 'MasterKillStartSound.wav';
DownLoadFiles_URL[1][0] := 'http://www.freewebs.com/srlfiles/MasterKillLoopSound.wav';
DownloadFiles_URL[1][1] := ToWhere + 'MasterKillLoopSound.wav';
DownloadFiles_URL[2][0] := 'http://www.freewebs.com/srlfiles/MKBackGround.bmp';
DownloadFiles_URL[2][1] := ToWhere + 'MKBackGround.bmp';
LBar.Position := 10;
For MK := 0 To 2 Do
Begin
If Not FileExists(DownloadFiles_URL[MK][1]) Then
Begin
Downloaded := True;
Txt[0].Caption := 'Downloading include ' + IntToStr(MK + 1) + ' of 3... (this might take some time) (only once)';
ClearDeBug;
WriteLn('Downloading include ' + IntToStr(MK + 1) + ' of 3... (this might take some time) (only once)');
WriteLn('');
WriteLn('Do NOT stop the script during this proces');
Txt[1].Caption := DownloadFiles_URL[MK][0];
If Not Download(DownloadFiles_URL[MK][0], DownloadFiles_URL[MK][1], True) Then
Begin
ClearDeBug;
WriteLn('COULD NOT DOWNLOAD THE INCLUDES');
WriteLn('');
WriteLn('* Go to scar > tools > options > fire wall settings > allways allow');
WriteLn('* Turn your firewall off for 5 mins.');
WriteLn('');
TerminateScript;
End;
LBar.Position := 36 + 26 * MK;
//CloseFile(DownloadFiles_URL[MK][1]);
End;
End;
LBar.Position := 90
Txt[0].Caption := 'All includes are downloaded on your pc.';
Txt[1].Caption := ToWhere;
Wait(4000);
LBar.Position := 100;
Wait(1000);
If Downloaded Then
Begin
Txt[1].Caption := '(!) Plz ReStart the script (!)'
Wait(15000);
WriteLn('Restart the script!'); WriteLn('');
TerminateScript;
End;
FrmDesign.Visible := False;
end;

Procedure SetupPlayersForm;
Begin
Stage := 2;
ReadyForStart := False;
SaveIt := False;
//GetSelf.Hide;
//MoveToTray;
SafeInitForm;
SafeShowFormModal;
//GetSelf.Show;
MusicLoop.ENABLED := False;
If SaveIt Then SavePlayers;
If Not ReadyForStart Then TerminateScript;
End;

Procedure Pasted_Bitches(bmp, x1, y1, x2, y2, xx1, yy1, xx2, yy2: Integer);
Var
old: Integer;
Begin
old := GetClientWindowHandle;
SetTargetDC(SmartGetDebugDC);
CopyCanvas(GetBitmapCanvas(bmp), GetClientCanvas, x1, y1, x2, y2, xx1, yy1, xx2, yy2);
SetTargetDC(old);
End;


{*******************************************************************************
procedure CopyClient;
By: Nava2 and Tootoot222
Description: Copies the client and puts the image of it onto the debug window
Usage: Press F12 to start copying, and press F11 to stop (you can start back
again by just pressing F12)
*******************************************************************************}
procedure CopyClient;
var
W, H, X, Y, T, bmp, MDot: Integer;
begin
try
T:= 500;
if (IsFKeyDown(12)) and (not (ShowingDebug)) then
begin
DisplayDebugImgWindow(766, 504);
ShowingDebug:= True;
Writeln('Showing Debug;');
end;
if ((IsFKeyDown(11)) and (ShowingDebug)) then
begin
ShowingDebug:= False;
Writeln('Not showing Debug;');
end;
if(ShowingDebug) then
begin
GetClientDimensions(w, h);
bmp := bitmapFromString(w, h, '');
CopyClientToBitmap(bmp, 0, 0, w, h);
MDot := BitmapFromString(9, 9, 'beNpjYPjPAEJo4D8qwhTH' +
'w8ZvAkIWCAbEXgAgCS7S');
SetTransparentColor(MDot, 0);
GetMousePos(x, y);
FastDrawTransparent(x - 5, y - 5, MDot, Bmp);
SafeCopyCanvas(GetBitmapCanvas(bmp), GetDebugCanvas, 0, 0, w, h, 0, 0, w, h);
end;
except
Writeln('Unable to copy canvas');
ShowingDebug:= False;
finally
ClearTimeouts;
if(not(GetSCARVersion = 320)) then
if(not(Round(T / 1000) < 1)) then
SetTimeout(Round(T / 1000), 'CopyClient')
else
SetTimeout(Round(T / 1000) + 1, 'CopyClient')
else
SetTimeout(T, 'CopyClient');
FreeBitMap(bmp);
FreeBitmap(MDot);
end;
end;

begin
//Setup
SetupSRL;
SetupDTM;
SetupPlayers;
//Startup, make ready
ScriptID := '275';
WriteLn('Plz allways allow popups');
SrlRandomsReport;
DownLoadIncludes;
SetupPlayersForm;
StartUp;
WriteLn('Loading RuneScape.SMART ... (world ' + IntToStr(World) + ')');
SmartSetupEx(world, True, True, False);
SetTargetDC(SmartGetDC);
ReplaceDebugLine(8, 'Loading RuneScape ...');
Wait(2000);
//Script play
SmartSetDebug(True);
Pasted_Bitches(MKLOGO, 0, 0, 60, 55, 0, 0, 60, 55);
SetTargetDC(SmartGetDC);
LoginPlayer;
MarkTime(ScriptRunTime);
SetupPlayer;
CopyClient;
Repeat
HyperMainLoop;
LogInFalseTrue;
Until(NumberOfActive(False) = 0)
ClearDeBug;
WhileReport;
WriteLn('');
end.

~Camo

Iron Man

2008-11-20 19:54:08

From: Camo Kyle
Pierre, here you go. Sorry for taking so long.

~Camo


Don't know if you want to be posting that in a non-junior section.


Looks nice, but I still only use munk's version. :)

Kyle Undefined

2008-11-20 21:42:47

No it's a Junior Member section. I made sure before I posted. But thanks for your concern ;)

~Camo

Nava2

2008-11-24 14:44:20

What was the point of posting it? :(

Glad people are using it though! :)

Nava2

2008-11-25 15:05:05

Reposted a new version, the old version liked to cause SCAR to crash. My apologies. The new version can be called with timeouts but it is not advised.

006786

2008-11-30 10:06:59

Added to it a bit :D

Constants:
  useCopyClient = true;  //True to use Munk's/Nava's CopyClient
Interval = 1; //Amount of time between CopyClients, in seconds, if useCopyClient is true
Times = 2500; //Amount of CopyClient calls, if useCopyClient is true

Procedures:
{*******************************************************************************
procedure CopyClient;
By: Nava2 and munk
Description: Copies the client and puts the image of it onto the debug window
Usage: Press F12 to start copying, and press F11 to stop (you can start back
again by just pressing F12)
*******************************************************************************}
procedure CopyClient;
var
X, Y, T, Bmp, MDot: Integer;
begin
try
T:= 1;
DisplayDebugImgWindow(766, 504);
bmp := bitmapFromString(766, 504, '');
CopyClientToBitmap(bmp, 0, 0, 766, 504);
MDot := BitmapFromString(9, 9, 'beNpjYPjPAEJo4D8qwhTH' +
'w8ZvAkIWCAbEXgAgCS7S');
SetTransparentColor(MDot, 0);
GetMousePos(x, y);
FastDrawTransparent(x - 5, y - 5, MDot, Bmp);
GetDebugCanvas.Brush.Color := clBlack;
GetDebugCanvas.Rectangle(0, 0, 766, 504);
SafeCopyCanvas(GetBitmapCanvas(bmp), GetDebugCanvas, 0, 0, 766, 504, 0, 0, 766, 504);
except
Writeln('Unable to copy canvas');
finally
FreeBitMap(bmp);
FreeBitmap(MDot);
end;
end;


procedure bobby;
begin
if (useCopyClient) then
begin
i:=0;
while i<Times*Interval do
begin
setTimeout(i, 'CopyClient');
i:=i+Interval;
end;
end;
end;


Just call bobby, and don't set times too high or interval too low.

NOTE:!!! IF YOU USE THIS, SET THE PRIORITY TO HIGH OR REAL TIME!

Nava2

2008-11-30 13:58:59

What did you do?

Btw, TimeOuts like to crash scar. Hence, why I removed them.

Nice to see some contributing though! :)

Work on the standards btw.

flaminhaz

2008-12-13 16:37:07

or you could just wait until smart comes up hit enable debug go on a different window for 10 -15 seconds and then switch back and you can look at it normally like you used to be able to.

Method

2008-12-13 19:12:49

From: flaminhaz
or you could just wait until smart comes up hit enable debug go on a different window for 10 -15 seconds and then switch back and you can look at it normally like you used to be able to.


The "Enable Debug" option allows you to paint over the canvas, not to look at SMART to see how a script is running.

Main

2008-12-17 04:29:46

If i recall correctly, you can watch it on vista by pressing alt-tab (you can select it, but DON'T RELEASE THE KEY which will open smart and fuck it up)



EDIT: link here
http://www.softpedia.com/get/System/OS-Enhancements/Vista-Transformation-Pack.shtml

I also posted on microsoft's fourm, hopefully they'll have something thats not thrid party
http://social.msdn.microsoft.com/Forums/en-US/whatforum/thread/a02a2b08-6dda-476f-8220-402add74c6c2

please be on the watch out of any important replies because am going to sleep:)

PoPC0rN

2008-12-29 01:39:17

I love you. :)

noidea

2008-12-29 01:47:20

From: PoPC0rN
I love you. :)


Lies…


Nava, do you think this should be closed, as the new SMART has arrarived?