Versio

RuneScape level lookup

Het vorige RS statistic lookup script van Rolf ( http://www.phphulp.nl/php/scripts/2/532/ ) werkt niet meer en hij wilde hem ook niet meer updaten.
Daarom heb ik maar besloten een nieuw stat-lookup script te maken.

Dankzij jagex kan je nu gelukkig de highscores ook sneller opvragen, wat nu ook goed merkbaar zou moeten zijn.

Ik geef geen ondersteuning op dit script. Dit werkend voorbeeld zou genoeg moeten zijn om je op weg te helpen.

Je kan gegevens op twee manieren opvragen:
$result["Defence"]["rank"]
of gewoon in een lus plaatsen.

$result["Defence"]["skill"]
zal Defence weergeven, waardoor je implementatie makkelijker zou moeten zijn.

Suggesties, vragen, opmerkingen, meld maar :)

Wijziging 03/03/03:
Summoning skill toegevoegd
Wijziging 06/12/07:
Eventjes een kleine notice neergezet + de file() regel aangepast zodat de newlines automatisch verwijdert worden.

Voorbeeld: http://worldswitcher.chessspider.nl/lookup.php

Gesponsorde koppelingen

PHP script bestanden

  1. runescape-level-lookup

 

19 reacties op 'RuneScape level lookup'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Luuk Schakenraad
Luuk Schakenraad
5 jaar geleden
 
0 +1 -0 -1
Mooi, maar dit kan anders:
if($arrLevels === false ||
namelijk:
if($arrLevels ||

verder niet echt goed naar gekeken.
Kasper Isgek
Kasper Isgek
5 jaar geleden
 
0 +1 -0 -1
@Tommy: if($arrLevels) controleert of $arrLevels true is, niet of het false is. Dan zou het dus if(!$arrLevels) moeten zijn.
Machiel Pronk
Machiel Pronk
5 jaar geleden
 
0 +1 -0 -1
Ik heb hiervoor gekozen omdat ik denk dat het overzichtelijker is. Aangezien $arrLevels of een boolean of een array is, leek het mij duidelijk om het op deze manier te testen of het een boolean was met de waarde false, of niet.

Hetgene waar ik zelf niet blij mee ben met dit script is dat als de username niet bestaat, RuneScape dan een 404 foutmelding geeft. Dat word in dit script opgevangen als een failure en de bijbehorende waarschuwing word onderdrukt.
Luuk Schakenraad
Luuk Schakenraad
5 jaar geleden
 
0 +1 -0 -1
Oh, is waar ook kasper.
Hylke
Hylke
5 jaar geleden
 
0 +1 -0 -1
Waarom zou je "is identical to" gebruiken in dit geval? =) en heb je even een username van iemand?
Thijs X
Thijs X
5 jaar geleden
 
0 +1 -0 -1
Leuk scriptje,

@ Hylke,
voorbeeld van username staat in het script: ChessSpider
Wouter K
Wouter K
5 jaar geleden
 
0 +1 -0 -1
of gebruik mijn oude osm333
PHP erik
PHP erik
5 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if($arrLevels === false || empty($username) || strlen($username) > 15)
        return false;


Het is aan te raden overal brackets te gebruiken; consequent en overzichtelijk.

Maar ook ik wil even iets zeggen over dat === false. $arrLevels bevat namelijk de return-value van file(). file() returnt een array of geeft een error. Staat een error gelijk aan 'identical to false'? Dat vraag ik me sterk af. Ik zou zelf zeggen null in plaats van false.
Machiel Pronk
Machiel Pronk
5 jaar geleden
 
0 +1 -0 -1
@PHPerik
http://us.php.net/manual/en/function.file.php

"Returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached. Upon failure, file() returns FALSE. "

Behalve dat word er ook nog een E_WARNING gelanceerd met een beschrijving van de fout.

Dat van brackets ben ik in principe wel met je eens. Echter heb ik mijzelf dit zo aangeleerd op mijn werk omdat dat daar de standaard is, terwijl ik dat daarvoor wel altijd met brackets deed.
Roel van de Water
Roel van de Water
5 jaar geleden
 
0 +1 -0 -1
Hij doet het niet, geen een username...
Machiel Pronk
Machiel Pronk
5 jaar geleden
 
0 +1 -0 -1
@Roel
Dat ligt echt aan jou ben ik bang. Op mijn persoonlijke host is de code precies zoals hij nu bovenstaand is.

http://chessspider.no-ip.info/lookup.php

En hij werkt perfect. Haal de @ even weg bij regel 38 voor de file() functie en zeg even of er een foutmelding komt (en plaats hem hier).
Eissoj
Eissoj
5 jaar geleden
 
0 +1 -0 -1
Nice script Machiel, ik heb alleen een probleempje;

$result["Defence"]["skill"] ik krijg: Notice: Undefined variable: result
Machiel Pronk
Machiel Pronk
5 jaar geleden
 
0 +1 -0 -1
Dan bestaat de variabele $result niet ;)
Waarschijnlijk heb je het voorbeeld aangepast? Kijk nog eens goed naar de $stats array, hoe die uitgelezen word en waar die vandaan komt.
Eissoj
Eissoj
5 jaar geleden
 
