Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мониторинг SA:MP сервера для DLE

Статус
В этой теме нельзя размещать новые ответы.

LenZ

Нуль
Регистрация
16 Окт 2016
Сообщения
5
Лучшие ответы
0
Репутация
0
Доброго времени суток.
Многие искали мониторинг сервера SA:MP для DLE 9.7 и выше.
Вот он,нашел я в жопе где нету автора и он не очень был,и инструкции не было.
Я дороботал и отдаю Вам.
Установка:
1.Откройте
PHP:
 index.php
в главной директории сайта.
2.Найдите
PHP:
 require_once ROOT_DIR . '/engine/init.php';
3.Ниже
PHP:
 require_once ROOT_DIR . '/engine/init.php';
вставьте
PHP:
 require_once ROOT_DIR . '/engine/modules/msamp/monitoring.php';
4.Найдите
PHP:
 $tpl->set ( '{calendar}', $tpl->result['calendar'] );
5.ВЫШЕ
PHP:
 $tpl->set ( '{calendar}', $tpl->result['calendar'] );
вставьте
PHP:
 $tpl->set('{server_samp}', $server_samp);
6.Откройте папку
Код:
 engine
7.Откройте папку
Код:
 modules
8.Создайте папку
Код:
 msamp
9.Создать файл [/CODE] monitoring.php [/CODE]
10.Вставить туда это:
[HIDE=0]
PHP:
<?php

require_once ENGINE_DIR.'/modules/msamp/API.php';

$ip = "localhost"; //IP адрес сервера
$port = "7777";   //Порт сервера
$query = new SampQueryAPI('ip', 'port');	

		{
	    $aInformation = $query->getInfo();
		$aServerRules = $query->getRules();
	    }
		
// Шаблон для вывода блока SAMP Мониторинга
	$server_samp = 
	"<center>
	<b>".$aInformation['hostname']."</b><br><br>
	<b>IP:</b> ".$ip.":".$port."<br>  
	<b>Игроков: </b>".$aInformation[players]."/".$aInformation[maxplayers]."<br>
	<b>Карта: </b>".$aInformation[mapname]."<br>
	<b>Gamemode: </b>".$aInformation[gamemode]."
    </center>";

?>
[/HIDE]
10.Сохранить
11.Создать файл
Код:
 API.php
12.Вставить это:
[HIDE=0]
PHP:
<?php
class SampQueryAPI
{
	private $rSocket = false;
	private $aServer = array();
	public function __construct($sServer, $iPort = 7777)
	{

		$this->aServer[0] = $sServer;
		$this->aServer[1] = $iPort;
		
		$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;
	}
	public function __destruct()
	{
		@fclose($this->rSocket);
	}
	public function isOnline()
	{
		return isset($this->aServer[4]) ? $this->aServer[4] : false;
	}
	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;
	}

	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;
	}

	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;
	}

	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;
	}
	

	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;
	}
	
	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;
	}
}
[/HIDE]
13.Что бы показать мониторинг используйте тэг: {server_samp}
Прошу поставить "+" если Вам помогло или пригодилось.На это все.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу