Help CS Bans 1.6

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
Всем Привет! Столкнулся с такой проблемой.
Установил cs bans и подключил 2 сервера, все работает как нужно, кроме информации о сервере.
Пишет "Сервер не отвечает. Возможно сервер выключен или сменяет карту"
Нашел решение проблемы тут: Сервер недоступен? Решаем этот вопрос!
1 и 2 пункт отпадают, остается 3 - открыть UDP-порты (27000-30000)
У меня VDS linux debian
Вопрос: Как открыть этот диапазон портов?
Спасибо!
Ошибочка, CS Bans 1.3 Ну не суть.
 

zerg

Пользователь
Регистрация
8 Июн 2017
Сообщения
51
Симпатии
24
Пол
Мужской
hooligan***, Никакой диапазон не нужно открывать, откройте только порт, на котором работает сервер. Если вы можете приконнектится к серверу, то значит, что порт уже открыт. По поводу инфы, точно не помню... Кажись, нужно заменить файл serverinfo.php...
Так как загрузить файл с расширением .php нельзя, то кидаю его содержимое.
Код:
<?php
/**
 * @author Craft-Soft Team
 * @package CS:Bans
 * @version 1.0 beta
 * @copyright (C)2013 Craft-Soft.ru.  Все права защищены.
 * @link http://craft-soft.ru/
 * @license http://creativecommons.org/licenses/by-nc-sa/4.0/deed.ru  «Attribution-NonCommercial-ShareAlike»
 */

/**
 * Модель для таблицы "{{serverinfo}}".
 *
 * Доступные поля таблицы '{{serverinfo}}':
 * @property integer $id ID сервера
 * @property integer $timestamp Дата
 * @property string $hostname Название сервера
 * @property string $address Адрес
 * @property string $gametype Тип игры
 * @property string $rcon RCON пароль
 * @property string $amxban_version Версия плагина
 * @property string $amxban_motd Ссылка на MOTD
 * @property integer $motd_delay Время показа MOTD
 * @property integer $amxban_menu Меню (?)
 * @property integer $reasons Причины
 * @property integer $timezone_fixx Разница во времени
 */
class Serverinfo extends CActiveRecord
{
    private $connect;
    public $players = null;
    public $playersmax = null;
    public $name = null;
    public $map = null;
    public $game = null;
    public $os = null;
    public $osimg = null;
    public $secure = null;
    public $playersinfo = array();
    public $online = null;
    public $modimg = null;
    public $vacimg = null;
    public $contact = null;
    public $nextmap = null;
    public $timeleft = null;
    public $mapimg = null;

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return '{{serverinfo}}';
    }

    public function scopes()
    {
        return array(
            'sort'=>array(
                'order'=>'`hostname` ASC'
            ),
        );
    }

    public function rules()
    {
        return array(
            array('motd_delay, amxban_menu, reasons, timezone_fixx', 'numerical', 'integerOnly'=>true),
            array('rcon', 'length', 'max'=>32),
            array('amxban_motd', 'length', 'max'=>250),
            array('id, timestamp, hostname, address, gametype, rcon, amxban_version, amxban_motd, motd_delay, amxban_menu, reasons, timezone_fixx', 'safe', 'on'=>'search'),
        );
    }

    public function relations()
    {
        return array();
    }

    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'timestamp' => 'Дата',
            'hostname' => 'Имя сервера',
            'address' => 'Адрес',
            'gametype' => 'Мод',
            'rcon' => 'Rcon',
            'amxban_version' => 'Версия',
            'amxban_motd' => 'MOTD',
            'motd_delay' => 'Задержка перед MOTD',
            'amxban_menu' => 'Меню Amxban',
            'reasons' => 'Группы причин банов',
            'timezone_fixx' => 'Разница во времени',
            'map' => 'Карта'
        );
    }

    public function search()
    {
        $criteria=new CDbCriteria;

        $criteria->compare('id',$this->id);
        $criteria->compare('timestamp',$this->timestamp);
        $criteria->compare('hostname',$this->hostname,true);
        $criteria->compare('address',$this->address,true);
        $criteria->compare('gametype',$this->gametype,true);
        $criteria->compare('rcon',$this->rcon,true);
        $criteria->compare('amxban_version',$this->amxban_version,true);
        $criteria->compare('amxban_motd',$this->amxban_motd,true);
        $criteria->compare('motd_delay',$this->motd_delay);
        $criteria->compare('amxban_menu',$this->amxban_menu);
        $criteria->compare('reasons',$this->reasons);
        $criteria->compare('timezone_fixx',$this->timezone_fixx);
        $criteria->order = '`hostname` ASC';
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }


    public function getInfo() {
        $sip = explode(':',  $this->address);
        include_once ROOTPATH . '/include/lgsl_query.php';
        $server = query_live('halflife', $sip[0], $sip[1], $sip[1], '0', 'spet');

        $fields_show  = array("name", "score", "time");
        $fields_hide  = array("teamindex", "pid", "pbguid");
        $fields = lgsl_sort_fields($server, $fields_show, $fields_hide, FALSE);
        $server = lgsl_sort_players($server);
        $rules = array();
        $info['online'] = $server['b']['status'];

        if($info['online'])
        {
            $info['players'] = $server['s']['players'];
            $info['playersmax'] = $server['s']['playersmax'];
            $info['name'] = $server['s']['name'];
            $info['map'] = $server['s']['map'];
            $info['game'] = $server['s']['game'];
            $info['os'] = $server['e']['os'] == 'l' ? 'Linux' : 'Windows';
            $info['secure'] = $server['e']['anticheat'] == 0 ? FALSE : TRUE;
            $info['playersinfo'] = is_array($server['p']) ? $server['p'] : array();
            $info['timeleft'] = isset($server['e']['amx_timeleft'])?$server['e']['amx_timeleft']:false;
            $info['nextmap'] = isset($server['e']['amx_nextmap'])?$server['e']['amx_nextmap']:FALSE;
            $info['contact'] = isset($server['e']['sv_contact'])?$server['e']['sv_contact']:FALSE;
            $game = $this->gametype ? $this->gametype : $info['game'];
            $info['modimg'] = Yii::app()->urlManager->baseUrl .
                    DIRECTORY_SEPARATOR .
                    "images".
                    DIRECTORY_SEPARATOR .
                    "games" .
                    DIRECTORY_SEPARATOR .
                    $game .
                    ".gif";
            $info['vacimg'] = Yii::app()->urlManager->baseUrl .
                    DIRECTORY_SEPARATOR .
                    "images".
                    DIRECTORY_SEPARATOR .
                    ($info['secure'] ? "vac.png" : "no_vac.png");
            $info['osimg'] = Yii::app()->urlManager->baseUrl .
                    DIRECTORY_SEPARATOR .
                    "images".
                    DIRECTORY_SEPARATOR .
                    "os" .
                    DIRECTORY_SEPARATOR .
                    $info['os'].
                    ".png";

            if(!$info['online'])
            {
                $mapimage = Yii::app()->urlManager->baseUrl ."/images/maps/noresponse.jpg";
            }
            elseif(is_file(ROOTPATH ."/images/maps/" . $game . '/' . $info['map'] . ".jpg"))
            {
                $mapimage = Yii::app()->urlManager->baseUrl . "/images/maps/" . $game . '/' . $info['map'] . ".jpg";
            }
            else
            {
                $mapimage = Yii::app()->urlManager->baseUrl . "/images/maps/" . $game . "/noimage.jpg";
            }

            $info['mapimg'] = CHtml::image($mapimage, $info['map'], array('title' => $info['map'], 'class' => 'img-polaroid'));
            return $info;
        }
        return FALSE;
    }

    public function rconCommand($command)
    {
        $addr = explode(':', $this->address);

        $rcon = new Rcon;
        $rcon->Connect($addr[0], $addr[1], $this->rcon);

        $test = $rcon->RconCommand('echo Hi');

        if($test == 'Bad rcon_password.' || $test == 'No password set for this server.' || $test != 'Hi')
            return FALSE;

        return $rcon->RconCommand(CHtml::encode ($command));
    }

    public function getPlayersInfo()
    {
        if(!$this->rcon)
            return FALSE;

        $q = $this->rconCommand('amx_list');

        if(!$q)
            return FALSE;

        $players = array();
        foreach(explode("\x0A", $q) as $p)
        {
            $i = explode("\xFC", $p);

            switch($i[4])
            {
                case 0:
                    $type = 'Игрок';
                    break;
                case 1:
                    $type = 'Бот';
                    break;
                case 2:
                    $type = 'HLTV';
                    break;
                default :
                    $type = 'Неизвестен';
            }

            $players[] = array(
                'nick' => $i[0],
                'userid' => $i[1],
                'steamid' => $i[2],
                'ip' => $i[3],
                'playertype' => $type,
                'immunity' => $i[5]
            );
        }
        return $players;
    }

    public static function getCommands()
    {
        return array(
            '' => 'Выберите команду',
            'amx_reloadadmins' => 'Перезагрузить список админов',
            'restart' => 'Перезапустить карту/плагины',
            'stats' => 'Команда stats',
            'status' => 'Команда status',
            'amx_plugins' => 'Список AMX плагинов',
            'amx_modules' => 'Список AMX модулей',
            'meta list' => 'Список модулей MetaMod'
        );
    }

    public static function getAllServers($all = TRUE, $id = false)
    {
        $model = Serverinfo::model()->findAll(array('order' => 'hostname ASC'));

        $return = array();

        if($all)
            $return['0'] = 'Выберите сервер';

        foreach($model as $server)
        {
            $return[$id ? $server->id : $server->address] = $server->hostname;
        }

        if($all)
            $return['unknown'] = 'Любой сервер';

        return $return;
    }

    public function afterFind() {
        if(!$this->amxban_motd)
            $this->amxban_motd = "http://{$_SERVER['HTTP_HOST']}/motd.php?sid=%s&adm=%d&lang=%s";
        return parent::afterFind();
    }

    public function afterSave() {
        if($this->isNewRecord)
            Syslog::add(Logs::LOG_ADDED, 'Добавлен новый сервер <strong>' . $this->address . '</strong>');
        else
            Syslog::add(Logs::LOG_EDITED, 'Изменены детали сервера <strong>' . $this->hostname . '</strong>');
        return parent::afterSave();
    }

    public function afterDelete() {
        Yii::app()->cache->flush();
        Syslog::add(Logs::LOG_DELETED, 'Удален сервер <strong>' . $this->address . '</strong>');
        return parent::afterDelete();
    }

}
p.s. Путь к файлу /bans.domain.ru/protected/models/serverinfo.php
Или еще, вроде, вариант изменить переменную ServerInfoAnswerType в dproto.cfg или reunion.cfg
 
