rj
2013-10-12 16:36:58
I don't understand how to make a Java plugin for Simba because there are no guides on how to :S
2013-10-12 16:36:58
2013-10-12 16:42:26
From: Officer Barbrady
I don't understand how to make a Java plugin for Simba because there are no guides on how to :S
2013-10-12 16:49:46
From: Brandon
You can't? Well that depends on what you're trying to do. You'll eventually end up using JNI to connect the java side and the Simba.
package Grabber;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.JComponent;
public class Highscores {
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public String javaGetPage(String Name);
public void run();
public JComponent getConfigurationPage();
}
public static String getUrlSource(String url) throws IOException {
URL page = new URL(url);
URLConnection yc = page.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
yc.getInputStream(), "UTF-8"));
String inputLine;
StringBuilder a = new StringBuilder();
while ((inputLine = in.readLine()) != null)
a.append(inputLine);
in.close();
return a.toString();
}
public static String javaGetPage(String Name) {
try {
return getUrlSource("http://soulsplit.com/hs/index.php?name=" + Name);
} catch (IOException e) {
return "null";
}
}
public void run() {
System.out.println("Started get page plugin");
}
}
2013-10-12 17:04:49
2013-10-12 17:05:47
From: Brandon
You'll need to write a dll in C/C++/Pascal or any other language capable of writing modules to run the jar and communicate with it..
The other option is to create a socket in Simba and listen on some port. Then on the Java side, write to that socket and Simba will retrieve whatever you wrote.
The last option is to have the jar write to a file and have Simba read that file..
Either way, I don't see how much "faster" the socket in the jar would be compared to a simba socket performing a get request..
The simba sockets and java sockets are both "C" sockets anyway as that is what Windows API is. Simba's compiled into a module and the jar is compiled into a jar file which is interpretted by the JVM or further compiled.
2013-10-12 17:11:16
From: Officer Barbrady
oh nevermind then, so getpage is so slow because my internet is slow?
2013-10-12 17:16:56
From: Brandon
No. It all depends on the implementation of GetPage as well as your internet. I cannot narrow down what makes it slow for you or anyone. It might be doing more than the Java socket under the hood of Simba.
You can always try creating a Raw socket in Simba and perform the Get by sending the right headers and see which is faster.
See here on how to use a raw socket: http://villavu.com/forum/showthread.php?t=94735
How slow are we talking here though?
type PlayerSkills = record
IDS:Array[0..22] of Integer;
XPS:Array[0..22] of string;
Levels:Array[0..22] of string;
Names:Array[0..22] of string;
TotalLevel, TotalXP:string;
end;
type Player = record
Stats:PlayerSkills;
GameMode, name:string;
worked:boolean;
end;
var
PlayerArray:Array of Player;
procedure MarkTime(var a:Integer);
begin
a := GetSystemTime;
end;
function TimeFromMark(a:Integer):Integer;
begin
result := (GetSystemTime - a);
end;
function getPlayerStats(names:TStringArray):Boolean;
var
i, l:Integer;
str:string;
begin
SetLength(PlayerArray, Length(names));
for i := 0 to high(PlayerArray) do
begin
PlayerArray[i].name := names[i];
PlayerArray[i].Stats.Names := [
'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged',
'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching',
'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining',
'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming',
'Runecrafting', 'Dungeoneering', 'Summoning'
];
PlayerArray[i].Stats.IDS := [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22
];
names[i] := replace(names[i], ' ', '+', [rfReplaceAll]);
str := GetPage('http://soulsplit.com/hs/index.php?name=' + Names[i]);
for l := 0 to high(PlayerArray[i].Stats.Names) do
PlayerArray[i].Stats.Levels[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>', '</td><td>',str);
for l := 0 to high(PlayerArray[i].Stats.Names) do
PlayerArray[i].Stats.XPS[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
for l := 0 to high(PlayerArray[i].Stats.XPS) do
PlayerArray[i].Stats.XPS[l] := replace(PlayerArray[i].Stats.XPS[l], ' ', '', [rfReplaceAll]);
PlayerArray[i].GameMode := between('Total Level (',')</a><',str);
PlayerArray[i].Stats.TotalLevel := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>', '</td>', str);
PlayerArray[i].Stats.TotalXP := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>' + PlayerArray[i].Stats.TotalLevel + '</td> <td> ','<td>', str);
end;
end;
var
i, l, t:Integer;
SSPlayers:TStringArray;
begin
MarkTime(t);
getPlayerStats(['advise']);
Writeln(TimeFromMark(t));
for l := 0 to high(PlayerArray) do
begin
Writeln('=====================================================');
Writeln('Player: ' + PlayerArray[l].name + ' ' + PlayerArray[l].GameMode + ' ' + PlayerArray[l].stats.TotalLevel + ' ' + PlayerArray[l].stats.totalXP);
for i := 0 to high(PlayerArray[l].Stats.Names) do
Writeln(PlayerArray[0].Stats.Names[i] + ' ' + PlayerArray[0].Stats.Levels[i] + ' ' + PlayerArray[0].Stats.XPS[i])
end;
end.
2013-10-12 17:33:18
From: Officer Barbrady
Takes about 1500 ms to run but I plan to use my code as a way of getting the player stats, XP, and gamemode perfectly without having to bother with OCR stuff
for l := 0 to high(PlayerArray[i].Stats.Names) do
for l := 0 to high(PlayerArray[i].Stats.Names) do
PlayerArray[i].Stats.Levels[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>', '</td><td>',str);
for l := 0 to high(PlayerArray[i].Stats.Names) do
PlayerArray[i].Stats.XPS[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
for l := 0 to high(PlayerArray[i].Stats.XPS) do
PlayerArray[i].Stats.XPS[l] := replace(PlayerArray[i].Stats.XPS[l], ' ', '', [rfReplaceAll]);
for l := 0 to high(PlayerArray[i].Stats.Names) do
begin
PlayerArray[i].Stats.Levels[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>', '</td><td>',str);
PlayerArray[i].Stats.XPS[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
PlayerArray[i].Stats.XPS[l] := replace(PlayerArray[i].Stats.XPS[l], ' ', '', [rfReplaceAll]);
end;
for l := 0 to high(PlayerArray[i].Stats.Names) do
begin
PlayerArray[i].Stats.Levels[l] := Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>', '</td><td>',str);
PlayerArray[i].Stats.XPS[l] := replace(Between(PlayerArray[i].Stats.Names[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str), ' ', '', [rfReplaceAll]);
end;
PlayerArray[i].Stats.Names := [............]
PlayerArray[i].IDs := [.......]
WriteLn(Str1 + Str2 + ' ' + Str3); //for example..
WriteLn(Str1, Str2, ' ', Str3);
2013-10-12 17:41:01
From: Brandon
thanks lol forgot about the third loop, meant to remove it
type PlayerSkills = record
XPS, Levels:Array[0..22] of string;
TotalLevel, TotalXP:string;
end;
type Player = record
Stats:PlayerSkills;
GameMode, name:string;
Skillnames:Array[0..22] of string;
end;
var
PlayerArray:Array of Player;
procedure MarkTime(var a:Integer);
begin
a := GetSystemTime;
end;
function TimeFromMark(a:Integer):Integer;
begin
result := (GetSystemTime - a);
end;
function getPlayerStats(names:TStringArray):Boolean;
var
i, l:Integer;
str:string;
begin
SetLength(PlayerArray, Length(names));
PlayerArray[i].Skillnames := [
'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged',
'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching',
'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining',
'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming',
'Runecrafting', 'Dungeoneering', 'Summoning'
];
for i := 0 to high(PlayerArray) do
begin
PlayerArray[i].name := names[i];
names[i] := replace(names[i], ' ', '+', [rfReplaceAll]);
str := GetPage('http://soulsplit.com/hs/index.php?name=' + Names[i]);
for l := 0 to high(PlayerArray[i].Skillnames) do
begin
PlayerArray[i].Stats.Levels[l] := Between(PlayerArray[i].Skillnames[l] + '</a></td><td>', '</td><td>',str);
PlayerArray[i].Stats.XPS[l] := Between(PlayerArray[i].Skillnames[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
end;
PlayerArray[i].GameMode := between('Total Level (',')</a><',str);
PlayerArray[i].Stats.TotalLevel := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>', '</td>', str);
PlayerArray[i].Stats.TotalXP := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>' + PlayerArray[i].Stats.TotalLevel + '</td> <td> ','<td>', str);
end;
end;
var
i, l, t:Integer;
SSPlayers:TStringArray;
begin
MarkTime(t);
getPlayerStats(['advise']);
Writeln(TimeFromMark(t));
for l := 0 to high(PlayerArray) do
begin
Writeln('=====================================================');
Writeln('Player: ' + PlayerArray[l].name + ' ' + PlayerArray[l].GameMode + ' ' + PlayerArray[l].stats.TotalLevel + ' ' + PlayerArray[l].stats.totalXP);
for i := 0 to high(PlayerArray[l].Skillnames) do
Writeln(PlayerArray[0].Skillnames[i] + ' ' + PlayerArray[0].Stats.Levels[i] + ' ' + PlayerArray[0].Stats.XPS[i])
end;
end.2013-10-12 17:46:54
From: Officer Barbrady
Not much of a change in performance but looks a lot better
2013-10-12 17:51:29
From: Brandon
I wasn't done posting lol. Re-read all the edits in the previous post. Also note that your code you just posted won't compile because PlayerArray.SkillNames is NOT in the loop. But again, read the optimisations for that above.
It would be a ton faster if you got rid of all the "Between" and "Replace" stuff as they make allocations/copies a lot but I don't think you can.
type PlayerSkills = record
XPS, Levels:Array[0..22] of string;
TotalLevel, TotalXP:string;
end;
type Player = record
Stats:PlayerSkills;
GameMode, name:string;
end;
var
PlayerArray:Array of Player;
SkillNames:TStringArray;
procedure MarkTime(var a:Integer);
begin
a := GetSystemTime;
end;
function TimeFromMark(a:Integer):Integer;
begin
result := (GetSystemTime - a);
end;
function getPlayerStats(names:TStringArray):Boolean;
var
i, l:Integer;
str:string;
begin
SetLength(PlayerArray, Length(names));
for i := 0 to high(PlayerArray) do
begin
PlayerArray[i].name := names[i];
names[i] := replace(names[i], ' ', '+', [rfReplaceAll]);
str := GetPage('http://soulsplit.com/hs/index.php?name=' + Names[i]);
for l := 0 to high(Skillnames) do
begin
PlayerArray[i].Stats.Levels[l] := Between(Skillnames[l] + '</a></td><td>', '</td><td>',str);
PlayerArray[i].Stats.XPS[l] := Between(Skillnames[l] + '</a></td><td>' + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
end;
PlayerArray[i].GameMode := between('Total Level (',')</a><',str);
PlayerArray[i].Stats.TotalLevel := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>', '</td>', str);
PlayerArray[i].Stats.TotalXP := between('Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>' + PlayerArray[i].Stats.TotalLevel + '</td> <td> ','<td>', str);
end;
end;
var
i, l, t:Integer;
SSPlayers:TStringArray;
begin
Skillnames := [
'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged',
'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching',
'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining',
'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming',
'Runecrafting', 'Dungeoneering', 'Summoning'
];
MarkTime(t);
getPlayerStats(['advise']);
Writeln(TimeFromMark(t));
for l := 0 to high(PlayerArray) do
begin
Writeln('=====================================================');
Writeln('Player: ',PlayerArray[l].name , ' ' , PlayerArray[l].GameMode , ' ' , PlayerArray[l].stats.TotalLevel , ' ' , PlayerArray[l].stats.totalXP);
for i := 0 to high(Skillnames) do
Writeln(Skillnames[i],' ' , PlayerArray[0].Stats.Levels[i] , ' ' , PlayerArray[0].Stats.XPS[i])
end;
end.2013-10-12 18:09:37
From: Officer Barbrady
that good now?
never knew about the " , " thing that's new in lape right?
const
SkillNames = ['Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged',
'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching',
'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining',
'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming',
'Runecrafting', 'Dungeoneering', 'Summoning'
];
type PlayerSkills = record
XPS, Levels:Array[0..22] of string;
TotalLevel, TotalXP:string;
end;
type Player = record
Stats:PlayerSkills;
GameMode, name:string;
Skillnames:Array[0..22] of string;
end;
var
PlayerArray:Array of Player;
procedure MarkTime(var a:Integer);
begin
a := GetSystemTime;
end;
function TimeFromMark(a:Integer):Integer;
begin
result := (GetSystemTime - a);
end;
function getPlayerStats(names:TStringArray):Boolean;
var
i, l:Integer;
t, str:string;
begin
SetLength(PlayerArray, Length(names));
for i := 0 to high(PlayerArray) do
begin
PlayerArray[i].name := names[i];
str := Between('<tbody>', '</tbody>', GetPage('http://soulsplit.com/hs/index.php?name=' + replace(names[i], ' ', '+', [rfReplaceAll])));
for l := 0 to high(SkillNames) do
begin
T := Skillnames[l] + '</a></td><td>';
PlayerArray[i].Stats.Levels[l] := Between(T, '</td><td>',str);
PlayerArray[i].Stats.XPS[l] := Between(T + PlayerArray[i].Stats.Levels[l] + '</td><td>' , ' <td>' ,str);
end;
PlayerArray[i].GameMode := between('Total Level (',')</a><',str);
T := 'Total Level (' + PlayerArray[i].GameMode + ')</a></td><td>';
PlayerArray[i].Stats.TotalLevel := between(T, '</td>', str);
PlayerArray[i].Stats.TotalXP := between(T + PlayerArray[i].Stats.TotalLevel + '</td> <td> ','<td>', str);
end;
end;
var
i, l, t:Integer;
SSPlayers:TStringArray;
begin
ClearDebug;
MarkTime(t);
getPlayerStats(['advise']);
Writeln(TimeFromMark(t));
for l := 0 to high(PlayerArray) do
begin
Writeln('=====================================================');
Writeln('Player: ',PlayerArray[l].name , ' ' , PlayerArray[l].GameMode , ' ' , PlayerArray[l].stats.TotalLevel , ' ' , PlayerArray[l].stats.totalXP);
for i := 0 to high(Skillnames) do
Writeln(Skillnames[i],' ' , PlayerArray[0].Stats.Levels[i] , ' ' , PlayerArray[0].Stats.XPS[i])
end;
end.
359
=====================================================
Player: advise Legend 2398 4,800,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
99 200,000,000
121 200,000,000
99 200,000,000
Successfully executed.
2013-10-12 18:15:40
From: Brandon
..