SRL Archive - S.M.A.R.T.

SMARTv8.3


BenLand100

2013-08-22 15:13:18

This version is mostly implementation adjustments for previously added features making SMART more robust to future changes, easier to configure, and able to properly handle multiple SMART instances controlled by the same Simba process. It is important to updated to this version if you are interested in Reflection or OpenGL.

Notable Changes
  • SmartSpawnClient now takes an extra argument appended to the front of the argument list that specifies the executable used to launch Java. It will search your system's PATH and current directory when given a relative path, or take an absolute path. This is important for windows environments particularly since java.exe will not properly run OpenGL on some systems, but works fine with launched with javaw.exe
  • function SmartSpawnClient(java_exec, remote_path, root, params: string; width, height: integer; initseq, useragent, javaargs, Plugins: string): integer;
  • Parsing of <applet> parameters was tweaked and improved so that it is more robust and less specific to the official RS pages. I.E. SMART is better at loading private servers now, you just need the address of the <applet> declaration, such as http://soulsplit.com/playnow/play.php?height=989&width=1920 which will be split into 'root' and 'params' for SmartSpawnClient as follows:
  • root := 'http://soulsplit.com/'
    params := 'playnow/play.php?height=989&width=1920'
    However this is still not officially supported and may not work. In fact, for most private servers color capturing using SMART's internal methods will not work, but it can at least load the applet. Most private servers, including SoulSplit will attempt to resize the applet with will cause SMART to fail, but perhaps if the initial size is correct it will not. I have not tested.
  • All SMART methods that interact with a remote client now take a 'target' argument. This 'target' is the result of either SmartSpawnClient or SmartPairClient and should be freed when you are through with it with SmartFreeClient. Note that the 'target' is NOT the PID, and there is now another method SmartGetClientPID to return the PID of a target. The methods SmartGetClients and SmartGetAvaliablePID work in tandem to return the PIDs of active clients that can be paired to with SmartPairClient to receive a 'target' object. Changes to exports / all exports can be found here https://github.com/BenLand100/SMART/blob/master/src/SmartRemote.h#L303
  • Why these changes since they complicate things further?
    • Previously the SMART plugin only supported pairing with a single SMART client at a time, and EIOS was used to abstract that away allowing separate tabs in a single Simba process to interact with multiple SMARTS.
    • This method was insufficient for things that required direct interaction of the script with the SMART plugin, as only a single SMART client could be controlled at any given time per process. For instance: if you ran two scripts in different tabs and tried to use reflection methods, both tabs, at any given time, would be using the same SMART.
    • Adding a target argument let's the script manage which SMART client it is talking to so the plugin need not have some process-global target variable, eliminating the problem completely. Having the script manage the target does, however, introduce the need to free the target on script termination.

Be aware that even though the internal functioning of SMART is relatively unchanged in this version, the API one uses to interact with SMART has all changed. SRL-6 supposedly has the code required to use this version of SMART but this is NOT a drop in replacement for previous versions.

Code to launch/use this version of SMART (in lape) can be found here:
http://villavu.com/forum/showthread.php?t=105548&p=1262830#post1262830

About: http://bland.no-ip.org/index.php/SMART
Source: https://github.com/BenLand100/SMART
Official Binaries: [ATTACH]22136[/ATTACH]

masterBB

2013-08-22 15:38:12

NOOOOOOOOOOO!!!!!!!!!!!!!!!!

Not another parameter on SmartSpawnClient… This always results in a thousands questions. (we somehow need a better release system in combination with srl so we don't get that problem.)



Thank you for still working on SMART though ;)

DemiseScythe

2013-08-22 15:41:57

But 8.2 works just fine, =\

Did you remove the 6hourFix code or was that purely from SRL?

Coh3n

2013-08-22 15:45:48

From: masterBB
NOOOOOOOOOOO!!!!!!!!!!!!!!!!

Not another parameter on SmartSpawnClient… This always results in a thousands questions. (we somehow need a better release system in combination with srl so we don't get that problem.)



Thank you for still working on SMART though ;)
It won't matter this time. This SMART will be used with SRL-6 (the OP says it's not a replacement for previous versions). There won't be any chance of the parameter error.

From: DemiseScythe
But 8.2 works just fine, =\

Did you remove the 6hourFix code or was that purely from SRL?
The actual code was in SRL. SMART has a native reboot function, I think, that was called in the SRL function. And the main reason for this update was because a lot of computers wouldn't load OpenGL mode without properly adding the JRE to your system's PATH setting (which is kind of a pain for most people). This, as far as I know, fixes that.

BenLand100

2013-08-22 17:04:38

Indeed, v8.2 works fine for most purposes, but is unable to do some things well. The main points for this release are 1) difficulties loading opengl fixed 2) ability to target more than one client at a time. Only things that will need to be modified are reflection using scripts and the code to start SMART in SRL (which is pretty typical for a new SMART version).

DemiseScythe

2013-08-22 17:18:44

From: Coh3n
It won't matter this time. This SMART will be used with SRL-6 (the OP says it's not a replacement for previous versions). There won't be any chance of the parameter error.

The actual code was in SRL. SMART has a native reboot function, I think, that was called in the SRL function. And the main reason for this update was because a lot of computers wouldn't load OpenGL mode without properly adding the JRE to your system's PATH setting (which is kind of a pain for most people). This, as far as I know, fixes that.


How do I open SMART to look at its native functions?

@BenLand100 ^

BenLand100

2013-08-22 17:46:26

From: DemiseScythe
How do I open SMART to look at its native functions?

@BenLand100 ^


Check the link in the third bullet on the OP

Brandon

2013-08-22 17:52:58

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.simba
or 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}

Goatchees

2013-08-30 21:40:57

Looks like im the only noob botter that doesn't script reading this page. How will that impact my Noobyness in botting. OSRS. IE. Do I need to do the setup process all over with the newer S.M.A.R.T?
Will current scripts need to be updated?

I personally havent updated a thing since may so idk how outdated I am :O

samerdl

2013-09-05 06:01:53

Thanks for the update!.

From: Goatchees
Looks like im the only noob botter that doesn't script reading this page. How will that impact my Noobyness in botting. OSRS. IE. Do I need to do the setup process all over with the newer S.M.A.R.T?
Will current scripts need to be updated?

I personally havent updated a thing since may so idk how outdated I am :O



Overwrite past files and then use simba to compile a script to see if it works, if you get any errors then report back :)

Hoodz

2013-09-05 07:24:00

From: Goatchees
Looks like im the only noob botter that doesn't script reading this page. How will that impact my Noobyness in botting. OSRS. IE. Do I need to do the setup process all over with the newer S.M.A.R.T?
Will current scripts need to be updated?

I personally havent updated a thing since may so idk how outdated I am :O


From: samerdl
Thanks for the update!.




Overwrite past files and then use simba to compile a script to see if it works, if you get any errors then report back :)


he also needs to change the smartparams right?

samerdl

2013-09-05 07:31:33

From: hoodz
he also needs to change the smartparams right?


yesh

Khilosia98

2013-09-15 09:32:27

My smart window dosent open, I have smart8.3 and latest java but it dosent open?

Khilosia98

2013-09-15 09:39:00

Come on someone reply?

riwu

2013-09-15 10:04:47

From: Khilosia98
My smart window dosent open, I have smart8.3 and latest java but it dosent open?

Did you specify the java path in the SmartSpawnClient() argument as stated in OP?

Khilosia98

2013-09-15 10:23:29

That is exactly the thing I am trying to figure out how to do? Please can you tell me how to do this?

Khilosia98

2013-09-15 10:30:06

By the way this for an 07 script..

Kasi

2013-09-15 13:05:39

From: Khilosia98
By the way this for an 07 script..


Can't you see the edit button? this isnt irc. stop double posting. i've already replied in that thread you made.

Are you serious?

http://villavu.com/forum/showthread.php?t=105816
http://villavu.com/forum/showthread.php?t=105817
http://villavu.com/forum/search.php?searchid=310230

Khilosia98

2013-09-15 14:10:15