Последнее редактирование:

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
zerg, замена файла не помогла, ServerInfoAnswerType указал 2 и сделал рр серверу, тоже не помогло.
 

breakt

Заблокированные
Регистрация
8 Июн 2017
Сообщения
109
Симпатии
33
Всем Привет! Столкнулся с такой проблемой.
Установил cs bans и подключил 2 сервера, все работает как нужно, кроме информации о сервере.
Пишет "Сервер не отвечает. Возможно сервер выключен или сменяет карту"
Нашел решение проблемы тут: Сервер недоступен? Решаем этот вопрос!
1 и 2 пункт отпадают, остается 3 - открыть UDP-порты (27000-30000)
У меня VDS linux debian
Вопрос: Как открыть этот диапазон портов?
Спасибо!
Ошибочка, CS Bans 1.3 Ну не суть.
Если бы у вас были закрыты UDP порты ваш сервер бы попросту не было бы видно в внешке.
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
breakt, Хорошо, а что еще может быть?
Файл заменил, ServerInfoAnswerType указал 2, в панели администратора сервер виден и ip моего сервера указан. Я хз...
 

breakt

Заблокированные
Регистрация
8 Июн 2017
Сообщения
109
Симпатии
33
breakt, Хорошо, а что еще может быть?
Файл заменил, ServerInfoAnswerType указал 2, в панели администратора сервер виден и ip моего сервера указан. Я хз...
С мониторингов сервер видно? В лс скиньте ip.
 

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
473
Симпатии
235
и снова те же грабли)
Причина проста - на веб-хостинге закрыт порт, по которому идет опрос сервера.
Пишите в поддержку хостинга, пускай открывают
 

