Archief - PHP: Gameserver gegevens

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

HoAxKe

Legacy Member
Ik zou graag zoals op de games.telenet.be server page een overzicht hebben van de servers en de stats van die servers. Maar ik zou niet weten hoe ik een gameserver om de nodige info moet vragen. Iemand een idee?
Eventueel een goede tutorial zou al voldoende zijn.

Een extra probleem is dat ik van een ventrilo server de status zou willen opvragen vanop een externe pc(dus niet dezelfde server als de ventrilo server). Want ventrilo heeft zelf een script online staan, maar dat is voor als de ventrilo server op dezelfde PC draait. Wat bij mij dus niet het geval is.

HoAxKe

Legacy Member
Thx, da helpt mij al een enorm pak verder. Nu nog voor CSS (HL2 based games) en miss voor ventrilo. Maar nu weet ik nog altijd niet hoe dit feitelijk in z'n werk gaat, en dat zou ik wel willen weten

Tyfius

Legacy Member
Die werken via hetzelfde principe als de gekende rcon tool. Een socket connectie openen naar de server en een command doorsturen dat de gegevens weergeeft en die uitlezen en afbeelden.
Als je de link van Disa bekijkt dan zie je ook dat er een klasse CounterStrike in zit, met wat geluk werken HL2 games op dezelfde manier.

Disa

Legacy Member
Nee ze werken niet op de zelfde manier. Toch niet die nieuwe (cs 1.6?)

Kheb hier wel nog iets voor 1.6 servers.
http://disa.pillars-gaming.com/servers/

voor die CS1.6 servers:
de serverspy class en functions.lib includen en dit doen:
Code:
$serverspy = & new serverspy();
$connected = $serverspy->connect('ip:port');
if($connected)
{
     $output = $serverspy->info();
}

Ge moet maar eens print_r($output); doen voor de gegevens.

Players:
Code:
$player = $serverspy->player();
if(is_array($player))
{
usort($player, 'sortbyfrags');
for($i = 0; $i < count($player); $i++)
{  
	$template->set_vars(array(
                  'naam' => $player[$i]['name'],
		'ping' => $player[$i]['time'],
		'frags' => $player[$i]['frags']),'SPELERS');
        }
 }

Zit wel wat code tussen van mijn eigen, maar ge snapt het wel.




Q3, RTCW, ET, COD, ...

Code:
$serv = new quake3();
			$server = $serv->getServerStatus($sql['ip'],$sql['port'],3000,$type);
			if ($server) {
				$map = $serv->m_servervars['mapname'];
				$hostname = ServerColors($serv->m_servervars["sv_hostname"]);
				$template->set_var('hostname',$hostname);
/*;ÿÿÿÿstatusResponse
\g_gametype\sd\g_timeoutsallowed\0\gamename\Call of Duty\mapname\mp_brecourt\protocol\6\scr_friendlyfire\0\scr_killcam\1\shortversion\1.5\sv_allowAnonymous\0\sv_floodProtect\1\sv_hostname\Mohaaservers.nl: Pillars.CoD Gameraw Clanserver :Pillars-gaming.com\sv_maxclients\11\sv_maxPing\0\sv_maxRate\0\sv_minPing\0\sv_privateClients\0\sv_punkbuster\1\sv_pure\1\pswrd\1\mod\0*/
				$servervars = $serv->m_servervars;
				for ($i = 0;$i < $servervars["sv_currentclients"];$i++) {
					if (is_array($server->m_playerinfo) && is_array($serv->m_playerinfo[$i]))
					{
						$template->set_vars(array(
							'player' => $serv->m_playerinfo[$i]['name'],
							'frags' => $serv->m_playerinfo[$i]['frags'],
							'ping' => $serv->m_playerinfo[$i]['ping']),'PLAYERS');
					}
				}
				$servervalues = array_values($servervars);
				$servervars_ = array_keys($servervars);
				for ($i = 0;$i <= count($servervars_);$i++) {
					$template->set_vars(array(
						'setting' => $servervars_[$i],
						'value' => $servervalues[$i]),'SETTINGS');
				}
			}




Kwas beke lui om het goed te zetten enzo, maar het zou toch duidelijk mogen zijn. =)

D


*EDIT: deze code is wel al van een tijdje geleden, dus tzal wel niet echt "pro" zijn. (tis nu nog altijd niet pro hoor ^^)

HoAxKe

Legacy Member
Owkidow. Nu nog Counter-Strike: Source. Dat was eigenlijk de belangrijkste. Met die class dat in de eerst post zat konnek ni veel doen :s. Wss omdak der nix van snap wa der gebeurd ma soit.

Tyfius

Legacy Member
Dan zou ik zeker uwe PHP kennis eens wat bijschaven, want het is daar redelijk duidelijk en proper gedaan. Ik ben al veel lelijkere libraries tegengekomen op 't internet die min of meer hetzelfde doen.
Voor CS:S moet je dus gewoon uitzoeken hoe het RCON protocol werkt voor CS:S en het script op de juiste manier aanpassen.

HoAxKe

Legacy Member
Heeft nix met php te maken, ik snap niet wat er als commands gestuurd moeten worden naar die servers.

Disa

Legacy Member
Kweet niet precies hoe het in CS:S zit maar in Q3 is dat een string (meestal voorafgegaand door ÿÿÿÿ) die je naar de server stuurt die u dan data zal terugsturen. (afhankelijk van welke string jij stuurt obviously)

BVB:

De Client stuurt "ÿÿÿÿgetstatus" naar een Q3 based gameserver, dan zal de server data packets terug zenden naar de client met daarin alle info. Hier is het dan zoiets als:
ÿÿÿÿstatusresponse
gamename/et/sv_hostname/-=Telenet 1=-/sv_maxplayers/18/ ...

Khoop dat dit het een beetje verduidelijkt.

Ik dacht dat CS:S ook met een dergelijk systeem werkte, alhoewel er toch nog ergens iets anders verliep.

D
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan