PHP. CounterStrike (CS) информер.
PHP

Всем доброго времени суток!

Забирать статистику с Counter Strike 1.6 (CS) сервера всегда интересно. Узнать текущую карту, количество игроков и другую полезную информацию. Подобных сайтов в Интернете развелось великое множество, но большинство из них обновляет информацию медленно. Виной всему громоздкие библиотеки. Да, они работают не только с CS серверами но и с множеством других игр. Однако расплачиваться за подобное универсальное решение приходится скоростью. Если собирать данные с одного какого-нибудь адреса (сервера), то еще более или менее. А если это информационный ресурс, где участвует несколько десятков, а то и сотен, игровых площадок?

Представляю Вам быструю библиотеку для красивого решения подобной задачи.
Краткие характеристики:

1. Работает с версией протокола 73 и 109 (не путать с версией игры).
2. Получает полную информацию о сервере (включая тип ОС, защиту от читов и т.д.)
3. Получает информацию об игроках (имя, количество фрагов, длительность подключения)
4. Получает информацию о «правилах» сервера (время раунда, стартовая сумма денег и т.п.)


Если Вас это заинтересовало, читаем дальше. А дальше я расскажу конкретно о том, что же возвращает библиотека. Описание массивов и принимаемых значений. Вообще-то об этом можно прочитать здесь. Но для тех, кто не хочет сильно вникать в суть протокола расскажу попроще.

Итак, имеем 3 вложенных массива — serverinfo, playerinfo и serverrules. В зависимости от того, какую именно информацию вы запросили, такой ответ вам и придет. Например, нас интересует только serverinfo. Тогда остальные 2 будут пустыми. Но об этом чуть позже в инструкции по непосредственному использованию.

[serverinfo] => Array
(
    [type] => 109                             //Версия протокола
    [servername] => Ex-Surf.ru | HSDM Server  //Название сервера
    [map] => aim_bloodstrike                  //Текущая карта
    [gamedir] => cstrike                      //итак понятно :)
    [gamedesc] => www.eX-Surf.ru              //Описание игры
    [player_cur] => 11                        //Текущее количество клиентов
    [player_max] => 16                        //Максимальное кол-во клиентов
    [version] => 47                           //Версия игры, установленной на сервере
    [dedicated] => d                          //d - dedicated, l - non-dedicated, p - sourceTV
    [system] => w                             //l - linux, w - windows, m или o - mac
    [password] => 0                           //0 - не защищен паролем, 1 - защищен =)
    [secure] => 1                             //1 - использует VAC (Valve Anti-Cheat)
    [ip] => 83.222.109.37                     //Внешний адрес сервера. 
)
[playerinfo] => Array
(
    [type] => 44                      //Всегда в значении 'D' (0x44). См. спецификацию протокола
    [player] => 7                     //Кол-во игроков. Не путать с player_cur.
    [players] => Array
    (
        [0] => Array
        (
            [index] => 0              //Индекс игрока на сервере. Обычно закрыт, как здесь.
            [name] => Rm*/takesh1     //Соответственно имя игрока
            [kills] => 0              //Количество фрагов
            [connected] => 207840     //Время подключения в секундах (видимо это бот)
        )
 
        [14] => Array
        (
            [index] => 0
            [name] => pke4h!
            [kills] => 65
            [connected] => 636
        )
 
        и так далее...
    )
)
// Здесь комментариев особо не требуется, т.к. названия параметров как в конфиге.
[serverrules] => Array
(
    [type] => 45          //Всегда в значении 'E' (0x45). См. спецификацию протокола. 
    [rule] => 97          //Количество элементов (грубо правил) в ответе.
    [rules] => Array
    (
        [0] => Array
        (
            [name] => _tutor_bomb_viewable_check_interval
            [value] => 0.5
        )
 
        [1] => Array
        (
            [name] => _tutor_debug_level
            [value] => 0
        )
 
        [2] => Array
        (
            [name] => _tutor_examine_time
            [value] => 0.5
        )
 
        [3] => Array
        (
            [name] => _tutor_hint_interval_time
            [value] => 10.0
        )
 
        и так далее...
    )
)

Продолжение следует…

Добавить комментарий