breakt

Заблокированные
Регистрация
8 Июн 2017
Сообщения
109
Симпатии
33
и снова те же грабли)
Причина проста - на веб-хостинге закрыт порт, по которому идет опрос сервера.
Пишите в поддержку хостинга, пускай открывают
Он же писал что у него VDS, насколько я знаю там не закрывают порты.
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
sonyx, UDP-порты (27000-30000) ?
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
Кажется я понял, у меня сайт на обычном хостинге, а на вдс сама БД и сервер, вроде порты открыты, видимо проблемы со стороны сайта. Напишу им.
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
breakt, не всегда. Иногда есть фаервол доступ к которому только из панели управления. И даже оюсброс правил iptables не поможет
 

breakt

Заблокированные
Регистрация
8 Июн 2017
Сообщения
109
Симпатии
33
breakt, не всегда. Иногда есть фаервол доступ к которому только из панели управления. И даже оюсброс правил iptables не поможет
обычно фаервол эти порты не блочит, ибо все прикрывают TCP.
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
breakt, тут я не ска точно, но мне кажеться udp более уязвим. Особенно его часто используют при ддосах. Но это мимхо
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
Короче, решил кс банс поднять на вдс, там же где и сервер и как обычно через жопу всё.
Перенес бекап каталог файлов и ввожу ip адрес в консоль и открывается главная страница, тут все ок, но если я захочу перейти куда нибудь по ссылке, то ошибка
Как я понимаю, кс банс неправильно определяет каталоги файлов, хз как быть и куда смотреть...
[doublepost=1502846099][/doublepost][doublepost=1502846125][/doublepost]Ошибка:
Not Found
The requested URL /bans/index.html was not found on this server.
 

Вложения

Katastrofa

Пользователь
Регистрация
11 Июл 2017
Сообщения
18
Симпатии
5
Пол
Мужской
Короче, решил кс банс поднять на вдс, там же где и сервер и как обычно через жопу всё.
Перенес бекап каталог файлов и ввожу ip адрес в консоль и открывается главная страница, тут все ок, но если я захочу перейти куда нибудь по ссылке, то ошибка
Как я понимаю, кс банс неправильно определяет каталоги файлов, хз как быть и куда смотреть...
[doublepost=1502846099][/doublepost][doublepost=1502846125][/doublepost]Ошибка:
Not Found
The requested URL /bans/index.html was not found on this server.
Накати читстый банс, Бд таблицы (с банами, админами и прочим) подсунь от старого банса... в чём проблемы то...
 

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
473
Симпатии
235
hooligan***, ngix или апач? в папке с банс .htaccess лежит?
 

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
473
Симпатии
235
в /etc/apache2/sites-available/default
проверьте чтобы
AllowOverride была All
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
Katastrofa, Проблема в том, что на чистом не может определить путь до site/install и установить cs bans само собой.
[doublepost=1502870147][/doublepost]sonyx, У меня апач.
Проверил, установил везде AllowOverride была All, но такая проблема все еще есть.
 

hooligan***

Пользователь
Регистрация
9 Июн 2017
Сообщения
377
Симпатии
105
Пол
Мужской
Я все сделал, Всем спасибо!
[doublepost=1502871286][/doublepost]sonyx, Да, я в /etc/apache2/sites-available создал файл и настроил его
 
Сверху Снизу