Posts: 61
Threads: 4
Joined: Jul 2007
Reputation:
0
Afaik Srcds does not have a rcon-command showing the player's team.
However you could create a UDP-listener and use the remote-logging feature to receive all the logs to a daemonized script
which then keeps track of the player's team changes, etc.
Q: What would an omnipotent computer to?
A: Get rid of humanity!
Posts: 26
Threads: 5
Joined: Sep 2009
Reputation:
1
12-05-2009, 11:15 PM
(This post was last modified: 12-05-2009, 11:17 PM by _dp.)
Hm,
i thought about a way to send a query to the steam masterserver, it should be possible to get these information in theory.
The query itself is easy to manage, the protocol is listed here: http://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol
but there must be a second query to get the playerlist (the list you see when you open the server info window)
i know how to do that with php, but i'm not very experienced with the source engine itself...
Also: http://developer.valvesoftware.com/wiki/Server_Queries
Posts: 47
Threads: 6
Joined: Jun 2009
Reputation:
0
hmmm for some reason I cant get this to work. Do you have to name the first code strip a certain name?
Posts: 96
Threads: 22
Joined: Apr 2009
Reputation:
0
Is there a way to reduce the query time? Like if a server is currently down or offline, it would show up as offline. Currently it takes like over 30 seconds to load the page because the servers are offline.
Posts: 7,778
Threads: 176
Joined: May 2008
Reputation:
83
(08-22-2010, 10:14 PM)SaintGTR Wrote: Is there a way to reduce the query time? Like if a server is currently down or offline, it would show up as offline. Currently it takes like over 30 seconds to load the page because the servers are offline.
You should be able to set a timeout in the actual query. You can simply adjust it to your needs
Posts: 1,321
Threads: 85
Joined: Feb 2008
Reputation:
11
(08-22-2010, 10:14 PM)SaintGTR Wrote: Is there a way to reduce the query time? Like if a server is currently down or offline, it would show up as offline. Currently it takes like over 30 seconds to load the page because the servers are offline.
http://php.net/manual/en/function.set-time-limit.php
~ trewq
Posts: 52
Threads: 0
Joined: Dec 2009
Reputation:
2
(08-22-2010, 10:14 PM)SaintGTR Wrote: Is there a way to reduce the query time? Like if a server is currently down or offline, it would show up as offline. Currently it takes like over 30 seconds to load the page because the servers are offline.
Send the server with a "ping" packet before actually querying it to check if its online/offline, than continue querying as usual (just set it up in a simple if/else block), it's faster than a timeout.
http://developer.valvesoftware.com/wiki/Source_Server_Queries
Look for "A2A_PING"
IRC's idled on: SA-MP IRC (#php #sa-mp #samp.scripting), GTANet (#volt #vx-rp #epic-missions #mta #vice-players), GameSurge (#Everystuff #srcds)
Steam: ilinxx
Contact email: linx@volt-host.com
Posts: 56
Threads: 20
Joined: May 2010
Reputation:
0
Thats wicked mate! I've made use of that script (slightly modified) on my servers website, works wonders
Posts: 6
Threads: 2
Joined: Dec 2008
Reputation:
0
06-04-2012, 08:50 AM
(This post was last modified: 06-04-2012, 08:50 AM by Chemicstry.)
I've updated this script to remove those hacky things and added some more functionality. I had to invent php byte buffer as I couldn't find anything similar lol.
Anyway here it is:
Code:
class ByteBuffer
{
public $data = array(), $pointer;
function __construct($data)
{
$this->data = str_split($data);
$this->pointer = 0;
}
public function ReadByte()
{
return ord($this->data[$this->pointer++]);
}
public function ReadShort()
{
return (ord($this->data[$this->pointer++]) | (ord($this->data[$this->pointer++])<<8));
}
public function ReadInt()
{
return (ord($this->data[$this->pointer++]) | (ord($this->data[$this->pointer++])<<8) | (ord($this->data[$this->pointer++])<<16) | (ord($this->data[$this->pointer++])<<24));
}
public function ReadChar()
{
return $this->data[$this->pointer++];
}
public function ReadString()
{
$string = '';
while ($this->data[$this->pointer] != "\0")
{
$string .= $this->data[$this->pointer];
$this->pointer++;
}
$this->pointer++;
return $string;
}
}
function source_query($ip)
{
$cut = explode(":", $ip);
$HL2_address = gethostbyname($cut[0]);
$HL2_port = $cut[1];
$HL2_command = "\377\377\377\377TSource Engine Query\0";
$HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3);
fwrite($HL2_socket, $HL2_command);
$JunkHead = fread($HL2_socket,4);
$CheckStatus = socket_get_status($HL2_socket);
if ($CheckStatus["unread_bytes"] == 0)
{
return 0;
}
$HL2_stats = '';
$do = 1;
while($do)
{
$str = fread($HL2_socket,1);
$HL2_stats .= $str;
$status = socket_get_status($HL2_socket);
if($status["unread_bytes"] == 0)
{
$do = 0;
}
}
fclose($HL2_socket);
$result = '';
$x = 0;
while ($x <= strlen($HL2_stats))
{
$x++;
$result.= substr($HL2_stats, $x, 1);
}
return $result;
}
function format_source_query($string)
{
$buffer = new ByteBuffer($string);
$info['version'] = $buffer->ReadByte();
$info['hostname'] = $buffer->ReadString();
$info['map'] = $buffer->ReadString();
$info['game'] = $buffer->ReadString();
$info['gamedesc'] = $buffer->ReadString();
$info['appid'] = $buffer->ReadShort();
$info['players'] = $buffer->ReadByte();
$info['maxplayers'] = $buffer->ReadByte();
$info['bots'] = $buffer->ReadByte();
$info['dedicated'] = $buffer->ReadChar(); // l - listen, d - dedicated, p - sourcetv
$info['os'] = $buffer->ReadChar(); // l - linux, w - windows
$info['password'] = $buffer->ReadByte(); // true/false
$info['vac'] = $buffer->ReadByte(); // true/false
$info['gameversion'] = $buffer->ReadString();
return $info;
}
$query = source_query($address);
$response = format_source_query($query);
Posts: 1
Threads: 0
Joined: Sep 2012
Reputation:
0
09-13-2012, 08:06 AM
(This post was last modified: 09-13-2012, 08:08 AM by LuxLOL.)
Can someone help me make a little php script for Counter-Strike: Global Offensive?
If the Counter-Strike: Global Offensive server is online the php script should show this ->
Server Status: Online (green text color)
Server IP: x.x.x.x:x
Server Name: xxx
Server Version: xxx
Game Mode: xxx
Corrent Map: xxx
Current Players: x / x
If the Counter-Strike: Global Offensive server is offline the php script should show this ->
Server Status: Offline (red text color)
Server IP: x.x.x.x:x
Posts: 3
Threads: 1
Joined: Aug 2010
Reputation:
0
Yea, I can't get the Current Players and Max Players to show up properly. This is what I got to work, . But I don't have 37 players on or a max of 49 players. Its still in bytes.
Functions
PHP Code:
<?php // error_reporting(0); /* SOURCE ENGINE QUERY FUNCTION, requires the server ip:port */
class ByteBuffer { public $data = array(), $pointer; function __construct($data) { $this->data = str_split($data); $this->pointer = 0; } public function ReadByte() { return ord($this->data[$this->pointer++]); } public function ReadShort() { return (ord($this->data[$this->pointer++]) | (ord($this->data[$this->pointer++])<<8)); } public function ReadInt() { return (ord($this->data[$this->pointer++]) | (ord($this->data[$this->pointer++])<<8) | (ord($this->data[$this->pointer++])<<16) | (ord($this->data[$this->pointer++])<<24)); } public function ReadChar() { return $this->data[$this->pointer++]; } public function ReadString() { $string = ''; while ($this->data[$this->pointer] != "\0") { $string .= $this->data[$this->pointer]; $this->pointer++; } $this->pointer++; return $string; } }
function source_query($ip) { $cut = explode(":", $ip); $HL2_address = $cut[0]; $HL2_port = $cut[1];
$HL2_command = "\377\377\377\377TSource Engine Query\0"; $HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3); fwrite($HL2_socket, $HL2_command); $JunkHead = fread($HL2_socket,4); $CheckStatus = socket_get_status($HL2_socket);
if($CheckStatus["unread_bytes"] == 0) { return 0; }
$do = 1; while($do) { $str = fread($HL2_socket,1); $HL2_stats.= $str; $status = socket_get_status($HL2_socket); if($status["unread_bytes"] == 0) { $do = 0; } } fclose($HL2_socket);
$x = 0; while ($x <= strlen($HL2_stats)) { $x++; $result.= substr($HL2_stats, $x, 1); } $result = urlencode($result); // the output return $result; }
/* FORMAT SOURCE ENGINE QUERY (assumes the query's results were urlencode()'ed!) */ function format_source_query($string) { $string = str_replace('%07','',$string); $string = str_replace("%00","|||",$string); $sinfo = urldecode($string); $sinfo = explode('|||',$sinfo); $info['hostname'] = $sinfo[0]; $info['map'] = $sinfo[1]; $info['game'] = $sinfo[2]; if ($info['game'] == 'garrysmod') { $info['game'] = "Garry's Mod"; } elseif ($info['game'] == 'cstrike') { $info['game'] = "Counter-Strike: Source"; } elseif ($info['game'] == 'dod') { $info['game'] = "Day of Defeat: Source"; } $info['gamemode'] = $sinfo[3]; $buffer = new ByteBuffer($string); $info['players'] = $buffer->ReadByte(); $info['maxplayers'] = $buffer->ReadByte();
return $info; }
?>
Display coding:
PHP Code:
<html> <body>
<?php include 'queryfunction.php';
$query = source_query('XXXXX'); // $ip MUST contain IP:PORT $q = format_source_query($query);
echo "Hostname: ".$q['hostname']; echo "<br>"; echo "Connection Info: XXXX"; echo "<br>"; echo "Map: ".$q['map']; echo "<br>"; echo "Game: ".$q['game']; echo "<br>"; echo "Gamemode: ".$q['gamemode']; echo "<br>"; echo "Players: " .$q['players']; echo "/" .$q['maxplayers'];
?>
</body> </html>
Posts: 1
Threads: 0
Joined: Jul 2015
Reputation:
0
(11-30-2008, 04:26 PM)Psychosis Wrote: How do I get playercount in the form "xx/maxplayers" ?
You can use this
Code:
echo $q['players']."/".$q['max']."<br/>";
To replace the
Code:
echo "players: ".$q['players']."<br/>";
echo "max: ".$q['max']."<br/>";
part of the code
|