Oh geez.. Just got home to see this :D
Uhh main update was really for reflection because we couldn't target it right.. I don't think SRL-6 has code for this smart yet.. but just in case anyone needs the code for it or wants to see how I did it then read on.. I wrote it a couple weeks ago.. Perhaps just change it however you want :S
Also includes wrappers for reflection and all smart functions so you don't need to specify a target at all. Basically the extra argument is hidden ;)
Can be found here:
https://github.com/Brandon-T/SRL-GLX/blob/master/Misc/Smart.simbaor below:
EDIT:I wrote the follow Snippet for grabbing the Java path on Windows. Can be used to grab the correct Java path automatically for OpenGL/DirectX modes and passed to Smart.
Function GetDirectoryName(Directory, Path: String): String;
var
I: Integer;
Directories: TStringArray;
Begin
Directories := GetDirectories(Path);
For I := 0 To High(Directories) Do
If {(Pos(Directory, Directories[I]) <> -1)} ExecRegExpr(Directory, Directories[I]) Then //Pos is broken.
Begin
Result := Directories[I];
Exit;
End;
End;
Function FindDirectory(Directory, Path: String): Boolean;
Begin
Result := Length(GetDirectoryName(Directory, Path)) > 0;
End;
Function GetJavaPath(Console: Boolean): String;
var
Drive: String;
CurrentPath: String;
Begin
Drive := Copy(PluginPath, 0, 3);
If (FindDirectory('Program\sFiles\s\(x86\)', Drive)) Then
Begin
CurrentPath := Drive + 'Program Files (x86)\';
End Else
CurrentPath := Drive + 'Program Files\';
If (FindDirectory('Java|java', CurrentPath + '\')) Then
Begin
CurrentPath := CurrentPath + 'Java\';
End Else
Begin
Writeln('Failed To Find Path: ' + CurrentPath + 'Java\');
Exit;
End;
Drive := GetDirectoryName('jre', CurrentPath);
If (Length(Drive) > 0) Then
Begin
If (Console) Then
CurrentPath := CurrentPath + Drive + '\bin\java.exe'
Else
CurrentPath := CurrentPath + Drive + '\bin\javaw.exe';
End Else
Begin
Drive := GetDirectoryName('jdk', CurrentPath);
If (Console) Then
CurrentPath := CurrentPath + Drive + 'jre\bin\java.exe'
Else
CurrentPath := CurrentPath + Drive + 'jre\bin\javaw.exe';
End;
If (FileExists(CurrentPath)) Then
Result := CurrentPath
Else
writeln('Failed To Find Java.exe or Javaw.exe. Please add ...\JRE\Bin to your PATH environment variable.');
End;
END EDIT;Smart.Simba:
{$DEFINE SMART}
{$loadlib libsmartremote}
{$include_once GLX/Internals.Simba} //For OnScriptTermination.
{$include_once GLX/Misc/Graphics.Simba} //For TMufasaBitmap drawing.
var
__Smart__Pointers: Array Of Pointer; //For my add on terminate crap. Holds Smart clients for freeing on script terminate.
type TSmart = record
__Target, __PID: Integer; //Target != PID. PID for identifying smarts. Target for targetting a specific applet and cleaning up.
__Width, __Height: Integer;
__ForceNew: Boolean;
__Graphics: TGraphics;
end;
Procedure TSmart.Create;
Begin
Self.Create(1024, 768, ['']);
End;
Procedure TSmart.Create(Width, Height: Integer; Plugins: TStringArray = []); overload;
Begin
Self.Create(Width, Height, 's', Plugins);
End;
Procedure TSmart.Create(Width, Height: Integer; InitSequence: String; Plugins: TStringArray = []); overload;
var
Params: TStringArray;
Begin
Self.__Width := Width;
Self.__Height := Height;
AddOnTerminate('__TSmartFreeAll');
If (Not Self.__ForceNew And Self.Pair()) then
Exit;
Params := self.GetParams();
If (Length(Params) <> 2) then
begin
Writeln('** Failed To Grab Smart Parameters **');
Writeln('** Please check your internet connection/firewall **');
TerminateScript;
Exit;
end;
Self.__Target := SmartSpawnClient('C:/Program Files (x86)/Java/jdk1.7.0_25/jre/bin/javaw.exe', Replace(PluginPath, '\', '/', [rfReplaceAll]), Params[0], ',' + Params[1], Width, Height, InitSequence, '', '', Implode(',', Plugins));
If (Self.__Target <> 0) Then
begin
try
Self.__PID := SmartGetClientPID(Self.__Target);
SetEIOSTarget('libsmartremote', ToStr(Self.__PID));
Writeln('Loading SMART: ' + Params[0] + Params[1]);
Self.__Graphics.Create(Width, Height, SmartDebugArray(Self.__Target));
Insert(@Self, __Smart__Pointers);
except
WriteLn('** Fatal Error: Pairing Clients; Terminating Script **');
SmartFreeClient(Self.__Target);
TerminateScript;
end;
end else
begin
Writeln('** Smart Cannot Spawn Clients **');
TerminateScript;
end;
End;
Function TSmart.Pair: Boolean;
var
I, Count: Integer;
Indices: TIntegerArray;
Begin
If ((Self.__Target <> 0) or (Self.__PID <> 0)) Then
Self.Free;
Indices := Self.GetPIDs(True);
Count := Length(Indices);
If (Count > 0) Then
For I:= 0 To Count - 1 Do
Begin
Self.__Target := SmartPairClient(Indices[I]);
If Self.__Target <> 0 then
begin
Self.__PID := Indices[I];
SetEIOSTarget('libsmartremote', ToStr(Self.__PID));
Writeln('Paired with SMART[' + ToStr(Self.__PID) + ']');
Self.__Graphics.Create(Self.__Width, Self.__Height, SmartDebugArray(Self.__Target));
Insert(@Self, __Smart__Pointers);
Result := True;
Exit;
end;
End;
End;
Procedure TSmart.Free;
Begin
SmartFreeClient(Self.__Target);
Self.__Target := 0;
Self.__Graphics.Free;
Self.__Height := 0;
Self.__Width := 0;
Self.__PID := 0;
Delete(Pointer(@Self), __Smart__Pointers);
End;
Function TSmart.GetParams: TStringArray;
var
Params: TStringArray;
Page: String;
Begin
Page := Between('<iframe id="game" src="', '"', GetPage('http://www.runescape.com/game.ws?j=1'));
Params := Explode(',', Page);
Result := Params;
End;
Function TSmart.GetPIDs(UnPaired: Boolean): TIntegerArray;
var
I, Count: Integer;
Begin
Count := SmartGetClients(UnPaired);
SetLength(Result, Count);
If (Count > 0) Then
For I:= 0 to Count - 1 do
Result[I] := SmartGetAvailablePID(I);
End;
Function TSmart.Width: Integer;
Begin
Result := Self.__Width;
End;
Function TSmart.Height: Integer;
Begin
Result := Self.__Height;
End;
Function TSmart.Graphics: TGraphics;
Begin
Result := Self.__Graphics;
End;
Function TSmart.ID: Integer;
Begin
Result := Self.__PID;
End;
Function TSmart.Target: Integer;
Begin
Result := Self.__Target;
End;
Procedure __TSmartFreeAll;
var
I: Integer;
begin
For I := 0 To High(__Smart__Pointers) Do
if (__Smart__Pointers[I] <> nil) then
Begin
SmartFreeClient(TSmart(__Smart__Pointers[I]^).__Target);
TSmart(__Smart__Pointers[I]^).__Target := 0;
TSmart(__Smart__Pointers[I]^).__Graphics.Free;
TSmart(__Smart__Pointers[I]^).__Height := 0;
TSmart(__Smart__Pointers[I]^).__Width := 0;
TSmart(__Smart__Pointers[I]^).__PID := 0;
End;
SetLength(__Smart__Pointers, 0);
end;
Function TSmart.ImageArray: Integer;
Begin
Result := SmartImageArray(Self.Target);
End;
Function TSmart.DebugArray: Integer;
Begin
Result := SmartDebugArray(Self.Target);
End;
Procedure TSmart.Destroy;
Begin
SmartFreeClient(Self.__Target);
SmartKillClient(Self.__PID);
Self.__Target := 0;
Self.__Graphics.Free;
Self.__Height := 0;
Self.__Width := 0;
Self.__PID := 0;
Delete(Pointer(@Self), __Smart__Pointers);
End;
{$IFDEF SmartWrappers}
Procedure TSmart.SetRefresh(Value: Integer);
Begin
SmartSetRefresh(Self.Target, Value);
End;
Function TSmart.GetRefresh: Integer;
Begin
Result := SmartGetRefresh(Self.Target);
End;
Procedure TSmart.SetTransparentColor(Colour: Integer);
Begin
SmartSetTransparentColor(Self.Target, Colour);
End;
Procedure TSmart.SetDebug(Enabled: Boolean);
Begin
SmartSetDebug(Self.Target, Enabled);
End;
Procedure TSmart.SetEnabled(Enabled: Boolean);
Begin
SmartSetEnabled(Self.Target, Enabled);
End;
Function TSmart.Active: Boolean;
Begin
Result := SmartActive(Self.Target);
End;
Function TSmart.Enabled: Boolean;
Begin
Result := SmartEnabled(Self.Target);
End;
Procedure TSmart.GetMousePos(var X, Y: Integer);
Begin
SmartGetMousePos(Self.Target, X, Y);
End;
Procedure TSmart.HoldMouse(X, Y: Integer; Left: Boolean);
Begin
SmartHoldMouse(Self.Target, X, Y, Left);
End;
Procedure TSmart.ReleaseMouse(X, Y: Integer; Left: Boolean);
Begin
SmartReleaseMouse(Self.Target, X, Y, Left);
End;
Procedure TSmart.HoldMousePlus(X, Y, Button: Integer);
Begin
SmartHoldMouse(Self.Target, X, Y, Button);
End;
Procedure TSmart.ReleaseMousePlus(X, Y, Button: Integer);
Begin
SmartReleaseMousePlus(Self.Target, X, Y, Button);
End;
Procedure TSmart.MoveMouse(X, Y: Integer);
Begin
SmartMoveMouse(Self.Target, X, Y);
End;
Procedure TSmart.WindMouse(X, Y);
Begin
SmartWindMouse(Self.Target, X, Y);
End;
Procedure TSmart.ClickMouse(X, Y: Integer; Left: Boolean);
Begin
SmartClickMouse(Self.Target, X, Y, Left);
End;
Procedure TSmart.ClickMousePlus(Self.Target, X, Y, Button: Integer);
Begin
SmartClickMousePlus(Self.Target, X, Y, Button);
End;
Procedure TSmart.IsMouseButtonHeld(Button: Integer);
Begin
SmartIsMouseButtonHeld(Self.Target, Button);
End;
Procedure TSmart.ScrollMouse(X, Y);
Begin
SmartScrollMouse(Self.Target, X, Y, 3);
End;
Procedure TSmart.SendKeys(Text: String; KeyWait, KeyMod: Integer);
Begin
SmartSendKeys(Self.Target, Text, KeyWait, KeyMod);
End;
Procedure TSmart.HoldKey(Code: Integer);
Begin
SmartHoldKey(Self.Target, Code);
End;
Procedure TSmart.ReleaseKey(Code: Integer);
Begin
SmartReleaseKey(Self.Target, Code);
End;
Function TSmart.IsKeyDown(Code: Integer): Boolean;
Begin
Result := SmartIsKeyDown(Self.Target, Code);
End;
Procedure TSmart.SetCapture(Enabled; Boolean);
Begin
SmartSetCapture(Self.Target, Enabled);
End;
Procedure TSmart.SetNativeButton(PluginID, ButtonID: Integer; State: Boolean);
Begin
SmartSetNativeButton(Self.Target, PluginID, ButtonID, State);
End;
{$ENDIF}
{$IFDEF SmartReflectionWrappers}
Function TSmart.GetFieldArraySize(Reference: Integer; Path: String; Dimension: Integer): Integer;
Begin
Result := SmartGetFieldArraySize(Self.Target, Reference, Path, Dimension);
End;
Procedure TSmart.FreeObject(Reference: Integer);
Begin
SmartFreeObject(Self.Target, Reference);
End;
Function TSmart.GetFieldObject(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldObject(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldBoolean(Reference: Integer; Path: String): Boolean;
Begin
Result := SmartGetFieldBoolean(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldLongH(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldLongH(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldLongL(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldLongL(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldInt(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldInt(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldShort(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldShort(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldFloat(Reference: Integer; Path: String): Extended;
Begin
Result := SmartGetFieldFloat(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldDouble(Reference: Integer; Path: String): Extended;
Begin
Result := SmartGetFieldObject(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldByte(Reference: Integer; Path: String): Integer;
Begin
Result := SmartGetFieldByte(Self.Target, Reference, Path);
End;
Function TSmart.GetFieldArray2DObject(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DObject(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DInt(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DInt(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DDouble(Reference: Integer; Path: String; X, Y: Integer): Extended;
Begin
Result := SmartGetFieldArray2DDouble(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DFloat(Reference: Integer; Path: String; X, Y: Integer): Extended;
Begin
Result := SmartGetFieldArray2DFloat(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DBoolean(Reference: Integer; Path: String; X, Y: Integer): Boolean;
Begin
Result := SmartGetFieldArray2DBoolean(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DLongH(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DLongH(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DLongL(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DLongL(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DByte(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DByte(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DChar(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DChar(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DShort(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DShort(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray2DObject(Reference: Integer; Path: String; X, Y: Integer): Integer;
Begin
Result := SmartGetFieldArray2DObject(Self.Target, Reference, Path, X, Y);
End;
Function TSmart.GetFieldArray3DObject(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DObject(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DByte(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DByte(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DChar(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DChar(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DShort(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DShort(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DInt(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DInt(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DFloat(Reference: Integer; Path: String; X, Y, Z: Integer): Extended;
Begin
Result := SmartGetFieldArray3DFloat(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DDouble(Reference: Integer; Path: String; X, Y, Z: Integer): Extended;
Begin
Result := SmartGetFieldArray3DDouble(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DBoolean(Reference: Integer; Path: String; X, Y, Z: Integer): Boolean;
Begin
Result := SmartGetFieldArray3DBoolean(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DLongH(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DLongH(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.GetFieldArray3DLongL(Reference: Integer; Path: String; X, Y, Z: Integer): Integer;
Begin
Result := SmartGetFieldArray3DLongL(Self.Target, Reference, Path, X, Y, Z);
End;
Function TSmart.IsPathValid(Reference: Integer; Path: String): Boolean;
Begin
Result := SmartIsPathValid(Self.Target, Reference, Path);
End;
Function TSmart.IsEqual(ObjectOne, ObjectTwo: Integer): Boolean;
Begin
Result := SmartIsEqual(Self.Target, ObjectOne, ObjectTwo);
End;
Function TSmart.IsNull(Reference: Integer): Boolean;
Begin
Result := SmartIsNull(Self.Target, Reference);
End;
Function TSmart.StringFromString(JavaString: Integer; Str: String): Integer;
Begin
Result := SmartStringFromString(Self.Target, JavaString, Str);
End;
Function TSmart.StringFromBytes(Bytes: Integer; Str: String): Integer;
Begin
Result := SmartStringFromBytes(Self.Target, Bytes, Str);
End;
Function TSmart.StringFromChars(Chars: Integer; Str: String): Integer;
Begin
Result := SmartStringFromChars(Self.Target, Chars, Str);
End;
{$ENDIF}