Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano

Cześć wszystkim !

Mam mały problem związany z modyfikacją. Mianowicie mam dwa pliki - jeden Sampquery.php a drugi x.php odpowiadający za wyświetlanie ogólnego wyniku pracy (Liczba Graczy: xxx). Gdy wklepuję w globaltemplate (Poradnik: Jak dodać własny link w navbarze) następujący kod:

<?php include "x.php"; ?>

To tak, jakbym nic tam nie wpisał. Nawet żadnego błędu nie wyświetla. Czy moglibyście mi pomóc ? :P

Zawartość następujących plików:

x.php

<?php


require "SampQueryAPI.php";
$query = new SampQueryAPI('188.116.32.37', '6666');


if($query->isOnline())
{
$aInformation = $query->getInfo();
$aServerRules = $query->getRules();

?>
<?= $aInformation['players'] ?> / <?= $aInformation['maxplayers'] ?>

SampQueryAPI.php

<?php
/**
*	This API connects directly to the server, without any need for any
*	middlemen connections.
*	Your server must have fsockopen enabled in order to access the 
*	functions that have been made available from this.
*
*	@package sampAPI
*	@version 1.2
*	@author David Weston <[email protected]>
*	@copyright 2010; http://www.typefish.co.uk/licences/
*/


class SampQueryAPI
{
/**
 *	@ignore
 */
private $rSocket = false;


/**
 *	@ignore
 */
private $aServer = array();


/**
 *	Creation of the server class.
 *
 *	@param string $sServer Server IP, or hostname.
 *	@param integer $iPort Server port
 */
public function __construct($sServer, $iPort = 7777)
{
	/* Fill some arrays. */
	$this->aServer[0] = $sServer;
	$this->aServer[1] = $iPort;

	/* Start the connection. */	
	$this->rSocket = fsockopen('udp://'.$this->aServer[0], $this->aServer[1], $iError, $sError, 2);

	if(!$this->rSocket)
	{
		$this->aServer[4] = false;
		return;
	}

	socket_set_timeout($this->rSocket, 2);

	$sPacket = 'SAMP';
	$sPacket .= chr(strtok($this->aServer[0], '.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr($this->aServer[1] & 0xFF);
	$sPacket .= chr($this->aServer[1] >> 8 & 0xFF);
	$sPacket .= 'p4150';

	fwrite($this->rSocket, $sPacket);

	if(fread($this->rSocket, 10))
	{
		if(fread($this->rSocket, 5) == 'p4150')
		{
			$this->aServer[4] = true;
			return;
		}
	}

	$this->aServer[4] = false;
}


/**
 *	@ignore
 */
public function __destruct()
{
	@fclose($this->rSocket);
}


/**
 *	Used to tell if the server is ready to accept queries.
 *
 *	If false is returned, then it is suggested that you remove the
 *	class from active use, so that you can reload the class if needs
 *	be.
 *
 *	@return bool true if success, false if failure.
 */
public function isOnline()
{
	return isset($this->aServer[4]) ? $this->aServer[4] : false;
}


/**
 *	This function is used to get the server information.
 *
 *	<code>
 *	Array
 *	(
 *		[password] => 0
 *		[players] => 9
 *		[maxplayers] => 500
 *		[hostname] => Everystuff Tr3s [MAD]oshi (03a Final) [FIXED]
 *		[gamemode] => Stunt/Race/DM/FR Everystuff
 *		[mapname] => Everystuff
 *	)
 *	</code>
 *
 *	@return array Array of server information.
 */
public function getInfo()
{
	@fwrite($this->rSocket, $this->createPacket('i'));

	fread($this->rSocket, 11);

	$aDetails['password'] = (integer) ord(fread($this->rSocket, 1));

	$aDetails['players'] = (integer) $this->toInteger(fread($this->rSocket, 2));

	$aDetails['maxplayers'] = (integer) $this->toInteger(fread($this->rSocket, 2));

	$iStrlen = ord(fread($this->rSocket, 4));
	if(!$iStrlen) return -1;

	$aDetails['hostname'] = (string) fread($this->rSocket, $iStrlen);

	$iStrlen = ord(fread($this->rSocket, 4));
	$aDetails['gamemode'] = (string) fread($this->rSocket, $iStrlen);

	$iStrlen = ord(fread($this->rSocket, 4));
	$aDetails['mapname'] = (string) fread($this->rSocket, $iStrlen);

	return $aDetails;
}


/**
 *	This function gets a basic list of all the players on the server.
 *
 *	Note as of 0.3.0, the amount of players that can be retrieved is
 *	limited to 100. This means if there are more players than 100,
 *	then no data will be returned, and it will be a blank array.
 *
 *	<code>
 *	Array
 *	(
 *		[0] => Array
	 *			(
 *				[nickname] => K1nNngO
 *				[score] => 72
 *			)
 *		
 *		[1] => Array
 *			(
 *				[nickname] => [kikOo]
 *				[score] => 150
 *			)
 *
 *		[and so on...]
 *	)
 *	</code>
 *
 *	@return array Array of player information.
 */
public function getBasicPlayers()
{
	@fwrite($this->rSocket, $this->createPacket('c'));
	fread($this->rSocket, 11);

	$iPlayerCount = ord(fread($this->rSocket, 2));
	$aDetails = array();

	if($iPlayerCount > 0)
	{
		for($iIndex = 0; $iIndex < $iPlayerCount; ++$iIndex)
		{
			$iStrlen = ord(fread($this->rSocket, 1));
			$aDetails[] = array
			(
				"nickname" => (string) fread($this->rSocket, $iStrlen),
				"score" => (integer) $this->toInteger(fread($this->rSocket, 4)),
			);
		}
	}

	return $aDetails;
}


/**
 *	This function gets a detailed list of all the players on the server.
 *
 *	Note as of 0.3.0, the amount of players that can be retrieved is
 *	limited to 100. This means if there are more players than 100,
 *	then no data will be returned, and it will be a blank array.
 *
 *	<code>
 *	Array
 *	(
 *		[0] => Array
 *			(
 *				[playerid] => 0
 *				[nickname] => K1nNngO
	 *				[score] => 72
 *				[ping] => 195
 *			)
 *	
 *		[1] => Array
 *			(
 *				[playerid] => 1
 *				[nickname] => [kikOo]
 *				[score] => 150
 *				[ping] => 375
 *			)
 *
 *		[and so on...]
 *	)
 *	</code>
 *
 *	@return array Array of player information.
 */
public function getDetailedPlayers()
{
	@fwrite($this->rSocket, $this->createPacket('d'));
	fread($this->rSocket, 11);

	$iPlayerCount = ord(fread($this->rSocket, 2));
	$aDetails = array();

	for($iIndex = 0; $iIndex < $iPlayerCount; ++$iIndex)
	{
		$aPlayer['playerid'] = (integer) ord(fread($this->rSocket, 1));

		$iStrlen = ord(fread($this->rSocket, 1));
		$aPlayer['nickname'] = (string) fread($this->rSocket, $iStrlen);

		$aPlayer['score'] = (integer) $this->toInteger(fread($this->rSocket, 4));
		$aPlayer['ping'] = (integer) $this->toInteger(fread($this->rSocket, 4));

		$aDetails[] = $aPlayer;
		unset($aPlayer);
	}

	return $aDetails;
}


/**
 *	This function gets all the server rules from the server.
 *
 *	Rules in this context are not player rules, they are client rules,
 *	like the weather of the server, time, and so on. (Custom rules,
 *	when supported by a SA-MP plugin, will be included here.) 
 *
 *	<code>
 *	Array
 *	(
 *		[gravity] => 0.007900
 *		[mapname] => Everystuff
 *		[version] => 0.3a
 *		[weather] => 0
 *		[weburl] => samp.madoshi.net
 *		[worldtime] => 12:00
 *	)
 *	</code>
 *
 *	@return array Array of server rules.
 */
public function getRules()
{
	@fwrite($this->rSocket, $this->createPacket('r'));
	fread($this->rSocket, 11);

	$iRuleCount = ord(fread($this->rSocket, 2));
		$aReturn = array();

	for($iIndex = 0; $iIndex < $iRuleCount; ++$iIndex)
	{
		$iStrlen = ord(fread($this->rSocket, 1));
		$sRulename = (string) fread($this->rSocket, $iStrlen);

		$iStrlen = ord(fread($this->rSocket, 1));
		$aDetails[$sRulename] = (string) fread($this->rSocket, $iStrlen);
	}

	return $aDetails;
}


/**
 *	@ignore
 */
private function toInteger($sData)
{
	if($sData === "")
	{
		return null;
	}

		$iInteger = 0;
		$iInteger += (ord($sData[0]));

		if(isset($sData[1]))
		{
			$iInteger += (ord($sData[1]) << 8);
		}

		if(isset($sData[2]))
		{
			$iInteger += (ord($sData[2]) << 16);
		}

		if(isset($sData[3]))
		{
			$iInteger += (ord($sData[3]) << 24);
		}

		if($iInteger >= 4294967294)
	{
			$iInteger -= 4294967296;
	}

		return $iInteger;
}


/**
 *	@ignore
 */
private function createPacket($sPayload)
{
	$sPacket = 'SAMP';
	$sPacket .= chr(strtok($this->aServer[0], '.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr(strtok('.'));
	$sPacket .= chr($this->aServer[1] & 0xFF);
	$sPacket .= chr($this->aServer[1] >> 8 & 0xFF);
	$sPacket .= $sPayload;

	return $sPacket;
}
}

  • Manager
Opublikowano

Automatyczna wiadomość

Ten temat został przeniesiony z forum:

"Invision Power Board -> Invision Power Board 3.x -> Modyfikacje w produkcji"

do:

"Invision Power Board -> Zaawansowane programowanie"

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

  • Manager
Opublikowano

A jakbyś tak spróbował. W skinie dodać:

{parse expression="include 'x.php';  if($query->isOnline()) { $aInformation = $query->getInfo(); $aServerRules = $query->getRules(); "}

A potem wyświetlenie tego w dowolnym miejscu skina:

{$aInformation}

I:

{$aServerRules}

x.php:

<?php


require "SampQueryAPI.php";
$query = new SampQueryAPI('188.116.32.37', '6666');
?>

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

Wkleiłem to co podałeś. Czyli pierwszy fragment w skin, później według poradnika jak dodać kolejny link w navbarze wklepałem drugi jak i trzeci kod. Ostatnią czynnością była podmianka x.php na to co podałeś Ty sam.

Opublikowano
</div>
			<li id='nav_custom_link' class='left'><php>
include 'x.php'; 

if( $query->isOnline() ) 
{ 
       $aInformation = $query->getInfo(); 
       $aServerRules = $query->getRules();
}
</php></li>
			<if test="pmbox:|:is_array( $items['notifications'] )">

Opublikowano

{parse expression="include 'x.php';  if($query->isOnline()) { $aInformation = $query->getInfo(); $aServerRules = $query->getRules(); "}

Dodałem na początku skinu globaltemplate.

  • Manager
Opublikowano

Brr, to ja mogę się pomylić z TWOIM kodem, ale Ty?

Użyj tego:

<php>
include 'x.php'; 

if( $query->isOnline() ) 
{ 
       $aInformation = $query->getInfo(); 
       $aServerRules = $query->getRules();
}
</php>
{$aInformation['players']}
{$aInformation['maxplayers']}

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.