Scripts

RuneScape Player-levels script

RuneScape in een MMORPG (Massive Multiplayer Online Role Playing Game) op te vinden op www.runescape.com . Met dit script kun je de Levels van een RuneScape speler uit de hiscore-tabellen van www.runescape.com halen. Ik ben een clansite aan het schrijven en omdat ik daar hiscore-tabellen wilde hebben heb ik dit script geschreven, het heeft wat moeite gekost (:P) maar omdat het wiel niet 2 keer uitgevonden hoeft te worden post k het hier maar ff. Edit: Dit script is outdated, naast dat hij gewoon niet meer werkt is ook gewoon de programmering brak. Ik laat het staan in de hoop dat iemand er wat van opsteekt. De werkende, nieuwe versie staat hier ;).

runescape-playerlevels-script
<?php
// Haal alles van de server
function getRsUserRawHtml($user){
	$fp = fsockopen("hiscore.runescape.com", 80, $errno, $errstr, 30); 
	if (!$fp) die ("$errstr ($errno)<br />\n"); 
	   $out = "GET /aff/runescape/hiscorepersonal.cgi?username=$user HTTP/1.1\r\n"; 
	   $out .= "Host: hiscore.runescape.com\r\n"; 
	   $out .= "Connection: Close\r\n\r\n"; 
	   fwrite($fp, $out); 
	   $html = "";
	   while (!feof($fp)) { 
	       $html .= fgets($fp, 1240); // Gooi alle html van de pagina in een variabele, let op: de http-headers zitten er ook in
	   } 
	fclose($fp);
	return $html;
}
// Checkt of de invoer alphanumeriek is, alle namen in RS zijn alphanumeriek
function alphaNumeriek($text, $extra = "") {
    for ($i = 0; $i < strlen($text); $i++) {    	
    	if (!ereg("[A-Za-z0-9 $extra]", $text[$i])) {
    		return false;
    	}
    }
    return true;
}
function getRsUserArray($source, $disciplines){
	// Verander de rauwe html code in een grote array
	if(!strpos($source, "does not currently appear in the hiscores")){
		foreach ($disciplines as $value){
			if(strstr($source, $value) !== false){
				$temp = explode("$value</a></td>\n<td align=\"right\">", $source);
				$temp = explode("\n</td></tr>\n", $temp['1'], 2);
				// $temp['0'] is van belang;
				$temp2 = explode("\n</td><td align=\"right\">\n", $temp['0']);
				$temp = explode("</td><td align=\"right\">\n", $temp2['0']);
				$return[$value]['rank']  = $temp['0'];
				$return[$value]['level'] = $temp['1'];
				$return[$value]['xp'] 	 = $temp2['1']; // Inderdaad, een hoog mierengeneuk, maar trim() deed het niet :(
			} else {
				$return[$value] = array("rank" => "0", "level" => "0", "xp" => "0");
			}
		}// Einde array
		return $return;
	} else {
		return false;
	}
}
// Veranderd de naam zo, dat je hem naar de server van RS kunt sturen, 
// komt eigenlijk neem op naar lowercase en " " veranderen in "+"
function getRsUsername($name){
	if(alphaNumeriek($name, "+")){
		strtolower($name);
		return str_replace(" ", "+", $name);
	} else {
		return false;
	}
}
	
// Alles hieronder is alleen maar om te laten zien hoe je het script kunt gebruiken,
// de kern van het script staat hierboven en heeft als doel om alle stats van een
// RS-speler in een grote array te zetten. De Combat Level is er helaas niet in terug te vinden..

$user = "Weed Tiger"; // Voer hier je naam in
$user = getRsusername($user);

if(!$user) die("Geen of ongeldige gebruikersnaam!");

$disciplines = array('Overall', 'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged', 'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching', 'Fishing',
'Firemaking', 'Crafting', 'Smithing', 'Mining', 'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming', 'Runecrafting');

$rankings = getRsUserArray( getRsUserRawHtml($user), $disciplines);

if($rankings !== false){
	echo "<table>\n<tr><td>Discipline</td><td>Rank</td><td>Level</td><td>XP</td></tr>\n";
	foreach($rankings as $name => $values){
		if($values['rank'] !== "0"){
			echo "<tr><td>$name</td><td>".$values['rank']."</td><td>".$values['level']."</td><td>".$values['xp']."</td></tr>\n";
		}
	}
	echo "</table>\n";
} else {
	echo "Deze persoon komt niet voor in de hiscores";
}
// var_dump($rankings); // haal "//" aan het begin weg om de structuur van de array te zien waar alle skills met hun waardes staan
?>

Reacties

0
Nog geen reacties.