PM me your skype and we can talk on there..
I'll double post because nobody replies or helps to resolve my issue?

JennyCocoX

2013-09-15 14:18:41

From: Kasi
Can't you see the edit button? this isnt irc. stop double posting. i've already replied in that thread you made.

Are you serious?

http://villavu.com/forum/showthread.php?t=105816
http://villavu.com/forum/showthread.php?t=105817
http://villavu.com/forum/search.php?searchid=310230


Double posting is against the rules? :)
SOrry I'm new haha…

GREEN GIANT

2013-09-15 18:14:47

I hate to ask as it should be apparent but hence it is not. Where in this do i need to paste the additional SmartSpawnClient arguement?

function InitSmart(ForceNew: Boolean): Integer;
var
I, Count: Integer;
IDs: TIntegerArray;
World: String;
begin
If (Not ForceNew) then
begin
Ids := SmartGetClientIDs;
Count := Length(IDs);
If (Count > 0) then
For I:= 0 To (Count - 1) Do
begin
If SmartPairClient(IDs[I]) then
begin
Result := IDs[I];
SetEIOSTarget('libsmartremote', ToStr(Result));
Writeln('Paired with SMART[' + ToStr(Result) + ']');
Exit;
end;
end;
end;

World := GetRS07World;

//Removal of Smart 7.2?
//{$IFDEF SMART8}
//function SmartSpawnClient(java_exec, remote_path, root, params: string; width, height: integer; initseq, useragent, javaargs, Plugins: string): integer;
Result := SmartSpawnClient(ReplaceWrap(PluginPath, '\', '/', [rfReplaceAll]), 'http://oldschool' + World + '.runescape.com/', 'j1', 765, 503, '', '', '','');
//{$ELSE}
//Result := SmartSpawnClient(ReplaceWrap(PluginPath, '\', '/', [rfReplaceAll]), Params[0], ',' + Params[1], 765, 553, 's', '', '');
//{$ENDIF}

If (Result > 0) Then
begin
try
SetEIOSTarget('libsmartremote', ToStr(Result));
Writeln('Loading SMART: http://oldschool' + World + '.runescape.com');
except
WriteLn('** Fatal Error: Pairing Clients; Terminating Script **');
TerminateScript;
end;
end else
begin
Writeln('** Smart Cannot Spawn Clients **');
TerminateScript;
end;
end;

samerdl

2013-10-14 10:50:45

Can't get this to work, my Smart Params is giving me lots of errors. Anyone uploaded a good SmartParams ready for use?, Oldschool Rs of course.

Simba also updated recently so nothing really works :o

Flight

2013-10-14 10:59:10

From: samerdl
Can't get this to work, my Smart Params is giving me lots of errors. Anyone uploaded a good SmartParams ready for use?, Oldschool Rs of course.

Simba also updated recently so nothing really works :o


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

Haider

2013-12-02 02:40:17

I keep getting the error
'failed to spawn a SMART client'
every time I run something

Smoky

2013-12-03 23:34:00

After being able to successfully run Smartv8.3 due to excessive UN-installing re-installing attempts. I can no longer get Java to load on OSRS using internet explore. The troubleshooting help for internet explorer was also no help. I have the newest version of JAVA. I verified but still no play. Does this post need to be moved on FAQ. I wasn't sure. Excuse the noob just trying to help make things user friendly.

However Java loads on google chrome.

Brandon

2014-04-15 19:30:21

@BenLand100; Smart on linux broken?

http://i.imgur.com/lYI0j6i.png

Notice it is running in safemode. Also notice that there is a "Screenshot.bmp" in that folder and Debug mode is ON.


I then run it with the following code:


#include <iostream>
#include <dlfcn.h>
#include <thread>
#include <chrono>
#include <fstream>
#include <vector>
#include <cstring>
#include <stdexcept>

/** Save a 32-bit bitmap to disk. **/
void Save(const char* FilePath, unsigned char* Pixels, std::uint32_t width, std::uint32_t height)
{
std::fstream hFile(FilePath, std::ios::out | std::ios::binary);
if (!hFile.is_open()) throw std::invalid_argument("Error: File not found.");

std::uint32_t Trash = 0;
std::uint16_t Planes = 1;
std::uint32_t biSize = 40;
std::uint16_t Type = 0x4D42;
std::uint32_t compression = 0;
std::uint32_t PixelsOffsetBits = 54;
std::uint32_t BitsPerPixel = 32;
std::uint32_t size = ((width * BitsPerPixel + 31) / 32) * 4 * height;
std::uint32_t bfSize = 54 + size;

hFile.write(reinterpret_cast<char*>(&Type), sizeof(Type));
hFile.write(reinterpret_cast<char*>(&bfSize), sizeof(bfSize));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&PixelsOffsetBits), sizeof(PixelsOffsetBits));
hFile.write(reinterpret_cast<char*>(&biSize), sizeof(biSize));
hFile.write(reinterpret_cast<char*>(&width), sizeof(width));
hFile.write(reinterpret_cast<char*>(&height), sizeof(height));
hFile.write(reinterpret_cast<char*>(&Planes), sizeof(Planes));
hFile.write(reinterpret_cast<char*>(&BitsPerPixel), sizeof(BitsPerPixel));
hFile.write(reinterpret_cast<char*>(&compression), sizeof(compression));
hFile.write(reinterpret_cast<char*>(&size), sizeof(size));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Pixels[0]), size);
hFile.close();
}

