Reebok
Пользователь
<?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();
}
}
заходишь в сервер и все норм показывает! а отображаеться название сервера при банеReebok,в папке protected/models поменяйте файл Serverinfo.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(); } }