- Home /
Question by
TicTac · May 02, 2013 at 08:08 PM ·
highscoresserverside
How do I display Server Side Highscores
I have been following this tutorial on serverside highscores, Everything works fine however I don't want to display the result of getScore as a guiText but in OnGUI on a Label. How do I save the result of getScore as a variable so I can load it into the GUI?
Here is the script:
private var secretKey="*********"; // Edit this value and make sure it's the same as the one stored on the server
var addScoreUrl="http://rossblog.co.uk/games/cowcatcher/addscore.php?"; //be sure to add a ? to your url
var highscoreUrl="http://rossblog.co.uk/games/cowcatcher/display.php";
var manager : Manager_Script;
var scoresText : GUIText;
var once : boolean = false;
function Start() {
if(Application.loadedLevel == 0){
manager = GameObject.FindGameObjectWithTag("Manager").GetComponent(Manager_Script);
}
getScores();
}
function postScore(name, score) {
if(!once){
//This connects to a server side php script that will add the name and score to a MySQL DB.
// Supply it with a string representing the players name and the players score.
var hash=Md5.Md5Sum(name + manager.playerScore + secretKey);
var highscore_url = addScoreUrl + "name=" + WWW.EscapeURL(manager.playerName) + "&score=" + manager.playerScore + "&hash=" + hash;
once = true;
// Post the URL to the site and create a download object to get the result.
hs_post = WWW(highscore_url);
yield hs_post; // Wait until the download is done
if(hs_post.error) {
print("There was an error posting the high score: " + hs_post.error);
}
}
}
// Get the scores from the MySQL DB to display in a GUIText.
function getScores() {
scoresText.text = "Loading Scores";
hs_get = WWW(highscoreUrl);
yield hs_get;
Debug.Log(hs_get);
downloadedScores = hs_get.text;
if(hs_get.error) {
print("There was an error getting the high score: " + hs_get.error);
} else {
scoresText.text = hs_get.text; // this is a GUIText that will display the scores in game.
}
}
function OnGUI(){
if(manager.gameOver == true){
GUI.Box(Rect(350,30,450,400),"Highscores");
GUI.Label (Rect (50, 50, 100, 20), "MOO");
}
}
Comment
Answer by pad406 · May 08, 2013 at 09:23 PM
The server returns all the high scores as 1 big line of text, in your case hs_get.text. However each line is split by a new line character '\n' and each field within the line is split by a tab '\t'. So what you need to do is split them up manually. Something like this (c#, sorry not too hot on Java)
//Split the hs_get.text by '\n' into an array of string
string[] line = hs_get.text.Split ('\n');
foreach (string thisLine in line )
{
string[] fields = thisLine.Split('\t');
//Split thhisLine by '\t' into an array of string
foreach (string thisField in fields)
{
//Do something interesting with the field
}
}