/** SMART's internal data structures.. **/


typedef struct
{
int port;
int id;
int width, height;
int paired;
int imgoff;
int dbgoff;
unsigned char args[4096];
} shm_data;

typedef struct
{
int width, height;
int refcount;
int socket;
int fd;
void* memmap;
shm_data* data;
} SMARTClient;

typedef SMARTClient* Target;

typedef union
{
struct { char b, g, r, a; };
unsigned int color;
} rgb;


/** Smart's only needed export for spawning it **/

typedef Target (*Client)(char* java_exec, char* remote_path, char* root, char* params, int width, int height, char* initseq, char* useragent, char* javaargs, char* plugins);

int main()
{
void* smart = dlopen("./libsmartremote64.so", RTLD_LAZY); //Load SMART's module.

if (smart)
{
Target target = nullptr;
Client client = reinterpret_cast<Client>(dlsym(smart, "exp_spawnClient")); //Get SMART's export function.

if (client) //Load SMART.
{
target = client((char*)"java", (char*)".", (char*)"http://world37.runescape.com/", (char*)",f681985954784915908", 800, 600, (char*)"s", nullptr, nullptr, nullptr);
}

while(target) //If loaded successfully.
{
char* image_pixels = (char*)target->data + target->data->imgoff; //SMART's image data. (Source: SmartRemote.cpp)

if (image_pixels) //Save the image to the disk.
{
Save("Screenshot.bmp", image_pixels, target->width, target->height);
}

char* debug_pixels = (char*)target->data + target->data->dbgoff; //Smart's Debug Pixels (Source: SmartRemote.cpp)
std::memset(&debug_pixels[0], 0xFF, target->width * target->height); //Set all pixels to white.


std::this_thread::sleep_for(std::chrono::seconds(3)); //Sleep for 3 seconds before repeating.
}

dlclose(smart); //Close open module handle.
}
return 0;
}


However, the pixels in the debug are NOT white. In fact, nothing is being drawn. Also, the Screenshot.bmp is completely black..

Any ideas?

BenLand100

2014-04-28 01:22:10

From: Brandon
Any ideas?

Unless I goof'd the memory mapping it should work fine, and I seem to remember that it worked in the past. Does this same test work on windows? If not, try to catch me on IRC sometime. I've been busy designing and simulating new particle detectors lately and it kind of eats all of my time T.T

Brandon

2014-04-28 03:14:45

From: BenLand100
Unless I goof'd the memory mapping it should work fine, and I seem to remember that it worked in the past. Does this same test work on windows? If not, try to catch me on IRC sometime. I've been busy designing and simulating new particle detectors lately and it kind of eats all of my time T.T