0 +1 -0 -1
Ik had niks veranderd, maar ik heb het gevonden, bij mij werd het dus

$stats['Defence']['skill']
Slash
slash
4 jaar geleden
 
0 +1 -0 -1
IK heb wat zitten proberen om een skill signature te maken, maar ik zit vast
hij neemt altijd m'n totaal skill terwijl ik bv m'n prayer wil laten zien.
De skill prayer neemt hij wel maar de xp, rank of lvl niet daar neemt hij altijd de resultaten van m'n totaal.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
putenv('GDFONTPATH=' . realpath('.'));
$imgname='baseimage.jpg';
$im = @imagecreatefromjpeg($imgname);


error_reporting(E_ALL);

function
GetRSstats($username,&$result)
{

    # Return: Boolean
    # And an empty array in your second parameter on failure, or filled with the skills on success.
    # Please note; no support is given.
/*
###
### Made By Chessspider ( www.chessspider.nl - 2007© )
###
### Please leave this notice here. If you really want to make me happy, also put a link to my runescape world switcher:
### http://worldswitcher.chessspider.nl/
### on your website.
*/
        # You might have to update these some day...

    $arrSkills = array(
            "Prayer",
          
            );
// Skills... Order DOES matter, it should always be the same order as the highscores page.

    $sDomain = "http://hiscore.runescape.com/"; // With trailing /
    $sPage = "index_lite.ws?player="; // Page to request

        # You shouldnt have to change anything from here

    $arrLevels = @file($sDomain.$sPage.urlencode($username),FILE_IGNORE_NEW_LINES); // Obtaining scores, surpressing possible warnings
    $result = Array();

    if($arrLevels === false || empty($username) || strlen($username) > 15)
        return false;

    $iLength = count($arrSkills);
    for($i = 0;$i < $iLength;$i++)
    {

        $levels = explode(",",$arrLevels[$i]);

       $arrStats[$arrSkills[$i]]["skill"] = $arrSkills[$i];
        $arrStats[$arrSkills[$i]]["rank"] = $levels[0];
        $arrStats[$arrSkills[$i]]["level"] = $levels[1];
        $arrStats[$arrSkills[$i]]["exp"] = $levels[2];


    }


    $result = $arrStats;
    return true;
}



    if(GetRSstats("slash350",$stats))
    {


        foreach($stats as $values)

            

$var = $values['skill'];
$var1 = $values['exp'];

$color = imagecolorallocate($im, 0, 0, 0);
$font = 'arial.ttf';
imagettftext($im, 9, 9, 77, 28, $color, $font, $var);
imagettftext($im, 9, 9, 129, 54, $color, $font, $var1);
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($img);
}

    else
    {
        echo "Username does not exist";
    }

?>


Kan er iemand helpen ? alvast bedankt.
Iemand
iemand
4 jaar geleden
 
