Merhabalar,
ben counter-strike 1.6 serverimden veri çekmek istiyorum bunun için lgsl (LiveGameServerList) adlı internette bir script var. Onunla veriyi çekebiliyorum
fakat sadece Oyuncu Skoru - Oyuncu İsmi - Oyuncu Süresi var scriptde ben bunlara birde Oyuncu Takımı - Oyuncu Ping'i - Oyuncu Parasını eklemek istiyorum fakat bir türlü ekleyemiyorum. :(
Bir haftadır girmediğim kaynak kalmadı lütfen yardım edin.




Olay burda bitiyormuş fakat ben çözemedim. https://developer.valvesoftware.com/wiki/Server_queries




Veri çekme işlemi scriptideki protocol.php'de gerçekleşiyor ve ordaki verileri çekip yazdıran kısım.
elseif ($response_type == "D") // SOURCE AND HALF-LIFE 1 PLAYERS
{
$returned = ord(lgsl_cut_byte($buffer, 1));
$player_key = 0;
while ($buffer)
{
$server['p'][$player_key]['pid'] = ord(lgsl_cut_byte($buffer, 1));
$server['p'][$player_key]['name'] = lgsl_cut_string($buffer);
$server['p'][$player_key]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
$server['p'][$player_key]['time'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
/*$server['p'][$player_key]['deaths'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "i");
$server['p'][$player_key]['team'] = lgsl_cut_string($buffer);
$server['p'][$player_key]['ping'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
$server['p'][$player_key]['moneys'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");*/
$player_key ++;
}
}





Lgsl_protocol.php
function lgsl_query_05(&$server, &$lgsl_need, &$lgsl_fp)
{
//---------------------------------------------------------+
// REFERENCE: http://developer.valvesoftware.com/wiki/Server_Queries
if ($server['b']['type'] == "halflifewon")
{
if ($lgsl_need['s']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFFdetails\x00"); }
elseif ($lgsl_need['e']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFFrules\x00"); }
elseif ($lgsl_need['p']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFFplayers\x00"); }
}
else
{
$challenge_code = isset($lgsl_need['challenge']) ? $lgsl_need['challenge'] : "\x00\x00\x00\x00";
if ($lgsl_need['s']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFF\x54Source Engine Query\x00"); }
elseif ($lgsl_need['e']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFF\x56{$challenge_code}"); }
elseif ($lgsl_need['p']) { fwrite($lgsl_fp, "\xFF\xFF\xFF\xFF\x55{$challenge_code}"); }
}
//---------------------------------------------------------+
// THE STANDARD HEADER POSITION REVEALS THE TYPE BUT IT MAY NOT ARRIVE FIRST
// ONCE WE KNOW THE TYPE WE CAN FIND THE TOTAL NUMBER OF PACKETS EXPECTED
$packet_temp = array();
$packet_type = 0;
$packet_count = 0;
$packet_total = 4;
do
{
//$packet = fread($lgsl_fp, 4096); if (!$packet) { return FALSE; }
if (!($packet = fread($lgsl_fp, 4096))) {
if ($lgsl_need['s']) { return FALSE; }
elseif ($lgsl_need['e']) { $lgsl_need['e'] = FALSE; return TRUE; }
else { return TRUE; }
}
//---------------------------------------------------------------------------------------------------------------------------------+
// NEWER HL1 SERVERS REPLY TO A2S_INFO WITH 3 PACKETS ( HL1 FORMAT INFO, SOURCE FORMAT INFO, PLAYERS )
// THIS DISCARDS UN-EXPECTED PACKET FORMATS ON THE GO ( AS READING IN ADVANCE CAUSES TIMEOUT DELAYS FOR OTHER SERVER VERSIONS )
// ITS NOT PERFECT AS [s] CAN FLIP BETWEEN HL1 AND SOURCE FORMATS DEPENDING ON ARRIVAL ORDER ( MAYBE FIX WITH RETURN ON HL1 APPID )
if ($lgsl_need['s']) { if ($packet[4] == "D") { continue; } }
elseif ($lgsl_need['e']) { if ($packet[4] == "m" || $packet[4] == "I" || $packet[4] == "D") { continue; } }
elseif ($lgsl_need['p']) { if ($packet[4] == "m" || $packet[4] == "I") { continue; } }
//---------------------------------------------------------------------------------------------------------------------------------+
if (substr($packet, 0, 5) == "\xFF\xFF\xFF\xFF\x41") { $lgsl_need['challenge'] = substr($packet, 5, 4); return TRUE; } // REPEAT WITH GIVEN CHALLENGE CODE
elseif (substr($packet, 0, 4) == "\xFF\xFF\xFF\xFF") { $packet_total = 1; $packet_type = 1; } // SINGLE PACKET - HL1 OR HL2
elseif (substr($packet, 9, 4) == "\xFF\xFF\xFF\xFF") { $packet_total = ord($packet[8]) & 0xF; $packet_type = 2; } // MULTI PACKET - HL1 ( TOTAL IS LOWER NIBBLE OF BYTE )
elseif (substr($packet, 12, 4) == "\xFF\xFF\xFF\xFF") { $packet_total = ord($packet[8]); $packet_type = 3; } // MULTI PACKET - HL2
elseif (substr($packet, 18, 2) == "BZ") { $packet_total = ord($packet[8]); $packet_type = 4; } // BZIP PACKET - HL2
$packet_count ++;
$packet_temp[] = $packet;
}
while ($packet && $packet_count < $packet_total);
if ($packet_type == 0) { return $server['s'] ? TRUE : FALSE; } // UNKNOWN RESPONSE ( SOME SERVERS ONLY SEND [s] )
//---------------------------------------------------------+
// WITH THE TYPE WE CAN NOW SORT AND JOIN THE PACKETS IN THE CORRECT ORDER
// REMOVING ANY EXTRA HEADERS IN THE PROCESS
$buffer = array();
foreach ($packet_temp as $packet)
{
if ($packet_type == 1) { $packet_order = 0; }
elseif ($packet_type == 2) { $packet_order = ord($packet[8]) >> 4; $packet = substr($packet, 9); } // ( INDEX IS UPPER NIBBLE OF BYTE )
elseif ($packet_type == 3) { $packet_order = ord($packet[9]); $packet = substr($packet, 12); }
elseif ($packet_type == 4) { $packet_order = ord($packet[9]); $packet = substr($packet, 18); }
$buffer[$packet_order] = $packet;
}
ksort($buffer);
$buffer = implode("", $buffer);
//---------------------------------------------------------+
// WITH THE PACKETS JOINED WE CAN NOW DECOMPRESS BZIP PACKETS
// THEN REMOVE THE STANDARD HEADER AND CHECK ITS CORRECT
if ($packet_type == 4)
{
if (!function_exists("bzdecompress")) // REQUIRES http://php.net/bzip2
{
$server['e']['bzip2'] = "unavailable"; $lgsl_need['e'] = FALSE;
return TRUE;
}
$buffer = bzdecompress($buffer);
}
$header = lgsl_cut_byte($buffer, 4);
if ($header != "\xFF\xFF\xFF\xFF") { return FALSE; } // SOMETHING WENT WRONG
//---------------------------------------------------------+
$response_type = lgsl_cut_byte($buffer, 1);
if ($response_type == "I") // SOURCE INFO ( HALF-LIFE 2 )
{
lgsl_cut_byte($buffer, 1);
$server['s']['name'] = lgsl_cut_string($buffer);
$server['s']['map'] = lgsl_cut_string($buffer);
$server['s']['game'] = lgsl_cut_string($buffer);
$server['e']['description'] = lgsl_cut_string($buffer);
$server['e']['appid'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['bots'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['dedicated'] = lgsl_cut_byte($buffer, 1);
$server['e']['os'] = lgsl_cut_byte($buffer, 1);
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['anticheat'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['version'] = lgsl_cut_string($buffer);
}
elseif ($response_type == "m") // HALF-LIFE 1 INFO
{
$server_ip = lgsl_cut_string($buffer);
$server['s']['name'] = lgsl_cut_string($buffer);
$server['s']['map'] = lgsl_cut_string($buffer);
$server['s']['game'] = lgsl_cut_string($buffer);
$server['e']['description'] = lgsl_cut_string($buffer);
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['netcode'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['dedicated'] = lgsl_cut_byte($buffer, 1);
$server['e']['os'] = lgsl_cut_byte($buffer, 1);
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
if (ord(lgsl_cut_byte($buffer, 1))) // MOD FIELDS ( OFF FOR SOME HALFLIFEWON-VALVE SERVERS )
{
$server['e']['mod_url_info'] = lgsl_cut_string($buffer);
$server['e']['mod_url_download'] = lgsl_cut_string($buffer);
$buffer = substr($buffer, 1);
$server['e']['mod_version'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
$server['e']['mod_size'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
$server['e']['mod_server_side'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['mod_custom_dll'] = ord(lgsl_cut_byte($buffer, 1));
}
$server['e']['anticheat'] = ord(lgsl_cut_byte($buffer, 1));
$server['e']['bots'] = ord(lgsl_cut_byte($buffer, 1));
}
elseif ($response_type == "D") // SOURCE AND HALF-LIFE 1 PLAYERS
{
$returned = ord(lgsl_cut_byte($buffer, 1));
$player_key = 0;
while ($buffer)
{
$server['p'][$player_key]['pid'] = ord(lgsl_cut_byte($buffer, 1));
$server['p'][$player_key]['name'] = lgsl_cut_string($buffer);
$server['p'][$player_key]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
$server['p'][$player_key]['time'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
/*$server['p'][$player_key]['deaths'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "i");
$server['p'][$player_key]['team'] = lgsl_cut_string($buffer);
$server['p'][$player_key]['ping'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
$server['p'][$player_key]['moneys'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");*/
$player_key ++;
}
}
elseif ($response_type == "E") // SOURCE AND HALF-LIFE 1 RULES
{
$returned = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
while ($buffer)
{
$item_key = strtolower(lgsl_cut_string($buffer));
$item_value = lgsl_cut_string($buffer);
$server['e'][$item_key] = $item_value;
}
}
//---------------------------------------------------------+
// IF ONLY [s] WAS REQUESTED THEN REMOVE INCOMPLETE [e]
if ($lgsl_need['s'] && !$lgsl_need['e']) { $server['e'] = array(); }
if ($lgsl_need['s']) { $lgsl_need['s'] = FALSE; }
elseif ($lgsl_need['e']) { $lgsl_need['e'] = FALSE; }
elseif ($lgsl_need['p']) { $lgsl_need['p'] = FALSE; }
//---------------------------------------------------------+
return TRUE;
}