O.o sounds interesting. Something physics related I take it?

I'll have to pay you a visit soon. The following works on Windows (saves an upside down bitmap and sets debug white as expected) but fails miserably on Linux (does nothing):


#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

#include <stdexcept>
#include <thread>
#include <chrono>

#if defined _WIN32 ||defined _WIN64
#include <windows.h>
#else
#include <dlfcn.h>
#endif // defined


/** SMART's internal data structures.. **/

typedef struct
{
int port;
int id;
int width, height;
int paired;
int imgoff;
int dbgoff;
unsigned char args[4096];
} shm_data;

typedef struct
{
int width, height;
int refcount;
int socket;
int fd;
void* memmap;
shm_data* data;
} SMARTClient;

typedef SMARTClient* Target;

typedef union
{
struct { char b, g, r, a; };
unsigned int color;
} rgb;

/** Save a 32-bit bitmap to disk. **/
void Save(const char* FilePath, unsigned char* Pixels, std::uint32_t width, std::uint32_t height)
{
std::fstream hFile(FilePath, std::ios::out | std::ios::binary);
if (!hFile.is_open()) throw std::invalid_argument("Error: File not found.");

std::uint32_t Trash = 0;
std::uint16_t Planes = 1;
std::uint32_t biSize = 40;
std::uint16_t Type = 0x4D42;
std::uint32_t compression = 0;
std::uint32_t PixelsOffsetBits = 54;
std::uint32_t BitsPerPixel = 32;
std::uint32_t size = ((width * BitsPerPixel + 31) / 32) * 4 * height;
std::uint32_t bfSize = 54 + size;

hFile.write(reinterpret_cast<char*>(&Type), sizeof(Type));
hFile.write(reinterpret_cast<char*>(&bfSize), sizeof(bfSize));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&PixelsOffsetBits), sizeof(PixelsOffsetBits));
hFile.write(reinterpret_cast<char*>(&biSize), sizeof(biSize));
hFile.write(reinterpret_cast<char*>(&width), sizeof(width));
hFile.write(reinterpret_cast<char*>(&height), sizeof(height));
hFile.write(reinterpret_cast<char*>(&Planes), sizeof(Planes));
hFile.write(reinterpret_cast<char*>(&BitsPerPixel), sizeof(BitsPerPixel));
hFile.write(reinterpret_cast<char*>(&compression), sizeof(compression));
hFile.write(reinterpret_cast<char*>(&size), sizeof(size));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Trash), sizeof(std::uint32_t));
hFile.write(reinterpret_cast<char*>(&Pixels[0]), size);
hFile.close();
}


/** Smart's only needed export for spawning it **/

typedef Target (*exp_spawnClient)(char* java_exec, char* remote_path, char* root, char* params, int width, int height, char* initseq, char* useragent, char* javaargs, char* plugins);
typedef void* (*exp_getImageArray)(Target t);
typedef void* (*exp_getDebugArray)(Target t);

int main()
{
#if defined _WIN32 || defined _WIN64
HMODULE smart = LoadLibraryA("libsmartremote64.dll");
#else
void* smart = dlopen("./libsmartremote64.so", RTLD_LAZY);
#endif //defined

if (smart)
{
Target target = nullptr;

#if defined _WIN32 || defined _WIN64
exp_spawnClient spawnfunc = reinterpret_cast<exp_spawnClient>(GetProcAddress(smart, "exp_spawnClient"));
exp_getImageArray imgfunc = reinterpret_cast<exp_getImageArray>(GetProcAddress(smart, "exp_getImageArray"));
exp_getImageArray dbgfunc = reinterpret_cast<exp_getDebugArray>(GetProcAddress(smart, "exp_getDebugArray"));
#else
exp_spawnClient spawnfunc = reinterpret_cast<exp_spawnClient>(dlsym(smart, "exp_spawnClient"));
exp_getImageArray imgfunc = reinterpret_cast<exp_getImageArray>(dlsym(smart, "exp_getImageArray"));
exp_getImageArray dbgfunc = reinterpret_cast<exp_getDebugArray>(dlsym(smart, "exp_getDebugArray"));
#endif //defined

if (spawnfunc && imgfunc && dbgfunc) //Load SMART.
{
#if defined _WIN32 || defined _WIN64
char* java = (char*)"C:/Program Files/Java/jre8/bin/java.exe";
#else
char* java = (char*)"java";
#endif
target = spawnfunc(java, (char*)".", (char*)"http://world37.runescape.com/", (char*)",f681985954784915908", 800, 600, (char*)"s", nullptr, nullptr, nullptr);
}

while(target) //If loaded successfully.
{
unsigned char* image_pixels = (unsigned char*)imgfunc(target); //SMART's image data. (Source: SmartRemote.cpp)

if (image_pixels) //Save the image to the disk.
{
Save("Screenshot.bmp", image_pixels, 800, 600);
}

char* debug_pixels = (char*)dbgfunc(target); //Smart's Debug Pixels (Source: SmartRemote.cpp)

if (debug_pixels)
{
std::memset(&debug_pixels[0], 0xFF, 800 * 600 * sizeof(rgb)); //Set all pixels to white.
}


std::this_thread::sleep_for(std::chrono::seconds(3)); //Sleep for 3 seconds before repeating.
}

#if defined _WIN32 || defined _WIN64
FreeLibrary(smart);
#else
dlclose(smart);
#endif // defined
}
return 0;
}


Unfortunately the previous code gave problems on Windows.. Apparently:

'(char*)t->data + t->data->dbgoff : 0'

and

'(char*)t->data + t->data->imgoff : 0'

is an access violation whereas:

'imgbuffer = exp_getImageArray(target)' isn't.. LOL.. they do the EXACT same thing :l

Anyway, the above works on windows but not on my linux mint machine ={

BigRedJapan

2014-11-02 20:00:45

hmmm. I have a question is their a way to run a client off my desktop instead of using web url?

Brandon

2015-02-27 19:08:45

@BenLand100; Bug discovered in SmartRemote.cpp.. Although very minor, it causes problems.


The line that says:


sprintf(bootclasspath,"-Xbootclasspath/p:%s/%s",remote_path,"smart.jar");


should really be:


sprintf(bootclasspath,"-Xbootclasspath/p:\"%s/%s\"",remote_path,"smart.jar");

I obviously don't have to explain this to you but for everyone else reading:

This is required because if the path ever contains a single space, the call to ShellExecute will fail with error "Cannot find blah blah path with space/Smart.jar" due to that space.

However, if you escape it with the quotes, the call will never fail. I submitted it as a bug report but just thought you might see it here as well (just in case).

Shatterhand

2015-03-12 16:33:02

Is it possible to invoke methods with SMART (reflection)?

I only looked at the 8.2's API, didnt find anything related to method invoking.

tls

2015-03-12 17:38:31

From: Shatterhand
Is it possible to invoke methods with SMART (reflection)?

I only looked at the 8.2's API, didnt find anything related to method invoking.


No, but it could be added quite simply.

Brandon

2015-03-19 19:33:46

@BenLand100; I know you are busy but I'm in no rush (at all). Just a heads up to check the git issues. I added a new one to get SMART to compile on OS X natively: https://github.com/BenLand100/SMART/issues/24

OS X src & build (does not contain test-apps): [ATTACH=CONFIG]25366[/ATTACH]

If you can, modify the makefile as described below before making any commits. You can commit the .cpp files though. Why? because the makefile doesn't contain all the changes I mentioned below.. Then again, it's probably easier to make the changes yourself and commit them; they're small changes anyway.


SmartJNI.cpp:

extern "C" JNIEXPORT jboolean JNICALL Java_smart_Main_checkAlive(JNIEnv *env, jclass cls, jint tid) {
#ifdef __APPLE__
return syscall(SYS_kill,tid,0) ? JNI_FALSE : JNI_TRUE; //Added by Brandon for OS X.
#elif !defined(_WIN32)
return syscall(SYS_tkill,tid,0) ? JNI_FALSE : JNI_TRUE;
#else
HANDLE thread = OpenThread(SYNCHRONIZE,FALSE,tid);
if (!thread) return JNI_FALSE;
jboolean res = WaitForSingleObject(thread, 0) == WAIT_TIMEOUT ? JNI_TRUE : JNI_FALSE;
CloseHandle(thread);
return res;
#endif
}

Then in SmartRemote.cpp (in the spawnClient function, under the linux section, I added/changed the below block):


#ifdef __APPLE__
sprintf(library,"%s/libsmartjni%s.dylib",remote_path,bits);
#else
sprintf(library,"%s/libsmartjni%s.so", remote_path, bits);
#endif



Then for the makefile, I copied the Linux and Linux64 commands, removed all the "-s" flags (for stripping). It's unrecognized on OS X. I also changed all the extensions to .dylib which is the .so/.dll equivalent for Mac. After that, everything's all good. OS X clang requires the -m32 and -m64 flags otherwise you will get an atom symbolIndex error.


And voila.. SMART spawns natively on OS X (Tested on Yosemite 10.10.2 x86_64.. I spawned it at 765x503 by accident so it looks cut off.. it should have been 800x600 but w/e).. The OpenGL plugins (colour of course) should already work natively and just need compiling on OSX. I'll test it later (too tired atm).

Here's SMART running natively (I didn't test colour capture but there's no reason it shouldn't work.. based on the code of course):


