romchik4021
Участник
- Сообщения
- 42
- Реакции
- 15
Недавно я задался вопросом, как вывести общий онлайн и количество слотов со всех серверов в SourceBans?
Например: "Общее количество игроков на наших серверах: 70/150"
Не понимаю, как сложить игроков и слоты со всех серверов в базе.
В файле /includes/sb-callback.php есть функция которая выводит данные игроков на сервере:
а конкретно строчка:
Она отвечает за вывод игроков/слотов на конкретном сервере. Как сложить переменные $info['numplayers'] и $info['maxplayers'] со всех серверов, которые есть в базе? Знающие люди, помогите пожалуйста.
Например: "Общее количество игроков на наших серверах: 70/150"
Не понимаю, как сложить игроков и слоты со всех серверов в базе.
В файле /includes/sb-callback.php есть функция которая выводит данные игроков на сервере:
PHP:
function ServerHostPlayers($sid, $type="servers", $obId="", $tplsid="", $open="", $inHome=false, $trunchostname=48)
{
$objResponse = new xajaxResponse();
global $userbank;
require INCLUDES_PATH.'/CServerInfo.php';
$sid = (int)$sid;
$res = $GLOBALS['db']->GetRow("SELECT sid, ip, port FROM ".DB_PREFIX."_servers WHERE sid = $sid");
if(empty($res[1]) || empty($res[2]))
return $objResponse;
$info = array();
$sinfo = new CServerInfo($res[1],$res[2]);
$info = $sinfo->getInfo();
if($type == "servers")
{
if(!empty($info['hostname']))
{
$objResponse->addAssign("host_$sid", "innerHTML", trunc($info['hostname'], $trunchostname, false));
$objResponse->addAssign("players_$sid", "innerHTML", "<center>(" . $info['numplayers'] . "/" . $info['maxplayers'] . ")</center>");
$objResponse->addAssign("procentplayers_$sid", "innerHTML", "[" . round($info['numplayers'] / $info['maxplayers'] * 100, 0, PHP_ROUND_HALF_DOWN) . "%]");
$objResponse->addAssign("os_$sid", "innerHTML", "<img src='images/bage-available.png' title='[Online] Сервер активен! Можно играть!'>");
if( $info['secure'] == 1 )
{
$objResponse->addAssign("vac_$sid", "innerHTML", "<img src='images/shield.png' width=\"28\" align=\"absmiddle\">");
$objResponse->addAssign("vacv_$sid", "innerHTML", "<img src='images/playserver.png' width=\"28\" align=\"absmiddle\">");
}
$objResponse->addAssign("map_$sid", "innerHTML", $info['map']);
if(!$inHome) {
$objResponse->addScript("$('mapimg_$sid').setProperty('src', '".GetMapImage($info['map'])."').setProperty('alt', '".$info['map']."').setProperty('title', '".$info['map']."');");
if($info['numplayers'] == 0 || empty($info['numplayers']))
{
$objResponse->addScript("$('sinfo_$sid').setStyle('display', 'none');");
$objResponse->addScript("$('noplayer_$sid').setStyle('display', 'block');");
$objResponse->addScript("$('serverwindow_$sid').setStyle('height', '64px');");
} else {
$objResponse->addScript("$('sinfo_$sid').setStyle('display', 'block');");
$objResponse->addScript("$('noplayer_$sid').setStyle('display', 'none');");
if(!defined('IN_HOME')) {
$players = $sinfo->getPlayers();
// remove childnodes
$objResponse->addScript('var toempty = document.getElementById("playerlist_'.$sid.'");
var empty = toempty.cloneNode(false);
toempty.parentNode.replaceChild(empty,toempty);');
//draw table headlines
$objResponse->addScript('var e = document.getElementById("playerlist_'.$sid.'");
var tr = e.insertRow("-1");
// Name Top TD
var td = tr.insertCell("-1");
td.setAttribute("width","45%");
td.setAttribute("height","16");
td.className = "listtable_top";
var b = document.createElement("b");
var txt = document.createTextNode("Ник");
b.appendChild(txt);
td.appendChild(b);
// Score Top TD
var td = tr.insertCell("-1");
td.setAttribute("width","10%");
td.setAttribute("height","16");
td.className = "listtable_top";
var b = document.createElement("b");
var txt = document.createTextNode("Очки");
b.appendChild(txt);
td.appendChild(b);
// Time Top TD
var td = tr.insertCell("-1");
td.setAttribute("height","16");
td.className = "listtable_top";
var b = document.createElement("b");
var txt = document.createTextNode("Время игры");
b.appendChild(txt);
td.appendChild(b);');
// add players
$playercount = 0;
foreach($players AS $player) {
$objResponse->addScript('var e = document.getElementById("playerlist_'.$sid.'");
var tr = e.insertRow("-1");
tr.className="tbl_out";
tr.onmouseout = function(){this.className="tbl_out"};
tr.onmouseover = function(){this.className="tbl_hover"};
tr.id = "player_s'.$sid.'p'.$player["index"].'";
// Name TD
var td = tr.insertCell("-1");
td.className = "listtable_1";
var txt = document.createTextNode("'.$player["name"].'");
td.appendChild(txt);
// Score TD
var td = tr.insertCell("-1");
td.className = "listtable_1";
var txt = document.createTextNode("'.$player["kills"].'");
td.appendChild(txt);
// Time TD
var td = tr.insertCell("-1");
td.className = "listtable_1";
var txt = document.createTextNode("'.$player["time"].'");
td.appendChild(txt);
');
if($userbank->HasAccess(ADMIN_OWNER|ADMIN_ADD_BAN)) {
$objResponse->addScript('AddContextMenu("#player_s'.$sid.'p'.$player["index"].'", "contextmenu", true, "|Админ-меню|", [
{name: "Кикнуть", callback: function(){KickPlayerConfirm("'.$sid.'", "'.$player["name"].'", 0);}},
{name: "Забанить", callback: function(){window.location = "index.php?p=admin&c=bans&action=pasteBan&sid='.$sid.'&pName='.$player["name"].'"}},
{name: "Выкл микро/чат", callback: function(){window.location = "index.php?p=admin&c=comms&action=pasteBan&sid='.$sid.'&pName='.str_replace('"', '\"', $player["name"]).'"}},
{separator: true},
'.(ini_get('safe_mode')==0 ? '{name: "Профиль в Steam", callback: function(){ViewCommunityProfile("'.$sid.'", "'.$player["name"].'")}},':'').'
{name: "Отправить сообщение", callback: function(){OpenMessageBox("'.$sid.'", "'.$player["name"].'", "1")}}
]);');
}
$playercount++;
}
}
if($playercount>15)
$height = 329 + 16 * ($playercount-15) + 4 * ($playercount-15) . "px";
else
$height = 329 . "px";
$objResponse->addScript("$('serverwindow_$sid').setStyle('height', '".$height."');");
}
}
}else{
$objResponse->addAssign("host_$sid", "innerHTML", "<font color=#999999>Тех-работы на сервере ::{" . $res[1] . ":" . $res[2]. "}::</font>");
$objResponse->addAssign("players_$sid", "innerHTML", "<center><font color=#999999>...</font></center>");
$objResponse->addAssign("os_$sid", "innerHTML", "<img src='images/bage-busy.png' title='[Offline] К сожалению сервер временно не доступен (возможно на нем ведутся тех.работы)'>");
$objResponse->addAssign("vac_$sid", "innerHTML", "<center><font color=#999999>...</font></center>");
$objResponse->addAssign("vacv_$sid", "innerHTML", "<center><font color=#999999>...</font></center>");
$objResponse->addAssign("map_$sid", "innerHTML", "<center><font color=#999999>...</font></center>");
if(!$inHome) {
$connect = "onclick = \"document.location = 'steam://connect/" . $res['ip'] . ":" . $res['port'] . "'\"";
$objResponse->addScript("$('sinfo_$sid').setStyle('display', 'none');");
$objResponse->addScript("$('noplayer_$sid').setStyle('display', 'block');");
$objResponse->addScript("$('serverwindow_$sid').setStyle('height', '64px');");
$objResponse->addScript("if($('sid_$sid'))$('sid_$sid').setStyle('color', '#adadad');");
}
}
if($tplsid != "" && $open != "" && $tplsid==$open)
$objResponse->addScript("InitAccordion('tr.opener', 'div.opener', 'mainwrapper', '".$open."');");
$objResponse->addScript("$('dialog-control').setStyle('display', 'block');");
$objResponse->addScript("$('dialog-placement').setStyle('display', 'none');");
}
elseif($type=="id")
{
if(!empty($info['hostname']))
{
$objResponse->addAssign("$obId", "innerHTML", trunc($info['hostname'], $trunchostname, false));
}else{
$objResponse->addAssign("$obId", "innerHTML", "<b>Проблемы со связью</b> (<i>" . $res[1] . ":" . $res[2]. "</i>)");
}
}
else
{
if(!empty($info['hostname']))
{
$objResponse->addAssign("ban_server_$type", "innerHTML", trunc($info['hostname'], $trunchostname, false));
}else{
$objResponse->addAssign("ban_server_$type", "innerHTML", "<b>Нет соединения</b> (<i>" . $res[1] . ":" . $res[2]. "</i>)");
}
}
return $objResponse;
}
PHP:
$objResponse->addAssign("players_$sid", "innerHTML", "<center>(" . $info['numplayers'] . "/" . $info['maxplayers'] . ")</center>");
Она отвечает за вывод игроков/слотов на конкретном сервере. Как сложить переменные $info['numplayers'] и $info['maxplayers'] со всех серверов, которые есть в базе? Знающие люди, помогите пожалуйста.