0 +1 -0 -1
Ik heb het script aangepast zodat je je username kan invoeren en als je skill niet ranked is er ook not ranked komt te staan.
LET OP: dit bestand moet wel opgeslagen worden als <rslookup.php>.
Dit is mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
error_reporting(E_ALL);
function
GetRSstats($username,&$result)
{

    $arrSkills = array(
            "Total",
            "Attack",
            "Defence",
            "Strength",
            "Hitpoints",
            "Ranged",
            "Prayer",
            "Magic",
            "Cooking",
            "Woodcutting",
            "Fletching",
            "Fishing",
            "Firemaking",
            "Crafting",
            "Smithing",
            "Mining",
            "Herblore",
            "Agility",
            "Thieving",
            "Slayer",
            "Farming",
            "Runecraft",
            "Hunter",
            "Construction",
            "Summoning"
            ); // Skills... Order DOES matter, it should always be the same order as the highscores page.

    $sDomain = "http://hiscore.runescape.com/"; // With trailing /
    $sPage = "index_lite.ws?player="; // Page to request

        # You shouldnt have to change anything from here

    $arrLevels = @file($sDomain.$sPage.urlencode($username),FILE_IGNORE_NEW_LINES); // Obtaining scores, surpressing possible warnings
    $result = Array();

    if($arrLevels === false || empty($username) || strlen($username) > 15)
        return false;

    $iLength = count($arrSkills);
    for($i = 0;$i < $iLength;$i++)
    {

        $levels = explode(",",$arrLevels[$i]);
        $arrStats[$arrSkills[$i]]["skill"] = $arrSkills[$i];
        $arrStats[$arrSkills[$i]]["rank"] = $levels[0];
        $arrStats[$arrSkills[$i]]["level"] = $levels[1];
        $arrStats[$arrSkills[$i]]["exp"] = $levels[2];
    }


    $result = $arrStats;
    return true;
}

?>

<html>
<head>
<title>Stat lookup</title>
</head>
<body>
<form action="rslookup.php" method="POST">
Username:&nbsp;&nbsp;&nbsp;<input type="text" name="uname" value="" />
<br /><input type="submit" value="Zoek hiscores" />
</form><br />
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$us
= $_POST['uname'];
    if(GetRSstats($us,$stats))
    {

        echo "Stats from: <b>".$us."</b><br /><br />";
        echo "<table width=600 id=l style='border-color:black; font-weight:800'>\n<tr><td style='font-weight:bolder'>Skill</td><td style='font-weight:bolder; width:300'>Rank</td><td style='font-weight:bolder; width:300'>Level</td><td style='font-weight:bolder; width:300'>XP</td></tr>\n";
        foreach($stats as $values){
        echo norank("<tr><td>".$values['skill']."</td><td>".$values['rank']."</td><td>".$values['level']."</td><td>".$values['exp']."</td></tr><tr><td></td></tr>\n");
        }

        echo "</table><br />";
     }

    else
    {
     if($us!=''){
     echo 'Username does not exists!!!';
     }
else{
     echo 'No username entered!!!';
     }
     }
function
norank($tekst) {
        $x = '-1';
        $tekst = eregi_replace($x, '<i style="font-weight:normal">Not Ranked</i>', $tekst);
        echo $tekst;
}

?>

</body>
</html>
Youri
Youri
4 jaar geleden
 
0 +1 -0 -1
Als ik nu naar mijn site toe ga, (http://youri.woelmuis.nl/lookup.php), staat er "Username does not exist".
Matthias
Matthias
3 jaar geleden
 
0 +1 -0 -1
Mooi gedaan ik ken wel een paar mensen die hier al een tijdje over zagen :p
Danny Appeldoorn
Danny Appeldoorn
3 jaar geleden
 
0 +1 -0 -1
Maak er gewoon zelf één. Zo moeilijk is het niet. Het enige wat je nodig hebt is een skill array.

@Youri: Word de username wel door gegeven?

Edit: Wacht maar tot dat mijn project af is. (Zal alvast iets verklappen.. GE + API)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Labels
  • Geen tags toegevoegd.