Перейти к контенту

[2.3.x]Игровые сервера ((!)только по IPB 2.2.2)


Рекомендуемые сообщения

Для этого нужно, чтобы сервер как-то выводил это количество, API нужно или ещё что.

 

Та без проблем... Вот скрипт для вывода он-лайна... Встраивается в любой сайт... В форуме честно скажу не пробовал.

 

<?php
// Настройка базы данных.
$dbuser = "";	  // Пользователь
$dbpass = "";		  // Пароль
$dbhost = ""; // Адресс БД
$dbname = "";	 // Имя базы данных

$link = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db ($dbname);
@$query = "select online from characters where online>0";
@$result = mysql_query ($query);
@$online= mysql_num_rows($result);
@$onlinereal = $online;
@mysql_free_result($result);
@mysql_close($link);echo "<font color='white' size=1>В игре:<font color='green'>$onlinereal</font>"
?>

Изменено пользователем Iliya
Ссылка на комментарий
Поделиться на других сайтах

Этот скрипт выводит количество игроков на конкретном сервере, который у вас стоит, и не факт даже что для любого другого пойдёт.

 

А тема про определения включен ли сервер по такому-то IP.

Ссылка на комментарий
Поделиться на других сайтах

Странно у меня сервер ON , а он пишит что OFF

аналогично... не работает... пишет OFF :D

 

не работает... пишет OFF ;) хотя сервер работает... испробовал много серверов :) (ipb 2.2.2), знает кто нибудь как енто устранить? :)

А на хостенге разрешены изходящие соединения ?

Ссылка на комментарий
Поделиться на других сайтах

а вообще было бы неплохо нечто такое, что будет мониторить сервак постоянно.

бо этот мод - красивая, но полностью бесполезная штука.

Ссылка на комментарий
Поделиться на других сайтах

Тему читаем внимательнее. Как вставить результат работы скрипта можно сказать, используя тот же exec.file например. А как написать скрипт мониторинга, выдающий эти картинки и статистику нужно спрашивать у тех кто в ЦС серверах разбирается.
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...
Тему читаем внимательнее. Как вставить результат работы скрипта можно сказать, используя тот же exec.file например. А как написать скрипт мониторинга, выдающий эти картинки и статистику нужно спрашивать у тех кто в ЦС серверах разбирается.

$s_n = "udp://".$s_n;
$fp = @fsockopen($s_n, $s_p, $errno, $errstr, 1);

смысл понятен?

Ссылка на комментарий
Поделиться на других сайтах

$s_n = "udp://".$s_n;
$fp = @fsockopen($s_n, $s_p, $errno, $errstr, 1);

смысл понятен?

«Ну да, и что?» © не помню кто.

 

Это ещё на предыдущей странице написано...

Ссылка на комментарий
Поделиться на других сайтах

$s_n = "udp://".$s_n;
$fp = @fsockopen($s_n, $s_p, $errno, $errstr, 1);

смысл понятен?

«Ну да, и что?» © не помню кто.

 

Это ещё на предыдущей странице написано...

не написано про протокол udp ничего, на котором работает контр-страйк и некоторые другие игры.

на основе данного мода функция regex_server_tag будет выглядеть так (чтобы сканило сразу два протокола):

function regex_server_tag($s, $p) {
$s = gethostbyname($s);
$socket = @fsockopen($s, $p, $errno, $errstr, 1);
if (!$socket) {
	$s = 'udp://'.$s;
	$socket = @fsockopen($s, $p, $errno, $errstr, 1);
	socket_set_timeout($socket, 3);
	fwrite ($socket, "\xFF\xFF\xFF\xFF\x64\x65\x74\x61\x69\x6C\x73");
	if (fread($socket, 32)) {$socket = true;} else {
		fwrite ($socket, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
		if (fread($socket, 32)) {$socket = true;} else {$socket = false;}
	}
}
	if(!$socket) {
		return '<font color="red">Offline</font>';}
	else {
		return '<font color="green">Online</font>';}
}

udp ведет себя достаточно странно. здесь я тестировал для кса старого и нового движка. первый код посылает пакет в кодировке 16-тиричной (для старого протокола кс), второй в обычной (для нового). работу с ними так и не разобрал, но кс-сервера теперь на форуме будут мониторится без проблем. оба пакета взял из phgstats.

все остальное сканится без проблем, типа дц, веб-серверов, фтп и других стандартных программ.

Ссылка на комментарий
Поделиться на других сайтах

Ну так зачем функцию менять, если нужно просто в посте правильно хост вписывать? :D
Ссылка на комментарий
Поделиться на других сайтах

Ну так зачем функцию менять, если нужно просто в посте правильно хост вписывать? :D

ну так даже держатели ресурсов не знают на каком протоколе работают их сервера =)

и плюс ко всему мона вписывать спокойно host.host.host.ru

 

и на основе посылки пакетов можно написать сканер кс-серверов и прочей лабуды, если знать какие пакеты посылать и знать в каком формате ответ приходит.

Ссылка на комментарий
Поделиться на других сайтах

  • 5 недель спустя...
......

......
function regex_server_tag($s, $p) {
$s = gethostbyname($s);
$socket = @fsockopen($s, $p, $errno, $errstr, 1);
.........
		return '<font color="green">Online</font>';}
}

......

:D

Только если функцию использовать в ВВ-кодах - будет "одноразовый эффект": проверка статуса сервера произойдет только при создании поста и в таком состоянии и останится... а вот, чтобы проверка статуса проводилась постоянно надо ее впихнуть в другое место, туда где станица генерируется. Я всунул в описание ""Форумов" "Разделов", немног доработав под свои нужды (мониторинг серваков ИЛ-2) получилось вот так:

//Проверка сервера
$arrPrim=explode(':',$data['description']); //заганяем описание форума в массив
if ($arrPrim[0]=='Server'){ //если 1 элемент массива Сервер формат записи: Server:192.168.4.2:21000
$s = gethostbyname($arrPrim[1]); //указываем хост
$p=$arrPrim[2]; //указываем порт
$socket = @fsockopen($s, $p, $errno, $errstr, 0); //открываем сокет
if (!$socket) { //если соккет удалось открыть готовим пакет
	$s = 'udp://'.$s; //указываем протокол передачи
	$socket = @fsockopen($s, $p, $errno, $errstr, 1);
	socket_set_timeout($socket, 3); //устанавливаем тайм-аут для соккета
	fwrite ($socket, "\x5C\x73\x74\x61\x74\x75\x73\x5C"); //отправляем пакет
	$inserv = fread($socket, 630); //читаем ответ от сервера
	if ($inserv) { //есть ответ от сервера?
		$socket = true;
		$arr = explode("\\", $inserv); //да -заганяем ответ в массив
	} else {$socket = false;} //нет - сервер даун!

}
	if(!$socket) {$si= '<font color="red"> - Offline</font>';} //сервер - даун
	else { //есть отвер - Сервер в сети
		$usline=$arr[16]; //сейчас играют
		$maxus=$arr[18]; //максимально игроков
		$si= ('<font color="green"> - Online: '.$usline.'/'.$maxus.'</font>'); //скложили строку
		}
}
else{$si= '<br />'.$data['description'];} //Описание не адресс Сервера - выводим описание
//Конец проверки Сервера

в шаблоне вместо {$data['description']} вставил {$si} и все... НО как видно ето не совсем функция, т.к. вставлял все это вручную прямо в файл кеша шаблона, что есть "коряво" - надо енто дело делать через АЦ. Отсюда и вопрос к знающим - как ентот код КОРЕКТНО вставить через АЦ? (я вставлял в skin_boards.php в function ForumRow($data=""))

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...
в шаблоне вместо {$data['description']} вставил {$si} и все... НО как видно ето не совсем функция, т.к. вставлял все это вручную прямо в файл кеша шаблона, что есть "коряво" - надо енто дело делать через АЦ. Отсюда и вопрос к знающим - как ентот код КОРЕКТНО вставить через АЦ? (я вставлял в skin_boards.php в function ForumRow($data=""))

 

Сделал вышеописанные операции. При проверке полностью открытого сервера пишет - оффлайн.

 

В чем я мог накосячить?

Ссылка на комментарий
Поделиться на других сайтах

1. Весь код от //Проверка сервера ... до //Конец проверки Сервера... надо впихнуть в skin_boards.php того Скина которым пользуешся... (по умолчанию там вродь 2 варианта Скинов), в функцию ForumRow($data=""), т.е. сразу после:

//===========================================================================
// <ips:ForumRow:desc::trigger:>
//===========================================================================
function ForumRow($data="") {

.. и перед:

$IPBHTML = "";
//--starthtml--//

... правда сделаю отступление... у меня стоит IPB 2.3.4...

и замену {$data['description']} на {$si} так же надо делать вручную прямо в skin_boards.php..., если заменить через АЦ - то вышевставленный код затрется:D вот поэтому то я и хотел узнать как этот код вставить через АЦ...

... и проверь правильно ли в описании задаешь параметры... формат записи: Server:IP-адрес:порт

и еще маленькое уточнение:

fwrite ($socket, "\x5C\x73\x74\x61\x74\x75\x73\x5C");

эта строка для ИЛовсих серверов... для КС другая... и т.д.

Ссылка на комментарий
Поделиться на других сайтах

Ага. Вот об это самое маленькое уточнение я и споткнулся =)

 

fwrite ($socket, "\x5C\x73\x74\x61\x74\x75\x73\x5C");

эта строка для ИЛовсих серверов... для КС другая... и т.д.

 

А допустим для проверки фтп или шуткаста? Есть ли универсальный запрос такого плана?

Ссылка на комментарий
Поделиться на других сайтах

Данная строка отвечает за запрос доп. Данных от сервера, и как видно из кода, если ответ на данный запрос не получен,… то есть два варианта:

1. Сервер все-таки в «дауне»;

2. Для доступа к доп. данным требуется логин и пароль…

Навряд ли, на данный запрос, есть универсальная строка…(не знаю что такое «шуткаст»), но для проверки доступности ФТП сервера, думаю, можно ограничиться только проверкой наличия открытого на сервере 21 порта по TCP … т.е. достаточно проверить результат открытия «сокета»:

.....
$socket = @fsockopen($s, $p, $errno, $errstr, 0); //открываем сокет
if (!$socket) { //если соккет удалось открыть
$si= ('<font color="green"> - Online'); //Сервер в сети
}
else { $si= '<font color="red"> - Offline</font>';} //если нет - сервер даун
}
else{$si= '<br />'.$data['description'];} //Описание не адресс Сервера - выводим описание
//Конец проверки Сервера

Ссылка на комментарий
Поделиться на других сайтах

Большего в принципе и не нужно, благодарю.

Озабочусь теперь другим. Нужно, чтобы перед строкой проверки сокета стоял какой-либо текст.

 

З.Ы. Шуткаст = Shoutcast - винамповский плагин для вещания плейлиста на сеть. Онлайн-радио проще говоря.

Ссылка на комментарий
Поделиться на других сайтах

Если "... перед строкой проверки сокета стоял какой-либо текст.." имеется ввиду код... дык он вмоем первом посте (применительно к IPB)... прост я дал продолжение кода, в Вашем случае, начиная со строки проверки сокета...

 

Неужели нет никого из "знающих", кто подскажет как корректно впихнуть ентот код через АЦ?

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

Может кто выложит работоспособный мод для 2.3.1?

 

...создаётся впечатление что всё гуд, но если попытаться изменить сообщение то там именно результат <font color="red">Offline</font> . ну и соответственно если реальное состояние сервера меняеться то для <font color="red">Offline</font> это не имеет никакого значения ))) в чёмж глюк то ?

Актуально.

 

Это баг в парсере вроде, смотрите багрепорты на форуме ИПС, там есть фикс...

 

Не нашёл... :D

Ссылка на комментарий
Поделиться на других сайтах

А этот вариант не подходит?

1. Я не совсем понял как его ставить.

2. Как он будет выглядеть на форуме?

3. Каким образом задаются IP и порт сервера?

4. Нужен только статус сервера.

5. Нужна возможность добавления новых серверов.

Ссылка на комментарий
Поделиться на других сайтах

А этот вариант не подходит?

1. Я не совсем понял как его ставить.

2. Как он будет выглядеть на форуме?

3. Каким образом задаются IP и порт сервера?

4. Нужен только статус сервера.

5. Нужна возможность добавления новых серверов.

1. Посмотрите предыдущие посты + приведенный...

2. Вот рабочий вариант...построенный на предложенном варианте (виден только после регистрации - разные скины у гостей и пользователей). Тут же и видно (без регистрации - см. "Проекты") ответ на 3-тий вопрос...

4. - Дык оно так и показыват.. ток немног докручен под свои нужды.. спрашивайте.. будет возможность подскажу по Ваш вариант...

5. Новая тема - новый сервер! И нет пытань:D

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.