LeaderboardPost.php

From OBEY wiki
Revision as of 18:04, 3 October 2018 by Dez (Talk | contribs) (Created page with "Different awards can be given to the players on your servers. This is managed through these files file. If you want to give a bunny an award you must be a mod on your server...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Different awards can be given to the players on your servers. This is managed through these files file.

If you want to give a bunny an award you must be a mod on your server and use the /trophy Console Commands.

For example: Typing ```/trophy playerID 1st``` will give that player a "1st" trophy. Whatever trophies you want are defined in this file. In the comments you can get an idea for what the trophies look like.

The trophy records are stored in a text file defined inside of statsConfig.php as shown below:


statsConfig.php

<?php 
$postPW = "myPassword";
$trophiesFile = 'trophies.txt';	
?>

trophies.txt is read by the server each time a new map loads so it can know who has trophies and will show their trophies next to their names respectively in the in-game leader boards.

This file is what the server talks to when it is told to give a player a trophy. It processes the server message, and saves it to the trophies.txt file in the appropriate format. For example this player has 3 trophies of different kinds, but each is red colored. Each player that has won trophies has their own line in the trophies file. playerName^playerID^b1:00ff00#b2:00ff00#a1:00ff00

leaderboardPost.php

<?php 	
 	include("statsConfig.php"); 

	if ($_GET["pw"] != $postPW)
	{
		exit;
	}

	//convert what the server told us happened, into some kind of "record or trophy" that can be displayed next to the player's name
	//the format is: playerName^playerID^b1:00ff00#b2:00ff00#a1:00ff00
	//OBEY servers will read this and search it for players that are joining.  
	//Each time they find the player's ID (the name is just for convenience of manual editing) it will display the award in the score board
	//a1 = a vertical line next to the name
	//a2 = a thick vertical line 
	//a3 = a large cube
	//b1 = a small dot 
	//b2 = 2 small dots , one over the other 

	 
	$trophy = $_GET["trophy"];	
	$profileID = $_GET["profileID"];	 
	$playerName = $_GET["playerName"];	
	
	if ($profileID == "" || $playerName == "" || $trophy == "")
		exit;
	
	 
	 if ($trophy != "1st" && $trophy != "2nd" && $trophy != "3rd")
	 { 
		 echo "[ff0000]Trophy not recognized.[-]"; //this will be printed to everyone on the server
		 exit;
	 }

	
 	$data = file($trophiesFile); // reads an array of lines
	$recordExists = 0;

	
	$outData = array();
	//below, we transcribe each line from $data into $outData, making any needed changes as we go.
	for ($i = 0; $i < Count($data); $i++)
 	{
		if (strncmp($data[$i], $profileID, strlen($profileID)) === 0)  //does the line starts with the profileID?
		{
			$recordExists = 1;
			 			 
			//abcd2234^stuphChicken^b1:00ff00#b1:00ff00#b1:00ff00#
			//we may have a mix of dots.. so lets order them. First place on the left, 2nd markers in the middle, 3rds on the right. 
			//count any we may have
			$firsts = (int)substr_count($data[$i], 'b1:00ff00'); 
			$firsts += (int)substr_count($data[$i], 'b2:00ff00') * 2;
			$seconds = (int)substr_count($data[$i], 'b1:00ffff'); 
			$seconds += (int)substr_count($data[$i], 'b2:00ffff') * 2;
			$thirds = (int)substr_count($data[$i], 'b1:008989'); 
			$thirds += (int)substr_count($data[$i], 'b2:008989') * 2;
			 
			//add the trophy given by the url
			if ($trophy == "1st") //won first place
				 $firsts++;
			else if ($trophy == "2nd") 
				 $seconds++;
			else if ($trophy == "3rd") 
				 $thirds++;
			else
			{
 				 echo "[ff0000]Trophy not recognized.[-]"; //this will be printed to everyone on the server
				 exit;
			}

			//reorganize and print all awards, so that they appear in order 1st, 2nd, 3rd place wins
			$awards = "";
			for ($d = 0; $d < (int)floor($firsts/ 2); $d++)  //firsts/2 in a way that will not round or cast to float
				$awards .= "b2:00ff00#";
			if ($firsts % 2 == 1)
				$awards .= "b1:00ff00#";
			for ($d = 0; $d < (int)floor($seconds/ 2); $d++)   
				$awards .= "b2:00ffff#";
			if ($seconds % 2 == 1)
				$awards .= "b1:00ffff#";
			for ($d = 0; $d < (int)floor($thirds/ 2); $d++)  
				$awards .= "b2:008989#";
			if ($thirds % 2 == 1)
				$awards .= "b1:008989#";

			$outData[Count($outData)] = $profileID."^".$playerName."^".$awards."\n";
	   }
	   else if ($data[$i] != "" && $data[$i] != "\n" && $data[$i] != "\n\n")
	   {
		   $outData[Count($outData)] = $data[$i]; //nothing noted, just copy this line to the end of the output
	   }
	}
	
	if ($recordExists == 0) //this is the first trophy for this player
	{
		if ($trophy == "1st") //won first place
			 $outData[Count($outData)] = $profileID."^".$playerName."^b1:00ff00\n"; //add the new record
		else if ($trophy == "2nd") 
			 $outData[Count($outData)] = $profileID."^".$playerName."^b1:00ffff\n"; 
		else if ($trophy == "3rd") 
			 $outData[Count($outData)] = $profileID."^".$playerName."^b1:008989\n"; 	
	}
	
	file_put_contents($awardsFile, implode("", $outData));
	
	
	echo "[00ff00]". $playerName ." = ". $trophy."![-]"; //this will be printed to everyone on the server


 ?>