Olly

2015-03-20 19:04:56

From: Brandon
…


Add a issue thing on how to fix it so it successfully launches 100% in native linux, I would but i forgot the fix? manually re-sizing the applet maybe?

Brandon

2015-03-21 09:55:41

From: Olly
Add a issue thing on how to fix it so it successfully launches 100% in native linux, I would but i forgot the fix? manually re-sizing the applet maybe?


Huh? I'm lost.. Doesn't it already compile and run on linux natively? I thought OS X was the only system missing and now it's fixed :S

Olly

2015-03-21 16:14:55

From: Brandon
Huh? I'm lost.. Doesn't it already compile and run on linux natively? I thought OS X was the only system missing and now it's fixed :S


http://i.imgur.com/JkJ6o5U.png

SMART spawns like that, 90% of the time for me. You sent me a patched fix via pm some time ago, but id like to see it fixed in the smart repo.

Brandon

2015-03-21 18:18:42

From: Olly
http://i.imgur.com/JkJ6o5U.png

SMART spawns like that, 90% of the time for me. You sent me a patched fix via pm some time ago, but id like to see it fixed in the smart repo.


Ahh sorry. I completely forgot that happens. Haven't spawned SMART on Linux in a while. I remember that being extremely annoying debug but I don't remember 100% how I patched it. It's odd that this never ever happens on Windows though.


IIRC, the fix was something to the effect of:



clientFrame.getToolkit().setDynamicLayout(true);
clientFrame.add(clientApplet, BorderLayout.CENTER);

//add other components..

clientFrame.init();
clientFrame.start();

//wait for canvas to initialise..

clientFrame.pack();

I'll have to test it or find the message where I sent you the patch (I probably explained what I did as usual). I'll post a patch once I get around to testing. Keep an eye on this post and the github issues section in the next half-hour or so.

EDIT: @Olly; So far, I've just added:


clientFrame.getToolkit().setDynamicLayout(true);
clientFrame.add(clientApplet, BorderLayout.CENTER);

and I can't replicate the problem after that. I've been stress testing it for the last 20 minutes in both Safe mode and OpenGL mode.

Instead of letting Java determine the position of components at compile time, it determines them at start-up at run-time. That way, when you call pack, it delays the layout for a split second after display and then sets the position of the components (thus preventing the problem without modifying more of SMART).

Last time I believe I fixed it statically but meh. It makes no difference at all since SMART becomes "non-resizeable" after being spawned. So it won't constantly be determining component layouts (no need to worry about any performance implications).

https://diffchecker.com/nw3d38on

The official client does it as well: http://i.imgur.com/OUbF92o.png


