Simba Code:
program new;
type
THiscHeader = record
Name,Rank,Overall,OverXP: string;
end;
TSkill = record
Name,Rank,Level,XP: string;
end;
TSkills = array [0..24] of TSkill;
TMinigame = record
Name,Rank,Score: string;
end;
TMinigames = array [0..16] of TMinigame;
TRSPlayer = record
Header : THiscHeader;
Skills : TSkills;
Minigames : TMinigames;
end;
const
JsonAddr = 'http://hiscore.runescape.com/index_lite.ws?player=';
var
Skills,Minigames: TStringArray;
function Occurs(const str, separator: string): integer;
var
i, nSep: integer;
begin
nSep:= 0;
for i:= 1 to Length(str) do
if str[i] = separator then Inc(nSep);
Result:= nSep;
end;
function Explode(const separator: string;const str: string): TStringArray;
var
i, n: integer;
strline, strfield: string;
begin
n:= Occurs(str, separator);
SetLength(Result, n + 1);
i := 0;
strline:= str;
repeat
if Pos(separator, strline) > 0 then
begin
strfield:= Copy(strline, 1, Pos(separator, strline) - 1);
strline:= Copy(strline, Pos(separator, strline) + 1,
Length(strline) - pos(separator,strline));
end
else
begin
strfield:= strline;
strline:= '';
end;
Result[i]:= strfield;
Inc(i);
until strline= '';
if Result[High(Result)] = '' then SetLength(Result, Length(Result) -1);
end;
function StrToHeader(name,s: string):THiscHeader;
var
TSA: TStringArray;
begin
TSA:=Explode(',',s);
result.Name:=name;
result.Rank:=TSA[0];
result.Overall:=TSA[1];
result.OverXP:=TSA[2];
end;
function StrToSkill(name,s: string): TSkill;
var
TSA: TStringArray;
begin
TSA:=Explode(',',s);
result.Name:=name;
result.Rank:=TSA[0];
result.Level:=TSA[1];
result.XP:=TSA[2];
end;
function StrToMinigames(name,s: string):TMinigame;
var
TSA: TStringArray;
begin
TSA:=Explode(',',s);
result.Name:=name;
result.Rank:=TSA[0];
result.Score:=TSA[1];
end;
function FillHiscores(Nickname: string; var Player: TRSPlayer): integer;
var
Info: string;
i,j,hm: integer;
TSA: TStringArray;
Skill: TSkill;
begin
Result:=1;
Info:=GetPage(JsonAddr+nickname);
if not (Length(info)<>0) then
begin
result:=-1;
exit;
end;
TSA:=Explode(#10,Info);
Player.Header:=StrToHeader(Nickname,TSA[0]);
j:=0;
for i:=1 to Length(TSA)-1 do
begin
if not (i>25) then
begin
Player.Skills[j]:=StrToSkill(Skills[j],TSA[i]);
Inc(j);
end else break;
end;
j:=0;
for i:=26 to Length(TSA)-1 do
begin
Player.Minigames[j]:=StrToMinigames(Minigames[j],TSA[i]);
Inc(j);
end;
end;
var
Player: TRSPlayer;
i,res: integer;
begin
Skills:=['Attack', 'Defence', 'Strength',
'Hitpoints', 'Ranged', 'Prayer',
'Magic', 'Cooking', 'Woodcutting',
'Fletching', 'Fishing', 'Firemaking',
'Crafting', 'Smithing', 'Mining',
'Herblore', 'Agility', 'Thieving',
'Slayer', 'Farming', 'Runecrafting',
'Hunter', 'Construction', 'Summoning',
'Dungeoneering'];
Minigames:=['Bounty Hunters','B.H. Rogues','Dominion Tower',
'The Crucible','Castle Wars Games','B.A Attackers',
'B.A Defenders','B.A Collectors','B.A Healers',
'Duel Tournament','Mobilising Armies','Conquest',
'Fist of Guthix','GG: Resource Race','GG: Athletics',
'WE1: Saradomin Team Contribution','WE1: Zamorak Team Contribution'];
res:=FillHiscores('Jake',Player);
if (res = -1) then exit;
ClearDebug;
WriteLn('Player info from hiscores:');
WriteLn('Name: '+Player.Header.Name+#32+'Overall:'+Player.Header.Overall+#32+' rank: '+ Player.Header.Rank+#32+'Overall XP: '+Player.Header.OverXP);
WriteLn('Skills:');
for i:=0 to 24 do
begin
with Player.Skills[i] do
WriteLn(Name+':'+#32+'Rank: '+Rank+';'+#32+'Level:'+Level+#32+';'+'XP:'+Xp+';');
end;
WriteLn('Minigames:');
for i:=0 to 16 do
begin
with Player.Minigames[i] do
WriteLn(Name+':'+#32+'Rank: '+Rank+';'+#32+'Level:'+Score+#32+';');
end;
end.