EDIT 2:
If it doesn't work, let me know (though, there's no reason it shouldn't.. I've just tested it for more than 30 minutes straight). For now, I'm posting this as the patch on the git issues: https://github.com/BenLand100/SMART/issues/25

If you guys have a better idea OR want me to spend more time debugging to do it statically, let me know.

The Legendary

2015-04-11 21:44:02

Can anyone help me set up SMART via Team view? I can't get it to compile. It always show fail to compile.

Brandon

2015-04-12 08:20:07

From: The Legendary
It always show fail to compile.


And with that statement, it is impossible for us to know what components failed to compile. You cannot get help by saying "it failed". We have no idea what failed.


See: https://villavu.com/forum/showthread.php?t=86387

The Legendary

2015-04-14 00:09:28

From: Brandon
And with that statement, it is impossible for us to know what components failed to compile. You cannot get help by saying "it failed". We have no idea what failed.


See: https://villavu.com/forum/showthread.php?t=86387

I got this after follow your guide on how to compile smart.

Brandon

2015-04-14 01:38:39

From: The Legendary
I got this after follow your guide on how to compile smart.



You missed a step. Most likely you didn't set "–static –static-libgcc –static-libstdc++". Otherwise add the compiler to your path.

Aggezzz

2015-05-17 18:50:00

I got problem with smart

KeepBotting

2015-05-17 18:51:01

From: Aggezzz
I got problem with smart


Please stop posting this everywhere – buying help is not allowed.

Shatterhand

2015-06-16 12:29:45

Anyone knows how to stop SMART window popping up to foreground? When the script uses the mouse the inactive SMART window would come to foreground and it is very annoying.

Using SMART v8.3 and JDK 8u40.

I remember having Java 6 solved this issue, but I do not want to use that anymore.

Lucidity

2015-06-16 12:47:48

From: Shatterhand
Anyone knows how to stop SMART window popping up to foreground? When the script uses the mouse the inactive SMART window would come to foreground and it is very annoying.

Using SMART v8.3 and JDK 8u40.

I remember having Java 6 solved this issue, but I do not want to use that anymore.


Spam click on the desktop while it goes to click and it'll make it stop, that's what I did

Shatterhand

2015-06-16 13:45:35

From: Bly
Spam click on the desktop while it goes to click and it'll make it stop, that's what I did

I am looking for a permanent solution. :smile:

Turpinator

2015-06-16 15:23:37

From: Shatterhand
I am looking for a permanent solution. :smile:


This still happens when minimized, correct?
(well, it steals focus)

Instead of minimizing, i will just click it in the task bar when it is the active window (basically to minimize it) and after that… it will flash a few times, but never grabs focus again.

xicitx

2015-06-16 19:22:47

I have reinstalled rs3 and simba twice and followed every guide and simba wont open up in anything else except safe mode. I can open up normal RS in OpenGL mode and using Runemate I can open RS in OpenGL

but whenever I start simba. I start up ashamnbonfire. do the player manager thing and RS comes up. I click settings, fixed. and go to click Opengl but a box comes up saying Runescape cant run in these settings. But it can. Just not using Simba. Anyone else had this problem???

and yes I changed JRE so now it is infront of JDR in the path but still nothing works

anyone have any idea!?!?!?

KeepBotting

2015-06-16 19:25:21

From: xicitx
I have reinstalled rs3 and simba twice and followed every guide and simba wont open up in anything else except safe mode. I can open up normal RS in OpenGL mode and using Runemate I can open RS in OpenGL

but whenever I start simba. I start up ashamnbonfire. do the player manager thing and RS comes up. I click settings, fixed. and go to click Opengl but a box comes up saying Runescape cant run in these settings. But it can. Just not using Simba. Anyone else had this problem???

and yes I changed JRE so now it is infront of JDR in the path but still nothing works

anyone have any idea!?!?!?

Please read the reply I posted on your thread. There's no need to make multiple posts about the same issue.

xicitx

2015-06-16 19:35:29

From: KeepBotting
Please read the reply I posted on your thread. There's no need to make multiple posts about the same issue.


Sorry didn't know if I was posting in the right spot thankyou for your swifty replies!